@lotto24-angular/imports-orchestrator
Version:
Orchestrate dynamically imported components in Angular applications
21 lines • 3.86 kB
JavaScript
import { mountComponent, resolveConstructorsFromESModule, } from './util';
import { ViewContainerRef } from '@angular/core';
import { assertStandalone, resolvePromiseWithRetries, } from '@lotto24-angular/util';
export function importStandalone(promise) {
return async (item) => {
const resolvedImport = (await resolvePromiseWithRetries(promise));
const constructor = resolveConstructorsFromESModule(resolvedImport).shift();
if (!constructor) {
throw new Error('class not found');
}
assertStandalone(constructor);
const viewContainerRef = item.injector.get(ViewContainerRef);
const componentRef = viewContainerRef.createComponent(constructor, {
injector: item.injector,
});
await mountComponent(componentRef, item);
item.lifecycle?.importComponent?.emit(componentRef);
return componentRef;
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LXN0YW5kYWxvbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2ltcG9ydHMtb3JjaGVzdHJhdG9yL3NyYy9saWIvcmVzb2x2ZS9pbXBvcnQtc3RhbmRhbG9uZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsY0FBYyxFQUNkLCtCQUErQixHQUNoQyxNQUFNLFFBQVEsQ0FBQztBQUVoQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUNMLGdCQUFnQixFQUNoQix5QkFBeUIsR0FDMUIsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQixNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLE9BQStCO0lBRS9CLE9BQU8sS0FBSyxFQUFFLElBQWtDLEVBQUUsRUFBRTtRQUNsRCxNQUFNLGNBQWMsR0FBRyxDQUFDLE1BQU0seUJBQXlCLENBQUMsT0FBTyxDQUFDLENBRXBELENBQUM7UUFDYixNQUFNLFdBQVcsR0FBRywrQkFBK0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUU1RSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3JDLENBQUM7UUFFRCxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUU5QixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFN0QsTUFBTSxZQUFZLEdBQUcsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRTtZQUNqRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDeEIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxjQUFjLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxTQUFTLEVBQUUsZUFBZSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNwRCxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29uc3RydWN0b3IsXG4gIEVTTW9kdWxlLFxuICBtb3VudENvbXBvbmVudCxcbiAgcmVzb2x2ZUNvbnN0cnVjdG9yc0Zyb21FU01vZHVsZSxcbn0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7IEltcG9ydHNPcmNoZXN0cmF0b3JRdWV1ZUl0ZW0gfSBmcm9tICcuLi9zZXJ2aWNlJztcbmltcG9ydCB7IFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEltcG9ydFJlc29sdmVGbiB9IGZyb20gJy4vaW1wb3J0LXJlc29sdmUtZm4uaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIGFzc2VydFN0YW5kYWxvbmUsXG4gIHJlc29sdmVQcm9taXNlV2l0aFJldHJpZXMsXG59IGZyb20gJ0Bsb3R0bzI0LWFuZ3VsYXIvdXRpbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbXBvcnRTdGFuZGFsb25lKFxuICBwcm9taXNlOiAoKSA9PiBQcm9taXNlPHVua25vd24+XG4pOiBJbXBvcnRSZXNvbHZlRm4ge1xuICByZXR1cm4gYXN5bmMgKGl0ZW06IEltcG9ydHNPcmNoZXN0cmF0b3JRdWV1ZUl0ZW0pID0+IHtcbiAgICBjb25zdCByZXNvbHZlZEltcG9ydCA9IChhd2FpdCByZXNvbHZlUHJvbWlzZVdpdGhSZXRyaWVzKHByb21pc2UpKSBhc1xuICAgICAgfCBDb25zdHJ1Y3RvclxuICAgICAgfCBFU01vZHVsZTtcbiAgICBjb25zdCBjb25zdHJ1Y3RvciA9IHJlc29sdmVDb25zdHJ1Y3RvcnNGcm9tRVNNb2R1bGUocmVzb2x2ZWRJbXBvcnQpLnNoaWZ0KCk7XG5cbiAgICBpZiAoIWNvbnN0cnVjdG9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsYXNzIG5vdCBmb3VuZCcpO1xuICAgIH1cblxuICAgIGFzc2VydFN0YW5kYWxvbmUoY29uc3RydWN0b3IpO1xuXG4gICAgY29uc3Qgdmlld0NvbnRhaW5lclJlZiA9IGl0ZW0uaW5qZWN0b3IuZ2V0KFZpZXdDb250YWluZXJSZWYpO1xuXG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gdmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29uc3RydWN0b3IsIHtcbiAgICAgIGluamVjdG9yOiBpdGVtLmluamVjdG9yLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgbW91bnRDb21wb25lbnQoY29tcG9uZW50UmVmLCBpdGVtKTtcbiAgICBpdGVtLmxpZmVjeWNsZT8uaW1wb3J0Q29tcG9uZW50Py5lbWl0KGNvbXBvbmVudFJlZik7XG4gICAgcmV0dXJuIGNvbXBvbmVudFJlZjtcbiAgfTtcbn1cbiJdfQ==