@worktile/planet 19.0.0-next.1 → 20.0.0-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/README.md +0 -5
- package/fesm2022/worktile-planet.mjs +310 -318
- package/fesm2022/worktile-planet.mjs.map +1 -1
- package/index.d.ts +467 -6
- package/index.d.ts.map +1 -0
- package/package.json +3 -5
- package/application/ng-planet-application-ref.d.ts +0 -46
- package/application/ng-planet-application-ref.d.ts.map +0 -1
- package/application/planet-application-loader.d.ts +0 -78
- package/application/planet-application-loader.d.ts.map +0 -1
- package/application/planet-application-ref.d.ts +0 -12
- package/application/planet-application-ref.d.ts.map +0 -1
- package/application/planet-application.service.d.ts +0 -22
- package/application/planet-application.service.d.ts.map +0 -1
- package/application/portal-application.d.ts +0 -20
- package/application/portal-application.d.ts.map +0 -1
- package/assets-loader.d.ts +0 -47
- package/assets-loader.d.ts.map +0 -1
- package/component/planet-component-loader.d.ts +0 -31
- package/component/planet-component-loader.d.ts.map +0 -1
- package/component/planet-component-outlet.d.ts +0 -26
- package/component/planet-component-outlet.d.ts.map +0 -1
- package/component/planet-component-types.d.ts +0 -11
- package/component/planet-component-types.d.ts.map +0 -1
- package/component/plant-component.config.d.ts +0 -22
- package/component/plant-component.config.d.ts.map +0 -1
- package/debug.d.ts +0 -22
- package/debug.d.ts.map +0 -1
- package/empty/empty.component.d.ts +0 -6
- package/empty/empty.component.d.ts.map +0 -1
- package/esm2022/application/ng-planet-application-ref.mjs +0 -116
- package/esm2022/application/planet-application-loader.mjs +0 -459
- package/esm2022/application/planet-application-ref.mjs +0 -2
- package/esm2022/application/planet-application.service.mjs +0 -86
- package/esm2022/application/portal-application.mjs +0 -25
- package/esm2022/assets-loader.mjs +0 -332
- package/esm2022/component/planet-component-loader.mjs +0 -213
- package/esm2022/component/planet-component-outlet.mjs +0 -72
- package/esm2022/component/planet-component-types.mjs +0 -3
- package/esm2022/component/plant-component.config.mjs +0 -7
- package/esm2022/debug.mjs +0 -33
- package/esm2022/empty/empty.component.mjs +0 -17
- package/esm2022/global-event-dispatcher.mjs +0 -70
- package/esm2022/global-planet.mjs +0 -63
- package/esm2022/helpers.mjs +0 -187
- package/esm2022/inner-types.mjs +0 -2
- package/esm2022/module.mjs +0 -33
- package/esm2022/planet.class.mjs +0 -9
- package/esm2022/planet.mjs +0 -97
- package/esm2022/public-api.mjs +0 -19
- package/esm2022/router/route-redirect.mjs +0 -63
- package/esm2022/sandbox/constants.mjs +0 -7
- package/esm2022/sandbox/exec.mjs +0 -15
- package/esm2022/sandbox/index.mjs +0 -20
- package/esm2022/sandbox/proxy/patches/document.mjs +0 -12
- package/esm2022/sandbox/proxy/patches/eventListener.mjs +0 -41
- package/esm2022/sandbox/proxy/patches/index.mjs +0 -11
- package/esm2022/sandbox/proxy/patches/storage.mjs +0 -40
- package/esm2022/sandbox/proxy/patches/timer.mjs +0 -43
- package/esm2022/sandbox/proxy/proxies/common.mjs +0 -132
- package/esm2022/sandbox/proxy/proxies/document.mjs +0 -126
- package/esm2022/sandbox/proxy/proxies/window.mjs +0 -158
- package/esm2022/sandbox/proxy/proxy-sandbox.mjs +0 -49
- package/esm2022/sandbox/proxy/types.mjs +0 -2
- package/esm2022/sandbox/sandbox.mjs +0 -7
- package/esm2022/sandbox/snapshot/snapshot-sandbox.mjs +0 -12
- package/esm2022/sandbox/types.mjs +0 -2
- package/esm2022/worktile-planet.mjs +0 -5
- package/global-event-dispatcher.d.ts +0 -23
- package/global-event-dispatcher.d.ts.map +0 -1
- package/global-planet.d.ts +0 -25
- package/global-planet.d.ts.map +0 -1
- package/helpers.d.ts +0 -36
- package/helpers.d.ts.map +0 -1
- package/inner-types.d.ts +0 -15
- package/inner-types.d.ts.map +0 -1
- package/module.d.ts +0 -13
- package/module.d.ts.map +0 -1
- package/planet.class.d.ts +0 -118
- package/planet.class.d.ts.map +0 -1
- package/planet.d.ts +0 -32
- package/planet.d.ts.map +0 -1
- package/public-api.d.ts +0 -17
- package/public-api.d.ts.map +0 -1
- package/router/route-redirect.d.ts +0 -16
- package/router/route-redirect.d.ts.map +0 -1
- package/sandbox/constants.d.ts +0 -7
- package/sandbox/constants.d.ts.map +0 -1
- package/sandbox/exec.d.ts +0 -3
- package/sandbox/exec.d.ts.map +0 -1
- package/sandbox/index.d.ts +0 -7
- package/sandbox/index.d.ts.map +0 -1
- package/sandbox/proxy/patches/document.d.ts +0 -3
- package/sandbox/proxy/patches/document.d.ts.map +0 -1
- package/sandbox/proxy/patches/eventListener.d.ts +0 -3
- package/sandbox/proxy/patches/eventListener.d.ts.map +0 -1
- package/sandbox/proxy/patches/index.d.ts +0 -3
- package/sandbox/proxy/patches/index.d.ts.map +0 -1
- package/sandbox/proxy/patches/storage.d.ts +0 -15
- package/sandbox/proxy/patches/storage.d.ts.map +0 -1
- package/sandbox/proxy/patches/timer.d.ts +0 -3
- package/sandbox/proxy/patches/timer.d.ts.map +0 -1
- package/sandbox/proxy/proxies/common.d.ts +0 -13
- package/sandbox/proxy/proxies/common.d.ts.map +0 -1
- package/sandbox/proxy/proxies/document.d.ts +0 -14
- package/sandbox/proxy/proxies/document.d.ts.map +0 -1
- package/sandbox/proxy/proxies/window.d.ts +0 -13
- package/sandbox/proxy/proxies/window.d.ts.map +0 -1
- package/sandbox/proxy/proxy-sandbox.d.ts +0 -16
- package/sandbox/proxy/proxy-sandbox.d.ts.map +0 -1
- package/sandbox/proxy/types.d.ts +0 -14
- package/sandbox/proxy/types.d.ts.map +0 -1
- package/sandbox/sandbox.d.ts +0 -12
- package/sandbox/sandbox.d.ts.map +0 -1
- package/sandbox/snapshot/snapshot-sandbox.d.ts +0 -9
- package/sandbox/snapshot/snapshot-sandbox.d.ts.map +0 -1
- package/sandbox/types.d.ts +0 -2
- package/sandbox/types.d.ts.map +0 -1
- package/worktile-planet.d.ts.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"planet-application.service.d.ts","sourceRoot":"","sources":["../../../packages/planet/src/application/planet-application.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGlD,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;;AAGhD,qBAGa,wBAAwB;IAM7B,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,YAAY;IANxB,OAAO,CAAC,IAAI,CAA2B;IAEvC,OAAO,CAAC,OAAO,CAA4C;gBAG/C,IAAI,EAAE,UAAU,EAChB,YAAY,EAAE,YAAY;IAOtC,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,iBAAiB,CAAC,MAAM,CAAC,GAAG,iBAAiB,CAAC,MAAM,CAAC,EAAE;IAWnF,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC;IAe5C,UAAU,CAAC,IAAI,EAAE,MAAM;IASvB,mBAAmB,CAAC,MAAM,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,EAAE;IAa/E,YAAY,CAAC,IAAI,EAAE,MAAM;IAIzB,gBAAgB,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE;IAU3C,OAAO;yCA5EE,wBAAwB;6CAAxB,wBAAwB;CA+EpC"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { Router, UrlTree, NavigationExtras } from '@angular/router';
|
|
2
|
-
import { NgZone, Injector, ApplicationRef } from '@angular/core';
|
|
3
|
-
import { PlantComponentFactory } from '../component/planet-component-types';
|
|
4
|
-
import { GlobalEventDispatcher } from '../global-event-dispatcher';
|
|
5
|
-
export declare class PlanetPortalApplication<TData = any> {
|
|
6
|
-
applicationRef?: ApplicationRef;
|
|
7
|
-
injector?: Injector;
|
|
8
|
-
router?: Router;
|
|
9
|
-
ngZone?: NgZone;
|
|
10
|
-
globalEventDispatcher?: GlobalEventDispatcher;
|
|
11
|
-
data?: TData;
|
|
12
|
-
name?: string;
|
|
13
|
-
private componentFactory?;
|
|
14
|
-
navigateByUrl(url: string | UrlTree, extras?: NavigationExtras): Promise<boolean>;
|
|
15
|
-
run<T>(fn: (...args: any[]) => T): T;
|
|
16
|
-
tick(): void;
|
|
17
|
-
getComponentFactory(): PlantComponentFactory;
|
|
18
|
-
registerComponentFactory(componentFactory: PlantComponentFactory): void;
|
|
19
|
-
}
|
|
20
|
-
//# sourceMappingURL=portal-application.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"portal-application.d.ts","sourceRoot":"","sources":["../../../packages/planet/src/application/portal-application.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,qBAAa,uBAAuB,CAAC,KAAK,GAAG,GAAG;IAC5C,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAY;IACzB,OAAO,CAAC,gBAAgB,CAAC,CAAwB;IAEjD,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAMjF,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC;IAMpC,IAAI;IAIJ,mBAAmB;IAInB,wBAAwB,CAAC,gBAAgB,EAAE,qBAAqB;CAGnE"}
|
package/assets-loader.d.ts
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { Observable } from 'rxjs';
|
|
2
|
-
import { HttpClient } from '@angular/common/http';
|
|
3
|
-
import { PlanetApplication } from './planet.class';
|
|
4
|
-
import { AssetsTagItem } from './inner-types';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
export interface AssetsLoadResult {
|
|
7
|
-
src: string;
|
|
8
|
-
hashCode: number;
|
|
9
|
-
loaded: boolean;
|
|
10
|
-
status: string;
|
|
11
|
-
}
|
|
12
|
-
export declare class AssetsLoader {
|
|
13
|
-
private http;
|
|
14
|
-
private loadedSources;
|
|
15
|
-
constructor(http: HttpClient);
|
|
16
|
-
loadScript(scriptAsset: AssetsTagItem): Observable<{
|
|
17
|
-
src: string;
|
|
18
|
-
hashCode: number;
|
|
19
|
-
loaded: boolean;
|
|
20
|
-
status: string;
|
|
21
|
-
}>;
|
|
22
|
-
loadScriptWithSandbox(app: string, src: string): Observable<AssetsLoadResult>;
|
|
23
|
-
loadStyle(src: string): Observable<AssetsLoadResult>;
|
|
24
|
-
loadScripts(sources: AssetsTagItem[], options?: {
|
|
25
|
-
app?: string;
|
|
26
|
-
sandbox?: boolean;
|
|
27
|
-
serial?: boolean;
|
|
28
|
-
}): Observable<AssetsLoadResult[]>;
|
|
29
|
-
loadStyles(sources: AssetsTagItem[]): Observable<AssetsLoadResult[]>;
|
|
30
|
-
loadScriptsAndStyles(scripts?: AssetsTagItem[], styles?: AssetsTagItem[], options?: {
|
|
31
|
-
app?: string;
|
|
32
|
-
sandbox?: boolean;
|
|
33
|
-
serial?: boolean;
|
|
34
|
-
}): Observable<[AssetsLoadResult[], AssetsLoadResult[]]>;
|
|
35
|
-
/**
|
|
36
|
-
* <script type="module" src="http://127.0.0.1:3001/main.js" async defer></script>
|
|
37
|
-
* => [`type="module"`, "async ", "defer>"] as attributeStrMatchArr
|
|
38
|
-
* => { type: "module", async: "async", defer: "defer" } as attributes
|
|
39
|
-
*/
|
|
40
|
-
parseTagAttributes(tag: string): Record<string, string>;
|
|
41
|
-
parseManifestFromHTML(html: string): Record<string, AssetsTagItem[]>;
|
|
42
|
-
loadAppAssets(app: PlanetApplication): Observable<[AssetsLoadResult[], AssetsLoadResult[]]>;
|
|
43
|
-
loadManifest(url: string, responseType?: 'text' | 'json'): Observable<Record<string, AssetsTagItem[]>>;
|
|
44
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<AssetsLoader, never>;
|
|
45
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<AssetsLoader>;
|
|
46
|
-
}
|
|
47
|
-
//# sourceMappingURL=assets-loader.d.ts.map
|
package/assets-loader.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { ApplicationRef, NgModuleRef, NgZone, Type } from '@angular/core';
|
|
2
|
-
import { Observable } from 'rxjs';
|
|
3
|
-
import { PlanetComponentRef } from './planet-component-types';
|
|
4
|
-
import { PlantComponentConfig } from './plant-component.config';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
export type PlanetComponent<T = unknown> = {
|
|
7
|
-
name: string;
|
|
8
|
-
component: Type<T>;
|
|
9
|
-
} | Type<T>;
|
|
10
|
-
export declare class PlanetComponentLoader {
|
|
11
|
-
private applicationRef;
|
|
12
|
-
private ngModuleRef;
|
|
13
|
-
private ngZone;
|
|
14
|
-
private document;
|
|
15
|
-
private get applicationLoader();
|
|
16
|
-
private get applicationService();
|
|
17
|
-
constructor(applicationRef: ApplicationRef, ngModuleRef: NgModuleRef<any>, ngZone: NgZone, document: any);
|
|
18
|
-
private getPlantAppRef;
|
|
19
|
-
private createInjector;
|
|
20
|
-
private getContainerElement;
|
|
21
|
-
private insertComponentRootNodeToContainer;
|
|
22
|
-
private attachComponent;
|
|
23
|
-
/** Gets the root HTMLElement for an instantiated component. */
|
|
24
|
-
private getComponentRootNode;
|
|
25
|
-
private registerComponentFactory;
|
|
26
|
-
register(components: PlanetComponent | PlanetComponent[], immediate?: boolean): void;
|
|
27
|
-
load<TComp = unknown, TData = unknown>(app: string, componentName: string, config: PlantComponentConfig<TData>): Observable<PlanetComponentRef<TComp>>;
|
|
28
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<PlanetComponentLoader, never>;
|
|
29
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<PlanetComponentLoader>;
|
|
30
|
-
}
|
|
31
|
-
//# sourceMappingURL=planet-component-loader.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"planet-component-loader.d.ts","sourceRoot":"","sources":["../../../packages/planet/src/component/planet-component-loader.ts"],"names":[],"mappings":"AACA,OAAO,EACH,cAAc,EAQd,WAAW,EACX,MAAM,EAEN,IAAI,EAGP,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,UAAU,EAAa,MAAM,MAAM,CAAC;AAY7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;;AAQhE,MAAM,MAAM,eAAe,CAAC,CAAC,GAAG,OAAO,IACjC;IACI,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;CACtB,GACD,IAAI,CAAC,CAAC,CAAC,CAAC;AAEd,qBAGa,qBAAqB;IAU1B,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,MAAM;IACI,OAAO,CAAC,QAAQ;IAZtC,OAAO,KAAK,iBAAiB,GAE5B;IAED,OAAO,KAAK,kBAAkB,GAE7B;gBAGW,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,EAC7B,MAAM,EAAE,MAAM,EACI,QAAQ,EAAE,GAAG;IAG3C,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,kCAAkC;IAkB1C,OAAO,CAAC,eAAe;IAkCvB,+DAA+D;IAC/D,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,wBAAwB;IAkChC,QAAQ,CAAC,UAAU,EAAE,eAAe,GAAG,eAAe,EAAE,EAAE,SAAS,CAAC,EAAE,OAAO;IAU7E,IAAI,CAAC,KAAK,GAAG,OAAO,EAAE,KAAK,GAAG,OAAO,EACjC,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,oBAAoB,CAAC,KAAK,CAAC,GACpC,UAAU,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;yCA/J/B,qBAAqB;6CAArB,qBAAqB;CAiNjC"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { OnDestroy, OnChanges, SimpleChanges, AfterViewInit, ElementRef, NgZone, EventEmitter } from '@angular/core';
|
|
2
|
-
import { PlanetComponentLoader } from './planet-component-loader';
|
|
3
|
-
import { PlanetComponentRef } from './planet-component-types';
|
|
4
|
-
import { PlantComponentProjectableNode } from './plant-component.config';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
export declare class PlanetComponentOutlet implements OnChanges, OnDestroy, AfterViewInit {
|
|
7
|
-
private elementRef;
|
|
8
|
-
private planetComponentLoader;
|
|
9
|
-
private ngZone;
|
|
10
|
-
planetComponentOutlet: string;
|
|
11
|
-
planetComponentOutletApp: string;
|
|
12
|
-
planetComponentOutletProjectableNodes: PlantComponentProjectableNode[];
|
|
13
|
-
planetComponentOutletInitialState: any;
|
|
14
|
-
planetComponentLoaded: EventEmitter<PlanetComponentRef<any>>;
|
|
15
|
-
private componentRef;
|
|
16
|
-
private destroyed$;
|
|
17
|
-
constructor(elementRef: ElementRef, planetComponentLoader: PlanetComponentLoader, ngZone: NgZone);
|
|
18
|
-
ngOnChanges(changes: SimpleChanges): void;
|
|
19
|
-
ngAfterViewInit(): void;
|
|
20
|
-
loadComponent(): void;
|
|
21
|
-
ngOnDestroy(): void;
|
|
22
|
-
clear(): void;
|
|
23
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<PlanetComponentOutlet, never>;
|
|
24
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<PlanetComponentOutlet, "[planetComponentOutlet]", never, { "planetComponentOutlet": { "alias": "planetComponentOutlet"; "required": false; }; "planetComponentOutletApp": { "alias": "planetComponentOutletApp"; "required": false; }; "planetComponentOutletProjectableNodes": { "alias": "planetComponentOutletProjectableNodes"; "required": false; }; "planetComponentOutletInitialState": { "alias": "planetComponentOutletInitialState"; "required": false; }; }, { "planetComponentLoaded": "planetComponentLoaded"; }, never, never, true, never>;
|
|
25
|
-
}
|
|
26
|
-
//# sourceMappingURL=planet-component-outlet.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"planet-component-outlet.d.ts","sourceRoot":"","sources":["../../../packages/planet/src/component/planet-component-outlet.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,SAAS,EACT,SAAS,EACT,aAAa,EAEb,aAAa,EACb,UAAU,EACV,MAAM,EAEN,YAAY,EACf,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;;AAEzE,qBAKa,qBAAsB,YAAW,SAAS,EAAE,SAAS,EAAE,aAAa;IAgBzE,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,qBAAqB;IAC7B,OAAO,CAAC,MAAM;IAjBT,qBAAqB,EAAE,MAAM,CAAC;IAE9B,wBAAwB,EAAE,MAAM,CAAC;IAEjC,qCAAqC,EAAE,6BAA6B,EAAE,CAAC;IAEvE,iCAAiC,EAAE,GAAG,CAAC;IAEtC,qBAAqB,wCAA0C;IAEzE,OAAO,CAAC,YAAY,CAAqB;IAEzC,OAAO,CAAC,UAAU,CAAuB;gBAG7B,UAAU,EAAE,UAAU,EACtB,qBAAqB,EAAE,qBAAqB,EAC5C,MAAM,EAAE,MAAM;IAG1B,WAAW,CAAC,OAAO,EAAE,aAAa;IAMlC,eAAe,IAAI,IAAI;IAIvB,aAAa;IAqBb,WAAW,IAAI,IAAI;IAKnB,KAAK;yCAzDI,qBAAqB;2CAArB,qBAAqB;CA6DjC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { ComponentRef } from '@angular/core';
|
|
2
|
-
import { PlantComponentConfig } from './plant-component.config';
|
|
3
|
-
export declare class PlanetComponentRef<TComp = any> {
|
|
4
|
-
wrapperElement: HTMLElement;
|
|
5
|
-
hostElement: HTMLElement;
|
|
6
|
-
componentInstance: TComp;
|
|
7
|
-
componentRef: ComponentRef<TComp>;
|
|
8
|
-
dispose: () => void;
|
|
9
|
-
}
|
|
10
|
-
export type PlantComponentFactory = <TData, TComp>(componentName: string, config: PlantComponentConfig<TData>) => PlanetComponentRef<TComp>;
|
|
11
|
-
//# sourceMappingURL=planet-component-types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"planet-component-types.d.ts","sourceRoot":"","sources":["../../../packages/planet/src/component/planet-component-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,qBAAa,kBAAkB,CAAC,KAAK,GAAG,GAAG;IACvC,cAAc,EAAE,WAAW,CAAC;IAC5B,WAAW,EAAE,WAAW,CAAC;IACzB,iBAAiB,EAAE,KAAK,CAAC;IACzB,YAAY,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;IAClC,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,MAAM,MAAM,qBAAqB,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,CAAC,KAAK,CAAC,KAAK,kBAAkB,CAAC,KAAK,CAAC,CAAC"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { TemplateRef, ElementRef } from '@angular/core';
|
|
2
|
-
export type PlantComponentProjectableNode = Node[] | TemplateRef<any>;
|
|
3
|
-
export declare class PlantComponentConfig<TData = any> {
|
|
4
|
-
/** Load target container */
|
|
5
|
-
container: HTMLElement | ElementRef<HTMLElement | any> | Comment;
|
|
6
|
-
/**
|
|
7
|
-
* Wrapper class of plant component
|
|
8
|
-
* @deprecated please use hostClass
|
|
9
|
-
*/
|
|
10
|
-
wrapperClass?: string;
|
|
11
|
-
/**
|
|
12
|
-
* Host class of plant component
|
|
13
|
-
*/
|
|
14
|
-
hostClass?: string;
|
|
15
|
-
/** Data being injected into the child component. */
|
|
16
|
-
initialState?: TData | null;
|
|
17
|
-
/**
|
|
18
|
-
* Projectable nodes
|
|
19
|
-
*/
|
|
20
|
-
projectableNodes?: PlantComponentProjectableNode[];
|
|
21
|
-
}
|
|
22
|
-
//# sourceMappingURL=plant-component.config.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plant-component.config.d.ts","sourceRoot":"","sources":["../../../packages/planet/src/component/plant-component.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAExD,MAAM,MAAM,6BAA6B,GAAG,IAAI,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;AAEtE,qBAAa,oBAAoB,CAAC,KAAK,GAAG,GAAG;IACzC,4BAA4B;IAC5B,SAAS,EAAE,WAAW,GAAG,UAAU,CAAC,WAAW,GAAG,GAAG,CAAC,GAAG,OAAO,CAAC;IACjE;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,YAAY,CAAC,EAAE,KAAK,GAAG,IAAI,CAAQ;IACnC;;OAEG;IACH,gBAAgB,CAAC,EAAE,6BAA6B,EAAE,CAAC;CACtD"}
|
package/debug.d.ts
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
export interface Debugger {
|
|
2
|
-
(formatter: any, ...args: any[]): void;
|
|
3
|
-
}
|
|
4
|
-
export interface Formatters {
|
|
5
|
-
[formatter: string]: (v: any) => string;
|
|
6
|
-
}
|
|
7
|
-
export interface Debug {
|
|
8
|
-
(namespace: string): Debugger;
|
|
9
|
-
coerce: (val: any) => any;
|
|
10
|
-
disable: () => string;
|
|
11
|
-
enable: (namespaces: string) => void;
|
|
12
|
-
enabled: (namespaces: string) => boolean;
|
|
13
|
-
log: (...args: any[]) => any;
|
|
14
|
-
names: RegExp[];
|
|
15
|
-
skips: RegExp[];
|
|
16
|
-
formatters: Formatters;
|
|
17
|
-
}
|
|
18
|
-
export declare function createDebug(namespace: string): Debugger;
|
|
19
|
-
export declare function setDebugFactory(debug: Debug): void;
|
|
20
|
-
export declare function clearDebugFactory(): void;
|
|
21
|
-
export declare function getDebugFactory(): Debug;
|
|
22
|
-
//# sourceMappingURL=debug.d.ts.map
|
package/debug.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../packages/planet/src/debug.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,QAAQ;IACrB,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;CAQ1C;AAED,MAAM,WAAW,UAAU;IACvB,CAAC,SAAS,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,GAAG,KAAK,MAAM,CAAC;CAC3C;AAED,MAAM,WAAW,KAAK;IAClB,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC9B,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC;IAC1B,OAAO,EAAE,MAAM,MAAM,CAAC;IACtB,MAAM,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,OAAO,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC;IACzC,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;IAE7B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;IAEhB,UAAU,EAAE,UAAU,CAAC;CAC1B;AAQD,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ,CAYvD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,QAK3C;AAED,wBAAgB,iBAAiB,SAGhC;AAED,wBAAgB,eAAe,UAE9B"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import * as i0 from "@angular/core";
|
|
2
|
-
export declare class EmptyComponent {
|
|
3
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<EmptyComponent, never>;
|
|
4
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<EmptyComponent, "empty-component", never, {}, {}, never, never, true, never>;
|
|
5
|
-
}
|
|
6
|
-
//# sourceMappingURL=empty.component.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"empty.component.d.ts","sourceRoot":"","sources":["../../../packages/planet/src/empty/empty.component.ts"],"names":[],"mappings":";AAEA,qBAOa,cAAc;yCAAd,cAAc;2CAAd,cAAc;CAAG"}
|
|
@@ -1,116 +0,0 @@
|
|
|
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==
|