UNPKG

@nestjs/graphql

Version:

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

35 lines (34 loc) 1.23 kB
import { METADATA_FACTORY_NAME } from './plugin-constants.js'; export class MetadataLoader { static addRefreshHook(hook) { // Hooks must run in registration (insertion) order so that nested mapped // type compositions (e.g. PartialType(OmitType(Foo))) refresh their inner // wrappers before the outer wrappers read fields from them. return MetadataLoader.refreshHooks.push(hook); } async load(metadata) { const pkgMetadata = metadata['@nestjs/graphql']; if (!pkgMetadata) { return; } const { models } = pkgMetadata; if (models) { await this.applyMetadata(models); } this.runHooks(); } runHooks() { MetadataLoader.refreshHooks.forEach((hook) => hook()); } async applyMetadata(meta) { const loadPromises = meta.map(async ([fileImport, fileMeta]) => { const fileRef = await fileImport; Object.keys(fileMeta).map((key) => { const clsRef = fileRef[key]; clsRef[METADATA_FACTORY_NAME] = () => fileMeta[key]; }); }); await Promise.all(loadPromises); } } MetadataLoader.refreshHooks = new Array();