@abp/ng.core 5.0.0-rc.1 → 5.0.2

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 (297) hide show
  1. package/abp-ng.core.d.ts +5 -5
  2. package/bundles/abp-ng.core-locale.umd.js +361 -361
  3. package/bundles/abp-ng.core-locale.umd.js.map +1 -1
  4. package/bundles/abp-ng.core-testing.umd.js +442 -442
  5. package/bundles/abp-ng.core.umd.js +4873 -4860
  6. package/bundles/abp-ng.core.umd.js.map +1 -1
  7. package/esm2015/abp-ng.core.js +4 -4
  8. package/esm2015/lib/abstracts/index.js +1 -1
  9. package/esm2015/lib/abstracts/ng-model.component.js +58 -58
  10. package/esm2015/lib/components/dynamic-layout.component.js +89 -99
  11. package/esm2015/lib/components/index.js +3 -3
  12. package/esm2015/lib/components/replaceable-route-container.component.js +37 -37
  13. package/esm2015/lib/components/router-outlet.component.js +14 -14
  14. package/esm2015/lib/constants/different-locales.js +336 -336
  15. package/esm2015/lib/constants/index.js +1 -1
  16. package/esm2015/lib/core.module.js +280 -280
  17. package/esm2015/lib/directives/autofocus.directive.js +29 -29
  18. package/esm2015/lib/directives/debounce.directive.js +35 -35
  19. package/esm2015/lib/directives/for.directive.js +150 -150
  20. package/esm2015/lib/directives/form-submit.directive.js +68 -68
  21. package/esm2015/lib/directives/index.js +8 -8
  22. package/esm2015/lib/directives/init.directive.js +20 -20
  23. package/esm2015/lib/directives/permission.directive.js +47 -47
  24. package/esm2015/lib/directives/replaceable-template.directive.js +120 -120
  25. package/esm2015/lib/directives/stop-propagation.directive.js +31 -31
  26. package/esm2015/lib/enums/common.js +1 -1
  27. package/esm2015/lib/enums/index.js +1 -1
  28. package/esm2015/lib/guards/auth.guard.js +28 -28
  29. package/esm2015/lib/guards/index.js +2 -2
  30. package/esm2015/lib/guards/permission.guard.js +43 -43
  31. package/esm2015/lib/handlers/oauth-configuration.handler.js +36 -36
  32. package/esm2015/lib/handlers/routes.handler.js +46 -46
  33. package/esm2015/lib/interceptors/api.interceptor.js +53 -53
  34. package/esm2015/lib/interceptors/index.js +1 -1
  35. package/esm2015/lib/localization.module.js +15 -15
  36. package/esm2015/lib/models/auth.js +1 -1
  37. package/esm2015/lib/models/common.js +1 -1
  38. package/esm2015/lib/models/dtos.js +118 -118
  39. package/esm2015/lib/models/environment.js +1 -1
  40. package/esm2015/lib/models/index.js +9 -9
  41. package/esm2015/lib/models/localization.js +1 -1
  42. package/esm2015/lib/models/replaceable-components.js +1 -1
  43. package/esm2015/lib/models/rest.js +2 -2
  44. package/esm2015/lib/models/session.js +1 -1
  45. package/esm2015/lib/models/utility.js +1 -1
  46. package/esm2015/lib/pipes/index.js +2 -2
  47. package/esm2015/lib/pipes/localization.pipe.js +32 -32
  48. package/esm2015/lib/pipes/sort.pipe.js +48 -48
  49. package/esm2015/lib/providers/cookie-language.provider.js +21 -21
  50. package/esm2015/lib/providers/locale.provider.js +21 -21
  51. package/esm2015/lib/proxy/pages/abp/multi-tenancy/abp-tenant.service.js +28 -28
  52. package/esm2015/lib/proxy/pages/abp/multi-tenancy/index.js +1 -1
  53. package/esm2015/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/abp-api-definition.service.js +23 -23
  54. package/esm2015/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/index.js +1 -1
  55. package/esm2015/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-configuration.service.js +24 -24
  56. package/esm2015/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/index.js +4 -4
  57. package/esm2015/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/models.js +1 -1
  58. package/esm2015/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/index.js +1 -1
  59. package/esm2015/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/models.js +2 -2
  60. package/esm2015/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/index.js +1 -1
  61. package/esm2015/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models.js +1 -1
  62. package/esm2015/lib/proxy/volo/abp/http/modeling/index.js +1 -1
  63. package/esm2015/lib/proxy/volo/abp/http/modeling/models.js +2 -2
  64. package/esm2015/lib/proxy/volo/abp/localization/index.js +1 -1
  65. package/esm2015/lib/proxy/volo/abp/localization/models.js +1 -1
  66. package/esm2015/lib/proxy/volo/abp/models.js +1 -1
  67. package/esm2015/lib/services/auth.service.js +46 -46
  68. package/esm2015/lib/services/config-state.service.js +129 -129
  69. package/esm2015/lib/services/content-projection.service.js +16 -16
  70. package/esm2015/lib/services/dom-insertion.service.js +31 -31
  71. package/esm2015/lib/services/environment.service.js +34 -34
  72. package/esm2015/lib/services/http-error-reporter.service.js +28 -28
  73. package/esm2015/lib/services/http-wait.service.js +71 -71
  74. package/esm2015/lib/services/index.js +21 -21
  75. package/esm2015/lib/services/lazy-load.service.js +37 -37
  76. package/esm2015/lib/services/list.service.js +102 -102
  77. package/esm2015/lib/services/localization.service.js +181 -181
  78. package/esm2015/lib/services/multi-tenancy.service.js +47 -47
  79. package/esm2015/lib/services/permission.service.js +63 -63
  80. package/esm2015/lib/services/replaceable-components.service.js +48 -48
  81. package/esm2015/lib/services/resource-wait.service.js +38 -38
  82. package/esm2015/lib/services/rest.service.js +63 -59
  83. package/esm2015/lib/services/router-events.service.js +37 -37
  84. package/esm2015/lib/services/router-wait.service.js +50 -50
  85. package/esm2015/lib/services/routes.service.js +146 -146
  86. package/esm2015/lib/services/session-state.service.js +75 -75
  87. package/esm2015/lib/services/subscription.service.js +40 -40
  88. package/esm2015/lib/services/track-by.service.js +20 -20
  89. package/esm2015/lib/strategies/auth-flow.strategy.js +201 -201
  90. package/esm2015/lib/strategies/container.strategy.js +37 -37
  91. package/esm2015/lib/strategies/content-security.strategy.js +27 -27
  92. package/esm2015/lib/strategies/content.strategy.js +47 -47
  93. package/esm2015/lib/strategies/context.strategy.js +36 -36
  94. package/esm2015/lib/strategies/cross-origin.strategy.js +25 -25
  95. package/esm2015/lib/strategies/dom.strategy.js +26 -26
  96. package/esm2015/lib/strategies/index.js +8 -8
  97. package/esm2015/lib/strategies/loading.strategy.js +57 -57
  98. package/esm2015/lib/strategies/projection.strategy.js +79 -79
  99. package/esm2015/lib/tokens/app-config.token.js +2 -2
  100. package/esm2015/lib/tokens/cookie-language-key.token.js +4 -4
  101. package/esm2015/lib/tokens/index.js +8 -8
  102. package/esm2015/lib/tokens/list.token.js +2 -2
  103. package/esm2015/lib/tokens/localization.token.js +9 -9
  104. package/esm2015/lib/tokens/lodaer-delay.token.js +2 -2
  105. package/esm2015/lib/tokens/manage-profile.token.js +11 -11
  106. package/esm2015/lib/tokens/options.token.js +7 -7
  107. package/esm2015/lib/tokens/tenant-key.token.js +2 -2
  108. package/esm2015/lib/utils/array-utils.js +6 -6
  109. package/esm2015/lib/utils/auth-utils.js +41 -41
  110. package/esm2015/lib/utils/common-utils.js +28 -28
  111. package/esm2015/lib/utils/date-extensions.js +5 -5
  112. package/esm2015/lib/utils/date-utils.js +12 -12
  113. package/esm2015/lib/utils/environment-utils.js +35 -35
  114. package/esm2015/lib/utils/factory-utils.js +23 -23
  115. package/esm2015/lib/utils/file-utils.js +13 -13
  116. package/esm2015/lib/utils/form-utils.js +11 -11
  117. package/esm2015/lib/utils/generator-utils.js +33 -33
  118. package/esm2015/lib/utils/http-utils.js +18 -18
  119. package/esm2015/lib/utils/index.js +20 -20
  120. package/esm2015/lib/utils/initial-utils.js +63 -63
  121. package/esm2015/lib/utils/internal-store-utils.js +35 -35
  122. package/esm2015/lib/utils/lazy-load-utils.js +39 -39
  123. package/esm2015/lib/utils/localization-utils.js +49 -49
  124. package/esm2015/lib/utils/multi-tenancy-utils.js +82 -82
  125. package/esm2015/lib/utils/number-utils.js +3 -3
  126. package/esm2015/lib/utils/object-utils.js +36 -36
  127. package/esm2015/lib/utils/route-utils.js +26 -26
  128. package/esm2015/lib/utils/string-utils.js +25 -21
  129. package/esm2015/lib/utils/tree-utils.js +53 -53
  130. package/esm2015/lib/validators/age.validator.js +13 -13
  131. package/esm2015/lib/validators/credit-card.validator.js +20 -20
  132. package/esm2015/lib/validators/index.js +22 -22
  133. package/esm2015/lib/validators/range.validator.js +14 -14
  134. package/esm2015/lib/validators/required.validator.js +12 -12
  135. package/esm2015/lib/validators/string-length.validator.js +14 -14
  136. package/esm2015/lib/validators/url.validator.js +15 -15
  137. package/esm2015/locale/abp-ng.core-locale.js +4 -4
  138. package/esm2015/locale/public-api.js +1 -1
  139. package/esm2015/locale/utils/register-locale.js +43 -43
  140. package/esm2015/public-api.js +25 -25
  141. package/esm2015/testing/abp-ng.core-testing.js +4 -4
  142. package/esm2015/testing/lib/core-testing.module.js +61 -61
  143. package/esm2015/testing/lib/services/index.js +2 -2
  144. package/esm2015/testing/lib/services/mock-permission.service.js +34 -34
  145. package/esm2015/testing/lib/services/mock-rest.service.js +29 -29
  146. package/esm2015/testing/lib/utils/clear-page.util.js +9 -9
  147. package/esm2015/testing/lib/utils/index.js +2 -2
  148. package/esm2015/testing/lib/utils/wait.util.js +4 -4
  149. package/esm2015/testing/public-api.js +3 -3
  150. package/fesm2015/abp-ng.core-locale.js +40 -40
  151. package/fesm2015/abp-ng.core-locale.js.map +1 -1
  152. package/fesm2015/abp-ng.core-testing.js +113 -113
  153. package/fesm2015/abp-ng.core.js +3976 -3977
  154. package/fesm2015/abp-ng.core.js.map +1 -1
  155. package/lib/abstracts/index.d.ts +1 -1
  156. package/lib/abstracts/ng-model.component.d.ts +25 -25
  157. package/lib/components/dynamic-layout.component.d.ts +27 -27
  158. package/lib/components/index.d.ts +3 -3
  159. package/lib/components/replaceable-route-container.component.d.ts +17 -17
  160. package/lib/components/router-outlet.component.d.ts +5 -5
  161. package/lib/constants/different-locales.d.ts +334 -334
  162. package/lib/constants/index.d.ts +1 -1
  163. package/lib/core.module.d.ts +56 -56
  164. package/lib/directives/autofocus.directive.d.ts +12 -12
  165. package/lib/directives/debounce.directive.d.ts +13 -13
  166. package/lib/directives/for.directive.d.ts +36 -36
  167. package/lib/directives/form-submit.directive.d.ts +19 -19
  168. package/lib/directives/index.d.ts +8 -8
  169. package/lib/directives/init.directive.d.ts +10 -10
  170. package/lib/directives/permission.directive.d.ts +18 -18
  171. package/lib/directives/replaceable-template.directive.d.ts +30 -30
  172. package/lib/directives/stop-propagation.directive.d.ts +12 -12
  173. package/lib/enums/common.d.ts +5 -5
  174. package/lib/enums/index.d.ts +1 -1
  175. package/lib/guards/auth.guard.d.ts +13 -13
  176. package/lib/guards/index.d.ts +2 -2
  177. package/lib/guards/permission.guard.d.ts +16 -16
  178. package/lib/handlers/oauth-configuration.handler.d.ts +13 -13
  179. package/lib/handlers/routes.handler.d.ts +11 -11
  180. package/lib/interceptors/api.interceptor.d.ts +16 -16
  181. package/lib/interceptors/index.d.ts +1 -1
  182. package/lib/localization.module.d.ts +7 -7
  183. package/lib/models/auth.d.ts +6 -6
  184. package/lib/models/common.d.ts +77 -77
  185. package/lib/models/dtos.d.ts +95 -95
  186. package/lib/models/environment.d.ts +35 -35
  187. package/lib/models/index.d.ts +9 -9
  188. package/lib/models/localization.d.ts +5 -5
  189. package/lib/models/replaceable-components.d.ts +45 -45
  190. package/lib/models/rest.d.ts +35 -33
  191. package/lib/models/session.d.ts +7 -7
  192. package/lib/models/utility.d.ts +14 -14
  193. package/lib/pipes/index.d.ts +2 -2
  194. package/lib/pipes/localization.pipe.d.ts +12 -12
  195. package/lib/pipes/sort.pipe.d.ts +9 -9
  196. package/lib/providers/cookie-language.provider.d.ts +3 -3
  197. package/lib/providers/locale.provider.d.ts +9 -9
  198. package/lib/proxy/pages/abp/multi-tenancy/abp-tenant.service.d.ts +12 -12
  199. package/lib/proxy/pages/abp/multi-tenancy/index.d.ts +1 -1
  200. package/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/abp-api-definition.service.d.ts +11 -11
  201. package/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/index.d.ts +1 -1
  202. package/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-configuration.service.d.ts +11 -11
  203. package/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/index.d.ts +4 -4
  204. package/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/models.d.ts +85 -85
  205. package/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/index.d.ts +1 -1
  206. package/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/models.d.ts +71 -71
  207. package/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/index.d.ts +1 -1
  208. package/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models.d.ts +14 -14
  209. package/lib/proxy/volo/abp/http/modeling/index.d.ts +1 -1
  210. package/lib/proxy/volo/abp/http/modeling/models.d.ts +70 -70
  211. package/lib/proxy/volo/abp/localization/index.d.ts +1 -1
  212. package/lib/proxy/volo/abp/localization/models.d.ts +6 -6
  213. package/lib/proxy/volo/abp/models.d.ts +4 -4
  214. package/lib/services/auth.service.d.ts +17 -17
  215. package/lib/services/config-state.service.d.ts +339 -339
  216. package/lib/services/content-projection.service.d.ts +10 -10
  217. package/lib/services/dom-insertion.service.d.ts +10 -10
  218. package/lib/services/environment.service.d.ts +96 -96
  219. package/lib/services/http-error-reporter.service.d.ts +12 -12
  220. package/lib/services/http-wait.service.d.ts +30 -30
  221. package/lib/services/index.d.ts +21 -21
  222. package/lib/services/lazy-load.service.d.ts +13 -13
  223. package/lib/services/list.service.d.ts +39 -39
  224. package/lib/services/localization.service.d.ts +47 -47
  225. package/lib/services/multi-tenancy.service.d.ts +22 -22
  226. package/lib/services/permission.service.d.ts +19 -19
  227. package/lib/services/replaceable-components.service.d.ts +19 -19
  228. package/lib/services/resource-wait.service.d.ts +15 -15
  229. package/lib/services/rest.service.d.ts +20 -19
  230. package/lib/services/router-events.service.d.ts +29 -29
  231. package/lib/services/router-wait.service.d.ts +20 -20
  232. package/lib/services/routes.service.d.ts +50 -50
  233. package/lib/services/session-state.service.d.ts +25 -25
  234. package/lib/services/subscription.service.d.ts +17 -17
  235. package/lib/services/track-by.service.d.ts +11 -11
  236. package/lib/strategies/auth-flow.strategy.d.ts +367 -367
  237. package/lib/strategies/container.strategy.d.ts +22 -22
  238. package/lib/strategies/content-security.strategy.d.ts +17 -17
  239. package/lib/strategies/content.strategy.d.ts +26 -26
  240. package/lib/strategies/context.strategy.d.ts +23 -23
  241. package/lib/strategies/cross-origin.strategy.d.ts +14 -14
  242. package/lib/strategies/dom.strategy.d.ts +13 -13
  243. package/lib/strategies/index.d.ts +8 -8
  244. package/lib/strategies/loading.strategy.d.ts +28 -28
  245. package/lib/strategies/projection.strategy.d.ts +39 -39
  246. package/lib/tokens/app-config.token.d.ts +3 -3
  247. package/lib/tokens/cookie-language-key.token.d.ts +2 -2
  248. package/lib/tokens/index.d.ts +8 -8
  249. package/lib/tokens/list.token.d.ts +2 -2
  250. package/lib/tokens/localization.token.d.ts +6 -6
  251. package/lib/tokens/lodaer-delay.token.d.ts +2 -2
  252. package/lib/tokens/manage-profile.token.d.ts +2 -2
  253. package/lib/tokens/options.token.d.ts +4 -4
  254. package/lib/tokens/tenant-key.token.d.ts +2 -2
  255. package/lib/utils/array-utils.d.ts +1 -1
  256. package/lib/utils/auth-utils.d.ts +162 -162
  257. package/lib/utils/common-utils.d.ts +9 -9
  258. package/lib/utils/date-extensions.d.ts +6 -6
  259. package/lib/utils/date-utils.d.ts +4 -4
  260. package/lib/utils/environment-utils.d.ts +3 -3
  261. package/lib/utils/factory-utils.d.ts +9 -9
  262. package/lib/utils/file-utils.d.ts +1 -1
  263. package/lib/utils/form-utils.d.ts +2 -2
  264. package/lib/utils/generator-utils.d.ts +3 -3
  265. package/lib/utils/http-utils.d.ts +8 -8
  266. package/lib/utils/index.d.ts +20 -20
  267. package/lib/utils/initial-utils.d.ts +159 -159
  268. package/lib/utils/internal-store-utils.d.ts +14 -14
  269. package/lib/utils/lazy-load-utils.d.ts +4 -4
  270. package/lib/utils/localization-utils.d.ts +5 -5
  271. package/lib/utils/multi-tenancy-utils.d.ts +3 -3
  272. package/lib/utils/number-utils.d.ts +1 -1
  273. package/lib/utils/object-utils.d.ts +1 -1
  274. package/lib/utils/route-utils.d.ts +8 -8
  275. package/lib/utils/string-utils.d.ts +3 -2
  276. package/lib/utils/tree-utils.d.ts +19 -19
  277. package/lib/validators/age.validator.d.ts +10 -10
  278. package/lib/validators/credit-card.validator.d.ts +5 -5
  279. package/lib/validators/index.d.ts +22 -22
  280. package/lib/validators/range.validator.d.ts +12 -12
  281. package/lib/validators/required.validator.d.ts +8 -8
  282. package/lib/validators/string-length.validator.d.ts +14 -14
  283. package/lib/validators/url.validator.d.ts +5 -5
  284. package/locale/abp-ng.core-locale.d.ts +5 -5
  285. package/locale/public-api.d.ts +1 -1
  286. package/locale/utils/register-locale.d.ts +13 -13
  287. package/package.json +2 -2
  288. package/public-api.d.ts +24 -24
  289. package/testing/abp-ng.core-testing.d.ts +5 -5
  290. package/testing/lib/core-testing.module.d.ts +16 -16
  291. package/testing/lib/services/index.d.ts +2 -2
  292. package/testing/lib/services/mock-permission.service.d.ts +10 -10
  293. package/testing/lib/services/mock-rest.service.d.ts +13 -13
  294. package/testing/lib/utils/clear-page.util.d.ts +2 -2
  295. package/testing/lib/utils/index.d.ts +2 -2
  296. package/testing/lib/utils/wait.util.d.ts +2 -2
  297. package/testing/public-api.d.ts +3 -3
