angular-three 1.7.2 → 1.8.1
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/esm2020/index.mjs +2 -1
- package/esm2020/lib/renderer/renderer.mjs +8 -2
- package/esm2020/lib/routed-scene.mjs +29 -0
- package/fesm2015/angular-three.mjs +33 -2
- package/fesm2015/angular-three.mjs.map +1 -1
- package/fesm2020/angular-three.mjs +33 -2
- package/fesm2020/angular-three.mjs.map +1 -1
- package/index.d.ts +1 -0
- package/lib/renderer/renderer.d.ts +1 -0
- package/lib/routed-scene.d.ts +8 -0
- package/package.json +3 -2
- package/plugin/package.json +1 -1
package/esm2020/index.mjs
CHANGED
|
@@ -10,6 +10,7 @@ export * from './lib/loader';
|
|
|
10
10
|
export * from './lib/loop';
|
|
11
11
|
export * from './lib/pipes/push';
|
|
12
12
|
export * from './lib/portal';
|
|
13
|
+
export * from './lib/routed-scene';
|
|
13
14
|
export * from './lib/stores/rx-store';
|
|
14
15
|
export * from './lib/stores/store';
|
|
15
16
|
export * from './lib/types';
|
|
@@ -20,4 +21,4 @@ export * from './lib/utils/is';
|
|
|
20
21
|
export * from './lib/utils/make';
|
|
21
22
|
export * from './lib/utils/safe-detect-changes';
|
|
22
23
|
export * from './lib/utils/update';
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMxRCxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9jYW52YXMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGkvYmVmb3JlLXJlbmRlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaS9jYXRhbG9ndWUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGkvZGVzdHJveSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaS9yZWYnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGkvcnVuLWluLWNvbnRleHQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9hcmdzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpcmVjdGl2ZXMvcmVwZWF0JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2xvYWRlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9sb29wJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BpcGVzL3B1c2gnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcG9ydGFsJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3JvdXRlZC1zY2VuZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zdG9yZXMvcngtc3RvcmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc3RvcmVzL3N0b3JlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3R5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL2FwcGx5LXByb3BzJztcbmV4cG9ydCB7IGNyZWF0ZUF0dGFjaEZ1bmN0aW9uIH0gZnJvbSAnLi9saWIvdXRpbHMvYXR0YWNoJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL2luc3RhbmNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL2lzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL21ha2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvc2FmZS1kZXRlY3QtY2hhbmdlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscy91cGRhdGUnO1xuIl19
|
|
@@ -17,6 +17,7 @@ export class NgtRendererFactory {
|
|
|
17
17
|
this.compoundPrefixes = inject(NGT_COMPOUND_PREFIXES);
|
|
18
18
|
this.document = inject(DOCUMENT);
|
|
19
19
|
this.rendererMap = new Map();
|
|
20
|
+
this.routedSet = new Set();
|
|
20
21
|
this.portals = [];
|
|
21
22
|
this.rendererStore = new NgtRendererStore({
|
|
22
23
|
store: this.store,
|
|
@@ -30,9 +31,14 @@ export class NgtRendererFactory {
|
|
|
30
31
|
const delegateRenderer = this.delegateRendererFactory.createRenderer(hostElement, type);
|
|
31
32
|
if (!type)
|
|
32
33
|
return delegateRenderer;
|
|
34
|
+
if (type['type']['isRoutedScene']) {
|
|
35
|
+
this.routedSet.add(type.id);
|
|
36
|
+
}
|
|
33
37
|
let renderer = this.rendererMap.get(type.id);
|
|
34
38
|
if (!renderer) {
|
|
35
|
-
renderer = new NgtRenderer(delegateRenderer, this.rendererStore, this.catalogue,
|
|
39
|
+
renderer = new NgtRenderer(delegateRenderer, this.rendererStore, this.catalogue,
|
|
40
|
+
// setting root scene if there's no routed scene OR this component is the routed Scene
|
|
41
|
+
!hostElement && (this.routedSet.size === 0 || this.routedSet.has(type.id)));
|
|
36
42
|
this.rendererMap.set(type.id, renderer);
|
|
37
43
|
}
|
|
38
44
|
return renderer;
|
|
@@ -323,4 +329,4 @@ export class NgtRenderer {
|
|
|
323
329
|
return this.delegate.data;
|
|
324
330
|
}
|
|
325
331
|
}
|
|
326
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUvc3JjL2xpYi9yZW5kZXJlci9yZW5kZXJlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUNILGlCQUFpQixFQUNqQixZQUFZLEVBQ1osTUFBTSxFQUNOLFVBQVUsRUFFVixnQkFBZ0IsR0FFbkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTdDLE9BQU8sRUFBbUIsZ0JBQWdCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxTQUFTLENBQUM7O0FBR2hILE1BQU0sT0FBTyxrQkFBa0I7SUFEL0I7UUFFcUIsNEJBQXVCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdkUsUUFBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2hDLFVBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekIsY0FBUyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNsQyxxQkFBZ0IsR0FBRyxNQUFNLENBQUMscUJBQXFC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LElBQUk7Z0JBQ0osR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO2FBQ2pHLENBQUMsQ0FBQztTQUNOO1FBQ0QsT0FBTyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQWFELElBQUksSUFBSTtRQUNKLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFDOUIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBnZXREZWJ1Z05vZGUsXG4gICAgaW5qZWN0LFxuICAgIEluamVjdGFibGUsXG4gICAgUmVuZGVyZXIyLFxuICAgIFJlbmRlcmVyRmFjdG9yeTIsXG4gICAgUmVuZGVyZXJUeXBlMixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR1RfQ0FUQUxPR1VFIH0gZnJvbSAnLi4vZGkvY2F0YWxvZ3VlJztcbmltcG9ydCB7IE5ndFN0b3JlIH0gZnJvbSAnLi4vc3RvcmVzL3N0b3JlJztcbmltcG9ydCB7IE5ndEFueVJlY29yZCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGdldExvY2FsU3RhdGUsIHByZXBhcmUgfSBmcm9tICcuLi91dGlscy9pbnN0YW5jZSc7XG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uL3V0aWxzL2lzJztcbmltcG9ydCB7IE5HVF9DT01QT1VORF9QUkVGSVhFUyB9IGZyb20gJy4vZGknO1xuaW1wb3J0IHsgTmd0UmVuZGVyZXJDbGFzc0lkIH0gZnJvbSAnLi9lbnVtcyc7XG5pbXBvcnQgeyBOZ3RSZW5kZXJlck5vZGUsIE5ndFJlbmRlcmVyU3RvcmUgfSBmcm9tICcuL3N0YXRlJztcbmltcG9ydCB7IGF0dGFjaFRocmVlQ2hpbGQsIGtlYmFiVG9QYXNjYWwsIHByb2Nlc3NUaHJlZUV2ZW50LCByZW1vdmVUaHJlZUNoaWxkLCBTUEVDSUFMX0RPTV9UQUcgfSBmcm9tICcuL3V0aWxzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5ndFJlbmRlcmVyRmFjdG9yeSBpbXBsZW1lbnRzIFJlbmRlcmVyRmFjdG9yeTIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVsZWdhdGVSZW5kZXJlckZhY3RvcnkgPSBpbmplY3QoUmVuZGVyZXJGYWN0b3J5MiwgeyBza2lwU2VsZjogdHJ1ZSB9KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBzdG9yZSA9IGluamVjdChOZ3RTdG9yZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXRhbG9ndWUgPSBpbmplY3QoTkdUX0NBVEFMT0dVRSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjb21wb3VuZFByZWZpeGVzID0gaW5qZWN0KE5HVF9DT01QT1VORF9QUkVGSVhFUyk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG5cbiAgICBwcml2YXRlIHJlbmRlcmVyTWFwID0gbmV3IE1hcDxzdHJpbmcsIFJlbmRlcmVyMj4oKTtcbiAgICBwcml2YXRlIHBvcnRhbHM6IE5ndFJlbmRlcmVyTm9kZVtdID0gW107XG4gICAgcHJpdmF0ZSByZW5kZXJlclN0b3JlID0gbmV3IE5ndFJlbmRlcmVyU3RvcmUoe1xuICAgICAgICBzdG9yZTogdGhpcy5zdG9yZSxcbiAgICAgICAgY2RyOiB0aGlzLmNkcixcbiAgICAgICAgcG9ydGFsczogdGhpcy5wb3J0YWxzLFxuICAgICAgICBjb21wb3VuZFByZWZpeGVzOiB0aGlzLmNvbXBvdW5kUHJlZml4ZXMsXG4gICAgICAgIGRvY3VtZW50OiB0aGlzLmRvY3VtZW50LFxuICAgIH0pO1xuXG4gICAgY3JlYXRlUmVuZGVyZXIoaG9zdEVsZW1lbnQ6IGFueSwgdHlwZTogUmVuZGVyZXJUeXBlMiB8IG51bGwpOiBSZW5kZXJlcjIge1xuICAgICAgICBjb25zdCBkZWxlZ2F0ZVJlbmRlcmVyID0gdGhpcy5kZWxlZ2F0ZVJlbmRlcmVyRmFjdG9yeS5jcmVhdGVSZW5kZXJlcihob3N0RWxlbWVudCwgdHlwZSk7XG4gICAgICAgIGlmICghdHlwZSkgcmV0dXJuIGRlbGVnYXRlUmVuZGVyZXI7XG5cbiAgICAgICAgbGV0IHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlck1hcC5nZXQodHlwZS5pZCk7XG4gICAgICAgIGlmICghcmVuZGVyZXIpIHtcbiAgICAgICAgICAgIHJlbmRlcmVyID0gbmV3IE5ndFJlbmRlcmVyKGRlbGVnYXRlUmVuZGVyZXIsIHRoaXMucmVuZGVyZXJTdG9yZSwgdGhpcy5jYXRhbG9ndWUsICFob3N0RWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyTWFwLnNldCh0eXBlLmlkLCByZW5kZXJlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlbmRlcmVyO1xuICAgIH1cbn1cblxuLyoqXG4gKiBBbnl0aGluZyBhYmJyZXZpYXRlZCB3aXRoIHJTL1JTIHN0YW5kcyBmb3IgUmVuZGVyZXJTdGF0ZVxuICovXG5leHBvcnQgY2xhc3MgTmd0UmVuZGVyZXIgaW1wbGVtZW50cyBSZW5kZXJlcjIge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGRlbGVnYXRlOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmU6IE5ndFJlbmRlcmVyU3RvcmUsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY2F0YWxvZ3VlOiBSZWNvcmQ8c3RyaW5nLCBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnk+LFxuICAgICAgICBwcml2YXRlIHJvb3QgPSB0cnVlXG4gICAgKSB7fVxuXG4gICAgY3JlYXRlRWxlbWVudChuYW1lOiBzdHJpbmcsIG5hbWVzcGFjZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZGVsZWdhdGUuY3JlYXRlRWxlbWVudChuYW1lLCBuYW1lc3BhY2UpO1xuXG4gICAgICAgIC8vIG9uIGZpcnN0IHBhc3MsIHdlIHJldHVybiB0aGUgUm9vdCBTY2VuZSBhcyB0aGUgcm9vdCBub2RlXG4gICAgICAgIGlmICh0aGlzLnJvb3QpIHtcbiAgICAgICAgICAgIHRoaXMucm9vdCA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RvcmUuY3JlYXRlTm9kZSgndGhyZWUnLCB0aGlzLnN0b3JlLnJvb3RTY2VuZSk7XG4gICAgICAgICAgICBub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdG9yRmFjdG9yeV0gPSAoKSA9PiBnZXREZWJ1Z05vZGUoZWxlbWVudCkhLmluamVjdG9yO1xuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBoYW5kbGUgY29tcG91bmRcbiAgICAgICAgaWYgKHRoaXMuc3RvcmUuaXNDb21wb3VuZChuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuY3JlYXRlTm9kZSgnY29tcG91bmQnLCBlbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGhhbmRsZSBwb3J0YWxcbiAgICAgICAgaWYgKG5hbWUgPT09IFNQRUNJQUxfRE9NX1RBRy5OR1RfUE9SVEFMKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5jcmVhdGVOb2RlKCdwb3J0YWwnLCBlbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGhhbmRsZSByYXcgdmFsdWVcbiAgICAgICAgaWYgKG5hbWUgPT09IFNQRUNJQUxfRE9NX1RBRy5OR1RfVkFMVUUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0b3JlLmNyZWF0ZU5vZGUoXG4gICAgICAgICAgICAgICAgJ3RocmVlJyxcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHsgX19uZ3RfcmVuZGVyZXJfXzogeyByYXdWYWx1ZTogdW5kZWZpbmVkIH0gfSwgeyBfX25ndF9fOiB7IGlzUmF3OiB0cnVlIH0gfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IGluamVjdGVkQXJncywgc3RvcmUgfSA9IHRoaXMuc3RvcmUuZ2V0Q3JlYXRpb25TdGF0ZSgpO1xuXG4gICAgICAgIC8vIGhhbmRsZSBwcmltaXRpdmVcbiAgICAgICAgaWYgKG5hbWUgPT09IFNQRUNJQUxfRE9NX1RBRy5OR1RfUFJJTUlUSVZFKSB7XG4gICAgICAgICAgICBpZiAoIWluamVjdGVkQXJnc1swXSkgdGhyb3cgbmV3IEVycm9yKGBbTkdUXSBuZ3QtcHJpbWl0aXZlIHdpdGhvdXQgYXJncyBpcyBpbnZhbGlkYCk7XG4gICAgICAgICAgICBjb25zdCBvYmplY3QgPSBpbmplY3RlZEFyZ3NbMF07XG4gICAgICAgICAgICBsZXQgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUob2JqZWN0KTtcbiAgICAgICAgICAgIGlmICghT2JqZWN0LmtleXMobG9jYWxTdGF0ZSkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcHJlcGFyZShvYmplY3QsIHsgc3RvcmUsIGFyZ3M6IGluamVjdGVkQXJncywgcHJpbWl0aXZlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKG9iamVjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWxvY2FsU3RhdGUuc3RvcmUpIGxvY2FsU3RhdGUuc3RvcmUgPSBzdG9yZTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0b3JlLmNyZWF0ZU5vZGUoJ3RocmVlJywgb2JqZWN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRocmVlVGFnID0gbmFtZS5zdGFydHNXaXRoKCduZ3QnKSA/IG5hbWUuc2xpY2UoNCkgOiBuYW1lO1xuICAgICAgICBjb25zdCB0aHJlZU5hbWUgPSBrZWJhYlRvUGFzY2FsKHRocmVlVGFnKTtcbiAgICAgICAgY29uc3QgdGhyZWVUYXJnZXQgPSB0aGlzLmNhdGFsb2d1ZVt0aHJlZU5hbWVdO1xuICAgICAgICAvLyB3ZSBoYXZlIHRoZSBUSFJFRSBjb25zdHJ1Y3RvciBoZXJlLCBoYW5kbGUgaXRcbiAgICAgICAgaWYgKHRocmVlVGFyZ2V0KSB7XG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IHByZXBhcmUobmV3IHRocmVlVGFyZ2V0KC4uLmluamVjdGVkQXJncyksIHsgc3RvcmUsIGFyZ3M6IGluamVjdGVkQXJncyB9KTtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0b3JlLmNyZWF0ZU5vZGUoJ3RocmVlJywgaW5zdGFuY2UpO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUoaW5zdGFuY2UpO1xuICAgICAgICAgICAgaWYgKGlzLmdlb21ldHJ5KGluc3RhbmNlKSkge1xuICAgICAgICAgICAgICAgIGxvY2FsU3RhdGUuYXR0YWNoID0gWydnZW9tZXRyeSddO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpcy5tYXRlcmlhbChpbnN0YW5jZSkpIHtcbiAgICAgICAgICAgICAgICBsb2NhbFN0YXRlLmF0dGFjaCA9IFsnbWF0ZXJpYWwnXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuY3JlYXRlTm9kZSgnZG9tJywgZWxlbWVudCk7XG4gICAgfVxuXG4gICAgY3JlYXRlQ29tbWVudCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JlLmNyZWF0ZU5vZGUoJ2NvbW1lbnQnLCB0aGlzLmRlbGVnYXRlLmNyZWF0ZUNvbW1lbnQodmFsdWUpKTtcbiAgICB9XG5cbiAgICBhcHBlbmRDaGlsZChwYXJlbnQ6IE5ndFJlbmRlcmVyTm9kZSwgbmV3Q2hpbGQ6IE5ndFJlbmRlcmVyTm9kZSk6IHZvaWQge1xuICAgICAgICAvLyBUT0RPOiBqdXN0IGlnbm9yZSB0ZXh0IG5vZGUgZm9yIG5vd1xuICAgICAgICBpZiAobmV3Q2hpbGQgaW5zdGFuY2VvZiBUZXh0KSByZXR1cm47XG4gICAgICAgIGNvbnN0IGNSUyA9IG5ld0NoaWxkLl9fbmd0X3JlbmRlcmVyX187XG4gICAgICAgIGNvbnN0IHBSUyA9IHBhcmVudC5fX25ndF9yZW5kZXJlcl9fO1xuXG4gICAgICAgIGlmIChjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnY29tbWVudCcpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuc2V0UGFyZW50KG5ld0NoaWxkLCBwYXJlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdG9yZS5zZXRQYXJlbnQobmV3Q2hpbGQsIHBhcmVudCk7XG4gICAgICAgIHRoaXMuc3RvcmUuYWRkQ2hpbGQocGFyZW50LCBuZXdDaGlsZCk7XG5cbiAgICAgICAgLy8gaWYgbmV3IGNoaWxkIGlzIGEgcG9ydGFsXG4gICAgICAgIGlmIChjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAncG9ydGFsJykge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5wcm9jZXNzUG9ydGFsQ29udGFpbmVyKG5ld0NoaWxkKTtcbiAgICAgICAgICAgIGlmIChjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKHBhcmVudCwgY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC5wb3J0YWxDb250YWluZXJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHBhcmVudCBpcyBhIHBvcnRhbFxuICAgICAgICBpZiAocFJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3BvcnRhbCcpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUucHJvY2Vzc1BvcnRhbENvbnRhaW5lcihwYXJlbnQpO1xuICAgICAgICAgICAgaWYgKHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQocFJTW05ndFJlbmRlcmVyQ2xhc3NJZC5wb3J0YWxDb250YWluZXJdLCBuZXdDaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiBib3RoIGFyZSB0aHJlZSBpbnN0YW5jZXMsIHN0cmFpZ2h0Zm9yd2FyZCBjYXNlXG4gICAgICAgIGlmIChwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnICYmIGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcbiAgICAgICAgICAgIC8vIGlmIGNoaWxkIGFscmVhZHkgYXR0YWNoZWQgdG8gYSBwYXJlbnQsIHNraXBcbiAgICAgICAgICAgIGlmIChnZXRMb2NhbFN0YXRlKG5ld0NoaWxkKS5wYXJlbnQpIHJldHVybjtcbiAgICAgICAgICAgIC8vIGF0dGFjaCBUSFJFRSBjaGlsZFxuICAgICAgICAgICAgYXR0YWNoVGhyZWVDaGlsZChwYXJlbnQsIG5ld0NoaWxkKTtcbiAgICAgICAgICAgIC8vIGhlcmUsIHdlIGhhbmRsZSB0aGUgc3BlY2lhbCBjYXNlIG9mIGlmIHRoZSBwYXJlbnQgaGFzIGEgY29tcG91bmRQYXJlbnQsIHdoaWNoIG1lYW5zIHRoaXMgY2hpbGQgaXMgcGFydCBvZiBhIGNvbXBvdW5kIHBhcmVudCB0ZW1wbGF0ZVxuICAgICAgICAgICAgaWYgKCFjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kXSkgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgY2xvc2VzdEdyYW5kcGFyZW50V2l0aENvbXBvdW5kID0gdGhpcy5zdG9yZS5nZXRDbG9zZXN0UGFyZW50V2l0aENvbXBvdW5kKHBhcmVudCk7XG4gICAgICAgICAgICBpZiAoIWNsb3Nlc3RHcmFuZHBhcmVudFdpdGhDb21wb3VuZCkgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChjbG9zZXN0R3JhbmRwYXJlbnRXaXRoQ29tcG91bmQsIG5ld0NoaWxkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIG9ubHkgdGhlIHBhcmVudCBpcyB0aGUgVEhSRUUgaW5zdGFuY2VcbiAgICAgICAgaWYgKHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmVuZGVyQ2hpbGQgb2YgY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC5jaGlsZHJlbl0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKHBhcmVudCwgcmVuZGVyQ2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgcGFyZW50IGlzIGEgY29tcG91bmRcbiAgICAgICAgaWYgKHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21wb3VuZCcpIHtcbiAgICAgICAgICAgIC8vIGlmIGNvbXBvdW5kIGRvZXNuJ3QgaGF2ZSBhIFRIUkVFIGluc3RhbmNlIHNldCB5ZXRcbiAgICAgICAgICAgIGlmICghcFJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSAmJiBjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgY2hpbGQgaXMgaW5kZWVkIGFuIG5ndENvbXBvdW5kXG4gICAgICAgICAgICAgICAgaWYgKGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRdKSB0aGlzLnN0b3JlLnNldENvbXBvdW5kKHBhcmVudCwgbmV3Q2hpbGQpO1xuICAgICAgICAgICAgICAgIC8vIGlmIG5vdCwgd2UgdHJhY2sgdGhlIHBhcmVudCAodGhhdCBpcyBzdXBwb3NlZGx5IHRoZSBjb21wb3VuZCBjb21wb25lbnQpIG9uIHRoaXMgdGhyZWUgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICBlbHNlIGlmICghY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZFBhcmVudF0pIGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRQYXJlbnRdID0gcGFyZW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyByZXNldCB0aGUgY29tcG91bmQgaWYgaXQncyBjaGFuZ2VkXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgcFJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSAmJlxuICAgICAgICAgICAgICAgIGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScgJiZcbiAgICAgICAgICAgICAgICBjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kXSAmJlxuICAgICAgICAgICAgICAgIHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0gIT09IG5ld0NoaWxkXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLnNldENvbXBvdW5kKHBhcmVudCwgbmV3Q2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2hvdWxkRmluZEdyYW5kcGFyZW50SW5zdGFuY2UgPVxuICAgICAgICAgICAgLy8gaWYgY2hpbGQgaXMgdGhyZWUgYnV0IGhhdmVuJ3QgYmVlbiBhdHRhY2hlZCB0byBhIHBhcmVudCB5ZXRcbiAgICAgICAgICAgIChjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnICYmICFnZXRMb2NhbFN0YXRlKG5ld0NoaWxkKS5wYXJlbnQpIHx8XG4gICAgICAgICAgICAvLyBvciBib3RoIHBhcmVudCBhbmQgY2hpbGQgYXJlIERPTSBlbGVtZW50c1xuICAgICAgICAgICAgKChwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnZG9tJyB8fFxuICAgICAgICAgICAgICAgIChwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnY29tcG91bmQnICYmICFwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdKSkgJiZcbiAgICAgICAgICAgICAgICAoY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2RvbScgfHxcbiAgICAgICAgICAgICAgICAgICAgKGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21wb3VuZCcgJiYgIWNSU1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0pKSk7XG5cbiAgICAgICAgaWYgKHNob3VsZEZpbmRHcmFuZHBhcmVudEluc3RhbmNlKSB7XG4gICAgICAgICAgICAvLyB3ZSdsbCB0cnkgdG8gZ2V0IHRoZSBncmFuZHBhcmVudCBpbnN0YW5jZSBoZXJlIHNvIHRoYXQgd2UgY2FuIHJ1biBhcHBlbmRDaGlsZCB3aXRoIGJvdGggaW5zdGFuY2VzXG4gICAgICAgICAgICBjb25zdCBjbG9zZXN0R3JhbmRwYXJlbnRJbnN0YW5jZSA9IHRoaXMuc3RvcmUuZ2V0Q2xvc2VzdFBhcmVudFdpdGhJbnN0YW5jZShwYXJlbnQpO1xuICAgICAgICAgICAgaWYgKGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlKSB0aGlzLmFwcGVuZENoaWxkKGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlLCBuZXdDaGlsZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbnNlcnRCZWZvcmUoXG4gICAgICAgIHBhcmVudDogTmd0UmVuZGVyZXJOb2RlLFxuICAgICAgICBuZXdDaGlsZDogTmd0UmVuZGVyZXJOb2RlXG4gICAgICAgIC8vIFRPRE8gIHdlIG1pZ2h0IG5lZWQgdGhlc2U/XG4gICAgICAgIC8vIHJlZkNoaWxkOiBOZ3RSZW5kZXJlck5vZGVcbiAgICAgICAgLy8gaXNNb3ZlPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAgICk6IHZvaWQge1xuICAgICAgICBpZiAoIXBhcmVudC5fX25ndF9yZW5kZXJlcl9fIHx8IHBhcmVudCA9PT0gbmV3Q2hpbGQpIHJldHVybjtcbiAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChwYXJlbnQsIG5ld0NoaWxkKTtcbiAgICB9XG5cbiAgICByZW1vdmVDaGlsZChwYXJlbnQ6IE5ndFJlbmRlcmVyTm9kZSwgb2xkQ2hpbGQ6IE5ndFJlbmRlcmVyTm9kZSwgaXNIb3N0RWxlbWVudD86IGJvb2xlYW4gfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcFJTID0gcGFyZW50Ll9fbmd0X3JlbmRlcmVyX187XG4gICAgICAgIGNvbnN0IGNSUyA9IG9sZENoaWxkLl9fbmd0X3JlbmRlcmVyX187XG4gICAgICAgIGlmIChwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnICYmIGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcbiAgICAgICAgICAgIHJlbW92ZVRocmVlQ2hpbGQocGFyZW50LCBvbGRDaGlsZCwgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRlc3Ryb3kob2xkQ2hpbGQsIHBhcmVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocFJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbXBvdW5kJyAmJiBwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnBhcmVudF0pIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQocFJTW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdLCBvbGRDaGlsZCwgaXNIb3N0RWxlbWVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocFJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJykge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5kZXN0cm95KG9sZENoaWxkLCBwYXJlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UgPSB0aGlzLnN0b3JlLmdldENsb3Nlc3RQYXJlbnRXaXRoSW5zdGFuY2UocGFyZW50KTtcbiAgICAgICAgaWYgKGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlKSB0aGlzLnJlbW92ZUNoaWxkKGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlLCBvbGRDaGlsZCwgaXNIb3N0RWxlbWVudCk7XG4gICAgICAgIHRoaXMuc3RvcmUuZGVzdHJveShvbGRDaGlsZCwgY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UgYXMgTmd0UmVuZGVyZXJOb2RlKTtcbiAgICB9XG5cbiAgICBwYXJlbnROb2RlKG5vZGU6IE5ndFJlbmRlcmVyTm9kZSkge1xuICAgICAgICBjb25zdCByUyA9IG5vZGUuX19uZ3RfcmVuZGVyZXJfXztcbiAgICAgICAgaWYgKHJTPy5bTmd0UmVuZGVyZXJDbGFzc0lkLnBhcmVudF0pIHJldHVybiByU1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUucGFyZW50Tm9kZShub2RlKTtcbiAgICB9XG5cbiAgICBzZXRBdHRyaWJ1dGUoZWw6IE5ndFJlbmRlcmVyTm9kZSwgbmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBuYW1lc3BhY2U/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJTID0gZWwuX19uZ3RfcmVuZGVyZXJfXztcbiAgICAgICAgaWYgKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbXBvdW5kJykge1xuICAgICAgICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSB0aGUgY29tcG91bmQgaW5zdGFuY2UgeWV0XG4gICAgICAgICAgICByU1tOZ3RSZW5kZXJlckNsYXNzSWQuYXR0cmlidXRlc11bbmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIGlmICghclNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5xdWV1ZU9wZXJhdGlvbihlbCwgWydvcCcsICgpID0+IHRoaXMuc2V0QXR0cmlidXRlKGVsLCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlKV0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoclNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdLCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHRoaXMuc3RvcmUuYXBwbHlBdHRyaWJ1dGUoZWwsIG5hbWUsIHZhbHVlKTtcbiAgICB9XG5cbiAgICBzZXRQcm9wZXJ0eShlbDogTmd0UmVuZGVyZXJOb2RlLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgclMgPSBlbC5fX25ndF9yZW5kZXJlcl9fO1xuICAgICAgICBpZiAoclNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnY29tcG91bmQnKSB7XG4gICAgICAgICAgICAvLyB3ZSBkb24ndCBoYXZlIHRoZSBjb21wb3VuZCBpbnN0YW5jZSB5ZXRcbiAgICAgICAgICAgIHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5wcm9wZXJ0aWVzXVtuYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgaWYgKCFyU1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLnF1ZXVlT3BlcmF0aW9uKGVsLCBbJ29wJywgKCkgPT4gdGhpcy5zZXRQcm9wZXJ0eShlbCwgbmFtZSwgdmFsdWUpXSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoclNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kXSkge1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oclNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kXSwge1xuICAgICAgICAgICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uclNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5KHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSwgbmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJykgdGhpcy5zdG9yZS5hcHBseVByb3BlcnR5KGVsLCBuYW1lLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgbGlzdGVuKHRhcmdldDogTmd0UmVuZGVyZXJOb2RlLCBldmVudE5hbWU6IHN0cmluZywgY2FsbGJhY2s6IChldmVudDogYW55KSA9PiBib29sZWFuIHwgdm9pZCk6ICgpID0+IHZvaWQge1xuICAgICAgICBjb25zdCByUyA9IHRhcmdldC5fX25ndF9yZW5kZXJlcl9fO1xuICAgICAgICBjb25zdCB0YXJnZXRDZHIgPSByUz8uW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RvckZhY3RvcnldPy4oKS5nZXQoQ2hhbmdlRGV0ZWN0b3JSZWYsIG51bGwpO1xuICAgICAgICAvLyBpZiB0YXJnZXQgaXMgRE9NIG5vZGUsIHRoZW4gd2UgcGFzcyB0aGF0IHRvIGRlbGVnYXRlIFJlbmRlcmVyXG4gICAgICAgIGNvbnN0IGNhbGxiYWNrV2l0aENkciA9IChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNhbGxiYWNrKGV2ZW50KTtcbiAgICAgICAgICAgIGlmICh0YXJnZXRDZHIpIHRhcmdldENkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLnJvb3RDZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5zdG9yZS5pc0RPTSh0YXJnZXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4odGFyZ2V0LCBldmVudE5hbWUsIGNhbGxiYWNrV2l0aENkcik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gd2Uga25vdyB0aGF0IHRhcmdldCBpcyBub3QgRE9NIG5vZGVcbiAgICAgICAgaWYgKHRhcmdldCA9PT0gdGhpcy5zdG9yZS5yb290U2NlbmUpIHtcbiAgICAgICAgICAgIGxldCBbZG9tVGFyZ2V0LCBldmVudF0gPSBldmVudE5hbWUuc3BsaXQoJzonKTtcbiAgICAgICAgICAgIGlmIChldmVudCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQgPSBkb21UYXJnZXQ7XG4gICAgICAgICAgICAgICAgZG9tVGFyZ2V0ID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBldmVudFRhcmdldCA9XG4gICAgICAgICAgICAgICAgZG9tVGFyZ2V0ID09PSAnd2luZG93J1xuICAgICAgICAgICAgICAgICAgICA/ICh0YXJnZXQgYXMgTmd0QW55UmVjb3JkKVsnb3duZXJEb2N1bWVudCddWydkZWZhdWx0VmlldyddXG4gICAgICAgICAgICAgICAgICAgIDogKHRhcmdldCBhcyBOZ3RBbnlSZWNvcmQpWydvd25lckRvY3VtZW50J107XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4oZXZlbnRUYXJnZXQsIGV2ZW50LCBjYWxsYmFja1dpdGhDZHIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgclNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnIHx8XG4gICAgICAgICAgICAoclNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnY29tcG91bmQnICYmIHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSB8fCB0YXJnZXQ7XG4gICAgICAgICAgICBjb25zdCBwcmlvcml0eSA9IGdldExvY2FsU3RhdGUodGFyZ2V0KS5wcmlvcml0eTtcbiAgICAgICAgICAgIHJldHVybiBwcm9jZXNzVGhyZWVFdmVudChpbnN0YW5jZSwgcHJpb3JpdHkgfHwgMCwgZXZlbnROYW1lLCBjYWxsYmFjaywgdGhpcy5zdG9yZS5yb290Q2RyLCB0YXJnZXRDZHIhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21wb3VuZCcgJiYgIXJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSkge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5xdWV1ZU9wZXJhdGlvbih0YXJnZXQsIFtcbiAgICAgICAgICAgICAgICAnb3AnLFxuICAgICAgICAgICAgICAgICgpID0+IHRoaXMuc3RvcmUucXVldWVPcGVyYXRpb24odGFyZ2V0LCBbJ2NsZWFuVXAnLCB0aGlzLmxpc3Rlbih0YXJnZXQsIGV2ZW50TmFtZSwgY2FsbGJhY2spXSksXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKCkgPT4ge307XG4gICAgfVxuXG4gICAgY3JlYXRlVGV4dCA9IHRoaXMuZGVsZWdhdGUuY3JlYXRlVGV4dC5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuICAgIGRlc3Ryb3kgPSB0aGlzLmRlbGVnYXRlLmRlc3Ryb3kuYmluZCh0aGlzLmRlbGVnYXRlKTtcbiAgICBkZXN0cm95Tm9kZTogKChub2RlOiBhbnkpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG4gICAgc2VsZWN0Um9vdEVsZW1lbnQgPSB0aGlzLmRlbGVnYXRlLnNlbGVjdFJvb3RFbGVtZW50LmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG4gICAgbmV4dFNpYmxpbmcgPSB0aGlzLmRlbGVnYXRlLm5leHRTaWJsaW5nLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG4gICAgcmVtb3ZlQXR0cmlidXRlID0gdGhpcy5kZWxlZ2F0ZS5yZW1vdmVBdHRyaWJ1dGUuYmluZCh0aGlzLmRlbGVnYXRlKTtcbiAgICBhZGRDbGFzcyA9IHRoaXMuZGVsZWdhdGUuYWRkQ2xhc3MuYmluZCh0aGlzLmRlbGVnYXRlKTtcbiAgICByZW1vdmVDbGFzcyA9IHRoaXMuZGVsZWdhdGUucmVtb3ZlQ2xhc3MuYmluZCh0aGlzLmRlbGVnYXRlKTtcbiAgICBzZXRTdHlsZSA9IHRoaXMuZGVsZWdhdGUuc2V0U3R5bGUuYmluZCh0aGlzLmRlbGVnYXRlKTtcbiAgICByZW1vdmVTdHlsZSA9IHRoaXMuZGVsZWdhdGUucmVtb3ZlU3R5bGUuYmluZCh0aGlzLmRlbGVnYXRlKTtcbiAgICBzZXRWYWx1ZSA9IHRoaXMuZGVsZWdhdGUuc2V0VmFsdWUuYmluZCh0aGlzLmRlbGVnYXRlKTtcbiAgICBnZXQgZGF0YSgpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUuZGF0YTtcbiAgICB9XG59XG4iXX0=
|
|
332
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUvc3JjL2xpYi9yZW5kZXJlci9yZW5kZXJlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUNILGlCQUFpQixFQUNqQixZQUFZLEVBQ1osTUFBTSxFQUNOLFVBQVUsRUFFVixnQkFBZ0IsR0FFbkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTdDLE9BQU8sRUFBbUIsZ0JBQWdCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxTQUFTLENBQUM7O0FBR2hILE1BQU0sT0FBTyxrQkFBa0I7SUFEL0I7UUFFcUIsNEJBQXVCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdkUsUUFBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2hDLFVBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekIsY0FBUyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNsQyxxQkFBZ0IsR0FBRyxNQUFNLENBQUMscUJBQXFC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USxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFDaEQsT0FBTyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxJQUFJLENBQUMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFNBQVUsQ0FBQyxDQUFDO1NBQzFHO1FBRUQsSUFBSSxFQUFFLGlDQUF5QixLQUFLLFVBQVUsSUFBSSxDQUFDLEVBQUUsdUNBQStCLEVBQUU7WUFDbEYsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFO2dCQUM5QixJQUFJO2dCQUNKLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQzthQUNqRyxDQUFDLENBQUM7U0FDTjtRQUNELE9BQU8sR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFhRCxJQUFJLElBQUk7UUFDSixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO0lBQzlCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgZ2V0RGVidWdOb2RlLFxuICAgIGluamVjdCxcbiAgICBJbmplY3RhYmxlLFxuICAgIFJlbmRlcmVyMixcbiAgICBSZW5kZXJlckZhY3RvcnkyLFxuICAgIFJlbmRlcmVyVHlwZTIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdUX0NBVEFMT0dVRSB9IGZyb20gJy4uL2RpL2NhdGFsb2d1ZSc7XG5pbXBvcnQgeyBOZ3RTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy9zdG9yZSc7XG5pbXBvcnQgeyBOZ3RBbnlSZWNvcmQgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBnZXRMb2NhbFN0YXRlLCBwcmVwYXJlIH0gZnJvbSAnLi4vdXRpbHMvaW5zdGFuY2UnO1xuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi91dGlscy9pcyc7XG5pbXBvcnQgeyBOR1RfQ09NUE9VTkRfUFJFRklYRVMgfSBmcm9tICcuL2RpJztcbmltcG9ydCB7IE5ndFJlbmRlcmVyQ2xhc3NJZCB9IGZyb20gJy4vZW51bXMnO1xuaW1wb3J0IHsgTmd0UmVuZGVyZXJOb2RlLCBOZ3RSZW5kZXJlclN0b3JlIH0gZnJvbSAnLi9zdGF0ZSc7XG5pbXBvcnQgeyBhdHRhY2hUaHJlZUNoaWxkLCBrZWJhYlRvUGFzY2FsLCBwcm9jZXNzVGhyZWVFdmVudCwgcmVtb3ZlVGhyZWVDaGlsZCwgU1BFQ0lBTF9ET01fVEFHIH0gZnJvbSAnLi91dGlscyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOZ3RSZW5kZXJlckZhY3RvcnkgaW1wbGVtZW50cyBSZW5kZXJlckZhY3RvcnkyIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlbGVnYXRlUmVuZGVyZXJGYWN0b3J5ID0gaW5qZWN0KFJlbmRlcmVyRmFjdG9yeTIsIHsgc2tpcFNlbGY6IHRydWUgfSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmUgPSBpbmplY3QoTmd0U3RvcmUpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY2F0YWxvZ3VlID0gaW5qZWN0KE5HVF9DQVRBTE9HVUUpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY29tcG91bmRQcmVmaXhlcyA9IGluamVjdChOR1RfQ09NUE9VTkRfUFJFRklYRVMpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuXG4gICAgcHJpdmF0ZSByZW5kZXJlck1hcCA9IG5ldyBNYXA8c3RyaW5nLCBSZW5kZXJlcjI+KCk7XG4gICAgcHJpdmF0ZSByb3V0ZWRTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBwcml2YXRlIHBvcnRhbHM6IE5ndFJlbmRlcmVyTm9kZVtdID0gW107XG4gICAgcHJpdmF0ZSByZW5kZXJlclN0b3JlID0gbmV3IE5ndFJlbmRlcmVyU3RvcmUoe1xuICAgICAgICBzdG9yZTogdGhpcy5zdG9yZSxcbiAgICAgICAgY2RyOiB0aGlzLmNkcixcbiAgICAgICAgcG9ydGFsczogdGhpcy5wb3J0YWxzLFxuICAgICAgICBjb21wb3VuZFByZWZpeGVzOiB0aGlzLmNvbXBvdW5kUHJlZml4ZXMsXG4gICAgICAgIGRvY3VtZW50OiB0aGlzLmRvY3VtZW50LFxuICAgIH0pO1xuXG4gICAgY3JlYXRlUmVuZGVyZXIoaG9zdEVsZW1lbnQ6IGFueSwgdHlwZTogUmVuZGVyZXJUeXBlMiB8IG51bGwpOiBSZW5kZXJlcjIge1xuICAgICAgICBjb25zdCBkZWxlZ2F0ZVJlbmRlcmVyID0gdGhpcy5kZWxlZ2F0ZVJlbmRlcmVyRmFjdG9yeS5jcmVhdGVSZW5kZXJlcihob3N0RWxlbWVudCwgdHlwZSk7XG4gICAgICAgIGlmICghdHlwZSkgcmV0dXJuIGRlbGVnYXRlUmVuZGVyZXI7XG4gICAgICAgIGlmICgodHlwZSBhcyBOZ3RBbnlSZWNvcmQpWyd0eXBlJ11bJ2lzUm91dGVkU2NlbmUnXSkge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZWRTZXQuYWRkKHR5cGUuaWQpO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZW5kZXJlciA9IHRoaXMucmVuZGVyZXJNYXAuZ2V0KHR5cGUuaWQpO1xuICAgICAgICBpZiAoIXJlbmRlcmVyKSB7XG4gICAgICAgICAgICByZW5kZXJlciA9IG5ldyBOZ3RSZW5kZXJlcihcbiAgICAgICAgICAgICAgICBkZWxlZ2F0ZVJlbmRlcmVyLFxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXJTdG9yZSxcbiAgICAgICAgICAgICAgICB0aGlzLmNhdGFsb2d1ZSxcbiAgICAgICAgICAgICAgICAvLyBzZXR0aW5nIHJvb3Qgc2NlbmUgaWYgdGhlcmUncyBubyByb3V0ZWQgc2NlbmUgT1IgdGhpcyBjb21wb25lbnQgaXMgdGhlIHJvdXRlZCBTY2VuZVxuICAgICAgICAgICAgICAgICFob3N0RWxlbWVudCAmJiAodGhpcy5yb3V0ZWRTZXQuc2l6ZSA9PT0gMCB8fCB0aGlzLnJvdXRlZFNldC5oYXModHlwZS5pZCkpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlck1hcC5zZXQodHlwZS5pZCwgcmVuZGVyZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZW5kZXJlcjtcbiAgICB9XG59XG5cbi8qKlxuICogQW55dGhpbmcgYWJicmV2aWF0ZWQgd2l0aCByUy9SUyBzdGFuZHMgZm9yIFJlbmRlcmVyU3RhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIE5ndFJlbmRlcmVyIGltcGxlbWVudHMgUmVuZGVyZXIyIHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkZWxlZ2F0ZTogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHN0b3JlOiBOZ3RSZW5kZXJlclN0b3JlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNhdGFsb2d1ZTogUmVjb3JkPHN0cmluZywgbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55PixcbiAgICAgICAgcHJpdmF0ZSByb290ID0gdHJ1ZVxuICAgICkge31cblxuICAgIGNyZWF0ZUVsZW1lbnQobmFtZTogc3RyaW5nLCBuYW1lc3BhY2U/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmRlbGVnYXRlLmNyZWF0ZUVsZW1lbnQobmFtZSwgbmFtZXNwYWNlKTtcblxuICAgICAgICAvLyBvbiBmaXJzdCBwYXNzLCB3ZSByZXR1cm4gdGhlIFJvb3QgU2NlbmUgYXMgdGhlIHJvb3Qgbm9kZVxuICAgICAgICBpZiAodGhpcy5yb290KSB7XG4gICAgICAgICAgICB0aGlzLnJvb3QgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0b3JlLmNyZWF0ZU5vZGUoJ3RocmVlJywgdGhpcy5zdG9yZS5yb290U2NlbmUpO1xuICAgICAgICAgICAgbm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RvckZhY3RvcnldID0gKCkgPT4gZ2V0RGVidWdOb2RlKGVsZW1lbnQpIS5pbmplY3RvcjtcbiAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaGFuZGxlIGNvbXBvdW5kXG4gICAgICAgIGlmICh0aGlzLnN0b3JlLmlzQ29tcG91bmQobmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0b3JlLmNyZWF0ZU5vZGUoJ2NvbXBvdW5kJywgZWxlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBoYW5kbGUgcG9ydGFsXG4gICAgICAgIGlmIChuYW1lID09PSBTUEVDSUFMX0RPTV9UQUcuTkdUX1BPUlRBTCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuY3JlYXRlTm9kZSgncG9ydGFsJywgZWxlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBoYW5kbGUgcmF3IHZhbHVlXG4gICAgICAgIGlmIChuYW1lID09PSBTUEVDSUFMX0RPTV9UQUcuTkdUX1ZBTFVFKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5jcmVhdGVOb2RlKFxuICAgICAgICAgICAgICAgICd0aHJlZScsXG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih7IF9fbmd0X3JlbmRlcmVyX186IHsgcmF3VmFsdWU6IHVuZGVmaW5lZCB9IH0sIHsgX19uZ3RfXzogeyBpc1JhdzogdHJ1ZSB9IH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBpbmplY3RlZEFyZ3MsIHN0b3JlIH0gPSB0aGlzLnN0b3JlLmdldENyZWF0aW9uU3RhdGUoKTtcblxuICAgICAgICAvLyBoYW5kbGUgcHJpbWl0aXZlXG4gICAgICAgIGlmIChuYW1lID09PSBTUEVDSUFMX0RPTV9UQUcuTkdUX1BSSU1JVElWRSkge1xuICAgICAgICAgICAgaWYgKCFpbmplY3RlZEFyZ3NbMF0pIHRocm93IG5ldyBFcnJvcihgW05HVF0gbmd0LXByaW1pdGl2ZSB3aXRob3V0IGFyZ3MgaXMgaW52YWxpZGApO1xuICAgICAgICAgICAgY29uc3Qgb2JqZWN0ID0gaW5qZWN0ZWRBcmdzWzBdO1xuICAgICAgICAgICAgbGV0IGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKG9iamVjdCk7XG4gICAgICAgICAgICBpZiAoIU9iamVjdC5rZXlzKGxvY2FsU3RhdGUpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHByZXBhcmUob2JqZWN0LCB7IHN0b3JlLCBhcmdzOiBpbmplY3RlZEFyZ3MsIHByaW1pdGl2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShvYmplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFsb2NhbFN0YXRlLnN0b3JlKSBsb2NhbFN0YXRlLnN0b3JlID0gc3RvcmU7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5jcmVhdGVOb2RlKCd0aHJlZScsIG9iamVjdCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0aHJlZVRhZyA9IG5hbWUuc3RhcnRzV2l0aCgnbmd0JykgPyBuYW1lLnNsaWNlKDQpIDogbmFtZTtcbiAgICAgICAgY29uc3QgdGhyZWVOYW1lID0ga2ViYWJUb1Bhc2NhbCh0aHJlZVRhZyk7XG4gICAgICAgIGNvbnN0IHRocmVlVGFyZ2V0ID0gdGhpcy5jYXRhbG9ndWVbdGhyZWVOYW1lXTtcbiAgICAgICAgLy8gd2UgaGF2ZSB0aGUgVEhSRUUgY29uc3RydWN0b3IgaGVyZSwgaGFuZGxlIGl0XG4gICAgICAgIGlmICh0aHJlZVRhcmdldCkge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBwcmVwYXJlKG5ldyB0aHJlZVRhcmdldCguLi5pbmplY3RlZEFyZ3MpLCB7IHN0b3JlLCBhcmdzOiBpbmplY3RlZEFyZ3MgfSk7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5zdG9yZS5jcmVhdGVOb2RlKCd0aHJlZScsIGluc3RhbmNlKTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKGluc3RhbmNlKTtcbiAgICAgICAgICAgIGlmIChpcy5nZW9tZXRyeShpbnN0YW5jZSkpIHtcbiAgICAgICAgICAgICAgICBsb2NhbFN0YXRlLmF0dGFjaCA9IFsnZ2VvbWV0cnknXTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXMubWF0ZXJpYWwoaW5zdGFuY2UpKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxTdGF0ZS5hdHRhY2ggPSBbJ21hdGVyaWFsJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JlLmNyZWF0ZU5vZGUoJ2RvbScsIGVsZW1lbnQpO1xuICAgIH1cblxuICAgIGNyZWF0ZUNvbW1lbnQodmFsdWU6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5jcmVhdGVOb2RlKCdjb21tZW50JywgdGhpcy5kZWxlZ2F0ZS5jcmVhdGVDb21tZW50KHZhbHVlKSk7XG4gICAgfVxuXG4gICAgYXBwZW5kQ2hpbGQocGFyZW50OiBOZ3RSZW5kZXJlck5vZGUsIG5ld0NoaWxkOiBOZ3RSZW5kZXJlck5vZGUpOiB2b2lkIHtcbiAgICAgICAgLy8gVE9ETzoganVzdCBpZ25vcmUgdGV4dCBub2RlIGZvciBub3dcbiAgICAgICAgaWYgKG5ld0NoaWxkIGluc3RhbmNlb2YgVGV4dCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBjUlMgPSBuZXdDaGlsZC5fX25ndF9yZW5kZXJlcl9fO1xuICAgICAgICBjb25zdCBwUlMgPSBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfXztcblxuICAgICAgICBpZiAoY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbW1lbnQnKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLnNldFBhcmVudChuZXdDaGlsZCwgcGFyZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RvcmUuc2V0UGFyZW50KG5ld0NoaWxkLCBwYXJlbnQpO1xuICAgICAgICB0aGlzLnN0b3JlLmFkZENoaWxkKHBhcmVudCwgbmV3Q2hpbGQpO1xuXG4gICAgICAgIC8vIGlmIG5ldyBjaGlsZCBpcyBhIHBvcnRhbFxuICAgICAgICBpZiAoY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3BvcnRhbCcpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUucHJvY2Vzc1BvcnRhbENvbnRhaW5lcihuZXdDaGlsZCk7XG4gICAgICAgICAgICBpZiAoY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC5wb3J0YWxDb250YWluZXJdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChwYXJlbnQsIGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiBwYXJlbnQgaXMgYSBwb3J0YWxcbiAgICAgICAgaWYgKHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdwb3J0YWwnKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLnByb2Nlc3NQb3J0YWxDb250YWluZXIocGFyZW50KTtcbiAgICAgICAgICAgIGlmIChwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXSwgbmV3Q2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgYm90aCBhcmUgdGhyZWUgaW5zdGFuY2VzLCBzdHJhaWdodGZvcndhcmQgY2FzZVxuICAgICAgICBpZiAocFJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJyAmJiBjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB7XG4gICAgICAgICAgICAvLyBpZiBjaGlsZCBhbHJlYWR5IGF0dGFjaGVkIHRvIGEgcGFyZW50LCBza2lwXG4gICAgICAgICAgICBpZiAoZ2V0TG9jYWxTdGF0ZShuZXdDaGlsZCkucGFyZW50KSByZXR1cm47XG4gICAgICAgICAgICAvLyBhdHRhY2ggVEhSRUUgY2hpbGRcbiAgICAgICAgICAgIGF0dGFjaFRocmVlQ2hpbGQocGFyZW50LCBuZXdDaGlsZCk7XG4gICAgICAgICAgICAvLyBoZXJlLCB3ZSBoYW5kbGUgdGhlIHNwZWNpYWwgY2FzZSBvZiBpZiB0aGUgcGFyZW50IGhhcyBhIGNvbXBvdW5kUGFyZW50LCB3aGljaCBtZWFucyB0aGlzIGNoaWxkIGlzIHBhcnQgb2YgYSBjb21wb3VuZCBwYXJlbnQgdGVtcGxhdGVcbiAgICAgICAgICAgIGlmICghY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZF0pIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGNsb3Nlc3RHcmFuZHBhcmVudFdpdGhDb21wb3VuZCA9IHRoaXMuc3RvcmUuZ2V0Q2xvc2VzdFBhcmVudFdpdGhDb21wb3VuZChwYXJlbnQpO1xuICAgICAgICAgICAgaWYgKCFjbG9zZXN0R3JhbmRwYXJlbnRXaXRoQ29tcG91bmQpIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQoY2xvc2VzdEdyYW5kcGFyZW50V2l0aENvbXBvdW5kLCBuZXdDaGlsZCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiBvbmx5IHRoZSBwYXJlbnQgaXMgdGhlIFRIUkVFIGluc3RhbmNlXG4gICAgICAgIGlmIChwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlbmRlckNoaWxkIG9mIGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQuY2hpbGRyZW5dKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChwYXJlbnQsIHJlbmRlckNoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHBhcmVudCBpcyBhIGNvbXBvdW5kXG4gICAgICAgIGlmIChwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnY29tcG91bmQnKSB7XG4gICAgICAgICAgICAvLyBpZiBjb21wb3VuZCBkb2Vzbid0IGhhdmUgYSBUSFJFRSBpbnN0YW5jZSBzZXQgeWV0XG4gICAgICAgICAgICBpZiAoIXBSU1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0gJiYgY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJykge1xuICAgICAgICAgICAgICAgIC8vIGlmIGNoaWxkIGlzIGluZGVlZCBhbiBuZ3RDb21wb3VuZFxuICAgICAgICAgICAgICAgIGlmIChjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kXSkgdGhpcy5zdG9yZS5zZXRDb21wb3VuZChwYXJlbnQsIG5ld0NoaWxkKTtcbiAgICAgICAgICAgICAgICAvLyBpZiBub3QsIHdlIHRyYWNrIHRoZSBwYXJlbnQgKHRoYXQgaXMgc3VwcG9zZWRseSB0aGUgY29tcG91bmQgY29tcG9uZW50KSBvbiB0aGlzIHRocmVlIGluc3RhbmNlXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWNSU1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRQYXJlbnRdKSBjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kUGFyZW50XSA9IHBhcmVudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gcmVzZXQgdGhlIGNvbXBvdW5kIGlmIGl0J3MgY2hhbmdlZFxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0gJiZcbiAgICAgICAgICAgICAgICBjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnICYmXG4gICAgICAgICAgICAgICAgY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZF0gJiZcbiAgICAgICAgICAgICAgICBwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdICE9PSBuZXdDaGlsZFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5zZXRDb21wb3VuZChwYXJlbnQsIG5ld0NoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNob3VsZEZpbmRHcmFuZHBhcmVudEluc3RhbmNlID1cbiAgICAgICAgICAgIC8vIGlmIGNoaWxkIGlzIHRocmVlIGJ1dCBoYXZlbid0IGJlZW4gYXR0YWNoZWQgdG8gYSBwYXJlbnQgeWV0XG4gICAgICAgICAgICAoY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJyAmJiAhZ2V0TG9jYWxTdGF0ZShuZXdDaGlsZCkucGFyZW50KSB8fFxuICAgICAgICAgICAgLy8gb3IgYm90aCBwYXJlbnQgYW5kIGNoaWxkIGFyZSBET00gZWxlbWVudHNcbiAgICAgICAgICAgICgocFJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2RvbScgfHxcbiAgICAgICAgICAgICAgICAocFJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbXBvdW5kJyAmJiAhcFJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSkpICYmXG4gICAgICAgICAgICAgICAgKGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdkb20nIHx8XG4gICAgICAgICAgICAgICAgICAgIChjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnY29tcG91bmQnICYmICFjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdKSkpO1xuXG4gICAgICAgIGlmIChzaG91bGRGaW5kR3JhbmRwYXJlbnRJbnN0YW5jZSkge1xuICAgICAgICAgICAgLy8gd2UnbGwgdHJ5IHRvIGdldCB0aGUgZ3JhbmRwYXJlbnQgaW5zdGFuY2UgaGVyZSBzbyB0aGF0IHdlIGNhbiBydW4gYXBwZW5kQ2hpbGQgd2l0aCBib3RoIGluc3RhbmNlc1xuICAgICAgICAgICAgY29uc3QgY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UgPSB0aGlzLnN0b3JlLmdldENsb3Nlc3RQYXJlbnRXaXRoSW5zdGFuY2UocGFyZW50KTtcbiAgICAgICAgICAgIGlmIChjbG9zZXN0R3JhbmRwYXJlbnRJbnN0YW5jZSkgdGhpcy5hcHBlbmRDaGlsZChjbG9zZXN0R3JhbmRwYXJlbnRJbnN0YW5jZSwgbmV3Q2hpbGQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5zZXJ0QmVmb3JlKFxuICAgICAgICBwYXJlbnQ6IE5ndFJlbmRlcmVyTm9kZSxcbiAgICAgICAgbmV3Q2hpbGQ6IE5ndFJlbmRlcmVyTm9kZVxuICAgICAgICAvLyBUT0RPICB3ZSBtaWdodCBuZWVkIHRoZXNlP1xuICAgICAgICAvLyByZWZDaGlsZDogTmd0UmVuZGVyZXJOb2RlXG4gICAgICAgIC8vIGlzTW92ZT86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgICApOiB2b2lkIHtcbiAgICAgICAgaWYgKCFwYXJlbnQuX19uZ3RfcmVuZGVyZXJfXyB8fCBwYXJlbnQgPT09IG5ld0NoaWxkKSByZXR1cm47XG4gICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQocGFyZW50LCBuZXdDaGlsZCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlQ2hpbGQocGFyZW50OiBOZ3RSZW5kZXJlck5vZGUsIG9sZENoaWxkOiBOZ3RSZW5kZXJlck5vZGUsIGlzSG9zdEVsZW1lbnQ/OiBib29sZWFuIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBSUyA9IHBhcmVudC5fX25ndF9yZW5kZXJlcl9fO1xuICAgICAgICBjb25zdCBjUlMgPSBvbGRDaGlsZC5fX25ndF9yZW5kZXJlcl9fO1xuICAgICAgICBpZiAocFJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJyAmJiBjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB7XG4gICAgICAgICAgICByZW1vdmVUaHJlZUNoaWxkKHBhcmVudCwgb2xkQ2hpbGQsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5kZXN0cm95KG9sZENoaWxkLCBwYXJlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21wb3VuZCcgJiYgcFJTW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XSwgb2xkQ2hpbGQsIGlzSG9zdEVsZW1lbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGVzdHJveShvbGRDaGlsZCwgcGFyZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlID0gdGhpcy5zdG9yZS5nZXRDbG9zZXN0UGFyZW50V2l0aEluc3RhbmNlKHBhcmVudCk7XG4gICAgICAgIGlmIChjbG9zZXN0R3JhbmRwYXJlbnRJbnN0YW5jZSkgdGhpcy5yZW1vdmVDaGlsZChjbG9zZXN0R3JhbmRwYXJlbnRJbnN0YW5jZSwgb2xkQ2hpbGQsIGlzSG9zdEVsZW1lbnQpO1xuICAgICAgICB0aGlzLnN0b3JlLmRlc3Ryb3kob2xkQ2hpbGQsIGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlIGFzIE5ndFJlbmRlcmVyTm9kZSk7XG4gICAgfVxuXG4gICAgcGFyZW50Tm9kZShub2RlOiBOZ3RSZW5kZXJlck5vZGUpIHtcbiAgICAgICAgY29uc3QgclMgPSBub2RlLl9fbmd0X3JlbmRlcmVyX187XG4gICAgICAgIGlmIChyUz8uW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdKSByZXR1cm4gclNbTmd0UmVuZGVyZXJDbGFzc0lkLnBhcmVudF07XG4gICAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLnBhcmVudE5vZGUobm9kZSk7XG4gICAgfVxuXG4gICAgc2V0QXR0cmlidXRlKGVsOiBOZ3RSZW5kZXJlck5vZGUsIG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZywgbmFtZXNwYWNlPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgICAgICBjb25zdCByUyA9IGVsLl9fbmd0X3JlbmRlcmVyX187XG4gICAgICAgIGlmIChyU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21wb3VuZCcpIHtcbiAgICAgICAgICAgIC8vIHdlIGRvbid0IGhhdmUgdGhlIGNvbXBvdW5kIGluc3RhbmNlIHlldFxuICAgICAgICAgICAgclNbTmd0UmVuZGVyZXJDbGFzc0lkLmF0dHJpYnV0ZXNdW25hbWVdID0gdmFsdWU7XG4gICAgICAgICAgICBpZiAoIXJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUucXVldWVPcGVyYXRpb24oZWwsIFsnb3AnLCAoKSA9PiB0aGlzLnNldEF0dHJpYnV0ZShlbCwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZSldKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoclNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB0aGlzLnN0b3JlLmFwcGx5QXR0cmlidXRlKGVsLCBuYW1lLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgc2V0UHJvcGVydHkoZWw6IE5ndFJlbmRlcmVyTm9kZSwgbmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJTID0gZWwuX19uZ3RfcmVuZGVyZXJfXztcbiAgICAgICAgaWYgKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbXBvdW5kJykge1xuICAgICAgICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSB0aGUgY29tcG91bmQgaW5zdGFuY2UgeWV0XG4gICAgICAgICAgICByU1tOZ3RSZW5kZXJlckNsYXNzSWQucHJvcGVydGllc11bbmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIGlmICghclNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5xdWV1ZU9wZXJhdGlvbihlbCwgWydvcCcsICgpID0+IHRoaXMuc2V0UHJvcGVydHkoZWwsIG5hbWUsIHZhbHVlKV0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZF0pIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZF0sIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV06IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eShyU1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0sIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHRoaXMuc3RvcmUuYXBwbHlQcm9wZXJ0eShlbCwgbmFtZSwgdmFsdWUpO1xuICAgIH1cblxuICAgIGxpc3Rlbih0YXJnZXQ6IE5ndFJlbmRlcmVyTm9kZSwgZXZlbnROYW1lOiBzdHJpbmcsIGNhbGxiYWNrOiAoZXZlbnQ6IGFueSkgPT4gYm9vbGVhbiB8IHZvaWQpOiAoKSA9PiB2b2lkIHtcbiAgICAgICAgY29uc3QgclMgPSB0YXJnZXQuX19uZ3RfcmVuZGVyZXJfXztcbiAgICAgICAgY29uc3QgdGFyZ2V0Q2RyID0gclM/LltOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0b3JGYWN0b3J5XT8uKCkuZ2V0KENoYW5nZURldGVjdG9yUmVmLCBudWxsKTtcbiAgICAgICAgLy8gaWYgdGFyZ2V0IGlzIERPTSBub2RlLCB0aGVuIHdlIHBhc3MgdGhhdCB0byBkZWxlZ2F0ZSBSZW5kZXJlclxuICAgICAgICBjb25zdCBjYWxsYmFja1dpdGhDZHIgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjYWxsYmFjayhldmVudCk7XG4gICAgICAgICAgICBpZiAodGFyZ2V0Q2RyKSB0YXJnZXRDZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5yb290Q2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMuc3RvcmUuaXNET00odGFyZ2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHRhcmdldCwgZXZlbnROYW1lLCBjYWxsYmFja1dpdGhDZHIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIHdlIGtub3cgdGhhdCB0YXJnZXQgaXMgbm90IERPTSBub2RlXG4gICAgICAgIGlmICh0YXJnZXQgPT09IHRoaXMuc3RvcmUucm9vdFNjZW5lKSB7XG4gICAgICAgICAgICBsZXQgW2RvbVRhcmdldCwgZXZlbnRdID0gZXZlbnROYW1lLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICBpZiAoZXZlbnQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGV2ZW50ID0gZG9tVGFyZ2V0O1xuICAgICAgICAgICAgICAgIGRvbVRhcmdldCA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZXZlbnRUYXJnZXQgPVxuICAgICAgICAgICAgICAgIGRvbVRhcmdldCA9PT0gJ3dpbmRvdydcbiAgICAgICAgICAgICAgICAgICAgPyAodGFyZ2V0IGFzIE5ndEFueVJlY29yZClbJ293bmVyRG9jdW1lbnQnXVsnZGVmYXVsdFZpZXcnXVxuICAgICAgICAgICAgICAgICAgICA6ICh0YXJnZXQgYXMgTmd0QW55UmVjb3JkKVsnb3duZXJEb2N1bWVudCddO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKGV2ZW50VGFyZ2V0LCBldmVudCwgY2FsbGJhY2tXaXRoQ2RyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJyB8fFxuICAgICAgICAgICAgKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbXBvdW5kJyAmJiByU1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0pXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSByU1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0gfHwgdGFyZ2V0O1xuICAgICAgICAgICAgY29uc3QgcHJpb3JpdHkgPSBnZXRMb2NhbFN0YXRlKHRhcmdldCkucHJpb3JpdHk7XG4gICAgICAgICAgICByZXR1cm4gcHJvY2Vzc1RocmVlRXZlbnQoaW5zdGFuY2UsIHByaW9yaXR5IHx8IDAsIGV2ZW50TmFtZSwgY2FsbGJhY2ssIHRoaXMuc3RvcmUucm9vdENkciwgdGFyZ2V0Q2RyISk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoclNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnY29tcG91bmQnICYmICFyU1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0pIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUucXVldWVPcGVyYXRpb24odGFyZ2V0LCBbXG4gICAgICAgICAgICAgICAgJ29wJyxcbiAgICAgICAgICAgICAgICAoKSA9PiB0aGlzLnN0b3JlLnF1ZXVlT3BlcmF0aW9uKHRhcmdldCwgWydjbGVhblVwJywgdGhpcy5saXN0ZW4odGFyZ2V0LCBldmVudE5hbWUsIGNhbGxiYWNrKV0pLFxuICAgICAgICAgICAgXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgpID0+IHt9O1xuICAgIH1cblxuICAgIGNyZWF0ZVRleHQgPSB0aGlzLmRlbGVnYXRlLmNyZWF0ZVRleHQuYmluZCh0aGlzLmRlbGVnYXRlKTtcbiAgICBkZXN0cm95ID0gdGhpcy5kZWxlZ2F0ZS5kZXN0cm95LmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG4gICAgZGVzdHJveU5vZGU6ICgobm9kZTogYW55KSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICAgIHNlbGVjdFJvb3RFbGVtZW50ID0gdGhpcy5kZWxlZ2F0ZS5zZWxlY3RSb290RWxlbWVudC5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuICAgIG5leHRTaWJsaW5nID0gdGhpcy5kZWxlZ2F0ZS5uZXh0U2libGluZy5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuICAgIHJlbW92ZUF0dHJpYnV0ZSA9IHRoaXMuZGVsZWdhdGUucmVtb3ZlQXR0cmlidXRlLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG4gICAgYWRkQ2xhc3MgPSB0aGlzLmRlbGVnYXRlLmFkZENsYXNzLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG4gICAgcmVtb3ZlQ2xhc3MgPSB0aGlzLmRlbGVnYXRlLnJlbW92ZUNsYXNzLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG4gICAgc2V0U3R5bGUgPSB0aGlzLmRlbGVnYXRlLnNldFN0eWxlLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG4gICAgcmVtb3ZlU3R5bGUgPSB0aGlzLmRlbGVnYXRlLnJlbW92ZVN0eWxlLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG4gICAgc2V0VmFsdWUgPSB0aGlzLmRlbGVnYXRlLnNldFZhbHVlLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG4gICAgZ2V0IGRhdGEoKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLmRhdGE7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import { ActivationEnd, Router, RouterOutlet } from '@angular/router';
|
|
3
|
+
import { filter, takeUntil } from 'rxjs';
|
|
4
|
+
import { injectNgtDestroy } from './di/destroy';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/router";
|
|
7
|
+
export class NgtRoutedScene {
|
|
8
|
+
constructor(router) {
|
|
9
|
+
const { destroy$, cdr } = injectNgtDestroy();
|
|
10
|
+
router.events
|
|
11
|
+
.pipe(filter((event) => event instanceof ActivationEnd), takeUntil(destroy$))
|
|
12
|
+
.subscribe(() => {
|
|
13
|
+
cdr.detectChanges();
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
NgtRoutedScene.isRoutedScene = true;
|
|
18
|
+
NgtRoutedScene.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtRoutedScene, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Component });
|
|
19
|
+
NgtRoutedScene.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.3", type: NgtRoutedScene, isStandalone: true, selector: "ngt-routed-scene", ngImport: i0, template: `<router-outlet />`, isInline: true, dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }] });
|
|
20
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtRoutedScene, decorators: [{
|
|
21
|
+
type: Component,
|
|
22
|
+
args: [{
|
|
23
|
+
standalone: true,
|
|
24
|
+
selector: 'ngt-routed-scene',
|
|
25
|
+
template: `<router-outlet />`,
|
|
26
|
+
imports: [RouterOutlet],
|
|
27
|
+
}]
|
|
28
|
+
}], ctorParameters: function () { return [{ type: i1.Router }]; } });
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVkLXNjZW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlL3NyYy9saWIvcm91dGVkLXNjZW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sY0FBYyxDQUFDOzs7QUFRaEQsTUFBTSxPQUFPLGNBQWM7SUFHdkIsWUFBWSxNQUFjO1FBQ3RCLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztRQUM3QyxNQUFNLENBQUMsTUFBTTthQUNSLElBQUksQ0FDRCxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssWUFBWSxhQUFhLENBQUMsRUFDakQsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUN0QjthQUNBLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDWixHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDOztBQVpNLDRCQUFhLEdBQUcsSUFBSSxDQUFDOzJHQURuQixjQUFjOytGQUFkLGNBQWMsNEVBSGIsbUJBQW1CLDREQUNuQixZQUFZOzJGQUViLGNBQWM7a0JBTjFCLFNBQVM7bUJBQUM7b0JBQ1AsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLFFBQVEsRUFBRSxtQkFBbUI7b0JBQzdCLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztpQkFDMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRpb25FbmQsIFJvdXRlciwgUm91dGVyT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGZpbHRlciwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpbmplY3ROZ3REZXN0cm95IH0gZnJvbSAnLi9kaS9kZXN0cm95JztcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ25ndC1yb3V0ZWQtc2NlbmUnLFxuICAgIHRlbXBsYXRlOiBgPHJvdXRlci1vdXRsZXQgLz5gLFxuICAgIGltcG9ydHM6IFtSb3V0ZXJPdXRsZXRdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RSb3V0ZWRTY2VuZSB7XG4gICAgc3RhdGljIGlzUm91dGVkU2NlbmUgPSB0cnVlO1xuXG4gICAgY29uc3RydWN0b3Iocm91dGVyOiBSb3V0ZXIpIHtcbiAgICAgICAgY29uc3QgeyBkZXN0cm95JCwgY2RyIH0gPSBpbmplY3ROZ3REZXN0cm95KCk7XG4gICAgICAgIHJvdXRlci5ldmVudHNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoZXZlbnQpID0+IGV2ZW50IGluc3RhbmNlb2YgQWN0aXZhdGlvbkVuZCksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKGRlc3Ryb3kkKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -6,6 +6,8 @@ import * as THREE from 'three';
|
|
|
6
6
|
import { __rest, __classPrivateFieldGet } from 'tslib';
|
|
7
7
|
import { DOCUMENT, NgForOf, NgIf } from '@angular/common';
|
|
8
8
|
import { RxState, selectSlice } from '@rx-angular/state';
|
|
9
|
+
import * as i1 from '@angular/router';
|
|
10
|
+
import { ActivationEnd, RouterOutlet } from '@angular/router';
|
|
9
11
|
|
|
10
12
|
const idCache = {};
|
|
11
13
|
function makeId(event) {
|
|
@@ -1942,6 +1944,7 @@ class NgtRendererFactory {
|
|
|
1942
1944
|
this.compoundPrefixes = inject(NGT_COMPOUND_PREFIXES);
|
|
1943
1945
|
this.document = inject(DOCUMENT);
|
|
1944
1946
|
this.rendererMap = new Map();
|
|
1947
|
+
this.routedSet = new Set();
|
|
1945
1948
|
this.portals = [];
|
|
1946
1949
|
this.rendererStore = new NgtRendererStore({
|
|
1947
1950
|
store: this.store,
|
|
@@ -1955,9 +1958,14 @@ class NgtRendererFactory {
|
|
|
1955
1958
|
const delegateRenderer = this.delegateRendererFactory.createRenderer(hostElement, type);
|
|
1956
1959
|
if (!type)
|
|
1957
1960
|
return delegateRenderer;
|
|
1961
|
+
if (type['type']['isRoutedScene']) {
|
|
1962
|
+
this.routedSet.add(type.id);
|
|
1963
|
+
}
|
|
1958
1964
|
let renderer = this.rendererMap.get(type.id);
|
|
1959
1965
|
if (!renderer) {
|
|
1960
|
-
renderer = new NgtRenderer(delegateRenderer, this.rendererStore, this.catalogue,
|
|
1966
|
+
renderer = new NgtRenderer(delegateRenderer, this.rendererStore, this.catalogue,
|
|
1967
|
+
// setting root scene if there's no routed scene OR this component is the routed Scene
|
|
1968
|
+
!hostElement && (this.routedSet.size === 0 || this.routedSet.has(type.id)));
|
|
1961
1969
|
this.rendererMap.set(type.id, renderer);
|
|
1962
1970
|
}
|
|
1963
1971
|
return renderer;
|
|
@@ -2974,9 +2982,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImpor
|
|
|
2974
2982
|
args: ['portalContentAnchor', { read: ViewContainerRef, static: true }]
|
|
2975
2983
|
}] } });
|
|
2976
2984
|
|
|
2985
|
+
class NgtRoutedScene {
|
|
2986
|
+
constructor(router) {
|
|
2987
|
+
const { destroy$, cdr } = injectNgtDestroy();
|
|
2988
|
+
router.events
|
|
2989
|
+
.pipe(filter((event) => event instanceof ActivationEnd), takeUntil(destroy$))
|
|
2990
|
+
.subscribe(() => {
|
|
2991
|
+
cdr.detectChanges();
|
|
2992
|
+
});
|
|
2993
|
+
}
|
|
2994
|
+
}
|
|
2995
|
+
NgtRoutedScene.isRoutedScene = true;
|
|
2996
|
+
NgtRoutedScene.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtRoutedScene, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Component });
|
|
2997
|
+
NgtRoutedScene.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.3", type: NgtRoutedScene, isStandalone: true, selector: "ngt-routed-scene", ngImport: i0, template: `<router-outlet />`, isInline: true, dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }] });
|
|
2998
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtRoutedScene, decorators: [{
|
|
2999
|
+
type: Component,
|
|
3000
|
+
args: [{
|
|
3001
|
+
standalone: true,
|
|
3002
|
+
selector: 'ngt-routed-scene',
|
|
3003
|
+
template: `<router-outlet />`,
|
|
3004
|
+
imports: [RouterOutlet],
|
|
3005
|
+
}]
|
|
3006
|
+
}], ctorParameters: function () { return [{ type: i1.Router }]; } });
|
|
3007
|
+
|
|
2977
3008
|
/**
|
|
2978
3009
|
* Generated bundle index. Do not edit.
|
|
2979
3010
|
*/
|
|
2980
3011
|
|
|
2981
|
-
export { NGT_CATALOGUE, NgtArgs, NgtCanvas, NgtPortal, NgtPortalBeforeRender, NgtPortalContent, NgtPush, NgtRepeat, NgtRxStore, NgtStore, addAfterEffect, addEffect, addTail, applyProps, checkNeedsUpdate, checkUpdate, createAttachFunction, createLoop, createRunInContext, extend, flushGlobalEffects, getLocalState, injectBeforeRender, injectNgtDestroy, injectNgtLoader, injectNgtRef, invalidateInstance, is, makeDefaultCamera, makeDefaultRenderer, makeDpr, makeId, makeObjectGraph, prepare, rootStateMap, safeDetectChanges, startWithUndefined, tapEffect, updateCamera };
|
|
3012
|
+
export { NGT_CATALOGUE, NgtArgs, NgtCanvas, NgtPortal, NgtPortalBeforeRender, NgtPortalContent, NgtPush, NgtRepeat, NgtRoutedScene, NgtRxStore, NgtStore, addAfterEffect, addEffect, addTail, applyProps, checkNeedsUpdate, checkUpdate, createAttachFunction, createLoop, createRunInContext, extend, flushGlobalEffects, getLocalState, injectBeforeRender, injectNgtDestroy, injectNgtLoader, injectNgtRef, invalidateInstance, is, makeDefaultCamera, makeDefaultRenderer, makeDpr, makeId, makeObjectGraph, prepare, rootStateMap, safeDetectChanges, startWithUndefined, tapEffect, updateCamera };
|
|
2982
3013
|
//# sourceMappingURL=angular-three.mjs.map
|