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,423 +0,0 @@
|
|
|
1
|
-
import { DOCUMENT } from '@angular/common';
|
|
2
|
-
import { ElementRef, Injectable, Injector, computed, effect, inject } from '@angular/core';
|
|
3
|
-
import * as THREE from 'three';
|
|
4
|
-
import { createLoop } from '../loop';
|
|
5
|
-
import { applyProps } from '../utils/apply-props';
|
|
6
|
-
import { prepare } from '../utils/instance';
|
|
7
|
-
import { is } from '../utils/is';
|
|
8
|
-
import { makeDefaultCamera, makeDefaultRenderer, makeDpr } from '../utils/make';
|
|
9
|
-
import { checkNeedsUpdate, updateCamera } from '../utils/update';
|
|
10
|
-
import { NgtSignalStore } from './signal.store';
|
|
11
|
-
import * as i0 from "@angular/core";
|
|
12
|
-
export const rootStateMap = new Map();
|
|
13
|
-
const { invalidate, advance } = createLoop(rootStateMap);
|
|
14
|
-
const shallowLoose = { objects: 'shallow', strict: false };
|
|
15
|
-
class NgtStore extends NgtSignalStore {
|
|
16
|
-
constructor() {
|
|
17
|
-
super(...arguments);
|
|
18
|
-
this.#parentStore = inject(NgtStore, { optional: true, skipSelf: true });
|
|
19
|
-
this.#window = inject(DOCUMENT).defaultView;
|
|
20
|
-
this.#injector = inject(Injector);
|
|
21
|
-
this.isInit = false;
|
|
22
|
-
}
|
|
23
|
-
#parentStore;
|
|
24
|
-
#window;
|
|
25
|
-
#injector;
|
|
26
|
-
init() {
|
|
27
|
-
if (!this.isInit) {
|
|
28
|
-
const position = new THREE.Vector3();
|
|
29
|
-
const defaultTarget = new THREE.Vector3();
|
|
30
|
-
const tempTarget = new THREE.Vector3();
|
|
31
|
-
const getCurrentViewport = (camera = this.get('camera'), target = defaultTarget, size = this.get('size')) => {
|
|
32
|
-
const { width, height, top, left } = size;
|
|
33
|
-
const aspect = width / height;
|
|
34
|
-
if (target instanceof THREE.Vector3)
|
|
35
|
-
tempTarget.copy(target);
|
|
36
|
-
else
|
|
37
|
-
tempTarget.set(...target);
|
|
38
|
-
const distance = camera.getWorldPosition(position).distanceTo(tempTarget);
|
|
39
|
-
if (is.orthographicCamera(camera)) {
|
|
40
|
-
return {
|
|
41
|
-
width: width / camera.zoom,
|
|
42
|
-
height: height / camera.zoom,
|
|
43
|
-
top,
|
|
44
|
-
left,
|
|
45
|
-
factor: 1,
|
|
46
|
-
distance,
|
|
47
|
-
aspect,
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
const fov = (camera.fov * Math.PI) / 180; // convert vertical fov to radians
|
|
51
|
-
const h = 2 * Math.tan(fov / 2) * distance; // visible height
|
|
52
|
-
const w = h * aspect;
|
|
53
|
-
return { width: w, height: h, top, left, factor: width / w, distance, aspect };
|
|
54
|
-
};
|
|
55
|
-
let performanceTimeout;
|
|
56
|
-
const setPerformanceCurrent = (current) => {
|
|
57
|
-
this.set((state) => ({ performance: { ...state.performance, current } }));
|
|
58
|
-
};
|
|
59
|
-
this.set({
|
|
60
|
-
get: this.get.bind(this),
|
|
61
|
-
set: this.set.bind(this),
|
|
62
|
-
ready: false,
|
|
63
|
-
events: { priority: 1, enabled: true, connected: false },
|
|
64
|
-
invalidate: (frames = 1) => invalidate(this, frames),
|
|
65
|
-
advance: (timestamp, runGlobalEffects) => advance(timestamp, runGlobalEffects, this),
|
|
66
|
-
legacy: false,
|
|
67
|
-
linear: false,
|
|
68
|
-
flat: false,
|
|
69
|
-
controls: null,
|
|
70
|
-
clock: new THREE.Clock(),
|
|
71
|
-
pointer: new THREE.Vector2(),
|
|
72
|
-
frameloop: 'always',
|
|
73
|
-
performance: {
|
|
74
|
-
current: 1,
|
|
75
|
-
min: 0.5,
|
|
76
|
-
max: 1,
|
|
77
|
-
debounce: 200,
|
|
78
|
-
regress: () => {
|
|
79
|
-
const state = this.get();
|
|
80
|
-
// clear timeout
|
|
81
|
-
if (performanceTimeout)
|
|
82
|
-
clearTimeout(performanceTimeout);
|
|
83
|
-
// set lower bound
|
|
84
|
-
if (state.performance.current !== state.performance.min)
|
|
85
|
-
setPerformanceCurrent(state.performance.min);
|
|
86
|
-
// go back to upper bound
|
|
87
|
-
performanceTimeout = setTimeout(() => {
|
|
88
|
-
setPerformanceCurrent(this.get('performance', 'max') || 1);
|
|
89
|
-
}, state.performance.debounce);
|
|
90
|
-
},
|
|
91
|
-
},
|
|
92
|
-
size: { width: 0, height: 0, top: 0, left: 0 },
|
|
93
|
-
viewport: {
|
|
94
|
-
initialDpr: 0,
|
|
95
|
-
dpr: 0,
|
|
96
|
-
width: 0,
|
|
97
|
-
height: 0,
|
|
98
|
-
top: 0,
|
|
99
|
-
left: 0,
|
|
100
|
-
aspect: 0,
|
|
101
|
-
distance: 0,
|
|
102
|
-
factor: 0,
|
|
103
|
-
getCurrentViewport,
|
|
104
|
-
},
|
|
105
|
-
previousStore: this.#parentStore,
|
|
106
|
-
internal: {
|
|
107
|
-
active: false,
|
|
108
|
-
priority: 0,
|
|
109
|
-
frames: 0,
|
|
110
|
-
lastEvent: new ElementRef(null),
|
|
111
|
-
interaction: [],
|
|
112
|
-
hovered: new Map(),
|
|
113
|
-
subscribers: [],
|
|
114
|
-
initialClick: [0, 0],
|
|
115
|
-
initialHits: [],
|
|
116
|
-
capturedMap: new Map(),
|
|
117
|
-
subscribe: (callback, priority = 0, store = this) => {
|
|
118
|
-
const internal = this.get('internal');
|
|
119
|
-
// If this subscription was given a priority, it takes rendering into its own hands
|
|
120
|
-
// For that reason we switch off automatic rendering and increase the manual flag
|
|
121
|
-
// As long as this flag is positive there can be no internal rendering at all
|
|
122
|
-
// because there could be multiple render subscriptions
|
|
123
|
-
internal.priority = internal.priority + (priority > 0 ? 1 : 0);
|
|
124
|
-
internal.subscribers.push({ priority, store, callback });
|
|
125
|
-
// Register subscriber and sort layers from lowest to highest, meaning,
|
|
126
|
-
// highest priority renders last (on top of the other frames)
|
|
127
|
-
internal.subscribers.sort((a, b) => (a.priority || 0) - (b.priority || 0));
|
|
128
|
-
return () => {
|
|
129
|
-
const internal = this.get('internal');
|
|
130
|
-
if (internal?.subscribers) {
|
|
131
|
-
// Decrease manual flag if this subscription had a priority
|
|
132
|
-
internal.priority = internal.priority - (priority > 0 ? 1 : 0);
|
|
133
|
-
// Remove subscriber from list
|
|
134
|
-
internal.subscribers = internal.subscribers.filter((s) => s.callback !== callback);
|
|
135
|
-
}
|
|
136
|
-
};
|
|
137
|
-
},
|
|
138
|
-
},
|
|
139
|
-
setEvents: (events) => {
|
|
140
|
-
this.set((state) => ({ events: { ...state.events, ...events } }));
|
|
141
|
-
},
|
|
142
|
-
setSize: (width, height, top, left) => {
|
|
143
|
-
const camera = this.get('camera');
|
|
144
|
-
const size = { width, height, top: top || 0, left: left || 0 };
|
|
145
|
-
this.set((state) => ({
|
|
146
|
-
size,
|
|
147
|
-
viewport: { ...state.viewport, ...getCurrentViewport(camera, defaultTarget, size) },
|
|
148
|
-
}));
|
|
149
|
-
},
|
|
150
|
-
setDpr: (dpr) => {
|
|
151
|
-
const resolved = makeDpr(dpr, this.#window);
|
|
152
|
-
this.set((state) => ({
|
|
153
|
-
viewport: {
|
|
154
|
-
...state.viewport,
|
|
155
|
-
dpr: resolved,
|
|
156
|
-
initialDpr: state.viewport.initialDpr || resolved,
|
|
157
|
-
},
|
|
158
|
-
}));
|
|
159
|
-
},
|
|
160
|
-
setFrameloop: (frameloop = 'always') => {
|
|
161
|
-
const clock = this.get('clock');
|
|
162
|
-
clock.stop();
|
|
163
|
-
clock.elapsedTime = 0;
|
|
164
|
-
if (frameloop !== 'never') {
|
|
165
|
-
clock.start();
|
|
166
|
-
clock.elapsedTime = 0;
|
|
167
|
-
}
|
|
168
|
-
this.set({ frameloop });
|
|
169
|
-
},
|
|
170
|
-
});
|
|
171
|
-
this.isInit = true;
|
|
172
|
-
this.#resize();
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
configure(inputs, canvasElement) {
|
|
176
|
-
const { gl: glOptions, size: sizeOptions, camera: cameraOptions, raycaster: raycasterOptions, scene: sceneOptions, events, orthographic, lookAt, shadows, linear, legacy, flat, dpr, frameloop, performance, } = inputs;
|
|
177
|
-
const state = this.get();
|
|
178
|
-
const stateToUpdate = {};
|
|
179
|
-
// setup renderer
|
|
180
|
-
let gl = state.gl;
|
|
181
|
-
if (!state.gl)
|
|
182
|
-
stateToUpdate.gl = gl = makeDefaultRenderer(glOptions, canvasElement);
|
|
183
|
-
// setup raycaster
|
|
184
|
-
let raycaster = state.raycaster;
|
|
185
|
-
if (!raycaster)
|
|
186
|
-
stateToUpdate.raycaster = raycaster = new THREE.Raycaster();
|
|
187
|
-
// set raycaster options
|
|
188
|
-
const { params, ...options } = raycasterOptions || {};
|
|
189
|
-
if (!is.equ(options, raycaster, shallowLoose))
|
|
190
|
-
applyProps(raycaster, { ...options });
|
|
191
|
-
if (!is.equ(params, raycaster.params, shallowLoose)) {
|
|
192
|
-
applyProps(raycaster, { params: { ...raycaster.params, ...(params || {}) } });
|
|
193
|
-
}
|
|
194
|
-
// create default camera
|
|
195
|
-
if (!state.camera) {
|
|
196
|
-
const isCamera = is.camera(cameraOptions);
|
|
197
|
-
let camera = isCamera ? cameraOptions : makeDefaultCamera(orthographic || false, state.size);
|
|
198
|
-
if (!isCamera) {
|
|
199
|
-
if (cameraOptions)
|
|
200
|
-
applyProps(camera, cameraOptions);
|
|
201
|
-
// set position.z
|
|
202
|
-
if (!cameraOptions?.position)
|
|
203
|
-
camera.position.z = 5;
|
|
204
|
-
// always look at center or passed-in lookAt by default
|
|
205
|
-
if (!cameraOptions?.rotation && !cameraOptions?.quaternion) {
|
|
206
|
-
if (Array.isArray(lookAt))
|
|
207
|
-
camera.lookAt(lookAt[0], lookAt[1], lookAt[2]);
|
|
208
|
-
else if (lookAt instanceof THREE.Vector3)
|
|
209
|
-
camera.lookAt(lookAt);
|
|
210
|
-
else
|
|
211
|
-
camera.lookAt(0, 0, 0);
|
|
212
|
-
}
|
|
213
|
-
// update projection matrix after applyprops
|
|
214
|
-
camera.updateProjectionMatrix?.();
|
|
215
|
-
}
|
|
216
|
-
if (!is.instance(camera))
|
|
217
|
-
camera = prepare(camera, { store: this });
|
|
218
|
-
stateToUpdate.camera = camera;
|
|
219
|
-
}
|
|
220
|
-
// Set up scene (one time only!)
|
|
221
|
-
if (!state.scene) {
|
|
222
|
-
let scene;
|
|
223
|
-
if (sceneOptions instanceof THREE.Scene) {
|
|
224
|
-
scene = prepare(sceneOptions, { store: this });
|
|
225
|
-
}
|
|
226
|
-
else {
|
|
227
|
-
scene = prepare(new THREE.Scene(), { store: this });
|
|
228
|
-
if (sceneOptions)
|
|
229
|
-
applyProps(scene, sceneOptions);
|
|
230
|
-
}
|
|
231
|
-
stateToUpdate.scene = scene;
|
|
232
|
-
}
|
|
233
|
-
// Set up XR (one time only!)
|
|
234
|
-
if (!state.xr) {
|
|
235
|
-
// Handle frame behavior in WebXR
|
|
236
|
-
const handleXRFrame = (timestamp, frame) => {
|
|
237
|
-
const state = this.get();
|
|
238
|
-
if (state.frameloop === 'never')
|
|
239
|
-
return;
|
|
240
|
-
advance(timestamp, true, this, frame);
|
|
241
|
-
};
|
|
242
|
-
// Toggle render switching on session
|
|
243
|
-
const handleSessionChange = () => {
|
|
244
|
-
const state = this.get();
|
|
245
|
-
state.gl.xr.enabled = state.gl.xr.isPresenting;
|
|
246
|
-
state.gl.xr.setAnimationLoop(state.gl.xr.isPresenting ? handleXRFrame : null);
|
|
247
|
-
if (!state.gl.xr.isPresenting)
|
|
248
|
-
state.invalidate();
|
|
249
|
-
};
|
|
250
|
-
// WebXR session manager
|
|
251
|
-
const xr = {
|
|
252
|
-
connect: () => {
|
|
253
|
-
gl.xr.addEventListener('sessionstart', handleSessionChange);
|
|
254
|
-
gl.xr.addEventListener('sessionend', handleSessionChange);
|
|
255
|
-
},
|
|
256
|
-
disconnect: () => {
|
|
257
|
-
gl.xr.removeEventListener('sessionstart', handleSessionChange);
|
|
258
|
-
gl.xr.removeEventListener('sessionend', handleSessionChange);
|
|
259
|
-
},
|
|
260
|
-
};
|
|
261
|
-
// Subscribe to WebXR session events
|
|
262
|
-
if (gl.xr)
|
|
263
|
-
xr.connect();
|
|
264
|
-
stateToUpdate.xr = xr;
|
|
265
|
-
}
|
|
266
|
-
// Set shadowmap
|
|
267
|
-
if (gl.shadowMap) {
|
|
268
|
-
const oldEnabled = gl.shadowMap.enabled;
|
|
269
|
-
const oldType = gl.shadowMap.type;
|
|
270
|
-
gl.shadowMap.enabled = !!shadows;
|
|
271
|
-
if (typeof shadows === 'boolean') {
|
|
272
|
-
gl.shadowMap.type = THREE.PCFSoftShadowMap;
|
|
273
|
-
}
|
|
274
|
-
else if (typeof shadows === 'string') {
|
|
275
|
-
const types = {
|
|
276
|
-
basic: THREE.BasicShadowMap,
|
|
277
|
-
percentage: THREE.PCFShadowMap,
|
|
278
|
-
soft: THREE.PCFSoftShadowMap,
|
|
279
|
-
variance: THREE.VSMShadowMap,
|
|
280
|
-
};
|
|
281
|
-
gl.shadowMap.type = types[shadows] ?? THREE.PCFSoftShadowMap;
|
|
282
|
-
}
|
|
283
|
-
else if (is.obj(shadows)) {
|
|
284
|
-
Object.assign(gl.shadowMap, shadows);
|
|
285
|
-
}
|
|
286
|
-
if (oldEnabled !== gl.shadowMap.enabled || oldType !== gl.shadowMap.type)
|
|
287
|
-
checkNeedsUpdate(gl.shadowMap);
|
|
288
|
-
}
|
|
289
|
-
// Safely set color management if available.
|
|
290
|
-
// Avoid accessing THREE.ColorManagement to play nice with older versions
|
|
291
|
-
if (THREE.ColorManagement) {
|
|
292
|
-
const ColorManagement = THREE.ColorManagement;
|
|
293
|
-
if ('enabled' in ColorManagement)
|
|
294
|
-
ColorManagement['enabled'] = !legacy ?? false;
|
|
295
|
-
else if ('legacyMode' in ColorManagement)
|
|
296
|
-
ColorManagement['legacyMode'] = legacy ?? true;
|
|
297
|
-
}
|
|
298
|
-
// set color space and tonemapping preferences
|
|
299
|
-
const LinearEncoding = 3000;
|
|
300
|
-
const sRGBEncoding = 3001;
|
|
301
|
-
applyProps(gl, {
|
|
302
|
-
outputEncoding: linear ? LinearEncoding : sRGBEncoding,
|
|
303
|
-
toneMapping: flat ? THREE.NoToneMapping : THREE.ACESFilmicToneMapping,
|
|
304
|
-
});
|
|
305
|
-
// Update color management state
|
|
306
|
-
if (state.legacy !== legacy)
|
|
307
|
-
stateToUpdate.legacy = legacy;
|
|
308
|
-
if (state.linear !== linear)
|
|
309
|
-
stateToUpdate.linear = linear;
|
|
310
|
-
if (state.flat !== flat)
|
|
311
|
-
stateToUpdate.flat = flat;
|
|
312
|
-
// Set gl props
|
|
313
|
-
gl.setClearAlpha(0);
|
|
314
|
-
gl.setPixelRatio(makeDpr(state.viewport.dpr));
|
|
315
|
-
gl.setSize(state.size.width, state.size.height);
|
|
316
|
-
if (is.obj(glOptions) &&
|
|
317
|
-
!(typeof glOptions === 'function') &&
|
|
318
|
-
!is.renderer(glOptions) &&
|
|
319
|
-
!is.equ(glOptions, gl, shallowLoose)) {
|
|
320
|
-
applyProps(gl, glOptions);
|
|
321
|
-
}
|
|
322
|
-
// Store events internally
|
|
323
|
-
if (events && !state.events.handlers)
|
|
324
|
-
stateToUpdate.events = events(this);
|
|
325
|
-
// Check performance
|
|
326
|
-
if (performance && !is.equ(performance, state.performance, shallowLoose)) {
|
|
327
|
-
stateToUpdate.performance = { ...state.performance, ...performance };
|
|
328
|
-
}
|
|
329
|
-
this.set(stateToUpdate);
|
|
330
|
-
// Check pixelratio
|
|
331
|
-
if (dpr && state.viewport.dpr !== makeDpr(dpr))
|
|
332
|
-
state.setDpr(dpr);
|
|
333
|
-
// Check size, allow it to take on container bounds initially
|
|
334
|
-
const size = computeInitialSize(canvasElement, sizeOptions);
|
|
335
|
-
if (!is.equ(size, state.size, shallowLoose))
|
|
336
|
-
state.setSize(size.width, size.height, size.top, size.left);
|
|
337
|
-
// Check frameloop
|
|
338
|
-
if (state.frameloop !== frameloop)
|
|
339
|
-
state.setFrameloop(frameloop);
|
|
340
|
-
if (!this.get('ready'))
|
|
341
|
-
this.set({ ready: true });
|
|
342
|
-
this.#invalidate();
|
|
343
|
-
}
|
|
344
|
-
destroy(canvas) {
|
|
345
|
-
this.set((state) => ({ internal: { ...state.internal, active: false } }));
|
|
346
|
-
setTimeout(() => {
|
|
347
|
-
const { gl, xr, events } = this.get();
|
|
348
|
-
if (gl) {
|
|
349
|
-
if (events.disconnect) {
|
|
350
|
-
events.disconnect();
|
|
351
|
-
}
|
|
352
|
-
gl.renderLists.dispose();
|
|
353
|
-
gl.forceContextLoss();
|
|
354
|
-
if (gl.xr && gl.xr.enabled) {
|
|
355
|
-
gl.xr.setAnimationLoop(null);
|
|
356
|
-
xr.disconnect();
|
|
357
|
-
}
|
|
358
|
-
dispose(this.get());
|
|
359
|
-
rootStateMap.delete(canvas);
|
|
360
|
-
}
|
|
361
|
-
}, 500);
|
|
362
|
-
}
|
|
363
|
-
#resize() {
|
|
364
|
-
const state = this.get();
|
|
365
|
-
let oldSize = state.size;
|
|
366
|
-
let oldDpr = state.viewport.dpr;
|
|
367
|
-
let oldCamera = state.camera;
|
|
368
|
-
const camera = this.select('camera');
|
|
369
|
-
const size = this.select('size');
|
|
370
|
-
const viewport = this.select('viewport');
|
|
371
|
-
const triggers = computed(() => ({ camera: camera(), size: size(), viewport: viewport(), gl: this.get('gl') }));
|
|
372
|
-
effect(() => {
|
|
373
|
-
const { camera, size, viewport, gl } = triggers();
|
|
374
|
-
// resize camera and renderer on changes to size and dpr
|
|
375
|
-
if (size !== oldSize || viewport.dpr !== oldDpr) {
|
|
376
|
-
oldSize = size;
|
|
377
|
-
oldDpr = viewport.dpr;
|
|
378
|
-
// update camera
|
|
379
|
-
updateCamera(camera, size);
|
|
380
|
-
gl.setPixelRatio(viewport.dpr);
|
|
381
|
-
gl.setSize(size.width, size.height);
|
|
382
|
-
}
|
|
383
|
-
// update viewport when camera changes
|
|
384
|
-
if (camera !== oldCamera) {
|
|
385
|
-
oldCamera = camera;
|
|
386
|
-
updateCamera(camera, size);
|
|
387
|
-
this.set((state) => ({
|
|
388
|
-
viewport: { ...state.viewport, ...state.viewport.getCurrentViewport(camera) },
|
|
389
|
-
}));
|
|
390
|
-
}
|
|
391
|
-
}, { injector: this.#injector, allowSignalWrites: true });
|
|
392
|
-
}
|
|
393
|
-
#invalidate() {
|
|
394
|
-
const state = this.select();
|
|
395
|
-
effect(() => {
|
|
396
|
-
state().invalidate();
|
|
397
|
-
}, { injector: this.#injector });
|
|
398
|
-
}
|
|
399
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtStore, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
400
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtStore }); }
|
|
401
|
-
}
|
|
402
|
-
export { NgtStore };
|
|
403
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtStore, decorators: [{
|
|
404
|
-
type: Injectable
|
|
405
|
-
}] });
|
|
406
|
-
function computeInitialSize(canvas, defaultSize) {
|
|
407
|
-
if (defaultSize)
|
|
408
|
-
return defaultSize;
|
|
409
|
-
if (canvas instanceof HTMLCanvasElement && canvas.parentElement) {
|
|
410
|
-
return canvas.parentElement.getBoundingClientRect();
|
|
411
|
-
}
|
|
412
|
-
return { width: 0, height: 0, top: 0, left: 0 };
|
|
413
|
-
}
|
|
414
|
-
// Disposes an object and all its properties
|
|
415
|
-
function dispose(obj) {
|
|
416
|
-
if (obj.dispose && !is.scene(obj))
|
|
417
|
-
obj.dispose();
|
|
418
|
-
for (const p in obj) {
|
|
419
|
-
p.dispose?.();
|
|
420
|
-
delete obj[p];
|
|
421
|
-
}
|
|
422
|
-
}
|
|
423
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUvc3JjL2xpYi9zdG9yZXMvc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBWXJDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDNUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNqQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBRWhELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBcUMsQ0FBQztBQUN6RSxNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUN6RCxNQUFNLFlBQVksR0FBRyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBa0IsQ0FBQztBQUUzRSxNQUNhLFFBQVMsU0FBUSxjQUF3QjtJQUR0RDs7UUFFYSxpQkFBWSxHQUFHLE1BQU0sQ0FBQyxRQUFR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QUMsSUFBSSxHQUFHLEVBQUU7UUFDaEIsQ0FBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7UUFDdkIsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDakI7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRWxlbWVudFJlZiwgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgY3JlYXRlTG9vcCB9IGZyb20gJy4uL2xvb3AnO1xuaW1wb3J0IHR5cGUge1xuICAgIE5ndEFueVJlY29yZCxcbiAgICBOZ3RCZWZvcmVSZW5kZXJSZWNvcmQsXG4gICAgTmd0Q2FudmFzSW5wdXRzLFxuICAgIE5ndERwcixcbiAgICBOZ3RFcXVDb25maWcsXG4gICAgTmd0RXZlbnRNYW5hZ2VyLFxuICAgIE5ndFNpemUsXG4gICAgTmd0U3RhdGUsXG4gICAgTmd0Vmlld3BvcnQsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGFwcGx5UHJvcHMgfSBmcm9tICcuLi91dGlscy9hcHBseS1wcm9wcyc7XG5pbXBvcnQgeyBwcmVwYXJlIH0gZnJvbSAnLi4vdXRpbHMvaW5zdGFuY2UnO1xuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi91dGlscy9pcyc7XG5pbXBvcnQgeyBtYWtlRGVmYXVsdENhbWVyYSwgbWFrZURlZmF1bHRSZW5kZXJlciwgbWFrZURwciB9IGZyb20gJy4uL3V0aWxzL21ha2UnO1xuaW1wb3J0IHsgY2hlY2tOZWVkc1VwZGF0ZSwgdXBkYXRlQ2FtZXJhIH0gZnJvbSAnLi4vdXRpbHMvdXBkYXRlJztcbmltcG9ydCB7IE5ndFNpZ25hbFN0b3JlIH0gZnJvbSAnLi9zaWduYWwuc3RvcmUnO1xuXG5leHBvcnQgY29uc3Qgcm9vdFN0YXRlTWFwID0gbmV3IE1hcDxFbGVtZW50LCBOZ3RTaWduYWxTdG9yZTxOZ3RTdGF0ZT4+KCk7XG5jb25zdCB7IGludmFsaWRhdGUsIGFkdmFuY2UgfSA9IGNyZWF0ZUxvb3Aocm9vdFN0YXRlTWFwKTtcbmNvbnN0IHNoYWxsb3dMb29zZSA9IHsgb2JqZWN0czogJ3NoYWxsb3cnLCBzdHJpY3Q6IGZhbHNlIH0gYXMgTmd0RXF1Q29uZmlnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTmd0U3RvcmUgZXh0ZW5kcyBOZ3RTaWduYWxTdG9yZTxOZ3RTdGF0ZT4ge1xuICAgIHJlYWRvbmx5ICNwYXJlbnRTdG9yZSA9IGluamVjdChOZ3RTdG9yZSwgeyBvcHRpb25hbDogdHJ1ZSwgc2tpcFNlbGY6IHRydWUgfSk7XG4gICAgcmVhZG9ubHkgI3dpbmRvdyA9IGluamVjdChET0NVTUVOVCkuZGVmYXVsdFZpZXc7XG4gICAgcmVhZG9ubHkgI2luamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcblxuICAgIGlzSW5pdCA9IGZhbHNlO1xuXG4gICAgaW5pdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzSW5pdCkge1xuICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xuICAgICAgICAgICAgY29uc3QgZGVmYXVsdFRhcmdldCA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG4gICAgICAgICAgICBjb25zdCB0ZW1wVGFyZ2V0ID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcblxuICAgICAgICAgICAgY29uc3QgZ2V0Q3VycmVudFZpZXdwb3J0ID0gKFxuICAgICAgICAgICAgICAgIGNhbWVyYSA9IHRoaXMuZ2V0KCdjYW1lcmEnKSxcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IFRIUkVFLlZlY3RvcjMgfCBQYXJhbWV0ZXJzPFRIUkVFLlZlY3RvcjNbJ3NldCddPiA9IGRlZmF1bHRUYXJnZXQsXG4gICAgICAgICAgICAgICAgc2l6ZSA9IHRoaXMuZ2V0KCdzaXplJylcbiAgICAgICAgICAgICk6IE9taXQ8Tmd0Vmlld3BvcnQsICdkcHInIHwgJ2luaXRpYWxEcHInPiA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCB0b3AsIGxlZnQgfSA9IHNpemU7XG4gICAgICAgICAgICAgICAgY29uc3QgYXNwZWN0ID0gd2lkdGggLyBoZWlnaHQ7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIFRIUkVFLlZlY3RvcjMpIHRlbXBUYXJnZXQuY29weSh0YXJnZXQpO1xuICAgICAgICAgICAgICAgIGVsc2UgdGVtcFRhcmdldC5zZXQoLi4udGFyZ2V0KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlID0gY2FtZXJhLmdldFdvcmxkUG9zaXRpb24ocG9zaXRpb24pLmRpc3RhbmNlVG8odGVtcFRhcmdldCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoaXMub3J0aG9ncmFwaGljQ2FtZXJhKGNhbWVyYSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiB3aWR0aCAvIGNhbWVyYS56b29tLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQgLyBjYW1lcmEuem9vbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3I6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzcGVjdCxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBmb3YgPSAoY2FtZXJhLmZvdiAqIE1hdGguUEkpIC8gMTgwOyAvLyBjb252ZXJ0IHZlcnRpY2FsIGZvdiB0byByYWRpYW5zXG4gICAgICAgICAgICAgICAgY29uc3QgaCA9IDIgKiBNYXRoLnRhbihmb3YgLyAyKSAqIGRpc3RhbmNlOyAvLyB2aXNpYmxlIGhlaWdodFxuICAgICAgICAgICAgICAgIGNvbnN0IHcgPSBoICogYXNwZWN0O1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHdpZHRoOiB3LCBoZWlnaHQ6IGgsIHRvcCwgbGVmdCwgZmFjdG9yOiB3aWR0aCAvIHcsIGRpc3RhbmNlLCBhc3BlY3QgfTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxldCBwZXJmb3JtYW5jZVRpbWVvdXQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xuICAgICAgICAgICAgY29uc3Qgc2V0UGVyZm9ybWFuY2VDdXJyZW50ID0gKGN1cnJlbnQ6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0KChzdGF0ZSkgPT4gKHsgcGVyZm9ybWFuY2U6IHsgLi4uc3RhdGUucGVyZm9ybWFuY2UsIGN1cnJlbnQgfSB9KSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLnNldCh7XG4gICAgICAgICAgICAgICAgZ2V0OiB0aGlzLmdldC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICAgIHNldDogdGhpcy5zZXQuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICByZWFkeTogZmFsc2UsXG5cbiAgICAgICAgICAgICAgICBldmVudHM6IHsgcHJpb3JpdHk6IDEsIGVuYWJsZWQ6IHRydWUsIGNvbm5lY3RlZDogZmFsc2UgfSxcblxuICAgICAgICAgICAgICAgIGludmFsaWRhdGU6IChmcmFtZXMgPSAxKSA9PiBpbnZhbGlkYXRlKHRoaXMsIGZyYW1lcyksXG4gICAgICAgICAgICAgICAgYWR2YW5jZTogKHRpbWVzdGFtcDogbnVtYmVyLCBydW5HbG9iYWxFZmZlY3RzPzogYm9vbGVhbikgPT4gYWR2YW5jZSh0aW1lc3RhbXAsIHJ1bkdsb2JhbEVmZmVjdHMsIHRoaXMpLFxuXG4gICAgICAgICAgICAgICAgbGVnYWN5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsaW5lYXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGZsYXQ6IGZhbHNlLFxuXG4gICAgICAgICAgICAgICAgY29udHJvbHM6IG51bGwsXG4gICAgICAgICAgICAgICAgY2xvY2s6IG5ldyBUSFJFRS5DbG9jaygpLFxuICAgICAgICAgICAgICAgIHBvaW50ZXI6IG5ldyBUSFJFRS5WZWN0b3IyKCksXG5cbiAgICAgICAgICAgICAgICBmcmFtZWxvb3A6ICdhbHdheXMnLFxuICAgICAgICAgICAgICAgIHBlcmZvcm1hbmNlOiB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQ6IDEsXG4gICAgICAgICAgICAgICAgICAgIG1pbjogMC41LFxuICAgICAgICAgICAgICAgICAgICBtYXg6IDEsXG4gICAgICAgICAgICAgICAgICAgIGRlYm91bmNlOiAyMDAsXG4gICAgICAgICAgICAgICAgICAgIHJlZ3Jlc3M6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsZWFyIHRpbWVvdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZXJmb3JtYW5jZVRpbWVvdXQpIGNsZWFyVGltZW91dChwZXJmb3JtYW5jZVRpbWVvdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2V0IGxvd2VyIGJvdW5kXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUucGVyZm9ybWFuY2UuY3VycmVudCAhPT0gc3RhdGUucGVyZm9ybWFuY2UubWluKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFBlcmZvcm1hbmNlQ3VycmVudChzdGF0ZS5wZXJmb3JtYW5jZS5taW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ28gYmFjayB0byB1cHBlciBib3VuZFxuICAgICAgICAgICAgICAgICAgICAgICAgcGVyZm9ybWFuY2VUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UGVyZm9ybWFuY2VDdXJyZW50KHRoaXMuZ2V0KCdwZXJmb3JtYW5jZScsICdtYXgnKSB8fCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHN0YXRlLnBlcmZvcm1hbmNlLmRlYm91bmNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNpemU6IHsgd2lkdGg6IDAsIGhlaWdodDogMCwgdG9wOiAwLCBsZWZ0OiAwIH0sXG4gICAgICAgICAgICAgICAgdmlld3BvcnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbERwcjogMCxcbiAgICAgICAgICAgICAgICAgICAgZHByOiAwLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICAgICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICAgICAgICAgIGFzcGVjdDogMCxcbiAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2U6IDAsXG4gICAgICAgICAgICAgICAgICAgIGZhY3RvcjogMCxcbiAgICAgICAgICAgICAgICAgICAgZ2V0Q3VycmVudFZpZXdwb3J0LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcHJldmlvdXNTdG9yZTogdGhpcy4jcGFyZW50U3RvcmUgYXMgTmd0U3RvcmUsXG4gICAgICAgICAgICAgICAgaW50ZXJuYWw6IHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHk6IDAsXG4gICAgICAgICAgICAgICAgICAgIGZyYW1lczogMCxcbiAgICAgICAgICAgICAgICAgICAgbGFzdEV2ZW50OiBuZXcgRWxlbWVudFJlZihudWxsKSxcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3Rpb246IFtdLFxuICAgICAgICAgICAgICAgICAgICBob3ZlcmVkOiBuZXcgTWFwKCksXG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXJzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbENsaWNrOiBbMCwgMF0sXG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxIaXRzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgY2FwdHVyZWRNYXA6IG5ldyBNYXAoKSxcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlOiAoY2FsbGJhY2s6IE5ndEJlZm9yZVJlbmRlclJlY29yZFsnY2FsbGJhY2snXSwgcHJpb3JpdHkgPSAwLCBzdG9yZSA9IHRoaXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludGVybmFsID0gdGhpcy5nZXQoJ2ludGVybmFsJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIHN1YnNjcmlwdGlvbiB3YXMgZ2l2ZW4gYSBwcmlvcml0eSwgaXQgdGFrZXMgcmVuZGVyaW5nIGludG8gaXRzIG93biBoYW5kc1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9yIHRoYXQgcmVhc29uIHdlIHN3aXRjaCBvZmYgYXV0b21hdGljIHJlbmRlcmluZyBhbmQgaW5jcmVhc2UgdGhlIG1hbnVhbCBmbGFnXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBcyBsb25nIGFzIHRoaXMgZmxhZyBpcyBwb3NpdGl2ZSB0aGVyZSBjYW4gYmUgbm8gaW50ZXJuYWwgcmVuZGVyaW5nIGF0IGFsbFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBtdWx0aXBsZSByZW5kZXIgc3Vic2NyaXB0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwucHJpb3JpdHkgPSBpbnRlcm5hbC5wcmlvcml0eSArIChwcmlvcml0eSA+IDAgPyAxIDogMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC5zdWJzY3JpYmVycy5wdXNoKHsgcHJpb3JpdHksIHN0b3JlLCBjYWxsYmFjayB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlZ2lzdGVyIHN1YnNjcmliZXIgYW5kIHNvcnQgbGF5ZXJzIGZyb20gbG93ZXN0IHRvIGhpZ2hlc3QsIG1lYW5pbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBoaWdoZXN0IHByaW9yaXR5IHJlbmRlcnMgbGFzdCAob24gdG9wIG9mIHRoZSBvdGhlciBmcmFtZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC5zdWJzY3JpYmVycy5zb3J0KChhLCBiKSA9PiAoYS5wcmlvcml0eSB8fCAwKSAtIChiLnByaW9yaXR5IHx8IDApKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnRlcm5hbCA9IHRoaXMuZ2V0KCdpbnRlcm5hbCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnRlcm5hbD8uc3Vic2NyaWJlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVjcmVhc2UgbWFudWFsIGZsYWcgaWYgdGhpcyBzdWJzY3JpcHRpb24gaGFkIGEgcHJpb3JpdHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwucHJpb3JpdHkgPSBpbnRlcm5hbC5wcmlvcml0eSAtIChwcmlvcml0eSA+IDAgPyAxIDogMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBzdWJzY3JpYmVyIGZyb20gbGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC5zdWJzY3JpYmVycyA9IGludGVybmFsLnN1YnNjcmliZXJzLmZpbHRlcigocykgPT4gcy5jYWxsYmFjayAhPT0gY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXRFdmVudHM6IChldmVudHM6IFBhcnRpYWw8Tmd0RXZlbnRNYW5hZ2VyPGFueT4+KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KChzdGF0ZSkgPT4gKHsgZXZlbnRzOiB7IC4uLnN0YXRlLmV2ZW50cywgLi4uZXZlbnRzIH0gfSkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2V0U2l6ZTogKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCB0b3A/OiBudW1iZXIsIGxlZnQ/OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FtZXJhID0gdGhpcy5nZXQoJ2NhbWVyYScpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplID0geyB3aWR0aCwgaGVpZ2h0LCB0b3A6IHRvcCB8fCAwLCBsZWZ0OiBsZWZ0IHx8IDAgfTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldCgoc3RhdGUpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmlld3BvcnQ6IHsgLi4uc3RhdGUudmlld3BvcnQsIC4uLmdldEN1cnJlbnRWaWV3cG9ydChjYW1lcmEsIGRlZmF1bHRUYXJnZXQsIHNpemUpIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNldERwcjogKGRwcjogTmd0RHByKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkID0gbWFrZURwcihkcHIsIHRoaXMuI3dpbmRvdyBhcyBXaW5kb3cgJiB0eXBlb2YgZ2xvYmFsVGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KChzdGF0ZSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdwb3J0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uc3RhdGUudmlld3BvcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHByOiByZXNvbHZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsRHByOiBzdGF0ZS52aWV3cG9ydC5pbml0aWFsRHByIHx8IHJlc29sdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2V0RnJhbWVsb29wOiAoZnJhbWVsb29wOiAnYWx3YXlzJyB8ICdkZW1hbmQnIHwgJ25ldmVyJyA9ICdhbHdheXMnKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsb2NrID0gdGhpcy5nZXQoJ2Nsb2NrJyk7XG4gICAgICAgICAgICAgICAgICAgIGNsb2NrLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgY2xvY2suZWxhcHNlZFRpbWUgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZWxvb3AgIT09ICduZXZlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrLnN0YXJ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbG9jay5lbGFwc2VkVGltZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldCh7IGZyYW1lbG9vcCB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuaXNJbml0ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuI3Jlc2l6ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uZmlndXJlKGlucHV0czogTmd0Q2FudmFzSW5wdXRzLCBjYW52YXNFbGVtZW50OiBIVE1MQ2FudmFzRWxlbWVudCkge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBnbDogZ2xPcHRpb25zLFxuICAgICAgICAgICAgc2l6ZTogc2l6ZU9wdGlvbnMsXG4gICAgICAgICAgICBjYW1lcmE6IGNhbWVyYU9wdGlvbnMsXG4gICAgICAgICAgICByYXljYXN0ZXI6IHJheWNhc3Rlck9wdGlvbnMsXG4gICAgICAgICAgICBzY2VuZTogc2NlbmVPcHRpb25zLFxuICAgICAgICAgICAgZXZlbnRzLFxuICAgICAgICAgICAgb3J0aG9ncmFwaGljLFxuICAgICAgICAgICAgbG9va0F0LFxuICAgICAgICAgICAgc2hhZG93cyxcbiAgICAgICAgICAgIGxpbmVhcixcbiAgICAgICAgICAgIGxlZ2FjeSxcbiAgICAgICAgICAgIGZsYXQsXG4gICAgICAgICAgICBkcHIsXG4gICAgICAgICAgICBmcmFtZWxvb3AsXG4gICAgICAgICAgICBwZXJmb3JtYW5jZSxcbiAgICAgICAgfSA9IGlucHV0cztcblxuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0KCk7XG4gICAgICAgIGNvbnN0IHN0YXRlVG9VcGRhdGU6IFBhcnRpYWw8Tmd0U3RhdGU+ID0ge307XG5cbiAgICAgICAgLy8gc2V0dXAgcmVuZGVyZXJcbiAgICAgICAgbGV0IGdsID0gc3RhdGUuZ2w7XG4gICAgICAgIGlmICghc3RhdGUuZ2wpIHN0YXRlVG9VcGRhdGUuZ2wgPSBnbCA9IG1ha2VEZWZhdWx0UmVuZGVyZXIoZ2xPcHRpb25zLCBjYW52YXNFbGVtZW50KTtcblxuICAgICAgICAvLyBzZXR1cCByYXljYXN0ZXJcbiAgICAgICAgbGV0IHJheWNhc3RlciA9IHN0YXRlLnJheWNhc3RlcjtcbiAgICAgICAgaWYgKCFyYXljYXN0ZXIpIHN0YXRlVG9VcGRhdGUucmF5Y2FzdGVyID0gcmF5Y2FzdGVyID0gbmV3IFRIUkVFLlJheWNhc3RlcigpO1xuXG4gICAgICAgIC8vIHNldCByYXljYXN0ZXIgb3B0aW9uc1xuICAgICAgICBjb25zdCB7IHBhcmFtcywgLi4ub3B0aW9ucyB9ID0gcmF5Y2FzdGVyT3B0aW9ucyB8fCB7fTtcbiAgICAgICAgaWYgKCFpcy5lcXUob3B0aW9ucywgcmF5Y2FzdGVyLCBzaGFsbG93TG9vc2UpKSBhcHBseVByb3BzKHJheWNhc3RlciwgeyAuLi5vcHRpb25zIH0pO1xuICAgICAgICBpZiAoIWlzLmVxdShwYXJhbXMsIHJheWNhc3Rlci5wYXJhbXMsIHNoYWxsb3dMb29zZSkpIHtcbiAgICAgICAgICAgIGFwcGx5UHJvcHMocmF5Y2FzdGVyLCB7IHBhcmFtczogeyAuLi5yYXljYXN0ZXIucGFyYW1zLCAuLi4ocGFyYW1zIHx8IHt9KSB9IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY3JlYXRlIGRlZmF1bHQgY2FtZXJhXG4gICAgICAgIGlmICghc3RhdGUuY2FtZXJhKSB7XG4gICAgICAgICAgICBjb25zdCBpc0NhbWVyYSA9IGlzLmNhbWVyYShjYW1lcmFPcHRpb25zKTtcbiAgICAgICAgICAgIGxldCBjYW1lcmEgPSBpc0NhbWVyYSA/IGNhbWVyYU9wdGlvbnMgOiBtYWtlRGVmYXVsdENhbWVyYShvcnRob2dyYXBoaWMgfHwgZmFsc2UsIHN0YXRlLnNpemUpO1xuXG4gICAgICAgICAgICBpZiAoIWlzQ2FtZXJhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbWVyYU9wdGlvbnMpIGFwcGx5UHJvcHMoY2FtZXJhLCBjYW1lcmFPcHRpb25zKTtcblxuICAgICAgICAgICAgICAgIC8vIHNldCBwb3NpdGlvbi56XG4gICAgICAgICAgICAgICAgaWYgKCFjYW1lcmFPcHRpb25zPy5wb3NpdGlvbikgY2FtZXJhLnBvc2l0aW9uLnogPSA1O1xuXG4gICAgICAgICAgICAgICAgLy8gYWx3YXlzIGxvb2sgYXQgY2VudGVyIG9yIHBhc3NlZC1pbiBsb29rQXQgYnkgZGVmYXVsdFxuICAgICAgICAgICAgICAgIGlmICghY2FtZXJhT3B0aW9ucz8ucm90YXRpb24gJiYgIWNhbWVyYU9wdGlvbnM/LnF1YXRlcm5pb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobG9va0F0KSkgY2FtZXJhLmxvb2tBdChsb29rQXRbMF0sIGxvb2tBdFsxXSwgbG9va0F0WzJdKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobG9va0F0IGluc3RhbmNlb2YgVEhSRUUuVmVjdG9yMykgY2FtZXJhLmxvb2tBdChsb29rQXQpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGNhbWVyYS5sb29rQXQoMCwgMCwgMCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gdXBkYXRlIHByb2plY3Rpb24gbWF0cml4IGFmdGVyIGFwcGx5cHJvcHNcbiAgICAgICAgICAgICAgICBjYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeD8uKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghaXMuaW5zdGFuY2UoY2FtZXJhKSkgY2FtZXJhID0gcHJlcGFyZShjYW1lcmEsIHsgc3RvcmU6IHRoaXMgfSk7XG5cbiAgICAgICAgICAgIHN0YXRlVG9VcGRhdGUuY2FtZXJhID0gY2FtZXJhO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNldCB1cCBzY2VuZSAob25lIHRpbWUgb25seSEpXG4gICAgICAgIGlmICghc3RhdGUuc2NlbmUpIHtcbiAgICAgICAgICAgIGxldCBzY2VuZTogVEhSRUUuU2NlbmU7XG5cbiAgICAgICAgICAgIGlmIChzY2VuZU9wdGlvbnMgaW5zdGFuY2VvZiBUSFJFRS5TY2VuZSkge1xuICAgICAgICAgICAgICAgIHNjZW5lID0gcHJlcGFyZShzY2VuZU9wdGlvbnMsIHsgc3RvcmU6IHRoaXMgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNjZW5lID0gcHJlcGFyZShuZXcgVEhSRUUuU2NlbmUoKSwgeyBzdG9yZTogdGhpcyB9KTtcbiAgICAgICAgICAgICAgICBpZiAoc2NlbmVPcHRpb25zKSBhcHBseVByb3BzKHNjZW5lLCBzY2VuZU9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdGF0ZVRvVXBkYXRlLnNjZW5lID0gc2NlbmU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgdXAgWFIgKG9uZSB0aW1lIG9ubHkhKVxuICAgICAgICBpZiAoIXN0YXRlLnhyKSB7XG4gICAgICAgICAgICAvLyBIYW5kbGUgZnJhbWUgYmVoYXZpb3IgaW4gV2ViWFJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZVhSRnJhbWU6IFhSRnJhbWVSZXF1ZXN0Q2FsbGJhY2sgPSAodGltZXN0YW1wOiBudW1iZXIsIGZyYW1lPzogWFJGcmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXQoKTtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZnJhbWVsb29wID09PSAnbmV2ZXInKSByZXR1cm47XG4gICAgICAgICAgICAgICAgYWR2YW5jZSh0aW1lc3RhbXAsIHRydWUsIHRoaXMsIGZyYW1lKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIC8vIFRvZ2dsZSByZW5kZXIgc3dpdGNoaW5nIG9uIHNlc3Npb25cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZVNlc3Npb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldCgpO1xuICAgICAgICAgICAgICAgIHN0YXRlLmdsLnhyLmVuYWJsZWQgPSBzdGF0ZS5nbC54ci5pc1ByZXNlbnRpbmc7XG5cbiAgICAgICAgICAgICAgICBzdGF0ZS5nbC54ci5zZXRBbmltYXRpb25Mb29wKHN0YXRlLmdsLnhyLmlzUHJlc2VudGluZyA/IGhhbmRsZVhSRnJhbWUgOiBudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIXN0YXRlLmdsLnhyLmlzUHJlc2VudGluZykgc3RhdGUuaW52YWxpZGF0ZSgpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8gV2ViWFIgc2Vzc2lvbiBtYW5hZ2VyXG4gICAgICAgICAgICBjb25zdCB4ciA9IHtcbiAgICAgICAgICAgICAgICBjb25uZWN0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGdsLnhyLmFkZEV2ZW50TGlzdGVuZXIoJ3Nlc3Npb25zdGFydCcsIGhhbmRsZVNlc3Npb25DaGFuZ2UpO1xuICAgICAgICAgICAgICAgICAgICBnbC54ci5hZGRFdmVudExpc3RlbmVyKCdzZXNzaW9uZW5kJywgaGFuZGxlU2Vzc2lvbkNoYW5nZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBkaXNjb25uZWN0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGdsLnhyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Nlc3Npb25zdGFydCcsIGhhbmRsZVNlc3Npb25DaGFuZ2UpO1xuICAgICAgICAgICAgICAgICAgICBnbC54ci5yZW1vdmVFdmVudExpc3RlbmVyKCdzZXNzaW9uZW5kJywgaGFuZGxlU2Vzc2lvbkNoYW5nZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIC8vIFN1YnNjcmliZSB0byBXZWJYUiBzZXNzaW9uIGV2ZW50c1xuICAgICAgICAgICAgaWYgKGdsLnhyKSB4ci5jb25uZWN0KCk7XG4gICAgICAgICAgICBzdGF0ZVRvVXBkYXRlLnhyID0geHI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgc2hhZG93bWFwXG4gICAgICAgIGlmIChnbC5zaGFkb3dNYXApIHtcbiAgICAgICAgICAgIGNvbnN0IG9sZEVuYWJsZWQgPSBnbC5zaGFkb3dNYXAuZW5hYmxlZDtcbiAgICAgICAgICAgIGNvbnN0IG9sZFR5cGUgPSBnbC5zaGFkb3dNYXAudHlwZTtcbiAgICAgICAgICAgIGdsLnNoYWRvd01hcC5lbmFibGVkID0gISFzaGFkb3dzO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHNoYWRvd3MgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgIGdsLnNoYWRvd01hcC50eXBlID0gVEhSRUUuUENGU29mdFNoYWRvd01hcDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHNoYWRvd3MgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHlwZXMgPSB7XG4gICAgICAgICAgICAgICAgICAgIGJhc2ljOiBUSFJFRS5CYXNpY1NoYWRvd01hcCxcbiAgICAgICAgICAgICAgICAgICAgcGVyY2VudGFnZTogVEhSRUUuUENGU2hhZG93TWFwLFxuICAgICAgICAgICAgICAgICAgICBzb2Z0OiBUSFJFRS5QQ0ZTb2Z0U2hhZG93TWFwLFxuICAgICAgICAgICAgICAgICAgICB2YXJpYW5jZTogVEhSRUUuVlNNU2hhZG93TWFwLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZ2wuc2hhZG93TWFwLnR5cGUgPSB0eXBlc1tzaGFkb3dzXSA/PyBUSFJFRS5QQ0ZTb2Z0U2hhZG93TWFwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpcy5vYmooc2hhZG93cykpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGdsLnNoYWRvd01hcCwgc2hhZG93cyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChvbGRFbmFibGVkICE9PSBnbC5zaGFkb3dNYXAuZW5hYmxlZCB8fCBvbGRUeXBlICE9PSBnbC5zaGFkb3dNYXAudHlwZSkgY2hlY2tOZWVkc1VwZGF0ZShnbC5zaGFkb3dNYXApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2FmZWx5IHNldCBjb2xvciBtYW5hZ2VtZW50IGlmIGF2YWlsYWJsZS5cbiAgICAgICAgLy8gQXZvaWQgYWNjZXNzaW5nIFRIUkVFLkNvbG9yTWFuYWdlbWVudCB0byBwbGF5IG5pY2Ugd2l0aCBvbGRlciB2ZXJzaW9uc1xuICAgICAgICBpZiAoVEhSRUUuQ29sb3JNYW5hZ2VtZW50KSB7XG4gICAgICAgICAgICBjb25zdCBDb2xvck1hbmFnZW1lbnQgPSBUSFJFRS5Db2xvck1hbmFnZW1lbnQgYXMgTmd0QW55UmVjb3JkO1xuICAgICAgICAgICAgaWYgKCdlbmFibGVkJyBpbiBDb2xvck1hbmFnZW1lbnQpIENvbG9yTWFuYWdlbWVudFsnZW5hYmxlZCddID0gIWxlZ2FjeSA/PyBmYWxzZTtcbiAgICAgICAgICAgIGVsc2UgaWYgKCdsZWdhY3lNb2RlJyBpbiBDb2xvck1hbmFnZW1lbnQpIENvbG9yTWFuYWdlbWVudFsnbGVnYWN5TW9kZSddID0gbGVnYWN5ID8/IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzZXQgY29sb3Igc3BhY2UgYW5kIHRvbmVtYXBwaW5nIHByZWZlcmVuY2VzXG4gICAgICAgIGNvbnN0IExpbmVhckVuY29kaW5nID0gMzAwMDtcbiAgICAgICAgY29uc3Qgc1JHQkVuY29kaW5nID0gMzAwMTtcbiAgICAgICAgYXBwbHlQcm9wcyhnbCwge1xuICAgICAgICAgICAgb3V0cHV0RW5jb2Rpbmc6IGxpbmVhciA/IExpbmVhckVuY29kaW5nIDogc1JHQkVuY29kaW5nLFxuICAgICAgICAgICAgdG9uZU1hcHBpbmc6IGZsYXQgPyBUSFJFRS5Ob1RvbmVNYXBwaW5nIDogVEhSRUUuQUNFU0ZpbG1pY1RvbmVNYXBwaW5nLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBVcGRhdGUgY29sb3IgbWFuYWdlbWVudCBzdGF0ZVxuICAgICAgICBpZiAoc3RhdGUubGVnYWN5ICE9PSBsZWdhY3kpIHN0YXRlVG9VcGRhdGUubGVnYWN5ID0gbGVnYWN5O1xuICAgICAgICBpZiAoc3RhdGUubGluZWFyICE9PSBsaW5lYXIpIHN0YXRlVG9VcGRhdGUubGluZWFyID0gbGluZWFyO1xuICAgICAgICBpZiAoc3RhdGUuZmxhdCAhPT0gZmxhdCkgc3RhdGVUb1VwZGF0ZS5mbGF0ID0gZmxhdDtcblxuICAgICAgICAvLyBTZXQgZ2wgcHJvcHNcbiAgICAgICAgZ2wuc2V0Q2xlYXJBbHBoYSgwKTtcbiAgICAgICAgZ2wuc2V0UGl4ZWxSYXRpbyhtYWtlRHByKHN0YXRlLnZpZXdwb3J0LmRwcikpO1xuICAgICAgICBnbC5zZXRTaXplKHN0YXRlLnNpemUud2lkdGgsIHN0YXRlLnNpemUuaGVpZ2h0KTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBpcy5vYmooZ2xPcHRpb25zKSAmJlxuICAgICAgICAgICAgISh0eXBlb2YgZ2xPcHRpb25zID09PSAnZnVuY3Rpb24nKSAmJlxuICAgICAgICAgICAgIWlzLnJlbmRlcmVyKGdsT3B0aW9ucykgJiZcbiAgICAgICAgICAgICFpcy5lcXUoZ2xPcHRpb25zLCBnbCwgc2hhbGxvd0xvb3NlKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGFwcGx5UHJvcHMoZ2wsIGdsT3B0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdG9yZSBldmVudHMgaW50ZXJuYWxseVxuICAgICAgICBpZiAoZXZlbnRzICYmICFzdGF0ZS5ldmVudHMuaGFuZGxlcnMpIHN0YXRlVG9VcGRhdGUuZXZlbnRzID0gZXZlbnRzKHRoaXMpO1xuXG4gICAgICAgIC8vIENoZWNrIHBlcmZvcm1hbmNlXG4gICAgICAgIGlmIChwZXJmb3JtYW5jZSAmJiAhaXMuZXF1KHBlcmZvcm1hbmNlLCBzdGF0ZS5wZXJmb3JtYW5jZSwgc2hhbGxvd0xvb3NlKSkge1xuICAgICAgICAgICAgc3RhdGVUb1VwZGF0ZS5wZXJmb3JtYW5jZSA9IHsgLi4uc3RhdGUucGVyZm9ybWFuY2UsIC4uLnBlcmZvcm1hbmNlIH07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldChzdGF0ZVRvVXBkYXRlKTtcblxuICAgICAgICAvLyBDaGVjayBwaXhlbHJhdGlvXG4gICAgICAgIGlmIChkcHIgJiYgc3RhdGUudmlld3BvcnQuZHByICE9PSBtYWtlRHByKGRwcikpIHN0YXRlLnNldERwcihkcHIpO1xuICAgICAgICAvLyBDaGVjayBzaXplLCBhbGxvdyBpdCB0byB0YWtlIG9uIGNvbnRhaW5lciBib3VuZHMgaW5pdGlhbGx5XG4gICAgICAgIGNvbnN0IHNpemUgPSBjb21wdXRlSW5pdGlhbFNpemUoY2FudmFzRWxlbWVudCwgc2l6ZU9wdGlvbnMpO1xuICAgICAgICBpZiAoIWlzLmVxdShzaXplLCBzdGF0ZS5zaXplLCBzaGFsbG93TG9vc2UpKSBzdGF0ZS5zZXRTaXplKHNpemUud2lkdGgsIHNpemUuaGVpZ2h0LCBzaXplLnRvcCwgc2l6ZS5sZWZ0KTtcblxuICAgICAgICAvLyBDaGVjayBmcmFtZWxvb3BcbiAgICAgICAgaWYgKHN0YXRlLmZyYW1lbG9vcCAhPT0gZnJhbWVsb29wKSBzdGF0ZS5zZXRGcmFtZWxvb3AoZnJhbWVsb29wKTtcblxuICAgICAgICBpZiAoIXRoaXMuZ2V0KCdyZWFkeScpKSB0aGlzLnNldCh7IHJlYWR5OiB0cnVlIH0pO1xuXG4gICAgICAgIHRoaXMuI2ludmFsaWRhdGUoKTtcbiAgICB9XG5cbiAgICBkZXN0cm95KGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5zZXQoKHN0YXRlKSA9PiAoeyBpbnRlcm5hbDogeyAuLi5zdGF0ZS5pbnRlcm5hbCwgYWN0aXZlOiBmYWxzZSB9IH0pKTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgZ2wsIHhyLCBldmVudHMgfSA9IHRoaXMuZ2V0KCk7XG4gICAgICAgICAgICBpZiAoZ2wpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnRzLmRpc2Nvbm5lY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRzLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBnbC5yZW5kZXJMaXN0cy5kaXNwb3NlKCk7XG4gICAgICAgICAgICAgICAgZ2wuZm9yY2VDb250ZXh0TG9zcygpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGdsLnhyICYmIGdsLnhyLmVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2wueHIuc2V0QW5pbWF0aW9uTG9vcChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgeHIuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRpc3Bvc2UodGhpcy5nZXQoKSk7XG5cbiAgICAgICAgICAgICAgICByb290U3RhdGVNYXAuZGVsZXRlKGNhbnZhcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDUwMCk7XG4gICAgfVxuXG4gICAgI3Jlc2l6ZSgpIHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldCgpO1xuICAgICAgICBsZXQgb2xkU2l6ZSA9IHN0YXRlLnNpemU7XG4gICAgICAgIGxldCBvbGREcHIgPSBzdGF0ZS52aWV3cG9ydC5kcHI7XG4gICAgICAgIGxldCBvbGRDYW1lcmEgPSBzdGF0ZS5jYW1lcmE7XG5cbiAgICAgICAgY29uc3QgY2FtZXJhID0gdGhpcy5zZWxlY3QoJ2NhbWVyYScpO1xuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5zZWxlY3QoJ3NpemUnKTtcbiAgICAgICAgY29uc3Qgdmlld3BvcnQgPSB0aGlzLnNlbGVjdCgndmlld3BvcnQnKTtcblxuICAgICAgICBjb25zdCB0cmlnZ2VycyA9IGNvbXB1dGVkKCgpID0+ICh7IGNhbWVyYTogY2FtZXJhKCksIHNpemU6IHNpemUoKSwgdmlld3BvcnQ6IHZpZXdwb3J0KCksIGdsOiB0aGlzLmdldCgnZ2wnKSB9KSk7XG5cbiAgICAgICAgZWZmZWN0KFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgY2FtZXJhLCBzaXplLCB2aWV3cG9ydCwgZ2wgfSA9IHRyaWdnZXJzKCk7XG4gICAgICAgICAgICAgICAgLy8gcmVzaXplIGNhbWVyYSBhbmQgcmVuZGVyZXIgb24gY2hhbmdlcyB0byBzaXplIGFuZCBkcHJcbiAgICAgICAgICAgICAgICBpZiAoc2l6ZSAhPT0gb2xkU2l6ZSB8fCB2aWV3cG9ydC5kcHIgIT09IG9sZERwcikge1xuICAgICAgICAgICAgICAgICAgICBvbGRTaXplID0gc2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgb2xkRHByID0gdmlld3BvcnQuZHByO1xuICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGUgY2FtZXJhXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNhbWVyYShjYW1lcmEsIHNpemUpO1xuICAgICAgICAgICAgICAgICAgICBnbC5zZXRQaXhlbFJhdGlvKHZpZXdwb3J0LmRwcik7XG4gICAgICAgICAgICAgICAgICAgIGdsLnNldFNpemUoc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSB2aWV3cG9ydCB3aGVuIGNhbWVyYSBjaGFuZ2VzXG4gICAgICAgICAgICAgICAgaWYgKGNhbWVyYSAhPT0gb2xkQ2FtZXJhKSB7XG4gICAgICAgICAgICAgICAgICAgIG9sZENhbWVyYSA9IGNhbWVyYTtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlQ2FtZXJhKGNhbWVyYSwgc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KChzdGF0ZSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdwb3J0OiB7IC4uLnN0YXRlLnZpZXdwb3J0LCAuLi5zdGF0ZS52aWV3cG9ydC5nZXRDdXJyZW50Vmlld3BvcnQoY2FtZXJhKSB9LFxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHsgaW5qZWN0b3I6IHRoaXMuI2luamVjdG9yLCBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgI2ludmFsaWRhdGUoKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5zZWxlY3QoKTtcbiAgICAgICAgZWZmZWN0KFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0YXRlKCkuaW52YWxpZGF0ZSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHsgaW5qZWN0b3I6IHRoaXMuI2luamVjdG9yIH1cbiAgICAgICAgKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVJbml0aWFsU2l6ZShjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50IHwgVEhSRUUuT2Zmc2NyZWVuQ2FudmFzLCBkZWZhdWx0U2l6ZT86IE5ndFNpemUpOiBOZ3RTaXplIHtcbiAgICBpZiAoZGVmYXVsdFNpemUpIHJldHVybiBkZWZhdWx0U2l6ZTtcblxuICAgIGlmIChjYW52YXMgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCAmJiBjYW52YXMucGFyZW50RWxlbWVudCkge1xuICAgICAgICByZXR1cm4gY2FudmFzLnBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgd2lkdGg6IDAsIGhlaWdodDogMCwgdG9wOiAwLCBsZWZ0OiAwIH07XG59XG5cbi8vIERpc3Bvc2VzIGFuIG9iamVjdCBhbmQgYWxsIGl0cyBwcm9wZXJ0aWVzXG5mdW5jdGlvbiBkaXNwb3NlPFRPYmogZXh0ZW5kcyB7IGRpc3Bvc2U/OiAoKSA9PiB2b2lkOyB0eXBlPzogc3RyaW5nOyBba2V5OiBzdHJpbmddOiBhbnkgfT4ob2JqOiBUT2JqKSB7XG4gICAgaWYgKG9iai5kaXNwb3NlICYmICFpcy5zY2VuZShvYmopKSBvYmouZGlzcG9zZSgpO1xuICAgIGZvciAoY29uc3QgcCBpbiBvYmopIHtcbiAgICAgICAgKHAgYXMgYW55KS5kaXNwb3NlPy4oKTtcbiAgICAgICAgZGVsZXRlIG9ialtwXTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0LWluLWluamVjdGlvbi1jb250ZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlL3NyYy9saWIvdXRpbHMvYXNzZXJ0LWluLWluamVjdGlvbi1jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNFLE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxFQUFZLEVBQUUsUUFBbUI7SUFDcEUsSUFBSTtRQUNBLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDWCxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUMzQjtRQUNELE9BQU8sUUFBUSxDQUFDO0tBQ25CO0lBQUMsTUFBTTtRQUNKLENBQUMsUUFBUSxJQUFJLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLE9BQU8sSUFBSyxDQUFDO0tBQ2hCO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdG9yLCBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0SW5qZWN0aW9uQ29udGV4dChmbjogRnVuY3Rpb24sIGluamVjdG9yPzogSW5qZWN0b3IpOiBJbmplY3RvciB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKCFpbmplY3Rvcikge1xuICAgICAgICAgICAgcmV0dXJuIGluamVjdChJbmplY3Rvcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluamVjdG9yO1xuICAgIH0gY2F0Y2gge1xuICAgICAgICAhaW5qZWN0b3IgJiYgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0KGZuKTtcbiAgICAgICAgcmV0dXJuIG51bGwhO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { untracked } from '@angular/core';
|
|
2
|
-
import { NgtSignalStore } from '../stores/signal.store';
|
|
3
|
-
import { createSignal } from './signal';
|
|
4
|
-
import { checkUpdate } from './update';
|
|
5
|
-
export function getLocalState(obj) {
|
|
6
|
-
if (!obj)
|
|
7
|
-
return {};
|
|
8
|
-
return obj['__ngt__'] || {};
|
|
9
|
-
}
|
|
10
|
-
export function invalidateInstance(instance) {
|
|
11
|
-
const state = getLocalState(instance).store?.get();
|
|
12
|
-
if (state && state.internal.frames === 0)
|
|
13
|
-
state.invalidate();
|
|
14
|
-
checkUpdate(instance);
|
|
15
|
-
}
|
|
16
|
-
export function prepare(object, localState) {
|
|
17
|
-
const instance = object;
|
|
18
|
-
if (localState?.primitive || !instance.__ngt__) {
|
|
19
|
-
const { objects = createSignal([]), nonObjects = createSignal([]), ...rest } = localState || {};
|
|
20
|
-
instance.__ngt__ = {
|
|
21
|
-
previousAttach: null,
|
|
22
|
-
store: null,
|
|
23
|
-
parent: createSignal(null),
|
|
24
|
-
memoized: {},
|
|
25
|
-
eventCount: 0,
|
|
26
|
-
handlers: {},
|
|
27
|
-
objects,
|
|
28
|
-
nonObjects,
|
|
29
|
-
nativeProps: new NgtSignalStore({}),
|
|
30
|
-
add: (object, type) => {
|
|
31
|
-
const current = untracked(instance.__ngt__[type]);
|
|
32
|
-
const foundIndex = current.indexOf((obj) => obj === object);
|
|
33
|
-
if (foundIndex > -1) {
|
|
34
|
-
// if we add an object with the same reference, then we switch it out
|
|
35
|
-
// and update the BehaviorSubject
|
|
36
|
-
current.splice(foundIndex, 1, object);
|
|
37
|
-
instance.__ngt__[type].set(current);
|
|
38
|
-
}
|
|
39
|
-
else {
|
|
40
|
-
instance.__ngt__[type].update((prev) => [...prev, object]);
|
|
41
|
-
}
|
|
42
|
-
notifyAncestors(untracked(instance.__ngt__.parent));
|
|
43
|
-
},
|
|
44
|
-
remove: (object, type) => {
|
|
45
|
-
instance.__ngt__[type].update((prev) => prev.filter((o) => o !== object));
|
|
46
|
-
notifyAncestors(untracked(instance.__ngt__.parent));
|
|
47
|
-
},
|
|
48
|
-
...rest,
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
return instance;
|
|
52
|
-
}
|
|
53
|
-
function notifyAncestors(instance) {
|
|
54
|
-
if (!instance)
|
|
55
|
-
return;
|
|
56
|
-
const localState = getLocalState(instance);
|
|
57
|
-
if (localState.objects)
|
|
58
|
-
localState.objects.update((prev) => prev);
|
|
59
|
-
if (localState.nonObjects)
|
|
60
|
-
localState.nonObjects.update((prev) => prev);
|
|
61
|
-
notifyAncestors(untracked(localState.parent));
|
|
62
|
-
}
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUvc3JjL2xpYi91dGlscy9pbnN0YW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFdkMsTUFBTSxVQUFVLGFBQWEsQ0FDekIsR0FBMEI7SUFFMUIsSUFBSSxDQUFDLEdBQUc7UUFBRSxPQUFPLEVBQXNDLENBQUM7SUFDeEQsT0FBUSxHQUFvQixDQUFDLFNBQVMsQ0FBQyxJQUFLLEVBQTRCLENBQUM7QUFDN0UsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBMkIsUUFBbUI7SUFDNUUsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNuRCxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzdELFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxQixDQUFDO0FBRUQsTUFBTSxVQUFVLE9BQU8sQ0FDbkIsTUFBaUIsRUFDakIsVUFBMkM7SUFFM0MsTUFBTSxRQUFRLEdBQUcsTUFBK0MsQ0FBQztJQUVqRSxJQUFJLFVBQVUsRUFBRSxTQUFTLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFO1FBQzVDLE1BQU0sRUFDRixPQUFPLEdBQUcsWUFBWSxDQUFvQixFQUFFLENBQUMsRUFDN0MsVUFBVSxHQUFHLFlBQVksQ0FBb0IsRUFBRSxDQUFDLEVBQ2hELEdBQUcsSUFBSSxFQUNWLEdBQUcsVUFBVSxJQUFJLEVBQUUsQ0FBQztRQUVyQixRQUFRLENBQUMsT0FBTyxHQUFHO1lBQ2YsY0FBYyxFQUFFLElBQUk7WUFDcEIsS0FBSyxFQUFFLElBQUk7WUFDWCxNQUFNLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQztZQUMxQixRQUFRLEVBQUUsRUFBRTtZQUNaLFVBQVUsRUFBRSxDQUFDO1lBQ2IsUUFBUSxFQUFFLEVBQUU7WUFDWixPQUFPO1lBQ1AsVUFBVTtZQUNWLFdBQVcsRUFBRSxJQUFJLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDbkMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFO2dCQUNsQixNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNsRCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBb0IsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLE1BQU0sQ0FBQyxDQUFDO2dCQUM3RSxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDakIscUVBQXFFO29CQUNyRSxpQ0FBaUM7b0JBQ2pDLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDdEMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQ3ZDO3FCQUFNO29CQUNILFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7aUJBQzlEO2dCQUNELGVBQWUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ3hELENBQUM7WUFDRCxNQUFNLEVBQUUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUU7Z0JBQ3JCLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDMUUsZUFBZSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDeEQsQ0FBQztZQUNELEdBQUcsSUFBSTtTQUNlLENBQUM7S0FDOUI7SUFFRCxPQUFPLFFBQVEsQ0FBQztBQUNwQixDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsUUFBZ0M7SUFDckQsSUFBSSxDQUFDLFFBQVE7UUFBRSxPQUFPO0lBQ3RCLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzQyxJQUFJLFVBQVUsQ0FBQyxPQUFPO1FBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xFLElBQUksVUFBVSxDQUFDLFVBQVU7UUFBRSxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEUsZUFBZSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNsRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdW50cmFja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ3RTaWduYWxTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy9zaWduYWwuc3RvcmUnO1xuaW1wb3J0IHR5cGUgeyBOZ3RBbnlSZWNvcmQsIE5ndEluc3RhbmNlTG9jYWxTdGF0ZSwgTmd0SW5zdGFuY2VOb2RlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgY3JlYXRlU2lnbmFsIH0gZnJvbSAnLi9zaWduYWwnO1xuaW1wb3J0IHsgY2hlY2tVcGRhdGUgfSBmcm9tICcuL3VwZGF0ZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2NhbFN0YXRlPFRJbnN0YW5jZSBleHRlbmRzIG9iamVjdCA9IE5ndEFueVJlY29yZD4oXG4gICAgb2JqOiBUSW5zdGFuY2UgfCB1bmRlZmluZWRcbik6IE5ndEluc3RhbmNlTG9jYWxTdGF0ZSB7XG4gICAgaWYgKCFvYmopIHJldHVybiB7fSBhcyB1bmtub3duIGFzIE5ndEluc3RhbmNlTG9jYWxTdGF0ZTtcbiAgICByZXR1cm4gKG9iaiBhcyBOZ3RBbnlSZWNvcmQpWydfX25ndF9fJ10gfHwgKHt9IGFzIE5ndEluc3RhbmNlTG9jYWxTdGF0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZhbGlkYXRlSW5zdGFuY2U8VEluc3RhbmNlIGV4dGVuZHMgb2JqZWN0PihpbnN0YW5jZTogVEluc3RhbmNlKSB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXRMb2NhbFN0YXRlKGluc3RhbmNlKS5zdG9yZT8uZ2V0KCk7XG4gICAgaWYgKHN0YXRlICYmIHN0YXRlLmludGVybmFsLmZyYW1lcyA9PT0gMCkgc3RhdGUuaW52YWxpZGF0ZSgpO1xuICAgIGNoZWNrVXBkYXRlKGluc3RhbmNlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmU8VEluc3RhbmNlIGV4dGVuZHMgb2JqZWN0ID0gTmd0QW55UmVjb3JkPihcbiAgICBvYmplY3Q6IFRJbnN0YW5jZSxcbiAgICBsb2NhbFN0YXRlPzogUGFydGlhbDxOZ3RJbnN0YW5jZUxvY2FsU3RhdGU+XG4pOiBOZ3RJbnN0YW5jZU5vZGU8VEluc3RhbmNlPiB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBvYmplY3QgYXMgdW5rbm93biBhcyBOZ3RJbnN0YW5jZU5vZGU8VEluc3RhbmNlPjtcblxuICAgIGlmIChsb2NhbFN0YXRlPy5wcmltaXRpdmUgfHwgIWluc3RhbmNlLl9fbmd0X18pIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgb2JqZWN0cyA9IGNyZWF0ZVNpZ25hbDxOZ3RJbnN0YW5jZU5vZGVbXT4oW10pLFxuICAgICAgICAgICAgbm9uT2JqZWN0cyA9IGNyZWF0ZVNpZ25hbDxOZ3RJbnN0YW5jZU5vZGVbXT4oW10pLFxuICAgICAgICAgICAgLi4ucmVzdFxuICAgICAgICB9ID0gbG9jYWxTdGF0ZSB8fCB7fTtcblxuICAgICAgICBpbnN0YW5jZS5fX25ndF9fID0ge1xuICAgICAgICAgICAgcHJldmlvdXNBdHRhY2g6IG51bGwsXG4gICAgICAgICAgICBzdG9yZTogbnVsbCxcbiAgICAgICAgICAgIHBhcmVudDogY3JlYXRlU2lnbmFsKG51bGwpLFxuICAgICAgICAgICAgbWVtb2l6ZWQ6IHt9LFxuICAgICAgICAgICAgZXZlbnRDb3VudDogMCxcbiAgICAgICAgICAgIGhhbmRsZXJzOiB7fSxcbiAgICAgICAgICAgIG9iamVjdHMsXG4gICAgICAgICAgICBub25PYmplY3RzLFxuICAgICAgICAgICAgbmF0aXZlUHJvcHM6IG5ldyBOZ3RTaWduYWxTdG9yZSh7fSksXG4gICAgICAgICAgICBhZGQ6IChvYmplY3QsIHR5cGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gdW50cmFja2VkKGluc3RhbmNlLl9fbmd0X19bdHlwZV0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvdW5kSW5kZXggPSBjdXJyZW50LmluZGV4T2YoKG9iajogTmd0SW5zdGFuY2VOb2RlKSA9PiBvYmogPT09IG9iamVjdCk7XG4gICAgICAgICAgICAgICAgaWYgKGZvdW5kSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiB3ZSBhZGQgYW4gb2JqZWN0IHdpdGggdGhlIHNhbWUgcmVmZXJlbmNlLCB0aGVuIHdlIHN3aXRjaCBpdCBvdXRcbiAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHVwZGF0ZSB0aGUgQmVoYXZpb3JTdWJqZWN0XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQuc3BsaWNlKGZvdW5kSW5kZXgsIDEsIG9iamVjdCk7XG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLl9fbmd0X19bdHlwZV0uc2V0KGN1cnJlbnQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLl9fbmd0X19bdHlwZV0udXBkYXRlKChwcmV2KSA9PiBbLi4ucHJldiwgb2JqZWN0XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5vdGlmeUFuY2VzdG9ycyh1bnRyYWNrZWQoaW5zdGFuY2UuX19uZ3RfXy5wYXJlbnQpKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZW1vdmU6IChvYmplY3QsIHR5cGUpID0+IHtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5fX25ndF9fW3R5cGVdLnVwZGF0ZSgocHJldikgPT4gcHJldi5maWx0ZXIoKG8pID0+IG8gIT09IG9iamVjdCkpO1xuICAgICAgICAgICAgICAgIG5vdGlmeUFuY2VzdG9ycyh1bnRyYWNrZWQoaW5zdGFuY2UuX19uZ3RfXy5wYXJlbnQpKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAuLi5yZXN0LFxuICAgICAgICB9IGFzIE5ndEluc3RhbmNlTG9jYWxTdGF0ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbmZ1bmN0aW9uIG5vdGlmeUFuY2VzdG9ycyhpbnN0YW5jZTogTmd0SW5zdGFuY2VOb2RlIHwgbnVsbCkge1xuICAgIGlmICghaW5zdGFuY2UpIHJldHVybjtcbiAgICBjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShpbnN0YW5jZSk7XG4gICAgaWYgKGxvY2FsU3RhdGUub2JqZWN0cykgbG9jYWxTdGF0ZS5vYmplY3RzLnVwZGF0ZSgocHJldikgPT4gcHJldik7XG4gICAgaWYgKGxvY2FsU3RhdGUubm9uT2JqZWN0cykgbG9jYWxTdGF0ZS5ub25PYmplY3RzLnVwZGF0ZSgocHJldikgPT4gcHJldik7XG4gICAgbm90aWZ5QW5jZXN0b3JzKHVudHJhY2tlZChsb2NhbFN0YXRlLnBhcmVudCkpO1xufVxuIl19
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
export function safeDetectChanges(cdr) {
|
|
2
|
-
if (!cdr)
|
|
3
|
-
return;
|
|
4
|
-
try {
|
|
5
|
-
// dynamic created component with ViewContainerRef#createComponent does not have Context
|
|
6
|
-
// but it has _attachedToViewContainer
|
|
7
|
-
if (cdr['_attachedToViewContainer'] || !!cdr['context']) {
|
|
8
|
-
cdr.detectChanges();
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
catch (e) {
|
|
12
|
-
cdr.markForCheck();
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZS1kZXRlY3QtY2hhbmdlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci10aHJlZS9zcmMvbGliL3V0aWxzL3NhZmUtZGV0ZWN0LWNoYW5nZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEdBQXlDO0lBQ3ZFLElBQUksQ0FBQyxHQUFHO1FBQUUsT0FBTztJQUNqQixJQUFJO1FBQ0Esd0ZBQXdGO1FBQ3hGLHNDQUFzQztRQUN0QyxJQUFLLEdBQW9CLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLENBQUUsR0FBb0IsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUN6RixHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDdkI7S0FDSjtJQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ1IsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0tBQ3RCO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7IE5ndEFueVJlY29yZCB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNhZmVEZXRlY3RDaGFuZ2VzKGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYgfCB1bmRlZmluZWQgfCBudWxsKSB7XG4gICAgaWYgKCFjZHIpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgICAvLyBkeW5hbWljIGNyZWF0ZWQgY29tcG9uZW50IHdpdGggVmlld0NvbnRhaW5lclJlZiNjcmVhdGVDb21wb25lbnQgZG9lcyBub3QgaGF2ZSBDb250ZXh0XG4gICAgICAgIC8vIGJ1dCBpdCBoYXMgX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyXG4gICAgICAgIGlmICgoY2RyIGFzIE5ndEFueVJlY29yZClbJ19hdHRhY2hlZFRvVmlld0NvbnRhaW5lciddIHx8ICEhKGNkciBhcyBOZ3RBbnlSZWNvcmQpWydjb250ZXh0J10pIHtcbiAgICAgICAgICAgIGNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG59XG4iXX0=
|