@veloceapps/sdk 4.0.21-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (375) hide show
  1. package/README.md +3 -0
  2. package/bundles/veloceapps-sdk-cms.umd.js +1946 -0
  3. package/bundles/veloceapps-sdk-cms.umd.js.map +1 -0
  4. package/bundles/veloceapps-sdk-core.umd.js +1671 -0
  5. package/bundles/veloceapps-sdk-core.umd.js.map +1 -0
  6. package/bundles/veloceapps-sdk-runtime.umd.js +4414 -0
  7. package/bundles/veloceapps-sdk-runtime.umd.js.map +1 -0
  8. package/bundles/veloceapps-sdk.umd.js +3043 -0
  9. package/bundles/veloceapps-sdk.umd.js.map +1 -0
  10. package/cms/cms.actions.d.ts +22 -0
  11. package/cms/cms.default.d.ts +5 -0
  12. package/cms/cms.elements.d.ts +4 -0
  13. package/cms/components/element-children/element-children.component.d.ts +10 -0
  14. package/cms/components/element-children/element-children.module.d.ts +8 -0
  15. package/cms/components/element-renderer/element-renderer.component.d.ts +35 -0
  16. package/cms/components/element-renderer/element-renderer.module.d.ts +7 -0
  17. package/cms/components/element.component.d.ts +17 -0
  18. package/cms/components/index.d.ts +1 -0
  19. package/cms/components/plugin.component.d.ts +15 -0
  20. package/cms/components/preview/index.d.ts +2 -0
  21. package/cms/components/preview/preview.component.d.ts +34 -0
  22. package/cms/components/preview/preview.module.d.ts +11 -0
  23. package/cms/decorators/element.decorator.d.ts +2 -0
  24. package/cms/decorators/index.d.ts +1 -0
  25. package/cms/directives/custom-template.directive.d.ts +12 -0
  26. package/cms/engine/models/entity.d.ts +11 -0
  27. package/cms/engine/models/plugin.d.ts +5 -0
  28. package/cms/index.d.ts +11 -0
  29. package/cms/injection-tokens.d.ts +11 -0
  30. package/cms/launcher.module.d.ts +10 -0
  31. package/cms/modules/federated/default-options.d.ts +4 -0
  32. package/cms/modules/federated/export.d.ts +1 -0
  33. package/cms/modules/federated/federated.component.d.ts +26 -0
  34. package/cms/modules/federated/federated.module.d.ts +9 -0
  35. package/cms/modules/federated/federated.types.d.ts +30 -0
  36. package/cms/modules/federated/federated.utils.d.ts +1 -0
  37. package/cms/package.json +10 -0
  38. package/cms/plugins/configuration.plugin.d.ts +23 -0
  39. package/cms/plugins/io.plugin.d.ts +9 -0
  40. package/cms/plugins/script.plugin.d.ts +13 -0
  41. package/cms/services/dynamic-module.service.d.ts +15 -0
  42. package/cms/services/element-context.service.d.ts +8 -0
  43. package/cms/services/index.d.ts +3 -0
  44. package/cms/services/integration.state.d.ts +17 -0
  45. package/cms/services/io-provider.service.d.ts +15 -0
  46. package/cms/services/launcher.service.d.ts +18 -0
  47. package/cms/services/templates.service.d.ts +14 -0
  48. package/cms/types/common.types.d.ts +103 -0
  49. package/cms/types/configuration.types.d.ts +20 -0
  50. package/cms/types/elements.types.d.ts +2 -0
  51. package/cms/types/index.d.ts +5 -0
  52. package/cms/types/integration.types.d.ts +4 -0
  53. package/cms/types/path.types.d.ts +11 -0
  54. package/cms/utils/element.utils.d.ts +15 -0
  55. package/cms/utils/elements-resolver.d.ts +20 -0
  56. package/cms/utils/index.d.ts +3 -0
  57. package/cms/utils/path.utils.d.ts +5 -0
  58. package/cms/veloceapps-sdk-cms.d.ts +5 -0
  59. package/cms/vendor-map.d.ts +707 -0
  60. package/core/core.module.d.ts +8 -0
  61. package/core/index.d.ts +6 -0
  62. package/core/modules/configuration/configuration.module.d.ts +7 -0
  63. package/core/modules/configuration/helpers.d.ts +3 -0
  64. package/core/modules/configuration/index.d.ts +4 -0
  65. package/core/modules/configuration/services/configuration-runtime.service.d.ts +29 -0
  66. package/core/modules/configuration/services/configuration.service.d.ts +45 -0
  67. package/core/modules/configuration/services/runtime-context.service.d.ts +12 -0
  68. package/core/modules/configuration/types/configuration-runtime.types.d.ts +7 -0
  69. package/core/modules/flow-configuration/flow-configuration.module.d.ts +6 -0
  70. package/core/modules/flow-configuration/index.d.ts +4 -0
  71. package/core/modules/flow-configuration/services/flow-configuration.service.d.ts +38 -0
  72. package/core/modules/flow-configuration/services/flow-update.service.d.ts +12 -0
  73. package/core/modules/flow-configuration/types/update.types.d.ts +12 -0
  74. package/core/modules/index.d.ts +2 -0
  75. package/core/package.json +10 -0
  76. package/core/services/context.service.d.ts +18 -0
  77. package/core/services/index.d.ts +3 -0
  78. package/core/services/product-images.service.d.ts +12 -0
  79. package/core/services/quote-draft.service.d.ts +60 -0
  80. package/core/types/index.d.ts +3 -0
  81. package/core/types/quote-states.types.d.ts +6 -0
  82. package/core/types/runtime.types.d.ts +31 -0
  83. package/core/types/ui-definition.types.d.ts +26 -0
  84. package/core/utils/index.d.ts +2 -0
  85. package/core/utils/line-item.utils.d.ts +26 -0
  86. package/core/utils/line-item.worker.d.ts +12 -0
  87. package/core/veloceapps-sdk-core.d.ts +5 -0
  88. package/esm2015/cms/cms.actions.js +37 -0
  89. package/esm2015/cms/cms.default.js +6 -0
  90. package/esm2015/cms/cms.elements.js +29 -0
  91. package/esm2015/cms/components/element-children/element-children.component.js +23 -0
  92. package/esm2015/cms/components/element-children/element-children.module.js +18 -0
  93. package/esm2015/cms/components/element-renderer/element-renderer.component.js +143 -0
  94. package/esm2015/cms/components/element-renderer/element-renderer.module.js +16 -0
  95. package/esm2015/cms/components/element.component.js +44 -0
  96. package/esm2015/cms/components/index.js +2 -0
  97. package/esm2015/cms/components/plugin.component.js +16 -0
  98. package/esm2015/cms/components/preview/index.js +3 -0
  99. package/esm2015/cms/components/preview/preview.component.js +105 -0
  100. package/esm2015/cms/components/preview/preview.module.js +23 -0
  101. package/esm2015/cms/decorators/element.decorator.js +6 -0
  102. package/esm2015/cms/decorators/index.js +2 -0
  103. package/esm2015/cms/directives/custom-template.directive.js +25 -0
  104. package/esm2015/cms/engine/models/entity.js +18 -0
  105. package/esm2015/cms/engine/models/plugin.js +6 -0
  106. package/esm2015/cms/index.js +11 -0
  107. package/esm2015/cms/injection-tokens.js +8 -0
  108. package/esm2015/cms/launcher.module.js +23 -0
  109. package/esm2015/cms/modules/federated/default-options.js +5 -0
  110. package/esm2015/cms/modules/federated/export.js +2 -0
  111. package/esm2015/cms/modules/federated/federated.component.js +82 -0
  112. package/esm2015/cms/modules/federated/federated.module.js +19 -0
  113. package/esm2015/cms/modules/federated/federated.types.js +2 -0
  114. package/esm2015/cms/modules/federated/federated.utils.js +37 -0
  115. package/esm2015/cms/plugins/configuration.plugin.js +98 -0
  116. package/esm2015/cms/plugins/io.plugin.js +37 -0
  117. package/esm2015/cms/plugins/script.plugin.js +66 -0
  118. package/esm2015/cms/services/dynamic-module.service.js +33 -0
  119. package/esm2015/cms/services/element-context.service.js +10 -0
  120. package/esm2015/cms/services/index.js +4 -0
  121. package/esm2015/cms/services/integration.state.js +40 -0
  122. package/esm2015/cms/services/io-provider.service.js +51 -0
  123. package/esm2015/cms/services/launcher.service.js +57 -0
  124. package/esm2015/cms/services/templates.service.js +31 -0
  125. package/esm2015/cms/types/common.types.js +2 -0
  126. package/esm2015/cms/types/configuration.types.js +2 -0
  127. package/esm2015/cms/types/elements.types.js +2 -0
  128. package/esm2015/cms/types/index.js +6 -0
  129. package/esm2015/cms/types/integration.types.js +2 -0
  130. package/esm2015/cms/types/path.types.js +2 -0
  131. package/esm2015/cms/utils/element.utils.js +149 -0
  132. package/esm2015/cms/utils/elements-resolver.js +108 -0
  133. package/esm2015/cms/utils/index.js +4 -0
  134. package/esm2015/cms/utils/path.utils.js +67 -0
  135. package/esm2015/cms/veloceapps-sdk-cms.js +5 -0
  136. package/esm2015/cms/vendor-map.js +39 -0
  137. package/esm2015/core/core.module.js +18 -0
  138. package/esm2015/core/index.js +7 -0
  139. package/esm2015/core/modules/configuration/configuration.module.js +34 -0
  140. package/esm2015/core/modules/configuration/helpers.js +10 -0
  141. package/esm2015/core/modules/configuration/index.js +5 -0
  142. package/esm2015/core/modules/configuration/services/configuration-runtime.service.js +92 -0
  143. package/esm2015/core/modules/configuration/services/configuration.service.js +173 -0
  144. package/esm2015/core/modules/configuration/services/runtime-context.service.js +51 -0
  145. package/esm2015/core/modules/configuration/types/configuration-runtime.types.js +2 -0
  146. package/esm2015/core/modules/flow-configuration/flow-configuration.module.js +18 -0
  147. package/esm2015/core/modules/flow-configuration/index.js +5 -0
  148. package/esm2015/core/modules/flow-configuration/services/flow-configuration.service.js +135 -0
  149. package/esm2015/core/modules/flow-configuration/services/flow-update.service.js +129 -0
  150. package/esm2015/core/modules/flow-configuration/types/update.types.js +2 -0
  151. package/esm2015/core/modules/index.js +3 -0
  152. package/esm2015/core/services/context.service.js +50 -0
  153. package/esm2015/core/services/index.js +4 -0
  154. package/esm2015/core/services/product-images.service.js +30 -0
  155. package/esm2015/core/services/quote-draft.service.js +201 -0
  156. package/esm2015/core/types/index.js +4 -0
  157. package/esm2015/core/types/quote-states.types.js +2 -0
  158. package/esm2015/core/types/runtime.types.js +16 -0
  159. package/esm2015/core/types/ui-definition.types.js +2 -0
  160. package/esm2015/core/utils/index.js +3 -0
  161. package/esm2015/core/utils/line-item.utils.js +100 -0
  162. package/esm2015/core/utils/line-item.worker.js +19 -0
  163. package/esm2015/core/veloceapps-sdk-core.js +5 -0
  164. package/esm2015/index.js +2 -0
  165. package/esm2015/runtime/components/component-preview/component-preview.component.js +125 -0
  166. package/esm2015/runtime/components/index.js +5 -0
  167. package/esm2015/runtime/components/section-renderer/section-renderer.component.js +71 -0
  168. package/esm2015/runtime/components/ui-runtime/runtime.component.js +427 -0
  169. package/esm2015/runtime/components/ui-runtime-preview/runtime-preview.component.js +109 -0
  170. package/esm2015/runtime/execution/components/children-placeholder/children-placeholder.component.js +68 -0
  171. package/esm2015/runtime/execution/components/context-provider/context-provider.component.js +36 -0
  172. package/esm2015/runtime/execution/components/execution-section-renderer/execution-section-renderer.component.js +72 -0
  173. package/esm2015/runtime/execution/components/federated/federated.component.js +81 -0
  174. package/esm2015/runtime/execution/components/velo-attribute/velo-attribute.component.js +65 -0
  175. package/esm2015/runtime/execution/components/velo-multiselect/velo-multiselect.component.js +136 -0
  176. package/esm2015/runtime/execution/components/velo-port-checkbox/velo-port-checkbox.component.js +80 -0
  177. package/esm2015/runtime/execution/components/velo-port-dropdown/velo-port-dropdown.component.js +101 -0
  178. package/esm2015/runtime/execution/components/velo-port-radio/velo-port-radio.component.js +150 -0
  179. package/esm2015/runtime/execution/components/velo-type/velo-type.component.js +121 -0
  180. package/esm2015/runtime/execution/directives/section-script.directive.js +242 -0
  181. package/esm2015/runtime/execution/directives/sf-query.directive.js +34 -0
  182. package/esm2015/runtime/execution/directives/velo-attribute.directive.js +86 -0
  183. package/esm2015/runtime/execution/directives/velo-port.directive.js +373 -0
  184. package/esm2015/runtime/execution/directives/vl-approval.directive.js +22 -0
  185. package/esm2015/runtime/execution/directives/vl-document-attachments.directive.js +35 -0
  186. package/esm2015/runtime/execution/directives/vl-document-templates.directive.js +59 -0
  187. package/esm2015/runtime/execution/directives/vl-quote.directive.js +41 -0
  188. package/esm2015/runtime/execution/directives/vl-ramp.directive.js +51 -0
  189. package/esm2015/runtime/execution/runtime-execution.module.js +163 -0
  190. package/esm2015/runtime/execution/utils/federated.util.js +37 -0
  191. package/esm2015/runtime/index.js +5 -0
  192. package/esm2015/runtime/runtime.module.js +104 -0
  193. package/esm2015/runtime/services/cart.service.js +27 -0
  194. package/esm2015/runtime/services/collapsible-state.service.js +34 -0
  195. package/esm2015/runtime/services/configuration.service.js +102 -0
  196. package/esm2015/runtime/services/current-state.service.js +17 -0
  197. package/esm2015/runtime/services/form-scope.service.js +30 -0
  198. package/esm2015/runtime/services/index.js +4 -0
  199. package/esm2015/runtime/services/product-model-cache.service.js +30 -0
  200. package/esm2015/runtime/services/runtime-context.service.js +56 -0
  201. package/esm2015/runtime/services/runtime-form.service.js +224 -0
  202. package/esm2015/runtime/services/runtime.service.js +108 -0
  203. package/esm2015/runtime/services/section-helper.service.js +27 -0
  204. package/esm2015/runtime/services/section-scope.service.js +36 -0
  205. package/esm2015/runtime/services/section-store.service.js +22 -0
  206. package/esm2015/runtime/services/section.service.js +124 -0
  207. package/esm2015/runtime/types/bound-data.types.js +7 -0
  208. package/esm2015/runtime/types/index.js +2 -0
  209. package/esm2015/runtime/types/runtime.types.js +2 -0
  210. package/esm2015/runtime/types/script-registry.types.js +51 -0
  211. package/esm2015/runtime/utils/line-item.util.js +273 -0
  212. package/esm2015/runtime/utils/section.utils.js +26 -0
  213. package/esm2015/runtime/utils/sections-binder.helper.js +105 -0
  214. package/esm2015/runtime/veloceapps-sdk-runtime.js +5 -0
  215. package/esm2015/src/components/dialog/dialog.component.js +30 -0
  216. package/esm2015/src/components/dialog/dialog.module.js +19 -0
  217. package/esm2015/src/components/dialog/dialog.types.js +2 -0
  218. package/esm2015/src/components/doc-gen/doc-gen.component.js +109 -0
  219. package/esm2015/src/components/doc-gen/doc-gen.module.js +19 -0
  220. package/esm2015/src/components/header/cart-overlay/cart-preview.component.js +122 -0
  221. package/esm2015/src/components/header/cart-overlay/cart-preview.module.js +46 -0
  222. package/esm2015/src/components/header/header.component.js +284 -0
  223. package/esm2015/src/components/header/header.module.js +46 -0
  224. package/esm2015/src/components/header/header.types.js +2 -0
  225. package/esm2015/src/constants.js +2 -0
  226. package/esm2015/src/flow-routing.module.js +137 -0
  227. package/esm2015/src/flow.component.js +45 -0
  228. package/esm2015/src/flow.module.js +60 -0
  229. package/esm2015/src/guards/context.guard.js +84 -0
  230. package/esm2015/src/guards/index.js +2 -0
  231. package/esm2015/src/guards/product-unload.guard.js +43 -0
  232. package/esm2015/src/guards/root.guard.js +41 -0
  233. package/esm2015/src/index.js +7 -0
  234. package/esm2015/src/pages/catalog/catalog.component.js +117 -0
  235. package/esm2015/src/pages/catalog/catalog.module.js +20 -0
  236. package/esm2015/src/pages/debug/debug.component.js +61 -0
  237. package/esm2015/src/pages/debug/debug.module.js +48 -0
  238. package/esm2015/src/pages/empty-account/empty-account.component.js +17 -0
  239. package/esm2015/src/pages/empty-account/empty-account.module.js +20 -0
  240. package/esm2015/src/pages/legacy-product/legacy-product.component.js +132 -0
  241. package/esm2015/src/pages/legacy-product/legacy-product.module.js +21 -0
  242. package/esm2015/src/pages/product/product.component.js +108 -0
  243. package/esm2015/src/pages/product/product.module.js +20 -0
  244. package/esm2015/src/pages/record-not-found/record-not-found.component.js +29 -0
  245. package/esm2015/src/pages/record-not-found/record-not-found.module.js +20 -0
  246. package/esm2015/src/pages/remote/remote.component.js +353 -0
  247. package/esm2015/src/pages/remote/remote.module.js +20 -0
  248. package/esm2015/src/pages/remote/remote.types.js +2 -0
  249. package/esm2015/src/pages/shopping-cart/shopping-cart.component.js +117 -0
  250. package/esm2015/src/pages/shopping-cart/shopping-cart.module.js +20 -0
  251. package/esm2015/src/resolvers/flow.resolver.js +62 -0
  252. package/esm2015/src/resolvers/quote.resolver.js +74 -0
  253. package/esm2015/src/services/doc-gen.service.js +33 -0
  254. package/esm2015/src/services/flow-dialog.service.js +123 -0
  255. package/esm2015/src/services/flow-router.service.js +124 -0
  256. package/esm2015/src/services/flow.service.js +71 -0
  257. package/esm2015/src/services/index.js +2 -0
  258. package/esm2015/src/types/context-route.types.js +2 -0
  259. package/esm2015/src/types/flow-customization.types.js +3 -0
  260. package/esm2015/src/types/index.js +3 -0
  261. package/esm2015/src/types/route.types.js +2 -0
  262. package/esm2015/src/utils/flow.utils.js +22 -0
  263. package/esm2015/src/utils/index.js +2 -0
  264. package/esm2015/veloceapps-sdk.js +5 -0
  265. package/fesm2015/veloceapps-sdk-cms.js +1357 -0
  266. package/fesm2015/veloceapps-sdk-cms.js.map +1 -0
  267. package/fesm2015/veloceapps-sdk-core.js +1029 -0
  268. package/fesm2015/veloceapps-sdk-core.js.map +1 -0
  269. package/fesm2015/veloceapps-sdk-runtime.js +3894 -0
  270. package/fesm2015/veloceapps-sdk-runtime.js.map +1 -0
  271. package/fesm2015/veloceapps-sdk.js +2449 -0
  272. package/fesm2015/veloceapps-sdk.js.map +1 -0
  273. package/index.d.ts +1 -0
  274. package/package.json +50 -0
  275. package/runtime/components/component-preview/component-preview.component.d.ts +27 -0
  276. package/runtime/components/index.d.ts +4 -0
  277. package/runtime/components/section-renderer/section-renderer.component.d.ts +25 -0
  278. package/runtime/components/ui-runtime/runtime.component.d.ts +53 -0
  279. package/runtime/components/ui-runtime-preview/runtime-preview.component.d.ts +27 -0
  280. package/runtime/execution/components/children-placeholder/children-placeholder.component.d.ts +30 -0
  281. package/runtime/execution/components/context-provider/context-provider.component.d.ts +14 -0
  282. package/runtime/execution/components/execution-section-renderer/execution-section-renderer.component.d.ts +25 -0
  283. package/runtime/execution/components/federated/federated.component.d.ts +36 -0
  284. package/runtime/execution/components/velo-attribute/velo-attribute.component.d.ts +19 -0
  285. package/runtime/execution/components/velo-multiselect/velo-multiselect.component.d.ts +35 -0
  286. package/runtime/execution/components/velo-port-checkbox/velo-port-checkbox.component.d.ts +22 -0
  287. package/runtime/execution/components/velo-port-dropdown/velo-port-dropdown.component.d.ts +22 -0
  288. package/runtime/execution/components/velo-port-radio/velo-port-radio.component.d.ts +28 -0
  289. package/runtime/execution/components/velo-type/velo-type.component.d.ts +31 -0
  290. package/runtime/execution/directives/section-script.directive.d.ts +59 -0
  291. package/runtime/execution/directives/sf-query.directive.d.ts +15 -0
  292. package/runtime/execution/directives/velo-attribute.directive.d.ts +26 -0
  293. package/runtime/execution/directives/velo-port.directive.d.ts +74 -0
  294. package/runtime/execution/directives/vl-approval.directive.d.ts +10 -0
  295. package/runtime/execution/directives/vl-document-attachments.directive.d.ts +15 -0
  296. package/runtime/execution/directives/vl-document-templates.directive.d.ts +33 -0
  297. package/runtime/execution/directives/vl-quote.directive.d.ts +14 -0
  298. package/runtime/execution/directives/vl-ramp.directive.d.ts +15 -0
  299. package/runtime/execution/runtime-execution.module.d.ts +27 -0
  300. package/runtime/execution/utils/federated.util.d.ts +6 -0
  301. package/runtime/index.d.ts +4 -0
  302. package/runtime/package.json +10 -0
  303. package/runtime/runtime.module.d.ts +18 -0
  304. package/runtime/services/cart.service.d.ts +15 -0
  305. package/runtime/services/collapsible-state.service.d.ts +15 -0
  306. package/runtime/services/configuration.service.d.ts +19 -0
  307. package/runtime/services/current-state.service.d.ts +8 -0
  308. package/runtime/services/form-scope.service.d.ts +20 -0
  309. package/runtime/services/index.d.ts +3 -0
  310. package/runtime/services/product-model-cache.service.d.ts +14 -0
  311. package/runtime/services/runtime-context.service.d.ts +16 -0
  312. package/runtime/services/runtime-form.service.d.ts +24 -0
  313. package/runtime/services/runtime.service.d.ts +43 -0
  314. package/runtime/services/section-helper.service.d.ts +8 -0
  315. package/runtime/services/section-scope.service.d.ts +14 -0
  316. package/runtime/services/section-store.service.d.ts +11 -0
  317. package/runtime/services/section.service.d.ts +30 -0
  318. package/runtime/types/bound-data.types.d.ts +13 -0
  319. package/runtime/types/index.d.ts +1 -0
  320. package/runtime/types/runtime.types.d.ts +19 -0
  321. package/runtime/types/script-registry.types.d.ts +13 -0
  322. package/runtime/utils/line-item.util.d.ts +34 -0
  323. package/runtime/utils/section.utils.d.ts +2 -0
  324. package/runtime/utils/sections-binder.helper.d.ts +16 -0
  325. package/runtime/veloceapps-sdk-runtime.d.ts +5 -0
  326. package/src/components/dialog/dialog.component.d.ts +13 -0
  327. package/src/components/dialog/dialog.module.d.ts +9 -0
  328. package/src/components/dialog/dialog.types.d.ts +6 -0
  329. package/src/components/doc-gen/doc-gen.component.d.ts +26 -0
  330. package/src/components/doc-gen/doc-gen.module.d.ts +9 -0
  331. package/src/components/header/cart-overlay/cart-preview.component.d.ts +36 -0
  332. package/src/components/header/cart-overlay/cart-preview.module.d.ts +14 -0
  333. package/src/components/header/header.component.d.ts +63 -0
  334. package/src/components/header/header.module.d.ts +14 -0
  335. package/src/components/header/header.types.d.ts +20 -0
  336. package/src/constants.d.ts +1 -0
  337. package/src/flow-routing.module.d.ts +13 -0
  338. package/src/flow.component.d.ts +23 -0
  339. package/src/flow.module.d.ts +16 -0
  340. package/src/guards/context.guard.d.ts +19 -0
  341. package/src/guards/index.d.ts +1 -0
  342. package/src/guards/product-unload.guard.d.ts +16 -0
  343. package/src/guards/root.guard.d.ts +15 -0
  344. package/src/index.d.ts +6 -0
  345. package/src/pages/catalog/catalog.component.d.ts +32 -0
  346. package/src/pages/catalog/catalog.module.d.ts +10 -0
  347. package/src/pages/debug/debug.component.d.ts +25 -0
  348. package/src/pages/debug/debug.module.d.ts +14 -0
  349. package/src/pages/empty-account/empty-account.component.d.ts +5 -0
  350. package/src/pages/empty-account/empty-account.module.d.ts +10 -0
  351. package/src/pages/legacy-product/legacy-product.component.d.ts +37 -0
  352. package/src/pages/legacy-product/legacy-product.module.d.ts +10 -0
  353. package/src/pages/product/product.component.d.ts +32 -0
  354. package/src/pages/product/product.module.d.ts +10 -0
  355. package/src/pages/record-not-found/record-not-found.component.d.ts +11 -0
  356. package/src/pages/record-not-found/record-not-found.module.d.ts +9 -0
  357. package/src/pages/remote/remote.component.d.ts +47 -0
  358. package/src/pages/remote/remote.module.d.ts +10 -0
  359. package/src/pages/remote/remote.types.d.ts +4 -0
  360. package/src/pages/shopping-cart/shopping-cart.component.d.ts +32 -0
  361. package/src/pages/shopping-cart/shopping-cart.module.d.ts +10 -0
  362. package/src/resolvers/flow.resolver.d.ts +16 -0
  363. package/src/resolvers/quote.resolver.d.ts +20 -0
  364. package/src/services/doc-gen.service.d.ts +13 -0
  365. package/src/services/flow-dialog.service.d.ts +26 -0
  366. package/src/services/flow-router.service.d.ts +35 -0
  367. package/src/services/flow.service.d.ts +17 -0
  368. package/src/services/index.d.ts +1 -0
  369. package/src/types/context-route.types.d.ts +5 -0
  370. package/src/types/flow-customization.types.d.ts +11 -0
  371. package/src/types/index.d.ts +2 -0
  372. package/src/types/route.types.d.ts +9 -0
  373. package/src/utils/flow.utils.d.ts +8 -0
  374. package/src/utils/index.d.ts +1 -0
  375. package/veloceapps-sdk.d.ts +5 -0
