@veloceapps/sdk 4.0.20 → 4.0.21-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 (268) hide show
  1. package/bundles/{veloce-sdk-cms.umd.js → veloceapps-sdk-cms.umd.js} +161 -76
  2. package/bundles/veloceapps-sdk-cms.umd.js.map +1 -0
  3. package/bundles/{veloce-sdk-core.umd.js → veloceapps-sdk-core.umd.js} +111 -44
  4. package/bundles/veloceapps-sdk-core.umd.js.map +1 -0
  5. package/bundles/{veloce-sdk-runtime.umd.js → veloceapps-sdk-runtime.umd.js} +213 -146
  6. package/bundles/veloceapps-sdk-runtime.umd.js.map +1 -0
  7. package/bundles/{veloce-sdk.umd.js → veloceapps-sdk.umd.js} +739 -225
  8. package/bundles/veloceapps-sdk.umd.js.map +1 -0
  9. package/cms/cms.actions.d.ts +5 -1
  10. package/cms/cms.default.d.ts +2 -2
  11. package/cms/components/element-renderer/element-renderer.component.d.ts +1 -1
  12. package/cms/components/preview/preview.component.d.ts +1 -1
  13. package/cms/components/preview/preview.module.d.ts +1 -1
  14. package/cms/injection-tokens.d.ts +1 -1
  15. package/cms/launcher.module.d.ts +3 -3
  16. package/cms/modules/federated/federated.module.d.ts +1 -1
  17. package/cms/package.json +7 -7
  18. package/cms/services/launcher.service.d.ts +1 -1
  19. package/cms/types/configuration.types.d.ts +1 -1
  20. package/cms/utils/element.utils.d.ts +1 -1
  21. package/cms/utils/elements-resolver.d.ts +1 -1
  22. package/{core/veloce-sdk-core.d.ts → cms/veloceapps-sdk-cms.d.ts} +1 -1
  23. package/cms/vendor-map.d.ts +81 -76
  24. package/core/modules/configuration/configuration.module.d.ts +1 -1
  25. package/core/modules/configuration/helpers.d.ts +1 -1
  26. package/core/modules/configuration/services/configuration-runtime.service.d.ts +3 -3
  27. package/core/modules/configuration/services/configuration.service.d.ts +2 -2
  28. package/core/modules/configuration/services/runtime-context.service.d.ts +1 -1
  29. package/core/modules/configuration/types/configuration-runtime.types.d.ts +1 -1
  30. package/core/modules/flow-configuration/services/flow-configuration.service.d.ts +2 -2
  31. package/core/modules/flow-configuration/services/flow-update.service.d.ts +1 -1
  32. package/core/package.json +7 -7
  33. package/core/services/context.service.d.ts +2 -2
  34. package/core/services/product-images.service.d.ts +1 -1
  35. package/core/services/quote-draft.service.d.ts +2 -2
  36. package/core/types/quote-states.types.d.ts +1 -1
  37. package/core/types/runtime.types.d.ts +1 -1
  38. package/core/utils/line-item.utils.d.ts +1 -1
  39. package/core/utils/line-item.worker.d.ts +1 -1
  40. package/{runtime/veloce-sdk-runtime.d.ts → core/veloceapps-sdk-core.d.ts} +1 -1
  41. package/esm2015/cms/cms.actions.js +9 -1
  42. package/esm2015/cms/cms.default.js +1 -1
  43. package/esm2015/cms/components/element-children/element-children.component.js +3 -3
  44. package/esm2015/cms/components/element-children/element-children.module.js +4 -4
  45. package/esm2015/cms/components/element-renderer/element-renderer.component.js +6 -6
  46. package/esm2015/cms/components/element-renderer/element-renderer.module.js +4 -4
  47. package/esm2015/cms/components/plugin.component.js +3 -3
  48. package/esm2015/cms/components/preview/preview.component.js +6 -6
  49. package/esm2015/cms/components/preview/preview.module.js +6 -6
  50. package/esm2015/cms/directives/custom-template.directive.js +3 -3
  51. package/esm2015/cms/injection-tokens.js +1 -1
  52. package/esm2015/cms/launcher.module.js +8 -8
  53. package/esm2015/cms/modules/federated/federated.component.js +4 -4
  54. package/esm2015/cms/modules/federated/federated.module.js +6 -6
  55. package/esm2015/cms/plugins/configuration.plugin.js +5 -5
  56. package/esm2015/cms/plugins/io.plugin.js +3 -3
  57. package/esm2015/cms/plugins/script.plugin.js +5 -5
  58. package/esm2015/cms/services/dynamic-module.service.js +3 -3
  59. package/esm2015/cms/services/element-context.service.js +3 -3
  60. package/esm2015/cms/services/integration.state.js +3 -3
  61. package/esm2015/cms/services/io-provider.service.js +3 -3
  62. package/esm2015/cms/services/launcher.service.js +4 -4
  63. package/esm2015/cms/services/templates.service.js +3 -3
  64. package/esm2015/cms/types/configuration.types.js +1 -1
  65. package/esm2015/cms/utils/element.utils.js +2 -2
  66. package/esm2015/cms/utils/elements-resolver.js +1 -1
  67. package/esm2015/cms/veloceapps-sdk-cms.js +5 -0
  68. package/esm2015/cms/vendor-map.js +9 -7
  69. package/esm2015/core/core.module.js +4 -4
  70. package/esm2015/core/modules/configuration/configuration.module.js +7 -7
  71. package/esm2015/core/modules/configuration/helpers.js +2 -2
  72. package/esm2015/core/modules/configuration/services/configuration-runtime.service.js +6 -6
  73. package/esm2015/core/modules/configuration/services/configuration.service.js +7 -7
  74. package/esm2015/core/modules/configuration/services/runtime-context.service.js +6 -6
  75. package/esm2015/core/modules/configuration/types/configuration-runtime.types.js +1 -1
  76. package/esm2015/core/modules/flow-configuration/flow-configuration.module.js +6 -6
  77. package/esm2015/core/modules/flow-configuration/services/flow-configuration.service.js +5 -5
  78. package/esm2015/core/modules/flow-configuration/services/flow-update.service.js +5 -5
  79. package/esm2015/core/services/context.service.js +6 -6
  80. package/esm2015/core/services/product-images.service.js +5 -5
  81. package/esm2015/core/services/quote-draft.service.js +6 -6
  82. package/esm2015/core/types/quote-states.types.js +1 -1
  83. package/esm2015/core/types/runtime.types.js +1 -1
  84. package/esm2015/core/utils/line-item.utils.js +2 -2
  85. package/esm2015/core/utils/line-item.worker.js +1 -1
  86. package/esm2015/core/veloceapps-sdk-core.js +5 -0
  87. package/esm2015/runtime/components/component-preview/component-preview.component.js +7 -7
  88. package/esm2015/runtime/components/section-renderer/section-renderer.component.js +4 -4
  89. package/esm2015/runtime/components/ui-runtime/runtime.component.js +8 -8
  90. package/esm2015/runtime/components/ui-runtime-preview/runtime-preview.component.js +8 -8
  91. package/esm2015/runtime/execution/components/children-placeholder/children-placeholder.component.js +8 -8
  92. package/esm2015/runtime/execution/components/context-provider/context-provider.component.js +5 -5
  93. package/esm2015/runtime/execution/components/execution-section-renderer/execution-section-renderer.component.js +4 -4
  94. package/esm2015/runtime/execution/components/federated/federated.component.js +4 -4
  95. package/esm2015/runtime/execution/components/velo-attribute/velo-attribute.component.js +3 -3
  96. package/esm2015/runtime/execution/components/velo-multiselect/velo-multiselect.component.js +3 -3
  97. package/esm2015/runtime/execution/components/velo-port-checkbox/velo-port-checkbox.component.js +4 -4
  98. package/esm2015/runtime/execution/components/velo-port-dropdown/velo-port-dropdown.component.js +6 -6
  99. package/esm2015/runtime/execution/components/velo-port-radio/velo-port-radio.component.js +4 -4
  100. package/esm2015/runtime/execution/components/velo-type/velo-type.component.js +5 -5
  101. package/esm2015/runtime/execution/directives/section-script.directive.js +6 -6
  102. package/esm2015/runtime/execution/directives/sf-query.directive.js +5 -5
  103. package/esm2015/runtime/execution/directives/velo-attribute.directive.js +5 -5
  104. package/esm2015/runtime/execution/directives/velo-port.directive.js +21 -21
  105. package/esm2015/runtime/execution/directives/vl-approval.directive.js +5 -5
  106. package/esm2015/runtime/execution/directives/vl-document-attachments.directive.js +5 -5
  107. package/esm2015/runtime/execution/directives/vl-document-templates.directive.js +5 -5
  108. package/esm2015/runtime/execution/directives/vl-quote.directive.js +6 -6
  109. package/esm2015/runtime/execution/directives/vl-ramp.directive.js +6 -6
  110. package/esm2015/runtime/execution/runtime-execution.module.js +10 -10
  111. package/esm2015/runtime/runtime.module.js +10 -10
  112. package/esm2015/runtime/services/cart.service.js +6 -6
  113. package/esm2015/runtime/services/collapsible-state.service.js +3 -3
  114. package/esm2015/runtime/services/configuration.service.js +9 -9
  115. package/esm2015/runtime/services/current-state.service.js +4 -4
  116. package/esm2015/runtime/services/form-scope.service.js +3 -3
  117. package/esm2015/runtime/services/product-model-cache.service.js +5 -5
  118. package/esm2015/runtime/services/runtime-context.service.js +8 -8
  119. package/esm2015/runtime/services/runtime-form.service.js +5 -5
  120. package/esm2015/runtime/services/runtime.service.js +6 -6
  121. package/esm2015/runtime/services/section-helper.service.js +5 -5
  122. package/esm2015/runtime/services/section-scope.service.js +4 -4
  123. package/esm2015/runtime/services/section-store.service.js +4 -4
  124. package/esm2015/runtime/services/section.service.js +9 -9
  125. package/esm2015/runtime/types/bound-data.types.js +1 -1
  126. package/esm2015/runtime/types/runtime.types.js +1 -1
  127. package/esm2015/runtime/types/script-registry.types.js +2 -2
  128. package/esm2015/runtime/utils/line-item.util.js +2 -2
  129. package/esm2015/runtime/utils/section.utils.js +2 -2
  130. package/esm2015/runtime/utils/sections-binder.helper.js +2 -2
  131. package/esm2015/runtime/veloceapps-sdk-runtime.js +5 -0
  132. package/esm2015/src/components/dialog/dialog.component.js +3 -3
  133. package/esm2015/src/components/dialog/dialog.module.js +4 -4
  134. package/esm2015/src/components/doc-gen/doc-gen.component.js +11 -11
  135. package/esm2015/src/components/doc-gen/doc-gen.module.js +6 -6
  136. package/esm2015/src/components/header/cart-overlay/cart-preview.component.js +6 -6
  137. package/esm2015/src/components/header/cart-overlay/cart-preview.module.js +6 -6
  138. package/esm2015/src/components/header/header.component.js +10 -10
  139. package/esm2015/src/components/header/header.module.js +6 -6
  140. package/esm2015/src/flow-routing.module.js +17 -5
  141. package/esm2015/src/flow.component.js +7 -7
  142. package/esm2015/src/flow.module.js +9 -9
  143. package/esm2015/src/guards/context.guard.js +19 -10
  144. package/esm2015/src/guards/product-unload.guard.js +5 -5
  145. package/esm2015/src/guards/root.guard.js +3 -3
  146. package/esm2015/src/pages/catalog/catalog.component.js +10 -10
  147. package/esm2015/src/pages/catalog/catalog.module.js +7 -7
  148. package/esm2015/src/pages/debug/debug.component.js +6 -6
  149. package/esm2015/src/pages/debug/debug.module.js +4 -4
  150. package/esm2015/src/pages/empty-account/empty-account.component.js +4 -4
  151. package/esm2015/src/pages/empty-account/empty-account.module.js +7 -7
  152. package/esm2015/src/pages/legacy-product/legacy-product.component.js +9 -9
  153. package/esm2015/src/pages/legacy-product/legacy-product.module.js +6 -6
  154. package/esm2015/src/pages/product/product.component.js +7 -7
  155. package/esm2015/src/pages/product/product.module.js +7 -7
  156. package/esm2015/src/pages/record-not-found/record-not-found.component.js +3 -3
  157. package/esm2015/src/pages/record-not-found/record-not-found.module.js +4 -4
  158. package/esm2015/src/pages/remote/remote.component.js +353 -0
  159. package/esm2015/src/pages/remote/remote.module.js +20 -0
  160. package/esm2015/src/pages/remote/remote.types.js +2 -0
  161. package/esm2015/src/pages/shopping-cart/shopping-cart.component.js +10 -10
  162. package/esm2015/src/pages/shopping-cart/shopping-cart.module.js +7 -7
  163. package/esm2015/src/resolvers/flow.resolver.js +8 -8
  164. package/esm2015/src/resolvers/quote.resolver.js +6 -6
  165. package/esm2015/src/services/doc-gen.service.js +6 -6
  166. package/esm2015/src/services/flow-dialog.service.js +5 -5
  167. package/esm2015/src/services/flow-router.service.js +5 -5
  168. package/esm2015/src/services/flow.service.js +7 -7
  169. package/esm2015/src/types/context-route.types.js +1 -1
  170. package/esm2015/src/types/flow-customization.types.js +1 -1
  171. package/esm2015/src/utils/flow.utils.js +10 -2
  172. package/esm2015/veloceapps-sdk.js +5 -0
  173. package/fesm2015/{veloce-sdk-cms.js → veloceapps-sdk-cms.js} +88 -76
  174. package/fesm2015/veloceapps-sdk-cms.js.map +1 -0
  175. package/fesm2015/{veloce-sdk-core.js → veloceapps-sdk-core.js} +41 -41
  176. package/fesm2015/veloceapps-sdk-core.js.map +1 -0
  177. package/fesm2015/{veloce-sdk-runtime.js → veloceapps-sdk-runtime.js} +148 -148
  178. package/fesm2015/veloceapps-sdk-runtime.js.map +1 -0
  179. package/fesm2015/{veloce-sdk.js → veloceapps-sdk.js} +553 -172
  180. package/fesm2015/veloceapps-sdk.js.map +1 -0
  181. package/package.json +13 -12
  182. package/runtime/components/component-preview/component-preview.component.d.ts +1 -1
  183. package/runtime/components/section-renderer/section-renderer.component.d.ts +1 -1
  184. package/runtime/components/ui-runtime/runtime.component.d.ts +2 -2
  185. package/runtime/components/ui-runtime-preview/runtime-preview.component.d.ts +3 -3
  186. package/runtime/execution/components/children-placeholder/children-placeholder.component.d.ts +1 -1
  187. package/runtime/execution/components/context-provider/context-provider.component.d.ts +1 -1
  188. package/runtime/execution/components/execution-section-renderer/execution-section-renderer.component.d.ts +1 -1
  189. package/runtime/execution/components/federated/federated.component.d.ts +1 -1
  190. package/runtime/execution/components/velo-port-checkbox/velo-port-checkbox.component.d.ts +1 -1
  191. package/runtime/execution/components/velo-port-dropdown/velo-port-dropdown.component.d.ts +1 -1
  192. package/runtime/execution/components/velo-port-radio/velo-port-radio.component.d.ts +1 -1
  193. package/runtime/execution/components/velo-type/velo-type.component.d.ts +1 -1
  194. package/runtime/execution/directives/section-script.directive.d.ts +1 -1
  195. package/runtime/execution/directives/sf-query.directive.d.ts +2 -2
  196. package/runtime/execution/directives/velo-attribute.directive.d.ts +1 -1
  197. package/runtime/execution/directives/velo-port.directive.d.ts +1 -1
  198. package/runtime/execution/directives/vl-approval.directive.d.ts +2 -2
  199. package/runtime/execution/directives/vl-document-attachments.directive.d.ts +2 -2
  200. package/runtime/execution/directives/vl-document-templates.directive.d.ts +2 -2
  201. package/runtime/execution/directives/vl-quote.directive.d.ts +2 -2
  202. package/runtime/execution/directives/vl-ramp.directive.d.ts +3 -3
  203. package/runtime/execution/runtime-execution.module.d.ts +5 -5
  204. package/runtime/package.json +7 -7
  205. package/runtime/runtime.module.d.ts +5 -5
  206. package/runtime/services/cart.service.d.ts +3 -3
  207. package/runtime/services/configuration.service.d.ts +3 -3
  208. package/runtime/services/current-state.service.d.ts +1 -1
  209. package/runtime/services/product-model-cache.service.d.ts +2 -2
  210. package/runtime/services/runtime-context.service.d.ts +2 -2
  211. package/runtime/services/runtime-form.service.d.ts +1 -1
  212. package/runtime/services/runtime.service.d.ts +2 -2
  213. package/runtime/services/section-helper.service.d.ts +1 -1
  214. package/runtime/services/section-scope.service.d.ts +1 -1
  215. package/runtime/services/section-store.service.d.ts +1 -1
  216. package/runtime/services/section.service.d.ts +1 -1
  217. package/runtime/types/bound-data.types.d.ts +1 -1
  218. package/runtime/types/runtime.types.d.ts +2 -2
  219. package/runtime/utils/line-item.util.d.ts +1 -1
  220. package/runtime/utils/section.utils.d.ts +1 -1
  221. package/runtime/utils/sections-binder.helper.d.ts +1 -1
  222. package/{veloce-sdk.d.ts → runtime/veloceapps-sdk-runtime.d.ts} +1 -1
  223. package/src/components/doc-gen/doc-gen.component.d.ts +3 -3
  224. package/src/components/doc-gen/doc-gen.module.d.ts +1 -1
  225. package/src/components/header/cart-overlay/cart-preview.component.d.ts +1 -1
  226. package/src/components/header/cart-overlay/cart-preview.module.d.ts +1 -1
  227. package/src/components/header/header.component.d.ts +4 -4
  228. package/src/components/header/header.module.d.ts +1 -1
  229. package/src/flow-routing.module.d.ts +3 -2
  230. package/src/flow.component.d.ts +2 -2
  231. package/src/flow.module.d.ts +4 -4
  232. package/src/guards/context.guard.d.ts +2 -1
  233. package/src/guards/product-unload.guard.d.ts +1 -1
  234. package/src/pages/catalog/catalog.component.d.ts +3 -3
  235. package/src/pages/catalog/catalog.module.d.ts +2 -2
  236. package/src/pages/debug/debug.component.d.ts +3 -3
  237. package/src/pages/empty-account/empty-account.module.d.ts +2 -2
  238. package/src/pages/legacy-product/legacy-product.component.d.ts +4 -4
  239. package/src/pages/legacy-product/legacy-product.module.d.ts +1 -1
  240. package/src/pages/product/product.component.d.ts +1 -1
  241. package/src/pages/product/product.module.d.ts +2 -2
  242. package/src/pages/remote/remote.component.d.ts +47 -0
  243. package/src/pages/remote/remote.module.d.ts +10 -0
  244. package/src/pages/remote/remote.types.d.ts +4 -0
  245. package/src/pages/shopping-cart/shopping-cart.component.d.ts +3 -3
  246. package/src/pages/shopping-cart/shopping-cart.module.d.ts +2 -2
  247. package/src/resolvers/flow.resolver.d.ts +2 -2
  248. package/src/resolvers/quote.resolver.d.ts +1 -1
  249. package/src/services/doc-gen.service.d.ts +1 -1
  250. package/src/services/flow-dialog.service.d.ts +1 -1
  251. package/src/services/flow-router.service.d.ts +1 -1
  252. package/src/services/flow.service.d.ts +2 -2
  253. package/src/types/context-route.types.d.ts +1 -1
  254. package/src/types/flow-customization.types.d.ts +2 -2
  255. package/src/utils/flow.utils.d.ts +7 -0
  256. package/{cms/veloce-sdk-cms.d.ts → veloceapps-sdk.d.ts} +1 -1
  257. package/bundles/veloce-sdk-cms.umd.js.map +0 -1
  258. package/bundles/veloce-sdk-core.umd.js.map +0 -1
  259. package/bundles/veloce-sdk-runtime.umd.js.map +0 -1
  260. package/bundles/veloce-sdk.umd.js.map +0 -1
  261. package/esm2015/cms/veloce-sdk-cms.js +0 -5
  262. package/esm2015/core/veloce-sdk-core.js +0 -5
  263. package/esm2015/runtime/veloce-sdk-runtime.js +0 -5
  264. package/esm2015/veloce-sdk.js +0 -5
  265. package/fesm2015/veloce-sdk-cms.js.map +0 -1
  266. package/fesm2015/veloce-sdk-core.js.map +0 -1
  267. package/fesm2015/veloce-sdk-runtime.js.map +0 -1
  268. package/fesm2015/veloce-sdk.js.map +0 -1