@@ -1,50 +1,50 @@
1
- // This will not be necessary when only Angukar 9.1+ is supported
2
- export function getLocaleDirection(locale) {
3
- return /^(ar(-[A-Z]{2})?|ckb(-IR)?|fa(-AF)?|he|ks|lrc(-IQ)?|mzn|pa-Arab|ps(-PK)?|sd|ug|ur(-IN)?|uz-Arab|yi)$/.test(locale)
4
- ? 'rtl'
5
- : 'ltr';
6
- }
7
- export function createLocalizer(localization) {
8
- return (resourceName, key, defaultValue) => {
9
- var _a;
10
- if (resourceName === '_')
11
- return key;
12
- const resource = (_a = localization === null || localization === void 0 ? void 0 : localization.values) === null || _a === void 0 ? void 0 : _a[resourceName];
13
- if (!resource)
14
- return defaultValue;
15
- return resource[key] || defaultValue;
16
- };
17
- }
18
- export function createLocalizerWithFallback(localization) {
19
- const findLocalization = createLocalizationFinder(localization);
20
- return (resourceNames, keys, defaultValue) => {
21
- const { localized } = findLocalization(resourceNames, keys);
22
- return localized || defaultValue;
23
- };
24
- }
25
- export function createLocalizationPipeKeyGenerator(localization) {
26
- const findLocalization = createLocalizationFinder(localization);
27
- return (resourceNames, keys, defaultKey) => {
28
- const { resourceName, key } = findLocalization(resourceNames, keys);
29
- return !resourceName ? defaultKey : resourceName === '_' ? key : `${resourceName}::${key}`;
30
- };
31
- }
32
- function createLocalizationFinder(localization) {
33
- const localize = createLocalizer(localization);
34
- return (resourceNames, keys) => {
35
- resourceNames = resourceNames.concat(localization.defaultResourceName || '').filter(Boolean);
36
- const resourceCount = resourceNames.length;
37
- const keyCount = keys.length;
38
- for (let i = 0; i < resourceCount; i++) {
39
- const resourceName = resourceNames[i];
40
- for (let j = 0; j < keyCount; j++) {
41
- const key = keys[j];
42
- const localized = localize(resourceName, key, null);
43
- if (localized)
44
- return { resourceName, key, localized };
45
- }
46
- }
47
- return { resourceName: undefined, key: undefined, localized: undefined };
48
- };
49
- }
1
+ // This will not be necessary when only Angukar 9.1+ is supported
2
+ export function getLocaleDirection(locale) {
3
+ return /^(ar(-[A-Z]{2})?|ckb(-IR)?|fa(-AF)?|he|ks|lrc(-IQ)?|mzn|pa-Arab|ps(-PK)?|sd|ug|ur(-IN)?|uz-Arab|yi)$/.test(locale)
4
+ ? 'rtl'
5
+ : 'ltr';
6
+ }
7
+ export function createLocalizer(localization) {
8
+ return (resourceName, key, defaultValue) => {
9
+ var _a;
10
+ if (resourceName === '_')
11
+ return key;
12
+ const resource = (_a = localization === null || localization === void 0 ? void 0 : localization.values) === null || _a === void 0 ? void 0 : _a[resourceName];
13
+ if (!resource)
14
+ return defaultValue;
15
+ return resource[key] || defaultValue;
16
+ };
17
+ }
18
+ export function createLocalizerWithFallback(localization) {
19
+ const findLocalization = createLocalizationFinder(localization);
20
+ return (resourceNames, keys, defaultValue) => {
21
+ const { localized } = findLocalization(resourceNames, keys);
22
+ return localized || defaultValue;
23
+ };
24
+ }
25
+ export function createLocalizationPipeKeyGenerator(localization) {
26
+ const findLocalization = createLocalizationFinder(localization);
27
+ return (resourceNames, keys, defaultKey) => {
28
+ const { resourceName, key } = findLocalization(resourceNames, keys);
29
+ return !resourceName ? defaultKey : resourceName === '_' ? key : `${resourceName}::${key}`;
30
+ };
31
+ }
32
+ function createLocalizationFinder(localization) {
33
+ const localize = createLocalizer(localization);
34
+ return (resourceNames, keys) => {
35
+ resourceNames = resourceNames.concat(localization.defaultResourceName || '').filter(Boolean);
36
+ const resourceCount = resourceNames.length;
37
+ const keyCount = keys.length;
38
+ for (let i = 0; i < resourceCount; i++) {
39
+ const resourceName = resourceNames[i];
40
+ for (let j = 0; j < keyCount; j++) {
41
+ const key = keys[j];
42
+ const localized = localize(resourceName, key, null);
43
+ if (localized)
44
+ return { resourceName, key, localized };
45
+ }
46
+ }
47
+ return { resourceName: undefined, key: undefined, localized: undefined };
48
+ };
49
+ }
50
50
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvbGliL3V0aWxzL2xvY2FsaXphdGlvbi11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxpRUFBaUU7QUFDakUsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE1BQWM7SUFDL0MsT0FBTyxzR0FBc0csQ0FBQyxJQUFJLENBQ2hILE1BQU0sQ0FDUDtRQUNDLENBQUMsQ0FBQyxLQUFLO1FBQ1AsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNaLENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUFDLFlBQXFEO0lBQ25GLE9BQU8sQ0FBQyxZQUFvQixFQUFFLEdBQVcsRUFBRSxZQUFvQixFQUFFLEVBQUU7O1FBQ2pFLElBQUksWUFBWSxLQUFLLEdBQUc7WUFBRSxPQUFPLEdBQUcsQ0FBQztRQUVyQyxNQUFNLFFBQVEsR0FBRyxNQUFBLFlBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FBRSxNQUFNLDBDQUFHLFlBQVksQ0FBQyxDQUFDO1FBRXRELElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTyxZQUFZLENBQUM7UUFFbkMsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksWUFBWSxDQUFDO0lBQ3ZDLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsMkJBQTJCLENBQUMsWUFBcUQ7SUFDL0YsTUFBTSxnQkFBZ0IsR0FBRyx3QkFBd0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUVoRSxPQUFPLENBQUMsYUFBdUIsRUFBRSxJQUFjLEVBQUUsWUFBb0IsRUFBRSxFQUFFO1FBQ3ZFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDNUQsT0FBTyxTQUFTLElBQUksWUFBWSxDQUFDO0lBQ25DLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsa0NBQWtDLENBQ2hELFlBQXFEO0lBRXJELE1BQU0sZ0JBQWdCLEdBQUcsd0JBQXdCLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFaEUsT0FBTyxDQUFDLGFBQXVCLEVBQUUsSUFBYyxFQUFFLFVBQThCLEVBQUUsRUFBRTtRQUNqRixNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxHQUFHLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwRSxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFlBQVksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDN0YsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsd0JBQXdCLENBQUMsWUFBcUQ7SUFDckYsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRS9DLE9BQU8sQ0FBQyxhQUF1QixFQUFFLElBQWMsRUFBRSxFQUFFO1FBQ2pELGFBQWEsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFN0YsTUFBTSxhQUFhLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQztRQUMzQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBRTdCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDdEMsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXRDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2pDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDcEIsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3BELElBQUksU0FBUztvQkFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsQ0FBQzthQUN4RDtTQUNGO1FBRUQsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFDM0UsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcGxpY2F0aW9uTG9jYWxpemF0aW9uQ29uZmlndXJhdGlvbkR0byB9IGZyb20gJy4uL3Byb3h5L3ZvbG8vYWJwL2FzcC1uZXQtY29yZS9tdmMvYXBwbGljYXRpb24tY29uZmlndXJhdGlvbnMvbW9kZWxzJztcblxuLy8gVGhpcyB3aWxsIG5vdCBiZSBuZWNlc3Nhcnkgd2hlbiBvbmx5IEFuZ3VrYXIgOS4xKyBpcyBzdXBwb3J0ZWRcbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2NhbGVEaXJlY3Rpb24obG9jYWxlOiBzdHJpbmcpOiAnbHRyJyB8ICdydGwnIHtcbiAgcmV0dXJuIC9eKGFyKC1bQS1aXXsyfSk/fGNrYigtSVIpP3xmYSgtQUYpP3xoZXxrc3xscmMoLUlRKT98bXpufHBhLUFyYWJ8cHMoLVBLKT98c2R8dWd8dXIoLUlOKT98dXotQXJhYnx5aSkkLy50ZXN0KFxuICAgIGxvY2FsZSxcbiAgKVxuICAgID8gJ3J0bCdcbiAgICA6ICdsdHInO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTG9jYWxpemVyKGxvY2FsaXphdGlvbjogQXBwbGljYXRpb25Mb2NhbGl6YXRpb25Db25maWd1cmF0aW9uRHRvKSB7XG4gIHJldHVybiAocmVzb3VyY2VOYW1lOiBzdHJpbmcsIGtleTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IHN0cmluZykgPT4ge1xuICAgIGlmIChyZXNvdXJjZU5hbWUgPT09ICdfJykgcmV0dXJuIGtleTtcblxuICAgIGNvbnN0IHJlc291cmNlID0gbG9jYWxpemF0aW9uPy52YWx1ZXM/LltyZXNvdXJjZU5hbWVdO1xuXG4gICAgaWYgKCFyZXNvdXJjZSkgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcblxuICAgIHJldHVybiByZXNvdXJjZVtrZXldIHx8IGRlZmF1bHRWYWx1ZTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxvY2FsaXplcldpdGhGYWxsYmFjayhsb2NhbGl6YXRpb246IEFwcGxpY2F0aW9uTG9jYWxpemF0aW9uQ29uZmlndXJhdGlvbkR0bykge1xuICBjb25zdCBmaW5kTG9jYWxpemF0aW9uID0gY3JlYXRlTG9jYWxpemF0aW9uRmluZGVyKGxvY2FsaXphdGlvbik7XG5cbiAgcmV0dXJuIChyZXNvdXJjZU5hbWVzOiBzdHJpbmdbXSwga2V5czogc3RyaW5nW10sIGRlZmF1bHRWYWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgeyBsb2NhbGl6ZWQgfSA9IGZpbmRMb2NhbGl6YXRpb24ocmVzb3VyY2VOYW1lcywga2V5cyk7XG4gICAgcmV0dXJuIGxvY2FsaXplZCB8fCBkZWZhdWx0VmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMb2NhbGl6YXRpb25QaXBlS2V5R2VuZXJhdG9yKFxuICBsb2NhbGl6YXRpb246IEFwcGxpY2F0aW9uTG9jYWxpemF0aW9uQ29uZmlndXJhdGlvbkR0byxcbikge1xuICBjb25zdCBmaW5kTG9jYWxpemF0aW9uID0gY3JlYXRlTG9jYWxpemF0aW9uRmluZGVyKGxvY2FsaXphdGlvbik7XG5cbiAgcmV0dXJuIChyZXNvdXJjZU5hbWVzOiBzdHJpbmdbXSwga2V5czogc3RyaW5nW10sIGRlZmF1bHRLZXk6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4ge1xuICAgIGNvbnN0IHsgcmVzb3VyY2VOYW1lLCBrZXkgfSA9IGZpbmRMb2NhbGl6YXRpb24ocmVzb3VyY2VOYW1lcywga2V5cyk7XG4gICAgcmV0dXJuICFyZXNvdXJjZU5hbWUgPyBkZWZhdWx0S2V5IDogcmVzb3VyY2VOYW1lID09PSAnXycgPyBrZXkgOiBgJHtyZXNvdXJjZU5hbWV9Ojoke2tleX1gO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVMb2NhbGl6YXRpb25GaW5kZXIobG9jYWxpemF0aW9uOiBBcHBsaWNhdGlvbkxvY2FsaXphdGlvbkNvbmZpZ3VyYXRpb25EdG8pIHtcbiAgY29uc3QgbG9jYWxpemUgPSBjcmVhdGVMb2NhbGl6ZXIobG9jYWxpemF0aW9uKTtcblxuICByZXR1cm4gKHJlc291cmNlTmFtZXM6IHN0cmluZ1tdLCBrZXlzOiBzdHJpbmdbXSkgPT4ge1xuICAgIHJlc291cmNlTmFtZXMgPSByZXNvdXJjZU5hbWVzLmNvbmNhdChsb2NhbGl6YXRpb24uZGVmYXVsdFJlc291cmNlTmFtZSB8fCAnJykuZmlsdGVyKEJvb2xlYW4pO1xuXG4gICAgY29uc3QgcmVzb3VyY2VDb3VudCA9IHJlc291cmNlTmFtZXMubGVuZ3RoO1xuICAgIGNvbnN0IGtleUNvdW50ID0ga2V5cy5sZW5ndGg7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc291cmNlQ291bnQ7IGkrKykge1xuICAgICAgY29uc3QgcmVzb3VyY2VOYW1lID0gcmVzb3VyY2VOYW1lc1tpXTtcblxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBrZXlDb3VudDsgaisrKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGtleXNbal07XG4gICAgICAgIGNvbnN0IGxvY2FsaXplZCA9IGxvY2FsaXplKHJlc291cmNlTmFtZSwga2V5LCBudWxsKTtcbiAgICAgICAgaWYgKGxvY2FsaXplZCkgcmV0dXJuIHsgcmVzb3VyY2VOYW1lLCBrZXksIGxvY2FsaXplZCB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IHJlc291cmNlTmFtZTogdW5kZWZpbmVkLCBrZXk6IHVuZGVmaW5lZCwgbG9jYWxpemVkOiB1bmRlZmluZWQgfTtcbiAgfTtcbn1cbiJdfQ==
@@ -1,83 +1,83 @@
1
- import { __awaiter } from "tslib";
2
- import clone from 'just-clone';
3
- import { tap } from 'rxjs/operators';
4
- import { EnvironmentService } from '../services/environment.service';
5
- import { MultiTenancyService } from '../services/multi-tenancy.service';
6
- import { createTokenParser } from './string-utils';
7
- const tenancyPlaceholder = '{0}';
8
- function getCurrentTenancyName(appBaseUrl) {
9
- var _a;
10
- if (appBaseUrl.charAt(appBaseUrl.length - 1) !== '/')
11
- appBaseUrl += '/';
12
- const parseTokens = createTokenParser(appBaseUrl);
13
- const token = tenancyPlaceholder.replace(/[}{]/g, '');
14
- return (_a = parseTokens(window.location.href)[token]) === null || _a === void 0 ? void 0 : _a[0];
15
- }
16
- function getCurrentTenancyNameFromUrl(tenantKey) {
17
- const urlParams = new URLSearchParams(window.location.search);
18
- return urlParams.get(tenantKey);
19
- }
20
- export function parseTenantFromUrl(injector) {
21
- var _a, _b;
22
- return __awaiter(this, void 0, void 0, function* () {
23
- const environmentService = injector.get(EnvironmentService);
24
- const multiTenancyService = injector.get(MultiTenancyService);
25
- const baseUrl = ((_b = (_a = environmentService.getEnvironment()) === null || _a === void 0 ? void 0 : _a.application) === null || _b === void 0 ? void 0 : _b.baseUrl) || '';
26
- const tenancyName = getCurrentTenancyName(baseUrl);
27
- const hideTenantBox = () => {
28
- multiTenancyService.isTenantBoxVisible = false;
29
- };
30
- const setDomainTenant = (tenant) => {
31
- multiTenancyService.domainTenant = {
32
- id: tenant.tenantId,
33
- name: tenant.name,
34
- isAvailable: true,
35
- };
36
- };
37
- const setEnvironmentWithDomainTenant = (tenant) => {
38
- hideTenantBox();
39
- setDomainTenant(tenant);
40
- };
41
- if (tenancyName) {
42
- /**
43
- * We have to replace tenant name within the urls from environment,
44
- * because the code below will make a http request to find information about the domain tenant.
45
- * Before this request takes place, we need to replace placeholders aka "{0}".
46
- */
47
- replaceTenantNameWithinEnvironment(injector, tenancyName);
48
- return multiTenancyService
49
- .setTenantByName(tenancyName)
50
- .pipe(tap(setEnvironmentWithDomainTenant))
51
- .toPromise();
52
- }
53
- else {
54
- /**
55
- * If there is no tenant, we still have to clean up {0}. from baseUrl to avoid incorrect http requests.
56
- */
57
- replaceTenantNameWithinEnvironment(injector, '', tenancyPlaceholder + '.');
58
- const tenantIdFromQueryParams = getCurrentTenancyNameFromUrl(multiTenancyService.tenantKey);
59
- if (tenantIdFromQueryParams) {
60
- return multiTenancyService.setTenantById(tenantIdFromQueryParams).toPromise();
61
- }
62
- }
63
- return Promise.resolve();
64
- });
65
- }
66
- function replaceTenantNameWithinEnvironment(injector, tenancyName, placeholder = tenancyPlaceholder) {
67
- const environmentService = injector.get(EnvironmentService);
68
- const environment = clone(environmentService.getEnvironment());
69
- if (environment.application.baseUrl) {
70
- environment.application.baseUrl = environment.application.baseUrl.replace(placeholder, tenancyName);
71
- }
72
- if (environment.oAuthConfig.redirectUri) {
73
- environment.oAuthConfig.redirectUri = environment.oAuthConfig.redirectUri.replace(placeholder, tenancyName);
74
- }
75
- environment.oAuthConfig.issuer = environment.oAuthConfig.issuer.replace(placeholder, tenancyName);
76
- Object.keys(environment.apis).forEach(api => {
77
- Object.keys(environment.apis[api]).forEach(key => {
78
- environment.apis[api][key] = environment.apis[api][key].replace(placeholder, tenancyName);
79
- });
80
- });
81
- return environmentService.setState(environment);
82
- }
1
+ import { __awaiter } from "tslib";
2
+ import clone from 'just-clone';
3
+ import { tap } from 'rxjs/operators';
4
+ import { EnvironmentService } from '../services/environment.service';
5
+ import { MultiTenancyService } from '../services/multi-tenancy.service';
6
+ import { createTokenParser } from './string-utils';
7
+ const tenancyPlaceholder = '{0}';
8
+ function getCurrentTenancyName(appBaseUrl) {
9
+ var _a;
10
+ if (appBaseUrl.charAt(appBaseUrl.length - 1) !== '/')
11
+ appBaseUrl += '/';
12
+ const parseTokens = createTokenParser(appBaseUrl);
13
+ const token = tenancyPlaceholder.replace(/[}{]/g, '');
14
+ return (_a = parseTokens(window.location.href)[token]) === null || _a === void 0 ? void 0 : _a[0];
15
+ }
16
+ function getCurrentTenancyNameFromUrl(tenantKey) {
17
+ const urlParams = new URLSearchParams(window.location.search);
18
+ return urlParams.get(tenantKey);
19
+ }
20
+ export function parseTenantFromUrl(injector) {
21
+ var _a, _b;
22
+ return __awaiter(this, void 0, void 0, function* () {
23
+ const environmentService = injector.get(EnvironmentService);
24
+ const multiTenancyService = injector.get(MultiTenancyService);
25
+ const baseUrl = ((_b = (_a = environmentService.getEnvironment()) === null || _a === void 0 ? void 0 : _a.application) === null || _b === void 0 ? void 0 : _b.baseUrl) || '';
26
+ const tenancyName = getCurrentTenancyName(baseUrl);
27
+ const hideTenantBox = () => {
28
+ multiTenancyService.isTenantBoxVisible = false;
29
+ };
30
+ const setDomainTenant = (tenant) => {
31
+ multiTenancyService.domainTenant = {
32
+ id: tenant.tenantId,
33
+ name: tenant.name,
34
+ isAvailable: true,
35
+ };
36
+ };
37
+ const setEnvironmentWithDomainTenant = (tenant) => {
38
+ hideTenantBox();
39
+ setDomainTenant(tenant);
40
+ };
41
+ if (tenancyName) {
42
+ /**
43
+ * We have to replace tenant name within the urls from environment,
44
+ * because the code below will make a http request to find information about the domain tenant.
45
+ * Before this request takes place, we need to replace placeholders aka "{0}".
46
+ */
47
+ replaceTenantNameWithinEnvironment(injector, tenancyName);
48
+ return multiTenancyService
49
+ .setTenantByName(tenancyName)
50
+ .pipe(tap(setEnvironmentWithDomainTenant))
51
+ .toPromise();
52
+ }
53
+ else {
54
+ /**
55
+ * If there is no tenant, we still have to clean up {0}. from baseUrl to avoid incorrect http requests.
56
+ */
57
+ replaceTenantNameWithinEnvironment(injector, '', tenancyPlaceholder + '.');
58
+ const tenantIdFromQueryParams = getCurrentTenancyNameFromUrl(multiTenancyService.tenantKey);
59
+ if (tenantIdFromQueryParams) {
60
+ return multiTenancyService.setTenantById(tenantIdFromQueryParams).toPromise();
61
+ }
62
+ }
63
+ return Promise.resolve();
64
+ });
65
+ }
66
+ function replaceTenantNameWithinEnvironment(injector, tenancyName, placeholder = tenancyPlaceholder) {
67
+ const environmentService = injector.get(EnvironmentService);
68
+ const environment = clone(environmentService.getEnvironment());
69
+ if (environment.application.baseUrl) {
70
+ environment.application.baseUrl = environment.application.baseUrl.replace(placeholder, tenancyName);
71
+ }
72
+ if (environment.oAuthConfig.redirectUri) {
73
+ environment.oAuthConfig.redirectUri = environment.oAuthConfig.redirectUri.replace(placeholder, tenancyName);
74
+ }
75
+ environment.oAuthConfig.issuer = environment.oAuthConfig.issuer.replace(placeholder, tenancyName);
76
+ Object.keys(environment.apis).forEach(api => {
77
+ Object.keys(environment.apis[api]).forEach(key => {
78
+ environment.apis[api][key] = environment.apis[api][key].replace(placeholder, tenancyName);
79
+ });
80
+ });
81
+ return environmentService.setState(environment);
82
+ }
83
83
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktdGVuYW5jeS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL2xpYi91dGlscy9tdWx0aS10ZW5hbmN5LXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEtBQUssTUFBTSxZQUFZLENBQUM7QUFFL0IsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSXJDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5ELE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxDQUFDO0FBRWpDLFNBQVMscUJBQXFCLENBQUMsVUFBa0I7O0lBQy9DLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUc7UUFBRSxVQUFVLElBQUksR0FBRyxDQUFDO0lBRXhFLE1BQU0sV0FBVyxHQUFHLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sS0FBSyxHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdEQsT0FBTyxNQUFBLFdBQVcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQywwQ0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBRUQsU0FBUyw0QkFBNEIsQ0FBQyxTQUFpQjtJQUNyRCxNQUFNLFNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlELE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNsQyxDQUFDO0FBRUQsTUFBTSxVQUFnQixrQkFBa0IsQ0FBQyxRQUFrQjs7O1FBQ3pELE1BQU0sa0JBQWtCLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzVELE1BQU0sbUJBQW1CLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBRTlELE1BQU0sT0FBTyxHQUFHLENBQUEsTUFBQSxNQUFBLGtCQUFrQixDQUFDLGNBQWMsRUFBRSwwQ0FBRSxXQUFXLDBDQUFFLE9BQU8sS0FBSSxFQUFFLENBQUM7UUFDaEYsTUFBTSxXQUFXLEdBQUcscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbkQsTUFBTSxhQUFhLEdBQUcsR0FBRyxFQUFFO1lBQ3pCLG1CQUFtQixDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztRQUNqRCxDQUFDLENBQUM7UUFFRixNQUFNLGVBQWUsR0FBRyxDQUFDLE1BQTJCLEVBQUUsRUFBRTtZQUN0RCxtQkFBbUIsQ0FBQyxZQUFZLEdBQUc7Z0JBQ2pDLEVBQUUsRUFBRSxNQUFNLENBQUMsUUFBUTtnQkFDbkIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO2dCQUNqQixXQUFXLEVBQUUsSUFBSTthQUNsQixDQUFDO1FBQ0osQ0FBQyxDQUFDO1FBRUYsTUFBTSw4QkFBOEIsR0FBRyxDQUFDLE1BQTJCLEVBQUUsRUFBRTtZQUNyRSxhQUFhLEVBQUUsQ0FBQztZQUNoQixlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUIsQ0FBQyxDQUFDO1FBRUYsSUFBSSxXQUFXLEVBQUU7WUFDZjs7OztlQUlHO1lBQ0gsa0NBQWtDLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzFELE9BQU8sbUJBQW1CO2lCQUN2QixlQUFlLENBQUMsV0FBVyxDQUFDO2lCQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLDhCQUE4QixDQUFDLENBQUM7aUJBQ3pDLFNBQVMsRUFBRSxDQUFDO1NBQ2hCO2FBQU07WUFDTDs7ZUFFRztZQUNILGtDQUFrQyxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsa0JBQWtCLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFFM0UsTUFBTSx1QkFBdUIsR0FBRyw0QkFBNEIsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM1RixJQUFJLHVCQUF1QixFQUFFO2dCQUMzQixPQUFPLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO2FBQy9FO1NBQ0Y7UUFFRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQzs7Q0FDMUI7QUFFRCxTQUFTLGtDQUFrQyxDQUN6QyxRQUFrQixFQUNsQixXQUFtQixFQUNuQixXQUFXLEdBQUcsa0JBQWtCO0lBRWhDLE1BQU0sa0JBQWtCLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBRTVELE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLEVBQUUsQ0FBZ0IsQ0FBQztJQUU5RSxJQUFJLFdBQVcsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFO1FBQ25DLFdBQVcsQ0FBQyxXQUFXLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FDdkUsV0FBVyxFQUNYLFdBQVcsQ0FDWixDQUFDO0tBQ0g7SUFFRCxJQUFJLFdBQVcsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFO1FBQ3ZDLFdBQVcsQ0FBQyxXQUFXLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FDL0UsV0FBVyxFQUNYLFdBQVcsQ0FDWixDQUFDO0tBQ0g7SUFFRCxXQUFXLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBRWxHLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUMxQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDL0MsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDNUYsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sa0JBQWtCLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2xELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IGNsb25lIGZyb20gJ2p1c3QtY2xvbmUnO1xuXG5pbXBvcnQgeyB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCB9IGZyb20gJy4uL21vZGVscy9lbnZpcm9ubWVudCc7XG5cbmltcG9ydCB7IEZpbmRUZW5hbnRSZXN1bHREdG8gfSBmcm9tICcuLi9wcm94eS92b2xvL2FicC9hc3AtbmV0LWNvcmUvbXZjL211bHRpLXRlbmFuY3kvbW9kZWxzJztcbmltcG9ydCB7IEVudmlyb25tZW50U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2Vudmlyb25tZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgTXVsdGlUZW5hbmN5U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL211bHRpLXRlbmFuY3kuc2VydmljZSc7XG5pbXBvcnQgeyBjcmVhdGVUb2tlblBhcnNlciB9IGZyb20gJy4vc3RyaW5nLXV0aWxzJztcblxuY29uc3QgdGVuYW5jeVBsYWNlaG9sZGVyID0gJ3swfSc7XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRUZW5hbmN5TmFtZShhcHBCYXNlVXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoYXBwQmFzZVVybC5jaGFyQXQoYXBwQmFzZVVybC5sZW5ndGggLSAxKSAhPT0gJy8nKSBhcHBCYXNlVXJsICs9ICcvJztcblxuICBjb25zdCBwYXJzZVRva2VucyA9IGNyZWF0ZVRva2VuUGFyc2VyKGFwcEJhc2VVcmwpO1xuICBjb25zdCB0b2tlbiA9IHRlbmFuY3lQbGFjZWhvbGRlci5yZXBsYWNlKC9bfXtdL2csICcnKTtcbiAgcmV0dXJuIHBhcnNlVG9rZW5zKHdpbmRvdy5sb2NhdGlvbi5ocmVmKVt0b2tlbl0/LlswXTtcbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudFRlbmFuY3lOYW1lRnJvbVVybCh0ZW5hbnRLZXk6IHN0cmluZykge1xuICBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuICByZXR1cm4gdXJsUGFyYW1zLmdldCh0ZW5hbnRLZXkpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGFyc2VUZW5hbnRGcm9tVXJsKGluamVjdG9yOiBJbmplY3Rvcikge1xuICBjb25zdCBlbnZpcm9ubWVudFNlcnZpY2UgPSBpbmplY3Rvci5nZXQoRW52aXJvbm1lbnRTZXJ2aWNlKTtcbiAgY29uc3QgbXVsdGlUZW5hbmN5U2VydmljZSA9IGluamVjdG9yLmdldChNdWx0aVRlbmFuY3lTZXJ2aWNlKTtcblxuICBjb25zdCBiYXNlVXJsID0gZW52aXJvbm1lbnRTZXJ2aWNlLmdldEVudmlyb25tZW50KCk/LmFwcGxpY2F0aW9uPy5iYXNlVXJsIHx8ICcnO1xuICBjb25zdCB0ZW5hbmN5TmFtZSA9IGdldEN1cnJlbnRUZW5hbmN5TmFtZShiYXNlVXJsKTtcblxuICBjb25zdCBoaWRlVGVuYW50Qm94ID0gKCkgPT4ge1xuICAgIG11bHRpVGVuYW5jeVNlcnZpY2UuaXNUZW5hbnRCb3hWaXNpYmxlID0gZmFsc2U7XG4gIH07XG5cbiAgY29uc3Qgc2V0RG9tYWluVGVuYW50ID0gKHRlbmFudDogRmluZFRlbmFudFJlc3VsdER0bykgPT4ge1xuICAgIG11bHRpVGVuYW5jeVNlcnZpY2UuZG9tYWluVGVuYW50ID0ge1xuICAgICAgaWQ6IHRlbmFudC50ZW5hbnRJZCxcbiAgICAgIG5hbWU6IHRlbmFudC5uYW1lLFxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgfTtcbiAgfTtcblxuICBjb25zdCBzZXRFbnZpcm9ubWVudFdpdGhEb21haW5UZW5hbnQgPSAodGVuYW50OiBGaW5kVGVuYW50UmVzdWx0RHRvKSA9PiB7XG4gICAgaGlkZVRlbmFudEJveCgpO1xuICAgIHNldERvbWFpblRlbmFudCh0ZW5hbnQpO1xuICB9O1xuXG4gIGlmICh0ZW5hbmN5TmFtZSkge1xuICAgIC8qKlxuICAgICAqIFdlIGhhdmUgdG8gcmVwbGFjZSB0ZW5hbnQgbmFtZSB3aXRoaW4gdGhlIHVybHMgZnJvbSBlbnZpcm9ubWVudCxcbiAgICAgKiBiZWNhdXNlIHRoZSBjb2RlIGJlbG93IHdpbGwgbWFrZSBhIGh0dHAgcmVxdWVzdCB0byBmaW5kIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkb21haW4gdGVuYW50LlxuICAgICAqIEJlZm9yZSB0aGlzIHJlcXVlc3QgdGFrZXMgcGxhY2UsIHdlIG5lZWQgdG8gcmVwbGFjZSBwbGFjZWhvbGRlcnMgYWthIFwiezB9XCIuXG4gICAgICovXG4gICAgcmVwbGFjZVRlbmFudE5hbWVXaXRoaW5FbnZpcm9ubWVudChpbmplY3RvciwgdGVuYW5jeU5hbWUpO1xuICAgIHJldHVybiBtdWx0aVRlbmFuY3lTZXJ2aWNlXG4gICAgICAuc2V0VGVuYW50QnlOYW1lKHRlbmFuY3lOYW1lKVxuICAgICAgLnBpcGUodGFwKHNldEVudmlyb25tZW50V2l0aERvbWFpblRlbmFudCkpXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH0gZWxzZSB7XG4gICAgLyoqXG4gICAgICogSWYgdGhlcmUgaXMgbm8gdGVuYW50LCB3ZSBzdGlsbCBoYXZlIHRvIGNsZWFuIHVwIHswfS4gZnJvbSBiYXNlVXJsIHRvIGF2b2lkIGluY29ycmVjdCBodHRwIHJlcXVlc3RzLlxuICAgICAqL1xuICAgIHJlcGxhY2VUZW5hbnROYW1lV2l0aGluRW52aXJvbm1lbnQoaW5qZWN0b3IsICcnLCB0ZW5hbmN5UGxhY2Vob2xkZXIgKyAnLicpO1xuXG4gICAgY29uc3QgdGVuYW50SWRGcm9tUXVlcnlQYXJhbXMgPSBnZXRDdXJyZW50VGVuYW5jeU5hbWVGcm9tVXJsKG11bHRpVGVuYW5jeVNlcnZpY2UudGVuYW50S2V5KTtcbiAgICBpZiAodGVuYW50SWRGcm9tUXVlcnlQYXJhbXMpIHtcbiAgICAgIHJldHVybiBtdWx0aVRlbmFuY3lTZXJ2aWNlLnNldFRlbmFudEJ5SWQodGVuYW50SWRGcm9tUXVlcnlQYXJhbXMpLnRvUHJvbWlzZSgpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZVRlbmFudE5hbWVXaXRoaW5FbnZpcm9ubWVudChcbiAgaW5qZWN0b3I6IEluamVjdG9yLFxuICB0ZW5hbmN5TmFtZTogc3RyaW5nLFxuICBwbGFjZWhvbGRlciA9IHRlbmFuY3lQbGFjZWhvbGRlcixcbikge1xuICBjb25zdCBlbnZpcm9ubWVudFNlcnZpY2UgPSBpbmplY3Rvci5nZXQoRW52aXJvbm1lbnRTZXJ2aWNlKTtcblxuICBjb25zdCBlbnZpcm9ubWVudCA9IGNsb25lKGVudmlyb25tZW50U2VydmljZS5nZXRFbnZpcm9ubWVudCgpKSBhcyBFbnZpcm9ubWVudDtcblxuICBpZiAoZW52aXJvbm1lbnQuYXBwbGljYXRpb24uYmFzZVVybCkge1xuICAgIGVudmlyb25tZW50LmFwcGxpY2F0aW9uLmJhc2VVcmwgPSBlbnZpcm9ubWVudC5hcHBsaWNhdGlvbi5iYXNlVXJsLnJlcGxhY2UoXG4gICAgICBwbGFjZWhvbGRlcixcbiAgICAgIHRlbmFuY3lOYW1lLFxuICAgICk7XG4gIH1cblxuICBpZiAoZW52aXJvbm1lbnQub0F1dGhDb25maWcucmVkaXJlY3RVcmkpIHtcbiAgICBlbnZpcm9ubWVudC5vQXV0aENvbmZpZy5yZWRpcmVjdFVyaSA9IGVudmlyb25tZW50Lm9BdXRoQ29uZmlnLnJlZGlyZWN0VXJpLnJlcGxhY2UoXG4gICAgICBwbGFjZWhvbGRlcixcbiAgICAgIHRlbmFuY3lOYW1lLFxuICAgICk7XG4gIH1cblxuICBlbnZpcm9ubWVudC5vQXV0aENvbmZpZy5pc3N1ZXIgPSBlbnZpcm9ubWVudC5vQXV0aENvbmZpZy5pc3N1ZXIucmVwbGFjZShwbGFjZWhvbGRlciwgdGVuYW5jeU5hbWUpO1xuXG4gIE9iamVjdC5rZXlzKGVudmlyb25tZW50LmFwaXMpLmZvckVhY2goYXBpID0+IHtcbiAgICBPYmplY3Qua2V5cyhlbnZpcm9ubWVudC5hcGlzW2FwaV0pLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGVudmlyb25tZW50LmFwaXNbYXBpXVtrZXldID0gZW52aXJvbm1lbnQuYXBpc1thcGldW2tleV0ucmVwbGFjZShwbGFjZWhvbGRlciwgdGVuYW5jeU5hbWUpO1xuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gZW52aXJvbm1lbnRTZXJ2aWNlLnNldFN0YXRlKGVudmlyb25tZW50KTtcbn1cbiJdfQ==
@@ -1,4 +1,4 @@
1
- export function isNumber(value) {
2
- return value == Number(value);
3
- }
1
+ export function isNumber(value) {
2
+ return value == Number(value);
3
+ }
4
4
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvbGliL3V0aWxzL251bWJlci11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLFVBQVUsUUFBUSxDQUFDLEtBQXNCO0lBQzdDLE9BQU8sS0FBSyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGlzTnVtYmVyKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIHZhbHVlID09IE51bWJlcih2YWx1ZSk7XG59XG4iXX0=
@@ -1,37 +1,37 @@
1
- import { exists, isArray, isNode, isNullOrUndefined, isObject, isObjectAndNotArrayNotNode, } from './common-utils';
2
- export function deepMerge(target, source) {
3
- if (isObjectAndNotArrayNotNode(target) && isObjectAndNotArrayNotNode(source)) {
4
- return deepMergeRecursively(target, source);
5
- }
6
- else if (isNullOrUndefined(target) && isNullOrUndefined(source)) {
7
- return {};
8
- }
9
- else {
10
- return exists(source) ? source : target;
11
- }
12
- }
13
- function deepMergeRecursively(target, source) {
14
- const shouldNotRecurse = isNullOrUndefined(target) ||
15
- isNullOrUndefined(source) || // at least one not defined
16
- isArray(target) ||
17
- isArray(source) || // at least one array
18
- !isObject(target) ||
19
- !isObject(source) || // at least one not an object
20
- isNode(target) ||
21
- isNode(source); // at least one node
22
- /**
23
- * if we will not recurse any further,
24
- * we will prioritize source if it is a defined value.
25
- */
26
- if (shouldNotRecurse) {
27
- return exists(source) ? source : target;
28
- }
29
- const keysOfTarget = Object.keys(target);
30
- const keysOfSource = Object.keys(source);
31
- const uniqueKeys = new Set(keysOfTarget.concat(keysOfSource));
32
- return [...uniqueKeys].reduce((retVal, key) => {
33
- retVal[key] = deepMergeRecursively(target[key], source[key]);
34
- return retVal;
35
- }, {});
36
- }
1
+ import { exists, isArray, isNode, isNullOrUndefined, isObject, isObjectAndNotArrayNotNode, } from './common-utils';
2
+ export function deepMerge(target, source) {
3
+ if (isObjectAndNotArrayNotNode(target) && isObjectAndNotArrayNotNode(source)) {
4
+ return deepMergeRecursively(target, source);
5
+ }
6
+ else if (isNullOrUndefined(target) && isNullOrUndefined(source)) {
7
+ return {};
8
+ }
9
+ else {
10
+ return exists(source) ? source : target;
11
+ }
12
+ }
13
+ function deepMergeRecursively(target, source) {
14
+ const shouldNotRecurse = isNullOrUndefined(target) ||
15
+ isNullOrUndefined(source) || // at least one not defined
16
+ isArray(target) ||
17
+ isArray(source) || // at least one array
18
+ !isObject(target) ||
19
+ !isObject(source) || // at least one not an object
20
+ isNode(target) ||
21
+ isNode(source); // at least one node
22
+ /**
23
+ * if we will not recurse any further,
24
+ * we will prioritize source if it is a defined value.
25
+ */
26
+ if (shouldNotRecurse) {
27
+ return exists(source) ? source : target;
28
+ }
29
+ const keysOfTarget = Object.keys(target);
30
+ const keysOfSource = Object.keys(source);
31
+ const uniqueKeys = new Set(keysOfTarget.concat(keysOfSource));
32
+ return [...uniqueKeys].reduce((retVal, key) => {
33
+ retVal[key] = deepMergeRecursively(target[key], source[key]);
34
+ return retVal;
35
+ }, {});
36
+ }
37
37
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvbGliL3V0aWxzL29iamVjdC11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsTUFBTSxFQUNOLE9BQU8sRUFDUCxNQUFNLEVBQ04saUJBQWlCLEVBQ2pCLFFBQVEsRUFDUiwwQkFBMEIsR0FDM0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixNQUFNLFVBQVUsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNO0lBQ3RDLElBQUksMEJBQTBCLENBQUMsTUFBTSxDQUFDLElBQUksMEJBQTBCLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDNUUsT0FBTyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDN0M7U0FBTSxJQUFJLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ2pFLE9BQU8sRUFBRSxDQUFDO0tBQ1g7U0FBTTtRQUNMLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztLQUN6QztBQUNILENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxNQUFNO0lBQzFDLE1BQU0sZ0JBQWdCLEdBQ3BCLGlCQUFpQixDQUFDLE1BQU0sQ0FBQztRQUN6QixpQkFBaUIsQ0FBQyxNQUFNLENBQUMsSUFBSSwyQkFBMkI7UUFDeEQsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUNmLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxxQkFBcUI7UUFDeEMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQ2pCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLDZCQUE2QjtRQUNsRCxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ2QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsb0JBQW9CO0lBRXRDOzs7T0FHRztJQUNILElBQUksZ0JBQWdCLEVBQUU7UUFDcEIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0tBQ3pDO0lBRUQsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6QyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUM5RCxPQUFPLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDNUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM3RCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDVCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgZXhpc3RzLFxuICBpc0FycmF5LFxuICBpc05vZGUsXG4gIGlzTnVsbE9yVW5kZWZpbmVkLFxuICBpc09iamVjdCxcbiAgaXNPYmplY3RBbmROb3RBcnJheU5vdE5vZGUsXG59IGZyb20gJy4vY29tbW9uLXV0aWxzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGRlZXBNZXJnZSh0YXJnZXQsIHNvdXJjZSkge1xuICBpZiAoaXNPYmplY3RBbmROb3RBcnJheU5vdE5vZGUodGFyZ2V0KSAmJiBpc09iamVjdEFuZE5vdEFycmF5Tm90Tm9kZShzb3VyY2UpKSB7XG4gICAgcmV0dXJuIGRlZXBNZXJnZVJlY3Vyc2l2ZWx5KHRhcmdldCwgc291cmNlKTtcbiAgfSBlbHNlIGlmIChpc051bGxPclVuZGVmaW5lZCh0YXJnZXQpICYmIGlzTnVsbE9yVW5kZWZpbmVkKHNvdXJjZSkpIHtcbiAgICByZXR1cm4ge307XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGV4aXN0cyhzb3VyY2UpID8gc291cmNlIDogdGFyZ2V0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlZXBNZXJnZVJlY3Vyc2l2ZWx5KHRhcmdldCwgc291cmNlKSB7XG4gIGNvbnN0IHNob3VsZE5vdFJlY3Vyc2UgPVxuICAgIGlzTnVsbE9yVW5kZWZpbmVkKHRhcmdldCkgfHxcbiAgICBpc051bGxPclVuZGVmaW5lZChzb3VyY2UpIHx8IC8vIGF0IGxlYXN0IG9uZSBub3QgZGVmaW5lZFxuICAgIGlzQXJyYXkodGFyZ2V0KSB8fFxuICAgIGlzQXJyYXkoc291cmNlKSB8fCAvLyBhdCBsZWFzdCBvbmUgYXJyYXlcbiAgICAhaXNPYmplY3QodGFyZ2V0KSB8fFxuICAgICFpc09iamVjdChzb3VyY2UpIHx8IC8vIGF0IGxlYXN0IG9uZSBub3QgYW4gb2JqZWN0XG4gICAgaXNOb2RlKHRhcmdldCkgfHxcbiAgICBpc05vZGUoc291cmNlKTsgLy8gYXQgbGVhc3Qgb25lIG5vZGVcblxuICAvKipcbiAgICogaWYgd2Ugd2lsbCBub3QgcmVjdXJzZSBhbnkgZnVydGhlcixcbiAgICogd2Ugd2lsbCBwcmlvcml0aXplIHNvdXJjZSBpZiBpdCBpcyBhIGRlZmluZWQgdmFsdWUuXG4gICAqL1xuICBpZiAoc2hvdWxkTm90UmVjdXJzZSkge1xuICAgIHJldHVybiBleGlzdHMoc291cmNlKSA/IHNvdXJjZSA6IHRhcmdldDtcbiAgfVxuXG4gIGNvbnN0IGtleXNPZlRhcmdldCA9IE9iamVjdC5rZXlzKHRhcmdldCk7XG4gIGNvbnN0IGtleXNPZlNvdXJjZSA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gIGNvbnN0IHVuaXF1ZUtleXMgPSBuZXcgU2V0KGtleXNPZlRhcmdldC5jb25jYXQoa2V5c09mU291cmNlKSk7XG4gIHJldHVybiBbLi4udW5pcXVlS2V5c10ucmVkdWNlKChyZXRWYWwsIGtleSkgPT4ge1xuICAgIHJldFZhbFtrZXldID0gZGVlcE1lcmdlUmVjdXJzaXZlbHkodGFyZ2V0W2tleV0sIHNvdXJjZVtrZXldKTtcbiAgICByZXR1cm4gcmV0VmFsO1xuICB9LCB7fSk7XG59XG4iXX0=
@@ -1,27 +1,27 @@
1
- import { __awaiter } from "tslib";
2
- import { PRIMARY_OUTLET } from '@angular/router';
3
- import { noop } from './common-utils';
4
- export function findRoute(routesService, path) {
5
- const node = routesService.find(route => route.path === path);
6
- return node || path === '/'
7
- ? node
8
- : findRoute(routesService, path.split('/').slice(0, -1).join('/') || '/');
9
- }
10
- export function getRoutePath(router, url = router.url) {
11
- const emptyGroup = { segments: [] };
12
- const primaryGroup = router.parseUrl(url).root.children[PRIMARY_OUTLET];
13
- return '/' + (primaryGroup || emptyGroup).segments.map(({ path }) => path).join('/');
14
- }
15
- export function reloadRoute(router, ngZone) {
16
- const { shouldReuseRoute } = router.routeReuseStrategy;
17
- const setRouteReuse = (reuse) => {
18
- router.routeReuseStrategy.shouldReuseRoute = reuse;
19
- };
20
- setRouteReuse(() => false);
21
- router.navigated = false;
22
- ngZone.run(() => __awaiter(this, void 0, void 0, function* () {
23
- yield router.navigateByUrl(router.url).catch(noop);
24
- setRouteReuse(shouldReuseRoute);
25
- }));
26
- }
1
+ import { __awaiter } from "tslib";
2
+ import { PRIMARY_OUTLET } from '@angular/router';
3
+ import { noop } from './common-utils';
4
+ export function findRoute(routesService, path) {
5
+ const node = routesService.find(route => route.path === path);
6
+ return node || path === '/'
7
+ ? node
8
+ : findRoute(routesService, path.split('/').slice(0, -1).join('/') || '/');
9
+ }
10
+ export function getRoutePath(router, url = router.url) {
11
+ const emptyGroup = { segments: [] };
12
+ const primaryGroup = router.parseUrl(url).root.children[PRIMARY_OUTLET];
13
+ return '/' + (primaryGroup || emptyGroup).segments.map(({ path }) => path).join('/');
14
+ }
15
+ export function reloadRoute(router, ngZone) {
16
+ const { shouldReuseRoute } = router.routeReuseStrategy;
17
+ const setRouteReuse = (reuse) => {
18
+ router.routeReuseStrategy.shouldReuseRoute = reuse;
19
+ };
20
+ setRouteReuse(() => false);
21
+ router.navigated = false;
22
+ ngZone.run(() => __awaiter(this, void 0, void 0, function* () {
23
+ yield router.navigateByUrl(router.url).catch(noop);
24
+ setRouteReuse(shouldReuseRoute);
25
+ }));
26
+ }
27
27
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9saWIvdXRpbHMvcm91dGUtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sRUFBRSxjQUFjLEVBQTJCLE1BQU0saUJBQWlCLENBQUM7QUFHMUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3RDLE1BQU0sVUFBVSxTQUFTLENBQUMsYUFBNEIsRUFBRSxJQUFZO0lBQ2xFLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO0lBRTlELE9BQU8sSUFBSSxJQUFJLElBQUksS0FBSyxHQUFHO1FBQ3pCLENBQUMsQ0FBQyxJQUFJO1FBQ04sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzlFLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLE1BQWMsRUFBRSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUc7SUFDM0QsTUFBTSxVQUFVLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFxQixDQUFDO0lBQ3ZELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUV4RSxPQUFPLEdBQUcsR0FBRyxDQUFDLFlBQVksSUFBSSxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZGLENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFDLE1BQWMsRUFBRSxNQUFjO0lBQ3hELE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztJQUN2RCxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQThCLEVBQUUsRUFBRTtRQUN2RCxNQUFNLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0lBQ3JELENBQUMsQ0FBQztJQUVGLGFBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixNQUFNLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUV6QixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQVMsRUFBRTtRQUNwQixNQUFNLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuRCxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNsQyxDQUFDLENBQUEsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUFJJTUFSWV9PVVRMRVQsIFJvdXRlciwgVXJsU2VnbWVudEdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEFCUCB9IGZyb20gJy4uL21vZGVscy9jb21tb24nO1xuaW1wb3J0IHsgUm91dGVzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3JvdXRlcy5zZXJ2aWNlJztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuL2NvbW1vbi11dGlscyc7XG5pbXBvcnQgeyBUcmVlTm9kZSB9IGZyb20gJy4vdHJlZS11dGlscyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kUm91dGUocm91dGVzU2VydmljZTogUm91dGVzU2VydmljZSwgcGF0aDogc3RyaW5nKTogVHJlZU5vZGU8QUJQLlJvdXRlPiB7XG4gIGNvbnN0IG5vZGUgPSByb3V0ZXNTZXJ2aWNlLmZpbmQocm91dGUgPT4gcm91dGUucGF0aCA9PT0gcGF0aCk7XG5cbiAgcmV0dXJuIG5vZGUgfHwgcGF0aCA9PT0gJy8nXG4gICAgPyBub2RlXG4gICAgOiBmaW5kUm91dGUocm91dGVzU2VydmljZSwgcGF0aC5zcGxpdCgnLycpLnNsaWNlKDAsIC0xKS5qb2luKCcvJykgfHwgJy8nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJvdXRlUGF0aChyb3V0ZXI6IFJvdXRlciwgdXJsID0gcm91dGVyLnVybCkge1xuICBjb25zdCBlbXB0eUdyb3VwID0geyBzZWdtZW50czogW10gfSBhcyBVcmxTZWdtZW50R3JvdXA7XG4gIGNvbnN0IHByaW1hcnlHcm91cCA9IHJvdXRlci5wYXJzZVVybCh1cmwpLnJvb3QuY2hpbGRyZW5bUFJJTUFSWV9PVVRMRVRdO1xuXG4gIHJldHVybiAnLycgKyAocHJpbWFyeUdyb3VwIHx8IGVtcHR5R3JvdXApLnNlZ21lbnRzLm1hcCgoeyBwYXRoIH0pID0+IHBhdGgpLmpvaW4oJy8nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbG9hZFJvdXRlKHJvdXRlcjogUm91dGVyLCBuZ1pvbmU6IE5nWm9uZSkge1xuICBjb25zdCB7IHNob3VsZFJldXNlUm91dGUgfSA9IHJvdXRlci5yb3V0ZVJldXNlU3RyYXRlZ3k7XG4gIGNvbnN0IHNldFJvdXRlUmV1c2UgPSAocmV1c2U6IHR5cGVvZiBzaG91bGRSZXVzZVJvdXRlKSA9PiB7XG4gICAgcm91dGVyLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGRSZXVzZVJvdXRlID0gcmV1c2U7XG4gIH07XG5cbiAgc2V0Um91dGVSZXVzZSgoKSA9PiBmYWxzZSk7XG4gIHJvdXRlci5uYXZpZ2F0ZWQgPSBmYWxzZTtcblxuICBuZ1pvbmUucnVuKGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCByb3V0ZXIubmF2aWdhdGVCeVVybChyb3V0ZXIudXJsKS5jYXRjaChub29wKTtcbiAgICBzZXRSb3V0ZVJldXNlKHNob3VsZFJldXNlUm91dGUpO1xuICB9KTtcbn1cbiJdfQ==
@@ -1,21 +1,25 @@
1
- export function createTokenParser(format) {
2
- return (str) => {
3
- const tokens = [];
4
- const regex = format.replace(/\./g, '\\.').replace(/\{\s?([0-9a-zA-Z]+)\s?\}/g, (_, token) => {
5
- tokens.push(token);
6
- return '(.+)';
7
- });
8
- const matches = (str.match(regex) || []).slice(1);
9
- return matches.reduce((acc, v, i) => {
10
- const key = tokens[i];
11
- acc[key] = [...(acc[key] || []), v].filter(Boolean);
12
- return acc;
13
- }, {});
14
- };
15
- }
16
- export function interpolate(text, params) {
17
- return text
18
- .replace(/(['"]?\{\s*(\d+)\s*\}['"]?)/g, (_, match, digit) => { var _a; return (_a = params[digit]) !== null && _a !== void 0 ? _a : match; })
19
- .replace(/\s+/g, ' ');
20
- }
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvbGliL3V0aWxzL3N0cmluZy11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLFVBQVUsaUJBQWlCLENBQUMsTUFBYztJQUM5QyxPQUFPLENBQUMsR0FBVyxFQUFFLEVBQUU7UUFDckIsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO1FBQzVCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUMzRixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25CLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVsRCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2xDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNwRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFBRSxFQUE4QixDQUFDLENBQUM7SUFDckMsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsSUFBWSxFQUFFLE1BQWdCO0lBQ3hELE9BQU8sSUFBSTtTQUNSLE9BQU8sQ0FBQyw4QkFBOEIsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsV0FBQyxPQUFBLE1BQUEsTUFBTSxDQUFDLEtBQUssQ0FBQyxtQ0FBSSxLQUFLLENBQUEsRUFBQSxDQUFDO1NBQ3BGLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUb2tlblBhcnNlcihmb3JtYXQ6IHN0cmluZykge1xuICByZXR1cm4gKHN0cjogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgdG9rZW5zOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHJlZ2V4ID0gZm9ybWF0LnJlcGxhY2UoL1xcLi9nLCAnXFxcXC4nKS5yZXBsYWNlKC9cXHtcXHM/KFswLTlhLXpBLVpdKylcXHM/XFx9L2csIChfLCB0b2tlbikgPT4ge1xuICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgcmV0dXJuICcoLispJztcbiAgICB9KTtcblxuICAgIGNvbnN0IG1hdGNoZXMgPSAoc3RyLm1hdGNoKHJlZ2V4KSB8fCBbXSkuc2xpY2UoMSk7XG5cbiAgICByZXR1cm4gbWF0Y2hlcy5yZWR1Y2UoKGFjYywgdiwgaSkgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gdG9rZW5zW2ldO1xuICAgICAgYWNjW2tleV0gPSBbLi4uKGFjY1trZXldIHx8IFtdKSwgdl0uZmlsdGVyKEJvb2xlYW4pO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4pO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJwb2xhdGUodGV4dDogc3RyaW5nLCBwYXJhbXM6IHN0cmluZ1tdKSB7XG4gIHJldHVybiB0ZXh0XG4gICAgLnJlcGxhY2UoLyhbJ1wiXT9cXHtcXHMqKFxcZCspXFxzKlxcfVsnXCJdPykvZywgKF8sIG1hdGNoLCBkaWdpdCkgPT4gcGFyYW1zW2RpZ2l0XSA/PyBtYXRjaClcbiAgICAucmVwbGFjZSgvXFxzKy9nLCAnICcpO1xufVxuIl19
1
+ export function createTokenParser(format) {
2
+ return (str) => {
3
+ const tokens = [];
4
+ const regex = format.replace(/\./g, '\\.').replace(/\{\s?([0-9a-zA-Z]+)\s?\}/g, (_, token) => {
5
+ tokens.push(token);
6
+ return '(.+)';
7
+ });
8
+ const matches = (str.match(regex) || []).slice(1);
9
+ return matches.reduce((acc, v, i) => {
10
+ const key = tokens[i];
11
+ acc[key] = [...(acc[key] || []), v].filter(Boolean);
12
+ return acc;
13
+ }, {});
14
+ };
15
+ }
16
+ export function interpolate(text, params) {
17
+ return text
18
+ .replace(/(['"]?\{\s*(\d+)\s*\}['"]?)/g, (_, match, digit) => { var _a; return (_a = params[digit]) !== null && _a !== void 0 ? _a : match; })
19
+ .replace(/\s+/g, ' ');
20
+ }
21
+ export function escapeHtmlChars(value) {
22
+ return (value &&
23
+ value.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;'));
24
+ }
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvbGliL3V0aWxzL3N0cmluZy11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLFVBQVUsaUJBQWlCLENBQUMsTUFBYztJQUM5QyxPQUFPLENBQUMsR0FBVyxFQUFFLEVBQUU7UUFDckIsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO1FBQzVCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUMzRixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25CLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVsRCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2xDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNwRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFBRSxFQUE4QixDQUFDLENBQUM7SUFDckMsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsSUFBWSxFQUFFLE1BQWdCO0lBQ3hELE9BQU8sSUFBSTtTQUNSLE9BQU8sQ0FBQyw4QkFBOEIsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsV0FBQyxPQUFBLE1BQUEsTUFBTSxDQUFDLEtBQUssQ0FBQyxtQ0FBSSxLQUFLLENBQUEsRUFBQSxDQUFDO1NBQ3BGLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQUVELE1BQU0sVUFBVSxlQUFlLENBQUMsS0FBYTtJQUMzQyxPQUFPLENBQ0wsS0FBSztRQUNMLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUNqRyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUb2tlblBhcnNlcihmb3JtYXQ6IHN0cmluZykge1xuICByZXR1cm4gKHN0cjogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgdG9rZW5zOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHJlZ2V4ID0gZm9ybWF0LnJlcGxhY2UoL1xcLi9nLCAnXFxcXC4nKS5yZXBsYWNlKC9cXHtcXHM/KFswLTlhLXpBLVpdKylcXHM/XFx9L2csIChfLCB0b2tlbikgPT4ge1xuICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgcmV0dXJuICcoLispJztcbiAgICB9KTtcblxuICAgIGNvbnN0IG1hdGNoZXMgPSAoc3RyLm1hdGNoKHJlZ2V4KSB8fCBbXSkuc2xpY2UoMSk7XG5cbiAgICByZXR1cm4gbWF0Y2hlcy5yZWR1Y2UoKGFjYywgdiwgaSkgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gdG9rZW5zW2ldO1xuICAgICAgYWNjW2tleV0gPSBbLi4uKGFjY1trZXldIHx8IFtdKSwgdl0uZmlsdGVyKEJvb2xlYW4pO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4pO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJwb2xhdGUodGV4dDogc3RyaW5nLCBwYXJhbXM6IHN0cmluZ1tdKSB7XG4gIHJldHVybiB0ZXh0XG4gICAgLnJlcGxhY2UoLyhbJ1wiXT9cXHtcXHMqKFxcZCspXFxzKlxcfVsnXCJdPykvZywgKF8sIG1hdGNoLCBkaWdpdCkgPT4gcGFyYW1zW2RpZ2l0XSA/PyBtYXRjaClcbiAgICAucmVwbGFjZSgvXFxzKy9nLCAnICcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlSHRtbENoYXJzKHZhbHVlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIChcbiAgICB2YWx1ZSAmJlxuICAgIHZhbHVlLnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvPC9nLCAnJmx0OycpLnJlcGxhY2UoLz4vZywgJyZndDsnKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7JylcbiAgKTtcbn1cbiJdfQ==
@@ -1,54 +1,54 @@
1
- /* eslint-disable @typescript-eslint/ban-types */
2
- export class BaseTreeNode {
3
- constructor(props) {
4
- this.children = [];
5
- this.isLeaf = true;
6
- Object.assign(this, props);
7
- }
8
- static create(props) {
9
- return new BaseTreeNode(props);
10
- }
11
- }
12
- export function createTreeFromList(list, keySelector, parentKeySelector, valueMapper) {
13
- const map = createMapFromList(list, keySelector, valueMapper);
14
- const tree = [];
15
- list.forEach(row => {
16
- const id = keySelector(row);
17
- const parentId = parentKeySelector(row);
18
- const node = map.get(id);
19
- if (!node)
20
- return;
21
- if (parentId) {
22
- const parent = map.get(parentId);
23
- if (!parent)
24
- return;
25
- parent.children.push(node);
26
- parent.isLeaf = false;
27
- node.parent = parent;
28
- }
29
- else {
30
- tree.push(node);
31
- }
32
- });
33
- return tree;
34
- }
35
- export function createMapFromList(list, keySelector, valueMapper) {
36
- const map = new Map();
37
- list.forEach(row => map.set(keySelector(row), valueMapper(row)));
38
- return map;
39
- }
40
- export function createTreeNodeFilterCreator(key, mapperFn) {
41
- return (search) => {
42
- const regex = new RegExp('.*' + search + '.*', 'i');
43
- return function collectNodes(nodes, matches = []) {
44
- for (const node of nodes) {
45
- if (regex.test(mapperFn(node[key])))
46
- matches.push(node);
47
- if (node.children.length)
48
- collectNodes(node.children, matches);
49
- }
50
- return matches;
51
- };
52
- };
53
- }
1
+ /* eslint-disable @typescript-eslint/ban-types */
2
+ export class BaseTreeNode {
3
+ constructor(props) {
4
+ this.children = [];
5
+ this.isLeaf = true;
6
+ Object.assign(this, props);
7
+ }
8
+ static create(props) {
9
+ return new BaseTreeNode(props);
10
+ }
11
+ }
12
+ export function createTreeFromList(list, keySelector, parentKeySelector, valueMapper) {
13
+ const map = createMapFromList(list, keySelector, valueMapper);
14
+ const tree = [];
15
+ list.forEach(row => {
16
+ const id = keySelector(row);
17
+ const parentId = parentKeySelector(row);
18
+ const node = map.get(id);
19
+ if (!node)
20
+ return;
21
+ if (parentId) {
22
+ const parent = map.get(parentId);
23
+ if (!parent)
24
+ return;
25
+ parent.children.push(node);
26
+ parent.isLeaf = false;
27
+ node.parent = parent;
28
+ }
29
+ else {
30
+ tree.push(node);
31
+ }
32
+ });
33
+ return tree;
34
+ }
35
+ export function createMapFromList(list, keySelector, valueMapper) {
36
+ const map = new Map();
37
+ list.forEach(row => map.set(keySelector(row), valueMapper(row)));
38
+ return map;
39
+ }
40
+ export function createTreeNodeFilterCreator(key, mapperFn) {
41
+ return (search) => {
42
+ const regex = new RegExp('.*' + search + '.*', 'i');
43
+ return function collectNodes(nodes, matches = []) {
44
+ for (const node of nodes) {
45
+ if (regex.test(mapperFn(node[key])))
46
+ matches.push(node);
47
+ if (node.children.length)
48
+ collectNodes(node.children, matches);
49
+ }
50
+ return matches;
51
+ };
52
+ };
53
+ }
54
54
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL2xpYi91dGlscy90cmVlLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlEQUFpRDtBQUNqRCxNQUFNLE9BQU8sWUFBWTtJQUt2QixZQUFZLEtBQVE7UUFKcEIsYUFBUSxHQUFrQixFQUFFLENBQUM7UUFDN0IsV0FBTSxHQUFHLElBQUksQ0FBQztRQUlaLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxNQUFNLENBQUMsTUFBTSxDQUFtQixLQUFRO1FBQ3RDLE9BQU8sSUFBSSxZQUFZLENBQUksS0FBSyxDQUFnQixDQUFDO0lBQ25ELENBQUM7Q0FDRjtBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FDaEMsSUFBUyxFQUNULFdBQWlDLEVBQ2pDLGlCQUFxQyxFQUNyQyxXQUEyQjtJQUUzQixNQUFNLEdBQUcsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzlELE1BQU0sSUFBSSxHQUF1QyxFQUFFLENBQUM7SUFFcEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNqQixNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUIsTUFBTSxRQUFRLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV6QixJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU87UUFFbEIsSUFBSSxRQUFRLEVBQUU7WUFDWixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxNQUFNO2dCQUFFLE9BQU87WUFDbkIsTUFBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkMsTUFBYyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDOUIsSUFBWSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7U0FDL0I7YUFBTTtZQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDakI7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FDL0IsSUFBUyxFQUNULFdBQWlDLEVBQ2pDLFdBQTJCO0lBSTNCLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxFQUFjLENBQUM7SUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxVQUFVLDJCQUEyQixDQUN6QyxHQUFZLEVBQ1osUUFBZ0M7SUFFaEMsT0FBTyxDQUFDLE1BQWMsRUFBRSxFQUFFO1FBQ3hCLE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLEdBQUcsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRXBELE9BQU8sU0FBUyxZQUFZLENBQUMsS0FBb0IsRUFBRSxPQUFPLEdBQUcsRUFBRTtZQUM3RCxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRTtnQkFDeEIsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUV4RCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTTtvQkFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQzthQUNoRTtZQUVELE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsQ0FBQztJQUNKLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXR5cGVzICovXG5leHBvcnQgY2xhc3MgQmFzZVRyZWVOb2RlPFQgZXh0ZW5kcyBvYmplY3Q+IHtcbiAgY2hpbGRyZW46IFRyZWVOb2RlPFQ+W10gPSBbXTtcbiAgaXNMZWFmID0gdHJ1ZTtcbiAgcGFyZW50PzogVHJlZU5vZGU8VD47XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IFQpIHtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIHByb3BzKTtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGU8VCBleHRlbmRzIG9iamVjdD4ocHJvcHM6IFQpIHtcbiAgICByZXR1cm4gbmV3IEJhc2VUcmVlTm9kZTxUPihwcm9wcykgYXMgVHJlZU5vZGU8VD47XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRyZWVGcm9tTGlzdDxUIGV4dGVuZHMgb2JqZWN0LCBSIGV4dGVuZHMgdW5rbm93bj4oXG4gIGxpc3Q6IFRbXSxcbiAga2V5U2VsZWN0b3I6IChpdGVtOiBUKSA9PiBOb2RlS2V5LFxuICBwYXJlbnRLZXlTZWxlY3RvcjogdHlwZW9mIGtleVNlbGVjdG9yLFxuICB2YWx1ZU1hcHBlcjogKGl0ZW06IFQpID0+IFIsXG4pIHtcbiAgY29uc3QgbWFwID0gY3JlYXRlTWFwRnJvbUxpc3QobGlzdCwga2V5U2VsZWN0b3IsIHZhbHVlTWFwcGVyKTtcbiAgY29uc3QgdHJlZTogTm9kZVZhbHVlPFQsIHR5cGVvZiB2YWx1ZU1hcHBlcj5bXSA9IFtdO1xuXG4gIGxpc3QuZm9yRWFjaChyb3cgPT4ge1xuICAgIGNvbnN0IGlkID0ga2V5U2VsZWN0b3Iocm93KTtcbiAgICBjb25zdCBwYXJlbnRJZCA9IHBhcmVudEtleVNlbGVjdG9yKHJvdyk7XG4gICAgY29uc3Qgbm9kZSA9IG1hcC5nZXQoaWQpO1xuXG4gICAgaWYgKCFub2RlKSByZXR1cm47XG5cbiAgICBpZiAocGFyZW50SWQpIHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IG1hcC5nZXQocGFyZW50SWQpO1xuICAgICAgaWYgKCFwYXJlbnQpIHJldHVybjtcbiAgICAgIChwYXJlbnQgYXMgYW55KS5jaGlsZHJlbi5wdXNoKG5vZGUpO1xuICAgICAgKHBhcmVudCBhcyBhbnkpLmlzTGVhZiA9IGZhbHNlO1xuICAgICAgKG5vZGUgYXMgYW55KS5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyZWUucHVzaChub2RlKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB0cmVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTWFwRnJvbUxpc3Q8VCBleHRlbmRzIG9iamVjdCwgUiBleHRlbmRzIHVua25vd24+KFxuICBsaXN0OiBUW10sXG4gIGtleVNlbGVjdG9yOiAoaXRlbTogVCkgPT4gTm9kZUtleSxcbiAgdmFsdWVNYXBwZXI6IChpdGVtOiBUKSA9PiBSLFxuKSB7XG4gIHR5cGUgS2V5ID0gUmV0dXJuVHlwZTx0eXBlb2Yga2V5U2VsZWN0b3I+O1xuICB0eXBlIFZhbHVlID0gTm9kZVZhbHVlPFQsIHR5cGVvZiB2YWx1ZU1hcHBlcj47XG4gIGNvbnN0IG1hcCA9IG5ldyBNYXA8S2V5LCBWYWx1ZT4oKTtcbiAgbGlzdC5mb3JFYWNoKHJvdyA9PiBtYXAuc2V0KGtleVNlbGVjdG9yKHJvdyksIHZhbHVlTWFwcGVyKHJvdykpKTtcbiAgcmV0dXJuIG1hcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRyZWVOb2RlRmlsdGVyQ3JlYXRvcjxUIGV4dGVuZHMgb2JqZWN0PihcbiAga2V5OiBrZXlvZiBULFxuICBtYXBwZXJGbjogKHZhbHVlOiBhbnkpID0+IHN0cmluZyxcbikge1xuICByZXR1cm4gKHNlYXJjaDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKCcuKicgKyBzZWFyY2ggKyAnLionLCAnaScpO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNvbGxlY3ROb2Rlcyhub2RlczogVHJlZU5vZGU8VD5bXSwgbWF0Y2hlcyA9IFtdKSB7XG4gICAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICAgICAgaWYgKHJlZ2V4LnRlc3QobWFwcGVyRm4obm9kZVtrZXldKSkpIG1hdGNoZXMucHVzaChub2RlKTtcblxuICAgICAgICBpZiAobm9kZS5jaGlsZHJlbi5sZW5ndGgpIGNvbGxlY3ROb2Rlcyhub2RlLmNoaWxkcmVuLCBtYXRjaGVzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1hdGNoZXM7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgVHJlZU5vZGU8VCBleHRlbmRzIG9iamVjdD4gPSB7XG4gIFtLIGluIGtleW9mIFRdOiBUW0tdO1xufSAmIHtcbiAgY2hpbGRyZW46IFRyZWVOb2RlPFQ+W107XG4gIGlzTGVhZjogYm9vbGVhbjtcbiAgcGFyZW50PzogVHJlZU5vZGU8VD47XG59O1xuXG50eXBlIE5vZGVLZXkgPSBudW1iZXIgfCBzdHJpbmcgfCBzeW1ib2wgfCB1bmRlZmluZWQgfCBudWxsO1xuXG50eXBlIE5vZGVWYWx1ZTxUIGV4dGVuZHMgb2JqZWN0LCBGIGV4dGVuZHMgKC4uLmFyZ3M6IGFueSkgPT4gYW55PiA9IEYgZXh0ZW5kcyB1bmRlZmluZWRcbiAgPyBUcmVlTm9kZTxUPlxuICA6IFJldHVyblR5cGU8Rj47XG4iXX0=