@stemy/ngx-utils 17.1.5 → 19.0.1

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 (110) hide show
  1. package/fesm2022/stemy-ngx-utils-tools.mjs.map +1 -1
  2. package/fesm2022/stemy-ngx-utils.mjs +265 -223
  3. package/fesm2022/stemy-ngx-utils.mjs.map +1 -1
  4. package/ngx-utils/common-types.d.ts +1 -0
  5. package/ngx-utils/ngx-utils.imports.d.ts +2 -2
  6. package/ngx-utils/ngx-utils.module.d.ts +1 -1
  7. package/package.json +13 -19
  8. package/esm2022/ngx-utils/common-types.mjs +0 -122
  9. package/esm2022/ngx-utils/components/dynamic-table/dynamic-table.component.mjs +0 -210
  10. package/esm2022/ngx-utils/components/pagination-menu/pagination-menu.component.mjs +0 -101
  11. package/esm2022/ngx-utils/components/unordered-list/unordered-list.component.mjs +0 -65
  12. package/esm2022/ngx-utils/directives/async-method.base.mjs +0 -90
  13. package/esm2022/ngx-utils/directives/async-method.directive.mjs +0 -21
  14. package/esm2022/ngx-utils/directives/background.directive.mjs +0 -51
  15. package/esm2022/ngx-utils/directives/dynamic-table-template.directive.mjs +0 -20
  16. package/esm2022/ngx-utils/directives/global-template.directive.mjs +0 -28
  17. package/esm2022/ngx-utils/directives/icon.directive.mjs +0 -67
  18. package/esm2022/ngx-utils/directives/ngx-template-outlet.directive.mjs +0 -90
  19. package/esm2022/ngx-utils/directives/pagination-item.directive.mjs +0 -34
  20. package/esm2022/ngx-utils/directives/pagination.directive.mjs +0 -84
  21. package/esm2022/ngx-utils/directives/resource-if.directive.mjs +0 -50
  22. package/esm2022/ngx-utils/directives/sticky-class.directive.mjs +0 -34
  23. package/esm2022/ngx-utils/directives/sticky.directive.mjs +0 -55
  24. package/esm2022/ngx-utils/directives/unordered-list-item.directive.mjs +0 -79
  25. package/esm2022/ngx-utils/directives/unordered-list-template.directive.mjs +0 -20
  26. package/esm2022/ngx-utils/ngx-utils.imports.mjs +0 -178
  27. package/esm2022/ngx-utils/ngx-utils.module.mjs +0 -204
  28. package/esm2022/ngx-utils/pipes/chunk.pipe.mjs +0 -25
  29. package/esm2022/ngx-utils/pipes/entries.pipe.mjs +0 -28
  30. package/esm2022/ngx-utils/pipes/extra-item-properties.pipe.mjs +0 -31
  31. package/esm2022/ngx-utils/pipes/filter.pipe.mjs +0 -37
  32. package/esm2022/ngx-utils/pipes/find.pipe.mjs +0 -29
  33. package/esm2022/ngx-utils/pipes/format-number.pipe.mjs +0 -21
  34. package/esm2022/ngx-utils/pipes/get-offset.pipe.mjs +0 -17
  35. package/esm2022/ngx-utils/pipes/get-type.pipe.mjs +0 -16
  36. package/esm2022/ngx-utils/pipes/get-value.pipe.mjs +0 -17
  37. package/esm2022/ngx-utils/pipes/global-template.pipe.mjs +0 -39
  38. package/esm2022/ngx-utils/pipes/group-by.pipe.mjs +0 -27
  39. package/esm2022/ngx-utils/pipes/is-type.pipe.mjs +0 -16
  40. package/esm2022/ngx-utils/pipes/join.pipe.mjs +0 -19
  41. package/esm2022/ngx-utils/pipes/keys.pipe.mjs +0 -22
  42. package/esm2022/ngx-utils/pipes/map.pipe.mjs +0 -29
  43. package/esm2022/ngx-utils/pipes/max.pipe.mjs +0 -26
  44. package/esm2022/ngx-utils/pipes/min.pipe.mjs +0 -26
  45. package/esm2022/ngx-utils/pipes/pop.pipe.mjs +0 -16
  46. package/esm2022/ngx-utils/pipes/reduce.pipe.mjs +0 -30
  47. package/esm2022/ngx-utils/pipes/remap.pipe.mjs +0 -32
  48. package/esm2022/ngx-utils/pipes/replace.pipe.mjs +0 -17
  49. package/esm2022/ngx-utils/pipes/reverse.pipe.mjs +0 -24
  50. package/esm2022/ngx-utils/pipes/round.pipe.mjs +0 -21
  51. package/esm2022/ngx-utils/pipes/safe-html.pipe.mjs +0 -34
  52. package/esm2022/ngx-utils/pipes/shift.pipe.mjs +0 -16
  53. package/esm2022/ngx-utils/pipes/split.pipe.mjs +0 -16
  54. package/esm2022/ngx-utils/pipes/translate.pipe.mjs +0 -86
  55. package/esm2022/ngx-utils/pipes/values.pipe.mjs +0 -22
  56. package/esm2022/ngx-utils/plugins/resize-event.plugin.mjs +0 -78
  57. package/esm2022/ngx-utils/plugins/scroll-event.plugin.mjs +0 -39
  58. package/esm2022/ngx-utils/services/acl.service.mjs +0 -84
  59. package/esm2022/ngx-utils/services/api.service.mjs +0 -42
  60. package/esm2022/ngx-utils/services/auth.service.mjs +0 -14
  61. package/esm2022/ngx-utils/services/base-http.client.mjs +0 -47
  62. package/esm2022/ngx-utils/services/base-http.service.mjs +0 -305
  63. package/esm2022/ngx-utils/services/config.service.mjs +0 -130
  64. package/esm2022/ngx-utils/services/error-handler.service.mjs +0 -49
  65. package/esm2022/ngx-utils/services/events.service.mjs +0 -26
  66. package/esm2022/ngx-utils/services/formatter.service.mjs +0 -49
  67. package/esm2022/ngx-utils/services/global-template.service.mjs +0 -37
  68. package/esm2022/ngx-utils/services/icon.service.mjs +0 -26
  69. package/esm2022/ngx-utils/services/language.service.mjs +0 -124
  70. package/esm2022/ngx-utils/services/local-http.service.mjs +0 -47
  71. package/esm2022/ngx-utils/services/open-api.service.mjs +0 -40
  72. package/esm2022/ngx-utils/services/promise.service.mjs +0 -55
  73. package/esm2022/ngx-utils/services/state.service.mjs +0 -185
  74. package/esm2022/ngx-utils/services/static-language.service.mjs +0 -166
  75. package/esm2022/ngx-utils/services/storage.service.mjs +0 -49
  76. package/esm2022/ngx-utils/services/toaster.service.mjs +0 -32
  77. package/esm2022/ngx-utils/services/translated-url.serializer.mjs +0 -73
  78. package/esm2022/ngx-utils/services/universal.service.mjs +0 -81
  79. package/esm2022/ngx-utils/services/wasm.service.mjs +0 -46
  80. package/esm2022/ngx-utils/utils/ajax-request-handler.mjs +0 -40
  81. package/esm2022/ngx-utils/utils/array.utils.mjs +0 -107
  82. package/esm2022/ngx-utils/utils/auth.guard.mjs +0 -181
  83. package/esm2022/ngx-utils/utils/cached-factory.mjs +0 -30
  84. package/esm2022/ngx-utils/utils/canvas.utils.mjs +0 -388
  85. package/esm2022/ngx-utils/utils/date.utils.mjs +0 -29
  86. package/esm2022/ngx-utils/utils/file-system.mjs +0 -25
  87. package/esm2022/ngx-utils/utils/file.utils.mjs +0 -90
  88. package/esm2022/ngx-utils/utils/generic-value.mjs +0 -20
  89. package/esm2022/ngx-utils/utils/geometry.mjs +0 -132
  90. package/esm2022/ngx-utils/utils/initializer.mjs +0 -20
  91. package/esm2022/ngx-utils/utils/jsonfn.mjs +0 -45
  92. package/esm2022/ngx-utils/utils/loader.utils.mjs +0 -55
  93. package/esm2022/ngx-utils/utils/math.utils.mjs +0 -44
  94. package/esm2022/ngx-utils/utils/object.utils.mjs +0 -320
  95. package/esm2022/ngx-utils/utils/observable.utils.mjs +0 -59
  96. package/esm2022/ngx-utils/utils/promise.utils.mjs +0 -23
  97. package/esm2022/ngx-utils/utils/reflect.utils.mjs +0 -33
  98. package/esm2022/ngx-utils/utils/set.utils.mjs +0 -20
  99. package/esm2022/ngx-utils/utils/string.utils.mjs +0 -41
  100. package/esm2022/ngx-utils/utils/timer.utils.mjs +0 -52
  101. package/esm2022/ngx-utils/utils/unique.utils.mjs +0 -24
  102. package/esm2022/ngx-utils/utils/vector.mjs +0 -77
  103. package/esm2022/ngx-utils/utils/wasi.mjs +0 -159
  104. package/esm2022/ngx-utils/utils/wasm-worker-proxy.mjs +0 -99
  105. package/esm2022/ngx-utils/utils/with-options-provider.mjs +0 -24
  106. package/esm2022/public_api.mjs +0 -96
  107. package/esm2022/stemy-ngx-utils.mjs +0 -5
  108. package/esm2022/tools/config.mjs +0 -71
  109. package/esm2022/tools/public_api.mjs +0 -2
  110. package/esm2022/tools/stemy-ngx-utils-tools.mjs +0 -5
