@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.
Files changed (268) hide show
  1. package/esm2022/ngx-utils/common-types.mjs +123 -0
  2. package/esm2022/ngx-utils/components/dynamic-table/dynamic-table.component.mjs +210 -0
  3. package/esm2022/ngx-utils/components/pagination-menu/pagination-menu.component.mjs +101 -0
  4. package/esm2022/ngx-utils/components/unordered-list/unordered-list.component.mjs +65 -0
  5. package/esm2022/ngx-utils/directives/async-method.base.mjs +82 -0
  6. package/{esm2020 → esm2022}/ngx-utils/directives/async-method.directive.mjs +21 -21
  7. package/esm2022/ngx-utils/directives/background.directive.mjs +51 -0
  8. package/{esm2020 → esm2022}/ngx-utils/directives/dynamic-table-template.directive.mjs +20 -20
  9. package/{esm2020 → esm2022}/ngx-utils/directives/global-template.directive.mjs +30 -30
  10. package/esm2022/ngx-utils/directives/icon.directive.mjs +67 -0
  11. package/esm2022/ngx-utils/directives/ngx-template-outlet.directive.mjs +90 -0
  12. package/{esm2020 → esm2022}/ngx-utils/directives/pagination-item.directive.mjs +34 -34
  13. package/esm2022/ngx-utils/directives/pagination.directive.mjs +84 -0
  14. package/esm2022/ngx-utils/directives/resource-if.directive.mjs +50 -0
  15. package/esm2022/ngx-utils/directives/sticky-class.directive.mjs +34 -0
  16. package/{esm2020 → esm2022}/ngx-utils/directives/sticky.directive.mjs +55 -55
  17. package/{esm2020 → esm2022}/ngx-utils/directives/unordered-list-item.directive.mjs +79 -79
  18. package/{esm2020 → esm2022}/ngx-utils/directives/unordered-list-template.directive.mjs +20 -20
  19. package/{esm2020 → esm2022}/ngx-utils/ngx-utils.imports.mjs +174 -174
  20. package/esm2022/ngx-utils/ngx-utils.module.mjs +202 -0
  21. package/esm2022/ngx-utils/pipes/chunk.pipe.mjs +25 -0
  22. package/{esm2020 → esm2022}/ngx-utils/pipes/entries.pipe.mjs +28 -28
  23. package/{esm2020 → esm2022}/ngx-utils/pipes/extra-item-properties.pipe.mjs +31 -31
  24. package/esm2022/ngx-utils/pipes/filter.pipe.mjs +37 -0
  25. package/esm2022/ngx-utils/pipes/find.pipe.mjs +29 -0
  26. package/{esm2020 → esm2022}/ngx-utils/pipes/format-number.pipe.mjs +21 -21
  27. package/{esm2020 → esm2022}/ngx-utils/pipes/get-offset.pipe.mjs +17 -17
  28. package/{esm2020 → esm2022}/ngx-utils/pipes/get-type.pipe.mjs +16 -16
  29. package/esm2022/ngx-utils/pipes/global-template.pipe.mjs +41 -0
  30. package/{esm2020 → esm2022}/ngx-utils/pipes/group-by.pipe.mjs +27 -27
  31. package/{esm2020 → esm2022}/ngx-utils/pipes/is-type.pipe.mjs +16 -16
  32. package/{esm2020 → esm2022}/ngx-utils/pipes/join.pipe.mjs +19 -19
  33. package/{esm2020 → esm2022}/ngx-utils/pipes/keys.pipe.mjs +22 -22
  34. package/{esm2020 → esm2022}/ngx-utils/pipes/map.pipe.mjs +29 -29
  35. package/{esm2020 → esm2022}/ngx-utils/pipes/max.pipe.mjs +26 -26
  36. package/{esm2020 → esm2022}/ngx-utils/pipes/min.pipe.mjs +26 -26
  37. package/{esm2020 → esm2022}/ngx-utils/pipes/pop.pipe.mjs +16 -16
  38. package/{esm2020 → esm2022}/ngx-utils/pipes/reduce.pipe.mjs +30 -30
  39. package/esm2022/ngx-utils/pipes/remap.pipe.mjs +32 -0
  40. package/{esm2020 → esm2022}/ngx-utils/pipes/replace.pipe.mjs +17 -17
  41. package/esm2022/ngx-utils/pipes/reverse.pipe.mjs +24 -0
  42. package/{esm2020 → esm2022}/ngx-utils/pipes/round.pipe.mjs +21 -21
  43. package/esm2022/ngx-utils/pipes/safe-html.pipe.mjs +34 -0
  44. package/{esm2020 → esm2022}/ngx-utils/pipes/shift.pipe.mjs +16 -16
  45. package/{esm2020 → esm2022}/ngx-utils/pipes/split.pipe.mjs +16 -16
  46. package/esm2022/ngx-utils/pipes/translate.pipe.mjs +86 -0
  47. package/{esm2020 → esm2022}/ngx-utils/pipes/values.pipe.mjs +22 -22
  48. package/esm2022/ngx-utils/plugins/resize-event.plugin.mjs +78 -0
  49. package/esm2022/ngx-utils/plugins/scroll-event.plugin.mjs +39 -0
  50. package/{esm2020 → esm2022}/ngx-utils/services/acl.service.mjs +84 -83
  51. package/esm2022/ngx-utils/services/api.service.mjs +42 -0
  52. package/{esm2020 → esm2022}/ngx-utils/services/auth.service.mjs +13 -13
  53. package/esm2022/ngx-utils/services/base-http.client.mjs +47 -0
  54. package/esm2022/ngx-utils/services/base-http.service.mjs +305 -0
  55. package/esm2022/ngx-utils/services/config.service.mjs +130 -0
  56. package/esm2022/ngx-utils/services/error-handler.service.mjs +49 -0
  57. package/{esm2020 → esm2022}/ngx-utils/services/events.service.mjs +26 -26
  58. package/{esm2020 → esm2022}/ngx-utils/services/formatter.service.mjs +49 -49
  59. package/esm2022/ngx-utils/services/global-template.service.mjs +37 -0
  60. package/esm2022/ngx-utils/services/icon.service.mjs +26 -0
  61. package/esm2022/ngx-utils/services/language.service.mjs +124 -0
  62. package/{esm2020 → esm2022}/ngx-utils/services/local-http.service.mjs +47 -47
  63. package/{esm2020 → esm2022}/ngx-utils/services/open-api.service.mjs +40 -40
  64. package/{esm2020 → esm2022}/ngx-utils/services/promise.service.mjs +55 -55
  65. package/esm2022/ngx-utils/services/state.service.mjs +177 -0
  66. package/{esm2020 → esm2022}/ngx-utils/services/static-language.service.mjs +166 -166
  67. package/esm2022/ngx-utils/services/storage.service.mjs +49 -0
  68. package/{esm2020 → esm2022}/ngx-utils/services/toaster.service.mjs +32 -32
  69. package/esm2022/ngx-utils/services/translated-url.serializer.mjs +73 -0
  70. package/esm2022/ngx-utils/services/universal.service.mjs +81 -0
  71. package/{esm2020 → esm2022}/ngx-utils/services/wasm.service.mjs +46 -46
  72. package/esm2022/ngx-utils/utils/ajax-request-handler.mjs +40 -0
  73. package/esm2022/ngx-utils/utils/array.utils.mjs +107 -0
  74. package/esm2022/ngx-utils/utils/auth.guard.mjs +181 -0
  75. package/esm2022/ngx-utils/utils/cached-factory.mjs +30 -0
  76. package/esm2022/ngx-utils/utils/canvas.utils.mjs +388 -0
  77. package/esm2022/ngx-utils/utils/date.utils.mjs +29 -0
  78. package/{esm2020 → esm2022}/ngx-utils/utils/file-system.mjs +24 -24
  79. package/esm2022/ngx-utils/utils/file.utils.mjs +90 -0
  80. package/{esm2020 → esm2022}/ngx-utils/utils/generic-value.mjs +20 -20
  81. package/esm2022/ngx-utils/utils/geometry.mjs +132 -0
  82. package/{esm2020 → esm2022}/ngx-utils/utils/initializer.mjs +20 -20
  83. package/esm2022/ngx-utils/utils/jsonfn.mjs +45 -0
  84. package/esm2022/ngx-utils/utils/loader.utils.mjs +55 -0
  85. package/esm2022/ngx-utils/utils/math.utils.mjs +44 -0
  86. package/esm2022/ngx-utils/utils/object.utils.mjs +320 -0
  87. package/{esm2020 → esm2022}/ngx-utils/utils/observable.utils.mjs +63 -63
  88. package/esm2022/ngx-utils/utils/reflect.utils.mjs +33 -0
  89. package/esm2022/ngx-utils/utils/set.utils.mjs +20 -0
  90. package/esm2022/ngx-utils/utils/string.utils.mjs +41 -0
  91. package/{esm2020 → esm2022}/ngx-utils/utils/timer.utils.mjs +51 -51
  92. package/esm2022/ngx-utils/utils/unique.utils.mjs +24 -0
  93. package/esm2022/ngx-utils/utils/vector.mjs +77 -0
  94. package/esm2022/ngx-utils/utils/wasi.mjs +159 -0
  95. package/esm2022/ngx-utils/utils/wasm-worker-proxy.mjs +99 -0
  96. package/{esm2020 → esm2022}/ngx-utils/utils/with-options-provider.mjs +23 -23
  97. package/{esm2020 → esm2022}/public_api.mjs +93 -93
  98. package/{esm2020 → esm2022}/stemy-ngx-utils.mjs +4 -4
  99. package/esm2022/tools/config.mjs +71 -0
  100. package/{esm2020 → esm2022}/tools/public_api.mjs +1 -1
  101. package/{esm2020 → esm2022}/tools/stemy-ngx-utils-tools.mjs +4 -4
  102. package/{fesm2020 → fesm2022}/stemy-ngx-utils-tools.mjs +71 -71
  103. package/{fesm2015 → fesm2022}/stemy-ngx-utils-tools.mjs.map +1 -1
  104. package/{fesm2020 → fesm2022}/stemy-ngx-utils.mjs +5639 -5636
  105. package/fesm2022/stemy-ngx-utils.mjs.map +1 -0
  106. package/{stemy-ngx-utils.d.ts → index.d.ts} +5 -5
  107. package/ng.mjs +5 -0
  108. package/ngx-utils/common-types.d.ts +378 -378
  109. package/ngx-utils/components/dynamic-table/dynamic-table.component.d.ts +56 -56
  110. package/ngx-utils/components/pagination-menu/pagination-menu.component.d.ts +31 -31
  111. package/ngx-utils/components/unordered-list/unordered-list.component.d.ts +25 -25
  112. package/ngx-utils/directives/async-method.base.d.ts +19 -19
  113. package/ngx-utils/directives/async-method.directive.d.ts +9 -9
  114. package/ngx-utils/directives/background.directive.d.ts +17 -17
  115. package/ngx-utils/directives/dynamic-table-template.directive.d.ts +11 -11
  116. package/ngx-utils/directives/global-template.directive.d.ts +13 -13
  117. package/ngx-utils/directives/icon.directive.d.ts +23 -23
  118. package/ngx-utils/directives/ngx-template-outlet.directive.d.ts +17 -17
  119. package/ngx-utils/directives/pagination-item.directive.d.ts +15 -15
  120. package/ngx-utils/directives/pagination.directive.d.ts +25 -25
  121. package/ngx-utils/directives/resource-if.directive.d.ts +19 -19
  122. package/ngx-utils/directives/sticky-class.directive.d.ts +15 -15
  123. package/ngx-utils/directives/sticky.directive.d.ts +19 -19
  124. package/ngx-utils/directives/unordered-list-item.directive.d.ts +28 -28
  125. package/ngx-utils/directives/unordered-list-template.directive.d.ts +11 -11
  126. package/ngx-utils/ngx-utils.imports.d.ts +74 -0
  127. package/ngx-utils/ngx-utils.module.d.ts +58 -58
  128. package/ngx-utils/pipes/chunk.pipe.d.ts +7 -7
  129. package/ngx-utils/pipes/entries.pipe.d.ts +12 -12
  130. package/ngx-utils/pipes/extra-item-properties.pipe.d.ts +8 -8
  131. package/ngx-utils/pipes/filter.pipe.d.ts +8 -8
  132. package/ngx-utils/pipes/find.pipe.d.ts +8 -8
  133. package/ngx-utils/pipes/format-number.pipe.d.ts +10 -10
  134. package/ngx-utils/pipes/get-offset.pipe.d.ts +7 -7
  135. package/ngx-utils/pipes/get-type.pipe.d.ts +7 -7
  136. package/ngx-utils/pipes/global-template.pipe.d.ts +16 -16
  137. package/ngx-utils/pipes/group-by.pipe.d.ts +8 -8
  138. package/ngx-utils/pipes/is-type.pipe.d.ts +7 -7
  139. package/ngx-utils/pipes/join.pipe.d.ts +7 -7
  140. package/ngx-utils/pipes/keys.pipe.d.ts +7 -7
  141. package/ngx-utils/pipes/map.pipe.d.ts +8 -8
  142. package/ngx-utils/pipes/max.pipe.d.ts +7 -7
  143. package/ngx-utils/pipes/min.pipe.d.ts +7 -7
  144. package/ngx-utils/pipes/pop.pipe.d.ts +7 -7
  145. package/ngx-utils/pipes/reduce.pipe.d.ts +8 -8
  146. package/ngx-utils/pipes/remap.pipe.d.ts +7 -7
  147. package/ngx-utils/pipes/replace.pipe.d.ts +7 -7
  148. package/ngx-utils/pipes/reverse.pipe.d.ts +7 -7
  149. package/ngx-utils/pipes/round.pipe.d.ts +10 -10
  150. package/ngx-utils/pipes/safe-html.pipe.d.ts +10 -10
  151. package/ngx-utils/pipes/shift.pipe.d.ts +7 -7
  152. package/ngx-utils/pipes/split.pipe.d.ts +7 -7
  153. package/ngx-utils/pipes/translate.pipe.d.ts +19 -19
  154. package/ngx-utils/pipes/values.pipe.d.ts +7 -7
  155. package/ngx-utils/plugins/resize-event.plugin.d.ts +17 -17
  156. package/ngx-utils/plugins/scroll-event.plugin.d.ts +13 -13
  157. package/ngx-utils/services/acl.service.d.ts +14 -14
  158. package/ngx-utils/services/api.service.d.ts +17 -17
  159. package/ngx-utils/services/auth.service.d.ts +8 -8
  160. package/ngx-utils/services/base-http.client.d.ts +15 -15
  161. package/ngx-utils/services/base-http.service.d.ts +53 -53
  162. package/ngx-utils/services/config.service.d.ts +30 -30
  163. package/ngx-utils/services/error-handler.service.d.ts +13 -13
  164. package/ngx-utils/services/events.service.d.ts +14 -14
  165. package/ngx-utils/services/formatter.service.d.ts +15 -15
  166. package/ngx-utils/services/global-template.service.d.ts +19 -19
  167. package/ngx-utils/services/icon.service.d.ts +13 -13
  168. package/ngx-utils/services/language.service.d.ts +21 -21
  169. package/ngx-utils/services/local-http.service.d.ts +14 -14
  170. package/ngx-utils/services/open-api.service.d.ts +11 -11
  171. package/ngx-utils/services/promise.service.d.ts +19 -19
  172. package/ngx-utils/services/state.service.d.ts +49 -49
  173. package/ngx-utils/services/static-language.service.d.ts +46 -46
  174. package/ngx-utils/services/storage.service.d.ts +15 -15
  175. package/ngx-utils/services/toaster.service.d.ts +13 -13
  176. package/ngx-utils/services/translated-url.serializer.d.ts +19 -19
  177. package/ngx-utils/services/universal.service.d.ts +28 -28
  178. package/ngx-utils/services/wasm.service.d.ts +25 -25
  179. package/ngx-utils/utils/ajax-request-handler.d.ts +11 -11
  180. package/ngx-utils/utils/array.utils.d.ts +11 -11
  181. package/ngx-utils/utils/auth.guard.d.ts +29 -29
  182. package/ngx-utils/utils/cached-factory.d.ts +2 -2
  183. package/ngx-utils/utils/canvas.utils.d.ts +13 -13
  184. package/ngx-utils/utils/date.utils.d.ts +8 -8
  185. package/ngx-utils/utils/file-system.d.ts +16 -16
  186. package/ngx-utils/utils/file.utils.d.ts +14 -14
  187. package/ngx-utils/utils/generic-value.d.ts +8 -8
  188. package/ngx-utils/utils/geometry.d.ts +50 -50
  189. package/ngx-utils/utils/initializer.d.ts +12 -12
  190. package/ngx-utils/utils/jsonfn.d.ts +6 -6
  191. package/ngx-utils/utils/loader.utils.d.ts +7 -7
  192. package/ngx-utils/utils/math.utils.d.ts +8 -8
  193. package/ngx-utils/utils/object.utils.d.ts +35 -35
  194. package/ngx-utils/utils/observable.utils.d.ts +13 -13
  195. package/ngx-utils/utils/reflect.utils.d.ts +9 -9
  196. package/ngx-utils/utils/set.utils.d.ts +4 -4
  197. package/ngx-utils/utils/string.utils.d.ts +9 -9
  198. package/ngx-utils/utils/timer.utils.d.ts +6 -6
  199. package/ngx-utils/utils/unique.utils.d.ts +5 -5
  200. package/ngx-utils/utils/vector.d.ts +23 -23
  201. package/ngx-utils/utils/wasi.d.ts +26 -26
  202. package/ngx-utils/utils/wasm-worker-proxy.d.ts +17 -17
  203. package/ngx-utils/utils/with-options-provider.d.ts +3 -3
  204. package/package.json +21 -29
  205. package/public_api.d.ts +93 -93
  206. package/tools/config.d.ts +7 -7
  207. package/tools/{stemy-ngx-utils-tools.d.ts → index.d.ts} +5 -5
  208. package/tools/public_api.d.ts +1 -1
  209. package/esm2020/ngx-utils/common-types.mjs +0 -123
  210. package/esm2020/ngx-utils/components/dynamic-table/dynamic-table.component.mjs +0 -210
  211. package/esm2020/ngx-utils/components/pagination-menu/pagination-menu.component.mjs +0 -101
  212. package/esm2020/ngx-utils/components/unordered-list/unordered-list.component.mjs +0 -65
  213. package/esm2020/ngx-utils/directives/async-method.base.mjs +0 -82
  214. package/esm2020/ngx-utils/directives/background.directive.mjs +0 -51
  215. package/esm2020/ngx-utils/directives/icon.directive.mjs +0 -67
  216. package/esm2020/ngx-utils/directives/ngx-template-outlet.directive.mjs +0 -90
  217. package/esm2020/ngx-utils/directives/pagination.directive.mjs +0 -84
  218. package/esm2020/ngx-utils/directives/resource-if.directive.mjs +0 -50
  219. package/esm2020/ngx-utils/directives/sticky-class.directive.mjs +0 -34
  220. package/esm2020/ngx-utils/ngx-utils.module.mjs +0 -204
  221. package/esm2020/ngx-utils/pipes/chunk.pipe.mjs +0 -25
  222. package/esm2020/ngx-utils/pipes/filter.pipe.mjs +0 -37
  223. package/esm2020/ngx-utils/pipes/find.pipe.mjs +0 -29
  224. package/esm2020/ngx-utils/pipes/global-template.pipe.mjs +0 -41
  225. package/esm2020/ngx-utils/pipes/remap.pipe.mjs +0 -32
  226. package/esm2020/ngx-utils/pipes/reverse.pipe.mjs +0 -24
  227. package/esm2020/ngx-utils/pipes/safe-html.pipe.mjs +0 -34
  228. package/esm2020/ngx-utils/pipes/translate.pipe.mjs +0 -86
  229. package/esm2020/ngx-utils/plugins/resize-event.plugin.mjs +0 -78
  230. package/esm2020/ngx-utils/plugins/scroll-event.plugin.mjs +0 -39
  231. package/esm2020/ngx-utils/services/api.service.mjs +0 -42
  232. package/esm2020/ngx-utils/services/base-http.client.mjs +0 -47
  233. package/esm2020/ngx-utils/services/base-http.service.mjs +0 -305
  234. package/esm2020/ngx-utils/services/config.service.mjs +0 -130
  235. package/esm2020/ngx-utils/services/error-handler.service.mjs +0 -49
  236. package/esm2020/ngx-utils/services/global-template.service.mjs +0 -37
  237. package/esm2020/ngx-utils/services/icon.service.mjs +0 -26
  238. package/esm2020/ngx-utils/services/language.service.mjs +0 -124
  239. package/esm2020/ngx-utils/services/state.service.mjs +0 -173
  240. package/esm2020/ngx-utils/services/storage.service.mjs +0 -49
  241. package/esm2020/ngx-utils/services/translated-url.serializer.mjs +0 -73
  242. package/esm2020/ngx-utils/services/universal.service.mjs +0 -81
  243. package/esm2020/ngx-utils/utils/ajax-request-handler.mjs +0 -40
  244. package/esm2020/ngx-utils/utils/array.utils.mjs +0 -107
  245. package/esm2020/ngx-utils/utils/auth.guard.mjs +0 -181
  246. package/esm2020/ngx-utils/utils/cached-factory.mjs +0 -30
  247. package/esm2020/ngx-utils/utils/canvas.utils.mjs +0 -388
  248. package/esm2020/ngx-utils/utils/date.utils.mjs +0 -29
  249. package/esm2020/ngx-utils/utils/file.utils.mjs +0 -90
  250. package/esm2020/ngx-utils/utils/geometry.mjs +0 -132
  251. package/esm2020/ngx-utils/utils/jsonfn.mjs +0 -45
  252. package/esm2020/ngx-utils/utils/loader.utils.mjs +0 -55
  253. package/esm2020/ngx-utils/utils/math.utils.mjs +0 -44
  254. package/esm2020/ngx-utils/utils/object.utils.mjs +0 -320
  255. package/esm2020/ngx-utils/utils/reflect.utils.mjs +0 -33
  256. package/esm2020/ngx-utils/utils/set.utils.mjs +0 -20
  257. package/esm2020/ngx-utils/utils/string.utils.mjs +0 -41
  258. package/esm2020/ngx-utils/utils/unique.utils.mjs +0 -24
  259. package/esm2020/ngx-utils/utils/vector.mjs +0 -77
  260. package/esm2020/ngx-utils/utils/wasi.mjs +0 -159
  261. package/esm2020/ngx-utils/utils/wasm-worker-proxy.mjs +0 -99
  262. package/esm2020/tools/config.mjs +0 -71
  263. package/fesm2015/stemy-ngx-utils-tools.mjs +0 -77
  264. package/fesm2015/stemy-ngx-utils.mjs +0 -5894
  265. package/fesm2015/stemy-ngx-utils.mjs.map +0 -1
  266. package/fesm2020/stemy-ngx-utils-tools.mjs.map +0 -1
  267. package/fesm2020/stemy-ngx-utils.mjs.map +0 -1
  268. 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlZC11cmwuc2VyaWFsaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9uZ3gtdXRpbHMvc2VydmljZXMvdHJhbnNsYXRlZC11cmwuc2VyaWFsaXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUMsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRixPQUFPLEVBQW1CLGdCQUFnQixFQUFDLE1BQU0saUJBQWlCLENBQUM7O0FBT25FLE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxvQkFBb0I7SUFJN0QsWUFBK0MsUUFBMEI7UUFDckUsS0FBSyxFQUFFLENBQUM7UUFEbUMsYUFBUSxHQUFSLFFBQVEsQ0FBa0I7UUFFckUsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELFNBQVMsQ0FBQyxJQUFhO1FBQ25CLE1BQU0sSUFBSSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDM0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUFFO1lBQ3RELE9BQU8sQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQzVELENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3BDLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQVc7UUFDYixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsRUFBRTtZQUN0RCxPQUFPLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQztRQUM1RCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxhQUFhLENBQUMsU0FBa0I7UUFDNUIsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNqRCxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ3pELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbkIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7WUFDdEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtnQkFDcEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO29CQUFFLE9BQU8sR0FBRyxDQUFDO2dCQUMxQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3hCLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDaEMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO2dCQUN2RCxPQUFPLEdBQUcsQ0FBQztZQUNmLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNYLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELG1CQUFtQixDQUFDLFlBQTZCLEVBQUUsRUFBaUM7UUFDaEYsSUFBSSxDQUFDLFlBQVk7WUFBRSxPQUFPLElBQUksQ0FBQztRQUMvQixNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdkIsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUMxRSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN2RSxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hCLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDakIsT0FBTyxHQUFHLENBQUM7UUFDZixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDUCxNQUFNLFFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUMvRCxDQUFDLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUM1RCxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDTixPQUFPLENBQUMsQ0FBQztRQUNiLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2QsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNwQixDQUFDLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7K0dBOURRLHVCQUF1QixrQkFJWixnQkFBZ0I7bUhBSjNCLHVCQUF1Qjs7NEZBQXZCLHVCQUF1QjtrQkFEbkMsVUFBVTs7MEJBS00sTUFBTTsyQkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZX0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtEZWZhdWx0VXJsU2VyaWFsaXplciwgVXJsU2VnbWVudCwgVXJsU2VnbWVudEdyb3VwLCBVcmxUcmVlfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7SUxhbmd1YWdlU2VydmljZSwgTEFOR1VBR0VfU0VSVklDRX0gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVXJsRGljdGlvbmFyeSB7XHJcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmdcclxufVxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgVHJhbnNsYXRlZFVybFNlcmlhbGl6ZXIgZXh0ZW5kcyBEZWZhdWx0VXJsU2VyaWFsaXplciB7XHJcblxyXG4gICAgcHJvdGVjdGVkIGNhY2hlOiB7W2xhbmc6IHN0cmluZ106IElVcmxEaWN0aW9uYXJ5fTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KExBTkdVQUdFX1NFUlZJQ0UpIHJlYWRvbmx5IGxhbmd1YWdlOiBJTGFuZ3VhZ2VTZXJ2aWNlKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmNhY2hlID0ge307XHJcbiAgICB9XHJcblxyXG4gICAgc2VyaWFsaXplKHRyZWU6IFVybFRyZWUpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IGNvcHkgPSBuZXcgVXJsVHJlZSgpO1xyXG4gICAgICAgIGNvbnN0IGRpY3Rpb25hcnkgPSB0aGlzLmdldERpY3Rpb25hcnkodHJ1ZSk7XHJcbiAgICAgICAgY29weS5yb290ID0gdGhpcy5tb2RpZnlUcmVlUmVjdXJzaXZlKHRyZWUucm9vdCwgc2VnbWVudCA9PiB7XHJcbiAgICAgICAgICAgIHNlZ21lbnQucGF0aCA9IGRpY3Rpb25hcnlbc2VnbWVudC5wYXRoXSB8fCBzZWdtZW50LnBhdGg7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29weS5xdWVyeVBhcmFtcyA9IHRyZWUucXVlcnlQYXJhbXM7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLnNlcmlhbGl6ZShjb3B5KTtcclxuICAgIH1cclxuXHJcbiAgICBwYXJzZSh1cmw6IHN0cmluZyk6IFVybFRyZWUge1xyXG4gICAgICAgIGNvbnN0IHRyZWUgPSBzdXBlci5wYXJzZSh1cmwpO1xyXG4gICAgICAgIGNvbnN0IGRpY3Rpb25hcnkgPSB0aGlzLmdldERpY3Rpb25hcnkoZmFsc2UpO1xyXG4gICAgICAgIHRyZWUucm9vdCA9IHRoaXMubW9kaWZ5VHJlZVJlY3Vyc2l2ZSh0cmVlLnJvb3QsIHNlZ21lbnQgPT4ge1xyXG4gICAgICAgICAgICBzZWdtZW50LnBhdGggPSBkaWN0aW9uYXJ5W3NlZ21lbnQucGF0aF0gfHwgc2VnbWVudC5wYXRoO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0cmVlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERpY3Rpb25hcnkoc2VyaWFsaXplOiBib29sZWFuKTogSVVybERpY3Rpb25hcnkge1xyXG4gICAgICAgIGNvbnN0IG1ldGhvZCA9IHNlcmlhbGl6ZSA/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
