angular-three 2.0.0-beta.4 → 2.0.0-beta.40
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 +4 -147
- package/esm2022/angular-three.mjs +1 -1
- package/esm2022/index.mjs +10 -11
- package/esm2022/lib/before-render.mjs +13 -0
- package/esm2022/lib/canvas.mjs +137 -161
- package/esm2022/lib/directives/args.mjs +13 -11
- package/esm2022/lib/directives/common.mjs +28 -27
- package/esm2022/lib/directives/key.mjs +29 -0
- package/esm2022/lib/directives/parent.mjs +13 -11
- package/esm2022/lib/dom/events.mjs +6 -1
- package/esm2022/lib/events.mjs +77 -60
- package/esm2022/lib/instance.mjs +65 -0
- package/esm2022/lib/loader.mjs +35 -41
- package/esm2022/lib/loop.mjs +6 -3
- package/esm2022/lib/portal.mjs +103 -112
- package/esm2022/lib/ref.mjs +48 -0
- package/esm2022/lib/renderer/catalogue.mjs +7 -0
- package/esm2022/lib/renderer/constants.mjs +21 -0
- package/esm2022/lib/renderer/index.mjs +419 -0
- package/esm2022/lib/renderer/store.mjs +148 -112
- package/esm2022/lib/renderer/utils.mjs +63 -48
- package/esm2022/lib/roots.mjs +249 -0
- package/esm2022/lib/routed-scene.mjs +11 -8
- package/esm2022/lib/store.mjs +207 -0
- package/esm2022/lib/three-types.mjs +2 -2
- package/esm2022/lib/types.mjs +1 -1
- package/esm2022/lib/utils/apply-props.mjs +23 -11
- package/esm2022/lib/utils/attach.mjs +2 -2
- package/esm2022/lib/utils/is.mjs +1 -1
- package/esm2022/lib/utils/make.mjs +1 -1
- package/esm2022/lib/utils/safe-detect-changes.mjs +15 -13
- package/esm2022/lib/utils/signal-store.mjs +96 -0
- package/esm2022/lib/utils/update.mjs +1 -1
- package/fesm2022/angular-three.mjs +2010 -1881
- package/fesm2022/angular-three.mjs.map +1 -1
- package/index.d.ts +9 -10
- package/lib/{di/before-render.d.ts → before-render.d.ts} +1 -1
- package/lib/canvas.d.ts +82 -12
- package/lib/directives/args.d.ts +2 -2
- package/lib/directives/common.d.ts +5 -1
- package/lib/directives/key.d.ts +10 -0
- package/lib/directives/parent.d.ts +5 -5
- package/lib/dom/events.d.ts +3 -2
- package/lib/events.d.ts +78 -2
- package/lib/instance.d.ts +36 -0
- package/lib/loader.d.ts +21 -3
- package/lib/loop.d.ts +68 -6
- package/lib/portal.d.ts +21 -12
- package/lib/{di/ref.d.ts → ref.d.ts} +3 -2
- package/lib/renderer/catalogue.d.ts +13 -0
- package/lib/renderer/constants.d.ts +20 -0
- package/lib/renderer/index.d.ts +5 -0
- package/lib/renderer/store.d.ts +21 -15
- package/lib/renderer/utils.d.ts +29 -19
- package/lib/roots.d.ts +11 -0
- package/lib/routed-scene.d.ts +1 -1
- package/lib/store.d.ts +147 -0
- package/lib/three-types.d.ts +5 -5
- package/lib/types.d.ts +1 -309
- package/lib/utils/apply-props.d.ts +4 -2
- package/lib/utils/attach.d.ts +5 -3
- package/lib/utils/is.d.ts +5 -4
- package/lib/utils/make.d.ts +12 -1
- package/lib/utils/safe-detect-changes.d.ts +2 -2
- package/lib/utils/signal-store.d.ts +17 -0
- package/lib/utils/update.d.ts +1 -1
- package/metadata.json +1 -1
- package/package.json +22 -5
- package/plugin/generators.json +47 -17
- package/plugin/migrations.json +27 -0
- package/plugin/package.json +20 -4
- package/plugin/src/generators/init/compat.d.ts +3 -1
- package/plugin/src/generators/init/compat.js +2 -2
- package/plugin/src/generators/init/compat.js.map +1 -1
- package/plugin/src/generators/init/files/experience/experience.component.html__tmpl__ +4 -0
- package/plugin/src/generators/init/files/experience/experience.component.ts__tmpl__ +18 -0
- package/plugin/src/generators/init/generator.d.ts +6 -0
- package/plugin/src/generators/init/generator.js +160 -0
- package/plugin/src/generators/init/generator.js.map +1 -0
- package/plugin/src/generators/init/schema.json +15 -4
- package/plugin/src/generators/init-cannon/compat.d.ts +2 -0
- package/plugin/src/generators/init-cannon/compat.js +6 -0
- package/plugin/src/generators/init-cannon/compat.js.map +1 -0
- package/plugin/src/generators/init-cannon/generator.d.ts +2 -0
- package/plugin/src/generators/init-cannon/generator.js +23 -0
- package/plugin/src/generators/init-cannon/generator.js.map +1 -0
- package/plugin/src/generators/init-cannon/schema.json +6 -0
- package/plugin/src/generators/init-postprocessing/compat.d.ts +2 -0
- package/plugin/src/generators/init-postprocessing/compat.js +6 -0
- package/plugin/src/generators/init-postprocessing/compat.js.map +1 -0
- package/plugin/src/generators/init-postprocessing/generator.d.ts +2 -0
- package/plugin/src/generators/init-postprocessing/generator.js +21 -0
- package/plugin/src/generators/init-postprocessing/generator.js.map +1 -0
- package/plugin/src/generators/init-postprocessing/schema.json +6 -0
- package/plugin/src/generators/init-soba/compat.d.ts +2 -0
- package/plugin/src/generators/init-soba/compat.js +6 -0
- package/plugin/src/generators/init-soba/compat.js.map +1 -0
- package/plugin/src/generators/init-soba/generator.d.ts +2 -0
- package/plugin/src/generators/init-soba/generator.js +27 -0
- package/plugin/src/generators/init-soba/generator.js.map +1 -0
- package/plugin/src/generators/init-soba/schema.json +6 -0
- package/plugin/src/generators/utils.d.ts +2 -0
- package/plugin/src/generators/utils.js +34 -0
- package/plugin/src/generators/utils.js.map +1 -0
- package/plugin/src/generators/versions.d.ts +13 -0
- package/plugin/src/generators/versions.js +17 -0
- package/plugin/src/generators/versions.js.map +1 -0
- package/plugin/src/index.d.ts +3 -1
- package/plugin/src/index.js +7 -3
- package/plugin/src/index.js.map +1 -1
- package/plugin/src/migrations/migrate-to-ngxtension/compat.d.ts +2 -0
- package/plugin/src/migrations/migrate-to-ngxtension/compat.js +6 -0
- package/plugin/src/migrations/migrate-to-ngxtension/compat.js.map +1 -0
- package/plugin/src/migrations/migrate-to-ngxtension/migrate-to-ngxtension.d.ts +2 -0
- package/plugin/src/migrations/migrate-to-ngxtension/migrate-to-ngxtension.js +55 -0
- package/plugin/src/migrations/migrate-to-ngxtension/migrate-to-ngxtension.js.map +1 -0
- package/web-types.json +1 -1
- package/esm2022/lib/di/before-render.mjs +0 -13
- package/esm2022/lib/di/catalogue.mjs +0 -7
- package/esm2022/lib/di/ref.mjs +0 -49
- package/esm2022/lib/directives/repeat.mjs +0 -18
- package/esm2022/lib/renderer/di.mjs +0 -3
- package/esm2022/lib/renderer/enums.mjs +0 -2
- package/esm2022/lib/renderer/provider.mjs +0 -18
- package/esm2022/lib/renderer/renderer.mjs +0 -368
- package/esm2022/lib/stores/signal.store.mjs +0 -79
- package/esm2022/lib/stores/store.mjs +0 -420
- package/esm2022/lib/utils/assert-in-injection-context.mjs +0 -14
- package/esm2022/lib/utils/instance.mjs +0 -63
- package/esm2022/lib/utils/signal.mjs +0 -24
- package/esm2022/lib/utils/timing.mjs +0 -21
- package/lib/di/catalogue.d.ts +0 -3
- package/lib/directives/repeat.d.ts +0 -7
- package/lib/renderer/di.d.ts +0 -2
- package/lib/renderer/enums.d.ts +0 -26
- package/lib/renderer/provider.d.ts +0 -8
- package/lib/renderer/renderer.d.ts +0 -49
- package/lib/stores/signal.store.d.ts +0 -21
- package/lib/stores/store.d.ts +0 -13
- package/lib/utils/assert-in-injection-context.d.ts +0 -2
- package/lib/utils/instance.d.ts +0 -4
- package/lib/utils/signal.d.ts +0 -2
- package/lib/utils/timing.d.ts +0 -4
- package/plugin/src/generators/init/init.d.ts +0 -5
- package/plugin/src/generators/init/init.js +0 -56
- package/plugin/src/generators/init/init.js.map +0 -1
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { DestroyRef, inject, runInInjectionContext } from '@angular/core';
|
|
2
|
-
import { NgtStore } from '../stores/store';
|
|
3
|
-
import { assertInjectionContext } from '../utils/assert-in-injection-context';
|
|
4
|
-
export function injectBeforeRender(cb, { priority = 0, injector } = {}) {
|
|
5
|
-
injector = assertInjectionContext(injectBeforeRender, injector);
|
|
6
|
-
return runInInjectionContext(injector, () => {
|
|
7
|
-
const store = inject(NgtStore);
|
|
8
|
-
const sub = store.get('internal').subscribe(cb, priority, store);
|
|
9
|
-
inject(DestroyRef).onDestroy(() => void sub());
|
|
10
|
-
return sub;
|
|
11
|
-
});
|
|
12
|
-
}
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVmb3JlLXJlbmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci10aHJlZS9zcmMvbGliL2RpL2JlZm9yZS1yZW5kZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBWSxNQUFNLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRTlFLE1BQU0sVUFBVSxrQkFBa0IsQ0FDOUIsRUFBcUMsRUFDckMsRUFBRSxRQUFRLEdBQUcsQ0FBQyxFQUFFLFFBQVEsS0FBaUQsRUFBRTtJQUUzRSxRQUFRLEdBQUcsc0JBQXNCLENBQUMsa0JBQWtCLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDaEUsT0FBTyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFO1FBQ3hDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvQixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzdHJveVJlZiwgSW5qZWN0b3IsIGluamVjdCwgcnVuSW5JbmplY3Rpb25Db250ZXh0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ3RTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy9zdG9yZSc7XG5pbXBvcnQgeyBOZ3RCZWZvcmVSZW5kZXJSZWNvcmQgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBhc3NlcnRJbmplY3Rpb25Db250ZXh0IH0gZnJvbSAnLi4vdXRpbHMvYXNzZXJ0LWluLWluamVjdGlvbi1jb250ZXh0JztcblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdEJlZm9yZVJlbmRlcihcbiAgICBjYjogTmd0QmVmb3JlUmVuZGVyUmVjb3JkWydjYWxsYmFjayddLFxuICAgIHsgcHJpb3JpdHkgPSAwLCBpbmplY3RvciB9OiB7IHByaW9yaXR5PzogbnVtYmVyOyBpbmplY3Rvcj86IEluamVjdG9yIH0gPSB7fVxuKSB7XG4gICAgaW5qZWN0b3IgPSBhc3NlcnRJbmplY3Rpb25Db250ZXh0KGluamVjdEJlZm9yZVJlbmRlciwgaW5qZWN0b3IpO1xuICAgIHJldHVybiBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IHtcbiAgICAgICAgY29uc3Qgc3RvcmUgPSBpbmplY3QoTmd0U3RvcmUpO1xuICAgICAgICBjb25zdCBzdWIgPSBzdG9yZS5nZXQoJ2ludGVybmFsJykuc3Vic2NyaWJlKGNiLCBwcmlvcml0eSwgc3RvcmUpO1xuICAgICAgICBpbmplY3QoRGVzdHJveVJlZikub25EZXN0cm95KCgpID0+IHZvaWQgc3ViKCkpO1xuICAgICAgICByZXR1cm4gc3ViO1xuICAgIH0pO1xufVxuIl19
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { InjectionToken } from '@angular/core';
|
|
2
|
-
const catalogue = {};
|
|
3
|
-
export function extend(objects) {
|
|
4
|
-
Object.assign(catalogue, objects);
|
|
5
|
-
}
|
|
6
|
-
export const NGT_CATALOGUE = new InjectionToken('THREE Constructors Catalogue', { factory: () => catalogue });
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZ3VlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlL3NyYy9saWIvZGkvY2F0YWxvZ3VlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0MsTUFBTSxTQUFTLEdBQWdELEVBQUUsQ0FBQztBQUVsRSxNQUFNLFVBQVUsTUFBTSxDQUFDLE9BQWU7SUFDbEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDdEMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxJQUFJLGNBQWMsQ0FDM0MsOEJBQThCLEVBQzlCLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUMvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuY29uc3QgY2F0YWxvZ3VlOiBSZWNvcmQ8c3RyaW5nLCBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnk+ID0ge307XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRlbmQob2JqZWN0czogb2JqZWN0KTogdm9pZCB7XG4gICAgT2JqZWN0LmFzc2lnbihjYXRhbG9ndWUsIG9iamVjdHMpO1xufVxuXG5leHBvcnQgY29uc3QgTkdUX0NBVEFMT0dVRSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxSZWNvcmQ8c3RyaW5nLCBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnk+PihcbiAgICAnVEhSRUUgQ29uc3RydWN0b3JzIENhdGFsb2d1ZScsXG4gICAgeyBmYWN0b3J5OiAoKSA9PiBjYXRhbG9ndWUgfVxuKTtcbiJdfQ==
|
package/esm2022/lib/di/ref.mjs
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { ApplicationRef, ChangeDetectorRef, DestroyRef, ElementRef, computed, inject, runInInjectionContext, untracked, } from '@angular/core';
|
|
2
|
-
import { assertInjectionContext } from '../utils/assert-in-injection-context';
|
|
3
|
-
import { getLocalState } from '../utils/instance';
|
|
4
|
-
import { is } from '../utils/is';
|
|
5
|
-
import { safeDetectChanges } from '../utils/safe-detect-changes';
|
|
6
|
-
import { createSignal } from '../utils/signal';
|
|
7
|
-
export function injectNgtRef(initial = null, injector) {
|
|
8
|
-
injector = assertInjectionContext(injectNgtRef, injector);
|
|
9
|
-
return runInInjectionContext(injector, () => {
|
|
10
|
-
const cdr = inject(ChangeDetectorRef);
|
|
11
|
-
const appRef = inject(ApplicationRef);
|
|
12
|
-
const ref = is.ref(initial) ? initial : new ElementRef(initial);
|
|
13
|
-
const signalRef = createSignal(ref.nativeElement);
|
|
14
|
-
const readonlySignal = signalRef.asReadonly();
|
|
15
|
-
const cached = new Map();
|
|
16
|
-
inject(DestroyRef).onDestroy(() => void cached.clear());
|
|
17
|
-
const children = (type = 'objects') => {
|
|
18
|
-
if (!cached.has(type)) {
|
|
19
|
-
cached.set(type, computed(() => {
|
|
20
|
-
const instance = readonlySignal();
|
|
21
|
-
if (!instance)
|
|
22
|
-
return [];
|
|
23
|
-
const localState = getLocalState(instance);
|
|
24
|
-
if (!localState.objects || !localState.nonObjects)
|
|
25
|
-
return [];
|
|
26
|
-
if (type === 'objects')
|
|
27
|
-
return localState.objects();
|
|
28
|
-
if (type === 'nonObjects')
|
|
29
|
-
return localState.nonObjects();
|
|
30
|
-
return [...localState.objects(), ...localState.nonObjects()];
|
|
31
|
-
}));
|
|
32
|
-
}
|
|
33
|
-
return cached.get(type);
|
|
34
|
-
};
|
|
35
|
-
Object.defineProperty(ref, 'nativeElement', {
|
|
36
|
-
set: (newElement) => {
|
|
37
|
-
if (newElement !== untracked(signalRef)) {
|
|
38
|
-
signalRef.set(newElement);
|
|
39
|
-
// trigger CDR
|
|
40
|
-
requestAnimationFrame(() => void safeDetectChanges(cdr));
|
|
41
|
-
}
|
|
42
|
-
},
|
|
43
|
-
get: () => readonlySignal(),
|
|
44
|
-
});
|
|
45
|
-
Object.defineProperty(ref, 'untracked', { get: () => untracked(readonlySignal) });
|
|
46
|
-
return Object.assign(ref, { children });
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlL3NyYy9saWIvZGkvcmVmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxjQUFjLEVBQ2QsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDVixVQUFVLEVBR1YsUUFBUSxFQUNSLE1BQU0sRUFDTixxQkFBcUIsRUFDckIsU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQVMvQyxNQUFNLFVBQVUsWUFBWSxDQUN4QixVQUEyQyxJQUFLLEVBQ2hELFFBQW1CO0lBRW5CLFFBQVEsR0FBRyxzQkFBc0IsQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDMUQsT0FBTyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFO1FBQ3hDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN0QyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFXLE9BQW1CLENBQUMsQ0FBQztRQUN0RixNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sY0FBYyxHQUFHLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUM5QyxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBRXpCLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUV4RCxNQUFNLFFBQVEsR0FBRyxDQUFDLE9BQTBDLFNBQVMsRUFBRSxFQUFFO1lBQ3JFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNuQixNQUFNLENBQUMsR0FBRyxDQUNOLElBQUksRUFDSixRQUFRLENBQUMsR0FBRyxFQUFFO29CQUNWLE1BQU0sUUFBUSxHQUFHLGNBQWMsRUFBRSxDQUFDO29CQUNsQyxJQUFJLENBQUMsUUFBUTt3QkFBRSxPQUFPLEVBQUUsQ0FBQztvQkFDekIsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUMzQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVO3dCQUFFLE9BQU8sRUFBRSxDQUFDO29CQUM3RCxJQUFJLElBQUksS0FBSyxTQUFTO3dCQUFFLE9BQU8sVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNwRCxJQUFJLElBQUksS0FBSyxZQUFZO3dCQUFFLE9BQU8sVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUMxRCxPQUFPLENBQUMsR0FBRyxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztnQkFDakUsQ0FBQyxDQUFDLENBQ0wsQ0FBQzthQUNMO1lBQ0QsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQztRQUVGLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLGVBQWUsRUFBRTtZQUN4QyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRTtnQkFDaEIsSUFBSSxVQUFVLEtBQUssU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFO29CQUNyQyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUMxQixjQUFjO29CQUNkLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztpQkFDNUQ7WUFDTCxDQUFDO1lBQ0QsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLGNBQWMsRUFBRTtTQUM5QixDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVsRixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQTZCLENBQUM7SUFDeEUsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBcHBsaWNhdGlvblJlZixcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBEZXN0cm95UmVmLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5qZWN0b3IsXG4gICAgU2lnbmFsLFxuICAgIGNvbXB1dGVkLFxuICAgIGluamVjdCxcbiAgICBydW5JbkluamVjdGlvbkNvbnRleHQsXG4gICAgdW50cmFja2VkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5ndEluc3RhbmNlTm9kZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGFzc2VydEluamVjdGlvbkNvbnRleHQgfSBmcm9tICcuLi91dGlscy9hc3NlcnQtaW4taW5qZWN0aW9uLWNvbnRleHQnO1xuaW1wb3J0IHsgZ2V0TG9jYWxTdGF0ZSB9IGZyb20gJy4uL3V0aWxzL2luc3RhbmNlJztcbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vdXRpbHMvaXMnO1xuaW1wb3J0IHsgc2FmZURldGVjdENoYW5nZXMgfSBmcm9tICcuLi91dGlscy9zYWZlLWRldGVjdC1jaGFuZ2VzJztcbmltcG9ydCB7IGNyZWF0ZVNpZ25hbCB9IGZyb20gJy4uL3V0aWxzL3NpZ25hbCc7XG5cbmV4cG9ydCB0eXBlIE5ndEluamVjdGVkUmVmPFRFbGVtZW50PiA9IEVsZW1lbnRSZWY8VEVsZW1lbnQ+ICYge1xuICAgIC8qIGNvbnN1bWVycyBzaG91bGQgdXNlIHRoaXMgZm9yIGxpc3RlbnRpbmcgdG8gY2hpbGRyZW4gY2hhbmdlcyBvbiB0aGlzIHJlZiAqL1xuICAgIGNoaWxkcmVuOiAodHlwZT86ICdvYmplY3RzJyB8ICdub25PYmplY3RzJyB8ICdib3RoJykgPT4gU2lnbmFsPE5ndEluc3RhbmNlTm9kZVtdPjtcbiAgICAvKiBjb25zdW1lcnMgc2hvdWxkIHVzZSB0aGlzIHRvIHJlYWQgdGhlIHJlZiBjdXJyZW50IHZhbHVlIHdpdGhvdXQgcmVnaXN0ZXJpbmcgdGhlIHNpZ25hbCAqL1xuICAgIHVudHJhY2tlZDogVEVsZW1lbnQ7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0Tmd0UmVmPFRFbGVtZW50PihcbiAgICBpbml0aWFsOiBFbGVtZW50UmVmPFRFbGVtZW50PiB8IFRFbGVtZW50ID0gbnVsbCEsXG4gICAgaW5qZWN0b3I/OiBJbmplY3RvclxuKTogTmd0SW5qZWN0ZWRSZWY8VEVsZW1lbnQ+IHtcbiAgICBpbmplY3RvciA9IGFzc2VydEluamVjdGlvbkNvbnRleHQoaW5qZWN0Tmd0UmVmLCBpbmplY3Rvcik7XG4gICAgcmV0dXJuIHJ1bkluSW5qZWN0aW9uQ29udGV4dChpbmplY3RvciwgKCkgPT4ge1xuICAgICAgICBjb25zdCBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAgICAgICBjb25zdCBhcHBSZWYgPSBpbmplY3QoQXBwbGljYXRpb25SZWYpO1xuICAgICAgICBjb25zdCByZWYgPSBpcy5yZWYoaW5pdGlhbCkgPyBpbml0aWFsIDogbmV3IEVsZW1lbnRSZWY8VEVsZW1lbnQ+KGluaXRpYWwgYXMgVEVsZW1lbnQpO1xuICAgICAgICBjb25zdCBzaWduYWxSZWYgPSBjcmVhdGVTaWduYWwocmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICBjb25zdCByZWFkb25seVNpZ25hbCA9IHNpZ25hbFJlZi5hc1JlYWRvbmx5KCk7XG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IG5ldyBNYXAoKTtcblxuICAgICAgICBpbmplY3QoRGVzdHJveVJlZikub25EZXN0cm95KCgpID0+IHZvaWQgY2FjaGVkLmNsZWFyKCkpO1xuXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gKHR5cGU6ICdvYmplY3RzJyB8ICdub25PYmplY3RzJyB8ICdib3RoJyA9ICdvYmplY3RzJykgPT4ge1xuICAgICAgICAgICAgaWYgKCFjYWNoZWQuaGFzKHR5cGUpKSB7XG4gICAgICAgICAgICAgICAgY2FjaGVkLnNldChcbiAgICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSByZWFkb25seVNpZ25hbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbnN0YW5jZSkgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUoaW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2NhbFN0YXRlLm9iamVjdHMgfHwgIWxvY2FsU3RhdGUubm9uT2JqZWN0cykgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdvYmplY3RzJykgcmV0dXJuIGxvY2FsU3RhdGUub2JqZWN0cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdub25PYmplY3RzJykgcmV0dXJuIGxvY2FsU3RhdGUubm9uT2JqZWN0cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5sb2NhbFN0YXRlLm9iamVjdHMoKSwgLi4ubG9jYWxTdGF0ZS5ub25PYmplY3RzKCldO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkLmdldCh0eXBlKSE7XG4gICAgICAgIH07XG5cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlZiwgJ25hdGl2ZUVsZW1lbnQnLCB7XG4gICAgICAgICAgICBzZXQ6IChuZXdFbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG5ld0VsZW1lbnQgIT09IHVudHJhY2tlZChzaWduYWxSZWYpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNpZ25hbFJlZi5zZXQobmV3RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRyaWdnZXIgQ0RSXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB2b2lkIHNhZmVEZXRlY3RDaGFuZ2VzKGNkcikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXQ6ICgpID0+IHJlYWRvbmx5U2lnbmFsKCksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZWYsICd1bnRyYWNrZWQnLCB7IGdldDogKCkgPT4gdW50cmFja2VkKHJlYWRvbmx5U2lnbmFsKSB9KTtcblxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihyZWYsIHsgY2hpbGRyZW4gfSkgYXMgTmd0SW5qZWN0ZWRSZWY8VEVsZW1lbnQ+O1xuICAgIH0pO1xufVxuIl19
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { NgForOf } from '@angular/common';
|
|
2
|
-
import { Directive, Input } from '@angular/core';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
class NgtRepeat extends NgForOf {
|
|
5
|
-
set ngForRepeat(count) {
|
|
6
|
-
this.ngForOf = Number.isInteger(count) ? Array.from({ length: count }, (_, i) => i) : [];
|
|
7
|
-
}
|
|
8
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtRepeat, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
9
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: NgtRepeat, isStandalone: true, selector: "[ngFor][ngForRepeat]", inputs: { ngForRepeat: "ngForRepeat" }, usesInheritance: true, ngImport: i0 }); }
|
|
10
|
-
}
|
|
11
|
-
export { NgtRepeat };
|
|
12
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtRepeat, decorators: [{
|
|
13
|
-
type: Directive,
|
|
14
|
-
args: [{ selector: '[ngFor][ngForRepeat]', standalone: true }]
|
|
15
|
-
}], propDecorators: { ngForRepeat: [{
|
|
16
|
-
type: Input
|
|
17
|
-
}] } });
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwZWF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlL3NyYy9saWIvZGlyZWN0aXZlcy9yZXBlYXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUVqRCxNQUNhLFNBQVUsU0FBUSxPQUFlO0lBQzFDLElBQWEsV0FBVyxDQUFDLEtBQWE7UUFDbEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM3RixDQUFDOzhHQUhRLFNBQVM7a0dBQVQsU0FBUzs7U0FBVCxTQUFTOzJGQUFULFNBQVM7a0JBRHJCLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRTs4QkFFaEQsV0FBVztzQkFBdkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nRm9yT2YgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbbmdGb3JdW25nRm9yUmVwZWF0XScsIHN0YW5kYWxvbmU6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBOZ3RSZXBlYXQgZXh0ZW5kcyBOZ0Zvck9mPG51bWJlcj4ge1xuICAgIEBJbnB1dCgpIHNldCBuZ0ZvclJlcGVhdChjb3VudDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMubmdGb3JPZiA9IE51bWJlci5pc0ludGVnZXIoY291bnQpID8gQXJyYXkuZnJvbSh7IGxlbmd0aDogY291bnQgfSwgKF8sIGkpID0+IGkpIDogW107XG4gICAgfVxufVxuIl19
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import { InjectionToken } from '@angular/core';
|
|
2
|
-
export const NGT_COMPOUND_PREFIXES = new InjectionToken('NgtCompoundPrefixes');
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUvc3JjL2xpYi9yZW5kZXJlci9kaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9DLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksY0FBYyxDQUFXLHFCQUFxQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgY29uc3QgTkdUX0NPTVBPVU5EX1BSRUZJWEVTID0gbmV3IEluamVjdGlvblRva2VuPHN0cmluZ1tdPignTmd0Q29tcG91bmRQcmVmaXhlcycpO1xuIl19
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUvc3JjL2xpYi9yZW5kZXJlci9lbnVtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGVudW0gTmd0UmVuZGVyZXJDbGFzc0lkIHtcbiAgICB0eXBlLFxuICAgIHBhcmVudCxcbiAgICBpbmplY3RlZFBhcmVudCxcbiAgICBjaGlsZHJlbixcbiAgICBkZXN0cm95ZWQsXG4gICAgY29tcG91bmQsXG4gICAgY29tcG91bmRQYXJlbnQsXG4gICAgY29tcG91bmRlZCxcbiAgICBxdWV1ZU9wcyxcbiAgICBhdHRyaWJ1dGVzLFxuICAgIHByb3BlcnRpZXMsXG4gICAgcmF3VmFsdWUsXG4gICAgcmVmLFxuICAgIHBvcnRhbENvbnRhaW5lcixcbiAgICBpbmplY3RvckZhY3RvcnksXG59XG5cbmV4cG9ydCBjb25zdCBlbnVtIE5ndENvbXBvdW5kQ2xhc3NJZCB7XG4gICAgYXBwbHlGaXJzdCxcbiAgICBwcm9wcyxcbn1cblxuZXhwb3J0IGNvbnN0IGVudW0gTmd0UXVldWVPcENsYXNzSWQge1xuICAgIHR5cGUsXG4gICAgb3AsXG4gICAgZG9uZSxcbn1cbiJdfQ==
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectorRef, makeEnvironmentProviders, provideZoneChangeDetection, RendererFactory2, } from '@angular/core';
|
|
2
|
-
import { NgtStore } from '../stores/store';
|
|
3
|
-
import { NGT_COMPOUND_PREFIXES } from './di';
|
|
4
|
-
import { NgtRendererFactory } from './renderer';
|
|
5
|
-
export function provideNgtRenderer({ store, changeDetectorRef, compoundPrefixes = [] }) {
|
|
6
|
-
if (!compoundPrefixes.includes('ngts'))
|
|
7
|
-
compoundPrefixes.push('ngts');
|
|
8
|
-
if (!compoundPrefixes.includes('ngtp'))
|
|
9
|
-
compoundPrefixes.push('ngtp');
|
|
10
|
-
return makeEnvironmentProviders([
|
|
11
|
-
{ provide: RendererFactory2, useClass: NgtRendererFactory },
|
|
12
|
-
{ provide: NgtStore, useValue: store },
|
|
13
|
-
{ provide: ChangeDetectorRef, useValue: changeDetectorRef },
|
|
14
|
-
{ provide: NGT_COMPOUND_PREFIXES, useValue: compoundPrefixes },
|
|
15
|
-
provideZoneChangeDetection({ runCoalescing: true, eventCoalescing: true }),
|
|
16
|
-
]);
|
|
17
|
-
}
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUvc3JjL2xpYi9yZW5kZXJlci9wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsaUJBQWlCLEVBQ2pCLHdCQUF3QixFQUN4QiwwQkFBMEIsRUFDMUIsZ0JBQWdCLEdBQ25CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBUWhELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsR0FBRyxFQUFFLEVBQThCO0lBQzlHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRXRFLE9BQU8sd0JBQXdCLENBQUM7UUFDNUIsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFO1FBQzNELEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFO1FBQ3RDLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRTtRQUMzRCxFQUFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUU7UUFDOUQsMEJBQTBCLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsQ0FBQztLQUM3RSxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMsXG4gICAgcHJvdmlkZVpvbmVDaGFuZ2VEZXRlY3Rpb24sXG4gICAgUmVuZGVyZXJGYWN0b3J5Mixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ3RTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy9zdG9yZSc7XG5pbXBvcnQgeyBOR1RfQ09NUE9VTkRfUFJFRklYRVMgfSBmcm9tICcuL2RpJztcbmltcG9ydCB7IE5ndFJlbmRlcmVyRmFjdG9yeSB9IGZyb20gJy4vcmVuZGVyZXInO1xuXG5leHBvcnQgdHlwZSBOZ3RSZW5kZXJlclByb3ZpZGVyT3B0aW9ucyA9IHtcbiAgICBzdG9yZTogTmd0U3RvcmU7XG4gICAgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmO1xuICAgIGNvbXBvdW5kUHJlZml4ZXM/OiBzdHJpbmdbXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlTmd0UmVuZGVyZXIoeyBzdG9yZSwgY2hhbmdlRGV0ZWN0b3JSZWYsIGNvbXBvdW5kUHJlZml4ZXMgPSBbXSB9OiBOZ3RSZW5kZXJlclByb3ZpZGVyT3B0aW9ucykge1xuICAgIGlmICghY29tcG91bmRQcmVmaXhlcy5pbmNsdWRlcygnbmd0cycpKSBjb21wb3VuZFByZWZpeGVzLnB1c2goJ25ndHMnKTtcbiAgICBpZiAoIWNvbXBvdW5kUHJlZml4ZXMuaW5jbHVkZXMoJ25ndHAnKSkgY29tcG91bmRQcmVmaXhlcy5wdXNoKCduZ3RwJyk7XG5cbiAgICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKFtcbiAgICAgICAgeyBwcm92aWRlOiBSZW5kZXJlckZhY3RvcnkyLCB1c2VDbGFzczogTmd0UmVuZGVyZXJGYWN0b3J5IH0sXG4gICAgICAgIHsgcHJvdmlkZTogTmd0U3RvcmUsIHVzZVZhbHVlOiBzdG9yZSB9LFxuICAgICAgICB7IHByb3ZpZGU6IENoYW5nZURldGVjdG9yUmVmLCB1c2VWYWx1ZTogY2hhbmdlRGV0ZWN0b3JSZWYgfSxcbiAgICAgICAgeyBwcm92aWRlOiBOR1RfQ09NUE9VTkRfUFJFRklYRVMsIHVzZVZhbHVlOiBjb21wb3VuZFByZWZpeGVzIH0sXG4gICAgICAgIHByb3ZpZGVab25lQ2hhbmdlRGV0ZWN0aW9uKHsgcnVuQ29hbGVzY2luZzogdHJ1ZSwgZXZlbnRDb2FsZXNjaW5nOiB0cnVlIH0pLFxuICAgIF0pO1xufVxuIl19
|
|
@@ -1,368 +0,0 @@
|
|
|
1
|
-
import { DOCUMENT } from '@angular/common';
|
|
2
|
-
import { ChangeDetectorRef, Injectable, Injector, NgZone, RendererFactory2, effect, getDebugNode, inject, untracked, } from '@angular/core';
|
|
3
|
-
import { NGT_CATALOGUE } from '../di/catalogue';
|
|
4
|
-
import { NgtStore } from '../stores/store';
|
|
5
|
-
import { getLocalState, prepare } from '../utils/instance';
|
|
6
|
-
import { is } from '../utils/is';
|
|
7
|
-
import { createSignal } from '../utils/signal';
|
|
8
|
-
import { NGT_COMPOUND_PREFIXES } from './di';
|
|
9
|
-
import { NgtRendererStore } from './store';
|
|
10
|
-
import { ROUTED_SCENE, SPECIAL_DOM_TAG, attachThreeChild, kebabToPascal, processThreeEvent, removeThreeChild, } from './utils';
|
|
11
|
-
import * as i0 from "@angular/core";
|
|
12
|
-
class NgtRendererFactory {
|
|
13
|
-
#delegateRendererFactory = inject(RendererFactory2, { skipSelf: true });
|
|
14
|
-
#catalogue = inject(NGT_CATALOGUE);
|
|
15
|
-
#zone = inject(NgZone);
|
|
16
|
-
#cdr = inject(ChangeDetectorRef);
|
|
17
|
-
#rendererMap = new Map();
|
|
18
|
-
#routedSet = new Set();
|
|
19
|
-
// all Renderer instances share the same Store
|
|
20
|
-
#rendererStore = new NgtRendererStore({
|
|
21
|
-
portals: [],
|
|
22
|
-
store: inject(NgtStore),
|
|
23
|
-
compoundPrefixes: inject(NGT_COMPOUND_PREFIXES),
|
|
24
|
-
document: inject(DOCUMENT),
|
|
25
|
-
});
|
|
26
|
-
createRenderer(hostElement, type) {
|
|
27
|
-
const delegateRenderer = this.#delegateRendererFactory.createRenderer(hostElement, type);
|
|
28
|
-
if (!type)
|
|
29
|
-
return delegateRenderer;
|
|
30
|
-
// if ((type as NgtAnyRecord)['type']['isHtml']) {
|
|
31
|
-
// return delegateRenderer;
|
|
32
|
-
// }
|
|
33
|
-
if (type['type'][ROUTED_SCENE]) {
|
|
34
|
-
this.#routedSet.add(type.id);
|
|
35
|
-
}
|
|
36
|
-
let renderer = this.#rendererMap.get(type.id);
|
|
37
|
-
if (!renderer) {
|
|
38
|
-
renderer = new NgtRenderer(delegateRenderer, this.#rendererStore, this.#catalogue, this.#zone, this.#cdr,
|
|
39
|
-
// setting root scene if there's no routed scene OR this component is the routed Scene
|
|
40
|
-
!hostElement && (this.#routedSet.size === 0 || this.#routedSet.has(type.id)));
|
|
41
|
-
this.#rendererMap.set(type.id, renderer);
|
|
42
|
-
}
|
|
43
|
-
return renderer;
|
|
44
|
-
}
|
|
45
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtRendererFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
46
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtRendererFactory }); }
|
|
47
|
-
}
|
|
48
|
-
export { NgtRendererFactory };
|
|
49
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtRendererFactory, decorators: [{
|
|
50
|
-
type: Injectable
|
|
51
|
-
}] });
|
|
52
|
-
/**
|
|
53
|
-
* Anything abbreviated with rS/RS stands for RendererState
|
|
54
|
-
*/
|
|
55
|
-
export class NgtRenderer {
|
|
56
|
-
constructor(delegate, store, catalogue, zone, cdr, root = true) {
|
|
57
|
-
this.delegate = delegate;
|
|
58
|
-
this.store = store;
|
|
59
|
-
this.catalogue = catalogue;
|
|
60
|
-
this.zone = zone;
|
|
61
|
-
this.cdr = cdr;
|
|
62
|
-
this.root = root;
|
|
63
|
-
this.createText = this.delegate.createText.bind(this.delegate);
|
|
64
|
-
this.destroy = this.delegate.destroy.bind(this.delegate);
|
|
65
|
-
this.destroyNode = null;
|
|
66
|
-
this.selectRootElement = this.delegate.selectRootElement.bind(this.delegate);
|
|
67
|
-
this.nextSibling = this.delegate.nextSibling.bind(this.delegate);
|
|
68
|
-
this.removeAttribute = this.delegate.removeAttribute.bind(this.delegate);
|
|
69
|
-
this.addClass = this.delegate.addClass.bind(this.delegate);
|
|
70
|
-
this.removeClass = this.delegate.removeClass.bind(this.delegate);
|
|
71
|
-
this.setStyle = this.delegate.setStyle.bind(this.delegate);
|
|
72
|
-
this.removeStyle = this.delegate.removeStyle.bind(this.delegate);
|
|
73
|
-
this.setValue = this.delegate.setValue.bind(this.delegate);
|
|
74
|
-
}
|
|
75
|
-
createElement(name, namespace) {
|
|
76
|
-
const element = this.delegate.createElement(name, namespace);
|
|
77
|
-
// on first pass, we return the Root Scene as the root node
|
|
78
|
-
if (this.root) {
|
|
79
|
-
this.root = false;
|
|
80
|
-
const node = this.store.createNode('three', this.store.rootScene);
|
|
81
|
-
node.__ngt_renderer__[14 /* NgtRendererClassId.injectorFactory */] = () => getDebugNode(element).injector;
|
|
82
|
-
return node;
|
|
83
|
-
}
|
|
84
|
-
// handle compound
|
|
85
|
-
if (this.store.isCompound(name)) {
|
|
86
|
-
return this.store.createNode('compound', element);
|
|
87
|
-
}
|
|
88
|
-
// handle portal
|
|
89
|
-
if (name === SPECIAL_DOM_TAG.NGT_PORTAL) {
|
|
90
|
-
return this.store.createNode('portal', element);
|
|
91
|
-
}
|
|
92
|
-
// handle raw value
|
|
93
|
-
if (name === SPECIAL_DOM_TAG.NGT_VALUE) {
|
|
94
|
-
return this.store.createNode('three', Object.assign({ __ngt_renderer__: { rawValue: undefined } },
|
|
95
|
-
// NOTE: we assign this manually to a raw value node
|
|
96
|
-
// because we say it is a 'three' node but we're not using prepare()
|
|
97
|
-
{ __ngt__: { isRaw: true, parent: createSignal(null) } }));
|
|
98
|
-
}
|
|
99
|
-
const { injectedArgs, injectedParent, store } = this.store.getCreationState();
|
|
100
|
-
let parent = injectedParent;
|
|
101
|
-
if (typeof injectedParent === 'string') {
|
|
102
|
-
parent = store
|
|
103
|
-
.get('scene')
|
|
104
|
-
.getObjectByName(injectedParent);
|
|
105
|
-
}
|
|
106
|
-
// handle primitive
|
|
107
|
-
if (name === SPECIAL_DOM_TAG.NGT_PRIMITIVE) {
|
|
108
|
-
if (!injectedArgs[0])
|
|
109
|
-
throw new Error(`[NGT] ngt-primitive without args is invalid`);
|
|
110
|
-
const object = injectedArgs[0];
|
|
111
|
-
let localState = getLocalState(object);
|
|
112
|
-
if (!Object.keys(localState).length) {
|
|
113
|
-
// NOTE: if an object isn't already "prepared", we prepare it
|
|
114
|
-
localState = getLocalState(prepare(object, { store, args: injectedArgs, primitive: true }));
|
|
115
|
-
}
|
|
116
|
-
if (!localState.store)
|
|
117
|
-
localState.store = store;
|
|
118
|
-
const node = this.store.createNode('three', object);
|
|
119
|
-
if (parent) {
|
|
120
|
-
node.__ngt_renderer__[2 /* NgtRendererClassId.injectedParent */] = parent;
|
|
121
|
-
}
|
|
122
|
-
return node;
|
|
123
|
-
}
|
|
124
|
-
const threeTag = name.startsWith('ngt') ? name.slice(4) : name;
|
|
125
|
-
const threeName = kebabToPascal(threeTag);
|
|
126
|
-
const threeTarget = this.catalogue[threeName];
|
|
127
|
-
// we have the THREE constructor here, handle it
|
|
128
|
-
if (threeTarget) {
|
|
129
|
-
const instance = prepare(new threeTarget(...injectedArgs), { store, args: injectedArgs });
|
|
130
|
-
const node = this.store.createNode('three', instance);
|
|
131
|
-
const localState = getLocalState(instance);
|
|
132
|
-
// auto-attach for geometry and material
|
|
133
|
-
if (is.geometry(instance)) {
|
|
134
|
-
localState.attach = ['geometry'];
|
|
135
|
-
}
|
|
136
|
-
else if (is.material(instance)) {
|
|
137
|
-
localState.attach = ['material'];
|
|
138
|
-
}
|
|
139
|
-
if (parent) {
|
|
140
|
-
node.__ngt_renderer__[2 /* NgtRendererClassId.injectedParent */] = parent;
|
|
141
|
-
}
|
|
142
|
-
return node;
|
|
143
|
-
}
|
|
144
|
-
return this.store.createNode('dom', element);
|
|
145
|
-
}
|
|
146
|
-
createComment(value) {
|
|
147
|
-
return this.store.createNode('comment', this.delegate.createComment(value));
|
|
148
|
-
}
|
|
149
|
-
appendChild(parent, newChild) {
|
|
150
|
-
// TODO: just ignore text node for now
|
|
151
|
-
if (newChild instanceof Text)
|
|
152
|
-
return;
|
|
153
|
-
const cRS = newChild.__ngt_renderer__;
|
|
154
|
-
const pRS = parent.__ngt_renderer__;
|
|
155
|
-
if (cRS[0 /* NgtRendererClassId.type */] === 'comment') {
|
|
156
|
-
this.store.setParent(newChild, parent);
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
159
|
-
if (cRS[2 /* NgtRendererClassId.injectedParent */]) {
|
|
160
|
-
if (is.ref(cRS[2 /* NgtRendererClassId.injectedParent */])) {
|
|
161
|
-
const injector = cRS[14 /* NgtRendererClassId.injectorFactory */]().get(Injector, null);
|
|
162
|
-
if (!injector) {
|
|
163
|
-
console.warn(`[NGT] NgtRenderer is attempting to start an effect for injectedParent but no Injector is found.`);
|
|
164
|
-
return;
|
|
165
|
-
}
|
|
166
|
-
const watcher = effect(() => {
|
|
167
|
-
const injectedParent = cRS[2 /* NgtRendererClassId.injectedParent */].nativeElement;
|
|
168
|
-
if (injectedParent && injectedParent !== parent) {
|
|
169
|
-
this.appendChild(injectedParent, newChild);
|
|
170
|
-
// only run this effect once
|
|
171
|
-
// as soon as we re-run appendChild with the injectedParent, we stop the effect
|
|
172
|
-
watcher.destroy();
|
|
173
|
-
}
|
|
174
|
-
}, { injector, manualCleanup: true });
|
|
175
|
-
return;
|
|
176
|
-
}
|
|
177
|
-
else if (parent !== cRS[2 /* NgtRendererClassId.injectedParent */]) {
|
|
178
|
-
this.appendChild(cRS[2 /* NgtRendererClassId.injectedParent */], newChild);
|
|
179
|
-
return;
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
this.store.setParent(newChild, parent);
|
|
183
|
-
this.store.addChild(parent, newChild);
|
|
184
|
-
// if new child is a portal
|
|
185
|
-
if (cRS[0 /* NgtRendererClassId.type */] === 'portal') {
|
|
186
|
-
this.store.processPortalContainer(newChild);
|
|
187
|
-
if (cRS[13 /* NgtRendererClassId.portalContainer */]) {
|
|
188
|
-
this.appendChild(parent, cRS[13 /* NgtRendererClassId.portalContainer */]);
|
|
189
|
-
}
|
|
190
|
-
return;
|
|
191
|
-
}
|
|
192
|
-
// if parent is a portal
|
|
193
|
-
if (pRS[0 /* NgtRendererClassId.type */] === 'portal') {
|
|
194
|
-
this.store.processPortalContainer(parent);
|
|
195
|
-
if (pRS[13 /* NgtRendererClassId.portalContainer */]) {
|
|
196
|
-
this.appendChild(pRS[13 /* NgtRendererClassId.portalContainer */], newChild);
|
|
197
|
-
}
|
|
198
|
-
return;
|
|
199
|
-
}
|
|
200
|
-
// if both are three instances, straightforward case
|
|
201
|
-
if (pRS[0 /* NgtRendererClassId.type */] === 'three' && cRS[0 /* NgtRendererClassId.type */] === 'three') {
|
|
202
|
-
// if child already attached to a parent, skip
|
|
203
|
-
if (getLocalState(newChild).parent && untracked(getLocalState(newChild).parent))
|
|
204
|
-
return;
|
|
205
|
-
// attach THREE child
|
|
206
|
-
attachThreeChild(parent, newChild);
|
|
207
|
-
// here, we handle the special case of if the parent has a compoundParent, which means this child is part of a compound parent template
|
|
208
|
-
if (!cRS[5 /* NgtRendererClassId.compound */])
|
|
209
|
-
return;
|
|
210
|
-
const closestGrandparentWithCompound = this.store.getClosestParentWithCompound(parent);
|
|
211
|
-
if (!closestGrandparentWithCompound)
|
|
212
|
-
return;
|
|
213
|
-
this.appendChild(closestGrandparentWithCompound, newChild);
|
|
214
|
-
return;
|
|
215
|
-
}
|
|
216
|
-
// if only the parent is the THREE instance
|
|
217
|
-
if (pRS[0 /* NgtRendererClassId.type */] === 'three') {
|
|
218
|
-
for (const renderChild of cRS[3 /* NgtRendererClassId.children */]) {
|
|
219
|
-
this.appendChild(parent, renderChild);
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
// if parent is a compound
|
|
223
|
-
if (pRS[0 /* NgtRendererClassId.type */] === 'compound') {
|
|
224
|
-
// if compound doesn't have a THREE instance set yet
|
|
225
|
-
if (!pRS[7 /* NgtRendererClassId.compounded */] && cRS[0 /* NgtRendererClassId.type */] === 'three') {
|
|
226
|
-
// if child is indeed an ngtCompound
|
|
227
|
-
if (cRS[5 /* NgtRendererClassId.compound */])
|
|
228
|
-
this.store.setCompound(parent, newChild);
|
|
229
|
-
// if not, we track the parent (that is supposedly the compound component) on this three instance
|
|
230
|
-
else if (!cRS[6 /* NgtRendererClassId.compoundParent */])
|
|
231
|
-
cRS[6 /* NgtRendererClassId.compoundParent */] = parent;
|
|
232
|
-
}
|
|
233
|
-
// reset the compound if it's changed
|
|
234
|
-
if (pRS[7 /* NgtRendererClassId.compounded */] &&
|
|
235
|
-
cRS[0 /* NgtRendererClassId.type */] === 'three' &&
|
|
236
|
-
cRS[5 /* NgtRendererClassId.compound */] &&
|
|
237
|
-
pRS[7 /* NgtRendererClassId.compounded */] !== newChild) {
|
|
238
|
-
this.store.setCompound(parent, newChild);
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
const shouldFindGrandparentInstance =
|
|
242
|
-
// if child is three but haven't been attached to a parent yet
|
|
243
|
-
(cRS[0 /* NgtRendererClassId.type */] === 'three' && !untracked(getLocalState(newChild).parent)) ||
|
|
244
|
-
// or both parent and child are DOM elements
|
|
245
|
-
// or they are compound AND haven't had a THREE instance yet
|
|
246
|
-
((pRS[0 /* NgtRendererClassId.type */] === 'dom' ||
|
|
247
|
-
(pRS[0 /* NgtRendererClassId.type */] === 'compound' && !pRS[7 /* NgtRendererClassId.compounded */])) &&
|
|
248
|
-
(cRS[0 /* NgtRendererClassId.type */] === 'dom' ||
|
|
249
|
-
(cRS[0 /* NgtRendererClassId.type */] === 'compound' && !cRS[7 /* NgtRendererClassId.compounded */])));
|
|
250
|
-
if (shouldFindGrandparentInstance) {
|
|
251
|
-
// we'll try to get the grandparent instance here so that we can run appendChild with both instances
|
|
252
|
-
const closestGrandparentInstance = this.store.getClosestParentWithInstance(parent);
|
|
253
|
-
if (closestGrandparentInstance)
|
|
254
|
-
this.appendChild(closestGrandparentInstance, newChild);
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
insertBefore(parent, newChild
|
|
258
|
-
// TODO: we might need these?
|
|
259
|
-
// refChild: NgtRendererNode
|
|
260
|
-
// isMove?: boolean | undefined
|
|
261
|
-
) {
|
|
262
|
-
if (parent == null || !parent.__ngt_renderer__ || parent === newChild)
|
|
263
|
-
return;
|
|
264
|
-
this.appendChild(parent, newChild);
|
|
265
|
-
}
|
|
266
|
-
removeChild(parent, oldChild, isHostElement) {
|
|
267
|
-
const pRS = parent.__ngt_renderer__;
|
|
268
|
-
const cRS = oldChild.__ngt_renderer__;
|
|
269
|
-
if (pRS[0 /* NgtRendererClassId.type */] === 'three' && cRS[0 /* NgtRendererClassId.type */] === 'three') {
|
|
270
|
-
removeThreeChild(parent, oldChild, true);
|
|
271
|
-
this.store.destroy(oldChild, parent);
|
|
272
|
-
return;
|
|
273
|
-
}
|
|
274
|
-
if (pRS[0 /* NgtRendererClassId.type */] === 'compound' && pRS[1 /* NgtRendererClassId.parent */]) {
|
|
275
|
-
this.removeChild(pRS[1 /* NgtRendererClassId.parent */], oldChild, isHostElement);
|
|
276
|
-
return;
|
|
277
|
-
}
|
|
278
|
-
if (pRS[0 /* NgtRendererClassId.type */] === 'three') {
|
|
279
|
-
this.store.destroy(oldChild, parent);
|
|
280
|
-
return;
|
|
281
|
-
}
|
|
282
|
-
const closestGrandparentInstance = this.store.getClosestParentWithInstance(parent);
|
|
283
|
-
if (closestGrandparentInstance)
|
|
284
|
-
this.removeChild(closestGrandparentInstance, oldChild, isHostElement);
|
|
285
|
-
this.store.destroy(oldChild, closestGrandparentInstance);
|
|
286
|
-
}
|
|
287
|
-
parentNode(node) {
|
|
288
|
-
const rS = node.__ngt_renderer__;
|
|
289
|
-
if (rS?.[1 /* NgtRendererClassId.parent */])
|
|
290
|
-
return rS[1 /* NgtRendererClassId.parent */];
|
|
291
|
-
return this.delegate.parentNode(node);
|
|
292
|
-
}
|
|
293
|
-
setAttribute(el, name, value, namespace) {
|
|
294
|
-
const rS = el.__ngt_renderer__;
|
|
295
|
-
if (rS[0 /* NgtRendererClassId.type */] === 'compound') {
|
|
296
|
-
// we don't have the compound instance yet
|
|
297
|
-
rS[9 /* NgtRendererClassId.attributes */][name] = value;
|
|
298
|
-
if (!rS[7 /* NgtRendererClassId.compounded */]) {
|
|
299
|
-
this.store.queueOperation(el, ['op', () => this.setAttribute(el, name, value, namespace)]);
|
|
300
|
-
return;
|
|
301
|
-
}
|
|
302
|
-
this.setAttribute(rS[7 /* NgtRendererClassId.compounded */], name, value, namespace);
|
|
303
|
-
return;
|
|
304
|
-
}
|
|
305
|
-
if (rS[0 /* NgtRendererClassId.type */] === 'three')
|
|
306
|
-
this.store.applyAttribute(el, name, value);
|
|
307
|
-
}
|
|
308
|
-
setProperty(el, name, value) {
|
|
309
|
-
const rS = el.__ngt_renderer__;
|
|
310
|
-
if (rS[0 /* NgtRendererClassId.type */] === 'compound') {
|
|
311
|
-
// we don't have the compound instance yet
|
|
312
|
-
rS[10 /* NgtRendererClassId.properties */][name] = value;
|
|
313
|
-
if (!rS[7 /* NgtRendererClassId.compounded */]) {
|
|
314
|
-
this.store.queueOperation(el, ['op', () => this.setProperty(el, name, value)]);
|
|
315
|
-
return;
|
|
316
|
-
}
|
|
317
|
-
if (rS[7 /* NgtRendererClassId.compounded */].__ngt_renderer__[5 /* NgtRendererClassId.compound */]) {
|
|
318
|
-
Object.assign(rS[7 /* NgtRendererClassId.compounded */].__ngt_renderer__[5 /* NgtRendererClassId.compound */], {
|
|
319
|
-
props: Object.assign(rS[7 /* NgtRendererClassId.compounded */].__ngt_renderer__[5 /* NgtRendererClassId.compound */], { [name]: value }),
|
|
320
|
-
});
|
|
321
|
-
}
|
|
322
|
-
this.setProperty(rS[7 /* NgtRendererClassId.compounded */], name, value);
|
|
323
|
-
return;
|
|
324
|
-
}
|
|
325
|
-
if (rS[0 /* NgtRendererClassId.type */] === 'three')
|
|
326
|
-
this.store.applyProperty(el, name, value);
|
|
327
|
-
}
|
|
328
|
-
listen(target, eventName, callback) {
|
|
329
|
-
const rS = target.__ngt_renderer__;
|
|
330
|
-
// if the target doesn't have __ngt_renderer__, we delegate
|
|
331
|
-
// if target is DOM node, then we pass that to delegate Renderer
|
|
332
|
-
if (!rS || this.store.isDOM(target)) {
|
|
333
|
-
return this.delegate.listen(target, eventName, callback);
|
|
334
|
-
}
|
|
335
|
-
if (rS[0 /* NgtRendererClassId.type */] === 'three' ||
|
|
336
|
-
(rS[0 /* NgtRendererClassId.type */] === 'compound' && rS[7 /* NgtRendererClassId.compounded */])) {
|
|
337
|
-
const instance = rS[7 /* NgtRendererClassId.compounded */] || target;
|
|
338
|
-
const priority = getLocalState(target).priority;
|
|
339
|
-
const targetCdr = rS[14 /* NgtRendererClassId.injectorFactory */]?.().get(ChangeDetectorRef, null) ||
|
|
340
|
-
rS[1 /* NgtRendererClassId.parent */]?.__ngt_renderer__?.[14 /* NgtRendererClassId.injectorFactory */]?.().get(ChangeDetectorRef, null);
|
|
341
|
-
return processThreeEvent(instance, priority || 0, eventName, callback, this.zone, this.cdr, targetCdr);
|
|
342
|
-
}
|
|
343
|
-
if (rS[0 /* NgtRendererClassId.type */] === 'compound' && !rS[7 /* NgtRendererClassId.compounded */]) {
|
|
344
|
-
this.store.queueOperation(target, [
|
|
345
|
-
'op',
|
|
346
|
-
() => this.store.queueOperation(target, ['cleanUp', this.listen(target, eventName, callback)]),
|
|
347
|
-
]);
|
|
348
|
-
return () => { };
|
|
349
|
-
}
|
|
350
|
-
// @ts-expect-error - we know that target is not DOM node
|
|
351
|
-
if (target === this.store.rootScene) {
|
|
352
|
-
let [domTarget, event] = eventName.split(':');
|
|
353
|
-
if (event == null) {
|
|
354
|
-
event = domTarget;
|
|
355
|
-
domTarget = '';
|
|
356
|
-
}
|
|
357
|
-
const eventTarget = domTarget === 'window'
|
|
358
|
-
? target['ownerDocument']['defaultView']
|
|
359
|
-
: target['ownerDocument'];
|
|
360
|
-
return this.delegate.listen(eventTarget, event, callback);
|
|
361
|
-
}
|
|
362
|
-
return () => { };
|
|
363
|
-
}
|
|
364
|
-
get data() {
|
|
365
|
-
return this.delegate.data;
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUvc3JjL2xpYi9yZW5kZXJlci9yZW5kZXJlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUNILGlCQUFpQixFQUNqQixVQUFVLEVBQ1YsUUFBUSxFQUNSLE1BQU0sRUFDTixnQkFBZ0IsRUFDaEIsTUFBTSxFQUNOLFlBQVksRUFDWixNQUFNLEVBQ04sU0FBUyxHQUdaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVoRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFN0MsT0FBTyxFQUFFLGdCQUFnQixFQUErQyxNQUFNLFNBQVMsQ0FBQztBQUN4RixPQUFPLEVBQ0gsWUFBWSxFQUNaLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixnQkFBZ0IsR0FDbkIsTUFBTSxTQUFTLENBQUM7O0FBRWpCLE1BQ2Esa0JBQWtCO0lBQ2xCLHdCQUF3QixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3hFLFVBQVUsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDbkMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENB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SUFBSSxDQUFDO0lBQzlCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgSW5qZWN0YWJsZSxcbiAgICBJbmplY3RvcixcbiAgICBOZ1pvbmUsXG4gICAgUmVuZGVyZXJGYWN0b3J5MixcbiAgICBlZmZlY3QsXG4gICAgZ2V0RGVidWdOb2RlLFxuICAgIGluamVjdCxcbiAgICB1bnRyYWNrZWQsXG4gICAgdHlwZSBSZW5kZXJlcjIsXG4gICAgdHlwZSBSZW5kZXJlclR5cGUyLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HVF9DQVRBTE9HVUUgfSBmcm9tICcuLi9kaS9jYXRhbG9ndWUnO1xuaW1wb3J0IHR5cGUgeyBOZ3RJbmplY3RlZFJlZiB9IGZyb20gJy4uL2RpL3JlZic7XG5pbXBvcnQgeyBOZ3RTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy9zdG9yZSc7XG5pbXBvcnQgdHlwZSB7IE5ndEFueVJlY29yZCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGdldExvY2FsU3RhdGUsIHByZXBhcmUgfSBmcm9tICcuLi91dGlscy9pbnN0YW5jZSc7XG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uL3V0aWxzL2lzJztcbmltcG9ydCB7IGNyZWF0ZVNpZ25hbCB9IGZyb20gJy4uL3V0aWxzL3NpZ25hbCc7XG5pbXBvcnQgeyBOR1RfQ09NUE9VTkRfUFJFRklYRVMgfSBmcm9tICcuL2RpJztcbmltcG9ydCB7IE5ndFJlbmRlcmVyQ2xhc3NJZCB9IGZyb20gJy4vZW51bXMnO1xuaW1wb3J0IHsgTmd0UmVuZGVyZXJTdG9yZSwgdHlwZSBOZ3RSZW5kZXJlck5vZGUsIHR5cGUgTmd0UmVuZGVyZXJTdGF0ZSB9IGZyb20gJy4vc3RvcmUnO1xuaW1wb3J0IHtcbiAgICBST1VURURfU0NFTkUsXG4gICAgU1BFQ0lBTF9ET01fVEFHLFxuICAgIGF0dGFjaFRocmVlQ2hpbGQsXG4gICAga2ViYWJUb1Bhc2NhbCxcbiAgICBwcm9jZXNzVGhyZWVFdmVudCxcbiAgICByZW1vdmVUaHJlZUNoaWxkLFxufSBmcm9tICcuL3V0aWxzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5ndFJlbmRlcmVyRmFjdG9yeSBpbXBsZW1lbnRzIFJlbmRlcmVyRmFjdG9yeTIge1xuICAgIHJlYWRvbmx5ICNkZWxlZ2F0ZVJlbmRlcmVyRmFjdG9yeSA9IGluamVjdChSZW5kZXJlckZhY3RvcnkyLCB7IHNraXBTZWxmOiB0cnVlIH0pO1xuICAgIHJlYWRvbmx5ICNjYXRhbG9ndWUgPSBpbmplY3QoTkdUX0NBVEFMT0dVRSk7XG4gICAgcmVhZG9ubHkgI3pvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgICByZWFkb25seSAjY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICAgIHJlYWRvbmx5ICNyZW5kZXJlck1hcCA9IG5ldyBNYXA8c3RyaW5nLCBSZW5kZXJlcjI+KCk7XG4gICAgcmVhZG9ubHkgI3JvdXRlZFNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgLy8gYWxsIFJlbmRlcmVyIGluc3RhbmNlcyBzaGFyZSB0aGUgc2FtZSBTdG9yZVxuICAgIHJlYWRvbmx5ICNyZW5kZXJlclN0b3JlID0gbmV3IE5ndFJlbmRlcmVyU3RvcmUoe1xuICAgICAgICBwb3J0YWxzOiBbXSxcbiAgICAgICAgc3RvcmU6IGluamVjdChOZ3RTdG9yZSksXG4gICAgICAgIGNvbXBvdW5kUHJlZml4ZXM6IGluamVjdChOR1RfQ09NUE9VTkRfUFJFRklYRVMpLFxuICAgICAgICBkb2N1bWVudDogaW5qZWN0KERPQ1VNRU5UKSxcbiAgICB9KTtcblxuICAgIGNyZWF0ZVJlbmRlcmVyKGhvc3RFbGVtZW50OiBhbnksIHR5cGU6IFJlbmRlcmVyVHlwZTIgfCBudWxsKTogUmVuZGVyZXIyIHtcbiAgICAgICAgY29uc3QgZGVsZWdhdGVSZW5kZXJlciA9IHRoaXMuI2RlbGVnYXRlUmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKGhvc3RFbGVtZW50LCB0eXBlKTtcbiAgICAgICAgaWYgKCF0eXBlKSByZXR1cm4gZGVsZWdhdGVSZW5kZXJlcjtcbiAgICAgICAgLy8gaWYgKCh0eXBlIGFzIE5ndEFueVJlY29yZClbJ3R5cGUnXVsnaXNIdG1sJ10pIHtcbiAgICAgICAgLy8gcmV0dXJuIGRlbGVnYXRlUmVuZGVyZXI7XG4gICAgICAgIC8vIH1cbiAgICAgICAgaWYgKCh0eXBlIGFzIE5ndEFueVJlY29yZClbJ3R5cGUnXVtST1VURURfU0NFTkVdKSB7XG4gICAgICAgICAgICB0aGlzLiNyb3V0ZWRTZXQuYWRkKHR5cGUuaWQpO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZW5kZXJlciA9IHRoaXMuI3JlbmRlcmVyTWFwLmdldCh0eXBlLmlkKTtcbiAgICAgICAgaWYgKCFyZW5kZXJlcikge1xuICAgICAgICAgICAgcmVuZGVyZXIgPSBuZXcgTmd0UmVuZGVyZXIoXG4gICAgICAgICAgICAgICAgZGVsZWdhdGVSZW5kZXJlcixcbiAgICAgICAgICAgICAgICB0aGlzLiNyZW5kZXJlclN0b3JlLFxuICAgICAgICAgICAgICAgIHRoaXMuI2NhdGFsb2d1ZSxcbiAgICAgICAgICAgICAgICB0aGlzLiN6b25lLFxuICAgICAgICAgICAgICAgIHRoaXMuI2NkcixcbiAgICAgICAgICAgICAgICAvLyBzZXR0aW5nIHJvb3Qgc2NlbmUgaWYgdGhlcmUncyBubyByb3V0ZWQgc2NlbmUgT1IgdGhpcyBjb21wb25lbnQgaXMgdGhlIHJvdXRlZCBTY2VuZVxuICAgICAgICAgICAgICAgICFob3N0RWxlbWVudCAmJiAodGhpcy4jcm91dGVkU2V0LnNpemUgPT09IDAgfHwgdGhpcy4jcm91dGVkU2V0Lmhhcyh0eXBlLmlkKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLiNyZW5kZXJlck1hcC5zZXQodHlwZS5pZCwgcmVuZGVyZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZW5kZXJlcjtcbiAgICB9XG59XG5cbi8qKlxuICogQW55dGhpbmcgYWJicmV2aWF0ZWQgd2l0aCByUy9SUyBzdGFuZHMgZm9yIFJlbmRlcmVyU3RhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIE5ndFJlbmRlcmVyIGltcGxlbWVudHMgUmVuZGVyZXIyIHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkZWxlZ2F0ZTogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHN0b3JlOiBOZ3RSZW5kZXJlclN0b3JlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNhdGFsb2d1ZTogUmVjb3JkPHN0cmluZywgbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55PixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB6b25lOiBOZ1pvbmUsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSByb290ID0gdHJ1ZVxuICAgICkge31cblxuICAgIGNyZWF0ZUVsZW1lbnQobmFtZTogc3RyaW5nLCBuYW1lc3BhY2U/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmRlbGVnYXRlLmNyZWF0ZUVsZW1lbnQobmFtZSwgbmFtZXNwYWNlKTtcblxuICAgICAgICAvLyBvbiBmaXJzdCBwYXNzLCB3ZSByZXR1cm4gdGhlIFJvb3QgU2NlbmUgYXMgdGhlIHJvb3Qgbm9kZVxuICAgICAgICBpZiAodGhpcy5yb290KSB7XG4gICAgICAgICAgICB0aGlzLnJvb3QgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0b3JlLmNyZWF0ZU5vZGUoJ3RocmVlJywgdGhpcy5zdG9yZS5yb290U2NlbmUpO1xuICAgICAgICAgICAgbm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RvckZhY3RvcnldID0gKCkgPT4gZ2V0RGVidWdOb2RlKGVsZW1lbnQpIS5pbmplY3RvcjtcbiAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaGFuZGxlIGNvbXBvdW5kXG4gICAgICAgIGlmICh0aGlzLnN0b3JlLmlzQ29tcG91bmQobmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0b3JlLmNyZWF0ZU5vZGUoJ2NvbXBvdW5kJywgZWxlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBoYW5kbGUgcG9ydGFsXG4gICAgICAgIGlmIChuYW1lID09PSBTUEVDSUFMX0RPTV9UQUcuTkdUX1BPUlRBTCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuY3JlYXRlTm9kZSgncG9ydGFsJywgZWxlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBoYW5kbGUgcmF3IHZhbHVlXG4gICAgICAgIGlmIChuYW1lID09PSBTUEVDSUFMX0RPTV9UQUcuTkdUX1ZBTFVFKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5jcmVhdGVOb2RlKFxuICAgICAgICAgICAgICAgICd0aHJlZScsXG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgICAgICAgICAgeyBfX25ndF9yZW5kZXJlcl9fOiB7IHJhd1ZhbHVlOiB1bmRlZmluZWQgfSB9LFxuICAgICAgICAgICAgICAgICAgICAvLyBOT1RFOiB3ZSBhc3NpZ24gdGhpcyBtYW51YWxseSB0byBhIHJhdyB2YWx1ZSBub2RlXG4gICAgICAgICAgICAgICAgICAgIC8vIGJlY2F1c2Ugd2Ugc2F5IGl0IGlzIGEgJ3RocmVlJyBub2RlIGJ1dCB3ZSdyZSBub3QgdXNpbmcgcHJlcGFyZSgpXG4gICAgICAgICAgICAgICAgICAgIHsgX19uZ3RfXzogeyBpc1JhdzogdHJ1ZSwgcGFyZW50OiBjcmVhdGVTaWduYWwobnVsbCkgfSB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgaW5qZWN0ZWRBcmdzLCBpbmplY3RlZFBhcmVudCwgc3RvcmUgfSA9IHRoaXMuc3RvcmUuZ2V0Q3JlYXRpb25TdGF0ZSgpO1xuXG4gICAgICAgIGxldCBwYXJlbnQgPSBpbmplY3RlZFBhcmVudCBhcyBOZ3RSZW5kZXJlclN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RlZFBhcmVudF07XG4gICAgICAgIGlmICh0eXBlb2YgaW5qZWN0ZWRQYXJlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBwYXJlbnQgPSBzdG9yZVxuICAgICAgICAgICAgICAgIC5nZXQoJ3NjZW5lJylcbiAgICAgICAgICAgICAgICAuZ2V0T2JqZWN0QnlOYW1lKGluamVjdGVkUGFyZW50KSBhcyB1bmtub3duIGFzIE5ndFJlbmRlcmVyU3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdGVkUGFyZW50XTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGhhbmRsZSBwcmltaXRpdmVcbiAgICAgICAgaWYgKG5hbWUgPT09IFNQRUNJQUxfRE9NX1RBRy5OR1RfUFJJTUlUSVZFKSB7XG4gICAgICAgICAgICBpZiAoIWluamVjdGVkQXJnc1swXSkgdGhyb3cgbmV3IEVycm9yKGBbTkdUXSBuZ3QtcHJpbWl0aXZlIHdpdGhvdXQgYXJncyBpcyBpbnZhbGlkYCk7XG4gICAgICAgICAgICBjb25zdCBvYmplY3QgPSBpbmplY3RlZEFyZ3NbMF07XG4gICAgICAgICAgICBsZXQgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUob2JqZWN0KTtcbiAgICAgICAgICAgIGlmICghT2JqZWN0LmtleXMobG9jYWxTdGF0ZSkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgLy8gTk9URTogaWYgYW4gb2JqZWN0IGlzbid0IGFscmVhZHkgXCJwcmVwYXJlZFwiLCB3ZSBwcmVwYXJlIGl0XG4gICAgICAgICAgICAgICAgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUocHJlcGFyZShvYmplY3QsIHsgc3RvcmUsIGFyZ3M6IGluamVjdGVkQXJncywgcHJpbWl0aXZlOiB0cnVlIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghbG9jYWxTdGF0ZS5zdG9yZSkgbG9jYWxTdGF0ZS5zdG9yZSA9IHN0b3JlO1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RvcmUuY3JlYXRlTm9kZSgndGhyZWUnLCBvYmplY3QpO1xuICAgICAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgICAgIG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0ZWRQYXJlbnRdID0gcGFyZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0aHJlZVRhZyA9IG5hbWUuc3RhcnRzV2l0aCgnbmd0JykgPyBuYW1lLnNsaWNlKDQpIDogbmFtZTtcbiAgICAgICAgY29uc3QgdGhyZWVOYW1lID0ga2ViYWJUb1Bhc2NhbCh0aHJlZVRhZyk7XG4gICAgICAgIGNvbnN0IHRocmVlVGFyZ2V0ID0gdGhpcy5jYXRhbG9ndWVbdGhyZWVOYW1lXTtcbiAgICAgICAgLy8gd2UgaGF2ZSB0aGUgVEhSRUUgY29uc3RydWN0b3IgaGVyZSwgaGFuZGxlIGl0XG4gICAgICAgIGlmICh0aHJlZVRhcmdldCkge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBwcmVwYXJlKG5ldyB0aHJlZVRhcmdldCguLi5pbmplY3RlZEFyZ3MpLCB7IHN0b3JlLCBhcmdzOiBpbmplY3RlZEFyZ3MgfSk7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5zdG9yZS5jcmVhdGVOb2RlKCd0aHJlZScsIGluc3RhbmNlKTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKGluc3RhbmNlKTtcblxuICAgICAgICAgICAgLy8gYXV0by1hdHRhY2ggZm9yIGdlb21ldHJ5IGFuZCBtYXRlcmlhbFxuICAgICAgICAgICAgaWYgKGlzLmdlb21ldHJ5KGluc3RhbmNlKSkge1xuICAgICAgICAgICAgICAgIGxvY2FsU3RhdGUuYXR0YWNoID0gWydnZW9tZXRyeSddO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpcy5tYXRlcmlhbChpbnN0YW5jZSkpIHtcbiAgICAgICAgICAgICAgICBsb2NhbFN0YXRlLmF0dGFjaCA9IFsnbWF0ZXJpYWwnXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgICAgIG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0ZWRQYXJlbnRdID0gcGFyZW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JlLmNyZWF0ZU5vZGUoJ2RvbScsIGVsZW1lbnQpO1xuICAgIH1cblxuICAgIGNyZWF0ZUNvbW1lbnQodmFsdWU6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5jcmVhdGVOb2RlKCdjb21tZW50JywgdGhpcy5kZWxlZ2F0ZS5jcmVhdGVDb21tZW50KHZhbHVlKSk7XG4gICAgfVxuXG4gICAgYXBwZW5kQ2hpbGQocGFyZW50OiBOZ3RSZW5kZXJlck5vZGUsIG5ld0NoaWxkOiBOZ3RSZW5kZXJlck5vZGUpOiB2b2lkIHtcbiAgICAgICAgLy8gVE9ETzoganVzdCBpZ25vcmUgdGV4dCBub2RlIGZvciBub3dcbiAgICAgICAgaWYgKG5ld0NoaWxkIGluc3RhbmNlb2YgVGV4dCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBjUlMgPSBuZXdDaGlsZC5fX25ndF9yZW5kZXJlcl9fO1xuICAgICAgICBjb25zdCBwUlMgPSBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfXztcblxuICAgICAgICBpZiAoY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbW1lbnQnKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLnNldFBhcmVudChuZXdDaGlsZCwgcGFyZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdGVkUGFyZW50XSkge1xuICAgICAgICAgICAgaWYgKGlzLnJlZihjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdGVkUGFyZW50XSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmplY3RvciA9IGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0b3JGYWN0b3J5XSgpLmdldChJbmplY3RvciwgbnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFpbmplY3Rvcikge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgICAgICAgICBgW05HVF0gTmd0UmVuZGVyZXIgaXMgYXR0ZW1wdGluZyB0byBzdGFydCBhbiBlZmZlY3QgZm9yIGluamVjdGVkUGFyZW50IGJ1dCBubyBJbmplY3RvciBpcyBmb3VuZC5gXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgd2F0Y2hlciA9IGVmZmVjdChcbiAgICAgICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5qZWN0ZWRQYXJlbnQgPSAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RlZFBhcmVudF0gYXMgTmd0SW5qZWN0ZWRSZWY8Tmd0UmVuZGVyZXJOb2RlPlxuICAgICAgICAgICAgICAgICAgICAgICAgKS5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluamVjdGVkUGFyZW50ICYmIGluamVjdGVkUGFyZW50ICE9PSBwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKGluamVjdGVkUGFyZW50LCBuZXdDaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb25seSBydW4gdGhpcyBlZmZlY3Qgb25jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzIHNvb24gYXMgd2UgcmUtcnVuIGFwcGVuZENoaWxkIHdpdGggdGhlIGluamVjdGVkUGFyZW50LCB3ZSBzdG9wIHRoZSBlZmZlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXRjaGVyLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBpbmplY3RvciwgbWFudWFsQ2xlYW51cDogdHJ1ZSB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmVudCAhPT0gY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RlZFBhcmVudF0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0ZWRQYXJlbnRdLCBuZXdDaGlsZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdG9yZS5zZXRQYXJlbnQobmV3Q2hpbGQsIHBhcmVudCk7XG4gICAgICAgIHRoaXMuc3RvcmUuYWRkQ2hpbGQocGFyZW50LCBuZXdDaGlsZCk7XG5cbiAgICAgICAgLy8gaWYgbmV3IGNoaWxkIGlzIGEgcG9ydGFsXG4gICAgICAgIGlmIChjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAncG9ydGFsJykge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5wcm9jZXNzUG9ydGFsQ29udGFpbmVyKG5ld0NoaWxkKTtcbiAgICAgICAgICAgIGlmIChjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKHBhcmVudCwgY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC5wb3J0YWxDb250YWluZXJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHBhcmVudCBpcyBhIHBvcnRhbFxuICAgICAgICBpZiAocFJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3BvcnRhbCcpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUucHJvY2Vzc1BvcnRhbENvbnRhaW5lcihwYXJlbnQpO1xuICAgICAgICAgICAgaWYgKHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQocFJTW05ndFJlbmRlcmVyQ2xhc3NJZC5wb3J0YWxDb250YWluZXJdLCBuZXdDaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiBib3RoIGFyZSB0aHJlZSBpbnN0YW5jZXMsIHN0cmFpZ2h0Zm9yd2FyZCBjYXNlXG4gICAgICAgIGlmIChwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnICYmIGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcbiAgICAgICAgICAgIC8vIGlmIGNoaWxkIGFscmVhZHkgYXR0YWNoZWQgdG8gYSBwYXJlbnQsIHNraXBcbiAgICAgICAgICAgIGlmIChnZXRMb2NhbFN0YXRlKG5ld0NoaWxkKS5wYXJlbnQgJiYgdW50cmFja2VkKGdldExvY2FsU3RhdGUobmV3Q2hpbGQpLnBhcmVudCkpIHJldHVybjtcbiAgICAgICAgICAgIC8vIGF0dGFjaCBUSFJFRSBjaGlsZFxuICAgICAgICAgICAgYXR0YWNoVGhyZWVDaGlsZChwYXJlbnQsIG5ld0NoaWxkKTtcbiAgICAgICAgICAgIC8vIGhlcmUsIHdlIGhhbmRsZSB0aGUgc3BlY2lhbCBjYXNlIG9mIGlmIHRoZSBwYXJlbnQgaGFzIGEgY29tcG91bmRQYXJlbnQsIHdoaWNoIG1lYW5zIHRoaXMgY2hpbGQgaXMgcGFydCBvZiBhIGNvbXBvdW5kIHBhcmVudCB0ZW1wbGF0ZVxuICAgICAgICAgICAgaWYgKCFjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kXSkgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgY2xvc2VzdEdyYW5kcGFyZW50V2l0aENvbXBvdW5kID0gdGhpcy5zdG9yZS5nZXRDbG9zZXN0UGFyZW50V2l0aENvbXBvdW5kKHBhcmVudCk7XG4gICAgICAgICAgICBpZiAoIWNsb3Nlc3RHcmFuZHBhcmVudFdpdGhDb21wb3VuZCkgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChjbG9zZXN0R3JhbmRwYXJlbnRXaXRoQ29tcG91bmQsIG5ld0NoaWxkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIG9ubHkgdGhlIHBhcmVudCBpcyB0aGUgVEhSRUUgaW5zdGFuY2VcbiAgICAgICAgaWYgKHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmVuZGVyQ2hpbGQgb2YgY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC5jaGlsZHJlbl0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKHBhcmVudCwgcmVuZGVyQ2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgcGFyZW50IGlzIGEgY29tcG91bmRcbiAgICAgICAgaWYgKHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21wb3VuZCcpIHtcbiAgICAgICAgICAgIC8vIGlmIGNvbXBvdW5kIGRvZXNuJ3QgaGF2ZSBhIFRIUkVFIGluc3RhbmNlIHNldCB5ZXRcbiAgICAgICAgICAgIGlmICghcFJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSAmJiBjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgY2hpbGQgaXMgaW5kZWVkIGFuIG5ndENvbXBvdW5kXG4gICAgICAgICAgICAgICAgaWYgKGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRdKSB0aGlzLnN0b3JlLnNldENvbXBvdW5kKHBhcmVudCwgbmV3Q2hpbGQpO1xuICAgICAgICAgICAgICAgIC8vIGlmIG5vdCwgd2UgdHJhY2sgdGhlIHBhcmVudCAodGhhdCBpcyBzdXBwb3NlZGx5IHRoZSBjb21wb3VuZCBjb21wb25lbnQpIG9uIHRoaXMgdGhyZWUgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICBlbHNlIGlmICghY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZFBhcmVudF0pIGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRQYXJlbnRdID0gcGFyZW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyByZXNldCB0aGUgY29tcG91bmQgaWYgaXQncyBjaGFuZ2VkXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgcFJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSAmJlxuICAgICAgICAgICAgICAgIGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScgJiZcbiAgICAgICAgICAgICAgICBjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kXSAmJlxuICAgICAgICAgICAgICAgIHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0gIT09IG5ld0NoaWxkXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLnNldENvbXBvdW5kKHBhcmVudCwgbmV3Q2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2hvdWxkRmluZEdyYW5kcGFyZW50SW5zdGFuY2UgPVxuICAgICAgICAgICAgLy8gaWYgY2hpbGQgaXMgdGhyZWUgYnV0IGhhdmVuJ3QgYmVlbiBhdHRhY2hlZCB0byBhIHBhcmVudCB5ZXRcbiAgICAgICAgICAgIChjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnICYmICF1bnRyYWNrZWQoZ2V0TG9jYWxTdGF0ZShuZXdDaGlsZCkucGFyZW50KSkgfHxcbiAgICAgICAgICAgIC8vIG9yIGJvdGggcGFyZW50IGFuZCBjaGlsZCBhcmUgRE9NIGVsZW1lbnRzXG4gICAgICAgICAgICAvLyBvciB0aGV5IGFyZSBjb21wb3VuZCBBTkQgaGF2ZW4ndCBoYWQgYSBUSFJFRSBpbnN0YW5jZSB5ZXRcbiAgICAgICAgICAgICgocFJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2RvbScgfHxcbiAgICAgICAgICAgICAgICAocFJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbXBvdW5kJyAmJiAhcFJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSkpICYmXG4gICAgICAgICAgICAgICAgKGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdkb20nIHx8XG4gICAgICAgICAgICAgICAgICAgIChjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnY29tcG91bmQnICYmICFjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdKSkpO1xuXG4gICAgICAgIGlmIChzaG91bGRGaW5kR3JhbmRwYXJlbnRJbnN0YW5jZSkge1xuICAgICAgICAgICAgLy8gd2UnbGwgdHJ5IHRvIGdldCB0aGUgZ3JhbmRwYXJlbnQgaW5zdGFuY2UgaGVyZSBzbyB0aGF0IHdlIGNhbiBydW4gYXBwZW5kQ2hpbGQgd2l0aCBib3RoIGluc3RhbmNlc1xuICAgICAgICAgICAgY29uc3QgY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UgPSB0aGlzLnN0b3JlLmdldENsb3Nlc3RQYXJlbnRXaXRoSW5zdGFuY2UocGFyZW50KTtcbiAgICAgICAgICAgIGlmIChjbG9zZXN0R3JhbmRwYXJlbnRJbnN0YW5jZSkgdGhpcy5hcHBlbmRDaGlsZChjbG9zZXN0R3JhbmRwYXJlbnRJbnN0YW5jZSwgbmV3Q2hpbGQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5zZXJ0QmVmb3JlKFxuICAgICAgICBwYXJlbnQ6IE5ndFJlbmRlcmVyTm9kZSxcbiAgICAgICAgbmV3Q2hpbGQ6IE5ndFJlbmRlcmVyTm9kZVxuICAgICAgICAvLyBUT0RPOiB3ZSBtaWdodCBuZWVkIHRoZXNlP1xuICAgICAgICAvLyByZWZDaGlsZDogTmd0UmVuZGVyZXJOb2RlXG4gICAgICAgIC8vIGlzTW92ZT86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgICApOiB2b2lkIHtcbiAgICAgICAgaWYgKHBhcmVudCA9PSBudWxsIHx8ICFwYXJlbnQuX19uZ3RfcmVuZGVyZXJfXyB8fCBwYXJlbnQgPT09IG5ld0NoaWxkKSByZXR1cm47XG4gICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQocGFyZW50LCBuZXdDaGlsZCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlQ2hpbGQocGFyZW50OiBOZ3RSZW5kZXJlck5vZGUsIG9sZENoaWxkOiBOZ3RSZW5kZXJlck5vZGUsIGlzSG9zdEVsZW1lbnQ/OiBib29sZWFuIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBSUyA9IHBhcmVudC5fX25ndF9yZW5kZXJlcl9fO1xuICAgICAgICBjb25zdCBjUlMgPSBvbGRDaGlsZC5fX25ndF9yZW5kZXJlcl9fO1xuICAgICAgICBpZiAocFJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJyAmJiBjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB7XG4gICAgICAgICAgICByZW1vdmVUaHJlZUNoaWxkKHBhcmVudCwgb2xkQ2hpbGQsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5kZXN0cm95KG9sZENoaWxkLCBwYXJlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21wb3VuZCcgJiYgcFJTW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XSwgb2xkQ2hpbGQsIGlzSG9zdEVsZW1lbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGVzdHJveShvbGRDaGlsZCwgcGFyZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlID0gdGhpcy5zdG9yZS5nZXRDbG9zZXN0UGFyZW50V2l0aEluc3RhbmNlKHBhcmVudCk7XG4gICAgICAgIGlmIChjbG9zZXN0R3JhbmRwYXJlbnRJbnN0YW5jZSkgdGhpcy5yZW1vdmVDaGlsZChjbG9zZXN0R3JhbmRwYXJlbnRJbnN0YW5jZSwgb2xkQ2hpbGQsIGlzSG9zdEVsZW1lbnQpO1xuICAgICAgICB0aGlzLnN0b3JlLmRlc3Ryb3kob2xkQ2hpbGQsIGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlIGFzIE5ndFJlbmRlcmVyTm9kZSk7XG4gICAgfVxuXG4gICAgcGFyZW50Tm9kZShub2RlOiBOZ3RSZW5kZXJlck5vZGUpIHtcbiAgICAgICAgY29uc3QgclMgPSBub2RlLl9fbmd0X3JlbmRlcmVyX187XG4gICAgICAgIGlmIChyUz8uW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdKSByZXR1cm4gclNbTmd0UmVuZGVyZXJDbGFzc0lkLnBhcmVudF07XG4gICAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLnBhcmVudE5vZGUobm9kZSk7XG4gICAgfVxuXG4gICAgc2V0QXR0cmlidXRlKGVsOiBOZ3RSZW5kZXJlck5vZGUsIG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZywgbmFtZXNwYWNlPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgICAgICBjb25zdCByUyA9IGVsLl9fbmd0X3JlbmRlcmVyX187XG4gICAgICAgIGlmIChyU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21wb3VuZCcpIHtcbiAgICAgICAgICAgIC8vIHdlIGRvbid0IGhhdmUgdGhlIGNvbXBvdW5kIGluc3RhbmNlIHlldFxuICAgICAgICAgICAgclNbTmd0UmVuZGVyZXJDbGFzc0lkLmF0dHJpYnV0ZXNdW25hbWVdID0gdmFsdWU7XG4gICAgICAgICAgICBpZiAoIXJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUucXVldWVPcGVyYXRpb24oZWwsIFsnb3AnLCAoKSA9PiB0aGlzLnNldEF0dHJpYnV0ZShlbCwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZSldKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoclNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB0aGlzLnN0b3JlLmFwcGx5QXR0cmlidXRlKGVsLCBuYW1lLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgc2V0UHJvcGVydHkoZWw6IE5ndFJlbmRlcmVyTm9kZSwgbmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJTID0gZWwuX19uZ3RfcmVuZGVyZXJfXztcbiAgICAgICAgaWYgKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbXBvdW5kJykge1xuICAgICAgICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSB0aGUgY29tcG91bmQgaW5zdGFuY2UgeWV0XG4gICAgICAgICAgICByU1tOZ3RSZW5kZXJlckNsYXNzSWQucHJvcGVydGllc11bbmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIGlmICghclNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5xdWV1ZU9wZXJhdGlvbihlbCwgWydvcCcsICgpID0+IHRoaXMuc2V0UHJvcGVydHkoZWwsIG5hbWUsIHZhbHVlKV0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZF0pIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZF0sIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICAgICAgICAgICAgICByU1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0uX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBbbmFtZV06IHZhbHVlIH1cbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHkoclNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdLCBuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoclNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB0aGlzLnN0b3JlLmFwcGx5UHJvcGVydHkoZWwsIG5hbWUsIHZhbHVlKTtcbiAgICB9XG5cbiAgICBsaXN0ZW4odGFyZ2V0OiBOZ3RSZW5kZXJlck5vZGUsIGV2ZW50TmFtZTogc3RyaW5nLCBjYWxsYmFjazogKGV2ZW50OiBhbnkpID0+IGJvb2xlYW4gfCB2b2lkKTogKCkgPT4gdm9pZCB7XG4gICAgICAgIGNvbnN0IHJTID0gdGFyZ2V0Ll9fbmd0X3JlbmRlcmVyX187XG5cbiAgICAgICAgLy8gaWYgdGhlIHRhcmdldCBkb2Vzbid0IGhhdmUgX19uZ3RfcmVuZGVyZXJfXywgd2UgZGVsZWdhdGVcbiAgICAgICAgLy8gaWYgdGFyZ2V0IGlzIERPTSBub2RlLCB0aGVuIHdlIHBhc3MgdGhhdCB0byBkZWxlZ2F0ZSBSZW5kZXJlclxuICAgICAgICBpZiAoIXJTIHx8IHRoaXMuc3RvcmUuaXNET00odGFyZ2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHRhcmdldCwgZXZlbnROYW1lLCBjYWxsYmFjayk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICByU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScgfHxcbiAgICAgICAgICAgIChyU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21wb3VuZCcgJiYgclNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gclNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdIHx8IHRhcmdldDtcbiAgICAgICAgICAgIGNvbnN0IHByaW9yaXR5ID0gZ2V0TG9jYWxTdGF0ZSh0YXJnZXQpLnByaW9yaXR5O1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0Q2RyID1cbiAgICAgICAgICAgICAgICByU1tOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0b3JGYWN0b3J5XT8uKCkuZ2V0KENoYW5nZURldGVjdG9yUmVmLCBudWxsKSB8fFxuICAgICAgICAgICAgICAgIHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdPy5fX25ndF9yZW5kZXJlcl9fPy5bTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdG9yRmFjdG9yeV0/LigpLmdldChcbiAgICAgICAgICAgICAgICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3NUaHJlZUV2ZW50KGluc3RhbmNlLCBwcmlvcml0eSB8fCAwLCBldmVudE5hbWUsIGNhbGxiYWNrLCB0aGlzLnpvbmUsIHRoaXMuY2RyLCB0YXJnZXRDZHIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbXBvdW5kJyAmJiAhclNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLnF1ZXVlT3BlcmF0aW9uKHRhcmdldCwgW1xuICAgICAgICAgICAgICAgICdvcCcsXG4gICAgICAgICAgICAgICAgKCkgPT4gdGhpcy5zdG9yZS5xdWV1ZU9wZXJhdGlvbih0YXJnZXQsIFsnY2xlYW5VcCcsIHRoaXMubGlzdGVuKHRhcmdldCwgZXZlbnROYW1lLCBjYWxsYmFjayldKSxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIHdlIGtub3cgdGhhdCB0YXJnZXQgaXMgbm90IERPTSBub2RlXG4gICAgICAgIGlmICh0YXJnZXQgPT09IHRoaXMuc3RvcmUucm9vdFNjZW5lKSB7XG4gICAgICAgICAgICBsZXQgW2RvbVRhcmdldCwgZXZlbnRdID0gZXZlbnROYW1lLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICBpZiAoZXZlbnQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGV2ZW50ID0gZG9tVGFyZ2V0O1xuICAgICAgICAgICAgICAgIGRvbVRhcmdldCA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZXZlbnRUYXJnZXQgPVxuICAgICAgICAgICAgICAgIGRvbVRhcmdldCA9PT0gJ3dpbmRvdydcbiAgICAgICAgICAgICAgICAgICAgPyAodGFyZ2V0IGFzIE5ndEFueVJlY29yZClbJ293bmVyRG9jdW1lbnQnXVsnZGVmYXVsdFZpZXcnXVxuICAgICAgICAgICAgICAgICAgICA6ICh0YXJnZXQgYXMgTmd0QW55UmVjb3JkKVsnb3duZXJEb2N1bWVudCddO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKGV2ZW50VGFyZ2V0LCBldmVudCwgY2FsbGJhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICgpID0+IHt9O1xuICAgIH1cblxuICAgIGNyZWF0ZVRleHQgPSB0aGlzLmRlbGVnYXRlLmNyZWF0ZVRleHQuYmluZCh0aGlzLmRlbGVnYXRlKTtcbiAgICBkZXN0cm95ID0gdGhpcy5kZWxlZ2F0ZS5kZXN0cm95LmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG4gICAgZGVzdHJveU5vZGU6ICgobm9kZTogYW55KSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICAgIHNlbGVjdFJvb3RFbGVtZW50ID0gdGhpcy5kZWxlZ2F0ZS5zZWxlY3RSb290RWxlbWVudC5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuICAgIG5leHRTaWJsaW5nID0gdGhpcy5kZWxlZ2F0ZS5uZXh0U2libGluZy5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuICAgIHJlbW92ZUF0dHJpYnV0ZSA9IHRoaXMuZGVsZWdhdGUucmVtb3ZlQXR0cmlidXRlLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG4gICAgYWRkQ2xhc3MgPSB0aGlzLmRlbGVnYXRlLmFkZENsYXNzLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG4gICAgcmVtb3ZlQ2xhc3MgPSB0aGlzLmRlbGVnYXRlLnJlbW92ZUNsYXNzLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG4gICAgc2V0U3R5bGUgPSB0aGlzLmRlbGVnYXRlLnNldFN0eWxlLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG4gICAgcmVtb3ZlU3R5bGUgPSB0aGlzLmRlbGVnYXRlLnJlbW92ZVN0eWxlLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG4gICAgc2V0VmFsdWUgPSB0aGlzLmRlbGVnYXRlLnNldFZhbHVlLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG4gICAgZ2V0IGRhdGEoKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLmRhdGE7XG4gICAgfVxufVxuIl19
|