angular-three 1.0.0-beta.0 → 1.0.0-beta.10

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 CHANGED
@@ -1,7 +1,58 @@
1
- # angular-three
1
+ # Angular Renderer for THREE.js
2
2
 
3
- This library was generated with [Nx](https://nx.dev).
3
+ Leverage your [Angular](https://angular.io) to build 3D applications with [THREE.js](https://threejs.org)
4
4
 
5
- ## Running unit tests
5
+ ## Installation
6
6
 
7
- Run `nx test angular-three` to execute the unit tests.
7
+ ```shell
8
+ npm i angular-three three
9
+ ```
10
+
11
+ ```shell
12
+ npm i -D @types/three
13
+ ```
14
+
15
+ > Typically, we'd want to keep `three` and `@types/three` on the same minor version. Eg: `0.147`, `0.148` etc..
16
+
17
+ ## Simple usage
18
+
19
+ 1. Create a `Scene` component as a Standalone Component
20
+
21
+ ```ts
22
+ import { extend } from 'angular-three';
23
+ import { Mesh, BoxGeometry, MeshBasicMaterial } from 'three';
24
+
25
+ extend({ Mesh, BoxGeometry, MeshBasicMaterial });
26
+
27
+ @Component({
28
+ standalone: true,
29
+ template: `
30
+ <ngt-mesh>
31
+ <ngt-box-geometry />
32
+ <ngt-mesh-basic-material color="darkred" />
33
+ </ngt-mesh>
34
+ `,
35
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
36
+ })
37
+ export class Scene {}
38
+ ```
39
+
40
+ - `extend` will add the THREE entities to `angular-three` catalogue which allows the renderer to recognize the custom tags: `ngt-mesh`, `ngt-box-geometry` etc..
41
+ - Custom Element tags follow this rule: `ngt-` + THREE classes in **kebab-case**. `Mesh` -> `ngt-mesh`
42
+ - `schemas: [CUSTOM_ELEMENTS_SCHEMA]` allows us to use custom tags on the template. This is Angular's limitation at the moment
43
+
44
+ 2. Render `<ngt-canvas>` component, use `Scene` component above to pass into `[scene]` input on `<ngt-canvas>`
45
+
46
+ ```html
47
+ <ngt-canvas [scene]="Scene" />
48
+ ```
49
+
50
+ - `ngt-canvas` creates the basic building blocks of THREE.js: a default `WebGLRenderer`, a default `Scene`, and a default `PerspectiveCamera`
51
+
52
+ ## Documentations
53
+
54
+ Read more about Angular Three usages in [TBD Documentations]()
55
+
56
+ ## Contributions
57
+
58
+ Contributions are welcomed
package/esm2020/index.mjs CHANGED
@@ -1,6 +1,16 @@
1
1
  export * from './lib/canvas';
2
- export * from './lib/types';
2
+ export * from './lib/di/before-render';
3
3
  export * from './lib/di/catalogue';
4
+ export * from './lib/di/destroy';
5
+ export * from './lib/di/ref';
4
6
  export * from './lib/directives/args';
5
7
  export * from './lib/directives/repeat';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHlCQUF5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvY2FudmFzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3R5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpL2NhdGFsb2d1ZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL2FyZ3MnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9yZXBlYXQnO1xuIl19
8
+ export * from './lib/loader';
9
+ export * from './lib/pipes/push';
10
+ export * from './lib/stores/rx-store';
11
+ export * from './lib/stores/store';
12
+ export * from './lib/types';
13
+ export * from './lib/utils/instance';
14
+ export * from './lib/utils/is';
15
+ export * from './lib/utils/update';
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2NhbnZhcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaS9iZWZvcmUtcmVuZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpL2NhdGFsb2d1ZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaS9kZXN0cm95JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpL3JlZic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL2FyZ3MnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9yZXBlYXQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbG9hZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BpcGVzL3B1c2gnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc3RvcmVzL3J4LXN0b3JlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3N0b3Jlcy9zdG9yZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscy9pbnN0YW5jZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscy9pcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscy91cGRhdGUnO1xuIl19
@@ -1,26 +1,13 @@
1
1
  import { ChangeDetectorRef, Component, createEnvironmentInjector, ElementRef, EnvironmentInjector, EventEmitter, HostBinding, inject, Input, Output, Type, ViewChild, ViewContainerRef, } from '@angular/core';
2
- import { injectNgxResize, provideNgxResizeOptions } from 'ngx-resize';
2
+ import { NgxResize, provideNgxResizeOptions } from 'ngx-resize';
3
3
  import { filter } from 'rxjs';
4
+ import { injectNgtLoader } from './loader';
4
5
  import { provideNgtRenderer } from './renderer/provider';
5
6
  import { NgtRxStore } from './stores/rx-store';
6
7
  import { NgtStore, rootStateMap } from './stores/store';
7
8
  import { is } from './utils/is';
8
9
  import { createPointerEvents } from './web/events';
9
- import { injectNgtLoader } from './loader';
10
10
  import * as i0 from "@angular/core";
11
- export class NgtCanvasContainer {
12
- constructor() {
13
- this.canvasResize = injectNgxResize();
14
- }
15
- }
16
- NgtCanvasContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: NgtCanvasContainer, deps: [], target: i0.ɵɵFactoryTarget.Component });
17
- NgtCanvasContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.1", type: NgtCanvasContainer, isStandalone: true, selector: "ngt-canvas-container", outputs: { canvasResize: "canvasResize" }, providers: [provideNgxResizeOptions({ emitInZone: false })], ngImport: i0, template: '<ng-content />', isInline: true, styles: [":host{display:block;width:100%;height:100%}\n"] });
18
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: NgtCanvasContainer, decorators: [{
19
- type: Component,
20
- args: [{ selector: 'ngt-canvas-container', standalone: true, template: '<ng-content />', providers: [provideNgxResizeOptions({ emitInZone: false })], styles: [":host{display:block;width:100%;height:100%}\n"] }]
21
- }], propDecorators: { canvasResize: [{
22
- type: Output
23
- }] } });
24
11
  export class NgtCanvas extends NgtRxStore {
25
12
  constructor() {
26
13
  super(...arguments);
@@ -158,9 +145,12 @@ export class NgtCanvas extends NgtRxStore {
158
145
  compoundPrefixes: this.compoundPrefixes,
159
146
  }),
160
147
  ], this.envInjector);
161
- this.glRef = this.glAnchor.createComponent(this.scene, { environmentInjector: this.glEnvInjector });
162
- this.glRef.changeDetectorRef.detectChanges();
148
+ this.glRef = this.glAnchor.createComponent(this.sceneGraph, {
149
+ environmentInjector: this.glEnvInjector,
150
+ });
163
151
  this.glRef.changeDetectorRef.detach();
152
+ // here, we override the detectChanges to also call detectChanges on the ComponentRef
153
+ this.overrideDetectChanges();
164
154
  this.cdr.detectChanges();
165
155
  });
166
156
  }
@@ -174,29 +164,34 @@ export class NgtCanvas extends NgtRxStore {
174
164
  injectNgtLoader.destroy();
175
165
  super.ngOnDestroy();
176
166
  }
167
+ overrideDetectChanges() {
168
+ const originalDetectChanges = this.cdr.detectChanges.bind(this.cdr);
169
+ this.cdr.detectChanges = () => {
170
+ originalDetectChanges();
171
+ this.glRef?.changeDetectorRef.detectChanges();
172
+ };
173
+ }
177
174
  }
178
175
  NgtCanvas.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: NgtCanvas, deps: null, target: i0.ɵɵFactoryTarget.Component });
179
- NgtCanvas.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.1", type: NgtCanvas, isStandalone: true, selector: "ngt-canvas", inputs: { scene: "scene", compoundPrefixes: "compoundPrefixes", linear: "linear", legacy: "legacy", flat: "flat", orthographic: "orthographic", frameloop: "frameloop", dpr: "dpr", raycaster: "raycaster", shadows: "shadows", camera: "camera", gl: "gl", eventSource: "eventSource", eventPrefix: "eventPrefix", lookAt: "lookAt", performance: "performance" }, outputs: { created: "created", pointerMissed: "pointerMissed" }, host: { properties: { "class.ngt-canvas": "this.hostClass", "style.pointerEvents": "this.pointerEvents" } }, providers: [NgtStore], viewQueries: [{ propertyName: "glCanvas", first: true, predicate: ["glCanvas"], descendants: true, static: true }, { propertyName: "glAnchor", first: true, predicate: ["glAnchor"], descendants: true, read: ViewContainerRef, static: true }], usesInheritance: true, ngImport: i0, template: `
180
- <ngt-canvas-container (canvasResize)="onResize($event)">
176
+ NgtCanvas.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.1", type: NgtCanvas, isStandalone: true, selector: "ngt-canvas", inputs: { sceneGraph: "sceneGraph", compoundPrefixes: "compoundPrefixes", linear: "linear", legacy: "legacy", flat: "flat", orthographic: "orthographic", frameloop: "frameloop", dpr: "dpr", raycaster: "raycaster", shadows: "shadows", camera: "camera", gl: "gl", eventSource: "eventSource", eventPrefix: "eventPrefix", lookAt: "lookAt", performance: "performance" }, outputs: { created: "created", pointerMissed: "pointerMissed" }, host: { properties: { "class.ngt-canvas": "this.hostClass", "style.pointerEvents": "this.pointerEvents" } }, providers: [NgtStore, provideNgxResizeOptions({ emitInZone: false })], viewQueries: [{ propertyName: "glCanvas", first: true, predicate: ["glCanvas"], descendants: true, static: true }, { propertyName: "glAnchor", first: true, predicate: ["glCanvas"], descendants: true, read: ViewContainerRef, static: true }], usesInheritance: true, ngImport: i0, template: `
177
+ <div (ngxResize)="onResize($event)" style="height: 100%; width: 100%;">
181
178
  <canvas #glCanvas style="display: block;"></canvas>
