UNPKG

graphql-modules

Version:

Create reusable, maintainable, testable and extendable GraphQL modules

49 lines (48 loc) 1.83 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.instantiateSingletonProviders = instantiateSingletonProviders; exports.createGlobalProvidersMap = createGlobalProvidersMap; exports.attachGlobalProvidersMap = attachGlobalProvidersMap; exports.duplicatedGlobalTokenError = duplicatedGlobalTokenError; const di_1 = require("../di"); function instantiateSingletonProviders({ appInjector, modulesMap, }) { appInjector.instantiateAll(); modulesMap.forEach((mod) => { mod.injector.instantiateAll(); }); } function createGlobalProvidersMap({ modules, scope, }) { const globalProvidersMap = {}; const propType = scope === di_1.Scope.Singleton ? 'singletonProviders' : 'operationProviders'; modules.forEach((mod) => { mod[propType].forEach((provider) => { if (provider.factory.isGlobal) { const key = provider.key.id; if (globalProvidersMap[key]) { throw duplicatedGlobalTokenError(provider, [ mod.id, globalProvidersMap[key], ]); } globalProvidersMap[key] = mod.id; } }); }); return globalProvidersMap; } function attachGlobalProvidersMap({ injector, globalProvidersMap, moduleInjectorGetter, }) { injector._globalProvidersMap = { has(key) { return typeof globalProvidersMap[key] === 'string'; }, get(key) { return moduleInjectorGetter(globalProvidersMap[key]); }, }; } function duplicatedGlobalTokenError(provider, modules) { return Error([ `Failed to define '${provider.key.displayName}' token as global.`, `Token provided by two modules: '${modules.join("', '")}'`, ].join(' ')); }