@stemy/ngx-utils 12.1.1 → 12.1.4

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.
Files changed (120) hide show
  1. package/bundles/stemy-ngx-utils.umd.js +51 -30
  2. package/bundles/stemy-ngx-utils.umd.js.map +1 -1
  3. package/esm2015/ngx-utils/services/acl.service.js +3 -1
  4. package/esm2015/ngx-utils/services/config.service.js +4 -4
  5. package/esm2015/ngx-utils/services/error-handler.service.js +2 -2
  6. package/esm2015/ngx-utils/services/static-language.service.js +17 -17
  7. package/esm2015/ngx-utils/services/storage.service.js +4 -4
  8. package/esm2015/ngx-utils/utils/file-system.js +20 -0
  9. package/esm2015/public_api.js +2 -1
  10. package/esm2020/ngx-utils/common-types.mjs +117 -0
  11. package/esm2020/ngx-utils/components/dynamic-table/dynamic-table.component.mjs +178 -0
  12. package/esm2020/ngx-utils/components/pagination-menu/pagination-menu.component.mjs +101 -0
  13. package/esm2020/ngx-utils/components/unordered-list/unordered-list.component.mjs +65 -0
  14. package/esm2020/ngx-utils/directives/async-method.base.mjs +78 -0
  15. package/esm2020/ngx-utils/directives/async-method.directive.mjs +21 -0
  16. package/esm2020/ngx-utils/directives/background.directive.mjs +51 -0
  17. package/esm2020/ngx-utils/directives/dynamic-table-template.directive.mjs +20 -0
  18. package/esm2020/ngx-utils/directives/global-template.directive.mjs +30 -0
  19. package/esm2020/ngx-utils/directives/icon.directive.mjs +67 -0
  20. package/esm2020/ngx-utils/directives/ngx-template-outlet.directive.mjs +90 -0
  21. package/esm2020/ngx-utils/directives/pagination-item.directive.mjs +33 -0
  22. package/esm2020/ngx-utils/directives/pagination.directive.mjs +83 -0
  23. package/esm2020/ngx-utils/directives/resource-if.directive.mjs +50 -0
  24. package/esm2020/ngx-utils/directives/sticky-class.directive.mjs +34 -0
  25. package/esm2020/ngx-utils/directives/sticky.directive.mjs +55 -0
  26. package/esm2020/ngx-utils/directives/unordered-list-item.directive.mjs +77 -0
  27. package/esm2020/ngx-utils/directives/unordered-list-template.directive.mjs +26 -0
  28. package/esm2020/ngx-utils/ngx-utils.imports.mjs +165 -0
  29. package/esm2020/ngx-utils/ngx-utils.module.mjs +178 -0
  30. package/esm2020/ngx-utils/pipes/chunk.pipe.mjs +25 -0
  31. package/esm2020/ngx-utils/pipes/entries.pipe.mjs +28 -0
  32. package/esm2020/ngx-utils/pipes/extra-item-properties.pipe.mjs +31 -0
  33. package/esm2020/ngx-utils/pipes/filter.pipe.mjs +42 -0
  34. package/esm2020/ngx-utils/pipes/find.pipe.mjs +29 -0
  35. package/esm2020/ngx-utils/pipes/format-number.pipe.mjs +21 -0
  36. package/esm2020/ngx-utils/pipes/get-offset.pipe.mjs +17 -0
  37. package/esm2020/ngx-utils/pipes/get-type.pipe.mjs +16 -0
  38. package/esm2020/ngx-utils/pipes/global-template.pipe.mjs +41 -0
  39. package/esm2020/ngx-utils/pipes/group-by.pipe.mjs +27 -0
  40. package/esm2020/ngx-utils/pipes/is-type.pipe.mjs +16 -0
  41. package/esm2020/ngx-utils/pipes/join.pipe.mjs +19 -0
  42. package/esm2020/ngx-utils/pipes/keys.pipe.mjs +22 -0
  43. package/esm2020/ngx-utils/pipes/map.pipe.mjs +29 -0
  44. package/esm2020/ngx-utils/pipes/max.pipe.mjs +26 -0
  45. package/esm2020/ngx-utils/pipes/min.pipe.mjs +26 -0
  46. package/esm2020/ngx-utils/pipes/reduce.pipe.mjs +30 -0
  47. package/esm2020/ngx-utils/pipes/remap.pipe.mjs +32 -0
  48. package/esm2020/ngx-utils/pipes/replace.pipe.mjs +16 -0
  49. package/esm2020/ngx-utils/pipes/reverse.pipe.mjs +24 -0
  50. package/esm2020/ngx-utils/pipes/round.pipe.mjs +21 -0
  51. package/esm2020/ngx-utils/pipes/safe-html.pipe.mjs +34 -0
  52. package/esm2020/ngx-utils/pipes/translate.pipe.mjs +86 -0
  53. package/esm2020/ngx-utils/pipes/values.pipe.mjs +22 -0
  54. package/esm2020/ngx-utils/plugins/resize-event.plugin.mjs +59 -0
  55. package/esm2020/ngx-utils/plugins/scroll-event.plugin.mjs +39 -0
  56. package/esm2020/ngx-utils/services/acl.service.mjs +81 -0
  57. package/esm2020/ngx-utils/services/api.service.mjs +38 -0
  58. package/esm2020/ngx-utils/services/auth.service.mjs +14 -0
  59. package/esm2020/ngx-utils/services/base-http.client.mjs +47 -0
  60. package/esm2020/ngx-utils/services/base-http.service.mjs +298 -0
  61. package/esm2020/ngx-utils/services/config.service.mjs +116 -0
  62. package/esm2020/ngx-utils/services/error-handler.service.mjs +49 -0
  63. package/esm2020/ngx-utils/services/events.service.mjs +26 -0
  64. package/esm2020/ngx-utils/services/formatter.service.mjs +47 -0
  65. package/esm2020/ngx-utils/services/global-template.service.mjs +37 -0
  66. package/esm2020/ngx-utils/services/icon.service.mjs +26 -0
  67. package/esm2020/ngx-utils/services/language.service.mjs +113 -0
  68. package/esm2020/ngx-utils/services/open-api.service.mjs +40 -0
  69. package/esm2020/ngx-utils/services/promise.service.mjs +55 -0
  70. package/esm2020/ngx-utils/services/state.service.mjs +173 -0
  71. package/esm2020/ngx-utils/services/static-language.service.mjs +166 -0
  72. package/esm2020/ngx-utils/services/storage.service.mjs +49 -0
  73. package/esm2020/ngx-utils/services/toaster.service.mjs +32 -0
  74. package/esm2020/ngx-utils/services/translated-url.serializer.mjs +73 -0
  75. package/esm2020/ngx-utils/services/universal.service.mjs +78 -0
  76. package/esm2020/ngx-utils/utils/ajax-request-handler.mjs +40 -0
  77. package/esm2020/ngx-utils/utils/array.utils.mjs +100 -0
  78. package/esm2020/ngx-utils/utils/auth.guard.mjs +181 -0
  79. package/esm2020/ngx-utils/utils/canvas.utils.mjs +388 -0
  80. package/esm2020/ngx-utils/utils/date.utils.mjs +28 -0
  81. package/esm2020/ngx-utils/utils/file.utils.mjs +90 -0
  82. package/esm2020/ngx-utils/utils/generic-value.mjs +20 -0
  83. package/esm2020/ngx-utils/utils/geometry.mjs +132 -0
  84. package/esm2020/ngx-utils/utils/initializer.mjs +20 -0
  85. package/esm2020/ngx-utils/utils/loader.utils.mjs +55 -0
  86. package/esm2020/ngx-utils/utils/math.utils.mjs +15 -0
  87. package/esm2020/ngx-utils/utils/object.utils.mjs +261 -0
  88. package/esm2020/ngx-utils/utils/observable.utils.mjs +63 -0
  89. package/esm2020/ngx-utils/utils/reflect.utils.mjs +33 -0
  90. package/esm2020/ngx-utils/utils/set.utils.mjs +20 -0
  91. package/esm2020/ngx-utils/utils/string.utils.mjs +41 -0
  92. package/esm2020/ngx-utils/utils/timer.utils.mjs +52 -0
  93. package/esm2020/ngx-utils/utils/unique.utils.mjs +24 -0
  94. package/esm2020/ngx-utils/utils/vector.mjs +77 -0
  95. package/esm2020/public_api.mjs +85 -0
  96. package/esm2020/stemy-ngx-utils.mjs +5 -0
  97. package/esm2020/tools/config.mjs +71 -0
  98. package/esm2020/tools/public_api.mjs +2 -0
  99. package/esm2020/tools/stemy-ngx-utils-tools.mjs +5 -0
  100. package/fesm2015/stemy-ngx-utils-tools.mjs +77 -0
  101. package/fesm2015/stemy-ngx-utils-tools.mjs.map +1 -0
  102. package/fesm2015/stemy-ngx-utils.js +46 -24
  103. package/fesm2015/stemy-ngx-utils.js.map +1 -1
  104. package/fesm2015/stemy-ngx-utils.mjs +5168 -0
  105. package/fesm2015/stemy-ngx-utils.mjs.map +1 -0
  106. package/fesm2020/stemy-ngx-utils-tools.mjs +77 -0
  107. package/fesm2020/stemy-ngx-utils-tools.mjs.map +1 -0
  108. package/fesm2020/stemy-ngx-utils.mjs +5099 -0
  109. package/fesm2020/stemy-ngx-utils.mjs.map +1 -0
  110. package/ngx-utils/services/static-language.service.d.ts +1 -1
  111. package/ngx-utils/utils/file-system.d.ts +16 -0
  112. package/package.json +1 -1
  113. package/public_api.d.ts +1 -0
  114. package/stemy-ngx-utils.metadata.json +1 -1
  115. package/tools/config.d.ts +7 -0
  116. package/tools/package.json +10 -0
  117. package/tools/public_api.d.ts +1 -0
  118. package/tools/stemy-ngx-utils-tools.d.ts +5 -0
  119. package/bundles/stemy-ngx-utils.umd.min.js +0 -16
  120. package/bundles/stemy-ngx-utils.umd.min.js.map +0 -1
