angular-three 2.0.0-beta.3 → 2.0.0-beta.300
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 +186 -112
- package/esm2022/angular-three.mjs +1 -1
- package/esm2022/index.mjs +17 -18
- package/esm2022/lib/canvas.mjs +155 -252
- package/esm2022/lib/directives/args.mjs +49 -21
- package/esm2022/lib/directives/selection.mjs +65 -0
- package/esm2022/lib/dom/events.mjs +7 -2
- package/esm2022/lib/events.mjs +98 -79
- package/esm2022/lib/html.mjs +40 -0
- package/esm2022/lib/instance.mjs +72 -0
- package/esm2022/lib/loader.mjs +77 -57
- package/esm2022/lib/loop.mjs +30 -24
- package/esm2022/lib/pipes/hexify.mjs +67 -0
- package/esm2022/lib/portal.mjs +184 -215
- package/esm2022/lib/renderer/catalogue.mjs +7 -0
- package/esm2022/lib/renderer/constants.mjs +20 -0
- package/esm2022/lib/renderer/index.mjs +557 -0
- package/esm2022/lib/renderer/state.mjs +49 -0
- package/esm2022/lib/renderer/utils.mjs +85 -74
- package/esm2022/lib/roots.mjs +273 -0
- package/esm2022/lib/routed-scene.mjs +13 -11
- package/esm2022/lib/store.mjs +183 -0
- package/esm2022/lib/three-types.mjs +1 -1
- package/esm2022/lib/types.mjs +1 -1
- package/esm2022/lib/utils/apply-props.mjs +43 -35
- package/esm2022/lib/utils/attach.mjs +13 -10
- 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 +92 -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 +90 -0
- package/esm2022/lib/utils/update.mjs +8 -4
- 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-testing.mjs +966 -0
- package/fesm2022/angular-three-testing.mjs.map +1 -0
- package/fesm2022/angular-three.mjs +2110 -2057
- package/fesm2022/angular-three.mjs.map +1 -1
- package/index.d.ts +18 -17
- package/lib/canvas.d.ts +373 -33
- package/lib/directives/args.d.ts +14 -7
- package/lib/directives/selection.d.ts +17 -0
- package/lib/dom/events.d.ts +2 -2
- package/lib/events.d.ts +4 -4
- package/lib/html.d.ts +17 -0
- package/lib/instance.d.ts +4 -0
- package/lib/loader.d.ts +28 -5
- package/lib/loop.d.ts +27 -17
- package/lib/pipes/hexify.d.ts +20 -0
- package/lib/portal.d.ts +58 -44
- package/lib/renderer/catalogue.d.ts +13 -0
- package/lib/renderer/constants.d.ts +19 -0
- package/lib/renderer/{renderer.d.ts → index.d.ts} +34 -18
- package/lib/renderer/state.d.ts +24 -0
- package/lib/renderer/utils.d.ts +12 -20
- package/lib/roots.d.ts +13 -0
- package/lib/routed-scene.d.ts +1 -1
- package/lib/store.d.ts +15 -0
- package/lib/three-types.d.ts +502 -149
- package/lib/types.d.ts +161 -178
- package/lib/utils/apply-props.d.ts +2 -2
- package/lib/utils/attach.d.ts +4 -4
- package/lib/utils/is.d.ts +13 -13
- package/lib/utils/make.d.ts +10 -5
- package/lib/utils/non-nullish.d.ts +4 -0
- package/lib/utils/object-events.d.ts +34 -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 +26 -0
- package/lib/utils/update.d.ts +1 -1
- package/metadata.json +1 -1
- package/package.json +41 -14
- package/plugin/generators.json +34 -16
- package/plugin/package.json +3 -6
- package/plugin/src/generators/add-soba/compat.d.ts +2 -0
- package/plugin/src/generators/add-soba/compat.js +6 -0
- 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 +78 -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/gltf/compat.d.ts +2 -0
- package/plugin/src/generators/gltf/compat.js +6 -0
- package/plugin/src/generators/gltf/compat.js.map +1 -0
- package/plugin/src/generators/gltf/files/__fileName__.ts__tmpl__ +36 -0
- package/plugin/src/generators/gltf/generator.d.ts +12 -0
- package/plugin/src/generators/gltf/generator.js +125 -0
- package/plugin/src/generators/gltf/generator.js.map +1 -0
- package/plugin/src/generators/gltf/schema.json +58 -0
- package/plugin/src/generators/init/compat.d.ts +1 -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.ts__tmpl__ +29 -0
- package/plugin/src/generators/init/generator.d.ts +6 -0
- package/plugin/src/generators/init/generator.js +154 -0
- package/plugin/src/generators/init/generator.js.map +1 -0
- package/plugin/src/generators/init/schema.json +11 -4
- 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 +16 -0
- package/plugin/src/generators/version.js +20 -0
- package/plugin/src/generators/version.js.map +1 -0
- package/plugin/src/index.d.ts +0 -1
- package/plugin/src/index.js +0 -5
- 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/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/common.mjs +0 -39
- package/esm2022/lib/directives/parent.mjs +0 -33
- 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 -365
- package/esm2022/lib/renderer/store.mjs +0 -372
- package/esm2022/lib/stores/signal.store.mjs +0 -81
- package/esm2022/lib/stores/store.mjs +0 -423
- package/esm2022/lib/utils/assert-in-injection-context.mjs +0 -14
- package/esm2022/lib/utils/instance.mjs +0 -63
- package/esm2022/lib/utils/safe-detect-changes.mjs +0 -15
- 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/di/ref.d.ts +0 -7
- package/lib/directives/common.d.ts +0 -11
- package/lib/directives/parent.d.ts +0 -11
- 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/store.d.ts +0 -63
- package/lib/stores/signal.store.d.ts +0 -20
- 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/safe-detect-changes.d.ts +0 -2
- 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
- /package/lib/{di → utils}/before-render.d.ts +0 -0
|
@@ -1,372 +0,0 @@
|
|
|
1
|
-
import { getDebugNode, untracked } from '@angular/core';
|
|
2
|
-
import { NgtArgs } from '../directives/args';
|
|
3
|
-
import { NgtParent } from '../directives/parent';
|
|
4
|
-
import { NgtStore } from '../stores/store';
|
|
5
|
-
import { applyProps } from '../utils/apply-props';
|
|
6
|
-
import { getLocalState } from '../utils/instance';
|
|
7
|
-
import { is } from '../utils/is';
|
|
8
|
-
import { SPECIAL_INTERNAL_ADD_COMMENT, SPECIAL_PROPERTIES, attachThreeChild, removeThreeChild } from './utils';
|
|
9
|
-
export class NgtRendererStore {
|
|
10
|
-
#comments = [];
|
|
11
|
-
constructor(root) {
|
|
12
|
-
this.root = root;
|
|
13
|
-
}
|
|
14
|
-
createNode(type, node) {
|
|
15
|
-
const state = [
|
|
16
|
-
type,
|
|
17
|
-
null,
|
|
18
|
-
null,
|
|
19
|
-
[],
|
|
20
|
-
false,
|
|
21
|
-
undefined,
|
|
22
|
-
undefined,
|
|
23
|
-
undefined,
|
|
24
|
-
undefined,
|
|
25
|
-
undefined,
|
|
26
|
-
undefined,
|
|
27
|
-
undefined,
|
|
28
|
-
undefined,
|
|
29
|
-
undefined,
|
|
30
|
-
undefined,
|
|
31
|
-
];
|
|
32
|
-
const rendererNode = Object.assign(node, { __ngt_renderer__: state });
|
|
33
|
-
// assign ownerDocument to node so we can use HostListener in Component
|
|
34
|
-
if (!rendererNode['ownerDocument'])
|
|
35
|
-
rendererNode['ownerDocument'] = this.root.document;
|
|
36
|
-
// assign injectorFactory on non-three type since
|
|
37
|
-
// rendererNode is an instance of DOM Node
|
|
38
|
-
if (state[0 /* NgtRendererClassId.type */] !== 'three') {
|
|
39
|
-
state[14 /* NgtRendererClassId.injectorFactory */] = () => getDebugNode(rendererNode).injector;
|
|
40
|
-
}
|
|
41
|
-
if (state[0 /* NgtRendererClassId.type */] === 'comment') {
|
|
42
|
-
// we attach an arrow function to the Comment node
|
|
43
|
-
// In our directives, we can call this function to then start tracking the RendererNode
|
|
44
|
-
// this is done to limit the amount of Nodes we need to process for getCreationState
|
|
45
|
-
rendererNode[SPECIAL_INTERNAL_ADD_COMMENT] = (node) => {
|
|
46
|
-
if (node && node.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'portal') {
|
|
47
|
-
this.portals.push(node);
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
this.#comments.push(rendererNode);
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
|
-
return rendererNode;
|
|
54
|
-
}
|
|
55
|
-
if (state[0 /* NgtRendererClassId.type */] === 'compound') {
|
|
56
|
-
state[8 /* NgtRendererClassId.queueOps */] = new Set();
|
|
57
|
-
state[9 /* NgtRendererClassId.attributes */] = {};
|
|
58
|
-
state[10 /* NgtRendererClassId.properties */] = {};
|
|
59
|
-
return rendererNode;
|
|
60
|
-
}
|
|
61
|
-
return rendererNode;
|
|
62
|
-
}
|
|
63
|
-
setParent(node, parent) {
|
|
64
|
-
if (!node.__ngt_renderer__[1 /* NgtRendererClassId.parent */]) {
|
|
65
|
-
node.__ngt_renderer__[1 /* NgtRendererClassId.parent */] = parent;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
addChild(node, child) {
|
|
69
|
-
if (!node.__ngt_renderer__[3 /* NgtRendererClassId.children */].includes(child)) {
|
|
70
|
-
node.__ngt_renderer__[3 /* NgtRendererClassId.children */].push(child);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
removeChild(node, child) {
|
|
74
|
-
const index = node.__ngt_renderer__[3 /* NgtRendererClassId.children */].findIndex((c) => child === c);
|
|
75
|
-
if (index >= 0) {
|
|
76
|
-
node.__ngt_renderer__[3 /* NgtRendererClassId.children */].splice(index, 1);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
setCompound(compound, instance) {
|
|
80
|
-
const rS = compound.__ngt_renderer__;
|
|
81
|
-
rS[7 /* NgtRendererClassId.compounded */] = instance;
|
|
82
|
-
const attributes = Object.keys(rS[9 /* NgtRendererClassId.attributes */]);
|
|
83
|
-
const properties = Object.keys(rS[10 /* NgtRendererClassId.properties */]);
|
|
84
|
-
for (const key of attributes) {
|
|
85
|
-
this.applyAttribute(instance, key, rS[9 /* NgtRendererClassId.attributes */][key]);
|
|
86
|
-
}
|
|
87
|
-
for (const key of properties) {
|
|
88
|
-
this.applyProperty(instance, key, rS[10 /* NgtRendererClassId.properties */][key]);
|
|
89
|
-
}
|
|
90
|
-
this.executeOperation(compound);
|
|
91
|
-
}
|
|
92
|
-
queueOperation(node, op) {
|
|
93
|
-
node.__ngt_renderer__[8 /* NgtRendererClassId.queueOps */].add(op);
|
|
94
|
-
}
|
|
95
|
-
executeOperation(node, type = 'op') {
|
|
96
|
-
const rS = node.__ngt_renderer__;
|
|
97
|
-
if (rS[8 /* NgtRendererClassId.queueOps */]?.size) {
|
|
98
|
-
rS[8 /* NgtRendererClassId.queueOps */].forEach((op) => {
|
|
99
|
-
if (op[0 /* NgtQueueOpClassId.type */] === type) {
|
|
100
|
-
op[1 /* NgtQueueOpClassId.op */]();
|
|
101
|
-
rS[8 /* NgtRendererClassId.queueOps */].delete(op);
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
processPortalContainer(portal) {
|
|
107
|
-
const injectorFactory = portal.__ngt_renderer__[14 /* NgtRendererClassId.injectorFactory */];
|
|
108
|
-
const injector = injectorFactory?.();
|
|
109
|
-
if (!injector)
|
|
110
|
-
return;
|
|
111
|
-
const portalStore = injector.get(NgtStore, null);
|
|
112
|
-
if (!portalStore)
|
|
113
|
-
return;
|
|
114
|
-
const portalContainer = portalStore.get('scene');
|
|
115
|
-
if (!portalContainer)
|
|
116
|
-
return;
|
|
117
|
-
portal.__ngt_renderer__[13 /* NgtRendererClassId.portalContainer */] = this.createNode('three', portalContainer);
|
|
118
|
-
}
|
|
119
|
-
applyAttribute(node, name, value) {
|
|
120
|
-
const rS = node.__ngt_renderer__;
|
|
121
|
-
if (rS[4 /* NgtRendererClassId.destroyed */])
|
|
122
|
-
return;
|
|
123
|
-
if (name === SPECIAL_PROPERTIES.RENDER_PRIORITY) {
|
|
124
|
-
// priority needs to be set as an attribute string so that they can be set as early as possible
|
|
125
|
-
// we convert that string to a number. if it's invalid, 0
|
|
126
|
-
let priority = Number(value);
|
|
127
|
-
if (isNaN(priority)) {
|
|
128
|
-
priority = 0;
|
|
129
|
-
console.warn(`[NGT] "priority" is an invalid number, default to 0`);
|
|
130
|
-
}
|
|
131
|
-
getLocalState(node).priority = priority;
|
|
132
|
-
}
|
|
133
|
-
if (name === SPECIAL_PROPERTIES.COMPOUND) {
|
|
134
|
-
// we set the compound property on instance node now so we know that this instance is being compounded
|
|
135
|
-
rS[5 /* NgtRendererClassId.compound */] = [value === '' || value === 'first', {}];
|
|
136
|
-
return;
|
|
137
|
-
}
|
|
138
|
-
if (name === SPECIAL_PROPERTIES.ATTACH) {
|
|
139
|
-
// handle attach as tring
|
|
140
|
-
const paths = value.split('.');
|
|
141
|
-
if (paths.length)
|
|
142
|
-
getLocalState(node).attach = paths;
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
|
-
if (name === SPECIAL_PROPERTIES.VALUE) {
|
|
146
|
-
// coercion
|
|
147
|
-
let maybeCoerced = value;
|
|
148
|
-
if (maybeCoerced === '' || maybeCoerced === 'true' || maybeCoerced === 'false') {
|
|
149
|
-
maybeCoerced = maybeCoerced === 'true' || maybeCoerced === '';
|
|
150
|
-
}
|
|
151
|
-
else if (!isNaN(Number(maybeCoerced))) {
|
|
152
|
-
maybeCoerced = Number(maybeCoerced);
|
|
153
|
-
}
|
|
154
|
-
rS[11 /* NgtRendererClassId.rawValue */] = maybeCoerced;
|
|
155
|
-
return;
|
|
156
|
-
}
|
|
157
|
-
applyProps(node, { [name]: value });
|
|
158
|
-
}
|
|
159
|
-
applyProperty(node, name, value) {
|
|
160
|
-
const rS = node.__ngt_renderer__;
|
|
161
|
-
if (rS[4 /* NgtRendererClassId.destroyed */])
|
|
162
|
-
return;
|
|
163
|
-
// [ref]
|
|
164
|
-
if (name === SPECIAL_PROPERTIES.REF && is.ref(value)) {
|
|
165
|
-
rS[12 /* NgtRendererClassId.ref */] = value;
|
|
166
|
-
value.nativeElement = node;
|
|
167
|
-
return;
|
|
168
|
-
}
|
|
169
|
-
const parent = getLocalState(node).parent() || rS[1 /* NgtRendererClassId.parent */];
|
|
170
|
-
// [rawValue]
|
|
171
|
-
if (getLocalState(node).isRaw && name === SPECIAL_PROPERTIES.VALUE) {
|
|
172
|
-
rS[11 /* NgtRendererClassId.rawValue */] = value;
|
|
173
|
-
if (parent)
|
|
174
|
-
attachThreeChild(parent, node);
|
|
175
|
-
return;
|
|
176
|
-
}
|
|
177
|
-
// [attach]
|
|
178
|
-
if (name === SPECIAL_PROPERTIES.ATTACH) {
|
|
179
|
-
getLocalState(node).attach = Array.isArray(value) ? value.map((v) => v.toString()) : value;
|
|
180
|
-
if (parent)
|
|
181
|
-
attachThreeChild(parent, node);
|
|
182
|
-
return;
|
|
183
|
-
}
|
|
184
|
-
const compound = rS[5 /* NgtRendererClassId.compound */];
|
|
185
|
-
if (compound?.[1 /* NgtCompoundClassId.props */] &&
|
|
186
|
-
name in compound[1 /* NgtCompoundClassId.props */] &&
|
|
187
|
-
!compound[0 /* NgtCompoundClassId.applyFirst */]) {
|
|
188
|
-
value = compound[1 /* NgtCompoundClassId.props */][name];
|
|
189
|
-
}
|
|
190
|
-
applyProps(node, { [name]: value });
|
|
191
|
-
}
|
|
192
|
-
isCompound(name) {
|
|
193
|
-
return this.root.compoundPrefixes.some((prefix) => name.startsWith(prefix));
|
|
194
|
-
}
|
|
195
|
-
isDOM(node) {
|
|
196
|
-
const rS = node['__ngt_renderer__'];
|
|
197
|
-
return (!rS ||
|
|
198
|
-
(rS[0 /* NgtRendererClassId.type */] !== 'compound' &&
|
|
199
|
-
(node instanceof Element || node instanceof Document || node instanceof Window)));
|
|
200
|
-
}
|
|
201
|
-
get rootScene() {
|
|
202
|
-
return this.root.store.get('scene');
|
|
203
|
-
}
|
|
204
|
-
get portals() {
|
|
205
|
-
return this.root.portals;
|
|
206
|
-
}
|
|
207
|
-
getClosestParentWithInstance(node) {
|
|
208
|
-
let parent = node.__ngt_renderer__[1 /* NgtRendererClassId.parent */];
|
|
209
|
-
while (parent && parent.__ngt_renderer__[0 /* NgtRendererClassId.type */] !== 'three') {
|
|
210
|
-
parent = parent.__ngt_renderer__[13 /* NgtRendererClassId.portalContainer */]
|
|
211
|
-
? parent.__ngt_renderer__[13 /* NgtRendererClassId.portalContainer */]
|
|
212
|
-
: parent.__ngt_renderer__[1 /* NgtRendererClassId.parent */];
|
|
213
|
-
}
|
|
214
|
-
return parent;
|
|
215
|
-
}
|
|
216
|
-
getClosestParentWithCompound(node) {
|
|
217
|
-
if (node.__ngt_renderer__[6 /* NgtRendererClassId.compoundParent */]) {
|
|
218
|
-
return node.__ngt_renderer__[6 /* NgtRendererClassId.compoundParent */];
|
|
219
|
-
}
|
|
220
|
-
let parent = node.__ngt_renderer__[1 /* NgtRendererClassId.parent */];
|
|
221
|
-
if (parent &&
|
|
222
|
-
parent.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'compound' &&
|
|
223
|
-
!parent.__ngt_renderer__[7 /* NgtRendererClassId.compounded */]) {
|
|
224
|
-
return parent;
|
|
225
|
-
}
|
|
226
|
-
while (parent &&
|
|
227
|
-
(parent.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'three' ||
|
|
228
|
-
!parent.__ngt_renderer__[6 /* NgtRendererClassId.compoundParent */] ||
|
|
229
|
-
parent.__ngt_renderer__[0 /* NgtRendererClassId.type */] !== 'compound')) {
|
|
230
|
-
parent = parent.__ngt_renderer__[1 /* NgtRendererClassId.parent */];
|
|
231
|
-
}
|
|
232
|
-
if (!parent)
|
|
233
|
-
return;
|
|
234
|
-
if (parent.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'three' &&
|
|
235
|
-
parent.__ngt_renderer__[6 /* NgtRendererClassId.compoundParent */]) {
|
|
236
|
-
return parent.__ngt_renderer__[6 /* NgtRendererClassId.compoundParent */];
|
|
237
|
-
}
|
|
238
|
-
if (!parent.__ngt_renderer__[7 /* NgtRendererClassId.compounded */]) {
|
|
239
|
-
return parent;
|
|
240
|
-
}
|
|
241
|
-
return null;
|
|
242
|
-
}
|
|
243
|
-
getCreationState() {
|
|
244
|
-
const injectedArgs = this.firstNonInjectedDirective(NgtArgs)?.args || [];
|
|
245
|
-
const injectedParent = this.firstNonInjectedDirective(NgtParent)?.parent || null;
|
|
246
|
-
const store = this.tryGetPortalStore();
|
|
247
|
-
return { injectedArgs, injectedParent, store };
|
|
248
|
-
}
|
|
249
|
-
destroy(node, parent) {
|
|
250
|
-
const rS = node.__ngt_renderer__;
|
|
251
|
-
if (rS[4 /* NgtRendererClassId.destroyed */])
|
|
252
|
-
return;
|
|
253
|
-
if (rS[0 /* NgtRendererClassId.type */] === 'three') {
|
|
254
|
-
rS[5 /* NgtRendererClassId.compound */] = undefined;
|
|
255
|
-
rS[6 /* NgtRendererClassId.compoundParent */] = undefined;
|
|
256
|
-
const localState = getLocalState(node);
|
|
257
|
-
if (localState.objects) {
|
|
258
|
-
untracked(localState.objects).forEach((obj) => this.destroy(obj, parent));
|
|
259
|
-
}
|
|
260
|
-
if (localState.nonObjects) {
|
|
261
|
-
untracked(localState.nonObjects).forEach((obj) => this.destroy(obj, parent));
|
|
262
|
-
}
|
|
263
|
-
if (localState.afterUpdate)
|
|
264
|
-
localState.afterUpdate.complete();
|
|
265
|
-
if (localState.afterAttach)
|
|
266
|
-
localState.afterAttach.complete();
|
|
267
|
-
delete localState['objects'];
|
|
268
|
-
delete localState['nonObjects'];
|
|
269
|
-
delete localState['nativeProps'];
|
|
270
|
-
delete localState['add'];
|
|
271
|
-
delete localState['remove'];
|
|
272
|
-
delete localState['afterUpdate'];
|
|
273
|
-
delete localState['afterAttach'];
|
|
274
|
-
delete localState['store'];
|
|
275
|
-
delete localState['handlers'];
|
|
276
|
-
if (!localState.primitive) {
|
|
277
|
-
delete node['__ngt__'];
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
if (rS[0 /* NgtRendererClassId.type */] === 'comment') {
|
|
281
|
-
rS[14 /* NgtRendererClassId.injectorFactory */] = null;
|
|
282
|
-
delete node[SPECIAL_INTERNAL_ADD_COMMENT];
|
|
283
|
-
const index = this.#comments.findIndex((comment) => comment === node);
|
|
284
|
-
if (index > -1) {
|
|
285
|
-
this.#comments.splice(index, 1);
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
if (rS[0 /* NgtRendererClassId.type */] === 'portal') {
|
|
289
|
-
rS[14 /* NgtRendererClassId.injectorFactory */] = null;
|
|
290
|
-
const index = this.portals.findIndex((portal) => portal === node);
|
|
291
|
-
if (index > -1) {
|
|
292
|
-
this.portals.splice(index, 1);
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
if (rS[0 /* NgtRendererClassId.type */] === 'compound') {
|
|
296
|
-
rS[7 /* NgtRendererClassId.compounded */] = undefined;
|
|
297
|
-
rS[9 /* NgtRendererClassId.attributes */] = null;
|
|
298
|
-
rS[10 /* NgtRendererClassId.properties */] = null;
|
|
299
|
-
this.executeOperation(node, 'cleanUp');
|
|
300
|
-
rS[8 /* NgtRendererClassId.queueOps */].clear();
|
|
301
|
-
rS[8 /* NgtRendererClassId.queueOps */] = null;
|
|
302
|
-
}
|
|
303
|
-
if (rS[12 /* NgtRendererClassId.ref */]) {
|
|
304
|
-
// nullify ref
|
|
305
|
-
rS[12 /* NgtRendererClassId.ref */].nativeElement = null;
|
|
306
|
-
rS[12 /* NgtRendererClassId.ref */] = undefined;
|
|
307
|
-
}
|
|
308
|
-
// nullify parent
|
|
309
|
-
rS[1 /* NgtRendererClassId.parent */] = null;
|
|
310
|
-
for (const renderChild of rS[3 /* NgtRendererClassId.children */] || []) {
|
|
311
|
-
if (renderChild.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'three' && parent) {
|
|
312
|
-
removeThreeChild(parent, renderChild, true);
|
|
313
|
-
}
|
|
314
|
-
this.destroy(renderChild, parent);
|
|
315
|
-
}
|
|
316
|
-
rS[3 /* NgtRendererClassId.children */] = [];
|
|
317
|
-
rS[4 /* NgtRendererClassId.destroyed */] = true;
|
|
318
|
-
if (parent) {
|
|
319
|
-
this.removeChild(parent, node);
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
firstNonInjectedDirective(dir) {
|
|
323
|
-
let directive;
|
|
324
|
-
let i = this.#comments.length - 1;
|
|
325
|
-
while (i >= 0) {
|
|
326
|
-
const comment = this.#comments[i];
|
|
327
|
-
if (comment.__ngt_renderer__[4 /* NgtRendererClassId.destroyed */]) {
|
|
328
|
-
i--;
|
|
329
|
-
continue;
|
|
330
|
-
}
|
|
331
|
-
const injector = comment.__ngt_renderer__[14 /* NgtRendererClassId.injectorFactory */]();
|
|
332
|
-
if (!injector) {
|
|
333
|
-
i--;
|
|
334
|
-
continue;
|
|
335
|
-
}
|
|
336
|
-
const instance = injector.get(dir, null);
|
|
337
|
-
if (instance && instance.validate()) {
|
|
338
|
-
directive = instance;
|
|
339
|
-
break;
|
|
340
|
-
}
|
|
341
|
-
i--;
|
|
342
|
-
}
|
|
343
|
-
return directive;
|
|
344
|
-
}
|
|
345
|
-
tryGetPortalStore() {
|
|
346
|
-
let store;
|
|
347
|
-
// we only care about the portal states because NgtStore only differs per Portal
|
|
348
|
-
let i = this.portals.length - 1;
|
|
349
|
-
while (i >= 0) {
|
|
350
|
-
// loop through the portal state backwards to find the closest NgtStore
|
|
351
|
-
const portal = this.portals[i];
|
|
352
|
-
if (portal.__ngt_renderer__[4 /* NgtRendererClassId.destroyed */]) {
|
|
353
|
-
i--;
|
|
354
|
-
continue;
|
|
355
|
-
}
|
|
356
|
-
const injector = portal.__ngt_renderer__[14 /* NgtRendererClassId.injectorFactory */]();
|
|
357
|
-
if (!injector) {
|
|
358
|
-
i--;
|
|
359
|
-
continue;
|
|
360
|
-
}
|
|
361
|
-
const instance = injector.get(NgtStore, null);
|
|
362
|
-
// only the instance with previousStore should pass
|
|
363
|
-
if (instance && instance.get('previousStore')) {
|
|
364
|
-
store = instance;
|
|
365
|
-
break;
|
|
366
|
-
}
|
|
367
|
-
i--;
|
|
368
|
-
}
|
|
369
|
-
return store || this.root.store;
|
|
370
|
-
}
|
|
371
|
-
}
|
|
372
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUvc3JjL2xpYi9yZW5kZXJlci9zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFFbEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWpDLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQWlDL0csTUFBTSxPQUFPLGdCQUFnQjtJQUNoQixTQUFTLEdBQUcsRUFBNEIsQ0FBQztJQUVsRCxZQUE2QixJQUEwQjtRQUExQixTQUFJLEdBQUosSUFBSSxDQUFzQjtJQUFHLENBQUM7SUFFM0QsVUFBVSxDQUFDLElBQStDLEVBQUUsSUFBa0I7UUFDMUUsTUFBTSxLQUFLLEdBQUc7WUFDVixJQUFJO1lBQ0osSUFBSTtZQUNKLElBQUk7WUFDSixFQUFFO1lBQ0YsS0FBSztZQUNMLFNBQVU7WUFDVixTQUFVO1lBQ1YsU0FBVTtZQUNWLFNBQVU7WUFDVixTQUFVO1lBQ1YsU0FBVTtZQUNWLFNBQVU7WUFDVixTQUFVO1lBQ1YsU0FBVTtZQUNWLFNBQVU7U0FDTyxDQUFDO1FBRXRCLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxF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QUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0RGVidWdOb2RlLCB1bnRyYWNrZWQsIHR5cGUgSW5qZWN0b3IsIHR5cGUgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBOZ3RJbmplY3RlZFJlZiB9IGZyb20gJy4uL2RpL3JlZic7XG5pbXBvcnQgeyBOZ3RBcmdzIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9hcmdzJztcbmltcG9ydCB0eXBlIHsgTmd0Q29tbW9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9jb21tb24nO1xuaW1wb3J0IHsgTmd0UGFyZW50IH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9wYXJlbnQnO1xuaW1wb3J0IHsgTmd0U3RvcmUgfSBmcm9tICcuLi9zdG9yZXMvc3RvcmUnO1xuaW1wb3J0IHR5cGUgeyBOZ3RBbnlSZWNvcmQgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBhcHBseVByb3BzIH0gZnJvbSAnLi4vdXRpbHMvYXBwbHktcHJvcHMnO1xuaW1wb3J0IHsgZ2V0TG9jYWxTdGF0ZSB9IGZyb20gJy4uL3V0aWxzL2luc3RhbmNlJztcbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vdXRpbHMvaXMnO1xuaW1wb3J0IHsgTmd0Q29tcG91bmRDbGFzc0lkLCBOZ3RRdWV1ZU9wQ2xhc3NJZCwgTmd0UmVuZGVyZXJDbGFzc0lkIH0gZnJvbSAnLi9lbnVtcyc7XG5pbXBvcnQgeyBTUEVDSUFMX0lOVEVSTkFMX0FERF9DT01NRU5ULCBTUEVDSUFMX1BST1BFUlRJRVMsIGF0dGFjaFRocmVlQ2hpbGQsIHJlbW92ZVRocmVlQ2hpbGQgfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IHR5cGUgTmd0UmVuZGVyZXJSb290U3RhdGUgPSB7XG4gICAgc3RvcmU6IE5ndFN0b3JlO1xuICAgIGNvbXBvdW5kUHJlZml4ZXM6IHN0cmluZ1tdO1xuICAgIGRvY3VtZW50OiBEb2N1bWVudDtcbiAgICBwb3J0YWxzOiBBcnJheTxOZ3RSZW5kZXJlck5vZGU+O1xufTtcblxuZXhwb3J0IHR5cGUgTmd0UXVldWVPcCA9IFt0eXBlOiAnb3AnIHwgJ2NsZWFuVXAnLCBvcDogKCkgPT4gdm9pZCwgZG9uZT86IHRydWVdO1xuXG5leHBvcnQgdHlwZSBOZ3RSZW5kZXJlclN0YXRlID0gW1xuICAgIHR5cGU6ICd0aHJlZScgfCAnY29tcG91bmQnIHwgJ3BvcnRhbCcgfCAnY29tbWVudCcgfCAnZG9tJyxcbiAgICBwYXJlbnQ6IE5ndFJlbmRlcmVyTm9kZSB8IG51bGwsXG4gICAgaW5qZWN0ZWRQYXJlbnQ6IE5ndFJlbmRlcmVyTm9kZSB8IE5ndEluamVjdGVkUmVmPE5ndFJlbmRlcmVyTm9kZT4gfCBudWxsLFxuICAgIGNoaWxkcmVuOiBOZ3RSZW5kZXJlck5vZGVbXSxcbiAgICBkZXN0cm95ZWQ6IGJvb2xlYW4sXG4gICAgY29tcG91bmQ6IFthcHBseUZpcnN0OiBib29sZWFuLCBwcm9wczogUmVjb3JkPHN0cmluZywgYW55Pl0sXG4gICAgY29tcG91bmRQYXJlbnQ6IE5ndFJlbmRlcmVyTm9kZSxcbiAgICBjb21wb3VuZGVkOiBOZ3RSZW5kZXJlck5vZGUsXG4gICAgcXVldWVPcHM6IFNldDxOZ3RRdWV1ZU9wPixcbiAgICBhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgcmF3VmFsdWU6IGFueSxcbiAgICByZWY6IGFueSxcbiAgICBwb3J0YWxDb250YWluZXI6IE5ndFJlbmRlcmVyTm9kZSxcbiAgICBpbmplY3RvckZhY3Rvcnk6ICgpID0+IEluamVjdG9yXG5dO1xuXG5leHBvcnQgdHlwZSBOZ3RSZW5kZXJlck5vZGUgPSB7XG4gICAgX19uZ3RfcmVuZGVyZXJfXzogTmd0UmVuZGVyZXJTdGF0ZTtcbn07XG5cbmV4cG9ydCBjbGFzcyBOZ3RSZW5kZXJlclN0b3JlIHtcbiAgICByZWFkb25seSAjY29tbWVudHMgPSBbXSBhcyBBcnJheTxOZ3RSZW5kZXJlck5vZGU+O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSByb290OiBOZ3RSZW5kZXJlclJvb3RTdGF0ZSkge31cblxuICAgIGNyZWF0ZU5vZGUodHlwZTogTmd0UmVuZGVyZXJTdGF0ZVtOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0sIG5vZGU6IE5ndEFueVJlY29yZCkge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IFtcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIFtdLFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICB1bmRlZmluZWQhLFxuICAgICAgICAgICAgdW5kZWZpbmVkISxcbiAgICAgICAgICAgIHVuZGVmaW5lZCEsXG4gICAgICAgICAgICB1bmRlZmluZWQhLFxuICAgICAgICAgICAgdW5kZWZpbmVkISxcbiAgICAgICAgICAgIHVuZGVmaW5lZCEsXG4gICAgICAgICAgICB1bmRlZmluZWQhLFxuICAgICAgICAgICAgdW5kZWZpbmVkISxcbiAgICAgICAgICAgIHVuZGVmaW5lZCEsXG4gICAgICAgICAgICB1bmRlZmluZWQhLFxuICAgICAgICBdIGFzIE5ndFJlbmRlcmVyU3RhdGU7XG5cbiAgICAgICAgY29uc3QgcmVuZGVyZXJOb2RlID0gT2JqZWN0LmFzc2lnbihub2RlLCB7IF9fbmd0X3JlbmRlcmVyX186IHN0YXRlIH0pO1xuXG4gICAgICAgIC8vIGFzc2lnbiBvd25lckRvY3VtZW50IHRvIG5vZGUgc28gd2UgY2FuIHVzZSBIb3N0TGlzdGVuZXIgaW4gQ29tcG9uZW50XG4gICAgICAgIGlmICghcmVuZGVyZXJOb2RlWydvd25lckRvY3VtZW50J10pIHJlbmRlcmVyTm9kZVsnb3duZXJEb2N1bWVudCddID0gdGhpcy5yb290LmRvY3VtZW50O1xuXG4gICAgICAgIC8vIGFzc2lnbiBpbmplY3RvckZhY3Rvcnkgb24gbm9uLXRocmVlIHR5cGUgc2luY2VcbiAgICAgICAgLy8gcmVuZGVyZXJOb2RlIGlzIGFuIGluc3RhbmNlIG9mIERPTSBOb2RlXG4gICAgICAgIGlmIChzdGF0ZVtOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gIT09ICd0aHJlZScpIHtcbiAgICAgICAgICAgIHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RvckZhY3RvcnldID0gKCkgPT4gZ2V0RGVidWdOb2RlKHJlbmRlcmVyTm9kZSkhLmluamVjdG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbW1lbnQnKSB7XG4gICAgICAgICAgICAvLyB3ZSBhdHRhY2ggYW4gYXJyb3cgZnVuY3Rpb24gdG8gdGhlIENvbW1lbnQgbm9kZVxuICAgICAgICAgICAgLy8gSW4gb3VyIGRpcmVjdGl2ZXMsIHdlIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gdGhlbiBzdGFydCB0cmFja2luZyB0aGUgUmVuZGVyZXJOb2RlXG4gICAgICAgICAgICAvLyB0aGlzIGlzIGRvbmUgdG8gbGltaXQgdGhlIGFtb3VudCBvZiBOb2RlcyB3ZSBuZWVkIHRvIHByb2Nlc3MgZm9yIGdldENyZWF0aW9uU3RhdGVcbiAgICAgICAgICAgIHJlbmRlcmVyTm9kZVtTUEVDSUFMX0lOVEVSTkFMX0FERF9DT01NRU5UXSA9IChub2RlPzogTmd0UmVuZGVyZXJOb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUgJiYgbm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3BvcnRhbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3J0YWxzLnB1c2gobm9kZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jY29tbWVudHMucHVzaChyZW5kZXJlck5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gcmVuZGVyZXJOb2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbXBvdW5kJykge1xuICAgICAgICAgICAgc3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLnF1ZXVlT3BzXSA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC5hdHRyaWJ1dGVzXSA9IHt9O1xuICAgICAgICAgICAgc3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLnByb3BlcnRpZXNdID0ge307XG4gICAgICAgICAgICByZXR1cm4gcmVuZGVyZXJOb2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlbmRlcmVyTm9kZTtcbiAgICB9XG5cbiAgICBzZXRQYXJlbnQobm9kZTogTmd0UmVuZGVyZXJOb2RlLCBwYXJlbnQ6IE5ndFJlbmRlcmVyTm9kZSkge1xuICAgICAgICBpZiAoIW5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XSkge1xuICAgICAgICAgICAgbm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdID0gcGFyZW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkQ2hpbGQobm9kZTogTmd0UmVuZGVyZXJOb2RlLCBjaGlsZDogTmd0UmVuZGVyZXJOb2RlKSB7XG4gICAgICAgIGlmICghbm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jaGlsZHJlbl0uaW5jbHVkZXMoY2hpbGQpKSB7XG4gICAgICAgICAgICBub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNoaWxkcmVuXS5wdXNoKGNoaWxkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZUNoaWxkKG5vZGU6IE5ndFJlbmRlcmVyTm9kZSwgY2hpbGQ6IE5ndFJlbmRlcmVyTm9kZSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY2hpbGRyZW5dLmZpbmRJbmRleCgoYykgPT4gY2hpbGQgPT09IGMpO1xuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgbm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jaGlsZHJlbl0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldENvbXBvdW5kKGNvbXBvdW5kOiBOZ3RSZW5kZXJlck5vZGUsIGluc3RhbmNlOiBOZ3RSZW5kZXJlck5vZGUpIHtcbiAgICAgICAgY29uc3QgclMgPSBjb21wb3VuZC5fX25ndF9yZW5kZXJlcl9fO1xuICAgICAgICByU1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0gPSBpbnN0YW5jZTtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IE9iamVjdC5rZXlzKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5hdHRyaWJ1dGVzXSk7XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhyU1tOZ3RSZW5kZXJlckNsYXNzSWQucHJvcGVydGllc10pO1xuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlBdHRyaWJ1dGUoaW5zdGFuY2UsIGtleSwgclNbTmd0UmVuZGVyZXJDbGFzc0lkLmF0dHJpYnV0ZXNdW2tleV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgcHJvcGVydGllcykge1xuICAgICAgICAgICAgdGhpcy5hcHBseVByb3BlcnR5KGluc3RhbmNlLCBrZXksIHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5wcm9wZXJ0aWVzXVtrZXldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZXhlY3V0ZU9wZXJhdGlvbihjb21wb3VuZCk7XG4gICAgfVxuXG4gICAgcXVldWVPcGVyYXRpb24obm9kZTogTmd0UmVuZGVyZXJOb2RlLCBvcDogTmd0UXVldWVPcCkge1xuICAgICAgICBub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnF1ZXVlT3BzXS5hZGQob3ApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXhlY3V0ZU9wZXJhdGlvbihub2RlOiBOZ3RSZW5kZXJlck5vZGUsIHR5cGU6IE5ndFF1ZXVlT3BbTmd0UXVldWVPcENsYXNzSWQudHlwZV0gPSAnb3AnKSB7XG4gICAgICAgIGNvbnN0IHJTID0gbm9kZS5fX25ndF9yZW5kZXJlcl9fO1xuICAgICAgICBpZiAoclNbTmd0UmVuZGVyZXJDbGFzc0lkLnF1ZXVlT3BzXT8uc2l6ZSkge1xuICAgICAgICAgICAgclNbTmd0UmVuZGVyZXJDbGFzc0lkLnF1ZXVlT3BzXS5mb3JFYWNoKChvcCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChvcFtOZ3RRdWV1ZU9wQ2xhc3NJZC50eXBlXSA9PT0gdHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBvcFtOZ3RRdWV1ZU9wQ2xhc3NJZC5vcF0oKTtcbiAgICAgICAgICAgICAgICAgICAgclNbTmd0UmVuZGVyZXJDbGFzc0lkLnF1ZXVlT3BzXS5kZWxldGUob3ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvY2Vzc1BvcnRhbENvbnRhaW5lcihwb3J0YWw6IE5ndFJlbmRlcmVyTm9kZSkge1xuICAgICAgICBjb25zdCBpbmplY3RvckZhY3RvcnkgPSBwb3J0YWwuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0b3JGYWN0b3J5XTtcbiAgICAgICAgY29uc3QgaW5qZWN0b3IgPSBpbmplY3RvckZhY3Rvcnk/LigpO1xuICAgICAgICBpZiAoIWluamVjdG9yKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgcG9ydGFsU3RvcmUgPSBpbmplY3Rvci5nZXQoTmd0U3RvcmUsIG51bGwpO1xuICAgICAgICBpZiAoIXBvcnRhbFN0b3JlKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgcG9ydGFsQ29udGFpbmVyID0gcG9ydGFsU3RvcmUuZ2V0KCdzY2VuZScpO1xuICAgICAgICBpZiAoIXBvcnRhbENvbnRhaW5lcikgcmV0dXJuO1xuXG4gICAgICAgIHBvcnRhbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wb3J0YWxDb250YWluZXJdID0gdGhpcy5jcmVhdGVOb2RlKCd0aHJlZScsIHBvcnRhbENvbnRhaW5lcik7XG4gICAgfVxuXG4gICAgYXBwbHlBdHRyaWJ1dGUobm9kZTogTmd0UmVuZGVyZXJOb2RlLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgclMgPSBub2RlLl9fbmd0X3JlbmRlcmVyX187XG4gICAgICAgIGlmIChyU1tOZ3RSZW5kZXJlckNsYXNzSWQuZGVzdHJveWVkXSkgcmV0dXJuO1xuICAgICAgICBpZiAobmFtZSA9PT0gU1BFQ0lBTF9QUk9QRVJUSUVTLlJFTkRFUl9QUklPUklUWSkge1xuICAgICAgICAgICAgLy8gcHJpb3JpdHkgbmVlZHMgdG8gYmUgc2V0IGFzIGFuIGF0dHJpYnV0ZSBzdHJpbmcgc28gdGhhdCB0aGV5IGNhbiBiZSBzZXQgYXMgZWFybHkgYXMgcG9zc2libGVcbiAgICAgICAgICAgIC8vIHdlIGNvbnZlcnQgdGhhdCBzdHJpbmcgdG8gYSBudW1iZXIuIGlmIGl0J3MgaW52YWxpZCwgMFxuICAgICAgICAgICAgbGV0IHByaW9yaXR5ID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChpc05hTihwcmlvcml0eSkpIHtcbiAgICAgICAgICAgICAgICBwcmlvcml0eSA9IDA7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBbTkdUXSBcInByaW9yaXR5XCIgaXMgYW4gaW52YWxpZCBudW1iZXIsIGRlZmF1bHQgdG8gMGApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ2V0TG9jYWxTdGF0ZShub2RlKS5wcmlvcml0eSA9IHByaW9yaXR5O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5hbWUgPT09IFNQRUNJQUxfUFJPUEVSVElFUy5DT01QT1VORCkge1xuICAgICAgICAgICAgLy8gd2Ugc2V0IHRoZSBjb21wb3VuZCBwcm9wZXJ0eSBvbiBpbnN0YW5jZSBub2RlIG5vdyBzbyB3ZSBrbm93IHRoYXQgdGhpcyBpbnN0YW5jZSBpcyBiZWluZyBjb21wb3VuZGVkXG4gICAgICAgICAgICByU1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRdID0gW3ZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PT0gJ2ZpcnN0Jywge31dO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5hbWUgPT09IFNQRUNJQUxfUFJPUEVSVElFUy5BVFRBQ0gpIHtcbiAgICAgICAgICAgIC8vIGhhbmRsZSBhdHRhY2ggYXMgdHJpbmdcbiAgICAgICAgICAgIGNvbnN0IHBhdGhzID0gdmFsdWUuc3BsaXQoJy4nKTtcbiAgICAgICAgICAgIGlmIChwYXRocy5sZW5ndGgpIGdldExvY2FsU3RhdGUobm9kZSkuYXR0YWNoID0gcGF0aHM7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmFtZSA9PT0gU1BFQ0lBTF9QUk9QRVJUSUVTLlZBTFVFKSB7XG4gICAgICAgICAgICAvLyBjb2VyY2lvblxuICAgICAgICAgICAgbGV0IG1heWJlQ29lcmNlZDogYW55ID0gdmFsdWU7XG4gICAgICAgICAgICBpZiAobWF5YmVDb2VyY2VkID09PSAnJyB8fCBtYXliZUNvZXJjZWQgPT09ICd0cnVlJyB8fCBtYXliZUNvZXJjZWQgPT09ICdmYWxzZScpIHtcbiAgICAgICAgICAgICAgICBtYXliZUNvZXJjZWQgPSBtYXliZUNvZXJjZWQgPT09ICd0cnVlJyB8fCBtYXliZUNvZXJjZWQgPT09ICcnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghaXNOYU4oTnVtYmVyKG1heWJlQ29lcmNlZCkpKSB7XG4gICAgICAgICAgICAgICAgbWF5YmVDb2VyY2VkID0gTnVtYmVyKG1heWJlQ29lcmNlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByU1tOZ3RSZW5kZXJlckNsYXNzSWQucmF3VmFsdWVdID0gbWF5YmVDb2VyY2VkO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgYXBwbHlQcm9wcyhub2RlLCB7IFtuYW1lXTogdmFsdWUgfSk7XG4gICAgfVxuXG4gICAgYXBwbHlQcm9wZXJ0eShub2RlOiBOZ3RSZW5kZXJlck5vZGUsIG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgICAgICBjb25zdCByUyA9IG5vZGUuX19uZ3RfcmVuZGVyZXJfXztcbiAgICAgICAgaWYgKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5kZXN0cm95ZWRdKSByZXR1cm47XG5cbiAgICAgICAgLy8gW3JlZl1cbiAgICAgICAgaWYgKG5hbWUgPT09IFNQRUNJQUxfUFJPUEVSVElFUy5SRUYgJiYgaXMucmVmKHZhbHVlKSkge1xuICAgICAgICAgICAgclNbTmd0UmVuZGVyZXJDbGFzc0lkLnJlZl0gPSB2YWx1ZTtcbiAgICAgICAgICAgIHZhbHVlLm5hdGl2ZUVsZW1lbnQgPSBub2RlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyZW50ID0gZ2V0TG9jYWxTdGF0ZShub2RlKS5wYXJlbnQoKSB8fCByU1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XTtcblxuICAgICAgICAvLyBbcmF3VmFsdWVdXG4gICAgICAgIGlmIChnZXRMb2NhbFN0YXRlKG5vZGUpLmlzUmF3ICYmIG5hbWUgPT09IFNQRUNJQUxfUFJPUEVSVElFUy5WQUxVRSkge1xuICAgICAgICAgICAgclNbTmd0UmVuZGVyZXJDbGFzc0lkLnJhd1ZhbHVlXSA9IHZhbHVlO1xuICAgICAgICAgICAgaWYgKHBhcmVudCkgYXR0YWNoVGhyZWVDaGlsZChwYXJlbnQsIG5vZGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gW2F0dGFjaF1cbiAgICAgICAgaWYgKG5hbWUgPT09IFNQRUNJQUxfUFJPUEVSVElFUy5BVFRBQ0gpIHtcbiAgICAgICAgICAgIGdldExvY2FsU3RhdGUobm9kZSkuYXR0YWNoID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5tYXAoKHYpID0+IHYudG9TdHJpbmcoKSkgOiB2YWx1ZTtcbiAgICAgICAgICAgIGlmIChwYXJlbnQpIGF0dGFjaFRocmVlQ2hpbGQocGFyZW50LCBub2RlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbXBvdW5kID0gclNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kXTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29tcG91bmQ/LltOZ3RDb21wb3VuZENsYXNzSWQucHJvcHNdICYmXG4gICAgICAgICAgICBuYW1lIGluIGNvbXBvdW5kW05ndENvbXBvdW5kQ2xhc3NJZC5wcm9wc10gJiZcbiAgICAgICAgICAgICFjb21wb3VuZFtOZ3RDb21wb3VuZENsYXNzSWQuYXBwbHlGaXJzdF1cbiAgICAgICAgKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGNvbXBvdW5kW05ndENvbXBvdW5kQ2xhc3NJZC5wcm9wc11bbmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgYXBwbHlQcm9wcyhub2RlLCB7IFtuYW1lXTogdmFsdWUgfSk7XG4gICAgfVxuXG4gICAgaXNDb21wb3VuZChuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm9vdC5jb21wb3VuZFByZWZpeGVzLnNvbWUoKHByZWZpeCkgPT4gbmFtZS5zdGFydHNXaXRoKHByZWZpeCkpO1xuICAgIH1cblxuICAgIGlzRE9NKG5vZGU6IE5ndEFueVJlY29yZCkge1xuICAgICAgICBjb25zdCByUyA9IG5vZGVbJ19fbmd0X3JlbmRlcmVyX18nXTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICFyUyB8fFxuICAgICAgICAgICAgKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSAhPT0gJ2NvbXBvdW5kJyAmJlxuICAgICAgICAgICAgICAgIChub2RlIGluc3RhbmNlb2YgRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIFdpbmRvdykpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0IHJvb3RTY2VuZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm9vdC5zdG9yZS5nZXQoJ3NjZW5lJyk7XG4gICAgfVxuXG4gICAgZ2V0IHBvcnRhbHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvb3QucG9ydGFscztcbiAgICB9XG5cbiAgICBnZXRDbG9zZXN0UGFyZW50V2l0aEluc3RhbmNlKG5vZGU6IE5ndFJlbmRlcmVyTm9kZSk6IE5ndFJlbmRlcmVyTm9kZSB8IG51bGwge1xuICAgICAgICBsZXQgcGFyZW50ID0gbm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdO1xuICAgICAgICB3aGlsZSAocGFyZW50ICYmIHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSAhPT0gJ3RocmVlJykge1xuICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl1cbiAgICAgICAgICAgICAgICA/IHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wb3J0YWxDb250YWluZXJdXG4gICAgICAgICAgICAgICAgOiBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfVxuXG4gICAgZ2V0Q2xvc2VzdFBhcmVudFdpdGhDb21wb3VuZChub2RlOiBOZ3RSZW5kZXJlck5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRQYXJlbnRdKSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZFBhcmVudF07XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcGFyZW50ID0gbm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBwYXJlbnQgJiZcbiAgICAgICAgICAgIHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbXBvdW5kJyAmJlxuICAgICAgICAgICAgIXBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZSAoXG4gICAgICAgICAgICBwYXJlbnQgJiZcbiAgICAgICAgICAgIChwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScgfHxcbiAgICAgICAgICAgICAgICAhcGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kUGFyZW50XSB8fFxuICAgICAgICAgICAgICAgIHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSAhPT0gJ2NvbXBvdW5kJylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcGFyZW50KSByZXR1cm47XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgcGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnICYmXG4gICAgICAgICAgICBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRQYXJlbnRdXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZFBhcmVudF07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGdldENyZWF0aW9uU3RhdGUoKSB7XG4gICAgICAgIGNvbnN0IGluamVjdGVkQXJncyA9IHRoaXMuZmlyc3ROb25JbmplY3RlZERpcmVjdGl2ZShOZ3RBcmdzKT8uYXJncyB8fCBbXTtcbiAgICAgICAgY29uc3QgaW5qZWN0ZWRQYXJlbnQgPSB0aGlzLmZpcnN0Tm9uSW5qZWN0ZWREaXJlY3RpdmUoTmd0UGFyZW50KT8ucGFyZW50IHx8IG51bGw7XG4gICAgICAgIGNvbnN0IHN0b3JlID0gdGhpcy50cnlHZXRQb3J0YWxTdG9yZSgpO1xuICAgICAgICByZXR1cm4geyBpbmplY3RlZEFyZ3MsIGluamVjdGVkUGFyZW50LCBzdG9yZSB9O1xuICAgIH1cblxuICAgIGRlc3Ryb3kobm9kZTogTmd0UmVuZGVyZXJOb2RlLCBwYXJlbnQ/OiBOZ3RSZW5kZXJlck5vZGUpIHtcbiAgICAgICAgY29uc3QgclMgPSBub2RlLl9fbmd0X3JlbmRlcmVyX187XG4gICAgICAgIGlmIChyU1tOZ3RSZW5kZXJlckNsYXNzSWQuZGVzdHJveWVkXSkgcmV0dXJuO1xuICAgICAgICBpZiAoclNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB7XG4gICAgICAgICAgICByU1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRdID0gdW5kZWZpbmVkITtcbiAgICAgICAgICAgIHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZFBhcmVudF0gPSB1bmRlZmluZWQhO1xuXG4gICAgICAgICAgICBjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShub2RlKTtcbiAgICAgICAgICAgIGlmIChsb2NhbFN0YXRlLm9iamVjdHMpIHtcbiAgICAgICAgICAgICAgICB1bnRyYWNrZWQobG9jYWxTdGF0ZS5vYmplY3RzKS5mb3JFYWNoKChvYmopID0+IHRoaXMuZGVzdHJveShvYmosIHBhcmVudCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobG9jYWxTdGF0ZS5ub25PYmplY3RzKSB7XG4gICAgICAgICAgICAgICAgdW50cmFja2VkKGxvY2FsU3RhdGUubm9uT2JqZWN0cykuZm9yRWFjaCgob2JqKSA9PiB0aGlzLmRlc3Ryb3kob2JqLCBwYXJlbnQpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGxvY2FsU3RhdGUuYWZ0ZXJVcGRhdGUpIGxvY2FsU3RhdGUuYWZ0ZXJVcGRhdGUuY29tcGxldGUoKTtcbiAgICAgICAgICAgIGlmIChsb2NhbFN0YXRlLmFmdGVyQXR0YWNoKSBsb2NhbFN0YXRlLmFmdGVyQXR0YWNoLmNvbXBsZXRlKCk7XG5cbiAgICAgICAgICAgIGRlbGV0ZSAobG9jYWxTdGF0ZSBhcyBOZ3RBbnlSZWNvcmQpWydvYmplY3RzJ107XG4gICAgICAgICAgICBkZWxldGUgKGxvY2FsU3RhdGUgYXMgTmd0QW55UmVjb3JkKVsnbm9uT2JqZWN0cyddO1xuICAgICAgICAgICAgZGVsZXRlIChsb2NhbFN0YXRlIGFzIE5ndEFueVJlY29yZClbJ25hdGl2ZVByb3BzJ107XG4gICAgICAgICAgICBkZWxldGUgKGxvY2FsU3RhdGUgYXMgTmd0QW55UmVjb3JkKVsnYWRkJ107XG4gICAgICAgICAgICBkZWxldGUgKGxvY2FsU3RhdGUgYXMgTmd0QW55UmVjb3JkKVsncmVtb3ZlJ107XG4gICAgICAgICAgICBkZWxldGUgKGxvY2FsU3RhdGUgYXMgTmd0QW55UmVjb3JkKVsnYWZ0ZXJVcGRhdGUnXTtcbiAgICAgICAgICAgIGRlbGV0ZSAobG9jYWxTdGF0ZSBhcyBOZ3RBbnlSZWNvcmQpWydhZnRlckF0dGFjaCddO1xuICAgICAgICAgICAgZGVsZXRlIChsb2NhbFN0YXRlIGFzIE5ndEFueVJlY29yZClbJ3N0b3JlJ107XG4gICAgICAgICAgICBkZWxldGUgKGxvY2FsU3RhdGUgYXMgTmd0QW55UmVjb3JkKVsnaGFuZGxlcnMnXTtcblxuICAgICAgICAgICAgaWYgKCFsb2NhbFN0YXRlLnByaW1pdGl2ZSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSAobm9kZSBhcyBOZ3RBbnlSZWNvcmQpWydfX25ndF9fJ107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoclNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnY29tbWVudCcpIHtcbiAgICAgICAgICAgIHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RvckZhY3RvcnldID0gbnVsbCE7XG4gICAgICAgICAgICBkZWxldGUgKG5vZGUgYXMgTmd0QW55UmVjb3JkKVtTUEVDSUFMX0lOVEVSTkFMX0FERF9DT01NRU5UXTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy4jY29tbWVudHMuZmluZEluZGV4KChjb21tZW50KSA9PiBjb21tZW50ID09PSBub2RlKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jY29tbWVudHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdwb3J0YWwnKSB7XG4gICAgICAgICAgICByU1tOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0b3JGYWN0b3J5XSA9IG51bGwhO1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnBvcnRhbHMuZmluZEluZGV4KChwb3J0YWwpID0+IHBvcnRhbCA9PT0gbm9kZSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgIHRoaXMucG9ydGFscy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbXBvdW5kJykge1xuICAgICAgICAgICAgclNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdID0gdW5kZWZpbmVkITtcbiAgICAgICAgICAgIHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5hdHRyaWJ1dGVzXSA9IG51bGwhO1xuICAgICAgICAgICAgclNbTmd0UmVuZGVyZXJDbGFzc0lkLnByb3BlcnRpZXNdID0gbnVsbCE7XG4gICAgICAgICAgICB0aGlzLmV4ZWN1dGVPcGVyYXRpb24obm9kZSwgJ2NsZWFuVXAnKTtcbiAgICAgICAgICAgIHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5xdWV1ZU9wc10uY2xlYXIoKTtcbiAgICAgICAgICAgIHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5xdWV1ZU9wc10gPSBudWxsITtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyU1tOZ3RSZW5kZXJlckNsYXNzSWQucmVmXSkge1xuICAgICAgICAgICAgLy8gbnVsbGlmeSByZWZcbiAgICAgICAgICAgIHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5yZWZdLm5hdGl2ZUVsZW1lbnQgPSBudWxsO1xuICAgICAgICAgICAgclNbTmd0UmVuZGVyZXJDbGFzc0lkLnJlZl0gPSB1bmRlZmluZWQhO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbnVsbGlmeSBwYXJlbnRcbiAgICAgICAgclNbTmd0UmVuZGVyZXJDbGFzc0lkLnBhcmVudF0gPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IHJlbmRlckNoaWxkIG9mIHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jaGlsZHJlbl0gfHwgW10pIHtcbiAgICAgICAgICAgIGlmIChyZW5kZXJDaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJyAmJiBwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVUaHJlZUNoaWxkKHBhcmVudCwgcmVuZGVyQ2hpbGQsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kZXN0cm95KHJlbmRlckNoaWxkLCBwYXJlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgclNbTmd0UmVuZGVyZXJDbGFzc0lkLmNoaWxkcmVuXSA9IFtdO1xuICAgICAgICByU1tOZ3RSZW5kZXJlckNsYXNzSWQuZGVzdHJveWVkXSA9IHRydWU7XG4gICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQocGFyZW50LCBub2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZmlyc3ROb25JbmplY3RlZERpcmVjdGl2ZTxUIGV4dGVuZHMgTmd0Q29tbW9uRGlyZWN0aXZlPihkaXI6IFR5cGU8VD4pIHtcbiAgICAgICAgbGV0IGRpcmVjdGl2ZTogVCB8IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgaSA9IHRoaXMuI2NvbW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgICAgIHdoaWxlIChpID49IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbW1lbnQgPSB0aGlzLiNjb21tZW50c1tpXTtcbiAgICAgICAgICAgIGlmIChjb21tZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmRlc3Ryb3llZF0pIHtcbiAgICAgICAgICAgICAgICBpLS07XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpbmplY3RvciA9IGNvbW1lbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0b3JGYWN0b3J5XSgpO1xuICAgICAgICAgICAgaWYgKCFpbmplY3Rvcikge1xuICAgICAgICAgICAgICAgIGktLTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5qZWN0b3IuZ2V0KGRpciwgbnVsbCk7XG4gICAgICAgICAgICBpZiAoaW5zdGFuY2UgJiYgaW5zdGFuY2UudmFsaWRhdGUoKSkge1xuICAgICAgICAgICAgICAgIGRpcmVjdGl2ZSA9IGluc3RhbmNlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLS07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGlyZWN0aXZlO1xuICAgIH1cblxuICAgIHByaXZhdGUgdHJ5R2V0UG9ydGFsU3RvcmUoKSB7XG4gICAgICAgIGxldCBzdG9yZTogTmd0U3RvcmUgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8vIHdlIG9ubHkgY2FyZSBhYm91dCB0aGUgcG9ydGFsIHN0YXRlcyBiZWNhdXNlIE5ndFN0b3JlIG9ubHkgZGlmZmVycyBwZXIgUG9ydGFsXG4gICAgICAgIGxldCBpID0gdGhpcy5wb3J0YWxzLmxlbmd0aCAtIDE7XG4gICAgICAgIHdoaWxlIChpID49IDApIHtcbiAgICAgICAgICAgIC8vIGxvb3AgdGhyb3VnaCB0aGUgcG9ydGFsIHN0YXRlIGJhY2t3YXJkcyB0byBmaW5kIHRoZSBjbG9zZXN0IE5ndFN0b3JlXG4gICAgICAgICAgICBjb25zdCBwb3J0YWwgPSB0aGlzLnBvcnRhbHNbaV07XG4gICAgICAgICAgICBpZiAocG9ydGFsLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmRlc3Ryb3llZF0pIHtcbiAgICAgICAgICAgICAgICBpLS07XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGluamVjdG9yID0gcG9ydGFsLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdG9yRmFjdG9yeV0oKTtcbiAgICAgICAgICAgIGlmICghaW5qZWN0b3IpIHtcbiAgICAgICAgICAgICAgICBpLS07XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IGluamVjdG9yLmdldChOZ3RTdG9yZSwgbnVsbCk7XG4gICAgICAgICAgICAvLyBvbmx5IHRoZSBpbnN0YW5jZSB3aXRoIHByZXZpb3VzU3RvcmUgc2hvdWxkIHBhc3NcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS5nZXQoJ3ByZXZpb3VzU3RvcmUnKSkge1xuICAgICAgICAgICAgICAgIHN0b3JlID0gaW5zdGFuY2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpLS07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0b3JlIHx8IHRoaXMucm9vdCEuc3RvcmU7XG4gICAgfVxufVxuIl19
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
import { Inject, Injectable, Optional, computed, untracked, } from '@angular/core';
|
|
2
|
-
import { createSignal } from '../utils/signal';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
const STORE_COMPUTED_KEY = '__ngt_store_computed__';
|
|
5
|
-
class NgtSignalStore {
|
|
6
|
-
#state;
|
|
7
|
-
#computedCache = new Map();
|
|
8
|
-
constructor(initialState = {}) {
|
|
9
|
-
initialState ??= {};
|
|
10
|
-
this.#state = createSignal(Object.assign(initialState, { __ngt_dummy_state__: Date.now() }));
|
|
11
|
-
}
|
|
12
|
-
select(...keysAndOptions) {
|
|
13
|
-
if (keysAndOptions.length === 0)
|
|
14
|
-
return this.#state.asReadonly();
|
|
15
|
-
if (keysAndOptions.length === 1 && typeof keysAndOptions[0] === 'object') {
|
|
16
|
-
if (!this.#computedCache.has(STORE_COMPUTED_KEY)) {
|
|
17
|
-
this.#computedCache.set(STORE_COMPUTED_KEY, computed(() => this.#state(), keysAndOptions));
|
|
18
|
-
return this.#computedCache.get(STORE_COMPUTED_KEY);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
const [keys, options] = parseOptions(keysAndOptions);
|
|
22
|
-
const joinedKeys = keys.join('-');
|
|
23
|
-
if (!this.#computedCache.has(joinedKeys)) {
|
|
24
|
-
this.#computedCache.set(joinedKeys, computed(() => {
|
|
25
|
-
const state = this.#state();
|
|
26
|
-
return keys.reduce((value, key) => value[key], state);
|
|
27
|
-
}, options));
|
|
28
|
-
}
|
|
29
|
-
return this.#computedCache.get(joinedKeys);
|
|
30
|
-
}
|
|
31
|
-
get(...keys) {
|
|
32
|
-
const state = untracked(this.#state);
|
|
33
|
-
if (keys.length === 0)
|
|
34
|
-
return state;
|
|
35
|
-
return keys.reduce((value, key) => value[key], state);
|
|
36
|
-
}
|
|
37
|
-
set(state) {
|
|
38
|
-
const updater = (previous) => {
|
|
39
|
-
const partial = typeof state === 'function' ? state(previous) : state;
|
|
40
|
-
Object.keys(partial).forEach((key) => {
|
|
41
|
-
const partialKey = key;
|
|
42
|
-
if (partial[partialKey] === undefined && previous[partialKey] != null) {
|
|
43
|
-
partial[partialKey] = previous[partialKey];
|
|
44
|
-
}
|
|
45
|
-
});
|
|
46
|
-
return partial;
|
|
47
|
-
};
|
|
48
|
-
this.#state.update((previous) => ({ ...previous, ...updater(previous) }));
|
|
49
|
-
// this.#state.update(previous => ({...previous, ...(typeof state === 'function' ? state(previous) : state)}))
|
|
50
|
-
}
|
|
51
|
-
patch(state) {
|
|
52
|
-
const updater = (previous) => {
|
|
53
|
-
Object.keys(state).forEach((key) => {
|
|
54
|
-
const partialKey = key;
|
|
55
|
-
if (state[partialKey] === undefined && previous[partialKey] != null) {
|
|
56
|
-
state[partialKey] = previous[partialKey];
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
return state;
|
|
60
|
-
};
|
|
61
|
-
this.#state.update((previous) => ({ ...updater(previous), ...previous }));
|
|
62
|
-
}
|
|
63
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtSignalStore, deps: [{ token: 'INITIAL_STATE', optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
64
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtSignalStore }); }
|
|
65
|
-
}
|
|
66
|
-
export { NgtSignalStore };
|
|
67
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtSignalStore, decorators: [{
|
|
68
|
-
type: Injectable
|
|
69
|
-
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
70
|
-
type: Optional
|
|
71
|
-
}, {
|
|
72
|
-
type: Inject,
|
|
73
|
-
args: ['INITIAL_STATE']
|
|
74
|
-
}] }]; } });
|
|
75
|
-
function parseOptions(keysAndOptions) {
|
|
76
|
-
if (typeof keysAndOptions.at(-1) === 'object') {
|
|
77
|
-
return [keysAndOptions.slice(0, -1), keysAndOptions.at(-1)];
|
|
78
|
-
}
|
|
79
|
-
return [keysAndOptions];
|
|
80
|
-
}
|
|
81
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsLnN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlL3NyYy9saWIvc3RvcmVzL3NpZ25hbC5zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsTUFBTSxFQUNOLFVBQVUsRUFDVixRQUFRLEVBQ1IsUUFBUSxFQUNSLFNBQVMsR0FJWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBRS9DLE1BQU0sa0JBQWtCLEdBQUcsd0JBQWlDLENBQUM7QUFFN0QsTUFDYSxjQUFjO0lBQ2QsTUFBTSxDQUF5QjtJQUMvQixjQUFjLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUVwQyxZQUdJLGVBQWdDLEVBQWdDO1FBRWhFLFlBQVksS0FBSyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBVyxDQUFDLENBQUM7SUFDM0csQ0FBQztJQTJCRCxNQUFNLENBQUMsR0FBRyxjQUFxQjtRQUMzQixJQUFJLGNBQWMsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNqRSxJQUFJLGNBQWMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLE9BQU8sY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtZQUN0RSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsRUFBRTtnQkFDOUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQ25CLGtCQUFrQixFQUNsQixRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFB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QUFDLENBQUM7aUJBQzVDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDLENBQUM7UUFDRixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlFLENBQUM7OEdBaEhRLGNBQWMsa0JBTVgsZUFBZTtrSEFObEIsY0FBYzs7U0FBZCxjQUFjOzJGQUFkLGNBQWM7a0JBRDFCLFVBQVU7OzBCQU1GLFFBQVE7OzBCQUNSLE1BQU07MkJBQUMsZUFBZTs7QUE2Ry9CLFNBQVMsWUFBWSxDQUFDLGNBQXFCO0lBQ3ZDLElBQUksT0FBTyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO1FBQzNDLE9BQU8sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQy9EO0lBRUQsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQzVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEluamVjdCxcbiAgICBJbmplY3RhYmxlLFxuICAgIE9wdGlvbmFsLFxuICAgIGNvbXB1dGVkLFxuICAgIHVudHJhY2tlZCxcbiAgICB0eXBlIENyZWF0ZUNvbXB1dGVkT3B0aW9ucyxcbiAgICB0eXBlIFNpZ25hbCxcbiAgICB0eXBlIFdyaXRhYmxlU2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgTmd0QW55UmVjb3JkIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgY3JlYXRlU2lnbmFsIH0gZnJvbSAnLi4vdXRpbHMvc2lnbmFsJztcblxuY29uc3QgU1RPUkVfQ09NUFVURURfS0VZID0gJ19fbmd0X3N0b3JlX2NvbXB1dGVkX18nIGFzIGNvbnN0O1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTmd0U2lnbmFsU3RvcmU8VFN0YXRlIGV4dGVuZHMgb2JqZWN0PiB7XG4gICAgcmVhZG9ubHkgI3N0YXRlOiBXcml0YWJsZVNpZ25hbDxUU3RhdGU+O1xuICAgIHJlYWRvbmx5ICNjb21wdXRlZENhY2hlID0gbmV3IE1hcCgpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBPcHRpb25hbCgpXG4gICAgICAgIEBJbmplY3QoJ0lOSVRJQUxfU1RBVEUnKVxuICAgICAgICBpbml0aWFsU3RhdGU6IFBhcnRpYWw8VFN0YXRlPiA9IHt9IGFzIHVua25vd24gYXMgUGFydGlhbDxUU3RhdGU+XG4gICAgKSB7XG4gICAgICAgIGluaXRpYWxTdGF0ZSA/Pz0ge307XG4gICAgICAgIHRoaXMuI3N0YXRlID0gY3JlYXRlU2lnbmFsKE9iamVjdC5hc3NpZ24oaW5pdGlhbFN0YXRlLCB7IF9fbmd0X2R1bW15X3N0YXRlX186IERhdGUubm93KCkgfSkgYXMgVFN0YXRlKTtcbiAgICB9XG5cbiAgICBzZWxlY3Q8XG4gICAgICAgIFRLZXkxIGV4dGVuZHMga2V5b2YgVFN0YXRlLFxuICAgICAgICBUS2V5MiBleHRlbmRzIGtleW9mIFRTdGF0ZVtUS2V5MV0sXG4gICAgICAgIFRLZXkzIGV4dGVuZHMga2V5b2YgVFN0YXRlW1RLZXkxXVtUS2V5Ml0sXG4gICAgICAgIFRLZXk0IGV4dGVuZHMga2V5b2YgVFN0YXRlW1RLZXkxXVtUS2V5Ml1bVEtleTNdXG4gICAgPihcbiAgICAgICAga2V5MTogVEtleTEsXG4gICAgICAgIGtleTI6IFRLZXkyLFxuICAgICAgICBrZXkzOiBUS2V5MyxcbiAgICAgICAga2V5NDogVEtleTQsXG4gICAgICAgIG9wdGlvbnM/OiBDcmVhdGVDb21wdXRlZE9wdGlvbnM8VFN0YXRlW1RLZXkxXVtUS2V5Ml1bVEtleTNdW1RLZXk0XT5cbiAgICApOiBTaWduYWw8VFN0YXRlW1RLZXkxXVtUS2V5Ml1bVEtleTNdW1RLZXk0XT47XG4gICAgc2VsZWN0PFRLZXkxIGV4dGVuZHMga2V5b2YgVFN0YXRlLCBUS2V5MiBleHRlbmRzIGtleW9mIFRTdGF0ZVtUS2V5MV0sIFRLZXkzIGV4dGVuZHMga2V5b2YgVFN0YXRlW1RLZXkxXVtUS2V5Ml0+KFxuICAgICAgICBrZXkxOiBUS2V5MSxcbiAgICAgICAga2V5MjogVEtleTIsXG4gICAgICAgIGtleTM6IFRLZXkzLFxuICAgICAgICBvcHRpb25zPzogQ3JlYXRlQ29tcHV0ZWRPcHRpb25zPFRTdGF0ZVtUS2V5MV1bVEtleTJdW1RLZXkzXT5cbiAgICApOiBTaWduYWw8VFN0YXRlW1RLZXkxXVtUS2V5Ml1bVEtleTNdPjtcbiAgICBzZWxlY3Q8VEtleTEgZXh0ZW5kcyBrZXlvZiBUU3RhdGUsIFRLZXkyIGV4dGVuZHMga2V5b2YgVFN0YXRlW1RLZXkxXT4oXG4gICAgICAgIGtleTE6IFRLZXkxLFxuICAgICAgICBrZXkyOiBUS2V5MixcbiAgICAgICAgb3B0aW9ucz86IENyZWF0ZUNvbXB1dGVkT3B0aW9uczxUU3RhdGVbVEtleTFdW1RLZXkyXT5cbiAgICApOiBTaWduYWw8VFN0YXRlW1RLZXkxXVtUS2V5Ml0+O1xuICAgIHNlbGVjdDxUS2V5IGV4dGVuZHMga2V5b2YgVFN0YXRlPihrZXk6IFRLZXksIG9wdGlvbnM/OiBDcmVhdGVDb21wdXRlZE9wdGlvbnM8VFN0YXRlW1RLZXldPik6IFNpZ25hbDxUU3RhdGVbVEtleV0+O1xuICAgIHNlbGVjdChvcHRpb25zPzogQ3JlYXRlQ29tcHV0ZWRPcHRpb25zPFRTdGF0ZT4pOiBTaWduYWw8VFN0YXRlPjtcbiAgICBzZWxlY3QoLi4ua2V5c0FuZE9wdGlvbnM6IGFueVtdKSB7XG4gICAgICAgIGlmIChrZXlzQW5kT3B0aW9ucy5sZW5ndGggPT09IDApIHJldHVybiB0aGlzLiNzdGF0ZS5hc1JlYWRvbmx5KCk7XG4gICAgICAgIGlmIChrZXlzQW5kT3B0aW9ucy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGtleXNBbmRPcHRpb25zWzBdID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLiNjb21wdXRlZENhY2hlLmhhcyhTVE9SRV9DT01QVVRFRF9LRVkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jY29tcHV0ZWRDYWNoZS5zZXQoXG4gICAgICAgICAgICAgICAgICAgIFNUT1JFX0NPTVBVVEVEX0tFWSxcbiAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWQoKCkgPT4gdGhpcy4jc3RhdGUoKSwga2V5c0FuZE9wdGlvbnMgYXMgQ3JlYXRlQ29tcHV0ZWRPcHRpb25zPFRTdGF0ZT4pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4jY29tcHV0ZWRDYWNoZS5nZXQoU1RPUkVfQ09NUFVURURfS0VZKSE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgW2tleXMsIG9wdGlvbnNdID0gcGFyc2VPcHRpb25zKGtleXNBbmRPcHRpb25zKTtcblxuICAgICAgICBjb25zdCBqb2luZWRLZXlzID0ga2V5cy5qb2luKCctJyk7XG5cbiAgICAgICAgaWYgKCF0aGlzLiNjb21wdXRlZENhY2hlLmhhcyhqb2luZWRLZXlzKSkge1xuICAgICAgICAgICAgdGhpcy4jY29tcHV0ZWRDYWNoZS5zZXQoXG4gICAgICAgICAgICAgICAgam9pbmVkS2V5cyxcbiAgICAgICAgICAgICAgICBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy4jc3RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleXMucmVkdWNlKCh2YWx1ZSwga2V5KSA9PiAodmFsdWUgYXMgTmd0QW55UmVjb3JkKVtrZXldLCBzdGF0ZSk7XG4gICAgICAgICAgICAgICAgfSwgb3B0aW9ucylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy4jY29tcHV0ZWRDYWNoZS5nZXQoam9pbmVkS2V5cykhO1xuICAgIH1cblxuICAgIGdldDxcbiAgICAgICAgVEtleTEgZXh0ZW5kcyBrZXlvZiBUU3RhdGUsXG4gICAgICAgIFRLZXkyIGV4dGVuZHMga2V5b2YgVFN0YXRlW1RLZXkxXSxcbiAgICAgICAgVEtleTMgZXh0ZW5kcyBrZXlvZiBUU3RhdGVbVEtleTFdW1RLZXkyXSxcbiAgICAgICAgVEtleTQgZXh0ZW5kcyBrZXlvZiBUU3RhdGVbVEtleTFdW1RLZXkyXVtUS2V5M11cbiAgICA+KGtleTE6IFRLZXkxLCBrZXkyOiBUS2V5Miwga2V5MzogVEtleTMsIGtleTQ6IFRLZXk0KTogVFN0YXRlW1RLZXkxXVtUS2V5Ml1bVEtleTNdW1RLZXk0XTtcbiAgICBnZXQ8VEtleTEgZXh0ZW5kcyBrZXlvZiBUU3RhdGUsIFRLZXkyIGV4dGVuZHMga2V5b2YgVFN0YXRlW1RLZXkxXSwgVEtleTMgZXh0ZW5kcyBrZXlvZiBUU3RhdGVbVEtleTFdW1RLZXkyXT4oXG4gICAgICAgIGtleTE6IFRLZXkxLFxuICAgICAgICBrZXkyOiBUS2V5MixcbiAgICAgICAga2V5MzogVEtleTNcbiAgICApOiBUU3RhdGVbVEtleTFdW1RLZXkyXVtUS2V5M107XG4gICAgZ2V0PFRLZXkxIGV4dGVuZHMga2V5b2YgVFN0YXRlLCBUS2V5MiBleHRlbmRzIGtleW9mIFRTdGF0ZVtUS2V5MV0+KGtleTE6IFRLZXkxLCBrZXkyOiBUS2V5Mik6IFRTdGF0ZVtUS2V5MV1bVEtleTJdO1xuICAgIGdldDxUS2V5IGV4dGVuZHMga2V5b2YgVFN0YXRlPihrZXk6IFRLZXkpOiBUU3RhdGVbVEtleV07XG4gICAgZ2V0KCk6IFRTdGF0ZTtcbiAgICBnZXQoLi4ua2V5czogc3RyaW5nW10pIHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB1bnRyYWNrZWQodGhpcy4jc3RhdGUpO1xuICAgICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHJldHVybiBzdGF0ZTtcbiAgICAgICAgcmV0dXJuIGtleXMucmVkdWNlKCh2YWx1ZSwga2V5KSA9PiAodmFsdWUgYXMgTmd0QW55UmVjb3JkKVtrZXldLCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgc2V0KHN0YXRlOiBQYXJ0aWFsPFRTdGF0ZT4gfCAoKHByZXZpb3VzOiBUU3RhdGUpID0+IFBhcnRpYWw8VFN0YXRlPikpIHtcbiAgICAgICAgY29uc3QgdXBkYXRlciA9IChwcmV2aW91czogVFN0YXRlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0aWFsID0gdHlwZW9mIHN0YXRlID09PSAnZnVuY3Rpb24nID8gc3RhdGUocHJldmlvdXMpIDogc3RhdGU7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhwYXJ0aWFsKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJ0aWFsS2V5ID0ga2V5IGFzIGtleW9mIFRTdGF0ZTtcbiAgICAgICAgICAgICAgICBpZiAocGFydGlhbFtwYXJ0aWFsS2V5XSA9PT0gdW5kZWZpbmVkICYmIHByZXZpb3VzW3BhcnRpYWxLZXldICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFydGlhbFtwYXJ0aWFsS2V5XSA9IHByZXZpb3VzW3BhcnRpYWxLZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHBhcnRpYWw7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuI3N0YXRlLnVwZGF0ZSgocHJldmlvdXMpID0+ICh7IC4uLnByZXZpb3VzLCAuLi51cGRhdGVyKHByZXZpb3VzKSB9KSk7XG4gICAgICAgIC8vIHRoaXMuI3N0YXRlLnVwZGF0ZShwcmV2aW91cyA9PiAoey4uLnByZXZpb3VzLCAuLi4odHlwZW9mIHN0YXRlID09PSAnZnVuY3Rpb24nID8gc3RhdGUocHJldmlvdXMpIDogc3RhdGUpfSkpXG4gICAgfVxuXG4gICAgcGF0Y2goc3RhdGU6IFBhcnRpYWw8VFN0YXRlPikge1xuICAgICAgICBjb25zdCB1cGRhdGVyID0gKHByZXZpb3VzOiBUU3RhdGUpID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHN0YXRlKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJ0aWFsS2V5ID0ga2V5IGFzIGtleW9mIFRTdGF0ZTtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGVbcGFydGlhbEtleV0gPT09IHVuZGVmaW5lZCAmJiBwcmV2aW91c1twYXJ0aWFsS2V5XSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlW3BhcnRpYWxLZXldID0gcHJldmlvdXNbcGFydGlhbEtleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuI3N0YXRlLnVwZGF0ZSgocHJldmlvdXMpID0+ICh7IC4uLnVwZGF0ZXIocHJldmlvdXMpLCAuLi5wcmV2aW91cyB9KSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZU9wdGlvbnMoa2V5c0FuZE9wdGlvbnM6IGFueVtdKTogW3N0cmluZ1tdLCBDcmVhdGVDb21wdXRlZE9wdGlvbnM8YW55Pj9dIHtcbiAgICBpZiAodHlwZW9mIGtleXNBbmRPcHRpb25zLmF0KC0xKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIFtrZXlzQW5kT3B0aW9ucy5zbGljZSgwLCAtMSksIGtleXNBbmRPcHRpb25zLmF0KC0xKV07XG4gICAgfVxuXG4gICAgcmV0dXJuIFtrZXlzQW5kT3B0aW9uc107XG59XG4iXX0=
|