@@ -0,0 +1,30 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { FormGroup } from '@angular/forms';
3
+ import { Subject } from 'rxjs';
4
+ import { ScriptRegistry } from '../types/script-registry.types';
5
+ import * as i0 from "@angular/core";
6
+ // TODO ALE RENAME TO SESSION SCOPE
7
+ export class FormScopeService {
8
+ constructor() {
9
+ this.scriptRegistry = new ScriptRegistry();
10
+ this.scriptSessionScope = {};
11
+ this.formSubmitSubject = new Subject();
12
+ this._form = new FormGroup({});
13
+ this.formSubmitEvent = this.formSubmitSubject.asObservable();
14
+ }
15
+ get form() {
16
+ return this._form;
17
+ }
18
+ set form(value) {
19
+ this._form = value;
20
+ }
21
+ publishFormUpdate(value) {
22
+ this.formSubmitSubject.next(value);
23
+ }
24
+ }
25
+ FormScopeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FormScopeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
26
+ FormScopeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FormScopeService });
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FormScopeService, decorators: [{
28
+ type: Injectable
29
+ }], ctorParameters: function () { return []; } });
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1zY29wZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZGsvcnVudGltZS9zZXJ2aWNlcy9mb3JtLXNjb3BlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7O0FBR2hFLG1DQUFtQztBQUNuQyxNQUFNLE9BQU8sZ0JBQWdCO0lBVTNCO1FBUEEsbUJBQWMsR0FBbUIsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUN0RCx1QkFBa0IsR0FBNkIsRUFBRSxDQUFDO1FBRTFDLHNCQUFpQixHQUFHLElBQUksT0FBTyxFQUFjLENBQUM7UUFFOUMsVUFBSyxHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBR2hDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQy9ELENBQUM7SUFFRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVELElBQUksSUFBSSxDQUFDLEtBQWdCO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUFpQjtRQUNqQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLENBQUM7OzhHQXhCVSxnQkFBZ0I7a0hBQWhCLGdCQUFnQjs0RkFBaEIsZ0JBQWdCO2tCQUY1QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVXBkYXRlRGF0YSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IFNjcmlwdFJlZ2lzdHJ5IH0gZnJvbSAnLi4vdHlwZXMvc2NyaXB0LXJlZ2lzdHJ5LnR5cGVzJztcblxuQEluamVjdGFibGUoKVxuLy8gVE9ETyBBTEUgUkVOQU1FIFRPIFNFU1NJT04gU0NPUEVcbmV4cG9ydCBjbGFzcyBGb3JtU2NvcGVTZXJ2aWNlIHtcbiAgZm9ybVN1Ym1pdEV2ZW50OiBPYnNlcnZhYmxlPFVwZGF0ZURhdGE+O1xuXG4gIHNjcmlwdFJlZ2lzdHJ5OiBTY3JpcHRSZWdpc3RyeSA9IG5ldyBTY3JpcHRSZWdpc3RyeSgpO1xuICBzY3JpcHRTZXNzaW9uU2NvcGU6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuXG4gIHByaXZhdGUgZm9ybVN1Ym1pdFN1YmplY3QgPSBuZXcgU3ViamVjdDxVcGRhdGVEYXRhPigpO1xuXG4gIHByaXZhdGUgX2Zvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmZvcm1TdWJtaXRFdmVudCA9IHRoaXMuZm9ybVN1Ym1pdFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgZm9ybSgpOiBGb3JtR3JvdXAge1xuICAgIHJldHVybiB0aGlzLl9mb3JtO1xuICB9XG5cbiAgc2V0IGZvcm0odmFsdWU6IEZvcm1Hcm91cCkge1xuICAgIHRoaXMuX2Zvcm0gPSB2YWx1ZTtcbiAgfVxuXG4gIHB1Ymxpc2hGb3JtVXBkYXRlKHZhbHVlOiBVcGRhdGVEYXRhKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtU3VibWl0U3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,4 @@
1
+ export { CurrentStateService } from './current-state.service';
2
+ export { RuntimeContextService } from './runtime-context.service';
3
+ export { RuntimeService } from './runtime.service';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Nkay9ydW50aW1lL3NlcnZpY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IEN1cnJlbnRTdGF0ZVNlcnZpY2UgfSBmcm9tICcuL2N1cnJlbnQtc3RhdGUuc2VydmljZSc7XG5leHBvcnQgeyBSdW50aW1lQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuL3J1bnRpbWUtY29udGV4dC5zZXJ2aWNlJztcbmV4cG9ydCB7IFJ1bnRpbWVTZXJ2aWNlIH0gZnJvbSAnLi9ydW50aW1lLnNlcnZpY2UnO1xuIl19
@@ -0,0 +1,30 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { shareReplay } from 'rxjs/operators';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@veloceapps/api";
5
+ export class ProductModelCacheService {
6
+ constructor(productModelApiService) {
7
+ this.productModelApiService = productModelApiService;
8
+ this.cachedModel = new Map();
9
+ }
10
+ getProductModel(currentModelId, version) {
11
+ if (!this.cachedModel.has(currentModelId) || version) {
12
+ this.clearCache();
13
+ this.cachedModel.set(currentModelId, this.productModelApiService.load(currentModelId, version).pipe(shareReplay(1)));
14
+ }
15
+ return this.cachedModel.get(currentModelId);
16
+ }
17
+ getCachedModel() {
18
+ const ids = Array.from(this.cachedModel.keys());
19
+ return this.cachedModel.get(ids[0]);
20
+ }
21
+ clearCache() {
22
+ this.cachedModel.clear();
23
+ }
24
+ }
25
+ ProductModelCacheService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ProductModelCacheService, deps: [{ token: i1.ProductModelApiService }], target: i0.ɵɵFactoryTarget.Injectable });
26
+ ProductModelCacheService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ProductModelCacheService });
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ProductModelCacheService, decorators: [{
28
+ type: Injectable
29
+ }], ctorParameters: function () { return [{ type: i1.ProductModelApiService }]; } });
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1tb2RlbC1jYWNoZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZGsvcnVudGltZS9zZXJ2aWNlcy9wcm9kdWN0LW1vZGVsLWNhY2hlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkzQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQUc3QyxNQUFNLE9BQU8sd0JBQXdCO0lBQ25DLFlBQW9CLHNCQUE4QztRQUE5QywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBRTFELGdCQUFXLEdBQW9ELElBQUksR0FBRyxFQUFFLENBQUM7SUFGWixDQUFDO0lBSXRFLGVBQWUsQ0FBQyxjQUFzQixFQUFFLE9BQWdCO1FBQ3RELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxPQUFPLEVBQUU7WUFDcEQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBRWxCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUNsQixjQUFjLEVBQ2QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUMvRSxDQUFDO1NBQ0g7UUFFRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBdUMsQ0FBQztJQUNwRixDQUFDO0lBRUQsY0FBYztRQUNaLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRWhELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUF1QyxDQUFDO0lBQzVFLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMzQixDQUFDOztzSEExQlUsd0JBQXdCOzBIQUF4Qix3QkFBd0I7NEZBQXhCLHdCQUF3QjtrQkFEcEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFByb2R1Y3RNb2RlbEFwaVNlcnZpY2UgfSBmcm9tICdAdmVsb2NlYXBwcy9hcGknO1xuaW1wb3J0IHsgUHJvZHVjdE1vZGVsc0NvbnRhaW5lciB9IGZyb20gJ0B2ZWxvY2VhcHBzL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBQcm9kdWN0TW9kZWxDYWNoZVNlcnZpY2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHByb2R1Y3RNb2RlbEFwaVNlcnZpY2U6IFByb2R1Y3RNb2RlbEFwaVNlcnZpY2UpIHt9XG5cbiAgcHJpdmF0ZSBjYWNoZWRNb2RlbDogTWFwPHN0cmluZywgT2JzZXJ2YWJsZTxQcm9kdWN0TW9kZWxzQ29udGFpbmVyPj4gPSBuZXcgTWFwKCk7XG5cbiAgZ2V0UHJvZHVjdE1vZGVsKGN1cnJlbnRNb2RlbElkOiBzdHJpbmcsIHZlcnNpb24/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPFByb2R1Y3RNb2RlbHNDb250YWluZXI+IHtcbiAgICBpZiAoIXRoaXMuY2FjaGVkTW9kZWwuaGFzKGN1cnJlbnRNb2RlbElkKSB8fCB2ZXJzaW9uKSB7XG4gICAgICB0aGlzLmNsZWFyQ2FjaGUoKTtcblxuICAgICAgdGhpcy5jYWNoZWRNb2RlbC5zZXQoXG4gICAgICAgIGN1cnJlbnRNb2RlbElkLFxuICAgICAgICB0aGlzLnByb2R1Y3RNb2RlbEFwaVNlcnZpY2UubG9hZChjdXJyZW50TW9kZWxJZCwgdmVyc2lvbikucGlwZShzaGFyZVJlcGxheSgxKSksXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNhY2hlZE1vZGVsLmdldChjdXJyZW50TW9kZWxJZCkgYXMgT2JzZXJ2YWJsZTxQcm9kdWN0TW9kZWxzQ29udGFpbmVyPjtcbiAgfVxuXG4gIGdldENhY2hlZE1vZGVsKCk6IE9ic2VydmFibGU8UHJvZHVjdE1vZGVsc0NvbnRhaW5lcj4ge1xuICAgIGNvbnN0IGlkcyA9IEFycmF5LmZyb20odGhpcy5jYWNoZWRNb2RlbC5rZXlzKCkpO1xuXG4gICAgcmV0dXJuIHRoaXMuY2FjaGVkTW9kZWwuZ2V0KGlkc1swXSkgYXMgT2JzZXJ2YWJsZTxQcm9kdWN0TW9kZWxzQ29udGFpbmVyPjtcbiAgfVxuXG4gIGNsZWFyQ2FjaGUoKSB7XG4gICAgdGhpcy5jYWNoZWRNb2RlbC5jbGVhcigpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,56 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { RuntimeModel, SectionPathUtil } from '@veloceapps/core';
3
+ import { RuntimeMode } from '@veloceapps/sdk/core';
4
+ import { map } from 'rxjs/operators';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@veloceapps/api";
7
+ import * as i2 from "primeng/api";
8
+ import * as i3 from "@veloceapps/sdk/core";
9
+ export class RuntimeContextService {
10
+ constructor(configurationApiService, messageService, contextService) {
11
+ this.configurationApiService = configurationApiService;
12
+ this.messageService = messageService;
13
+ this.contextService = contextService;
14
+ }
15
+ getRuntimeContext(productId, offeringId) {
16
+ return this.configurationApiService.getRuntimeDataByProductId(productId, offeringId).pipe(map(runtimeData => {
17
+ var _a;
18
+ const uiDefinition = this.getUIDefinition(runtimeData.uiDefinitions);
19
+ const runtimeModel = RuntimeModel.create(runtimeData.types, runtimeData.products);
20
+ const { productName, properties } = (_a = Array.from(runtimeModel.components.values()).find(c => c.productId === productId)) !== null && _a !== void 0 ? _a : {};
21
+ return {
22
+ modelId: runtimeData.modelId,
23
+ uiDefinition: uiDefinition,
24
+ runtimeModel: runtimeModel,
25
+ runtimeMode: RuntimeMode.PROD,
26
+ productId: productId,
27
+ productType: (properties === null || properties === void 0 ? void 0 : properties.displayName) || productName,
28
+ offeringId: offeringId,
29
+ properties: {
30
+ PricingEnabled: uiDefinition.pricingEnabled ? 'true' : 'false',
31
+ },
32
+ };
33
+ }));
34
+ }
35
+ getUIDefinition(uiDefinitions = []) {
36
+ const { uiDefinitionId } = this.contextService.resolve();
37
+ const findByFn = (uiDef) => (uiDefinitionId ? uiDefinitionId === uiDef.id : uiDef.primary);
38
+ const uiDefinition = uiDefinitions.find(findByFn) || (uiDefinitions.length === 1 && Object.assign({}, uiDefinitions[0]));
39
+ if (!uiDefinition) {
40
+ const errMsg = `Unable to find ${uiDefinitionId ? uiDefinitionId : 'Default'} UI`;
41
+ this.messageService.add({
42
+ severity: 'error',
43
+ summary: 'ERROR',
44
+ });
45
+ throw new Error(errMsg);
46
+ }
47
+ SectionPathUtil.updateSectionsPath(uiDefinition.sections);
48
+ return uiDefinition;
49
+ }
50
+ }
51
+ RuntimeContextService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RuntimeContextService, deps: [{ token: i1.ConfigurationApiService }, { token: i2.MessageService }, { token: i3.ContextService }], target: i0.ɵɵFactoryTarget.Injectable });
52
+ RuntimeContextService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RuntimeContextService });
53
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RuntimeContextService, decorators: [{
54
+ type: Injectable
55
+ }], ctorParameters: function () { return [{ type: i1.ConfigurationApiService }, { type: i2.MessageService }, { type: i3.ContextService }]; } });
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS1jb250ZXh0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Nkay9ydW50aW1lL3NlcnZpY2VzL3J1bnRpbWUtY29udGV4dC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQWdCLE1BQU0sa0JBQWtCLENBQUM7QUFDL0UsT0FBTyxFQUFrQixXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUduRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBSXJDLE1BQU0sT0FBTyxxQkFBcUI7SUFDaEMsWUFDVSx1QkFBZ0QsRUFDaEQsY0FBOEIsRUFDOUIsY0FBOEI7UUFGOUIsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtRQUNoRCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO0lBQ3JDLENBQUM7SUFFSixpQkFBaUIsQ0FBQyxTQUFpQixFQUFFLFVBQW1CO1FBQ3RELE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDLHlCQUF5QixDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQ3ZGLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRTs7WUFDaEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDckUsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNsRixNQUFNLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxHQUMvQixNQUFBLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDLG1DQUFJLEVBQUUsQ0FBQztZQUUxRixPQUFPO2dCQUNMLE9BQU8sRUFBRSxXQUFXLENBQUMsT0FBTztnQkFDNUIsWUFBWSxFQUFFLFlBQVk7Z0JBQzFCLFlBQVksRUFBRSxZQUFZO2dCQUMxQixXQUFXLEVBQUUsV0FBVyxDQUFDLElBQUk7Z0JBQzdCLFNBQVMsRUFBRSxTQUFTO2dCQUNwQixXQUFXLEVBQUUsQ0FBQSxVQUFVLGFBQVYsVUFBVSx1QkFBVixVQUFVLENBQUUsV0FBVyxLQUFJLFdBQVc7Z0JBQ25ELFVBQVUsRUFBRSxVQUFVO2dCQUN0QixVQUFVLEVBQUU7b0JBQ1YsY0FBYyxFQUFFLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTztpQkFDL0Q7YUFDRixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFTyxlQUFlLENBQUMsZ0JBQWdDLEVBQUU7UUFDeEQsTUFBTSxFQUFFLGNBQWMsRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFekQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFtQixFQUFFLEVBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsY0FBYyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV6RyxNQUFNLFlBQVksR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sS0FBSyxDQUFDLHNCQUFTLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBRSxDQUFDLENBQUM7UUFFN0csSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNqQixNQUFNLE1BQU0sR0FBRyxrQkFBa0IsY0FBYyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxDQUFDO1lBRWxGLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDO2dCQUN0QixRQUFRLEVBQUUsT0FBTztnQkFDakIsT0FBTyxFQUFFLE9BQU87YUFDakIsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN6QjtRQUVELGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFMUQsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQzs7bUhBbkRVLHFCQUFxQjt1SEFBckIscUJBQXFCOzRGQUFyQixxQkFBcUI7a0JBRGpDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uQXBpU2VydmljZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL2FwaSc7XG5pbXBvcnQgeyBSdW50aW1lTW9kZWwsIFNlY3Rpb25QYXRoVXRpbCwgVUlEZWZpbml0aW9uIH0gZnJvbSAnQHZlbG9jZWFwcHMvY29yZSc7XG5pbXBvcnQgeyBDb250ZXh0U2VydmljZSwgUnVudGltZU1vZGUgfSBmcm9tICdAdmVsb2NlYXBwcy9zZGsvY29yZSc7XG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IExlZ2FjeVJ1bnRpbWVDb250ZXh0IH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUnVudGltZUNvbnRleHRTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjb25maWd1cmF0aW9uQXBpU2VydmljZTogQ29uZmlndXJhdGlvbkFwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb250ZXh0U2VydmljZTogQ29udGV4dFNlcnZpY2UsXG4gICkge31cblxuICBnZXRSdW50aW1lQ29udGV4dChwcm9kdWN0SWQ6IHN0cmluZywgb2ZmZXJpbmdJZD86IHN0cmluZyk6IE9ic2VydmFibGU8TGVnYWN5UnVudGltZUNvbnRleHQ+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uQXBpU2VydmljZS5nZXRSdW50aW1lRGF0YUJ5UHJvZHVjdElkKHByb2R1Y3RJZCwgb2ZmZXJpbmdJZCkucGlwZShcbiAgICAgIG1hcChydW50aW1lRGF0YSA9PiB7XG4gICAgICAgIGNvbnN0IHVpRGVmaW5pdGlvbiA9IHRoaXMuZ2V0VUlEZWZpbml0aW9uKHJ1bnRpbWVEYXRhLnVpRGVmaW5pdGlvbnMpO1xuICAgICAgICBjb25zdCBydW50aW1lTW9kZWwgPSBSdW50aW1lTW9kZWwuY3JlYXRlKHJ1bnRpbWVEYXRhLnR5cGVzLCBydW50aW1lRGF0YS5wcm9kdWN0cyk7XG4gICAgICAgIGNvbnN0IHsgcHJvZHVjdE5hbWUsIHByb3BlcnRpZXMgfSA9XG4gICAgICAgICAgQXJyYXkuZnJvbShydW50aW1lTW9kZWwuY29tcG9uZW50cy52YWx1ZXMoKSkuZmluZChjID0+IGMucHJvZHVjdElkID09PSBwcm9kdWN0SWQpID8/IHt9O1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbW9kZWxJZDogcnVudGltZURhdGEubW9kZWxJZCxcbiAgICAgICAgICB1aURlZmluaXRpb246IHVpRGVmaW5pdGlvbixcbiAgICAgICAgICBydW50aW1lTW9kZWw6IHJ1bnRpbWVNb2RlbCxcbiAgICAgICAgICBydW50aW1lTW9kZTogUnVudGltZU1vZGUuUFJPRCxcbiAgICAgICAgICBwcm9kdWN0SWQ6IHByb2R1Y3RJZCxcbiAgICAgICAgICBwcm9kdWN0VHlwZTogcHJvcGVydGllcz8uZGlzcGxheU5hbWUgfHwgcHJvZHVjdE5hbWUsXG4gICAgICAgICAgb2ZmZXJpbmdJZDogb2ZmZXJpbmdJZCxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBQcmljaW5nRW5hYmxlZDogdWlEZWZpbml0aW9uLnByaWNpbmdFbmFibGVkID8gJ3RydWUnIDogJ2ZhbHNlJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VUlEZWZpbml0aW9uKHVpRGVmaW5pdGlvbnM6IFVJRGVmaW5pdGlvbltdID0gW10pIHtcbiAgICBjb25zdCB7IHVpRGVmaW5pdGlvbklkIH0gPSB0aGlzLmNvbnRleHRTZXJ2aWNlLnJlc29sdmUoKTtcblxuICAgIGNvbnN0IGZpbmRCeUZuID0gKHVpRGVmOiBVSURlZmluaXRpb24pID0+ICh1aURlZmluaXRpb25JZCA/IHVpRGVmaW5pdGlvbklkID09PSB1aURlZi5pZCA6IHVpRGVmLnByaW1hcnkpO1xuXG4gICAgY29uc3QgdWlEZWZpbml0aW9uID0gdWlEZWZpbml0aW9ucy5maW5kKGZpbmRCeUZuKSB8fCAodWlEZWZpbml0aW9ucy5sZW5ndGggPT09IDEgJiYgeyAuLi51aURlZmluaXRpb25zWzBdIH0pO1xuXG4gICAgaWYgKCF1aURlZmluaXRpb24pIHtcbiAgICAgIGNvbnN0IGVyck1zZyA9IGBVbmFibGUgdG8gZmluZCAke3VpRGVmaW5pdGlvbklkID8gdWlEZWZpbml0aW9uSWQgOiAnRGVmYXVsdCd9IFVJYDtcblxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xuICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcbiAgICAgICAgc3VtbWFyeTogJ0VSUk9SJyxcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZyk7XG4gICAgfVxuXG4gICAgU2VjdGlvblBhdGhVdGlsLnVwZGF0ZVNlY3Rpb25zUGF0aCh1aURlZmluaXRpb24uc2VjdGlvbnMpO1xuXG4gICAgcmV0dXJuIHVpRGVmaW5pdGlvbjtcbiAgfVxufVxuIl19
@@ -0,0 +1,224 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { FormControl, FormGroup } from '@angular/forms';
3
+ import { EntityUtil, TypeValidators } from '@veloceapps/core';
4
+ import { isNull, isString, isUndefined, keys } from 'lodash';
5
+ import { BoundDataType } from '../types/bound-data.types';
6
+ import { LineItemUtil } from '../utils/line-item.util';
7
+ import { SectionsBinderHelper } from '../utils/sections-binder.helper';
8
+ import * as i0 from "@angular/core";
9
+ export class RuntimeFormService {
10
+ constructor() {
11
+ this.sections = [];
12
+ }
13
+ initForm(sections, solutionLineItem) {
14
+ this.sections = sections;
15
+ this.solutionLineItem = solutionLineItem;
16
+ const form = new FormGroup({});
17
+ sections
18
+ .filter(section => section.model && section.template && section.boundData)
19
+ .forEach(section => {
20
+ this.populateSectionValue(section);
21
+ this.populateSectionPrice(section);
22
+ this.populateFormControls(section, form);
23
+ });
24
+ return form;
25
+ }
26
+ populateSectionValue(section) {
27
+ var _a, _b, _c, _d, _e, _f, _g;
28
+ let value;
29
+ let valueOptions = [];
30
+ let displayValues = {};
31
+ let properties = {};
32
+ if (FormServiceUtils.isPortSection(section)) {
33
+ const portDomain = (_a = section.model) === null || _a === void 0 ? void 0 : _a.portDomains[section.boundData.name];
34
+ valueOptions = (_b = portDomain === null || portDomain === void 0 ? void 0 : portDomain.domainTypes.map(dt => dt.name)) !== null && _b !== void 0 ? _b : [];
35
+ properties =
36
+ (_c = portDomain === null || portDomain === void 0 ? void 0 : portDomain.domainTypes.reduce(function (map, dt) {
37
+ map[dt.name] = dt.properties;
38
+ return map;
39
+ }, {})) !== null && _c !== void 0 ? _c : {};
40
+ displayValues =
41
+ (_d = portDomain === null || portDomain === void 0 ? void 0 : portDomain.domainTypes.reduce(function (map, dt) {
42
+ map[dt.name] = dt.displayName;
43
+ return map;
44
+ }, {})) !== null && _d !== void 0 ? _d : {};
45
+ value = (_e = section.model) === null || _e === void 0 ? void 0 : _e.lineItems.map(li => li.type);
46
+ }
47
+ if (FormServiceUtils.isAttributeSection(section)) {
48
+ const attribute = (_f = section.model) === null || _f === void 0 ? void 0 : _f.attributes.find(attr => attr.name.toLowerCase() === section.boundData.name.toLowerCase());
49
+ if (attribute) {
50
+ value = attribute.value;
51
+ }
52
+ const attributeDomain = (_g = section.model) === null || _g === void 0 ? void 0 : _g.attributeDomains[section.boundData.name];
53
+ if (!(attribute === null || attribute === void 0 ? void 0 : attribute.type.match('GENERIC|BOOLEAN')) && attributeDomain) {
54
+ const count = attribute && attribute.scale != null
55
+ ? LineItemUtil.countAttributeValues(attribute.scale, attributeDomain)
56
+ : undefined;
57
+ if (attribute && attribute.scale != null && count && count <= 100) {
58
+ valueOptions = LineItemUtil.splitDomainToValues(attribute.scale, attributeDomain);
59
+ }
60
+ else {
61
+ valueOptions = attributeDomain;
62
+ }
63
+ }
64
+ else if (attributeDomain) {
65
+ valueOptions = attributeDomain;
66
+ }
67
+ }
68
+ if (!EntityUtil.isPresent(value)) {
69
+ value = '';
70
+ }
71
+ section.sectionValue = {
72
+ value,
73
+ valueOptions,
74
+ displayValues,
75
+ properties,
76
+ };
77
+ }
78
+ populateSectionPrice(section) {
79
+ var _a;
80
+ const priceValue = { priceOptions: {} };
81
+ if (FormServiceUtils.isPortSection(section)) {
82
+ const portDomain = (_a = section.model) === null || _a === void 0 ? void 0 : _a.portDomains[section.boundData.name];
83
+ if (portDomain) {
84
+ portDomain.domainTypes.forEach(dt => {
85
+ if (dt.recommendedPrices && dt.recommendedPrices.length > 0) {
86
+ priceValue.priceOptions[dt.name] = dt.recommendedPrices;
87
+ }
88
+ else {
89
+ delete priceValue.priceOptions[dt.name];
90
+ }
91
+ });
92
+ }
93
+ }
94
+ section.priceValue = priceValue;
95
+ }
96
+ populateFormControls(section, form) {
97
+ form.controls[section.id] = this.createFormControl(section);
98
+ if (FormServiceUtils.isPortSection(section) || FormServiceUtils.isTypeSection(section)) {
99
+ form.controls[section.id.concat('qty')] = this.createQtyControl(section);
100
+ }
101
+ }
102
+ createFormControl(section) {
103
+ var _a;
104
+ const value = FormServiceUtils.isPortSection(section) ? void 0 : (_a = section.sectionValue) === null || _a === void 0 ? void 0 : _a.value;
105
+ return new FormControl(value, this.getFormControlValidators(section));
106
+ }
107
+ createQtyControl(section) {
108
+ var _a, _b, _c;
109
+ const isTypeSection = FormServiceUtils.isTypeSection(section);
110
+ const validators = [];
111
+ const maxAllowed = this.getMaxAllowed(section);
112
+ //TODO TEMPORARY SOLUTION (WILL BE DISABLED ONCE RADIO CONTROLS IMPLEMENTED)
113
+ if (maxAllowed > 0) {
114
+ validators.push(this.getQuantityValidator(maxAllowed, isTypeSection ? (_b = (_a = section.model) === null || _a === void 0 ? void 0 : _a.qty) !== null && _b !== void 0 ? _b : 0 : 0));
115
+ }
116
+ const qtyValue = isTypeSection ? (_c = section.model) === null || _c === void 0 ? void 0 : _c.qty : 1;
117
+ return new FormControl(qtyValue, validators);
118
+ }
119
+ getMaxAllowed(section) {
120
+ let lineItem = section.model;
121
+ let portName = section.boundData.name;
122
+ if (FormServiceUtils.isTypeSection(section)) {
123
+ if (section.model && EntityUtil.isPresent(section.model.parentId) && this.solutionLineItem) {
124
+ if (section.model.parentId) {
125
+ lineItem = LineItemUtil.findById(section.model.parentId, [this.solutionLineItem]);
126
+ }
127
+ portName = section.model.port;
128
+ }
129
+ else {
130
+ return 0;
131
+ }
132
+ }
133
+ if (!lineItem) {
134
+ return 0;
135
+ }
136
+ return SectionsBinderHelper.getMaxAllowed(lineItem, portName);
137
+ }
138
+ //TODO ALE TO SUPPORT EMPTY VALUES FOR INTERVAL ATTRIBUTES OUT OF DOMAIN
139
+ getFormControlValidators(section) {
140
+ if (!FormServiceUtils.isAttributeSection(section)) {
141
+ return null;
142
+ }
143
+ const validators = [];
144
+ const parentLineItem = section.model && this.solutionLineItem && FormServiceUtils.findParent(section.model.id, [this.solutionLineItem]);
145
+ const attribute = parentLineItem &&
146
+ parentLineItem.attributes.find(attr => attr.name.toLowerCase() === section.boundData.name.toLowerCase());
147
+ if (!attribute || !attribute.type) {
148
+ return null;
149
+ }
150
+ const primitiveTypesValidators = {
151
+ INT: TypeValidators.integerValidator(),
152
+ 'DOUBLE|DECIMAL': TypeValidators.decimalValidator(10),
153
+ };
154
+ keys(primitiveTypesValidators).forEach(types => {
155
+ if (types.match(attribute.type)) {
156
+ const validator = primitiveTypesValidators[types];
157
+ validators.push(validator);
158
+ }
159
+ });
160
+ if (!attribute.type.match('GENERIC|BOOLEAN|MULTIPLE')) {
161
+ const sectionLabel = section.label;
162
+ const intervalValidator = function (control) {
163
+ var _a;
164
+ if (isUndefined(control.value) || isNull(control.value) || isNaN(+control.value)) {
165
+ return { interval: { message: sectionLabel + ' is not in domain' } };
166
+ }
167
+ if (!isUndefined(control.value) && isString(control.value) && control.value.length === 0) {
168
+ return null;
169
+ }
170
+ const attributeDomain = (_a = section.model) === null || _a === void 0 ? void 0 : _a.attributeDomains[section.boundData.name];
171
+ const valid = attributeDomain === null || attributeDomain === void 0 ? void 0 : attributeDomain.some(valueOption => {
172
+ const min = +valueOption.min;
173
+ const max = +valueOption.max;
174
+ return +control.value <= max && +control.value >= min;
175
+ });
176
+ if (!valid) {
177
+ return { interval: { message: sectionLabel + ' is not in domain' } };
178
+ }
179
+ return null;
180
+ };
181
+ validators.push(intervalValidator);
182
+ }
183
+ if (section.required) {
184
+ validators.push(TypeValidators.requiredValidator(section.label + ' is required '));
185
+ }
186
+ return validators.length !== 0 ? validators : null;
187
+ }
188
+ getQuantityValidator(max, originalQty) {
189
+ return control => {
190
+ if (!control.value) {
191
+ return { quantity: { message: 'Required' } };
192
+ }
193
+ else if (isNaN(+control.value) || +control.value < 1) {
194
+ return { quantity: { message: 'Invalid value' } };
195
+ }
196
+ else if (+control.value > max + originalQty) {
197
+ return { quantity: { message: 'Max quantity ' + (max + originalQty) } };
198
+ }
199
+ else {
200
+ return null;
201
+ }
202
+ };
203
+ }
204
+ }
205
+ RuntimeFormService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RuntimeFormService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
206
+ RuntimeFormService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RuntimeFormService });
207
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RuntimeFormService, decorators: [{
208
+ type: Injectable
209
+ }] });
210
+ export class FormServiceUtils {
211
+ static isPortSection(section) {
212
+ return section && section.boundData && section.boundData.entityType === BoundDataType[BoundDataType.PORT];
213
+ }
214
+ static isTypeSection(section) {
215
+ return section && section.boundData && section.boundData.entityType === BoundDataType[BoundDataType.TYPE];
216
+ }
217
+ static isAttributeSection(section) {
218
+ return section && section.boundData && section.boundData.entityType === BoundDataType[BoundDataType.ATTRIBUTE];
219
+ }
220
+ static findParent(parentId, lineItems) {
221
+ return EntityUtil.findByFieldHierarchically('id', parentId, lineItems, 'lineItems');
222
+ }
223
+ }
224
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS1mb3JtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Nkay9ydW50aW1lL3NlcnZpY2VzL3J1bnRpbWUtZm9ybS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQWUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsVUFBVSxFQUFpQyxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM3RixPQUFPLEVBQWMsTUFBTSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUNBQWlDLENBQUM7O0FBR3ZFLE1BQU0sT0FBTyxrQkFBa0I7SUFEL0I7UUFFRSxhQUFRLEdBQWMsRUFBRSxDQUFDO0tBNE8xQjtJQXpPQyxRQUFRLENBQUMsUUFBbUIsRUFBRSxnQkFBMEI7UUFDdEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO1FBRXpDLE1BQU0sSUFBSSxHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRS9CLFFBQVE7YUFDTCxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQzthQUN6RSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDakIsSUFBSSxDQUFDLG9CQUFvQixD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QUMsQ0FBQztJQUNKLENBQUM7O2dIQTVPVSxrQkFBa0I7b0hBQWxCLGtCQUFrQjs0RkFBbEIsa0JBQWtCO2tCQUQ5QixVQUFVOztBQWdQWCxNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBZ0I7UUFDbkMsT0FBTyxPQUFPLElBQUksT0FBTyxDQUFDLFNBQVMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsS0FBSyxhQUFhLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVHLENBQUM7SUFFRCxNQUFNLENBQUMsYUFBYSxDQUFDLE9BQWdCO1FBQ25DLE9BQU8sT0FBTyxJQUFJLE9BQU8sQ0FBQyxTQUFTLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEtBQUssYUFBYSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1RyxDQUFDO0lBRUQsTUFBTSxDQUFDLGtCQUFrQixDQUFDLE9BQWdCO1FBQ3hDLE9BQU8sT0FBTyxJQUFJLE9BQU8sQ0FBQyxTQUFTLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEtBQUssYUFBYSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqSCxDQUFDO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFnQixFQUFFLFNBQXFCO1FBQ3ZELE9BQU8sVUFBVSxDQUFDLHlCQUF5QixDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRW50aXR5VXRpbCwgTGluZUl0ZW0sIFByaWNlVmFsdWUsIFNlY3Rpb24sIFR5cGVWYWxpZGF0b3JzIH0gZnJvbSAnQHZlbG9jZWFwcHMvY29yZSc7XG5pbXBvcnQgeyBEaWN0aW9uYXJ5LCBpc051bGwsIGlzU3RyaW5nLCBpc1VuZGVmaW5lZCwga2V5cyB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBCb3VuZERhdGFUeXBlIH0gZnJvbSAnLi4vdHlwZXMvYm91bmQtZGF0YS50eXBlcyc7XG5pbXBvcnQgeyBMaW5lSXRlbVV0aWwgfSBmcm9tICcuLi91dGlscy9saW5lLWl0ZW0udXRpbCc7XG5pbXBvcnQgeyBTZWN0aW9uc0JpbmRlckhlbHBlciB9IGZyb20gJy4uL3V0aWxzL3NlY3Rpb25zLWJpbmRlci5oZWxwZXInO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUnVudGltZUZvcm1TZXJ2aWNlIHtcbiAgc2VjdGlvbnM6IFNlY3Rpb25bXSA9IFtdO1xuICBzb2x1dGlvbkxpbmVJdGVtPzogTGluZUl0ZW07XG5cbiAgaW5pdEZvcm0oc2VjdGlvbnM6IFNlY3Rpb25bXSwgc29sdXRpb25MaW5lSXRlbTogTGluZUl0ZW0pOiBGb3JtR3JvdXAge1xuICAgIHRoaXMuc2VjdGlvbnMgPSBzZWN0aW9ucztcbiAgICB0aGlzLnNvbHV0aW9uTGluZUl0ZW0gPSBzb2x1dGlvbkxpbmVJdGVtO1xuXG4gICAgY29uc3QgZm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xuXG4gICAgc2VjdGlvbnNcbiAgICAgIC5maWx0ZXIoc2VjdGlvbiA9PiBzZWN0aW9uLm1vZGVsICYmIHNlY3Rpb24udGVtcGxhdGUgJiYgc2VjdGlvbi5ib3VuZERhdGEpXG4gICAgICAuZm9yRWFjaChzZWN0aW9uID0+IHtcbiAgICAgICAgdGhpcy5wb3B1bGF0ZVNlY3Rpb25WYWx1ZShzZWN0aW9uKTtcbiAgICAgICAgdGhpcy5wb3B1bGF0ZVNlY3Rpb25QcmljZShzZWN0aW9uKTtcbiAgICAgICAgdGhpcy5wb3B1bGF0ZUZvcm1Db250cm9scyhzZWN0aW9uLCBmb3JtKTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIGZvcm07XG4gIH1cblxuICBwcml2YXRlIHBvcHVsYXRlU2VjdGlvblZhbHVlKHNlY3Rpb246IFNlY3Rpb24pIHtcbiAgICBsZXQgdmFsdWU7XG4gICAgbGV0IHZhbHVlT3B0aW9uczogc3RyaW5nW10gPSBbXTtcbiAgICBsZXQgZGlzcGxheVZhbHVlczogRGljdGlvbmFyeTxzdHJpbmc+ID0ge307XG4gICAgbGV0IHByb3BlcnRpZXM6IERpY3Rpb25hcnk8YW55PiA9IHt9O1xuXG4gICAgaWYgKEZvcm1TZXJ2aWNlVXRpbHMuaXNQb3J0U2VjdGlvbihzZWN0aW9uKSkge1xuICAgICAgY29uc3QgcG9ydERvbWFpbiA9IHNlY3Rpb24ubW9kZWw/LnBvcnREb21haW5zW3NlY3Rpb24uYm91bmREYXRhLm5hbWVdO1xuXG4gICAgICB2YWx1ZU9wdGlvbnMgPSBwb3J0RG9tYWluPy5kb21haW5UeXBlcy5tYXAoZHQgPT4gZHQubmFtZSkgPz8gW107XG4gICAgICBwcm9wZXJ0aWVzID1cbiAgICAgICAgcG9ydERvbWFpbj8uZG9tYWluVHlwZXMucmVkdWNlPERpY3Rpb25hcnk8YW55Pj4oZnVuY3Rpb24gKG1hcCwgZHQpIHtcbiAgICAgICAgICBtYXBbZHQubmFtZV0gPSBkdC5wcm9wZXJ0aWVzO1xuICAgICAgICAgIHJldHVybiBtYXA7XG4gICAgICAgIH0sIHt9KSA/PyB7fTtcbiAgICAgIGRpc3BsYXlWYWx1ZXMgPVxuICAgICAgICBwb3J0RG9tYWluPy5kb21haW5UeXBlcy5yZWR1Y2U8RGljdGlvbmFyeTxzdHJpbmc+PihmdW5jdGlvbiAobWFwLCBkdCkge1xuICAgICAgICAgIG1hcFtkdC5uYW1lXSA9IGR0LmRpc3BsYXlOYW1lO1xuICAgICAgICAgIHJldHVybiBtYXA7XG4gICAgICAgIH0sIHt9KSA/PyB7fTtcblxuICAgICAgdmFsdWUgPSBzZWN0aW9uLm1vZGVsPy5saW5lSXRlbXMubWFwKGxpID0+IGxpLnR5cGUpO1xuICAgIH1cblxuICAgIGlmIChGb3JtU2VydmljZVV0aWxzLmlzQXR0cmlidXRlU2VjdGlvbihzZWN0aW9uKSkge1xuICAgICAgY29uc3QgYXR0cmlidXRlID0gc2VjdGlvbi5tb2RlbD8uYXR0cmlidXRlcy5maW5kKFxuICAgICAgICBhdHRyID0+IGF0dHIubmFtZS50b0xvd2VyQ2FzZSgpID09PSBzZWN0aW9uLmJvdW5kRGF0YS5uYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICApO1xuICAgICAgaWYgKGF0dHJpYnV0ZSkge1xuICAgICAgICB2YWx1ZSA9IGF0dHJpYnV0ZS52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYXR0cmlidXRlRG9tYWluID0gc2VjdGlvbi5tb2RlbD8uYXR0cmlidXRlRG9tYWluc1tzZWN0aW9uLmJvdW5kRGF0YS5uYW1lXTtcblxuICAgICAgaWYgKCFhdHRyaWJ1dGU/LnR5cGUubWF0Y2goJ0dFTkVSSUN8Qk9PTEVBTicpICYmIGF0dHJpYnV0ZURvbWFpbikge1xuICAgICAgICBjb25zdCBjb3VudCA9XG4gICAgICAgICAgYXR0cmlidXRlICYmIGF0dHJpYnV0ZS5zY2FsZSAhPSBudWxsXG4gICAgICAgICAgICA/IExpbmVJdGVtVXRpbC5jb3VudEF0dHJpYnV0ZVZhbHVlcyhhdHRyaWJ1dGUuc2NhbGUsIGF0dHJpYnV0ZURvbWFpbilcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmIChhdHRyaWJ1dGUgJiYgYXR0cmlidXRlLnNjYWxlICE9IG51bGwgJiYgY291bnQgJiYgY291bnQgPD0gMTAwKSB7XG4gICAgICAgICAgdmFsdWVPcHRpb25zID0gTGluZUl0ZW1VdGlsLnNwbGl0RG9tYWluVG9WYWx1ZXMoYXR0cmlidXRlLnNjYWxlLCBhdHRyaWJ1dGVEb21haW4pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbHVlT3B0aW9ucyA9IGF0dHJpYnV0ZURvbWFpbjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChhdHRyaWJ1dGVEb21haW4pIHtcbiAgICAgICAgdmFsdWVPcHRpb25zID0gYXR0cmlidXRlRG9tYWluO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghRW50aXR5VXRpbC5pc1ByZXNlbnQodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9ICcnO1xuICAgIH1cblxuICAgIHNlY3Rpb24uc2VjdGlvblZhbHVlID0ge1xuICAgICAgdmFsdWUsXG4gICAgICB2YWx1ZU9wdGlvbnMsXG4gICAgICBkaXNwbGF5VmFsdWVzLFxuICAgICAgcHJvcGVydGllcyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwb3B1bGF0ZVNlY3Rpb25QcmljZShzZWN0aW9uOiBTZWN0aW9uKSB7XG4gICAgY29uc3QgcHJpY2VWYWx1ZTogUHJpY2VWYWx1ZSA9IHsgcHJpY2VPcHRpb25zOiB7fSB9O1xuXG4gICAgaWYgKEZvcm1TZXJ2aWNlVXRpbHMuaXNQb3J0U2VjdGlvbihzZWN0aW9uKSkge1xuICAgICAgY29uc3QgcG9ydERvbWFpbiA9IHNlY3Rpb24ubW9kZWw/LnBvcnREb21haW5zW3NlY3Rpb24uYm91bmREYXRhLm5hbWVdO1xuXG4gICAgICBpZiAocG9ydERvbWFpbikge1xuICAgICAgICBwb3J0RG9tYWluLmRvbWFpblR5cGVzLmZvckVhY2goZHQgPT4ge1xuICAgICAgICAgIGlmIChkdC5yZWNvbW1lbmRlZFByaWNlcyAmJiBkdC5yZWNvbW1lbmRlZFByaWNlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBwcmljZVZhbHVlLnByaWNlT3B0aW9uc1tkdC5uYW1lXSA9IGR0LnJlY29tbWVuZGVkUHJpY2VzO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWxldGUgcHJpY2VWYWx1ZS5wcmljZU9wdGlvbnNbZHQubmFtZV07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZWN0aW9uLnByaWNlVmFsdWUgPSBwcmljZVZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBwb3B1bGF0ZUZvcm1Db250cm9scyhzZWN0aW9uOiBTZWN0aW9uLCBmb3JtOiBGb3JtR3JvdXApIHtcbiAgICBmb3JtLmNvbnRyb2xzW3NlY3Rpb24uaWRdID0gdGhpcy5jcmVhdGVGb3JtQ29udHJvbChzZWN0aW9uKTtcblxuICAgIGlmIChGb3JtU2VydmljZVV0aWxzLmlzUG9ydFNlY3Rpb24oc2VjdGlvbikgfHwgRm9ybVNlcnZpY2VVdGlscy5pc1R5cGVTZWN0aW9uKHNlY3Rpb24pKSB7XG4gICAgICBmb3JtLmNvbnRyb2xzW3NlY3Rpb24uaWQuY29uY2F0KCdxdHknKV0gPSB0aGlzLmNyZWF0ZVF0eUNvbnRyb2woc2VjdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVGb3JtQ29udHJvbChzZWN0aW9uOiBTZWN0aW9uKTogRm9ybUNvbnRyb2wge1xuICAgIGNvbnN0IHZhbHVlID0gRm9ybVNlcnZpY2VVdGlscy5pc1BvcnRTZWN0aW9uKHNlY3Rpb24pID8gdm9pZCAwIDogc2VjdGlvbi5zZWN0aW9uVmFsdWU/LnZhbHVlO1xuXG4gICAgcmV0dXJuIG5ldyBGb3JtQ29udHJvbCh2YWx1ZSwgdGhpcy5nZXRGb3JtQ29udHJvbFZhbGlkYXRvcnMoc2VjdGlvbikpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVRdHlDb250cm9sKHNlY3Rpb246IFNlY3Rpb24pOiBGb3JtQ29udHJvbCB7XG4gICAgY29uc3QgaXNUeXBlU2VjdGlvbiA9IEZvcm1TZXJ2aWNlVXRpbHMuaXNUeXBlU2VjdGlvbihzZWN0aW9uKTtcblxuICAgIGNvbnN0IHZhbGlkYXRvcnMgPSBbXTtcblxuICAgIGNvbnN0IG1heEFsbG93ZWQgPSB0aGlzLmdldE1heEFsbG93ZWQoc2VjdGlvbik7XG5cbiAgICAvL1RPRE8gVEVNUE9SQVJZIFNPTFVUSU9OIChXSUxMIEJFIERJU0FCTEVEIE9OQ0UgUkFESU8gQ09OVFJPTFMgSU1QTEVNRU5URUQpXG4gICAgaWYgKG1heEFsbG93ZWQgPiAwKSB7XG4gICAgICB2YWxpZGF0b3JzLnB1c2godGhpcy5nZXRRdWFudGl0eVZhbGlkYXRvcihtYXhBbGxvd2VkLCBpc1R5cGVTZWN0aW9uID8gc2VjdGlvbi5tb2RlbD8ucXR5ID8/IDAgOiAwKSk7XG4gICAgfVxuXG4gICAgY29uc3QgcXR5VmFsdWUgPSBpc1R5cGVTZWN0aW9uID8gc2VjdGlvbi5tb2RlbD8ucXR5IDogMTtcblxuICAgIHJldHVybiBuZXcgRm9ybUNvbnRyb2wocXR5VmFsdWUsIHZhbGlkYXRvcnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNYXhBbGxvd2VkKHNlY3Rpb246IFNlY3Rpb24pIHtcbiAgICBsZXQgbGluZUl0ZW0gPSBzZWN0aW9uLm1vZGVsO1xuICAgIGxldCBwb3J0TmFtZSA9IHNlY3Rpb24uYm91bmREYXRhLm5hbWU7XG5cbiAgICBpZiAoRm9ybVNlcnZpY2VVdGlscy5pc1R5cGVTZWN0aW9uKHNlY3Rpb24pKSB7XG4gICAgICBpZiAoc2VjdGlvbi5tb2RlbCAmJiBFbnRpdHlVdGlsLmlzUHJlc2VudChzZWN0aW9uLm1vZGVsLnBhcmVudElkKSAmJiB0aGlzLnNvbHV0aW9uTGluZUl0ZW0pIHtcbiAgICAgICAgaWYgKHNlY3Rpb24ubW9kZWwucGFyZW50SWQpIHtcbiAgICAgICAgICBsaW5lSXRlbSA9IExpbmVJdGVtVXRpbC5maW5kQnlJZChzZWN0aW9uLm1vZGVsLnBhcmVudElkLCBbdGhpcy5zb2x1dGlvbkxpbmVJdGVtXSk7XG4gICAgICAgIH1cbiAgICAgICAgcG9ydE5hbWUgPSBzZWN0aW9uLm1vZGVsLnBvcnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWxpbmVJdGVtKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gU2VjdGlvbnNCaW5kZXJIZWxwZXIuZ2V0TWF4QWxsb3dlZChsaW5lSXRlbSwgcG9ydE5hbWUpO1xuICB9XG5cbiAgLy9UT0RPIEFMRSBUTyBTVVBQT1JUIEVNUFRZIFZBTFVFUyBGT1IgSU5URVJWQUwgQVRUUklCVVRFUyBPVVQgT0YgRE9NQUlOXG4gIHByaXZhdGUgZ2V0Rm9ybUNvbnRyb2xWYWxpZGF0b3JzKHNlY3Rpb246IFNlY3Rpb24pOiBWYWxpZGF0b3JGbltdIHwgbnVsbCB7XG4gICAgaWYgKCFGb3JtU2VydmljZVV0aWxzLmlzQXR0cmlidXRlU2VjdGlvbihzZWN0aW9uKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsaWRhdG9ycyA9IFtdO1xuICAgIGNvbnN0IHBhcmVudExpbmVJdGVtID1cbiAgICAgIHNlY3Rpb24ubW9kZWwgJiYgdGhpcy5zb2x1dGlvbkxpbmVJdGVtICYmIEZvcm1TZXJ2aWNlVXRpbHMuZmluZFBhcmVudChzZWN0aW9uLm1vZGVsLmlkLCBbdGhpcy5zb2x1dGlvbkxpbmVJdGVtXSk7XG4gICAgY29uc3QgYXR0cmlidXRlID1cbiAgICAgIHBhcmVudExpbmVJdGVtICYmXG4gICAgICBwYXJlbnRMaW5lSXRlbS5hdHRyaWJ1dGVzLmZpbmQoYXR0ciA9PiBhdHRyLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gc2VjdGlvbi5ib3VuZERhdGEubmFtZS50b0xvd2VyQ2FzZSgpKTtcblxuICAgIGlmICghYXR0cmlidXRlIHx8ICFhdHRyaWJ1dGUudHlwZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcHJpbWl0aXZlVHlwZXNWYWxpZGF0b3JzOiBhbnkgPSB7XG4gICAgICBJTlQ6IFR5cGVWYWxpZGF0b3JzLmludGVnZXJWYWxpZGF0b3IoKSxcbiAgICAgICdET1VCTEV8REVDSU1BTCc6IFR5cGVWYWxpZGF0b3JzLmRlY2ltYWxWYWxpZGF0b3IoMTApLFxuICAgIH07XG5cbiAgICBrZXlzKHByaW1pdGl2ZVR5cGVzVmFsaWRhdG9ycykuZm9yRWFjaCh0eXBlcyA9PiB7XG4gICAgICBpZiAodHlwZXMubWF0Y2goYXR0cmlidXRlLnR5cGUpKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRvciA9IHByaW1pdGl2ZVR5cGVzVmFsaWRhdG9yc1t0eXBlc107XG5cbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKHZhbGlkYXRvcik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIWF0dHJpYnV0ZS50eXBlLm1hdGNoKCdHRU5FUklDfEJPT0xFQU58TVVMVElQTEUnKSkge1xuICAgICAgY29uc3Qgc2VjdGlvbkxhYmVsID0gc2VjdGlvbi5sYWJlbDtcblxuICAgICAgY29uc3QgaW50ZXJ2YWxWYWxpZGF0b3I6IFZhbGlkYXRvckZuID0gZnVuY3Rpb24gKGNvbnRyb2wpIHtcbiAgICAgICAgaWYgKGlzVW5kZWZpbmVkKGNvbnRyb2wudmFsdWUpIHx8IGlzTnVsbChjb250cm9sLnZhbHVlKSB8fCBpc05hTigrY29udHJvbC52YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4geyBpbnRlcnZhbDogeyBtZXNzYWdlOiBzZWN0aW9uTGFiZWwgKyAnIGlzIG5vdCBpbiBkb21haW4nIH0gfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoY29udHJvbC52YWx1ZSkgJiYgaXNTdHJpbmcoY29udHJvbC52YWx1ZSkgJiYgY29udHJvbC52YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZURvbWFpbiA9IHNlY3Rpb24ubW9kZWw/LmF0dHJpYnV0ZURvbWFpbnNbc2VjdGlvbi5ib3VuZERhdGEubmFtZV07XG5cbiAgICAgICAgY29uc3QgdmFsaWQgPSBhdHRyaWJ1dGVEb21haW4/LnNvbWUodmFsdWVPcHRpb24gPT4ge1xuICAgICAgICAgIGNvbnN0IG1pbiA9ICt2YWx1ZU9wdGlvbi5taW47XG4gICAgICAgICAgY29uc3QgbWF4ID0gK3ZhbHVlT3B0aW9uLm1heDtcblxuICAgICAgICAgIHJldHVybiArY29udHJvbC52YWx1ZSA8PSBtYXggJiYgK2NvbnRyb2wudmFsdWUgPj0gbWluO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgICAgcmV0dXJuIHsgaW50ZXJ2YWw6IHsgbWVzc2FnZTogc2VjdGlvbkxhYmVsICsgJyBpcyBub3QgaW4gZG9tYWluJyB9IH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIHZhbGlkYXRvcnMucHVzaChpbnRlcnZhbFZhbGlkYXRvcik7XG4gICAgfVxuXG4gICAgaWYgKHNlY3Rpb24ucmVxdWlyZWQpIHtcbiAgICAgIHZhbGlkYXRvcnMucHVzaChUeXBlVmFsaWRhdG9ycy5yZXF1aXJlZFZhbGlkYXRvcihzZWN0aW9uLmxhYmVsICsgJyBpcyByZXF1aXJlZCAnKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRvcnMubGVuZ3RoICE9PSAwID8gdmFsaWRhdG9ycyA6IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldFF1YW50aXR5VmFsaWRhdG9yKG1heDogbnVtYmVyLCBvcmlnaW5hbFF0eTogbnVtYmVyKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiBjb250cm9sID0+IHtcbiAgICAgIGlmICghY29udHJvbC52YWx1ZSkge1xuICAgICAgICByZXR1cm4geyBxdWFudGl0eTogeyBtZXNzYWdlOiAnUmVxdWlyZWQnIH0gfTtcbiAgICAgIH0gZWxzZSBpZiAoaXNOYU4oK2NvbnRyb2wudmFsdWUpIHx8ICtjb250cm9sLnZhbHVlIDwgMSkge1xuICAgICAgICByZXR1cm4geyBxdWFudGl0eTogeyBtZXNzYWdlOiAnSW52YWxpZCB2YWx1ZScgfSB9O1xuICAgICAgfSBlbHNlIGlmICgrY29udHJvbC52YWx1ZSA+IG1heCArIG9yaWdpbmFsUXR5KSB7XG4gICAgICAgIHJldHVybiB7IHF1YW50aXR5OiB7IG1lc3NhZ2U6ICdNYXggcXVhbnRpdHkgICcgKyAobWF4ICsgb3JpZ2luYWxRdHkpIH0gfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEZvcm1TZXJ2aWNlVXRpbHMge1xuICBzdGF0aWMgaXNQb3J0U2VjdGlvbihzZWN0aW9uOiBTZWN0aW9uKSB7XG4gICAgcmV0dXJuIHNlY3Rpb24gJiYgc2VjdGlvbi5ib3VuZERhdGEgJiYgc2VjdGlvbi5ib3VuZERhdGEuZW50aXR5VHlwZSA9PT0gQm91bmREYXRhVHlwZVtCb3VuZERhdGFUeXBlLlBPUlRdO1xuICB9XG5cbiAgc3RhdGljIGlzVHlwZVNlY3Rpb24oc2VjdGlvbjogU2VjdGlvbikge1xuICAgIHJldHVybiBzZWN0aW9uICYmIHNlY3Rpb24uYm91bmREYXRhICYmIHNlY3Rpb24uYm91bmREYXRhLmVudGl0eVR5cGUgPT09IEJvdW5kRGF0YVR5cGVbQm91bmREYXRhVHlwZS5UWVBFXTtcbiAgfVxuXG4gIHN0YXRpYyBpc0F0dHJpYnV0ZVNlY3Rpb24oc2VjdGlvbjogU2VjdGlvbikge1xuICAgIHJldHVybiBzZWN0aW9uICYmIHNlY3Rpb24uYm91bmREYXRhICYmIHNlY3Rpb24uYm91bmREYXRhLmVudGl0eVR5cGUgPT09IEJvdW5kRGF0YVR5cGVbQm91bmREYXRhVHlwZS5BVFRSSUJVVEVdO1xuICB9XG5cbiAgc3RhdGljIGZpbmRQYXJlbnQocGFyZW50SWQ6IHN0cmluZywgbGluZUl0ZW1zOiBMaW5lSXRlbVtdKTogTGluZUl0ZW0gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBFbnRpdHlVdGlsLmZpbmRCeUZpZWxkSGllcmFyY2hpY2FsbHkoJ2lkJywgcGFyZW50SWQsIGxpbmVJdGVtcywgJ2xpbmVJdGVtcycpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,108 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { RuntimeStep } from '@veloceapps/sdk/core';
3
+ import { Subject } from 'rxjs';
4
+ import { take } from 'rxjs/operators';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "./configuration.service";
7
+ import * as i2 from "@veloceapps/sdk/core";
8
+ import * as i3 from "primeng/api";
9
+ export class RuntimeService {
10
+ constructor(configurationService, contextService, messageService) {
11
+ this.configurationService = configurationService;
12
+ this.contextService = contextService;
13
+ this.messageService = messageService;
14
+ this.solutionReadySubject = new Subject();
15
+ this.onSolutionReadyEvent = this.solutionReadySubject.asObservable();
16
+ this.solutionUpdateStartedSubject = new Subject();
17
+ this.onSolutionUpdateStartedEvent = this.solutionUpdateStartedSubject.asObservable();
18
+ this.solutionUpdatedSubject = new Subject();
19
+ this.onSolutionUpdatedEvent = this.solutionUpdatedSubject.asObservable();
20
+ this.solutionProcessedSubject = new Subject();
21
+ this.onSolutionProcessed = this.solutionProcessedSubject.asObservable();
22
+ this.solutionStopSubject = new Subject();
23
+ this.onSolutionStopEvent = this.solutionStopSubject.asObservable();
24
+ this.solutionCancelSubject = new Subject();
25
+ this.onSolutionCancelEvent = this.solutionCancelSubject.asObservable();
26
+ this.uiRefreshSubject = new Subject();
27
+ this.onUIRefreshEvent = this.uiRefreshSubject.asObservable();
28
+ }
29
+ displayErrorMessage(error) {
30
+ var _a;
31
+ this.messageService.add({
32
+ severity: 'error',
33
+ summary: ((_a = error.error) === null || _a === void 0 ? void 0 : _a.message) || error.message || JSON.stringify(error),
34
+ });
35
+ }
36
+ startRuntime(context, states, resolve) {
37
+ this.setRuntimeContext(context);
38
+ this.setRuntimeStep(RuntimeStep.START);
39
+ this.configurationService
40
+ .configure(context, states, resolve)
41
+ .pipe(take(1))
42
+ .subscribe(lineItem => {
43
+ this.solutionReadySubject.next(lineItem);
44
+ }, error => {
45
+ this.displayErrorMessage(error);
46
+ this.solutionUpdatedSubject.next(error);
47
+ });
48
+ }
49
+ updateRuntime(states, configurationContextProperties) {
50
+ if (!this.runtimeContext) {
51
+ return;
52
+ }
53
+ this.solutionUpdateStartedSubject.next();
54
+ this.setRuntimeStep(RuntimeStep.UPDATE);
55
+ this.updateRuntimeContext(configurationContextProperties);
56
+ this.configurationService
57
+ .configure(this.runtimeContext, states)
58
+ .pipe(take(1))
59
+ .subscribe(lineItem => {
60
+ const context = this.contextService.resolve();
61
+ this.updateRuntimeContext(context.properties);
62
+ this.solutionUpdatedSubject.next(lineItem);
63
+ }, error => {
64
+ this.displayErrorMessage(error);
65
+ this.solutionUpdatedSubject.next(error);
66
+ });
67
+ }
68
+ stopRuntime(solutionLineItem) {
69
+ this.solutionStopSubject.next(solutionLineItem);
70
+ }
71
+ cancelRuntime() {
72
+ this.solutionCancelSubject.next();
73
+ }
74
+ setRuntimeContext(runtimeContext) {
75
+ this.runtimeContext = runtimeContext;
76
+ }
77
+ getRuntimeContext() {
78
+ return this.runtimeContext;
79
+ }
80
+ solutionProcessed(lineItem) {
81
+ this.solutionProcessedSubject.next(lineItem);
82
+ }
83
+ refreshUI(uiDefinition) {
84
+ if (!this.runtimeContext) {
85
+ return;
86
+ }
87
+ this.runtimeContext = Object.assign(Object.assign({}, this.runtimeContext), { uiDefinition });
88
+ this.uiRefreshSubject.next();
89
+ }
90
+ updateRuntimeContext(configurationContextProperties) {
91
+ if (!this.runtimeContext || !configurationContextProperties) {
92
+ return;
93
+ }
94
+ this.runtimeContext = Object.assign(Object.assign({}, this.runtimeContext), { properties: configurationContextProperties });
95
+ }
96
+ setRuntimeStep(runtimeStep) {
97
+ if (!this.runtimeContext) {
98
+ return;
99
+ }
100
+ this.runtimeContext.invocationContext = Object.assign(Object.assign({}, this.runtimeContext.invocationContext), { runtimeStep });
101
+ }
102
+ }
103
+ RuntimeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RuntimeService, deps: [{ token: i1.ConfigurationService }, { token: i2.ContextService }, { token: i3.MessageService }], target: i0.ɵɵFactoryTarget.Injectable });
104
+ RuntimeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RuntimeService });
105
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RuntimeService, decorators: [{
106
+ type: Injectable
107
+ }], ctorParameters: function () { return [{ type: i1.ConfigurationService }, { type: i2.ContextService }, { type: i3.MessageService }]; } });
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZGsvcnVudGltZS9zZXJ2aWNlcy9ydW50aW1lLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQStCLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWhGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztBQUt0QyxNQUFNLE9BQU8sY0FBYztJQXdCekIsWUFDVSxvQkFBMEMsRUFDMUMsY0FBOEIsRUFDOUIsY0FBOEI7UUFGOUIseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUMxQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBeEJoQyx5QkFBb0IsR0FBRyxJQUFJLE9BQU8sRUFBWSxDQUFDO1FBQ3ZELHlCQUFvQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUV4RCxpQ0FBNEIsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQzNELGlDQUE0QixHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUV4RSwyQkFBc0IsR0FBRyxJQUFJLE9BQU8sRUFBZ0MsQ0FBQztRQUM3RSwyQkFBc0IsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFNUQsNkJBQXdCLEdBQUcsSUFBSSxPQUFPLEVBQVksQ0FBQztRQUMzRCx3QkFBbUIsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFM0Qsd0JBQW1CLEdBQUcsSUFBSSxPQUFPLEVBQVksQ0FBQztRQUN0RCx3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QUNwRCxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxRQUFrQjtRQUNsQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxTQUFTLENBQUMsWUFBMEI7UUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDeEIsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLGNBQWMsbUNBQ2QsSUFBSSxDQUFDLGNBQWMsS0FDdEIsWUFBWSxHQUNiLENBQUM7UUFDRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVPLG9CQUFvQixDQUFDLDhCQUE0RDtRQUN2RixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLDhCQUE4QixFQUFFO1lBQzNELE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxjQUFjLG1DQUFRLElBQUksQ0FBQyxjQUFjLEtBQUUsVUFBVSxFQUFFLDhCQUE4QixHQUFFLENBQUM7SUFDL0YsQ0FBQztJQUVPLGNBQWMsQ0FBQyxXQUF3QjtRQUM3QyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN4QixPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsY0FBYyxDQUFDLGlCQUFpQixtQ0FDaEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsS0FDeEMsV0FBVyxHQUNaLENBQUM7SUFDSixDQUFDOzs0R0FoSVUsY0FBYztnSEFBZCxjQUFjOzRGQUFkLGNBQWM7a0JBRDFCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExpbmVJdGVtLCBVSURlZmluaXRpb24gfSBmcm9tICdAdmVsb2NlYXBwcy9jb3JlJztcbmltcG9ydCB7IENvbnRleHRTZXJ2aWNlLCBRdW90ZVN0YXRlcywgUnVudGltZVN0ZXAgfSBmcm9tICdAdmVsb2NlYXBwcy9zZGsvY29yZSc7XG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBMZWdhY3lSdW50aW1lQ29udGV4dCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUnVudGltZVNlcnZpY2Uge1xuICBwcml2YXRlIHJ1bnRpbWVDb250ZXh0OiBMZWdhY3lSdW50aW1lQ29udGV4dCB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIHNvbHV0aW9uUmVhZHlTdWJqZWN0ID0gbmV3IFN1YmplY3Q8TGluZUl0ZW0+KCk7XG4gIG9uU29sdXRpb25SZWFkeUV2ZW50ID0gdGhpcy5zb2x1dGlvblJlYWR5U3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIHNvbHV0aW9uVXBkYXRlU3RhcnRlZFN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBvblNvbHV0aW9uVXBkYXRlU3RhcnRlZEV2ZW50ID0gdGhpcy5zb2x1dGlvblVwZGF0ZVN0YXJ0ZWRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgc29sdXRpb25VcGRhdGVkU3ViamVjdCA9IG5ldyBTdWJqZWN0PExpbmVJdGVtIHwgSHR0cEVycm9yUmVzcG9uc2U+KCk7XG4gIG9uU29sdXRpb25VcGRhdGVkRXZlbnQgPSB0aGlzLnNvbHV0aW9uVXBkYXRlZFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBzb2x1dGlvblByb2Nlc3NlZFN1YmplY3QgPSBuZXcgU3ViamVjdDxMaW5lSXRlbT4oKTtcbiAgb25Tb2x1dGlvblByb2Nlc3NlZCA9IHRoaXMuc29sdXRpb25Qcm9jZXNzZWRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgc29sdXRpb25TdG9wU3ViamVjdCA9IG5ldyBTdWJqZWN0PExpbmVJdGVtPigpO1xuICBvblNvbHV0aW9uU3RvcEV2ZW50ID0gdGhpcy5zb2x1dGlvblN0b3BTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgc29sdXRpb25DYW5jZWxTdWJqZWN0ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgb25Tb2x1dGlvbkNhbmNlbEV2ZW50ID0gdGhpcy5zb2x1dGlvbkNhbmNlbFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSB1aVJlZnJlc2hTdWJqZWN0ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgb25VSVJlZnJlc2hFdmVudCA9IHRoaXMudWlSZWZyZXNoU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNvbmZpZ3VyYXRpb25TZXJ2aWNlOiBDb25maWd1cmF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGNvbnRleHRTZXJ2aWNlOiBDb250ZXh0U2VydmljZSxcbiAgICBwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcbiAgKSB7fVxuXG4gIHByaXZhdGUgZGlzcGxheUVycm9yTWVzc2FnZShlcnJvcjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xuICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXG4gICAgICBzdW1tYXJ5OiBlcnJvci5lcnJvcj8ubWVzc2FnZSB8fCBlcnJvci5tZXNzYWdlIHx8IEpTT04uc3RyaW5naWZ5KGVycm9yKSxcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXJ0UnVudGltZShjb250ZXh0OiBMZWdhY3lSdW50aW1lQ29udGV4dCwgc3RhdGVzOiBRdW90ZVN0YXRlcywgcmVzb2x2ZT86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnNldFJ1bnRpbWVDb250ZXh0KGNvbnRleHQpO1xuICAgIHRoaXMuc2V0UnVudGltZVN0ZXAoUnVudGltZVN0ZXAuU1RBUlQpO1xuICAgIHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2VcbiAgICAgIC5jb25maWd1cmUoY29udGV4dCwgc3RhdGVzLCByZXNvbHZlKVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIGxpbmVJdGVtID0+IHtcbiAgICAgICAgICB0aGlzLnNvbHV0aW9uUmVhZHlTdWJqZWN0Lm5leHQobGluZUl0ZW0pO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvciA9PiB7XG4gICAgICAgICAgdGhpcy5kaXNwbGF5RXJyb3JNZXNzYWdlKGVycm9yKTtcbiAgICAgICAgICB0aGlzLnNvbHV0aW9uVXBkYXRlZFN1YmplY3QubmV4dChlcnJvcik7XG4gICAgICAgIH0sXG4gICAgICApO1xuICB9XG5cbiAgdXBkYXRlUnVudGltZShzdGF0ZXM6IFF1b3RlU3RhdGVzLCBjb25maWd1cmF0aW9uQ29udGV4dFByb3BlcnRpZXM/OiB7IFtpbmRleDogc3RyaW5nXTogc3RyaW5nIH0pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucnVudGltZUNvbnRleHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNvbHV0aW9uVXBkYXRlU3RhcnRlZFN1YmplY3QubmV4dCgpO1xuICAgIHRoaXMuc2V0UnVudGltZVN0ZXAoUnVudGltZVN0ZXAuVVBEQVRFKTtcbiAgICB0aGlzLnVwZGF0ZVJ1bnRpbWVDb250ZXh0KGNvbmZpZ3VyYXRpb25Db250ZXh0UHJvcGVydGllcyk7XG4gICAgdGhpcy5jb25maWd1cmF0aW9uU2VydmljZVxuICAgICAgLmNvbmZpZ3VyZSh0aGlzLnJ1bnRpbWVDb250ZXh0LCBzdGF0ZXMpXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgbGluZUl0ZW0gPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmNvbnRleHRTZXJ2aWNlLnJlc29sdmUoKTtcblxuICAgICAgICAgIHRoaXMudXBkYXRlUnVudGltZUNvbnRleHQoY29udGV4dC5wcm9wZXJ0aWVzKTtcbiAgICAgICAgICB0aGlzLnNvbHV0aW9uVXBkYXRlZFN1YmplY3QubmV4dChsaW5lSXRlbSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yID0+IHtcbiAgICAgICAgICB0aGlzLmRpc3BsYXlFcnJvck1lc3NhZ2UoZXJyb3IpO1xuICAgICAgICAgIHRoaXMuc29sdXRpb25VcGRhdGVkU3ViamVjdC5uZXh0KGVycm9yKTtcbiAgICAgICAgfSxcbiAgICAgICk7XG4gIH1cblxuICBzdG9wUnVudGltZShzb2x1dGlvbkxpbmVJdGVtOiBMaW5lSXRlbSk6IHZvaWQge1xuICAgIHRoaXMuc29sdXRpb25TdG9wU3ViamVjdC5uZXh0KHNvbHV0aW9uTGluZUl0ZW0pO1xuICB9XG5cbiAgY2FuY2VsUnVudGltZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNvbHV0aW9uQ2FuY2VsU3ViamVjdC5uZXh0KCk7XG4gIH1cblxuICBzZXRSdW50aW1lQ29udGV4dChydW50aW1lQ29udGV4dDogTGVnYWN5UnVudGltZUNvbnRleHQpIHtcbiAgICB0aGlzLnJ1bnRpbWVDb250ZXh0ID0gcnVudGltZUNvbnRleHQ7XG4gIH1cblxuICBnZXRSdW50aW1lQ29udGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5ydW50aW1lQ29udGV4dDtcbiAgfVxuXG4gIHNvbHV0aW9uUHJvY2Vzc2VkKGxpbmVJdGVtOiBMaW5lSXRlbSk6IHZvaWQge1xuICAgIHRoaXMuc29sdXRpb25Qcm9jZXNzZWRTdWJqZWN0Lm5leHQobGluZUl0ZW0pO1xuICB9XG5cbiAgcmVmcmVzaFVJKHVpRGVmaW5pdGlvbjogVUlEZWZpbml0aW9uKSB7XG4gICAgaWYgKCF0aGlzLnJ1bnRpbWVDb250ZXh0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5ydW50aW1lQ29udGV4dCA9IHtcbiAgICAgIC4uLnRoaXMucnVudGltZUNvbnRleHQsXG4gICAgICB1aURlZmluaXRpb24sXG4gICAgfTtcbiAgICB0aGlzLnVpUmVmcmVzaFN1YmplY3QubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVSdW50aW1lQ29udGV4dChjb25maWd1cmF0aW9uQ29udGV4dFByb3BlcnRpZXM/OiB7IFtpbmRleDogc3RyaW5nXTogc3RyaW5nIH0pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucnVudGltZUNvbnRleHQgfHwgIWNvbmZpZ3VyYXRpb25Db250ZXh0UHJvcGVydGllcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucnVudGltZUNvbnRleHQgPSB7IC4uLnRoaXMucnVudGltZUNvbnRleHQsIHByb3BlcnRpZXM6IGNvbmZpZ3VyYXRpb25Db250ZXh0UHJvcGVydGllcyB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRSdW50aW1lU3RlcChydW50aW1lU3RlcDogUnVudGltZVN0ZXApIHtcbiAgICBpZiAoIXRoaXMucnVudGltZUNvbnRleHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJ1bnRpbWVDb250ZXh0Lmludm9jYXRpb25Db250ZXh0ID0ge1xuICAgICAgLi4udGhpcy5ydW50aW1lQ29udGV4dC5pbnZvY2F0aW9uQ29udGV4dCxcbiAgICAgIHJ1bnRpbWVTdGVwLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,27 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { EntityUtil, PricingUtils } from '@veloceapps/core';
3
+ import * as i0 from "@angular/core";
4
+ export class SectionHelperService {
5
+ static findSectionForValue(section, valueOption) {
6
+ if (!EntityUtil.isPresent(section) || !EntityUtil.isPresent(section.children) || EntityUtil.isBlank(valueOption)) {
7
+ return;
8
+ }
9
+ const found = EntityUtil.filterHierarchically(section.children, 'children', ({ model }) => model && model.type.toLowerCase() === valueOption.toLowerCase());
10
+ return found && found.pop();
11
+ }
12
+ getTotalPrices(section) {
13
+ if (!section || !section.model || !section.model.chargeGroupItems) {
14
+ return new Map();
15
+ }
16
+ return PricingUtils.sumPriceByProperty(section.model.chargeGroupItems, 'netPrice', [
17
+ 'chargeMethod',
18
+ 'sellingFrequency',
19
+ ]);
20
+ }
21
+ }
22
+ SectionHelperService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SectionHelperService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
23
+ SectionHelperService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SectionHelperService });
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SectionHelperService, decorators: [{
25
+ type: Injectable
26
+ }] });
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdGlvbi1oZWxwZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3J1bnRpbWUvc2VydmljZXMvc2VjdGlvbi1oZWxwZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFXLE1BQU0sa0JBQWtCLENBQUM7O0FBR3JFLE1BQU0sT0FBTyxvQkFBb0I7SUFDL0IsTUFBTSxDQUFDLG1CQUFtQixDQUFDLE9BQWdCLEVBQUUsV0FBbUI7UUFDOUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ2hILE9BQU87U0FDUjtRQUVELE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxvQkFBb0IsQ0FDM0MsT0FBTyxDQUFDLFFBQVEsRUFDaEIsVUFBVSxFQUNWLENBQUMsRUFBRSxLQUFLLEVBQVcsRUFBRSxFQUFFLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUN4RixDQUFDO1FBRUYsT0FBTyxLQUFLLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxjQUFjLENBQUMsT0FBZ0I7UUFDN0IsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFO1lBQ2pFLE9BQU8sSUFBSSxHQUFHLEVBQUUsQ0FBQztTQUNsQjtRQUVELE9BQU8sWUFBWSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFO1lBQ2pGLGNBQWM7WUFDZCxrQkFBa0I7U0FDbkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7a0hBeEJVLG9CQUFvQjtzSEFBcEIsb0JBQW9COzRGQUFwQixvQkFBb0I7a0JBRGhDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFbnRpdHlVdGlsLCBQcmljaW5nVXRpbHMsIFNlY3Rpb24gfSBmcm9tICdAdmVsb2NlYXBwcy9jb3JlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNlY3Rpb25IZWxwZXJTZXJ2aWNlIHtcbiAgc3RhdGljIGZpbmRTZWN0aW9uRm9yVmFsdWUoc2VjdGlvbjogU2VjdGlvbiwgdmFsdWVPcHRpb246IHN0cmluZyk6IFNlY3Rpb24gfCB1bmRlZmluZWQge1xuICAgIGlmICghRW50aXR5VXRpbC5pc1ByZXNlbnQoc2VjdGlvbikgfHwgIUVudGl0eVV0aWwuaXNQcmVzZW50KHNlY3Rpb24uY2hpbGRyZW4pIHx8IEVudGl0eVV0aWwuaXNCbGFuayh2YWx1ZU9wdGlvbikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmb3VuZCA9IEVudGl0eVV0aWwuZmlsdGVySGllcmFyY2hpY2FsbHkoXG4gICAgICBzZWN0aW9uLmNoaWxkcmVuLFxuICAgICAgJ2NoaWxkcmVuJyxcbiAgICAgICh7IG1vZGVsIH06IFNlY3Rpb24pID0+IG1vZGVsICYmIG1vZGVsLnR5cGUudG9Mb3dlckNhc2UoKSA9PT0gdmFsdWVPcHRpb24udG9Mb3dlckNhc2UoKSxcbiAgICApO1xuXG4gICAgcmV0dXJuIGZvdW5kICYmIGZvdW5kLnBvcCgpO1xuICB9XG5cbiAgZ2V0VG90YWxQcmljZXMoc2VjdGlvbjogU2VjdGlvbik6IE1hcDxzdHJpbmcsIG51bWJlcj4ge1xuICAgIGlmICghc2VjdGlvbiB8fCAhc2VjdGlvbi5tb2RlbCB8fCAhc2VjdGlvbi5tb2RlbC5jaGFyZ2VHcm91cEl0ZW1zKSB7XG4gICAgICByZXR1cm4gbmV3IE1hcCgpO1xuICAgIH1cblxuICAgIHJldHVybiBQcmljaW5nVXRpbHMuc3VtUHJpY2VCeVByb3BlcnR5KHNlY3Rpb24ubW9kZWwuY2hhcmdlR3JvdXBJdGVtcywgJ25ldFByaWNlJywgW1xuICAgICAgJ2NoYXJnZU1ldGhvZCcsXG4gICAgICAnc2VsbGluZ0ZyZXF1ZW5jeScsXG4gICAgXSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,36 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ export class SectionScopeService {
5
+ constructor() {
6
+ this.indent = 1;
7
+ this.templates = new BehaviorSubject([]);
8
+ }
9
+ get section() {
10
+ return this._section;
11
+ }
12
+ set section(value) {
13
+ this._section = value;
14
+ this.indent = this.getIndent(value);
15
+ }
16
+ getIndent(section) {
17
+ if (!section || !section.parentId) {
18
+ return 1;
19
+ }
20
+ else {
21
+ let current = section;
22
+ let indent = 1;
23
+ while (current && current.parent) {
24
+ current = current.parent;
25
+ indent++;
26
+ }
27
+ return indent;
28
+ }
29
+ }
30
+ }
31
+ SectionScopeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SectionScopeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
32
+ SectionScopeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SectionScopeService });
33
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SectionScopeService, decorators: [{
34
+ type: Injectable
35
+ }] });
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdGlvbi1zY29wZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZGsvcnVudGltZS9zZXJ2aWNlcy9zZWN0aW9uLXNjb3BlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUV4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUd2QyxNQUFNLE9BQU8sbUJBQW1CO0lBRGhDO1FBVUUsV0FBTSxHQUFHLENBQUMsQ0FBQztRQUdKLGNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBcUIsRUFBRSxDQUFDLENBQUM7S0FtQmhFO0lBOUJDLElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBSSxPQUFPLENBQUMsS0FBYztRQUN4QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQU1PLFNBQVMsQ0FBQyxPQUFnQjtRQUNoQyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRTtZQUNqQyxPQUFPLENBQUMsQ0FBQztTQUNWO2FBQU07WUFDTCxJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUM7WUFFdEIsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBRWYsT0FBTyxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtnQkFDaEMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7Z0JBRXpCLE1BQU0sRUFBRSxDQUFDO2FBQ1Y7WUFFRCxPQUFPLE1BQU0sQ0FBQztTQUNmO0lBQ0gsQ0FBQzs7aUhBOUJVLG1CQUFtQjtxSEFBbkIsbUJBQW1COzRGQUFuQixtQkFBbUI7a0JBRC9CLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2VjdGlvbiB9IGZyb20gJ0B2ZWxvY2VhcHBzL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTZWN0aW9uU2NvcGVTZXJ2aWNlIHtcbiAgZ2V0IHNlY3Rpb24oKTogU2VjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlY3Rpb247XG4gIH1cblxuICBzZXQgc2VjdGlvbih2YWx1ZTogU2VjdGlvbikge1xuICAgIHRoaXMuX3NlY3Rpb24gPSB2YWx1ZTtcbiAgICB0aGlzLmluZGVudCA9IHRoaXMuZ2V0SW5kZW50KHZhbHVlKTtcbiAgfVxuICBpbmRlbnQgPSAxO1xuICBwcml2YXRlIF9zZWN0aW9uITogU2VjdGlvbjtcblxuICBwdWJsaWMgdGVtcGxhdGVzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZW1wbGF0ZVJlZjxhbnk+W10+KFtdKTtcblxuICBwcml2YXRlIGdldEluZGVudChzZWN0aW9uOiBTZWN0aW9uKTogbnVtYmVyIHtcbiAgICBpZiAoIXNlY3Rpb24gfHwgIXNlY3Rpb24ucGFyZW50SWQpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgY3VycmVudCA9IHNlY3Rpb247XG5cbiAgICAgIGxldCBpbmRlbnQgPSAxO1xuXG4gICAgICB3aGlsZSAoY3VycmVudCAmJiBjdXJyZW50LnBhcmVudCkge1xuICAgICAgICBjdXJyZW50ID0gY3VycmVudC5wYXJlbnQ7XG5cbiAgICAgICAgaW5kZW50Kys7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbmRlbnQ7XG4gICAgfVxuICB9XG59XG4iXX0=