{"version":3,"file":"dotglitch-ngx-lazy-loader.mjs","sources":["../../src/lib/lazy-loader/types.ts","../../src/utils/index.ts","../../src/utils/logger.ts","../../src/lib/lazy-loader/ngx-lazy-loader.service.ts","../../src/lib/lazy-loader/ngx-lazy-loader.component.ts","../../src/lib/lazy-loader/ngx-lazy-loader.component.html","../../src/lib/lazy-loader/ngx-lazy-loader.module.ts","../../src/index.ts","../../src/dotglitch-ngx-lazy-loader.ts"],"sourcesContent":["import { ComponentType } from '@angular/cdk/portal';\nimport { TemplateRef } from '@angular/core';\n\nexport enum ComponentResolveStrategy {\n    /**\n     * Match the fist component we find\n     * (best used for standalone components)\n     * @default\n     */\n    PickFirst,\n    /**\n     * Perform an Exact ID to Classname of the Component\n     * case sensitive, zero tolerance.\n     */\n    MatchIdToClassName,\n    /**\n     * Perform a fuzzy ID to classname match\n     * case insensitive, mutes symbols\n     * ignores \"Component\" and \"Module\" postfixes on class\n     * names\n     */\n    FuzzyIdClassName,\n\n    /**\n     * Use a user-provided component match function\n     */\n    Custom\n}\n\nexport type NgxLazyLoaderConfig = Partial<{\n    entries: ComponentRegistration[],\n\n    notFoundTemplate: TemplateRef<any>,\n    notFoundComponent: ComponentType<any>,\n\n    errorTemplate: TemplateRef<any>,\n    errorComponent: ComponentType<any>,\n\n    loaderDistractorTemplate: TemplateRef<any>,\n    loaderDistractorComponent: ComponentType<any>,\n\n    logger: {\n        log: (...args: any) => void,\n        warn: (...args: any) => void,\n        err: (...args: any) => void;\n    },\n    /**\n     * What strategy should be used to resolve components\n     * @default ComponentResolveStrategy.FuzzyIdClassName\n     */\n    componentResolveStrategy: ComponentResolveStrategy,\n    customResolver: (registry: (CompiledComponent | CompiledModule)[]) => Object\n}>;\n\ntype RegistrationConfig = {\n    /**\n     * Specify a group to categorize components. If not specified,\n     * will default to the `default` group.\n     */\n    group?: string,\n    /**\n     * load: () => import('./pages/my-page/my-page.component')\n     */\n    load: () => any,\n\n    /**\n     * Called before a component is loaded.\n     * If it returns `false` the component will not be loaded.\n     */\n    // canActivate: () => boolean\n\n    [key: string]: any\n}\n\nexport type ComponentRegistration = (\n    ({ id: string } & RegistrationConfig) |\n    ({ matcher: string[] | RegExp | ((value: string) => boolean); } & RegistrationConfig)\n);\n\nexport type DynamicRegistrationArgs<T = any> = {\n    id: string,\n    group?: string,\n    matcher?: string[] | RegExp | ((val: string) => boolean),\n    component?: T,\n    load?: () => any;\n}\n\n/**\n * This is roughly a compiled component\n */\nexport type CompiledComponent = {\n    (): CompiledComponent,\n    ɵfac: Function,\n    ɵcmp: {\n        consts;\n        contentQueries;\n        data;\n        declaredInputs;\n        decls;\n        dependencies;\n        directiveDefs;\n        encapsulation;\n        exportAs;\n        factory;\n        features;\n        findHostDirectiveDefs;\n        getStandaloneInjector;\n        hostAttrs;\n        hostBindings;\n        hostDirectives;\n        hostVars;\n        id: string;\n        inputs;\n        ngContentSelectors;\n        onPush: boolean;\n        outputs;\n        pipeDefs;\n        providersResolver;\n        schemas;\n        selectors: string[];\n        setInput;\n        standalone: boolean;\n        styles: string[];\n        tView;\n        template;\n        type: Function;\n        vars: number;\n        viewQuery;\n    };\n};\n\n/**\n * This is roughly a compiled module\n */\nexport type CompiledModule = {\n    (): CompiledModule,\n    ɵfac: Function,\n    ɵinj: {\n        providers: any[],\n        imports: any[];\n    },\n    ɵmod: {\n        bootstrap: any[],\n        declarations: Function[],\n        exports: any[],\n        id: unknown,\n        imports: any[],\n        schemas: unknown,\n        transitiveCompileScopes: unknown,\n        type: Function;\n    };\n};\n\nexport type CompiledBundle = { [key: string]: CompiledComponent | CompiledModule; };\n\n\n","\n/**\n * Convert a string `fooBAR baz_160054''\"1]\"` into a slug: `foobar-baz-1600541`\n */\nexport const stringToSlug = (text: string) =>\n    (text || '')\n        .trim()\n        .toLowerCase()\n        .replace(/[\\-_+ ]/g, '-')\n        .replace(/[^a-z0-9\\-]/g, '');\n\n","\nexport const Logger = (context: string, contextColor: string, textColor: string = \"#03a9f4\") => ({\n\n    log: (message: string, ...args) => {\n        console.log(`%c[${context}] %c${message}`, 'color: ' + contextColor, 'color: ' + textColor, ...args);\n    },\n    warn: (message: string, ...args) => {\n        console.warn(`%c[${context}] %c${message}`, 'color: ' + contextColor, 'color: ' + textColor, ...args);\n    },\n\n    err: (message: string, ...args) => {\n        console.error(`%c[${context}] %c${message}`, 'color: ' + contextColor, 'color: ' + textColor, ...args);\n    },\n    error: (message: string, ...args) => {\n        console.error(`%c[${context}] %c${message}`, 'color: ' + contextColor, 'color: ' + textColor, ...args);\n    }\n\n});\n","import { Inject, Injectable, InjectionToken, isDevMode } from '@angular/core';\nimport { CompiledComponent, CompiledModule, ComponentRegistration, ComponentResolveStrategy, DynamicRegistrationArgs, NgxLazyLoaderConfig } from './types';\nimport { stringToSlug } from '../../utils';\nimport { Logger } from '../../utils/logger';\n\n// Monkey-patch the type of these symbols.\nconst $id = Symbol(\"id\") as any as string;\nconst $group = Symbol(\"group\") as any as string;\n\nexport const NGX_LAZY_LOADER_CONFIG = new InjectionToken<NgxLazyLoaderConfig>('config');\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class NgxLazyLoaderService {\n    private get err() { return NgxLazyLoaderService.config.logger.err; }\n    private get log() { return NgxLazyLoaderService.config.logger.log; }\n    private get warn() { return NgxLazyLoaderService.config.logger.warn; }\n\n    // A proxied registry that mutates reference keys\n    private static registry: {\n        [key: string]: ComponentRegistration[];\n    } = {};\n\n    public static config: NgxLazyLoaderConfig;\n\n    constructor(@Inject(NGX_LAZY_LOADER_CONFIG) config: NgxLazyLoaderConfig = {}) {\n        // Ensure this is singleton and works regardless of special instancing requirements.\n        NgxLazyLoaderService.configure(config);\n    }\n\n    private static configure(config: NgxLazyLoaderConfig) {\n        const { log, warn, err } = Logger(\"ngx-lazy-loader\", \"#009688\");\n\n        this.config = {\n            componentResolveStrategy: ComponentResolveStrategy.PickFirst,\n            logger: {\n                log,\n                warn,\n                err\n            },\n            ...config\n        };\n\n        config.entries?.forEach(e => this.addComponentToRegistry(e))\n\n        // If a custom resolution strategy is provided but no resolution function is passed,\n        // we throw an error\n        if (\n            this.config.componentResolveStrategy == ComponentResolveStrategy.Custom &&\n            !this.config.customResolver\n        ) {\n            throw new Error(\"Cannot initialize. Configuration specifies a custom resolve matcher but none was provided\");\n        }\n\n        if (this.config.loaderDistractorComponent && this.config.loaderDistractorTemplate)\n            throw new Error(\"Cannot have both a Component and Template for Distractor view.\")\n        if (this.config.errorComponent && this.config.errorTemplate)\n            throw new Error(\"Cannot have both a Component and Template for Error view.\")\n        if (this.config.notFoundComponent && this.config.notFoundTemplate)\n            throw new Error(\"Cannot have both a Component and Template for NotFound view.\")\n\n    }\n\n    private static addComponentToRegistry(registration: ComponentRegistration) {\n        if (!registration)\n            throw new Error(\"Cannot add <undefined> component into registry.\");\n\n        // Clone the object into our repository and transfer the id into a standardized slug format\n\n        const id = stringToSlug(registration.id ?? Date.now().toString()); // purge non-basic ASCII chars\n        const group = registration.group || \"default\";\n\n        registration[$id] = id;\n        registration[$group] = id;\n\n\n        if (!this.registry[group])\n            this.registry[group] = [];\n\n        // Check if we already have a registration for the component\n        // if (this.registry[group] && typeof this.registry[group]['load'] == \"function\") {\n        //     // Warn the developer that the state is problematic\n        //     this.config.logger.warn(\n        //         `A previous entry already exists for ${id}! The old registration will be overridden.` +\n        //         `Please ensure you use groups if you intend to have duplicate component ids. ` +\n        //         `If this was intentional, first remove the old component from the registry before adding a new instance`\n        //     );\n\n        //     // If we're in dev mode, break the loader surface\n        //     if (isDevMode())\n        //         return;\n        // }\n\n        this.registry[group].push(registration);\n    }\n\n    /**\n     * Register an Angular component\n     * @param id identifier that is used to resolve the component\n     * @param group\n     * @param component Angular Component Class constructor\n     */\n    public registerComponent<T extends { new(...args: any[]): InstanceType<T>; }>(args: DynamicRegistrationArgs<T>) {\n        if (this.isComponentRegistered(args.id, args.group)) {\n            this.log(`Will not re-register component '${args.id}' in group '${args.group || 'default'}' `);\n            return;\n        }\n\n        NgxLazyLoaderService.addComponentToRegistry({\n            id: stringToSlug(args.id),\n            matcher: args.matcher,\n            group: stringToSlug(args.group || \"default\"),\n            load: args.load || (() => args.component)\n        });\n    }\n\n    /**\n     *\n     * @param id\n     * @param group\n     */\n    public unregisterComponent(id: string, group = \"default\") {\n        const _id = stringToSlug(id);\n        const _group = stringToSlug(group);\n\n        if (!this.resolveRegistrationEntry(id, group))\n            throw new Error(\"Cannot unregister component ${}! Component is not present in registry\")\n\n        // TODO: handle clearing running instances\n        delete NgxLazyLoaderService.registry[_group][_id];\n    }\n\n\n    /**\n     * Get the registration entry for a component.\n     * Returns null if component is not in the registry.\n     */\n    public resolveRegistrationEntry(value: string, group = \"default\") {\n        const _id = stringToSlug(value);\n        const _group = stringToSlug(group);\n\n        const targetGroup = (NgxLazyLoaderService.registry[_group] || []);\n\n        let items = targetGroup.filter(t => {\n            if (!t) return false;\n\n            // No matcher, check id\n            if (!t.matcher)\n                return t[$id] == _id;\n\n            // Matcher is regex\n            if (t.matcher instanceof RegExp)\n                return t.matcher.test(_id) || t.matcher.test(value);\n\n            // Matcher is string => regex\n            if (typeof t.matcher == 'string') {\n                const rx = new RegExp(t.matcher, 'ui');\n                return rx.test(_id) || rx.test(value);\n            }\n\n            // Matcher is array\n            if (Array.isArray(t.matcher)) {\n                return !!t.matcher.find(e => stringToSlug(e) == _id);\n            }\n\n            // Custom matcher function\n            if (typeof t.matcher == \"function\")\n                return t.matcher(_id);\n\n            return false;\n        });\n\n        if (items.length > 1) {\n            this.warn(\"Resolved multiple components for the provided `[component]` binding. This may cause UI conflicts.\");\n        }\n        if (items.length == 0) {\n            return null;\n        }\n\n        const out = items[0];\n\n        if (out.matcher instanceof RegExp) {\n            const result = _id.match(out.matcher) || value.match(out.matcher);\n\n            return {\n                entry: out,\n                matchGroups: result?.groups\n            };\n        }\n\n        return { entry: out };\n    }\n\n    /**\n     * Check if a component is currently registered\n     * Can be used to validate regex matchers and aliases.\n     */\n    public isComponentRegistered(value: string, group = \"default\") {\n        return !!this.resolveRegistrationEntry(value, group);\n    }\n\n    /**\n     *\n     * @param bundle\n     * @returns The component `Object` if a component was resolved, `null` if no component was found\n     * `false` if the specified strategy was an invalid selection\n     */\n    public resolveComponent(id: string, group: string, modules: (CompiledComponent | CompiledModule)[]): Object | null | false {\n\n        switch (NgxLazyLoaderService.config.componentResolveStrategy) {\n            case ComponentResolveStrategy.PickFirst: {\n\n                return modules[0];\n            }\n\n            // Exact id -> classname match\n            case ComponentResolveStrategy.MatchIdToClassName: {\n                const matches =\n                    modules\n                        .filter(k => k.name == id);\n\n                if (matches.length == 0)\n                    return null;\n\n                return matches[0];\n            }\n            // Fuzzy id -> classname match\n            case ComponentResolveStrategy.FuzzyIdClassName: {\n                const _id = id.replace(/[^a-z0-9_\\-]/ig, '');\n\n                if (_id.length == 0) {\n                    NgxLazyLoaderService.config.logger.err(\"Fuzzy classname matching stripped all symbols from the ID specified!\");\n                    return false;\n                }\n\n                const rx = new RegExp(`^${id}(component|module)?$`, \"i\");\n\n                const matches = modules\n                    .filter(mod => {\n                        let kid = mod.name.replace(/[^a-z0-9_\\-]/ig, '');\n\n                        return rx.test(kid);\n                    });\n\n                if (matches.length > 1) {\n                    NgxLazyLoaderService.config.logger.err(\"Fuzzy classname matching resolved multiple targets!\");\n                    return false;\n                }\n\n                if (matches.length == 0) {\n                    NgxLazyLoaderService.config.logger.err(\"Fuzzy classname matching resolved no targets!\");\n                    return null;\n                }\n\n                return matches[0];\n            }\n            case ComponentResolveStrategy.Custom: {\n                return NgxLazyLoaderService.config.customResolver(modules as any);\n            }\n            default: {\n                return false;\n            }\n        }\n    }\n}\n","import { Input, ViewContainerRef, isDevMode, ComponentRef, EventEmitter, Optional, ViewChild, Component, Inject, Output, NgModule, AfterViewInit, OnInit } from '@angular/core';\nimport { NgComponentOutlet, NgIf, NgTemplateOutlet } from '@angular/common';\nimport { MAT_DIALOG_DATA, } from '@angular/material/dialog';\nimport { DialogRef } from '@angular/cdk/dialog';\nimport { BehaviorSubject, debounceTime, Subscription } from 'rxjs';\nimport { NgxLazyLoaderService } from './ngx-lazy-loader.service';\nimport { stringToSlug } from '../../utils';\nimport { CompiledBundle, NgxLazyLoaderConfig } from './types';\n\n\n@Component({\n    selector: 'ngx-lazy-loader',\n    templateUrl: './ngx-lazy-loader.component.html',\n    styleUrls: [ './ngx-lazy-loader.component.scss' ],\n    imports: [ NgIf, NgComponentOutlet, NgTemplateOutlet ],\n    standalone: true\n})\nexport class NgxLazyLoaderComponent implements AfterViewInit {\n    @ViewChild(\"content\", { read: ViewContainerRef }) targetContainer: ViewContainerRef;\n\n    /**\n     * ! Here be dragons.\n     * Only the bravest of Adventurers can survive the battles below,\n     * and they must be trained and ready for the gruelling journey ahead.\n     * Many a soul has tried to best these Dragons, yet only one has\n     * succeeded since our founding.\n     *\n     * TL;DR -- Don't mess with this unless you know what you're doing.\n     *     This is central to a ton of moving parts -- breaking it will\n     *     cause more collateral damage than you may realize.\n     */\n\n    private _id: string;\n    /**\n     * The id of the component that will be lazy loaded\n     */\n    @Input(\"component\") set id(data: string) {\n        const id = stringToSlug(data);\n\n        // Check if there is a change to the loaded component's id\n        // if it's updated, we destroy and rehydrate the entire container\n        if (this.initialized && this._id != id) {\n            this._id = id;\n            this.ngAfterViewInit();\n        }\n        else {\n            this._id = id;\n        }\n    };\n\n\n    private _group = \"default\";\n    @Input(\"group\") set group(data: string) {\n        const group = stringToSlug(data);\n\n        if (typeof group != \"string\" || !group) return;\n\n        // If the group was updated, retry to bootstrap something into the container.\n        if (this.initialized && this._group != group) {\n            this._group = group;\n\n            this.ngAfterViewInit();\n            return;\n        }\n\n        this._group = group;\n    }\n    get group() { return this._group }\n\n    private _matchGroups: { [key: string]: string };\n    private _inputs: { [key: string]: any; };\n    /**\n     * A map of inputs to bind to the child.\n     * Supports change detection. (May fail on deep JSON changes)\n     *\n     * ```html\n     * <lazy-loader component=\"MyLazyComponent\"\n     *       [inputs]=\"{\n     *          prop1: true,\n     *          prop2: false,\n     *          complex: {\n     *              a: true,\n     *              b: 0\n     *          }\n     *       }\"\n     * >\n     * </lazy-loader>\n     * ```\n     */\n    @Input(\"inputs\") set inputs(data: { [key: string]: any; }) {\n        if (data == undefined) return;\n\n        let previous = this._inputs;\n        this._inputs = data;\n        if (data == undefined)\n            console.trace(data);\n\n        if (this.targetComponentFactory) {\n            const { inputs } = this.targetComponentFactory.ɵcmp;\n\n            const currentKeys = Object.keys(inputs);\n\n            const oldKeys = Object.keys(previous).filter(key => currentKeys.includes(key));\n            const newKeys = Object.keys(data).filter(key => currentKeys.includes(key));\n\n            const removed = oldKeys.filter(key => !newKeys.includes(key));\n\n            // ? perhaps set to null or undefined instead\n            removed.forEach(k => this.targetComponentInstance[k] = null);\n\n            this.bindInputs();\n        }\n    }\n\n\n    private outputSubscriptions: { [key: string]: Subscription; } = {};\n    private _outputs: { [key: string]: Function; };\n    /**\n     * A map of outputs to bind from the child.\n     * Should support change detection.\n     * ```html\n     * <lazy-loader component=\"MyLazyComponent\"\n     *       [outputs]=\"{\n     *           prop3: onOutputFire\n     *       }\"\n     * >\n     * </lazy-loader>\n     * ```\n     */\n    @Input(\"outputs\") set outputs(data: { [key: string]: Function; }) {\n        let previous = this._outputs;\n        this._outputs = data;\n\n        if (this.targetComponentFactory) {\n            const { inputs } = this.targetComponentFactory.ɵcmp;\n\n            const currentKeys = Object.keys(inputs);\n            const removed = Object.keys(previous).filter(key => !currentKeys.includes(key));\n\n            removed.forEach(k => {\n                // Unsubscribe from observable\n                this.outputSubscriptions[k]?.unsubscribe();\n                delete this.targetComponentInstance[k];\n            });\n\n            this.bindOutputs();\n        }\n    }\n\n    /**\n     * Emits errors encountered when loading components\n     */\n    @Output() componentLoadError = new EventEmitter();\n\n    /**\n     * Emits when the component is fully constructed\n     * and had it's inputs and outputs bound\n     * > before `OnInit`\n     *\n     * Returns the active class instance of the lazy-loaded component\n     */\n    @Output() componentLoaded = new EventEmitter();\n\n\n    /**\n     * This is an instance of the component that is currently loaded.\n     */\n    public instance: any;\n\n\n    /**\n     * Container that provides the component data\n     */\n    private targetModule: CompiledBundle;\n\n    /**\n     * Component definition\n     */\n    private targetComponentFactory: any;\n\n    /**\n     * Active component container reference\n     */\n    private targetComponentContainerRef: ComponentRef<any>;\n    private targetRef: any;\n    /**\n     * Reference to the component class instance\n     */\n    private targetComponentInstance: any;\n\n    /**\n     * Subscription with true/false state on whether the distractor should be\n     */\n    private distractorSubscription: Subscription;\n\n    public config: NgxLazyLoaderConfig;\n    private err;\n    private warn;\n    private log;\n\n    // Force 500ms delay before revealing the spinner\n    private loaderEmitter = new EventEmitter();\n    private clearLoader$ = this.loaderEmitter.pipe(debounceTime(300));\n    private loaderSub: Subscription;\n    showLoader = true; // whether we render the DOM for the spinner\n    isClearingLoader = false; // should the spinner start fading out\n\n    constructor(\n        private service: NgxLazyLoaderService,\n        @Optional() private viewContainerRef: ViewContainerRef,\n        @Optional() public dialog: DialogRef,\n        @Optional() @Inject(MAT_DIALOG_DATA) public dialogArguments\n    ) {\n        this.config = NgxLazyLoaderService.config;\n        this.err = NgxLazyLoaderService.config.logger.err;\n        this.warn = NgxLazyLoaderService.config.logger.warn;\n        this.log = NgxLazyLoaderService.config.logger.log;\n\n        // First, check for dialog arguments\n        if (this.dialogArguments) {\n            this.inputs = this.dialogArguments.inputs || this.dialogArguments.data;\n            this.outputs = this.dialogArguments.outputs;\n            this.id = this.dialogArguments.id;\n            this.group = this.dialogArguments.group;\n        }\n\n        this.loaderSub = this.clearLoader$.subscribe(() => {\n            this.showLoader = false;\n        });\n    }\n\n    private initialized = false;\n    async ngAfterViewInit() {\n        this.ngOnDestroy(false);\n        this.isClearingLoader = false;\n        this.showLoader = true;\n\n        this.initialized = true;\n\n        if (!this._id) {\n            this.warn(\"No component was specified!\");\n            return this.loadDefault();\n        }\n\n        try {\n            const _entry = this.service.resolveRegistrationEntry(this._id, this._group);\n            if (!_entry || !_entry.entry) {\n                this.err(`Failed to find Component '${this._id}' in group '${this._group}' in registry!`);\n                return this.loadDefault();\n            }\n\n            const { entry, matchGroups } = _entry;\n            this._matchGroups = matchGroups;\n\n            // Download the \"module\" (the standalone component)\n            const bundle: CompiledBundle = this.targetModule = await entry.load();\n\n\n            // Check if there is some corruption on the bundle.\n            if (!bundle || typeof bundle != 'object' || bundle['__esModule'] as any !== true || bundle.toString() != \"[object Module]\") {\n                this.err(`Failed to load component/module for '${this._id}'! Parsed resource is invalid.`);\n                return this.loadError();\n            }\n\n            const modules = Object.keys(bundle)\n                .map(k => {\n                    const entry = bundle[k];\n\n                    // Strictly check for exported modules or standalone components\n                    if (typeof entry == \"function\" && typeof entry[\"ɵfac\"] == \"function\")\n                        return entry;\n                    return null;\n                })\n                .filter(e => e != null)\n                .filter(entry => {\n                    entry['_isModule'] = !!entry['ɵmod']; // module\n                    entry['_isComponent'] = !!entry['ɵcmp']; // component\n\n                    return (entry['_isModule'] || entry['_isComponent']);\n                });\n\n            if (modules.length == 0) {\n                this.err(`Component/Module loaded for '${this._id}' has no exported components or modules!`);\n                return this.loadError();\n            }\n\n            const component = this.targetComponentFactory = this.service.resolveComponent(this._id, \"default\", modules);\n\n            if (!component) {\n                this.err(`Component '${this._id}' is invalid or corrupted!`);\n                return this.loadError();\n            }\n\n\n            // Bootstrap the component into the container\n            const componentRef = this.targetComponentContainerRef = this.targetContainer.createComponent(component as any);\n            this.targetRef = this.targetContainer.insert(this.targetComponentContainerRef.hostView);\n\n            const instance: any = this.targetComponentInstance = componentRef['instance'];\n\n            this.bindInputs();\n            this.bindOutputs();\n\n            this.componentLoaded.next(instance);\n            this.instance = instance;\n\n            // Look for an observable called isLoading$ that will make us show/hide\n            // the same distractor that is used on basic loading\n            const isLoading$ = instance['ngxShowDistractor$'] as BehaviorSubject<boolean>;\n\n            if (isLoading$ && typeof isLoading$.subscribe == \"function\") {\n                this.distractorSubscription = isLoading$.subscribe(loading => {\n                    if (!loading) {\n                        this.isClearingLoader = true;\n                        this.loaderEmitter.emit();\n                    }\n                    else {\n                        this.showLoader = true;\n                        this.isClearingLoader = false;\n                    }\n                });\n            }\n            else {\n                this.isClearingLoader = true;\n            }\n\n            const name = Object.keys(bundle)[0];\n            this.log(`Loaded '${name}'`);\n            this.loaderEmitter.emit();\n\n            return componentRef;\n        }\n        catch (ex) {\n\n            if (isDevMode()) {\n                console.warn(\"Component \" + this._id + \" threw an error on mount!\");\n                console.warn(\"This will cause you to see a 404 panel.\");\n                console.error(ex);\n            }\n\n            // Network errors throw a toast and return an error component\n            if (ex && !isDevMode()) {\n                console.error(\"Uncaught error when loading component\");\n                throw ex;\n            }\n\n            return this.loadDefault();\n        }\n    }\n\n    ngOnDestroy(clearAll = true) {\n        // unsubscribe from all subscriptions\n        Object.entries(this.outputSubscriptions).forEach(([key, sub]) => {\n            sub.unsubscribe();\n        });\n        this.outputSubscriptions = {};\n\n        // Clear all things\n        if (clearAll) {\n            this.loaderSub?.unsubscribe();\n        }\n\n        this.distractorSubscription?.unsubscribe();\n\n        // Clear target container\n        this.targetRef?.destroy();\n        this.targetComponentContainerRef?.destroy();\n        this.targetContainer?.clear();\n\n        // Wipe the rest of the state clean\n        this.targetRef = null;\n        this.targetComponentContainerRef = null;\n    }\n\n    /**\n     * Bind the input values to the child component.\n     */\n    private bindInputs() {\n        if (!this._inputs || !this.targetComponentInstance) return;\n\n        // Merge match groups\n        if (typeof this._matchGroups == \"object\") {\n            Object.entries(this._matchGroups).forEach(([key, val]) => {\n                if (typeof this._inputs[key] == 'undefined')\n                    this._inputs[key] = val;\n            });\n        }\n\n        // forward-bind inputs\n        const { inputs } = this.targetComponentFactory.ɵcmp;\n\n        // Returns a list of entries that need to be set\n        // This makes it so that unnecessary setters are not invoked.\n        const updated = Object.entries(inputs).filter(([parentKey, childKey]: [string, string]) => {\n            return this.targetComponentInstance[childKey] != this._inputs[parentKey];\n        });\n\n        updated.forEach(([parentKey, childKey]: [string, string]) => {\n            if (this._inputs.hasOwnProperty(parentKey))\n                this.targetComponentInstance[childKey] = this._inputs[parentKey];\n        });\n    }\n\n    /**\n     * Bind the output handlers to the loaded child component\n     */\n    private bindOutputs() {\n        if (!this._outputs || !this.targetComponentInstance) return;\n\n        const { outputs } = this.targetComponentFactory.ɵcmp;\n\n        // Get a list of unregistered outputs\n        const newOutputs = Object.entries(outputs).filter(([parentKey, childKey]: [string, string]) => {\n            return !this.outputSubscriptions[parentKey];\n        });\n\n        // Reverse bind via subscription\n        newOutputs.forEach(([parentKey, childKey]: [string, string]) => {\n            if (this._outputs.hasOwnProperty(parentKey)) {\n                const target: EventEmitter<unknown> = this.targetComponentInstance[childKey];\n                const outputs = this._outputs;\n\n                // Angular folks, stop making this so difficult.\n                const ctx = this.viewContainerRef['_hostLView'][8];\n                const sub = target.subscribe(outputs[parentKey].bind(ctx)); // Subscription\n\n                this.outputSubscriptions[parentKey] = sub;\n            }\n        });\n    }\n\n    /**\n     * Load the \"Default\" component (404) screen normally.\n     * This is shown when the component id isn't in the\n     * registry or otherwise doesn't match\n     *\n     * This\n     */\n    private loadDefault() {\n        if (this.config.notFoundComponent)\n            this.targetContainer.createComponent(this.config.notFoundComponent);\n\n        this.showLoader = false;\n    }\n\n    /**\n     * Load the \"Error\" component.\n     * This is shown when we are able to resolve the component\n     * in the registry, but have some issue boostrapping the\n     * component into the viewContainer\n     */\n    private loadError() {\n        if (this.config.errorComponent)\n            this.targetContainer.createComponent(this.config.errorComponent);\n\n        this.showLoader = false;\n    }\n}\n","<ng-container #content></ng-container>\n\n<div class=\"ngx-lazy-loader-distractor\" [class.destroying]=\"isClearingLoader\">\n    <ng-container *ngIf=\"config.loaderDistractorComponent\" [ngComponentOutlet]=\"config.loaderDistractorComponent\"></ng-container>\n    <ng-container *ngIf=\"config.loaderDistractorTemplate\" [ngTemplateOutlet]=\"config.loaderDistractorTemplate\" [ngTemplateOutletContext]=\"{ '$implicit': inputs }\"></ng-container>\n</div>\n","import { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';\nimport { NgxLazyLoaderConfig } from './types';\nimport { NgxLazyLoaderComponent } from './ngx-lazy-loader.component';\nimport { NgxLazyLoaderService, NGX_LAZY_LOADER_CONFIG } from './ngx-lazy-loader.service';\n\n@NgModule({\n    imports: [NgxLazyLoaderComponent],\n    exports: [NgxLazyLoaderComponent]\n})\nexport class NgxLazyLoaderModule {\n    public static forRoot(config: NgxLazyLoaderConfig): ModuleWithProviders<NgxLazyLoaderModule> {\n        return ({\n            ngModule: NgxLazyLoaderModule,\n            providers: [\n                NgxLazyLoaderService,\n                {\n                    provide: NGX_LAZY_LOADER_CONFIG,\n                    useValue: config\n                }\n            ]\n        });\n    }\n}\n","/*\n * Public API Surface of ngx-lazy-loader\n */\n\nexport * from './lib/lazy-loader/ngx-lazy-loader.service';\nexport * from './lib/lazy-loader/ngx-lazy-loader.module';\nexport * from './lib/lazy-loader/ngx-lazy-loader.component';\nexport * from './lib/lazy-loader/types';\n\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}