182
- <ng-container #glAnchor />
183
- </ngt-canvas-container>
184
- `, isInline: true, styles: [":host{display:block;position:relative;width:100%;height:100%;overflow:hidden}\n"], dependencies: [{ kind: "component", type: NgtCanvasContainer, selector: "ngt-canvas-container", outputs: ["canvasResize"] }] });
179
+ </div>
180
+ `, isInline: true, styles: [":host{display:block;position:relative;width:100%;height:100%;overflow:hidden}\n"], dependencies: [{ kind: "directive", type: NgxResize, selector: "[ngxResize]", inputs: ["ngxResizeOptions"], outputs: ["ngxResize"] }] });
185
181
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: NgtCanvas, decorators: [{
186
182
  type: Component,
187
183
  args: [{ selector: 'ngt-canvas', standalone: true, template: `
188
- <ngt-canvas-container (canvasResize)="onResize($event)">
184
+ <div (ngxResize)="onResize($event)" style="height: 100%; width: 100%;">
189
185
  <canvas #glCanvas style="display: block;"></canvas>
190
- <ng-container #glAnchor />
191
- </ngt-canvas-container>
192
- `, imports: [NgtCanvasContainer], providers: [NgtStore], styles: [":host{display:block;position:relative;width:100%;height:100%;overflow:hidden}\n"] }]
186
+ </div>
187
+ `, imports: [NgxResize], providers: [NgtStore, provideNgxResizeOptions({ emitInZone: false })], styles: [":host{display:block;position:relative;width:100%;height:100%;overflow:hidden}\n"] }]
193
188
  }], propDecorators: { hostClass: [{
194
189
  type: HostBinding,
195
190
  args: ['class.ngt-canvas']
196
191
  }], pointerEvents: [{
197
192
  type: HostBinding,
198
193
  args: ['style.pointerEvents']
199
- }], scene: [{
194
+ }], sceneGraph: [{
200
195
  type: Input
201
196
  }], compoundPrefixes: [{
202
197
  type: Input
@@ -237,6 +232,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImpor
237
232
  args: ['glCanvas', { static: true }]
238
233
  }], glAnchor: [{
239
234
  type: ViewChild,
240
- args: ['glAnchor', { static: true, read: ViewContainerRef }]
235
+ args: ['glCanvas', { static: true, read: ViewContainerRef }]
241
236
  }] } });
242
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudmFzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlL3NyYy9saWIvY2FudmFzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxpQkFBaUIsRUFDakIsU0FBUyxFQUVULHlCQUF5QixFQUN6QixVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLFlBQVksRUFDWixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBQ04sSUFBSSxFQUNKLFNBQVMsRUFDVCxnQkFBZ0IsR0FDbkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBbUIsdUJBQXVCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDdkYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sVUFBVSxDQUFDOztBQWlCM0MsTUFBTSxPQUFPLGtCQUFrQjtJQWYvQjtRQWdCYyxpQkFBWSxHQUFHLGVBQWUsRUFBRSxDQUFDO0tBQzlDOzsrR0FGWSxrQkFBa0I7bUdBQWxCLGtCQUFrQiw4R0FGaEIsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLDBCQVZqRCxnQkFBZ0I7MkZBWWpCLGtCQUFrQjtrQkFmOUIsU0FBUzsrQkFDSSxzQkFBc0IsY0FDcEIsSUFBSSxZQUNOLGdCQUFnQixhQVVmLENBQUMsdUJBQXVCLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQzs4QkFHakQsWUFBWTtzQkFBckIsTUFBTTs7QUEwQlgsTUFBTSxPQUFPLFNBQVUsU0FBUSxVQUEyQjtJQXZCMUQ7O1FBd0JxQixRQUFHLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDaEMsZ0JBQVcsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUMxQyxTQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBNEIsQ0FBQztRQUNyRCxVQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBZ0JBLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFNbEQscUJBQWdCLEdBQWEsRUFBRSxDQUFDO1FBNEQvQixZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQVksQ0FBQztRQUN2QyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFjLENBQUM7S0F3RzVEO0lBekxZLFVBQVU7UUFDZixLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUNMLE9BQU8sRUFBRSxLQUFLO1lBQ2QsTUFBTSxFQUFFLEtBQUs7WUFDYixJQUFJLEVBQUUsS0FBSztZQUNYLE1BQU0sRUFBRSxLQUFLO1lBQ2IsWUFBWSxFQUFFLEtBQUs7WUFDbkIsU0FBUyxFQUFFLFFBQVE7WUFDbkIsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNYLE1BQU0sRUFBRSxtQkFBbUI7U0FDOUIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUdELElBQXdDLGFBQWE7UUFDakQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNqRixDQUFDO0lBS0QsSUFBYSxNQUFNLENBQUMsTUFBZTtRQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBYSxNQUFNLENBQUMsTUFBZTtRQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBYSxJQUFJLENBQUMsSUFBYTtRQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBYSxZQUFZLENBQUMsWUFBcUI7UUFDM0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQWEsU0FBUyxDQUFDLFNBQXVDO1FBQzFELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFhLEdBQUcsQ0FBQyxHQUFXO1FBQ3hCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxJQUFhLFNBQVMsQ0FBQyxTQUFtQztRQUN0RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBYSxPQUFPLENBQUMsT0FBZ0Q7UUFDakUsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUNMLE9BQU8sRUFBRSxPQUFPLE9BQU8sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFFLE9BQXlDLENBQUMsQ0FBQyxDQUFDLE9BQU87U0FDOUYsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELElBQWEsTUFBTSxDQUFDLE1BQWlDO1FBQ2pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFhLEVBQUUsQ0FBQyxFQUF5QjtRQUNyQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBYSxXQUFXLENBQUMsV0FBMkM7UUFDaEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQWEsV0FBVyxDQUFDLFdBQTJDO1FBQ2hFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFhLE1BQU0sQ0FBQyxNQUFpQztRQUNqRCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBYSxXQUFXLENBQUMsV0FBMkM7UUFDaEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQVdELFFBQVE7UUFDSixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRTtZQUMxQiwrQ0FBK0M7WUFDL0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztTQUM5QztRQUVELElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUU7WUFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7Z0JBQ1gsZUFBZSxFQUFFLENBQUMsS0FBaUIsRUFBRSxFQUFFO29CQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDN0IsQ0FBQzthQUNKLENBQUMsQ0FBQztTQUNOO1FBRUQsaUJBQWlCO1FBQ2pCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFbEIsbUJBQW1CO1FBQ25CLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTFELCtDQUErQztRQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFO1lBQ3RFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxRQUFRLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFtQjtRQUN2QyxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO2dCQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDakU7SUFDTCxDQUFDO0lBRU8sVUFBVTtRQUNkLDJDQUEyQztRQUMzQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFL0UsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzFCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFL0IsMEJBQTBCO1FBQzFCLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFM0csb0NBQW9DO1FBQ3BDLElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRTtZQUNwQixLQUFLLENBQUMsU0FBUyxDQUFDO2dCQUNaLE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtvQkFDdEIsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUMvQixNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBc0IsQ0FBVyxDQUFDO29CQUMzRSxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBc0IsQ0FBVyxDQUFDO29CQUMzRSxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDbkcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzlFLENBQUM7YUFDSixDQUFDLENBQUM7U0FDTjtRQUVELGlDQUFpQztRQUNqQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQzVCO1FBRUQsU0FBUztRQUNULElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNaLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDeEI7UUFFRCxxQkFBcUIsQ0FBQyxHQUFHLEVBQUU7WUFDdkIsSUFBSSxDQUFDLGFBQWEsR0FBRyx5QkFBeUIsQ0FDMUM7Z0JBQ0ksa0JBQWtCLENBQUM7b0JBQ2YsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO29CQUNqQixpQkFBaUIsRUFBRSxJQUFJLENBQUMsR0FBRztvQkFDM0IsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtpQkFDMUMsQ0FBQzthQUNMLEVBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FDbkIsQ0FBQztZQUNGLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLG1CQUFtQixFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1lBQ3BHLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDN0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVRLFdBQVc7UUFDaEIsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1osSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUN4QjtRQUNELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNwQixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ2hDO1FBQ0QsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzFCLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN4QixDQUFDOztzR0E5TFEsU0FBUzswRkFBVCxTQUFTLDJrQkFiUCxDQUFDLFFBQVEsQ0FBQyxnTkF1R3dCLGdCQUFnQixrRUE5R25EOzs7OztLQUtULHlKQVpRLGtCQUFrQjsyRkEyQmxCLFNBQVM7a0JBdkJyQixTQUFTOytCQUNJLFlBQVksY0FDVixJQUFJLFlBQ047Ozs7O0tBS1QsV0FDUSxDQUFDLGtCQUFrQixDQUFDLGFBQ2xCLENBQUMsUUFBUSxDQUFDOzhCQWlDcUIsU0FBUztzQkFBbEQsV0FBVzt1QkFBQyxrQkFBa0I7Z0JBQ1MsYUFBYTtzQkFBcEQsV0FBVzt1QkFBQyxxQkFBcUI7Z0JBSXpCLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRU8sTUFBTTtzQkFBbEIsS0FBSztnQkFJTyxNQUFNO3NCQUFsQixLQUFLO2dCQUlPLElBQUk7c0JBQWhCLEtBQUs7Z0JBSU8sWUFBWTtzQkFBeEIsS0FBSztnQkFJTyxTQUFTO3NCQUFyQixLQUFLO2dCQUlPLEdBQUc7c0JBQWYsS0FBSztnQkFJTyxTQUFTO3NCQUFyQixLQUFLO2dCQUlPLE9BQU87c0JBQW5CLEtBQUs7Z0JBTU8sTUFBTTtzQkFBbEIsS0FBSztnQkFJTyxFQUFFO3NCQUFkLEtBQUs7Z0JBSU8sV0FBVztzQkFBdkIsS0FBSztnQkFJTyxXQUFXO3NCQUF2QixLQUFLO2dCQUlPLE1BQU07c0JBQWxCLEtBQUs7Z0JBSU8sV0FBVztzQkFBdkIsS0FBSztnQkFJSSxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBRWtDLFFBQVE7c0JBQWhELFNBQVM7dUJBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDMEIsUUFBUTtzQkFBeEUsU0FBUzt1QkFBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbXBvbmVudFJlZixcbiAgICBjcmVhdGVFbnZpcm9ubWVudEluamVjdG9yLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRW52aXJvbm1lbnRJbmplY3RvcixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFR5cGUsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaW5qZWN0Tmd4UmVzaXplLCBOZ3hSZXNpemVSZXN1bHQsIHByb3ZpZGVOZ3hSZXNpemVPcHRpb25zIH0gZnJvbSAnbmd4LXJlc2l6ZSc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHByb3ZpZGVOZ3RSZW5kZXJlciB9IGZyb20gJy4vcmVuZGVyZXIvcHJvdmlkZXInO1xuaW1wb3J0IHsgTmd0UnhTdG9yZSB9IGZyb20gJy4vc3RvcmVzL3J4LXN0b3JlJztcbmltcG9ydCB7IE5ndFN0b3JlLCByb290U3RhdGVNYXAgfSBmcm9tICcuL3N0b3Jlcy9zdG9yZSc7XG5pbXBvcnQgdHlwZSB7IE5ndENhbnZhc0lucHV0cywgTmd0RG9tRXZlbnQsIE5ndERwciwgTmd0U3RhdGUgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGlzIH0gZnJvbSAnLi91dGlscy9pcyc7XG5pbXBvcnQgeyBjcmVhdGVQb2ludGVyRXZlbnRzIH0gZnJvbSAnLi93ZWIvZXZlbnRzJztcbmltcG9ydCB7IGluamVjdE5ndExvYWRlciB9IGZyb20gJy4vbG9hZGVyJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3QtY2FudmFzLWNvbnRhaW5lcicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogJzxuZy1jb250ZW50IC8+JyxcbiAgICBzdHlsZXM6IFtcbiAgICAgICAgYFxuICAgICAgICAgICAgOmhvc3Qge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgYCxcbiAgICBdLFxuICAgIHByb3ZpZGVyczogW3Byb3ZpZGVOZ3hSZXNpemVPcHRpb25zKHsgZW1pdEluWm9uZTogZmFsc2UgfSldLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RDYW52YXNDb250YWluZXIge1xuICAgIEBPdXRwdXQoKSBjYW52YXNSZXNpemUgPSBpbmplY3ROZ3hSZXNpemUoKTtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3QtY2FudmFzJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZ3QtY2FudmFzLWNvbnRhaW5lciAoY2FudmFzUmVzaXplKT1cIm9uUmVzaXplKCRldmVudClcIj5cbiAgICAgICAgICAgIDxjYW52YXMgI2dsQ2FudmFzIHN0eWxlPVwiZGlzcGxheTogYmxvY2s7XCI+PC9jYW52YXM+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICNnbEFuY2hvciAvPlxuICAgICAgICA8L25ndC1jYW52YXMtY29udGFpbmVyPlxuICAgIGAsXG4gICAgaW1wb3J0czogW05ndENhbnZhc0NvbnRhaW5lcl0sXG4gICAgcHJvdmlkZXJzOiBbTmd0U3RvcmVdLFxuICAgIHN0eWxlczogW1xuICAgICAgICBgXG4gICAgICAgICAgICA6aG9zdCB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgfVxuICAgICAgICBgLFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndENhbnZhcyBleHRlbmRzIE5ndFJ4U3RvcmU8Tmd0Q2FudmFzSW5wdXRzPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlbnZJbmplY3RvciA9IGluamVjdChFbnZpcm9ubWVudEluamVjdG9yKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGhvc3QgPSBpbmplY3QoRWxlbWVudFJlZikgYXMgRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gICAgcHJpdmF0ZSByZWFkb25seSBzdG9yZSA9IGluamVjdChOZ3RTdG9yZSk7XG5cbiAgICBvdmVycmlkZSBpbml0aWFsaXplKCkge1xuICAgICAgICBzdXBlci5pbml0aWFsaXplKCk7XG4gICAgICAgIHRoaXMuc2V0KHtcbiAgICAgICAgICAgIHNoYWRvd3M6IGZhbHNlLFxuICAgICAgICAgICAgbGluZWFyOiBmYWxzZSxcbiAgICAgICAgICAgIGZsYXQ6IGZhbHNlLFxuICAgICAgICAgICAgbGVnYWN5OiBmYWxzZSxcbiAgICAgICAgICAgIG9ydGhvZ3JhcGhpYzogZmFsc2UsXG4gICAgICAgICAgICBmcmFtZWxvb3A6ICdhbHdheXMnLFxuICAgICAgICAgICAgZHByOiBbMSwgMl0sXG4gICAgICAgICAgICBldmVudHM6IGNyZWF0ZVBvaW50ZXJFdmVudHMsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3Mubmd0LWNhbnZhcycpIHJlYWRvbmx5IGhvc3RDbGFzcyA9IHRydWU7XG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5wb2ludGVyRXZlbnRzJykgZ2V0IHBvaW50ZXJFdmVudHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldCgnZXZlbnRTb3VyY2UnKSAhPT0gdGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQgPyAnbm9uZScgOiAnYXV0byc7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2NlbmUhOiBUeXBlPGFueT47XG4gICAgQElucHV0KCkgY29tcG91bmRQcmVmaXhlczogc3RyaW5nW10gPSBbXTtcblxuICAgIEBJbnB1dCgpIHNldCBsaW5lYXIobGluZWFyOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgbGluZWFyIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBsZWdhY3kobGVnYWN5OiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgbGVnYWN5IH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBmbGF0KGZsYXQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBmbGF0IH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBvcnRob2dyYXBoaWMob3J0aG9ncmFwaGljOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgb3J0aG9ncmFwaGljIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBmcmFtZWxvb3AoZnJhbWVsb29wOiBOZ3RDYW52YXNJbnB1dHNbJ2ZyYW1lbG9vcCddKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZnJhbWVsb29wIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBkcHIoZHByOiBOZ3REcHIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBkcHIgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHJheWNhc3RlcihyYXljYXN0ZXI6IFBhcnRpYWw8VEhSRUUuUmF5Y2FzdGVyPikge1xuICAgICAgICB0aGlzLnNldCh7IHJheWNhc3RlciB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgc2hhZG93cyhzaGFkb3dzOiBib29sZWFuIHwgUGFydGlhbDxUSFJFRS5XZWJHTFNoYWRvd01hcD4pIHtcbiAgICAgICAgdGhpcy5zZXQoe1xuICAgICAgICAgICAgc2hhZG93czogdHlwZW9mIHNoYWRvd3MgPT09ICdvYmplY3QnID8gKHNoYWRvd3MgYXMgUGFydGlhbDxUSFJFRS5XZWJHTFNoYWRvd01hcD4pIDogc2hhZG93cyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGNhbWVyYShjYW1lcmE6IE5ndENhbnZhc0lucHV0c1snY2FtZXJhJ10pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBjYW1lcmEgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGdsKGdsOiBOZ3RDYW52YXNJbnB1dHNbJ2dsJ10pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBnbCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgZXZlbnRTb3VyY2UoZXZlbnRTb3VyY2U6IE5ndENhbnZhc0lucHV0c1snZXZlbnRTb3VyY2UnXSkge1xuICAgICAgICB0aGlzLnNldCh7IGV2ZW50U291cmNlIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBldmVudFByZWZpeChldmVudFByZWZpeDogTmd0Q2FudmFzSW5wdXRzWydldmVudFByZWZpeCddKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZXZlbnRQcmVmaXggfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGxvb2tBdChsb29rQXQ6IE5ndENhbnZhc0lucHV0c1snbG9va0F0J10pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBsb29rQXQgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHBlcmZvcm1hbmNlKHBlcmZvcm1hbmNlOiBOZ3RDYW52YXNJbnB1dHNbJ3BlcmZvcm1hbmNlJ10pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBwZXJmb3JtYW5jZSB9KTtcbiAgICB9XG5cbiAgICBAT3V0cHV0KCkgY3JlYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Tmd0U3RhdGU+KCk7XG4gICAgQE91dHB1dCgpIHBvaW50ZXJNaXNzZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+KCk7XG5cbiAgICBAVmlld0NoaWxkKCdnbENhbnZhcycsIHsgc3RhdGljOiB0cnVlIH0pIGdsQ2FudmFzITogRWxlbWVudFJlZjxIVE1MQ2FudmFzRWxlbWVudD47XG4gICAgQFZpZXdDaGlsZCgnZ2xBbmNob3InLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBnbEFuY2hvciE6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgICBwcml2YXRlIGdsUmVmPzogQ29tcG9uZW50UmVmPHVua25vd24+O1xuICAgIHByaXZhdGUgZ2xFbnZJbmplY3Rvcj86IEVudmlyb25tZW50SW5qZWN0b3I7XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmdldCgnZXZlbnRTb3VyY2UnKSkge1xuICAgICAgICAgICAgLy8gc2V0IGRlZmF1bHQgZXZlbnQgc291cmNlIHRvIHRoZSBob3N0IGVsZW1lbnRcbiAgICAgICAgICAgIHRoaXMuZXZlbnRTb3VyY2UgPSB0aGlzLmhvc3QubmF0aXZlRWxlbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnBvaW50ZXJNaXNzZWQub2JzZXJ2ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuc2V0KHtcbiAgICAgICAgICAgICAgICBvblBvaW50ZXJNaXNzZWQ6IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvaW50ZXJNaXNzZWQuZW1pdChldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzZXR1cCBOZ3RTdG9yZVxuICAgICAgICB0aGlzLnN0b3JlLmluaXQoKTtcblxuICAgICAgICAvLyBzZXQgcm9vdFN0YXRlTWFwXG4gICAgICAgIHJvb3RTdGF0ZU1hcC5zZXQodGhpcy5nbENhbnZhcy5uYXRpdmVFbGVtZW50LCB0aGlzLnN0b3JlKTtcblxuICAgICAgICAvLyBzdWJzY3JpYmUgdG8gc3RvcmUgdG8gbGlzdGVuIGZvciByZWFkeSBzdGF0ZVxuICAgICAgICB0aGlzLmhvbGQodGhpcy5zdG9yZS5zZWxlY3QoJ3JlYWR5JykucGlwZShmaWx0ZXIoKHJlYWR5KSA9PiByZWFkeSkpLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlUmVhZHkoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25SZXNpemUoeyB3aWR0aCwgaGVpZ2h0IH06IE5neFJlc2l6ZVJlc3VsdCkge1xuICAgICAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5zdG9yZS5pc0luaXQpIHRoaXMuc3RvcmUuaW5pdCgpO1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5jb25maWd1cmUodGhpcy5nZXQoKSwgdGhpcy5nbENhbnZhcy5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RvcmVSZWFkeSgpIHtcbiAgICAgICAgLy8gY2FudmFzIGlzIHJlYWR5LCBsZXQncyBhY3RpdmF0ZSB0aGUgbG9vcFxuICAgICAgICB0aGlzLnN0b3JlLnNldCgoc3RhdGUpID0+ICh7IGludGVybmFsOiB7IC4uLnN0YXRlLmludGVybmFsLCBhY3RpdmU6IHRydWUgfSB9KSk7XG5cbiAgICAgICAgY29uc3QgaW5wdXRzID0gdGhpcy5nZXQoKTtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLnN0b3JlLmdldCgpO1xuXG4gICAgICAgIC8vIGNvbm5lY3QgdG8gZXZlbnQgc291cmNlXG4gICAgICAgIHN0YXRlLmV2ZW50cy5jb25uZWN0Py4oaXMucmVmKGlucHV0cy5ldmVudFNvdXJjZSkgPyBpbnB1dHMuZXZlbnRTb3VyY2UubmF0aXZlRWxlbWVudCA6IGlucHV0cy5ldmVudFNvdXJjZSk7XG5cbiAgICAgICAgLy8gc2V0dXAgY29tcHV0ZSBmdW5jdGlvbiBmb3IgZXZlbnRzXG4gICAgICAgIGlmIChpbnB1dHMuZXZlbnRQcmVmaXgpIHtcbiAgICAgICAgICAgIHN0YXRlLnNldEV2ZW50cyh7XG4gICAgICAgICAgICAgICAgY29tcHV0ZTogKGV2ZW50LCBzdG9yZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbm5lclN0YXRlID0gc3RvcmUuZ2V0KCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHggPSBldmVudFsoaW5wdXRzLmV2ZW50UHJlZml4ICsgJ1gnKSBhcyBrZXlvZiBOZ3REb21FdmVudF0gYXMgbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB5ID0gZXZlbnRbKGlucHV0cy5ldmVudFByZWZpeCArICdZJykgYXMga2V5b2YgTmd0RG9tRXZlbnRdIGFzIG51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJTdGF0ZS5wb2ludGVyLnNldCgoeCAvIGlubmVyU3RhdGUuc2l6ZS53aWR0aCkgKiAyIC0gMSwgLSh5IC8gaW5uZXJTdGF0ZS5zaXplLmhlaWdodCkgKiAyICsgMSk7XG4gICAgICAgICAgICAgICAgICAgIGlubmVyU3RhdGUucmF5Y2FzdGVyLnNldEZyb21DYW1lcmEoaW5uZXJTdGF0ZS5wb2ludGVyLCBpbm5lclN0YXRlLmNhbWVyYSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZW1pdCBjcmVhdGVkIGV2ZW50IGlmIG9ic2VydmVkXG4gICAgICAgIGlmICh0aGlzLmNyZWF0ZWQub2JzZXJ2ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlZC5lbWl0KHRoaXMuc3RvcmUuZ2V0KCkpO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmVuZGVyXG4gICAgICAgIGlmICh0aGlzLmdsUmVmKSB7XG4gICAgICAgICAgICB0aGlzLmdsUmVmLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdsRW52SW5qZWN0b3IgPSBjcmVhdGVFbnZpcm9ubWVudEluamVjdG9yKFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZU5ndFJlbmRlcmVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlOiB0aGlzLnN0b3JlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0b3JSZWY6IHRoaXMuY2RyLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG91bmRQcmVmaXhlczogdGhpcy5jb21wb3VuZFByZWZpeGVzLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHRoaXMuZW52SW5qZWN0b3JcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmdsUmVmID0gdGhpcy5nbEFuY2hvci5jcmVhdGVDb21wb25lbnQodGhpcy5zY2VuZSwgeyBlbnZpcm9ubWVudEluamVjdG9yOiB0aGlzLmdsRW52SW5qZWN0b3IgfSk7XG4gICAgICAgICAgICB0aGlzLmdsUmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMuZ2xSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0YWNoKCk7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5nbFJlZikge1xuICAgICAgICAgICAgdGhpcy5nbFJlZi5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ2xFbnZJbmplY3Rvcikge1xuICAgICAgICAgICAgdGhpcy5nbEVudkluamVjdG9yLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgICBpbmplY3ROZ3RMb2FkZXIuZGVzdHJveSgpO1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cbn1cbiJdfQ==
237
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudmFzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlL3NyYy9saWIvY2FudmFzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxpQkFBaUIsRUFDakIsU0FBUyxFQUVULHlCQUF5QixFQUN6QixVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLFlBQVksRUFDWixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBQ04sSUFBSSxFQUNKLFNBQVMsRUFDVCxnQkFBZ0IsR0FDbkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBbUIsdUJBQXVCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDakYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDaEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDOztBQXdCbkQsTUFBTSxPQUFPLFNBQVUsU0FBUSxVQUEyQjtJQXRCMUQ7O1FBdUJxQixRQUFHLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDaEMsZ0JBQVcsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUMxQyxTQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBNEIsQ0FBQztRQUNyRCxVQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBZ0JBLGNBQVMsR0FBRyxJ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LENBQUMsU0FBUyxDQUFDLGFBQ1QsQ0FBQyxRQUFRLEVBQUUsdUJBQXVCLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQzs4QkFpQzNCLFNBQVM7c0JBQWxELFdBQVc7dUJBQUMsa0JBQWtCO2dCQUNTLGFBQWE7c0JBQXBELFdBQVc7dUJBQUMscUJBQXFCO2dCQUl6QixVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFTyxNQUFNO3NCQUFsQixLQUFLO2dCQUlPLE1BQU07c0JBQWxCLEtBQUs7Z0JBSU8sSUFBSTtzQkFBaEIsS0FBSztnQkFJTyxZQUFZO3NCQUF4QixLQUFLO2dCQUlPLFNBQVM7c0JBQXJCLEtBQUs7Z0JBSU8sR0FBRztzQkFBZixLQUFLO2dCQUlPLFNBQVM7c0JBQXJCLEtBQUs7Z0JBSU8sT0FBTztzQkFBbkIsS0FBSztnQkFNTyxNQUFNO3NCQUFsQixLQUFLO2dCQUlPLEVBQUU7c0JBQWQsS0FBSztnQkFJTyxXQUFXO3NCQUF2QixLQUFLO2dCQUlPLFdBQVc7c0JBQXZCLEtBQUs7Z0JBSU8sTUFBTTtzQkFBbEIsS0FBSztnQkFJTyxXQUFXO3NCQUF2QixLQUFLO2dCQUlJLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFFa0MsUUFBUTtzQkFBaEQsU0FBUzt1QkFBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUMwQixRQUFRO3NCQUF4RSxTQUFTO3VCQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29tcG9uZW50UmVmLFxuICAgIGNyZWF0ZUVudmlyb25tZW50SW5qZWN0b3IsXG4gICAgRWxlbWVudFJlZixcbiAgICBFbnZpcm9ubWVudEluamVjdG9yLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgVHlwZSxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ3hSZXNpemUsIE5neFJlc2l6ZVJlc3VsdCwgcHJvdmlkZU5neFJlc2l6ZU9wdGlvbnMgfSBmcm9tICduZ3gtcmVzaXplJztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgaW5qZWN0Tmd0TG9hZGVyIH0gZnJvbSAnLi9sb2FkZXInO1xuaW1wb3J0IHsgcHJvdmlkZU5ndFJlbmRlcmVyIH0gZnJvbSAnLi9yZW5kZXJlci9wcm92aWRlcic7XG5pbXBvcnQgeyBOZ3RSeFN0b3JlIH0gZnJvbSAnLi9zdG9yZXMvcngtc3RvcmUnO1xuaW1wb3J0IHsgTmd0U3RvcmUsIHJvb3RTdGF0ZU1hcCB9IGZyb20gJy4vc3RvcmVzL3N0b3JlJztcbmltcG9ydCB0eXBlIHsgTmd0Q2FudmFzSW5wdXRzLCBOZ3REb21FdmVudCwgTmd0RHByLCBOZ3RTdGF0ZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgaXMgfSBmcm9tICcuL3V0aWxzL2lzJztcbmltcG9ydCB7IGNyZWF0ZVBvaW50ZXJFdmVudHMgfSBmcm9tICcuL3dlYi9ldmVudHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25ndC1jYW52YXMnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGRpdiAobmd4UmVzaXplKT1cIm9uUmVzaXplKCRldmVudClcIiBzdHlsZT1cImhlaWdodDogMTAwJTsgd2lkdGg6IDEwMCU7XCI+XG4gICAgICAgICAgICA8Y2FudmFzICNnbENhbnZhcyBzdHlsZT1cImRpc3BsYXk6IGJsb2NrO1wiPjwvY2FudmFzPlxuICAgICAgICA8L2Rpdj5cbiAgICBgLFxuICAgIGltcG9ydHM6IFtOZ3hSZXNpemVdLFxuICAgIHByb3ZpZGVyczogW05ndFN0b3JlLCBwcm92aWRlTmd4UmVzaXplT3B0aW9ucyh7IGVtaXRJblpvbmU6IGZhbHNlIH0pXSxcbiAgICBzdHlsZXM6IFtcbiAgICAgICAgYFxuICAgICAgICAgICAgOmhvc3Qge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgYCxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RDYW52YXMgZXh0ZW5kcyBOZ3RSeFN0b3JlPE5ndENhbnZhc0lucHV0cz4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZW52SW5qZWN0b3IgPSBpbmplY3QoRW52aXJvbm1lbnRJbmplY3Rvcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBob3N0ID0gaW5qZWN0KEVsZW1lbnRSZWYpIGFzIEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmUgPSBpbmplY3QoTmd0U3RvcmUpO1xuXG4gICAgb3ZlcnJpZGUgaW5pdGlhbGl6ZSgpIHtcbiAgICAgICAgc3VwZXIuaW5pdGlhbGl6ZSgpO1xuICAgICAgICB0aGlzLnNldCh7XG4gICAgICAgICAgICBzaGFkb3dzOiBmYWxzZSxcbiAgICAgICAgICAgIGxpbmVhcjogZmFsc2UsXG4gICAgICAgICAgICBmbGF0OiBmYWxzZSxcbiAgICAgICAgICAgIGxlZ2FjeTogZmFsc2UsXG4gICAgICAgICAgICBvcnRob2dyYXBoaWM6IGZhbHNlLFxuICAgICAgICAgICAgZnJhbWVsb29wOiAnYWx3YXlzJyxcbiAgICAgICAgICAgIGRwcjogWzEsIDJdLFxuICAgICAgICAgICAgZXZlbnRzOiBjcmVhdGVQb2ludGVyRXZlbnRzLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLm5ndC1jYW52YXMnKSByZWFkb25seSBob3N0Q2xhc3MgPSB0cnVlO1xuICAgIEBIb3N0QmluZGluZygnc3R5bGUucG9pbnRlckV2ZW50cycpIGdldCBwb2ludGVyRXZlbnRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQoJ2V2ZW50U291cmNlJykgIT09IHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50ID8gJ25vbmUnIDogJ2F1dG8nO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNjZW5lR3JhcGghOiBUeXBlPGFueT47XG4gICAgQElucHV0KCkgY29tcG91bmRQcmVmaXhlczogc3RyaW5nW10gPSBbXTtcblxuICAgIEBJbnB1dCgpIHNldCBsaW5lYXIobGluZWFyOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgbGluZWFyIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBsZWdhY3kobGVnYWN5OiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgbGVnYWN5IH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBmbGF0KGZsYXQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBmbGF0IH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBvcnRob2dyYXBoaWMob3J0aG9ncmFwaGljOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgb3J0aG9ncmFwaGljIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBmcmFtZWxvb3AoZnJhbWVsb29wOiBOZ3RDYW52YXNJbnB1dHNbJ2ZyYW1lbG9vcCddKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZnJhbWVsb29wIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBkcHIoZHByOiBOZ3REcHIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBkcHIgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHJheWNhc3RlcihyYXljYXN0ZXI6IFBhcnRpYWw8VEhSRUUuUmF5Y2FzdGVyPikge1xuICAgICAgICB0aGlzLnNldCh7IHJheWNhc3RlciB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgc2hhZG93cyhzaGFkb3dzOiBib29sZWFuIHwgUGFydGlhbDxUSFJFRS5XZWJHTFNoYWRvd01hcD4pIHtcbiAgICAgICAgdGhpcy5zZXQoe1xuICAgICAgICAgICAgc2hhZG93czogdHlwZW9mIHNoYWRvd3MgPT09ICdvYmplY3QnID8gKHNoYWRvd3MgYXMgUGFydGlhbDxUSFJFRS5XZWJHTFNoYWRvd01hcD4pIDogc2hhZG93cyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGNhbWVyYShjYW1lcmE6IE5ndENhbnZhc0lucHV0c1snY2FtZXJhJ10pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBjYW1lcmEgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGdsKGdsOiBOZ3RDYW52YXNJbnB1dHNbJ2dsJ10pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBnbCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgZXZlbnRTb3VyY2UoZXZlbnRTb3VyY2U6IE5ndENhbnZhc0lucHV0c1snZXZlbnRTb3VyY2UnXSkge1xuICAgICAgICB0aGlzLnNldCh7IGV2ZW50U291cmNlIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBldmVudFByZWZpeChldmVudFByZWZpeDogTmd0Q2FudmFzSW5wdXRzWydldmVudFByZWZpeCddKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZXZlbnRQcmVmaXggfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGxvb2tBdChsb29rQXQ6IE5ndENhbnZhc0lucHV0c1snbG9va0F0J10pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBsb29rQXQgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHBlcmZvcm1hbmNlKHBlcmZvcm1hbmNlOiBOZ3RDYW52YXNJbnB1dHNbJ3BlcmZvcm1hbmNlJ10pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBwZXJmb3JtYW5jZSB9KTtcbiAgICB9XG5cbiAgICBAT3V0cHV0KCkgY3JlYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Tmd0U3RhdGU+KCk7XG4gICAgQE91dHB1dCgpIHBvaW50ZXJNaXNzZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+KCk7XG5cbiAgICBAVmlld0NoaWxkKCdnbENhbnZhcycsIHsgc3RhdGljOiB0cnVlIH0pIGdsQ2FudmFzITogRWxlbWVudFJlZjxIVE1MQ2FudmFzRWxlbWVudD47XG4gICAgQFZpZXdDaGlsZCgnZ2xDYW52YXMnLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBnbEFuY2hvciE6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgICBwcml2YXRlIGdsUmVmPzogQ29tcG9uZW50UmVmPHVua25vd24+O1xuICAgIHByaXZhdGUgZ2xFbnZJbmplY3Rvcj86IEVudmlyb25tZW50SW5qZWN0b3I7XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmdldCgnZXZlbnRTb3VyY2UnKSkge1xuICAgICAgICAgICAgLy8gc2V0IGRlZmF1bHQgZXZlbnQgc291cmNlIHRvIHRoZSBob3N0IGVsZW1lbnRcbiAgICAgICAgICAgIHRoaXMuZXZlbnRTb3VyY2UgPSB0aGlzLmhvc3QubmF0aXZlRWxlbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnBvaW50ZXJNaXNzZWQub2JzZXJ2ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuc2V0KHtcbiAgICAgICAgICAgICAgICBvblBvaW50ZXJNaXNzZWQ6IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvaW50ZXJNaXNzZWQuZW1pdChldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzZXR1cCBOZ3RTdG9yZVxuICAgICAgICB0aGlzLnN0b3JlLmluaXQoKTtcblxuICAgICAgICAvLyBzZXQgcm9vdFN0YXRlTWFwXG4gICAgICAgIHJvb3RTdGF0ZU1hcC5zZXQodGhpcy5nbENhbnZhcy5uYXRpdmVFbGVtZW50LCB0aGlzLnN0b3JlKTtcblxuICAgICAgICAvLyBzdWJzY3JpYmUgdG8gc3RvcmUgdG8gbGlzdGVuIGZvciByZWFkeSBzdGF0ZVxuICAgICAgICB0aGlzLmhvbGQodGhpcy5zdG9yZS5zZWxlY3QoJ3JlYWR5JykucGlwZShmaWx0ZXIoKHJlYWR5KSA9PiByZWFkeSkpLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlUmVhZHkoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25SZXNpemUoeyB3aWR0aCwgaGVpZ2h0IH06IE5neFJlc2l6ZVJlc3VsdCkge1xuICAgICAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5zdG9yZS5pc0luaXQpIHRoaXMuc3RvcmUuaW5pdCgpO1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5jb25maWd1cmUodGhpcy5nZXQoKSwgdGhpcy5nbENhbnZhcy5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RvcmVSZWFkeSgpIHtcbiAgICAgICAgLy8gY2FudmFzIGlzIHJlYWR5LCBsZXQncyBhY3RpdmF0ZSB0aGUgbG9vcFxuICAgICAgICB0aGlzLnN0b3JlLnNldCgoc3RhdGUpID0+ICh7IGludGVybmFsOiB7IC4uLnN0YXRlLmludGVybmFsLCBhY3RpdmU6IHRydWUgfSB9KSk7XG5cbiAgICAgICAgY29uc3QgaW5wdXRzID0gdGhpcy5nZXQoKTtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLnN0b3JlLmdldCgpO1xuXG4gICAgICAgIC8vIGNvbm5lY3QgdG8gZXZlbnQgc291cmNlXG4gICAgICAgIHN0YXRlLmV2ZW50cy5jb25uZWN0Py4oaXMucmVmKGlucHV0cy5ldmVudFNvdXJjZSkgPyBpbnB1dHMuZXZlbnRTb3VyY2UubmF0aXZlRWxlbWVudCA6IGlucHV0cy5ldmVudFNvdXJjZSk7XG5cbiAgICAgICAgLy8gc2V0dXAgY29tcHV0ZSBmdW5jdGlvbiBmb3IgZXZlbnRzXG4gICAgICAgIGlmIChpbnB1dHMuZXZlbnRQcmVmaXgpIHtcbiAgICAgICAgICAgIHN0YXRlLnNldEV2ZW50cyh7XG4gICAgICAgICAgICAgICAgY29tcHV0ZTogKGV2ZW50LCBzdG9yZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbm5lclN0YXRlID0gc3RvcmUuZ2V0KCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHggPSBldmVudFsoaW5wdXRzLmV2ZW50UHJlZml4ICsgJ1gnKSBhcyBrZXlvZiBOZ3REb21FdmVudF0gYXMgbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB5ID0gZXZlbnRbKGlucHV0cy5ldmVudFByZWZpeCArICdZJykgYXMga2V5b2YgTmd0RG9tRXZlbnRdIGFzIG51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJTdGF0ZS5wb2ludGVyLnNldCgoeCAvIGlubmVyU3RhdGUuc2l6ZS53aWR0aCkgKiAyIC0gMSwgLSh5IC8gaW5uZXJTdGF0ZS5zaXplLmhlaWdodCkgKiAyICsgMSk7XG4gICAgICAgICAgICAgICAgICAgIGlubmVyU3RhdGUucmF5Y2FzdGVyLnNldEZyb21DYW1lcmEoaW5uZXJTdGF0ZS5wb2ludGVyLCBpbm5lclN0YXRlLmNhbWVyYSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZW1pdCBjcmVhdGVkIGV2ZW50IGlmIG9ic2VydmVkXG4gICAgICAgIGlmICh0aGlzLmNyZWF0ZWQub2JzZXJ2ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlZC5lbWl0KHRoaXMuc3RvcmUuZ2V0KCkpO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmVuZGVyXG4gICAgICAgIGlmICh0aGlzLmdsUmVmKSB7XG4gICAgICAgICAgICB0aGlzLmdsUmVmLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdsRW52SW5qZWN0b3IgPSBjcmVhdGVFbnZpcm9ubWVudEluamVjdG9yKFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZU5ndFJlbmRlcmVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlOiB0aGlzLnN0b3JlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0b3JSZWY6IHRoaXMuY2RyLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG91bmRQcmVmaXhlczogdGhpcy5jb21wb3VuZFByZWZpeGVzLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHRoaXMuZW52SW5qZWN0b3JcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmdsUmVmID0gdGhpcy5nbEFuY2hvci5jcmVhdGVDb21wb25lbnQodGhpcy5zY2VuZUdyYXBoLCB7XG4gICAgICAgICAgICAgICAgZW52aXJvbm1lbnRJbmplY3RvcjogdGhpcy5nbEVudkluamVjdG9yLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmdsUmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGFjaCgpO1xuXG4gICAgICAgICAgICAvLyBoZXJlLCB3ZSBvdmVycmlkZSB0aGUgZGV0ZWN0Q2hhbmdlcyB0byBhbHNvIGNhbGwgZGV0ZWN0Q2hhbmdlcyBvbiB0aGUgQ29tcG9uZW50UmVmXG4gICAgICAgICAgICB0aGlzLm92ZXJyaWRlRGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZ2xSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuZ2xSZWYuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdsRW52SW5qZWN0b3IpIHtcbiAgICAgICAgICAgIHRoaXMuZ2xFbnZJbmplY3Rvci5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgICAgaW5qZWN0Tmd0TG9hZGVyLmRlc3Ryb3koKTtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG92ZXJyaWRlRGV0ZWN0Q2hhbmdlcygpIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxEZXRlY3RDaGFuZ2VzID0gdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcy5iaW5kKHRoaXMuY2RyKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcyA9ICgpID0+IHtcbiAgICAgICAgICAgIG9yaWdpbmFsRGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5nbFJlZj8uY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9O1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,15 @@
1
+ import { inject } from '@angular/core';
2
+ import { NgtStore } from '../stores/store';
3
+ import { injectNgtDestroy } from './destroy';
4
+ export function injectBeforeRender(cb, priority = 0) {
5
+ try {
6
+ const store = inject(NgtStore);
7
+ const sub = store.get('internal').subscribe((state) => cb(state), priority, store);
8
+ injectNgtDestroy(() => void sub());
9
+ return sub;
10
+ }
11
+ catch (e) {
12
+ throw new Error(`[NGT] "injectBeforeRender" is invoked outside of Constructor Context`);
13
+ }
14
+ }
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVmb3JlLXJlbmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci10aHJlZS9zcmMvbGliL2RpL2JlZm9yZS1yZW5kZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTdDLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxFQUFxQyxFQUFFLFFBQVEsR0FBRyxDQUFDO0lBQ2xGLElBQUk7UUFDQSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0IsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkYsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ25DLE9BQU8sR0FBRyxDQUFDO0tBQ2Q7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNSLE1BQU0sSUFBSSxLQUFLLENBQUMsc0VBQXNFLENBQUMsQ0FBQztLQUMzRjtBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5ndFN0b3JlIH0gZnJvbSAnLi4vc3RvcmVzL3N0b3JlJztcbmltcG9ydCB7IE5ndEJlZm9yZVJlbmRlclJlY29yZCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGluamVjdE5ndERlc3Ryb3kgfSBmcm9tICcuL2Rlc3Ryb3knO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0QmVmb3JlUmVuZGVyKGNiOiBOZ3RCZWZvcmVSZW5kZXJSZWNvcmRbJ2NhbGxiYWNrJ10sIHByaW9yaXR5ID0gMCkge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHN0b3JlID0gaW5qZWN0KE5ndFN0b3JlKTtcbiAgICAgICAgY29uc3Qgc3ViID0gc3RvcmUuZ2V0KCdpbnRlcm5hbCcpLnN1YnNjcmliZSgoc3RhdGUpID0+IGNiKHN0YXRlKSwgcHJpb3JpdHksIHN0b3JlKTtcbiAgICAgICAgaW5qZWN0Tmd0RGVzdHJveSgoKSA9PiB2b2lkIHN1YigpKTtcbiAgICAgICAgcmV0dXJuIHN1YjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgW05HVF0gXCJpbmplY3RCZWZvcmVSZW5kZXJcIiBpcyBpbnZva2VkIG91dHNpZGUgb2YgQ29uc3RydWN0b3IgQ29udGV4dGApO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,24 @@
1
+ import { ChangeDetectorRef, inject } from '@angular/core';
2
+ import { ReplaySubject } from 'rxjs';
3
+ /**
4
+ * A utility injection fn that can be used in other injection fn to provide the destroy capability.
5
+ */
6
+ export function injectNgtDestroy(cb) {
7
+ try {
8
+ const cdr = inject(ChangeDetectorRef);
9
+ const destroy$ = new ReplaySubject();
10
+ queueMicrotask(() => {
11
+ cdr.onDestroy(() => {
12
+ destroy$.next();
13
+ destroy$.complete();
14
+ cb?.();
15
+ });
16
+ });
17
+ return { destroy$, cdr };
18
+ }
19
+ catch (e) {
20
+ console.warn(`[NGT] injectNgtDestroy is being called outside of Constructor Context`);
21
+ return {};
22
+ }
23
+ }
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzdHJveS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci10aHJlZS9zcmMvbGliL2RpL2Rlc3Ryb3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBVyxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQWMsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWpEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEVBQWU7SUFDNUMsSUFBSTtRQUNBLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sUUFBUSxHQUFHLElBQUksYUFBYSxFQUFRLENBQUM7UUFFM0MsY0FBYyxDQUFDLEdBQUcsRUFBRTtZQUNmLEdBQWUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUM1QixRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2hCLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDcEIsRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUNYLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDO0tBQzVCO0lBQUMsT0FBTyxDQUFDLEVBQUU7UUFDUixPQUFPLENBQUMsSUFBSSxDQUFDLHVFQUF1RSxDQUFDLENBQUM7UUFDdEYsT0FBTyxFQUF5QyxDQUFDO0tBQ3BEO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBpbmplY3QsIFZpZXdSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBBIHV0aWxpdHkgaW5qZWN0aW9uIGZuIHRoYXQgY2FuIGJlIHVzZWQgaW4gb3RoZXIgaW5qZWN0aW9uIGZuIHRvIHByb3ZpZGUgdGhlIGRlc3Ryb3kgY2FwYWJpbGl0eS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluamVjdE5ndERlc3Ryb3koY2I/OiAoKSA9PiB2b2lkKTogeyBkZXN0cm95JDogT2JzZXJ2YWJsZTx2b2lkPjsgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiB9IHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAgICAgICBjb25zdCBkZXN0cm95JCA9IG5ldyBSZXBsYXlTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgKGNkciBhcyBWaWV3UmVmKS5vbkRlc3Ryb3koKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgICAgICAgICBkZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIGNiPy4oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4geyBkZXN0cm95JCwgY2RyIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYFtOR1RdIGluamVjdE5ndERlc3Ryb3kgaXMgYmVpbmcgY2FsbGVkIG91dHNpZGUgb2YgQ29uc3RydWN0b3IgQ29udGV4dGApO1xuICAgICAgICByZXR1cm4ge30gYXMgUmV0dXJuVHlwZTx0eXBlb2YgaW5qZWN0Tmd0RGVzdHJveT47XG4gICAgfVxufVxuIl19
@@ -0,0 +1,71 @@
1
+ import { ElementRef } from '@angular/core';
2
+ import { BehaviorSubject, distinctUntilChanged, filter, map, merge, of, switchMap, takeUntil, } from 'rxjs';
3
+ import { getLocalState } from '../utils/instance';
4
+ import { is } from '../utils/is';
5
+ import { injectNgtDestroy } from './destroy';
6
+ export function injectNgtRef(initialValue = null) {
7
+ let ref = new ElementRef(initialValue);
8
+ if (is.ref(initialValue)) {
9
+ ref = initialValue;
10
+ }
11
+ let lastValue = ref.nativeElement;
12
+ const cdRefs = [];
13
+ const ref$ = new BehaviorSubject(lastValue);
14
+ const { destroy$, cdr } = injectNgtDestroy(() => {
15
+ ref$.complete();
16
+ });
17
+ cdRefs.push(cdr);
18
+ const obs$ = ref$.asObservable().pipe(distinctUntilChanged(), takeUntil(destroy$));
19
+ const subscribe = (callback) => {
20
+ return obs$.subscribe((current) => {
21
+ callback(current, lastValue);
22
+ lastValue = current;
23
+ });
24
+ };
25
+ const $ = obs$.pipe(filter((value, index) => index > 0 || value != null), takeUntil(destroy$));
26
+ const children$ = (type = 'objects') => $.pipe(switchMap((instance) => {
27
+ const localState = getLocalState(instance);
28
+ if (localState.objects && localState.nonObjects) {
29
+ return merge(localState.objects, localState.nonObjects).pipe(map(() => {
30
+ try {
31
+ return type === 'both'
32
+ ? [...localState.objects.value, ...localState.nonObjects.value]
33
+ : localState[type].value;
34
+ }
35
+ catch (e) {
36
+ console.error(`[NGT] Exception in accessing children of ${instance}`);
37
+ return [];
38
+ }
39
+ }));
40
+ }
41
+ return of([]);
42
+ }), filter((children, index) => index > 0 || children.length > 0), takeUntil(destroy$));
43
+ Object.defineProperty(ref, 'nativeElement', {
44
+ set: (newVal) => {
45
+ if (ref.nativeElement !== newVal) {
46
+ ref$.next(newVal);
47
+ lastValue = ref.nativeElement;
48
+ ref.nativeElement = newVal;
49
+ // clone the cdRefs so we can mutate cdRefs in the loop
50
+ const cds = [...cdRefs];
51
+ for (let i = 0; i < cds.length; i++) {
52
+ const cd = cds[i];
53
+ // if a ChangeDetectorRef is destroyed, we stop tracking it and go to the next one
54
+ if (cd.destroyed) {
55
+ cdRefs.splice(i, 1);
56
+ continue;
57
+ }
58
+ // during creation phase, 'context' on ViewRef will be null
59
+ // we check the "context" to avoid running detectChanges during this phase.
60
+ // becuase there's nothing to check
61
+ if (cd['context']) {
62
+ cd.detectChanges();
63
+ }
64
+ }
65
+ }
66
+ },
67
+ get: () => ref$.value,
68
+ });
69
+ return Object.assign(ref, { subscribe, $, children$, useCDR: (cdr) => void cdRefs.push(cdr) });
70
+ }
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlL3NyYy9saWIvZGkvcmVmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsVUFBVSxFQUFXLE1BQU0sZUFBZSxDQUFDO0FBQ3ZFLE9BQU8sRUFDSCxlQUFlLEVBQ2Ysb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixHQUFHLEVBQ0gsS0FBSyxFQUVMLEVBQUUsRUFFRixTQUFTLEVBQ1QsU0FBUyxHQUNaLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBZTdDLE1BQU0sVUFBVSxZQUFZLENBQUksZUFBK0MsSUFBSTtJQUMvRSxJQUFJLEdBQUcsR0FBRyxJQUFJLFVBQVUsQ0FBSSxZQUFpQixDQUFDLENBQUM7SUFFL0MsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFO1FBQ3RCLEdBQUcsR0FBRyxZQUFZLENBQUM7S0FDdEI7SUFFRCxJQUFJLFNBQVMsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDO0lBQ2xDLE1BQU0sTUFBTSxHQUFHLEVBQXlCLENBQUM7SUFDekMsTUFBTSxJQUFJLEdBQUcsSUFBSSxlQUFlLENBQUksU0FBUyxDQUFDLENBQUM7SUFFL0MsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUU7UUFDNUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3BCLENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVqQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxF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QkFDM0UsbUNBQW1DO29CQUNuQyxJQUFLLEVBQW1CLENBQUMsU0FBUyxDQUFDLEVBQUU7d0JBQ2pDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztxQkFDdEI7aUJBQ0o7YUFDSjtRQUNMLENBQUM7UUFDRCxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUs7S0FDeEIsQ0FBQyxDQUFDO0lBRUgsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQXNCLEVBQUUsRUFBRSxDQUFDLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEgsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBFbGVtZW50UmVmLCBWaWV3UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIEJlaGF2aW9yU3ViamVjdCxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgICBmaWx0ZXIsXG4gICAgbWFwLFxuICAgIG1lcmdlLFxuICAgIE9ic2VydmFibGUsXG4gICAgb2YsXG4gICAgU3Vic2NyaXB0aW9uLFxuICAgIHN3aXRjaE1hcCxcbiAgICB0YWtlVW50aWwsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHR5cGUgeyBOZ3RBbnlSZWNvcmQsIE5ndEluc3RhbmNlTm9kZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGdldExvY2FsU3RhdGUgfSBmcm9tICcuLi91dGlscy9pbnN0YW5jZSc7XG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uL3V0aWxzL2lzJztcbmltcG9ydCB7IGluamVjdE5ndERlc3Ryb3kgfSBmcm9tICcuL2Rlc3Ryb3knO1xuXG50eXBlIFN1YnNjcmliZTxUPiA9IChjYWxsYmFjazogKGN1cnJlbnQ6IFQsIHByZXZpb3VzOiBUIHwgbnVsbCkgPT4gdm9pZCkgPT4gU3Vic2NyaXB0aW9uO1xuXG5leHBvcnQgdHlwZSBOZ3RJbmplY3RlZFJlZjxUPiA9IEVsZW1lbnRSZWY8VD4gJiB7XG4gICAgLyogYSBTdWJzY3JpYmUgZm4gdGhhdCBlbWl0cyBjdXJyZW50IGFuZCBwcmV2aW91cyB2YWx1ZS4gVXNlZnVsIGZvciBkZWJ1ZyAqL1xuICAgIHN1YnNjcmliZTogU3Vic2NyaWJlPFQ+O1xuICAgIC8qIGNvbnN1bWVycyBzaG91bGQgdXNlIHRoaXMgZm9yIGxpc3RlbmluZyB0byB2YWx1ZSBvZiB0aGlzIHJlZi4gVGhpcyBmaWx0ZXJzIG91dCBpbml0aWFsIG51bGwgdmFsdWUgKi9cbiAgICAkOiBPYnNlcnZhYmxlPFQ+O1xuICAgIC8qIGNvbnN1bWVycyBzaG91bGQgdXNlIHRoaXMgZm9yIGxpc3RlbnRpbmcgdG8gY2hpbGRyZW4gY2hhbmdlcyBvbiB0aGlzIHJlZiAqL1xuICAgIGNoaWxkcmVuJDogKHR5cGU/OiAnb2JqZWN0cycgfCAnbm9uT2JqZWN0cycgfCAnYm90aCcpID0+IE9ic2VydmFibGU8Tmd0SW5zdGFuY2VOb2RlW10+O1xuICAgIC8qIG5vdGlmeSB0aGlzIENEIHdoZW4gcmVmIHZhbHVlIGNoYW5nZXMgKi9cbiAgICB1c2VDRFI6IChjZHI6IENoYW5nZURldGVjdG9yUmVmKSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdE5ndFJlZjxUPihpbml0aWFsVmFsdWU6IE5ndEluamVjdGVkUmVmPFQ+IHwgKFQgfCBudWxsKSA9IG51bGwpOiBOZ3RJbmplY3RlZFJlZjxUPiB7XG4gICAgbGV0IHJlZiA9IG5ldyBFbGVtZW50UmVmPFQ+KGluaXRpYWxWYWx1ZSBhcyBUKTtcblxuICAgIGlmIChpcy5yZWYoaW5pdGlhbFZhbHVlKSkge1xuICAgICAgICByZWYgPSBpbml0aWFsVmFsdWU7XG4gICAgfVxuXG4gICAgbGV0IGxhc3RWYWx1ZSA9IHJlZi5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IGNkUmVmcyA9IFtdIGFzIENoYW5nZURldGVjdG9yUmVmW107XG4gICAgY29uc3QgcmVmJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VD4obGFzdFZhbHVlKTtcblxuICAgIGNvbnN0IHsgZGVzdHJveSQsIGNkciB9ID0gaW5qZWN0Tmd0RGVzdHJveSgoKSA9PiB7XG4gICAgICAgIHJlZiQuY29tcGxldGUoKTtcbiAgICB9KTtcblxuICAgIGNkUmVmcy5wdXNoKGNkcik7XG5cbiAgICBjb25zdCBvYnMkID0gcmVmJC5hc09ic2VydmFibGUoKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIHRha2VVbnRpbChkZXN0cm95JCkpO1xuXG4gICAgY29uc3Qgc3Vic2NyaWJlOiBTdWJzY3JpYmU8VD4gPSAoY2FsbGJhY2spID0+IHtcbiAgICAgICAgcmV0dXJuIG9icyQuc3Vic2NyaWJlKChjdXJyZW50KSA9PiB7XG4gICAgICAgICAgICBjYWxsYmFjayhjdXJyZW50LCBsYXN0VmFsdWUpO1xuICAgICAgICAgICAgbGFzdFZhbHVlID0gY3VycmVudDtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0ICQgPSBvYnMkLnBpcGUoXG4gICAgICAgIGZpbHRlcigodmFsdWUsIGluZGV4KSA9PiBpbmRleCA+IDAgfHwgdmFsdWUgIT0gbnVsbCksXG4gICAgICAgIHRha2VVbnRpbChkZXN0cm95JClcbiAgICApO1xuXG4gICAgY29uc3QgY2hpbGRyZW4kID0gKHR5cGU6ICdvYmplY3RzJyB8ICdub25PYmplY3RzJyB8ICdib3RoJyA9ICdvYmplY3RzJykgPT5cbiAgICAgICAgJC5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKChpbnN0YW5jZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKGluc3RhbmNlIGFzIE5ndEluc3RhbmNlTm9kZSk7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsU3RhdGUub2JqZWN0cyAmJiBsb2NhbFN0YXRlLm5vbk9iamVjdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lcmdlKGxvY2FsU3RhdGUub2JqZWN0cywgbG9jYWxTdGF0ZS5ub25PYmplY3RzKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2JvdGgnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFsuLi5sb2NhbFN0YXRlLm9iamVjdHMudmFsdWUsIC4uLmxvY2FsU3RhdGUubm9uT2JqZWN0cy52YWx1ZV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbG9jYWxTdGF0ZVt0eXBlXS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFtOR1RdIEV4Y2VwdGlvbiBpbiBhY2Nlc3NpbmcgY2hpbGRyZW4gb2YgJHtpbnN0YW5jZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZmlsdGVyKChjaGlsZHJlbiwgaW5kZXgpID0+IGluZGV4ID4gMCB8fCBjaGlsZHJlbi5sZW5ndGggPiAwKSxcbiAgICAgICAgICAgIHRha2VVbnRpbChkZXN0cm95JClcbiAgICAgICAgKTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZWYsICduYXRpdmVFbGVtZW50Jywge1xuICAgICAgICBzZXQ6IChuZXdWYWw6IFQpID0+IHtcbiAgICAgICAgICAgIGlmIChyZWYubmF0aXZlRWxlbWVudCAhPT0gbmV3VmFsKSB7XG4gICAgICAgICAgICAgICAgcmVmJC5uZXh0KG5ld1ZhbCk7XG5cbiAgICAgICAgICAgICAgICBsYXN0VmFsdWUgPSByZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgICAgICByZWYubmF0aXZlRWxlbWVudCA9IG5ld1ZhbDtcblxuICAgICAgICAgICAgICAgIC8vIGNsb25lIHRoZSBjZFJlZnMgc28gd2UgY2FuIG11dGF0ZSBjZFJlZnMgaW4gdGhlIGxvb3BcbiAgICAgICAgICAgICAgICBjb25zdCBjZHMgPSBbLi4uY2RSZWZzXTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjZCA9IGNkc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgYSBDaGFuZ2VEZXRlY3RvclJlZiBpcyBkZXN0cm95ZWQsIHdlIHN0b3AgdHJhY2tpbmcgaXQgYW5kIGdvIHRvIHRoZSBuZXh0IG9uZVxuICAgICAgICAgICAgICAgICAgICBpZiAoKGNkIGFzIFZpZXdSZWYpLmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2RSZWZzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGR1cmluZyBjcmVhdGlvbiBwaGFzZSwgJ2NvbnRleHQnIG9uIFZpZXdSZWYgd2lsbCBiZSBudWxsXG4gICAgICAgICAgICAgICAgICAgIC8vIHdlIGNoZWNrIHRoZSBcImNvbnRleHRcIiB0byBhdm9pZCBydW5uaW5nIGRldGVjdENoYW5nZXMgZHVyaW5nIHRoaXMgcGhhc2UuXG4gICAgICAgICAgICAgICAgICAgIC8vIGJlY3Vhc2UgdGhlcmUncyBub3RoaW5nIHRvIGNoZWNrXG4gICAgICAgICAgICAgICAgICAgIGlmICgoY2QgYXMgTmd0QW55UmVjb3JkKVsnY29udGV4dCddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdldDogKCkgPT4gcmVmJC52YWx1ZSxcbiAgICB9KTtcblxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHJlZiwgeyBzdWJzY3JpYmUsICQsIGNoaWxkcmVuJCwgdXNlQ0RSOiAoY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikgPT4gdm9pZCBjZFJlZnMucHVzaChjZHIpIH0pO1xufVxuIl19
@@ -1,4 +1,4 @@
1
- import { isObservable, of, map, tap, from, retry, share, ReplaySubject, catchError, switchMap, forkJoin, take, } from 'rxjs';
1
+ import { catchError, forkJoin, from, isObservable, map, of, ReplaySubject, retry, share, switchMap, take, tap, } from 'rxjs';
2
2
  import { makeObjectGraph } from './utils/make';
3
3
  const cached = new Map();
4
4
  function injectLoader(loaderConstructorFactory, input, extensions, onProgress) {
@@ -52,4 +52,4 @@ injectLoader.preLoad = (loaderConstructorFactory, inputs, extensions) => {
52
52
  injectLoader(loaderConstructorFactory, inputs, extensions).pipe(take(1)).subscribe();
53
53
  };
54
54
  export const injectNgtLoader = injectLoader;
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlL3NyYy9saWIvbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxZQUFZLEVBRVosRUFBRSxFQUNGLEdBQUcsRUFDSCxHQUFHLEVBQ0gsSUFBSSxFQUNKLEtBQUssRUFDTCxLQUFLLEVBQ0wsYUFBYSxFQUNiLFVBQVUsRUFDVixTQUFTLEVBQ1QsUUFBUSxFQUNSLElBQUksR0FDUCxNQUFNLE1BQU0sQ0FBQztBQUdkLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUE0Qi9DLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUEyQixDQUFDO0FBRWxELFNBQVMsWUFBWSxDQUNqQix3QkFBZ0csRUFDaEcsS0FBOEIsRUFDOUIsVUFBZ0MsRUFDaEMsVUFBMkM7SUFFM0MsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV0RCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQ2IsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7UUFDWCxNQUFNLGlCQUFpQixHQUFHLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNELE1BQU0sTUFBTSxHQUFHLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUN2QyxJQUFJLFVBQVUsRUFBRTtZQUNaLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN0QjtRQUNELE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFN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ZSxcbiAgICBPYnNlcnZhYmxlLFxuICAgIG9mLFxuICAgIG1hcCxcbiAgICB0YXAsXG4gICAgZnJvbSxcbiAgICByZXRyeSxcbiAgICBzaGFyZSxcbiAgICBSZXBsYXlTdWJqZWN0LFxuICAgIGNhdGNoRXJyb3IsXG4gICAgc3dpdGNoTWFwLFxuICAgIGZvcmtKb2luLFxuICAgIHRha2UsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHR5cGUgeyBHTFRGIH0gZnJvbSAndGhyZWUtc3RkbGliJztcbmltcG9ydCB0eXBlIHsgTmd0QnJhbmNoaW5nUmV0dXJuLCBOZ3RMb2FkZXJFeHRlbnNpb25zLCBOZ3RMb2FkZXJSZXN1bHQsIE5ndE9iamVjdE1hcCB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgbWFrZU9iamVjdEdyYXBoIH0gZnJvbSAnLi91dGlscy9tYWtlJztcblxuaW50ZXJmYWNlIE5ndExvYWRlciB7XG4gICAgPFRSZXR1cm5UeXBlLCBUVXJsIGV4dGVuZHMgc3RyaW5nIHwgc3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PihcbiAgICAgICAgbG9hZGVyQ29uc3RydWN0b3JGYWN0b3J5OiAoaW5wdXRzOiBUVXJsKSA9PiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBOZ3RMb2FkZXJSZXN1bHQ8VFJldHVyblR5cGU+LFxuICAgICAgICBpbnB1dDogVFVybCB8IE9ic2VydmFibGU8VFVybD4sXG4gICAgICAgIGV4dGVuc2lvbnM/OiBOZ3RMb2FkZXJFeHRlbnNpb25zLFxuICAgICAgICBvblByb2dyZXNzPzogKGV2ZW50OiBQcm9ncmVzc0V2ZW50KSA9PiB2b2lkXG4gICAgKTogT2JzZXJ2YWJsZTxcbiAgICAgICAgVFVybCBleHRlbmRzIHN0cmluZ1tdXG4gICAgICAgICAgICA/IEFycmF5PE5ndEJyYW5jaGluZ1JldHVybjxUUmV0dXJuVHlwZSwgR0xURiwgR0xURiAmIE5ndE9iamVjdE1hcD4+XG4gICAgICAgICAgICA6IFRVcmwgZXh0ZW5kcyBvYmplY3RcbiAgICAgICAgICAgID8geyBba2V5IGluIGtleW9mIFRVcmxdOiBOZ3RCcmFuY2hpbmdSZXR1cm48VFJldHVyblR5cGUsIEdMVEYsIEdMVEYgJiBOZ3RPYmplY3RNYXA+IH1cbiAgICAgICAgICAgIDogTmd0QnJhbmNoaW5nUmV0dXJuPFRSZXR1cm5UeXBlLCBHTFRGLCBHTFRGICYgTmd0T2JqZWN0TWFwPlxuICAgID47XG4gICAgZGVzdHJveTogKCkgPT4gdm9pZDtcbiAgICBwcmVMb2FkOiA8VFJldHVyblR5cGUsIFRVcmwgZXh0ZW5kcyBzdHJpbmcgfCBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KFxuICAgICAgICBsb2FkZXJDb25zdHJ1Y3RvckZhY3Rvcnk6IChpbnB1dHM6IFRVcmwpID0+IG5ldyAoLi4uYXJnczogYW55W10pID0+IE5ndExvYWRlclJlc3VsdDxUUmV0dXJuVHlwZT4sXG4gICAgICAgIGlucHV0czogVFVybCB8IE9ic2VydmFibGU8VFVybD4sXG4gICAgICAgIGV4dGVuc2lvbnM/OiBOZ3RMb2FkZXJFeHRlbnNpb25zXG4gICAgKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBOZ3RMb2FkZXJSZXN1bHRzPFxuICAgIFRJbnB1dCBleHRlbmRzIHN0cmluZyB8IHN0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgICBUUmV0dXJuXG4+ID0gVElucHV0IGV4dGVuZHMgc3RyaW5nW10gPyBUUmV0dXJuW10gOiBUSW5wdXQgZXh0ZW5kcyBvYmplY3QgPyB7IFtrZXkgaW4ga2V5b2YgVElucHV0XTogVFJldHVybiB9IDogVFJldHVybjtcblxuY29uc3QgY2FjaGVkID0gbmV3IE1hcDxzdHJpbmcsIE9ic2VydmFibGU8YW55Pj4oKTtcblxuZnVuY3Rpb24gaW5qZWN0TG9hZGVyPFRSZXR1cm5UeXBlLCBUVXJsIGV4dGVuZHMgc3RyaW5nIHwgc3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PihcbiAgICBsb2FkZXJDb25zdHJ1Y3RvckZhY3Rvcnk6IChpbnB1dHM6IFRVcmwpID0+IG5ldyAoLi4uYXJnczogYW55W10pID0+IE5ndExvYWRlclJlc3VsdDxUUmV0dXJuVHlwZT4sXG4gICAgaW5wdXQ6IFRVcmwgfCBPYnNlcnZhYmxlPFRVcmw+LFxuICAgIGV4dGVuc2lvbnM/OiBOZ3RMb2FkZXJFeHRlbnNpb25zLFxuICAgIG9uUHJvZ3Jlc3M/OiAoZXZlbnQ6IFByb2dyZXNzRXZlbnQpID0+IHZvaWRcbik6IE9ic2VydmFibGU8Tmd0TG9hZGVyUmVzdWx0czxUVXJsLCBOZ3RCcmFuY2hpbmdSZXR1cm48VFJldHVyblR5cGUsIEdMVEYsIEdMVEYgJiBOZ3RPYmplY3RNYXA+Pj4ge1xuICAgIGNvbnN0IHVybHMkID0gaXNPYnNlcnZhYmxlKGlucHV0KSA/IGlucHV0IDogb2YoaW5wdXQpO1xuXG4gICAgcmV0dXJuIHVybHMkLnBpcGUoXG4gICAgICAgIG1hcCgoaW5wdXRzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsb2FkZXJDb25zdHJ1Y3RvciA9IGxvYWRlckNvbnN0cnVjdG9yRmFjdG9yeShpbnB1dHMpO1xuICAgICAgICAgICAgY29uc3QgbG9hZGVyID0gbmV3IGxvYWRlckNvbnN0cnVjdG9yKCk7XG4gICAgICAgICAgICBpZiAoZXh0ZW5zaW9ucykge1xuICAgICAgICAgICAgICAgIGV4dGVuc2lvbnMobG9hZGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHVybHMgPSBBcnJheS5pc0FycmF5KGlucHV0cykgPyBpbnB1dHMgOiB0eXBlb2YgaW5wdXRzID09PSAnc3RyaW5nJyA/IFtpbnB1dHNdIDogT2JqZWN0LnZhbHVlcyhpbnB1dHMpO1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICB1cmxzLm1hcCgodXJsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY2FjaGVkLmhhcyh1cmwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWQuc2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tKGxvYWRlci5sb2FkQXN5bmModXJsLCBvblByb2dyZXNzKSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5zY2VuZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZGF0YSwgbWFrZU9iamVjdEdyYXBoKGRhdGEuc2NlbmUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHJ5KDIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFtOR1RdIEVycm9yIGxvYWRpbmcgJHt1cmx9OiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3RvcjogKCkgPT4gbmV3IFJlcGxheVN1YmplY3QoMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNldE9uQ29tcGxldGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNldE9uRXJyb3I6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNldE9uUmVmQ291bnRaZXJvOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlZC5nZXQodXJsKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBpbnB1dHMsXG4gICAgICAgICAgICBdIGFzIFtBcnJheTxPYnNlcnZhYmxlPGFueT4+LCBUVXJsIHwgVFVybFtdXTtcbiAgICAgICAgfSksXG4gICAgICAgIHN3aXRjaE1hcCgoW29ic2VydmFibGVzJCwgaW5wdXRzXSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZvcmtKb2luKG9ic2VydmFibGVzJCkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKHJlc3VsdHMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXRzKSkgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXRzID09PSAnc3RyaW5nJykgcmV0dXJuIHJlc3VsdHNbMF07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhpbnB1dHMpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5cy5yZWR1Y2UoKHJlc3VsdCwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRba2V5IGFzIGtleW9mIHR5cGVvZiByZXN1bHRdID0gcmVzdWx0c1trZXlzLmluZGV4T2Yoa2V5KV07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICB9LCB7fSBhcyB7IFtrZXkgaW4ga2V5b2YgVFVybF06IE5ndEJyYW5jaGluZ1JldHVybjxUUmV0dXJuVHlwZSwgR0xURiwgR0xURiAmIE5ndE9iamVjdE1hcD4gfSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgKTtcbn1cblxuKGluamVjdExvYWRlciBhcyBOZ3RMb2FkZXIpLmRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgY2FjaGVkLmNsZWFyKCk7XG59O1xuXG4oaW5qZWN0TG9hZGVyIGFzIE5ndExvYWRlcikucHJlTG9hZCA9IChsb2FkZXJDb25zdHJ1Y3RvckZhY3RvcnksIGlucHV0cywgZXh0ZW5zaW9ucykgPT4ge1xuICAgIGluamVjdExvYWRlcihsb2FkZXJDb25zdHJ1Y3RvckZhY3RvcnksIGlucHV0cywgZXh0ZW5zaW9ucykucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpbmplY3ROZ3RMb2FkZXIgPSBpbmplY3RMb2FkZXIgYXMgTmd0TG9hZGVyO1xuIl19
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlL3NyYy9saWIvbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxVQUFVLEVBQ1YsUUFBUSxFQUNSLElBQUksRUFDSixZQUFZLEVBQ1osR0FBRyxFQUVILEVBQUUsRUFDRixhQUFhLEVBQ2IsS0FBSyxFQUNMLEtBQUssRUFDTCxTQUFTLEVBQ1QsSUFBSSxFQUNKLEdBQUcsR0FDTixNQUFNLE1BQU0sQ0FBQztBQUdkLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUE0Qi9DLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUEyQixDQUFDO0FBRWxELFNBQVMsWUFBWSxDQUNqQix3QkFBZ0csRUFDaEcsS0FBOEIsRUFDOUIsVUFBZ0MsRUFDaEMsVUFBMkM7SUFFM0MsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV0RCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQ2IsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7UUFDWCxNQUFNLGlCQUFpQixHQUFHLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNELE1BQU0sTUFBTSxHQUFHLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUN2QyxJQUFJLFVBQVUsRUFBRTtZQUNaLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN0QjtRQUNELE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFN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XG4gICAgZm9ya0pvaW4sXG4gICAgZnJvbSxcbiAgICBpc09ic2VydmFibGUsXG4gICAgbWFwLFxuICAgIE9ic2VydmFibGUsXG4gICAgb2YsXG4gICAgUmVwbGF5U3ViamVjdCxcbiAgICByZXRyeSxcbiAgICBzaGFyZSxcbiAgICBzd2l0Y2hNYXAsXG4gICAgdGFrZSxcbiAgICB0YXAsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHR5cGUgeyBHTFRGIH0gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL2xvYWRlcnMvR0xURkxvYWRlcic7XG5pbXBvcnQgdHlwZSB7IE5ndEJyYW5jaGluZ1JldHVybiwgTmd0TG9hZGVyRXh0ZW5zaW9ucywgTmd0TG9hZGVyUmVzdWx0LCBOZ3RPYmplY3RNYXAgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IG1ha2VPYmplY3RHcmFwaCB9IGZyb20gJy4vdXRpbHMvbWFrZSc7XG5cbmludGVyZmFjZSBOZ3RMb2FkZXIge1xuICAgIDxUUmV0dXJuVHlwZSwgVFVybCBleHRlbmRzIHN0cmluZyB8IHN0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4oXG4gICAgICAgIGxvYWRlckNvbnN0cnVjdG9yRmFjdG9yeTogKGlucHV0czogVFVybCkgPT4gbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gTmd0TG9hZGVyUmVzdWx0PFRSZXR1cm5UeXBlPixcbiAgICAgICAgaW5wdXQ6IFRVcmwgfCBPYnNlcnZhYmxlPFRVcmw+LFxuICAgICAgICBleHRlbnNpb25zPzogTmd0TG9hZGVyRXh0ZW5zaW9ucyxcbiAgICAgICAgb25Qcm9ncmVzcz86IChldmVudDogUHJvZ3Jlc3NFdmVudCkgPT4gdm9pZFxuICAgICk6IE9ic2VydmFibGU8XG4gICAgICAgIFRVcmwgZXh0ZW5kcyBzdHJpbmdbXVxuICAgICAgICAgICAgPyBBcnJheTxOZ3RCcmFuY2hpbmdSZXR1cm48VFJldHVyblR5cGUsIEdMVEYsIEdMVEYgJiBOZ3RPYmplY3RNYXA+PlxuICAgICAgICAgICAgOiBUVXJsIGV4dGVuZHMgb2JqZWN0XG4gICAgICAgICAgICA/IHsgW2tleSBpbiBrZXlvZiBUVXJsXTogTmd0QnJhbmNoaW5nUmV0dXJuPFRSZXR1cm5UeXBlLCBHTFRGLCBHTFRGICYgTmd0T2JqZWN0TWFwPiB9XG4gICAgICAgICAgICA6IE5ndEJyYW5jaGluZ1JldHVybjxUUmV0dXJuVHlwZSwgR0xURiwgR0xURiAmIE5ndE9iamVjdE1hcD5cbiAgICA+O1xuICAgIGRlc3Ryb3k6ICgpID0+IHZvaWQ7XG4gICAgcHJlTG9hZDogPFRSZXR1cm5UeXBlLCBUVXJsIGV4dGVuZHMgc3RyaW5nIHwgc3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PihcbiAgICAgICAgbG9hZGVyQ29uc3RydWN0b3JGYWN0b3J5OiAoaW5wdXRzOiBUVXJsKSA9PiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBOZ3RMb2FkZXJSZXN1bHQ8VFJldHVyblR5cGU+LFxuICAgICAgICBpbnB1dHM6IFRVcmwgfCBPYnNlcnZhYmxlPFRVcmw+LFxuICAgICAgICBleHRlbnNpb25zPzogTmd0TG9hZGVyRXh0ZW5zaW9uc1xuICAgICkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IHR5cGUgTmd0TG9hZGVyUmVzdWx0czxcbiAgICBUSW5wdXQgZXh0ZW5kcyBzdHJpbmcgfCBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gICAgVFJldHVyblxuPiA9IFRJbnB1dCBleHRlbmRzIHN0cmluZ1tdID8gVFJldHVybltdIDogVElucHV0IGV4dGVuZHMgb2JqZWN0ID8geyBba2V5IGluIGtleW9mIFRJbnB1dF06IFRSZXR1cm4gfSA6IFRSZXR1cm47XG5cbmNvbnN0IGNhY2hlZCA9IG5ldyBNYXA8c3RyaW5nLCBPYnNlcnZhYmxlPGFueT4+KCk7XG5cbmZ1bmN0aW9uIGluamVjdExvYWRlcjxUUmV0dXJuVHlwZSwgVFVybCBleHRlbmRzIHN0cmluZyB8IHN0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4oXG4gICAgbG9hZGVyQ29uc3RydWN0b3JGYWN0b3J5OiAoaW5wdXRzOiBUVXJsKSA9PiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBOZ3RMb2FkZXJSZXN1bHQ8VFJldHVyblR5cGU+LFxuICAgIGlucHV0OiBUVXJsIHwgT2JzZXJ2YWJsZTxUVXJsPixcbiAgICBleHRlbnNpb25zPzogTmd0TG9hZGVyRXh0ZW5zaW9ucyxcbiAgICBvblByb2dyZXNzPzogKGV2ZW50OiBQcm9ncmVzc0V2ZW50KSA9PiB2b2lkXG4pOiBPYnNlcnZhYmxlPE5ndExvYWRlclJlc3VsdHM8VFVybCwgTmd0QnJhbmNoaW5nUmV0dXJuPFRSZXR1cm5UeXBlLCBHTFRGLCBHTFRGICYgTmd0T2JqZWN0TWFwPj4+IHtcbiAgICBjb25zdCB1cmxzJCA9IGlzT2JzZXJ2YWJsZShpbnB1dCkgPyBpbnB1dCA6IG9mKGlucHV0KTtcblxuICAgIHJldHVybiB1cmxzJC5waXBlKFxuICAgICAgICBtYXAoKGlucHV0cykgPT4ge1xuICAgICAgICAgICAgY29uc3QgbG9hZGVyQ29uc3RydWN0b3IgPSBsb2FkZXJDb25zdHJ1Y3RvckZhY3RvcnkoaW5wdXRzKTtcbiAgICAgICAgICAgIGNvbnN0IGxvYWRlciA9IG5ldyBsb2FkZXJDb25zdHJ1Y3RvcigpO1xuICAgICAgICAgICAgaWYgKGV4dGVuc2lvbnMpIHtcbiAgICAgICAgICAgICAgICBleHRlbnNpb25zKGxvYWRlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB1cmxzID0gQXJyYXkuaXNBcnJheShpbnB1dHMpID8gaW5wdXRzIDogdHlwZW9mIGlucHV0cyA9PT0gJ3N0cmluZycgPyBbaW5wdXRzXSA6IE9iamVjdC52YWx1ZXMoaW5wdXRzKTtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgdXJscy5tYXAoKHVybCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNhY2hlZC5oYXModXJsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkLnNldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbShsb2FkZXIubG9hZEFzeW5jKHVybCwgb25Qcm9ncmVzcykpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcCgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuc2NlbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGRhdGEsIG1ha2VPYmplY3RHcmFwaChkYXRhLnNjZW5lKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRyeSgyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBbTkdUXSBFcnJvciBsb2FkaW5nICR7dXJsfTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3I6ICgpID0+IG5ldyBSZXBsYXlTdWJqZWN0KDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXRPbkNvbXBsZXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXRPbkVycm9yOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXRPblJlZkNvdW50WmVybzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWNoZWQuZ2V0KHVybCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgaW5wdXRzLFxuICAgICAgICAgICAgXSBhcyBbQXJyYXk8T2JzZXJ2YWJsZTxhbnk+PiwgVFVybCB8IFRVcmxbXV07XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKFtvYnNlcnZhYmxlcyQsIGlucHV0c10pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBmb3JrSm9pbihvYnNlcnZhYmxlcyQpLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChyZXN1bHRzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGlucHV0cykpIHJldHVybiByZXN1bHRzO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGlucHV0cyA9PT0gJ3N0cmluZycpIHJldHVybiByZXN1bHRzWzBdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaW5wdXRzKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleXMucmVkdWNlKChyZXN1bHQsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2tleSBhcyBrZXlvZiB0eXBlb2YgcmVzdWx0XSA9IHJlc3VsdHNba2V5cy5pbmRleE9mKGtleSldO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgfSwge30gYXMgeyBba2V5IGluIGtleW9mIFRVcmxdOiBOZ3RCcmFuY2hpbmdSZXR1cm48VFJldHVyblR5cGUsIEdMVEYsIEdMVEYgJiBOZ3RPYmplY3RNYXA+IH0pO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICk7XG59XG5cbihpbmplY3RMb2FkZXIgYXMgTmd0TG9hZGVyKS5kZXN0cm95ID0gKCkgPT4ge1xuICAgIGNhY2hlZC5jbGVhcigpO1xufTtcblxuKGluamVjdExvYWRlciBhcyBOZ3RMb2FkZXIpLnByZUxvYWQgPSAobG9hZGVyQ29uc3RydWN0b3JGYWN0b3J5LCBpbnB1dHMsIGV4dGVuc2lvbnMpID0+IHtcbiAgICBpbmplY3RMb2FkZXIobG9hZGVyQ29uc3RydWN0b3JGYWN0b3J5LCBpbnB1dHMsIGV4dGVuc2lvbnMpLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCk7XG59O1xuXG5leHBvcnQgY29uc3QgaW5qZWN0Tmd0TG9hZGVyID0gaW5qZWN0TG9hZGVyIGFzIE5ndExvYWRlcjtcbiJdfQ==
@@ -0,0 +1,54 @@
1
+ import { ChangeDetectorRef, inject, Pipe } from '@angular/core';
2
+ import { isObservable } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ function isPromise(value) {
5
+ return ((value instanceof Promise || Object.prototype.toString.call(value) === '[object Promise]') &&
6
+ typeof value['then'] === 'function');
7
+ }
8
+ export class NgtPush {
9
+ constructor() {
10
+ this.cdr = inject(ChangeDetectorRef);
11
+ this.parentCdr = inject(ChangeDetectorRef, { skipSelf: true, optional: true });
12
+ }
13
+ transform(value, defaultValue = null) {
14
+ if (this.obj === value) {
15
+ return this.latestValue;
16
+ }
17
+ this.obj = value;
18
+ this.latestValue = defaultValue;
19
+ if (this.sub) {
20
+ this.sub.unsubscribe();
21
+ }
22
+ if (isObservable(this.obj)) {
23
+ this.sub = this.obj.subscribe(this.updateValue.bind(this));
24
+ }
25
+ else if (isPromise(this.obj)) {
26
+ this.obj.then(this.updateValue.bind(this));
27
+ }
28
+ else {
29
+ throw new Error(`[NGT] Invalid value passed to ngtPush pipe`);
30
+ }
31
+ return this.latestValue;
32
+ }
33
+ updateValue(val) {
34
+ this.latestValue = val;
35
+ this.cdr.detectChanges();
36
+ if (this.parentCdr) {
37
+ this.parentCdr.detectChanges();
38
+ }
39
+ }
40
+ ngOnDestroy() {
41
+ if (this.sub) {
42
+ this.sub.unsubscribe();
43
+ }
44
+ this.latestValue = undefined;
45
+ this.obj = undefined;
46
+ }
47
+ }
48
+ NgtPush.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: NgtPush, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
49
+ NgtPush.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.1.1", ngImport: i0, type: NgtPush, isStandalone: true, name: "ngtPush", pure: false });
50
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: NgtPush, decorators: [{
51
+ type: Pipe,
52
+ args: [{ name: 'ngtPush', pure: false, standalone: true }]
53
+ }] });
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci10aHJlZS9zcmMvbGliL3BpcGVzL3B1c2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBYSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxZQUFZLEVBQWlDLE1BQU0sTUFBTSxDQUFDOztBQUVuRSxTQUFTLFNBQVMsQ0FBQyxLQUFjO0lBQzdCLE9BQU8sQ0FDSCxDQUFDLEtBQUssWUFBWSxPQUFPLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLGtCQUFrQixDQUFDO1FBQzFGLE9BQVEsS0FBMEIsQ0FBQyxNQUFNLENBQUMsS0FBSyxVQUFVLENBQzVELENBQUM7QUFDTixDQUFDO0FBR0QsTUFBTSxPQUFPLE9BQU87SUFEcEI7UUFFcUIsUUFBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2hDLGNBQVMsR0FBRyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0tBMkM5RjtJQXJDRyxTQUFTLENBQUMsS0FBeUIsRUFBRSxlQUFrQixJQUFLO1FBQ3hELElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxLQUFLLEVBQUU7WUFDcEIsT0FBTyxJQUFJLENBQUMsV0FBZ0IsQ0FBQztTQUNoQztRQUNELElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxXQUFXLEdBQUcsWUFBWSxDQUFDO1FBRWhDLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNWLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDMUI7UUFFRCxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDeEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQzlEO2FBQU0sSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzNCLElBQUksQ0FBQyxHQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQzlEO2FBQU07WUFDSCxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7U0FDakU7UUFFRCxPQUFPLElBQUksQ0FBQyxXQUFnQixDQUFDO0lBQ2pDLENBQUM7SUFFRCxXQUFXLENBQUMsR0FBTTtRQUNkLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDekIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDbEM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNWLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDMUI7UUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQztRQUM3QixJQUFJLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQztJQUN6QixDQUFDOztvR0E1Q1EsT0FBTztrR0FBUCxPQUFPOzJGQUFQLE9BQU87a0JBRG5CLElBQUk7bUJBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBpbmplY3QsIE9uRGVzdHJveSwgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNPYnNlcnZhYmxlLCBPYnNlcnZhYmxlSW5wdXQsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5mdW5jdGlvbiBpc1Byb21pc2UodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBQcm9taXNlPHVua25vd24+IHtcbiAgICByZXR1cm4gKFxuICAgICAgICAodmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IFByb21pc2VdJykgJiZcbiAgICAgICAgdHlwZW9mICh2YWx1ZSBhcyBQcm9taXNlPHVua25vd24+KVsndGhlbiddID09PSAnZnVuY3Rpb24nXG4gICAgKTtcbn1cblxuQFBpcGUoeyBuYW1lOiAnbmd0UHVzaCcsIHB1cmU6IGZhbHNlLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgTmd0UHVzaDxUPiBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0sIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFyZW50Q2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmLCB7IHNraXBTZWxmOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAgIHByaXZhdGUgc3ViPzogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgb2JqPzogT2JzZXJ2YWJsZUlucHV0PFQ+O1xuICAgIHByaXZhdGUgbGF0ZXN0VmFsdWU/OiBUO1xuXG4gICAgdHJhbnNmb3JtKHZhbHVlOiBPYnNlcnZhYmxlSW5wdXQ8VD4sIGRlZmF1bHRWYWx1ZTogVCA9IG51bGwhKTogVCB7XG4gICAgICAgIGlmICh0aGlzLm9iaiA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxhdGVzdFZhbHVlIGFzIFQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vYmogPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5sYXRlc3RWYWx1ZSA9IGRlZmF1bHRWYWx1ZTtcblxuICAgICAgICBpZiAodGhpcy5zdWIpIHtcbiAgICAgICAgICAgIHRoaXMuc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNPYnNlcnZhYmxlKHRoaXMub2JqKSkge1xuICAgICAgICAgICAgdGhpcy5zdWIgPSB0aGlzLm9iai5zdWJzY3JpYmUodGhpcy51cGRhdGVWYWx1ZS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc1Byb21pc2UodGhpcy5vYmopKSB7XG4gICAgICAgICAgICAodGhpcy5vYmogYXMgUHJvbWlzZTxUPikudGhlbih0aGlzLnVwZGF0ZVZhbHVlLmJpbmQodGhpcykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBbTkdUXSBJbnZhbGlkIHZhbHVlIHBhc3NlZCB0byBuZ3RQdXNoIHBpcGVgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmxhdGVzdFZhbHVlIGFzIFQ7XG4gICAgfVxuXG4gICAgdXBkYXRlVmFsdWUodmFsOiBUKSB7XG4gICAgICAgIHRoaXMubGF0ZXN0VmFsdWUgPSB2YWw7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50Q2RyKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudENkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3ViKSB7XG4gICAgICAgICAgICB0aGlzLnN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubGF0ZXN0VmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMub2JqID0gdW5kZWZpbmVkO1xuICAgIH1cbn1cbiJdfQ==