@nestjs/graphql
Version:
Nest - modern, fast, powerful node.js web framework (@graphql)
48 lines (47 loc) • 1.75 kB
JavaScript
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;
}, {});
}
}