@@ -0,0 +1,353 @@
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { UUID, } from '@veloceapps/core';
3
+ import { FlowAction } from '@veloceapps/sdk/cms';
4
+ import { BehaviorSubject, catchError, first, of, Subject, switchMap, takeUntil, tap, throwError, } from 'rxjs';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@veloceapps/sdk/core";
7
+ import * as i2 from "@veloceapps/api";
8
+ import * as i3 from "primeng/api";
9
+ import * as i4 from "@veloceapps/sdk/cms";
10
+ import * as i5 from "@angular/common";
11
+ import * as i6 from "@veloceapps/components";
12
+ export class RemoteComponent {
13
+ constructor(contextService, quoteDraftService, quoteApiService, runtimeService, configurationService, messageService, integrationState, location) {
14
+ this.contextService = contextService;
15
+ this.quoteDraftService = quoteDraftService;
16
+ this.quoteApiService = quoteApiService;
17
+ this.runtimeService = runtimeService;
18
+ this.configurationService = configurationService;
19
+ this.messageService = messageService;
20
+ this.integrationState = integrationState;
21
+ this.location = location;
22
+ this.state$ = new BehaviorSubject({ loading: true, failure: false });
23
+ this.DYNAMIC_OPTION_PRODUCTS_KEY = 'Dynamic';
24
+ this.destroyed$ = new Subject();
25
+ this.rpcMessage = JSON.parse(window.RPC_MESSAGE);
26
+ this.rpcMessage.options.sort((a, b) => { var _a, _b; return ((_a = a.featureNumber) !== null && _a !== void 0 ? _a : 99999) - ((_b = b.featureNumber) !== null && _b !== void 0 ? _b : 99999); });
27
+ this.updateHasChildrenFlag(this.rpcMessage.product.configuredProductId);
28
+ // update context properties
29
+ if (this.rpcMessage.quote) {
30
+ const properties = {};
31
+ if (this.rpcMessage.quote.SBQQ__Opportunity2__c) {
32
+ properties.OpportunityId = this.rpcMessage.quote.SBQQ__Opportunity2__c;
33
+ }
34
+ Object.entries(this.rpcMessage.quote).forEach(([key, value]) => {
35
+ if (value !== undefined && !(value instanceof Object)) {
36
+ properties[key] = value;
37
+ }
38
+ });
39
+ this.contextService.update({ properties });
40
+ }
41
+ this.initSubscriptions();
42
+ this.initConfiguration();
43
+ }
44
+ ngOnDestroy() {
45
+ this.destroyed$.next();
46
+ this.destroyed$.complete();
47
+ }
48
+ initConfiguration() {
49
+ const productId = this.rpcMessage.product.configuredProductId;
50
+ const quote = this.quoteDraftService.quoteDraft;
51
+ if (!productId || !quote) {
52
+ return;
53
+ }
54
+ this.runtimeService
55
+ .init({ productId })
56
+ .pipe(first(), tap(context => {
57
+ var _a, _b, _c, _d, _e;
58
+ const pricingEnabled = ((_b = (_a = context === null || context === void 0 ? void 0 : context.uiDefinition) === null || _a === void 0 ? void 0 : _a.properties) === null || _b === void 0 ? void 0 : _b.pricingEnabled) ? 'true' : 'false';
59
+ const priceListId = (_d = (_c = context === null || context === void 0 ? void 0 : context.uiDefinition) === null || _c === void 0 ? void 0 : _c.properties) === null || _d === void 0 ? void 0 : _d.priceList;
60
+ const runtimeContextProperties = (_e = this.runtimeService.runtimeContext) === null || _e === void 0 ? void 0 : _e.properties;
61
+ if (runtimeContextProperties) {
62
+ runtimeContextProperties.PriceListId = priceListId;
63
+ runtimeContextProperties.PricingEnabled = pricingEnabled;
64
+ }
65
+ this.contextService.update({
66
+ properties: {
67
+ ModelId: context === null || context === void 0 ? void 0 : context.modelId,
68
+ RuntimeMode: 'TEST',
69
+ PricingEnabled: pricingEnabled,
70
+ PriceListId: priceListId,
71
+ },
72
+ });
73
+ this.uiDefinition = context === null || context === void 0 ? void 0 : context.uiDefinition;
74
+ this.configurationService.updateCurrentStates({
75
+ configurableRamp: this.createLineItem(),
76
+ currentState: quote.currentState,
77
+ });
78
+ }), this.throwIfNoUIDefinition(), switchMap(() => this.configurationService.configure()), tap(() => this.state$.next({ loading: false, failure: false })), catchError(error => {
79
+ var _a, _b;
80
+ if (!((_b = (_a = this.uiDefinition) === null || _a === void 0 ? void 0 : _a.properties) === null || _b === void 0 ? void 0 : _b.suppressToastMessages)) {
81
+ this.messageService.add({ severity: 'error', summary: error });
82
+ }
83
+ this.state$.next({ loading: false, failure: true });
84
+ return of();
85
+ }), takeUntil(this.destroyed$))
86
+ .subscribe();
87
+ }
88
+ throwIfNoUIDefinition() {
89
+ return (source$) => {
90
+ return source$.pipe(switchMap(() => {
91
+ if (!this.uiDefinition) {
92
+ return throwError(() => 'Product does not have Configuration UI');
93
+ }
94
+ return source$;
95
+ }));
96
+ };
97
+ }
98
+ initSubscriptions() {
99
+ this.integrationState
100
+ .listen$(FlowAction.REMOTE_CANCEL)
101
+ .pipe(tap(() => this.location.back()), takeUntil(this.destroyed$))
102
+ .subscribe();
103
+ this.integrationState
104
+ .listen$(FlowAction.REMOTE_APPLY)
105
+ .pipe(tap(() => this.saveRpcMessage()), takeUntil(this.destroyed$))
106
+ .subscribe();
107
+ }
108
+ createLineItem() {
109
+ var _a, _b;
110
+ const [quoteDraftLineItem] = (_b = (_a = this.quoteDraftService.quoteDraft) === null || _a === void 0 ? void 0 : _a.currentState) !== null && _b !== void 0 ? _b : [];
111
+ if (quoteDraftLineItem && (quoteDraftLineItem.attributes.length > 0 || quoteDraftLineItem.lineItems.length > 0)) {
112
+ return quoteDraftLineItem;
113
+ }
114
+ const lineItem = this.createRootLineItem();
115
+ const dynamicOptionProducts = this.rpcMessage.product.optionConfigurations[this.DYNAMIC_OPTION_PRODUCTS_KEY];
116
+ if (dynamicOptionProducts) {
117
+ const options = this.toParentChildMap(dynamicOptionProducts);
118
+ let items = [lineItem];
119
+ for (let i = 0; i < items.length; i++) {
120
+ const item = items[i];
121
+ const children = options.get(item.id);
122
+ if (children) {
123
+ item.lineItems = children;
124
+ items = items.concat(children);
125
+ }
126
+ }
127
+ }
128
+ return lineItem;
129
+ }
130
+ createRootLineItem() {
131
+ var _a, _b, _c, _d;
132
+ const product = this.rpcMessage.product;
133
+ const runtimeContext = this.runtimeService.runtimeContext;
134
+ const veloceInstanceId = product.configurationAttributes.VeloceInstanceId__c;
135
+ const quoteId = (_b = (_a = this.quoteDraftService.quoteDraft) === null || _a === void 0 ? void 0 : _a.currentState[0]) === null || _b === void 0 ? void 0 : _b.id;
136
+ return {
137
+ id: quoteId || veloceInstanceId || UUID.UUID(),
138
+ type: (_c = runtimeContext.productType) !== null && _c !== void 0 ? _c : '',
139
+ name: ((_d = runtimeContext.properties) === null || _d === void 0 ? void 0 : _d.displayName) || runtimeContext.productName,
140
+ productName: runtimeContext.productName,
141
+ productId: runtimeContext.productId,
142
+ cfgStatus: 'Default',
143
+ actionCode: 'ADD',
144
+ qty: 1,
145
+ };
146
+ }
147
+ toParentChildMap(remoteOptionProducts) {
148
+ var _a;
149
+ const result = new Map();
150
+ for (const option of remoteOptionProducts) {
151
+ const configurationData = (_a = option === null || option === void 0 ? void 0 : option.readOnly) === null || _a === void 0 ? void 0 : _a.line;
152
+ const id = configurationData === null || configurationData === void 0 ? void 0 : configurationData.VeloceInstanceId__c;
153
+ const parentId = configurationData === null || configurationData === void 0 ? void 0 : configurationData.VeloceParentInstanceId__c;
154
+ if (!option.selected || !configurationData || !id || !parentId) {
155
+ continue;
156
+ }
157
+ const productId = option.productId;
158
+ const lineItem = {
159
+ id,
160
+ productId,
161
+ parentId,
162
+ type: configurationData.ModelType__c,
163
+ port: configurationData.ModelPort__c,
164
+ cfgStatus: configurationData.ConfigurationStatus__c,
165
+ actionCode: configurationData.ActionCode__c,
166
+ qty: option.Quantity,
167
+ };
168
+ let siblings = result.get(productId);
169
+ if (!siblings) {
170
+ result.set(parentId, (siblings = []));
171
+ }
172
+ siblings.push(lineItem);
173
+ }
174
+ return result;
175
+ }
176
+ saveRpcMessage() {
177
+ var _a;
178
+ const quote = this.quoteDraftService.quoteDraft;
179
+ const lineItem = this.configurationService.getSnapshot();
180
+ if (!quote || !lineItem) {
181
+ return;
182
+ }
183
+ this.rpcMessage.VeloceReferenceId = quote.quoteId;
184
+ this.rpcMessage.product.configurationData.VeloceInstanceId__c = lineItem.id;
185
+ const childItems = this.flattenChildLineItems(lineItem);
186
+ const savingMode = window.SavingMode;
187
+ this.updateContentData(this.rpcMessage.product, lineItem);
188
+ this.rpcMessage.quote = this.mapAttributesTo('Quote', lineItem);
189
+ if (savingMode === 'ALL') {
190
+ const optionConfigurations = this.getOptionConfigurations(this.rpcMessage.product);
191
+ const rootProductOptions = this.rpcMessage.options.filter(po => po.configuredProductId === lineItem.productId);
192
+ childItems.forEach(lineItem => {
193
+ var _a, _b, _c;
194
+ const rootOption = rootProductOptions.find(po => po.optionalProductId === lineItem.productId);
195
+ if (rootOption) {
196
+ const featureOptions = (_a = optionConfigurations[rootOption.featureName]) !== null && _a !== void 0 ? _a : (optionConfigurations[rootOption.featureName] = []);
197
+ const originOption = !rootOption.hasChildren
198
+ ? optionConfigurations[rootOption.featureName].find(({ optionId }) => optionId === rootOption.optionId)
199
+ : undefined;
200
+ const option = originOption !== null && originOption !== void 0 ? originOption : {};
201
+ option.optionId = (_b = option.optionId) !== null && _b !== void 0 ? _b : rootOption.optionId;
202
+ this.updateContentData(option, lineItem);
203
+ option.index = (_c = option.index) !== null && _c !== void 0 ? _c : featureOptions.length;
204
+ option.selected = true;
205
+ if (!originOption) {
206
+ featureOptions.push(option);
207
+ }
208
+ if (lineItem.parentLineItem) {
209
+ const nestedProductOption = this.rpcMessage.options.find(po => {
210
+ var _a;
211
+ return po.configuredProductId === ((_a = lineItem.parentLineItem) === null || _a === void 0 ? void 0 : _a.productId) &&
212
+ po.optionalProductId === lineItem.productId;
213
+ });
214
+ if (nestedProductOption) {
215
+ option.configurationData = Object.assign(Object.assign({}, option.configurationData), { VeloceParentInstanceId__c: lineItem.parentLineItem.id, VeloceNestedOptionId__c: nestedProductOption.optionId, VeloceNestedFeatureId__c: nestedProductOption.featureId });
216
+ }
217
+ }
218
+ }
219
+ else {
220
+ this.rpcMessage.dynamicFeatures.forEach(feature => {
221
+ var _a, _b;
222
+ const featureOptions = (_a = optionConfigurations[feature.name]) !== null && _a !== void 0 ? _a : (optionConfigurations[feature.name] = []);
223
+ const originOption = featureOptions.find(({ productId }) => productId === lineItem.productId);
224
+ const option = originOption !== null && originOption !== void 0 ? originOption : {};
225
+ this.updateContentData(option, lineItem);
226
+ option.index = (_b = option.index) !== null && _b !== void 0 ? _b : featureOptions.length;
227
+ option.selected = true;
228
+ if (!originOption) {
229
+ featureOptions.push(option);
230
+ }
231
+ });
232
+ }
233
+ });
234
+ this.rpcMessage.product = Object.assign(Object.assign({}, this.rpcMessage.product), { optionConfigurations });
235
+ }
236
+ (_a = window.RPC_BROADCAST) === null || _a === void 0 ? void 0 : _a.apply(null, [this.rpcMessage]);
237
+ }
238
+ updateHasChildrenFlag(bundleProductId) {
239
+ const bundleOptionsByOptionId = {};
240
+ const notBundleOptions = [];
241
+ for (const productOption of this.rpcMessage.options) {
242
+ if (productOption.configuredProductId === bundleProductId) {
243
+ bundleOptionsByOptionId[productOption.optionalProductId] = productOption;
244
+ }
245
+ else {
246
+ notBundleOptions.push(productOption);
247
+ }
248
+ }
249
+ for (const option of notBundleOptions) {
250
+ if (bundleOptionsByOptionId[option.configuredProductId]) {
251
+ bundleOptionsByOptionId[option.configuredProductId].hasChildren = true;
252
+ }
253
+ }
254
+ }
255
+ flattenChildLineItems(lineItem) {
256
+ var _a;
257
+ let items = (_a = lineItem.lineItems) !== null && _a !== void 0 ? _a : [];
258
+ for (let i = 0; i < items.length; i++) {
259
+ const item = items[i];
260
+ if (item.lineItems) {
261
+ items = items.concat(item.lineItems.map(li => (Object.assign(Object.assign({}, li), { parentLineItem: item }))));
262
+ }
263
+ }
264
+ return items;
265
+ }
266
+ updateContentData(entity, lineItem) {
267
+ var _a, _b;
268
+ if (lineItem.productId) {
269
+ entity.productId = lineItem.productId;
270
+ }
271
+ const quantityAttribute = lineItem.properties.quantityAttribute;
272
+ entity.Quantity = quantityAttribute
273
+ ? (_b = (_a = lineItem.attributes.find(attribute => attribute.name === quantityAttribute)) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : 1
274
+ : lineItem.qty;
275
+ const totalPrice = this.computeNetPrice(lineItem);
276
+ const targetTotalPriceField = lineItem.properties.TargetTotalPriceField || 'TotalPrice__c';
277
+ entity.configurationData[targetTotalPriceField] = entity.configurationData[targetTotalPriceField]
278
+ ? entity.configurationData[targetTotalPriceField] + totalPrice
279
+ : totalPrice;
280
+ const targetPriceField = lineItem.properties.TargetPriceField || 'SBQQ__ListPrice__c';
281
+ const price = entity.Quantity != null ? entity.configurationData[targetTotalPriceField] / entity.Quantity || 0 : 0;
282
+ const targetPriceValue = Number(entity.configurationData[targetPriceField]) || 0;
283
+ entity.configurationData[targetPriceField] = targetPriceValue
284
+ ? (targetPriceValue + price).toFixed(2)
285
+ : price.toFixed(2);
286
+ entity.configurationAttributes = this.mapAttributesTo('Attribute', lineItem);
287
+ entity.configurationData = Object.assign(Object.assign(Object.assign(Object.assign({}, entity.configurationData), this.mapAttributesTo('Field', lineItem)), this.mapAttributesTo('', lineItem)), { VeloceInstanceId__c: lineItem.id });
288
+ }
289
+ computeNetPrice(lineItem) {
290
+ if (lineItem.properties.GroupCharges) {
291
+ return this.sumNetPrice(lineItem.chargeGroupItems, this.getChargeNameSet(lineItem.properties.GroupCharges));
292
+ }
293
+ return this.sumNetPrice(lineItem.chargeItems, this.getChargeNameSet(lineItem.properties.Charges));
294
+ }
295
+ getChargeNameSet(property) {
296
+ if (property && property.length > 0) {
297
+ return new Set(property.split(','));
298
+ }
299
+ return new Set();
300
+ }
301
+ sumNetPrice(chargeItems, charges) {
302
+ var _a;
303
+ let netPrice = 0;
304
+ for (const chargeItem of chargeItems) {
305
+ if (!charges || charges.has(chargeItem.chargeType)) {
306
+ netPrice += (_a = chargeItem.netPrice) !== null && _a !== void 0 ? _a : 0;
307
+ }
308
+ }
309
+ return netPrice;
310
+ }
311
+ mapAttributesTo(target, lineItem) {
312
+ var _a;
313
+ const result = {};
314
+ const component = (_a = this.runtimeService.runtimeModel) === null || _a === void 0 ? void 0 : _a.components.get(lineItem.type);
315
+ if (!component) {
316
+ return result;
317
+ }
318
+ const propertyName = 'mapTo' + target;
319
+ component.attributes
320
+ .filter(a => a.properties && a.properties[propertyName])
321
+ .forEach(mapping => {
322
+ const attribute = lineItem.attributes.find(a => a.name === mapping.name);
323
+ if (attribute) {
324
+ new Set(mapping.properties[propertyName].split(',')).forEach(k => (result[k] = attribute.value));
325
+ }
326
+ });
327
+ return result;
328
+ }
329
+ getOptionConfigurations(product) {
330
+ var _a;
331
+ const optionConfigurations = {};
332
+ const requestOptionConfigurations = (_a = product.optionConfigurations) !== null && _a !== void 0 ? _a : {};
333
+ Object.keys(requestOptionConfigurations).forEach(k => {
334
+ var _a;
335
+ optionConfigurations[k] = ((_a = requestOptionConfigurations[k]) !== null && _a !== void 0 ? _a : []).map(opt => {
336
+ return Object.assign(Object.assign({}, opt), { selected: false });
337
+ });
338
+ });
339
+ return optionConfigurations;
340
+ }
341
+ }
342
+ RemoteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RemoteComponent, deps: [{ token: i1.ContextService }, { token: i1.QuoteDraftService }, { token: i2.QuoteApiService }, { token: i1.ConfigurationRuntimeService }, { token: i1.ConfigurationService }, { token: i3.MessageService }, { token: i4.IntegrationState }, { token: i5.Location }], target: i0.ɵɵFactoryTarget.Component });
343
+ RemoteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: RemoteComponent, selector: "vl-flow-remote", ngImport: i0, template: "<ng-container *ngIf=\"state$ | async as state\">\n <vl-loader *ngIf=\"state.loading; else content\" [label]=\"'Loading UI'\"></vl-loader>\n\n <ng-template #content>\n <ng-container *ngIf=\"!state.failure\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n </ng-container>\n </ng-template>\n</ng-container>\n", styles: [""], components: [{ type: i6.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }, { type: i4.PreviewComponent, selector: "vl-cms-preview", inputs: ["modelId", "uiDefinition", "clearState"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i5.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
344
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RemoteComponent, decorators: [{
345
+ type: Component,
346
+ args: [{
347
+ selector: 'vl-flow-remote',
348
+ templateUrl: './remote.component.html',
349
+ styleUrls: ['./remote.component.scss'],
350
+ changeDetection: ChangeDetectionStrategy.OnPush,
351
+ }]
352
+ }], ctorParameters: function () { return [{ type: i1.ContextService }, { type: i1.QuoteDraftService }, { type: i2.QuoteApiService }, { type: i1.ConfigurationRuntimeService }, { type: i1.ConfigurationService }, { type: i3.MessageService }, { type: i4.IntegrationState }, { type: i5.Location }]; } });
353
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3NyYy9wYWdlcy9yZW1vdGUvcmVtb3RlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3NyYy9wYWdlcy9yZW1vdGUvcmVtb3RlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFFOUUsT0FBTyxFQVNMLElBQUksR0FFTCxNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxVQUFVLEVBQW9CLE1BQU0scUJBQXFCLENBQUM7QUFVbkUsT0FBTyxFQUNMLGVBQWUsRUFDZixVQUFVLEVBQ1YsS0FBSyxFQUVMLEVBQUUsRUFDRixPQUFPLEVBQ1AsU0FBUyxFQUNULFNBQVMsRUFDVCxHQUFHLEVBQ0gsVUFBVSxHQUNYLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQWdCZCxNQUFNLE9BQU8sZUFBZTtJQVMxQixZQUNVLGNBQThCLEVBQzlCLGlCQUFvQyxFQUNwQyxlQUFnQyxFQUNoQyxjQUEyQyxFQUMzQyxvQkFBMEMsRUFDMUMsY0FBOEIsRUFDOUIsZ0JBQWtDLEVBQ2xDLFFBQWtCO1FBUGxCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxtQkFBYyxHQUFkLGNBQWMsQ0FBNkI7UUFDM0MseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUMxQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBZnJCLFdBQU0sR0FBRyxJQUFJLGVBQWUsQ0FBUSxFQUFFLE9BQU8s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QyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUNsRztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUwsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVPLHVCQUF1QixDQUFDLE9BQW1COztRQUNqRCxNQUFNLG9CQUFvQixHQUE2QyxFQUFFLENBQUM7UUFDMUUsTUFBTSwyQkFBMkIsR0FBRyxNQUFBLE9BQU8sQ0FBQyxvQkFBb0IsbUNBQUksRUFBRSxDQUFDO1FBRXZFLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7O1lBQ25ELG9CQUFvQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBQSwyQkFBMkIsQ0FBQyxDQUFDLENBQUMsbUNBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUN6RSx1Q0FBWSxHQUFHLEtBQUUsUUFBUSxFQUFFLEtBQUssSUFBRztZQUNyQyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxvQkFBb0IsQ0FBQztJQUM5QixDQUFDOzs2R0ExWlUsZUFBZTtpR0FBZixlQUFlLHNEQ3BENUIsd1ZBU0E7NEZEMkNhLGVBQWU7a0JBTjNCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsV0FBVyxFQUFFLHlCQUF5QjtvQkFDdEMsU0FBUyxFQUFFLENBQUMseUJBQXlCLENBQUM7b0JBQ3RDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUXVvdGVBcGlTZXJ2aWNlIH0gZnJvbSAnQHZlbG9jZWFwcHMvYXBpJztcbmltcG9ydCB7XG4gIENoYXJnZUdyb3VwSXRlbSxcbiAgQ29udGV4dFByb3BlcnRpZXMsXG4gIExpbmVJdGVtLFxuICBScGNNZXNzYWdlLFxuICBScGNPcHRpb24sXG4gIFJwY09wdGlvbkNvbmZpZ3VyYXRpb24sXG4gIFJwY1Byb2R1Y3QsXG4gIFJwY1F1b3RlLFxuICBVVUlELFxuICBWbFdpbmRvdyxcbn0gZnJvbSAnQHZlbG9jZWFwcHMvY29yZSc7XG5pbXBvcnQgeyBGbG93QWN0aW9uLCBJbnRlZ3JhdGlvblN0YXRlIH0gZnJvbSAnQHZlbG9jZWFwcHMvc2RrL2Ntcyc7XG5pbXBvcnQge1xuICBDb25maWd1cmF0aW9uUnVudGltZVNlcnZpY2UsXG4gIENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICBDb250ZXh0U2VydmljZSxcbiAgUXVvdGVEcmFmdFNlcnZpY2UsXG4gIFJ1bnRpbWVDb250ZXh0LFxuICBVSURlZmluaXRpb24sXG59IGZyb20gJ0B2ZWxvY2VhcHBzL3Nkay9jb3JlJztcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjYXRjaEVycm9yLFxuICBmaXJzdCxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIFN1YmplY3QsXG4gIHN3aXRjaE1hcCxcbiAgdGFrZVVudGlsLFxuICB0YXAsXG4gIHRocm93RXJyb3IsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTGluZUl0ZW1XaXRoUGFyZW50IH0gZnJvbSAnLi9yZW1vdGUudHlwZXMnO1xuXG5kZWNsYXJlIGNvbnN0IHdpbmRvdzogVmxXaW5kb3c7XG5cbmludGVyZmFjZSBTdGF0ZSB7XG4gIGxvYWRpbmc6IGJvb2xlYW47XG4gIGZhaWx1cmU6IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZsLWZsb3ctcmVtb3RlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JlbW90ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JlbW90ZS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgUmVtb3RlQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHVibGljIHVpRGVmaW5pdGlvbj86IFVJRGVmaW5pdGlvbjtcbiAgcHVibGljIHN0YXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U3RhdGU+KHsgbG9hZGluZzogdHJ1ZSwgZmFpbHVyZTogZmFsc2UgfSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBEWU5BTUlDX09QVElPTl9QUk9EVUNUU19LRVkgPSAnRHluYW1pYyc7XG5cbiAgcHJpdmF0ZSBycGNNZXNzYWdlOiBScGNNZXNzYWdlO1xuICBwcml2YXRlIGRlc3Ryb3llZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY29udGV4dFNlcnZpY2U6IENvbnRleHRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcXVvdGVEcmFmdFNlcnZpY2U6IFF1b3RlRHJhZnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcXVvdGVBcGlTZXJ2aWNlOiBRdW90ZUFwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBydW50aW1lU2VydmljZTogQ29uZmlndXJhdGlvblJ1bnRpbWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlndXJhdGlvblNlcnZpY2U6IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW50ZWdyYXRpb25TdGF0ZTogSW50ZWdyYXRpb25TdGF0ZSxcbiAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbixcbiAgKSB7XG4gICAgdGhpcy5ycGNNZXNzYWdlID0gSlNPTi5wYXJzZSh3aW5kb3cuUlBDX01FU1NBR0UgYXMgc3RyaW5nKTtcbiAgICB0aGlzLnJwY01lc3NhZ2Uub3B0aW9ucy5zb3J0KChhLCBiKSA9PiAoYS5mZWF0dXJlTnVtYmVyID8/IDk5OTk5KSAtIChiLmZlYXR1cmVOdW1iZXIgPz8gOTk5OTkpKTtcbiAgICB0aGlzLnVwZGF0ZUhhc0NoaWxkcmVuRmxhZyh0aGlzLnJwY01lc3NhZ2UucHJvZHVjdC5jb25maWd1cmVkUHJvZHVjdElkKTtcblxuICAgIC8vIHVwZGF0ZSBjb250ZXh0IHByb3BlcnRpZXNcbiAgICBpZiAodGhpcy5ycGNNZXNzYWdlLnF1b3RlKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzOiBDb250ZXh0UHJvcGVydGllcyA9IHt9O1xuXG4gICAgICBpZiAodGhpcy5ycGNNZXNzYWdlLnF1b3RlLlNCUVFfX09wcG9ydHVuaXR5Ml9fYykge1xuICAgICAgICBwcm9wZXJ0aWVzLk9wcG9ydHVuaXR5SWQgPSB0aGlzLnJwY01lc3NhZ2UucXVvdGUuU0JRUV9fT3Bwb3J0dW5pdHkyX19jO1xuICAgICAgfVxuXG4gICAgICBPYmplY3QuZW50cmllcyh0aGlzLnJwY01lc3NhZ2UucXVvdGUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KSkge1xuICAgICAgICAgIHByb3BlcnRpZXNba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5jb250ZXh0U2VydmljZS51cGRhdGUoeyBwcm9wZXJ0aWVzIH0pO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdFN1YnNjcmlwdGlvbnMoKTtcbiAgICB0aGlzLmluaXRDb25maWd1cmF0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95ZWQkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3llZCQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdENvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgcHJvZHVjdElkID0gdGhpcy5ycGNNZXNzYWdlLnByb2R1Y3QuY29uZmlndXJlZFByb2R1Y3RJZDtcbiAgICBjb25zdCBxdW90ZSA9IHRoaXMucXVvdGVEcmFmdFNlcnZpY2UucXVvdGVEcmFmdDtcblxuICAgIGlmICghcHJvZHVjdElkIHx8ICFxdW90ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucnVudGltZVNlcnZpY2VcbiAgICAgIC5pbml0KHsgcHJvZHVjdElkIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgdGFwKGNvbnRleHQgPT4ge1xuICAgICAgICAgIGNvbnN0IHByaWNpbmdFbmFibGVkID0gY29udGV4dD8udWlEZWZpbml0aW9uPy5wcm9wZXJ0aWVzPy5wcmljaW5nRW5hYmxlZCA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgICAgICAgY29uc3QgcHJpY2VMaXN0SWQgPSBjb250ZXh0Py51aURlZmluaXRpb24/LnByb3BlcnRpZXM/LnByaWNlTGlzdDtcblxuICAgICAgICAgIGNvbnN0IHJ1bnRpbWVDb250ZXh0UHJvcGVydGllcyA9IHRoaXMucnVudGltZVNlcnZpY2UucnVudGltZUNvbnRleHQ/LnByb3BlcnRpZXM7XG4gICAgICAgICAgaWYgKHJ1bnRpbWVDb250ZXh0UHJvcGVydGllcykge1xuICAgICAgICAgICAgcnVudGltZUNvbnRleHRQcm9wZXJ0aWVzLlByaWNlTGlzdElkID0gcHJpY2VMaXN0SWQ7XG4gICAgICAgICAgICBydW50aW1lQ29udGV4dFByb3BlcnRpZXMuUHJpY2luZ0VuYWJsZWQgPSBwcmljaW5nRW5hYmxlZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmNvbnRleHRTZXJ2aWNlLnVwZGF0ZSh7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIE1vZGVsSWQ6IGNvbnRleHQ/Lm1vZGVsSWQsXG4gICAgICAgICAgICAgIFJ1bnRpbWVNb2RlOiAnVEVTVCcsXG4gICAgICAgICAgICAgIFByaWNpbmdFbmFibGVkOiBwcmljaW5nRW5hYmxlZCxcbiAgICAgICAgICAgICAgUHJpY2VMaXN0SWQ6IHByaWNlTGlzdElkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHRoaXMudWlEZWZpbml0aW9uID0gY29udGV4dD8udWlEZWZpbml0aW9uO1xuXG4gICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS51cGRhdGVDdXJyZW50U3RhdGVzKHtcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZVJhbXA6IHRoaXMuY3JlYXRlTGluZUl0ZW0oKSxcbiAgICAgICAgICAgIGN1cnJlbnRTdGF0ZTogcXVvdGUuY3VycmVudFN0YXRlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KSxcbiAgICAgICAgdGhpcy50aHJvd0lmTm9VSURlZmluaXRpb24oKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuY29uZmlndXJlKCkpLFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5zdGF0ZSQubmV4dCh7IGxvYWRpbmc6IGZhbHNlLCBmYWlsdXJlOiBmYWxzZSB9KSksXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy51aURlZmluaXRpb24/LnByb3BlcnRpZXM/LnN1cHByZXNzVG9hc3RNZXNzYWdlcykge1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogZXJyb3IgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5zdGF0ZSQubmV4dCh7IGxvYWRpbmc6IGZhbHNlLCBmYWlsdXJlOiB0cnVlIH0pO1xuICAgICAgICAgIHJldHVybiBvZigpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIHRocm93SWZOb1VJRGVmaW5pdGlvbigpIHtcbiAgICByZXR1cm4gPFQ+KHNvdXJjZSQ6IE9ic2VydmFibGU8VD4pOiBPYnNlcnZhYmxlPFQ+ID0+IHtcbiAgICAgIHJldHVybiBzb3VyY2UkLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgaWYgKCF0aGlzLnVpRGVmaW5pdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gJ1Byb2R1Y3QgZG9lcyBub3QgaGF2ZSBDb25maWd1cmF0aW9uIFVJJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHNvdXJjZSQ7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0U3Vic2NyaXB0aW9ucygpOiB2b2lkIHtcbiAgICB0aGlzLmludGVncmF0aW9uU3RhdGVcbiAgICAgIC5saXN0ZW4kKEZsb3dBY3Rpb24uUkVNT1RFX0NBTkNFTClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5sb2NhdGlvbi5iYWNrKCkpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMuaW50ZWdyYXRpb25TdGF0ZVxuICAgICAgLmxpc3RlbiQoRmxvd0FjdGlvbi5SRU1PVEVfQVBQTFkpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuc2F2ZVJwY01lc3NhZ2UoKSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVMaW5lSXRlbSgpOiBMaW5lSXRlbSB7XG4gICAgY29uc3QgW3F1b3RlRHJhZnRMaW5lSXRlbV0gPSB0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLnF1b3RlRHJhZnQ/LmN1cnJlbnRTdGF0ZSA/PyBbXTtcbiAgICBpZiAocXVvdGVEcmFmdExpbmVJdGVtICYmIChxdW90ZURyYWZ0TGluZUl0ZW0uYXR0cmlidXRlcy5sZW5ndGggPiAwIHx8IHF1b3RlRHJhZnRMaW5lSXRlbS5saW5lSXRlbXMubGVuZ3RoID4gMCkpIHtcbiAgICAgIHJldHVybiBxdW90ZURyYWZ0TGluZUl0ZW07XG4gICAgfVxuXG4gICAgY29uc3QgbGluZUl0ZW0gPSB0aGlzLmNyZWF0ZVJvb3RMaW5lSXRlbSgpO1xuICAgIGNvbnN0IGR5bmFtaWNPcHRpb25Qcm9kdWN0cyA9IHRoaXMucnBjTWVzc2FnZS5wcm9kdWN0Lm9wdGlvbkNvbmZpZ3VyYXRpb25zW3RoaXMuRFlOQU1JQ19PUFRJT05fUFJPRFVDVFNfS0VZXTtcblxuICAgIGlmIChkeW5hbWljT3B0aW9uUHJvZHVjdHMpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnRvUGFyZW50Q2hpbGRNYXAoZHluYW1pY09wdGlvblByb2R1Y3RzKTtcbiAgICAgIGxldCBpdGVtcyA9IFtsaW5lSXRlbV07XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXTtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBvcHRpb25zLmdldChpdGVtLmlkKTtcbiAgICAgICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICAgICAgaXRlbS5saW5lSXRlbXMgPSBjaGlsZHJlbjtcbiAgICAgICAgICBpdGVtcyA9IGl0ZW1zLmNvbmNhdChjaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxpbmVJdGVtO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVSb290TGluZUl0ZW0oKTogTGluZUl0ZW0ge1xuICAgIGNvbnN0IHByb2R1Y3QgPSB0aGlzLnJwY01lc3NhZ2UucHJvZHVjdDtcbiAgICBjb25zdCBydW50aW1lQ29udGV4dCA9IHRoaXMucnVudGltZVNlcnZpY2UucnVudGltZUNvbnRleHQgYXMgUnVudGltZUNvbnRleHQ7XG4gICAgY29uc3QgdmVsb2NlSW5zdGFuY2VJZCA9IHByb2R1Y3QuY29uZmlndXJhdGlvbkF0dHJpYnV0ZXMuVmVsb2NlSW5zdGFuY2VJZF9fYztcbiAgICBjb25zdCBxdW90ZUlkID0gdGhpcy5xdW90ZURyYWZ0U2VydmljZS5xdW90ZURyYWZ0Py5jdXJyZW50U3RhdGVbMF0/LmlkO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBxdW90ZUlkIHx8IHZlbG9jZUluc3RhbmNlSWQgfHwgVVVJRC5VVUlEKCksXG4gICAgICB0eXBlOiBydW50aW1lQ29udGV4dC5wcm9kdWN0VHlwZSA/PyAnJyxcbiAgICAgIG5hbWU6IHJ1bnRpbWVDb250ZXh0LnByb3BlcnRpZXM/LmRpc3BsYXlOYW1lIHx8IHJ1bnRpbWVDb250ZXh0LnByb2R1Y3ROYW1lLFxuICAgICAgcHJvZHVjdE5hbWU6IHJ1bnRpbWVDb250ZXh0LnByb2R1Y3ROYW1lLFxuICAgICAgcHJvZHVjdElkOiBydW50aW1lQ29udGV4dC5wcm9kdWN0SWQsXG4gICAgICBjZmdTdGF0dXM6ICdEZWZhdWx0JyxcbiAgICAgIGFjdGlvbkNvZGU6ICdBREQnLFxuICAgICAgcXR5OiAxLFxuICAgIH0gYXMgTGluZUl0ZW07XG4gIH1cblxuICBwcml2YXRlIHRvUGFyZW50Q2hpbGRNYXAocmVtb3RlT3B0aW9uUHJvZHVjdHM6IFJwY09wdGlvbkNvbmZpZ3VyYXRpb25bXSk6IE1hcDxzdHJpbmcsIExpbmVJdGVtW10+IHtcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgTWFwPHN0cmluZywgTGluZUl0ZW1bXT4oKTtcblxuICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIHJlbW90ZU9wdGlvblByb2R1Y3RzKSB7XG4gICAgICBjb25zdCBjb25maWd1cmF0aW9uRGF0YSA9IG9wdGlvbj8ucmVhZE9ubHk/LmxpbmU7XG4gICAgICBjb25zdCBpZCA9IGNvbmZpZ3VyYXRpb25EYXRhPy5WZWxvY2VJbnN0YW5jZUlkX19jO1xuICAgICAgY29uc3QgcGFyZW50SWQgPSBjb25maWd1cmF0aW9uRGF0YT8uVmVsb2NlUGFyZW50SW5zdGFuY2VJZF9fYztcblxuICAgICAgaWYgKCFvcHRpb24uc2VsZWN0ZWQgfHwgIWNvbmZpZ3VyYXRpb25EYXRhIHx8ICFpZCB8fCAhcGFyZW50SWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByb2R1Y3RJZCA9IG9wdGlvbi5wcm9kdWN0SWQ7XG4gICAgICBjb25zdCBsaW5lSXRlbSA9IHtcbiAgICAgICAgaWQsXG4gICAgICAgIHByb2R1Y3RJZCxcbiAgICAgICAgcGFyZW50SWQsXG4gICAgICAgIHR5cGU6IGNvbmZpZ3VyYXRpb25EYXRhLk1vZGVsVHlwZV9fYyxcbiAgICAgICAgcG9ydDogY29uZmlndXJhdGlvbkRhdGEuTW9kZWxQb3J0X19jLFxuICAgICAgICBjZmdTdGF0dXM6IGNvbmZpZ3VyYXRpb25EYXRhLkNvbmZpZ3VyYXRpb25TdGF0dXNfX2MsXG4gICAgICAgIGFjdGlvbkNvZGU6IGNvbmZpZ3VyYXRpb25EYXRhLkFjdGlvbkNvZGVfX2MsXG4gICAgICAgIHF0eTogb3B0aW9uLlF1YW50aXR5LFxuICAgICAgfSBhcyBMaW5lSXRlbTtcblxuICAgICAgbGV0IHNpYmxpbmdzID0gcmVzdWx0LmdldChwcm9kdWN0SWQpO1xuICAgICAgaWYgKCFzaWJsaW5ncykge1xuICAgICAgICByZXN1bHQuc2V0KHBhcmVudElkLCAoc2libGluZ3MgPSBbXSkpO1xuICAgICAgfVxuXG4gICAgICBzaWJsaW5ncy5wdXNoKGxpbmVJdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgc2F2ZVJwY01lc3NhZ2UoKTogdm9pZCB7XG4gICAgY29uc3QgcXVvdGUgPSB0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLnF1b3RlRHJhZnQ7XG4gICAgY29uc3QgbGluZUl0ZW0gPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFNuYXBzaG90KCk7XG5cbiAgICBpZiAoIXF1b3RlIHx8ICFsaW5lSXRlbSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucnBjTWVzc2FnZS5WZWxvY2VSZWZlcmVuY2VJZCA9IHF1b3RlLnF1b3RlSWQ7XG4gICAgdGhpcy5ycGNNZXNzYWdlLnByb2R1Y3QuY29uZmlndXJhdGlvbkRhdGEuVmVsb2NlSW5zdGFuY2VJZF9fYyA9IGxpbmVJdGVtLmlkO1xuICAgIGNvbnN0IGNoaWxkSXRlbXMgPSB0aGlzLmZsYXR0ZW5DaGlsZExpbmVJdGVtcyhsaW5lSXRlbSk7XG4gICAgY29uc3Qgc2F2aW5nTW9kZSA9IHdpbmRvdy5TYXZpbmdNb2RlO1xuXG4gICAgdGhpcy51cGRhdGVDb250ZW50RGF0YSh0aGlzLnJwY01lc3NhZ2UucHJvZHVjdCwgbGluZUl0ZW0pO1xuICAgIHRoaXMucnBjTWVzc2FnZS5xdW90ZSA9IHRoaXMubWFwQXR0cmlidXRlc1RvKCdRdW90ZScsIGxpbmVJdGVtKSBhcyBScGNRdW90ZTtcblxuICAgIGlmIChzYXZpbmdNb2RlID09PSAnQUxMJykge1xuICAgICAgY29uc3Qgb3B0aW9uQ29uZmlndXJhdGlvbnMgPSB0aGlzLmdldE9wdGlvbkNvbmZpZ3VyYXRpb25zKHRoaXMucnBjTWVzc2FnZS5wcm9kdWN0KTtcbiAgICAgIGNvbnN0IHJvb3RQcm9kdWN0T3B0aW9ucyA9IHRoaXMucnBjTWVzc2FnZS5vcHRpb25zLmZpbHRlcihwbyA9PiBwby5jb25maWd1cmVkUHJvZHVjdElkID09PSBsaW5lSXRlbS5wcm9kdWN0SWQpO1xuXG4gICAgICBjaGlsZEl0ZW1zLmZvckVhY2gobGluZUl0ZW0gPT4ge1xuICAgICAgICBjb25zdCByb290T3B0aW9uID0gcm9vdFByb2R1Y3RPcHRpb25zLmZpbmQocG8gPT4gcG8ub3B0aW9uYWxQcm9kdWN0SWQgPT09IGxpbmVJdGVtLnByb2R1Y3RJZCk7XG4gICAgICAgIGlmIChyb290T3B0aW9uKSB7XG4gICAgICAgICAgY29uc3QgZmVhdHVyZU9wdGlvbnMgPVxuICAgICAgICAgICAgb3B0aW9uQ29uZmlndXJhdGlvbnNbcm9vdE9wdGlvbi5mZWF0dXJlTmFtZV0gPz8gKG9wdGlvbkNvbmZpZ3VyYXRpb25zW3Jvb3RPcHRpb24uZmVhdHVyZU5hbWVdID0gW10pO1xuICAgICAgICAgIGNvbnN0IG9yaWdpbk9wdGlvbiA9ICFyb290T3B0aW9uLmhhc0NoaWxkcmVuXG4gICAgICAgICAgICA/IG9wdGlvbkNvbmZpZ3VyYXRpb25zW3Jvb3RPcHRpb24uZmVhdHVyZU5hbWVdLmZpbmQoKHsgb3B0aW9uSWQgfSkgPT4gb3B0aW9uSWQgPT09IHJvb3RPcHRpb24ub3B0aW9uSWQpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgICBjb25zdCBvcHRpb246IFJwY09wdGlvbkNvbmZpZ3VyYXRpb24gPSBvcmlnaW5PcHRpb24gPz8gKHt9IGFzIFJwY09wdGlvbkNvbmZpZ3VyYXRpb24pO1xuXG4gICAgICAgICAgb3B0aW9uLm9wdGlvbklkID0gb3B0aW9uLm9wdGlvbklkID8/IHJvb3RPcHRpb24ub3B0aW9uSWQ7XG4gICAgICAgICAgdGhpcy51cGRhdGVDb250ZW50RGF0YShvcHRpb24sIGxpbmVJdGVtKTtcbiAgICAgICAgICBvcHRpb24uaW5kZXggPSBvcHRpb24uaW5kZXggPz8gZmVhdHVyZU9wdGlvbnMubGVuZ3RoO1xuICAgICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IHRydWU7XG5cbiAgICAgICAgICBpZiAoIW9yaWdpbk9wdGlvbikge1xuICAgICAgICAgICAgZmVhdHVyZU9wdGlvbnMucHVzaChvcHRpb24pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChsaW5lSXRlbS5wYXJlbnRMaW5lSXRlbSkge1xuICAgICAgICAgICAgY29uc3QgbmVzdGVkUHJvZHVjdE9wdGlvbiA9IHRoaXMucnBjTWVzc2FnZS5vcHRpb25zLmZpbmQoXG4gICAgICAgICAgICAgIHBvID0+XG4gICAgICAgICAgICAgICAgcG8uY29uZmlndXJlZFByb2R1Y3RJZCA9PT0gbGluZUl0ZW0ucGFyZW50TGluZUl0ZW0/LnByb2R1Y3RJZCAmJlxuICAgICAgICAgICAgICAgIHBvLm9wdGlvbmFsUHJvZHVjdElkID09PSBsaW5lSXRlbS5wcm9kdWN0SWQsXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAobmVzdGVkUHJvZHVjdE9wdGlvbikge1xuICAgICAgICAgICAgICBvcHRpb24uY29uZmlndXJhdGlvbkRhdGEgPSB7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9uLmNvbmZpZ3VyYXRpb25EYXRhLFxuICAgICAgICAgICAgICAgIFZlbG9jZVBhcmVudEluc3RhbmNlSWRfX2M6IGxpbmVJdGVtLnBhcmVudExpbmVJdGVtLmlkLFxuICAgICAgICAgICAgICAgIFZlbG9jZU5lc3RlZE9wdGlvbklkX19jOiBuZXN0ZWRQcm9kdWN0T3B0aW9uLm9wdGlvbklkLFxuICAgICAgICAgICAgICAgIFZlbG9jZU5lc3RlZEZlYXR1cmVJZF9fYzogbmVzdGVkUHJvZHVjdE9wdGlvbi5mZWF0dXJlSWQsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucnBjTWVzc2FnZS5keW5hbWljRmVhdHVyZXMuZm9yRWFjaChmZWF0dXJlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZlYXR1cmVPcHRpb25zID0gb3B0aW9uQ29uZmlndXJhdGlvbnNbZmVhdHVyZS5uYW1lXSA/PyAob3B0aW9uQ29uZmlndXJhdGlvbnNbZmVhdHVyZS5uYW1lXSA9IFtdKTtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbk9wdGlvbiA9IGZlYXR1cmVPcHRpb25zLmZpbmQoKHsgcHJvZHVjdElkIH0pID0+IHByb2R1Y3RJZCA9PT0gbGluZUl0ZW0ucHJvZHVjdElkKTtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbjogUnBjT3B0aW9uQ29uZmlndXJhdGlvbiA9IG9yaWdpbk9wdGlvbiA/PyAoe30gYXMgUnBjT3B0aW9uQ29uZmlndXJhdGlvbik7XG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29udGVudERhdGEob3B0aW9uLCBsaW5lSXRlbSk7XG4gICAgICAgICAgICBvcHRpb24uaW5kZXggPSBvcHRpb24uaW5kZXggPz8gZmVhdHVyZU9wdGlvbnMubGVuZ3RoO1xuICAgICAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKCFvcmlnaW5PcHRpb24pIHtcbiAgICAgICAgICAgICAgZmVhdHVyZU9wdGlvbnMucHVzaChvcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5ycGNNZXNzYWdlLnByb2R1Y3QgPSB7IC4uLnRoaXMucnBjTWVzc2FnZS5wcm9kdWN0LCBvcHRpb25Db25maWd1cmF0aW9ucyB9O1xuICAgIH1cblxuICAgIHdpbmRvdy5SUENfQlJPQURDQVNUPy5hcHBseShudWxsLCBbdGhpcy5ycGNNZXNzYWdlXSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUhhc0NoaWxkcmVuRmxhZyhidW5kbGVQcm9kdWN0SWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGJ1bmRsZU9wdGlvbnNCeU9wdGlvbklkOiBSZWNvcmQ8c3RyaW5nLCBScGNPcHRpb24+ID0ge307XG4gICAgY29uc3Qgbm90QnVuZGxlT3B0aW9uczogUnBjT3B0aW9uW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHByb2R1Y3RPcHRpb24gb2YgdGhpcy5ycGNNZXNzYWdlLm9wdGlvbnMpIHtcbiAgICAgIGlmIChwcm9kdWN0T3B0aW9uLmNvbmZpZ3VyZWRQcm9kdWN0SWQgPT09IGJ1bmRsZVByb2R1Y3RJZCkge1xuICAgICAgICBidW5kbGVPcHRpb25zQnlPcHRpb25JZFtwcm9kdWN0T3B0aW9uLm9wdGlvbmFsUHJvZHVjdElkXSA9IHByb2R1Y3RPcHRpb247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub3RCdW5kbGVPcHRpb25zLnB1c2gocHJvZHVjdE9wdGlvbik7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG5vdEJ1bmRsZU9wdGlvbnMpIHtcbiAgICAgIGlmIChidW5kbGVPcHRpb25zQnlPcHRpb25JZFtvcHRpb24uY29uZmlndXJlZFByb2R1Y3RJZF0pIHtcbiAgICAgICAgYnVuZGxlT3B0aW9uc0J5T3B0aW9uSWRbb3B0aW9uLmNvbmZpZ3VyZWRQcm9kdWN0SWRdLmhhc0NoaWxkcmVuID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZsYXR0ZW5DaGlsZExpbmVJdGVtcyhsaW5lSXRlbTogTGluZUl0ZW0pOiBMaW5lSXRlbVdpdGhQYXJlbnRbXSB7XG4gICAgbGV0IGl0ZW1zID0gbGluZUl0ZW0ubGluZUl0ZW1zID8/IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXTtcbiAgICAgIGlmIChpdGVtLmxpbmVJdGVtcykge1xuICAgICAgICBpdGVtcyA9IGl0ZW1zLmNvbmNhdChpdGVtLmxpbmVJdGVtcy5tYXAobGkgPT4gKHsgLi4ubGksIHBhcmVudExpbmVJdGVtOiBpdGVtIH0pKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpdGVtcztcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ29udGVudERhdGEoZW50aXR5OiBScGNQcm9kdWN0IHwgUnBjT3B0aW9uQ29uZmlndXJhdGlvbiwgbGluZUl0ZW06IExpbmVJdGVtKTogdm9pZCB7XG4gICAgaWYgKGxpbmVJdGVtLnByb2R1Y3RJZCkge1xuICAgICAgZW50aXR5LnByb2R1Y3RJZCA9IGxpbmVJdGVtLnByb2R1Y3RJZDtcbiAgICB9XG5cbiAgICBjb25zdCBxdWFudGl0eUF0dHJpYnV0ZSA9IGxpbmVJdGVtLnByb3BlcnRpZXMucXVhbnRpdHlBdHRyaWJ1dGU7XG4gICAgZW50aXR5LlF1YW50aXR5ID0gcXVhbnRpdHlBdHRyaWJ1dGVcbiAgICAgID8gbGluZUl0ZW0uYXR0cmlidXRlcy5maW5kKGF0dHJpYnV0ZSA9PiBhdHRyaWJ1dGUubmFtZSA9PT0gcXVhbnRpdHlBdHRyaWJ1dGUpPy52YWx1ZSA/PyAxXG4gICAgICA6IGxpbmVJdGVtLnF0eTtcblxuICAgIGNvbnN0IHRvdGFsUHJpY2UgPSB0aGlzLmNvbXB1dGVOZXRQcmljZShsaW5lSXRlbSk7XG4gICAgY29uc3QgdGFyZ2V0VG90YWxQcmljZUZpZWxkID0gbGluZUl0ZW0ucHJvcGVydGllcy5UYXJnZXRUb3RhbFByaWNlRmllbGQgfHwgJ1RvdGFsUHJpY2VfX2MnO1xuICAgIGVudGl0eS5jb25maWd1cmF0aW9uRGF0YVt0YXJnZXRUb3RhbFByaWNlRmllbGRdID0gZW50aXR5LmNvbmZpZ3VyYXRpb25EYXRhW3RhcmdldFRvdGFsUHJpY2VGaWVsZF1cbiAgICAgID8gZW50aXR5LmNvbmZpZ3VyYXRpb25EYXRhW3RhcmdldFRvdGFsUHJpY2VGaWVsZF0gKyB0b3RhbFByaWNlXG4gICAgICA6IHRvdGFsUHJpY2U7XG5cbiAgICBjb25zdCB0YXJnZXRQcmljZUZpZWxkID0gbGluZUl0ZW0ucHJvcGVydGllcy5UYXJnZXRQcmljZUZpZWxkIHx8ICdTQlFRX19MaXN0UHJpY2VfX2MnO1xuICAgIGNvbnN0IHByaWNlID0gZW50aXR5LlF1YW50aXR5ICE9IG51bGwgPyBlbnRpdHkuY29uZmlndXJhdGlvbkRhdGFbdGFyZ2V0VG90YWxQcmljZUZpZWxkXSAvIGVudGl0eS5RdWFudGl0eSB8fCAwIDogMDtcbiAgICBjb25zdCB0YXJnZXRQcmljZVZhbHVlID0gTnVtYmVyKGVudGl0eS5jb25maWd1cmF0aW9uRGF0YVt0YXJnZXRQcmljZUZpZWxkXSkgfHwgMDtcbiAgICBlbnRpdHkuY29uZmlndXJhdGlvbkRhdGFbdGFyZ2V0UHJpY2VGaWVsZF0gPSB0YXJnZXRQcmljZVZhbHVlXG4gICAgICA/ICh0YXJnZXRQcmljZVZhbHVlICsgcHJpY2UpLnRvRml4ZWQoMilcbiAgICAgIDogcHJpY2UudG9GaXhlZCgyKTtcblxuICAgIGVudGl0eS5jb25maWd1cmF0aW9uQXR0cmlidXRlcyA9IHRoaXMubWFwQXR0cmlidXRlc1RvKCdBdHRyaWJ1dGUnLCBsaW5lSXRlbSk7XG4gICAgZW50aXR5LmNvbmZpZ3VyYXRpb25EYXRhID0ge1xuICAgICAgLi4uZW50aXR5LmNvbmZpZ3VyYXRpb25EYXRhLFxuICAgICAgLi4udGhpcy5tYXBBdHRyaWJ1dGVzVG8oJ0ZpZWxkJywgbGluZUl0ZW0pLFxuICAgICAgLi4udGhpcy5tYXBBdHRyaWJ1dGVzVG8oJycsIGxpbmVJdGVtKSxcbiAgICAgIFZlbG9jZUluc3RhbmNlSWRfX2M6IGxpbmVJdGVtLmlkLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVOZXRQcmljZShsaW5lSXRlbTogTGluZUl0ZW0pOiBudW1iZXIge1xuICAgIGlmIChsaW5lSXRlbS5wcm9wZXJ0aWVzLkdyb3VwQ2hhcmdlcykge1xuICAgICAgcmV0dXJuIHRoaXMuc3VtTmV0UHJpY2UobGluZUl0ZW0uY2hhcmdlR3JvdXBJdGVtcywgdGhpcy5nZXRDaGFyZ2VOYW1lU2V0KGxpbmVJdGVtLnByb3BlcnRpZXMuR3JvdXBDaGFyZ2VzKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3VtTmV0UHJpY2UobGluZUl0ZW0uY2hhcmdlSXRlbXMsIHRoaXMuZ2V0Q2hhcmdlTmFtZVNldChsaW5lSXRlbS5wcm9wZXJ0aWVzLkNoYXJnZXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2hhcmdlTmFtZVNldChwcm9wZXJ0eT86IHN0cmluZyk6IFNldDxzdHJpbmc+IHtcbiAgICBpZiAocHJvcGVydHkgJiYgcHJvcGVydHkubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIG5ldyBTZXQocHJvcGVydHkuc3BsaXQoJywnKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBTZXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3VtTmV0UHJpY2UoY2hhcmdlSXRlbXM6IENoYXJnZUdyb3VwSXRlbVtdLCBjaGFyZ2VzOiBTZXQ8c3RyaW5nPik6IG51bWJlciB7XG4gICAgbGV0IG5ldFByaWNlID0gMDtcblxuICAgIGZvciAoY29uc3QgY2hhcmdlSXRlbSBvZiBjaGFyZ2VJdGVtcykge1xuICAgICAgaWYgKCFjaGFyZ2VzIHx8IGNoYXJnZXMuaGFzKGNoYXJnZUl0ZW0uY2hhcmdlVHlwZSkpIHtcbiAgICAgICAgbmV0UHJpY2UgKz0gY2hhcmdlSXRlbS5uZXRQcmljZSA/PyAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXRQcmljZTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwQXR0cmlidXRlc1RvKHRhcmdldDogc3RyaW5nLCBsaW5lSXRlbTogTGluZUl0ZW0pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLnJ1bnRpbWVTZXJ2aWNlLnJ1bnRpbWVNb2RlbD8uY29tcG9uZW50cy5nZXQobGluZUl0ZW0udHlwZSk7XG5cbiAgICBpZiAoIWNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9wZXJ0eU5hbWUgPSAnbWFwVG8nICsgdGFyZ2V0O1xuICAgIGNvbXBvbmVudC5hdHRyaWJ1dGVzXG4gICAgICAuZmlsdGVyKGEgPT4gYS5wcm9wZXJ0aWVzICYmIGEucHJvcGVydGllc1twcm9wZXJ0eU5hbWVdKVxuICAgICAgLmZvckVhY2gobWFwcGluZyA9PiB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZSA9IGxpbmVJdGVtLmF0dHJpYnV0ZXMuZmluZChhID0+IGEubmFtZSA9PT0gbWFwcGluZy5uYW1lKTtcblxuICAgICAgICBpZiAoYXR0cmlidXRlKSB7XG4gICAgICAgICAgbmV3IFNldChtYXBwaW5nLnByb3BlcnRpZXNbcHJvcGVydHlOYW1lXS5zcGxpdCgnLCcpKS5mb3JFYWNoKGsgPT4gKHJlc3VsdFtrXSA9IGF0dHJpYnV0ZS52YWx1ZSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGdldE9wdGlvbkNvbmZpZ3VyYXRpb25zKHByb2R1Y3Q6IFJwY1Byb2R1Y3QpOiBSZWNvcmQ8c3RyaW5nLCBScGNPcHRpb25Db25maWd1cmF0aW9uW10+IHtcbiAgICBjb25zdCBvcHRpb25Db25maWd1cmF0aW9uczogUmVjb3JkPHN0cmluZywgUnBjT3B0aW9uQ29uZmlndXJhdGlvbltdPiA9IHt9O1xuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25Db25maWd1cmF0aW9ucyA9IHByb2R1Y3Qub3B0aW9uQ29uZmlndXJhdGlvbnMgPz8ge307XG5cbiAgICBPYmplY3Qua2V5cyhyZXF1ZXN0T3B0aW9uQ29uZmlndXJhdGlvbnMpLmZvckVhY2goayA9PiB7XG4gICAgICBvcHRpb25Db25maWd1cmF0aW9uc1trXSA9IChyZXF1ZXN0T3B0aW9uQ29uZmlndXJhdGlvbnNba10gPz8gW10pLm1hcChvcHQgPT4ge1xuICAgICAgICByZXR1cm4geyAuLi5vcHQsIHNlbGVjdGVkOiBmYWxzZSB9O1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb3B0aW9uQ29uZmlndXJhdGlvbnM7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJzdGF0ZSQgfCBhc3luYyBhcyBzdGF0ZVwiPlxuICA8dmwtbG9hZGVyICpuZ0lmPVwic3RhdGUubG9hZGluZzsgZWxzZSBjb250ZW50XCIgW2xhYmVsXT1cIidMb2FkaW5nIFVJJ1wiPjwvdmwtbG9hZGVyPlxuXG4gIDxuZy10ZW1wbGF0ZSAjY29udGVudD5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXN0YXRlLmZhaWx1cmVcIj5cbiAgICAgIDx2bC1jbXMtcHJldmlldyBbdWlEZWZpbml0aW9uXT1cInVpRGVmaW5pdGlvblwiPjwvdmwtY21zLXByZXZpZXc+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctdGVtcGxhdGU+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
@@ -0,0 +1,20 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { NgModule } from '@angular/core';
3
+ import { LoaderModule } from '@veloceapps/components';
4
+ import { PreviewModule } from '@veloceapps/sdk/cms';
5
+ import { RemoteComponent } from './remote.component';
6
+ import * as i0 from "@angular/core";
7
+ export class RemoteModule {
8
+ }
9
+ RemoteModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RemoteModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
10
+ RemoteModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RemoteModule, declarations: [RemoteComponent], imports: [CommonModule, PreviewModule, LoaderModule], exports: [RemoteComponent] });
11
+ RemoteModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RemoteModule, imports: [[CommonModule, PreviewModule, LoaderModule]] });
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RemoteModule, decorators: [{
13
+ type: NgModule,
14
+ args: [{
15
+ declarations: [RemoteComponent],
16
+ imports: [CommonModule, PreviewModule, LoaderModule],
17
+ exports: [RemoteComponent],
18
+ }]
19
+ }] });
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3NyYy9wYWdlcy9yZW1vdGUvcmVtb3RlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFPckQsTUFBTSxPQUFPLFlBQVk7OzBHQUFaLFlBQVk7MkdBQVosWUFBWSxpQkFKUixlQUFlLGFBQ3BCLFlBQVksRUFBRSxhQUFhLEVBQUUsWUFBWSxhQUN6QyxlQUFlOzJHQUVkLFlBQVksWUFIZCxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsWUFBWSxDQUFDOzRGQUd6QyxZQUFZO2tCQUx4QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLGVBQWUsQ0FBQztvQkFDL0IsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxZQUFZLENBQUM7b0JBQ3BELE9BQU8sRUFBRSxDQUFDLGVBQWUsQ0FBQztpQkFDM0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvYWRlck1vZHVsZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgUHJldmlld01vZHVsZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL3Nkay9jbXMnO1xuaW1wb3J0IHsgUmVtb3RlQ29tcG9uZW50IH0gZnJvbSAnLi9yZW1vdGUuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbUmVtb3RlQ29tcG9uZW50XSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUHJldmlld01vZHVsZSwgTG9hZGVyTW9kdWxlXSxcbiAgZXhwb3J0czogW1JlbW90ZUNvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIFJlbW90ZU1vZHVsZSB7fVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLnR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZGsvc3JjL3BhZ2VzL3JlbW90ZS9yZW1vdGUudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExpbmVJdGVtIH0gZnJvbSAnQHZlbG9jZWFwcHMvY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGluZUl0ZW1XaXRoUGFyZW50IGV4dGVuZHMgTGluZUl0ZW0ge1xuICBwYXJlbnRMaW5lSXRlbT86IExpbmVJdGVtO1xufVxuIl19
@@ -1,13 +1,13 @@
1
1
  import { ChangeDetectionStrategy, Component, Inject, Optional, } from '@angular/core';
