UNPKG

typegraphql-nestjs

Version:

Basic integration of TypeGraphQL in NestJS. Allows to use TypeGraphQL features while integrating with NestJS modules system and dependency injector.

65 lines (64 loc) 3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const common_1 = require("@nestjs/common"); const core_1 = require("@nestjs/core"); const request_constants_1 = require("@nestjs/core/router/request/request-constants"); const type_graphql_1 = require("type-graphql"); let OptionsPreparatorService = class OptionsPreparatorService { constructor(moduleRef, modulesContainer) { this.moduleRef = moduleRef; this.modulesContainer = modulesContainer; } prepareOptions(featureModuleToken) { const globalResolvers = (0, type_graphql_1.getMetadataStorage)().resolverClasses.map(metadata => metadata.target); const featureModuleOptionsArray = []; const resolversClasses = []; const providersMetadataMap = new Map(); for (const module of this.modulesContainer.values()) { for (const provider of module.providers.values()) { if (typeof provider.name === "string" && provider.name.includes(featureModuleToken)) { featureModuleOptionsArray.push(provider.instance); } if (globalResolvers.includes(provider.metatype)) { resolversClasses.push(provider.metatype); } providersMetadataMap.set(provider.metatype, provider); } } const orphanedTypes = (0, common_1.flatten)(featureModuleOptionsArray.map(it => it.orphanedTypes)); const referenceResolversArray = [...featureModuleOptionsArray].filter(it => it.referenceResolvers); const referenceResolvers = referenceResolversArray.length > 0 ? Object.fromEntries(referenceResolversArray.flatMap(it => Object.entries(it.referenceResolvers))) : undefined; const container = { get: (cls, { context }) => { let contextId = context[request_constants_1.REQUEST_CONTEXT_ID]; if (!contextId) { contextId = core_1.ContextIdFactory.create(); context[request_constants_1.REQUEST_CONTEXT_ID] = contextId; } const providerMetadata = providersMetadataMap.get(cls); if (providerMetadata.isDependencyTreeStatic() && !providerMetadata.isTransient) { return this.moduleRef.get(cls, { strict: false }); } return this.moduleRef.resolve(cls, contextId, { strict: false }); }, }; return { resolversClasses, orphanedTypes, container, featureModuleOptionsArray, referenceResolvers, }; } }; OptionsPreparatorService = tslib_1.__decorate([ (0, common_1.Injectable)(), tslib_1.__metadata("design:paramtypes", [core_1.ModuleRef, core_1.ModulesContainer]) ], OptionsPreparatorService); exports.default = OptionsPreparatorService;