UNPKG

@nestjs/microservices

Version:

Nest - modern, fast, powerful node.js web framework (@microservices)

57 lines (56 loc) 2.89 kB
import { ClientProxyFactory } from './client/index.js'; import { ClientsContainer } from './container.js'; import { ExceptionFiltersContext } from './context/exception-filters-context.js'; import { RpcContextCreator } from './context/rpc-context-creator.js'; import { RpcProxy } from './context/rpc-proxy.js'; import { ListenersController } from './listeners-controller.js'; import { RuntimeException, GuardsConsumer, GuardsContextCreator, Injector, InterceptorsConsumer, InterceptorsContextCreator, PipesConsumer, PipesContextCreator, } from '@nestjs/core/internal'; export class MicroservicesModule { clientsContainer = new ClientsContainer(); listenersController; appOptions; register(container, graphInspector, config, options) { this.appOptions = options; const exceptionFiltersContext = new ExceptionFiltersContext(container, config); const contextCreator = new RpcContextCreator(new RpcProxy(), exceptionFiltersContext, new PipesContextCreator(container, config), new PipesConsumer(), new GuardsContextCreator(container, config), new GuardsConsumer(), new InterceptorsContextCreator(container, config), new InterceptorsConsumer(), config); const injector = new Injector({ preview: container.contextOptions?.preview ?? false, instanceDecorator: container.contextOptions?.instrument?.instanceDecorator, }); this.listenersController = new ListenersController(this.clientsContainer, contextCreator, container, injector, ClientProxyFactory, exceptionFiltersContext, graphInspector); } setupListeners(container, serverInstance) { if (!this.listenersController) { throw new RuntimeException(); } const modules = container.getModules(); modules.forEach(({ controllers }, moduleRef) => this.bindListeners(controllers, serverInstance, moduleRef)); } setupClients(container) { if (!this.listenersController) { throw new RuntimeException(); } if (this.appOptions?.preview) { return; } const modules = container.getModules(); modules.forEach(({ controllers, providers }) => { this.bindClients(controllers); this.bindClients(providers); }); } bindListeners(controllers, serverInstance, moduleName) { controllers.forEach(wrapper => this.listenersController.registerPatternHandlers(wrapper, serverInstance, moduleName)); } bindClients(items) { items.forEach(({ instance, isNotMetatype }) => { !isNotMetatype && this.listenersController.assignClientsToProperties(instance); }); } async close() { const clients = this.clientsContainer.getAllClients(); await Promise.all(clients.map(client => client.close())); this.clientsContainer.clear(); } }