2
- import { ToastType } from '@veloce/components';
3
- import { UITemplateComponentType, UITemplateType, } from '@veloce/core';
2
+ import { ToastType } from '@veloceapps/components';
3
+ import { UITemplateComponentType, UITemplateType, } from '@veloceapps/core';
4
4
  import { BehaviorSubject, catchError, map, of, Subject, switchMap, takeUntil, tap } from 'rxjs';
5
5
  import { FLOW_CUSTOMIZATION } from '../../types';
6
6
  import * as i0 from "@angular/core";
7
- import * as i1 from "@veloce/api";
8
- import * as i2 from "@veloce/sdk/core";
9
- import * as i3 from "@veloce/components";
10
- import * as i4 from "@veloce/sdk/cms";
7
+ import * as i1 from "@veloceapps/api";
8
+ import * as i2 from "@veloceapps/sdk/core";
9
+ import * as i3 from "@veloceapps/components";
10
+ import * as i4 from "@veloceapps/sdk/cms";
11
11
  import * as i5 from "@angular/common";
12
12
  export class ShoppingCartComponent {
13
13
  constructor(templatesApi, contextService, cdr, toastService, customizationService) {
@@ -98,9 +98,9 @@ export class ShoppingCartComponent {
98
98
  }));
99
99
  }
