angular-toolbox 0.0.8 → 0.9.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 (231) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +14 -10
  3. package/{esm2020 → esm2022}/angular-toolbox.mjs +4 -4
  4. package/esm2022/lib/angular-toolbox.module.mjs +21 -0
  5. package/esm2022/lib/core/bridge/app-bridge.mjs +76 -0
  6. package/esm2022/lib/core/error/app-bridge-error.mjs +24 -0
  7. package/esm2022/lib/core/error/http-mock-service-error.mjs +26 -0
  8. package/esm2022/lib/core/error/index.mjs +5 -0
  9. package/esm2022/lib/core/error/integrity-error.mjs +26 -0
  10. package/esm2022/lib/core/error/subscription-error.mjs +26 -0
  11. package/esm2022/lib/core/impl/index.mjs +2 -0
  12. package/esm2022/lib/core/impl/lang/identifiable-component.mjs +31 -0
  13. package/esm2022/lib/core/impl/lang/index.mjs +2 -0
  14. package/esm2022/lib/core/impl/version/version.impl.mjs +34 -0
  15. package/esm2022/lib/core/index.mjs +3 -0
  16. package/esm2022/lib/directive/anchor-link.directive.mjs +62 -0
  17. package/esm2022/lib/directive/button-role.directive.mjs +102 -0
  18. package/esm2022/lib/directive/content-renderer.directive.mjs +61 -0
  19. package/esm2022/lib/directive/index.mjs +5 -0
  20. package/esm2022/lib/directive/navigate-to-url.directive.mjs +51 -0
  21. package/esm2022/lib/directive/navigation-directive-base.mjs +23 -0
  22. package/esm2022/lib/framework/index.mjs +2 -0
  23. package/esm2022/lib/framework/mock/http/config/http-mock-parameters.mjs +9 -0
  24. package/esm2022/lib/framework/mock/http/config/http-mock.decorator.mjs +48 -0
  25. package/esm2022/lib/framework/mock/http/config/index.mjs +3 -0
  26. package/esm2022/lib/framework/mock/http/config/route-mock-config.mjs +9 -0
  27. package/esm2022/lib/framework/mock/http/core/data-storage.mjs +9 -0
  28. package/esm2022/lib/framework/mock/http/event/event-target.impl.mjs +122 -0
  29. package/esm2022/lib/framework/mock/http/event/progress-event-mock.mjs +48 -0
  30. package/esm2022/lib/framework/mock/http/index.mjs +4 -0
  31. package/esm2022/lib/framework/mock/http/path-to-regexp/constants.mjs +111 -0
  32. package/esm2022/lib/framework/mock/http/path-to-regexp/escape-to-regexp-string.mjs +34 -0
  33. package/esm2022/lib/framework/mock/http/path-to-regexp/get-flags.mjs +28 -0
  34. package/esm2022/lib/framework/mock/http/path-to-regexp/iter.mjs +76 -0
  35. package/esm2022/lib/framework/mock/http/path-to-regexp/lexer.mjs +96 -0
  36. package/esm2022/lib/framework/mock/http/path-to-regexp/loose-replacer.mjs +28 -0
  37. package/esm2022/lib/framework/mock/http/path-to-regexp/model/decode-key-to-string.mjs +17 -0
  38. package/esm2022/lib/framework/mock/http/path-to-regexp/model/encode.mjs +17 -0
  39. package/esm2022/lib/framework/mock/http/path-to-regexp/model/key.mjs +17 -0
  40. package/esm2022/lib/framework/mock/http/path-to-regexp/model/lex-token.mjs +17 -0
  41. package/esm2022/lib/framework/mock/http/path-to-regexp/model/lexer-type.mjs +17 -0
  42. package/esm2022/lib/framework/mock/http/path-to-regexp/model/loose-replacer-provider.mjs +17 -0
  43. package/esm2022/lib/framework/mock/http/path-to-regexp/model/non-delimiter-encoder-provider.mjs +17 -0
  44. package/esm2022/lib/framework/mock/http/path-to-regexp/model/parse-options.mjs +17 -0
  45. package/esm2022/lib/framework/mock/http/path-to-regexp/model/path-to-regexp-options.mjs +17 -0
  46. package/esm2022/lib/framework/mock/http/path-to-regexp/model/route-string-tokenizer.mjs +17 -0
  47. package/esm2022/lib/framework/mock/http/path-to-regexp/model/simple-tokens.mjs +30 -0
  48. package/esm2022/lib/framework/mock/http/path-to-regexp/model/token-data-regexp-factory.mjs +17 -0
  49. package/esm2022/lib/framework/mock/http/path-to-regexp/model/token-type.mjs +17 -0
  50. package/esm2022/lib/framework/mock/http/path-to-regexp/model/token.mjs +17 -0
  51. package/esm2022/lib/framework/mock/http/path-to-regexp/string-to-token-data.mjs +87 -0
  52. package/esm2022/lib/framework/mock/http/path-to-regexp/to-key-regexp.mjs +41 -0
  53. package/esm2022/lib/framework/mock/http/path-to-regexp/to-stringify.mjs +29 -0
  54. package/esm2022/lib/framework/mock/http/path-to-regexp/token-data-to-regexp.mjs +49 -0
  55. package/esm2022/lib/framework/mock/http/path-to-regexp/token-data.mjs +33 -0
  56. package/esm2022/lib/framework/mock/http/util/data-storage.builder.mjs +35 -0
  57. package/esm2022/lib/framework/mock/http/util/http-headers-mock.builder.mjs +138 -0
  58. package/esm2022/lib/framework/mock/http/util/http-headers.util.mjs +56 -0
  59. package/esm2022/lib/framework/mock/http/util/http-method-ref.enum.mjs +60 -0
  60. package/esm2022/lib/framework/mock/http/util/http-mock-response.builder.mjs +117 -0
  61. package/esm2022/lib/framework/mock/http/util/index.mjs +3 -0
  62. package/esm2022/lib/framework/mock/http/xhr/delegate-xhr.mjs +316 -0
  63. package/esm2022/lib/framework/mock/http/xhr/http-mock-factory.impl.mjs +29 -0
  64. package/esm2022/lib/framework/mock/http/xhr/http-mock-factory.mjs +19 -0
  65. package/esm2022/lib/framework/mock/http/xhr/index.mjs +2 -0
  66. package/esm2022/lib/framework/mock/http/xhr/xhr-base.mjs +123 -0
  67. package/esm2022/lib/framework/mock/http/xhr/xhr-proxy-impl.mjs +177 -0
  68. package/esm2022/lib/model/business/index.mjs +5 -0
  69. package/esm2022/lib/model/business/lang/app-bridge-command.mjs +9 -0
  70. package/esm2022/lib/model/business/lang/destroyable.mjs +9 -0
  71. package/esm2022/lib/model/business/lang/identifiable.mjs +9 -0
  72. package/esm2022/lib/model/business/lang/index.mjs +5 -0
  73. package/esm2022/lib/model/business/lang/instantiable.mjs +9 -0
  74. package/esm2022/lib/model/business/mock/http/http-method-mock.mjs +9 -0
  75. package/esm2022/lib/model/business/mock/http/http-mock-config.mjs +9 -0
  76. package/esm2022/lib/model/business/mock/http/http-mock-endpoint.mjs +9 -0
  77. package/esm2022/lib/model/business/mock/http/http-mock-error.mjs +9 -0
  78. package/esm2022/lib/model/business/mock/http/http-mock-interceptor.mjs +9 -0
  79. package/esm2022/lib/model/business/mock/http/http-response-mock.mjs +9 -0
  80. package/esm2022/lib/model/business/mock/http/index.mjs +8 -0
  81. package/esm2022/lib/model/business/mock/http/xhr-proxy.mjs +9 -0
  82. package/esm2022/lib/model/business/ui/dark-mode-config.mjs +9 -0
  83. package/esm2022/lib/model/business/ui/dark-mode-config.provider.mjs +43 -0
  84. package/esm2022/lib/model/business/ui/dark-mode.constant.mjs +16 -0
  85. package/esm2022/lib/model/business/ui/index.mjs +5 -0
  86. package/esm2022/lib/model/business/ui/scroll-behavior.type.mjs +9 -0
  87. package/esm2022/lib/model/business/version/index.mjs +4 -0
  88. package/esm2022/lib/model/business/version/version-config.mjs +9 -0
  89. package/esm2022/lib/model/business/version/version-config.provider.mjs +40 -0
  90. package/esm2022/lib/model/business/version/version.mjs +10 -0
  91. package/esm2022/lib/model/index.mjs +3 -0
  92. package/esm2022/lib/model/service/index.mjs +5 -0
  93. package/esm2022/lib/model/service/mock/http/http-mock.service.mjs +239 -0
  94. package/esm2022/lib/model/service/subscription/subscription.service.mjs +122 -0
  95. package/esm2022/lib/model/service/ui/app-bridge.service.mjs +142 -0
  96. package/esm2022/lib/model/service/ui/dark-mode.service.mjs +183 -0
  97. package/esm2022/lib/model/service/ui/index.mjs +4 -0
  98. package/esm2022/lib/model/service/ui/scroll.service.mjs +93 -0
  99. package/esm2022/lib/model/service/version/version.service.mjs +51 -0
  100. package/{esm2020 → esm2022}/lib/pipe/index.mjs +1 -1
  101. package/esm2022/lib/pipe/safe/safe-html.pipe.mjs +34 -0
  102. package/esm2022/lib/util/aria-role.constant.mjs +16 -0
  103. package/esm2022/lib/util/default-scroll-behavior.mjs +13 -0
  104. package/esm2022/lib/util/empty-string.const.mjs +12 -0
  105. package/esm2022/lib/util/index.mjs +5 -0
  106. package/esm2022/lib/util/js-type.mjs +40 -0
  107. package/esm2022/lib/util/uuid.mjs +126 -0
  108. package/esm2022/public-api.mjs +18 -0
  109. package/fesm2022/angular-toolbox.mjs +3709 -0
  110. package/fesm2022/angular-toolbox.mjs.map +1 -0
  111. package/index.d.ts +5 -5
  112. package/lib/angular-toolbox.module.d.ts +9 -7
  113. package/lib/core/bridge/app-bridge.d.ts +59 -0
  114. package/lib/core/error/app-bridge-error.d.ts +16 -0
  115. package/lib/core/error/http-mock-service-error.d.ts +18 -0
  116. package/lib/core/error/index.d.ts +4 -0
  117. package/lib/core/error/integrity-error.d.ts +18 -0
  118. package/lib/core/error/subscription-error.d.ts +18 -0
  119. package/lib/core/impl/index.d.ts +1 -0
  120. package/lib/core/impl/lang/identifiable-component.d.ts +26 -0
  121. package/lib/core/impl/lang/index.d.ts +1 -0
  122. package/lib/core/impl/version/version.impl.d.ts +42 -0
  123. package/lib/core/index.d.ts +2 -0
  124. package/lib/directive/anchor-link.directive.d.ts +29 -0
  125. package/lib/directive/button-role.directive.d.ts +52 -0
  126. package/lib/directive/content-renderer.directive.d.ts +39 -0
  127. package/lib/directive/index.d.ts +4 -0
  128. package/lib/directive/navigate-to-url.directive.d.ts +23 -0
  129. package/lib/directive/navigation-directive-base.d.ts +19 -0
  130. package/lib/framework/index.d.ts +1 -0
  131. package/lib/framework/mock/http/config/http-mock-parameters.d.ts +13 -0
  132. package/lib/framework/mock/http/config/http-mock.decorator.d.ts +13 -0
  133. package/lib/framework/mock/http/config/index.d.ts +2 -0
  134. package/lib/framework/mock/http/config/route-mock-config.d.ts +30 -0
  135. package/lib/framework/mock/http/core/data-storage.d.ts +38 -0
  136. package/lib/framework/mock/http/event/event-target.impl.d.ts +70 -0
  137. package/lib/framework/mock/http/event/progress-event-mock.d.ts +36 -0
  138. package/lib/framework/mock/http/index.d.ts +3 -0
  139. package/lib/framework/mock/http/path-to-regexp/constants.d.ts +111 -0
  140. package/lib/framework/mock/http/path-to-regexp/escape-to-regexp-string.d.ts +24 -0
  141. package/lib/framework/mock/http/path-to-regexp/get-flags.d.ts +25 -0
  142. package/lib/framework/mock/http/path-to-regexp/iter.d.ts +50 -0
  143. package/lib/framework/mock/http/path-to-regexp/lexer.d.ts +24 -0
  144. package/lib/framework/mock/http/path-to-regexp/loose-replacer.d.ts +25 -0
  145. package/lib/framework/mock/http/path-to-regexp/model/decode-key-to-string.d.ts +21 -0
  146. package/lib/framework/mock/http/path-to-regexp/model/encode.d.ts +20 -0
  147. package/lib/framework/mock/http/path-to-regexp/model/key.d.ts +45 -0
  148. package/lib/framework/mock/http/path-to-regexp/model/lex-token.d.ts +34 -0
  149. package/lib/framework/mock/http/path-to-regexp/model/lexer-type.d.ts +21 -0
  150. package/lib/framework/mock/http/path-to-regexp/model/loose-replacer-provider.d.ts +20 -0
  151. package/lib/framework/mock/http/path-to-regexp/model/non-delimiter-encoder-provider.d.ts +21 -0
  152. package/lib/framework/mock/http/path-to-regexp/model/parse-options.d.ts +33 -0
  153. package/lib/framework/mock/http/path-to-regexp/model/path-to-regexp-options.d.ts +52 -0
  154. package/lib/framework/mock/http/path-to-regexp/model/route-string-tokenizer.d.ts +22 -0
  155. package/lib/framework/mock/http/path-to-regexp/model/simple-tokens.d.ts +21 -0
  156. package/lib/framework/mock/http/path-to-regexp/model/token-data-regexp-factory.d.ts +23 -0
  157. package/lib/framework/mock/http/path-to-regexp/model/token-type.d.ts +20 -0
  158. package/lib/framework/mock/http/path-to-regexp/model/token.d.ts +21 -0
  159. package/lib/framework/mock/http/path-to-regexp/string-to-token-data.d.ts +21 -0
  160. package/lib/framework/mock/http/path-to-regexp/to-key-regexp.d.ts +22 -0
  161. package/lib/framework/mock/http/path-to-regexp/to-stringify.d.ts +21 -0
  162. package/lib/framework/mock/http/path-to-regexp/token-data-to-regexp.d.ts +21 -0
  163. package/lib/framework/mock/http/path-to-regexp/token-data.d.ts +32 -0
  164. package/lib/framework/mock/http/util/data-storage.builder.d.ts +25 -0
  165. package/lib/framework/mock/http/util/http-headers-mock.builder.d.ts +106 -0
  166. package/lib/framework/mock/http/util/http-headers.util.d.ts +31 -0
  167. package/lib/framework/mock/http/util/http-method-ref.enum.d.ts +58 -0
  168. package/lib/framework/mock/http/util/http-mock-response.builder.d.ts +83 -0
  169. package/lib/framework/mock/http/util/index.d.ts +2 -0
  170. package/lib/framework/mock/http/xhr/delegate-xhr.d.ts +199 -0
  171. package/lib/framework/mock/http/xhr/http-mock-factory.d.ts +14 -0
  172. package/lib/framework/mock/http/xhr/http-mock-factory.impl.d.ts +24 -0
  173. package/lib/framework/mock/http/xhr/index.d.ts +1 -0
  174. package/lib/framework/mock/http/xhr/xhr-base.d.ts +123 -0
  175. package/lib/framework/mock/http/xhr/xhr-proxy-impl.d.ts +125 -0
  176. package/lib/model/business/index.d.ts +4 -0
  177. package/lib/model/business/lang/app-bridge-command.d.ts +11 -0
  178. package/lib/model/business/lang/destroyable.d.ts +16 -0
  179. package/lib/model/business/lang/identifiable.d.ts +19 -0
  180. package/lib/model/business/lang/index.d.ts +4 -0
  181. package/lib/model/business/lang/instantiable.d.ts +15 -0
  182. package/lib/model/business/mock/http/http-method-mock.d.ts +35 -0
  183. package/lib/model/business/mock/http/http-mock-config.d.ts +28 -0
  184. package/lib/model/business/mock/http/http-mock-endpoint.d.ts +41 -0
  185. package/lib/model/business/mock/http/http-mock-error.d.ts +21 -0
  186. package/lib/model/business/mock/http/http-mock-interceptor.d.ts +27 -0
  187. package/lib/model/business/mock/http/http-response-mock.d.ts +44 -0
  188. package/lib/model/business/mock/http/index.d.ts +7 -0
  189. package/lib/model/business/mock/http/xhr-proxy.d.ts +15 -0
  190. package/lib/model/business/ui/dark-mode-config.d.ts +29 -0
  191. package/lib/model/business/ui/dark-mode-config.provider.d.ts +21 -0
  192. package/lib/model/business/ui/dark-mode.constant.d.ts +15 -0
  193. package/lib/model/business/ui/index.d.ts +4 -0
  194. package/lib/model/business/ui/scroll-behavior.type.d.ts +11 -0
  195. package/lib/model/business/version/index.d.ts +3 -0
  196. package/lib/model/business/version/version-config.d.ts +28 -0
  197. package/lib/model/business/version/version-config.provider.d.ts +22 -0
  198. package/lib/model/business/version/version.d.ts +34 -0
  199. package/lib/model/index.d.ts +2 -0
  200. package/lib/model/service/index.d.ts +4 -0
  201. package/lib/model/service/mock/http/http-mock.service.d.ts +101 -0
  202. package/lib/model/service/subscription/subscription.service.d.ts +66 -0
  203. package/lib/model/service/ui/app-bridge.service.d.ts +80 -0
  204. package/lib/model/service/ui/dark-mode.service.d.ts +99 -0
  205. package/lib/model/service/ui/index.d.ts +3 -0
  206. package/lib/{service → model/service}/ui/scroll.service.d.ts +55 -52
  207. package/lib/model/service/version/version.service.d.ts +30 -0
  208. package/lib/pipe/index.d.ts +1 -1
  209. package/lib/pipe/safe/safe-html.pipe.d.ts +30 -10
  210. package/lib/util/aria-role.constant.d.ts +15 -0
  211. package/lib/util/default-scroll-behavior.d.ts +12 -0
  212. package/lib/util/empty-string.const.d.ts +11 -0
  213. package/lib/util/index.d.ts +4 -0
  214. package/lib/util/js-type.d.ts +39 -0
  215. package/lib/util/uuid.d.ts +89 -0
  216. package/package.json +10 -13
  217. package/public-api.d.ts +14 -3
  218. package/esm2020/lib/angular-toolbox.module.mjs +0 -26
  219. package/esm2020/lib/pipe/safe/safe-html.pipe.mjs +0 -18
  220. package/esm2020/lib/service/index.mjs +0 -4
  221. package/esm2020/lib/service/subscription/subscription.service.mjs +0 -60
  222. package/esm2020/lib/service/ui/dark-mode.service.mjs +0 -167
  223. package/esm2020/lib/service/ui/scroll.service.mjs +0 -79
  224. package/esm2020/public-api.mjs +0 -7
  225. package/fesm2015/angular-toolbox.mjs +0 -356
  226. package/fesm2015/angular-toolbox.mjs.map +0 -1
  227. package/fesm2020/angular-toolbox.mjs +0 -350
  228. package/fesm2020/angular-toolbox.mjs.map +0 -1
  229. package/lib/service/index.d.ts +0 -3
  230. package/lib/service/subscription/subscription.service.d.ts +0 -33
  231. package/lib/service/ui/dark-mode.service.d.ts +0 -92
