nestjs / terminus

Terminus module for Nest framework (node.js) :robot:
https://nestjs.com/
MIT License
675 stars 100 forks source link

Cannot use @nestjs/terminus 6.5.6 with @nestjs/microservices 7.0.1 #594

Closed revant closed 4 years ago

revant commented 4 years ago

I'm submitting a...


[x] Regression 
[x] Bug report
[ ] Feature request
[ ] Documentation issue or request
[ ] Support request => Please do not submit support request here, instead post your question on Stack Overflow.

Current behavior

Cannot use @nestjs/terminus 6.5.6 with @nestjs/microservices 7.0.1

Expected behavior

compile nestjs app when @nestjs/microservices and @nestjs/terminus are used

Minimal reproduction of the problem with instructions

Create new NestJS app with @nestjs/cli 7.0.0

nest new nestjs-terminus-issue && cd nestjs-terminus-issue

Install dependencies

npm i --save @nestjs/microservices @nestjs/terminus @godaddy/terminus

Change following files:

modify main.ts

import { NestFactory } from '@nestjs/core';
import { Transport, MicroserviceOptions } from '@nestjs/microservices';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.connectMicroservice<MicroserviceOptions>({
    transport: Transport.TCP,
    options: { host: '0.0.0.0', port: 3001 },
  });
  await app.startAllMicroservicesAsync();
  await app.listen(3000);
}
bootstrap();

add src/terminus-options.service.ts

import {
  TerminusEndpoint,
  TerminusOptionsFactory,
  TerminusModuleOptions,
  MicroserviceHealthIndicator,
} from '@nestjs/terminus';
import { Injectable } from '@nestjs/common';
import { Transport } from '@nestjs/microservices';

@Injectable()
export class TerminusOptionsService implements TerminusOptionsFactory {
  constructor(private readonly microservice: MicroserviceHealthIndicator) {}

  createTerminusOptions(): TerminusModuleOptions {
    const healthEndpoint: TerminusEndpoint = {
      url: 'healthz',
      healthIndicators: [
        async () =>
          this.microservice.pingCheck('service', {
            transport: Transport.TCP,
            options: { host: '0.0.0.0', port: 3001 },
          }),
      ],
    };

    return {
      endpoints: [healthEndpoint],
    };
  }
}

update app-module.ts

import { Module } from '@nestjs/common';
import { TerminusModule } from '@nestjs/terminus';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { TerminusOptionsService } from './terminus-options.service';

@Module({
  imports: [TerminusModule.forRootAsync({ useClass: TerminusOptionsService })],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

execute nest start

Error:

node_modules/@nestjs/terminus/dist/health-indicators/microservice/grpc.health.d.ts:1:29 - error TS2307: Cannot find modul
e '@nestjs/common/interfaces/microservices/microservice-configuration.interface'.

1 import { GrpcOptions } from '@nestjs/common/interfaces/microservices/microservice-configuration.interface';
                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
node_modules/@nestjs/terminus/dist/health-indicators/microservice/microservice.health.d.ts:1:93 - error TS2307: Cannot find module '@nestjs/common/interfaces/microservices/microservice-configuration.interface'.

1 import { RedisOptions, NatsOptions, MqttOptions, GrpcOptions, RmqOptions, TcpOptions } from '@nestjs/common/interfaces/microservices/microservice-configuration.interface';
                                                                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Found 2 error(s).

What is the motivation / use case for changing the behavior?

Use health check with apps made with nestjs 7

Environment


Nest version: 7.0.1


For Tooling issues:
- Node version: v13.9.0  
- Platform: Linux             
revant commented 4 years ago