UNPKG

@nestjs/graphql

Version:

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

48 lines (47 loc) 1.75 kB
export class BaseExplorerService { getModules(modulesContainer, include) { if (!modulesContainer) { return []; } if (!include || include.length === 0) { return [...modulesContainer.values()]; } const explicitlyWhitelisted = this.includeWhitelisted(modulesContainer, include); const modulesToInclude = []; const toCheck = [...explicitlyWhitelisted]; while (toCheck.length) { const moduleRef = toCheck.pop(); if (!modulesToInclude.includes(moduleRef)) { modulesToInclude.push(moduleRef); toCheck.push(...moduleRef.imports); } } return modulesToInclude; } includeWhitelisted(modulesContainer, include) { const modules = [...modulesContainer.values()]; return modules.filter(({ metatype }) => include.some((item) => item === metatype)); } flatMap(modules, callback) { return modules.reduce((collected, moduleRef) => { const providers = [...moduleRef.providers.values()]; for (const wrapper of providers) { const result = callback(wrapper, moduleRef); if (Array.isArray(result)) { collected.push(...result.filter(Boolean)); } else if (result) { collected.push(result); } } return collected; }, []); } groupMetadata(resolvers) { return resolvers.reduce((grouped, metadata) => { grouped[metadata.type] ??= {}; grouped[metadata.type][metadata.name] = metadata.callback; return grouped; }, {}); } }