@worktile/planet 19.0.0-next.0 → 19.0.0-next.1
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/CHANGELOG.md +10 -0
- package/assets-loader.d.ts +9 -4
- package/assets-loader.d.ts.map +1 -1
- package/esm2022/application/ng-planet-application-ref.mjs +116 -0
- package/esm2022/application/planet-application-loader.mjs +459 -0
- package/esm2022/application/planet-application-ref.mjs +2 -0
- package/esm2022/application/planet-application.service.mjs +86 -0
- package/esm2022/application/portal-application.mjs +25 -0
- package/esm2022/assets-loader.mjs +332 -0
- package/esm2022/component/planet-component-loader.mjs +213 -0
- package/esm2022/component/planet-component-outlet.mjs +72 -0
- package/esm2022/component/planet-component-types.mjs +3 -0
- package/esm2022/component/plant-component.config.mjs +7 -0
- package/esm2022/debug.mjs +33 -0
- package/esm2022/empty/empty.component.mjs +17 -0
- package/esm2022/global-event-dispatcher.mjs +70 -0
- package/esm2022/global-planet.mjs +63 -0
- package/esm2022/helpers.mjs +187 -0
- package/esm2022/inner-types.mjs +2 -0
- package/esm2022/module.mjs +33 -0
- package/esm2022/planet.class.mjs +9 -0
- package/esm2022/planet.mjs +97 -0
- package/esm2022/public-api.mjs +19 -0
- package/esm2022/router/route-redirect.mjs +63 -0
- package/esm2022/sandbox/constants.mjs +7 -0
- package/esm2022/sandbox/exec.mjs +15 -0
- package/esm2022/sandbox/index.mjs +20 -0
- package/esm2022/sandbox/proxy/patches/document.mjs +12 -0
- package/esm2022/sandbox/proxy/patches/eventListener.mjs +41 -0
- package/esm2022/sandbox/proxy/patches/index.mjs +11 -0
- package/esm2022/sandbox/proxy/patches/storage.mjs +40 -0
- package/esm2022/sandbox/proxy/patches/timer.mjs +43 -0
- package/esm2022/sandbox/proxy/proxies/common.mjs +132 -0
- package/esm2022/sandbox/proxy/proxies/document.mjs +126 -0
- package/esm2022/sandbox/proxy/proxies/window.mjs +158 -0
- package/esm2022/sandbox/proxy/proxy-sandbox.mjs +49 -0
- package/esm2022/sandbox/proxy/types.mjs +2 -0
- package/esm2022/sandbox/sandbox.mjs +7 -0
- package/esm2022/sandbox/snapshot/snapshot-sandbox.mjs +12 -0
- package/esm2022/sandbox/types.mjs +2 -0
- package/esm2022/worktile-planet.mjs +5 -0
- package/fesm2022/worktile-planet.mjs +81 -51
- package/fesm2022/worktile-planet.mjs.map +1 -1
- package/helpers.d.ts +1 -1
- package/helpers.d.ts.map +1 -1
- package/inner-types.d.ts +6 -3
- package/inner-types.d.ts.map +1 -1
- package/package.json +3 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
# [19.0.0-next.1](https://github.com/worktile/ngx-planet/compare/19.0.0-next.0...19.0.0-next.1) (2025-03-28)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
* fix sub application module preload scripts execute error: unexpected token 'export' #TINFR-1732 [#350](https://github.com/worktile/ngx-planet/issues/350) ([96bed2c](https://github.com/worktile/ngx-planet/commit/96bed2c553f637fcc4773301ff224aa2e0142eba)), closes [#TINFR-1732](https://github.com/worktile/ngx-planet/issues/TINFR-1732)
|
|
11
|
+
* missing chunk files when loading chunk.js #TINFR-1731 ([#353](https://github.com/worktile/ngx-planet/issues/353)) ([c91c923](https://github.com/worktile/ngx-planet/commit/c91c9234e27a49f4fa80cece7f87a15ab2efe042)), closes [#TINFR-1731](https://github.com/worktile/ngx-planet/issues/TINFR-1731)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
5
15
|
# [19.0.0-next.0](https://github.com/worktile/ngx-planet/compare/18.0.1...19.0.0-next.0) (2025-03-26)
|
|
6
16
|
|
|
7
17
|
|
package/assets-loader.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Observable } from 'rxjs';
|
|
2
2
|
import { HttpClient } from '@angular/common/http';
|
|
3
3
|
import { PlanetApplication } from './planet.class';
|
|
4
|
-
import { AssetsTagItem
|
|
4
|
+
import { AssetsTagItem } from './inner-types';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
export interface AssetsLoadResult {
|
|
7
7
|
src: string;
|
|
@@ -13,7 +13,12 @@ export declare class AssetsLoader {
|
|
|
13
13
|
private http;
|
|
14
14
|
private loadedSources;
|
|
15
15
|
constructor(http: HttpClient);
|
|
16
|
-
loadScript(
|
|
16
|
+
loadScript(scriptAsset: AssetsTagItem): Observable<{
|
|
17
|
+
src: string;
|
|
18
|
+
hashCode: number;
|
|
19
|
+
loaded: boolean;
|
|
20
|
+
status: string;
|
|
21
|
+
}>;
|
|
17
22
|
loadScriptWithSandbox(app: string, src: string): Observable<AssetsLoadResult>;
|
|
18
23
|
loadStyle(src: string): Observable<AssetsLoadResult>;
|
|
19
24
|
loadScripts(sources: AssetsTagItem[], options?: {
|
|
@@ -33,9 +38,9 @@ export declare class AssetsLoader {
|
|
|
33
38
|
* => { type: "module", async: "async", defer: "defer" } as attributes
|
|
34
39
|
*/
|
|
35
40
|
parseTagAttributes(tag: string): Record<string, string>;
|
|
36
|
-
parseManifestFromHTML(html: string): Record<string, AssetsTagItem>;
|
|
41
|
+
parseManifestFromHTML(html: string): Record<string, AssetsTagItem[]>;
|
|
37
42
|
loadAppAssets(app: PlanetApplication): Observable<[AssetsLoadResult[], AssetsLoadResult[]]>;
|
|
38
|
-
loadManifest(url: string, responseType?: 'text' | 'json'): Observable<Record<string, AssetsTagItem>>;
|
|
43
|
+
loadManifest(url: string, responseType?: 'text' | 'json'): Observable<Record<string, AssetsTagItem[]>>;
|
|
39
44
|
static ɵfac: i0.ɵɵFactoryDeclaration<AssetsLoader, never>;
|
|
40
45
|
static ɵprov: i0.ɵɵInjectableDeclaration<AssetsLoader>;
|
|
41
46
|
}
|
package/assets-loader.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assets-loader.d.ts","sourceRoot":"","sources":["../../packages/planet/src/assets-loader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAM,UAAU,EAA8B,MAAM,MAAM,CAAC;AAElE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAA0B,MAAM,gBAAgB,CAAC;AAE3E,OAAO,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"assets-loader.d.ts","sourceRoot":"","sources":["../../packages/planet/src/assets-loader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAM,UAAU,EAA8B,MAAM,MAAM,CAAC;AAElE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAA0B,MAAM,gBAAgB,CAAC;AAE3E,OAAO,EAAE,aAAa,EAA0C,MAAM,eAAe,CAAC;;AAMtF,MAAM,WAAW,gBAAgB;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,qBAGa,YAAY;IAGT,OAAO,CAAC,IAAI;IAFxB,OAAO,CAAC,aAAa,CAAgB;gBAEjB,IAAI,EAAE,UAAU;IAEpC,UAAU,CAAC,WAAW,EAAE,aAAa;;;;;;IAkFrC,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC,gBAAgB,CAAC;IAsC7E,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC,gBAAgB,CAAC;IAyCpD,WAAW,CACP,OAAO,EAAE,aAAa,EAAE,EACxB,OAAO,GAAE;QACL,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,MAAM,CAAC,EAAE,OAAO,CAAC;KAIpB,GACF,UAAU,CAAC,gBAAgB,EAAE,CAAC;IAyBjC,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC,gBAAgB,EAAE,CAAC;IAWpE,oBAAoB,CAChB,OAAO,GAAE,aAAa,EAAO,EAC7B,MAAM,GAAE,aAAa,EAAO,EAC5B,OAAO,CAAC,EAAE;QACN,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,MAAM,CAAC,EAAE,OAAO,CAAC;KACpB;IAKL;;;;OAIG;IACH,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAsBvD,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC;IA0CpE,aAAa,CAAC,GAAG,EAAE,iBAAiB;IA2BpC,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,GAAE,MAAM,GAAG,MAAe,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;yCAhUrG,YAAY;6CAAZ,YAAY;CAuVxB"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { NgModuleRef, NgZone } from '@angular/core';
|
|
2
|
+
import { Router, NavigationEnd } from '@angular/router';
|
|
3
|
+
import { take } from 'rxjs/operators';
|
|
4
|
+
import { from } from 'rxjs';
|
|
5
|
+
import { getTagNameByTemplate } from '../helpers';
|
|
6
|
+
import { getSandboxInstance } from '../sandbox/';
|
|
7
|
+
export class NgPlanetApplicationRef {
|
|
8
|
+
get selector() {
|
|
9
|
+
return this.innerSelector;
|
|
10
|
+
}
|
|
11
|
+
get ngZone() {
|
|
12
|
+
return (this.injector || this.appModuleRef?.injector)?.get(NgZone);
|
|
13
|
+
}
|
|
14
|
+
get sandbox() {
|
|
15
|
+
return getSandboxInstance();
|
|
16
|
+
}
|
|
17
|
+
get bootstrapped() {
|
|
18
|
+
return !!(this.appModuleRef || this.appRef);
|
|
19
|
+
}
|
|
20
|
+
constructor(name, options) {
|
|
21
|
+
this.name = name;
|
|
22
|
+
if (options) {
|
|
23
|
+
this.template = options.template;
|
|
24
|
+
this.innerSelector = this.template ? getTagNameByTemplate(this.template) : '';
|
|
25
|
+
this.appModuleBootstrap = options.bootstrap;
|
|
26
|
+
}
|
|
27
|
+
// This is a hack, since NgZone doesn't allow you to configure the property that identifies your zone.
|
|
28
|
+
// See https://github.com/PlaceMe-SAS/single-spa-angular-cli/issues/33,
|
|
29
|
+
// NgZone.isInAngularZone = () => {
|
|
30
|
+
// // @ts-ignore
|
|
31
|
+
// return window.Zone.current._properties[`ngx-planet-${name}`] === true;
|
|
32
|
+
// };
|
|
33
|
+
}
|
|
34
|
+
// 子应用路由变化后同步修改 portal 的 Route
|
|
35
|
+
syncPortalRouteWhenNavigationEnd() {
|
|
36
|
+
const router = (this.injector || this.appModuleRef?.injector)?.get(Router);
|
|
37
|
+
if (router) {
|
|
38
|
+
router.events.subscribe(event => {
|
|
39
|
+
if (event instanceof NavigationEnd) {
|
|
40
|
+
const currentNavigation = router.getCurrentNavigation();
|
|
41
|
+
this.ngZone?.onStable
|
|
42
|
+
.asObservable()
|
|
43
|
+
.pipe(take(1))
|
|
44
|
+
.subscribe(() => {
|
|
45
|
+
this.portalApp.ngZone.run(() => {
|
|
46
|
+
if (currentNavigation?.extras?.browserUrl) {
|
|
47
|
+
this.portalApp.router.navigateByUrl(event.url, {
|
|
48
|
+
browserUrl: currentNavigation.extras.browserUrl
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
this.portalApp.router.navigateByUrl(event.url);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
bootstrap(app) {
|
|
61
|
+
if (!this.appModuleBootstrap) {
|
|
62
|
+
throw new Error(`app(${this.name}) is not defined`);
|
|
63
|
+
}
|
|
64
|
+
this.portalApp = app;
|
|
65
|
+
return from(this.appModuleBootstrap(app).then(appModuleRef => {
|
|
66
|
+
if (appModuleRef['instance']) {
|
|
67
|
+
this.appModuleRef = appModuleRef;
|
|
68
|
+
this.appModuleRef.instance.appName = this.name;
|
|
69
|
+
this.injector = this.appModuleRef.injector;
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
this.appRef = appModuleRef;
|
|
73
|
+
this.injector = this.appRef.injector;
|
|
74
|
+
const moduleRef = this.appRef.injector.get(NgModuleRef);
|
|
75
|
+
moduleRef.instance = { appName: this.name };
|
|
76
|
+
}
|
|
77
|
+
this.syncPortalRouteWhenNavigationEnd();
|
|
78
|
+
return this;
|
|
79
|
+
}));
|
|
80
|
+
}
|
|
81
|
+
getRouter() {
|
|
82
|
+
return (this.injector || this.appModuleRef?.injector)?.get(Router);
|
|
83
|
+
}
|
|
84
|
+
getCurrentRouterStateUrl() {
|
|
85
|
+
return this.getRouter()?.routerState.snapshot.url;
|
|
86
|
+
}
|
|
87
|
+
navigateByUrl(url, extras) {
|
|
88
|
+
const router = this.getRouter();
|
|
89
|
+
this.ngZone?.run(() => {
|
|
90
|
+
router?.navigateByUrl(url, extras);
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
getComponentFactory() {
|
|
94
|
+
return this.componentFactory;
|
|
95
|
+
}
|
|
96
|
+
registerComponentFactory(componentFactory) {
|
|
97
|
+
this.componentFactory = componentFactory;
|
|
98
|
+
}
|
|
99
|
+
destroy() {
|
|
100
|
+
if (this.appModuleRef || this.appRef) {
|
|
101
|
+
const router = (this.injector || this.appModuleRef?.injector)?.get(Router);
|
|
102
|
+
if (router) {
|
|
103
|
+
router.dispose();
|
|
104
|
+
}
|
|
105
|
+
if (this.sandbox) {
|
|
106
|
+
this.sandbox.destroy();
|
|
107
|
+
}
|
|
108
|
+
this.appModuleRef?.destroy();
|
|
109
|
+
this.appModuleRef = undefined;
|
|
110
|
+
this.appRef?.destroy();
|
|
111
|
+
this.appRef = undefined;
|
|
112
|
+
this.injector = undefined;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctcGxhbmV0LWFwcGxpY2F0aW9uLXJlZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYW5ldC9zcmMvYXBwbGljYXRpb24vbmctcGxhbmV0LWFwcGxpY2F0aW9uLXJlZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWtCLFdBQVcsRUFBRSxNQUFNLEVBQXVCLE1BQU0sZUFBZSxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUE4QyxNQUFNLGlCQUFpQixDQUFDO0FBQ3BHLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0QyxPQUFPLEVBQWMsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3hDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNsRCxPQUFPLEVBQUUsa0JBQWtCLEVBQVcsTUFBTSxhQUFhLENBQUM7QUFxQjFELE1BQU0sT0FBTyxzQkFBc0I7SUFXL0IsSUFBVyxRQUFRO1FBQ2YsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFXLE1BQU07UUFDYixPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQsSUFBVyxPQUFPO1FBQ2QsT0FBTyxrQkFBa0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFXLFlBQVk7UUFDbkIsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsWUFBWSxJQUFZLEVBQUUsT0FBMEI7UUFDaEQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNWLElB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TUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3JCLENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDZixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzNCLENBQUM7WUFDRCxJQUFJLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO1lBQzlCLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7WUFDeEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7UUFDOUIsQ0FBQztJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcGxpY2F0aW9uUmVmLCBOZ01vZHVsZVJlZiwgTmdab25lLCBFbnZpcm9ubWVudEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIsIE5hdmlnYXRpb25FbmQsIE5hdmlnYXRpb25TdGFydCwgTmF2aWdhdGlvbkJlaGF2aW9yT3B0aW9ucyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUGxhbmV0UG9ydGFsQXBwbGljYXRpb24gfSBmcm9tICcuL3BvcnRhbC1hcHBsaWNhdGlvbic7XG5pbXBvcnQgeyBQbGFudENvbXBvbmVudEZhY3RvcnkgfSBmcm9tICcuLi9jb21wb25lbnQvcGxhbmV0LWNvbXBvbmVudC10eXBlcyc7XG5pbXBvcnQgeyBnZXRUYWdOYW1lQnlUZW1wbGF0ZSB9IGZyb20gJy4uL2hlbHBlcnMnO1xuaW1wb3J0IHsgZ2V0U2FuZGJveEluc3RhbmNlLCBTYW5kYm94IH0gZnJvbSAnLi4vc2FuZGJveC8nO1xuaW1wb3J0IHsgUGxhbmV0QXBwbGljYXRpb25SZWYgfSBmcm9tICcuL3BsYW5ldC1hcHBsaWNhdGlvbi1yZWYnO1xuXG5leHBvcnQgdHlwZSBOZ0Jvb3RzdHJhcEFwcE1vZHVsZSA9IChcbiAgICBwb3J0YWxBcHA6IFBsYW5ldFBvcnRhbEFwcGxpY2F0aW9uXG4pID0+IFByb21pc2U8TmdNb2R1bGVSZWY8YW55PiB8IHZvaWQgfCBBcHBsaWNhdGlvblJlZiB8IHVuZGVmaW5lZCB8IG51bGw+O1xuXG5leHBvcnQgaW50ZXJmYWNlIE5nQm9vdHN0cmFwT3B0aW9ucyB7XG4gICAgdGVtcGxhdGU6IHN0cmluZztcbiAgICBib290c3RyYXA6IE5nQm9vdHN0cmFwQXBwTW9kdWxlO1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIHBsZWFzZSB1c2UgTmdCb290c3RyYXBBcHBNb2R1bGVcbiAqL1xuZXhwb3J0IHR5cGUgQm9vdHN0cmFwQXBwTW9kdWxlID0gTmdCb290c3RyYXBBcHBNb2R1bGU7XG4vKipcbiAqIEBkZXByZWNhdGVkIHBsZWFzZSB1c2UgTmdCb290c3RyYXBPcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQm9vdHN0cmFwT3B0aW9ucyBleHRlbmRzIE5nQm9vdHN0cmFwT3B0aW9ucyB7fVxuXG5leHBvcnQgY2xhc3MgTmdQbGFuZXRBcHBsaWNhdGlvblJlZiBpbXBsZW1lbnRzIFBsYW5ldEFwcGxpY2F0aW9uUmVmIHtcbiAgICBwcml2YXRlIGluamVjdG9yPzogRW52aXJvbm1lbnRJbmplY3RvcjtcbiAgICBwcml2YXRlIGFwcFJlZj86IEFwcGxpY2F0aW9uUmVmO1xuICAgIHB1YmxpYyBhcHBNb2R1bGVSZWY/OiBOZ01vZHVsZVJlZjxhbnk+O1xuICAgIHB1YmxpYyB0ZW1wbGF0ZT86IHN0cmluZztcbiAgICBwcml2YXRlIGlubmVyU2VsZWN0b3I/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBuYW1lOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBwb3J0YWxBcHAhOiBQbGFuZXRQb3J0YWxBcHBsaWNhdGlvbjtcbiAgICBwcml2YXRlIGFwcE1vZHVsZUJvb3RzdHJhcD86IE5nQm9vdHN0cmFwQXBwTW9kdWxlO1xuICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeT86IFBsYW50Q29tcG9uZW50RmFjdG9yeTtcblxuICAgIHB1YmxpYyBnZXQgc2VsZWN0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlubmVyU2VsZWN0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBuZ1pvbmUoKTogTmdab25lIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmluamVjdG9yIHx8IHRoaXMuYXBwTW9kdWxlUmVmPy5pbmplY3Rvcik/LmdldChOZ1pvbmUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc2FuZGJveCgpOiBTYW5kYm94IHtcbiAgICAgICAgcmV0dXJuIGdldFNhbmRib3hJbnN0YW5jZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYm9vdHN0cmFwcGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISEodGhpcy5hcHBNb2R1bGVSZWYgfHwgdGhpcy5hcHBSZWYpO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZywgb3B0aW9ucz86IEJvb3RzdHJhcE9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMudGVtcGxhdGUgPSBvcHRpb25zLnRlbXBsYXRlO1xuICAgICAgICAgICAgdGhpcy5pbm5lclNlbGVjdG9yID0gdGhpcy50ZW1wbGF0ZSA/IGdldFRhZ05hbWVCeVRlbXBsYXRlKHRoaXMudGVtcGxhdGUpIDogJyc7XG4gICAgICAgICAgICB0aGlzLmFwcE1vZHVsZUJvb3RzdHJhcCA9IG9wdGlvbnMuYm9vdHN0cmFwO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoaXMgaXMgYSBoYWNrLCBzaW5jZSBOZ1pvbmUgZG9lc24ndCBhbGxvdyB5b3UgdG8gY29uZmlndXJlIHRoZSBwcm9wZXJ0eSB0aGF0IGlkZW50aWZpZXMgeW91ciB6b25lLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL1BsYWNlTWUtU0FTL3NpbmdsZS1zcGEtYW5ndWxhci1jbGkvaXNzdWVzLzMzLFxuICAgICAgICAvLyBOZ1pvbmUuaXNJbkFuZ3VsYXJab25lID0gKCkgPT4ge1xuICAgICAgICAvLyAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAvLyAgICAgcmV0dXJuIHdpbmRvdy5ab25lLmN1cnJlbnQuX3Byb3BlcnRpZXNbYG5neC1wbGFuZXQtJHtuYW1lfWBdID09PSB0cnVlO1xuICAgICAgICAvLyB9O1xuICAgIH1cblxuICAgIC8vIOWtkOW6lOeUqOi3r+eUseWPmOWMluWQjuWQjOatpeS/ruaUuSBwb3J0YWwg55qEIFJvdXRlXG4gICAgcHJpdmF0ZSBzeW5jUG9ydGFsUm91dGVXaGVuTmF2aWdhdGlvbkVuZCgpIHtcbiAgICAgICAgY29uc3Qgcm91dGVyID0gKHRoaXMuaW5qZWN0b3IgfHwgdGhpcy5hcHBNb2R1bGVSZWY/LmluamVjdG9yKT8uZ2V0KFJvdXRlcik7XG4gICAgICAgIGlmIChyb3V0ZXIpIHtcbiAgICAgICAgICAgIHJvdXRlci5ldmVudHMuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnROYXZpZ2F0aW9uID0gcm91dGVyLmdldEN1cnJlbnROYXZpZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmdab25lPy5vblN0YWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3J0YWxBcHAubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50TmF2aWdhdGlvbj8uZXh0cmFzPy5icm93c2VyVXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcnRhbEFwcC5yb3V0ZXIhLm5hdmlnYXRlQnlVcmwoZXZlbnQudXJsLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJvd3NlclVybDogY3VycmVudE5hdmlnYXRpb24uZXh0cmFzLmJyb3dzZXJVcmxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3J0YWxBcHAucm91dGVyIS5uYXZpZ2F0ZUJ5VXJsKGV2ZW50LnVybCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYm9vdHN0cmFwKGFwcDogUGxhbmV0UG9ydGFsQXBwbGljYXRpb24pOiBPYnNlcnZhYmxlPHRoaXM+IHtcbiAgICAgICAgaWYgKCF0aGlzLmFwcE1vZHVsZUJvb3RzdHJhcCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBhcHAoJHt0aGlzLm5hbWV9KSBpcyBub3QgZGVmaW5lZGApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9ydGFsQXBwID0gYXBwO1xuICAgICAgICByZXR1cm4gZnJvbShcbiAgICAgICAgICAgIHRoaXMuYXBwTW9kdWxlQm9vdHN0cmFwKGFwcCkudGhlbihhcHBNb2R1bGVSZWYgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhcHBNb2R1bGVSZWZbJ2luc3RhbmNlJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBNb2R1bGVSZWYgPSBhcHBNb2R1bGVSZWYgYXMgTmdNb2R1bGVSZWY8YW55PjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBNb2R1bGVSZWYuaW5zdGFuY2UuYXBwTmFtZSA9IHRoaXMubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmplY3RvciA9IHRoaXMuYXBwTW9kdWxlUmVmLmluamVjdG9yO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwUmVmID0gYXBwTW9kdWxlUmVmIGFzIHVua25vd24gYXMgQXBwbGljYXRpb25SZWY7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5qZWN0b3IgPSB0aGlzLmFwcFJlZi5pbmplY3RvcjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9kdWxlUmVmID0gdGhpcy5hcHBSZWYuaW5qZWN0b3IuZ2V0KE5nTW9kdWxlUmVmKTtcbiAgICAgICAgICAgICAgICAgICAgKG1vZHVsZVJlZiBhcyBhbnkpLmluc3RhbmNlID0geyBhcHBOYW1lOiB0aGlzLm5hbWUgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zeW5jUG9ydGFsUm91dGVXaGVuTmF2aWdhdGlvbkVuZCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXRSb3V0ZXIoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5pbmplY3RvciB8fCB0aGlzLmFwcE1vZHVsZVJlZj8uaW5qZWN0b3IpPy5nZXQoUm91dGVyKTtcbiAgICB9XG5cbiAgICBnZXRDdXJyZW50Um91dGVyU3RhdGVVcmwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFJvdXRlcigpPy5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC51cmw7XG4gICAgfVxuXG4gICAgbmF2aWdhdGVCeVVybCh1cmw6IHN0cmluZywgZXh0cmFzPzogTmF2aWdhdGlvbkJlaGF2aW9yT3B0aW9ucyk6IHZvaWQge1xuICAgICAgICBjb25zdCByb3V0ZXIgPSB0aGlzLmdldFJvdXRlcigpO1xuICAgICAgICB0aGlzLm5nWm9uZT8ucnVuKCgpID0+IHtcbiAgICAgICAgICAgIHJvdXRlcj8ubmF2aWdhdGVCeVVybCh1cmwsIGV4dHJhcyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldENvbXBvbmVudEZhY3RvcnkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbXBvbmVudEZhY3Rvcnk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJDb21wb25lbnRGYWN0b3J5KGNvbXBvbmVudEZhY3Rvcnk6IFBsYW50Q29tcG9uZW50RmFjdG9yeSkge1xuICAgICAgICB0aGlzLmNvbXBvbmVudEZhY3RvcnkgPSBjb21wb25lbnRGYWN0b3J5O1xuICAgIH1cblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmFwcE1vZHVsZVJlZiB8fCB0aGlzLmFwcFJlZikge1xuICAgICAgICAgICAgY29uc3Qgcm91dGVyID0gKHRoaXMuaW5qZWN0b3IgfHwgdGhpcy5hcHBNb2R1bGVSZWY/LmluamVjdG9yKT8uZ2V0KFJvdXRlcik7XG4gICAgICAgICAgICBpZiAocm91dGVyKSB7XG4gICAgICAgICAgICAgICAgcm91dGVyLmRpc3Bvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnNhbmRib3gpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNhbmRib3guZGVzdHJveSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hcHBNb2R1bGVSZWY/LmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMuYXBwTW9kdWxlUmVmID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5hcHBSZWY/LmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMuYXBwUmVmID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5pbmplY3RvciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|