100
100
  }
101
- ShoppingCartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ShoppingCartComponent, deps: [{ token: i1.UITemplatesApiService }, { token: i2.ContextService }, { token: i0.ChangeDetectorRef }, { token: i3.ToastService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
102
- ShoppingCartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.15", type: ShoppingCartComponent, selector: "vl-flow-shopping-cart", ngImport: i0, template: "<ng-container *ngIf=\"state$ | async as state\">\n <vl-loader *ngIf=\"state.loading; else content\" [label]=\"'Loading UI'\"></vl-loader>\n\n <ng-template #content>\n <ng-container *ngIf=\"!state.failure\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n </ng-container>\n </ng-template>\n</ng-container>\n", styles: [""], components: [{ type: i3.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }, { type: i4.PreviewComponent, selector: "vl-cms-preview", inputs: ["modelId", "uiDefinition", "clearState"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i5.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
103
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ShoppingCartComponent, decorators: [{
101
+ ShoppingCartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ShoppingCartComponent, deps: [{ token: i1.UITemplatesApiService }, { token: i2.ContextService }, { token: i0.ChangeDetectorRef }, { token: i3.ToastService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
102
+ ShoppingCartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ShoppingCartComponent, selector: "vl-flow-shopping-cart", ngImport: i0, template: "<ng-container *ngIf=\"state$ | async as state\">\n <vl-loader *ngIf=\"state.loading; else content\" [label]=\"'Loading UI'\"></vl-loader>\n\n <ng-template #content>\n <ng-container *ngIf=\"!state.failure\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n </ng-container>\n </ng-template>\n</ng-container>\n", styles: [""], components: [{ type: i3.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }, { type: i4.PreviewComponent, selector: "vl-cms-preview", inputs: ["modelId", "uiDefinition", "clearState"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i5.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
103
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ShoppingCartComponent, decorators: [{
104
104
  type: Component,
105
105
  args: [{
106
106
  selector: 'vl-flow-shopping-cart',
@@ -114,4 +114,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImpo
114
114
  type: Inject,
115
115
  args: [FLOW_CUSTOMIZATION]
116
116
  }] }]; } });
117
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvcHBpbmctY2FydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Nkay9zcmMvcGFnZXMvc2hvcHBpbmctY2FydC9zaG9wcGluZy1jYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3NyYy9wYWdlcy9zaG9wcGluZy1jYXJ0L3Nob3BwaW5nLWNhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsTUFBTSxFQUdOLFFBQVEsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQWdCLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzdELE9BQU8sRUFJTCx1QkFBdUIsRUFDdkIsY0FBYyxHQUNmLE1BQU0sY0FBYyxDQUFDO0FBRXRCLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVHLE9BQU8sRUFBcUIsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7Ozs7Ozs7QUFhcEUsTUFBTSxPQUFPLHFCQUFxQjtJQU9oQyxZQUNVLFlBQW1DLEVBQ25DLGNBQThCLEVBQzlCLEdBQXNCLEVBQ3RCLFlBQTBCLEVBQ2Msb0JBQXdDOztRQUpoRixpQkFBWSxHQUFaLFlBQVksQ0FBdUI7UUFDbkMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQ2MseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFvQjtRQVhuRixpQkFBWSxHQUFrQixTQUFTLENBQUM7UUFDeEMsV0FBTSxHQUFHLElBQUksZUFBZSxDQUFRLEVBQUUsT0FBTyxF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aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEluamVjdCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVJVGVtcGxhdGVzQXBpU2VydmljZSB9IGZyb20gJ0B2ZWxvY2UvYXBpJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSwgVG9hc3RUeXBlIH0gZnJvbSAnQHZlbG9jZS9jb21wb25lbnRzJztcbmltcG9ydCB7XG4gIENvbXBvbmVudEF0dGFjaG1lbnRzLFxuICBUZW1wbGF0ZUNvbXBvbmVudCxcbiAgVUlUZW1wbGF0ZSxcbiAgVUlUZW1wbGF0ZUNvbXBvbmVudFR5cGUsXG4gIFVJVGVtcGxhdGVUeXBlLFxufSBmcm9tICdAdmVsb2NlL2NvcmUnO1xuaW1wb3J0IHsgQ29udGV4dFNlcnZpY2UsIFVJRGVmaW5pdGlvbiB9IGZyb20gJ0B2ZWxvY2Uvc2RrL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjYXRjaEVycm9yLCBtYXAsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGbG93Q3VzdG9taXphdGlvbiwgRkxPV19DVVNUT01JWkFUSU9OIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5pbnRlcmZhY2UgU3RhdGUge1xuICBsb2FkaW5nOiBib29sZWFuO1xuICBmYWlsdXJlOiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2bC1mbG93LXNob3BwaW5nLWNhcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2hvcHBpbmctY2FydC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Nob3BwaW5nLWNhcnQuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNob3BwaW5nQ2FydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHVibGljIHVpRGVmaW5pdGlvbj86IFVJRGVmaW5pdGlvbiA9IHVuZGVmaW5lZDtcbiAgcHVibGljIHN0YXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U3RhdGU+KHsgbG9hZGluZzogdHJ1ZSwgZmFpbHVyZTogZmFsc2UgfSk7XG5cbiAgcHJpdmF0ZSB0ZW1wbGF0ZUFwaU5hbWUgPSAnJztcbiAgcHJpdmF0ZSBkZXN0cm95ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHRlbXBsYXRlc0FwaTogVUlUZW1wbGF0ZXNBcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29udGV4dFNlcnZpY2U6IENvbnRleHRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRkxPV19DVVNUT01JWkFUSU9OKSBwcml2YXRlIGN1c3RvbWl6YXRpb25TZXJ2aWNlPzogRmxvd0N1c3RvbWl6YXRpb24sXG4gICkge1xuICAgIHRoaXMudGVtcGxhdGVBcGlOYW1lID0gdGhpcy5jb250ZXh0U2VydmljZS5yZXNvbHZlKCkucHJvcGVydGllcy5jYXJ0VGVtcGxhdGVBcGlOYW1lID8/ICcnO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5nZW5lcmF0ZVVJRGVmaW5pdGlvbiQoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCh1aURlZiA9PiB7XG4gICAgICAgICAgaWYgKCF1aURlZikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgd2l0aCBuYW1lICcke3RoaXMudGVtcGxhdGVBcGlOYW1lfScgbm90IGZvdW5kLmApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMudWlEZWZpbml0aW9uID0gdWlEZWY7XG4gICAgICAgICAgdGhpcy5zdGF0ZSQubmV4dCh7IGxvYWRpbmc6IGZhbHNlLCBmYWlsdXJlOiBmYWxzZSB9KTtcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gJ0ZhaWxlZCB0byByZXNvbHZlIFNob3BwaW5nIGNhcnQgY29tcG9uZW50LiAnICsgKGVyci5tZXNzYWdlID8/ICcnKTtcbiAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5hZGQoeyBzZXZlcml0eTogVG9hc3RUeXBlLmVycm9yLCBzdW1tYXJ5OiBtZXNzYWdlLCBzdGlja3k6IHRydWUgfSk7XG5cbiAgICAgICAgICB0aGlzLnVpRGVmaW5pdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB0aGlzLnN0YXRlJC5uZXh0KHsgbG9hZGluZzogZmFsc2UsIGZhaWx1cmU6IHRydWUgfSk7XG4gICAgICAgICAgcmV0dXJuIG9mKCk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveWVkJC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95ZWQkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldFRlbXBsYXRlUm9vdENvbXBvbmVudCQodGVtcGxhdGU6IFVJVGVtcGxhdGUpOiBPYnNlcnZhYmxlPFRlbXBsYXRlQ29tcG9uZW50IHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVzQXBpXG4gICAgICAuZmV0Y2hDb21wb25lbnRzJCh0ZW1wbGF0ZS5pZClcbiAgICAgIC5waXBlKG1hcChjb21wb25lbnRzID0+IGNvbXBvbmVudHMuZmluZChjID0+IGMudHlwZSA9PT0gVUlUZW1wbGF0ZUNvbXBvbmVudFR5cGUuUk9PVCkgPz8gdW5kZWZpbmVkKSk7XG4gIH1cblxuICBwcml2YXRlIGdldExvY2FsU2hvcHBpbmdDYXJ0Q29tcG9uZW50TWV0YSQoKTogT2JzZXJ2YWJsZTxDb21wb25lbnRBdHRhY2htZW50cyB8IHVuZGVmaW5lZD4ge1xuICAgIGlmICghdGhpcy5jdXN0b21pemF0aW9uU2VydmljZT8uZ2V0U2hvcHBpbmdDYXJ0Q29tcG9uZW50KSB7XG4gICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jdXN0b21pemF0aW9uU2VydmljZT8uZ2V0U2hvcHBpbmdDYXJ0Q29tcG9uZW50KHRoaXMudGVtcGxhdGVBcGlOYW1lKS5waXBlKFxuICAgICAgbWFwKGNvbXBvbmVudCA9PiB7XG4gICAgICAgIGlmICghY29tcG9uZW50KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDxDb21wb25lbnRBdHRhY2htZW50cz57XG4gICAgICAgICAgaHRtbDogY29tcG9uZW50Lmh0bWwsXG4gICAgICAgICAgY3NzOiBjb21wb25lbnQuY3NzLFxuICAgICAgICAgIGpzOiBjb21wb25lbnQuanMsXG4gICAgICAgICAganNvbjogY29tcG9uZW50Lmpzb24sXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTaG9wcGluZ0NhcnRDb21wb25lbnRNZXRhJCgpIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZXNBcGkuZmV0Y2hUZW1wbGF0ZXMkKCkucGlwZShcbiAgICAgIG1hcDxVSVRlbXBsYXRlW10sIFVJVGVtcGxhdGUgfCB1bmRlZmluZWQ+KHRlbXBsYXRlcyA9PlxuICAgICAgICB0ZW1wbGF0ZXMuZmluZChcbiAgICAgICAgICB0ZW1wbGF0ZSA9PiB0ZW1wbGF0ZS50eXBlID09PSBVSVRlbXBsYXRlVHlwZS5TSE9QUElOR19DQVJUICYmIHRlbXBsYXRlLm5hbWUgPT09IHRoaXMudGVtcGxhdGVBcGlOYW1lLFxuICAgICAgICApLFxuICAgICAgKSxcbiAgICAgIHN3aXRjaE1hcCh0ZW1wbGF0ZSA9PiAodGVtcGxhdGUgPyB0aGlzLmdldFRlbXBsYXRlUm9vdENvbXBvbmVudCQodGVtcGxhdGUpIDogb2YodW5kZWZpbmVkKSkpLFxuICAgICAgc3dpdGNoTWFwKGNvbXBvbmVudCA9PlxuICAgICAgICBjb21wb25lbnQgPyB0aGlzLnRlbXBsYXRlc0FwaS5mZXRjaENvbXBvbmVudEF0dGFjaG1lbnRzJChjb21wb25lbnQudWlUZW1wbGF0ZUlkLCBjb21wb25lbnQpIDogb2YodW5kZWZpbmVkKSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVVSURlZmluaXRpb24kKCk6IE9ic2VydmFibGU8VUlEZWZpbml0aW9uIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIG9mKHVuZGVmaW5lZCkucGlwZShcbiAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy50ZW1wbGF0ZUFwaU5hbWUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGbG93IFF1ZXJ5IHBhcmFtZXRlciAnY2FydFRlbXBsYXRlQXBpTmFtZScgaXMgbWlzc2luZy5cIik7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuZ2V0TG9jYWxTaG9wcGluZ0NhcnRDb21wb25lbnRNZXRhJCgpKSxcbiAgICAgIHN3aXRjaE1hcChtZXRhID0+IChtZXRhID8gb2YobWV0YSkgOiB0aGlzLmdldFNob3BwaW5nQ2FydENvbXBvbmVudE1ldGEkKCkpKSxcbiAgICAgIG1hcChtZXRhID0+IHtcbiAgICAgICAgaWYgKCFtZXRhKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdWlEZWY6IFVJRGVmaW5pdGlvbiA9IHtcbiAgICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgICBjcmVhdGVkVGltZXN0YW1wOiAwLFxuICAgICAgICAgIHByaW1hcnk6IHRydWUsXG4gICAgICAgICAgdHlwZTogJ0RFRkFVTFQnLFxuICAgICAgICAgIHZlcnNpb246IDIsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgICAgICB0ZW1wbGF0ZTogbWV0YS5odG1sICYmIGJ0b2EobWV0YS5odG1sKSxcbiAgICAgICAgICAgICAgc2NyaXB0OiBtZXRhLmpzICYmIGJ0b2EobWV0YS5qcyksXG4gICAgICAgICAgICAgIHN0eWxlczogbWV0YS5jc3MgJiYgYnRvYShtZXRhLmNzcyksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHVpRGVmO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0YXRlJCB8IGFzeW5jIGFzIHN0YXRlXCI+XG4gIDx2bC1sb2FkZXIgKm5nSWY9XCJzdGF0ZS5sb2FkaW5nOyBlbHNlIGNvbnRlbnRcIiBbbGFiZWxdPVwiJ0xvYWRpbmcgVUknXCI+PC92bC1sb2FkZXI+XG5cbiAgPG5nLXRlbXBsYXRlICNjb250ZW50PlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc3RhdGUuZmFpbHVyZVwiPlxuICAgICAgPHZsLWNtcy1wcmV2aWV3IFt1aURlZmluaXRpb25dPVwidWlEZWZpbml0aW9uXCI+PC92bC1jbXMtcHJldmlldz5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvbmctY29udGFpbmVyPlxuIl19
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvcHBpbmctY2FydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Nkay9zcmMvcGFnZXMvc2hvcHBpbmctY2FydC9zaG9wcGluZy1jYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3NyYy9wYWdlcy9zaG9wcGluZy1jYXJ0L3Nob3BwaW5nLWNhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsTUFBTSxFQUdOLFFBQVEsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQWdCLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pFLE9BQU8sRUFJTCx1QkFBdUIsRUFDdkIsY0FBYyxHQUNmLE1BQU0sa0JBQWtCLENBQUM7QUFFMUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUcsT0FBTyxFQUFxQixrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7Ozs7OztBQWFwRSxNQUFNLE9BQU8scUJBQXFCO0lBT2hDLFlBQ1UsWUFBbUMsRUFDbkMsY0FBOEIsRUFDOUIsR0FBc0IsRUFDdEIsWUFBMEIsRUFDYyxvQkFBd0M7O1FBSmhGLGlCQUFZLEdBQVosWUFBWSxDQUF1QjtRQUNuQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDYyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQW9CO1FBWG5GLGlCQUFZLEdBQWtCLFNBQVMsQ0FBQztRQUN4QyxXQUFNLEdBQUcsSUFBSSxlQUFlLENBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBRXRFLG9CQUFlLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLGVBQVUsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBU3ZDLElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBQSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsbUNBQUksRUFBRSxDQUFDO0lBQzVGLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLHFCQUFxQixFQUFFO2FBQ3pCLElBQUksQ0FDSCxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDVixJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLElBQUksQ0FBQyxlQUFlLGNBQWMsQ0FBQyxDQUFDO2FBQzdFO1lBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZELENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTs7WUFDZixNQUFNLE9BQU8sR0FBRyw2Q0FBNkMsR0FBRyxDQUFDLE1BQUEsR0FBRyxDQUFDLE9BQU8sbUNBQUksRUFBRSxDQUFDLENBQUM7WUFDcEYsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBRXJGLElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO1lBQzlCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNwRCxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FDM0I7YUFDQSxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFTyx5QkFBeUIsQ0FBQyxRQUFvQjtRQUNwRCxPQUFPLElBQUksQ0FBQyxZQUFZO2FBQ3JCLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7YUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxXQUFDLE9BQUEsTUFBQSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsbUNBQUksU0FBUyxDQUFBLEVBQUEsQ0FBQyxDQUFDLENBQUM7SUFDekcsQ0FBQztJQUVPLGtDQUFrQzs7UUFDeEMsSUFBSSxDQUFDLENBQUEsTUFBQSxJQUFJLENBQUMsb0JBQW9CLDBDQUFFLHdCQUF3QixDQUFBLEVBQUU7WUFDeEQsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDdEI7UUFFRCxPQUFPLE1BQUEsSUFBSSxDQUFDLG9CQUFvQiwwQ0FBRSx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FDbkYsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDZCxPQUFPO2FBQ1I7WUFFRCxPQUE2QjtnQkFDM0IsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJO2dCQUNwQixHQUFHLEVBQUUsU0FBUyxDQUFDLEdBQUc7Z0JBQ2xCLEVBQUUsRUFBRSxTQUFTLENBQUMsRUFBRTtnQkFDaEIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJO2FBQ3JCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVPLDZCQUE2QjtRQUNuQyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLENBQUMsSUFBSSxDQUM3QyxHQUFHLENBQXVDLFNBQVMsQ0FBQyxFQUFFLENBQ3BELFNBQVMsQ0FBQyxJQUFJLENBQ1osUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLGNBQWMsQ0FBQyxhQUFhLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsZUFBZSxDQUNyRyxDQUNGLEVBQ0QsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFDNUYsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQ3BCLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQywwQkFBMEIsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQzVHLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTyxxQkFBcUI7UUFDM0IsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUN2QixHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1AsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7Z0JBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsd0RBQXdELENBQUMsQ0FBQzthQUMzRTtRQUNILENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0NBQWtDLEVBQUUsQ0FBQyxFQUMxRCxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQyxDQUFDLEVBQzNFLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNULElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ1QsT0FBTzthQUNSO1lBRUQsTUFBTSxLQUFLLEdBQWlCO2dCQUMxQixJQUFJLEVBQUUsRUFBRTtnQkFDUixnQkFBZ0IsRUFBRSxDQUFDO2dCQUNuQixPQUFPLEVBQUUsSUFBSTtnQkFDYixJQUFJLEVBQUUsU0FBUztnQkFDZixPQUFPLEVBQUUsQ0FBQztnQkFDVixRQUFRLEVBQUU7b0JBQ1I7d0JBQ0UsUUFBUSxFQUFFLEVBQUU7d0JBQ1osUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7d0JBQ3RDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO3dCQUNoQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztxQkFDbkM7aUJBQ0Y7YUFDRixDQUFDO1lBRUYsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzs7bUhBeEhVLHFCQUFxQixrSkFZVixrQkFBa0I7dUdBWjdCLHFCQUFxQiw2RENqQ2xDLHdWQVNBOzRGRHdCYSxxQkFBcUI7a0JBTmpDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHVCQUF1QjtvQkFDakMsV0FBVyxFQUFFLGdDQUFnQztvQkFDN0MsU0FBUyxFQUFFLENBQUMsZ0NBQWdDLENBQUM7b0JBQzdDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRDs7MEJBYUksUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgSW5qZWN0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVUlUZW1wbGF0ZXNBcGlTZXJ2aWNlIH0gZnJvbSAnQHZlbG9jZWFwcHMvYXBpJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSwgVG9hc3RUeXBlIH0gZnJvbSAnQHZlbG9jZWFwcHMvY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBDb21wb25lbnRBdHRhY2htZW50cyxcbiAgVGVtcGxhdGVDb21wb25lbnQsXG4gIFVJVGVtcGxhdGUsXG4gIFVJVGVtcGxhdGVDb21wb25lbnRUeXBlLFxuICBVSVRlbXBsYXRlVHlwZSxcbn0gZnJvbSAnQHZlbG9jZWFwcHMvY29yZSc7XG5pbXBvcnQgeyBDb250ZXh0U2VydmljZSwgVUlEZWZpbml0aW9uIH0gZnJvbSAnQHZlbG9jZWFwcHMvc2RrL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjYXRjaEVycm9yLCBtYXAsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGbG93Q3VzdG9taXphdGlvbiwgRkxPV19DVVNUT01JWkFUSU9OIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5pbnRlcmZhY2UgU3RhdGUge1xuICBsb2FkaW5nOiBib29sZWFuO1xuICBmYWlsdXJlOiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2bC1mbG93LXNob3BwaW5nLWNhcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2hvcHBpbmctY2FydC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Nob3BwaW5nLWNhcnQuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNob3BwaW5nQ2FydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHVibGljIHVpRGVmaW5pdGlvbj86IFVJRGVmaW5pdGlvbiA9IHVuZGVmaW5lZDtcbiAgcHVibGljIHN0YXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U3RhdGU+KHsgbG9hZGluZzogdHJ1ZSwgZmFpbHVyZTogZmFsc2UgfSk7XG5cbiAgcHJpdmF0ZSB0ZW1wbGF0ZUFwaU5hbWUgPSAnJztcbiAgcHJpdmF0ZSBkZXN0cm95ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHRlbXBsYXRlc0FwaTogVUlUZW1wbGF0ZXNBcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29udGV4dFNlcnZpY2U6IENvbnRleHRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRkxPV19DVVNUT01JWkFUSU9OKSBwcml2YXRlIGN1c3RvbWl6YXRpb25TZXJ2aWNlPzogRmxvd0N1c3RvbWl6YXRpb24sXG4gICkge1xuICAgIHRoaXMudGVtcGxhdGVBcGlOYW1lID0gdGhpcy5jb250ZXh0U2VydmljZS5yZXNvbHZlKCkucHJvcGVydGllcy5jYXJ0VGVtcGxhdGVBcGlOYW1lID8/ICcnO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5nZW5lcmF0ZVVJRGVmaW5pdGlvbiQoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCh1aURlZiA9PiB7XG4gICAgICAgICAgaWYgKCF1aURlZikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgd2l0aCBuYW1lICcke3RoaXMudGVtcGxhdGVBcGlOYW1lfScgbm90IGZvdW5kLmApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMudWlEZWZpbml0aW9uID0gdWlEZWY7XG4gICAgICAgICAgdGhpcy5zdGF0ZSQubmV4dCh7IGxvYWRpbmc6IGZhbHNlLCBmYWlsdXJlOiBmYWxzZSB9KTtcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gJ0ZhaWxlZCB0byByZXNvbHZlIFNob3BwaW5nIGNhcnQgY29tcG9uZW50LiAnICsgKGVyci5tZXNzYWdlID8/ICcnKTtcbiAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5hZGQoeyBzZXZlcml0eTogVG9hc3RUeXBlLmVycm9yLCBzdW1tYXJ5OiBtZXNzYWdlLCBzdGlja3k6IHRydWUgfSk7XG5cbiAgICAgICAgICB0aGlzLnVpRGVmaW5pdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB0aGlzLnN0YXRlJC5uZXh0KHsgbG9hZGluZzogZmFsc2UsIGZhaWx1cmU6IHRydWUgfSk7XG4gICAgICAgICAgcmV0dXJuIG9mKCk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveWVkJC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95ZWQkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldFRlbXBsYXRlUm9vdENvbXBvbmVudCQodGVtcGxhdGU6IFVJVGVtcGxhdGUpOiBPYnNlcnZhYmxlPFRlbXBsYXRlQ29tcG9uZW50IHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVzQXBpXG4gICAgICAuZmV0Y2hDb21wb25lbnRzJCh0ZW1wbGF0ZS5pZClcbiAgICAgIC5waXBlKG1hcChjb21wb25lbnRzID0+IGNvbXBvbmVudHMuZmluZChjID0+IGMudHlwZSA9PT0gVUlUZW1wbGF0ZUNvbXBvbmVudFR5cGUuUk9PVCkgPz8gdW5kZWZpbmVkKSk7XG4gIH1cblxuICBwcml2YXRlIGdldExvY2FsU2hvcHBpbmdDYXJ0Q29tcG9uZW50TWV0YSQoKTogT2JzZXJ2YWJsZTxDb21wb25lbnRBdHRhY2htZW50cyB8IHVuZGVmaW5lZD4ge1xuICAgIGlmICghdGhpcy5jdXN0b21pemF0aW9uU2VydmljZT8uZ2V0U2hvcHBpbmdDYXJ0Q29tcG9uZW50KSB7XG4gICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jdXN0b21pemF0aW9uU2VydmljZT8uZ2V0U2hvcHBpbmdDYXJ0Q29tcG9uZW50KHRoaXMudGVtcGxhdGVBcGlOYW1lKS5waXBlKFxuICAgICAgbWFwKGNvbXBvbmVudCA9PiB7XG4gICAgICAgIGlmICghY29tcG9uZW50KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDxDb21wb25lbnRBdHRhY2htZW50cz57XG4gICAgICAgICAgaHRtbDogY29tcG9uZW50Lmh0bWwsXG4gICAgICAgICAgY3NzOiBjb21wb25lbnQuY3NzLFxuICAgICAgICAgIGpzOiBjb21wb25lbnQuanMsXG4gICAgICAgICAganNvbjogY29tcG9uZW50Lmpzb24sXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTaG9wcGluZ0NhcnRDb21wb25lbnRNZXRhJCgpIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZXNBcGkuZmV0Y2hUZW1wbGF0ZXMkKCkucGlwZShcbiAgICAgIG1hcDxVSVRlbXBsYXRlW10sIFVJVGVtcGxhdGUgfCB1bmRlZmluZWQ+KHRlbXBsYXRlcyA9PlxuICAgICAgICB0ZW1wbGF0ZXMuZmluZChcbiAgICAgICAgICB0ZW1wbGF0ZSA9PiB0ZW1wbGF0ZS50eXBlID09PSBVSVRlbXBsYXRlVHlwZS5TSE9QUElOR19DQVJUICYmIHRlbXBsYXRlLm5hbWUgPT09IHRoaXMudGVtcGxhdGVBcGlOYW1lLFxuICAgICAgICApLFxuICAgICAgKSxcbiAgICAgIHN3aXRjaE1hcCh0ZW1wbGF0ZSA9PiAodGVtcGxhdGUgPyB0aGlzLmdldFRlbXBsYXRlUm9vdENvbXBvbmVudCQodGVtcGxhdGUpIDogb2YodW5kZWZpbmVkKSkpLFxuICAgICAgc3dpdGNoTWFwKGNvbXBvbmVudCA9PlxuICAgICAgICBjb21wb25lbnQgPyB0aGlzLnRlbXBsYXRlc0FwaS5mZXRjaENvbXBvbmVudEF0dGFjaG1lbnRzJChjb21wb25lbnQudWlUZW1wbGF0ZUlkLCBjb21wb25lbnQpIDogb2YodW5kZWZpbmVkKSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVVSURlZmluaXRpb24kKCk6IE9ic2VydmFibGU8VUlEZWZpbml0aW9uIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIG9mKHVuZGVmaW5lZCkucGlwZShcbiAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy50ZW1wbGF0ZUFwaU5hbWUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGbG93IFF1ZXJ5IHBhcmFtZXRlciAnY2FydFRlbXBsYXRlQXBpTmFtZScgaXMgbWlzc2luZy5cIik7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuZ2V0TG9jYWxTaG9wcGluZ0NhcnRDb21wb25lbnRNZXRhJCgpKSxcbiAgICAgIHN3aXRjaE1hcChtZXRhID0+IChtZXRhID8gb2YobWV0YSkgOiB0aGlzLmdldFNob3BwaW5nQ2FydENvbXBvbmVudE1ldGEkKCkpKSxcbiAgICAgIG1hcChtZXRhID0+IHtcbiAgICAgICAgaWYgKCFtZXRhKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdWlEZWY6IFVJRGVmaW5pdGlvbiA9IHtcbiAgICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgICBjcmVhdGVkVGltZXN0YW1wOiAwLFxuICAgICAgICAgIHByaW1hcnk6IHRydWUsXG4gICAgICAgICAgdHlwZTogJ0RFRkFVTFQnLFxuICAgICAgICAgIHZlcnNpb246IDIsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgICAgICB0ZW1wbGF0ZTogbWV0YS5odG1sICYmIGJ0b2EobWV0YS5odG1sKSxcbiAgICAgICAgICAgICAgc2NyaXB0OiBtZXRhLmpzICYmIGJ0b2EobWV0YS5qcyksXG4gICAgICAgICAgICAgIHN0eWxlczogbWV0YS5jc3MgJiYgYnRvYShtZXRhLmNzcyksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHVpRGVmO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0YXRlJCB8IGFzeW5jIGFzIHN0YXRlXCI+XG4gIDx2bC1sb2FkZXIgKm5nSWY9XCJzdGF0ZS5sb2FkaW5nOyBlbHNlIGNvbnRlbnRcIiBbbGFiZWxdPVwiJ0xvYWRpbmcgVUknXCI+PC92bC1sb2FkZXI+XG5cbiAgPG5nLXRlbXBsYXRlICNjb250ZW50PlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc3RhdGUuZmFpbHVyZVwiPlxuICAgICAgPHZsLWNtcy1wcmV2aWV3IFt1aURlZmluaXRpb25dPVwidWlEZWZpbml0aW9uXCI+PC92bC1jbXMtcHJldmlldz5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvbmctY29udGFpbmVyPlxuIl19
@@ -1,15 +1,15 @@
1
1
  import { CommonModule } from '@angular/common';
2
2
  import { NgModule } from '@angular/core';
3
- import { LoaderModule } from '@veloce/components';
4
- import { PreviewModule } from '@veloce/sdk/cms';
3
+ import { LoaderModule } from '@veloceapps/components';
4
+ import { PreviewModule } from '@veloceapps/sdk/cms';
5
5
  import { ShoppingCartComponent } from './shopping-cart.component';
6
6
  import * as i0 from "@angular/core";
7
7
  export class ShoppingCartModule {
8
8
  }
9
- ShoppingCartModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ShoppingCartModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
10
- ShoppingCartModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ShoppingCartModule, declarations: [ShoppingCartComponent], imports: [CommonModule, PreviewModule, LoaderModule], exports: [ShoppingCartComponent] });
11
- ShoppingCartModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ShoppingCartModule, imports: [[CommonModule, PreviewModule, LoaderModule]] });
12
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ShoppingCartModule, decorators: [{
9
+ ShoppingCartModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ShoppingCartModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
10
+ ShoppingCartModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ShoppingCartModule, declarations: [ShoppingCartComponent], imports: [CommonModule, PreviewModule, LoaderModule], exports: [ShoppingCartComponent] });
11
+ ShoppingCartModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ShoppingCartModule, imports: [[CommonModule, PreviewModule, LoaderModule]] });
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ShoppingCartModule, decorators: [{
13
13
  type: NgModule,
14
14
  args: [{
15
15
  declarations: [ShoppingCartComponent],
@@ -17,4 +17,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImpo
17
17
  exports: [ShoppingCartComponent],
18
18
  }]
19
19
  }] });
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvcHBpbmctY2FydC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Nkay9zcmMvcGFnZXMvc2hvcHBpbmctY2FydC9zaG9wcGluZy1jYXJ0Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOztBQU9sRSxNQUFNLE9BQU8sa0JBQWtCOztnSEFBbEIsa0JBQWtCO2lIQUFsQixrQkFBa0IsaUJBSmQscUJBQXFCLGFBQzFCLFlBQVksRUFBRSxhQUFhLEVBQUUsWUFBWSxhQUN6QyxxQkFBcUI7aUhBRXBCLGtCQUFrQixZQUhwQixDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsWUFBWSxDQUFDOzRGQUd6QyxrQkFBa0I7a0JBTDlCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMscUJBQXFCLENBQUM7b0JBQ3JDLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsWUFBWSxDQUFDO29CQUNwRCxPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztpQkFDakMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvYWRlck1vZHVsZSB9IGZyb20gJ0B2ZWxvY2UvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBQcmV2aWV3TW9kdWxlIH0gZnJvbSAnQHZlbG9jZS9zZGsvY21zJztcbmltcG9ydCB7IFNob3BwaW5nQ2FydENvbXBvbmVudCB9IGZyb20gJy4vc2hvcHBpbmctY2FydC5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtTaG9wcGluZ0NhcnRDb21wb25lbnRdLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBQcmV2aWV3TW9kdWxlLCBMb2FkZXJNb2R1bGVdLFxuICBleHBvcnRzOiBbU2hvcHBpbmdDYXJ0Q29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgU2hvcHBpbmdDYXJ0TW9kdWxlIHt9XG4iXX0=
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvcHBpbmctY2FydC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Nkay9zcmMvcGFnZXMvc2hvcHBpbmctY2FydC9zaG9wcGluZy1jYXJ0Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOztBQU9sRSxNQUFNLE9BQU8sa0JBQWtCOztnSEFBbEIsa0JBQWtCO2lIQUFsQixrQkFBa0IsaUJBSmQscUJBQXFCLGFBQzFCLFlBQVksRUFBRSxhQUFhLEVBQUUsWUFBWSxhQUN6QyxxQkFBcUI7aUhBRXBCLGtCQUFrQixZQUhwQixDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsWUFBWSxDQUFDOzRGQUd6QyxrQkFBa0I7a0JBTDlCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMscUJBQXFCLENBQUM7b0JBQ3JDLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsWUFBWSxDQUFDO29CQUNwRCxPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztpQkFDakMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvYWRlck1vZHVsZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgUHJldmlld01vZHVsZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL3Nkay9jbXMnO1xuaW1wb3J0IHsgU2hvcHBpbmdDYXJ0Q29tcG9uZW50IH0gZnJvbSAnLi9zaG9wcGluZy1jYXJ0LmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1Nob3BwaW5nQ2FydENvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFByZXZpZXdNb2R1bGUsIExvYWRlck1vZHVsZV0sXG4gIGV4cG9ydHM6IFtTaG9wcGluZ0NhcnRDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBTaG9wcGluZ0NhcnRNb2R1bGUge31cbiJdfQ==