@@ -0,0 +1,40 @@
1
+ /**
2
+ * @license
3
+ * Copyright Pascal ECHEMANN. All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be found in
6
+ * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license
7
+ */
8
+ /**
9
+ * The default provider for the `VersionService` configuration. You typically define
10
+ * the custom properties in the main `NgModule` declaration to initialize the application
11
+ * config:
12
+ *
13
+ * @NgModule({
14
+ * ...
15
+ * providers: [
16
+ * { provide: VERSION_CONFIG, useValue: { major: 1, minor: 2, patch: 12 } }
17
+ * ],
18
+ * ...
19
+ * });
20
+ */
21
+ export const VERSION_CONFIG = {
22
+ /**
23
+ * Specifies the major number of this config.
24
+ */
25
+ major: 0,
26
+ /**
27
+ * Specifies the minor number of this config.
28
+ */
29
+ minor: 0,
30
+ /**
31
+ * Specifies the patch number of this config.
32
+ */
33
+ patch: 0,
34
+ /**
35
+ * Specifies the timestamp that corresponds to the build date for this `Version` object.
36
+ * Default value is `NaN`.
37
+ */
38
+ buildTimestamp: NaN
39
+ };
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi1jb25maWcucHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXRvb2xib3gvc3JjL2xpYi9tb2RlbC9idXNpbmVzcy92ZXJzaW9uL3ZlcnNpb24tY29uZmlnLnByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUlIOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBa0I7SUFFekM7O09BRUc7SUFDSCxLQUFLLEVBQUUsQ0FBQztJQUVSOztPQUVHO0lBQ0gsS0FBSyxFQUFFLENBQUM7SUFFUjs7T0FFRztJQUNILEtBQUssRUFBRSxDQUFDO0lBRVI7OztPQUdHO0lBQ0gsY0FBYyxFQUFFLEdBQUc7Q0FDdEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAbGljZW5zZVxyXG4gKiBDb3B5cmlnaHQgUGFzY2FsIEVDSEVNQU5OLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4gKlxyXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpblxyXG4gKiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vcGFzY2FsZWNoZW1hbm4uY29tL2FuZ3VsYXItdG9vbGJveC9yZXNvdXJjZXMvbGljZW5zZVxyXG4gKi9cclxuXHJcbmltcG9ydCB7IFZlcnNpb25Db25maWcgfSBmcm9tIFwiLi92ZXJzaW9uLWNvbmZpZ1wiO1xyXG5cclxuLyoqXHJcbiAqIFRoZSBkZWZhdWx0IHByb3ZpZGVyIGZvciB0aGUgYFZlcnNpb25TZXJ2aWNlYCBjb25maWd1cmF0aW9uLiBZb3UgdHlwaWNhbGx5IGRlZmluZVxyXG4gKiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgaW4gdGhlIG1haW4gYE5nTW9kdWxlYCBkZWNsYXJhdGlvbiB0byBpbml0aWFsaXplIHRoZSBhcHBsaWNhdGlvblxyXG4gKiBjb25maWc6XHJcbiAqIFxyXG4gKiBATmdNb2R1bGUoe1xyXG4gKiAuLi5cclxuICogcHJvdmlkZXJzOiBbXHJcbiAqICAgeyBwcm92aWRlOiBWRVJTSU9OX0NPTkZJRywgdXNlVmFsdWU6IHsgbWFqb3I6IDEsIG1pbm9yOiAyLCBwYXRjaDogMTIgfSB9XHJcbiAqIF0sXHJcbiAqIC4uLlxyXG4gKiB9KTtcclxuICovXHJcbmV4cG9ydCBjb25zdCBWRVJTSU9OX0NPTkZJRzogVmVyc2lvbkNvbmZpZyA9IHtcclxuICBcclxuICAgIC8qKlxyXG4gICAgICogU3BlY2lmaWVzIHRoZSBtYWpvciBudW1iZXIgb2YgdGhpcyBjb25maWcuXHJcbiAgICAgKi9cclxuICAgIG1ham9yOiAwLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3BlY2lmaWVzIHRoZSBtaW5vciBudW1iZXIgb2YgdGhpcyBjb25maWcuXHJcbiAgICAgKi9cclxuICAgIG1pbm9yOiAwLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3BlY2lmaWVzIHRoZSBwYXRjaCBudW1iZXIgb2YgdGhpcyBjb25maWcuXHJcbiAgICAgKi9cclxuICAgIHBhdGNoOiAwLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3BlY2lmaWVzIHRoZSB0aW1lc3RhbXAgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgYnVpbGQgZGF0ZSBmb3IgdGhpcyBgVmVyc2lvbmAgb2JqZWN0LlxyXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgTmFOYC5cclxuICAgICAqL1xyXG4gICAgYnVpbGRUaW1lc3RhbXA6IE5hTlxyXG59OyJdfQ==
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @license
3
+ * Copyright Pascal ECHEMANN. All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be found in
6
+ * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license
7
+ */
8
+ ;
9
+ export {};
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdG9vbGJveC9zcmMvbGliL21vZGVsL2J1c2luZXNzL3ZlcnNpb24vdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFpQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAbGljZW5zZVxyXG4gKiBDb3B5cmlnaHQgUGFzY2FsIEVDSEVNQU5OLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4gKlxyXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpblxyXG4gKiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vcGFzY2FsZWNoZW1hbm4uY29tL2FuZ3VsYXItdG9vbGJveC9yZXNvdXJjZXMvbGljZW5zZVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBTcGVjaWZpZXMgdGhlIHNlbWFudGljIHZlcnNpb25pbmcgb2YgYW4gQW5ndWxhciBhcHBsaWNhdGlvbi5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgVmVyc2lvbiB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTcGVjaWZpZXMgdmVyc2lvbnMgd2l0aCBpbmNvbXBhdGlibGUgQVBJIGNoYW5nZXMuXHJcbiAgICAgKi9cclxuICAgIG1ham9yOiBudW1iZXI7XHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogU3BlY2lmaWVzIHZlcnNpb25zIHdpdGggZnVuY3Rpb25hbGl0aWVzIHRoYXQgaGF2ZSAgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cclxuICAgICAqL1xyXG4gICAgbWlub3I6IG51bWJlcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNwZWNpZmllcyB2ZXJzaW9ucyB0aGF0IGZpeGVzIGJ1Z3MuXHJcbiAgICAgKi9cclxuICAgIHBhdGNoOiBudW1iZXI7XHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogU3BlY2lmaWVzIHRoZSB0aW1lc3RhbXAgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgYnVpbGQgZGF0ZSBmb3IgdGhpcyBgVmVyc2lvbmAgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBidWlsZFRpbWVTdGFtcDogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGBWZXJzaW9uYCBvYmplY3QuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIEEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgYFZlcnNpb25gIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgdG9TdHJpbmcoKTogc3RyaW5nO1xyXG59OyJdfQ==
@@ -0,0 +1,3 @@
1
+ export * from './business';
2
+ export * from './service';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXRvb2xib3gvc3JjL2xpYi9tb2RlbC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLFdBQVcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYnVzaW5lc3MnO1xyXG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2UnOyJdfQ==
@@ -0,0 +1,5 @@
1
+ export * from './subscription/subscription.service';
2
+ export * from './ui';
3
+ export * from './version/version.service';
4
+ export * from './mock/http/http-mock.service';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXRvb2xib3gvc3JjL2xpYi9tb2RlbC9zZXJ2aWNlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyxNQUFNLENBQUM7QUFDckIsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLCtCQUErQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9zdWJzY3JpcHRpb24vc3Vic2NyaXB0aW9uLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL3VpJztcclxuZXhwb3J0ICogZnJvbSAnLi92ZXJzaW9uL3ZlcnNpb24uc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbW9jay9odHRwL2h0dHAtbW9jay5zZXJ2aWNlJzsiXX0=
@@ -0,0 +1,239 @@
1
+ /**
2
+ * @license
3
+ * Copyright Pascal ECHEMANN. All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be found in
6
+ * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license
7
+ */
8
+ import { Injectable } from '@angular/core';
9
+ import { HTTPMethodRef } from '../../../../framework/mock/http/util/http-method-ref.enum';
10
+ import { tokenDataToRegexp } from '../../../../framework/mock/http/path-to-regexp/token-data-to-regexp';
11
+ import { stringToTokenData } from '../../../../framework/mock/http/path-to-regexp/string-to-token-data';
12
+ import { DEFAULT_DELIMITER } from '../../../../framework/mock/http/path-to-regexp/constants';
13
+ import { Uuid } from '../../../../util';
14
+ import { HttpMockServiceError } from '../../../../core/error';
15
+ import * as i0 from "@angular/core";
16
+ /**
17
+ * @private
18
+ * Reference to the original type for this class.
19
+ */
20
+ export const HTTP_MOCK_SERVICE = "HttpMockService";
21
+ /**
22
+ * The `HttpMockService` class provides the API for managing HTTP mock configuration objects.
23
+ */
24
+ export class HttpMockService {
25
+ constructor() {
26
+ /**
27
+ * @private
28
+ * Ensures that class type is still accessible after TypeScript compilation.
29
+ */
30
+ this.type = HTTP_MOCK_SERVICE;
31
+ /**
32
+ * @private
33
+ * The list of IDs associated with each config object.
34
+ */
35
+ this._configIdList = [];
36
+ /**
37
+ * @private
38
+ * Stores the complete collection of mocking behaviors for each registered config.
39
+ */
40
+ this._configList = new Map();
41
+ /**
42
+ * @private
43
+ * The reference to the current app URL origin.
44
+ */
45
+ this.APP_ORIGIN = window.location.origin;
46
+ }
47
+ /**
48
+ * Adds the specified `HttpMockConfig` object to this `HttpMockService` instance.
49
+ *
50
+ * @param config The `HttpMockConfig` object to add to this `HttpMockService` instance.
51
+ * @Returns The `Uuid` instance associated with the added `HttpMockConfig` object.
52
+ */
53
+ addConfig(config) {
54
+ const origin = config.origin || this.APP_ORIGIN;
55
+ this.checkOrigin(origin);
56
+ let id = config.id;
57
+ if (!id) {
58
+ id = Uuid.build();
59
+ config.id = id;
60
+ }
61
+ else {
62
+ if (this.hasRegisteredConfig(id))
63
+ throw new HttpMockServiceError(`A config object has already been registered with the id: ["${id.toString()}"].`);
64
+ }
65
+ this._configIdList.push(id);
66
+ const uuid = id.toString();
67
+ config.interceptors.forEach((interceptor) => this.extractConfig(interceptor, origin, uuid));
68
+ return id;
69
+ }
70
+ /**
71
+ * Returns the current app URL origin.
72
+ *
73
+ * @returns A string that represents the current app URL origin.
74
+ */
75
+ getAppOrigin() {
76
+ return this.APP_ORIGIN;
77
+ }
78
+ /**
79
+ * Removes the configuration registered with the specified `uuid` from this `HttpMockService` instance.
80
+ *
81
+ * @param uuid The UUID of the configuration to remove.
82
+ */
83
+ removeConfig(uuid) {
84
+ if (!this.hasRegisteredConfig(uuid))
85
+ return;
86
+ const configId = uuid.toString();
87
+ this._configList.forEach((value, key) => {
88
+ this.deleteConfigById(value, configId);
89
+ if (value.size === 0)
90
+ this._configList.delete(key);
91
+ });
92
+ this._configIdList.splice(this._configIdList.indexOf(uuid), 1);
93
+ }
94
+ /**
95
+ * Removes all registred configurations from this `HttpMockService` instance.
96
+ */
97
+ clearConfigs() {
98
+ this._configList.clear();
99
+ this._configIdList.length = 0;
100
+ }
101
+ /**
102
+ * Returns a boolean value that indicates whether a config with the specified UUID has been registered
103
+ * (`true`), or not (`false`).
104
+ *
105
+ * @param uuid The UUID of the config to check.
106
+ * @returns `true` whether a config with the specified UUID has been registered; `false` otherwise.
107
+ */
108
+ hasRegisteredConfig(uuid) {
109
+ return this._configIdList.indexOf(uuid) !== -1;
110
+ }
111
+ /**
112
+ * Returns the `RouteMockConfig` object associated with the specified `URL` instance and HTTP method.
113
+ *
114
+ * @param url The `URL` instance for which to find a route config.
115
+ * @param method The HTTP method for which to find a route config.
116
+ * @returns The `RouteMockConfig` object associated with the specified `URL` instance and HTTP method whether it exists;
117
+ * `undefined` otherwise.
118
+ */
119
+ getRouteConfig(url, method) {
120
+ const urlConfigList = this._configList.get(url.origin);
121
+ const route = url.pathname;
122
+ let result = undefined;
123
+ if (!urlConfigList)
124
+ return result;
125
+ const methodList = urlConfigList.get(method);
126
+ if (!methodList)
127
+ return result;
128
+ let len = methodList.length - 1;
129
+ while (len >= 0) {
130
+ const methodMap = methodList[len];
131
+ const regexp = methodMap.regexp;
132
+ if (regexp.test(route)) {
133
+ result = {
134
+ methodConfig: methodMap.methodMock,
135
+ parameters: this.buildParameters(regexp, methodMap.keys, route)
136
+ };
137
+ break;
138
+ }
139
+ len--;
140
+ }
141
+ return result;
142
+ }
143
+ /**
144
+ * @rivate
145
+ */
146
+ buildParameters(regexp, keys, route) {
147
+ const execResult = regexp.exec(route);
148
+ if (!execResult)
149
+ return null;
150
+ const params = {};
151
+ let len = execResult.length - 1;
152
+ let i = 1;
153
+ for (; i <= len; ++i) {
154
+ const key = keys[i - 1];
155
+ params[key.name] = execResult[i];
156
+ }
157
+ return params;
158
+ }
159
+ /**
160
+ * @rivate
161
+ */
162
+ extractConfig(interceptor, globalOrigin, configId) {
163
+ const endpoints = interceptor.endpoints;
164
+ let origin = interceptor.origin;
165
+ if (origin)
166
+ this.checkOrigin(origin);
167
+ else
168
+ origin = globalOrigin;
169
+ if (!this._configList.has(origin))
170
+ this._configList.set(origin, new Map());
171
+ endpoints.forEach((endpoint) => {
172
+ this.extractEndpointConfig(origin, endpoint, HTTPMethodRef.GET, configId);
173
+ this.extractEndpointConfig(origin, endpoint, HTTPMethodRef.POST, configId);
174
+ this.extractEndpointConfig(origin, endpoint, HTTPMethodRef.PUT, configId);
175
+ this.extractEndpointConfig(origin, endpoint, HTTPMethodRef.DELETE, configId);
176
+ this.extractEndpointConfig(origin, endpoint, HTTPMethodRef.HEAD, configId);
177
+ this.extractEndpointConfig(origin, endpoint, HTTPMethodRef.OPTIONS, configId);
178
+ this.extractEndpointConfig(origin, endpoint, HTTPMethodRef.PATCH, configId);
179
+ this.extractEndpointConfig(origin, endpoint, HTTPMethodRef.CONNECT, configId);
180
+ this.extractEndpointConfig(origin, endpoint, HTTPMethodRef.TRACE, configId);
181
+ });
182
+ }
183
+ /**
184
+ * @rivate
185
+ */
186
+ extractEndpointConfig(origin, endpoint, method, configId) {
187
+ const ep = endpoint;
188
+ if (!ep[method])
189
+ return;
190
+ const originConfig = this._configList.get(origin);
191
+ const route = endpoint.route;
192
+ const data = stringToTokenData(route);
193
+ const keys = [];
194
+ const regexp = tokenDataToRegexp(data, keys, {});
195
+ if (!originConfig.has(method))
196
+ originConfig.set(method, []);
197
+ const methodConfig = originConfig.get(method);
198
+ methodConfig.push({
199
+ regexp: regexp,
200
+ keys: keys,
201
+ methodMock: ep[method],
202
+ configId: configId
203
+ });
204
+ }
205
+ /**
206
+ * @rivate
207
+ */
208
+ checkOrigin(origin) {
209
+ if (origin.endsWith(DEFAULT_DELIMITER))
210
+ throw new SyntaxError(`Origin must not end with a / character: ["${origin}"].`);
211
+ }
212
+ /**
213
+ * @rivate
214
+ */
215
+ deleteConfigById(storageMap, configId) {
216
+ storageMap.forEach((storage, key) => {
217
+ const cleanedConfig = this.cleanConfig(storage, configId);
218
+ if (cleanedConfig.length)
219
+ storageMap.set(key, cleanedConfig);
220
+ else
221
+ storageMap.delete(key);
222
+ });
223
+ }
224
+ /**
225
+ * @rivate
226
+ */
227
+ cleanConfig(storage, configId) {
228
+ return storage.filter((value) => value.configId !== configId);
229
+ }
230
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: HttpMockService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
231
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: HttpMockService, providedIn: 'root' }); }
232
+ }
233
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: HttpMockService, decorators: [{
234
+ type: Injectable,
235
+ args: [{
236
+ providedIn: 'root'
237
+ }]
238
+ }] });
239
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1tb2NrLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXRvb2xib3gvc3JjL2xpYi9tb2RlbC9zZXJ2aWNlL21vY2svaHR0cC9odHRwLW1vY2suc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyREFBMkQsQ0FBQztBQUMxRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxRUFBcUUsQ0FBQztBQUd4RyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxRUFBcUUsQ0FBQztBQUN4RyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUM3RixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFeEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7O0FBRTlEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFXLGlCQUFpQixDQUFDO0FBYTNEOztHQUVHO0FBSUgsTUFBTSxPQUFPLGVBQWU7SUFINUI7UUFLRTs7O1dBR0c7UUFDYSxTQUFJLEdBQVcsaUJBQWlCLENBQUM7UUFFakQ7OztXQUdHO1FBQ0ssa0JBQWEsR0FBVyxFQUFFLENBQUM7UUFFbkM7OztXQUdHO1FBQ0ssZ0JBQVcsR0FBd0QsSUFBSSxHQUFHLEVBQWtELENBQUM7UUFFckk7OztXQUdHO1FBQ2MsZUFBVSxHQUFXLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO0tBb0w5RDtJQWxMQzs7Ozs7T0FLRztJQUNJLFNBQVMsQ0FBQyxNQUFzQjtRQUNyQyxNQUFNLE1BQU0sR0FBVyxNQUFNLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxVQUFV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T0FFRztJQUNLLFdBQVcsQ0FBQyxNQUFjO1FBQ2hDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztZQUFFLE1BQU0sSUFBSSxXQUFXLENBQUMsNkNBQTZDLE1BQU0sS0FBSyxDQUFDLENBQUM7SUFDMUgsQ0FBQztJQUVEOztPQUVHO0lBQ0ssZ0JBQWdCLENBQUMsVUFBa0QsRUFBRSxRQUFnQjtRQUMzRixVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBa0MsRUFBRSxHQUFXLEVBQUUsRUFBRTtZQUNyRSxNQUFNLGFBQWEsR0FBOEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDckYsSUFBSSxhQUFhLENBQUMsTUFBTTtnQkFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsQ0FBQzs7Z0JBQ3hELFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxXQUFXLENBQUMsT0FBa0MsRUFBRSxRQUFnQjtRQUN0RSxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUE4QixFQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7OEdBM01VLGVBQWU7a0hBQWYsZUFBZSxjQUZkLE1BQU07OzJGQUVQLGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBsaWNlbnNlXHJcbiAqIENvcHlyaWdodCBQYXNjYWwgRUNIRU1BTk4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbiAqXHJcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluXHJcbiAqIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9wYXNjYWxlY2hlbWFubi5jb20vYW5ndWxhci10b29sYm94L3Jlc291cmNlcy9saWNlbnNlXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwTW9ja0ludGVyY2VwdG9yLCBIdHRwTW9ja0NvbmZpZywgSHR0cE1ldGhvZE1vY2ssIEh0dHBNb2NrRW5kcG9pbnQgfSBmcm9tICcuLi8uLi8uLi9idXNpbmVzcyc7XHJcbmltcG9ydCB7IEhUVFBNZXRob2RSZWYgfSBmcm9tICcuLi8uLi8uLi8uLi9mcmFtZXdvcmsvbW9jay9odHRwL3V0aWwvaHR0cC1tZXRob2QtcmVmLmVudW0nO1xyXG5pbXBvcnQgeyB0b2tlbkRhdGFUb1JlZ2V4cCB9IGZyb20gJy4uLy4uLy4uLy4uL2ZyYW1ld29yay9tb2NrL2h0dHAvcGF0aC10by1yZWdleHAvdG9rZW4tZGF0YS10by1yZWdleHAnO1xyXG5pbXBvcnQgeyBSb3V0ZU1vY2tDb25maWcgfSBmcm9tICcuLi8uLi8uLi8uLi9mcmFtZXdvcmsvbW9jay9odHRwL2NvbmZpZy9yb3V0ZS1tb2NrLWNvbmZpZyc7XHJcbmltcG9ydCB7IEtleSB9IGZyb20gJy4uLy4uLy4uLy4uL2ZyYW1ld29yay9tb2NrL2h0dHAvcGF0aC10by1yZWdleHAvbW9kZWwva2V5JztcclxuaW1wb3J0IHsgc3RyaW5nVG9Ub2tlbkRhdGEgfSBmcm9tICcuLi8uLi8uLi8uLi9mcmFtZXdvcmsvbW9jay9odHRwL3BhdGgtdG8tcmVnZXhwL3N0cmluZy10by10b2tlbi1kYXRhJztcclxuaW1wb3J0IHsgREVGQVVMVF9ERUxJTUlURVIgfSBmcm9tICcuLi8uLi8uLi8uLi9mcmFtZXdvcmsvbW9jay9odHRwL3BhdGgtdG8tcmVnZXhwL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IFV1aWQgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlsJztcclxuaW1wb3J0IHsgVG9rZW5EYXRhIH0gZnJvbSAnLi4vLi4vLi4vLi4vZnJhbWV3b3JrL21vY2svaHR0cC9wYXRoLXRvLXJlZ2V4cC90b2tlbi1kYXRhJztcclxuaW1wb3J0IHsgSHR0cE1vY2tTZXJ2aWNlRXJyb3IgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2Vycm9yJztcclxuXHJcbi8qKlxyXG4gKiBAcHJpdmF0ZVxyXG4gKiBSZWZlcmVuY2UgdG8gdGhlIG9yaWdpbmFsIHR5cGUgZm9yIHRoaXMgY2xhc3MuXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgSFRUUF9NT0NLX1NFUlZJQ0U6IHN0cmluZyA9IFwiSHR0cE1vY2tTZXJ2aWNlXCI7XHJcblxyXG4vKipcclxuICogQHByaXZhdGVcclxuICogQW4gaW50ZXJuYWwgdXRpbGl0eSBmb3Igc3RvcnJpbmcgcmVmZXJlbmNlcyB0byBlbmRwb2ludCBtb2NrIGNvbmZpZ3MuXHJcbiAqL1xyXG5pbnRlcmZhY2UgSHR0cE1vY2tFbmRwb2ludFN0b3JhZ2Uge1xyXG4gIG1ldGhvZE1vY2s6IEh0dHBNZXRob2RNb2NrO1xyXG4gIHJlZ2V4cDogUmVnRXhwO1xyXG4gIGtleXM6IEtleVtdO1xyXG4gIGNvbmZpZ0lkOiBzdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUaGUgYEh0dHBNb2NrU2VydmljZWAgY2xhc3MgcHJvdmlkZXMgdGhlIEFQSSBmb3IgbWFuYWdpbmcgSFRUUCBtb2NrIGNvbmZpZ3VyYXRpb24gb2JqZWN0cy5cclxuICovXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEh0dHBNb2NrU2VydmljZSB7XHJcblxyXG4gIC8qKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogRW5zdXJlcyB0aGF0IGNsYXNzIHR5cGUgaXMgc3RpbGwgYWNjZXNzaWJsZSBhZnRlciBUeXBlU2NyaXB0IGNvbXBpbGF0aW9uLlxyXG4gICAqL1xyXG4gIHB1YmxpYyByZWFkb25seSB0eXBlOiBzdHJpbmcgPSBIVFRQX01PQ0tfU0VSVklDRTtcclxuXHJcbiAgLyoqXHJcbiAgICogQHByaXZhdGVcclxuICAgKiBUaGUgbGlzdCBvZiBJRHMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggY29uZmlnIG9iamVjdC5cclxuICAgKi9cclxuICBwcml2YXRlIF9jb25maWdJZExpc3Q6IFV1aWRbXSA9IFtdO1xyXG5cclxuICAvKipcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqIFN0b3JlcyB0aGUgY29tcGxldGUgY29sbGVjdGlvbiBvZiBtb2NraW5nIGJlaGF2aW9ycyBmb3IgZWFjaCByZWdpc3RlcmVkIGNvbmZpZy5cclxuICAgKi9cclxuICBwcml2YXRlIF9jb25maWdMaXN0OiBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBIdHRwTW9ja0VuZHBvaW50U3RvcmFnZVtdPj4gPSBuZXcgTWFwPHN0cmluZywgTWFwPHN0cmluZywgSHR0cE1vY2tFbmRwb2ludFN0b3JhZ2VbXT4+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogVGhlIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBhcHAgVVJMIG9yaWdpbi5cclxuICAgKi9cclxuICBwcml2YXRlIHJlYWRvbmx5IEFQUF9PUklHSU46IHN0cmluZyA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMgdGhlIHNwZWNpZmllZCBgSHR0cE1vY2tDb25maWdgIG9iamVjdCB0byB0aGlzIGBIdHRwTW9ja1NlcnZpY2VgIGluc3RhbmNlLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBjb25maWcgVGhlIGBIdHRwTW9ja0NvbmZpZ2Agb2JqZWN0IHRvIGFkZCB0byB0aGlzIGBIdHRwTW9ja1NlcnZpY2VgIGluc3RhbmNlLlxyXG4gICAqIEBSZXR1cm5zIFRoZSBgVXVpZGAgaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBhZGRlZCBgSHR0cE1vY2tDb25maWdgIG9iamVjdC5cclxuICAgKi9cclxuICBwdWJsaWMgYWRkQ29uZmlnKGNvbmZpZzogSHR0cE1vY2tDb25maWcpOiBVdWlkIHtcclxuICAgIGNvbnN0IG9yaWdpbjogc3RyaW5nID0gY29uZmlnLm9yaWdpbiB8fCB0aGlzLkFQUF9PUklHSU47XHJcbiAgICB0aGlzLmNoZWNrT3JpZ2luKG9yaWdpbik7XHJcbiAgICBsZXQgaWQ6IFV1aWQgfCB1bmRlZmluZWQgPSBjb25maWcuaWQ7XHJcbiAgICBpZiAoIWlkKSB7XHJcbiAgICAgIGlkID0gVXVpZC5idWlsZCgpO1xyXG4gICAgICBjb25maWcuaWQgPSBpZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmhhc1JlZ2lzdGVyZWRDb25maWcoaWQpKSB0aHJvdyBuZXcgSHR0cE1vY2tTZXJ2aWNlRXJyb3IoYEEgY29uZmlnIG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWQgd2l0aCB0aGUgaWQ6IFtcIiR7aWQudG9TdHJpbmcoKX1cIl0uYCkgO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fY29uZmlnSWRMaXN0LnB1c2goaWQpO1xyXG4gICAgY29uc3QgdXVpZDogc3RyaW5nID0gaWQudG9TdHJpbmcoKTtcclxuICAgIGNvbmZpZy5pbnRlcmNlcHRvcnMuZm9yRWFjaCgoaW50ZXJjZXB0b3I6IEh0dHBNb2NrSW50ZXJjZXB0b3IpID0+IHRoaXMuZXh0cmFjdENvbmZpZyhpbnRlcmNlcHRvciwgb3JpZ2luLCB1dWlkKSApO1xyXG4gICAgcmV0dXJuIGlkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCBhcHAgVVJMIG9yaWdpbi5cclxuICAgKiBcclxuICAgKiBAcmV0dXJucyBBIHN0cmluZyB0aGF0IHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgYXBwIFVSTCBvcmlnaW4uXHJcbiAgICovXHJcbiAgcHVibGljIGdldEFwcE9yaWdpbigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuQVBQX09SSUdJTjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZXMgdGhlIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJlZCB3aXRoIHRoZSBzcGVjaWZpZWQgYHV1aWRgIGZyb20gdGhpcyBgSHR0cE1vY2tTZXJ2aWNlYCBpbnN0YW5jZS5cclxuICAgKiBcclxuICAgKiBAcGFyYW0gdXVpZCBUaGUgVVVJRCBvZiB0aGUgY29uZmlndXJhdGlvbiB0byByZW1vdmUuXHJcbiAgICovXHJcbiAgcHVibGljIHJlbW92ZUNvbmZpZyh1dWlkOiBVdWlkKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaGFzUmVnaXN0ZXJlZENvbmZpZyh1dWlkKSkgcmV0dXJuO1xyXG4gICAgY29uc3QgY29uZmlnSWQ6IHN0cmluZyA9IHV1aWQudG9TdHJpbmcoKTtcclxuICAgIHRoaXMuX2NvbmZpZ0xpc3QuZm9yRWFjaCgodmFsdWU6IE1hcDxzdHJpbmcsIEh0dHBNb2NrRW5kcG9pbnRTdG9yYWdlW10+LCBrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICB0aGlzLmRlbGV0ZUNvbmZpZ0J5SWQodmFsdWUsIGNvbmZpZ0lkKTtcclxuICAgICAgaWYgKHZhbHVlLnNpemUgPT09IDApIHRoaXMuX2NvbmZpZ0xpc3QuZGVsZXRlKGtleSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX2NvbmZpZ0lkTGlzdC5zcGxpY2UodGhpcy5fY29uZmlnSWRMaXN0LmluZGV4T2YodXVpZCksIDEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlcyBhbGwgcmVnaXN0cmVkIGNvbmZpZ3VyYXRpb25zIGZyb20gdGhpcyBgSHR0cE1vY2tTZXJ2aWNlYCBpbnN0YW5jZS5cclxuICAgKi9cclxuICBwdWJsaWMgY2xlYXJDb25maWdzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fY29uZmlnTGlzdC5jbGVhcigpO1xyXG4gICAgdGhpcy5fY29uZmlnSWRMaXN0Lmxlbmd0aCA9IDA7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgYSBib29sZWFuIHZhbHVlIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgYSBjb25maWcgd2l0aCB0aGUgc3BlY2lmaWVkIFVVSUQgaGFzIGJlZW4gcmVnaXN0ZXJlZFxyXG4gICAqIChgdHJ1ZWApLCBvciBub3QgKGBmYWxzZWApLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB1dWlkIFRoZSBVVUlEIG9mIHRoZSBjb25maWcgdG8gY2hlY2suXHJcbiAgICogQHJldHVybnMgYHRydWVgIHdoZXRoZXIgYSBjb25maWcgd2l0aCB0aGUgc3BlY2lmaWVkIFVVSUQgaGFzIGJlZW4gcmVnaXN0ZXJlZDsgYGZhbHNlYCBvdGhlcndpc2UuXHJcbiAgICovXHJcbiAgcHVibGljIGhhc1JlZ2lzdGVyZWRDb25maWcodXVpZDogVXVpZCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZ0lkTGlzdC5pbmRleE9mKHV1aWQpICE9PSAtMTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGBSb3V0ZU1vY2tDb25maWdgIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBgVVJMYCBpbnN0YW5jZSBhbmQgSFRUUCBtZXRob2QuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHVybCBUaGUgYFVSTGAgaW5zdGFuY2UgZm9yIHdoaWNoIHRvIGZpbmQgYSByb3V0ZSBjb25maWcuXHJcbiAgICogQHBhcmFtIG1ldGhvZCBUaGUgSFRUUCBtZXRob2QgZm9yIHdoaWNoIHRvIGZpbmQgYSByb3V0ZSBjb25maWcuXHJcbiAgICogQHJldHVybnMgVGhlIGBSb3V0ZU1vY2tDb25maWdgIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBgVVJMYCBpbnN0YW5jZSBhbmQgSFRUUCBtZXRob2Qgd2hldGhlciBpdCBleGlzdHM7XHJcbiAgICogICAgICAgICAgYHVuZGVmaW5lZGAgb3RoZXJ3aXNlLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRSb3V0ZUNvbmZpZyh1cmw6IFVSTCwgbWV0aG9kOiBIVFRQTWV0aG9kUmVmKTogUm91dGVNb2NrQ29uZmlnIHwgdW5kZWZpbmVkIHtcclxuICAgIGNvbnN0IHVybENvbmZpZ0xpc3Q6IE1hcDxzdHJpbmcsIEh0dHBNb2NrRW5kcG9pbnRTdG9yYWdlW10+IHwgdW5kZWZpbmVkID0gdGhpcy5fY29uZmlnTGlzdC5nZXQodXJsLm9yaWdpbik7XHJcbiAgICBjb25zdCByb3V0ZTogc3RyaW5nID0gdXJsLnBhdGhuYW1lO1xyXG4gICAgbGV0IHJlc3VsdDogUm91dGVNb2NrQ29uZmlnIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG4gICAgaWYgKCF1cmxDb25maWdMaXN0KSByZXR1cm4gcmVzdWx0O1xyXG4gICAgY29uc3QgbWV0aG9kTGlzdDogSHR0cE1vY2tFbmRwb2ludFN0b3JhZ2VbXSB8IHVuZGVmaW5lZCA9IHVybENvbmZpZ0xpc3QuZ2V0KG1ldGhvZCk7XHJcbiAgICBpZiAoIW1ldGhvZExpc3QpIHJldHVybiByZXN1bHQ7XHJcbiAgICBsZXQgbGVuOiBudW1iZXIgPSBtZXRob2RMaXN0Lmxlbmd0aCAtIDE7XHJcbiAgICB3aGlsZSAobGVuID49IDAgKSB7XHJcbiAgICAgIGNvbnN0IG1ldGhvZE1hcDogSHR0cE1vY2tFbmRwb2ludFN0b3JhZ2UgPSBtZXRob2RMaXN0W2xlbl07XHJcbiAgICAgIGNvbnN0IHJlZ2V4cDogUmVnRXhwID0gbWV0aG9kTWFwLnJlZ2V4cDtcclxuICAgICAgaWYgKHJlZ2V4cC50ZXN0KHJvdXRlKSkge1xyXG4gICAgICAgIHJlc3VsdCA9IHtcclxuICAgICAgICAgIG1ldGhvZENvbmZpZzogbWV0aG9kTWFwLm1ldGhvZE1vY2ssXHJcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB0aGlzLmJ1aWxkUGFyYW1ldGVycyhyZWdleHAsIG1ldGhvZE1hcC5rZXlzLCByb3V0ZSlcclxuICAgICAgICB9O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGxlbi0tO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEByaXZhdGUgXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBidWlsZFBhcmFtZXRlcnMocmVnZXhwOiBSZWdFeHAsIGtleXM6IEtleVtdLCByb3V0ZTogc3RyaW5nKTogYW55IHtcclxuICAgIGNvbnN0IGV4ZWNSZXN1bHQ6IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGwgPSByZWdleHAuZXhlYyhyb3V0ZSk7XHJcbiAgICBpZiAoIWV4ZWNSZXN1bHQpIHJldHVybiBudWxsO1xyXG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7fTtcclxuICAgIGxldCBsZW46IG51bWJlciA9IGV4ZWNSZXN1bHQubGVuZ3RoIC0gMTtcclxuICAgIGxldCBpOiBudW1iZXIgPSAxO1xyXG4gICAgZm9yICg7IGkgPD0gbGVuOyArK2kpIHtcclxuICAgICAgY29uc3Qga2V5OiBLZXkgPSBrZXlzW2kgLSAxXTtcclxuICAgICAgcGFyYW1zW2tleS5uYW1lXSA9IGV4ZWNSZXN1bHRbaV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGFyYW1zO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHJpdmF0ZSBcclxuICAgKi9cclxuICBwcml2YXRlIGV4dHJhY3RDb25maWcoaW50ZXJjZXB0b3I6IEh0dHBNb2NrSW50ZXJjZXB0b3IsIGdsb2JhbE9yaWdpbjogc3RyaW5nLCBjb25maWdJZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBlbmRwb2ludHM6IEh0dHBNb2NrRW5kcG9pbnRbXSA9IGludGVyY2VwdG9yLmVuZHBvaW50cztcclxuICAgIGxldCBvcmlnaW46IHN0cmluZyB8IHVuZGVmaW5lZCA9IGludGVyY2VwdG9yLm9yaWdpbjtcclxuICAgIGlmIChvcmlnaW4pIHRoaXMuY2hlY2tPcmlnaW4ob3JpZ2luKTtcclxuICAgIGVsc2Ugb3JpZ2luID0gZ2xvYmFsT3JpZ2luO1xyXG4gICAgaWYgKCF0aGlzLl9jb25maWdMaXN0LmhhcyhvcmlnaW4pKSB0aGlzLl9jb25maWdMaXN0LnNldChvcmlnaW4sIG5ldyBNYXA8c3RyaW5nLCBIdHRwTW9ja0VuZHBvaW50U3RvcmFnZVtdPigpKTtcclxuICAgIGVuZHBvaW50cy5mb3JFYWNoKChlbmRwb2ludDogSHR0cE1vY2tFbmRwb2ludCkgPT4ge1xyXG4gICAgICB0aGlzLmV4dHJhY3RFbmRwb2ludENvbmZpZyhvcmlnaW4sIGVuZHBvaW50LCBIVFRQTWV0aG9kUmVmLkdFVCwgY29uZmlnSWQpO1xyXG4gICAgICB0aGlzLmV4dHJhY3RFbmRwb2ludENvbmZpZyhvcmlnaW4sIGVuZHBvaW50LCBIVFRQTWV0aG9kUmVmLlBPU1QsIGNvbmZpZ0lkKTtcclxuICAgICAgdGhpcy5leHRyYWN0RW5kcG9pbnRDb25maWcob3JpZ2luLCBlbmRwb2ludCwgSFRUUE1ldGhvZFJlZi5QVVQsIGNvbmZpZ0lkKTtcclxuICAgICAgdGhpcy5leHRyYWN0RW5kcG9pbnRDb25maWcob3JpZ2luLCBlbmRwb2ludCwgSFRUUE1ldGhvZFJlZi5ERUxFVEUsIGNvbmZpZ0lkKTtcclxuICAgICAgdGhpcy5leHRyYWN0RW5kcG9pbnRDb25maWcob3JpZ2luLCBlbmRwb2ludCwgSFRUUE1ldGhvZFJlZi5IRUFELCBjb25maWdJZCk7XHJcbiAgICAgIHRoaXMuZXh0cmFjdEVuZHBvaW50Q29uZmlnKG9yaWdpbiwgZW5kcG9pbnQsIEhUVFBNZXRob2RSZWYuT1BUSU9OUywgY29uZmlnSWQpO1xyXG4gICAgICB0aGlzLmV4dHJhY3RFbmRwb2ludENvbmZpZyhvcmlnaW4sIGVuZHBvaW50LCBIVFRQTWV0aG9kUmVmLlBBVENILCBjb25maWdJZCk7XHJcbiAgICAgIHRoaXMuZXh0cmFjdEVuZHBvaW50Q29uZmlnKG9yaWdpbiwgZW5kcG9pbnQsIEhUVFBNZXRob2RSZWYuQ09OTkVDVCwgY29uZmlnSWQpO1xyXG4gICAgICB0aGlzLmV4dHJhY3RFbmRwb2ludENvbmZpZyhvcmlnaW4sIGVuZHBvaW50LCBIVFRQTWV0aG9kUmVmLlRSQUNFLCBjb25maWdJZCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEByaXZhdGUgXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBleHRyYWN0RW5kcG9pbnRDb25maWcob3JpZ2luOiBzdHJpbmcsIGVuZHBvaW50OiBIdHRwTW9ja0VuZHBvaW50LCBtZXRob2Q6IEhUVFBNZXRob2RSZWYsIGNvbmZpZ0lkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGVwOiBhbnkgPSBlbmRwb2ludDtcclxuICAgIGlmICghZXBbbWV0aG9kIGFzIGFueV0pIHJldHVybjtcclxuICAgIGNvbnN0IG9yaWdpbkNvbmZpZzogTWFwPHN0cmluZywgSHR0cE1vY2tFbmRwb2ludFN0b3JhZ2VbXT4gPSB0aGlzLl9jb25maWdMaXN0LmdldChvcmlnaW4pIGFzIGFueTtcclxuICAgIGNvbnN0IHJvdXRlOiBzdHJpbmcgPSBlbmRwb2ludC5yb3V0ZTtcclxuICAgIGNvbnN0IGRhdGE6IFRva2VuRGF0YSA9IHN0cmluZ1RvVG9rZW5EYXRhKHJvdXRlKTtcclxuICAgIGNvbnN0IGtleXM6IEtleVtdID0gW107XHJcbiAgICBjb25zdCByZWdleHA6IFJlZ0V4cCA9IHRva2VuRGF0YVRvUmVnZXhwKGRhdGEsIGtleXMsIHt9KTtcclxuICAgIGlmICghb3JpZ2luQ29uZmlnLmhhcyhtZXRob2QpKSBvcmlnaW5Db25maWcuc2V0KG1ldGhvZCwgW10pO1xyXG4gICAgY29uc3QgbWV0aG9kQ29uZmlnOiBIdHRwTW9ja0VuZHBvaW50U3RvcmFnZVtdID0gb3JpZ2luQ29uZmlnLmdldChtZXRob2QpIGFzIGFueTtcclxuICAgIG1ldGhvZENvbmZpZy5wdXNoKHtcclxuICAgICAgcmVnZXhwOiByZWdleHAsXHJcbiAgICAgIGtleXM6IGtleXMsXHJcbiAgICAgIG1ldGhvZE1vY2s6IGVwW21ldGhvZF0sXHJcbiAgICAgIGNvbmZpZ0lkOiBjb25maWdJZFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAcml2YXRlIFxyXG4gICAqL1xyXG4gIHByaXZhdGUgY2hlY2tPcmlnaW4ob3JpZ2luOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmIChvcmlnaW4uZW5kc1dpdGgoREVGQVVMVF9ERUxJTUlURVIpKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYE9yaWdpbiBtdXN0IG5vdCBlbmQgd2l0aCBhIC8gY2hhcmFjdGVyOiBbXCIke29yaWdpbn1cIl0uYCk7XHJcbiAgfVxyXG4gIFxyXG4gIC8qKlxyXG4gICAqIEByaXZhdGUgXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBkZWxldGVDb25maWdCeUlkKHN0b3JhZ2VNYXA6IE1hcDxzdHJpbmcsIEh0dHBNb2NrRW5kcG9pbnRTdG9yYWdlW10+LCBjb25maWdJZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBzdG9yYWdlTWFwLmZvckVhY2goKHN0b3JhZ2U6IEh0dHBNb2NrRW5kcG9pbnRTdG9yYWdlW10sIGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGNvbnN0IGNsZWFuZWRDb25maWc6IEh0dHBNb2NrRW5kcG9pbnRTdG9yYWdlW10gPSB0aGlzLmNsZWFuQ29uZmlnKHN0b3JhZ2UsIGNvbmZpZ0lkKTtcclxuICAgICAgaWYgKGNsZWFuZWRDb25maWcubGVuZ3RoKSBzdG9yYWdlTWFwLnNldChrZXksIGNsZWFuZWRDb25maWcpO1xyXG4gICAgICBlbHNlIHN0b3JhZ2VNYXAuZGVsZXRlKGtleSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEByaXZhdGUgXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjbGVhbkNvbmZpZyhzdG9yYWdlOiBIdHRwTW9ja0VuZHBvaW50U3RvcmFnZVtdLCBjb25maWdJZDogc3RyaW5nKTogSHR0cE1vY2tFbmRwb2ludFN0b3JhZ2VbXSB7XHJcbiAgICByZXR1cm4gc3RvcmFnZS5maWx0ZXIoKHZhbHVlOiBIdHRwTW9ja0VuZHBvaW50U3RvcmFnZSk9PiB2YWx1ZS5jb25maWdJZCAhPT0gY29uZmlnSWQpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,122 @@
1
+ /**
2
+ * @license
3
+ * Copyright Pascal ECHEMANN. All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be found in
6
+ * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license
7
+ */
8
+ import { Injectable } from '@angular/core';
9
+ import { SubscriptionError } from '../../../core';
10
+ import { IdentifiableComponent } from '../../../core/impl';
11
+ import * as i0 from "@angular/core";
12
+ /**
13
+ * A lightweight service that helps to manage unregistration issues of Angular subscriptions.
14
+ */
15
+ export class SubscriptionService {
16
+ constructor() {
17
+ /**
18
+ * @private
19
+ * Stores an internal reference to the last reference used with the `register()`
20
+ * method.
21
+ */
22
+ this._lastRef = null;
23
+ /**
24
+ * @private
25
+ * The internal `Subscription` instances storage.
26
+ */
27
+ this._subMap = new Map();
28
+ }
29
+ /**
30
+ * Stores a new `Subscription` instance associated with the specified reference.
31
+ *
32
+ * @param ref The reference for which to store a new `Subscription` instance.
33
+ * Can be either a string or an `Identifiable` object.
34
+ * @param subscription The `Subscription` instance to register.
35
+ *
36
+ * @returns A reference to this `SubscriptionService` instance.
37
+ */
38
+ register(ref, subscription) {
39
+ const REF = this.getRef(ref);
40
+ this._lastRef = REF;
41
+ if (!this._subMap.has(REF))
42
+ this._subMap.set(REF, []);
43
+ this._subMap.get(REF)?.push(subscription);
44
+ return this;
45
+ }
46
+ /**
47
+ * Stores a new `Subscription` instance associated with the reference specified
48
+ * by the last `register()` method invokation.
49
+ *
50
+ * @param subscription The `Subscription` instance to register.
51
+ *
52
+ * @returns A reference to this `SubscriptionService` instance.
53
+ */
54
+ append(subscription) {
55
+ if (!this._lastRef)
56
+ throw new SubscriptionError("Illegal Access Error: you must call the register() method before invoking the append() method.");
57
+ return this.register(this._lastRef, subscription);
58
+ }
59
+ /**
60
+ * Unsubscribes and removes all `Subscription` instances associated with the specified reference.
61
+ *
62
+ * @param ref The reference for which to remove all `Subscription` instances.
63
+ * Can be either a string or an `Identifiable` object.
64
+ *
65
+ * @returns `true` whether the specified reference exists; `false` otherwise.
66
+ */
67
+ clearAll(ref) {
68
+ const REF = this.getRef(ref);
69
+ let result = false;
70
+ if (this._lastRef === REF)
71
+ this._lastRef = null;
72
+ if (this._subMap.has(REF)) {
73
+ this._subMap.get(REF)?.forEach(subscription => {
74
+ if (!subscription.closed)
75
+ subscription.unsubscribe();
76
+ });
77
+ this._subMap.delete(REF);
78
+ result = true;
79
+ }
80
+ return result;
81
+ }
82
+ /**
83
+ * Returns all `Subscription` instances associated with the specified reference.
84
+ *
85
+ * @param ref The reference for which to remove get `Subscription` instances.
86
+ * Can be either a string or an `Identifiable` object.
87
+ *
88
+ * @returns All `Subscription` instances associated with the specified reference, or
89
+ * `null` whether the specified reference does not exists.
90
+ */
91
+ get(ref) {
92
+ return this._subMap.get(this.getRef(ref)) || null;
93
+ }
94
+ /**
95
+ * @private
96
+ * Returns the string reference for the regsitration process.
97
+ *
98
+ * @param ref The reference to be used the regsitration process.
99
+ * Can be either a string or an `Identifiable` object.
100
+ *
101
+ * @returns the string reference for the regsitration process.
102
+ */
103
+ getRef(ref) {
104
+ let targetRef;
105
+ if (typeof ref === "string")
106
+ targetRef = ref;
107
+ else if (ref instanceof IdentifiableComponent)
108
+ targetRef = ref.getID().toString();
109
+ else
110
+ throw new TypeError("ref must be of type of string or Identifiable");
111
+ return targetRef;
112
+ }
113
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: SubscriptionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
114
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: SubscriptionService, providedIn: 'root' }); }
115
+ }
116
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: SubscriptionService, decorators: [{
117
+ type: Injectable,
118
+ args: [{
119
+ providedIn: 'root'
120
+ }]
121
+ }] });
122
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaXB0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXRvb2xib3gvc3JjL2xpYi9tb2RlbC9zZXJ2aWNlL3N1YnNjcmlwdGlvbi9zdWJzY3JpcHRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFNM0Q7O0dBRUc7QUFDSCxNQUFNLE9BQU8sbUJBQW1CO0lBTmhDO1FBUUk7Ozs7V0FJRztRQUNLLGFBQVEsR0FBa0IsSUFBSSxDQUFDO1FBRXZDOzs7V0FHRztRQUNLLFlBQU8sR0FBcUMsSUFBSSxHQUFHLEVBQStCLENBQUM7S0FtRjlGO0lBakZHOzs7Ozs7OztPQVFHO0lBQ0ksUUFBUSxDQUFDLEdBQTBCLEVBQUUsWUFBMEI7UUFDbEUsTUFBTSxHQUFHLEdBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1lBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMxQyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLE1BQU0sQ0FBQyxZQUEwQjtRQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFBRSxNQUFNLElBQUksaUJBQWlCLENBQUMsZ0dBQWdHLENBQUMsQ0FBQztRQUNsSixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLFFBQVEsQ0FBQyxHQUEwQjtRQUN0QyxNQUFNLEdBQUcsR0FBVyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLElBQUksTUFBTSxHQUFZLEtBQUssQ0FBQztRQUM1QixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssR0FBRztZQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ2hELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUU7Z0JBQzFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTTtvQkFBRSxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDeEQsQ0FBQyxDQUFDLENBQUM7WUFDSixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN6QixNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSSxHQUFHLENBQUMsR0FBMEI7UUFDakMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0lBQ3RELENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNLLE1BQU0sQ0FBQyxHQUEwQjtRQUNyQyxJQUFJLFNBQWlCLENBQUM7UUFDdEIsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRO1lBQUUsU0FBUyxHQUFHLEdBQUcsQ0FBQzthQUN4QyxJQUFJLEdBQUcsWUFBWSxxQkFBcUI7WUFBRSxTQUFTLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDOztZQUM3RSxNQUFNLElBQUksU0FBUyxDQUFDLCtDQUErQyxDQUFDLENBQUM7UUFDMUUsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQzs4R0EvRlEsbUJBQW1CO2tIQUFuQixtQkFBbUIsY0FMaEIsTUFBTTs7MkZBS1QsbUJBQW1CO2tCQU4vQixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBQYXNjYWwgRUNIRU1BTk4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gXG4gKiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vcGFzY2FsZWNoZW1hbm4uY29tL2FuZ3VsYXItdG9vbGJveC9yZXNvdXJjZXMvbGljZW5zZVxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uRXJyb3IgfSBmcm9tICcuLi8uLi8uLi9jb3JlJztcbmltcG9ydCB7IElkZW50aWZpYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NvcmUvaW1wbCc7XG5pbXBvcnQgeyBJZGVudGlmaWFibGUgfSBmcm9tICcuLi8uLi9idXNpbmVzcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG4vKipcbiAqIEEgbGlnaHR3ZWlnaHQgc2VydmljZSB0aGF0IGhlbHBzIHRvIG1hbmFnZSB1bnJlZ2lzdHJhdGlvbiBpc3N1ZXMgb2YgQW5ndWxhciBzdWJzY3JpcHRpb25zLlxuICovXG5leHBvcnQgY2xhc3MgU3Vic2NyaXB0aW9uU2VydmljZSB7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIFN0b3JlcyBhbiBpbnRlcm5hbCByZWZlcmVuY2UgdG8gdGhlIGxhc3QgcmVmZXJlbmNlIHVzZWQgd2l0aCB0aGUgYHJlZ2lzdGVyKClgXG4gICAgICogbWV0aG9kLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2xhc3RSZWY6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBUaGUgaW50ZXJuYWwgYFN1YnNjcmlwdGlvbmAgaW5zdGFuY2VzIHN0b3JhZ2UuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc3ViTWFwOiBNYXA8c3RyaW5nLCBBcnJheTxTdWJzY3JpcHRpb24+PiA9IG5ldyBNYXA8c3RyaW5nLCBBcnJheTxTdWJzY3JpcHRpb24+PigpO1xuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIGEgbmV3IGBTdWJzY3JpcHRpb25gIGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIHJlZmVyZW5jZS5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gcmVmIFRoZSByZWZlcmVuY2UgZm9yIHdoaWNoIHRvIHN0b3JlIGEgbmV3IGBTdWJzY3JpcHRpb25gIGluc3RhbmNlLlxuICAgICAqICAgICAgICAgICAgQ2FuIGJlIGVpdGhlciBhIHN0cmluZyBvciBhbiBgSWRlbnRpZmlhYmxlYCBvYmplY3QuXG4gICAgICogQHBhcmFtIHN1YnNjcmlwdGlvbiBUaGUgYFN1YnNjcmlwdGlvbmAgaW5zdGFuY2UgdG8gcmVnaXN0ZXIuXG4gICAgICogXG4gICAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhpcyBgU3Vic2NyaXB0aW9uU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIHJlZ2lzdGVyKHJlZjogc3RyaW5nIHwgSWRlbnRpZmlhYmxlLCBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbik6IFN1YnNjcmlwdGlvblNlcnZpY2Uge1xuICAgICAgICBjb25zdCBSRUY6IHN0cmluZyA9IHRoaXMuZ2V0UmVmKHJlZik7XG4gICAgICAgIHRoaXMuX2xhc3RSZWYgPSBSRUY7XG4gICAgICAgIGlmICghdGhpcy5fc3ViTWFwLmhhcyhSRUYpKSB0aGlzLl9zdWJNYXAuc2V0KFJFRiwgW10pO1xuICAgICAgICB0aGlzLl9zdWJNYXAuZ2V0KFJFRik/LnB1c2goc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIGEgbmV3IGBTdWJzY3JpcHRpb25gIGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVmZXJlbmNlIHNwZWNpZmllZFxuICAgICAqIGJ5IHRoZSBsYXN0IGByZWdpc3RlcigpYCBtZXRob2QgaW52b2thdGlvbi5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gc3Vic2NyaXB0aW9uIFRoZSBgU3Vic2NyaXB0aW9uYCBpbnN0YW5jZSB0byByZWdpc3Rlci5cbiAgICAgKiBcbiAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGlzIGBTdWJzY3JpcHRpb25TZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgYXBwZW5kKHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uKTogU3Vic2NyaXB0aW9uU2VydmljZSB7XG4gICAgICAgIGlmICghdGhpcy5fbGFzdFJlZikgdGhyb3cgbmV3IFN1YnNjcmlwdGlvbkVycm9yKFwiSWxsZWdhbCBBY2Nlc3MgRXJyb3I6IHlvdSBtdXN0IGNhbGwgdGhlIHJlZ2lzdGVyKCkgbWV0aG9kIGJlZm9yZSBpbnZva2luZyB0aGUgYXBwZW5kKCkgbWV0aG9kLlwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVnaXN0ZXIodGhpcy5fbGFzdFJlZiwgc3Vic2NyaXB0aW9uKTtcbiAgICB9XG4gXG4gICAgLyoqXG4gICAgICogVW5zdWJzY3JpYmVzIGFuZCByZW1vdmVzIGFsbCBgU3Vic2NyaXB0aW9uYCBpbnN0YW5jZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgcmVmZXJlbmNlLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSByZWYgVGhlIHJlZmVyZW5jZSBmb3Igd2hpY2ggdG8gcmVtb3ZlIGFsbCBgU3Vic2NyaXB0aW9uYCBpbnN0YW5jZXMuXG4gICAgICogICAgICAgICAgICBDYW4gYmUgZWl0aGVyIGEgc3RyaW5nIG9yIGFuIGBJZGVudGlmaWFibGVgIG9iamVjdC5cbiAgICAgKiBcbiAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgd2hldGhlciB0aGUgc3BlY2lmaWVkIHJlZmVyZW5jZSBleGlzdHM7IGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBjbGVhckFsbChyZWY6IHN0cmluZyB8IElkZW50aWZpYWJsZSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBSRUY6IHN0cmluZyA9IHRoaXMuZ2V0UmVmKHJlZik7XG4gICAgICAgIGxldCByZXN1bHQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuX2xhc3RSZWYgPT09IFJFRikgdGhpcy5fbGFzdFJlZiA9IG51bGw7XG4gICAgICAgIGlmICh0aGlzLl9zdWJNYXAuaGFzKFJFRikpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1Yk1hcC5nZXQoUkVGKT8uZm9yRWFjaChzdWJzY3JpcHRpb24gPT4ge1xuICAgICAgICAgICAgICAgIGlmICghc3Vic2NyaXB0aW9uLmNsb3NlZCkgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLl9zdWJNYXAuZGVsZXRlKFJFRik7XG4gICAgICAgICAgICByZXN1bHQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbGwgYFN1YnNjcmlwdGlvbmAgaW5zdGFuY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIHJlZmVyZW5jZS5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gcmVmIFRoZSByZWZlcmVuY2UgZm9yIHdoaWNoIHRvIHJlbW92ZSBnZXQgYFN1YnNjcmlwdGlvbmAgaW5zdGFuY2VzLlxuICAgICAqICAgICAgICAgICAgQ2FuIGJlIGVpdGhlciBhIHN0cmluZyBvciBhbiBgSWRlbnRpZmlhYmxlYCBvYmplY3QuXG4gICAgICogXG4gICAgICogQHJldHVybnMgQWxsIGBTdWJzY3JpcHRpb25gIGluc3RhbmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCByZWZlcmVuY2UsIG9yIFxuICAgICAqICAgICAgICAgIGBudWxsYCB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgcmVmZXJlbmNlIGRvZXMgbm90IGV4aXN0cy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0KHJlZjogc3RyaW5nIHwgSWRlbnRpZmlhYmxlKTogQXJyYXk8U3Vic2NyaXB0aW9uPiB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3ViTWFwLmdldCh0aGlzLmdldFJlZihyZWYpKSB8fCBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlIFxuICAgICAqIFJldHVybnMgdGhlIHN0cmluZyByZWZlcmVuY2UgZm9yIHRoZSByZWdzaXRyYXRpb24gcHJvY2Vzcy4gXG4gICAgICogXG4gICAgICogQHBhcmFtIHJlZiBUaGUgcmVmZXJlbmNlIHRvIGJlIHVzZWQgdGhlIHJlZ3NpdHJhdGlvbiBwcm9jZXNzLiBcbiAgICAgKiAgICAgICAgICAgIENhbiBiZSBlaXRoZXIgYSBzdHJpbmcgb3IgYW4gYElkZW50aWZpYWJsZWAgb2JqZWN0LlxuICAgICAqIFxuICAgICAqIEByZXR1cm5zIHRoZSBzdHJpbmcgcmVmZXJlbmNlIGZvciB0aGUgcmVnc2l0cmF0aW9uIHByb2Nlc3MuIFxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0UmVmKHJlZjogc3RyaW5nIHwgSWRlbnRpZmlhYmxlKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHRhcmdldFJlZjogc3RyaW5nO1xuICAgICAgICBpZiAodHlwZW9mIHJlZiA9PT0gXCJzdHJpbmdcIikgdGFyZ2V0UmVmID0gcmVmO1xuICAgICAgICBlbHNlIGlmIChyZWYgaW5zdGFuY2VvZiBJZGVudGlmaWFibGVDb21wb25lbnQpIHRhcmdldFJlZiA9IHJlZi5nZXRJRCgpLnRvU3RyaW5nKCk7XG4gICAgICAgIGVsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcihcInJlZiBtdXN0IGJlIG9mIHR5cGUgb2Ygc3RyaW5nIG9yIElkZW50aWZpYWJsZVwiKTtcbiAgICAgICAgcmV0dXJuIHRhcmdldFJlZjtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,142 @@
1
+ /**
2
+ * @license
3
+ * Copyright Pascal ECHEMANN. All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be ound in
6
+ * fthe LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license
7
+ */
8
+ import { DOCUMENT } from '@angular/common';
9
+ import { Injectable, Inject } from '@angular/core';
10
+ import { DEFAULT_SCROLL_BEHAVIOR } from '../../../util/default-scroll-behavior';
11
+ import { AppBridge } from '../../../core/bridge/app-bridge';
12
+ import { AppBridgeError } from '../../../core';
13
+ import * as i0 from "@angular/core";
14
+ import * as i1 from "@angular/router";
15
+ /**
16
+ * @private
17
+ */
18
+ export const APP_PRIDGE_REF = "appBridge";
19
+ /**
20
+ * @private
21
+ */
22
+ const HREF = "href";
23
+ /**
24
+ * @private
25
+ */
26
+ const NATIVE_COMMANDS = "navigate|goToAnchor|declareCommand|deleteCommand|getCommand";
27
+ /**
28
+ * A utility service that allows dynamically injected HTML fragments, to interact with the Angular application.
29
+ */
30
+ export class AppBrigeService {
31
+ /**
32
+ * @private
33
+ */
34
+ constructor(_router, _zone, _document) {
35
+ this._router = _router;
36
+ this._zone = _zone;
37
+ this._document = _document;
38
+ this._defaultView = _document.defaultView;
39
+ this._appBridge = new AppBridge();
40
+ if (!this._defaultView[APP_PRIDGE_REF])
41
+ this._defaultView[APP_PRIDGE_REF] = this;
42
+ }
43
+ /**
44
+ * Provides the ability to invoke the `navigate()` method of the Angular app router.
45
+ *
46
+ * @param commands The commands array as specified by the Angular router `navigate()` method.
47
+ * @param extras The navigation options as specified by the Angular router `navigate()` method.
48
+ * @return `Promise` that resolves to `true` when navigation succeeds, or `false` when navigation fails.
49
+ *
50
+ * @see https://angular.dev/api/router/Router#navigate
51
+ */
52
+ navigate(commands, extras) {
53
+ return this._zone.run(() => {
54
+ return this._router.navigate(commands, extras);
55
+ });
56
+ }
57
+ /**
58
+ * Allows to scroll to the fragment specified by the `href` attribute when the user element interact with the associated element.
59
+ *
60
+ * @example
61
+ * <a href="#myAnchor" onclick="appBridge.goToAnchor(event)">My Section</a></code>
62
+ *
63
+ * @param event The event that triggers the anchor navigation.
64
+ * @return `Promise` that resolves to `true` when navigation succeeds, or `false` when navigation fails.
65
+ *
66
+ * @see https://angular.dev/api/router/Router#navigate
67
+ */
68
+ goToAnchor(event) {
69
+ event.preventDefault();
70
+ const anchor = event.target.getAttribute(HREF);
71
+ if (!anchor)
72
+ throw new ReferenceError("href attribute is not defined.");
73
+ const elm = this._document.querySelector(anchor);
74
+ if (!elm)
75
+ return new Promise((resolve) => resolve(false));
76
+ elm.scrollIntoView(DEFAULT_SCROLL_BEHAVIOR);
77
+ return this._zone.run(() => {
78
+ return this._router.navigate([], { fragment: anchor.slice(1) });
79
+ });
80
+ }
81
+ /**
82
+ * Declares a new JavaScript command to be used with dynamically loaded documents.
83
+ *
84
+ * @param name The name of the command to declare.
85
+ * @param command The reference to a JavaScript command to be used with dynamically loaded documents.
86
+ */
87
+ declareCommand(name, command) {
88
+ this.checkCommandName(name);
89
+ if (!this._appBridge.hasCommand(name)) {
90
+ this._appBridge.addCommand(name, command);
91
+ Object.defineProperty(this, name, {
92
+ configurable: true,
93
+ get: function () {
94
+ return this._appBridge.getCommand(name);
95
+ }
96
+ });
97
+ }
98
+ }
99
+ /**
100
+ * Unregisters a JavaScript command previously referenced with the `declareCommand()` method.
101
+ *
102
+ * @param name The name of the command to remove.
103
+ *
104
+ * @returns `true` whether the command existed and has been removed; `false` otherwise.
105
+ */
106
+ deleteCommand(name) {
107
+ this.checkCommandName(name);
108
+ if (!this._appBridge.removeCommand(name))
109
+ return false;
110
+ delete this._defaultView[APP_PRIDGE_REF][name];
111
+ return true;
112
+ }
113
+ /**
114
+ * Returns the JavaScript command previously referenced with the `declareCommand()` method.
115
+ *
116
+ * @param name The name of the command to retrieve.
117
+ * @returns The JavaScript command previously referenced with the specified `name` parameter.
118
+ * If no command is found, returns `undefined`.
119
+ */
120
+ getCommand(name) {
121
+ return this._appBridge.getCommand(name);
122
+ }
123
+ /**
124
+ * @private
125
+ */
126
+ checkCommandName(name) {
127
+ if (NATIVE_COMMANDS.includes(name))
128
+ throw new AppBridgeError("Command name cannot be the reference to a native command: " + name);
129
+ }
130
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AppBrigeService, deps: [{ token: i1.Router }, { token: i0.NgZone }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable }); }
131
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AppBrigeService, providedIn: 'root' }); }
132
+ }
133
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AppBrigeService, decorators: [{
134
+ type: Injectable,
135
+ args: [{
136
+ providedIn: 'root'
137
+ }]
138
+ }], ctorParameters: () => [{ type: i1.Router }, { type: i0.NgZone }, { type: undefined, decorators: [{
139
+ type: Inject,
140
+ args: [DOCUMENT]
141
+ }] }] });
142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWJyaWRnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci10b29sYm94L3NyYy9saWIvbW9kZWwvc2VydmljZS91aS9hcHAtYnJpZGdlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM1RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFHL0M7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQVcsV0FBVyxDQUFDO0FBRWxEOztHQUVHO0FBQ0gsTUFBTSxJQUFJLEdBQVcsTUFBTSxDQUFDO0FBRTVCOztHQUVHO0FBQ0gsTUFBTSxlQUFlLEdBQVcsNkRBQTZELENBQUM7QUFFOUY7O0dBRUc7QUFJSCxNQUFNLE9BQU8sZUFBZTtJQWF4Qjs7T0FFRztJQUNILFlBQW9CLE9BQWUsRUFDZixLQUFhLEVBQ0ssU0FBYztRQUZoQyxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2YsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUNLLGNBQVMsR0FBVCxTQUFTLENBQUs7UUFDaEQsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDO1FBQzFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUNsQyxJQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUM7WUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxHQUFH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QUFFLE1BQU07aUJBQ3JCOzswQkFtQmdCLE1BQU07MkJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAbGljZW5zZVxyXG4gKiBDb3B5cmlnaHQgUGFzY2FsIEVDSEVNQU5OLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4gKlxyXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBvdW5kIGluXHJcbiAqIGZ0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vcGFzY2FsZWNoZW1hbm4uY29tL2FuZ3VsYXItdG9vbGJveC9yZXNvdXJjZXMvbGljZW5zZVxyXG4gKi9cclxuXHJcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgTmdab25lLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmF2aWdhdGlvbkV4dHJhcywgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgREVGQVVMVF9TQ1JPTExfQkVIQVZJT1IgfSBmcm9tICcuLi8uLi8uLi91dGlsL2RlZmF1bHQtc2Nyb2xsLWJlaGF2aW9yJztcclxuaW1wb3J0IHsgQXBwQnJpZGdlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9icmlkZ2UvYXBwLWJyaWRnZSc7XHJcbmltcG9ydCB7IEFwcEJyaWRnZUVycm9yIH0gZnJvbSAnLi4vLi4vLi4vY29yZSc7XHJcbmltcG9ydCB7IEFwcEJyaWRnZUNvbW1hbmQgfSBmcm9tICcuLi8uLi9idXNpbmVzcy9sYW5nL2FwcC1icmlkZ2UtY29tbWFuZCc7XHJcblxyXG4vKipcclxuICogQHByaXZhdGVcclxuICovXHJcbmV4cG9ydCBjb25zdCBBUFBfUFJJREdFX1JFRjogc3RyaW5nID0gXCJhcHBCcmlkZ2VcIjtcclxuXHJcbi8qKlxyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cclxuY29uc3QgSFJFRjogc3RyaW5nID0gXCJocmVmXCI7XHJcblxyXG4vKipcclxuICogQHByaXZhdGVcclxuICovXHJcbmNvbnN0IE5BVElWRV9DT01NQU5EUzogc3RyaW5nID0gXCJuYXZpZ2F0ZXxnb1RvQW5jaG9yfGRlY2xhcmVDb21tYW5kfGRlbGV0ZUNvbW1hbmR8Z2V0Q29tbWFuZFwiO1xyXG5cclxuLyoqXHJcbiAqIEEgdXRpbGl0eSBzZXJ2aWNlIHRoYXQgYWxsb3dzIGR5bmFtaWNhbGx5IGluamVjdGVkIEhUTUwgZnJhZ21lbnRzLCB0byBpbnRlcmFjdCB3aXRoIHRoZSBBbmd1bGFyIGFwcGxpY2F0aW9uLlxyXG4gKi9cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBcHBCcmlnZVNlcnZpY2Uge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGVmYXVsdFZpZXc6IGFueTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBUaGVyZWZlcmVuY2UgdG8gdGhlIGNvbW1hbmQgaW52b2tlci5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBfYXBwQnJpZGdlOiBBcHBCcmlkZ2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9yb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgX3pvbmU6IE5nWm9uZSxcclxuICAgICAgICAgICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgX2RvY3VtZW50OiBhbnkpIHtcclxuICAgICAgICB0aGlzLl9kZWZhdWx0VmlldyA9IF9kb2N1bWVudC5kZWZhdWx0VmlldztcclxuICAgICAgICB0aGlzLl9hcHBCcmlkZ2UgPSBuZXcgQXBwQnJpZGdlKCk7XHJcbiAgICAgICAgaWYoIXRoaXMuX2RlZmF1bHRWaWV3W0FQUF9QUklER0VfUkVGXSkgdGhpcy5fZGVmYXVsdFZpZXdbQVBQX1BSSURHRV9SRUZdID0gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIGludm9rZSB0aGUgYG5hdmlnYXRlKClgIG1ldGhvZCBvZiB0aGUgQW5ndWxhciBhcHAgcm91dGVyLlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gY29tbWFuZHMgVGhlIGNvbW1hbmRzIGFycmF5IGFzIHNwZWNpZmllZCBieSB0aGUgQW5ndWxhciByb3V0ZXIgYG5hdmlnYXRlKClgIG1ldGhvZC5cclxuICAgICAqIEBwYXJhbSBleHRyYXMgVGhlIG5hdmlnYXRpb24gb3B0aW9ucyBhcyBzcGVjaWZpZWQgYnkgdGhlIEFuZ3VsYXIgcm91dGVyIGBuYXZpZ2F0ZSgpYCBtZXRob2QuXHJcbiAgICAgKiBAcmV0dXJuIGBQcm9taXNlYCB0aGF0IHJlc29sdmVzIHRvIGB0cnVlYCB3aGVuIG5hdmlnYXRpb24gc3VjY2VlZHMsIG9yIGBmYWxzZWAgd2hlbiBuYXZpZ2F0aW9uIGZhaWxzLlxyXG4gICAgICogXHJcbiAgICAgKiBAc2VlIGh0dHBzOi8vYW5ndWxhci5kZXYvYXBpL3JvdXRlci9Sb3V0ZXIjbmF2aWdhdGVcclxuICAgICAqL1xyXG4gICAgcHVibGljIG5hdmlnYXRlKGNvbW1hbmRzOiBzdHJpbmdbXSwgZXh0cmFzPzogTmF2aWdhdGlvbkV4dHJhcyB8IHVuZGVmaW5lZCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl96b25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoY29tbWFuZHMsIGV4dHJhcyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGxvd3MgdG8gc2Nyb2xsIHRvIHRoZSBmcmFnbWVudCBzcGVjaWZpZWQgYnkgdGhlIGBocmVmYCBhdHRyaWJ1dGUgd2hlbiB0aGUgdXNlciBlbGVtZW50IGludGVyYWN0IHdpdGggdGhlIGFzc29jaWF0ZWQgZWxlbWVudC5cclxuICAgICAqIFxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIDxhIGhyZWY9XCIjbXlBbmNob3JcIiBvbmNsaWNrPVwiYXBwQnJpZGdlLmdvVG9BbmNob3IoZXZlbnQpXCI+TXkgU2VjdGlvbjwvYT48L2NvZGU+XHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgdGhhdCB0cmlnZ2VycyB0aGUgYW5jaG9yIG5hdmlnYXRpb24uXHJcbiAgICAgKiBAcmV0dXJuIGBQcm9taXNlYCB0aGF0IHJlc29sdmVzIHRvIGB0cnVlYCB3aGVuIG5hdmlnYXRpb24gc3VjY2VlZHMsIG9yIGBmYWxzZWAgd2hlbiBuYXZpZ2F0aW9uIGZhaWxzLlxyXG4gICAgICogXHJcbiAgICAgKiBAc2VlIGh0dHBzOi8vYW5ndWxhci5kZXYvYXBpL3JvdXRlci9Sb3V0ZXIjbmF2aWdhdGVcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdvVG9BbmNob3IoZXZlbnQ6IEV2ZW50KTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBjb25zdCBhbmNob3I6IHN0cmluZyA9IChldmVudC50YXJnZXQgYXMgYW55KS5nZXRBdHRyaWJ1dGUoSFJFRik7XHJcbiAgICAgICAgaWYgKCFhbmNob3IpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcImhyZWYgYXR0cmlidXRlIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgICAgICBjb25zdCBlbG06IGFueSA9IHRoaXMuX2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYW5jaG9yKTtcclxuICAgICAgICBpZiAoIWVsbSkgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbikgPT4gcmVzb2x2ZShmYWxzZSkpO1xyXG4gICAgICAgIGVsbS5zY3JvbGxJbnRvVmlldyhERUZBVUxUX1NDUk9MTF9CRUhBVklPUik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICAgICByZXR1cm4gdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtdLCB7IGZyYWdtZW50OiBhbmNob3Iuc2xpY2UoMSl9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERlY2xhcmVzIGEgbmV3IEphdmFTY3JpcHQgY29tbWFuZCB0byBiZSB1c2VkIHdpdGggZHluYW1pY2FsbHkgbG9hZGVkIGRvY3VtZW50cy5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGNvbW1hbmQgdG8gZGVjbGFyZS5cclxuICAgICAqIEBwYXJhbSBjb21tYW5kIFRoZSByZWZlcmVuY2UgdG8gYSBKYXZhU2NyaXB0IGNvbW1hbmQgdG8gYmUgdXNlZCB3aXRoIGR5bmFtaWNhbGx5IGxvYWRlZCBkb2N1bWVudHMuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBkZWNsYXJlQ29tbWFuZChuYW1lOiBzdHJpbmcsIGNvbW1hbmQ6IEFwcEJyaWRnZUNvbW1hbmQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNoZWNrQ29tbWFuZE5hbWUobmFtZSk7XHJcbiAgICAgICAgaWYoIXRoaXMuX2FwcEJyaWRnZS5oYXNDb21tYW5kKG5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2FwcEJyaWRnZS5hZGRDb21tYW5kKG5hbWUsIGNvbW1hbmQpO1xyXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgbmFtZSwge1xyXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYXBwQnJpZGdlLmdldENvbW1hbmQobmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBVbnJlZ2lzdGVycyBhIEphdmFTY3JpcHQgY29tbWFuZCBwcmV2aW91c2x5IHJlZmVyZW5jZWQgd2l0aCB0aGUgYGRlY2xhcmVDb21tYW5kKClgIG1ldGhvZC5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGNvbW1hbmQgdG8gcmVtb3ZlLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgd2hldGhlciB0aGUgY29tbWFuZCBleGlzdGVkIGFuZCBoYXMgYmVlbiByZW1vdmVkOyBgZmFsc2VgIG90aGVyd2lzZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGRlbGV0ZUNvbW1hbmQobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgdGhpcy5jaGVja0NvbW1hbmROYW1lKG5hbWUpO1xyXG4gICAgICAgIGlmKCF0aGlzLl9hcHBCcmlkZ2UucmVtb3ZlQ29tbWFuZChuYW1lKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLl9kZWZhdWx0Vmlld1tBUFBfUFJJREdFX1JFRl1bbmFtZV07XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgSmF2YVNjcmlwdCBjb21tYW5kIHByZXZpb3VzbHkgcmVmZXJlbmNlZCB3aXRoIHRoZSBgZGVjbGFyZUNvbW1hbmQoKWAgbWV0aG9kLlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgY29tbWFuZCB0byByZXRyaWV2ZS5cclxuICAgICAqIEByZXR1cm5zIFRoZSBKYXZhU2NyaXB0IGNvbW1hbmQgcHJldmlvdXNseSByZWZlcmVuY2VkIHdpdGggdGhlIHNwZWNpZmllZCBgbmFtZWAgcGFyYW1ldGVyLlxyXG4gICAgICogICAgICAgICAgSWYgbm8gY29tbWFuZCBpcyBmb3VuZCwgcmV0dXJucyBgdW5kZWZpbmVkYC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldENvbW1hbmQobmFtZTogc3RyaW5nKTogQXBwQnJpZGdlQ29tbWFuZCB8IHVuZGVmaW5lZCB7ICAgXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FwcEJyaWRnZS5nZXRDb21tYW5kKG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBjaGVja0NvbW1hbmROYW1lKG5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGlmIChOQVRJVkVfQ09NTUFORFMuaW5jbHVkZXMobmFtZSkpIHRocm93IG5ldyBBcHBCcmlkZ2VFcnJvcihcIkNvbW1hbmQgbmFtZSBjYW5ub3QgYmUgdGhlIHJlZmVyZW5jZSB0byBhIG5hdGl2ZSBjb21tYW5kOiBcIiArIG5hbWUpO1xyXG4gICAgfVxyXG59Il19