@@ -1,90 +0,0 @@
1
- import { first } from "rxjs/operators";
2
- import { ObjectUtils } from "./object.utils";
3
- export class FileUtils {
4
- static getExtension(file) {
5
- return file ? file.name.substr(file.name.lastIndexOf(".")).toLowerCase() : null;
6
- }
7
- static getName(file) {
8
- return file ? file.name.substr(0, file.name.lastIndexOf(".")) : null;
9
- }
10
- static toFile(blob, fileName) {
11
- const data = blob;
12
- data.lastModifiedDate = new Date();
13
- data.name = fileName.split(/\\|\//g).pop();
14
- return data;
15
- }
16
- static dataToBlob(data) {
17
- const parts = data.split(",");
18
- const byteString = atob(parts[1]);
19
- const mimeString = parts[0].split(":")[1].split(";")[0];
20
- const ab = new ArrayBuffer(byteString.length);
21
- const ia = new Uint8Array(ab);
22
- for (let i = 0; i < byteString.length; i++) {
23
- ia[i] = byteString.charCodeAt(i);
24
- }
25
- return new Blob([ab], { type: mimeString });
26
- }
27
- static saveBlob(blob, fileName) {
28
- if (typeof saveAs == "undefined") {
29
- throw Error("FileSaver library is not loaded. Please load it: https://www.npmjs.com/package/file-saver");
30
- }
31
- saveAs(blob, fileName);
32
- }
33
- static saveJson(json, fileName) {
34
- if (!ObjectUtils.isObject(json))
35
- return;
36
- FileUtils.saveBlob(new Blob([JSON.stringify(json, null, 4)]), fileName);
37
- }
38
- static readFileAsText(file) {
39
- return FileUtils.readFile(
40
- // @dynamic
41
- reader => reader.readAsText(file));
42
- }
43
- static readFileAsBinaryString(file) {
44
- return FileUtils.readFile(
45
- // @dynamic
46
- reader => reader.readAsBinaryString(file));
47
- }
48
- static readFileAsDataURL(file) {
49
- return FileUtils.readFile(
50
- // @dynamic
51
- reader => reader.readAsDataURL(file));
52
- }
53
- static readDataFromUrl(http, url) {
54
- return new Promise(
55
- // @dynamic
56
- (resolve, reject) => {
57
- if (!url) {
58
- reject({
59
- message: "The url is not specified"
60
- });
61
- return;
62
- }
63
- if ((/^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$/g).test(url)) {
64
- resolve(url);
65
- return;
66
- }
67
- first()(http.get(url, {
68
- responseType: "blob"
69
- })).subscribe((blob) => {
70
- FileUtils.readFileAsDataURL(blob).then(resolve, reject);
71
- }, reason => {
72
- if (reason.status > 0)
73
- reject(reason);
74
- else
75
- resolve(url);
76
- });
77
- });
78
- }
79
- static readFile(callback) {
80
- return new Promise(
81
- // @dynamic
82
- (resolve, reject) => {
83
- const reader = new FileReader();
84
- reader.onload = (event) => resolve(event.target.result);
85
- reader.onerror = reject;
86
- callback(reader);
87
- });
88
- }
89
- }
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9uZ3gtdXRpbHMvdXRpbHMvZmlsZS51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBSTNDLE1BQU0sT0FBTyxTQUFTO0lBRWxCLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBVTtRQUMxQixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3BGLENBQUM7SUFFRCxNQUFNLENBQUMsT0FBTyxDQUFDLElBQVU7UUFDckIsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDekUsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBVSxFQUFFLFFBQWdCO1FBQ3RDLE1BQU0sSUFBSSxHQUFRLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDM0MsT0FBYSxJQUFJLENBQUM7SUFDdEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBWTtRQUMxQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV4RCxNQUFNLEVBQUUsR0FBRyxJQUFJLFdBQVcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN6QyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBRUQsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUMsSUFBSSxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBVSxFQUFFLFFBQWdCO1FBQ3hDLElBQUksT0FBTyxNQUFNLElBQUksV0FBVyxFQUFFLENBQUM7WUFDL0IsTUFBTSxLQUFLLENBQUMsMkZBQTJGLENBQUMsQ0FBQztRQUM3RyxDQUFDO1FBQ0QsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFTLEVBQUUsUUFBZ0I7UUFDdkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTztRQUN4QyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFVO1FBQzVCLE9BQU8sU0FBUyxDQUFDLFFBQVE7UUFDckIsV0FBVztRQUNYLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FDcEMsQ0FBQztJQUNOLENBQUM7SUFFRCxNQUFNLENBQUMsc0JBQXNCLENBQUMsSUFBVTtRQUNwQyxPQUFPLFNBQVMsQ0FBQyxRQUFRO1FBQ3JCLFdBQVc7UUFDWCxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FDNUMsQ0FBQztJQUNOLENBQUM7SUFFRCxNQUFNLENBQUMsaUJBQWlCLENBQUMsSUFBVTtRQUMvQixPQUFPLFNBQVMsQ0FBQyxRQUFRO1FBQ3JCLFdBQVc7UUFDWCxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQ3ZDLENBQUM7SUFDTixDQUFDO0lBRUQsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFnQixFQUFFLEdBQVc7UUFDaEQsT0FBTyxJQUFJLE9BQU87UUFDZCxXQUFXO1FBQ1gsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDaEIsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNQLE1BQU0sQ0FBQztvQkFDSCxPQUFPLEVBQUUsMEJBQTBCO2lCQUN0QyxDQUFDLENBQUM7Z0JBQ0gsT0FBTztZQUNYLENBQUM7WUFDRCxJQUFJLENBQUMsK0VBQStFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDOUYsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNiLE9BQU87WUFDWCxDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2xCLFlBQVksRUFBRSxNQUFNO2FBQ3ZCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQVUsRUFBRSxFQUFFO2dCQUN6QixTQUFTLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUM1RCxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUU7Z0JBQ1IsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUM7b0JBQ2pCLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQzs7b0JBRWYsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3JCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUNKLENBQUM7SUFDTixDQUFDO0lBRU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFzQztRQUMxRCxPQUFPLElBQUksT0FBTztRQUNkLFdBQVc7UUFDWCxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNoQixNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdELE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1lBQ3hCLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQixDQUFDLENBQ0osQ0FBQztJQUNOLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SHR0cENsaWVudH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7Zmlyc3R9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQge09iamVjdFV0aWxzfSBmcm9tIFwiLi9vYmplY3QudXRpbHNcIjtcclxuXHJcbmRlY2xhcmUgY29uc3Qgc2F2ZUFzOiBhbnk7XHJcblxyXG5leHBvcnQgY2xhc3MgRmlsZVV0aWxzIHtcclxuXHJcbiAgICBzdGF0aWMgZ2V0RXh0ZW5zaW9uKGZpbGU6IEZpbGUpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBmaWxlID8gZmlsZS5uYW1lLnN1YnN0cihmaWxlLm5hbWUubGFzdEluZGV4T2YoXCIuXCIpKS50b0xvd2VyQ2FzZSgpIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0TmFtZShmaWxlOiBGaWxlKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gZmlsZSA/IGZpbGUubmFtZS5zdWJzdHIoMCwgZmlsZS5uYW1lLmxhc3RJbmRleE9mKFwiLlwiKSkgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyB0b0ZpbGUoYmxvYjogQmxvYiwgZmlsZU5hbWU6IHN0cmluZyk6IEZpbGUge1xyXG4gICAgICAgIGNvbnN0IGRhdGE6IGFueSA9IGJsb2I7XHJcbiAgICAgICAgZGF0YS5sYXN0TW9kaWZpZWREYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICBkYXRhLm5hbWUgPSBmaWxlTmFtZS5zcGxpdCgvXFxcXHxcXC8vZykucG9wKCk7XHJcbiAgICAgICAgcmV0dXJuIDxGaWxlPmRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGRhdGFUb0Jsb2IoZGF0YTogc3RyaW5nKTogQmxvYiB7XHJcbiAgICAgICAgY29uc3QgcGFydHMgPSBkYXRhLnNwbGl0KFwiLFwiKTtcclxuICAgICAgICBjb25zdCBieXRlU3RyaW5nID0gYXRvYihwYXJ0c1sxXSk7XHJcbiAgICAgICAgY29uc3QgbWltZVN0cmluZyA9IHBhcnRzWzBdLnNwbGl0KFwiOlwiKVsxXS5zcGxpdChcIjtcIilbMF07XHJcblxyXG4gICAgICAgIGNvbnN0IGFiID0gbmV3IEFycmF5QnVmZmVyKGJ5dGVTdHJpbmcubGVuZ3RoKTtcclxuICAgICAgICBjb25zdCBpYSA9IG5ldyBVaW50OEFycmF5KGFiKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVTdHJpbmcubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWFbaV0gPSBieXRlU3RyaW5nLmNoYXJDb2RlQXQoaSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbmV3IEJsb2IoW2FiXSwge3R5cGU6IG1pbWVTdHJpbmd9KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgc2F2ZUJsb2IoYmxvYjogQmxvYiwgZmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygc2F2ZUFzID09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJGaWxlU2F2ZXIgbGlicmFyeSBpcyBub3QgbG9hZGVkLiBQbGVhc2UgbG9hZCBpdDogaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvZmlsZS1zYXZlclwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2F2ZUFzKGJsb2IsIGZpbGVOYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgc2F2ZUpzb24oanNvbjogYW55LCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFPYmplY3RVdGlscy5pc09iamVjdChqc29uKSkgcmV0dXJuO1xyXG4gICAgICAgIEZpbGVVdGlscy5zYXZlQmxvYihuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkoanNvbiwgbnVsbCwgNCldKSwgZmlsZU5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyByZWFkRmlsZUFzVGV4dChmaWxlOiBCbG9iKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gRmlsZVV0aWxzLnJlYWRGaWxlKFxyXG4gICAgICAgICAgICAvLyBAZHluYW1pY1xyXG4gICAgICAgICAgICByZWFkZXIgPT4gcmVhZGVyLnJlYWRBc1RleHQoZmlsZSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyByZWFkRmlsZUFzQmluYXJ5U3RyaW5nKGZpbGU6IEJsb2IpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiBGaWxlVXRpbHMucmVhZEZpbGUoXHJcbiAgICAgICAgICAgIC8vIEBkeW5hbWljXHJcbiAgICAgICAgICAgIHJlYWRlciA9PiByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKGZpbGUpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgcmVhZEZpbGVBc0RhdGFVUkwoZmlsZTogQmxvYik6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIEZpbGVVdGlscy5yZWFkRmlsZShcclxuICAgICAgICAgICAgLy8gQGR5bmFtaWNcclxuICAgICAgICAgICAgcmVhZGVyID0+IHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgcmVhZERhdGFGcm9tVXJsKGh0dHA6IEh0dHBDbGllbnQsIHVybDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8c3RyaW5nPihcclxuICAgICAgICAgICAgLy8gQGR5bmFtaWNcclxuICAgICAgICAgICAgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF1cmwpIHtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBcIlRoZSB1cmwgaXMgbm90IHNwZWNpZmllZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCgvXihbQS1aYS16MC05Ky9dezR9KSooW0EtWmEtejAtOSsvXXs0fXxbQS1aYS16MC05Ky9dezN9PXxbQS1aYS16MC05Ky9dezJ9PT0pJC9nKS50ZXN0KHVybCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHVybCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZmlyc3QoKShodHRwLmdldCh1cmwsIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiXHJcbiAgICAgICAgICAgICAgICB9KSkuc3Vic2NyaWJlKChibG9iOiBCbG9iKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgRmlsZVV0aWxzLnJlYWRGaWxlQXNEYXRhVVJMKGJsb2IpLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcclxuICAgICAgICAgICAgICAgIH0sIHJlYXNvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlYXNvbi5zdGF0dXMgPiAwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QocmVhc29uKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodXJsKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyByZWFkRmlsZShjYWxsYmFjazogKHJlYWRlcjogRmlsZVJlYWRlcikgPT4gdm9pZCk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHN0cmluZz4oXHJcbiAgICAgICAgICAgIC8vIEBkeW5hbWljXHJcbiAgICAgICAgICAgIChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgICAgICAgICAgICByZWFkZXIub25sb2FkID0gKGV2ZW50OiBhbnkpID0+IHJlc29sdmUoZXZlbnQudGFyZ2V0LnJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICByZWFkZXIub25lcnJvciA9IHJlamVjdDtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHJlYWRlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -1,20 +0,0 @@
1
- import { Subject } from "rxjs";
2
- export class GenericValue extends Subject {
3
- get value() {
4
- return this._value;
5
- }
6
- set value(value) {
7
- if (value == this._value)
8
- return;
9
- this._value = value;
10
- this.next(value);
11
- }
12
- constructor(value = null) {
13
- super();
14
- this._value = value;
15
- }
16
- setJustValue(value) {
17
- this._value = value;
18
- }
19
- }
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy12YWx1ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9uZ3gtdXRpbHMvdXRpbHMvZ2VuZXJpYy12YWx1ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE1BQU0sT0FBTyxZQUFnQixTQUFRLE9BQVU7SUFFM0MsSUFBSSxLQUFLO1FBQ0wsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxLQUFRO1FBQ2QsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBQ2pDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUlELFlBQVksUUFBVyxJQUFJO1FBQ3ZCLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFRO1FBQ2pCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U3ViamVjdH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBHZW5lcmljVmFsdWU8VD4gZXh0ZW5kcyBTdWJqZWN0PFQ+IHtcclxuXHJcbiAgICBnZXQgdmFsdWUoKTogVCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCB2YWx1ZSh2YWx1ZTogVCkge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PSB0aGlzLl92YWx1ZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5uZXh0KHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF92YWx1ZTogVDtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZTogVCA9IG51bGwpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0SnVzdFZhbHVlKHZhbHVlOiBUKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -1,132 +0,0 @@
1
- export class Rect {
2
- get center() {
3
- return new Point(this.x, this.y);
4
- }
5
- get left() {
6
- return this.x - this.width * .5;
7
- }
8
- get right() {
9
- return this.x + this.width * .5;
10
- }
11
- get bottom() {
12
- return this.y - this.height * .5;
13
- }
14
- get top() {
15
- return this.y + this.height * .5;
16
- }
17
- constructor(x, y, width, height, rotation = 0) {
18
- this.x = x;
19
- this.y = y;
20
- this.width = width;
21
- this.height = height;
22
- this.rotation = rotation;
23
- }
24
- distance(p) {
25
- p = p.rotateAround(this.center, -this.rotation);
26
- const x = Math.max(this.left - p.x, 0, p.x - this.right);
27
- const y = Math.max(this.bottom - p.y, 0, p.y - this.top);
28
- return Math.sqrt(x * x + y * y);
29
- }
30
- }
31
- export class Circle {
32
- get center() {
33
- return new Point(this.x, this.y);
34
- }
35
- get left() {
36
- return new Point(this.x - this.radius, this.y);
37
- }
38
- get right() {
39
- return new Point(this.x + this.radius, this.y);
40
- }
41
- get top() {
42
- return new Point(this.x, this.y + this.radius);
43
- }
44
- get bottom() {
45
- return new Point(this.x, this.y - this.radius);
46
- }
47
- get rect() {
48
- return new Rect(this.x, this.y, this.radius * 2, this.radius * 2);
49
- }
50
- constructor(x, y, radius) {
51
- this.x = x;
52
- this.y = y;
53
- this.radius = radius;
54
- }
55
- distance(p) {
56
- return this.center.distance(p) - this.radius;
57
- }
58
- }
59
- export class Point {
60
- static { this.Zero = new Point(0, 0); }
61
- get length() {
62
- return this.distance(Point.Zero);
63
- }
64
- get perpendicular() {
65
- return new Point(this.y, -this.x);
66
- }
67
- constructor(x, y) {
68
- this.x = x;
69
- this.y = y;
70
- }
71
- add(p) {
72
- return new Point(this.x + p.x, this.y + p.y);
73
- }
74
- subtract(p) {
75
- return new Point(this.x - p.x, this.y - p.y);
76
- }
77
- multiply(p) {
78
- if (p instanceof Point) {
79
- return new Point(this.x * p.x, this.y * p.y);
80
- }
81
- return new Point(this.x * p, this.y * p);
82
- }
83
- distance(b) {
84
- const x = b.x - this.x;
85
- const y = b.y - this.y;
86
- return Math.sqrt(x * x + y * y);
87
- }
88
- lerp(p, ratio) {
89
- const diff = p.subtract(this);
90
- return this.add(diff.multiply(ratio));
91
- }
92
- perpendicularTo(p, length) {
93
- const diff = p.perpendicular.subtract(this.perpendicular);
94
- const ratio = length / diff.length;
95
- const center = this.lerp(p, .5);
96
- return center.add(diff.multiply(ratio));
97
- }
98
- circleWith(a, b) {
99
- const yDelta_a = b.y - a.y;
100
- const xDelta_a = b.x - a.x;
101
- const yDelta_b = this.y - b.y;
102
- const xDelta_b = this.x - b.x;
103
- const aSlope = yDelta_a / xDelta_a;
104
- const bSlope = yDelta_b / xDelta_b;
105
- const x = (aSlope * bSlope * (a.y - this.y) + bSlope * (a.x + b.x) - aSlope * (b.x + this.x)) / (2 * (bSlope - aSlope));
106
- const y = -1 * (x - (a.x + b.x) / 2) / aSlope + (a.y + b.y) / 2;
107
- const center = new Point(x, y);
108
- return new Circle(center.x, center.y, center.distance(this));
109
- }
110
- tangents(c) {
111
- const pd = c.center.subtract(this);
112
- const a = Math.asin(c.radius / pd.length);
113
- const b = Math.atan2(pd.y, pd.x);
114
- // Tangent points
115
- let t = b - a;
116
- const t1 = new Point(c.x + c.radius * Math.sin(t), c.y + c.radius * -Math.cos(t));
117
- t = b + a;
118
- const t2 = new Point(c.x + c.radius * -Math.sin(t), c.y + c.radius * Math.cos(t));
119
- return [t1, t2];
120
- }
121
- angle(p) {
122
- const diff = p.subtract(this);
123
- return Math.atan2(diff.y, diff.x) * 180 / Math.PI;
124
- }
125
- rotateAround(p, angle) {
126
- const rotation = (p.angle(this) + angle) * Math.PI / 180;
127
- const distance = p.distance(this);
128
- const rotated = new Point(Math.cos(rotation) * distance, Math.sin(rotation) * distance);
129
- return p.add(rotated);
130
- }
131
- }
132
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvbWV0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmd4LXV0aWxzL3V0aWxzL2dlb21ldHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE1BQU0sT0FBTyxJQUFJO0lBRWIsSUFBSSxNQUFNO1FBQ04sT0FBTyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ0osT0FBTyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDTCxPQUFPLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELElBQUksTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBSSxHQUFHO1FBQ0gsT0FBTyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxZQUFxQixDQUFTLEVBQVcsQ0FBUyxFQUFXLEtBQWEsRUFBVyxNQUFjLEVBQVcsV0FBbUIsQ0FBQztRQUE3RyxNQUFDLEdBQUQsQ0FBQyxDQUFRO1FBQVcsTUFBQyxHQUFELENBQUMsQ0FBUTtRQUFXLFVBQUssR0FBTCxLQUFLLENBQVE7UUFBVyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVcsYUFBUSxHQUFSLFFBQVEsQ0FBWTtJQUVsSSxDQUFDO0lBRUQsUUFBUSxDQUFDLENBQVE7UUFDYixDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hE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QUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDMUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDbkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDaEMsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsVUFBVSxDQUFDLENBQVEsRUFBRSxDQUFRO1FBQ3pCLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQixNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU5QixNQUFNLE1BQU0sR0FBRyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ25DLE1BQU0sTUFBTSxHQUFHLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFFbkMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3hILE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sTUFBTSxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvQixPQUFPLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVELFFBQVEsQ0FBQyxDQUFTO1FBQ2QsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLGlCQUFpQjtRQUNqQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsTUFBTSxFQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xGLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsTUFBTSxFQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xGLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVELEtBQUssQ0FBQyxDQUFRO1FBQ1YsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDdEQsQ0FBQztJQUVELFlBQVksQ0FBQyxDQUFRLEVBQUUsS0FBYTtRQUNoQyxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7UUFDekQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxNQUFNLE9BQU8sR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDO1FBQ3hGLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBJU2hhcGUge1xyXG4gICAgeDogbnVtYmVyO1xyXG4gICAgeTogbnVtYmVyO1xyXG5cclxuICAgIGRpc3RhbmNlKHNoYXBlOiBJU2hhcGUpOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBSZWN0IGltcGxlbWVudHMgSVNoYXBlIHtcclxuXHJcbiAgICBnZXQgY2VudGVyKCk6IFBvaW50IHtcclxuICAgICAgICByZXR1cm4gbmV3IFBvaW50KHRoaXMueCwgdGhpcy55KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbGVmdCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnggLSB0aGlzLndpZHRoICogLjU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHJpZ2h0KCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMueCArIHRoaXMud2lkdGggKiAuNTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgYm90dG9tKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMueSAtIHRoaXMuaGVpZ2h0ICogLjU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHRvcCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnkgKyB0aGlzLmhlaWdodCAqIC41O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKHJlYWRvbmx5IHg6IG51bWJlciwgcmVhZG9ubHkgeTogbnVtYmVyLCByZWFkb25seSB3aWR0aDogbnVtYmVyLCByZWFkb25seSBoZWlnaHQ6IG51bWJlciwgcmVhZG9ubHkgcm90YXRpb246IG51bWJlciA9IDApIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZGlzdGFuY2UocDogUG9pbnQpOiBudW1iZXIge1xyXG4gICAgICAgIHAgPSBwLnJvdGF0ZUFyb3VuZCh0aGlzLmNlbnRlciwgLXRoaXMucm90YXRpb24pO1xyXG4gICAgICAgIGNvbnN0IHggPSBNYXRoLm1heCh0aGlzLmxlZnQgLSBwLngsIDAsIHAueCAtIHRoaXMucmlnaHQpO1xyXG4gICAgICAgIGNvbnN0IHkgPSBNYXRoLm1heCh0aGlzLmJvdHRvbSAtIHAueSwgMCwgcC55IC0gdGhpcy50b3ApO1xyXG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQoeCp4ICsgeSp5KTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIENpcmNsZSBpbXBsZW1lbnRzIElTaGFwZSB7XHJcblxyXG4gICAgZ2V0IGNlbnRlcigpOiBQb2ludCB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQb2ludCh0aGlzLngsIHRoaXMueSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGxlZnQoKTogUG9pbnQge1xyXG4gICAgICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy54IC0gdGhpcy5yYWRpdXMsIHRoaXMueSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHJpZ2h0KCk6IFBvaW50IHtcclxuICAgICAgICByZXR1cm4gbmV3IFBvaW50KHRoaXMueCArIHRoaXMucmFkaXVzLCB0aGlzLnkpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCB0b3AoKTogUG9pbnQge1xyXG4gICAgICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy54LCB0aGlzLnkgKyB0aGlzLnJhZGl1cyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGJvdHRvbSgpOiBQb2ludCB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQb2ludCh0aGlzLngsIHRoaXMueSAtIHRoaXMucmFkaXVzKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcmVjdCgpOiBSZWN0IHtcclxuICAgICAgICByZXR1cm4gbmV3IFJlY3QodGhpcy54LCB0aGlzLnksIHRoaXMucmFkaXVzICogMiwgdGhpcy5yYWRpdXMgKiAyKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSB4OiBudW1iZXIsIHJlYWRvbmx5IHk6IG51bWJlciwgcmVhZG9ubHkgcmFkaXVzOiBudW1iZXIpIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZGlzdGFuY2UocDogUG9pbnQpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNlbnRlci5kaXN0YW5jZShwKSAtIHRoaXMucmFkaXVzO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUG9pbnQgaW1wbGVtZW50cyBJU2hhcGUge1xyXG5cclxuICAgIHN0YXRpYyBaZXJvOiBQb2ludCA9IG5ldyBQb2ludCgwLCAwKTtcclxuXHJcbiAgICBnZXQgbGVuZ3RoKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzdGFuY2UoUG9pbnQuWmVybyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHBlcnBlbmRpY3VsYXIoKTogUG9pbnQge1xyXG4gICAgICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy55LCAtdGhpcy54KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSB4OiBudW1iZXIsIHJlYWRvbmx5IHk6IG51bWJlcikge1xyXG4gICAgfVxyXG5cclxuICAgIGFkZChwOiBQb2ludCk6IFBvaW50IHtcclxuICAgICAgICByZXR1cm4gbmV3IFBvaW50KHRoaXMueCArIHAueCwgdGhpcy55ICsgcC55KTtcclxuICAgIH1cclxuXHJcbiAgICBzdWJ0cmFjdChwOiBQb2ludCk6IFBvaW50IHtcclxuICAgICAgICByZXR1cm4gbmV3IFBvaW50KHRoaXMueCAtIHAueCwgdGhpcy55IC0gcC55KTtcclxuICAgIH1cclxuXHJcbiAgICBtdWx0aXBseShwOiBQb2ludCB8IG51bWJlcik6IFBvaW50IHtcclxuICAgICAgICBpZiAocCBpbnN0YW5jZW9mIFBvaW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy54ICogcC54LCB0aGlzLnkgKiBwLnkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3IFBvaW50KHRoaXMueCAqIHAsIHRoaXMueSAqIHApO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc3RhbmNlKGI6IFBvaW50KTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCB4ID0gYi54IC0gdGhpcy54O1xyXG4gICAgICAgIGNvbnN0IHkgPSBiLnkgLSB0aGlzLnk7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguc3FydCh4ICogeCArIHkgKiB5KTtcclxuICAgIH1cclxuXHJcbiAgICBsZXJwKHA6IFBvaW50LCByYXRpbzogbnVtYmVyKTogUG9pbnQge1xyXG4gICAgICAgIGNvbnN0IGRpZmYgPSBwLnN1YnRyYWN0KHRoaXMpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFkZChkaWZmLm11bHRpcGx5KHJhdGlvKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcGVycGVuZGljdWxhclRvKHA6IFBvaW50LCBsZW5ndGg6IG51bWJlcik6IFBvaW50IHtcclxuICAgICAgICBjb25zdCBkaWZmID0gcC5wZXJwZW5kaWN1bGFyLnN1YnRyYWN0KHRoaXMucGVycGVuZGljdWxhcik7XHJcbiAgICAgICAgY29uc3QgcmF0aW8gPSBsZW5ndGggLyBkaWZmLmxlbmd0aDtcclxuICAgICAgICBjb25zdCBjZW50ZXIgPSB0aGlzLmxlcnAocCwgLjUpO1xyXG4gICAgICAgIHJldHVybiBjZW50ZXIuYWRkKGRpZmYubXVsdGlwbHkocmF0aW8pKTtcclxuICAgIH1cclxuXHJcbiAgICBjaXJjbGVXaXRoKGE6IFBvaW50LCBiOiBQb2ludCk6IENpcmNsZSB7XHJcbiAgICAgICAgY29uc3QgeURlbHRhX2EgPSBiLnkgLSBhLnk7XHJcbiAgICAgICAgY29uc3QgeERlbHRhX2EgPSBiLnggLSBhLng7XHJcbiAgICAgICAgY29uc3QgeURlbHRhX2IgPSB0aGlzLnkgLSBiLnk7XHJcbiAgICAgICAgY29uc3QgeERlbHRhX2IgPSB0aGlzLnggLSBiLng7XHJcblxyXG4gICAgICAgIGNvbnN0IGFTbG9wZSA9IHlEZWx0YV9hIC8geERlbHRhX2E7XHJcbiAgICAgICAgY29uc3QgYlNsb3BlID0geURlbHRhX2IgLyB4RGVsdGFfYjtcclxuXHJcbiAgICAgICAgY29uc3QgeCA9IChhU2xvcGUgKiBiU2xvcGUgKiAoYS55IC0gdGhpcy55KSArIGJTbG9wZSAqIChhLnggKyBiLngpIC0gYVNsb3BlICogKGIueCArIHRoaXMueCkpIC8gKDIgKiAoYlNsb3BlIC0gYVNsb3BlKSk7XHJcbiAgICAgICAgY29uc3QgeSA9IC0xICogKHggLSAoYS54ICsgYi54KSAvIDIpIC8gYVNsb3BlICsgKGEueSArIGIueSkgLyAyO1xyXG4gICAgICAgIGNvbnN0IGNlbnRlciA9IG5ldyBQb2ludCh4LCB5KTtcclxuICAgICAgICByZXR1cm4gbmV3IENpcmNsZShjZW50ZXIueCwgY2VudGVyLnksIGNlbnRlci5kaXN0YW5jZSh0aGlzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGFuZ2VudHMoYzogQ2lyY2xlKTogUG9pbnRbXSB7XHJcbiAgICAgICAgY29uc3QgcGQgPSBjLmNlbnRlci5zdWJ0cmFjdCh0aGlzKTtcclxuICAgICAgICBjb25zdCBhID0gTWF0aC5hc2luKGMucmFkaXVzIC8gcGQubGVuZ3RoKTtcclxuICAgICAgICBjb25zdCBiID0gTWF0aC5hdGFuMihwZC55LCBwZC54KTtcclxuICAgICAgICAvLyBUYW5nZW50IHBvaW50c1xyXG4gICAgICAgIGxldCB0ID0gYiAtIGE7XHJcbiAgICAgICAgY29uc3QgdDEgPSBuZXcgUG9pbnQoYy54ICsgYy5yYWRpdXMgKiBNYXRoLnNpbih0KSwgYy55ICsgYy5yYWRpdXMgKiAtTWF0aC5jb3ModCkpO1xyXG4gICAgICAgIHQgPSBiICsgYTtcclxuICAgICAgICBjb25zdCB0MiA9IG5ldyBQb2ludChjLnggKyBjLnJhZGl1cyAqIC1NYXRoLnNpbih0KSwgYy55ICsgYy5yYWRpdXMgKiBNYXRoLmNvcyh0KSk7XHJcbiAgICAgICAgcmV0dXJuIFt0MSwgdDJdO1xyXG4gICAgfVxyXG5cclxuICAgIGFuZ2xlKHA6IFBvaW50KTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCBkaWZmID0gcC5zdWJ0cmFjdCh0aGlzKTtcclxuICAgICAgICByZXR1cm4gTWF0aC5hdGFuMihkaWZmLnksIGRpZmYueCkgKiAxODAgLyBNYXRoLlBJO1xyXG4gICAgfVxyXG5cclxuICAgIHJvdGF0ZUFyb3VuZChwOiBQb2ludCwgYW5nbGU6IG51bWJlcik6IFBvaW50IHtcclxuICAgICAgICBjb25zdCByb3RhdGlvbiA9IChwLmFuZ2xlKHRoaXMpICsgYW5nbGUpICogTWF0aC5QSSAvIDE4MDtcclxuICAgICAgICBjb25zdCBkaXN0YW5jZSA9IHAuZGlzdGFuY2UodGhpcyk7XHJcbiAgICAgICAgY29uc3Qgcm90YXRlZCA9IG5ldyBQb2ludChNYXRoLmNvcyhyb3RhdGlvbikgKiBkaXN0YW5jZSwgTWF0aC5zaW4ocm90YXRpb24pICogZGlzdGFuY2UpO1xyXG4gICAgICAgIHJldHVybiBwLmFkZChyb3RhdGVkKTtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -1,20 +0,0 @@
1
- import { Invokable } from "invokable";
2
- export class Initializer {
3
- get isInitialized() {
4
- return this.initialized;
5
- }
6
- constructor(callback, shouldInit = true) {
7
- this.callback = callback;
8
- this.shouldInit = shouldInit;
9
- this.initialized = !this.shouldInit;
10
- // @ts-ignore
11
- return Invokable.create(this);
12
- }
13
- [Invokable.call]() {
14
- if (this.initialized)
15
- return null;
16
- this.initialized = true;
17
- return this.callback();
18
- }
19
- }
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdGlhbGl6ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmd4LXV0aWxzL3V0aWxzL2luaXRpYWxpemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFcEMsTUFBTSxPQUFPLFdBQVc7SUFJcEIsSUFBSSxhQUFhO1FBQ2IsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzVCLENBQUM7SUFFRCxZQUFvQixRQUFpQixFQUFVLGFBQXNCLElBQUk7UUFBckQsYUFBUSxHQUFSLFFBQVEsQ0FBUztRQUFVLGVBQVUsR0FBVixVQUFVLENBQWdCO1FBQ3JFLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ3BDLGFBQWE7UUFDYixPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztRQUNaLElBQUksSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPLElBQUksQ0FBQztRQUNsQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0ludm9rYWJsZX0gZnJvbSBcImludm9rYWJsZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEluaXRpYWxpemVyPFQ+IHtcclxuXHJcbiAgICBwcml2YXRlIGluaXRpYWxpemVkOiBib29sZWFuO1xyXG5cclxuICAgIGdldCBpc0luaXRpYWxpemVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVkO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY2FsbGJhY2s6ICgpID0+IFQsIHByaXZhdGUgc2hvdWxkSW5pdDogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gIXRoaXMuc2hvdWxkSW5pdDtcclxuICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgcmV0dXJuIEludm9rYWJsZS5jcmVhdGUodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgW0ludm9rYWJsZS5jYWxsXSgpOiBUIHtcclxuICAgICAgICBpZiAodGhpcy5pbml0aWFsaXplZCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbGJhY2soKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJbml0aWFsaXplcjxUPiB7XHJcbiAgICAoKTogVDtcclxufVxyXG4iXX0=
@@ -1,45 +0,0 @@
1
- export class JSONfn {
2
- static parse(text) {
3
- return JSON.parse(text, JSONfn.reviver);
4
- }
5
- static stringify(obj) {
6
- return JSON.stringify(obj, JSONfn.replacer);
7
- }
8
- static reviver(key, value) {
9
- const iso8061 = /^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d(?:.\d+)?(?:Z|[+-]\d\d:\d\d)$/;
10
- if (typeof value !== "string")
11
- return value;
12
- if (value.length < 8) {
13
- return value;
14
- }
15
- if (value.match(iso8061)) {
16
- return new Date(value);
17
- }
18
- const prefix = value.substring(0, 8);
19
- if (prefix === "function") {
20
- return new Function(`return ${value}`)();
21
- }
22
- if (prefix === "_NuFrRa_") {
23
- return new Function(`return ${value.slice(8)}`)();
24
- }
25
- if (prefix === "_PxEgEr_") {
26
- return new Function(`return ${value.slice(8)}`)();
27
- }
28
- return value;
29
- }
30
- static replacer(key, value) {
31
- if (value instanceof Function || typeof value === "function") {
32
- const fnBody = value.toString();
33
- if (fnBody.length < 8 || fnBody.substring(0, 8) !== "function") {
34
- // this is ES6 Arrow Function
35
- return "_NuFrRa_" + fnBody;
36
- }
37
- return fnBody;
38
- }
39
- if (value instanceof RegExp) {
40
- return "_PxEgEr_" + value;
41
- }
42
- return value;
43
- }
44
- }
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbmZuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25neC11dGlscy91dGlscy9qc29uZm4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLE1BQU07SUFFZixNQUFNLENBQUMsS0FBSyxDQUFDLElBQVk7UUFDckIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBUTtRQUNyQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFXLEVBQUUsS0FBVTtRQUNsQyxNQUFNLE9BQU8sR0FBRyw4REFBOEQsQ0FBQztRQUMvRSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUM1QyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbkIsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLElBQUksTUFBTSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ3hCLE9BQU8sSUFBSSxRQUFRLENBQUMsVUFBVSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDN0MsQ0FBQztRQUNELElBQUksTUFBTSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ3hCLE9BQU8sSUFBSSxRQUFRLENBQUMsVUFBVSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3RELENBQUM7UUFDRCxJQUFJLE1BQU0sS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUN4QixPQUFPLElBQUksUUFBUSxDQUFDLFVBQVUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUN0RCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBVyxFQUFFLEtBQVU7UUFDbkMsSUFBSSxLQUFLLFlBQVksUUFBUSxJQUFJLE9BQU8sS0FBSyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQzNELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUM3RCw2QkFBNkI7Z0JBQzdCLE9BQU8sVUFBVSxHQUFHLE1BQU0sQ0FBQztZQUMvQixDQUFDO1lBQ0QsT0FBTyxNQUFNLENBQUM7UUFDbEIsQ0FBQztRQUNELElBQUksS0FBSyxZQUFZLE1BQU0sRUFBRSxDQUFDO1lBQzFCLE9BQU8sVUFBVSxHQUFHLEtBQUssQ0FBQztRQUM5QixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIEpTT05mbiB7XHJcblxyXG4gICAgc3RhdGljIHBhcnNlKHRleHQ6IHN0cmluZyk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UodGV4dCwgSlNPTmZuLnJldml2ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzdHJpbmdpZnkob2JqOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShvYmosIEpTT05mbi5yZXBsYWNlcik7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHJldml2ZXIoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGNvbnN0IGlzbzgwNjEgPSAvXlxcZHs0fS1cXGRcXGQtXFxkXFxkVFxcZFxcZDpcXGRcXGQ6XFxkXFxkKD86LlxcZCspPyg/Olp8WystXVxcZFxcZDpcXGRcXGQpJC87XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPCA4KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZhbHVlLm1hdGNoKGlzbzgwNjEpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHByZWZpeCA9IHZhbHVlLnN1YnN0cmluZygwLCA4KTtcclxuICAgICAgICBpZiAocHJlZml4ID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbihgcmV0dXJuICR7dmFsdWV9YCkoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHByZWZpeCA9PT0gXCJfTnVGclJhX1wiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb24oYHJldHVybiAke3ZhbHVlLnNsaWNlKDgpfWApKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwcmVmaXggPT09IFwiX1B4RWdFcl9cIikge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uKGByZXR1cm4gJHt2YWx1ZS5zbGljZSg4KX1gKSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHJlcGxhY2VyKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55IHtcclxuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBGdW5jdGlvbiB8fCB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICBjb25zdCBmbkJvZHkgPSB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBpZiAoZm5Cb2R5Lmxlbmd0aCA8IDggfHwgZm5Cb2R5LnN1YnN0cmluZygwLCA4KSAhPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIEVTNiBBcnJvdyBGdW5jdGlvblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiX051RnJSYV9cIiArIGZuQm9keTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZm5Cb2R5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiX1B4RWdFcl9cIiArIHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -1,55 +0,0 @@
1
- export class LoaderUtils {
2
- static { this.scriptPromises = {}; }
3
- static { this.stylePromises = {}; }
4
- static loadScript(src, async = false, type = "text/javascript") {
5
- this.scriptPromises[src] = this.scriptPromises[src] || new Promise((resolve, reject) => {
6
- // Load script
7
- const script = document.createElement("script");
8
- script.type = type;
9
- script.src = src;
10
- script.async = async;
11
- if (script.readyState) {
12
- // Internet explorer
13
- script.onreadystatechange = () => {
14
- if (script.readyState === "loaded" || script.readyState === "complete") {
15
- script.onreadystatechange = null;
16
- resolve(script);
17
- }
18
- };
19
- }
20
- else {
21
- // Other browsers
22
- script.onload = () => resolve(script);
23
- }
24
- script.onerror = (error) => reject(error);
25
- document.body.appendChild(script);
26
- });
27
- return this.scriptPromises[src];
28
- }
29
- static loadStyle(src) {
30
- this.stylePromises[src] = this.stylePromises[src] || new Promise((resolve, reject) => {
31
- // Load script
32
- const link = document.createElement("link");
33
- link.rel = "stylesheet";
34
- link.type = "text/css";
35
- link.href = src;
36
- if (link.readyState) {
37
- // Internet explorer
38
- link.onreadystatechange = () => {
39
- if (link.readyState === "loaded" || link.readyState === "complete") {
40
- link.onreadystatechange = null;
41
- resolve(link);
42
- }
43
- };
44
- }
45
- else {
46
- // Other browsers
47
- link.onload = () => resolve(link);
48
- }
49
- link.onerror = (error) => reject(error);
50
- document.body.appendChild(link);
51
- });
52
- return this.stylePromises[src];
53
- }
54
- }
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25neC11dGlscy91dGlscy9sb2FkZXIudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFPLFdBQVc7YUFFYixtQkFBYyxHQUFvQixFQUFFLENBQUM7YUFDckMsa0JBQWEsR0FBbUIsRUFBRSxDQUFDO0lBRTFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBVyxFQUFFLFFBQWlCLEtBQUssRUFBRSxPQUFtQixpQkFBaUI7UUFDdkYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3hGLGNBQWM7WUFDZCxNQUFNLE1BQU0sR0FBUSxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ25CLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1lBQ2pCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNwQixvQkFBb0I7Z0JBQ3BCLE1BQU0sQ0FBQyxrQkFBa0IsR0FBRyxHQUFHLEVBQUU7b0JBQzdCLElBQUksTUFBTSxDQUFDLFVBQVUsS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUUsQ0FBQzt3QkFDckUsTUFBTSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQzt3QkFDakMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNwQixDQUFDO2dCQUNMLENBQUMsQ0FBQztZQUNOLENBQUM7aUJBQU0sQ0FBQztnQkFDSixpQkFBaUI7Z0JBQ2pCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzFDLENBQUM7WUFDRCxNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0MsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBVztRQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxPQUFPLENBQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDdEYsY0FBYztZQUNkLE1BQU0sSUFBSSxHQUFRLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLEdBQUcsR0FBRyxZQUFZLENBQUM7WUFDeEIsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7WUFDdkIsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7WUFFaEIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ2xCLG9CQUFvQjtnQkFDcEIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEdBQUcsRUFBRTtvQkFDM0IsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFVBQVUsRUFBRSxDQUFDO3dCQUNqRSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO3dCQUMvQixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2xCLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDO1lBQ04sQ0FBQztpQkFBTSxDQUFDO2dCQUNKLGlCQUFpQjtnQkFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEMsQ0FBQztZQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTY3JpcHRUeXBlLCBJU2NyaXB0UHJvbWlzZXMsIElTdHlsZVByb21pc2VzfSBmcm9tIFwiLi4vY29tbW9uLXR5cGVzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgTG9hZGVyVXRpbHMge1xyXG5cclxuICAgIHN0YXRpYyBzY3JpcHRQcm9taXNlczogSVNjcmlwdFByb21pc2VzID0ge307XHJcbiAgICBzdGF0aWMgc3R5bGVQcm9taXNlczogSVN0eWxlUHJvbWlzZXMgPSB7fTtcclxuXHJcbiAgICBzdGF0aWMgbG9hZFNjcmlwdChzcmM6IHN0cmluZywgYXN5bmM6IGJvb2xlYW4gPSBmYWxzZSwgdHlwZTogU2NyaXB0VHlwZSA9IFwidGV4dC9qYXZhc2NyaXB0XCIpOiBQcm9taXNlPEhUTUxTY3JpcHRFbGVtZW50PiB7XHJcbiAgICAgICAgdGhpcy5zY3JpcHRQcm9taXNlc1tzcmNdID0gdGhpcy5zY3JpcHRQcm9taXNlc1tzcmNdIHx8IG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAvLyBMb2FkIHNjcmlwdFxyXG4gICAgICAgICAgICBjb25zdCBzY3JpcHQ6IGFueSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XHJcbiAgICAgICAgICAgIHNjcmlwdC50eXBlID0gdHlwZTtcclxuICAgICAgICAgICAgc2NyaXB0LnNyYyA9IHNyYztcclxuICAgICAgICAgICAgc2NyaXB0LmFzeW5jID0gYXN5bmM7XHJcbiAgICAgICAgICAgIGlmIChzY3JpcHQucmVhZHlTdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gSW50ZXJuZXQgZXhwbG9yZXJcclxuICAgICAgICAgICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjcmlwdC5yZWFkeVN0YXRlID09PSBcImxvYWRlZFwiIHx8IHNjcmlwdC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc2NyaXB0KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gT3RoZXIgYnJvd3NlcnNcclxuICAgICAgICAgICAgICAgIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKHNjcmlwdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2NyaXB0Lm9uZXJyb3IgPSAoZXJyb3I6IGFueSkgPT4gcmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JpcHQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNjcmlwdFByb21pc2VzW3NyY107XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGxvYWRTdHlsZShzcmM6IHN0cmluZyk6IFByb21pc2U8SFRNTExpbmtFbGVtZW50PiB7XHJcbiAgICAgICAgdGhpcy5zdHlsZVByb21pc2VzW3NyY10gPSB0aGlzLnN0eWxlUHJvbWlzZXNbc3JjXSB8fCBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgLy8gTG9hZCBzY3JpcHRcclxuICAgICAgICAgICAgY29uc3QgbGluazogYW55ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpbmtcIik7XHJcbiAgICAgICAgICAgIGxpbmsucmVsID0gXCJzdHlsZXNoZWV0XCI7XHJcbiAgICAgICAgICAgIGxpbmsudHlwZSA9IFwidGV4dC9jc3NcIjtcclxuICAgICAgICAgICAgbGluay5ocmVmID0gc3JjO1xyXG5cclxuICAgICAgICAgICAgaWYgKGxpbmsucmVhZHlTdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gSW50ZXJuZXQgZXhwbG9yZXJcclxuICAgICAgICAgICAgICAgIGxpbmsub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsaW5rLnJlYWR5U3RhdGUgPT09IFwibG9hZGVkXCIgfHwgbGluay5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGluay5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGxpbmspO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBPdGhlciBicm93c2Vyc1xyXG4gICAgICAgICAgICAgICAgbGluay5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKGxpbmspO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxpbmsub25lcnJvciA9IChlcnJvcjogYW55KSA9PiByZWplY3QoZXJyb3IpO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlUHJvbWlzZXNbc3JjXTtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -1,44 +0,0 @@
1
- import { ObjectUtils } from "./object.utils";
2
- export class MathUtils {
3
- static { this.EPSILON = 1e-9; }
4
- static equal(a, b, epsilon = null) {
5
- epsilon = ObjectUtils.isNumber(epsilon) ? epsilon : MathUtils.EPSILON;
6
- return Math.abs(a - b) < epsilon;
7
- }
8
- static clamp(value, min, max) {
9
- return Math.max(Math.min(value, max), min);
10
- }
11
- static round(value, precision = 2, divider = 1) {
12
- precision = Math.pow(10, precision);
13
- return Math.round(value * precision / divider) / precision;
14
- }
15
- static approxIndex(x, values, epsilon = null) {
16
- if (!Array.isArray(values) || values.length == 0) {
17
- return -1;
18
- }
19
- let s = 0;
20
- let e = values.length - 1;
21
- while (s <= e) {
22
- const i = Math.floor((s + e) / 2);
23
- const v = values[i];
24
- if (MathUtils.equal(v, x, epsilon)) {
25
- return i;
26
- }
27
- if (v < x) {
28
- s = i + 1;
29
- }
30
- else {
31
- e = i - 1;
32
- }
33
- }
34
- const m = Math.max(e, 0);
35
- const a = values[s];
36
- const b = values[m];
37
- return Math.abs(a - x) < Math.abs(b - x) ? s : m;
38
- }
39
- static approximate(x, values, epsilon = null) {
40
- const index = MathUtils.approxIndex(x, values, epsilon);
41
- return values[index] ?? null;
42
- }
43
- }
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0aC51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9uZ3gtdXRpbHMvdXRpbHMvbWF0aC51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsTUFBTSxPQUFPLFNBQVM7YUFFRixZQUFPLEdBQVcsSUFBSSxDQUFDO0lBRXZDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxVQUFrQixJQUFJO1FBQ3JELE9BQU8sR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7UUFDdEUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7SUFDckMsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBYSxFQUFFLEdBQVcsRUFBRSxHQUFXO1FBQ2hELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUM5QyxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFhLEVBQUUsWUFBb0IsQ0FBQyxFQUFFLFVBQWtCLENBQUM7UUFDbEUsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsU0FBUyxHQUFHLE9BQU8sQ0FBQyxHQUFHLFNBQVMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFTLEVBQUUsTUFBZ0IsRUFBRSxVQUFrQixJQUFJO1FBQ2xFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDL0MsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNkLENBQUM7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDVixJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUMxQixPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNaLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDbEMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ2pDLE9BQU8sQ0FBQyxDQUFDO1lBQ2IsQ0FBQztZQUNELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNSLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2QsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2QsQ0FBQztRQUNMLENBQUM7UUFDRCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN6QixNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEIsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxNQUFNLENBQUMsV0FBVyxDQUFDLENBQVMsRUFBRSxNQUFnQixFQUFFLFVBQWtCLElBQUk7UUFDbEUsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3hELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQztJQUNqQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtPYmplY3RVdGlsc30gZnJvbSBcIi4vb2JqZWN0LnV0aWxzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgTWF0aFV0aWxzIHtcclxuXHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgRVBTSUxPTjogbnVtYmVyID0gMWUtOTtcclxuXHJcbiAgICBzdGF0aWMgZXF1YWwoYTogbnVtYmVyLCBiOiBudW1iZXIsIGVwc2lsb246IG51bWJlciA9IG51bGwpOiBib29sZWFuIHtcclxuICAgICAgICBlcHNpbG9uID0gT2JqZWN0VXRpbHMuaXNOdW1iZXIoZXBzaWxvbikgPyBlcHNpbG9uIDogTWF0aFV0aWxzLkVQU0lMT047XHJcbiAgICAgICAgcmV0dXJuIE1hdGguYWJzKGEgLSBiKSA8IGVwc2lsb247XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGNsYW1wKHZhbHVlOiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KE1hdGgubWluKHZhbHVlLCBtYXgpLCBtaW4pXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHJvdW5kKHZhbHVlOiBudW1iZXIsIHByZWNpc2lvbjogbnVtYmVyID0gMiwgZGl2aWRlcjogbnVtYmVyID0gMSk6IG51bWJlciB7XHJcbiAgICAgICAgcHJlY2lzaW9uID0gTWF0aC5wb3coMTAsIHByZWNpc2lvbik7XHJcbiAgICAgICAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiBwcmVjaXNpb24gLyBkaXZpZGVyKSAvIHByZWNpc2lvbjtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgYXBwcm94SW5kZXgoeDogbnVtYmVyLCB2YWx1ZXM6IG51bWJlcltdLCBlcHNpbG9uOiBudW1iZXIgPSBudWxsKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWVzKSB8fCB2YWx1ZXMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgcyA9IDA7XHJcbiAgICAgICAgbGV0IGUgPSB2YWx1ZXMubGVuZ3RoIC0gMTtcclxuICAgICAgICB3aGlsZSAocyA8PSBlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGkgPSBNYXRoLmZsb29yKChzICsgZSkgLyAyKTtcclxuICAgICAgICAgICAgY29uc3QgdiA9IHZhbHVlc1tpXTtcclxuICAgICAgICAgICAgaWYgKE1hdGhVdGlscy5lcXVhbCh2LCB4LCBlcHNpbG9uKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHYgPCB4KSB7XHJcbiAgICAgICAgICAgICAgICBzID0gaSArIDE7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBlID0gaSAtIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbSA9IE1hdGgubWF4KGUsIDApO1xyXG4gICAgICAgIGNvbnN0IGEgPSB2YWx1ZXNbc107XHJcbiAgICAgICAgY29uc3QgYiA9IHZhbHVlc1ttXTtcclxuICAgICAgICByZXR1cm4gTWF0aC5hYnMoYSAtIHgpIDwgTWF0aC5hYnMoYiAtIHgpID8gcyA6IG07XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGFwcHJveGltYXRlKHg6IG51bWJlciwgdmFsdWVzOiBudW1iZXJbXSwgZXBzaWxvbjogbnVtYmVyID0gbnVsbCk6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSBNYXRoVXRpbHMuYXBwcm94SW5kZXgoeCwgdmFsdWVzLCBlcHNpbG9uKTtcclxuICAgICAgICByZXR1cm4gdmFsdWVzW2luZGV4XSA/PyBudWxsO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==