@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,86 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { HttpClient } from '@angular/common/http';
|
|
3
|
-
import { shareReplay, map } from 'rxjs/operators';
|
|
4
|
-
import { coerceArray } from '../helpers';
|
|
5
|
-
import { AssetsLoader } from '../assets-loader';
|
|
6
|
-
import { getApplicationService } from '../global-planet';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "@angular/common/http";
|
|
9
|
-
import * as i2 from "../assets-loader";
|
|
10
|
-
export class PlanetApplicationService {
|
|
11
|
-
constructor(http, assetsLoader) {
|
|
12
|
-
this.http = http;
|
|
13
|
-
this.assetsLoader = assetsLoader;
|
|
14
|
-
this.apps = [];
|
|
15
|
-
this.appsMap = {};
|
|
16
|
-
if (getApplicationService()) {
|
|
17
|
-
throw new Error('PlanetApplicationService has been injected in the portal, repeated injection is not allowed');
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
register(appOrApps) {
|
|
21
|
-
const apps = coerceArray(appOrApps);
|
|
22
|
-
apps.forEach(app => {
|
|
23
|
-
if (this.appsMap[app.name]) {
|
|
24
|
-
throw new Error(`${app.name} has be registered.`);
|
|
25
|
-
}
|
|
26
|
-
this.apps.push(app);
|
|
27
|
-
this.appsMap[app.name] = app;
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
registerByUrl(url) {
|
|
31
|
-
const result = this.http.get(`${url}`).pipe(map(apps => {
|
|
32
|
-
if (apps && Array.isArray(apps)) {
|
|
33
|
-
this.register(apps);
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
this.register(apps);
|
|
37
|
-
}
|
|
38
|
-
}), shareReplay());
|
|
39
|
-
result.subscribe();
|
|
40
|
-
return result;
|
|
41
|
-
}
|
|
42
|
-
unregister(name) {
|
|
43
|
-
if (this.appsMap[name]) {
|
|
44
|
-
delete this.appsMap[name];
|
|
45
|
-
this.apps = this.apps.filter(app => {
|
|
46
|
-
return app.name !== name;
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
getAppsByMatchedUrl(url) {
|
|
51
|
-
return this.getApps().filter(app => {
|
|
52
|
-
if (app.routerPathPrefix instanceof RegExp) {
|
|
53
|
-
return app.routerPathPrefix.test(url);
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
56
|
-
return (url === app.routerPathPrefix ||
|
|
57
|
-
(url.startsWith(app.routerPathPrefix) && ['/', '?'].includes(url[app.routerPathPrefix.length])));
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
getAppByName(name) {
|
|
62
|
-
return this.appsMap[name];
|
|
63
|
-
}
|
|
64
|
-
getAppsToPreload(excludeAppNames) {
|
|
65
|
-
return this.getApps().filter(app => {
|
|
66
|
-
if (excludeAppNames) {
|
|
67
|
-
return app.preload && !excludeAppNames.includes(app.name);
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
return app.preload;
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
getApps() {
|
|
75
|
-
return this.apps;
|
|
76
|
-
}
|
|
77
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: PlanetApplicationService, deps: [{ token: i1.HttpClient }, { token: i2.AssetsLoader }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
78
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: PlanetApplicationService, providedIn: 'root' }); }
|
|
79
|
-
}
|
|
80
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: PlanetApplicationService, decorators: [{
|
|
81
|
-
type: Injectable,
|
|
82
|
-
args: [{
|
|
83
|
-
providedIn: 'root'
|
|
84
|
-
}]
|
|
85
|
-
}], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.AssetsLoader }] });
|
|
86
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhbmV0LWFwcGxpY2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGFuZXQvc3JjL2FwcGxpY2F0aW9uL3BsYW5ldC1hcHBsaWNhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7QUFLekQsTUFBTSxPQUFPLHdCQUF3QjtJQUtqQyxZQUNZLElBQWdCLEVBQ2hCLFlBQTBCO1FBRDFCLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFOOUIsU0FBSSxHQUF3QixFQUFFLENBQUM7UUFFL0IsWUFBTyxHQUF5QyxFQUFFLENBQUM7UUFNdkQsSUFBSSxxQkFBcUIsRUFBRSxFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2RkFBNkYsQ0FBQyxDQUFDO1FBQ25ILENBQUM7SUFDTCxDQUFDO0lBRUQsUUFBUSxDQUFTLFNBQWtFO1FBQy9FLE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2YsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLEdB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cEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFuZXRBcHBsaWNhdGlvbiB9IGZyb20gJy4uL3BsYW5ldC5jbGFzcyc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgc2hhcmVSZXBsYXksIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGNvZXJjZUFycmF5IH0gZnJvbSAnLi4vaGVscGVycyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBc3NldHNMb2FkZXIgfSBmcm9tICcuLi9hc3NldHMtbG9hZGVyJztcbmltcG9ydCB7IGdldEFwcGxpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uL2dsb2JhbC1wbGFuZXQnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFBsYW5ldEFwcGxpY2F0aW9uU2VydmljZSB7XG4gICAgcHJpdmF0ZSBhcHBzOiBQbGFuZXRBcHBsaWNhdGlvbltdID0gW107XG5cbiAgICBwcml2YXRlIGFwcHNNYXA6IHsgW2tleTogc3RyaW5nXTogUGxhbmV0QXBwbGljYXRpb24gfSA9IHt9O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICAgICAgcHJpdmF0ZSBhc3NldHNMb2FkZXI6IEFzc2V0c0xvYWRlclxuICAgICkge1xuICAgICAgICBpZiAoZ2V0QXBwbGljYXRpb25TZXJ2aWNlKCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGxhbmV0QXBwbGljYXRpb25TZXJ2aWNlIGhhcyBiZWVuIGluamVjdGVkIGluIHRoZSBwb3J0YWwsIHJlcGVhdGVkIGluamVjdGlvbiBpcyBub3QgYWxsb3dlZCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVnaXN0ZXI8VEV4dHJhPihhcHBPckFwcHM6IFBsYW5ldEFwcGxpY2F0aW9uPFRFeHRyYT4gfCBQbGFuZXRBcHBsaWNhdGlvbjxURXh0cmE+W10pIHtcbiAgICAgICAgY29uc3QgYXBwcyA9IGNvZXJjZUFycmF5KGFwcE9yQXBwcyk7XG4gICAgICAgIGFwcHMuZm9yRWFjaChhcHAgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuYXBwc01hcFthcHAubmFtZV0pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7YXBwLm5hbWV9IGhhcyBiZSByZWdpc3RlcmVkLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hcHBzLnB1c2goYXBwKTtcbiAgICAgICAgICAgIHRoaXMuYXBwc01hcFthcHAubmFtZV0gPSBhcHA7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyQnlVcmwodXJsOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5odHRwLmdldChgJHt1cmx9YCkucGlwZShcbiAgICAgICAgICAgIG1hcChhcHBzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYXBwcyAmJiBBcnJheS5pc0FycmF5KGFwcHMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXIoYXBwcyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWdpc3RlcihhcHBzIGFzIFBsYW5ldEFwcGxpY2F0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHNoYXJlUmVwbGF5KClcbiAgICAgICAgKTtcbiAgICAgICAgcmVzdWx0LnN1YnNjcmliZSgpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHVucmVnaXN0ZXIobmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLmFwcHNNYXBbbmFtZV0pIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmFwcHNNYXBbbmFtZV07XG4gICAgICAgICAgICB0aGlzLmFwcHMgPSB0aGlzLmFwcHMuZmlsdGVyKGFwcCA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFwcC5uYW1lICE9PSBuYW1lO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRBcHBzQnlNYXRjaGVkVXJsPFRFeHRyYSA9IHVua25vd24+KHVybDogc3RyaW5nKTogUGxhbmV0QXBwbGljYXRpb248VEV4dHJhPltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXBwcygpLmZpbHRlcihhcHAgPT4ge1xuICAgICAgICAgICAgaWYgKGFwcC5yb3V0ZXJQYXRoUHJlZml4IGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFwcC5yb3V0ZXJQYXRoUHJlZml4LnRlc3QodXJsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgdXJsID09PSBhcHAucm91dGVyUGF0aFByZWZpeCB8fFxuICAgICAgICAgICAgICAgICAgICAodXJsLnN0YXJ0c1dpdGgoYXBwLnJvdXRlclBhdGhQcmVmaXgpICYmIFsnLycsICc/J10uaW5jbHVkZXModXJsW2FwcC5yb3V0ZXJQYXRoUHJlZml4Lmxlbmd0aF0pKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldEFwcEJ5TmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwc01hcFtuYW1lXTtcbiAgICB9XG5cbiAgICBnZXRBcHBzVG9QcmVsb2FkKGV4Y2x1ZGVBcHBOYW1lcz86IHN0cmluZ1tdKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEFwcHMoKS5maWx0ZXIoYXBwID0+IHtcbiAgICAgICAgICAgIGlmIChleGNsdWRlQXBwTmFtZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXBwLnByZWxvYWQgJiYgIWV4Y2x1ZGVBcHBOYW1lcy5pbmNsdWRlcyhhcHAubmFtZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBhcHAucHJlbG9hZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0QXBwcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwcztcbiAgICB9XG59XG4iXX0=
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
export class PlanetPortalApplication {
|
|
2
|
-
constructor() {
|
|
3
|
-
this.name = 'portal';
|
|
4
|
-
}
|
|
5
|
-
navigateByUrl(url, extras) {
|
|
6
|
-
return this.ngZone.run(() => {
|
|
7
|
-
return this.router.navigateByUrl(url, extras);
|
|
8
|
-
});
|
|
9
|
-
}
|
|
10
|
-
run(fn) {
|
|
11
|
-
return this.ngZone.run(() => {
|
|
12
|
-
return fn();
|
|
13
|
-
});
|
|
14
|
-
}
|
|
15
|
-
tick() {
|
|
16
|
-
this.applicationRef.tick();
|
|
17
|
-
}
|
|
18
|
-
getComponentFactory() {
|
|
19
|
-
return this.componentFactory;
|
|
20
|
-
}
|
|
21
|
-
registerComponentFactory(componentFactory) {
|
|
22
|
-
this.componentFactory = componentFactory;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9ydGFsLWFwcGxpY2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvcGxhbmV0L3NyYy9hcHBsaWNhdGlvbi9wb3J0YWwtYXBwbGljYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsTUFBTSxPQUFPLHVCQUF1QjtJQUFwQztRQU9JLFNBQUksR0FBWSxRQUFRLENBQUM7SUEwQjdCLENBQUM7SUF2QkcsYUFBYSxDQUFDLEdBQXFCLEVBQUUsTUFBeUI7UUFDMUQsT0FBTyxJQUFJLENBQUMsTUFBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDekIsT0FBTyxJQUFJLENBQUMsTUFBTyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbkQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsR0FBRyxDQUFJLEVBQXlCO1FBQzVCLE9BQU8sSUFBSSxDQUFDLE1BQU8sQ0FBQyxHQUFHLENBQUksR0FBRyxFQUFFO1lBQzVCLE9BQU8sRUFBRSxFQUFFLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsSUFBSTtRQUNBLElBQUksQ0FBQyxjQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELG1CQUFtQjtRQUNmLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQ2pDLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxnQkFBdUM7UUFDNUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO0lBQzdDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJvdXRlciwgVXJsVHJlZSwgTmF2aWdhdGlvbkV4dHJhcyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBOZ1pvbmUsIEluamVjdG9yLCBBcHBsaWNhdGlvblJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGxhbnRDb21wb25lbnRGYWN0b3J5IH0gZnJvbSAnLi4vY29tcG9uZW50L3BsYW5ldC1jb21wb25lbnQtdHlwZXMnO1xuaW1wb3J0IHsgR2xvYmFsRXZlbnREaXNwYXRjaGVyIH0gZnJvbSAnLi4vZ2xvYmFsLWV2ZW50LWRpc3BhdGNoZXInO1xuXG5leHBvcnQgY2xhc3MgUGxhbmV0UG9ydGFsQXBwbGljYXRpb248VERhdGEgPSBhbnk+IHtcbiAgICBhcHBsaWNhdGlvblJlZj86IEFwcGxpY2F0aW9uUmVmO1xuICAgIGluamVjdG9yPzogSW5qZWN0b3I7XG4gICAgcm91dGVyPzogUm91dGVyO1xuICAgIG5nWm9uZT86IE5nWm9uZTtcbiAgICBnbG9iYWxFdmVudERpc3BhdGNoZXI/OiBHbG9iYWxFdmVudERpc3BhdGNoZXI7XG4gICAgZGF0YT86IFREYXRhO1xuICAgIG5hbWU/OiBzdHJpbmcgPSAncG9ydGFsJztcbiAgICBwcml2YXRlIGNvbXBvbmVudEZhY3Rvcnk/OiBQbGFudENvbXBvbmVudEZhY3Rvcnk7XG5cbiAgICBuYXZpZ2F0ZUJ5VXJsKHVybDogc3RyaW5nIHwgVXJsVHJlZSwgZXh0cmFzPzogTmF2aWdhdGlvbkV4dHJhcyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5uZ1pvbmUhLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yb3V0ZXIhLm5hdmlnYXRlQnlVcmwodXJsLCBleHRyYXMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBydW48VD4oZm46ICguLi5hcmdzOiBhbnlbXSkgPT4gVCk6IFQge1xuICAgICAgICByZXR1cm4gdGhpcy5uZ1pvbmUhLnJ1bjxUPigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZm4oKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGljaygpIHtcbiAgICAgICAgdGhpcy5hcHBsaWNhdGlvblJlZiEudGljaygpO1xuICAgIH1cblxuICAgIGdldENvbXBvbmVudEZhY3RvcnkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbXBvbmVudEZhY3Rvcnk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJDb21wb25lbnRGYWN0b3J5KGNvbXBvbmVudEZhY3Rvcnk6IFBsYW50Q29tcG9uZW50RmFjdG9yeSkge1xuICAgICAgICB0aGlzLmNvbXBvbmVudEZhY3RvcnkgPSBjb21wb25lbnRGYWN0b3J5O1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -1,332 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { hashCode, isEmpty, getResourceFileName, getExtName, isObject, getAssetsBasePath, getScriptsAndStylesAssets } from './helpers';
|
|
3
|
-
import { of, Observable, forkJoin, concat } from 'rxjs';
|
|
4
|
-
import { map, switchMap, concatAll } from 'rxjs/operators';
|
|
5
|
-
import { HttpClient } from '@angular/common/http';
|
|
6
|
-
import { createSandbox } from './sandbox';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "@angular/common/http";
|
|
9
|
-
const STYLE_LINK_OR_SCRIPT_REG = /<[script|link].*?>/gi;
|
|
10
|
-
const LINK_OR_SRC_REG = /(src|href)=["'](.*?[\.js|\.css])["']/i;
|
|
11
|
-
const TAG_ATTRS_REG = /(type|defer|async|rel)((=["'].*?["'])|\s|\>)/gi;
|
|
12
|
-
export class AssetsLoader {
|
|
13
|
-
constructor(http) {
|
|
14
|
-
this.http = http;
|
|
15
|
-
this.loadedSources = [];
|
|
16
|
-
}
|
|
17
|
-
loadScript(scriptAsset) {
|
|
18
|
-
const { src, tagName, attributes: tagAttributes } = scriptAsset;
|
|
19
|
-
const id = hashCode(src);
|
|
20
|
-
if (this.loadedSources.includes(id)) {
|
|
21
|
-
return of({
|
|
22
|
-
src: src,
|
|
23
|
-
hashCode: id,
|
|
24
|
-
loaded: true,
|
|
25
|
-
status: 'Loaded'
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
if (tagName === 'link') {
|
|
29
|
-
const LinkAttributes = tagAttributes;
|
|
30
|
-
const link = document.createElement('link');
|
|
31
|
-
link.href = src;
|
|
32
|
-
if (LinkAttributes.rel) {
|
|
33
|
-
link.rel = LinkAttributes.rel;
|
|
34
|
-
}
|
|
35
|
-
const head = document.getElementsByTagName('head')[0];
|
|
36
|
-
head.appendChild(link);
|
|
37
|
-
return of({
|
|
38
|
-
src: src,
|
|
39
|
-
hashCode: id,
|
|
40
|
-
loaded: false,
|
|
41
|
-
status: 'Preload'
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
return new Observable((observer) => {
|
|
45
|
-
const scriptAttributes = tagAttributes;
|
|
46
|
-
const script = document.createElement('script');
|
|
47
|
-
script.type = scriptAttributes?.type || 'text/javascript';
|
|
48
|
-
script.src = src;
|
|
49
|
-
if (!scriptAttributes?.defer || scriptAttributes?.defer !== 'false') {
|
|
50
|
-
script.defer = true;
|
|
51
|
-
}
|
|
52
|
-
if (!scriptAttributes?.async && scriptAttributes?.async !== 'false') {
|
|
53
|
-
script.async = true;
|
|
54
|
-
}
|
|
55
|
-
if (script['readyState']) {
|
|
56
|
-
// IE
|
|
57
|
-
script['onreadystatechange'] = () => {
|
|
58
|
-
if (script['readyState'] === 'loaded' || script['readyState'] === 'complete') {
|
|
59
|
-
script['onreadystatechange'] = null;
|
|
60
|
-
observer.next({
|
|
61
|
-
src: src,
|
|
62
|
-
hashCode: id,
|
|
63
|
-
loaded: true,
|
|
64
|
-
status: 'Loaded'
|
|
65
|
-
});
|
|
66
|
-
observer.complete();
|
|
67
|
-
this.loadedSources.push(id);
|
|
68
|
-
}
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
// Others
|
|
73
|
-
script.onload = () => {
|
|
74
|
-
observer.next({
|
|
75
|
-
src: src,
|
|
76
|
-
hashCode: id,
|
|
77
|
-
loaded: true,
|
|
78
|
-
status: 'Loaded'
|
|
79
|
-
});
|
|
80
|
-
observer.complete();
|
|
81
|
-
this.loadedSources.push(id);
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
script.onerror = error => {
|
|
85
|
-
observer.error({
|
|
86
|
-
src: src,
|
|
87
|
-
hashCode: id,
|
|
88
|
-
loaded: false,
|
|
89
|
-
status: 'Error',
|
|
90
|
-
error: error
|
|
91
|
-
});
|
|
92
|
-
observer.complete();
|
|
93
|
-
};
|
|
94
|
-
document.body.appendChild(script);
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
loadScriptWithSandbox(app, src) {
|
|
98
|
-
const id = hashCode(src);
|
|
99
|
-
if (this.loadedSources.includes(id)) {
|
|
100
|
-
return of({
|
|
101
|
-
src: src,
|
|
102
|
-
hashCode: id,
|
|
103
|
-
loaded: true,
|
|
104
|
-
status: 'Loaded'
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
return new Observable((observer) => {
|
|
108
|
-
this.http.get(src, { responseType: 'text' }).subscribe((code) => {
|
|
109
|
-
this.loadedSources.push(id);
|
|
110
|
-
const sandbox = createSandbox(app);
|
|
111
|
-
sandbox.execScript(code, src);
|
|
112
|
-
observer.next({
|
|
113
|
-
src: src,
|
|
114
|
-
hashCode: id,
|
|
115
|
-
loaded: true,
|
|
116
|
-
status: 'Loaded'
|
|
117
|
-
});
|
|
118
|
-
observer.complete();
|
|
119
|
-
}, error => {
|
|
120
|
-
observer.error({
|
|
121
|
-
src: src,
|
|
122
|
-
hashCode: id,
|
|
123
|
-
loaded: false,
|
|
124
|
-
status: 'Error',
|
|
125
|
-
error: error
|
|
126
|
-
});
|
|
127
|
-
observer.complete();
|
|
128
|
-
});
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
loadStyle(src) {
|
|
132
|
-
const id = hashCode(src);
|
|
133
|
-
if (this.loadedSources.includes(id)) {
|
|
134
|
-
return of({
|
|
135
|
-
src: src,
|
|
136
|
-
hashCode: id,
|
|
137
|
-
loaded: true,
|
|
138
|
-
status: 'Loaded'
|
|
139
|
-
});
|
|
140
|
-
}
|
|
141
|
-
return new Observable((observer) => {
|
|
142
|
-
const head = document.getElementsByTagName('head')[0];
|
|
143
|
-
const link = document.createElement('link');
|
|
144
|
-
link.rel = 'stylesheet';
|
|
145
|
-
link.type = 'text/css';
|
|
146
|
-
link.href = src;
|
|
147
|
-
link.media = 'all';
|
|
148
|
-
link.onload = () => {
|
|
149
|
-
observer.next({
|
|
150
|
-
src: src,
|
|
151
|
-
hashCode: id,
|
|
152
|
-
loaded: true,
|
|
153
|
-
status: 'Loaded'
|
|
154
|
-
});
|
|
155
|
-
observer.complete();
|
|
156
|
-
this.loadedSources.push(id);
|
|
157
|
-
};
|
|
158
|
-
link.onerror = error => {
|
|
159
|
-
observer.error({
|
|
160
|
-
src: src,
|
|
161
|
-
hashCode: id,
|
|
162
|
-
loaded: true,
|
|
163
|
-
status: 'Loaded',
|
|
164
|
-
error: error
|
|
165
|
-
});
|
|
166
|
-
observer.complete();
|
|
167
|
-
};
|
|
168
|
-
head.appendChild(link);
|
|
169
|
-
});
|
|
170
|
-
}
|
|
171
|
-
loadScripts(sources, options = {
|
|
172
|
-
serial: false,
|
|
173
|
-
sandbox: false
|
|
174
|
-
}) {
|
|
175
|
-
if (isEmpty(sources)) {
|
|
176
|
-
return of(null);
|
|
177
|
-
}
|
|
178
|
-
const observables = sources.map(source => {
|
|
179
|
-
// TODO: 暂时只支持Proxy沙箱
|
|
180
|
-
if (options.sandbox && window.Proxy) {
|
|
181
|
-
return this.loadScriptWithSandbox(options.app, source.src);
|
|
182
|
-
}
|
|
183
|
-
else {
|
|
184
|
-
return this.loadScript(source);
|
|
185
|
-
}
|
|
186
|
-
});
|
|
187
|
-
if (options.serial) {
|
|
188
|
-
const a = concat(...observables).pipe(map(item => {
|
|
189
|
-
return of([item]);
|
|
190
|
-
}), concatAll());
|
|
191
|
-
return a;
|
|
192
|
-
}
|
|
193
|
-
else {
|
|
194
|
-
return forkJoin(observables).pipe();
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
loadStyles(sources) {
|
|
198
|
-
if (isEmpty(sources)) {
|
|
199
|
-
return of(null);
|
|
200
|
-
}
|
|
201
|
-
return forkJoin(sources.map(source => {
|
|
202
|
-
return this.loadStyle(source.src);
|
|
203
|
-
}));
|
|
204
|
-
}
|
|
205
|
-
loadScriptsAndStyles(scripts = [], styles = [], options) {
|
|
206
|
-
return forkJoin([this.loadScripts(scripts, options), this.loadStyles(styles)]);
|
|
207
|
-
}
|
|
208
|
-
/**
|
|
209
|
-
* <script type="module" src="http://127.0.0.1:3001/main.js" async defer></script>
|
|
210
|
-
* => [`type="module"`, "async ", "defer>"] as attributeStrMatchArr
|
|
211
|
-
* => { type: "module", async: "async", defer: "defer" } as attributes
|
|
212
|
-
*/
|
|
213
|
-
parseTagAttributes(tag) {
|
|
214
|
-
const attributeStrMatchArr = tag.match(TAG_ATTRS_REG);
|
|
215
|
-
if (attributeStrMatchArr) {
|
|
216
|
-
const attributes = {};
|
|
217
|
-
attributeStrMatchArr.forEach(item => {
|
|
218
|
-
const equalSignIndex = item.indexOf('=');
|
|
219
|
-
if (equalSignIndex > 0) {
|
|
220
|
-
// 'type="module"' => { type: "module" }
|
|
221
|
-
const key = item.slice(0, equalSignIndex);
|
|
222
|
-
attributes[key] = item.slice(equalSignIndex + 2, item.length - 1);
|
|
223
|
-
}
|
|
224
|
-
else {
|
|
225
|
-
// 'async ' => 'async'
|
|
226
|
-
// 'defer>' => 'defer'
|
|
227
|
-
const key = item.slice(0, item.length - 1);
|
|
228
|
-
attributes[key] = key;
|
|
229
|
-
}
|
|
230
|
-
});
|
|
231
|
-
return attributes;
|
|
232
|
-
}
|
|
233
|
-
return undefined;
|
|
234
|
-
}
|
|
235
|
-
parseManifestFromHTML(html) {
|
|
236
|
-
const result = {};
|
|
237
|
-
const matchResult = html.match(STYLE_LINK_OR_SCRIPT_REG);
|
|
238
|
-
matchResult.forEach(item => {
|
|
239
|
-
const isLinkTag = item.trim().toLowerCase().slice(1, item.indexOf(' ')) === 'link';
|
|
240
|
-
const linkOrSrcResult = item.match(LINK_OR_SRC_REG);
|
|
241
|
-
if (linkOrSrcResult && linkOrSrcResult[2]) {
|
|
242
|
-
const src = linkOrSrcResult[2];
|
|
243
|
-
const hashName = getResourceFileName(src);
|
|
244
|
-
let barSplitIndex = hashName.indexOf('-');
|
|
245
|
-
let dotSplitIndex = hashName.indexOf('.');
|
|
246
|
-
const splitIndex = barSplitIndex > -1 ? barSplitIndex : dotSplitIndex;
|
|
247
|
-
if (splitIndex > -1) {
|
|
248
|
-
const name = hashName.slice(0, splitIndex);
|
|
249
|
-
const ext = getExtName(hashName);
|
|
250
|
-
const assetsTag = {
|
|
251
|
-
src: src,
|
|
252
|
-
tagName: isLinkTag ? 'link' : 'script'
|
|
253
|
-
};
|
|
254
|
-
const assetName = ext ? `${name}.${ext}` : name;
|
|
255
|
-
if (!result[assetName]) {
|
|
256
|
-
result[assetName] = [assetsTag];
|
|
257
|
-
}
|
|
258
|
-
else {
|
|
259
|
-
result[assetName] = result[assetName].concat(assetsTag);
|
|
260
|
-
}
|
|
261
|
-
const attributes = this.parseTagAttributes(item);
|
|
262
|
-
if (attributes) {
|
|
263
|
-
assetsTag.attributes = attributes;
|
|
264
|
-
}
|
|
265
|
-
// const typeTagResult = item.match(TAG_TYPE_REG);
|
|
266
|
-
// if (typeTagResult && typeTagResult[1]) {
|
|
267
|
-
// assetsTag.attributes = {
|
|
268
|
-
// type: typeTagResult[1]
|
|
269
|
-
// };
|
|
270
|
-
// }
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
});
|
|
274
|
-
return result;
|
|
275
|
-
}
|
|
276
|
-
loadAppAssets(app) {
|
|
277
|
-
const basePath = getAssetsBasePath(app);
|
|
278
|
-
const manifest = app.entry ? (isObject(app.entry) ? app.entry.manifest : app.entry) : app.manifest;
|
|
279
|
-
if (manifest) {
|
|
280
|
-
const manifestExt = getExtName(manifest);
|
|
281
|
-
const isHtml = manifestExt === 'html';
|
|
282
|
-
const responseType = isHtml ? 'text' : 'json';
|
|
283
|
-
return this.loadManifest(`${manifest}?t=${new Date().getTime()}`, responseType).pipe(switchMap(manifestResult => {
|
|
284
|
-
const { scripts, styles } = getScriptsAndStylesAssets(app, basePath, manifestResult);
|
|
285
|
-
return this.loadScriptsAndStyles(scripts, styles, {
|
|
286
|
-
app: app.name,
|
|
287
|
-
sandbox: app.sandbox,
|
|
288
|
-
serial: app.loadSerial
|
|
289
|
-
});
|
|
290
|
-
}));
|
|
291
|
-
}
|
|
292
|
-
else {
|
|
293
|
-
const { scripts, styles } = getScriptsAndStylesAssets(app, basePath);
|
|
294
|
-
return this.loadScriptsAndStyles(scripts, styles, {
|
|
295
|
-
app: app.name,
|
|
296
|
-
sandbox: app.sandbox,
|
|
297
|
-
serial: app.loadSerial
|
|
298
|
-
});
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
loadManifest(url, responseType = 'json') {
|
|
302
|
-
return this.http
|
|
303
|
-
.get(url, {
|
|
304
|
-
responseType: responseType
|
|
305
|
-
})
|
|
306
|
-
.pipe(map((response) => {
|
|
307
|
-
if (responseType === 'text') {
|
|
308
|
-
return this.parseManifestFromHTML(response);
|
|
309
|
-
}
|
|
310
|
-
else {
|
|
311
|
-
const result = {};
|
|
312
|
-
Object.keys(response).forEach(key => {
|
|
313
|
-
result[key] = [
|
|
314
|
-
{
|
|
315
|
-
src: response[key]
|
|
316
|
-
}
|
|
317
|
-
];
|
|
318
|
-
});
|
|
319
|
-
return result;
|
|
320
|
-
}
|
|
321
|
-
}));
|
|
322
|
-
}
|
|
323
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: AssetsLoader, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
324
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: AssetsLoader, providedIn: 'root' }); }
|
|
325
|
-
}
|
|
326
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: AssetsLoader, decorators: [{
|
|
327
|
-
type: Injectable,
|
|
328
|
-
args: [{
|
|
329
|
-
providedIn: 'root'
|
|
330
|
-
}]
|
|
331
|
-
}], ctorParameters: () => [{ type: i1.HttpClient }] });
|
|
332
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRzLWxvYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL3BsYW5ldC9zcmMvYXNzZXRzLWxvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdkksT0FBTyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQVksUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFdBQVcsQ0FBQzs7O0FBRzFDLE1BQU0sd0JBQXdCLEdBQUcsc0JBQXNCLENBQUM7QUFDeEQsTUFBTSxlQUFlLEdBQUcsdUNBQXVDLENBQUM7QUFDaEUsTUFBTSxhQUFhLEdBQUcsZ0RBQWdELENBQUM7QUFZdkUsTUFBTSxPQUFPLFlBQVk7SUFHckIsWUFBb0IsSUFBZ0I7UUFBaEIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUY1QixrQkFBYSxHQUFhLEVBQUUsQ0FBQztJQUVFLENBQUM7SUFFeEMsVUFBVSxDQUFDLFdBQTBCO1FBQ2pDLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsR0FBRyxXQUFXLENBQUM7UUFDaEUsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVB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QUNQLENBQUM7SUFDTCxDQUFDO0lBRUQsWUFBWSxDQUFDLEdBQVcsRUFBRSxlQUFnQyxNQUFNO1FBQzVELE9BQU8sSUFBSSxDQUFDLElBQUk7YUFDWCxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ04sWUFBWSxFQUFFLFlBQXNCO1NBQ3ZDLENBQUM7YUFDRCxJQUFJLENBQ0QsR0FBRyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7WUFDbEIsSUFBSSxZQUFZLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQzFCLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQWtCLENBQUMsQ0FBQztZQUMxRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osTUFBTSxNQUFNLEdBQW9DLEVBQUUsQ0FBQztnQkFDbkQsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ2hDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRzt3QkFDVjs0QkFDSSxHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQzt5QkFDckI7cUJBQ0osQ0FBQztnQkFDTixDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPLE1BQU0sQ0FBQztZQUNsQixDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNWLENBQUM7OEdBdFZRLFlBQVk7a0hBQVosWUFBWSxjQUZULE1BQU07OzJGQUVULFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaGFzaENvZGUsIGlzRW1wdHksIGdldFJlc291cmNlRmlsZU5hbWUsIGdldEV4dE5hbWUsIGlzT2JqZWN0LCBnZXRBc3NldHNCYXNlUGF0aCwgZ2V0U2NyaXB0c0FuZFN0eWxlc0Fzc2V0cyB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyBvZiwgT2JzZXJ2YWJsZSwgT2JzZXJ2ZXIsIGZvcmtKb2luLCBjb25jYXQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgc3dpdGNoTWFwLCBjb25jYXRBbGwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgUGxhbmV0QXBwbGljYXRpb24sIFBsYW5ldEFwcGxpY2F0aW9uRW50cnkgfSBmcm9tICcuL3BsYW5ldC5jbGFzcyc7XG5pbXBvcnQgeyBjcmVhdGVTYW5kYm94IH0gZnJvbSAnLi9zYW5kYm94JztcbmltcG9ydCB7IEFzc2V0c1RhZ0l0ZW0sIExpbmtUYWdBdHRyaWJ1dGVzLCBTY3JpcHRUYWdBdHRyaWJ1dGVzIH0gZnJvbSAnLi9pbm5lci10eXBlcyc7XG5cbmNvbnN0IFNUWUxFX0xJTktfT1JfU0NSSVBUX1JFRyA9IC88W3NjcmlwdHxsaW5rXS4qPz4vZ2k7XG5jb25zdCBMSU5LX09SX1NSQ19SRUcgPSAvKHNyY3xocmVmKT1bXCInXSguKj9bXFwuanN8XFwuY3NzXSlbXCInXS9pO1xuY29uc3QgVEFHX0FUVFJTX1JFRyA9IC8odHlwZXxkZWZlcnxhc3luY3xyZWwpKCg9W1wiJ10uKj9bXCInXSl8XFxzfFxcPikvZ2k7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXNzZXRzTG9hZFJlc3VsdCB7XG4gICAgc3JjOiBzdHJpbmc7XG4gICAgaGFzaENvZGU6IG51bWJlcjtcbiAgICBsb2FkZWQ6IGJvb2xlYW47XG4gICAgc3RhdHVzOiBzdHJpbmc7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQXNzZXRzTG9hZGVyIHtcbiAgICBwcml2YXRlIGxvYWRlZFNvdXJjZXM6IG51bWJlcltdID0gW107XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHt9XG5cbiAgICBsb2FkU2NyaXB0KHNjcmlwdEFzc2V0OiBBc3NldHNUYWdJdGVtKSB7XG4gICAgICAgIGNvbnN0IHsgc3JjLCB0YWdOYW1lLCBhdHRyaWJ1dGVzOiB0YWdBdHRyaWJ1dGVzIH0gPSBzY3JpcHRBc3NldDtcbiAgICAgICAgY29uc3QgaWQgPSBoYXNoQ29kZShzcmMpO1xuICAgICAgICBpZiAodGhpcy5sb2FkZWRTb3VyY2VzLmluY2x1ZGVzKGlkKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKHtcbiAgICAgICAgICAgICAgICBzcmM6IHNyYyxcbiAgICAgICAgICAgICAgICBoYXNoQ29kZTogaWQsXG4gICAgICAgICAgICAgICAgbG9hZGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHN0YXR1czogJ0xvYWRlZCdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRhZ05hbWUgPT09ICdsaW5rJykge1xuICAgICAgICAgICAgY29uc3QgTGlua0F0dHJpYnV0ZXMgPSB0YWdBdHRyaWJ1dGVzIGFzIExpbmtUYWdBdHRyaWJ1dGVzO1xuICAgICAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcbiAgICAgICAgICAgIGxpbmsuaHJlZiA9IHNyYztcbiAgICAgICAgICAgIGlmIChMaW5rQXR0cmlidXRlcy5yZWwpIHtcbiAgICAgICAgICAgICAgICBsaW5rLnJlbCA9IExpbmtBdHRyaWJ1dGVzLnJlbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuICAgICAgICAgICAgaGVhZC5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICAgICAgICAgIHJldHVybiBvZih7XG4gICAgICAgICAgICAgICAgc3JjOiBzcmMsXG4gICAgICAgICAgICAgICAgaGFzaENvZGU6IGlkLFxuICAgICAgICAgICAgICAgIGxvYWRlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgc3RhdHVzOiAnUHJlbG9hZCdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXI6IE9ic2VydmVyPEFzc2V0c0xvYWRSZXN1bHQ+KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzY3JpcHRBdHRyaWJ1dGVzID0gdGFnQXR0cmlidXRlcyBhcyBTY3JpcHRUYWdBdHRyaWJ1dGVzO1xuICAgICAgICAgICAgY29uc3Qgc2NyaXB0OiBIVE1MU2NyaXB0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgICAgICAgc2NyaXB0LnR5cGUgPSBzY3JpcHRBdHRyaWJ1dGVzPy50eXBlIHx8ICd0ZXh0L2phdmFzY3JpcHQnO1xuICAgICAgICAgICAgc2NyaXB0LnNyYyA9IHNyYztcbiAgICAgICAgICAgIGlmICghc2NyaXB0QXR0cmlidXRlcz8uZGVmZXIgfHwgc2NyaXB0QXR0cmlidXRlcz8uZGVmZXIgIT09ICdmYWxzZScpIHtcbiAgICAgICAgICAgICAgICBzY3JpcHQuZGVmZXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzY3JpcHRBdHRyaWJ1dGVzPy5hc3luYyAmJiBzY3JpcHRBdHRyaWJ1dGVzPy5hc3luYyAhPT0gJ2ZhbHNlJykge1xuICAgICAgICAgICAgICAgIHNjcmlwdC5hc3luYyA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzY3JpcHRbJ3JlYWR5U3RhdGUnXSkge1xuICAgICAgICAgICAgICAgIC8vIElFXG4gICAgICAgICAgICAgICAgc2NyaXB0WydvbnJlYWR5c3RhdGVjaGFuZ2UnXSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjcmlwdFsncmVhZHlTdGF0ZSddID09PSAnbG9hZGVkJyB8fCBzY3JpcHRbJ3JlYWR5U3RhdGUnXSA9PT0gJ2NvbXBsZXRlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0WydvbnJlYWR5c3RhdGVjaGFuZ2UnXSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM6IHNyYyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoQ29kZTogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogJ0xvYWRlZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGVkU291cmNlcy5wdXNoKGlkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIE90aGVyc1xuICAgICAgICAgICAgICAgIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgc3JjOiBzcmMsXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNoQ29kZTogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6ICdMb2FkZWQnXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRlZFNvdXJjZXMucHVzaChpZCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNjcmlwdC5vbmVycm9yID0gZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKHtcbiAgICAgICAgICAgICAgICAgICAgc3JjOiBzcmMsXG4gICAgICAgICAgICAgICAgICAgIGhhc2hDb2RlOiBpZCxcbiAgICAgICAgICAgICAgICAgICAgbG9hZGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiAnRXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3JcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbG9hZFNjcmlwdFdpdGhTYW5kYm94KGFwcDogc3RyaW5nLCBzcmM6IHN0cmluZyk6IE9ic2VydmFibGU8QXNzZXRzTG9hZFJlc3VsdD4ge1xuICAgICAgICBjb25zdCBpZCA9IGhhc2hDb2RlKHNyYyk7XG4gICAgICAgIGlmICh0aGlzLmxvYWRlZFNvdXJjZXMuaW5jbHVkZXMoaWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gb2Yoe1xuICAgICAgICAgICAgICAgIHNyYzogc3JjLFxuICAgICAgICAgICAgICAgIGhhc2hDb2RlOiBpZCxcbiAgICAgICAgICAgICAgICBsb2FkZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgc3RhdHVzOiAnTG9hZGVkJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcjogT2JzZXJ2ZXI8QXNzZXRzTG9hZFJlc3VsdD4pID0+IHtcbiAgICAgICAgICAgIHRoaXMuaHR0cC5nZXQoc3JjLCB7IHJlc3BvbnNlVHlwZTogJ3RleHQnIH0pLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAoY29kZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGVkU291cmNlcy5wdXNoKGlkKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2FuZGJveCA9IGNyZWF0ZVNhbmRib3goYXBwKTtcbiAgICAgICAgICAgICAgICAgICAgc2FuZGJveC5leGVjU2NyaXB0KGNvZGUsIHNyYyk7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgc3JjOiBzcmMsXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNoQ29kZTogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6ICdMb2FkZWQnXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcih7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcmM6IHNyYyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hDb2RlOiBpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6ICdFcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbG9hZFN0eWxlKHNyYzogc3RyaW5nKTogT2JzZXJ2YWJsZTxBc3NldHNMb2FkUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IGlkID0gaGFzaENvZGUoc3JjKTtcbiAgICAgICAgaWYgKHRoaXMubG9hZGVkU291cmNlcy5pbmNsdWRlcyhpZCkpIHtcbiAgICAgICAgICAgIHJldHVybiBvZih7XG4gICAgICAgICAgICAgICAgc3JjOiBzcmMsXG4gICAgICAgICAgICAgICAgaGFzaENvZGU6IGlkLFxuICAgICAgICAgICAgICAgIGxvYWRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzdGF0dXM6ICdMb2FkZWQnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyOiBPYnNlcnZlcjxBc3NldHNMb2FkUmVzdWx0PikgPT4ge1xuICAgICAgICAgICAgY29uc3QgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG4gICAgICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpO1xuICAgICAgICAgICAgbGluay5yZWwgPSAnc3R5bGVzaGVldCc7XG4gICAgICAgICAgICBsaW5rLnR5cGUgPSAndGV4dC9jc3MnO1xuICAgICAgICAgICAgbGluay5ocmVmID0gc3JjO1xuICAgICAgICAgICAgbGluay5tZWRpYSA9ICdhbGwnO1xuICAgICAgICAgICAgbGluay5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh7XG4gICAgICAgICAgICAgICAgICAgIHNyYzogc3JjLFxuICAgICAgICAgICAgICAgICAgICBoYXNoQ29kZTogaWQsXG4gICAgICAgICAgICAgICAgICAgIGxvYWRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiAnTG9hZGVkJ1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkZWRTb3VyY2VzLnB1c2goaWQpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGxpbmsub25lcnJvciA9IGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcih7XG4gICAgICAgICAgICAgICAgICAgIHNyYzogc3JjLFxuICAgICAgICAgICAgICAgICAgICBoYXNoQ29kZTogaWQsXG4gICAgICAgICAgICAgICAgICAgIGxvYWRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiAnTG9hZGVkJyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBoZWFkLmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBsb2FkU2NyaXB0cyhcbiAgICAgICAgc291cmNlczogQXNzZXRzVGFnSXRlbVtdLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICBhcHA/OiBzdHJpbmc7XG4gICAgICAgICAgICBzYW5kYm94PzogYm9vbGVhbjtcbiAgICAgICAgICAgIHNlcmlhbD86IGJvb2xlYW47XG4gICAgICAgIH0gPSB7XG4gICAgICAgICAgICBzZXJpYWw6IGZhbHNlLFxuICAgICAgICAgICAgc2FuZGJveDogZmFsc2VcbiAgICAgICAgfVxuICAgICk6IE9ic2VydmFibGU8QXNzZXRzTG9hZFJlc3VsdFtdPiB7XG4gICAgICAgIGlmIChpc0VtcHR5KHNvdXJjZXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb2JzZXJ2YWJsZXMgPSBzb3VyY2VzLm1hcChzb3VyY2UgPT4ge1xuICAgICAgICAgICAgLy8gVE9ETzog5pqC5pe25Y+q5pSv5oyBUHJveHnmspnnrrFcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnNhbmRib3ggJiYgd2luZG93LlByb3h5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZFNjcmlwdFdpdGhTYW5kYm94KG9wdGlvbnMuYXBwLCBzb3VyY2Uuc3JjKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZFNjcmlwdChzb3VyY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG9wdGlvbnMuc2VyaWFsKSB7XG4gICAgICAgICAgICBjb25zdCBhID0gY29uY2F0KC4uLm9ic2VydmFibGVzKS5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKFtpdGVtXSk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgY29uY2F0QWxsKClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JrSm9pbihvYnNlcnZhYmxlcykucGlwZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbG9hZFN0eWxlcyhzb3VyY2VzOiBBc3NldHNUYWdJdGVtW10pOiBPYnNlcnZhYmxlPEFzc2V0c0xvYWRSZXN1bHRbXT4ge1xuICAgICAgICBpZiAoaXNFbXB0eShzb3VyY2VzKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JrSm9pbihcbiAgICAgICAgICAgIHNvdXJjZXMubWFwKHNvdXJjZSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZFN0eWxlKHNvdXJjZS5zcmMpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBsb2FkU2NyaXB0c0FuZFN0eWxlcyhcbiAgICAgICAgc2NyaXB0czogQXNzZXRzVGFnSXRlbVtdID0gW10sXG4gICAgICAgIHN0eWxlczogQXNzZXRzVGFnSXRlbVtdID0gW10sXG4gICAgICAgIG9wdGlvbnM/OiB7XG4gICAgICAgICAgICBhcHA/OiBzdHJpbmc7XG4gICAgICAgICAgICBzYW5kYm94PzogYm9vbGVhbjtcbiAgICAgICAgICAgIHNlcmlhbD86IGJvb2xlYW47XG4gICAgICAgIH1cbiAgICApIHtcbiAgICAgICAgcmV0dXJuIGZvcmtKb2luKFt0aGlzLmxvYWRTY3JpcHRzKHNjcmlwdHMsIG9wdGlvbnMpLCB0aGlzLmxvYWRTdHlsZXMoc3R5bGVzKV0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiIHNyYz1cImh0dHA6Ly8xMjcuMC4wLjE6MzAwMS9tYWluLmpzXCIgYXN5bmMgZGVmZXI+PC9zY3JpcHQ+XG4gICAgICogPT4gW2B0eXBlPVwibW9kdWxlXCJgLCBcImFzeW5jIFwiLCBcImRlZmVyPlwiXSBhcyBhdHRyaWJ1dGVTdHJNYXRjaEFyclxuICAgICAqID0+IHsgdHlwZTogXCJtb2R1bGVcIiwgYXN5bmM6IFwiYXN5bmNcIiwgZGVmZXI6IFwiZGVmZXJcIiB9IGFzIGF0dHJpYnV0ZXNcbiAgICAgKi9cbiAgICBwYXJzZVRhZ0F0dHJpYnV0ZXModGFnOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlU3RyTWF0Y2hBcnIgPSB0YWcubWF0Y2goVEFHX0FUVFJTX1JFRyk7XG4gICAgICAgIGlmIChhdHRyaWJ1dGVTdHJNYXRjaEFycikge1xuICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgICAgICAgICAgYXR0cmlidXRlU3RyTWF0Y2hBcnIuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcXVhbFNpZ25JbmRleCA9IGl0ZW0uaW5kZXhPZignPScpO1xuICAgICAgICAgICAgICAgIGlmIChlcXVhbFNpZ25JbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gJ3R5cGU9XCJtb2R1bGVcIicgPT4geyB0eXBlOiBcIm1vZHVsZVwiIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gaXRlbS5zbGljZSgwLCBlcXVhbFNpZ25JbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNba2V5XSA9IGl0ZW0uc2xpY2UoZXF1YWxTaWduSW5kZXggKyAyLCBpdGVtLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vICdhc3luYyAnID0+ICdhc3luYydcbiAgICAgICAgICAgICAgICAgICAgLy8gJ2RlZmVyPicgPT4gJ2RlZmVyJ1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBpdGVtLnNsaWNlKDAsIGl0ZW0ubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNba2V5XSA9IGtleTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcGFyc2VNYW5pZmVzdEZyb21IVE1MKGh0bWw6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIEFzc2V0c1RhZ0l0ZW1bXT4ge1xuICAgICAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIEFzc2V0c1RhZ0l0ZW1bXT4gPSB7fTtcbiAgICAgICAgY29uc3QgbWF0Y2hSZXN1bHQgPSBodG1sLm1hdGNoKFNUWUxFX0xJTktfT1JfU0NSSVBUX1JFRyk7XG4gICAgICAgIG1hdGNoUmVzdWx0LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpc0xpbmtUYWcgPSBpdGVtLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnNsaWNlKDEsIGl0ZW0uaW5kZXhPZignICcpKSA9PT0gJ2xpbmsnO1xuICAgICAgICAgICAgY29uc3QgbGlua09yU3JjUmVzdWx0ID0gaXRlbS5tYXRjaChMSU5LX09SX1NSQ19SRUcpO1xuICAgICAgICAgICAgaWYgKGxpbmtPclNyY1Jlc3VsdCAmJiBsaW5rT3JTcmNSZXN1bHRbMl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzcmMgPSBsaW5rT3JTcmNSZXN1bHRbMl07XG4gICAgICAgICAgICAgICAgY29uc3QgaGFzaE5hbWUgPSBnZXRSZXNvdXJjZUZpbGVOYW1lKHNyYyk7XG4gICAgICAgICAgICAgICAgbGV0IGJhclNwbGl0SW5kZXggPSBoYXNoTmFtZS5pbmRleE9mKCctJyk7XG4gICAgICAgICAgICAgICAgbGV0IGRvdFNwbGl0SW5kZXggPSBoYXNoTmFtZS5pbmRleE9mKCcuJyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BsaXRJbmRleCA9IGJhclNwbGl0SW5kZXggPiAtMSA/IGJhclNwbGl0SW5kZXggOiBkb3RTcGxpdEluZGV4O1xuICAgICAgICAgICAgICAgIGlmIChzcGxpdEluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IGhhc2hOYW1lLnNsaWNlKDAsIHNwbGl0SW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleHQgPSBnZXRFeHROYW1lKGhhc2hOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXNzZXRzVGFnOiBBc3NldHNUYWdJdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3JjOiBzcmMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWdOYW1lOiBpc0xpbmtUYWcgPyAnbGluaycgOiAnc2NyaXB0J1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhc3NldE5hbWUgPSBleHQgPyBgJHtuYW1lfS4ke2V4dH1gIDogbmFtZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHRbYXNzZXROYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2Fzc2V0TmFtZV0gPSBbYXNzZXRzVGFnXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFthc3NldE5hbWVdID0gcmVzdWx0W2Fzc2V0TmFtZV0uY29uY2F0KGFzc2V0c1RhZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gdGhpcy5wYXJzZVRhZ0F0dHJpYnV0ZXMoaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NldHNUYWcuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc3QgdHlwZVRhZ1Jlc3VsdCA9IGl0ZW0ubWF0Y2goVEFHX1RZUEVfUkVHKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgKHR5cGVUYWdSZXN1bHQgJiYgdHlwZVRhZ1Jlc3VsdFsxXSkge1xuICAgICAgICAgICAgICAgICAgICAvLyAgICAgYXNzZXRzVGFnLmF0dHJpYnV0ZXMgPSB7XG4gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgdHlwZTogdHlwZVRhZ1Jlc3VsdFsxXVxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgbG9hZEFwcEFzc2V0cyhhcHA6IFBsYW5ldEFwcGxpY2F0aW9uKSB7XG4gICAgICAgIGNvbnN0IGJhc2VQYXRoID0gZ2V0QXNzZXRzQmFzZVBhdGgoYXBwKTtcbiAgICAgICAgY29uc3QgbWFuaWZlc3QgPSBhcHAuZW50cnkgPyAoaXNPYmplY3Q8UGxhbmV0QXBwbGljYXRpb25FbnRyeT4oYXBwLmVudHJ5KSA/IGFwcC5lbnRyeS5tYW5pZmVzdCA6IGFwcC5lbnRyeSkgOiBhcHAubWFuaWZlc3Q7XG4gICAgICAgIGlmIChtYW5pZmVzdCkge1xuICAgICAgICAgICAgY29uc3QgbWFuaWZlc3RFeHQgPSBnZXRFeHROYW1lKG1hbmlmZXN0KTtcbiAgICAgICAgICAgIGNvbnN0IGlzSHRtbCA9IG1hbmlmZXN0RXh0ID09PSAnaHRtbCc7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZVR5cGUgPSBpc0h0bWwgPyAndGV4dCcgOiAnanNvbic7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkTWFuaWZlc3QoYCR7bWFuaWZlc3R9P3Q9JHtuZXcgRGF0ZSgpLmdldFRpbWUoKX1gLCByZXNwb25zZVR5cGUpLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKG1hbmlmZXN0UmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBzY3JpcHRzLCBzdHlsZXMgfSA9IGdldFNjcmlwdHNBbmRTdHlsZXNBc3NldHMoYXBwLCBiYXNlUGF0aCwgbWFuaWZlc3RSZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkU2NyaXB0c0FuZFN0eWxlcyhzY3JpcHRzLCBzdHlsZXMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcDogYXBwLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzYW5kYm94OiBhcHAuc2FuZGJveCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbDogYXBwLmxvYWRTZXJpYWxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB7IHNjcmlwdHMsIHN0eWxlcyB9ID0gZ2V0U2NyaXB0c0FuZFN0eWxlc0Fzc2V0cyhhcHAsIGJhc2VQYXRoKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRTY3JpcHRzQW5kU3R5bGVzKHNjcmlwdHMsIHN0eWxlcywge1xuICAgICAgICAgICAgICAgIGFwcDogYXBwLm5hbWUsXG4gICAgICAgICAgICAgICAgc2FuZGJveDogYXBwLnNhbmRib3gsXG4gICAgICAgICAgICAgICAgc2VyaWFsOiBhcHAubG9hZFNlcmlhbFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsb2FkTWFuaWZlc3QodXJsOiBzdHJpbmcsIHJlc3BvbnNlVHlwZTogJ3RleHQnIHwgJ2pzb24nID0gJ2pzb24nKTogT2JzZXJ2YWJsZTxSZWNvcmQ8c3RyaW5nLCBBc3NldHNUYWdJdGVtW10+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgICAgIC5nZXQodXJsLCB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiByZXNwb25zZVR5cGUgYXMgJ2pzb24nXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZVR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VNYW5pZmVzdEZyb21IVE1MKHJlc3BvbnNlIGFzIHN0cmluZyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIEFzc2V0c1RhZ0l0ZW1bXT4gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHJlc3BvbnNlKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzogcmVzcG9uc2Vba2V5XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgIH1cbn1cbiJdfQ==
|