@stemy/ngx-utils 13.6.17 → 17.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/ngx-utils/common-types.mjs +123 -0
- package/esm2022/ngx-utils/components/dynamic-table/dynamic-table.component.mjs +210 -0
- package/esm2022/ngx-utils/components/pagination-menu/pagination-menu.component.mjs +101 -0
- package/esm2022/ngx-utils/components/unordered-list/unordered-list.component.mjs +65 -0
- package/esm2022/ngx-utils/directives/async-method.base.mjs +82 -0
- package/{esm2020 → esm2022}/ngx-utils/directives/async-method.directive.mjs +21 -21
- package/esm2022/ngx-utils/directives/background.directive.mjs +51 -0
- package/{esm2020 → esm2022}/ngx-utils/directives/dynamic-table-template.directive.mjs +20 -20
- package/{esm2020 → esm2022}/ngx-utils/directives/global-template.directive.mjs +30 -30
- package/esm2022/ngx-utils/directives/icon.directive.mjs +67 -0
- package/esm2022/ngx-utils/directives/ngx-template-outlet.directive.mjs +90 -0
- package/{esm2020 → esm2022}/ngx-utils/directives/pagination-item.directive.mjs +34 -34
- package/esm2022/ngx-utils/directives/pagination.directive.mjs +84 -0
- package/esm2022/ngx-utils/directives/resource-if.directive.mjs +50 -0
- package/esm2022/ngx-utils/directives/sticky-class.directive.mjs +34 -0
- package/{esm2020 → esm2022}/ngx-utils/directives/sticky.directive.mjs +55 -55
- package/{esm2020 → esm2022}/ngx-utils/directives/unordered-list-item.directive.mjs +79 -79
- package/{esm2020 → esm2022}/ngx-utils/directives/unordered-list-template.directive.mjs +20 -20
- package/{esm2020 → esm2022}/ngx-utils/ngx-utils.imports.mjs +174 -174
- package/esm2022/ngx-utils/ngx-utils.module.mjs +202 -0
- package/esm2022/ngx-utils/pipes/chunk.pipe.mjs +25 -0
- package/{esm2020 → esm2022}/ngx-utils/pipes/entries.pipe.mjs +28 -28
- package/{esm2020 → esm2022}/ngx-utils/pipes/extra-item-properties.pipe.mjs +31 -31
- package/esm2022/ngx-utils/pipes/filter.pipe.mjs +37 -0
- package/esm2022/ngx-utils/pipes/find.pipe.mjs +29 -0
- package/{esm2020 → esm2022}/ngx-utils/pipes/format-number.pipe.mjs +21 -21
- package/{esm2020 → esm2022}/ngx-utils/pipes/get-offset.pipe.mjs +17 -17
- package/{esm2020 → esm2022}/ngx-utils/pipes/get-type.pipe.mjs +16 -16
- package/esm2022/ngx-utils/pipes/global-template.pipe.mjs +41 -0
- package/{esm2020 → esm2022}/ngx-utils/pipes/group-by.pipe.mjs +27 -27
- package/{esm2020 → esm2022}/ngx-utils/pipes/is-type.pipe.mjs +16 -16
- package/{esm2020 → esm2022}/ngx-utils/pipes/join.pipe.mjs +19 -19
- package/{esm2020 → esm2022}/ngx-utils/pipes/keys.pipe.mjs +22 -22
- package/{esm2020 → esm2022}/ngx-utils/pipes/map.pipe.mjs +29 -29
- package/{esm2020 → esm2022}/ngx-utils/pipes/max.pipe.mjs +26 -26
- package/{esm2020 → esm2022}/ngx-utils/pipes/min.pipe.mjs +26 -26
- package/{esm2020 → esm2022}/ngx-utils/pipes/pop.pipe.mjs +16 -16
- package/{esm2020 → esm2022}/ngx-utils/pipes/reduce.pipe.mjs +30 -30
- package/esm2022/ngx-utils/pipes/remap.pipe.mjs +32 -0
- package/{esm2020 → esm2022}/ngx-utils/pipes/replace.pipe.mjs +17 -17
- package/esm2022/ngx-utils/pipes/reverse.pipe.mjs +24 -0
- package/{esm2020 → esm2022}/ngx-utils/pipes/round.pipe.mjs +21 -21
- package/esm2022/ngx-utils/pipes/safe-html.pipe.mjs +34 -0
- package/{esm2020 → esm2022}/ngx-utils/pipes/shift.pipe.mjs +16 -16
- package/{esm2020 → esm2022}/ngx-utils/pipes/split.pipe.mjs +16 -16
- package/esm2022/ngx-utils/pipes/translate.pipe.mjs +86 -0
- package/{esm2020 → esm2022}/ngx-utils/pipes/values.pipe.mjs +22 -22
- package/esm2022/ngx-utils/plugins/resize-event.plugin.mjs +78 -0
- package/esm2022/ngx-utils/plugins/scroll-event.plugin.mjs +39 -0
- package/{esm2020 → esm2022}/ngx-utils/services/acl.service.mjs +84 -83
- package/esm2022/ngx-utils/services/api.service.mjs +42 -0
- package/{esm2020 → esm2022}/ngx-utils/services/auth.service.mjs +13 -13
- package/esm2022/ngx-utils/services/base-http.client.mjs +47 -0
- package/esm2022/ngx-utils/services/base-http.service.mjs +305 -0
- package/esm2022/ngx-utils/services/config.service.mjs +130 -0
- package/esm2022/ngx-utils/services/error-handler.service.mjs +49 -0
- package/{esm2020 → esm2022}/ngx-utils/services/events.service.mjs +26 -26
- package/{esm2020 → esm2022}/ngx-utils/services/formatter.service.mjs +49 -49
- package/esm2022/ngx-utils/services/global-template.service.mjs +37 -0
- package/esm2022/ngx-utils/services/icon.service.mjs +26 -0
- package/esm2022/ngx-utils/services/language.service.mjs +124 -0
- package/{esm2020 → esm2022}/ngx-utils/services/local-http.service.mjs +47 -47
- package/{esm2020 → esm2022}/ngx-utils/services/open-api.service.mjs +40 -40
- package/{esm2020 → esm2022}/ngx-utils/services/promise.service.mjs +55 -55
- package/esm2022/ngx-utils/services/state.service.mjs +177 -0
- package/{esm2020 → esm2022}/ngx-utils/services/static-language.service.mjs +166 -166
- package/esm2022/ngx-utils/services/storage.service.mjs +49 -0
- package/{esm2020 → esm2022}/ngx-utils/services/toaster.service.mjs +32 -32
- package/esm2022/ngx-utils/services/translated-url.serializer.mjs +73 -0
- package/esm2022/ngx-utils/services/universal.service.mjs +81 -0
- package/{esm2020 → esm2022}/ngx-utils/services/wasm.service.mjs +46 -46
- package/esm2022/ngx-utils/utils/ajax-request-handler.mjs +40 -0
- package/esm2022/ngx-utils/utils/array.utils.mjs +107 -0
- package/esm2022/ngx-utils/utils/auth.guard.mjs +181 -0
- package/esm2022/ngx-utils/utils/cached-factory.mjs +30 -0
- package/esm2022/ngx-utils/utils/canvas.utils.mjs +388 -0
- package/esm2022/ngx-utils/utils/date.utils.mjs +29 -0
- package/{esm2020 → esm2022}/ngx-utils/utils/file-system.mjs +24 -24
- package/esm2022/ngx-utils/utils/file.utils.mjs +90 -0
- package/{esm2020 → esm2022}/ngx-utils/utils/generic-value.mjs +20 -20
- package/esm2022/ngx-utils/utils/geometry.mjs +132 -0
- package/{esm2020 → esm2022}/ngx-utils/utils/initializer.mjs +20 -20
- package/esm2022/ngx-utils/utils/jsonfn.mjs +45 -0
- package/esm2022/ngx-utils/utils/loader.utils.mjs +55 -0
- package/esm2022/ngx-utils/utils/math.utils.mjs +44 -0
- package/esm2022/ngx-utils/utils/object.utils.mjs +320 -0
- package/{esm2020 → esm2022}/ngx-utils/utils/observable.utils.mjs +63 -63
- package/esm2022/ngx-utils/utils/reflect.utils.mjs +33 -0
- package/esm2022/ngx-utils/utils/set.utils.mjs +20 -0
- package/esm2022/ngx-utils/utils/string.utils.mjs +41 -0
- package/{esm2020 → esm2022}/ngx-utils/utils/timer.utils.mjs +51 -51
- package/esm2022/ngx-utils/utils/unique.utils.mjs +24 -0
- package/esm2022/ngx-utils/utils/vector.mjs +77 -0
- package/esm2022/ngx-utils/utils/wasi.mjs +159 -0
- package/esm2022/ngx-utils/utils/wasm-worker-proxy.mjs +99 -0
- package/{esm2020 → esm2022}/ngx-utils/utils/with-options-provider.mjs +23 -23
- package/{esm2020 → esm2022}/public_api.mjs +93 -93
- package/{esm2020 → esm2022}/stemy-ngx-utils.mjs +4 -4
- package/esm2022/tools/config.mjs +71 -0
- package/{esm2020 → esm2022}/tools/public_api.mjs +1 -1
- package/{esm2020 → esm2022}/tools/stemy-ngx-utils-tools.mjs +4 -4
- package/{fesm2020 → fesm2022}/stemy-ngx-utils-tools.mjs +71 -71
- package/{fesm2015 → fesm2022}/stemy-ngx-utils-tools.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/stemy-ngx-utils.mjs +5639 -5636
- package/fesm2022/stemy-ngx-utils.mjs.map +1 -0
- package/{stemy-ngx-utils.d.ts → index.d.ts} +5 -5
- package/ng.mjs +5 -0
- package/ngx-utils/common-types.d.ts +378 -378
- package/ngx-utils/components/dynamic-table/dynamic-table.component.d.ts +56 -56
- package/ngx-utils/components/pagination-menu/pagination-menu.component.d.ts +31 -31
- package/ngx-utils/components/unordered-list/unordered-list.component.d.ts +25 -25
- package/ngx-utils/directives/async-method.base.d.ts +19 -19
- package/ngx-utils/directives/async-method.directive.d.ts +9 -9
- package/ngx-utils/directives/background.directive.d.ts +17 -17
- package/ngx-utils/directives/dynamic-table-template.directive.d.ts +11 -11
- package/ngx-utils/directives/global-template.directive.d.ts +13 -13
- package/ngx-utils/directives/icon.directive.d.ts +23 -23
- package/ngx-utils/directives/ngx-template-outlet.directive.d.ts +17 -17
- package/ngx-utils/directives/pagination-item.directive.d.ts +15 -15
- package/ngx-utils/directives/pagination.directive.d.ts +25 -25
- package/ngx-utils/directives/resource-if.directive.d.ts +19 -19
- package/ngx-utils/directives/sticky-class.directive.d.ts +15 -15
- package/ngx-utils/directives/sticky.directive.d.ts +19 -19
- package/ngx-utils/directives/unordered-list-item.directive.d.ts +28 -28
- package/ngx-utils/directives/unordered-list-template.directive.d.ts +11 -11
- package/ngx-utils/ngx-utils.imports.d.ts +74 -0
- package/ngx-utils/ngx-utils.module.d.ts +58 -58
- package/ngx-utils/pipes/chunk.pipe.d.ts +7 -7
- package/ngx-utils/pipes/entries.pipe.d.ts +12 -12
- package/ngx-utils/pipes/extra-item-properties.pipe.d.ts +8 -8
- package/ngx-utils/pipes/filter.pipe.d.ts +8 -8
- package/ngx-utils/pipes/find.pipe.d.ts +8 -8
- package/ngx-utils/pipes/format-number.pipe.d.ts +10 -10
- package/ngx-utils/pipes/get-offset.pipe.d.ts +7 -7
- package/ngx-utils/pipes/get-type.pipe.d.ts +7 -7
- package/ngx-utils/pipes/global-template.pipe.d.ts +16 -16
- package/ngx-utils/pipes/group-by.pipe.d.ts +8 -8
- package/ngx-utils/pipes/is-type.pipe.d.ts +7 -7
- package/ngx-utils/pipes/join.pipe.d.ts +7 -7
- package/ngx-utils/pipes/keys.pipe.d.ts +7 -7
- package/ngx-utils/pipes/map.pipe.d.ts +8 -8
- package/ngx-utils/pipes/max.pipe.d.ts +7 -7
- package/ngx-utils/pipes/min.pipe.d.ts +7 -7
- package/ngx-utils/pipes/pop.pipe.d.ts +7 -7
- package/ngx-utils/pipes/reduce.pipe.d.ts +8 -8
- package/ngx-utils/pipes/remap.pipe.d.ts +7 -7
- package/ngx-utils/pipes/replace.pipe.d.ts +7 -7
- package/ngx-utils/pipes/reverse.pipe.d.ts +7 -7
- package/ngx-utils/pipes/round.pipe.d.ts +10 -10
- package/ngx-utils/pipes/safe-html.pipe.d.ts +10 -10
- package/ngx-utils/pipes/shift.pipe.d.ts +7 -7
- package/ngx-utils/pipes/split.pipe.d.ts +7 -7
- package/ngx-utils/pipes/translate.pipe.d.ts +19 -19
- package/ngx-utils/pipes/values.pipe.d.ts +7 -7
- package/ngx-utils/plugins/resize-event.plugin.d.ts +17 -17
- package/ngx-utils/plugins/scroll-event.plugin.d.ts +13 -13
- package/ngx-utils/services/acl.service.d.ts +14 -14
- package/ngx-utils/services/api.service.d.ts +17 -17
- package/ngx-utils/services/auth.service.d.ts +8 -8
- package/ngx-utils/services/base-http.client.d.ts +15 -15
- package/ngx-utils/services/base-http.service.d.ts +53 -53
- package/ngx-utils/services/config.service.d.ts +30 -30
- package/ngx-utils/services/error-handler.service.d.ts +13 -13
- package/ngx-utils/services/events.service.d.ts +14 -14
- package/ngx-utils/services/formatter.service.d.ts +15 -15
- package/ngx-utils/services/global-template.service.d.ts +19 -19
- package/ngx-utils/services/icon.service.d.ts +13 -13
- package/ngx-utils/services/language.service.d.ts +21 -21
- package/ngx-utils/services/local-http.service.d.ts +14 -14
- package/ngx-utils/services/open-api.service.d.ts +11 -11
- package/ngx-utils/services/promise.service.d.ts +19 -19
- package/ngx-utils/services/state.service.d.ts +49 -49
- package/ngx-utils/services/static-language.service.d.ts +46 -46
- package/ngx-utils/services/storage.service.d.ts +15 -15
- package/ngx-utils/services/toaster.service.d.ts +13 -13
- package/ngx-utils/services/translated-url.serializer.d.ts +19 -19
- package/ngx-utils/services/universal.service.d.ts +28 -28
- package/ngx-utils/services/wasm.service.d.ts +25 -25
- package/ngx-utils/utils/ajax-request-handler.d.ts +11 -11
- package/ngx-utils/utils/array.utils.d.ts +11 -11
- package/ngx-utils/utils/auth.guard.d.ts +29 -29
- package/ngx-utils/utils/cached-factory.d.ts +2 -2
- package/ngx-utils/utils/canvas.utils.d.ts +13 -13
- package/ngx-utils/utils/date.utils.d.ts +8 -8
- package/ngx-utils/utils/file-system.d.ts +16 -16
- package/ngx-utils/utils/file.utils.d.ts +14 -14
- package/ngx-utils/utils/generic-value.d.ts +8 -8
- package/ngx-utils/utils/geometry.d.ts +50 -50
- package/ngx-utils/utils/initializer.d.ts +12 -12
- package/ngx-utils/utils/jsonfn.d.ts +6 -6
- package/ngx-utils/utils/loader.utils.d.ts +7 -7
- package/ngx-utils/utils/math.utils.d.ts +8 -8
- package/ngx-utils/utils/object.utils.d.ts +35 -35
- package/ngx-utils/utils/observable.utils.d.ts +13 -13
- package/ngx-utils/utils/reflect.utils.d.ts +9 -9
- package/ngx-utils/utils/set.utils.d.ts +4 -4
- package/ngx-utils/utils/string.utils.d.ts +9 -9
- package/ngx-utils/utils/timer.utils.d.ts +6 -6
- package/ngx-utils/utils/unique.utils.d.ts +5 -5
- package/ngx-utils/utils/vector.d.ts +23 -23
- package/ngx-utils/utils/wasi.d.ts +26 -26
- package/ngx-utils/utils/wasm-worker-proxy.d.ts +17 -17
- package/ngx-utils/utils/with-options-provider.d.ts +3 -3
- package/package.json +21 -29
- package/public_api.d.ts +93 -93
- package/tools/config.d.ts +7 -7
- package/tools/{stemy-ngx-utils-tools.d.ts → index.d.ts} +5 -5
- package/tools/public_api.d.ts +1 -1
- package/esm2020/ngx-utils/common-types.mjs +0 -123
- package/esm2020/ngx-utils/components/dynamic-table/dynamic-table.component.mjs +0 -210
- package/esm2020/ngx-utils/components/pagination-menu/pagination-menu.component.mjs +0 -101
- package/esm2020/ngx-utils/components/unordered-list/unordered-list.component.mjs +0 -65
- package/esm2020/ngx-utils/directives/async-method.base.mjs +0 -82
- package/esm2020/ngx-utils/directives/background.directive.mjs +0 -51
- package/esm2020/ngx-utils/directives/icon.directive.mjs +0 -67
- package/esm2020/ngx-utils/directives/ngx-template-outlet.directive.mjs +0 -90
- package/esm2020/ngx-utils/directives/pagination.directive.mjs +0 -84
- package/esm2020/ngx-utils/directives/resource-if.directive.mjs +0 -50
- package/esm2020/ngx-utils/directives/sticky-class.directive.mjs +0 -34
- package/esm2020/ngx-utils/ngx-utils.module.mjs +0 -204
- package/esm2020/ngx-utils/pipes/chunk.pipe.mjs +0 -25
- package/esm2020/ngx-utils/pipes/filter.pipe.mjs +0 -37
- package/esm2020/ngx-utils/pipes/find.pipe.mjs +0 -29
- package/esm2020/ngx-utils/pipes/global-template.pipe.mjs +0 -41
- package/esm2020/ngx-utils/pipes/remap.pipe.mjs +0 -32
- package/esm2020/ngx-utils/pipes/reverse.pipe.mjs +0 -24
- package/esm2020/ngx-utils/pipes/safe-html.pipe.mjs +0 -34
- package/esm2020/ngx-utils/pipes/translate.pipe.mjs +0 -86
- package/esm2020/ngx-utils/plugins/resize-event.plugin.mjs +0 -78
- package/esm2020/ngx-utils/plugins/scroll-event.plugin.mjs +0 -39
- package/esm2020/ngx-utils/services/api.service.mjs +0 -42
- package/esm2020/ngx-utils/services/base-http.client.mjs +0 -47
- package/esm2020/ngx-utils/services/base-http.service.mjs +0 -305
- package/esm2020/ngx-utils/services/config.service.mjs +0 -130
- package/esm2020/ngx-utils/services/error-handler.service.mjs +0 -49
- package/esm2020/ngx-utils/services/global-template.service.mjs +0 -37
- package/esm2020/ngx-utils/services/icon.service.mjs +0 -26
- package/esm2020/ngx-utils/services/language.service.mjs +0 -124
- package/esm2020/ngx-utils/services/state.service.mjs +0 -173
- package/esm2020/ngx-utils/services/storage.service.mjs +0 -49
- package/esm2020/ngx-utils/services/translated-url.serializer.mjs +0 -73
- package/esm2020/ngx-utils/services/universal.service.mjs +0 -81
- package/esm2020/ngx-utils/utils/ajax-request-handler.mjs +0 -40
- package/esm2020/ngx-utils/utils/array.utils.mjs +0 -107
- package/esm2020/ngx-utils/utils/auth.guard.mjs +0 -181
- package/esm2020/ngx-utils/utils/cached-factory.mjs +0 -30
- package/esm2020/ngx-utils/utils/canvas.utils.mjs +0 -388
- package/esm2020/ngx-utils/utils/date.utils.mjs +0 -29
- package/esm2020/ngx-utils/utils/file.utils.mjs +0 -90
- package/esm2020/ngx-utils/utils/geometry.mjs +0 -132
- package/esm2020/ngx-utils/utils/jsonfn.mjs +0 -45
- package/esm2020/ngx-utils/utils/loader.utils.mjs +0 -55
- package/esm2020/ngx-utils/utils/math.utils.mjs +0 -44
- package/esm2020/ngx-utils/utils/object.utils.mjs +0 -320
- package/esm2020/ngx-utils/utils/reflect.utils.mjs +0 -33
- package/esm2020/ngx-utils/utils/set.utils.mjs +0 -20
- package/esm2020/ngx-utils/utils/string.utils.mjs +0 -41
- package/esm2020/ngx-utils/utils/unique.utils.mjs +0 -24
- package/esm2020/ngx-utils/utils/vector.mjs +0 -77
- package/esm2020/ngx-utils/utils/wasi.mjs +0 -159
- package/esm2020/ngx-utils/utils/wasm-worker-proxy.mjs +0 -99
- package/esm2020/tools/config.mjs +0 -71
- package/fesm2015/stemy-ngx-utils-tools.mjs +0 -77
- package/fesm2015/stemy-ngx-utils.mjs +0 -5894
- package/fesm2015/stemy-ngx-utils.mjs.map +0 -1
- package/fesm2020/stemy-ngx-utils-tools.mjs.map +0 -1
- package/fesm2020/stemy-ngx-utils.mjs.map +0 -1
- package/tools/package.json +0 -10
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { Inject, Injectable } from "@angular/core";
|
|
2
|
+
import { DefaultUrlSerializer, UrlSegment, UrlSegmentGroup, UrlTree } from "@angular/router";
|
|
3
|
+
import { LANGUAGE_SERVICE } from "../common-types";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class TranslatedUrlSerializer extends DefaultUrlSerializer {
|
|
6
|
+
constructor(language) {
|
|
7
|
+
super();
|
|
8
|
+
this.language = language;
|
|
9
|
+
this.cache = {};
|
|
10
|
+
}
|
|
11
|
+
serialize(tree) {
|
|
12
|
+
const copy = new UrlTree();
|
|
13
|
+
const dictionary = this.getDictionary(true);
|
|
14
|
+
copy.root = this.modifyTreeRecursive(tree.root, segment => {
|
|
15
|
+
segment.path = dictionary[segment.path] || segment.path;
|
|
16
|
+
});
|
|
17
|
+
copy.queryParams = tree.queryParams;
|
|
18
|
+
return super.serialize(copy);
|
|
19
|
+
}
|
|
20
|
+
parse(url) {
|
|
21
|
+
const tree = super.parse(url);
|
|
22
|
+
const dictionary = this.getDictionary(false);
|
|
23
|
+
tree.root = this.modifyTreeRecursive(tree.root, segment => {
|
|
24
|
+
segment.path = dictionary[segment.path] || segment.path;
|
|
25
|
+
});
|
|
26
|
+
return tree;
|
|
27
|
+
}
|
|
28
|
+
getDictionary(serialize) {
|
|
29
|
+
const method = serialize ? `serialize` : `parse`;
|
|
30
|
+
const key = `${this.language.currentLanguage}-${method}`;
|
|
31
|
+
if (!this.cache[key]) {
|
|
32
|
+
const dict = this.language.dictionary;
|
|
33
|
+
this.cache[key] = Object.keys(dict).reduce((res, key) => {
|
|
34
|
+
if (!key.startsWith("route."))
|
|
35
|
+
return res;
|
|
36
|
+
const value = dict[key];
|
|
37
|
+
key = key.replace("route.", "");
|
|
38
|
+
res[serialize ? key : value] = serialize ? value : key;
|
|
39
|
+
return res;
|
|
40
|
+
}, {});
|
|
41
|
+
}
|
|
42
|
+
return this.cache[key];
|
|
43
|
+
}
|
|
44
|
+
modifyTreeRecursive(segmentGroup, cb) {
|
|
45
|
+
if (!segmentGroup)
|
|
46
|
+
return null;
|
|
47
|
+
const childrenArr = [];
|
|
48
|
+
const children = Object.keys(segmentGroup.children || {}).reduce((res, key) => {
|
|
49
|
+
const child = this.modifyTreeRecursive(segmentGroup.children[key], cb);
|
|
50
|
+
childrenArr.push(child);
|
|
51
|
+
res[key] = child;
|
|
52
|
+
return res;
|
|
53
|
+
}, {});
|
|
54
|
+
const newGroup = new UrlSegmentGroup(segmentGroup.segments.map(s => {
|
|
55
|
+
s = new UrlSegment(s.path, Object.assign({}, s.parameters));
|
|
56
|
+
cb(s);
|
|
57
|
+
return s;
|
|
58
|
+
}), children);
|
|
59
|
+
childrenArr.forEach(c => {
|
|
60
|
+
c.parent = newGroup;
|
|
61
|
+
});
|
|
62
|
+
return newGroup;
|
|
63
|
+
}
|
|
64
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TranslatedUrlSerializer, deps: [{ token: LANGUAGE_SERVICE }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
65
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TranslatedUrlSerializer }); }
|
|
66
|
+
}
|
|
67
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TranslatedUrlSerializer, decorators: [{
|
|
68
|
+
type: Injectable
|
|
69
|
+
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
70
|
+
type: Inject,
|
|
71
|
+
args: [LANGUAGE_SERVICE]
|
|
72
|
+
}] }] });
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlZC11cmwuc2VyaWFsaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9uZ3gtdXRpbHMvc2VydmljZXMvdHJhbnNsYXRlZC11cmwuc2VyaWFsaXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUMsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRixPQUFPLEVBQW1CLGdCQUFnQixFQUFDLE1BQU0saUJBQWlCLENBQUM7O0FBT25FLE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxvQkFBb0I7SUFJN0QsWUFBK0MsUUFBMEI7UUFDckUsS0FBSyxFQUFFLENBQUM7UUFEbUMsYUFBUSxHQUFSLFFBQVEsQ0FBa0I7UUFFckUsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELFNBQVMsQ0FBQyxJQUFhO1FBQ25CLE1BQU0sSUFBSSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDM0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUFFO1lBQ3RELE9BQU8sQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQzVELENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3BDLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsS0FB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QyxDQUFDLENBQUM7WUFDTixPQUFPLENBQUMsQ0FBQztRQUNiLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2QsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNwQixDQUFDLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7K0dBOURRLHVCQUF1QixrQkFJWixnQkFBZ0I7bUhBSjNCLHVCQUF1Qjs7NEZBQXZCLHVCQUF1QjtrQkFEbkMsVUFBVTs7MEJBS00sTUFBTTsyQkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZX0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtEZWZhdWx0VXJsU2VyaWFsaXplciwgVXJsU2VnbWVudCwgVXJsU2VnbWVudEdyb3VwLCBVcmxUcmVlfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7SUxhbmd1YWdlU2VydmljZSwgTEFOR1VBR0VfU0VSVklDRX0gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVXJsRGljdGlvbmFyeSB7XHJcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmdcclxufVxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgVHJhbnNsYXRlZFVybFNlcmlhbGl6ZXIgZXh0ZW5kcyBEZWZhdWx0VXJsU2VyaWFsaXplciB7XHJcblxyXG4gICAgcHJvdGVjdGVkIGNhY2hlOiB7W2xhbmc6IHN0cmluZ106IElVcmxEaWN0aW9uYXJ5fTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KExBTkdVQUdFX1NFUlZJQ0UpIHJlYWRvbmx5IGxhbmd1YWdlOiBJTGFuZ3VhZ2VTZXJ2aWNlKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmNhY2hlID0ge307XHJcbiAgICB9XHJcblxyXG4gICAgc2VyaWFsaXplKHRyZWU6IFVybFRyZWUpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IGNvcHkgPSBuZXcgVXJsVHJlZSgpO1xyXG4gICAgICAgIGNvbnN0IGRpY3Rpb25hcnkgPSB0aGlzLmdldERpY3Rpb25hcnkodHJ1ZSk7XHJcbiAgICAgICAgY29weS5yb290ID0gdGhpcy5tb2RpZnlUcmVlUmVjdXJzaXZlKHRyZWUucm9vdCwgc2VnbWVudCA9PiB7XHJcbiAgICAgICAgICAgIHNlZ21lbnQucGF0aCA9IGRpY3Rpb25hcnlbc2VnbWVudC5wYXRoXSB8fCBzZWdtZW50LnBhdGg7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29weS5xdWVyeVBhcmFtcyA9IHRyZWUucXVlcnlQYXJhbXM7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLnNlcmlhbGl6ZShjb3B5KTtcclxuICAgIH1cclxuXHJcbiAgICBwYXJzZSh1cmw6IHN0cmluZyk6IFVybFRyZWUge1xyXG4gICAgICAgIGNvbnN0IHRyZWUgPSBzdXBlci5wYXJzZSh1cmwpO1xyXG4gICAgICAgIGNvbnN0IGRpY3Rpb25hcnkgPSB0aGlzLmdldERpY3Rpb25hcnkoZmFsc2UpO1xyXG4gICAgICAgIHRyZWUucm9vdCA9IHRoaXMubW9kaWZ5VHJlZVJlY3Vyc2l2ZSh0cmVlLnJvb3QsIHNlZ21lbnQgPT4ge1xyXG4gICAgICAgICAgICBzZWdtZW50LnBhdGggPSBkaWN0aW9uYXJ5W3NlZ21lbnQucGF0aF0gfHwgc2VnbWVudC5wYXRoO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0cmVlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERpY3Rpb25hcnkoc2VyaWFsaXplOiBib29sZWFuKTogSVVybERpY3Rpb25hcnkge1xyXG4gICAgICAgIGNvbnN0IG1ldGhvZCA9IHNlcmlhbGl6ZSA/IGBzZXJpYWxpemVgIDogYHBhcnNlYDtcclxuICAgICAgICBjb25zdCBrZXkgPSBgJHt0aGlzLmxhbmd1YWdlLmN1cnJlbnRMYW5ndWFnZX0tJHttZXRob2R9YDtcclxuICAgICAgICBpZiAoIXRoaXMuY2FjaGVba2V5XSkge1xyXG4gICAgICAgICAgICBjb25zdCBkaWN0ID0gdGhpcy5sYW5ndWFnZS5kaWN0aW9uYXJ5O1xyXG4gICAgICAgICAgICB0aGlzLmNhY2hlW2tleV0gPSBPYmplY3Qua2V5cyhkaWN0KS5yZWR1Y2UoKHJlcywga2V5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWtleS5zdGFydHNXaXRoKFwicm91dGUuXCIpKSByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBkaWN0W2tleV07XHJcbiAgICAgICAgICAgICAgICBrZXkgPSBrZXkucmVwbGFjZShcInJvdXRlLlwiLCBcIlwiKTtcclxuICAgICAgICAgICAgICAgIHJlc1tzZXJpYWxpemUgPyBrZXkgOiB2YWx1ZV0gPSBzZXJpYWxpemUgPyB2YWx1ZSA6IGtleTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICAgIH0sIHt9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVba2V5XTtcclxuICAgIH1cclxuXHJcbiAgICBtb2RpZnlUcmVlUmVjdXJzaXZlKHNlZ21lbnRHcm91cDogVXJsU2VnbWVudEdyb3VwLCBjYjogKHNlZ21lbnQ6IFVybFNlZ21lbnQpID0+IHZvaWQpOiBVcmxTZWdtZW50R3JvdXAge1xyXG4gICAgICAgIGlmICghc2VnbWVudEdyb3VwKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbkFyciA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gT2JqZWN0LmtleXMoc2VnbWVudEdyb3VwLmNoaWxkcmVuIHx8IHt9KS5yZWR1Y2UoKHJlcywga2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gdGhpcy5tb2RpZnlUcmVlUmVjdXJzaXZlKHNlZ21lbnRHcm91cC5jaGlsZHJlbltrZXldLCBjYik7XHJcbiAgICAgICAgICAgIGNoaWxkcmVuQXJyLnB1c2goY2hpbGQpO1xyXG4gICAgICAgICAgICByZXNba2V5XSA9IGNoaWxkO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0sIHt9KTtcclxuICAgICAgICBjb25zdCBuZXdHcm91cCA9IG5ldyBVcmxTZWdtZW50R3JvdXAoc2VnbWVudEdyb3VwLnNlZ21lbnRzLm1hcChzID0+IHtcclxuICAgICAgICAgICAgcyA9IG5ldyBVcmxTZWdtZW50KHMucGF0aCwgT2JqZWN0LmFzc2lnbih7fSwgcy5wYXJhbWV0ZXJzKSk7XHJcbiAgICAgICAgICAgIGNiKHMpO1xyXG4gICAgICAgICAgICByZXR1cm4gcztcclxuICAgICAgICB9KSwgY2hpbGRyZW4pO1xyXG4gICAgICAgIGNoaWxkcmVuQXJyLmZvckVhY2goYyA9PiB7XHJcbiAgICAgICAgICAgIGMucGFyZW50ID0gbmV3R3JvdXA7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG5ld0dyb3VwO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,81 @@
|
|
|
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
|
+
get isBrowser() {
|
|
11
|
+
return isPlatformBrowser(this.platformId);
|
|
12
|
+
}
|
|
13
|
+
get isServer() {
|
|
14
|
+
return isPlatformServer(this.platformId);
|
|
15
|
+
}
|
|
16
|
+
get deviceInfo() {
|
|
17
|
+
return this.isServer
|
|
18
|
+
? {
|
|
19
|
+
userAgent: "angular-universal",
|
|
20
|
+
os: "unknown",
|
|
21
|
+
browser: "node",
|
|
22
|
+
device: "node",
|
|
23
|
+
os_version: "unknown",
|
|
24
|
+
browser_version: "unknown",
|
|
25
|
+
deviceType: "unknown",
|
|
26
|
+
orientation: "landscape"
|
|
27
|
+
}
|
|
28
|
+
: this.dds.getDeviceInfo();
|
|
29
|
+
}
|
|
30
|
+
get browserName() {
|
|
31
|
+
return (this.dds.browser || "").toLowerCase();
|
|
32
|
+
}
|
|
33
|
+
get browserVersion() {
|
|
34
|
+
return this.dds.browser_version;
|
|
35
|
+
}
|
|
36
|
+
get isExplorer() {
|
|
37
|
+
return this.checkBrowser("ie");
|
|
38
|
+
}
|
|
39
|
+
get isEdge() {
|
|
40
|
+
return this.checkBrowser("edge");
|
|
41
|
+
}
|
|
42
|
+
get isChrome() {
|
|
43
|
+
return this.checkBrowser("chrome");
|
|
44
|
+
}
|
|
45
|
+
get isFirefox() {
|
|
46
|
+
return this.checkBrowser("firefox");
|
|
47
|
+
}
|
|
48
|
+
get isSafari() {
|
|
49
|
+
return this.checkBrowser("safari");
|
|
50
|
+
}
|
|
51
|
+
get isTablet() {
|
|
52
|
+
return this.dds.isTablet();
|
|
53
|
+
}
|
|
54
|
+
get isMobile() {
|
|
55
|
+
return this.dds.isMobile();
|
|
56
|
+
}
|
|
57
|
+
get isDesktop() {
|
|
58
|
+
return this.dds.isDesktop();
|
|
59
|
+
}
|
|
60
|
+
get isCrawler() {
|
|
61
|
+
return this.crawler;
|
|
62
|
+
}
|
|
63
|
+
constructor(platformId, dds) {
|
|
64
|
+
this.platformId = platformId;
|
|
65
|
+
this.dds = dds;
|
|
66
|
+
const info = this.dds.getDeviceInfo();
|
|
67
|
+
this.crawler = /(bot|google|baidu|bing|msn|duckduckbot|teoma|slurp|yandex|lighthouse|angular-universal|PTST|PostmanRuntime)/gi.test(info.userAgent);
|
|
68
|
+
}
|
|
69
|
+
checkBrowser(name) {
|
|
70
|
+
return this.browserName.includes(name) || false;
|
|
71
|
+
}
|
|
72
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UniversalService, deps: [{ token: PLATFORM_ID }, { token: i1.DeviceDetectorService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
73
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UniversalService }); }
|
|
74
|
+
}
|
|
75
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UniversalService, decorators: [{
|
|
76
|
+
type: Injectable
|
|
77
|
+
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
78
|
+
type: Inject,
|
|
79
|
+
args: [PLATFORM_ID]
|
|
80
|
+
}] }, { type: i1.DeviceDetectorService }] });
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pdmVyc2FsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmd4LXV0aWxzL3NlcnZpY2VzL3VuaXZlcnNhbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUMsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRSxPQUFPLEVBQUMscUJBQXFCLEVBQWEsTUFBTSxxQkFBcUIsQ0FBQzs7O0FBRXRFOztHQUVHO0FBRUgsTUFBTSxPQUFPLGdCQUFnQjtJQUV6QixJQUFJLFNBQVM7UUFDVCxPQUFPLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1IsT0FBTyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELElBQUksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLFFBQVE7WUFDaEIsQ0FBQyxDQUFDO2dCQUNFLFNBQVMsRUFBRSxtQkFBbUI7Z0JBQzlCLEVBQUUsRUFBRSxTQUFTO2dCQUNiLE9BQU8sRUFBRSxNQUFNO2dCQUNmLE1BQU0sRUFBRSxNQUFNO2dCQUNkLFVBQVUsRUFBRSxTQUFTO2dCQUNyQixlQUFlLEVBQUUsU0FBUztnQkFDMUIsVUFBVSxFQUFFLFNBQVM7Z0JBQ3JCLFdBQVcsRUFBRSxXQUFXO2FBQ3BCO1lBQ1IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQUksV0FBVztRQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNsRCxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1YsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDVCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQUksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDO0lBSUQsWUFBMEMsVUFBa0IsRUFBVyxHQUEwQjtRQUF2RCxlQUFVLEdBQVYsVUFBVSxDQUFRO1FBQVcsUUFBRyxHQUFILEdBQUcsQ0FBdUI7UUFDN0YsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsT0FBTyxHQUFHLCtHQUErRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDeEosQ0FBQztJQUVTLFlBQVksQ0FBQyxJQUFZO1FBQy9CLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDO0lBQ3BELENBQUM7K0dBOUVRLGdCQUFnQixrQkF1RUwsV0FBVzttSEF2RXRCLGdCQUFnQjs7NEZBQWhCLGdCQUFnQjtrQkFENUIsVUFBVTs7MEJBd0VNLE1BQU07MkJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBQTEFURk9STV9JRH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtpc1BsYXRmb3JtQnJvd3NlciwgaXNQbGF0Zm9ybVNlcnZlcn0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQge0RldmljZURldGVjdG9yU2VydmljZSwgRGV2aWNlSW5mb30gZnJvbSBcIm5neC1kZXZpY2UtZGV0ZWN0b3JcIjtcclxuXHJcbi8qKlxyXG4gKiBVc2UgdGhpcyBzZXJ2aWNlIHRvIGRldGVybWluZSB3aGljaCBpcyB0aGUgY3VycmVudCBlbnZpcm9ubWVudFxyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgVW5pdmVyc2FsU2VydmljZSB7XHJcblxyXG4gICAgZ2V0IGlzQnJvd3NlcigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNTZXJ2ZXIoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGlzUGxhdGZvcm1TZXJ2ZXIodGhpcy5wbGF0Zm9ybUlkKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZGV2aWNlSW5mbygpOiBEZXZpY2VJbmZvIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc1NlcnZlclxyXG4gICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgIHVzZXJBZ2VudDogXCJhbmd1bGFyLXVuaXZlcnNhbFwiLFxyXG4gICAgICAgICAgICAgICAgb3M6IFwidW5rbm93blwiLFxyXG4gICAgICAgICAgICAgICAgYnJvd3NlcjogXCJub2RlXCIsXHJcbiAgICAgICAgICAgICAgICBkZXZpY2U6IFwibm9kZVwiLFxyXG4gICAgICAgICAgICAgICAgb3NfdmVyc2lvbjogXCJ1bmtub3duXCIsXHJcbiAgICAgICAgICAgICAgICBicm93c2VyX3ZlcnNpb246IFwidW5rbm93blwiLFxyXG4gICAgICAgICAgICAgICAgZGV2aWNlVHlwZTogXCJ1bmtub3duXCIsXHJcbiAgICAgICAgICAgICAgICBvcmllbnRhdGlvbjogXCJsYW5kc2NhcGVcIlxyXG4gICAgICAgICAgICB9IGFzIGFueVxyXG4gICAgICAgICAgICA6IHRoaXMuZGRzLmdldERldmljZUluZm8oKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgYnJvd3Nlck5hbWUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuZGRzLmJyb3dzZXIgfHwgXCJcIikudG9Mb3dlckNhc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgYnJvd3NlclZlcnNpb24oKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZHMuYnJvd3Nlcl92ZXJzaW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc0V4cGxvcmVyKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrQnJvd3NlcihcImllXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc0VkZ2UoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tCcm93c2VyKFwiZWRnZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNDaHJvbWUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tCcm93c2VyKFwiY2hyb21lXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc0ZpcmVmb3goKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tCcm93c2VyKFwiZmlyZWZveFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNTYWZhcmkoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tCcm93c2VyKFwic2FmYXJpXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc1RhYmxldCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZHMuaXNUYWJsZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNNb2JpbGUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGRzLmlzTW9iaWxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlzRGVza3RvcCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZHMuaXNEZXNrdG9wKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlzQ3Jhd2xlcigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jcmF3bGVyO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY3Jhd2xlcjogYm9vbGVhbjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KFBMQVRGT1JNX0lEKSByZWFkb25seSBwbGF0Zm9ybUlkOiBzdHJpbmcsIHJlYWRvbmx5IGRkczogRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlKSB7XHJcbiAgICAgICAgY29uc3QgaW5mbyA9IHRoaXMuZGRzLmdldERldmljZUluZm8oKTtcclxuICAgICAgICB0aGlzLmNyYXdsZXIgPSAvKGJvdHxnb29nbGV8YmFpZHV8YmluZ3xtc258ZHVja2R1Y2tib3R8dGVvbWF8c2x1cnB8eWFuZGV4fGxpZ2h0aG91c2V8YW5ndWxhci11bml2ZXJzYWx8UFRTVHxQb3N0bWFuUnVudGltZSkvZ2kudGVzdChpbmZvLnVzZXJBZ2VudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGNoZWNrQnJvd3NlcihuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5icm93c2VyTmFtZS5pbmNsdWRlcyhuYW1lKSB8fCBmYWxzZTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -1,46 +1,46 @@
|
|
|
1
|
-
import { Inject, Injectable } from "@angular/core";
|
|
2
|
-
import { WASI_IMPLEMENTATION } from "../common-types";
|
|
3
|
-
import { WasmWorkerProxy } from "../utils/wasm-worker-proxy";
|
|
4
|
-
import { UniversalService } from "./universal.service";
|
|
5
|
-
import { LocalHttpService } from "./local-http.service";
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "./universal.service";
|
|
8
|
-
import * as i2 from "./local-http.service";
|
|
9
|
-
/**
|
|
10
|
-
* Use this service to load WebAssembly modules
|
|
11
|
-
*/
|
|
12
|
-
export class WasmService {
|
|
13
|
-
constructor(universal, http, wasi) {
|
|
14
|
-
this.universal = universal;
|
|
15
|
-
this.http = http;
|
|
16
|
-
this.wasi = wasi.constructor;
|
|
17
|
-
}
|
|
18
|
-
async getModule(name) {
|
|
19
|
-
if (!this.universal.isBrowser || !name)
|
|
20
|
-
return null;
|
|
21
|
-
this.modules = this.modules || {};
|
|
22
|
-
this.modules[name] = this.modules[name] || this.http.get(`wasm/${name}.wasm`, {
|
|
23
|
-
responseType: "arraybuffer"
|
|
24
|
-
}).then(async (bytes) => {
|
|
25
|
-
const wasi = new this.wasi();
|
|
26
|
-
return await wasi.instantiate(bytes);
|
|
27
|
-
});
|
|
28
|
-
return this.modules[name];
|
|
29
|
-
}
|
|
30
|
-
getWorkerModule(name) {
|
|
31
|
-
if (!this.universal.isBrowser || !name)
|
|
32
|
-
return null;
|
|
33
|
-
this.workerModules = this.workerModules || {};
|
|
34
|
-
this.workerModules[name] = new WasmWorkerProxy(this.http.url(`wasm/${name}.wasm`), this.wasi);
|
|
35
|
-
return this.workerModules[name];
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
41
|
-
type: Injectable
|
|
42
|
-
}], ctorParameters:
|
|
43
|
-
type: Inject,
|
|
44
|
-
args: [WASI_IMPLEMENTATION]
|
|
45
|
-
}] }]
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import { Inject, Injectable } from "@angular/core";
|
|
2
|
+
import { WASI_IMPLEMENTATION } from "../common-types";
|
|
3
|
+
import { WasmWorkerProxy } from "../utils/wasm-worker-proxy";
|
|
4
|
+
import { UniversalService } from "./universal.service";
|
|
5
|
+
import { LocalHttpService } from "./local-http.service";
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "./universal.service";
|
|
8
|
+
import * as i2 from "./local-http.service";
|
|
9
|
+
/**
|
|
10
|
+
* Use this service to load WebAssembly modules
|
|
11
|
+
*/
|
|
12
|
+
export class WasmService {
|
|
13
|
+
constructor(universal, http, wasi) {
|
|
14
|
+
this.universal = universal;
|
|
15
|
+
this.http = http;
|
|
16
|
+
this.wasi = wasi.constructor;
|
|
17
|
+
}
|
|
18
|
+
async getModule(name) {
|
|
19
|
+
if (!this.universal.isBrowser || !name)
|
|
20
|
+
return null;
|
|
21
|
+
this.modules = this.modules || {};
|
|
22
|
+
this.modules[name] = this.modules[name] || this.http.get(`wasm/${name}.wasm`, {
|
|
23
|
+
responseType: "arraybuffer"
|
|
24
|
+
}).then(async (bytes) => {
|
|
25
|
+
const wasi = new this.wasi();
|
|
26
|
+
return await wasi.instantiate(bytes);
|
|
27
|
+
});
|
|
28
|
+
return this.modules[name];
|
|
29
|
+
}
|
|
30
|
+
getWorkerModule(name) {
|
|
31
|
+
if (!this.universal.isBrowser || !name)
|
|
32
|
+
return null;
|
|
33
|
+
this.workerModules = this.workerModules || {};
|
|
34
|
+
this.workerModules[name] = new WasmWorkerProxy(this.http.url(`wasm/${name}.wasm`), this.wasi);
|
|
35
|
+
return this.workerModules[name];
|
|
36
|
+
}
|
|
37
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: WasmService, deps: [{ token: i1.UniversalService }, { token: i2.LocalHttpService }, { token: WASI_IMPLEMENTATION }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
38
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: WasmService }); }
|
|
39
|
+
}
|
|
40
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: WasmService, decorators: [{
|
|
41
|
+
type: Injectable
|
|
42
|
+
}], ctorParameters: () => [{ type: i1.UniversalService }, { type: i2.LocalHttpService }, { type: undefined, decorators: [{
|
|
43
|
+
type: Inject,
|
|
44
|
+
args: [WASI_IMPLEMENTATION]
|
|
45
|
+
}] }] });
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FzbS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25neC11dGlscy9zZXJ2aWNlcy93YXNtLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQU8sTUFBTSxlQUFlLENBQUM7QUFDdkQsT0FBTyxFQUEyQixtQkFBbUIsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzlFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQzs7OztBQUd0RDs7R0FFRztBQUVILE1BQU0sT0FBTyxXQUFXO0lBTXBCLFlBQXNCLFNBQTJCLEVBQzNCLElBQXNCLEVBQ0gsSUFBVztRQUY5QixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixTQUFJLEdBQUosSUFBSSxDQUFrQjtRQUV4QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFrQixDQUFDO0lBQ3hDLENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUyxDQUFZLElBQVk7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSTtZQUNsQyxPQUFPLElBQUksQ0FBQztRQUNoQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLElBQUksT0FBTyxFQUFFO1lBQzFFLFlBQVksRUFBRSxhQUFhO1NBQzlCLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ3BCLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzdCLE9BQU8sTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBaUIsQ0FBQztJQUM5QyxDQUFDO0lBRUQsZUFBZSxDQUFpQixJQUFZO1FBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUk7WUFDbEMsT0FBTyxJQUFJLENBQUM7UUFDaEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQztRQUM5QyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksZUFBZSxDQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLEVBQ2xDLElBQUksQ0FBQyxJQUFJLENBQ1osQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBRTtJQUNyQyxDQUFDOytHQWxDUSxXQUFXLGtGQVFBLG1CQUFtQjttSEFSOUIsV0FBVzs7NEZBQVgsV0FBVztrQkFEdkIsVUFBVTs7MEJBU00sTUFBTTsyQkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgVHlwZX0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtJV2FzaSwgSVdhc20sIElXYXNtQXN5bmMsIFdBU0lfSU1QTEVNRU5UQVRJT059IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtXYXNtV29ya2VyUHJveHl9IGZyb20gXCIuLi91dGlscy93YXNtLXdvcmtlci1wcm94eVwiO1xyXG5pbXBvcnQge1VuaXZlcnNhbFNlcnZpY2V9IGZyb20gXCIuL3VuaXZlcnNhbC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7TG9jYWxIdHRwU2VydmljZX0gZnJvbSBcIi4vbG9jYWwtaHR0cC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7V2FzaX0gZnJvbSBcIi4uL3V0aWxzL3dhc2lcIjtcclxuXHJcbi8qKlxyXG4gKiBVc2UgdGhpcyBzZXJ2aWNlIHRvIGxvYWQgV2ViQXNzZW1ibHkgbW9kdWxlc1xyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgV2FzbVNlcnZpY2Uge1xyXG5cclxuICAgIHByb3RlY3RlZCB3YXNpOiBUeXBlPFdhc2k+XHJcbiAgICBwcm90ZWN0ZWQgbW9kdWxlczogeyBbdXJsOiBzdHJpbmddOiBQcm9taXNlPGFueT4gfTtcclxuICAgIHByb3RlY3RlZCB3b3JrZXJNb2R1bGVzOiB7IFt1cmw6IHN0cmluZ106IGFueSB9O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCB1bml2ZXJzYWw6IFVuaXZlcnNhbFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgaHR0cDogTG9jYWxIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIEBJbmplY3QoV0FTSV9JTVBMRU1FTlRBVElPTikgd2FzaTogSVdhc2kpIHtcclxuICAgICAgICB0aGlzLndhc2kgPSB3YXNpLmNvbnN0cnVjdG9yIGFzIGFueTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRNb2R1bGU8VCA9IElXYXNtPihuYW1lOiBzdHJpbmcpOiBQcm9taXNlPFQ+IHtcclxuICAgICAgICBpZiAoIXRoaXMudW5pdmVyc2FsLmlzQnJvd3NlciB8fCAhbmFtZSlcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdGhpcy5tb2R1bGVzID0gdGhpcy5tb2R1bGVzIHx8IHt9O1xyXG4gICAgICAgIHRoaXMubW9kdWxlc1tuYW1lXSA9IHRoaXMubW9kdWxlc1tuYW1lXSB8fCB0aGlzLmh0dHAuZ2V0KGB3YXNtLyR7bmFtZX0ud2FzbWAsIHtcclxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImFycmF5YnVmZmVyXCJcclxuICAgICAgICB9KS50aGVuKGFzeW5jIChieXRlcykgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB3YXNpID0gbmV3IHRoaXMud2FzaSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgd2FzaS5pbnN0YW50aWF0ZShieXRlcyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kdWxlc1tuYW1lXSBhcyBQcm9taXNlPGFueT47XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0V29ya2VyTW9kdWxlPFQgPSBJV2FzbUFzeW5jPihuYW1lOiBzdHJpbmcpOiBUIHtcclxuICAgICAgICBpZiAoIXRoaXMudW5pdmVyc2FsLmlzQnJvd3NlciB8fCAhbmFtZSlcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdGhpcy53b3JrZXJNb2R1bGVzID0gdGhpcy53b3JrZXJNb2R1bGVzIHx8IHt9O1xyXG4gICAgICAgIHRoaXMud29ya2VyTW9kdWxlc1tuYW1lXSA9IG5ldyBXYXNtV29ya2VyUHJveHkoXHJcbiAgICAgICAgICAgIHRoaXMuaHR0cC51cmwoYHdhc20vJHtuYW1lfS53YXNtYCksXHJcbiAgICAgICAgICAgIHRoaXMud2FzaVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMud29ya2VyTW9kdWxlc1tuYW1lXSA7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export class AjaxRequestHandler {
|
|
2
|
+
static { this.isOverridden = false; }
|
|
3
|
+
constructor(pattern, callback) {
|
|
4
|
+
this.pattern = pattern;
|
|
5
|
+
this.callback = callback;
|
|
6
|
+
this.listener = (event) => {
|
|
7
|
+
const details = event.detail;
|
|
8
|
+
if (this.pattern.test(details.url))
|
|
9
|
+
this.callback(details, this.params);
|
|
10
|
+
};
|
|
11
|
+
this.params = {};
|
|
12
|
+
if (typeof XMLHttpRequest !== "undefined" && !AjaxRequestHandler.isOverridden) {
|
|
13
|
+
AjaxRequestHandler.isOverridden = true;
|
|
14
|
+
const originalOpen = XMLHttpRequest.prototype.open;
|
|
15
|
+
XMLHttpRequest.prototype.open = function (method, url, async, user, password) {
|
|
16
|
+
originalOpen.apply(this, arguments);
|
|
17
|
+
window.dispatchEvent(new CustomEvent("ajaxRequest", {
|
|
18
|
+
detail: {
|
|
19
|
+
request: this,
|
|
20
|
+
method: method,
|
|
21
|
+
url: url
|
|
22
|
+
}
|
|
23
|
+
}));
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
listen() {
|
|
28
|
+
if (typeof window === "undefined")
|
|
29
|
+
return this;
|
|
30
|
+
window.addEventListener("ajaxRequest", this.listener);
|
|
31
|
+
return this;
|
|
32
|
+
}
|
|
33
|
+
forget() {
|
|
34
|
+
if (typeof window === "undefined")
|
|
35
|
+
return;
|
|
36
|
+
window.removeEventListener("ajaxRequest", this.listener);
|
|
37
|
+
return this;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWpheC1yZXF1ZXN0LWhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmd4LXV0aWxzL3V0aWxzL2FqYXgtcmVxdWVzdC1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sT0FBTyxrQkFBa0I7YUFFWixpQkFBWSxHQUFZLEtBQUssQUFBakIsQ0FBa0I7SUFJN0MsWUFBb0IsT0FBZSxFQUFVLFFBQTZCO1FBQXRELFlBQU8sR0FBUCxPQUFPLENBQVE7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFxQjtRQThCbEUsYUFBUSxHQUFHLENBQUMsS0FBa0IsRUFBUSxFQUFFO1lBQzVDLE1BQU0sT0FBTyxHQUF3QixLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ2xELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUUsQ0FBQyxDQUFDO1FBaENFLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksT0FBTyxjQUFjLEtBQUssV0FBVyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDNUUsa0JBQWtCLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztZQUN2QyxNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztZQUNuRCxjQUFjLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxVQUFVLE1BQWMsRUFBRSxHQUFZLEVBQUUsS0FBZSxFQUFFLElBQWEsRUFBRSxRQUFpQjtnQkFDckgsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ3BDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxXQUFXLENBQUMsYUFBYSxFQUFFO29CQUNoRCxNQUFNLEVBQUU7d0JBQ0osT0FBTyxFQUFFLElBQUk7d0JBQ2IsTUFBTSxFQUFFLE1BQU07d0JBQ2QsR0FBRyxFQUFFLEdBQUc7cUJBQ1g7aUJBQ0osQ0FBQyxDQUFDLENBQUE7WUFDUCxDQUFDLENBQUM7UUFDTixDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU07UUFDRixJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVc7WUFBRSxPQUFPLElBQUksQ0FBQztRQUMvQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0RCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTTtRQUNGLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVztZQUFFLE9BQU87UUFDMUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWpheFJlcXVlc3RDYWxsYmFjaywgSUFqYXhSZXF1ZXN0RGV0YWlsc30gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFqYXhSZXF1ZXN0SGFuZGxlciB7XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgaXNPdmVycmlkZGVuOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHBhcmFtczogYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcGF0dGVybjogUmVnRXhwLCBwcml2YXRlIGNhbGxiYWNrOiBBamF4UmVxdWVzdENhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMgPSB7fTtcclxuICAgICAgICBpZiAodHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSBcInVuZGVmaW5lZFwiICYmICFBamF4UmVxdWVzdEhhbmRsZXIuaXNPdmVycmlkZGVuKSB7XHJcbiAgICAgICAgICAgIEFqYXhSZXF1ZXN0SGFuZGxlci5pc092ZXJyaWRkZW4gPSB0cnVlO1xyXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbE9wZW4gPSBYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUub3BlbjtcclxuICAgICAgICAgICAgWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbiAobWV0aG9kOiBzdHJpbmcsIHVybD86IHN0cmluZywgYXN5bmM/OiBib29sZWFuLCB1c2VyPzogc3RyaW5nLCBwYXNzd29yZD86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxPcGVuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoXCJhamF4UmVxdWVzdFwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Q6IHRoaXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHVybFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsaXN0ZW4oKTogQWpheFJlcXVlc3RIYW5kbGVyIHtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJhamF4UmVxdWVzdFwiLCB0aGlzLmxpc3RlbmVyKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBmb3JnZXQoKTogQWpheFJlcXVlc3RIYW5kbGVyIHtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuO1xyXG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWpheFJlcXVlc3RcIiwgdGhpcy5saXN0ZW5lcik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsaXN0ZW5lciA9IChldmVudDogQ3VzdG9tRXZlbnQpOiB2b2lkID0+IHtcclxuICAgICAgICBjb25zdCBkZXRhaWxzOiBJQWpheFJlcXVlc3REZXRhaWxzID0gZXZlbnQuZGV0YWlsO1xyXG4gICAgICAgIGlmICh0aGlzLnBhdHRlcm4udGVzdChkZXRhaWxzLnVybCkpIHRoaXMuY2FsbGJhY2soZGV0YWlscywgdGhpcy5wYXJhbXMpO1xyXG4gICAgfTtcclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,107 @@
|
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXkudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmd4LXV0aWxzL3V0aWxzL2FycmF5LnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxNQUFNLE9BQU8sVUFBVTtJQUVuQixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQVUsRUFBRSxHQUFHLEtBQVk7UUFDbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzNFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDcEMsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQUUsT0FBTyxJQUFJLENBQUM7UUFDaEQsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQVUsRUFBRSxHQUFXO1FBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUMxRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2xDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxZQUFZLE1BQU0sRUFBRSxDQUFDO2dCQUMzQixNQUFNLEtBQUssR0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JB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LElBQUksRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDdkMsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFBO0lBQ2pCLENBQUM7SUFFRCxNQUFNLENBQUMsTUFBTSxDQUFJLEdBQVE7UUFDckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDekMsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUNyQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtPYmplY3RVdGlsc30gZnJvbSBcIi4vb2JqZWN0LnV0aWxzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQXJyYXlVdGlscyB7XHJcblxyXG4gICAgc3RhdGljIGhhcyhhcnI6IGFueVtdLCAuLi5pdGVtczogYW55W10pOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIU9iamVjdFV0aWxzLmlzQXJyYXkoYXJyKSB8fCAhT2JqZWN0VXRpbHMuaXNBcnJheShpdGVtcykpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChhcnIuaW5kZXhPZihpdGVtc1tpXSkgPj0gMCkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgbWF0Y2goYXJyOiBhbnlbXSwgc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIU9iamVjdFV0aWxzLmlzQXJyYXkoYXJyKSB8fCAhT2JqZWN0VXRpbHMuaXNTdHJpbmcoc3RyKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChhcnJbaV0gaW5zdGFuY2VvZiBSZWdFeHApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gPFJlZ0V4cD5hcnJbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAocmVnZXgudGVzdChzdHIpKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGFueTxUPihhcnI6IFRbXSwgY2I6IChpdGVtOiBUKSA9PiBib29sZWFuKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFPYmplY3RVdGlscy5pc0FycmF5KGFycikgfHwgIU9iamVjdFV0aWxzLmlzRnVuY3Rpb24oY2IpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGNiKGFycltpXSkpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIG1vdmU8VD4oYXJyOiBUW10sIG9sZEluZGV4OiBudW1iZXIsIG5ld0luZGV4OiBudW1iZXIpOiBUW10ge1xyXG4gICAgICAgIGlmICghT2JqZWN0VXRpbHMuaXNBcnJheShhcnIpKSByZXR1cm4gW107XHJcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gYXJyLmxlbmd0aDtcclxuICAgICAgICB3aGlsZSAob2xkSW5kZXggPCAwKSB7XHJcbiAgICAgICAgICAgIG9sZEluZGV4ICs9IGxlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgd2hpbGUgKG5ld0luZGV4IDwgMCkge1xyXG4gICAgICAgICAgICBuZXdJbmRleCArPSBsZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChuZXdJbmRleCA+PSBsZW5ndGgpIHtcclxuICAgICAgICAgICAgbGV0IGsgPSBuZXdJbmRleCAtIGxlbmd0aCArIDE7XHJcbiAgICAgICAgICAgIHdoaWxlIChrLS0pIHtcclxuICAgICAgICAgICAgICAgIGFyci5wdXNoKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYXJyLnNwbGljZShuZXdJbmRleCwgMCwgYXJyLnNwbGljZShvbGRJbmRleCwgMSlbMF0pO1xyXG4gICAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHJldmVyc2VkKGFycjogYW55W10pOiBhbnlbXSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XHJcbiAgICAgICAgaWYgKCFPYmplY3RVdGlscy5pc0FycmF5KGFycikpIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IGFyci5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaChhcnJbaV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBtaW48VD4oYXJyOiBUW10sIGNiOiAoaXRlbTogVCwgaW5kZXg/OiBudW1iZXIpID0+IG51bWJlcik6IFQge1xyXG4gICAgICAgIGlmICghT2JqZWN0VXRpbHMuaXNBcnJheShhcnIpKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBsZXQgbWluID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IG51bGw7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IGNiKGFycltpXSwgaSk7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50IDwgbWluIHx8IHJlc3VsdCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgbWluID0gY3VycmVudDtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGFycltpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBtYXg8VD4oYXJyOiBUW10sIGNiOiAoaXRlbTogVCwgaW5kZXg/OiBudW1iZXIpID0+IG51bWJlcik6IFQge1xyXG4gICAgICAgIGlmICghT2JqZWN0VXRpbHMuaXNBcnJheShhcnIpKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBsZXQgbWF4ID0gTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVI7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IG51bGw7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IGNiKGFycltpXSwgaSk7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50ID4gbWF4IHx8IHJlc3VsdCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgbWF4ID0gY3VycmVudDtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGFycltpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBjaHVuazxUPihhcnI6IFRbXSwgc2l6ZTogbnVtYmVyKTogQXJyYXk8VFtdPiB7XHJcbiAgICAgICAgaWYgKCFPYmplY3RVdGlscy5pc0FycmF5KGFycikpIHJldHVybiBbXTtcclxuICAgICAgICBzaXplID0gTWF0aC5tYXgoMSwgc2l6ZSk7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW11cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkgKz0gc2l6ZSkge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaChhcnIuc2xpY2UoaSwgaSArIHNpemUpKVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHVuaXF1ZTxUPihhcnI6IFRbXSk6IFRbXSB7XHJcbiAgICAgICAgaWYgKCFPYmplY3RVdGlscy5pc0FycmF5KGFycikpIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gYXJyLmZpbHRlcigodmFsdWUsIGluZGV4LCBzZWxmKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBzZWxmLmluZGV4T2YodmFsdWUpID09PSBpbmRleDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iXX0=
|