UNPKG

@lotto24-angular/imports-orchestrator

Version:

Orchestrate dynamically imported components in Angular applications

27 lines 5.33 kB
import { importsOrchestratorFeature, ImportsOrchestratorFeatureKind, } from './internal'; import { IMPORTS_ORCHESTRATOR_FEATURE_ORCHESTRATION, IMPORTS_ORCHESTRATOR_FEATURE_LOGGER } from "../internal"; export function withOrchestration(orchestration) { const providers = [ { provide: IMPORTS_ORCHESTRATOR_FEATURE_ORCHESTRATION, useFactory: (logger) => validateOrchestration(orchestration, logger), deps: [IMPORTS_ORCHESTRATOR_FEATURE_LOGGER], }, ]; return importsOrchestratorFeature(ImportsOrchestratorFeatureKind.Orchestration, providers); } function validateOrchestration(orchestration, logger) { const conflicts = findConflictingPriorities(orchestration).map(([priority, imports]) => `conflicting priority=${priority} for @imports="${imports.join('", "')}"`); if (conflicts.length > 0) { logger.warn(conflicts.join('\n')); } return orchestration; } function findConflictingPriorities(orchestration) { const byPriority = Object.entries(orchestration).reduce((acc, [key, value]) => { acc[value] = [...(acc[value] || []), key]; return acc; }, {}); return Object.entries(byPriority).filter(([order, imports]) => imports.length > 1); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JjaGVzdHJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvaW1wb3J0cy1vcmNoZXN0cmF0b3Ivc3JjL2xpYi9mZWF0dXJlcy9vcmNoZXN0cmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCwwQkFBMEIsRUFDMUIsOEJBQThCLEdBRS9CLE1BQU0sWUFBWSxDQUFDO0FBRXBCLE9BQU8sRUFBQywwQ0FBMEMsRUFBRSxtQ0FBbUMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUc1RyxNQUFNLFVBQVUsaUJBQWlCLENBQy9CLGFBQW1DO0lBRW5DLE1BQU0sU0FBUyxHQUFlO1FBQzVCO1lBQ0UsT0FBTyxFQUFFLDBDQUEwQztZQUNuRCxVQUFVLEVBQUUsQ0FBQyxNQUFtQixFQUFFLEVBQUUsQ0FDbEMscUJBQXFCLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQztZQUM5QyxJQUFJLEVBQUUsQ0FBQyxtQ0FBbUMsQ0FBQztTQUM1QztLQUNGLENBQUM7SUFDRixPQUFPLDBCQUEwQixDQUMvQiw4QkFBOEIsQ0FBQyxhQUFhLEVBQzVDLFNBQVMsQ0FDVixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMscUJBQXFCLENBQzVCLGFBQW1DLEVBQ25DLE1BQW1CO0lBRW5CLE1BQU0sU0FBUyxHQUFHLHlCQUF5QixDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FDNUQsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLENBQ3RCLHdCQUF3QixRQUFRLGtCQUFrQixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQzVFLENBQUM7SUFFRixJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDekIsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELE9BQU8sYUFBYSxDQUFDO0FBQ3ZCLENBQUM7QUFFRCxTQUFTLHlCQUF5QixDQUFDLGFBQW1DO0lBQ3BFLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxDQUVwRCxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1FBQ3ZCLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDMUMsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFUCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUN0QyxDQUFDLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FDekMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBJbXBvcnRzT3JjaGVzdHJhdGlvbixcbiAgaW1wb3J0c09yY2hlc3RyYXRvckZlYXR1cmUsXG4gIEltcG9ydHNPcmNoZXN0cmF0b3JGZWF0dXJlS2luZCxcbiAgSW1wb3J0c09yY2hlc3RyYXRvck9yY2hlc3RyYXRpb24sXG59IGZyb20gJy4vaW50ZXJuYWwnO1xuaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7SU1QT1JUU19PUkNIRVNUUkFUT1JfRkVBVFVSRV9PUkNIRVNUUkFUSU9OLCBJTVBPUlRTX09SQ0hFU1RSQVRPUl9GRUFUVVJFX0xPR0dFUn0gZnJvbSBcIi4uL2ludGVybmFsXCI7XG5pbXBvcnQge0NvbnNvbGVMaWtlfSBmcm9tIFwiLi9sb2dnZXJcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhPcmNoZXN0cmF0aW9uKFxuICBvcmNoZXN0cmF0aW9uOiBJbXBvcnRzT3JjaGVzdHJhdGlvblxuKTogSW1wb3J0c09yY2hlc3RyYXRvck9yY2hlc3RyYXRpb24ge1xuICBjb25zdCBwcm92aWRlcnM6IFByb3ZpZGVyW10gPSBbXG4gICAge1xuICAgICAgcHJvdmlkZTogSU1QT1JUU19PUkNIRVNUUkFUT1JfRkVBVFVSRV9PUkNIRVNUUkFUSU9OLFxuICAgICAgdXNlRmFjdG9yeTogKGxvZ2dlcjogQ29uc29sZUxpa2UpID0+XG4gICAgICAgIHZhbGlkYXRlT3JjaGVzdHJhdGlvbihvcmNoZXN0cmF0aW9uLCBsb2dnZXIpLFxuICAgICAgZGVwczogW0lNUE9SVFNfT1JDSEVTVFJBVE9SX0ZFQVRVUkVfTE9HR0VSXSxcbiAgICB9LFxuICBdO1xuICByZXR1cm4gaW1wb3J0c09yY2hlc3RyYXRvckZlYXR1cmUoXG4gICAgSW1wb3J0c09yY2hlc3RyYXRvckZlYXR1cmVLaW5kLk9yY2hlc3RyYXRpb24sXG4gICAgcHJvdmlkZXJzXG4gICk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlT3JjaGVzdHJhdGlvbihcbiAgb3JjaGVzdHJhdGlvbjogSW1wb3J0c09yY2hlc3RyYXRpb24sXG4gIGxvZ2dlcjogQ29uc29sZUxpa2Vcbikge1xuICBjb25zdCBjb25mbGljdHMgPSBmaW5kQ29uZmxpY3RpbmdQcmlvcml0aWVzKG9yY2hlc3RyYXRpb24pLm1hcChcbiAgICAoW3ByaW9yaXR5LCBpbXBvcnRzXSkgPT5cbiAgICAgIGBjb25mbGljdGluZyBwcmlvcml0eT0ke3ByaW9yaXR5fSBmb3IgQGltcG9ydHM9XCIke2ltcG9ydHMuam9pbignXCIsIFwiJyl9XCJgXG4gICk7XG5cbiAgaWYgKGNvbmZsaWN0cy5sZW5ndGggPiAwKSB7XG4gICAgbG9nZ2VyLndhcm4oY29uZmxpY3RzLmpvaW4oJ1xcbicpKTtcbiAgfVxuXG4gIHJldHVybiBvcmNoZXN0cmF0aW9uO1xufVxuXG5mdW5jdGlvbiBmaW5kQ29uZmxpY3RpbmdQcmlvcml0aWVzKG9yY2hlc3RyYXRpb246IEltcG9ydHNPcmNoZXN0cmF0aW9uKSB7XG4gIGNvbnN0IGJ5UHJpb3JpdHkgPSBPYmplY3QuZW50cmllcyhvcmNoZXN0cmF0aW9uKS5yZWR1Y2U8e1xuICAgIFtrZXk6IG51bWJlcl06IHN0cmluZ1tdO1xuICB9PigoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICBhY2NbdmFsdWVdID0gWy4uLihhY2NbdmFsdWVdIHx8IFtdKSwga2V5XTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGJ5UHJpb3JpdHkpLmZpbHRlcihcbiAgICAoW29yZGVyLCBpbXBvcnRzXSkgPT4gaW1wb3J0cy5sZW5ndGggPiAxXG4gICk7XG59XG4iXX0=