@stemy/ngx-utils 13.6.13 → 13.6.14
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/assets/ng.mjs +5 -0
- package/package.json +1 -1
- package/bundles/stemy-ngx-utils.umd.js +0 -6380
- package/bundles/stemy-ngx-utils.umd.js.map +0 -1
- package/esm2015/ngx-utils/common-types.js +0 -121
- package/esm2015/ngx-utils/components/dynamic-table/dynamic-table.component.js +0 -139
- package/esm2015/ngx-utils/components/pagination-menu/pagination-menu.component.js +0 -96
- package/esm2015/ngx-utils/components/unordered-list/unordered-list.component.js +0 -51
- package/esm2015/ngx-utils/directives/async-method.base.js +0 -66
- package/esm2015/ngx-utils/directives/async-method.directive.js +0 -17
- package/esm2015/ngx-utils/directives/background.directive.js +0 -51
- package/esm2015/ngx-utils/directives/dynamic-table-template.directive.js +0 -19
- package/esm2015/ngx-utils/directives/global-template.directive.js +0 -27
- package/esm2015/ngx-utils/directives/icon.directive.js +0 -59
- package/esm2015/ngx-utils/directives/ngx-template-outlet.directive.js +0 -88
- package/esm2015/ngx-utils/directives/pagination-item.directive.js +0 -33
- package/esm2015/ngx-utils/directives/pagination.directive.js +0 -76
- package/esm2015/ngx-utils/directives/resource-if.directive.js +0 -51
- package/esm2015/ngx-utils/directives/sticky-class.directive.js +0 -35
- package/esm2015/ngx-utils/directives/sticky.directive.js +0 -48
- package/esm2015/ngx-utils/directives/unordered-list-item.directive.js +0 -70
- package/esm2015/ngx-utils/directives/unordered-list-template.directive.js +0 -26
- package/esm2015/ngx-utils/ngx-utils.module.js +0 -246
- package/esm2015/ngx-utils/pipes/chunk.pipe.js +0 -21
- package/esm2015/ngx-utils/pipes/entries.pipe.js +0 -24
- package/esm2015/ngx-utils/pipes/extra-item-properties.pipe.js +0 -27
- package/esm2015/ngx-utils/pipes/filter.pipe.js +0 -33
- package/esm2015/ngx-utils/pipes/find.pipe.js +0 -25
- package/esm2015/ngx-utils/pipes/format-number.pipe.js +0 -19
- package/esm2015/ngx-utils/pipes/get-offset.pipe.js +0 -13
- package/esm2015/ngx-utils/pipes/get-type.pipe.js +0 -12
- package/esm2015/ngx-utils/pipes/global-template.pipe.js +0 -37
- package/esm2015/ngx-utils/pipes/group-by.pipe.js +0 -23
- package/esm2015/ngx-utils/pipes/is-type.pipe.js +0 -12
- package/esm2015/ngx-utils/pipes/join.pipe.js +0 -15
- package/esm2015/ngx-utils/pipes/keys.pipe.js +0 -18
- package/esm2015/ngx-utils/pipes/map.pipe.js +0 -25
- package/esm2015/ngx-utils/pipes/max.pipe.js +0 -22
- package/esm2015/ngx-utils/pipes/min.pipe.js +0 -22
- package/esm2015/ngx-utils/pipes/pop.pipe.js +0 -12
- package/esm2015/ngx-utils/pipes/reduce.pipe.js +0 -26
- package/esm2015/ngx-utils/pipes/remap.pipe.js +0 -28
- package/esm2015/ngx-utils/pipes/replace.pipe.js +0 -13
- package/esm2015/ngx-utils/pipes/reverse.pipe.js +0 -20
- package/esm2015/ngx-utils/pipes/round.pipe.js +0 -19
- package/esm2015/ngx-utils/pipes/safe-html.pipe.js +0 -32
- package/esm2015/ngx-utils/pipes/shift.pipe.js +0 -12
- package/esm2015/ngx-utils/pipes/split.pipe.js +0 -12
- package/esm2015/ngx-utils/pipes/translate.pipe.js +0 -81
- package/esm2015/ngx-utils/pipes/values.pipe.js +0 -18
- package/esm2015/ngx-utils/plugins/resize-event.plugin.js +0 -56
- package/esm2015/ngx-utils/plugins/scroll-event.plugin.js +0 -36
- package/esm2015/ngx-utils/services/acl.service.js +0 -81
- package/esm2015/ngx-utils/services/api.service.js +0 -39
- package/esm2015/ngx-utils/services/auth.service.js +0 -14
- package/esm2015/ngx-utils/services/base-http.client.js +0 -46
- package/esm2015/ngx-utils/services/base-http.service.js +0 -284
- package/esm2015/ngx-utils/services/config.service.js +0 -137
- package/esm2015/ngx-utils/services/error-handler.service.js +0 -49
- package/esm2015/ngx-utils/services/events.service.js +0 -24
- package/esm2015/ngx-utils/services/formatter.service.js +0 -46
- package/esm2015/ngx-utils/services/global-template.service.js +0 -35
- package/esm2015/ngx-utils/services/icon.service.js +0 -24
- package/esm2015/ngx-utils/services/language.service.js +0 -129
- package/esm2015/ngx-utils/services/open-api.service.js +0 -41
- package/esm2015/ngx-utils/services/promise.service.js +0 -52
- package/esm2015/ngx-utils/services/state.service.js +0 -181
- package/esm2015/ngx-utils/services/static-language.service.js +0 -152
- package/esm2015/ngx-utils/services/storage.service.js +0 -48
- package/esm2015/ngx-utils/services/toaster.service.js +0 -29
- package/esm2015/ngx-utils/services/translated-url.serializer.js +0 -70
- package/esm2015/ngx-utils/services/universal.service.js +0 -78
- package/esm2015/ngx-utils/utils/ajax-request-handler.js +0 -40
- package/esm2015/ngx-utils/utils/array.utils.js +0 -107
- package/esm2015/ngx-utils/utils/auth.guard.js +0 -156
- package/esm2015/ngx-utils/utils/canvas.utils.js +0 -388
- package/esm2015/ngx-utils/utils/date.utils.js +0 -29
- package/esm2015/ngx-utils/utils/file-system.js +0 -25
- package/esm2015/ngx-utils/utils/file.utils.js +0 -90
- package/esm2015/ngx-utils/utils/generic-value.js +0 -20
- package/esm2015/ngx-utils/utils/geometry.js +0 -132
- package/esm2015/ngx-utils/utils/initializer.js +0 -20
- package/esm2015/ngx-utils/utils/loader.utils.js +0 -55
- package/esm2015/ngx-utils/utils/math.utils.js +0 -45
- package/esm2015/ngx-utils/utils/object.utils.js +0 -320
- package/esm2015/ngx-utils/utils/observable.utils.js +0 -63
- package/esm2015/ngx-utils/utils/reflect.utils.js +0 -33
- package/esm2015/ngx-utils/utils/set.utils.js +0 -20
- package/esm2015/ngx-utils/utils/string.utils.js +0 -28
- package/esm2015/ngx-utils/utils/timer.utils.js +0 -52
- package/esm2015/ngx-utils/utils/unique.utils.js +0 -24
- package/esm2015/ngx-utils/utils/vector.js +0 -77
- package/esm2015/public_api.js +0 -89
- package/esm2015/stemy-ngx-utils.js +0 -7
- package/fesm2015/stemy-ngx-utils.js +0 -5060
- package/fesm2015/stemy-ngx-utils.js.map +0 -1
- package/stemy-ngx-utils.metadata.json +0 -1
- package/tools/circular.js +0 -117
- package/tools/circular.js.map +0 -1
- package/tools/config.js +0 -79
- package/tools/config.js.map +0 -1
- package/tools/icons.js +0 -14
- package/tools/icons.js.map +0 -1
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import { Inject, Injectable, PLATFORM_ID } from "@angular/core";
|
|
2
|
-
import { isPlatformBrowser, isPlatformServer } from "@angular/common";
|
|
3
|
-
import { DeviceDetectorService } from "ngx-device-detector";
|
|
4
|
-
/**
|
|
5
|
-
* Use this service to determine which is the current environment
|
|
6
|
-
*/
|
|
7
|
-
export class UniversalService {
|
|
8
|
-
constructor(platformId, dds) {
|
|
9
|
-
this.platformId = platformId;
|
|
10
|
-
this.dds = dds;
|
|
11
|
-
const info = this.dds.getDeviceInfo();
|
|
12
|
-
this.crawler = /(bot|google|baidu|bing|msn|duckduckbot|teoma|slurp|yandex|lighthouse|angular-universal|PTST|PostmanRuntime)/gi.test(info.userAgent);
|
|
13
|
-
}
|
|
14
|
-
get isBrowser() {
|
|
15
|
-
return isPlatformBrowser(this.platformId);
|
|
16
|
-
}
|
|
17
|
-
get isServer() {
|
|
18
|
-
return isPlatformServer(this.platformId);
|
|
19
|
-
}
|
|
20
|
-
get deviceInfo() {
|
|
21
|
-
return this.isServer
|
|
22
|
-
? {
|
|
23
|
-
userAgent: "angular-universal",
|
|
24
|
-
os: "unknown",
|
|
25
|
-
browser: "node",
|
|
26
|
-
device: "node",
|
|
27
|
-
os_version: "unknown",
|
|
28
|
-
browser_version: "unknown",
|
|
29
|
-
deviceType: "unknown",
|
|
30
|
-
orientation: "landscape"
|
|
31
|
-
}
|
|
32
|
-
: this.dds.getDeviceInfo();
|
|
33
|
-
}
|
|
34
|
-
get browserName() {
|
|
35
|
-
return (this.dds.browser || "").toLowerCase();
|
|
36
|
-
}
|
|
37
|
-
get browserVersion() {
|
|
38
|
-
return this.dds.browser_version;
|
|
39
|
-
}
|
|
40
|
-
get isExplorer() {
|
|
41
|
-
return this.checkBrowser("ie");
|
|
42
|
-
}
|
|
43
|
-
get isEdge() {
|
|
44
|
-
return this.checkBrowser("edge");
|
|
45
|
-
}
|
|
46
|
-
get isChrome() {
|
|
47
|
-
return this.checkBrowser("chrome");
|
|
48
|
-
}
|
|
49
|
-
get isFirefox() {
|
|
50
|
-
return this.checkBrowser("firefox");
|
|
51
|
-
}
|
|
52
|
-
get isSafari() {
|
|
53
|
-
return this.checkBrowser("safari");
|
|
54
|
-
}
|
|
55
|
-
get isTablet() {
|
|
56
|
-
return this.dds.isTablet();
|
|
57
|
-
}
|
|
58
|
-
get isMobile() {
|
|
59
|
-
return this.dds.isMobile();
|
|
60
|
-
}
|
|
61
|
-
get isDesktop() {
|
|
62
|
-
return this.dds.isDesktop();
|
|
63
|
-
}
|
|
64
|
-
get isCrawler() {
|
|
65
|
-
return this.crawler;
|
|
66
|
-
}
|
|
67
|
-
checkBrowser(name) {
|
|
68
|
-
return this.browserName.includes(name) || false;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
UniversalService.decorators = [
|
|
72
|
-
{ type: Injectable }
|
|
73
|
-
];
|
|
74
|
-
UniversalService.ctorParameters = () => [
|
|
75
|
-
{ type: String, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] },
|
|
76
|
-
{ type: DeviceDetectorService }
|
|
77
|
-
];
|
|
78
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pdmVyc2FsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmd4LXV0aWxzL3NlcnZpY2VzL3VuaXZlcnNhbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUMsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRSxPQUFPLEVBQUMscUJBQXFCLEVBQWEsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RTs7R0FFRztBQUVILE1BQU0sT0FBTyxnQkFBZ0I7SUF1RXpCLFlBQTBDLFVBQWtCLEVBQVcsR0FBMEI7UUFBdkQsZUFBVSxHQUFWLFVBQVUsQ0FBUTtRQUFXLFFBQUcsR0FBSCxHQUFHLENBQXVCO1FBQzdGLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLE9BQU8sR0FBRywrR0FBK0csQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3hKLENBQUM7SUF4RUQsSUFBSSxTQUFTO1FBQ1QsT0FBTyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELElBQUksUUFBUTtRQUNSLE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDVixPQUFPLElBQUksQ0FBQyxRQUFRO1lBQ2hCLENBQUMsQ0FBQztnQkFDRSxTQUFTLEVBQUUsbUJBQW1CO2dCQUM5QixFQUFFLEVBQUUsU0FBUztnQkFDYixPQUFPLEVBQUUsTUFBTTtnQkFDZixNQUFNLEVBQUUsTUFBTTtnQkFDZCxVQUFVLEVBQUUsU0FBUztnQkFDckIsZUFBZSxFQUFFLFNBQVM7Z0JBQzFCLFVBQVUsRUFBRSxTQUFTO2dCQUNyQixXQUFXLEVBQUUsV0FBVzthQUNwQjtZQUNSLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDWCxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbEQsQ0FBQztJQUVELElBQUksY0FBYztRQUNkLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUM7SUFDcEMsQ0FBQztJQUVELElBQUksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELElBQUksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDVCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEIsQ0FBQztJQVNTLFlBQVksQ0FBQyxJQUFZO1FBQy9CLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDO0lBQ3BELENBQUM7OztZQS9FSixVQUFVOzs7eUNBd0VNLE1BQU0sU0FBQyxXQUFXO1lBN0UzQixxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgUExBVEZPUk1fSUR9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7aXNQbGF0Zm9ybUJyb3dzZXIsIGlzUGxhdGZvcm1TZXJ2ZXJ9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHtEZXZpY2VEZXRlY3RvclNlcnZpY2UsIERldmljZUluZm99IGZyb20gXCJuZ3gtZGV2aWNlLWRldGVjdG9yXCI7XHJcblxyXG4vKipcclxuICogVXNlIHRoaXMgc2VydmljZSB0byBkZXRlcm1pbmUgd2hpY2ggaXMgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnRcclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFVuaXZlcnNhbFNlcnZpY2Uge1xyXG5cclxuICAgIGdldCBpc0Jyb3dzZXIoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlzU2VydmVyKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBpc1BsYXRmb3JtU2VydmVyKHRoaXMucGxhdGZvcm1JZCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGRldmljZUluZm8oKTogRGV2aWNlSW5mbyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTZXJ2ZXJcclxuICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICB1c2VyQWdlbnQ6IFwiYW5ndWxhci11bml2ZXJzYWxcIixcclxuICAgICAgICAgICAgICAgIG9zOiBcInVua25vd25cIixcclxuICAgICAgICAgICAgICAgIGJyb3dzZXI6IFwibm9kZVwiLFxyXG4gICAgICAgICAgICAgICAgZGV2aWNlOiBcIm5vZGVcIixcclxuICAgICAgICAgICAgICAgIG9zX3ZlcnNpb246IFwidW5rbm93blwiLFxyXG4gICAgICAgICAgICAgICAgYnJvd3Nlcl92ZXJzaW9uOiBcInVua25vd25cIixcclxuICAgICAgICAgICAgICAgIGRldmljZVR5cGU6IFwidW5rbm93blwiLFxyXG4gICAgICAgICAgICAgICAgb3JpZW50YXRpb246IFwibGFuZHNjYXBlXCJcclxuICAgICAgICAgICAgfSBhcyBhbnlcclxuICAgICAgICAgICAgOiB0aGlzLmRkcy5nZXREZXZpY2VJbmZvKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGJyb3dzZXJOYW1lKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmRkcy5icm93c2VyIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGJyb3dzZXJWZXJzaW9uKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGRzLmJyb3dzZXJfdmVyc2lvbjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNFeHBsb3JlcigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jaGVja0Jyb3dzZXIoXCJpZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNFZGdlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrQnJvd3NlcihcImVkZ2VcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlzQ2hyb21lKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrQnJvd3NlcihcImNocm9tZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNGaXJlZm94KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrQnJvd3NlcihcImZpcmVmb3hcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlzU2FmYXJpKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrQnJvd3NlcihcInNhZmFyaVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNUYWJsZXQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGRzLmlzVGFibGV0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlzTW9iaWxlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRkcy5pc01vYmlsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc0Rlc2t0b3AoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGRzLmlzRGVza3RvcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc0NyYXdsZXIoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3Jhd2xlcjtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNyYXdsZXI6IGJvb2xlYW47XHJcblxyXG4gICAgY29uc3RydWN0b3IoQEluamVjdChQTEFURk9STV9JRCkgcmVhZG9ubHkgcGxhdGZvcm1JZDogc3RyaW5nLCByZWFkb25seSBkZHM6IERldmljZURldGVjdG9yU2VydmljZSkge1xyXG4gICAgICAgIGNvbnN0IGluZm8gPSB0aGlzLmRkcy5nZXREZXZpY2VJbmZvKCk7XHJcbiAgICAgICAgdGhpcy5jcmF3bGVyID0gLyhib3R8Z29vZ2xlfGJhaWR1fGJpbmd8bXNufGR1Y2tkdWNrYm90fHRlb21hfHNsdXJwfHlhbmRleHxsaWdodGhvdXNlfGFuZ3VsYXItdW5pdmVyc2FsfFBUU1R8UG9zdG1hblJ1bnRpbWUpL2dpLnRlc3QoaW5mby51c2VyQWdlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBjaGVja0Jyb3dzZXIobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYnJvd3Nlck5hbWUuaW5jbHVkZXMobmFtZSkgfHwgZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
export class AjaxRequestHandler {
|
|
2
|
-
constructor(pattern, callback) {
|
|
3
|
-
this.pattern = pattern;
|
|
4
|
-
this.callback = callback;
|
|
5
|
-
this.listener = (event) => {
|
|
6
|
-
const details = event.detail;
|
|
7
|
-
if (this.pattern.test(details.url))
|
|
8
|
-
this.callback(details, this.params);
|
|
9
|
-
};
|
|
10
|
-
this.params = {};
|
|
11
|
-
if (typeof XMLHttpRequest !== "undefined" && !AjaxRequestHandler.isOverridden) {
|
|
12
|
-
AjaxRequestHandler.isOverridden = true;
|
|
13
|
-
const originalOpen = XMLHttpRequest.prototype.open;
|
|
14
|
-
XMLHttpRequest.prototype.open = function (method, url, async, user, password) {
|
|
15
|
-
originalOpen.apply(this, arguments);
|
|
16
|
-
window.dispatchEvent(new CustomEvent("ajaxRequest", {
|
|
17
|
-
detail: {
|
|
18
|
-
request: this,
|
|
19
|
-
method: method,
|
|
20
|
-
url: url
|
|
21
|
-
}
|
|
22
|
-
}));
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
listen() {
|
|
27
|
-
if (typeof window === "undefined")
|
|
28
|
-
return this;
|
|
29
|
-
window.addEventListener("ajaxRequest", this.listener);
|
|
30
|
-
return this;
|
|
31
|
-
}
|
|
32
|
-
forget() {
|
|
33
|
-
if (typeof window === "undefined")
|
|
34
|
-
return;
|
|
35
|
-
window.removeEventListener("ajaxRequest", this.listener);
|
|
36
|
-
return this;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
AjaxRequestHandler.isOverridden = false;
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWpheC1yZXF1ZXN0LWhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmd4LXV0aWxzL3V0aWxzL2FqYXgtcmVxdWVzdC1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sT0FBTyxrQkFBa0I7SUFNM0IsWUFBb0IsT0FBZSxFQUFVLFFBQTZCO1FBQXRELFlBQU8sR0FBUCxPQUFPLENBQVE7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFxQjtRQThCbEUsYUFBUSxHQUFHLENBQUMsS0FBa0IsRUFBUSxFQUFFO1lBQzVDLE1BQU0sT0FBTyxHQUF3QixLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ2xELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUUsQ0FBQyxDQUFDO1FBaENFLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksT0FBTyxjQUFjLEtBQUssV0FBVyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFO1lBQzNFLGtCQUFrQixDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDdkMsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDbkQsY0FBYyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsVUFBVSxNQUFjLEVBQUUsR0FBWSxFQUFFLEtBQWUsRUFBRSxJQUFhLEVBQUUsUUFBaUI7Z0JBQ3JILFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUNwQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksV0FBVyxDQUFDLGFBQWEsRUFBRTtvQkFDaEQsTUFBTSxFQUFFO3dCQUNKLE9BQU8sRUFBRSxJQUFJO3dCQUNiLE1BQU0sRUFBRSxNQUFNO3dCQUNkLEdBQUcsRUFBRSxHQUFHO3FCQUNYO2lCQUNKLENBQUMsQ0FBQyxDQUFBO1lBQ1AsQ0FBQyxDQUFDO1NBQ0w7SUFDTCxDQUFDO0lBRUQsTUFBTTtRQUNGLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQy9DLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNO1FBQ0YsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXO1lBQUUsT0FBTztRQUMxQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6RCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDOztBQWhDYywrQkFBWSxHQUFZLEtBQUssQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWpheFJlcXVlc3RDYWxsYmFjaywgSUFqYXhSZXF1ZXN0RGV0YWlsc30gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFqYXhSZXF1ZXN0SGFuZGxlciB7XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgaXNPdmVycmlkZGVuOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHBhcmFtczogYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcGF0dGVybjogUmVnRXhwLCBwcml2YXRlIGNhbGxiYWNrOiBBamF4UmVxdWVzdENhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMgPSB7fTtcclxuICAgICAgICBpZiAodHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSBcInVuZGVmaW5lZFwiICYmICFBamF4UmVxdWVzdEhhbmRsZXIuaXNPdmVycmlkZGVuKSB7XHJcbiAgICAgICAgICAgIEFqYXhSZXF1ZXN0SGFuZGxlci5pc092ZXJyaWRkZW4gPSB0cnVlO1xyXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbE9wZW4gPSBYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUub3BlbjtcclxuICAgICAgICAgICAgWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbiAobWV0aG9kOiBzdHJpbmcsIHVybD86IHN0cmluZywgYXN5bmM/OiBib29sZWFuLCB1c2VyPzogc3RyaW5nLCBwYXNzd29yZD86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxPcGVuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoXCJhamF4UmVxdWVzdFwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Q6IHRoaXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHVybFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsaXN0ZW4oKTogQWpheFJlcXVlc3RIYW5kbGVyIHtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJhamF4UmVxdWVzdFwiLCB0aGlzLmxpc3RlbmVyKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBmb3JnZXQoKTogQWpheFJlcXVlc3RIYW5kbGVyIHtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuO1xyXG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWpheFJlcXVlc3RcIiwgdGhpcy5saXN0ZW5lcik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsaXN0ZW5lciA9IChldmVudDogQ3VzdG9tRXZlbnQpOiB2b2lkID0+IHtcclxuICAgICAgICBjb25zdCBkZXRhaWxzOiBJQWpheFJlcXVlc3REZXRhaWxzID0gZXZlbnQuZGV0YWlsO1xyXG4gICAgICAgIGlmICh0aGlzLnBhdHRlcm4udGVzdChkZXRhaWxzLnVybCkpIHRoaXMuY2FsbGJhY2soZGV0YWlscywgdGhpcy5wYXJhbXMpO1xyXG4gICAgfTtcclxufVxyXG4iXX0=
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
import { ObjectUtils } from "./object.utils";
|
|
2
|
-
export class ArrayUtils {
|
|
3
|
-
static has(arr, ...items) {
|
|
4
|
-
if (!ObjectUtils.isArray(arr) || !ObjectUtils.isArray(items))
|
|
5
|
-
return false;
|
|
6
|
-
for (let i = 0; i < items.length; i++) {
|
|
7
|
-
if (arr.indexOf(items[i]) >= 0)
|
|
8
|
-
return true;
|
|
9
|
-
}
|
|
10
|
-
return false;
|
|
11
|
-
}
|
|
12
|
-
static match(arr, str) {
|
|
13
|
-
if (!ObjectUtils.isArray(arr) || !ObjectUtils.isString(str))
|
|
14
|
-
return false;
|
|
15
|
-
for (let i = 0; i < arr.length; i++) {
|
|
16
|
-
if (arr[i] instanceof RegExp) {
|
|
17
|
-
const regex = arr[i];
|
|
18
|
-
if (regex.test(str))
|
|
19
|
-
return true;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
return false;
|
|
23
|
-
}
|
|
24
|
-
static any(arr, cb) {
|
|
25
|
-
if (!ObjectUtils.isArray(arr) || !ObjectUtils.isFunction(cb))
|
|
26
|
-
return false;
|
|
27
|
-
for (let i = 0; i < arr.length; i++) {
|
|
28
|
-
if (cb(arr[i]))
|
|
29
|
-
return true;
|
|
30
|
-
}
|
|
31
|
-
return false;
|
|
32
|
-
}
|
|
33
|
-
static move(arr, oldIndex, newIndex) {
|
|
34
|
-
if (!ObjectUtils.isArray(arr))
|
|
35
|
-
return [];
|
|
36
|
-
const length = arr.length;
|
|
37
|
-
while (oldIndex < 0) {
|
|
38
|
-
oldIndex += length;
|
|
39
|
-
}
|
|
40
|
-
while (newIndex < 0) {
|
|
41
|
-
newIndex += length;
|
|
42
|
-
}
|
|
43
|
-
if (newIndex >= length) {
|
|
44
|
-
let k = newIndex - length + 1;
|
|
45
|
-
while (k--) {
|
|
46
|
-
arr.push(undefined);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
arr.splice(newIndex, 0, arr.splice(oldIndex, 1)[0]);
|
|
50
|
-
return arr;
|
|
51
|
-
}
|
|
52
|
-
static reversed(arr) {
|
|
53
|
-
const result = [];
|
|
54
|
-
if (!ObjectUtils.isArray(arr))
|
|
55
|
-
return result;
|
|
56
|
-
for (let i = arr.length - 1; i >= 0; i--) {
|
|
57
|
-
result.push(arr[i]);
|
|
58
|
-
}
|
|
59
|
-
return result;
|
|
60
|
-
}
|
|
61
|
-
static min(arr, cb) {
|
|
62
|
-
if (!ObjectUtils.isArray(arr))
|
|
63
|
-
return null;
|
|
64
|
-
let min = Number.MAX_SAFE_INTEGER;
|
|
65
|
-
let result = null;
|
|
66
|
-
for (let i = 0; i < arr.length; i++) {
|
|
67
|
-
const current = cb(arr[i], i);
|
|
68
|
-
if (current < min || result === null) {
|
|
69
|
-
min = current;
|
|
70
|
-
result = arr[i];
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
return result;
|
|
74
|
-
}
|
|
75
|
-
static max(arr, cb) {
|
|
76
|
-
if (!ObjectUtils.isArray(arr))
|
|
77
|
-
return null;
|
|
78
|
-
let max = Number.MIN_SAFE_INTEGER;
|
|
79
|
-
let result = null;
|
|
80
|
-
for (let i = 0; i < arr.length; i++) {
|
|
81
|
-
const current = cb(arr[i], i);
|
|
82
|
-
if (current > max || result === null) {
|
|
83
|
-
max = current;
|
|
84
|
-
result = arr[i];
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
return result;
|
|
88
|
-
}
|
|
89
|
-
static chunk(arr, size) {
|
|
90
|
-
if (!ObjectUtils.isArray(arr))
|
|
91
|
-
return [];
|
|
92
|
-
size = Math.max(1, size);
|
|
93
|
-
const result = [];
|
|
94
|
-
for (let i = 0; i < arr.length; i += size) {
|
|
95
|
-
result.push(arr.slice(i, i + size));
|
|
96
|
-
}
|
|
97
|
-
return result;
|
|
98
|
-
}
|
|
99
|
-
static unique(arr) {
|
|
100
|
-
if (!ObjectUtils.isArray(arr))
|
|
101
|
-
return [];
|
|
102
|
-
return arr.filter((value, index, self) => {
|
|
103
|
-
return self.indexOf(value) === index;
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXkudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmd4LXV0aWxzL3V0aWxzL2FycmF5LnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxNQUFNLE9BQU8sVUFBVTtJQUVuQixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQVUsRUFBRSxHQUFHLEtBQVk7UUFDbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzNFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ25DLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1NBQy9DO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBVSxFQUFFLEdBQVc7UUFDaEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2pDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxZQUFZLE1BQU0sRUFBRTtnQkFDMUIsTUFBTSxLQUFLLEdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM3QixJQUFJLEtBQUssQ0FBQyxJ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QUFDO0lBRUQsTUFBTSxDQUFDLE1BQU0sQ0FBSSxHQUFRO1FBQ3JCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3pDLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDckMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7T2JqZWN0VXRpbHN9IGZyb20gXCIuL29iamVjdC51dGlsc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFycmF5VXRpbHMge1xyXG5cclxuICAgIHN0YXRpYyBoYXMoYXJyOiBhbnlbXSwgLi4uaXRlbXM6IGFueVtdKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFPYmplY3RVdGlscy5pc0FycmF5KGFycikgfHwgIU9iamVjdFV0aWxzLmlzQXJyYXkoaXRlbXMpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoYXJyLmluZGV4T2YoaXRlbXNbaV0pID49IDApIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIG1hdGNoKGFycjogYW55W10sIHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFPYmplY3RVdGlscy5pc0FycmF5KGFycikgfHwgIU9iamVjdFV0aWxzLmlzU3RyaW5nKHN0cikpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoYXJyW2ldIGluc3RhbmNlb2YgUmVnRXhwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZWdleCA9IDxSZWdFeHA+YXJyW2ldO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlZ2V4LnRlc3Qoc3RyKSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBhbnk8VD4oYXJyOiBUW10sIGNiOiAoaXRlbTogVCkgPT4gYm9vbGVhbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghT2JqZWN0VXRpbHMuaXNBcnJheShhcnIpIHx8ICFPYmplY3RVdGlscy5pc0Z1bmN0aW9uKGNiKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChjYihhcnJbaV0pKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBtb3ZlPFQ+KGFycjogVFtdLCBvbGRJbmRleDogbnVtYmVyLCBuZXdJbmRleDogbnVtYmVyKTogVFtdIHtcclxuICAgICAgICBpZiAoIU9iamVjdFV0aWxzLmlzQXJyYXkoYXJyKSkgcmV0dXJuIFtdO1xyXG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGFyci5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUgKG9sZEluZGV4IDwgMCkge1xyXG4gICAgICAgICAgICBvbGRJbmRleCArPSBsZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdoaWxlIChuZXdJbmRleCA8IDApIHtcclxuICAgICAgICAgICAgbmV3SW5kZXggKz0gbGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV3SW5kZXggPj0gbGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGxldCBrID0gbmV3SW5kZXggLSBsZW5ndGggKyAxO1xyXG4gICAgICAgICAgICB3aGlsZSAoay0tKSB7XHJcbiAgICAgICAgICAgICAgICBhcnIucHVzaCh1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFyci5zcGxpY2UobmV3SW5kZXgsIDAsIGFyci5zcGxpY2Uob2xkSW5kZXgsIDEpWzBdKTtcclxuICAgICAgICByZXR1cm4gYXJyO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyByZXZlcnNlZChhcnI6IGFueVtdKTogYW55W10ge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIGlmICghT2JqZWN0VXRpbHMuaXNBcnJheShhcnIpKSByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIGZvciAobGV0IGkgPSBhcnIubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goYXJyW2ldKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgbWluPFQ+KGFycjogVFtdLCBjYjogKGl0ZW06IFQsIGluZGV4PzogbnVtYmVyKSA9PiBudW1iZXIpOiBUIHtcclxuICAgICAgICBpZiAoIU9iamVjdFV0aWxzLmlzQXJyYXkoYXJyKSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgbGV0IG1pbiA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBudWxsO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBjYihhcnJbaV0sIGkpO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudCA8IG1pbiB8fCByZXN1bHQgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIG1pbiA9IGN1cnJlbnQ7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBhcnJbaV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgbWF4PFQ+KGFycjogVFtdLCBjYjogKGl0ZW06IFQsIGluZGV4PzogbnVtYmVyKSA9PiBudW1iZXIpOiBUIHtcclxuICAgICAgICBpZiAoIU9iamVjdFV0aWxzLmlzQXJyYXkoYXJyKSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgbGV0IG1heCA9IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSO1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBudWxsO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBjYihhcnJbaV0sIGkpO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudCA+IG1heCB8fCByZXN1bHQgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIG1heCA9IGN1cnJlbnQ7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBhcnJbaV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgY2h1bms8VD4oYXJyOiBUW10sIHNpemU6IG51bWJlcik6IEFycmF5PFRbXT4ge1xyXG4gICAgICAgIGlmICghT2JqZWN0VXRpbHMuaXNBcnJheShhcnIpKSByZXR1cm4gW107XHJcbiAgICAgICAgc2l6ZSA9IE1hdGgubWF4KDEsIHNpemUpO1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpICs9IHNpemUpIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goYXJyLnNsaWNlKGksIGkgKyBzaXplKSlcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyB1bmlxdWU8VD4oYXJyOiBUW10pOiBUW10ge1xyXG4gICAgICAgIGlmICghT2JqZWN0VXRpbHMuaXNBcnJheShhcnIpKSByZXR1cm4gW107XHJcbiAgICAgICAgcmV0dXJuIGFyci5maWx0ZXIoKHZhbHVlLCBpbmRleCwgc2VsZikgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gc2VsZi5pbmRleE9mKHZhbHVlKSA9PT0gaW5kZXg7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
import { __decorate } from "tslib";
|
|
2
|
-
import { Inject, Injectable, Injector } from "@angular/core";
|
|
3
|
-
import { AUTH_SERVICE, FactoryDependencies } from "../common-types";
|
|
4
|
-
import { ReflectUtils } from "./reflect.utils";
|
|
5
|
-
import { ObjectUtils } from "./object.utils";
|
|
6
|
-
import { StateService } from "../services/state.service";
|
|
7
|
-
export class AuthGuard {
|
|
8
|
-
constructor(injector, state, auth) {
|
|
9
|
-
this.injector = injector;
|
|
10
|
-
this.state = state;
|
|
11
|
-
this.auth = auth;
|
|
12
|
-
}
|
|
13
|
-
static guardAuthenticated(auth) {
|
|
14
|
-
return Promise.resolve(auth.isAuthenticated);
|
|
15
|
-
}
|
|
16
|
-
static guardNotAuthenticated(auth) {
|
|
17
|
-
return Promise.resolve(!auth.isAuthenticated);
|
|
18
|
-
}
|
|
19
|
-
static guardNothing() {
|
|
20
|
-
return Promise.resolve(true);
|
|
21
|
-
}
|
|
22
|
-
static guardAuthField(auth, expression = `auth.isAuthenticated`) {
|
|
23
|
-
// @dynamic
|
|
24
|
-
const lambda = () => {
|
|
25
|
-
return Promise.resolve(ObjectUtils.evaluate(expression, { auth }));
|
|
26
|
-
};
|
|
27
|
-
return lambda;
|
|
28
|
-
}
|
|
29
|
-
static guardStateField(state, expression = `state.data`) {
|
|
30
|
-
// @dynamic
|
|
31
|
-
const lambda = () => {
|
|
32
|
-
return Promise.resolve(ObjectUtils.evaluate(expression, { state }));
|
|
33
|
-
};
|
|
34
|
-
return lambda;
|
|
35
|
-
}
|
|
36
|
-
static guardAuthStateField(auth, state, expression = `auth.isAuthenticated`) {
|
|
37
|
-
// @dynamic
|
|
38
|
-
const lambda = () => {
|
|
39
|
-
return Promise.resolve(ObjectUtils.evaluate(expression, { auth, state }));
|
|
40
|
-
};
|
|
41
|
-
return lambda;
|
|
42
|
-
}
|
|
43
|
-
static wildRouteMatch(segments) {
|
|
44
|
-
return { consumed: segments };
|
|
45
|
-
}
|
|
46
|
-
static noRouteMatch() {
|
|
47
|
-
return null;
|
|
48
|
-
}
|
|
49
|
-
checkRouteMenu(route) {
|
|
50
|
-
if (!route.data || !route.data.name)
|
|
51
|
-
return Promise.resolve(false);
|
|
52
|
-
return this.checkRoute(route);
|
|
53
|
-
}
|
|
54
|
-
checkRoute(route, next) {
|
|
55
|
-
const routeData = route.data || {};
|
|
56
|
-
if (!routeData.guards)
|
|
57
|
-
return Promise.resolve(!route.canActivate || this.auth.isAuthenticated);
|
|
58
|
-
return new Promise(resolve => {
|
|
59
|
-
const guards = routeData.guards.map(g => {
|
|
60
|
-
const guard = ReflectUtils.resolve(g, this.injector);
|
|
61
|
-
return guard(this.auth, route, next);
|
|
62
|
-
});
|
|
63
|
-
Promise.all(guards).then(results => {
|
|
64
|
-
resolve(results.indexOf(false) < 0);
|
|
65
|
-
});
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
canActivate(next, state) {
|
|
69
|
-
const route = next.routeConfig;
|
|
70
|
-
return new Promise(resolve => {
|
|
71
|
-
this.auth.checkAuthenticated().then(() => {
|
|
72
|
-
this.checkRoute(route, next).then(hasRights => {
|
|
73
|
-
resolve(hasRights);
|
|
74
|
-
if (!hasRights) {
|
|
75
|
-
this.getReturnState(route).then(returnState => {
|
|
76
|
-
if (!returnState)
|
|
77
|
-
return;
|
|
78
|
-
this.state.navigate(returnState, { queryParams: next.queryParams });
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
});
|
|
82
|
-
});
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
getConfig(route, config, path) {
|
|
86
|
-
if (!config)
|
|
87
|
-
return null;
|
|
88
|
-
const match = config.findIndex(t => t == route);
|
|
89
|
-
if (match >= 0)
|
|
90
|
-
return config;
|
|
91
|
-
for (const subConfig of config) {
|
|
92
|
-
if (subConfig.path)
|
|
93
|
-
path.push(subConfig.path);
|
|
94
|
-
const loadedChildren = (subConfig["_loadedConfig"] || { routes: null }).routes;
|
|
95
|
-
const match = this.getConfig(route, subConfig.children || loadedChildren, path);
|
|
96
|
-
if (!match) {
|
|
97
|
-
if (subConfig.path)
|
|
98
|
-
path.length -= 1;
|
|
99
|
-
continue;
|
|
100
|
-
}
|
|
101
|
-
return match;
|
|
102
|
-
}
|
|
103
|
-
return null;
|
|
104
|
-
}
|
|
105
|
-
getReturnState(route) {
|
|
106
|
-
if (!route)
|
|
107
|
-
return Promise.resolve(null);
|
|
108
|
-
if (ObjectUtils.isObject(route.data) && ObjectUtils.isArray(route.data.returnState)) {
|
|
109
|
-
return Promise.resolve(route.data.returnState);
|
|
110
|
-
}
|
|
111
|
-
const path = [];
|
|
112
|
-
const config = this.getConfig(route, this.state.routerConfig, path);
|
|
113
|
-
return new Promise(resolve => {
|
|
114
|
-
this.getReturnStateRecursive(config).then(rs => {
|
|
115
|
-
if (!ObjectUtils.isArray(rs)) {
|
|
116
|
-
resolve(rs);
|
|
117
|
-
return;
|
|
118
|
-
}
|
|
119
|
-
resolve(path.concat(rs));
|
|
120
|
-
});
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
getReturnStateRecursive(config, c = 0) {
|
|
124
|
-
if (!config || c >= config.length)
|
|
125
|
-
return Promise.resolve(null);
|
|
126
|
-
return new Promise(resolve => {
|
|
127
|
-
const route = config[c];
|
|
128
|
-
const check = !route.component ? Promise.resolve(false) : this.checkRoute(route);
|
|
129
|
-
check.then(res => {
|
|
130
|
-
if (res) {
|
|
131
|
-
resolve([route.path]);
|
|
132
|
-
return;
|
|
133
|
-
}
|
|
134
|
-
this.getReturnStateRecursive(config, c + 1).then(resolve);
|
|
135
|
-
});
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
AuthGuard.decorators = [
|
|
140
|
-
{ type: Injectable }
|
|
141
|
-
];
|
|
142
|
-
AuthGuard.ctorParameters = () => [
|
|
143
|
-
{ type: Injector, decorators: [{ type: Inject, args: [Injector,] }] },
|
|
144
|
-
{ type: StateService, decorators: [{ type: Inject, args: [StateService,] }] },
|
|
145
|
-
{ type: undefined, decorators: [{ type: Inject, args: [AUTH_SERVICE,] }] }
|
|
146
|
-
];
|
|
147
|
-
__decorate([
|
|
148
|
-
FactoryDependencies(AUTH_SERVICE)
|
|
149
|
-
], AuthGuard, "guardAuthField", null);
|
|
150
|
-
__decorate([
|
|
151
|
-
FactoryDependencies(StateService)
|
|
152
|
-
], AuthGuard, "guardStateField", null);
|
|
153
|
-
__decorate([
|
|
154
|
-
FactoryDependencies(AUTH_SERVICE, StateService)
|
|
155
|
-
], AuthGuard, "guardAuthStateField", null);
|
|
156
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9uZ3gtdXRpbHMvdXRpbHMvYXV0aC5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRTNELE9BQU8sRUFBQyxZQUFZLEVBQUUsbUJBQW1CLEVBQXVDLE1BQU0saUJBQWlCLENBQUM7QUFDeEcsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFHdkQsTUFBTSxPQUFPLFNBQVM7SUFpRGxCLFlBQXVDLFFBQWtCLEVBQ2QsS0FBbUIsRUFDbkIsSUFBa0I7UUFGdEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNkLFVBQUssR0FBTCxLQUFLLENBQWM7UUFDbkIsU0FBSSxHQUFKLElBQUksQ0FBYztJQUM3RCxDQUFDO0lBbERELE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFrQjtRQUN4QyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxNQUFNLENBQUMscUJBQXFCLENBQUMsSUFBa0I7UUFDM0MsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxNQUFNLENBQUMsWUFBWTtRQUNmLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBR0QsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFrQixFQUFFLGFBQXFCLHNCQUFzQjtRQUNqRixXQUFXO1FBQ1gsTUFBTSxNQUFNLEdBQUcsR0FBcUIs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amVjdGFibGUsIEluamVjdG9yfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlU25hcHNob3QsIENhbkFjdGl2YXRlLCBSb3V0ZXJTdGF0ZVNuYXBzaG90LCBVcmxTZWdtZW50fSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7QVVUSF9TRVJWSUNFLCBGYWN0b3J5RGVwZW5kZW5jaWVzLCBJQXV0aFNlcnZpY2UsIElSb3V0ZSwgUm91dGVWYWxpZGF0b3J9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtSZWZsZWN0VXRpbHN9IGZyb20gXCIuL3JlZmxlY3QudXRpbHNcIjtcclxuaW1wb3J0IHtPYmplY3RVdGlsc30gZnJvbSBcIi4vb2JqZWN0LnV0aWxzXCI7XHJcbmltcG9ydCB7U3RhdGVTZXJ2aWNlfSBmcm9tIFwiLi4vc2VydmljZXMvc3RhdGUuc2VydmljZVwiO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQXV0aEd1YXJkIGltcGxlbWVudHMgQ2FuQWN0aXZhdGUge1xyXG5cclxuICAgIHN0YXRpYyBndWFyZEF1dGhlbnRpY2F0ZWQoYXV0aDogSUF1dGhTZXJ2aWNlKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShhdXRoLmlzQXV0aGVudGljYXRlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGd1YXJkTm90QXV0aGVudGljYXRlZChhdXRoOiBJQXV0aFNlcnZpY2UpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCFhdXRoLmlzQXV0aGVudGljYXRlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGd1YXJkTm90aGluZygpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIEBGYWN0b3J5RGVwZW5kZW5jaWVzKEFVVEhfU0VSVklDRSlcclxuICAgIHN0YXRpYyBndWFyZEF1dGhGaWVsZChhdXRoOiBJQXV0aFNlcnZpY2UsIGV4cHJlc3Npb246IHN0cmluZyA9IGBhdXRoLmlzQXV0aGVudGljYXRlZGApOiBSb3V0ZVZhbGlkYXRvciB7XHJcbiAgICAgICAgLy8gQGR5bmFtaWNcclxuICAgICAgICBjb25zdCBsYW1iZGEgPSAoKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoT2JqZWN0VXRpbHMuZXZhbHVhdGUoZXhwcmVzc2lvbiwge2F1dGh9KSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gbGFtYmRhO1xyXG4gICAgfVxyXG5cclxuICAgIEBGYWN0b3J5RGVwZW5kZW5jaWVzKFN0YXRlU2VydmljZSlcclxuICAgIHN0YXRpYyBndWFyZFN0YXRlRmllbGQoc3RhdGU6IFN0YXRlU2VydmljZSwgZXhwcmVzc2lvbjogc3RyaW5nID0gYHN0YXRlLmRhdGFgKTogUm91dGVWYWxpZGF0b3Ige1xyXG4gICAgICAgIC8vIEBkeW5hbWljXHJcbiAgICAgICAgY29uc3QgbGFtYmRhID0gKCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKE9iamVjdFV0aWxzLmV2YWx1YXRlKGV4cHJlc3Npb24sIHtzdGF0ZX0pKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBsYW1iZGE7XHJcbiAgICB9XHJcblxyXG4gICAgQEZhY3RvcnlEZXBlbmRlbmNpZXMoQVVUSF9TRVJWSUNFLCBTdGF0ZVNlcnZpY2UpXHJcbiAgICBzdGF0aWMgZ3VhcmRBdXRoU3RhdGVGaWVsZChhdXRoOiBJQXV0aFNlcnZpY2UsIHN0YXRlOiBTdGF0ZVNlcnZpY2UsIGV4cHJlc3Npb246IHN0cmluZyA9IGBhdXRoLmlzQXV0aGVudGljYXRlZGApOiBSb3V0ZVZhbGlkYXRvciB7XHJcbiAgICAgICAgLy8gQGR5bmFtaWNcclxuICAgICAgICBjb25zdCBsYW1iZGEgPSAoKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoT2JqZWN0VXRpbHMuZXZhbHVhdGUoZXhwcmVzc2lvbiwge2F1dGgsIHN0YXRlfSkpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGxhbWJkYTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgd2lsZFJvdXRlTWF0Y2goc2VnbWVudHM6IFVybFNlZ21lbnRbXSkge1xyXG4gICAgICAgIHJldHVybiB7Y29uc3VtZWQ6IHNlZ21lbnRzfTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgbm9Sb3V0ZU1hdGNoKCkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSW5qZWN0b3IpIHJlYWRvbmx5IGluamVjdG9yOiBJbmplY3RvcixcclxuICAgICAgICAgICAgICAgIEBJbmplY3QoU3RhdGVTZXJ2aWNlKSByZWFkb25seSBzdGF0ZTogU3RhdGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgQEluamVjdChBVVRIX1NFUlZJQ0UpIHJlYWRvbmx5IGF1dGg6IElBdXRoU2VydmljZSkge1xyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrUm91dGVNZW51KHJvdXRlOiBJUm91dGUpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICBpZiAoIXJvdXRlLmRhdGEgfHwgIXJvdXRlLmRhdGEubmFtZSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tSb3V0ZShyb3V0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2hlY2tSb3V0ZShyb3V0ZTogSVJvdXRlLCBuZXh0PzogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIGNvbnN0IHJvdXRlRGF0YSA9IHJvdXRlLmRhdGEgfHwge307XHJcbiAgICAgICAgaWYgKCFyb3V0ZURhdGEuZ3VhcmRzKVxyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCFyb3V0ZS5jYW5BY3RpdmF0ZSB8fCB0aGlzLmF1dGguaXNBdXRoZW50aWNhdGVkKTtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4ocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGd1YXJkcyA9IHJvdXRlRGF0YS5ndWFyZHMubWFwKGcgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZ3VhcmQgPSBSZWZsZWN0VXRpbHMucmVzb2x2ZTxSb3V0ZVZhbGlkYXRvcj4oZywgdGhpcy5pbmplY3Rvcik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZ3VhcmQodGhpcy5hdXRoLCByb3V0ZSwgbmV4dCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBQcm9taXNlLmFsbChndWFyZHMpLnRoZW4ocmVzdWx0cyA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdHMuaW5kZXhPZihmYWxzZSkgPCAwKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2FuQWN0aXZhdGUobmV4dDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICBjb25zdCByb3V0ZSA9IDxJUm91dGU+bmV4dC5yb3V0ZUNvbmZpZztcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4ocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0aC5jaGVja0F1dGhlbnRpY2F0ZWQoKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tSb3V0ZShyb3V0ZSwgbmV4dCkudGhlbihoYXNSaWdodHMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoaGFzUmlnaHRzKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc1JpZ2h0cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFJldHVyblN0YXRlKHJvdXRlKS50aGVuKHJldHVyblN0YXRlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmV0dXJuU3RhdGUpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUubmF2aWdhdGUocmV0dXJuU3RhdGUsIHtxdWVyeVBhcmFtczogbmV4dC5xdWVyeVBhcmFtc30pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29uZmlnKHJvdXRlOiBJUm91dGUsIGNvbmZpZzogSVJvdXRlW10sIHBhdGg6IHN0cmluZ1tdKTogSVJvdXRlW10ge1xyXG4gICAgICAgIGlmICghY29uZmlnKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBjb25zdCBtYXRjaCA9IGNvbmZpZy5maW5kSW5kZXgodCA9PiB0ID09IHJvdXRlKTtcclxuICAgICAgICBpZiAobWF0Y2ggPj0gMCkgcmV0dXJuIGNvbmZpZztcclxuICAgICAgICBmb3IgKGNvbnN0IHN1YkNvbmZpZyBvZiBjb25maWcpIHtcclxuICAgICAgICAgICAgaWYgKHN1YkNvbmZpZy5wYXRoKVxyXG4gICAgICAgICAgICAgICAgcGF0aC5wdXNoKHN1YkNvbmZpZy5wYXRoKTtcclxuICAgICAgICAgICAgY29uc3QgbG9hZGVkQ2hpbGRyZW4gPSAoc3ViQ29uZmlnW1wiX2xvYWRlZENvbmZpZ1wiXSB8fCB7cm91dGVzOiBudWxsfSkucm91dGVzO1xyXG4gICAgICAgICAgICBjb25zdCBtYXRjaCA9IHRoaXMuZ2V0Q29uZmlnKHJvdXRlLCBzdWJDb25maWcuY2hpbGRyZW4gfHwgbG9hZGVkQ2hpbGRyZW4sIHBhdGgpO1xyXG4gICAgICAgICAgICBpZiAoIW1hdGNoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3ViQ29uZmlnLnBhdGgpXHJcbiAgICAgICAgICAgICAgICAgICAgcGF0aC5sZW5ndGggLT0gMTtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBtYXRjaDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UmV0dXJuU3RhdGUocm91dGU6IElSb3V0ZSk6IFByb21pc2U8c3RyaW5nW10+IHtcclxuICAgICAgICBpZiAoIXJvdXRlKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xyXG4gICAgICAgIGlmIChPYmplY3RVdGlscy5pc09iamVjdChyb3V0ZS5kYXRhKSAmJiBPYmplY3RVdGlscy5pc0FycmF5KHJvdXRlLmRhdGEucmV0dXJuU3RhdGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocm91dGUuZGF0YS5yZXR1cm5TdGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHBhdGggPSBbXTtcclxuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLmdldENvbmZpZyhyb3V0ZSwgdGhpcy5zdGF0ZS5yb3V0ZXJDb25maWcsIHBhdGgpO1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxzdHJpbmdbXT4ocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0UmV0dXJuU3RhdGVSZWN1cnNpdmUoY29uZmlnKS50aGVuKHJzID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghT2JqZWN0VXRpbHMuaXNBcnJheShycykpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJzKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHBhdGguY29uY2F0KHJzKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0UmV0dXJuU3RhdGVSZWN1cnNpdmUoY29uZmlnOiBJUm91dGVbXSwgYzogbnVtYmVyID0gMCk6IFByb21pc2U8c3RyaW5nW10+IHtcclxuICAgICAgICBpZiAoIWNvbmZpZyB8fCBjID49IGNvbmZpZy5sZW5ndGgpIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHN0cmluZ1tdPihyZXNvbHZlID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgcm91dGUgPSBjb25maWdbY107XHJcbiAgICAgICAgICAgIGNvbnN0IGNoZWNrID0gIXJvdXRlLmNvbXBvbmVudCA/IFByb21pc2UucmVzb2x2ZShmYWxzZSkgOiB0aGlzLmNoZWNrUm91dGUocm91dGUpO1xyXG4gICAgICAgICAgICBjaGVjay50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShbcm91dGUucGF0aF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UmV0dXJuU3RhdGVSZWN1cnNpdmUoY29uZmlnLCBjICsgMSkudGhlbihyZXNvbHZlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIl19
|