@@ -0,0 +1,78 @@
1
+ import { Inject, Injectable, PLATFORM_ID } from "@angular/core";
2
+ import { isPlatformBrowser, isPlatformServer } from "@angular/common";
3
+ import { DeviceDetectorService } from "ngx-device-detector";
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "ngx-device-detector";
6
+ /**
7
+ * Use this service to determine which is the current environment
8
+ */
9
+ export class UniversalService {
10
+ constructor(platformId, dds) {
11
+ this.platformId = platformId;
12
+ this.dds = dds;
13
+ const info = this.dds.getDeviceInfo();
14
+ this.crawler = /(bot|google|baidu|bing|msn|duckduckbot|teoma|slurp|yandex|lighthouse|angular-universal|PTST)/gi.test(info.userAgent);
15
+ }
16
+ get isBrowser() {
17
+ return isPlatformBrowser(this.platformId);
18
+ }
19
+ get isServer() {
20
+ return isPlatformServer(this.platformId);
21
+ }
22
+ get deviceInfo() {
23
+ return this.isServer
24
+ ? {
25
+ userAgent: "angular-universal",
26
+ os: "unknown",
27
+ browser: "node",
28
+ device: "node",
29
+ os_version: "unknown",
30
+ browser_version: "unknown",
31
+ deviceType: "unknown",
32
+ orientation: "landscape"
33
+ }
34
+ : this.dds.getDeviceInfo();
35
+ }
36
+ get browserName() {
37
+ return this.dds.browser;
38
+ }
39
+ get browserVersion() {
40
+ return this.dds.browser_version;
41
+ }
42
+ get isExplorer() {
43
+ return this.dds.browser == "ie";
44
+ }
45
+ get isEdge() {
46
+ return this.dds.browser == "ms-edge";
47
+ }
48
+ get isChrome() {
49
+ return this.dds.browser == "chrome";
50
+ }
51
+ get isFirefox() {
52
+ return this.dds.browser == "firefox";
53
+ }
54
+ get isSafari() {
55
+ return this.dds.browser == "safari";
56
+ }
57
+ get isTablet() {
58
+ return this.dds.isTablet();
59
+ }
60
+ get isMobile() {
61
+ return this.dds.isMobile();
62
+ }
63
+ get isDesktop() {
64
+ return this.dds.isDesktop();
65
+ }
66
+ get isCrawler() {
67
+ return this.crawler;
68
+ }
69
+ }
70
+ UniversalService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: UniversalService, deps: [{ token: PLATFORM_ID }, { token: i1.DeviceDetectorService }], target: i0.ɵɵFactoryTarget.Injectable });
71
+ UniversalService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: UniversalService });
72
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: UniversalService, decorators: [{
73
+ type: Injectable
74
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
75
+ type: Inject,
76
+ args: [PLATFORM_ID]
77
+ }] }, { type: i1.DeviceDetectorService }]; } });
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pdmVyc2FsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmd4LXV0aWxzL3NlcnZpY2VzL3VuaXZlcnNhbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUMsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRSxPQUFPLEVBQUMscUJBQXFCLEVBQWEsTUFBTSxxQkFBcUIsQ0FBQzs7O0FBRXRFOztHQUVHO0FBRUgsTUFBTSxPQUFPLGdCQUFnQjtJQXVFekIsWUFBeUMsVUFBa0IsRUFBVSxHQUEwQjtRQUF0RCxlQUFVLEdBQVYsVUFBVSxDQUFRO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBdUI7UUFDM0YsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsT0FBTyxHQUFHLGdHQUFnRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDekksQ0FBQztJQXhFRCxJQUFJLFNBQVM7UUFDVCxPQUFPLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1IsT0FBTyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELElBQUksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLFFBQVE7WUFDaEIsQ0FBQyxDQUFDO2dCQUNFLFNBQVMsRUFBRSxtQkFBbUI7Z0JBQzlCLEVBQUUsRUFBRSxTQUFTO2dCQUNiLE9BQU8sRUFBRSxNQUFNO2dCQUNmLE1BQU0sRUFBRSxNQUFNO2dCQUNkLFVBQVUsRUFBRSxTQUFTO2dCQUNyQixlQUFlLEVBQUUsU0FBUztnQkFDMUIsVUFBVSxFQUFFLFNBQVM7Z0JBQ3JCLFdBQVcsRUFBRSxXQUFXO2FBQ3BCO1lBQ1IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQUksV0FBVztRQUNYLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksY0FBYztRQUNkLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUM7SUFDcEMsQ0FBQztJQUVELElBQUksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxJQUFJLFNBQVMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBSSxRQUFRLENBQUM7SUFDeEMsQ0FBQztJQUVELElBQUksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLElBQUksU0FBUyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxJQUFJLFFBQVEsQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7OzZHQW5FUSxnQkFBZ0Isa0JBdUVMLFdBQVc7aUhBdkV0QixnQkFBZ0I7MkZBQWhCLGdCQUFnQjtrQkFENUIsVUFBVTs7MEJBd0VNLE1BQU07MkJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBQTEFURk9STV9JRH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtpc1BsYXRmb3JtQnJvd3NlciwgaXNQbGF0Zm9ybVNlcnZlcn0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQge0RldmljZURldGVjdG9yU2VydmljZSwgRGV2aWNlSW5mb30gZnJvbSBcIm5neC1kZXZpY2UtZGV0ZWN0b3JcIjtcclxuXHJcbi8qKlxyXG4gKiBVc2UgdGhpcyBzZXJ2aWNlIHRvIGRldGVybWluZSB3aGljaCBpcyB0aGUgY3VycmVudCBlbnZpcm9ubWVudFxyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgVW5pdmVyc2FsU2VydmljZSB7XHJcblxyXG4gICAgZ2V0IGlzQnJvd3NlcigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNTZXJ2ZXIoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGlzUGxhdGZvcm1TZXJ2ZXIodGhpcy5wbGF0Zm9ybUlkKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZGV2aWNlSW5mbygpOiBEZXZpY2VJbmZvIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc1NlcnZlclxyXG4gICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgIHVzZXJBZ2VudDogXCJhbmd1bGFyLXVuaXZlcnNhbFwiLFxyXG4gICAgICAgICAgICAgICAgb3M6IFwidW5rbm93blwiLFxyXG4gICAgICAgICAgICAgICAgYnJvd3NlcjogXCJub2RlXCIsXHJcbiAgICAgICAgICAgICAgICBkZXZpY2U6IFwibm9kZVwiLFxyXG4gICAgICAgICAgICAgICAgb3NfdmVyc2lvbjogXCJ1bmtub3duXCIsXHJcbiAgICAgICAgICAgICAgICBicm93c2VyX3ZlcnNpb246IFwidW5rbm93blwiLFxyXG4gICAgICAgICAgICAgICAgZGV2aWNlVHlwZTogXCJ1bmtub3duXCIsXHJcbiAgICAgICAgICAgICAgICBvcmllbnRhdGlvbjogXCJsYW5kc2NhcGVcIlxyXG4gICAgICAgICAgICB9IGFzIGFueVxyXG4gICAgICAgICAgICA6IHRoaXMuZGRzLmdldERldmljZUluZm8oKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgYnJvd3Nlck5hbWUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZHMuYnJvd3NlcjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgYnJvd3NlclZlcnNpb24oKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZHMuYnJvd3Nlcl92ZXJzaW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc0V4cGxvcmVyKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRkcy5icm93c2VyID09IFwiaWVcIjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNFZGdlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRkcy5icm93c2VyID09IFwibXMtZWRnZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc0Nocm9tZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZHMuYnJvd3NlciA9PSBcImNocm9tZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc0ZpcmVmb3goKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGRzLmJyb3dzZXIgPT0gXCJmaXJlZm94XCI7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlzU2FmYXJpKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRkcy5icm93c2VyID09IFwic2FmYXJpXCI7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlzVGFibGV0KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRkcy5pc1RhYmxldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc01vYmlsZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZHMuaXNNb2JpbGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNEZXNrdG9wKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRkcy5pc0Rlc2t0b3AoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNDcmF3bGVyKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNyYXdsZXI7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjcmF3bGVyOiBib29sZWFuO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogc3RyaW5nLCBwcml2YXRlIGRkczogRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlKSB7XHJcbiAgICAgICAgY29uc3QgaW5mbyA9IHRoaXMuZGRzLmdldERldmljZUluZm8oKTtcclxuICAgICAgICB0aGlzLmNyYXdsZXIgPSAvKGJvdHxnb29nbGV8YmFpZHV8YmluZ3xtc258ZHVja2R1Y2tib3R8dGVvbWF8c2x1cnB8eWFuZGV4fGxpZ2h0aG91c2V8YW5ndWxhci11bml2ZXJzYWx8UFRTVCkvZ2kudGVzdChpbmZvLnVzZXJBZ2VudCk7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -0,0 +1,40 @@
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=
@@ -0,0 +1,100 @@
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
+ }
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXkudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmd4LXV0aWxzL3V0aWxzL2FycmF5LnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxNQUFNLE9BQU8sVUFBVTtJQUVuQixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQVUsRUFBRSxHQUFHLEtBQVk7UUFDbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzNFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ25DLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1NBQy9DO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBVSxFQUFFLEdBQVc7UUFDaEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2pDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxZQUFZLE1BQU0sRUFBRTtnQkFDMUIsTUFBTSxLQUFLLEdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM3QixJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO29CQUFFLE9BQU8sSUFBSSxDQUFDO2FBQ3BDO1NBQ0o7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsTUFBTSxDQUFDLEdBQUcsQ0FBSSxHQUFRLEVBQUUsRUFBd0I7UUFDNUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzNFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2pDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFBRSxPQUFPLElBQUksQ0FBQztTQUMvQjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBSSxDQUFJLEdBQVEsRUFBRSxRQUFnQixFQUFFLFFBQWdCO1FBQ3ZELElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3pDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFDMUIsT0FBTyxRQUFRLEdBQUcsQ0FBQyxFQUFFO1lBQ2pCLFFBQVEsSUFBSSxNQUFNLENBQUM7U0FDdEI7UUFDRCxPQUFPLFFBQVEsR0FBRyxDQUFDLEVBQUU7WUFDakIsUUFBUSxJQUFJLE1BQU0sQ0FBQztTQUN0QjtRQUNELElBQUksUUFBUSxJQUFJLE1BQU0sRUFBRTtZQUNwQixJQUFJLENBQUMsR0FBRyxRQUFRLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUM5QixPQUFPLENBQUMsRUFBRSxFQUFFO2dCQUNSLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDdkI7U0FDSjtRQUNELEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBVTtRQUN0QixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQUUsT0FBTyxNQUFNLENBQUM7UUFDN0MsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3RDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdkI7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQsTUFBTSxDQUFDLEdBQUcsQ0FBSSxHQUFRLEVBQUUsRUFBdUM7UUFDM0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDM0MsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDO1FBQ2xDLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztRQUNsQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNqQyxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzlCLElBQUksT0FBTyxHQUFHLEdBQUcsSUFBSSxNQUFNLEtBQUssSUFBSSxFQUFFO2dCQUNsQyxHQUFHLEdBQUcsT0FBTyxDQUFDO2dCQUNkLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDbkI7U0FDSjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxNQUFNLENBQUMsR0FBRyxDQUFJLEdBQVEsRUFBRSxFQUF1QztRQUMzRCxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUMzQyxJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7UUFDbEMsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2pDLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDOUIsSUFBSSxPQUFPLEdBQUcsR0FBRyxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUU7Z0JBQ2xDLEdBQUcsR0FBRyxPQUFPLENBQUM7Z0JBQ2QsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNuQjtTQUNKO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUksR0FBUSxFQUFFLElBQVk7UUFDbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDekMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQTtRQUNqQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksSUFBSSxFQUFFO1lBQ3ZDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUE7U0FDdEM7UUFDRCxPQUFPLE1BQU0sQ0FBQTtJQUNqQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge09iamVjdFV0aWxzfSBmcm9tIFwiLi9vYmplY3QudXRpbHNcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBBcnJheVV0aWxzIHtcclxuXHJcbiAgICBzdGF0aWMgaGFzKGFycjogYW55W10sIC4uLml0ZW1zOiBhbnlbXSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghT2JqZWN0VXRpbHMuaXNBcnJheShhcnIpIHx8ICFPYmplY3RVdGlscy5pc0FycmF5KGl0ZW1zKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGFyci5pbmRleE9mKGl0ZW1zW2ldKSA+PSAwKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBtYXRjaChhcnI6IGFueVtdLCBzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghT2JqZWN0VXRpbHMuaXNBcnJheShhcnIpIHx8ICFPYmplY3RVdGlscy5pc1N0cmluZyhzdHIpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGFycltpXSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVnZXggPSA8UmVnRXhwPmFycltpXTtcclxuICAgICAgICAgICAgICAgIGlmIChyZWdleC50ZXN0KHN0cikpIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgYW55PFQ+KGFycjogVFtdLCBjYjogKGl0ZW06IFQpID0+IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIU9iamVjdFV0aWxzLmlzQXJyYXkoYXJyKSB8fCAhT2JqZWN0VXRpbHMuaXNGdW5jdGlvbihjYikpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoY2IoYXJyW2ldKSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgbW92ZTxUPihhcnI6IFRbXSwgb2xkSW5kZXg6IG51bWJlciwgbmV3SW5kZXg6IG51bWJlcik6IFRbXSB7XHJcbiAgICAgICAgaWYgKCFPYmplY3RVdGlscy5pc0FycmF5KGFycikpIHJldHVybiBbXTtcclxuICAgICAgICBjb25zdCBsZW5ndGggPSBhcnIubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlIChvbGRJbmRleCA8IDApIHtcclxuICAgICAgICAgICAgb2xkSW5kZXggKz0gbGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgICB3aGlsZSAobmV3SW5kZXggPCAwKSB7XHJcbiAgICAgICAgICAgIG5ld0luZGV4ICs9IGxlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5ld0luZGV4ID49IGxlbmd0aCkge1xyXG4gICAgICAgICAgICBsZXQgayA9IG5ld0luZGV4IC0gbGVuZ3RoICsgMTtcclxuICAgICAgICAgICAgd2hpbGUgKGstLSkge1xyXG4gICAgICAgICAgICAgICAgYXJyLnB1c2godW5kZWZpbmVkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhcnIuc3BsaWNlKG5ld0luZGV4LCAwLCBhcnIuc3BsaWNlKG9sZEluZGV4LCAxKVswXSk7XHJcbiAgICAgICAgcmV0dXJuIGFycjtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgcmV2ZXJzZWQoYXJyOiBhbnlbXSk6IGFueVtdIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcclxuICAgICAgICBpZiAoIU9iamVjdFV0aWxzLmlzQXJyYXkoYXJyKSkgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICBmb3IgKGxldCBpID0gYXJyLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGFycltpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIG1pbjxUPihhcnI6IFRbXSwgY2I6IChpdGVtOiBULCBpbmRleD86IG51bWJlcikgPT4gbnVtYmVyKTogVCB7XHJcbiAgICAgICAgaWYgKCFPYmplY3RVdGlscy5pc0FycmF5KGFycikpIHJldHVybiBudWxsO1xyXG4gICAgICAgIGxldCBtaW4gPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gbnVsbDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gY2IoYXJyW2ldLCBpKTtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnQgPCBtaW4gfHwgcmVzdWx0ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBtaW4gPSBjdXJyZW50O1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gYXJyW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIG1heDxUPihhcnI6IFRbXSwgY2I6IChpdGVtOiBULCBpbmRleD86IG51bWJlcikgPT4gbnVtYmVyKTogVCB7XHJcbiAgICAgICAgaWYgKCFPYmplY3RVdGlscy5pc0FycmF5KGFycikpIHJldHVybiBudWxsO1xyXG4gICAgICAgIGxldCBtYXggPSBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUjtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gbnVsbDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gY2IoYXJyW2ldLCBpKTtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnQgPiBtYXggfHwgcmVzdWx0ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBtYXggPSBjdXJyZW50O1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gYXJyW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGNodW5rPFQ+KGFycjogVFtdLCBzaXplOiBudW1iZXIpOiBBcnJheTxUW10+IHtcclxuICAgICAgICBpZiAoIU9iamVjdFV0aWxzLmlzQXJyYXkoYXJyKSkgcmV0dXJuIFtdO1xyXG4gICAgICAgIHNpemUgPSBNYXRoLm1heCgxLCBzaXplKTtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBbXVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSArPSBzaXplKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGFyci5zbGljZShpLCBpICsgc2l6ZSkpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHRcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,181 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { Inject, Injectable, Injector } from "@angular/core";
11
+ import { AUTH_SERVICE, FactoryDependencies } from "../common-types";
12
+ import { ReflectUtils } from "./reflect.utils";
13
+ import { ObjectUtils } from "./object.utils";
14
+ import { StateService } from "../services/state.service";
15
+ import * as i0 from "@angular/core";
16
+ import * as i1 from "../services/state.service";
17
+ export class AuthGuard {
18
+ constructor(injector, state, auth) {
19
+ this.injector = injector;
20
+ this.state = state;
21
+ this.auth = auth;
22
+ }
23
+ static guardAuthenticated(auth) {
24
+ return Promise.resolve(auth.isAuthenticated);
25
+ }
26
+ static guardNotAuthenticated(auth) {
27
+ return Promise.resolve(!auth.isAuthenticated);
28
+ }
29
+ static guardNothing() {
30
+ return Promise.resolve(true);
31
+ }
32
+ static guardAuthField(auth, expression = `auth.isAuthenticated`) {
33
+ // @dynamic
34
+ const lambda = () => {
35
+ return Promise.resolve(ObjectUtils.evaluate(expression, { auth }));
36
+ };
37
+ return lambda;
38
+ }
39
+ static guardStateField(state, expression = `state.data`) {
40
+ // @dynamic
41
+ const lambda = () => {
42
+ return Promise.resolve(ObjectUtils.evaluate(expression, { state }));
43
+ };
44
+ return lambda;
45
+ }
46
+ static guardAuthStateField(auth, state, expression = `auth.isAuthenticated`) {
47
+ // @dynamic
48
+ const lambda = () => {
49
+ return Promise.resolve(ObjectUtils.evaluate(expression, { auth, state }));
50
+ };
51
+ return lambda;
52
+ }
53
+ static wildRouteMatch(segments) {
54
+ return { consumed: segments };
55
+ }
56
+ static noRouteMatch() {
57
+ return null;
58
+ }
59
+ checkRouteMenu(route) {
60
+ if (!route.data || !route.data.name)
61
+ return Promise.resolve(false);
62
+ return this.checkRoute(route);
63
+ }
64
+ checkRoute(route, next) {
65
+ const routeData = route.data || {};
66
+ if (!routeData.guards)
67
+ return Promise.resolve(!route.canActivate || this.auth.isAuthenticated);
68
+ return new Promise(resolve => {
69
+ const guards = routeData.guards.map(g => {
70
+ const guard = ReflectUtils.resolve(g, this.injector);
71
+ return guard(this.auth, route, next);
72
+ });
73
+ Promise.all(guards).then(results => {
74
+ resolve(results.indexOf(false) < 0);
75
+ });
76
+ });
77
+ }
78
+ canActivate(next, state) {
79
+ const route = next.routeConfig;
80
+ return new Promise(resolve => {
81
+ this.auth.checkAuthenticated().then(() => {
82
+ this.checkRoute(route, next).then(hasRights => {
83
+ resolve(hasRights);
84
+ if (!hasRights) {
85
+ this.getReturnState(route).then(returnState => {
86
+ if (!returnState)
87
+ return;
88
+ this.state.navigate(returnState, { queryParams: next.queryParams });
89
+ });
90
+ }
91
+ });
92
+ });
93
+ });
94
+ }
95
+ getConfig(route, config, path) {
96
+ if (!config)
97
+ return null;
98
+ const match = config.findIndex(t => t == route);
99
+ if (match >= 0)
100
+ return config;
101
+ for (const subConfig of config) {
102
+ if (subConfig.path)
103
+ path.push(subConfig.path);
104
+ const loadedChildren = (subConfig["_loadedConfig"] || { routes: null }).routes;
105
+ const match = this.getConfig(route, subConfig.children || loadedChildren, path);
106
+ if (!match) {
107
+ if (subConfig.path)
108
+ path.length -= 1;
109
+ continue;
110
+ }
111
+ return match;
112
+ }
113
+ return null;
114
+ }
115
+ getReturnState(route) {
116
+ if (!route)
117
+ return Promise.resolve(null);
118
+ if (ObjectUtils.isObject(route.data) && ObjectUtils.isArray(route.data.returnState)) {
119
+ return Promise.resolve(route.data.returnState);
120
+ }
121
+ const path = [];
122
+ const config = this.getConfig(route, this.state.routerConfig, path);
123
+ return new Promise(resolve => {
124
+ this.getReturnStateRecursive(config).then(rs => {
125
+ if (!ObjectUtils.isArray(rs)) {
126
+ resolve(rs);
127
+ return;
128
+ }
129
+ resolve(path.concat(rs));
130
+ });
131
+ });
132
+ }
133
+ getReturnStateRecursive(config, c = 0) {
134
+ if (!config || c >= config.length)
135
+ return Promise.resolve(null);
136
+ return new Promise(resolve => {
137
+ const route = config[c];
138
+ const check = !route.component ? Promise.resolve(false) : this.checkRoute(route);
139
+ check.then(res => {
140
+ if (res) {
141
+ resolve([route.path]);
142
+ return;
143
+ }
144
+ this.getReturnStateRecursive(config, c + 1).then(resolve);
145
+ });
146
+ });
147
+ }
148
+ }
149
+ AuthGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: AuthGuard, deps: [{ token: Injector }, { token: StateService }, { token: AUTH_SERVICE }], target: i0.ɵɵFactoryTarget.Injectable });
150
+ AuthGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: AuthGuard });
151
+ __decorate([
152
+ FactoryDependencies(AUTH_SERVICE),
153
+ __metadata("design:type", Function),
154
+ __metadata("design:paramtypes", [Object, String]),
155
+ __metadata("design:returntype", Function)
156
+ ], AuthGuard, "guardAuthField", null);
157
+ __decorate([
158
+ FactoryDependencies(StateService),
159
+ __metadata("design:type", Function),
160
+ __metadata("design:paramtypes", [StateService, String]),
161
+ __metadata("design:returntype", Function)
162
+ ], AuthGuard, "guardStateField", null);
163
+ __decorate([
164
+ FactoryDependencies(AUTH_SERVICE, StateService),
165
+ __metadata("design:type", Function),
166
+ __metadata("design:paramtypes", [Object, StateService, String]),
167
+ __metadata("design:returntype", Function)
168
+ ], AuthGuard, "guardAuthStateField", null);
169
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: AuthGuard, decorators: [{
170
+ type: Injectable
171
+ }], ctorParameters: function () { return [{ type: i0.Injector, decorators: [{
172
+ type: Inject,
173
+ args: [Injector]
174
+ }] }, { type: i1.StateService, decorators: [{
175
+ type: Inject,
176
+ args: [StateService]
177
+ }] }, { type: undefined, decorators: [{
178
+ type: Inject,
179
+ args: [AUTH_SERVICE]
180
+ }] }]; } });
181
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9uZ3gtdXRpbHMvdXRpbHMvYXV0aC5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFM0QsT0FBTyxFQUFDLFlBQVksRUFBRSxtQkFBbUIsRUFBdUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQzs7O0FBR3ZELE1BQU0sT0FBTyxTQUFTO0lBaURsQixZQUF1QyxRQUFrQixFQUNkLEtBQW1CLEVBQ25CLElBQWtCO1FBRnRCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDZCxVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQ25CLFNBQUksR0FBSixJQUFJLENBQWM7SUFDN0QsQ0FBQztJQWxERCxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBa0I7UUFDeEMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsTUFBTSxDQUFDLHFCQUFxQixDQUFDLElBQWtCO1FBQzNDLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsTUFBTSxDQUFDLFlBQVk7UUFDZixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUdELE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBa0IsRUFBRSxhQUFxQixzQkFBc0I7UUFDakYsV0FBVztRQUNYLE1BQU0sTUFBTSxH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OzBCQUNmLE1BQU07MkJBQUMsWUFBWTs7MEJBQ25CLE1BQU07MkJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rvcn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBDYW5BY3RpdmF0ZSwgUm91dGVyU3RhdGVTbmFwc2hvdCwgVXJsU2VnbWVudH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQge0FVVEhfU0VSVklDRSwgRmFjdG9yeURlcGVuZGVuY2llcywgSUF1dGhTZXJ2aWNlLCBJUm91dGUsIFJvdXRlVmFsaWRhdG9yfSBmcm9tIFwiLi4vY29tbW9uLXR5cGVzXCI7XHJcbmltcG9ydCB7UmVmbGVjdFV0aWxzfSBmcm9tIFwiLi9yZWZsZWN0LnV0aWxzXCI7XHJcbmltcG9ydCB7T2JqZWN0VXRpbHN9IGZyb20gXCIuL29iamVjdC51dGlsc1wiO1xyXG5pbXBvcnQge1N0YXRlU2VydmljZX0gZnJvbSBcIi4uL3NlcnZpY2VzL3N0YXRlLnNlcnZpY2VcIjtcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEF1dGhHdWFyZCBpbXBsZW1lbnRzIENhbkFjdGl2YXRlIHtcclxuXHJcbiAgICBzdGF0aWMgZ3VhcmRBdXRoZW50aWNhdGVkKGF1dGg6IElBdXRoU2VydmljZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoYXV0aC5pc0F1dGhlbnRpY2F0ZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBndWFyZE5vdEF1dGhlbnRpY2F0ZWQoYXV0aDogSUF1dGhTZXJ2aWNlKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSghYXV0aC5pc0F1dGhlbnRpY2F0ZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBndWFyZE5vdGhpbmcoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBARmFjdG9yeURlcGVuZGVuY2llcyhBVVRIX1NFUlZJQ0UpXHJcbiAgICBzdGF0aWMgZ3VhcmRBdXRoRmllbGQoYXV0aDogSUF1dGhTZXJ2aWNlLCBleHByZXNzaW9uOiBzdHJpbmcgPSBgYXV0aC5pc0F1dGhlbnRpY2F0ZWRgKTogUm91dGVWYWxpZGF0b3Ige1xyXG4gICAgICAgIC8vIEBkeW5hbWljXHJcbiAgICAgICAgY29uc3QgbGFtYmRhID0gKCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKE9iamVjdFV0aWxzLmV2YWx1YXRlKGV4cHJlc3Npb24sIHthdXRofSkpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGxhbWJkYTtcclxuICAgIH1cclxuXHJcbiAgICBARmFjdG9yeURlcGVuZGVuY2llcyhTdGF0ZVNlcnZpY2UpXHJcbiAgICBzdGF0aWMgZ3VhcmRTdGF0ZUZpZWxkKHN0YXRlOiBTdGF0ZVNlcnZpY2UsIGV4cHJlc3Npb246IHN0cmluZyA9IGBzdGF0ZS5kYXRhYCk6IFJvdXRlVmFsaWRhdG9yIHtcclxuICAgICAgICAvLyBAZHluYW1pY1xyXG4gICAgICAgIGNvbnN0IGxhbWJkYSA9ICgpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShPYmplY3RVdGlscy5ldmFsdWF0ZShleHByZXNzaW9uLCB7c3RhdGV9KSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gbGFtYmRhO1xyXG4gICAgfVxyXG5cclxuICAgIEBGYWN0b3J5RGVwZW5kZW5jaWVzKEFVVEhfU0VSVklDRSwgU3RhdGVTZXJ2aWNlKVxyXG4gICAgc3RhdGljIGd1YXJkQXV0aFN0YXRlRmllbGQoYXV0aDogSUF1dGhTZXJ2aWNlLCBzdGF0ZTogU3RhdGVTZXJ2aWNlLCBleHByZXNzaW9uOiBzdHJpbmcgPSBgYXV0aC5pc0F1dGhlbnRpY2F0ZWRgKTogUm91dGVWYWxpZGF0b3Ige1xyXG4gICAgICAgIC8vIEBkeW5hbWljXHJcbiAgICAgICAgY29uc3QgbGFtYmRhID0gKCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKE9iamVjdFV0aWxzLmV2YWx1YXRlKGV4cHJlc3Npb24sIHthdXRoLCBzdGF0ZX0pKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBsYW1iZGE7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHdpbGRSb3V0ZU1hdGNoKHNlZ21lbnRzOiBVcmxTZWdtZW50W10pIHtcclxuICAgICAgICByZXR1cm4ge2NvbnN1bWVkOiBzZWdtZW50c307XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIG5vUm91dGVNYXRjaCgpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KEluamVjdG9yKSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgICAgICAgICBASW5qZWN0KFN0YXRlU2VydmljZSkgcmVhZG9ubHkgc3RhdGU6IFN0YXRlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIEBJbmplY3QoQVVUSF9TRVJWSUNFKSByZWFkb25seSBhdXRoOiBJQXV0aFNlcnZpY2UpIHtcclxuICAgIH1cclxuXHJcbiAgICBjaGVja1JvdXRlTWVudShyb3V0ZTogSVJvdXRlKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgaWYgKCFyb3V0ZS5kYXRhIHx8ICFyb3V0ZS5kYXRhLm5hbWUpIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrUm91dGUocm91dGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrUm91dGUocm91dGU6IElSb3V0ZSwgbmV4dD86IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICBjb25zdCByb3V0ZURhdGEgPSByb3V0ZS5kYXRhIHx8IHt9O1xyXG4gICAgICAgIGlmICghcm91dGVEYXRhLmd1YXJkcylcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSghcm91dGUuY2FuQWN0aXZhdGUgfHwgdGhpcy5hdXRoLmlzQXV0aGVudGljYXRlZCk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KHJlc29sdmUgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBndWFyZHMgPSByb3V0ZURhdGEuZ3VhcmRzLm1hcChnID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGd1YXJkID0gUmVmbGVjdFV0aWxzLnJlc29sdmU8Um91dGVWYWxpZGF0b3I+KGcsIHRoaXMuaW5qZWN0b3IpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGd1YXJkKHRoaXMuYXV0aCwgcm91dGUsIG5leHQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgUHJvbWlzZS5hbGwoZ3VhcmRzKS50aGVuKHJlc3VsdHMgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHRzLmluZGV4T2YoZmFsc2UpIDwgMCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNhbkFjdGl2YXRlKG5leHQ6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90KTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgY29uc3Qgcm91dGUgPSA8SVJvdXRlPm5leHQucm91dGVDb25maWc7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KHJlc29sdmUgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmF1dGguY2hlY2tBdXRoZW50aWNhdGVkKCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrUm91dGUocm91dGUsIG5leHQpLnRoZW4oaGFzUmlnaHRzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGhhc1JpZ2h0cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNSaWdodHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRSZXR1cm5TdGF0ZShyb3V0ZSkudGhlbihyZXR1cm5TdGF0ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJldHVyblN0YXRlKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLm5hdmlnYXRlKHJldHVyblN0YXRlLCB7cXVlcnlQYXJhbXM6IG5leHQucXVlcnlQYXJhbXN9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENvbmZpZyhyb3V0ZTogSVJvdXRlLCBjb25maWc6IElSb3V0ZVtdLCBwYXRoOiBzdHJpbmdbXSk6IElSb3V0ZVtdIHtcclxuICAgICAgICBpZiAoIWNvbmZpZykgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBjb25maWcuZmluZEluZGV4KHQgPT4gdCA9PSByb3V0ZSk7XHJcbiAgICAgICAgaWYgKG1hdGNoID49IDApIHJldHVybiBjb25maWc7XHJcbiAgICAgICAgZm9yIChjb25zdCBzdWJDb25maWcgb2YgY29uZmlnKSB7XHJcbiAgICAgICAgICAgIGlmIChzdWJDb25maWcucGF0aClcclxuICAgICAgICAgICAgICAgIHBhdGgucHVzaChzdWJDb25maWcucGF0aCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGxvYWRlZENoaWxkcmVuID0gKHN1YkNvbmZpZ1tcIl9sb2FkZWRDb25maWdcIl0gfHwge3JvdXRlczogbnVsbH0pLnJvdXRlcztcclxuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSB0aGlzLmdldENvbmZpZyhyb3V0ZSwgc3ViQ29uZmlnLmNoaWxkcmVuIHx8IGxvYWRlZENoaWxkcmVuLCBwYXRoKTtcclxuICAgICAgICAgICAgaWYgKCFtYXRjaCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHN1YkNvbmZpZy5wYXRoKVxyXG4gICAgICAgICAgICAgICAgICAgIHBhdGgubGVuZ3RoIC09IDE7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbWF0Y2g7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFJldHVyblN0YXRlKHJvdXRlOiBJUm91dGUpOiBQcm9taXNlPHN0cmluZ1tdPiB7XHJcbiAgICAgICAgaWYgKCFyb3V0ZSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcclxuICAgICAgICBpZiAoT2JqZWN0VXRpbHMuaXNPYmplY3Qocm91dGUuZGF0YSkgJiYgT2JqZWN0VXRpbHMuaXNBcnJheShyb3V0ZS5kYXRhLnJldHVyblN0YXRlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJvdXRlLmRhdGEucmV0dXJuU3RhdGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBwYXRoID0gW107XHJcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5nZXRDb25maWcocm91dGUsIHRoaXMuc3RhdGUucm91dGVyQ29uZmlnLCBwYXRoKTtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8c3RyaW5nW10+KHJlc29sdmUgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmdldFJldHVyblN0YXRlUmVjdXJzaXZlKGNvbmZpZykudGhlbihycyA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIU9iamVjdFV0aWxzLmlzQXJyYXkocnMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShycyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShwYXRoLmNvbmNhdChycykpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFJldHVyblN0YXRlUmVjdXJzaXZlKGNvbmZpZzogSVJvdXRlW10sIGM6IG51bWJlciA9IDApOiBQcm9taXNlPHN0cmluZ1tdPiB7XHJcbiAgICAgICAgaWYgKCFjb25maWcgfHwgYyA+PSBjb25maWcubGVuZ3RoKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxzdHJpbmdbXT4ocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJvdXRlID0gY29uZmlnW2NdO1xyXG4gICAgICAgICAgICBjb25zdCBjaGVjayA9ICFyb3V0ZS5jb21wb25lbnQgPyBQcm9taXNlLnJlc29sdmUoZmFsc2UpIDogdGhpcy5jaGVja1JvdXRlKHJvdXRlKTtcclxuICAgICAgICAgICAgY2hlY2sudGhlbihyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoW3JvdXRlLnBhdGhdKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFJldHVyblN0YXRlUmVjdXJzaXZlKGNvbmZpZywgYyArIDEpLnRoZW4ocmVzb2x2ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==