@dotglitch/ngx-common 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/components/dynamic-html/dynamic-html.component.d.ts +15 -0
- package/components/dynamic-html/dynamic-html.module.d.ts +10 -0
- package/components/dynamic-html/dynamic-html.service.d.ts +18 -0
- package/components/dynamic-html/types.d.ts +12 -0
- package/components/lazy-loader/lazy-loader.component.d.ts +146 -0
- package/components/lazy-loader/lazy-loader.module.d.ts +10 -0
- package/components/lazy-loader/lazy-loader.service.d.ts +71 -0
- package/components/lazy-loader/types.d.ts +142 -0
- package/components/menu/menu.component.d.ts +52 -0
- package/components/tooltip/tooltip.component.d.ts +35 -0
- package/directives/menu.directive.d.ts +27 -0
- package/directives/tooltip.directive.d.ts +26 -0
- package/directives/utils.d.ts +8 -0
- package/esm2020/components/dynamic-html/dynamic-html.component.mjs +43 -0
- package/esm2020/components/dynamic-html/dynamic-html.module.mjs +27 -0
- package/esm2020/components/dynamic-html/dynamic-html.service.mjs +66 -0
- package/esm2020/components/dynamic-html/types.mjs +7 -0
- package/esm2020/components/lazy-loader/lazy-loader.component.mjs +360 -0
- package/esm2020/components/lazy-loader/lazy-loader.module.mjs +29 -0
- package/esm2020/components/lazy-loader/lazy-loader.service.mjs +215 -0
- package/esm2020/components/lazy-loader/types.mjs +26 -0
- package/esm2020/components/menu/menu.component.mjs +316 -0
- package/esm2020/components/tooltip/tooltip.component.mjs +135 -0
- package/esm2020/directives/menu.directive.mjs +112 -0
- package/esm2020/directives/tooltip.directive.mjs +92 -0
- package/esm2020/directives/utils.mjs +120 -0
- package/esm2020/dotglitch-ngx-common.mjs +5 -0
- package/esm2020/pipes/html-bypass.pipe.mjs +27 -0
- package/esm2020/pipes/resource-bypass.pipe.mjs +27 -0
- package/esm2020/pipes/script-bypass.pipe.mjs +27 -0
- package/esm2020/pipes/style-bypass.pipe.mjs +27 -0
- package/esm2020/pipes/url-bypass.pipe.mjs +27 -0
- package/esm2020/public-api.mjs +39 -0
- package/esm2020/services/dependency.service.mjs +55 -0
- package/esm2020/services/dialog.service.mjs +66 -0
- package/esm2020/services/fetch.service.mjs +71 -0
- package/esm2020/services/keyboard.service.mjs +128 -0
- package/esm2020/types/menu.mjs +2 -0
- package/esm2020/types/popup.mjs +2 -0
- package/esm2020/utils/index.mjs +39 -0
- package/fesm2015/dotglitch-ngx-common.mjs +1997 -0
- package/fesm2015/dotglitch-ngx-common.mjs.map +1 -0
- package/fesm2020/dotglitch-ngx-common.mjs +1977 -0
- package/fesm2020/dotglitch-ngx-common.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/package.json +60 -0
- package/pipes/html-bypass.pipe.d.ts +16 -0
- package/pipes/resource-bypass.pipe.d.ts +16 -0
- package/pipes/script-bypass.pipe.d.ts +16 -0
- package/pipes/style-bypass.pipe.d.ts +16 -0
- package/pipes/url-bypass.pipe.d.ts +16 -0
- package/public-api.d.ts +34 -0
- package/services/dependency.service.d.ts +19 -0
- package/services/dialog.service.d.ts +41 -0
- package/services/fetch.service.d.ts +28 -0
- package/services/keyboard.service.d.ts +79 -0
- package/types/menu.d.ts +90 -0
- package/types/popup.d.ts +27 -0
- package/utils/index.d.ts +19 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { DynamicHTMLComponent } from './dynamic-html.component';
|
|
3
|
+
import { NGX_DYNAMIC_CONFIG } from './types';
|
|
4
|
+
import { DynamicHTMLRenderer } from './dynamic-html.service';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class NgxDynamicHTMLModule {
|
|
7
|
+
static forRoot(config) {
|
|
8
|
+
return {
|
|
9
|
+
ngModule: NgxDynamicHTMLModule,
|
|
10
|
+
providers: [
|
|
11
|
+
DynamicHTMLRenderer,
|
|
12
|
+
{ provide: NGX_DYNAMIC_CONFIG, useValue: config }
|
|
13
|
+
],
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
NgxDynamicHTMLModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgxDynamicHTMLModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
18
|
+
NgxDynamicHTMLModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: NgxDynamicHTMLModule, imports: [DynamicHTMLComponent], exports: [DynamicHTMLComponent] });
|
|
19
|
+
NgxDynamicHTMLModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgxDynamicHTMLModule, imports: [DynamicHTMLComponent] });
|
|
20
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgxDynamicHTMLModule, decorators: [{
|
|
21
|
+
type: NgModule,
|
|
22
|
+
args: [{
|
|
23
|
+
imports: [DynamicHTMLComponent],
|
|
24
|
+
exports: [DynamicHTMLComponent],
|
|
25
|
+
}]
|
|
26
|
+
}] });
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1odG1sLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvY29tcG9uZW50cy9keW5hbWljLWh0bWwvZHluYW1pYy1odG1sLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUF1QixNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQXNCLGtCQUFrQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQU03RCxNQUFNLE9BQU8sb0JBQW9CO0lBQ3RCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBMEI7UUFDNUMsT0FBTztZQUNILFFBQVEsRUFBRSxvQkFBb0I7WUFDOUIsU0FBUyxFQUFFO2dCQUNQLG1CQUFtQjtnQkFDbkIsRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRTthQUNwRDtTQUNKLENBQUM7SUFDTixDQUFDOztpSEFUUSxvQkFBb0I7a0hBQXBCLG9CQUFvQixZQUhuQixvQkFBb0IsYUFDcEIsb0JBQW9CO2tIQUVyQixvQkFBb0IsWUFIbkIsb0JBQW9COzJGQUdyQixvQkFBb0I7a0JBSmhDLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFLENBQUMsb0JBQW9CLENBQUM7b0JBQy9CLE9BQU8sRUFBRSxDQUFDLG9CQUFvQixDQUFDO2lCQUNsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlLCBNb2R1bGVXaXRoUHJvdmlkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEeW5hbWljSFRNTENvbXBvbmVudCB9IGZyb20gJy4vZHluYW1pYy1odG1sLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEeW5hbWljSFRNTE9wdGlvbnMsIE5HWF9EWU5BTUlDX0NPTkZJRyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgRHluYW1pY0hUTUxSZW5kZXJlciB9IGZyb20gJy4vZHluYW1pYy1odG1sLnNlcnZpY2UnO1xuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtEeW5hbWljSFRNTENvbXBvbmVudF0sXG4gICAgZXhwb3J0czogW0R5bmFtaWNIVE1MQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgTmd4RHluYW1pY0hUTUxNb2R1bGUge1xuICAgIHB1YmxpYyBzdGF0aWMgZm9yUm9vdChjb25maWc6IER5bmFtaWNIVE1MT3B0aW9ucyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8Tmd4RHluYW1pY0hUTUxNb2R1bGU+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5nTW9kdWxlOiBOZ3hEeW5hbWljSFRNTE1vZHVsZSxcbiAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgIER5bmFtaWNIVE1MUmVuZGVyZXIsXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBOR1hfRFlOQU1JQ19DT05GSUcsIHVzZVZhbHVlOiBjb25maWcgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgfTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { Injectable, Inject } from '@angular/core';
|
|
2
|
+
import { NGX_DYNAMIC_CONFIG } from './types';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "./types";
|
|
5
|
+
function isBrowserPlatform() {
|
|
6
|
+
return window != null && window.document != null;
|
|
7
|
+
}
|
|
8
|
+
export class DynamicHTMLRenderer {
|
|
9
|
+
constructor(config, cfr, injector) {
|
|
10
|
+
this.config = config;
|
|
11
|
+
this.cfr = cfr;
|
|
12
|
+
this.injector = injector;
|
|
13
|
+
this.componentFactories = new Map();
|
|
14
|
+
this.componentRefs = new Map();
|
|
15
|
+
this.config.components.forEach(({ selector, component }) => {
|
|
16
|
+
let cf;
|
|
17
|
+
cf = this.cfr.resolveComponentFactory(component);
|
|
18
|
+
this.componentFactories.set(selector, cf);
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
renderInnerHTML(elementRef, html) {
|
|
22
|
+
if (!isBrowserPlatform()) {
|
|
23
|
+
return {
|
|
24
|
+
check: () => { },
|
|
25
|
+
destroy: () => { },
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
elementRef.nativeElement.innerHTML = html;
|
|
29
|
+
const componentRefs = [];
|
|
30
|
+
this.config.components.forEach(({ selector }) => {
|
|
31
|
+
const elements = elementRef.nativeElement.querySelectorAll(selector);
|
|
32
|
+
Array.prototype.forEach.call(elements, (el) => {
|
|
33
|
+
const content = el.innerHTML;
|
|
34
|
+
const cmpRef = this.componentFactories.get(selector).create(this.injector, [], el);
|
|
35
|
+
el.removeAttribute('ng-version');
|
|
36
|
+
if (cmpRef.instance.dynamicOnMount) {
|
|
37
|
+
const attrsMap = new Map();
|
|
38
|
+
if (el.hasAttributes()) {
|
|
39
|
+
Array.prototype.forEach.call(el.attributes, (attr) => {
|
|
40
|
+
attrsMap.set(attr.name, attr.value);
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
cmpRef.instance.dynamicOnMount(attrsMap, content, el);
|
|
44
|
+
}
|
|
45
|
+
componentRefs.push(cmpRef);
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
this.componentRefs.set(elementRef, componentRefs);
|
|
49
|
+
return {
|
|
50
|
+
check: () => componentRefs.forEach(ref => ref.changeDetectorRef.detectChanges()),
|
|
51
|
+
destroy: () => {
|
|
52
|
+
componentRefs.forEach(ref => ref.destroy());
|
|
53
|
+
this.componentRefs.delete(elementRef);
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
DynamicHTMLRenderer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DynamicHTMLRenderer, deps: [{ token: NGX_DYNAMIC_CONFIG }, { token: i0.ComponentFactoryResolver }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
59
|
+
DynamicHTMLRenderer.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DynamicHTMLRenderer });
|
|
60
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DynamicHTMLRenderer, decorators: [{
|
|
61
|
+
type: Injectable
|
|
62
|
+
}], ctorParameters: function () { return [{ type: i1.DynamicHTMLOptions, decorators: [{
|
|
63
|
+
type: Inject,
|
|
64
|
+
args: [NGX_DYNAMIC_CONFIG]
|
|
65
|
+
}] }, { type: i0.ComponentFactoryResolver }, { type: i0.Injector }]; } });
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1odG1sLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2NvbXBvbmVudHMvZHluYW1pYy1odG1sL2R5bmFtaWMtaHRtbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWtGLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuSSxPQUFPLEVBQXNCLGtCQUFrQixFQUFXLE1BQU0sU0FBUyxDQUFDOzs7QUFPMUUsU0FBUyxpQkFBaUI7SUFDdEIsT0FBTyxNQUFNLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDO0FBQ3JELENBQUM7QUFHRCxNQUFNLE9BQU8sbUJBQW1CO0lBTTVCLFlBQWdELE1BQTBCLEVBQVUsR0FBNkIsRUFBVSxRQUFrQjtRQUE3RixXQUFNLEdBQU4sTUFBTSxDQUFvQjtRQUFVLFFBQUcsR0FBSCxHQUFHLENBQTBCO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUpySSx1QkFBa0IsR0FBRyxJQUFJLEdBQUcsRUFBaUMsQ0FBQztRQUU5RCxrQkFBYSxHQUFHLElBQUksR0FBRyxFQUFpQyxDQUFDO1FBRzdELElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7WUFDdkQsSUFBSSxFQUF5QixDQUFDO1lBQzlCLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGVBQWUsQ0FBQyxVQUFzQixFQUFFLElBQVk7UUFDaEQsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUU7WUFDdEIsT0FBTztnQkFDSCxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztnQkFDaEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7YUFDckIsQ0FBQztTQUNMO1FBQ0QsVUFBVSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBRTFDLE1BQU0sYUFBYSxHQUE2QixFQUFFLENBQUM7UUFDbkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFO1lBQzVDLE1BQU0sUUFBUSxHQUFJLFVBQVUsQ0FBQyxhQUF5QixDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2xGLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFXLEVBQUUsRUFBRTtnQkFDbkQsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQztnQkFDN0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBRW5GLEVBQUUsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBRWpDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUU7b0JBQ2hDLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO29CQUMzQyxJQUFJLEVBQUUsQ0FBQyxhQUFhLEVBQUUsRUFBRTt3QkFDcEIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFVLEVBQUUsRUFBRTs0QkFDdkQsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDeEMsQ0FBQyxDQUFDLENBQUM7cUJBQ047b0JBQ0EsTUFBTSxDQUFDLFFBQW9CLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7aUJBQ3RFO2dCQUVELGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUVsRCxPQUFPO1lBQ0gsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDaEYsT0FBTyxFQUFFLEdBQUcsRUFBRTtnQkFDVixhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzFDLENBQUM7U0FDSixDQUFDO0lBQ04sQ0FBQzs7Z0hBdERRLG1CQUFtQixrQkFNUixrQkFBa0I7b0hBTjdCLG1CQUFtQjsyRkFBbkIsbUJBQW1CO2tCQUQvQixVQUFVOzswQkFPTSxNQUFNOzJCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yLCBFbGVtZW50UmVmLCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIENvbXBvbmVudEZhY3RvcnksIENvbXBvbmVudFJlZiwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEeW5hbWljSFRNTE9wdGlvbnMsIE5HWF9EWU5BTUlDX0NPTkZJRywgT25Nb3VudCB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIER5bmFtaWNIVE1MUmVmIHtcbiAgICBjaGVjazogKCkgPT4gdm9pZDtcbiAgICBkZXN0cm95OiAoKSA9PiB2b2lkO1xufVxuXG5mdW5jdGlvbiBpc0Jyb3dzZXJQbGF0Zm9ybSgpIHtcbiAgICByZXR1cm4gd2luZG93ICE9IG51bGwgJiYgd2luZG93LmRvY3VtZW50ICE9IG51bGw7XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEeW5hbWljSFRNTFJlbmRlcmVyIHtcblxuICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yaWVzID0gbmV3IE1hcDxzdHJpbmcsIENvbXBvbmVudEZhY3Rvcnk8YW55Pj4oKTtcblxuICAgIHByaXZhdGUgY29tcG9uZW50UmVmcyA9IG5ldyBNYXA8YW55LCBBcnJheTxDb21wb25lbnRSZWY8YW55Pj4+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KE5HWF9EWU5BTUlDX0NPTkZJRykgcHJpdmF0ZSBjb25maWc6IER5bmFtaWNIVE1MT3B0aW9ucywgcHJpdmF0ZSBjZnI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICAgICAgdGhpcy5jb25maWcuY29tcG9uZW50cy5mb3JFYWNoKCh7IHNlbGVjdG9yLCBjb21wb25lbnQgfSkgPT4ge1xuICAgICAgICAgICAgbGV0IGNmOiBDb21wb25lbnRGYWN0b3J5PGFueT47XG4gICAgICAgICAgICBjZiA9IHRoaXMuY2ZyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGNvbXBvbmVudCk7XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudEZhY3Rvcmllcy5zZXQoc2VsZWN0b3IsIGNmKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVuZGVySW5uZXJIVE1MKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIGh0bWw6IHN0cmluZyk6IER5bmFtaWNIVE1MUmVmIHtcbiAgICAgICAgaWYgKCFpc0Jyb3dzZXJQbGF0Zm9ybSgpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGNoZWNrOiAoKSA9PiB7IH0sXG4gICAgICAgICAgICAgICAgZGVzdHJveTogKCkgPT4geyB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gaHRtbDtcblxuICAgICAgICBjb25zdCBjb21wb25lbnRSZWZzOiBBcnJheTxDb21wb25lbnRSZWY8YW55Pj4gPSBbXTtcbiAgICAgICAgdGhpcy5jb25maWcuY29tcG9uZW50cy5mb3JFYWNoKCh7IHNlbGVjdG9yIH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gKGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBFbGVtZW50KS5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcbiAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoZWxlbWVudHMsIChlbDogRWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBlbC5pbm5lckhUTUw7XG4gICAgICAgICAgICAgICAgY29uc3QgY21wUmVmID0gdGhpcy5jb21wb25lbnRGYWN0b3JpZXMuZ2V0KHNlbGVjdG9yKS5jcmVhdGUodGhpcy5pbmplY3RvciwgW10sIGVsKTtcblxuICAgICAgICAgICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgnbmctdmVyc2lvbicpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNtcFJlZi5pbnN0YW5jZS5keW5hbWljT25Nb3VudCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhdHRyc01hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbC5oYXNBdHRyaWJ1dGVzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoZWwuYXR0cmlidXRlcywgKGF0dHI6IEF0dHIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyc01hcC5zZXQoYXR0ci5uYW1lLCBhdHRyLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIChjbXBSZWYuaW5zdGFuY2UgYXMgT25Nb3VudCkuZHluYW1pY09uTW91bnQoYXR0cnNNYXAsIGNvbnRlbnQsIGVsKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb21wb25lbnRSZWZzLnB1c2goY21wUmVmKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWZzLnNldChlbGVtZW50UmVmLCBjb21wb25lbnRSZWZzKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY2hlY2s6ICgpID0+IGNvbXBvbmVudFJlZnMuZm9yRWFjaChyZWYgPT4gcmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKSksXG4gICAgICAgICAgICBkZXN0cm95OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50UmVmcy5mb3JFYWNoKHJlZiA9PiByZWYuZGVzdHJveSgpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZnMuZGVsZXRlKGVsZW1lbnRSZWYpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
export class OnMount {
|
|
3
|
+
}
|
|
4
|
+
export class DynamicHTMLOptions {
|
|
5
|
+
}
|
|
6
|
+
export const NGX_DYNAMIC_CONFIG = new InjectionToken('config');
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2NvbXBvbmVudHMvZHluYW1pYy1odG1sL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQVEsTUFBTSxlQUFlLENBQUM7QUFFckQsTUFBTSxPQUFnQixPQUFPO0NBRTVCO0FBTUQsTUFBTSxPQUFPLGtCQUFrQjtDQUU5QjtBQUVELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLElBQUksY0FBYyxDQUFxQixRQUFRLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBPbk1vdW50IHtcbiAgICBhYnN0cmFjdCBkeW5hbWljT25Nb3VudChhdHRycz86IE1hcDxzdHJpbmcsIHN0cmluZz4sIGNvbnRlbnQ/OiBzdHJpbmcsIGVsZW1lbnQ/OiBFbGVtZW50KTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRXaXRoU2VsZWN0b3Ige1xuICAgIHNlbGVjdG9yOiBzdHJpbmc7XG4gICAgY29tcG9uZW50OiBUeXBlPGFueT47XG59XG5leHBvcnQgY2xhc3MgRHluYW1pY0hUTUxPcHRpb25zIHtcbiAgICBjb21wb25lbnRzOiBBcnJheTxDb21wb25lbnRXaXRoU2VsZWN0b3I+O1xufVxuXG5leHBvcnQgY29uc3QgTkdYX0RZTkFNSUNfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPER5bmFtaWNIVE1MT3B0aW9ucz4oJ2NvbmZpZycpO1xuXG4iXX0=
|
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
import { Input, ViewContainerRef, isDevMode, EventEmitter, Optional, ViewChild, Component, Inject, Output } from '@angular/core';
|
|
2
|
+
import { NgComponentOutlet, NgIf, NgTemplateOutlet } from '@angular/common';
|
|
3
|
+
import { MAT_DIALOG_DATA, } from '@angular/material/dialog';
|
|
4
|
+
import { debounceTime } from 'rxjs';
|
|
5
|
+
import { LazyLoaderService } from './lazy-loader.service';
|
|
6
|
+
import { stringToSlug } from '../../utils';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "./lazy-loader.service";
|
|
9
|
+
import * as i2 from "@angular/cdk/dialog";
|
|
10
|
+
export class LazyLoaderComponent {
|
|
11
|
+
/**
|
|
12
|
+
* The id of the component that will be lazy loaded
|
|
13
|
+
*/
|
|
14
|
+
set id(data) {
|
|
15
|
+
const id = stringToSlug(data);
|
|
16
|
+
// Check if there is a change to the loaded component's id
|
|
17
|
+
// if it's updated, we destroy and rehydrate the entire container
|
|
18
|
+
if (this.initialized && this._id != id) {
|
|
19
|
+
this._id = id;
|
|
20
|
+
this.ngAfterViewInit();
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
this._id = id;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
;
|
|
27
|
+
set group(data) {
|
|
28
|
+
const group = stringToSlug(data);
|
|
29
|
+
if (typeof group != "string" || !group)
|
|
30
|
+
return;
|
|
31
|
+
// If the group was updated, retry to bootstrap something into the container.
|
|
32
|
+
if (this.initialized && this._group != group) {
|
|
33
|
+
this._group = group;
|
|
34
|
+
this.ngAfterViewInit();
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
this._group = group;
|
|
38
|
+
}
|
|
39
|
+
get group() { return this._group; }
|
|
40
|
+
/**
|
|
41
|
+
* A map of inputs to bind to the child.
|
|
42
|
+
* Supports change detection. (May fail on deep JSON changes)
|
|
43
|
+
*
|
|
44
|
+
* ```html
|
|
45
|
+
* <lazy-loader component="MyLazyComponent"
|
|
46
|
+
* [inputs]="{
|
|
47
|
+
* prop1: true,
|
|
48
|
+
* prop2: false,
|
|
49
|
+
* complex: {
|
|
50
|
+
* a: true,
|
|
51
|
+
* b: 0
|
|
52
|
+
* }
|
|
53
|
+
* }"
|
|
54
|
+
* >
|
|
55
|
+
* </lazy-loader>
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
set inputs(data) {
|
|
59
|
+
if (data == undefined)
|
|
60
|
+
return;
|
|
61
|
+
let previous = this._inputs;
|
|
62
|
+
this._inputs = data;
|
|
63
|
+
if (data == undefined)
|
|
64
|
+
console.trace(data);
|
|
65
|
+
if (this.targetComponentFactory) {
|
|
66
|
+
const { inputs } = this.targetComponentFactory.ɵcmp;
|
|
67
|
+
const currentKeys = Object.keys(inputs);
|
|
68
|
+
const oldKeys = Object.keys(previous).filter(key => currentKeys.includes(key));
|
|
69
|
+
const newKeys = Object.keys(data).filter(key => currentKeys.includes(key));
|
|
70
|
+
const removed = oldKeys.filter(key => !newKeys.includes(key));
|
|
71
|
+
// ? perhaps set to null or undefined instead
|
|
72
|
+
removed.forEach(k => this.targetComponentInstance[k] = null);
|
|
73
|
+
this.bindInputs();
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* A map of outputs to bind from the child.
|
|
78
|
+
* Should support change detection.
|
|
79
|
+
* ```html
|
|
80
|
+
* <lazy-loader component="MyLazyComponent"
|
|
81
|
+
* [outputs]="{
|
|
82
|
+
* prop3: onOutputFire
|
|
83
|
+
* }"
|
|
84
|
+
* >
|
|
85
|
+
* </lazy-loader>
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
set outputs(data) {
|
|
89
|
+
let previous = this._outputs;
|
|
90
|
+
this._outputs = data;
|
|
91
|
+
if (this.targetComponentFactory) {
|
|
92
|
+
const { inputs } = this.targetComponentFactory.ɵcmp;
|
|
93
|
+
const currentKeys = Object.keys(inputs);
|
|
94
|
+
const removed = Object.keys(previous).filter(key => !currentKeys.includes(key));
|
|
95
|
+
removed.forEach(k => {
|
|
96
|
+
// Unsubscribe from observable
|
|
97
|
+
this.outputSubscriptions[k]?.unsubscribe();
|
|
98
|
+
delete this.targetComponentInstance[k];
|
|
99
|
+
});
|
|
100
|
+
this.bindOutputs();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
constructor(service, viewContainerRef, dialog, dialogArguments) {
|
|
104
|
+
this.service = service;
|
|
105
|
+
this.viewContainerRef = viewContainerRef;
|
|
106
|
+
this.dialog = dialog;
|
|
107
|
+
this.dialogArguments = dialogArguments;
|
|
108
|
+
this._group = "default";
|
|
109
|
+
this.outputSubscriptions = {};
|
|
110
|
+
/**
|
|
111
|
+
* Emits errors encountered when loading components
|
|
112
|
+
*/
|
|
113
|
+
this.componentLoadError = new EventEmitter();
|
|
114
|
+
/**
|
|
115
|
+
* Emits when the component is fully constructed
|
|
116
|
+
* and had it's inputs and outputs bound
|
|
117
|
+
* > before `OnInit`
|
|
118
|
+
*
|
|
119
|
+
* Returns the active class instance of the lazy-loaded component
|
|
120
|
+
*/
|
|
121
|
+
this.componentLoaded = new EventEmitter();
|
|
122
|
+
// Force 500ms delay before revealing the spinner
|
|
123
|
+
this.loaderEmitter = new EventEmitter();
|
|
124
|
+
this.clearLoader$ = this.loaderEmitter.pipe(debounceTime(300));
|
|
125
|
+
this.showLoader = true; // whether we render the DOM for the spinner
|
|
126
|
+
this.isClearingLoader = false; // should the spinner start fading out
|
|
127
|
+
this.initialized = false;
|
|
128
|
+
this.config = LazyLoaderService.config;
|
|
129
|
+
this.err = LazyLoaderService.config.logger.err;
|
|
130
|
+
this.warn = LazyLoaderService.config.logger.warn;
|
|
131
|
+
this.log = LazyLoaderService.config.logger.log;
|
|
132
|
+
// First, check for dialog arguments
|
|
133
|
+
if (this.dialogArguments) {
|
|
134
|
+
this.inputs = this.dialogArguments.inputs || this.dialogArguments.data;
|
|
135
|
+
this.outputs = this.dialogArguments.outputs;
|
|
136
|
+
this.id = this.dialogArguments.id;
|
|
137
|
+
this.group = this.dialogArguments.group;
|
|
138
|
+
}
|
|
139
|
+
this.loaderSub = this.clearLoader$.subscribe(() => {
|
|
140
|
+
this.showLoader = false;
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
async ngAfterViewInit() {
|
|
144
|
+
this.ngOnDestroy(false);
|
|
145
|
+
this.isClearingLoader = false;
|
|
146
|
+
this.showLoader = true;
|
|
147
|
+
this.initialized = true;
|
|
148
|
+
if (!this._id) {
|
|
149
|
+
this.warn("No component was specified!");
|
|
150
|
+
return this.loadDefault();
|
|
151
|
+
}
|
|
152
|
+
try {
|
|
153
|
+
const _entry = this.service.resolveRegistrationEntry(this._id, this._group);
|
|
154
|
+
if (!_entry || !_entry.entry) {
|
|
155
|
+
this.err(`Failed to find Component '${this._id}' in group '${this._group}' in registry!`);
|
|
156
|
+
return this.loadDefault();
|
|
157
|
+
}
|
|
158
|
+
const { entry, matchGroups } = _entry;
|
|
159
|
+
this._matchGroups = matchGroups;
|
|
160
|
+
// Download the "module" (the standalone component)
|
|
161
|
+
const bundle = this.targetModule = await entry.load();
|
|
162
|
+
// Check if there is some corruption on the bundle.
|
|
163
|
+
if (!bundle || typeof bundle != 'object' || bundle['__esModule'] !== true || bundle.toString() != "[object Module]") {
|
|
164
|
+
this.err(`Failed to load component/module for '${this._id}'! Parsed resource is invalid.`);
|
|
165
|
+
return this.loadError();
|
|
166
|
+
}
|
|
167
|
+
const modules = Object.keys(bundle)
|
|
168
|
+
.map(k => {
|
|
169
|
+
const entry = bundle[k];
|
|
170
|
+
// Strictly check for exported modules or standalone components
|
|
171
|
+
if (typeof entry == "function" && typeof entry["ɵfac"] == "function")
|
|
172
|
+
return entry;
|
|
173
|
+
return null;
|
|
174
|
+
})
|
|
175
|
+
.filter(e => e != null)
|
|
176
|
+
.filter(entry => {
|
|
177
|
+
entry['_isModule'] = !!entry['ɵmod']; // module
|
|
178
|
+
entry['_isComponent'] = !!entry['ɵcmp']; // component
|
|
179
|
+
return (entry['_isModule'] || entry['_isComponent']);
|
|
180
|
+
});
|
|
181
|
+
if (modules.length == 0) {
|
|
182
|
+
this.err(`Component/Module loaded for '${this._id}' has no exported components or modules!`);
|
|
183
|
+
return this.loadError();
|
|
184
|
+
}
|
|
185
|
+
const component = this.targetComponentFactory = this.service.resolveComponent(this._id, "default", modules);
|
|
186
|
+
if (!component) {
|
|
187
|
+
this.err(`Component '${this._id}' is invalid or corrupted!`);
|
|
188
|
+
return this.loadError();
|
|
189
|
+
}
|
|
190
|
+
// Bootstrap the component into the container
|
|
191
|
+
const componentRef = this.targetComponentContainerRef = this.targetContainer.createComponent(component);
|
|
192
|
+
this.targetRef = this.targetContainer.insert(this.targetComponentContainerRef.hostView);
|
|
193
|
+
const instance = this.targetComponentInstance = componentRef['instance'];
|
|
194
|
+
this.bindInputs();
|
|
195
|
+
this.bindOutputs();
|
|
196
|
+
this.componentLoaded.next(instance);
|
|
197
|
+
this.instance = instance;
|
|
198
|
+
// Look for an observable called isLoading$ that will make us show/hide
|
|
199
|
+
// the same distractor that is used on basic loading
|
|
200
|
+
const isLoading$ = instance['ngxShowDistractor$'];
|
|
201
|
+
if (isLoading$ && typeof isLoading$.subscribe == "function") {
|
|
202
|
+
this.distractorSubscription = isLoading$.subscribe(loading => {
|
|
203
|
+
if (!loading) {
|
|
204
|
+
this.isClearingLoader = true;
|
|
205
|
+
this.loaderEmitter.emit();
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
this.showLoader = true;
|
|
209
|
+
this.isClearingLoader = false;
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
this.isClearingLoader = true;
|
|
215
|
+
}
|
|
216
|
+
const name = Object.keys(bundle)[0];
|
|
217
|
+
this.log(`Loaded '${name}'`);
|
|
218
|
+
this.loaderEmitter.emit();
|
|
219
|
+
return componentRef;
|
|
220
|
+
}
|
|
221
|
+
catch (ex) {
|
|
222
|
+
if (isDevMode()) {
|
|
223
|
+
console.warn("Component " + this._id + " threw an error on mount!");
|
|
224
|
+
console.warn("This will cause you to see a 404 panel.");
|
|
225
|
+
console.error(ex);
|
|
226
|
+
}
|
|
227
|
+
// Network errors throw a toast and return an error component
|
|
228
|
+
if (ex && !isDevMode()) {
|
|
229
|
+
console.error("Uncaught error when loading component");
|
|
230
|
+
throw ex;
|
|
231
|
+
}
|
|
232
|
+
return this.loadDefault();
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
ngOnDestroy(clearAll = true) {
|
|
236
|
+
// unsubscribe from all subscriptions
|
|
237
|
+
Object.entries(this.outputSubscriptions).forEach(([key, sub]) => {
|
|
238
|
+
sub.unsubscribe();
|
|
239
|
+
});
|
|
240
|
+
this.outputSubscriptions = {};
|
|
241
|
+
// Clear all things
|
|
242
|
+
if (clearAll) {
|
|
243
|
+
this.loaderSub?.unsubscribe();
|
|
244
|
+
}
|
|
245
|
+
this.distractorSubscription?.unsubscribe();
|
|
246
|
+
// Clear target container
|
|
247
|
+
this.targetRef?.destroy();
|
|
248
|
+
this.targetComponentContainerRef?.destroy();
|
|
249
|
+
this.targetContainer?.clear();
|
|
250
|
+
// Wipe the rest of the state clean
|
|
251
|
+
this.targetRef = null;
|
|
252
|
+
this.targetComponentContainerRef = null;
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Bind the input values to the child component.
|
|
256
|
+
*/
|
|
257
|
+
bindInputs() {
|
|
258
|
+
if (!this._inputs || !this.targetComponentInstance)
|
|
259
|
+
return;
|
|
260
|
+
// Merge match groups
|
|
261
|
+
if (typeof this._matchGroups == "object") {
|
|
262
|
+
Object.entries(this._matchGroups).forEach(([key, val]) => {
|
|
263
|
+
if (typeof this._inputs[key] == 'undefined')
|
|
264
|
+
this._inputs[key] = val;
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
// forward-bind inputs
|
|
268
|
+
const { inputs } = this.targetComponentFactory.ɵcmp;
|
|
269
|
+
// Returns a list of entries that need to be set
|
|
270
|
+
// This makes it so that unnecessary setters are not invoked.
|
|
271
|
+
const updated = Object.entries(inputs).filter(([parentKey, childKey]) => {
|
|
272
|
+
return this.targetComponentInstance[childKey] != this._inputs[parentKey];
|
|
273
|
+
});
|
|
274
|
+
updated.forEach(([parentKey, childKey]) => {
|
|
275
|
+
if (this._inputs.hasOwnProperty(parentKey))
|
|
276
|
+
this.targetComponentInstance[childKey] = this._inputs[parentKey];
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Bind the output handlers to the loaded child component
|
|
281
|
+
*/
|
|
282
|
+
bindOutputs() {
|
|
283
|
+
if (!this._outputs || !this.targetComponentInstance)
|
|
284
|
+
return;
|
|
285
|
+
const { outputs } = this.targetComponentFactory.ɵcmp;
|
|
286
|
+
// Get a list of unregistered outputs
|
|
287
|
+
const newOutputs = Object.entries(outputs).filter(([parentKey, childKey]) => {
|
|
288
|
+
return !this.outputSubscriptions[parentKey];
|
|
289
|
+
});
|
|
290
|
+
// Reverse bind via subscription
|
|
291
|
+
newOutputs.forEach(([parentKey, childKey]) => {
|
|
292
|
+
if (this._outputs.hasOwnProperty(parentKey)) {
|
|
293
|
+
const target = this.targetComponentInstance[childKey];
|
|
294
|
+
const outputs = this._outputs;
|
|
295
|
+
// Angular folks, stop making this so difficult.
|
|
296
|
+
const ctx = this.viewContainerRef['_hostLView'][8];
|
|
297
|
+
const sub = target.subscribe(outputs[parentKey].bind(ctx)); // Subscription
|
|
298
|
+
this.outputSubscriptions[parentKey] = sub;
|
|
299
|
+
}
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Load the "Default" component (404) screen normally.
|
|
304
|
+
* This is shown when the component id isn't in the
|
|
305
|
+
* registry or otherwise doesn't match
|
|
306
|
+
*
|
|
307
|
+
* This
|
|
308
|
+
*/
|
|
309
|
+
loadDefault() {
|
|
310
|
+
if (this.config.notFoundComponent)
|
|
311
|
+
this.targetContainer.createComponent(this.config.notFoundComponent);
|
|
312
|
+
this.showLoader = false;
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Load the "Error" component.
|
|
316
|
+
* This is shown when we are able to resolve the component
|
|
317
|
+
* in the registry, but have some issue boostrapping the
|
|
318
|
+
* component into the viewContainer
|
|
319
|
+
*/
|
|
320
|
+
loadError() {
|
|
321
|
+
if (this.config.errorComponent)
|
|
322
|
+
this.targetContainer.createComponent(this.config.errorComponent);
|
|
323
|
+
this.showLoader = false;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
LazyLoaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LazyLoaderComponent, deps: [{ token: i1.LazyLoaderService }, { token: i0.ViewContainerRef, optional: true }, { token: i2.DialogRef, optional: true }, { token: MAT_DIALOG_DATA, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
327
|
+
LazyLoaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: LazyLoaderComponent, isStandalone: true, selector: "ngx-lazy-loader", inputs: { id: ["component", "id"], group: "group", inputs: "inputs", outputs: "outputs" }, outputs: { componentLoadError: "componentLoadError", componentLoaded: "componentLoaded" }, viewQueries: [{ propertyName: "targetContainer", first: true, predicate: ["content"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<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", styles: [":host{display:contents;contain:content;z-index:1;position:relative}.ngx-lazy-loader-distractor{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;flex-direction:column;background-color:var(--background-color, #212121);opacity:1;transition:opacity .3s ease;z-index:999999}.ngx-lazy-loader-distractor.destroying{opacity:0;pointer-events:none}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
|
|
328
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LazyLoaderComponent, decorators: [{
|
|
329
|
+
type: Component,
|
|
330
|
+
args: [{ selector: 'ngx-lazy-loader', imports: [NgIf, NgComponentOutlet, NgTemplateOutlet], standalone: true, template: "<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", styles: [":host{display:contents;contain:content;z-index:1;position:relative}.ngx-lazy-loader-distractor{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;flex-direction:column;background-color:var(--background-color, #212121);opacity:1;transition:opacity .3s ease;z-index:999999}.ngx-lazy-loader-distractor.destroying{opacity:0;pointer-events:none}\n"] }]
|
|
331
|
+
}], ctorParameters: function () { return [{ type: i1.LazyLoaderService }, { type: i0.ViewContainerRef, decorators: [{
|
|
332
|
+
type: Optional
|
|
333
|
+
}] }, { type: i2.DialogRef, decorators: [{
|
|
334
|
+
type: Optional
|
|
335
|
+
}] }, { type: undefined, decorators: [{
|
|
336
|
+
type: Optional
|
|
337
|
+
}, {
|
|
338
|
+
type: Inject,
|
|
339
|
+
args: [MAT_DIALOG_DATA]
|
|
340
|
+
}] }]; }, propDecorators: { targetContainer: [{
|
|
341
|
+
type: ViewChild,
|
|
342
|
+
args: ["content", { read: ViewContainerRef }]
|
|
343
|
+
}], id: [{
|
|
344
|
+
type: Input,
|
|
345
|
+
args: ["component"]
|
|
346
|
+
}], group: [{
|
|
347
|
+
type: Input,
|
|
348
|
+
args: ["group"]
|
|
349
|
+
}], inputs: [{
|
|
350
|
+
type: Input,
|
|
351
|
+
args: ["inputs"]
|
|
352
|
+
}], outputs: [{
|
|
353
|
+
type: Input,
|
|
354
|
+
args: ["outputs"]
|
|
355
|
+
}], componentLoadError: [{
|
|
356
|
+
type: Output
|
|
357
|
+
}], componentLoaded: [{
|
|
358
|
+
type: Output
|
|
359
|
+
}] } });
|
|
360
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF6eS1sb2FkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9jb21wb25lbnRzL2xhenktbG9hZGVyL2xhenktbG9hZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvY29tcG9uZW50cy9sYXp5LWxvYWRlci9sYXp5LWxvYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBZ0IsWUFBWSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQW1DLE1BQU0sZUFBZSxDQUFDO0FBQ2hMLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZUFBZSxHQUFHLE1BQU0sMEJBQTBCLENBQUM7QUFFNUQsT0FBTyxFQUFtQixZQUFZLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUM7Ozs7QUFXM0MsTUFBTSxPQUFPLG1CQUFtQjtJQWdCNUI7O09BRUc7SUFDSCxJQUF3QixFQUFFLENBQUMsSUFBWTtRQUNuQyxNQUFNLEVBQUUsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFOUIsMERBQTBEO1FBQzFELGlFQUFpRTtRQUNqRSxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUU7WUFDcEMsSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7U0FD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QUMsU0FBUztnQkF1Qk4sa0JBQWtCO3NCQUEzQixNQUFNO2dCQVNHLGVBQWU7c0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbnB1dCwgVmlld0NvbnRhaW5lclJlZiwgaXNEZXZNb2RlLCBDb21wb25lbnRSZWYsIEV2ZW50RW1pdHRlciwgT3B0aW9uYWwsIFZpZXdDaGlsZCwgQ29tcG9uZW50LCBJbmplY3QsIE91dHB1dCwgTmdNb2R1bGUsIEFmdGVyVmlld0luaXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdDb21wb25lbnRPdXRsZXQsIE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBEaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvZGlhbG9nJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZGVib3VuY2VUaW1lLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IExhenlMb2FkZXJTZXJ2aWNlIH0gZnJvbSAnLi9sYXp5LWxvYWRlci5zZXJ2aWNlJztcbmltcG9ydCB7IHN0cmluZ1RvU2x1ZyB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IENvbXBpbGVkQnVuZGxlLCBOZ3hMYXp5TG9hZGVyQ29uZmlnIH0gZnJvbSAnLi90eXBlcyc7XG5cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3gtbGF6eS1sb2FkZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9sYXp5LWxvYWRlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbICcuL2xhenktbG9hZGVyLmNvbXBvbmVudC5zY3NzJyBdLFxuICAgIGltcG9ydHM6IFsgTmdJZiwgTmdDb21wb25lbnRPdXRsZXQsIE5nVGVtcGxhdGVPdXRsZXQgXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIExhenlMb2FkZXJDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgICBAVmlld0NoaWxkKFwiY29udGVudFwiLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgdGFyZ2V0Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gICAgLyoqXG4gICAgICogISBIZXJlIGJlIGRyYWdvbnMuXG4gICAgICogT25seSB0aGUgYnJhdmVzdCBvZiBBZHZlbnR1cmVycyBjYW4gc3Vydml2ZSB0aGUgYmF0dGxlcyBiZWxvdyxcbiAgICAgKiBhbmQgdGhleSBtdXN0IGJlIHRyYWluZWQgYW5kIHJlYWR5IGZvciB0aGUgZ3J1ZWxsaW5nIGpvdXJuZXkgYWhlYWQuXG4gICAgICogTWFueSBhIHNvdWwgaGFzIHRyaWVkIHRvIGJlc3QgdGhlc2UgRHJhZ29ucywgeWV0IG9ubHkgb25lIGhhc1xuICAgICAqIHN1Y2NlZWRlZCBzaW5jZSBvdXIgZm91bmRpbmcuXG4gICAgICpcbiAgICAgKiBUTDtEUiAtLSBEb24ndCBtZXNzIHdpdGggdGhpcyB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UncmUgZG9pbmcuXG4gICAgICogICAgIFRoaXMgaXMgY2VudHJhbCB0byBhIHRvbiBvZiBtb3ZpbmcgcGFydHMgLS0gYnJlYWtpbmcgaXQgd2lsbFxuICAgICAqICAgICBjYXVzZSBtb3JlIGNvbGxhdGVyYWwgZGFtYWdlIHRoYW4geW91IG1heSByZWFsaXplLlxuICAgICAqL1xuXG4gICAgcHJpdmF0ZSBfaWQ6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgaWQgb2YgdGhlIGNvbXBvbmVudCB0aGF0IHdpbGwgYmUgbGF6eSBsb2FkZWRcbiAgICAgKi9cbiAgICBASW5wdXQoXCJjb21wb25lbnRcIikgc2V0IGlkKGRhdGE6IHN0cmluZykge1xuICAgICAgICBjb25zdCBpZCA9IHN0cmluZ1RvU2x1ZyhkYXRhKTtcblxuICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhIGNoYW5nZSB0byB0aGUgbG9hZGVkIGNvbXBvbmVudCdzIGlkXG4gICAgICAgIC8vIGlmIGl0J3MgdXBkYXRlZCwgd2UgZGVzdHJveSBhbmQgcmVoeWRyYXRlIHRoZSBlbnRpcmUgY29udGFpbmVyXG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxpemVkICYmIHRoaXMuX2lkICE9IGlkKSB7XG4gICAgICAgICAgICB0aGlzLl9pZCA9IGlkO1xuICAgICAgICAgICAgdGhpcy5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2lkID0gaWQ7XG4gICAgICAgIH1cbiAgICB9O1xuXG5cbiAgICBwcml2YXRlIF9ncm91cCA9IFwiZGVmYXVsdFwiO1xuICAgIEBJbnB1dChcImdyb3VwXCIpIHNldCBncm91cChkYXRhOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZ3JvdXAgPSBzdHJpbmdUb1NsdWcoZGF0YSk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBncm91cCAhPSBcInN0cmluZ1wiIHx8ICFncm91cCkgcmV0dXJuO1xuXG4gICAgICAgIC8vIElmIHRoZSBncm91cCB3YXMgdXBkYXRlZCwgcmV0cnkgdG8gYm9vdHN0cmFwIHNvbWV0aGluZyBpbnRvIHRoZSBjb250YWluZXIuXG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxpemVkICYmIHRoaXMuX2dyb3VwICE9IGdyb3VwKSB7XG4gICAgICAgICAgICB0aGlzLl9ncm91cCA9IGdyb3VwO1xuXG4gICAgICAgICAgICB0aGlzLm5nQWZ0ZXJWaWV3SW5pdCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZ3JvdXAgPSBncm91cDtcbiAgICB9XG4gICAgZ2V0IGdyb3VwKCkgeyByZXR1cm4gdGhpcy5fZ3JvdXAgfVxuXG4gICAgcHJpdmF0ZSBfbWF0Y2hHcm91cHM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gICAgcHJpdmF0ZSBfaW5wdXRzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbiAgICAvKipcbiAgICAgKiBBIG1hcCBvZiBpbnB1dHMgdG8gYmluZCB0byB0aGUgY2hpbGQuXG4gICAgICogU3VwcG9ydHMgY2hhbmdlIGRldGVjdGlvbi4gKE1heSBmYWlsIG9uIGRlZXAgSlNPTiBjaGFuZ2VzKVxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxsYXp5LWxvYWRlciBjb21wb25lbnQ9XCJNeUxhenlDb21wb25lbnRcIlxuICAgICAqICAgICAgIFtpbnB1dHNdPVwie1xuICAgICAqICAgICAgICAgIHByb3AxOiB0cnVlLFxuICAgICAqICAgICAgICAgIHByb3AyOiBmYWxzZSxcbiAgICAgKiAgICAgICAgICBjb21wbGV4OiB7XG4gICAgICogICAgICAgICAgICAgIGE6IHRydWUsXG4gICAgICogICAgICAgICAgICAgIGI6IDBcbiAgICAgKiAgICAgICAgICB9XG4gICAgICogICAgICAgfVwiXG4gICAgICogPlxuICAgICAqIDwvbGF6eS1sb2FkZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KFwiaW5wdXRzXCIpIHNldCBpbnB1dHMoZGF0YTogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0pIHtcbiAgICAgICAgaWYgKGRhdGEgPT0gdW5kZWZpbmVkKSByZXR1cm47XG5cbiAgICAgICAgbGV0IHByZXZpb3VzID0gdGhpcy5faW5wdXRzO1xuICAgICAgICB0aGlzLl9pbnB1dHMgPSBkYXRhO1xuICAgICAgICBpZiAoZGF0YSA9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBjb25zb2xlLnRyYWNlKGRhdGEpO1xuXG4gICAgICAgIGlmICh0aGlzLnRhcmdldENvbXBvbmVudEZhY3RvcnkpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgaW5wdXRzIH0gPSB0aGlzLnRhcmdldENvbXBvbmVudEZhY3RvcnkuybVjbXA7XG5cbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRLZXlzID0gT2JqZWN0LmtleXMoaW5wdXRzKTtcblxuICAgICAgICAgICAgY29uc3Qgb2xkS2V5cyA9IE9iamVjdC5rZXlzKHByZXZpb3VzKS5maWx0ZXIoa2V5ID0+IGN1cnJlbnRLZXlzLmluY2x1ZGVzKGtleSkpO1xuICAgICAgICAgICAgY29uc3QgbmV3S2V5cyA9IE9iamVjdC5rZXlzKGRhdGEpLmZpbHRlcihrZXkgPT4gY3VycmVudEtleXMuaW5jbHVkZXMoa2V5KSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZWQgPSBvbGRLZXlzLmZpbHRlcihrZXkgPT4gIW5ld0tleXMuaW5jbHVkZXMoa2V5KSk7XG5cbiAgICAgICAgICAgIC8vID8gcGVyaGFwcyBzZXQgdG8gbnVsbCBvciB1bmRlZmluZWQgaW5zdGVhZFxuICAgICAgICAgICAgcmVtb3ZlZC5mb3JFYWNoKGsgPT4gdGhpcy50YXJnZXRDb21wb25lbnRJbnN0YW5jZVtrXSA9IG51bGwpO1xuXG4gICAgICAgICAgICB0aGlzLmJpbmRJbnB1dHMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBvdXRwdXRTdWJzY3JpcHRpb25zOiB7IFtrZXk6IHN0cmluZ106IFN1YnNjcmlwdGlvbjsgfSA9IHt9O1xuICAgIHByaXZhdGUgX291dHB1dHM6IHsgW2tleTogc3RyaW5nXTogRnVuY3Rpb247IH07XG4gICAgLyoqXG4gICAgICogQSBtYXAgb2Ygb3V0cHV0cyB0byBiaW5kIGZyb20gdGhlIGNoaWxkLlxuICAgICAqIFNob3VsZCBzdXBwb3J0IGNoYW5nZSBkZXRlY3Rpb24uXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxsYXp5LWxvYWRlciBjb21wb25lbnQ9XCJNeUxhenlDb21wb25lbnRcIlxuICAgICAqICAgICAgIFtvdXRwdXRzXT1cIntcbiAgICAgKiAgICAgICAgICAgcHJvcDM6IG9uT3V0cHV0RmlyZVxuICAgICAqICAgICAgIH1cIlxuICAgICAqID5cbiAgICAgKiA8L2xhenktbG9hZGVyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dChcIm91dHB1dHNcIikgc2V0IG91dHB1dHMoZGF0YTogeyBba2V5OiBzdHJpbmddOiBGdW5jdGlvbjsgfSkge1xuICAgICAgICBsZXQgcHJldmlvdXMgPSB0aGlzLl9vdXRwdXRzO1xuICAgICAgICB0aGlzLl9vdXRwdXRzID0gZGF0YTtcblxuICAgICAgICBpZiAodGhpcy50YXJnZXRDb21wb25lbnRGYWN0b3J5KSB7XG4gICAgICAgICAgICBjb25zdCB7IGlucHV0cyB9ID0gdGhpcy50YXJnZXRDb21wb25lbnRGYWN0b3J5Lsm1Y21wO1xuXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50S2V5cyA9IE9iamVjdC5rZXlzKGlucHV0cyk7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVkID0gT2JqZWN0LmtleXMocHJldmlvdXMpLmZpbHRlcihrZXkgPT4gIWN1cnJlbnRLZXlzLmluY2x1ZGVzKGtleSkpO1xuXG4gICAgICAgICAgICByZW1vdmVkLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgICAgICAgLy8gVW5zdWJzY3JpYmUgZnJvbSBvYnNlcnZhYmxlXG4gICAgICAgICAgICAgICAgdGhpcy5vdXRwdXRTdWJzY3JpcHRpb25zW2tdPy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnRhcmdldENvbXBvbmVudEluc3RhbmNlW2tdO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuYmluZE91dHB1dHMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVtaXRzIGVycm9ycyBlbmNvdW50ZXJlZCB3aGVuIGxvYWRpbmcgY29tcG9uZW50c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBjb21wb25lbnRMb2FkRXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyB3aGVuIHRoZSBjb21wb25lbnQgaXMgZnVsbHkgY29uc3RydWN0ZWRcbiAgICAgKiBhbmQgaGFkIGl0J3MgaW5wdXRzIGFuZCBvdXRwdXRzIGJvdW5kXG4gICAgICogPiBiZWZvcmUgYE9uSW5pdGBcbiAgICAgKlxuICAgICAqIFJldHVybnMgdGhlIGFjdGl2ZSBjbGFzcyBpbnN0YW5jZSBvZiB0aGUgbGF6eS1sb2FkZWQgY29tcG9uZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIGNvbXBvbmVudExvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgY29tcG9uZW50IHRoYXQgaXMgY3VycmVudGx5IGxvYWRlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgaW5zdGFuY2U6IGFueTtcblxuXG4gICAgLyoqXG4gICAgICogQ29udGFpbmVyIHRoYXQgcHJvdmlkZXMgdGhlIGNvbXBvbmVudCBkYXRhXG4gICAgICovXG4gICAgcHJpdmF0ZSB0YXJnZXRNb2R1bGU6IENvbXBpbGVkQnVuZGxlO1xuXG4gICAgLyoqXG4gICAgICogQ29tcG9uZW50IGRlZmluaXRpb25cbiAgICAgKi9cbiAgICBwcml2YXRlIHRhcmdldENvbXBvbmVudEZhY3Rvcnk6IGFueTtcblxuICAgIC8qKlxuICAgICAqIEFjdGl2ZSBjb21wb25lbnQgY29udGFpbmVyIHJlZmVyZW5jZVxuICAgICAqL1xuICAgIHByaXZhdGUgdGFyZ2V0Q29tcG9uZW50Q29udGFpbmVyUmVmOiBDb21wb25lbnRSZWY8YW55PjtcbiAgICBwcml2YXRlIHRhcmdldFJlZjogYW55O1xuICAgIC8qKlxuICAgICAqIFJlZmVyZW5jZSB0byB0aGUgY29tcG9uZW50IGNsYXNzIGluc3RhbmNlXG4gICAgICovXG4gICAgcHJpdmF0ZSB0YXJnZXRDb21wb25lbnRJbnN0YW5jZTogYW55O1xuXG4gICAgLyoqXG4gICAgICogU3Vic2NyaXB0aW9uIHdpdGggdHJ1ZS9mYWxzZSBzdGF0ZSBvbiB3aGV0aGVyIHRoZSBkaXN0cmFjdG9yIHNob3VsZCBiZVxuICAgICAqL1xuICAgIHByaXZhdGUgZGlzdHJhY3RvclN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gICAgcHVibGljIGNvbmZpZzogTmd4TGF6eUxvYWRlckNvbmZpZztcbiAgICBwcml2YXRlIGVycjtcbiAgICBwcml2YXRlIHdhcm47XG4gICAgcHJpdmF0ZSBsb2c7XG5cbiAgICAvLyBGb3JjZSA1MDBtcyBkZWxheSBiZWZvcmUgcmV2ZWFsaW5nIHRoZSBzcGlubmVyXG4gICAgcHJpdmF0ZSBsb2FkZXJFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIHByaXZhdGUgY2xlYXJMb2FkZXIkID0gdGhpcy5sb2FkZXJFbWl0dGVyLnBpcGUoZGVib3VuY2VUaW1lKDMwMCkpO1xuICAgIHByaXZhdGUgbG9hZGVyU3ViOiBTdWJzY3JpcHRpb247XG4gICAgc2hvd0xvYWRlciA9IHRydWU7IC8vIHdoZXRoZXIgd2UgcmVuZGVyIHRoZSBET00gZm9yIHRoZSBzcGlubmVyXG4gICAgaXNDbGVhcmluZ0xvYWRlciA9IGZhbHNlOyAvLyBzaG91bGQgdGhlIHNwaW5uZXIgc3RhcnQgZmFkaW5nIG91dFxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgc2VydmljZTogTGF6eUxvYWRlclNlcnZpY2UsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgcHVibGljIGRpYWxvZzogRGlhbG9nUmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRpYWxvZ0FyZ3VtZW50c1xuICAgICkge1xuICAgICAgICB0aGlzLmNvbmZpZyA9IExhenlMb2FkZXJTZXJ2aWNlLmNvbmZpZztcbiAgICAgICAgdGhpcy5lcnIgPSBMYXp5TG9hZGVyU2VydmljZS5jb25maWcubG9nZ2VyLmVycjtcbiAgICAgICAgdGhpcy53YXJuID0gTGF6eUxvYWRlclNlcnZpY2UuY29uZmlnLmxvZ2dlci53YXJuO1xuICAgICAgICB0aGlzLmxvZyA9IExhenlMb2FkZXJTZXJ2aWNlLmNvbmZpZy5sb2dnZXIubG9nO1xuXG4gICAgICAgIC8vIEZpcnN0LCBjaGVjayBmb3IgZGlhbG9nIGFyZ3VtZW50c1xuICAgICAgICBpZiAodGhpcy5kaWFsb2dBcmd1bWVudHMpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRzID0gdGhpcy5kaWFsb2dBcmd1bWVudHMuaW5wdXRzIHx8IHRoaXMuZGlhbG9nQXJndW1lbnRzLmRhdGE7XG4gICAgICAgICAgICB0aGlzLm91dHB1dHMgPSB0aGlzLmRpYWxvZ0FyZ3VtZW50cy5vdXRwdXRzO1xuICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMuZGlhbG9nQXJndW1lbnRzLmlkO1xuICAgICAgICAgICAgdGhpcy5ncm91cCA9IHRoaXMuZGlhbG9nQXJndW1lbnRzLmdyb3VwO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sb2FkZXJTdWIgPSB0aGlzLmNsZWFyTG9hZGVyJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93TG9hZGVyID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICBhc3luYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMubmdPbkRlc3Ryb3koZmFsc2UpO1xuICAgICAgICB0aGlzLmlzQ2xlYXJpbmdMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93TG9hZGVyID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcblxuICAgICAgICBpZiAoIXRoaXMuX2lkKSB7XG4gICAgICAgICAgICB0aGlzLndhcm4oXCJObyBjb21wb25lbnQgd2FzIHNwZWNpZmllZCFcIik7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkRGVmYXVsdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IF9lbnRyeSA9IHRoaXMuc2VydmljZS5yZXNvbHZlUmVnaXN0cmF0aW9uRW50cnkodGhpcy5faWQsIHRoaXMuX2dyb3VwKTtcbiAgICAgICAgICAgIGlmICghX2VudHJ5IHx8ICFfZW50cnkuZW50cnkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycihgRmFpbGVkIHRvIGZpbmQgQ29tcG9uZW50ICcke3RoaXMuX2lkfScgaW4gZ3JvdXAgJyR7dGhpcy5fZ3JvdXB9JyBpbiByZWdpc3RyeSFgKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkRGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB7IGVudHJ5LCBtYXRjaEdyb3VwcyB9ID0gX2VudHJ5O1xuICAgICAgICAgICAgdGhpcy5fbWF0Y2hHcm91cHMgPSBtYXRjaEdyb3VwcztcblxuICAgICAgICAgICAgLy8gRG93bmxvYWQgdGhlIFwibW9kdWxlXCIgKHRoZSBzdGFuZGFsb25lIGNvbXBvbmVudClcbiAgICAgICAgICAgIGNvbnN0IGJ1bmRsZTogQ29tcGlsZWRCdW5kbGUgPSB0aGlzLnRhcmdldE1vZHVsZSA9IGF3YWl0IGVudHJ5LmxvYWQoKTtcblxuXG4gICAgICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBzb21lIGNvcnJ1cHRpb24gb24gdGhlIGJ1bmRsZS5cbiAgICAgICAgICAgIGlmICghYnVuZGxlIHx8IHR5cGVvZiBidW5kbGUgIT0gJ29iamVjdCcgfHwgYnVuZGxlWydfX2VzTW9kdWxlJ10gYXMgYW55ICE9PSB0cnVlIHx8IGJ1bmRsZS50b1N0cmluZygpICE9IFwiW29iamVjdCBNb2R1bGVdXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycihgRmFpbGVkIHRvIGxvYWQgY29tcG9uZW50L21vZHVsZSBmb3IgJyR7dGhpcy5faWR9JyEgUGFyc2VkIHJlc291cmNlIGlzIGludmFsaWQuYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZEVycm9yKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZXMgPSBPYmplY3Qua2V5cyhidW5kbGUpXG4gICAgICAgICAgICAgICAgLm1hcChrID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW50cnkgPSBidW5kbGVba107XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gU3RyaWN0bHkgY2hlY2sgZm9yIGV4cG9ydGVkIG1vZHVsZXMgb3Igc3RhbmRhbG9uZSBjb21wb25lbnRzXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBlbnRyeVtcIsm1ZmFjXCJdID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGUgPT4gZSAhPSBudWxsKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoZW50cnkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlbnRyeVsnX2lzTW9kdWxlJ10gPSAhIWVudHJ5WyfJtW1vZCddOyAvLyBtb2R1bGVcbiAgICAgICAgICAgICAgICAgICAgZW50cnlbJ19pc0NvbXBvbmVudCddID0gISFlbnRyeVsnybVjbXAnXTsgLy8gY29tcG9uZW50XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChlbnRyeVsnX2lzTW9kdWxlJ10gfHwgZW50cnlbJ19pc0NvbXBvbmVudCddKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKG1vZHVsZXMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycihgQ29tcG9uZW50L01vZHVsZSBsb2FkZWQgZm9yICcke3RoaXMuX2lkfScgaGFzIG5vIGV4cG9ydGVkIGNvbXBvbmVudHMgb3IgbW9kdWxlcyFgKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkRXJyb3IoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy50YXJnZXRDb21wb25lbnRGYWN0b3J5ID0gdGhpcy5zZXJ2aWNlLnJlc29sdmVDb21wb25lbnQodGhpcy5faWQsIFwiZGVmYXVsdFwiLCBtb2R1bGVzKTtcblxuICAgICAgICAgICAgaWYgKCFjb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycihgQ29tcG9uZW50ICcke3RoaXMuX2lkfScgaXMgaW52YWxpZCBvciBjb3JydXB0ZWQhYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZEVycm9yKCk7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgLy8gQm9vdHN0cmFwIHRoZSBjb21wb25lbnQgaW50byB0aGUgY29udGFpbmVyXG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLnRhcmdldENvbXBvbmVudENvbnRhaW5lclJlZiA9IHRoaXMudGFyZ2V0Q29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnQgYXMgYW55KTtcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0UmVmID0gdGhpcy50YXJnZXRDb250YWluZXIuaW5zZXJ0KHRoaXMudGFyZ2V0Q29tcG9uZW50Q29udGFpbmVyUmVmLmhvc3RWaWV3KTtcblxuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2U6IGFueSA9IHRoaXMudGFyZ2V0Q29tcG9uZW50SW5zdGFuY2UgPSBjb21wb25lbnRSZWZbJ2luc3RhbmNlJ107XG5cbiAgICAgICAgICAgIHRoaXMuYmluZElucHV0cygpO1xuICAgICAgICAgICAgdGhpcy5iaW5kT3V0cHV0cygpO1xuXG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudExvYWRlZC5uZXh0KGluc3RhbmNlKTtcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UgPSBpbnN0YW5jZTtcblxuICAgICAgICAgICAgLy8gTG9vayBmb3IgYW4gb2JzZXJ2YWJsZSBjYWxsZWQgaXNMb2FkaW5nJCB0aGF0IHdpbGwgbWFrZSB1cyBzaG93L2hpZGVcbiAgICAgICAgICAgIC8vIHRoZSBzYW1lIGRpc3RyYWN0b3IgdGhhdCBpcyB1c2VkIG9uIGJhc2ljIGxvYWRpbmdcbiAgICAgICAgICAgIGNvbnN0IGlzTG9hZGluZyQgPSBpbnN0YW5jZVsnbmd4U2hvd0Rpc3RyYWN0b3IkJ10gYXMgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+O1xuXG4gICAgICAgICAgICBpZiAoaXNMb2FkaW5nJCAmJiB0eXBlb2YgaXNMb2FkaW5nJC5zdWJzY3JpYmUgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXN0cmFjdG9yU3Vic2NyaXB0aW9uID0gaXNMb2FkaW5nJC5zdWJzY3JpYmUobG9hZGluZyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0NsZWFyaW5nTG9hZGVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGVyRW1pdHRlci5lbWl0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dMb2FkZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0NsZWFyaW5nTG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNDbGVhcmluZ0xvYWRlciA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBPYmplY3Qua2V5cyhidW5kbGUpWzBdO1xuICAgICAgICAgICAgdGhpcy5sb2coYExvYWRlZCAnJHtuYW1lfSdgKTtcbiAgICAgICAgICAgIHRoaXMubG9hZGVyRW1pdHRlci5lbWl0KCk7XG5cbiAgICAgICAgICAgIHJldHVybiBjb21wb25lbnRSZWY7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGV4KSB7XG5cbiAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIkNvbXBvbmVudCBcIiArIHRoaXMuX2lkICsgXCIgdGhyZXcgYW4gZXJyb3Igb24gbW91bnQhXCIpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlRoaXMgd2lsbCBjYXVzZSB5b3UgdG8gc2VlIGEgNDA0IHBhbmVsLlwiKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGV4KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gTmV0d29yayBlcnJvcnMgdGhyb3cgYSB0b2FzdCBhbmQgcmV0dXJuIGFuIGVycm9yIGNvbXBvbmVudFxuICAgICAgICAgICAgaWYgKGV4ICYmICFpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJVbmNhdWdodCBlcnJvciB3aGVuIGxvYWRpbmcgY29tcG9uZW50XCIpO1xuICAgICAgICAgICAgICAgIHRocm93IGV4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkRGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koY2xlYXJBbGwgPSB0cnVlKSB7XG4gICAgICAgIC8vIHVuc3Vic2NyaWJlIGZyb20gYWxsIHN1YnNjcmlwdGlvbnNcbiAgICAgICAgT2JqZWN0LmVudHJpZXModGhpcy5vdXRwdXRTdWJzY3JpcHRpb25zKS5mb3JFYWNoKChba2V5LCBzdWJdKSA9PiB7XG4gICAgICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMub3V0cHV0U3Vic2NyaXB0aW9ucyA9IHt9O1xuXG4gICAgICAgIC8vIENsZWFyIGFsbCB0aGluZ3NcbiAgICAgICAgaWYgKGNsZWFyQWxsKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRlclN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZGlzdHJhY3RvclN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcblxuICAgICAgICAvLyBDbGVhciB0YXJnZXQgY29udGFpbmVyXG4gICAgICAgIHRoaXMudGFyZ2V0UmVmPy5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMudGFyZ2V0Q29tcG9uZW50Q29udGFpbmVyUmVmPy5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMudGFyZ2V0Q29udGFpbmVyPy5jbGVhcigpO1xuXG4gICAgICAgIC8vIFdpcGUgdGhlIHJlc3Qgb2YgdGhlIHN0YXRlIGNsZWFuXG4gICAgICAgIHRoaXMudGFyZ2V0UmVmID0gbnVsbDtcbiAgICAgICAgdGhpcy50YXJnZXRDb21wb25lbnRDb250YWluZXJSZWYgPSBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJpbmQgdGhlIGlucHV0IHZhbHVlcyB0byB0aGUgY2hpbGQgY29tcG9uZW50LlxuICAgICAqL1xuICAgIHByaXZhdGUgYmluZElucHV0cygpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9pbnB1dHMgfHwgIXRoaXMudGFyZ2V0Q29tcG9uZW50SW5zdGFuY2UpIHJldHVybjtcblxuICAgICAgICAvLyBNZXJnZSBtYXRjaCBncm91cHNcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9tYXRjaEdyb3VwcyA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyh0aGlzLl9tYXRjaEdyb3VwcykuZm9yRWFjaCgoW2tleSwgdmFsXSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5faW5wdXRzW2tleV0gPT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2lucHV0c1trZXldID0gdmFsO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBmb3J3YXJkLWJpbmQgaW5wdXRzXG4gICAgICAgIGNvbnN0IHsgaW5wdXRzIH0gPSB0aGlzLnRhcmdldENvbXBvbmVudEZhY3RvcnkuybVjbXA7XG5cbiAgICAgICAgLy8gUmV0dXJucyBhIGxpc3Qgb2YgZW50cmllcyB0aGF0IG5lZWQgdG8gYmUgc2V0XG4gICAgICAgIC8vIFRoaXMgbWFrZXMgaXQgc28gdGhhdCB1bm5lY2Vzc2FyeSBzZXR0ZXJzIGFyZSBub3QgaW52b2tlZC5cbiAgICAgICAgY29uc3QgdXBkYXRlZCA9IE9iamVjdC5lbnRyaWVzKGlucHV0cykuZmlsdGVyKChbcGFyZW50S2V5LCBjaGlsZEtleV06IFtzdHJpbmcsIHN0cmluZ10pID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRhcmdldENvbXBvbmVudEluc3RhbmNlW2NoaWxkS2V5XSAhPSB0aGlzLl9pbnB1dHNbcGFyZW50S2V5XTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdXBkYXRlZC5mb3JFYWNoKChbcGFyZW50S2V5LCBjaGlsZEtleV06IFtzdHJpbmcsIHN0cmluZ10pID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pbnB1dHMuaGFzT3duUHJvcGVydHkocGFyZW50S2V5KSlcbiAgICAgICAgICAgICAgICB0aGlzLnRhcmdldENvbXBvbmVudEluc3RhbmNlW2NoaWxkS2V5XSA9IHRoaXMuX2lucHV0c1twYXJlbnRLZXldO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCaW5kIHRoZSBvdXRwdXQgaGFuZGxlcnMgdG8gdGhlIGxvYWRlZCBjaGlsZCBjb21wb25lbnRcbiAgICAgKi9cbiAgICBwcml2YXRlIGJpbmRPdXRwdXRzKCkge1xuICAgICAgICBpZiAoIXRoaXMuX291dHB1dHMgfHwgIXRoaXMudGFyZ2V0Q29tcG9uZW50SW5zdGFuY2UpIHJldHVybjtcblxuICAgICAgICBjb25zdCB7IG91dHB1dHMgfSA9IHRoaXMudGFyZ2V0Q29tcG9uZW50RmFjdG9yeS7JtWNtcDtcblxuICAgICAgICAvLyBHZXQgYSBsaXN0IG9mIHVucmVnaXN0ZXJlZCBvdXRwdXRzXG4gICAgICAgIGNvbnN0IG5ld091dHB1dHMgPSBPYmplY3QuZW50cmllcyhvdXRwdXRzKS5maWx0ZXIoKFtwYXJlbnRLZXksIGNoaWxkS2V5XTogW3N0cmluZywgc3RyaW5nXSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICF0aGlzLm91dHB1dFN1YnNjcmlwdGlvbnNbcGFyZW50S2V5XTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gUmV2ZXJzZSBiaW5kIHZpYSBzdWJzY3JpcHRpb25cbiAgICAgICAgbmV3T3V0cHV0cy5mb3JFYWNoKChbcGFyZW50S2V5LCBjaGlsZEtleV06IFtzdHJpbmcsIHN0cmluZ10pID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9vdXRwdXRzLmhhc093blByb3BlcnR5KHBhcmVudEtleSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQ6IEV2ZW50RW1pdHRlcjx1bmtub3duPiA9IHRoaXMudGFyZ2V0Q29tcG9uZW50SW5zdGFuY2VbY2hpbGRLZXldO1xuICAgICAgICAgICAgICAgIGNvbnN0IG91dHB1dHMgPSB0aGlzLl9vdXRwdXRzO1xuXG4gICAgICAgICAgICAgICAgLy8gQW5ndWxhciBmb2xrcywgc3RvcCBtYWtpbmcgdGhpcyBzbyBkaWZmaWN1bHQuXG4gICAgICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy52aWV3Q29udGFpbmVyUmVmWydfaG9zdExWaWV3J11bOF07XG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViID0gdGFyZ2V0LnN1YnNjcmliZShvdXRwdXRzW3BhcmVudEtleV0uYmluZChjdHgpKTsgLy8gU3Vic2NyaXB0aW9uXG5cbiAgICAgICAgICAgICAgICB0aGlzLm91dHB1dFN1YnNjcmlwdGlvbnNbcGFyZW50S2V5XSA9IHN1YjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9hZCB0aGUgXCJEZWZhdWx0XCIgY29tcG9uZW50ICg0MDQpIHNjcmVlbiBub3JtYWxseS5cbiAgICAgKiBUaGlzIGlzIHNob3duIHdoZW4gdGhlIGNvbXBvbmVudCBpZCBpc24ndCBpbiB0aGVcbiAgICAgKiByZWdpc3RyeSBvciBvdGhlcndpc2UgZG9lc24ndCBtYXRjaFxuICAgICAqXG4gICAgICogVGhpc1xuICAgICAqL1xuICAgIHByaXZhdGUgbG9hZERlZmF1bHQoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5ub3RGb3VuZENvbXBvbmVudClcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0Q29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudCh0aGlzLmNvbmZpZy5ub3RGb3VuZENvbXBvbmVudCk7XG5cbiAgICAgICAgdGhpcy5zaG93TG9hZGVyID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9hZCB0aGUgXCJFcnJvclwiIGNvbXBvbmVudC5cbiAgICAgKiBUaGlzIGlzIHNob3duIHdoZW4gd2UgYXJlIGFibGUgdG8gcmVzb2x2ZSB0aGUgY29tcG9uZW50XG4gICAgICogaW4gdGhlIHJlZ2lzdHJ5LCBidXQgaGF2ZSBzb21lIGlzc3VlIGJvb3N0cmFwcGluZyB0aGVcbiAgICAgKiBjb21wb25lbnQgaW50byB0aGUgdmlld0NvbnRhaW5lclxuICAgICAqL1xuICAgIHByaXZhdGUgbG9hZEVycm9yKCkge1xuICAgICAgICBpZiAodGhpcy5jb25maWcuZXJyb3JDb21wb25lbnQpXG4gICAgICAgICAgICB0aGlzLnRhcmdldENvbnRhaW5lci5jcmVhdGVDb21wb25lbnQodGhpcy5jb25maWcuZXJyb3JDb21wb25lbnQpO1xuXG4gICAgICAgIHRoaXMuc2hvd0xvYWRlciA9IGZhbHNlO1xuICAgIH1cbn1cbiIsIjxuZy1jb250YWluZXIgI2NvbnRlbnQ+PC9uZy1jb250YWluZXI+XG5cbjxkaXYgY2xhc3M9XCJuZ3gtbGF6eS1sb2FkZXItZGlzdHJhY3RvclwiIFtjbGFzcy5kZXN0cm95aW5nXT1cImlzQ2xlYXJpbmdMb2FkZXJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29uZmlnLmxvYWRlckRpc3RyYWN0b3JDb21wb25lbnRcIiBbbmdDb21wb25lbnRPdXRsZXRdPVwiY29uZmlnLmxvYWRlckRpc3RyYWN0b3JDb21wb25lbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29uZmlnLmxvYWRlckRpc3RyYWN0b3JUZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbmZpZy5sb2FkZXJEaXN0cmFjdG9yVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAnJGltcGxpY2l0JzogaW5wdXRzIH1cIj48L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuIl19
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { LazyLoaderComponent } from './lazy-loader.component';
|
|
3
|
+
import { LazyLoaderService, NGX_LAZY_LOADER_CONFIG } from './lazy-loader.service';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class LazyLoaderModule {
|
|
6
|
+
static forRoot(config) {
|
|
7
|
+
return ({
|
|
8
|
+
ngModule: LazyLoaderModule,
|
|
9
|
+
providers: [
|
|
10
|
+
LazyLoaderService,
|
|
11
|
+
{
|
|
12
|
+
provide: NGX_LAZY_LOADER_CONFIG,
|
|
13
|
+
useValue: config
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
LazyLoaderModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LazyLoaderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
20
|
+
LazyLoaderModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: LazyLoaderModule, imports: [LazyLoaderComponent], exports: [LazyLoaderComponent] });
|
|
21
|
+
LazyLoaderModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LazyLoaderModule, imports: [LazyLoaderComponent] });
|
|
22
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LazyLoaderModule, decorators: [{
|
|
23
|
+
type: NgModule,
|
|
24
|
+
args: [{
|
|
25
|
+
imports: [LazyLoaderComponent],
|
|
26
|
+
exports: [LazyLoaderComponent]
|
|
27
|
+
}]
|
|
28
|
+
}] });
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF6eS1sb2FkZXIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9jb21wb25lbnRzL2xhenktbG9hZGVyL2xhenktbG9hZGVyLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVCLFFBQVEsRUFBc0IsTUFBTSxlQUFlLENBQUM7QUFFbEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBTWxGLE1BQU0sT0FBTyxnQkFBZ0I7SUFDbEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUEyQjtRQUM3QyxPQUFPLENBQUM7WUFDSixRQUFRLEVBQUUsZ0JBQWdCO1lBQzFCLFNBQVMsRUFBRTtnQkFDUCxpQkFBaUI7Z0JBQ2pCO29CQUNJLE9BQU8sRUFBRSxzQkFBc0I7b0JBQy9CLFFBQVEsRUFBRSxNQUFNO2lCQUNuQjthQUNKO1NBQ0osQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7NkdBWlEsZ0JBQWdCOzhHQUFoQixnQkFBZ0IsWUFIZixtQkFBbUIsYUFDbkIsbUJBQW1COzhHQUVwQixnQkFBZ0IsWUFIZixtQkFBbUI7MkZBR3BCLGdCQUFnQjtrQkFKNUIsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztvQkFDOUIsT0FBTyxFQUFFLENBQUMsbUJBQW1CLENBQUM7aUJBQ2pDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUsIE9wdGlvbmFsLCBTa2lwU2VsZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmd4TGF6eUxvYWRlckNvbmZpZyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgTGF6eUxvYWRlckNvbXBvbmVudCB9IGZyb20gJy4vbGF6eS1sb2FkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IExhenlMb2FkZXJTZXJ2aWNlLCBOR1hfTEFaWV9MT0FERVJfQ09ORklHIH0gZnJvbSAnLi9sYXp5LWxvYWRlci5zZXJ2aWNlJztcblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbTGF6eUxvYWRlckNvbXBvbmVudF0sXG4gICAgZXhwb3J0czogW0xhenlMb2FkZXJDb21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIExhenlMb2FkZXJNb2R1bGUge1xuICAgIHB1YmxpYyBzdGF0aWMgZm9yUm9vdChjb25maWc6IE5neExhenlMb2FkZXJDb25maWcpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPExhenlMb2FkZXJNb2R1bGU+IHtcbiAgICAgICAgcmV0dXJuICh7XG4gICAgICAgICAgICBuZ01vZHVsZTogTGF6eUxvYWRlck1vZHVsZSxcbiAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgIExhenlMb2FkZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogTkdYX0xBWllfTE9BREVSX0NPTkZJRyxcbiAgICAgICAgICAgICAgICAgICAgdXNlVmFsdWU6IGNvbmZpZ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|