- WasmServicefac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: WasmService, deps: [{ token: i1.UniversalService }, { token: i2.LocalHttpService }, { token: WASI_IMPLEMENTATION }], target: i0.ɵɵFactoryTarget.Injectable });
39
- WasmService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: WasmService });
40
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: WasmService, decorators: [{
41
- type: Injectable
42
- }], ctorParameters: function () { return [{ type: i1.UniversalService }, { type: i2.LocalHttpService }, { type: undefined, decorators: [{
43
- type: Inject,
44
- args: [WASI_IMPLEMENTATION]
45
- }] }]; } });
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FzbS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25neC11dGlscy9zZXJ2aWNlcy93YXNtLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQU8sTUFBTSxlQUFlLENBQUM7QUFDdkQsT0FBTyxFQUEyQixtQkFBbUIsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzlFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQzs7OztBQUd0RDs7R0FFRztBQUVILE1BQU0sT0FBTyxXQUFXO0lBTXBCLFlBQXNCLFNBQTJCLEVBQzNCLElBQXNCLEVBQ0gsSUFBVztRQUY5QixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixTQUFJLEdBQUosSUFBSSxDQUFrQjtRQUV4QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFrQixDQUFDO0lBQ3hDLENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUyxDQUFZLElBQVk7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSTtZQUNsQyxPQUFPLElBQUksQ0FBQztRQUNoQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLElBQUksT0FBTyxFQUFFO1lBQzFFLFlBQVksRUFBRSxhQUFhO1NBQzlCLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ3BCLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzdCLE9BQU8sTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBaUIsQ0FBQztJQUM5QyxDQUFDO0lBRUQsZUFBZSxDQUFpQixJQUFZO1FBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUk7WUFDbEMsT0FBTyxJQUFJLENBQUM7UUFDaEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQztRQUM5QyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksZUFBZSxDQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLEVBQ2xDLElBQUksQ0FBQyxJQUFJLENBQ1osQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBRTtJQUNyQyxDQUFDOzt3R0FsQ1EsV0FBVyxrRkFRQSxtQkFBbUI7NEdBUjlCLFdBQVc7MkZBQVgsV0FBVztrQkFEdkIsVUFBVTs7MEJBU00sTUFBTTsyQkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgVHlwZX0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtJV2FzaSwgSVdhc20sIElXYXNtQXN5bmMsIFdBU0lfSU1QTEVNRU5UQVRJT059IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtXYXNtV29ya2VyUHJveHl9IGZyb20gXCIuLi91dGlscy93YXNtLXdvcmtlci1wcm94eVwiO1xyXG5pbXBvcnQge1VuaXZlcnNhbFNlcnZpY2V9IGZyb20gXCIuL3VuaXZlcnNhbC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7TG9jYWxIdHRwU2VydmljZX0gZnJvbSBcIi4vbG9jYWwtaHR0cC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7V2FzaX0gZnJvbSBcIi4uL3V0aWxzL3dhc2lcIjtcclxuXHJcbi8qKlxyXG4gKiBVc2UgdGhpcyBzZXJ2aWNlIHRvIGxvYWQgV2ViQXNzZW1ibHkgbW9kdWxlc1xyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgV2FzbVNlcnZpY2Uge1xyXG5cclxuICAgIHByb3RlY3RlZCB3YXNpOiBUeXBlPFdhc2k+XHJcbiAgICBwcm90ZWN0ZWQgbW9kdWxlczogeyBbdXJsOiBzdHJpbmddOiBQcm9taXNlPGFueT4gfTtcclxuICAgIHByb3RlY3RlZCB3b3JrZXJNb2R1bGVzOiB7IFt1cmw6IHN0cmluZ106IGFueSB9O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCB1bml2ZXJzYWw6IFVuaXZlcnNhbFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgaHR0cDogTG9jYWxIdHRwU2VydmljZSxcclxuICAgICAgICAgICAgICAgIEBJbmplY3QoV0FTSV9JTVBMRU1FTlRBVElPTikgd2FzaTogSVdhc2kpIHtcclxuICAgICAgICB0aGlzLndhc2kgPSB3YXNpLmNvbnN0cnVjdG9yIGFzIGFueTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRNb2R1bGU8VCA9IElXYXNtPihuYW1lOiBzdHJpbmcpOiBQcm9taXNlPFQ+IHtcclxuICAgICAgICBpZiAoIXRoaXMudW5pdmVyc2FsLmlzQnJvd3NlciB8fCAhbmFtZSlcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdGhpcy5tb2R1bGVzID0gdGhpcy5tb2R1bGVzIHx8IHt9O1xyXG4gICAgICAgIHRoaXMubW9kdWxlc1tuYW1lXSA9IHRoaXMubW9kdWxlc1tuYW1lXSB8fCB0aGlzLmh0dHAuZ2V0KGB3YXNtLyR7bmFtZX0ud2FzbWAsIHtcclxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImFycmF5YnVmZmVyXCJcclxuICAgICAgICB9KS50aGVuKGFzeW5jIChieXRlcykgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB3YXNpID0gbmV3IHRoaXMud2FzaSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgd2FzaS5pbnN0YW50aWF0ZShieXRlcyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kdWxlc1tuYW1lXSBhcyBQcm9taXNlPGFueT47XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0V29ya2VyTW9kdWxlPFQgPSBJV2FzbUFzeW5jPihuYW1lOiBzdHJpbmcpOiBUIHtcclxuICAgICAgICBpZiAoIXRoaXMudW5pdmVyc2FsLmlzQnJvd3NlciB8fCAhbmFtZSlcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdGhpcy53b3JrZXJNb2R1bGVzID0gdGhpcy53b3JrZXJNb2R1bGVzIHx8IHt9O1xyXG4gICAgICAgIHRoaXMud29ya2VyTW9kdWxlc1tuYW1lXSA9IG5ldyBXYXNtV29ya2VyUHJveHkoXHJcbiAgICAgICAgICAgIHRoaXMuaHR0cC51cmwoYHdhc20vJHtuYW1lfS53YXNtYCksXHJcbiAgICAgICAgICAgIHRoaXMud2FzaVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMud29ya2VyTW9kdWxlc1tuYW1lXSA7XHJcbiAgICB9XHJcbn1cclxuIl19
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 { thisprov = 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=