angular-three 2.0.0-beta.9 → 2.1.0
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 +221 -4
- package/esm2022/index.mjs +13 -14
- package/esm2022/lib/canvas.mjs +130 -197
- package/esm2022/lib/directives/args.mjs +46 -20
- package/esm2022/lib/directives/selection.mjs +65 -0
- package/esm2022/lib/dom/events.mjs +2 -2
- package/esm2022/lib/events.mjs +33 -31
- package/esm2022/lib/html.mjs +40 -0
- package/esm2022/lib/instance.mjs +43 -36
- package/esm2022/lib/loader.mjs +72 -36
- package/esm2022/lib/loop.mjs +29 -26
- package/esm2022/lib/pipes/hexify.mjs +67 -0
- package/esm2022/lib/portal.mjs +173 -193
- package/esm2022/lib/renderer/catalogue.mjs +3 -3
- package/esm2022/lib/renderer/constants.mjs +6 -6
- package/esm2022/lib/renderer/index.mjs +356 -217
- package/esm2022/lib/renderer/state.mjs +54 -0
- package/esm2022/lib/renderer/utils.mjs +120 -64
- package/esm2022/lib/roots.mjs +86 -62
- package/esm2022/lib/routed-scene.mjs +11 -8
- package/esm2022/lib/store.mjs +164 -195
- package/esm2022/lib/three-types.mjs +1 -1
- package/esm2022/lib/types.mjs +1 -1
- package/esm2022/lib/utils/apply-props.mjs +31 -28
- package/esm2022/lib/utils/attach.mjs +26 -12
- package/esm2022/lib/utils/before-render.mjs +12 -0
- package/esm2022/lib/utils/is.mjs +6 -5
- package/esm2022/lib/utils/make.mjs +19 -17
- package/esm2022/lib/utils/non-nullish.mjs +7 -0
- package/esm2022/lib/utils/object-events.mjs +91 -0
- package/esm2022/lib/utils/parameters.mjs +70 -0
- package/esm2022/lib/utils/resolve-ref.mjs +8 -0
- package/esm2022/lib/utils/signal-store.mjs +59 -60
- package/esm2022/lib/utils/update.mjs +8 -4
- package/esm2022/nativescript/angular-three-nativescript.mjs +5 -0
- package/esm2022/nativescript/index.mjs +2 -0
- package/esm2022/nativescript/lib/canvas.mjs +127 -0
- package/esm2022/testing/angular-three-testing.mjs +5 -0
- package/esm2022/testing/index.mjs +3 -0
- package/esm2022/testing/lib/test-bed.mjs +130 -0
- package/esm2022/testing/lib/test-canvas.mjs +45 -0
- package/esm2022/testing/lib/utils/mock-canvas.mjs +37 -0
- package/esm2022/testing/lib/utils/web-gl-rendering-context.mjs +752 -0
- package/fesm2022/angular-three-nativescript.mjs +134 -0
- package/fesm2022/angular-three-nativescript.mjs.map +1 -0
- package/fesm2022/angular-three-testing.mjs +966 -0
- package/fesm2022/angular-three-testing.mjs.map +1 -0
- package/fesm2022/angular-three.mjs +2271 -2306
- package/fesm2022/angular-three.mjs.map +1 -1
- package/index.d.ts +14 -14
- package/lib/canvas.d.ts +357 -96
- package/lib/directives/args.d.ts +14 -7
- package/lib/directives/selection.d.ts +17 -0
- package/lib/dom/events.d.ts +2 -3
- package/lib/events.d.ts +4 -80
- package/lib/html.d.ts +17 -0
- package/lib/instance.d.ts +3 -35
- package/lib/loader.d.ts +19 -7
- package/lib/loop.d.ts +11 -59
- package/lib/pipes/hexify.d.ts +20 -0
- package/lib/portal.d.ts +54 -48
- package/lib/renderer/catalogue.d.ts +7 -3
- package/lib/renderer/constants.d.ts +5 -5
- package/lib/renderer/index.d.ts +63 -4
- package/lib/renderer/state.d.ts +25 -0
- package/lib/renderer/utils.d.ts +10 -27
- package/lib/roots.d.ts +9 -7
- package/lib/store.d.ts +13 -141
- package/lib/three-types.d.ts +528 -147
- package/lib/types.d.ts +291 -0
- package/lib/utils/apply-props.d.ts +2 -3
- package/lib/utils/attach.d.ts +4 -6
- package/lib/{before-render.d.ts → utils/before-render.d.ts} +1 -1
- package/lib/utils/is.d.ts +13 -14
- package/lib/utils/make.d.ts +7 -13
- package/lib/utils/non-nullish.d.ts +4 -0
- package/lib/utils/object-events.d.ts +32 -0
- package/lib/utils/parameters.d.ts +20 -0
- package/lib/utils/resolve-ref.d.ts +2 -0
- package/lib/utils/signal-store.d.ts +13 -4
- package/lib/utils/update.d.ts +1 -1
- package/metadata.json +1 -1
- package/nativescript/README.md +5 -0
- package/nativescript/index.d.ts +1 -0
- package/nativescript/lib/canvas.d.ts +359 -0
- package/nativescript/package.json +3 -0
- package/package.json +65 -14
- package/plugin/generators.json +8 -30
- package/plugin/package.json +3 -3
- package/plugin/src/generators/add-soba/compat.js.map +1 -0
- package/plugin/src/generators/add-soba/generator.d.ts +3 -0
- package/plugin/src/generators/add-soba/generator.js +77 -0
- package/plugin/src/generators/add-soba/generator.js.map +1 -0
- package/plugin/src/generators/add-soba/schema.json +4 -0
- package/plugin/src/generators/init/compat.d.ts +1 -1
- package/plugin/src/generators/init/files/experience/experience.component.ts__tmpl__ +29 -0
- package/plugin/src/generators/init/generator.d.ts +5 -1
- package/plugin/src/generators/init/generator.js +131 -25
- package/plugin/src/generators/init/generator.js.map +1 -1
- package/plugin/src/generators/init/schema.json +9 -2
- package/plugin/src/generators/utils.d.ts +2 -0
- package/plugin/src/generators/utils.js +35 -0
- package/plugin/src/generators/utils.js.map +1 -0
- package/plugin/src/generators/version.d.ts +17 -0
- package/plugin/src/generators/version.js +21 -0
- package/plugin/src/generators/version.js.map +1 -0
- package/plugin/src/index.d.ts +0 -3
- package/plugin/src/index.js +0 -9
- package/plugin/src/index.js.map +1 -1
- package/testing/README.md +3 -0
- package/testing/index.d.ts +2 -0
- package/testing/lib/test-bed.d.ts +38 -0
- package/testing/lib/test-canvas.d.ts +11 -0
- package/testing/lib/utils/mock-canvas.d.ts +5 -0
- package/testing/lib/utils/web-gl-rendering-context.d.ts +16 -0
- package/testing/package.json +3 -0
- package/web-types.json +1 -1
- package/esm2022/lib/before-render.mjs +0 -13
- package/esm2022/lib/directives/common.mjs +0 -41
- package/esm2022/lib/directives/key.mjs +0 -29
- package/esm2022/lib/directives/parent.mjs +0 -35
- package/esm2022/lib/directives/repeat.mjs +0 -17
- package/esm2022/lib/ref.mjs +0 -48
- package/esm2022/lib/renderer/store.mjs +0 -405
- package/esm2022/lib/utils/assert-injection-context.mjs +0 -14
- package/esm2022/lib/utils/create-injection-token.mjs +0 -47
- package/esm2022/lib/utils/safe-detect-changes.mjs +0 -17
- package/lib/directives/common.d.ts +0 -15
- package/lib/directives/key.d.ts +0 -10
- package/lib/directives/parent.d.ts +0 -11
- package/lib/directives/repeat.d.ts +0 -7
- package/lib/ref.d.ts +0 -8
- package/lib/renderer/store.d.ts +0 -67
- package/lib/utils/assert-injection-context.d.ts +0 -2
- package/lib/utils/create-injection-token.d.ts +0 -27
- package/lib/utils/safe-detect-changes.d.ts +0 -2
- package/plugin/src/generators/init-cannon/compat.js.map +0 -1
- package/plugin/src/generators/init-cannon/generator.d.ts +0 -2
- package/plugin/src/generators/init-cannon/generator.js +0 -22
- package/plugin/src/generators/init-cannon/generator.js.map +0 -1
- package/plugin/src/generators/init-cannon/schema.json +0 -6
- package/plugin/src/generators/init-postprocessing/compat.d.ts +0 -2
- package/plugin/src/generators/init-postprocessing/compat.js +0 -6
- package/plugin/src/generators/init-postprocessing/compat.js.map +0 -1
- package/plugin/src/generators/init-postprocessing/generator.d.ts +0 -2
- package/plugin/src/generators/init-postprocessing/generator.js +0 -20
- package/plugin/src/generators/init-postprocessing/generator.js.map +0 -1
- package/plugin/src/generators/init-postprocessing/schema.json +0 -6
- package/plugin/src/generators/init-soba/compat.d.ts +0 -2
- package/plugin/src/generators/init-soba/compat.js +0 -6
- package/plugin/src/generators/init-soba/compat.js.map +0 -1
- package/plugin/src/generators/init-soba/generator.d.ts +0 -2
- package/plugin/src/generators/init-soba/generator.js +0 -24
- package/plugin/src/generators/init-soba/generator.js.map +0 -1
- package/plugin/src/generators/init-soba/schema.json +0 -6
- package/plugin/src/generators/versions.d.ts +0 -12
- package/plugin/src/generators/versions.js +0 -16
- package/plugin/src/generators/versions.js.map +0 -1
- /package/plugin/src/generators/{init-cannon → add-soba}/compat.d.ts +0 -0
- /package/plugin/src/generators/{init-cannon → add-soba}/compat.js +0 -0
|
@@ -1,405 +0,0 @@
|
|
|
1
|
-
import { InjectionToken, getDebugNode, untracked } from '@angular/core';
|
|
2
|
-
import { NgtArgs } from '../directives/args';
|
|
3
|
-
import { NgtParent } from '../directives/parent';
|
|
4
|
-
import { getLocalState } from '../instance';
|
|
5
|
-
import { NGT_STORE } from '../store';
|
|
6
|
-
import { applyProps } from '../utils/apply-props';
|
|
7
|
-
import { is } from '../utils/is';
|
|
8
|
-
import { SPECIAL_INTERNAL_ADD_COMMENT, SPECIAL_PROPERTIES } from './constants';
|
|
9
|
-
import { attachThreeChild, removeThreeChild } from './utils';
|
|
10
|
-
export const NGT_COMPOUND_PREFIXES = new InjectionToken('NgtCompoundPrefixes');
|
|
11
|
-
export class NgtRendererStore {
|
|
12
|
-
constructor(root) {
|
|
13
|
-
this.root = root;
|
|
14
|
-
this.comments = [];
|
|
15
|
-
}
|
|
16
|
-
createNode(type, node) {
|
|
17
|
-
const state = [
|
|
18
|
-
type,
|
|
19
|
-
null,
|
|
20
|
-
null,
|
|
21
|
-
[],
|
|
22
|
-
false,
|
|
23
|
-
undefined,
|
|
24
|
-
undefined,
|
|
25
|
-
undefined,
|
|
26
|
-
undefined,
|
|
27
|
-
undefined,
|
|
28
|
-
undefined,
|
|
29
|
-
undefined,
|
|
30
|
-
undefined,
|
|
31
|
-
undefined,
|
|
32
|
-
undefined,
|
|
33
|
-
];
|
|
34
|
-
const rendererNode = Object.assign(node, { __ngt_renderer__: state });
|
|
35
|
-
// NOTE: assign ownerDocument to node so we can use HostListener in Component
|
|
36
|
-
if (!rendererNode['ownerDocument'])
|
|
37
|
-
rendererNode['ownerDocument'] = this.root.document;
|
|
38
|
-
// NOTE: assign injectorFactory on non-three type since
|
|
39
|
-
// rendererNode is an instance of DOM Node
|
|
40
|
-
if (state[0 /* NgtRendererClassId.type */] !== 'three') {
|
|
41
|
-
state[14 /* NgtRendererClassId.injectorFactory */] = () => getDebugNode(rendererNode).injector;
|
|
42
|
-
}
|
|
43
|
-
if (state[0 /* NgtRendererClassId.type */] === 'comment') {
|
|
44
|
-
// NOTE: we attach an arrow function to the Comment node
|
|
45
|
-
// In our directives, we can call this function to then start tracking the RendererNode
|
|
46
|
-
// this is done to limit the amount of Nodes we need to process for getCreationState
|
|
47
|
-
rendererNode[SPECIAL_INTERNAL_ADD_COMMENT] = (node) => {
|
|
48
|
-
if (node && node.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'portal') {
|
|
49
|
-
this.portals.push(node);
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
this.comments.push(rendererNode);
|
|
53
|
-
}
|
|
54
|
-
};
|
|
55
|
-
return rendererNode;
|
|
56
|
-
}
|
|
57
|
-
if (state[0 /* NgtRendererClassId.type */] === 'compound') {
|
|
58
|
-
state[8 /* NgtRendererClassId.queueOps */] = new Set();
|
|
59
|
-
state[9 /* NgtRendererClassId.attributes */] = {};
|
|
60
|
-
state[10 /* NgtRendererClassId.properties */] = {};
|
|
61
|
-
return rendererNode;
|
|
62
|
-
}
|
|
63
|
-
return rendererNode;
|
|
64
|
-
}
|
|
65
|
-
setParent(node, parent) {
|
|
66
|
-
if (!node.__ngt_renderer__[1 /* NgtRendererClassId.parent */]) {
|
|
67
|
-
node.__ngt_renderer__[1 /* NgtRendererClassId.parent */] = parent;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
addChild(node, child) {
|
|
71
|
-
if (!node.__ngt_renderer__[3 /* NgtRendererClassId.children */].includes(child)) {
|
|
72
|
-
node.__ngt_renderer__[3 /* NgtRendererClassId.children */].push(child);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
removeChild(node, child) {
|
|
76
|
-
const index = node.__ngt_renderer__?.[3 /* NgtRendererClassId.children */].findIndex((c) => child === c);
|
|
77
|
-
if (index >= 0) {
|
|
78
|
-
node.__ngt_renderer__[3 /* NgtRendererClassId.children */].splice(index, 1);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
setCompound(compound, instance) {
|
|
82
|
-
const instanceRS = instance.__ngt_renderer__;
|
|
83
|
-
if (instanceRS && instanceRS[1 /* NgtRendererClassId.parent */]) {
|
|
84
|
-
const parentRS = instanceRS[1 /* NgtRendererClassId.parent */].__ngt_renderer__;
|
|
85
|
-
// NOTE: if instance is already compounded by its parent. skip
|
|
86
|
-
if (parentRS[0 /* NgtRendererClassId.type */] === 'compound' &&
|
|
87
|
-
parentRS[7 /* NgtRendererClassId.compounded */] === instance) {
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
const rS = compound.__ngt_renderer__;
|
|
92
|
-
rS[7 /* NgtRendererClassId.compounded */] = instance;
|
|
93
|
-
const attributes = Object.keys(rS[9 /* NgtRendererClassId.attributes */]);
|
|
94
|
-
const properties = Object.keys(rS[10 /* NgtRendererClassId.properties */]);
|
|
95
|
-
for (const key of attributes) {
|
|
96
|
-
this.applyAttribute(instance, key, rS[9 /* NgtRendererClassId.attributes */][key]);
|
|
97
|
-
}
|
|
98
|
-
for (const key of properties) {
|
|
99
|
-
this.applyProperty(instance, key, rS[10 /* NgtRendererClassId.properties */][key]);
|
|
100
|
-
}
|
|
101
|
-
this.executeOperation(compound);
|
|
102
|
-
}
|
|
103
|
-
queueOperation(node, op) {
|
|
104
|
-
node.__ngt_renderer__[8 /* NgtRendererClassId.queueOps */].add(op);
|
|
105
|
-
}
|
|
106
|
-
executeOperation(node, type = 'op') {
|
|
107
|
-
const rS = node.__ngt_renderer__;
|
|
108
|
-
if (rS[8 /* NgtRendererClassId.queueOps */]?.size) {
|
|
109
|
-
rS[8 /* NgtRendererClassId.queueOps */].forEach((op) => {
|
|
110
|
-
if (op[0 /* NgtQueueOpClassId.type */] === type) {
|
|
111
|
-
op[1 /* NgtQueueOpClassId.op */]();
|
|
112
|
-
rS[8 /* NgtRendererClassId.queueOps */].delete(op);
|
|
113
|
-
}
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
processPortalContainer(portal) {
|
|
118
|
-
const injectorFactory = portal.__ngt_renderer__[14 /* NgtRendererClassId.injectorFactory */];
|
|
119
|
-
const injector = injectorFactory?.();
|
|
120
|
-
if (!injector)
|
|
121
|
-
return;
|
|
122
|
-
const portalStore = injector.get(NGT_STORE, null);
|
|
123
|
-
if (!portalStore)
|
|
124
|
-
return;
|
|
125
|
-
const portalContainer = portalStore.get('scene');
|
|
126
|
-
if (!portalContainer)
|
|
127
|
-
return;
|
|
128
|
-
portal.__ngt_renderer__[13 /* NgtRendererClassId.portalContainer */] = this.createNode('three', portalContainer);
|
|
129
|
-
}
|
|
130
|
-
applyAttribute(node, name, value) {
|
|
131
|
-
const rS = node.__ngt_renderer__;
|
|
132
|
-
if (rS[4 /* NgtRendererClassId.destroyed */])
|
|
133
|
-
return;
|
|
134
|
-
if (name === SPECIAL_PROPERTIES.RENDER_PRIORITY) {
|
|
135
|
-
// NOTE: priority needs to be set as an attribute string so that they can be set as early as possible
|
|
136
|
-
// we convert that string to a number. if it's invalid, default 0
|
|
137
|
-
let priority = Number(value);
|
|
138
|
-
if (isNaN(priority)) {
|
|
139
|
-
priority = 0;
|
|
140
|
-
console.warn(`[NGT] "priority" is an invalid number, default to 0`);
|
|
141
|
-
}
|
|
142
|
-
getLocalState(node).priority = priority;
|
|
143
|
-
}
|
|
144
|
-
if (name === SPECIAL_PROPERTIES.COMPOUND) {
|
|
145
|
-
// NOTE: we set the compound property on instance node now so we know that this instance is being compounded
|
|
146
|
-
rS[5 /* NgtRendererClassId.compound */] = [value === '' || value === 'first', {}];
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
149
|
-
if (name === SPECIAL_PROPERTIES.ATTACH) {
|
|
150
|
-
// NOTE: handle attach as tring
|
|
151
|
-
const paths = value.split('.');
|
|
152
|
-
if (paths.length)
|
|
153
|
-
getLocalState(node).attach = paths;
|
|
154
|
-
return;
|
|
155
|
-
}
|
|
156
|
-
if (name === SPECIAL_PROPERTIES.VALUE) {
|
|
157
|
-
// NOTE: coercion
|
|
158
|
-
let maybeCoerced = value;
|
|
159
|
-
if (maybeCoerced === '' || maybeCoerced === 'true' || maybeCoerced === 'false') {
|
|
160
|
-
maybeCoerced = maybeCoerced === 'true' || maybeCoerced === '';
|
|
161
|
-
}
|
|
162
|
-
else if (!isNaN(Number(maybeCoerced))) {
|
|
163
|
-
maybeCoerced = Number(maybeCoerced);
|
|
164
|
-
}
|
|
165
|
-
rS[11 /* NgtRendererClassId.rawValue */] = maybeCoerced;
|
|
166
|
-
return;
|
|
167
|
-
}
|
|
168
|
-
applyProps(node, { [name]: value });
|
|
169
|
-
this.updateNativeProps(node, name, value);
|
|
170
|
-
}
|
|
171
|
-
applyProperty(node, name, value) {
|
|
172
|
-
const rS = node.__ngt_renderer__;
|
|
173
|
-
if (rS[4 /* NgtRendererClassId.destroyed */])
|
|
174
|
-
return;
|
|
175
|
-
// [ref]
|
|
176
|
-
if (name === SPECIAL_PROPERTIES.REF && is.ref(value)) {
|
|
177
|
-
rS[12 /* NgtRendererClassId.ref */] = value;
|
|
178
|
-
value.nativeElement = node;
|
|
179
|
-
return;
|
|
180
|
-
}
|
|
181
|
-
const parent = getLocalState(node).parent() || rS[1 /* NgtRendererClassId.parent */];
|
|
182
|
-
// [rawValue]
|
|
183
|
-
if (getLocalState(node).isRaw && name === SPECIAL_PROPERTIES.VALUE) {
|
|
184
|
-
rS[11 /* NgtRendererClassId.rawValue */] = value;
|
|
185
|
-
if (parent)
|
|
186
|
-
attachThreeChild(parent, node);
|
|
187
|
-
return;
|
|
188
|
-
}
|
|
189
|
-
// [attach]
|
|
190
|
-
if (name === SPECIAL_PROPERTIES.ATTACH) {
|
|
191
|
-
getLocalState(node).attach = Array.isArray(value) ? value.map((v) => v.toString()) : value;
|
|
192
|
-
if (parent)
|
|
193
|
-
attachThreeChild(parent, node);
|
|
194
|
-
return;
|
|
195
|
-
}
|
|
196
|
-
const compound = rS[5 /* NgtRendererClassId.compound */];
|
|
197
|
-
if (compound?.[1 /* NgtCompoundClassId.props */] &&
|
|
198
|
-
name in compound[1 /* NgtCompoundClassId.props */] &&
|
|
199
|
-
!compound[0 /* NgtCompoundClassId.applyFirst */]) {
|
|
200
|
-
value = compound[1 /* NgtCompoundClassId.props */][name];
|
|
201
|
-
}
|
|
202
|
-
applyProps(node, { [name]: value });
|
|
203
|
-
this.updateNativeProps(node, name, value);
|
|
204
|
-
}
|
|
205
|
-
isCompound(name) {
|
|
206
|
-
return this.root.compoundPrefixes.some((prefix) => name.startsWith(prefix));
|
|
207
|
-
}
|
|
208
|
-
isDOM(node) {
|
|
209
|
-
const rS = node['__ngt_renderer__'];
|
|
210
|
-
return (!rS ||
|
|
211
|
-
(rS[0 /* NgtRendererClassId.type */] !== 'compound' &&
|
|
212
|
-
(node instanceof Element || node instanceof Document || node instanceof Window)));
|
|
213
|
-
}
|
|
214
|
-
get rootScene() {
|
|
215
|
-
return this.root.store.get('scene');
|
|
216
|
-
}
|
|
217
|
-
get portals() {
|
|
218
|
-
return this.root.portals;
|
|
219
|
-
}
|
|
220
|
-
getClosestParentWithInstance(node) {
|
|
221
|
-
let parent = node.__ngt_renderer__[1 /* NgtRendererClassId.parent */];
|
|
222
|
-
while (parent && parent.__ngt_renderer__[0 /* NgtRendererClassId.type */] !== 'three') {
|
|
223
|
-
parent = parent.__ngt_renderer__[13 /* NgtRendererClassId.portalContainer */]
|
|
224
|
-
? parent.__ngt_renderer__[13 /* NgtRendererClassId.portalContainer */]
|
|
225
|
-
: parent.__ngt_renderer__[1 /* NgtRendererClassId.parent */];
|
|
226
|
-
}
|
|
227
|
-
return parent;
|
|
228
|
-
}
|
|
229
|
-
getClosestParentWithCompound(node) {
|
|
230
|
-
if (node.__ngt_renderer__[6 /* NgtRendererClassId.compoundParent */]) {
|
|
231
|
-
return node.__ngt_renderer__[6 /* NgtRendererClassId.compoundParent */];
|
|
232
|
-
}
|
|
233
|
-
let parent = node.__ngt_renderer__[1 /* NgtRendererClassId.parent */];
|
|
234
|
-
if (parent &&
|
|
235
|
-
parent.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'compound' &&
|
|
236
|
-
!parent.__ngt_renderer__[7 /* NgtRendererClassId.compounded */]) {
|
|
237
|
-
return parent;
|
|
238
|
-
}
|
|
239
|
-
while (parent &&
|
|
240
|
-
(parent.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'three' ||
|
|
241
|
-
!parent.__ngt_renderer__[6 /* NgtRendererClassId.compoundParent */] ||
|
|
242
|
-
parent.__ngt_renderer__[0 /* NgtRendererClassId.type */] !== 'compound')) {
|
|
243
|
-
parent = parent.__ngt_renderer__[1 /* NgtRendererClassId.parent */];
|
|
244
|
-
}
|
|
245
|
-
if (!parent)
|
|
246
|
-
return;
|
|
247
|
-
if (parent.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'three' &&
|
|
248
|
-
parent.__ngt_renderer__[6 /* NgtRendererClassId.compoundParent */]) {
|
|
249
|
-
return parent.__ngt_renderer__[6 /* NgtRendererClassId.compoundParent */];
|
|
250
|
-
}
|
|
251
|
-
if (!parent.__ngt_renderer__[7 /* NgtRendererClassId.compounded */]) {
|
|
252
|
-
return parent;
|
|
253
|
-
}
|
|
254
|
-
return null;
|
|
255
|
-
}
|
|
256
|
-
getCreationState() {
|
|
257
|
-
const injectedArgs = this.firstNonInjectedDirective(NgtArgs)?.args || [];
|
|
258
|
-
const injectedParent = this.firstNonInjectedDirective(NgtParent)?.parent || null;
|
|
259
|
-
const store = this.tryGetPortalStore();
|
|
260
|
-
return { injectedArgs, injectedParent, store };
|
|
261
|
-
}
|
|
262
|
-
destroy(node, parent) {
|
|
263
|
-
const rS = node.__ngt_renderer__;
|
|
264
|
-
if (!rS || rS[4 /* NgtRendererClassId.destroyed */])
|
|
265
|
-
return;
|
|
266
|
-
if (rS[0 /* NgtRendererClassId.type */] === 'three') {
|
|
267
|
-
rS[5 /* NgtRendererClassId.compound */] = undefined;
|
|
268
|
-
rS[6 /* NgtRendererClassId.compoundParent */] = undefined;
|
|
269
|
-
const localState = getLocalState(node);
|
|
270
|
-
if (localState.objects) {
|
|
271
|
-
untracked(localState.objects).forEach((obj) => this.destroy(obj, parent));
|
|
272
|
-
}
|
|
273
|
-
if (localState.nonObjects) {
|
|
274
|
-
untracked(localState.nonObjects).forEach((obj) => this.destroy(obj, parent));
|
|
275
|
-
}
|
|
276
|
-
if (localState.afterUpdate)
|
|
277
|
-
localState.afterUpdate.complete();
|
|
278
|
-
if (localState.afterAttach)
|
|
279
|
-
localState.afterAttach.complete();
|
|
280
|
-
delete localState['objects'];
|
|
281
|
-
delete localState['nonObjects'];
|
|
282
|
-
delete localState['nativeProps'];
|
|
283
|
-
delete localState['add'];
|
|
284
|
-
delete localState['remove'];
|
|
285
|
-
delete localState['afterUpdate'];
|
|
286
|
-
delete localState['afterAttach'];
|
|
287
|
-
delete localState['store'];
|
|
288
|
-
delete localState['handlers'];
|
|
289
|
-
if (!localState.primitive) {
|
|
290
|
-
delete node['__ngt__'];
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
if (rS[0 /* NgtRendererClassId.type */] === 'comment') {
|
|
294
|
-
rS[14 /* NgtRendererClassId.injectorFactory */] = null;
|
|
295
|
-
delete node[SPECIAL_INTERNAL_ADD_COMMENT];
|
|
296
|
-
const index = this.comments.findIndex((comment) => comment === node);
|
|
297
|
-
if (index > -1) {
|
|
298
|
-
this.comments.splice(index, 1);
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
if (rS[0 /* NgtRendererClassId.type */] === 'portal') {
|
|
302
|
-
rS[14 /* NgtRendererClassId.injectorFactory */] = null;
|
|
303
|
-
const index = this.portals.findIndex((portal) => portal === node);
|
|
304
|
-
if (index > -1) {
|
|
305
|
-
this.portals.splice(index, 1);
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
if (rS[0 /* NgtRendererClassId.type */] === 'compound') {
|
|
309
|
-
rS[7 /* NgtRendererClassId.compounded */] = undefined;
|
|
310
|
-
rS[9 /* NgtRendererClassId.attributes */] = null;
|
|
311
|
-
rS[10 /* NgtRendererClassId.properties */] = null;
|
|
312
|
-
this.executeOperation(node, 'cleanUp');
|
|
313
|
-
rS[8 /* NgtRendererClassId.queueOps */].clear();
|
|
314
|
-
rS[8 /* NgtRendererClassId.queueOps */] = null;
|
|
315
|
-
}
|
|
316
|
-
if (rS[12 /* NgtRendererClassId.ref */]) {
|
|
317
|
-
// nullify ref
|
|
318
|
-
// but we do it later so that it doesn't hinder render
|
|
319
|
-
// TODO: will this cause memory leak?
|
|
320
|
-
requestAnimationFrame(() => {
|
|
321
|
-
rS[12 /* NgtRendererClassId.ref */].nativeElement = null;
|
|
322
|
-
rS[12 /* NgtRendererClassId.ref */] = undefined;
|
|
323
|
-
});
|
|
324
|
-
}
|
|
325
|
-
// nullify parent
|
|
326
|
-
rS[1 /* NgtRendererClassId.parent */] = null;
|
|
327
|
-
for (const renderChild of rS[3 /* NgtRendererClassId.children */] || []) {
|
|
328
|
-
if (renderChild.__ngt_renderer__?.[0 /* NgtRendererClassId.type */] === 'three' && parent) {
|
|
329
|
-
removeThreeChild(parent, renderChild, true);
|
|
330
|
-
}
|
|
331
|
-
this.destroy(renderChild, parent);
|
|
332
|
-
}
|
|
333
|
-
rS[3 /* NgtRendererClassId.children */] = [];
|
|
334
|
-
rS[4 /* NgtRendererClassId.destroyed */] = true;
|
|
335
|
-
if (parent) {
|
|
336
|
-
this.removeChild(parent, node);
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
updateNativeProps(node, key, value) {
|
|
340
|
-
const localState = getLocalState(node);
|
|
341
|
-
if (!localState || !localState.nativeProps)
|
|
342
|
-
return;
|
|
343
|
-
localState.nativeProps.set({ [key]: value });
|
|
344
|
-
}
|
|
345
|
-
firstNonInjectedDirective(dir) {
|
|
346
|
-
let directive;
|
|
347
|
-
const destroyed = [];
|
|
348
|
-
let i = this.comments.length - 1;
|
|
349
|
-
while (i >= 0) {
|
|
350
|
-
const comment = this.comments[i];
|
|
351
|
-
if (comment.__ngt_renderer__[4 /* NgtRendererClassId.destroyed */]) {
|
|
352
|
-
destroyed.push(i);
|
|
353
|
-
i--;
|
|
354
|
-
continue;
|
|
355
|
-
}
|
|
356
|
-
const injector = comment.__ngt_renderer__[14 /* NgtRendererClassId.injectorFactory */]();
|
|
357
|
-
if (!injector) {
|
|
358
|
-
i--;
|
|
359
|
-
continue;
|
|
360
|
-
}
|
|
361
|
-
const instance = injector.get(dir, null);
|
|
362
|
-
if (instance && instance.validate()) {
|
|
363
|
-
directive = instance;
|
|
364
|
-
break;
|
|
365
|
-
}
|
|
366
|
-
i--;
|
|
367
|
-
}
|
|
368
|
-
destroyed.forEach((index) => {
|
|
369
|
-
this.comments.splice(index, 1);
|
|
370
|
-
});
|
|
371
|
-
return directive;
|
|
372
|
-
}
|
|
373
|
-
tryGetPortalStore() {
|
|
374
|
-
let store;
|
|
375
|
-
const destroyed = [];
|
|
376
|
-
// we only care about the portal states because NgtStore only differs per Portal
|
|
377
|
-
let i = this.portals.length - 1;
|
|
378
|
-
while (i >= 0) {
|
|
379
|
-
// loop through the portal state backwards to find the closest NgtStore
|
|
380
|
-
const portal = this.portals[i];
|
|
381
|
-
if (portal.__ngt_renderer__[4 /* NgtRendererClassId.destroyed */]) {
|
|
382
|
-
destroyed.push(i);
|
|
383
|
-
i--;
|
|
384
|
-
continue;
|
|
385
|
-
}
|
|
386
|
-
const injector = portal.__ngt_renderer__[14 /* NgtRendererClassId.injectorFactory */]();
|
|
387
|
-
if (!injector) {
|
|
388
|
-
i--;
|
|
389
|
-
continue;
|
|
390
|
-
}
|
|
391
|
-
const instance = injector.get(NGT_STORE, null);
|
|
392
|
-
// only the instance with previousRoot should pass
|
|
393
|
-
if (instance && instance.get('previousRoot')) {
|
|
394
|
-
store = instance;
|
|
395
|
-
break;
|
|
396
|
-
}
|
|
397
|
-
i--;
|
|
398
|
-
}
|
|
399
|
-
destroyed.forEach((index) => {
|
|
400
|
-
this.portals.splice(index, 1);
|
|
401
|
-
});
|
|
402
|
-
return store || this.root.store;
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9yZW5kZXJlci9zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFrQixZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakQsT0FBTyxFQUFFLGFBQWEsRUFBd0IsTUFBTSxhQUFhLENBQUM7QUFFbEUsT0FBTyxFQUFFLFNBQVMsRUFBaUIsTUFBTSxVQUFVLENBQUM7QUFFcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFakMsT0FBTyxFQUFFLDRCQUE0QixFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9FLE9BQU8sRUFBNkQsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFeEgsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxjQUFjLENBQVcscUJBQXFCLENBQUMsQ0FBQztBQWdDekYsTUFBTSxPQUFPLGdCQUFnQjtJQUc1QixZQUFvQixJQUEwQjtRQUExQixTQUFJLEdBQUosSUFBSSxDQUFzQjtRQUZ0QyxhQUFRLEdBQUcsRUFBNEIsQ0FBQztJQUVDLENBQUM7SUFFbEQsVUFBVSxDQUFDLElBQStDLEVBQUUsSUFBa0I7UUFDN0UsTUFBTSxLQUFLLEdBQUc7WUFDYixJQUFJO1lBQ0osSUFBSTtZQUNKLElBQUk7WUFDSixFQUFFO1lBQ0YsS0FBSztZQUNMLFNBQVU7WUFDVixTQUFVO1lBQ1YsU0FBVTtZQUNWLFNBQVU7WUFDVixTQUFVO1lBQ1YsU0FBVTtZ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QUFRLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFO2dCQUM3QyxLQUFLLEdBQUcsUUFBUSxDQUFDO2dCQUNqQixNQUFNO2FBQ047WUFDRCxDQUFDLEVBQUUsQ0FBQztTQUNKO1FBRUQsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFLLENBQUMsS0FBSyxDQUFDO0lBQ2xDLENBQUM7Q0FDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuLCBJbmplY3RvciwgVHlwZSwgZ2V0RGVidWdOb2RlLCB1bnRyYWNrZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5ndEFyZ3MgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2FyZ3MnO1xuaW1wb3J0IHR5cGUgeyBOZ3RDb21tb25EaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2NvbW1vbic7XG5pbXBvcnQgeyBOZ3RQYXJlbnQgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3BhcmVudCc7XG5pbXBvcnQgeyBnZXRMb2NhbFN0YXRlLCB0eXBlIE5ndEluc3RhbmNlTm9kZSB9IGZyb20gJy4uL2luc3RhbmNlJztcbmltcG9ydCB0eXBlIHsgTmd0UmVmIH0gZnJvbSAnLi4vcmVmJztcbmltcG9ydCB7IE5HVF9TVE9SRSwgdHlwZSBOZ3RTdGF0ZSB9IGZyb20gJy4uL3N0b3JlJztcbmltcG9ydCB0eXBlIHsgTmd0QW55UmVjb3JkIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgYXBwbHlQcm9wcyB9IGZyb20gJy4uL3V0aWxzL2FwcGx5LXByb3BzJztcbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vdXRpbHMvaXMnO1xuaW1wb3J0IHR5cGUgeyBOZ3RTaWduYWxTdG9yZSB9IGZyb20gJy4uL3V0aWxzL3NpZ25hbC1zdG9yZSc7XG5pbXBvcnQgeyBTUEVDSUFMX0lOVEVSTkFMX0FERF9DT01NRU5ULCBTUEVDSUFMX1BST1BFUlRJRVMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBOZ3RDb21wb3VuZENsYXNzSWQsIE5ndFF1ZXVlT3BDbGFzc0lkLCBOZ3RSZW5kZXJlckNsYXNzSWQsIGF0dGFjaFRocmVlQ2hpbGQsIHJlbW92ZVRocmVlQ2hpbGQgfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IE5HVF9DT01QT1VORF9QUkVGSVhFUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmdbXT4oJ05ndENvbXBvdW5kUHJlZml4ZXMnKTtcblxudHlwZSBOZ3RSZW5kZXJlclJvb3RTdGF0ZSA9IHtcblx0c3RvcmU6IE5ndFNpZ25hbFN0b3JlPE5ndFN0YXRlPjtcblx0Y29tcG91bmRQcmVmaXhlczogc3RyaW5nW107XG5cdGRvY3VtZW50OiBEb2N1bWVudDtcblx0cG9ydGFsczogQXJyYXk8Tmd0UmVuZGVyZXJOb2RlPjtcbn07XG5cbnR5cGUgTmd0UXVldWVPcCA9IFt0eXBlOiAnb3AnIHwgJ2NsZWFuVXAnLCBvcDogKCkgPT4gdm9pZCwgZG9uZT86IHRydWVdO1xuXG5leHBvcnQgdHlwZSBOZ3RSZW5kZXJlclN0YXRlID0gW1xuXHR0eXBlOiAndGhyZWUnIHwgJ2NvbXBvdW5kJyB8ICdwb3J0YWwnIHwgJ2NvbW1lbnQnIHwgJ2RvbScsXG5cdHBhcmVudDogTmd0UmVuZGVyZXJOb2RlIHwgbnVsbCxcblx0aW5qZWN0ZWRQYXJlbnQ6IE5ndFJlZjxOZ3RSZW5kZXJlck5vZGU+IHwgbnVsbCxcblx0Y2hpbGRyZW46IE5ndFJlbmRlcmVyTm9kZVtdLFxuXHRkZXN0cm95ZWQ6IGJvb2xlYW4sXG5cdGNvbXBvdW5kOiBbYXBwbHlGaXJzdDogYm9vbGVhbiwgcHJvcHM6IE5ndEFueVJlY29yZF0sXG5cdGNvbXBvdW5kUGFyZW50OiBOZ3RSZW5kZXJlck5vZGUsXG5cdGNvbXBvdW5kZWQ6IE5ndFJlbmRlcmVyTm9kZSxcblx0cXVldWVPcHM6IFNldDxOZ3RRdWV1ZU9wPixcblx0YXR0cmlidXRlczogTmd0QW55UmVjb3JkLFxuXHRwcm9wZXJ0aWVzOiBOZ3RBbnlSZWNvcmQsXG5cdHJhd1ZhbHVlOiBhbnksXG5cdHJlZjogYW55LFxuXHRwb3J0YWxDb250YWluZXI6IE5ndFJlbmRlcmVyTm9kZSxcblx0aW5qZWN0b3JGYWN0b3J5OiAoKSA9PiBJbmplY3Rvcixcbl07XG5cbmV4cG9ydCB0eXBlIE5ndFJlbmRlcmVyTm9kZSA9IHtcblx0X19uZ3RfcmVuZGVyZXJfXzogTmd0UmVuZGVyZXJTdGF0ZTtcbn07XG5leHBvcnQgY2xhc3MgTmd0UmVuZGVyZXJTdG9yZSB7XG5cdHByaXZhdGUgY29tbWVudHMgPSBbXSBhcyBBcnJheTxOZ3RSZW5kZXJlck5vZGU+O1xuXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgcm9vdDogTmd0UmVuZGVyZXJSb290U3RhdGUpIHt9XG5cblx0Y3JlYXRlTm9kZSh0eXBlOiBOZ3RSZW5kZXJlclN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSwgbm9kZTogTmd0QW55UmVjb3JkKSB7XG5cdFx0Y29uc3Qgc3RhdGUgPSBbXG5cdFx0XHR0eXBlLFxuXHRcdFx0bnVsbCxcblx0XHRcdG51bGwsXG5cdFx0XHRbXSxcblx0XHRcdGZhbHNlLFxuXHRcdFx0dW5kZWZpbmVkISxcblx0XHRcdHVuZGVmaW5lZCEsXG5cdFx0XHR1bmRlZmluZWQhLFxuXHRcdFx0dW5kZWZpbmVkISxcblx0XHRcdHVuZGVmaW5lZCEsXG5cdFx0XHR1bmRlZmluZWQhLFxuXHRcdFx0dW5kZWZpbmVkISxcblx0XHRcdHVuZGVmaW5lZCEsXG5cdFx0XHR1bmRlZmluZWQhLFxuXHRcdFx0dW5kZWZpbmVkISxcblx0XHRdIGFzIE5ndFJlbmRlcmVyU3RhdGU7XG5cblx0XHRjb25zdCByZW5kZXJlck5vZGUgPSBPYmplY3QuYXNzaWduKG5vZGUsIHsgX19uZ3RfcmVuZGVyZXJfXzogc3RhdGUgfSk7XG5cblx0XHQvLyBOT1RFOiBhc3NpZ24gb3duZXJEb2N1bWVudCB0byBub2RlIHNvIHdlIGNhbiB1c2UgSG9zdExpc3RlbmVyIGluIENvbXBvbmVudFxuXHRcdGlmICghcmVuZGVyZXJOb2RlWydvd25lckRvY3VtZW50J10pIHJlbmRlcmVyTm9kZVsnb3duZXJEb2N1bWVudCddID0gdGhpcy5yb290LmRvY3VtZW50O1xuXG5cdFx0Ly8gTk9URTogYXNzaWduIGluamVjdG9yRmFjdG9yeSBvbiBub24tdGhyZWUgdHlwZSBzaW5jZVxuXHRcdC8vIHJlbmRlcmVyTm9kZSBpcyBhbiBpbnN0YW5jZSBvZiBET00gTm9kZVxuXHRcdGlmIChzdGF0ZVtOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gIT09ICd0aHJlZScpIHtcblx0XHRcdHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RvckZhY3RvcnldID0gKCkgPT4gZ2V0RGVidWdOb2RlKHJlbmRlcmVyTm9kZSkhLmluamVjdG9yO1xuXHRcdH1cblxuXHRcdGlmIChzdGF0ZVtOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21tZW50Jykge1xuXHRcdFx0Ly8gTk9URTogd2UgYXR0YWNoIGFuIGFycm93IGZ1bmN0aW9uIHRvIHRoZSBDb21tZW50IG5vZGVcblx0XHRcdC8vIEluIG91ciBkaXJlY3RpdmVzLCB3ZSBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIHRoZW4gc3RhcnQgdHJhY2tpbmcgdGhlIFJlbmRlcmVyTm9kZVxuXHRcdFx0Ly8gdGhpcyBpcyBkb25lIHRvIGxpbWl0IHRoZSBhbW91bnQgb2YgTm9kZXMgd2UgbmVlZCB0byBwcm9jZXNzIGZvciBnZXRDcmVhdGlvblN0YXRlXG5cdFx0XHRyZW5kZXJlck5vZGVbU1BFQ0lBTF9JTlRFUk5BTF9BRERfQ09NTUVOVF0gPSAobm9kZT86IE5ndFJlbmRlcmVyTm9kZSkgPT4ge1xuXHRcdFx0XHRpZiAobm9kZSAmJiBub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAncG9ydGFsJykge1xuXHRcdFx0XHRcdHRoaXMucG9ydGFscy5wdXNoKG5vZGUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuY29tbWVudHMucHVzaChyZW5kZXJlck5vZGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0cmV0dXJuIHJlbmRlcmVyTm9kZTtcblx0XHR9XG5cblx0XHRpZiAoc3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnY29tcG91bmQnKSB7XG5cdFx0XHRzdGF0ZVtOZ3RSZW5kZXJlckNsYXNzSWQucXVldWVPcHNdID0gbmV3IFNldCgpO1xuXHRcdFx0c3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLmF0dHJpYnV0ZXNdID0ge307XG5cdFx0XHRzdGF0ZVtOZ3RSZW5kZXJlckNsYXNzSWQucHJvcGVydGllc10gPSB7fTtcblx0XHRcdHJldHVybiByZW5kZXJlck5vZGU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlbmRlcmVyTm9kZTtcblx0fVxuXG5cdHNldFBhcmVudChub2RlOiBOZ3RSZW5kZXJlck5vZGUsIHBhcmVudDogTmd0UmVuZGVyZXJOb2RlKSB7XG5cdFx0aWYgKCFub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnBhcmVudF0pIHtcblx0XHRcdG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XSA9IHBhcmVudDtcblx0XHR9XG5cdH1cblxuXHRhZGRDaGlsZChub2RlOiBOZ3RSZW5kZXJlck5vZGUsIGNoaWxkOiBOZ3RSZW5kZXJlck5vZGUpIHtcblx0XHRpZiAoIW5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY2hpbGRyZW5dLmluY2x1ZGVzKGNoaWxkKSkge1xuXHRcdFx0bm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jaGlsZHJlbl0ucHVzaChjaGlsZCk7XG5cdFx0fVxuXHR9XG5cblx0cmVtb3ZlQ2hpbGQobm9kZTogTmd0UmVuZGVyZXJOb2RlLCBjaGlsZDogTmd0UmVuZGVyZXJOb2RlKSB7XG5cdFx0Y29uc3QgaW5kZXggPSBub2RlLl9fbmd0X3JlbmRlcmVyX18/LltOZ3RSZW5kZXJlckNsYXNzSWQuY2hpbGRyZW5dLmZpbmRJbmRleCgoYykgPT4gY2hpbGQgPT09IGMpO1xuXHRcdGlmIChpbmRleCA+PSAwKSB7XG5cdFx0XHRub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNoaWxkcmVuXS5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdH1cblx0fVxuXG5cdHNldENvbXBvdW5kKGNvbXBvdW5kOiBOZ3RSZW5kZXJlck5vZGUsIGluc3RhbmNlOiBOZ3RSZW5kZXJlck5vZGUpIHtcblx0XHRjb25zdCBpbnN0YW5jZVJTID0gaW5zdGFuY2UuX19uZ3RfcmVuZGVyZXJfXztcblxuXHRcdGlmIChpbnN0YW5jZVJTICYmIGluc3RhbmNlUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnBhcmVudF0pIHtcblx0XHRcdGNvbnN0IHBhcmVudFJTID0gaW5zdGFuY2VSU1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XS5fX25ndF9yZW5kZXJlcl9fO1xuXHRcdFx0Ly8gTk9URTogaWYgaW5zdGFuY2UgaXMgYWxyZWFkeSBjb21wb3VuZGVkIGJ5IGl0cyBwYXJlbnQuIHNraXBcblx0XHRcdGlmIChcblx0XHRcdFx0cGFyZW50UlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnY29tcG91bmQnICYmXG5cdFx0XHRcdHBhcmVudFJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSA9PT0gaW5zdGFuY2Vcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y29uc3QgclMgPSBjb21wb3VuZC5fX25ndF9yZW5kZXJlcl9fO1xuXHRcdHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSA9IGluc3RhbmNlO1xuXHRcdGNvbnN0IGF0dHJpYnV0ZXMgPSBPYmplY3Qua2V5cyhyU1tOZ3RSZW5kZXJlckNsYXNzSWQuYXR0cmlidXRlc10pO1xuXHRcdGNvbnN0IHByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhyU1tOZ3RSZW5kZXJlckNsYXNzSWQucHJvcGVydGllc10pO1xuXG5cdFx0Zm9yIChjb25zdCBrZXkgb2YgYXR0cmlidXRlcykge1xuXHRcdFx0dGhpcy5hcHBseUF0dHJpYnV0ZShpbnN0YW5jZSwga2V5LCByU1tOZ3RSZW5kZXJlckNsYXNzSWQuYXR0cmlidXRlc11ba2V5XSk7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBrZXkgb2YgcHJvcGVydGllcykge1xuXHRcdFx0dGhpcy5hcHBseVByb3BlcnR5KGluc3RhbmNlLCBrZXksIHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5wcm9wZXJ0aWVzXVtrZXldKTtcblx0XHR9XG5cblx0XHR0aGlzLmV4ZWN1dGVPcGVyYXRpb24oY29tcG91bmQpO1xuXHR9XG5cblx0cXVldWVPcGVyYXRpb24obm9kZTogTmd0UmVuZGVyZXJOb2RlLCBvcDogTmd0UXVldWVPcCkge1xuXHRcdG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucXVldWVPcHNdLmFkZChvcCk7XG5cdH1cblxuXHRwcml2YXRlIGV4ZWN1dGVPcGVyYXRpb24obm9kZTogTmd0UmVuZGVyZXJOb2RlLCB0eXBlOiBOZ3RRdWV1ZU9wW05ndFF1ZXVlT3BDbGFzc0lkLnR5cGVdID0gJ29wJykge1xuXHRcdGNvbnN0IHJTID0gbm9kZS5fX25ndF9yZW5kZXJlcl9fO1xuXHRcdGlmIChyU1tOZ3RSZW5kZXJlckNsYXNzSWQucXVldWVPcHNdPy5zaXplKSB7XG5cdFx0XHRyU1tOZ3RSZW5kZXJlckNsYXNzSWQucXVldWVPcHNdLmZvckVhY2goKG9wKSA9PiB7XG5cdFx0XHRcdGlmIChvcFtOZ3RRdWV1ZU9wQ2xhc3NJZC50eXBlXSA9PT0gdHlwZSkge1xuXHRcdFx0XHRcdG9wW05ndFF1ZXVlT3BDbGFzc0lkLm9wXSgpO1xuXHRcdFx0XHRcdHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5xdWV1ZU9wc10uZGVsZXRlKG9wKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0cHJvY2Vzc1BvcnRhbENvbnRhaW5lcihwb3J0YWw6IE5ndFJlbmRlcmVyTm9kZSkge1xuXHRcdGNvbnN0IGluamVjdG9yRmFjdG9yeSA9IHBvcnRhbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RvckZhY3RvcnldO1xuXHRcdGNvbnN0IGluamVjdG9yID0gaW5qZWN0b3JGYWN0b3J5Py4oKTtcblx0XHRpZiAoIWluamVjdG9yKSByZXR1cm47XG5cblx0XHRjb25zdCBwb3J0YWxTdG9yZSA9IGluamVjdG9yLmdldChOR1RfU1RPUkUsIG51bGwpO1xuXHRcdGlmICghcG9ydGFsU3RvcmUpIHJldHVybjtcblxuXHRcdGNvbnN0IHBvcnRhbENvbnRhaW5lciA9IHBvcnRhbFN0b3JlLmdldCgnc2NlbmUnKTtcblx0XHRpZiAoIXBvcnRhbENvbnRhaW5lcikgcmV0dXJuO1xuXG5cdFx0cG9ydGFsLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl0gPSB0aGlzLmNyZWF0ZU5vZGUoJ3RocmVlJywgcG9ydGFsQ29udGFpbmVyKTtcblx0fVxuXG5cdGFwcGx5QXR0cmlidXRlKG5vZGU6IE5ndFJlbmRlcmVyTm9kZSwgbmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG5cdFx0Y29uc3QgclMgPSBub2RlLl9fbmd0X3JlbmRlcmVyX187XG5cdFx0aWYgKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5kZXN0cm95ZWRdKSByZXR1cm47XG5cdFx0aWYgKG5hbWUgPT09IFNQRUNJQUxfUFJPUEVSVElFUy5SRU5ERVJfUFJJT1JJVFkpIHtcblx0XHRcdC8vIE5PVEU6IHByaW9yaXR5IG5lZWRzIHRvIGJlIHNldCBhcyBhbiBhdHRyaWJ1dGUgc3RyaW5nIHNvIHRoYXQgdGhleSBjYW4gYmUgc2V0IGFzIGVhcmx5IGFzIHBvc3NpYmxlXG5cdFx0XHQvLyB3ZSBjb252ZXJ0IHRoYXQgc3RyaW5nIHRvIGEgbnVtYmVyLiBpZiBpdCdzIGludmFsaWQsIGRlZmF1bHQgMFxuXHRcdFx0bGV0IHByaW9yaXR5ID0gTnVtYmVyKHZhbHVlKTtcblx0XHRcdGlmIChpc05hTihwcmlvcml0eSkpIHtcblx0XHRcdFx0cHJpb3JpdHkgPSAwO1xuXHRcdFx0XHRjb25zb2xlLndhcm4oYFtOR1RdIFwicHJpb3JpdHlcIiBpcyBhbiBpbnZhbGlkIG51bWJlciwgZGVmYXVsdCB0byAwYCk7XG5cdFx0XHR9XG5cdFx0XHRnZXRMb2NhbFN0YXRlKG5vZGUpLnByaW9yaXR5ID0gcHJpb3JpdHk7XG5cdFx0fVxuXG5cdFx0aWYgKG5hbWUgPT09IFNQRUNJQUxfUFJPUEVSVElFUy5DT01QT1VORCkge1xuXHRcdFx0Ly8gTk9URTogd2Ugc2V0IHRoZSBjb21wb3VuZCBwcm9wZXJ0eSBvbiBpbnN0YW5jZSBub2RlIG5vdyBzbyB3ZSBrbm93IHRoYXQgdGhpcyBpbnN0YW5jZSBpcyBiZWluZyBjb21wb3VuZGVkXG5cdFx0XHRyU1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRdID0gW3ZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PT0gJ2ZpcnN0Jywge31dO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChuYW1lID09PSBTUEVDSUFMX1BST1BFUlRJRVMuQVRUQUNIKSB7XG5cdFx0XHQvLyBOT1RFOiBoYW5kbGUgYXR0YWNoIGFzIHRyaW5nXG5cdFx0XHRjb25zdCBwYXRocyA9IHZhbHVlLnNwbGl0KCcuJyk7XG5cdFx0XHRpZiAocGF0aHMubGVuZ3RoKSBnZXRMb2NhbFN0YXRlKG5vZGUpLmF0dGFjaCA9IHBhdGhzO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChuYW1lID09PSBTUEVDSUFMX1BST1BFUlRJRVMuVkFMVUUpIHtcblx0XHRcdC8vIE5PVEU6IGNvZXJjaW9uXG5cdFx0XHRsZXQgbWF5YmVDb2VyY2VkOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuID0gdmFsdWU7XG5cdFx0XHRpZiAobWF5YmVDb2VyY2VkID09PSAnJyB8fCBtYXliZUNvZXJjZWQgPT09ICd0cnVlJyB8fCBtYXliZUNvZXJjZWQgPT09ICdmYWxzZScpIHtcblx0XHRcdFx0bWF5YmVDb2VyY2VkID0gbWF5YmVDb2VyY2VkID09PSAndHJ1ZScgfHwgbWF5YmVDb2VyY2VkID09PSAnJztcblx0XHRcdH0gZWxzZSBpZiAoIWlzTmFOKE51bWJlcihtYXliZUNvZXJjZWQpKSkge1xuXHRcdFx0XHRtYXliZUNvZXJjZWQgPSBOdW1iZXIobWF5YmVDb2VyY2VkKTtcblx0XHRcdH1cblx0XHRcdHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5yYXdWYWx1ZV0gPSBtYXliZUNvZXJjZWQ7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0YXBwbHlQcm9wcyhub2RlLCB7IFtuYW1lXTogdmFsdWUgfSk7XG5cdFx0dGhpcy51cGRhdGVOYXRpdmVQcm9wcyhub2RlLCBuYW1lLCB2YWx1ZSk7XG5cdH1cblxuXHRhcHBseVByb3BlcnR5KG5vZGU6IE5ndFJlbmRlcmVyTm9kZSwgbmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG5cdFx0Y29uc3QgclMgPSBub2RlLl9fbmd0X3JlbmRlcmVyX187XG5cdFx0aWYgKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5kZXN0cm95ZWRdKSByZXR1cm47XG5cblx0XHQvLyBbcmVmXVxuXHRcdGlmIChuYW1lID09PSBTUEVDSUFMX1BST1BFUlRJRVMuUkVGICYmIGlzLnJlZih2YWx1ZSkpIHtcblx0XHRcdHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5yZWZdID0gdmFsdWU7XG5cdFx0XHR2YWx1ZS5uYXRpdmVFbGVtZW50ID0gbm9kZTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBwYXJlbnQgPSBnZXRMb2NhbFN0YXRlKG5vZGUpLnBhcmVudCgpIHx8IHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdO1xuXG5cdFx0Ly8gW3Jhd1ZhbHVlXVxuXHRcdGlmIChnZXRMb2NhbFN0YXRlKG5vZGUpLmlzUmF3ICYmIG5hbWUgPT09IFNQRUNJQUxfUFJPUEVSVElFUy5WQUxVRSkge1xuXHRcdFx0clNbTmd0UmVuZGVyZXJDbGFzc0lkLnJhd1ZhbHVlXSA9IHZhbHVlO1xuXHRcdFx0aWYgKHBhcmVudCkgYXR0YWNoVGhyZWVDaGlsZChwYXJlbnQsIG5vZGUpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFthdHRhY2hdXG5cdFx0aWYgKG5hbWUgPT09IFNQRUNJQUxfUFJPUEVSVElFUy5BVFRBQ0gpIHtcblx0XHRcdGdldExvY2FsU3RhdGUobm9kZSkuYXR0YWNoID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5tYXAoKHYpID0+IHYudG9TdHJpbmcoKSkgOiB2YWx1ZTtcblx0XHRcdGlmIChwYXJlbnQpIGF0dGFjaFRocmVlQ2hpbGQocGFyZW50LCBub2RlKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBjb21wb3VuZCA9IHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZF07XG5cdFx0aWYgKFxuXHRcdFx0Y29tcG91bmQ/LltOZ3RDb21wb3VuZENsYXNzSWQucHJvcHNdICYmXG5cdFx0XHRuYW1lIGluIGNvbXBvdW5kW05ndENvbXBvdW5kQ2xhc3NJZC5wcm9wc10gJiZcblx0XHRcdCFjb21wb3VuZFtOZ3RDb21wb3VuZENsYXNzSWQuYXBwbHlGaXJzdF1cblx0XHQpIHtcblx0XHRcdHZhbHVlID0gY29tcG91bmRbTmd0Q29tcG91bmRDbGFzc0lkLnByb3BzXVtuYW1lXTtcblx0XHR9XG5cdFx0YXBwbHlQcm9wcyhub2RlLCB7IFtuYW1lXTogdmFsdWUgfSk7XG5cdFx0dGhpcy51cGRhdGVOYXRpdmVQcm9wcyhub2RlLCBuYW1lLCB2YWx1ZSk7XG5cdH1cblxuXHRpc0NvbXBvdW5kKG5hbWU6IHN0cmluZykge1xuXHRcdHJldHVybiB0aGlzLnJvb3QuY29tcG91bmRQcmVmaXhlcy5zb21lKChwcmVmaXgpID0+IG5hbWUuc3RhcnRzV2l0aChwcmVmaXgpKTtcblx0fVxuXG5cdGlzRE9NKG5vZGU6IE5ndEFueVJlY29yZCkge1xuXHRcdGNvbnN0IHJTID0gbm9kZVsnX19uZ3RfcmVuZGVyZXJfXyddO1xuXHRcdHJldHVybiAoXG5cdFx0XHQhclMgfHxcblx0XHRcdChyU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gIT09ICdjb21wb3VuZCcgJiZcblx0XHRcdFx0KG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCBub2RlIGluc3RhbmNlb2YgV2luZG93KSlcblx0XHQpO1xuXHR9XG5cblx0Z2V0IHJvb3RTY2VuZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5yb290LnN0b3JlLmdldCgnc2NlbmUnKTtcblx0fVxuXG5cdGdldCBwb3J0YWxzKCkge1xuXHRcdHJldHVybiB0aGlzLnJvb3QucG9ydGFscztcblx0fVxuXG5cdGdldENsb3Nlc3RQYXJlbnRXaXRoSW5zdGFuY2Uobm9kZTogTmd0UmVuZGVyZXJOb2RlKTogTmd0UmVuZGVyZXJOb2RlIHwgbnVsbCB7XG5cdFx0bGV0IHBhcmVudCA9IG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XTtcblx0XHR3aGlsZSAocGFyZW50ICYmIHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSAhPT0gJ3RocmVlJykge1xuXHRcdFx0cGFyZW50ID0gcGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl1cblx0XHRcdFx0PyBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXVxuXHRcdFx0XHQ6IHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdO1xuXHRcdH1cblxuXHRcdHJldHVybiBwYXJlbnQ7XG5cdH1cblxuXHRnZXRDbG9zZXN0UGFyZW50V2l0aENvbXBvdW5kKG5vZGU6IE5ndFJlbmRlcmVyTm9kZSkge1xuXHRcdGlmIChub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kUGFyZW50XSkge1xuXHRcdFx0cmV0dXJuIG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRQYXJlbnRdO1xuXHRcdH1cblxuXHRcdGxldCBwYXJlbnQgPSBub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnBhcmVudF07XG5cdFx0aWYgKFxuXHRcdFx0cGFyZW50ICYmXG5cdFx0XHRwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21wb3VuZCcgJiZcblx0XHRcdCFwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF1cblx0XHQpIHtcblx0XHRcdHJldHVybiBwYXJlbnQ7XG5cdFx0fVxuXG5cdFx0d2hpbGUgKFxuXHRcdFx0cGFyZW50ICYmXG5cdFx0XHQocGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnIHx8XG5cdFx0XHRcdCFwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRQYXJlbnRdIHx8XG5cdFx0XHRcdHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSAhPT0gJ2NvbXBvdW5kJylcblx0XHQpIHtcblx0XHRcdHBhcmVudCA9IHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdO1xuXHRcdH1cblxuXHRcdGlmICghcGFyZW50KSByZXR1cm47XG5cblx0XHRpZiAoXG5cdFx0XHRwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScgJiZcblx0XHRcdHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZFBhcmVudF1cblx0XHQpIHtcblx0XHRcdHJldHVybiBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRQYXJlbnRdO1xuXHRcdH1cblxuXHRcdGlmICghcGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdKSB7XG5cdFx0XHRyZXR1cm4gcGFyZW50O1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Z2V0Q3JlYXRpb25TdGF0ZSgpIHtcblx0XHRjb25zdCBpbmplY3RlZEFyZ3MgPSB0aGlzLmZpcnN0Tm9uSW5qZWN0ZWREaXJlY3RpdmUoTmd0QXJncyk/LmFyZ3MgfHwgW107XG5cdFx0Y29uc3QgaW5qZWN0ZWRQYXJlbnQgPSB0aGlzLmZpcnN0Tm9uSW5qZWN0ZWREaXJlY3RpdmUoTmd0UGFyZW50KT8ucGFyZW50IHx8IG51bGw7XG5cdFx0Y29uc3Qgc3RvcmUgPSB0aGlzLnRyeUdldFBvcnRhbFN0b3JlKCk7XG5cdFx0cmV0dXJuIHsgaW5qZWN0ZWRBcmdzLCBpbmplY3RlZFBhcmVudCwgc3RvcmUgfTtcblx0fVxuXG5cdGRlc3Ryb3kobm9kZTogTmd0UmVuZGVyZXJOb2RlLCBwYXJlbnQ/OiBOZ3RSZW5kZXJlck5vZGUpIHtcblx0XHRjb25zdCByUyA9IG5vZGUuX19uZ3RfcmVuZGVyZXJfXztcblx0XHRpZiAoIXJTIHx8IHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5kZXN0cm95ZWRdKSByZXR1cm47XG5cdFx0aWYgKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJykge1xuXHRcdFx0clNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kXSA9IHVuZGVmaW5lZCE7XG5cdFx0XHRyU1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRQYXJlbnRdID0gdW5kZWZpbmVkITtcblxuXHRcdFx0Y29uc3QgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUobm9kZSk7XG5cdFx0XHRpZiAobG9jYWxTdGF0ZS5vYmplY3RzKSB7XG5cdFx0XHRcdHVudHJhY2tlZChsb2NhbFN0YXRlLm9iamVjdHMpLmZvckVhY2goKG9iaikgPT4gdGhpcy5kZXN0cm95KG9iaiwgcGFyZW50KSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChsb2NhbFN0YXRlLm5vbk9iamVjdHMpIHtcblx0XHRcdFx0dW50cmFja2VkKGxvY2FsU3RhdGUubm9uT2JqZWN0cykuZm9yRWFjaCgob2JqKSA9PiB0aGlzLmRlc3Ryb3kob2JqLCBwYXJlbnQpKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGxvY2FsU3RhdGUuYWZ0ZXJVcGRhdGUpIGxvY2FsU3RhdGUuYWZ0ZXJVcGRhdGUuY29tcGxldGUoKTtcblx0XHRcdGlmIChsb2NhbFN0YXRlLmFmdGVyQXR0YWNoKSBsb2NhbFN0YXRlLmFmdGVyQXR0YWNoLmNvbXBsZXRlKCk7XG5cblx0XHRcdGRlbGV0ZSAobG9jYWxTdGF0ZSBhcyBOZ3RBbnlSZWNvcmQpWydvYmplY3RzJ107XG5cdFx0XHRkZWxldGUgKGxvY2FsU3RhdGUgYXMgTmd0QW55UmVjb3JkKVsnbm9uT2JqZWN0cyddO1xuXHRcdFx0ZGVsZXRlIChsb2NhbFN0YXRlIGFzIE5ndEFueVJlY29yZClbJ25hdGl2ZVByb3BzJ107XG5cdFx0XHRkZWxldGUgKGxvY2FsU3RhdGUgYXMgTmd0QW55UmVjb3JkKVsnYWRkJ107XG5cdFx0XHRkZWxldGUgKGxvY2FsU3RhdGUgYXMgTmd0QW55UmVjb3JkKVsncmVtb3ZlJ107XG5cdFx0XHRkZWxldGUgKGxvY2FsU3RhdGUgYXMgTmd0QW55UmVjb3JkKVsnYWZ0ZXJVcGRhdGUnXTtcblx0XHRcdGRlbGV0ZSAobG9jYWxTdGF0ZSBhcyBOZ3RBbnlSZWNvcmQpWydhZnRlckF0dGFjaCddO1xuXHRcdFx0ZGVsZXRlIChsb2NhbFN0YXRlIGFzIE5ndEFueVJlY29yZClbJ3N0b3JlJ107XG5cdFx0XHRkZWxldGUgKGxvY2FsU3RhdGUgYXMgTmd0QW55UmVjb3JkKVsnaGFuZGxlcnMnXTtcblxuXHRcdFx0aWYgKCFsb2NhbFN0YXRlLnByaW1pdGl2ZSkge1xuXHRcdFx0XHRkZWxldGUgKG5vZGUgYXMgTmd0QW55UmVjb3JkKVsnX19uZ3RfXyddO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChyU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21tZW50Jykge1xuXHRcdFx0clNbTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdG9yRmFjdG9yeV0gPSBudWxsITtcblx0XHRcdGRlbGV0ZSAobm9kZSBhcyBOZ3RBbnlSZWNvcmQpW1NQRUNJQUxfSU5URVJOQUxfQUREX0NPTU1FTlRdO1xuXHRcdFx0Y29uc3QgaW5kZXggPSB0aGlzLmNvbW1lbnRzLmZpbmRJbmRleCgoY29tbWVudCkgPT4gY29tbWVudCA9PT0gbm9kZSk7XG5cdFx0XHRpZiAoaW5kZXggPiAtMSkge1xuXHRcdFx0XHR0aGlzLmNvbW1lbnRzLnNwbGljZShpbmRleCwgMSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3BvcnRhbCcpIHtcblx0XHRcdHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RvckZhY3RvcnldID0gbnVsbCE7XG5cdFx0XHRjb25zdCBpbmRleCA9IHRoaXMucG9ydGFscy5maW5kSW5kZXgoKHBvcnRhbCkgPT4gcG9ydGFsID09PSBub2RlKTtcblx0XHRcdGlmIChpbmRleCA+IC0xKSB7XG5cdFx0XHRcdHRoaXMucG9ydGFscy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChyU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21wb3VuZCcpIHtcblx0XHRcdHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSA9IHVuZGVmaW5lZCE7XG5cdFx0XHRyU1tOZ3RSZW5kZXJlckNsYXNzSWQuYXR0cmlidXRlc10gPSBudWxsITtcblx0XHRcdHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5wcm9wZXJ0aWVzXSA9IG51bGwhO1xuXHRcdFx0dGhpcy5leGVjdXRlT3BlcmF0aW9uKG5vZGUsICdjbGVhblVwJyk7XG5cdFx0XHRyU1tOZ3RSZW5kZXJlckNsYXNzSWQucXVldWVPcHNdLmNsZWFyKCk7XG5cdFx0XHRyU1tOZ3RSZW5kZXJlckNsYXNzSWQucXVldWVPcHNdID0gbnVsbCE7XG5cdFx0fVxuXG5cdFx0aWYgKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5yZWZdKSB7XG5cdFx0XHQvLyBudWxsaWZ5IHJlZlxuXHRcdFx0Ly8gYnV0IHdlIGRvIGl0IGxhdGVyIHNvIHRoYXQgaXQgZG9lc24ndCBoaW5kZXIgcmVuZGVyXG5cdFx0XHQvLyBUT0RPOiB3aWxsIHRoaXMgY2F1c2UgbWVtb3J5IGxlYWs/XG5cdFx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXHRcdFx0XHRyU1tOZ3RSZW5kZXJlckNsYXNzSWQucmVmXS5uYXRpdmVFbGVtZW50ID0gbnVsbDtcblx0XHRcdFx0clNbTmd0UmVuZGVyZXJDbGFzc0lkLnJlZl0gPSB1bmRlZmluZWQhO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0Ly8gbnVsbGlmeSBwYXJlbnRcblx0XHRyU1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XSA9IG51bGw7XG5cdFx0Zm9yIChjb25zdCByZW5kZXJDaGlsZCBvZiByU1tOZ3RSZW5kZXJlckNsYXNzSWQuY2hpbGRyZW5dIHx8IFtdKSB7XG5cdFx0XHRpZiAocmVuZGVyQ2hpbGQuX19uZ3RfcmVuZGVyZXJfXz8uW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJyAmJiBwYXJlbnQpIHtcblx0XHRcdFx0cmVtb3ZlVGhyZWVDaGlsZChwYXJlbnQsIHJlbmRlckNoaWxkLCB0cnVlKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuZGVzdHJveShyZW5kZXJDaGlsZCwgcGFyZW50KTtcblx0XHR9XG5cblx0XHRyU1tOZ3RSZW5kZXJlckNsYXNzSWQuY2hpbGRyZW5dID0gW107XG5cdFx0clNbTmd0UmVuZGVyZXJDbGFzc0lkLmRlc3Ryb3llZF0gPSB0cnVlO1xuXHRcdGlmIChwYXJlbnQpIHtcblx0XHRcdHRoaXMucmVtb3ZlQ2hpbGQocGFyZW50LCBub2RlKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHVwZGF0ZU5hdGl2ZVByb3BzKG5vZGU6IE5ndEluc3RhbmNlTm9kZSwga2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcblx0XHRjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShub2RlKTtcblx0XHRpZiAoIWxvY2FsU3RhdGUgfHwgIWxvY2FsU3RhdGUubmF0aXZlUHJvcHMpIHJldHVybjtcblx0XHRsb2NhbFN0YXRlLm5hdGl2ZVByb3BzLnNldCh7IFtrZXldOiB2YWx1ZSB9KTtcblx0fVxuXG5cdHByaXZhdGUgZmlyc3ROb25JbmplY3RlZERpcmVjdGl2ZTxUIGV4dGVuZHMgTmd0Q29tbW9uRGlyZWN0aXZlPihkaXI6IFR5cGU8VD4pIHtcblx0XHRsZXQgZGlyZWN0aXZlOiBUIHwgdW5kZWZpbmVkO1xuXG5cdFx0Y29uc3QgZGVzdHJveWVkID0gW107XG5cblx0XHRsZXQgaSA9IHRoaXMuY29tbWVudHMubGVuZ3RoIC0gMTtcblx0XHR3aGlsZSAoaSA+PSAwKSB7XG5cdFx0XHRjb25zdCBjb21tZW50ID0gdGhpcy5jb21tZW50c1tpXTtcblx0XHRcdGlmIChjb21tZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmRlc3Ryb3llZF0pIHtcblx0XHRcdFx0ZGVzdHJveWVkLnB1c2goaSk7XG5cdFx0XHRcdGktLTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBpbmplY3RvciA9IGNvbW1lbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0b3JGYWN0b3J5XSgpO1xuXHRcdFx0aWYgKCFpbmplY3Rvcikge1xuXHRcdFx0XHRpLS07XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgaW5zdGFuY2UgPSBpbmplY3Rvci5nZXQoZGlyLCBudWxsKTtcblx0XHRcdGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS52YWxpZGF0ZSgpKSB7XG5cdFx0XHRcdGRpcmVjdGl2ZSA9IGluc3RhbmNlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblxuXHRcdFx0aS0tO1xuXHRcdH1cblxuXHRcdGRlc3Ryb3llZC5mb3JFYWNoKChpbmRleCkgPT4ge1xuXHRcdFx0dGhpcy5jb21tZW50cy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIGRpcmVjdGl2ZTtcblx0fVxuXG5cdHByaXZhdGUgdHJ5R2V0UG9ydGFsU3RvcmUoKSB7XG5cdFx0bGV0IHN0b3JlOiBOZ3RTaWduYWxTdG9yZTxOZ3RTdGF0ZT4gfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZGVzdHJveWVkID0gW107XG5cdFx0Ly8gd2Ugb25seSBjYXJlIGFib3V0IHRoZSBwb3J0YWwgc3RhdGVzIGJlY2F1c2UgTmd0U3RvcmUgb25seSBkaWZmZXJzIHBlciBQb3J0YWxcblx0XHRsZXQgaSA9IHRoaXMucG9ydGFscy5sZW5ndGggLSAxO1xuXHRcdHdoaWxlIChpID49IDApIHtcblx0XHRcdC8vIGxvb3AgdGhyb3VnaCB0aGUgcG9ydGFsIHN0YXRlIGJhY2t3YXJkcyB0byBmaW5kIHRoZSBjbG9zZXN0IE5ndFN0b3JlXG5cdFx0XHRjb25zdCBwb3J0YWwgPSB0aGlzLnBvcnRhbHNbaV07XG5cdFx0XHRpZiAocG9ydGFsLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmRlc3Ryb3llZF0pIHtcblx0XHRcdFx0ZGVzdHJveWVkLnB1c2goaSk7XG5cdFx0XHRcdGktLTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGluamVjdG9yID0gcG9ydGFsLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdG9yRmFjdG9yeV0oKTtcblx0XHRcdGlmICghaW5qZWN0b3IpIHtcblx0XHRcdFx0aS0tO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGluc3RhbmNlID0gaW5qZWN0b3IuZ2V0KE5HVF9TVE9SRSwgbnVsbCk7XG5cdFx0XHQvLyBvbmx5IHRoZSBpbnN0YW5jZSB3aXRoIHByZXZpb3VzUm9vdCBzaG91bGQgcGFzc1xuXHRcdFx0aWYgKGluc3RhbmNlICYmIGluc3RhbmNlLmdldCgncHJldmlvdXNSb290JykpIHtcblx0XHRcdFx0c3RvcmUgPSBpbnN0YW5jZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpLS07XG5cdFx0fVxuXG5cdFx0ZGVzdHJveWVkLmZvckVhY2goKGluZGV4KSA9PiB7XG5cdFx0XHR0aGlzLnBvcnRhbHMuc3BsaWNlKGluZGV4LCAxKTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBzdG9yZSB8fCB0aGlzLnJvb3QhLnN0b3JlO1xuXHR9XG59XG4iXX0=
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { Injector, assertInInjectionContext, inject } from '@angular/core';
|
|
2
|
-
export function assertInjectionContext(fn, injector) {
|
|
3
|
-
try {
|
|
4
|
-
if (!injector) {
|
|
5
|
-
return inject(Injector);
|
|
6
|
-
}
|
|
7
|
-
return injector;
|
|
8
|
-
}
|
|
9
|
-
catch {
|
|
10
|
-
!injector && assertInInjectionContext(fn);
|
|
11
|
-
return null;
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0LWluamVjdGlvbi1jb250ZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdXRpbHMvYXNzZXJ0LWluamVjdGlvbi1jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNFLE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxFQUFZLEVBQUUsUUFBbUI7SUFDdkUsSUFBSTtRQUNILElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZCxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN4QjtRQUNELE9BQU8sUUFBUSxDQUFDO0tBQ2hCO0lBQUMsTUFBTTtRQUNQLENBQUMsUUFBUSxJQUFJLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLE9BQU8sSUFBSyxDQUFDO0tBQ2I7QUFDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0b3IsIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRJbmplY3Rpb25Db250ZXh0KGZuOiBGdW5jdGlvbiwgaW5qZWN0b3I/OiBJbmplY3Rvcik6IEluamVjdG9yIHtcblx0dHJ5IHtcblx0XHRpZiAoIWluamVjdG9yKSB7XG5cdFx0XHRyZXR1cm4gaW5qZWN0KEluamVjdG9yKTtcblx0XHR9XG5cdFx0cmV0dXJuIGluamVjdG9yO1xuXHR9IGNhdGNoIHtcblx0XHQhaW5qZWN0b3IgJiYgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0KGZuKTtcblx0XHRyZXR1cm4gbnVsbCE7XG5cdH1cbn1cbiJdfQ==
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { InjectionToken, inject, } from '@angular/core';
|
|
2
|
-
function createInjectFn(token) {
|
|
3
|
-
return (injectOptions) => inject(token, injectOptions);
|
|
4
|
-
}
|
|
5
|
-
function createProvideFn(token, factory, deps, extraProviders) {
|
|
6
|
-
return (value) => {
|
|
7
|
-
let provider;
|
|
8
|
-
if (value) {
|
|
9
|
-
provider = { provide: token, useValue: value };
|
|
10
|
-
}
|
|
11
|
-
else {
|
|
12
|
-
provider = { provide: token, useFactory: factory, deps: (deps ?? []) };
|
|
13
|
-
}
|
|
14
|
-
return extraProviders ? [extraProviders, provider] : provider;
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
export function createInjectionToken(factory, options) {
|
|
18
|
-
const opts = options ?? { isRoot: true };
|
|
19
|
-
opts.isRoot ??= true;
|
|
20
|
-
if (opts.isRoot) {
|
|
21
|
-
if (opts.token) {
|
|
22
|
-
throw new Error(`\
|
|
23
|
-
createInjectionToken is creating a root InjectionToken but an external token is passed in.
|
|
24
|
-
`);
|
|
25
|
-
}
|
|
26
|
-
const token = new InjectionToken(`Token for ${factory.name}`, {
|
|
27
|
-
factory: () => {
|
|
28
|
-
if (opts.deps && Array.isArray(opts.deps)) {
|
|
29
|
-
return factory(...opts.deps.map((dep) => inject(dep)));
|
|
30
|
-
}
|
|
31
|
-
return factory();
|
|
32
|
-
},
|
|
33
|
-
});
|
|
34
|
-
return [
|
|
35
|
-
createInjectFn(token),
|
|
36
|
-
createProvideFn(token, factory, opts.deps),
|
|
37
|
-
token,
|
|
38
|
-
];
|
|
39
|
-
}
|
|
40
|
-
const token = opts.token || new InjectionToken(`Token for ${factory.name}`);
|
|
41
|
-
return [
|
|
42
|
-
createInjectFn(token),
|
|
43
|
-
createProvideFn(token, factory, opts.deps, opts.extraProviders),
|
|
44
|
-
token,
|
|
45
|
-
];
|
|
46
|
-
}
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWluamVjdGlvbi10b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3V0aWxzL2NyZWF0ZS1pbmplY3Rpb24tdG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVOLGNBQWMsRUFJZCxNQUFNLEdBS04sTUFBTSxlQUFlLENBQUM7QUFpRHZCLFNBQVMsY0FBYyxDQUFTLEtBQTZCO0lBQzVELE9BQU8sQ0FBQyxhQUE2QixFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLGFBQThCLENBQUMsQ0FBQztBQUN6RixDQUFDO0FBRUQsU0FBUyxlQUFlLENBS3ZCLEtBQTZCLEVBQzdCLE9BQW1DLEVBQ25DLElBQXVELEVBQ3ZELGNBQXlCO0lBRXpCLE9BQU8sQ0FBQyxLQUFjLEVBQUUsRUFBRTtRQUN6QixJQUFJLFFBQWtCLENBQUM7UUFDdkIsSUFBSSxLQUFLLEVBQUU7WUFDVixRQUFRLEdBQUcsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQztTQUMvQzthQUFNO1lBQ04sUUFBUSxHQUFHLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksSUFBSSxFQUFFLENBQTRCLEVBQUUsQ0FBQztTQUNsRztRQUVELE9BQU8sY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQy9ELENBQUMsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CLENBS25DLE9BQWlCLEVBQ2pCLE9BQTZEO0lBRTdELE1BQU0sSUFBSSxHQUFHLE9BQU8sSUFBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQTBELENBQUM7SUFFbEcsSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUM7SUFFckIsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1FBQ2hCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNmLE1BQU0sSUFBSSxLQUFLLENBQUM7O0NBRWxCLENBQUMsQ0FBQztTQUNBO1FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxjQUFjLENBQWlCLGFBQWEsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQzdFLE9BQU8sRUFBRSxHQUFHLEVBQUU7Z0JBQ2IsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUMxQyxPQUFPLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUN2RDtnQkFDRCxPQUFPLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLENBQUM7U0FDRCxDQUFDLENBQUM7UUFFSCxPQUFPO1lBQ04sY0FBYyxDQUFDLEtBQUssQ0FBNEQ7WUFDaEYsZUFBZSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQWEsQ0FBQztZQUNuRCxLQUFLO1NBQ0wsQ0FBQztLQUNGO0lBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLGNBQWMsQ0FBaUIsYUFBYSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM1RixPQUFPO1FBQ04sY0FBYyxDQUFDLEtBQUssQ0FBNEQ7UUFDaEYsZUFBZSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQWEsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ3hFLEtBQUs7S0FDTCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdEhvc3QsXG5cdEluamVjdGlvblRva2VuLFxuXHRPcHRpb25hbCxcblx0U2VsZixcblx0U2tpcFNlbGYsXG5cdGluamVjdCxcblx0dHlwZSBGYWN0b3J5UHJvdmlkZXIsXG5cdHR5cGUgSW5qZWN0T3B0aW9ucyxcblx0dHlwZSBQcm92aWRlcixcblx0dHlwZSBUeXBlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxudHlwZSBDcmVhdGVJbmplY3Rpb25Ub2tlbkRlcDxUVG9rZW5UeXBlPiA9XG5cdHwgVHlwZTxUVG9rZW5UeXBlPlxuXHQvLyBOT1RFOiB3ZSBkb24ndCBoYXZlIGFuIEFic3RyYWN0VHlwZVxuXHR8IChhYnN0cmFjdCBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUVG9rZW5UeXBlKVxuXHR8IEluamVjdGlvblRva2VuPFRUb2tlblR5cGU+O1xuXG50eXBlIENyZWF0ZUluamVjdGlvblRva2VuRGVwczxcblx0VEZhY3RvcnkgZXh0ZW5kcyAoLi4uYXJnczogYW55W10pID0+IGFueSxcblx0VEZhY3RvcnlEZXBzIGV4dGVuZHMgUGFyYW1ldGVyczxURmFjdG9yeT4gPSBQYXJhbWV0ZXJzPFRGYWN0b3J5Pixcbj4gPSB7XG5cdFtJbmRleCBpbiBrZXlvZiBURmFjdG9yeURlcHNdOlxuXHRcdHwgQ3JlYXRlSW5qZWN0aW9uVG9rZW5EZXA8VEZhY3RvcnlEZXBzW0luZGV4XT5cblx0XHR8IFsuLi5tb2RpZmllcnM6IEFycmF5PE9wdGlvbmFsIHwgU2VsZiB8IFNraXBTZWxmIHwgSG9zdD4sIHRva2VuOiBDcmVhdGVJbmplY3Rpb25Ub2tlbkRlcDxURmFjdG9yeURlcHNbSW5kZXhdPl07XG59ICYgeyBsZW5ndGg6IFRGYWN0b3J5RGVwc1snbGVuZ3RoJ10gfTtcblxuZXhwb3J0IHR5cGUgQ3JlYXRlSW5qZWN0aW9uVG9rZW5PcHRpb25zPFxuXHRURmFjdG9yeSBleHRlbmRzICguLi5hcmdzOiBhbnlbXSkgPT4gYW55LFxuXHRURmFjdG9yeURlcHMgZXh0ZW5kcyBQYXJhbWV0ZXJzPFRGYWN0b3J5PiA9IFBhcmFtZXRlcnM8VEZhY3Rvcnk+LFxuPiA9XG5cdC8vIHRoaXMgbWVhbnMgVEZ1bmN0aW9uIGhhcyBubyBhcmd1bWVudHNcblx0KFRGYWN0b3J5RGVwc1swXSBleHRlbmRzIHVuZGVmaW5lZFxuXHRcdD8ge1xuXHRcdFx0XHRpc1Jvb3Q6IGJvb2xlYW47XG5cdFx0XHRcdGRlcHM/OiBuZXZlcjtcblx0XHQgIH1cblx0XHQ6IHtcblx0XHRcdFx0aXNSb290PzogYm9vbGVhbjtcblx0XHRcdFx0ZGVwczogQ3JlYXRlSW5qZWN0aW9uVG9rZW5EZXBzPFRGYWN0b3J5LCBURmFjdG9yeURlcHM+O1xuXHRcdCAgfSkgJiB7XG5cdFx0dG9rZW4/OiBJbmplY3Rpb25Ub2tlbjxSZXR1cm5UeXBlPFRGYWN0b3J5Pj47XG5cdFx0ZXh0cmFQcm92aWRlcnM/OiBQcm92aWRlcjtcblx0fTtcblxudHlwZSBJbmplY3RGbjxcblx0VEZhY3RvcnkgZXh0ZW5kcyAoLi4uYXJnczogYW55W10pID0+IGFueSxcblx0VEZhY3RvcnlSZXR1cm4gZXh0ZW5kcyBSZXR1cm5UeXBlPFRGYWN0b3J5PiA9IFJldHVyblR5cGU8VEZhY3Rvcnk+LFxuPiA9IHtcblx0KCk6IFRGYWN0b3J5UmV0dXJuO1xuXHQoaW5qZWN0T3B0aW9uczogSW5qZWN0T3B0aW9ucyAmIHsgb3B0aW9uYWw/OiBmYWxzZSB9KTogVEZhY3RvcnlSZXR1cm47XG5cdChpbmplY3RPcHRpb25zOiBJbmplY3RPcHRpb25zKTogVEZhY3RvcnlSZXR1cm4gfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgQ3JlYXRlSW5qZWN0aW9uVG9rZW5SZXR1cm48XG5cdFRGYWN0b3J5IGV4dGVuZHMgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnksXG5cdFRGYWN0b3J5UmV0dXJuIGV4dGVuZHMgUmV0dXJuVHlwZTxURmFjdG9yeT4gPSBSZXR1cm5UeXBlPFRGYWN0b3J5Pixcbj4gPSBbSW5qZWN0Rm48VEZhY3RvcnksIFRGYWN0b3J5UmV0dXJuPiwgKHZhbHVlPzogVEZhY3RvcnlSZXR1cm4pID0+IFByb3ZpZGVyLCBJbmplY3Rpb25Ub2tlbjxURmFjdG9yeVJldHVybj5dO1xuXG5mdW5jdGlvbiBjcmVhdGVJbmplY3RGbjxUVmFsdWU+KHRva2VuOiBJbmplY3Rpb25Ub2tlbjxUVmFsdWU+KSB7XG5cdHJldHVybiAoaW5qZWN0T3B0aW9ucz86IEluamVjdE9wdGlvbnMpID0+IGluamVjdCh0b2tlbiwgaW5qZWN0T3B0aW9ucyBhcyBJbmplY3RPcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUHJvdmlkZUZuPFxuXHRUVmFsdWUsXG5cdFRGYWN0b3J5IGV4dGVuZHMgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkgPSAoLi4uYXJnczogYW55W10pID0+IFRWYWx1ZSxcblx0VEZhY3RvcnlEZXBzIGV4dGVuZHMgUGFyYW1ldGVyczxURmFjdG9yeT4gPSBQYXJhbWV0ZXJzPFRGYWN0b3J5Pixcbj4oXG5cdHRva2VuOiBJbmplY3Rpb25Ub2tlbjxUVmFsdWU+LFxuXHRmYWN0b3J5OiAoLi4uYXJnczogYW55W10pID0+IFRWYWx1ZSxcblx0ZGVwcz86IENyZWF0ZUluamVjdGlvblRva2VuRGVwczxURmFjdG9yeSwgVEZhY3RvcnlEZXBzPixcblx0ZXh0cmFQcm92aWRlcnM/OiBQcm92aWRlcixcbikge1xuXHRyZXR1cm4gKHZhbHVlPzogVFZhbHVlKSA9PiB7XG5cdFx0bGV0IHByb3ZpZGVyOiBQcm92aWRlcjtcblx0XHRpZiAodmFsdWUpIHtcblx0XHRcdHByb3ZpZGVyID0geyBwcm92aWRlOiB0b2tlbiwgdXNlVmFsdWU6IHZhbHVlIH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHByb3ZpZGVyID0geyBwcm92aWRlOiB0b2tlbiwgdXNlRmFjdG9yeTogZmFjdG9yeSwgZGVwczogKGRlcHMgPz8gW10pIGFzIEZhY3RvcnlQcm92aWRlclsnZGVwcyddIH07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGV4dHJhUHJvdmlkZXJzID8gW2V4dHJhUHJvdmlkZXJzLCBwcm92aWRlcl0gOiBwcm92aWRlcjtcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUluamVjdGlvblRva2VuPFxuXHRURmFjdG9yeSBleHRlbmRzICguLi5hcmdzOiBhbnlbXSkgPT4gYW55LFxuXHRURmFjdG9yeURlcHMgZXh0ZW5kcyBQYXJhbWV0ZXJzPFRGYWN0b3J5PiA9IFBhcmFtZXRlcnM8VEZhY3Rvcnk+LFxuXHRURmFjdG9yeVJldHVybiBleHRlbmRzIFJldHVyblR5cGU8VEZhY3Rvcnk+ID0gUmV0dXJuVHlwZTxURmFjdG9yeT4sXG4+KFxuXHRmYWN0b3J5OiBURmFjdG9yeSxcblx0b3B0aW9ucz86IENyZWF0ZUluamVjdGlvblRva2VuT3B0aW9uczxURmFjdG9yeSwgVEZhY3RvcnlEZXBzPixcbik6IENyZWF0ZUluamVjdGlvblRva2VuUmV0dXJuPFRGYWN0b3J5LCBURmFjdG9yeVJldHVybj4ge1xuXHRjb25zdCBvcHRzID0gb3B0aW9ucyA/PyAoeyBpc1Jvb3Q6IHRydWUgfSBhcyBDcmVhdGVJbmplY3Rpb25Ub2tlbk9wdGlvbnM8VEZhY3RvcnksIFRGYWN0b3J5RGVwcz4pO1xuXG5cdG9wdHMuaXNSb290ID8/PSB0cnVlO1xuXG5cdGlmIChvcHRzLmlzUm9vdCkge1xuXHRcdGlmIChvcHRzLnRva2VuKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYFxcXG5jcmVhdGVJbmplY3Rpb25Ub2tlbiBpcyBjcmVhdGluZyBhIHJvb3QgSW5qZWN0aW9uVG9rZW4gYnV0IGFuIGV4dGVybmFsIHRva2VuIGlzIHBhc3NlZCBpbi5cbmApO1xuXHRcdH1cblxuXHRcdGNvbnN0IHRva2VuID0gbmV3IEluamVjdGlvblRva2VuPFRGYWN0b3J5UmV0dXJuPihgVG9rZW4gZm9yICR7ZmFjdG9yeS5uYW1lfWAsIHtcblx0XHRcdGZhY3Rvcnk6ICgpID0+IHtcblx0XHRcdFx0aWYgKG9wdHMuZGVwcyAmJiBBcnJheS5pc0FycmF5KG9wdHMuZGVwcykpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFjdG9yeSguLi5vcHRzLmRlcHMubWFwKChkZXApID0+IGluamVjdChkZXApKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZhY3RvcnkoKTtcblx0XHRcdH0sXG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gW1xuXHRcdFx0Y3JlYXRlSW5qZWN0Rm4odG9rZW4pIGFzIENyZWF0ZUluamVjdGlvblRva2VuUmV0dXJuPFRGYWN0b3J5LCBURmFjdG9yeVJldHVybj5bMF0sXG5cdFx0XHRjcmVhdGVQcm92aWRlRm4odG9rZW4sIGZhY3RvcnksIG9wdHMuZGVwcyBhcyBhbnlbXSksXG5cdFx0XHR0b2tlbixcblx0XHRdO1xuXHR9XG5cblx0Y29uc3QgdG9rZW4gPSBvcHRzLnRva2VuIHx8IG5ldyBJbmplY3Rpb25Ub2tlbjxURmFjdG9yeVJldHVybj4oYFRva2VuIGZvciAke2ZhY3RvcnkubmFtZX1gKTtcblx0cmV0dXJuIFtcblx0XHRjcmVhdGVJbmplY3RGbih0b2tlbikgYXMgQ3JlYXRlSW5qZWN0aW9uVG9rZW5SZXR1cm48VEZhY3RvcnksIFRGYWN0b3J5UmV0dXJuPlswXSxcblx0XHRjcmVhdGVQcm92aWRlRm4odG9rZW4sIGZhY3RvcnksIG9wdHMuZGVwcyBhcyBhbnlbXSwgb3B0cy5leHRyYVByb3ZpZGVycyksXG5cdFx0dG9rZW4sXG5cdF07XG59XG4iXX0=
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
export function safeDetectChanges(...cdrs) {
|
|
2
|
-
cdrs.forEach((cdr) => {
|
|
3
|
-
if (!cdr)
|
|
4
|
-
return;
|
|
5
|
-
try {
|
|
6
|
-
// dynamic created component with ViewContainerRef#createComponent does not have Context
|
|
7
|
-
// but it has _attachedToViewContainer
|
|
8
|
-
if (cdr['_attachedToViewContainer'] || !!cdr['context']) {
|
|
9
|
-
cdr.detectChanges();
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
catch (e) {
|
|
13
|
-
cdr.markForCheck();
|
|
14
|
-
}
|
|
15
|
-
});
|
|
16
|
-
}
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZS1kZXRlY3QtY2hhbmdlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3V0aWxzL3NhZmUtZGV0ZWN0LWNoYW5nZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEdBQUcsSUFBOEM7SUFDbEYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQ3BCLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTztRQUNqQixJQUFJO1lBQ0gsd0ZBQXdGO1lBQ3hGLHNDQUFzQztZQUN0QyxJQUFLLEdBQW9CLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLENBQUUsR0FBb0IsQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDNUYsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO2FBQ3BCO1NBQ0Q7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNYLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNuQjtJQUNGLENBQUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgTmd0QW55UmVjb3JkIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gc2FmZURldGVjdENoYW5nZXMoLi4uY2RyczogKENoYW5nZURldGVjdG9yUmVmIHwgdW5kZWZpbmVkIHwgbnVsbClbXSkge1xuXHRjZHJzLmZvckVhY2goKGNkcikgPT4ge1xuXHRcdGlmICghY2RyKSByZXR1cm47XG5cdFx0dHJ5IHtcblx0XHRcdC8vIGR5bmFtaWMgY3JlYXRlZCBjb21wb25lbnQgd2l0aCBWaWV3Q29udGFpbmVyUmVmI2NyZWF0ZUNvbXBvbmVudCBkb2VzIG5vdCBoYXZlIENvbnRleHRcblx0XHRcdC8vIGJ1dCBpdCBoYXMgX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyXG5cdFx0XHRpZiAoKGNkciBhcyBOZ3RBbnlSZWNvcmQpWydfYXR0YWNoZWRUb1ZpZXdDb250YWluZXInXSB8fCAhIShjZHIgYXMgTmd0QW55UmVjb3JkKVsnY29udGV4dCddKSB7XG5cdFx0XHRcdGNkci5kZXRlY3RDaGFuZ2VzKCk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0Y2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdH1cblx0fSk7XG59XG4iXX0=
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import * as i0 from "@angular/core";
|
|
2
|
-
export declare abstract class NgtCommonDirective {
|
|
3
|
-
protected static processComment: boolean;
|
|
4
|
-
private vcr;
|
|
5
|
-
private zone;
|
|
6
|
-
private template;
|
|
7
|
-
protected injected: boolean;
|
|
8
|
-
protected shouldCreateView: boolean;
|
|
9
|
-
private view?;
|
|
10
|
-
constructor();
|
|
11
|
-
abstract validate(): boolean;
|
|
12
|
-
protected createView(): void;
|
|
13
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<NgtCommonDirective, never>;
|
|
14
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<NgtCommonDirective, never, never, {}, {}, never, never, false, never>;
|
|
15
|
-
}
|
package/lib/directives/key.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { NgtCommonDirective } from './common';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export declare class NgtKey extends NgtCommonDirective {
|
|
4
|
-
static processComment: boolean;
|
|
5
|
-
private lastKey;
|
|
6
|
-
validate(): boolean;
|
|
7
|
-
set key(key: string | number | object);
|
|
8
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<NgtKey, never>;
|
|
9
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<NgtKey, "ng-template[key]", never, { "key": { "alias": "key"; "required": false; }; }, {}, never, never, true, never>;
|
|
10
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { NgtRef } from '../ref';
|
|
2
|
-
import { NgtCommonDirective } from './common';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export declare class NgtParent extends NgtCommonDirective {
|
|
5
|
-
private injectedParent;
|
|
6
|
-
set parent(parent: string | NgtRef<THREE.Object3D>);
|
|
7
|
-
get parent(): string | NgtRef<THREE.Object3D>;
|
|
8
|
-
validate(): boolean;
|
|
9
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<NgtParent, never>;
|
|
10
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<NgtParent, "ng-template[parent]", never, { "parent": { "alias": "parent"; "required": false; }; }, {}, never, never, true, never>;
|
|
11
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { NgForOf } from '@angular/common';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export declare class NgtRepeat extends NgForOf<number> {
|
|
4
|
-
set ngForRepeat(count: number);
|
|
5
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<NgtRepeat, never>;
|
|
6
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<NgtRepeat, "[ngFor][ngForRepeat]", never, { "ngForRepeat": { "alias": "ngForRepeat"; "required": false; }; }, {}, never, never, true, never>;
|
|
7
|
-
}
|
package/lib/ref.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { ElementRef, type Injector, type Signal } from '@angular/core';
|
|
2
|
-
import { type NgtInstanceNode } from './instance';
|
|
3
|
-
export type NgtInjectedRef<TElement> = ElementRef<TElement> & {
|
|
4
|
-
children: (type?: 'objects' | 'nonObjects' | 'both') => Signal<NgtInstanceNode[]>;
|
|
5
|
-
untracked: TElement;
|
|
6
|
-
};
|
|
7
|
-
export type NgtRef<TElement> = TElement | NgtInjectedRef<TElement>;
|
|
8
|
-
export declare function injectNgtRef<TElement>(initial?: ElementRef<TElement> | TElement, injector?: Injector): NgtInjectedRef<TElement>;
|