@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.
- package/README.md +3 -0
- package/bundles/veloceapps-sdk-cms.umd.js +1946 -0
- package/bundles/veloceapps-sdk-cms.umd.js.map +1 -0
- package/bundles/veloceapps-sdk-core.umd.js +1671 -0
- package/bundles/veloceapps-sdk-core.umd.js.map +1 -0
- package/bundles/veloceapps-sdk-runtime.umd.js +4414 -0
- package/bundles/veloceapps-sdk-runtime.umd.js.map +1 -0
- package/bundles/veloceapps-sdk.umd.js +3043 -0
- package/bundles/veloceapps-sdk.umd.js.map +1 -0
- package/cms/cms.actions.d.ts +22 -0
- package/cms/cms.default.d.ts +5 -0
- package/cms/cms.elements.d.ts +4 -0
- package/cms/components/element-children/element-children.component.d.ts +10 -0
- package/cms/components/element-children/element-children.module.d.ts +8 -0
- package/cms/components/element-renderer/element-renderer.component.d.ts +35 -0
- package/cms/components/element-renderer/element-renderer.module.d.ts +7 -0
- package/cms/components/element.component.d.ts +17 -0
- package/cms/components/index.d.ts +1 -0
- package/cms/components/plugin.component.d.ts +15 -0
- package/cms/components/preview/index.d.ts +2 -0
- package/cms/components/preview/preview.component.d.ts +34 -0
- package/cms/components/preview/preview.module.d.ts +11 -0
- package/cms/decorators/element.decorator.d.ts +2 -0
- package/cms/decorators/index.d.ts +1 -0
- package/cms/directives/custom-template.directive.d.ts +12 -0
- package/cms/engine/models/entity.d.ts +11 -0
- package/cms/engine/models/plugin.d.ts +5 -0
- package/cms/index.d.ts +11 -0
- package/cms/injection-tokens.d.ts +11 -0
- package/cms/launcher.module.d.ts +10 -0
- package/cms/modules/federated/default-options.d.ts +4 -0
- package/cms/modules/federated/export.d.ts +1 -0
- package/cms/modules/federated/federated.component.d.ts +26 -0
- package/cms/modules/federated/federated.module.d.ts +9 -0
- package/cms/modules/federated/federated.types.d.ts +30 -0
- package/cms/modules/federated/federated.utils.d.ts +1 -0
- package/cms/package.json +10 -0
- package/cms/plugins/configuration.plugin.d.ts +23 -0
- package/cms/plugins/io.plugin.d.ts +9 -0
- package/cms/plugins/script.plugin.d.ts +13 -0
- package/cms/services/dynamic-module.service.d.ts +15 -0
- package/cms/services/element-context.service.d.ts +8 -0
- package/cms/services/index.d.ts +3 -0
- package/cms/services/integration.state.d.ts +17 -0
- package/cms/services/io-provider.service.d.ts +15 -0
- package/cms/services/launcher.service.d.ts +18 -0
- package/cms/services/templates.service.d.ts +14 -0
- package/cms/types/common.types.d.ts +103 -0
- package/cms/types/configuration.types.d.ts +20 -0
- package/cms/types/elements.types.d.ts +2 -0
- package/cms/types/index.d.ts +5 -0
- package/cms/types/integration.types.d.ts +4 -0
- package/cms/types/path.types.d.ts +11 -0
- package/cms/utils/element.utils.d.ts +15 -0
- package/cms/utils/elements-resolver.d.ts +20 -0
- package/cms/utils/index.d.ts +3 -0
- package/cms/utils/path.utils.d.ts +5 -0
- package/cms/veloceapps-sdk-cms.d.ts +5 -0
- package/cms/vendor-map.d.ts +707 -0
- package/core/core.module.d.ts +8 -0
- package/core/index.d.ts +6 -0
- package/core/modules/configuration/configuration.module.d.ts +7 -0
- package/core/modules/configuration/helpers.d.ts +3 -0
- package/core/modules/configuration/index.d.ts +4 -0
- package/core/modules/configuration/services/configuration-runtime.service.d.ts +29 -0
- package/core/modules/configuration/services/configuration.service.d.ts +45 -0
- package/core/modules/configuration/services/runtime-context.service.d.ts +12 -0
- package/core/modules/configuration/types/configuration-runtime.types.d.ts +7 -0
- package/core/modules/flow-configuration/flow-configuration.module.d.ts +6 -0
- package/core/modules/flow-configuration/index.d.ts +4 -0
- package/core/modules/flow-configuration/services/flow-configuration.service.d.ts +38 -0
- package/core/modules/flow-configuration/services/flow-update.service.d.ts +12 -0
- package/core/modules/flow-configuration/types/update.types.d.ts +12 -0
- package/core/modules/index.d.ts +2 -0
- package/core/package.json +10 -0
- package/core/services/context.service.d.ts +18 -0
- package/core/services/index.d.ts +3 -0
- package/core/services/product-images.service.d.ts +12 -0
- package/core/services/quote-draft.service.d.ts +60 -0
- package/core/types/index.d.ts +3 -0
- package/core/types/quote-states.types.d.ts +6 -0
- package/core/types/runtime.types.d.ts +31 -0
- package/core/types/ui-definition.types.d.ts +26 -0
- package/core/utils/index.d.ts +2 -0
- package/core/utils/line-item.utils.d.ts +26 -0
- package/core/utils/line-item.worker.d.ts +12 -0
- package/core/veloceapps-sdk-core.d.ts +5 -0
- package/esm2015/cms/cms.actions.js +37 -0
- package/esm2015/cms/cms.default.js +6 -0
- package/esm2015/cms/cms.elements.js +29 -0
- package/esm2015/cms/components/element-children/element-children.component.js +23 -0
- package/esm2015/cms/components/element-children/element-children.module.js +18 -0
- package/esm2015/cms/components/element-renderer/element-renderer.component.js +143 -0
- package/esm2015/cms/components/element-renderer/element-renderer.module.js +16 -0
- package/esm2015/cms/components/element.component.js +44 -0
- package/esm2015/cms/components/index.js +2 -0
- package/esm2015/cms/components/plugin.component.js +16 -0
- package/esm2015/cms/components/preview/index.js +3 -0
- package/esm2015/cms/components/preview/preview.component.js +105 -0
- package/esm2015/cms/components/preview/preview.module.js +23 -0
- package/esm2015/cms/decorators/element.decorator.js +6 -0
- package/esm2015/cms/decorators/index.js +2 -0
- package/esm2015/cms/directives/custom-template.directive.js +25 -0
- package/esm2015/cms/engine/models/entity.js +18 -0
- package/esm2015/cms/engine/models/plugin.js +6 -0
- package/esm2015/cms/index.js +11 -0
- package/esm2015/cms/injection-tokens.js +8 -0
- package/esm2015/cms/launcher.module.js +23 -0
- package/esm2015/cms/modules/federated/default-options.js +5 -0
- package/esm2015/cms/modules/federated/export.js +2 -0
- package/esm2015/cms/modules/federated/federated.component.js +82 -0
- package/esm2015/cms/modules/federated/federated.module.js +19 -0
- package/esm2015/cms/modules/federated/federated.types.js +2 -0
- package/esm2015/cms/modules/federated/federated.utils.js +37 -0
- package/esm2015/cms/plugins/configuration.plugin.js +98 -0
- package/esm2015/cms/plugins/io.plugin.js +37 -0
- package/esm2015/cms/plugins/script.plugin.js +66 -0
- package/esm2015/cms/services/dynamic-module.service.js +33 -0
- package/esm2015/cms/services/element-context.service.js +10 -0
- package/esm2015/cms/services/index.js +4 -0
- package/esm2015/cms/services/integration.state.js +40 -0
- package/esm2015/cms/services/io-provider.service.js +51 -0
- package/esm2015/cms/services/launcher.service.js +57 -0
- package/esm2015/cms/services/templates.service.js +31 -0
- package/esm2015/cms/types/common.types.js +2 -0
- package/esm2015/cms/types/configuration.types.js +2 -0
- package/esm2015/cms/types/elements.types.js +2 -0
- package/esm2015/cms/types/index.js +6 -0
- package/esm2015/cms/types/integration.types.js +2 -0
- package/esm2015/cms/types/path.types.js +2 -0
- package/esm2015/cms/utils/element.utils.js +149 -0
- package/esm2015/cms/utils/elements-resolver.js +108 -0
- package/esm2015/cms/utils/index.js +4 -0
- package/esm2015/cms/utils/path.utils.js +67 -0
- package/esm2015/cms/veloceapps-sdk-cms.js +5 -0
- package/esm2015/cms/vendor-map.js +39 -0
- package/esm2015/core/core.module.js +18 -0
- package/esm2015/core/index.js +7 -0
- package/esm2015/core/modules/configuration/configuration.module.js +34 -0
- package/esm2015/core/modules/configuration/helpers.js +10 -0
- package/esm2015/core/modules/configuration/index.js +5 -0
- package/esm2015/core/modules/configuration/services/configuration-runtime.service.js +92 -0
- package/esm2015/core/modules/configuration/services/configuration.service.js +173 -0
- package/esm2015/core/modules/configuration/services/runtime-context.service.js +51 -0
- package/esm2015/core/modules/configuration/types/configuration-runtime.types.js +2 -0
- package/esm2015/core/modules/flow-configuration/flow-configuration.module.js +18 -0
- package/esm2015/core/modules/flow-configuration/index.js +5 -0
- package/esm2015/core/modules/flow-configuration/services/flow-configuration.service.js +135 -0
- package/esm2015/core/modules/flow-configuration/services/flow-update.service.js +129 -0
- package/esm2015/core/modules/flow-configuration/types/update.types.js +2 -0
- package/esm2015/core/modules/index.js +3 -0
- package/esm2015/core/services/context.service.js +50 -0
- package/esm2015/core/services/index.js +4 -0
- package/esm2015/core/services/product-images.service.js +30 -0
- package/esm2015/core/services/quote-draft.service.js +201 -0
- package/esm2015/core/types/index.js +4 -0
- package/esm2015/core/types/quote-states.types.js +2 -0
- package/esm2015/core/types/runtime.types.js +16 -0
- package/esm2015/core/types/ui-definition.types.js +2 -0
- package/esm2015/core/utils/index.js +3 -0
- package/esm2015/core/utils/line-item.utils.js +100 -0
- package/esm2015/core/utils/line-item.worker.js +19 -0
- package/esm2015/core/veloceapps-sdk-core.js +5 -0
- package/esm2015/index.js +2 -0
- package/esm2015/runtime/components/component-preview/component-preview.component.js +125 -0
- package/esm2015/runtime/components/index.js +5 -0
- package/esm2015/runtime/components/section-renderer/section-renderer.component.js +71 -0
- package/esm2015/runtime/components/ui-runtime/runtime.component.js +427 -0
- package/esm2015/runtime/components/ui-runtime-preview/runtime-preview.component.js +109 -0
- package/esm2015/runtime/execution/components/children-placeholder/children-placeholder.component.js +68 -0
- package/esm2015/runtime/execution/components/context-provider/context-provider.component.js +36 -0
- package/esm2015/runtime/execution/components/execution-section-renderer/execution-section-renderer.component.js +72 -0
- package/esm2015/runtime/execution/components/federated/federated.component.js +81 -0
- package/esm2015/runtime/execution/components/velo-attribute/velo-attribute.component.js +65 -0
- package/esm2015/runtime/execution/components/velo-multiselect/velo-multiselect.component.js +136 -0
- package/esm2015/runtime/execution/components/velo-port-checkbox/velo-port-checkbox.component.js +80 -0
- package/esm2015/runtime/execution/components/velo-port-dropdown/velo-port-dropdown.component.js +101 -0
- package/esm2015/runtime/execution/components/velo-port-radio/velo-port-radio.component.js +150 -0
- package/esm2015/runtime/execution/components/velo-type/velo-type.component.js +121 -0
- package/esm2015/runtime/execution/directives/section-script.directive.js +242 -0
- package/esm2015/runtime/execution/directives/sf-query.directive.js +34 -0
- package/esm2015/runtime/execution/directives/velo-attribute.directive.js +86 -0
- package/esm2015/runtime/execution/directives/velo-port.directive.js +373 -0
- package/esm2015/runtime/execution/directives/vl-approval.directive.js +22 -0
- package/esm2015/runtime/execution/directives/vl-document-attachments.directive.js +35 -0
- package/esm2015/runtime/execution/directives/vl-document-templates.directive.js +59 -0
- package/esm2015/runtime/execution/directives/vl-quote.directive.js +41 -0
- package/esm2015/runtime/execution/directives/vl-ramp.directive.js +51 -0
- package/esm2015/runtime/execution/runtime-execution.module.js +163 -0
- package/esm2015/runtime/execution/utils/federated.util.js +37 -0
- package/esm2015/runtime/index.js +5 -0
- package/esm2015/runtime/runtime.module.js +104 -0
- package/esm2015/runtime/services/cart.service.js +27 -0
- package/esm2015/runtime/services/collapsible-state.service.js +34 -0
- package/esm2015/runtime/services/configuration.service.js +102 -0
- package/esm2015/runtime/services/current-state.service.js +17 -0
- package/esm2015/runtime/services/form-scope.service.js +30 -0
- package/esm2015/runtime/services/index.js +4 -0
- package/esm2015/runtime/services/product-model-cache.service.js +30 -0
- package/esm2015/runtime/services/runtime-context.service.js +56 -0
- package/esm2015/runtime/services/runtime-form.service.js +224 -0
- package/esm2015/runtime/services/runtime.service.js +108 -0
- package/esm2015/runtime/services/section-helper.service.js +27 -0
- package/esm2015/runtime/services/section-scope.service.js +36 -0
- package/esm2015/runtime/services/section-store.service.js +22 -0
- package/esm2015/runtime/services/section.service.js +124 -0
- package/esm2015/runtime/types/bound-data.types.js +7 -0
- package/esm2015/runtime/types/index.js +2 -0
- package/esm2015/runtime/types/runtime.types.js +2 -0
- package/esm2015/runtime/types/script-registry.types.js +51 -0
- package/esm2015/runtime/utils/line-item.util.js +273 -0
- package/esm2015/runtime/utils/section.utils.js +26 -0
- package/esm2015/runtime/utils/sections-binder.helper.js +105 -0
- package/esm2015/runtime/veloceapps-sdk-runtime.js +5 -0
- package/esm2015/src/components/dialog/dialog.component.js +30 -0
- package/esm2015/src/components/dialog/dialog.module.js +19 -0
- package/esm2015/src/components/dialog/dialog.types.js +2 -0
- package/esm2015/src/components/doc-gen/doc-gen.component.js +109 -0
- package/esm2015/src/components/doc-gen/doc-gen.module.js +19 -0
- package/esm2015/src/components/header/cart-overlay/cart-preview.component.js +122 -0
- package/esm2015/src/components/header/cart-overlay/cart-preview.module.js +46 -0
- package/esm2015/src/components/header/header.component.js +284 -0
- package/esm2015/src/components/header/header.module.js +46 -0
- package/esm2015/src/components/header/header.types.js +2 -0
- package/esm2015/src/constants.js +2 -0
- package/esm2015/src/flow-routing.module.js +137 -0
- package/esm2015/src/flow.component.js +45 -0
- package/esm2015/src/flow.module.js +60 -0
- package/esm2015/src/guards/context.guard.js +84 -0
- package/esm2015/src/guards/index.js +2 -0
- package/esm2015/src/guards/product-unload.guard.js +43 -0
- package/esm2015/src/guards/root.guard.js +41 -0
- package/esm2015/src/index.js +7 -0
- package/esm2015/src/pages/catalog/catalog.component.js +117 -0
- package/esm2015/src/pages/catalog/catalog.module.js +20 -0
- package/esm2015/src/pages/debug/debug.component.js +61 -0
- package/esm2015/src/pages/debug/debug.module.js +48 -0
- package/esm2015/src/pages/empty-account/empty-account.component.js +17 -0
- package/esm2015/src/pages/empty-account/empty-account.module.js +20 -0
- package/esm2015/src/pages/legacy-product/legacy-product.component.js +132 -0
- package/esm2015/src/pages/legacy-product/legacy-product.module.js +21 -0
- package/esm2015/src/pages/product/product.component.js +108 -0
- package/esm2015/src/pages/product/product.module.js +20 -0
- package/esm2015/src/pages/record-not-found/record-not-found.component.js +29 -0
- package/esm2015/src/pages/record-not-found/record-not-found.module.js +20 -0
- package/esm2015/src/pages/remote/remote.component.js +353 -0
- package/esm2015/src/pages/remote/remote.module.js +20 -0
- package/esm2015/src/pages/remote/remote.types.js +2 -0
- package/esm2015/src/pages/shopping-cart/shopping-cart.component.js +117 -0
- package/esm2015/src/pages/shopping-cart/shopping-cart.module.js +20 -0
- package/esm2015/src/resolvers/flow.resolver.js +62 -0
- package/esm2015/src/resolvers/quote.resolver.js +74 -0
- package/esm2015/src/services/doc-gen.service.js +33 -0
- package/esm2015/src/services/flow-dialog.service.js +123 -0
- package/esm2015/src/services/flow-router.service.js +124 -0
- package/esm2015/src/services/flow.service.js +71 -0
- package/esm2015/src/services/index.js +2 -0
- package/esm2015/src/types/context-route.types.js +2 -0
- package/esm2015/src/types/flow-customization.types.js +3 -0
- package/esm2015/src/types/index.js +3 -0
- package/esm2015/src/types/route.types.js +2 -0
- package/esm2015/src/utils/flow.utils.js +22 -0
- package/esm2015/src/utils/index.js +2 -0
- package/esm2015/veloceapps-sdk.js +5 -0
- package/fesm2015/veloceapps-sdk-cms.js +1357 -0
- package/fesm2015/veloceapps-sdk-cms.js.map +1 -0
- package/fesm2015/veloceapps-sdk-core.js +1029 -0
- package/fesm2015/veloceapps-sdk-core.js.map +1 -0
- package/fesm2015/veloceapps-sdk-runtime.js +3894 -0
- package/fesm2015/veloceapps-sdk-runtime.js.map +1 -0
- package/fesm2015/veloceapps-sdk.js +2449 -0
- package/fesm2015/veloceapps-sdk.js.map +1 -0
- package/index.d.ts +1 -0
- package/package.json +50 -0
- package/runtime/components/component-preview/component-preview.component.d.ts +27 -0
- package/runtime/components/index.d.ts +4 -0
- package/runtime/components/section-renderer/section-renderer.component.d.ts +25 -0
- package/runtime/components/ui-runtime/runtime.component.d.ts +53 -0
- package/runtime/components/ui-runtime-preview/runtime-preview.component.d.ts +27 -0
- package/runtime/execution/components/children-placeholder/children-placeholder.component.d.ts +30 -0
- package/runtime/execution/components/context-provider/context-provider.component.d.ts +14 -0
- package/runtime/execution/components/execution-section-renderer/execution-section-renderer.component.d.ts +25 -0
- package/runtime/execution/components/federated/federated.component.d.ts +36 -0
- package/runtime/execution/components/velo-attribute/velo-attribute.component.d.ts +19 -0
- package/runtime/execution/components/velo-multiselect/velo-multiselect.component.d.ts +35 -0
- package/runtime/execution/components/velo-port-checkbox/velo-port-checkbox.component.d.ts +22 -0
- package/runtime/execution/components/velo-port-dropdown/velo-port-dropdown.component.d.ts +22 -0
- package/runtime/execution/components/velo-port-radio/velo-port-radio.component.d.ts +28 -0
- package/runtime/execution/components/velo-type/velo-type.component.d.ts +31 -0
- package/runtime/execution/directives/section-script.directive.d.ts +59 -0
- package/runtime/execution/directives/sf-query.directive.d.ts +15 -0
- package/runtime/execution/directives/velo-attribute.directive.d.ts +26 -0
- package/runtime/execution/directives/velo-port.directive.d.ts +74 -0
- package/runtime/execution/directives/vl-approval.directive.d.ts +10 -0
- package/runtime/execution/directives/vl-document-attachments.directive.d.ts +15 -0
- package/runtime/execution/directives/vl-document-templates.directive.d.ts +33 -0
- package/runtime/execution/directives/vl-quote.directive.d.ts +14 -0
- package/runtime/execution/directives/vl-ramp.directive.d.ts +15 -0
- package/runtime/execution/runtime-execution.module.d.ts +27 -0
- package/runtime/execution/utils/federated.util.d.ts +6 -0
- package/runtime/index.d.ts +4 -0
- package/runtime/package.json +10 -0
- package/runtime/runtime.module.d.ts +18 -0
- package/runtime/services/cart.service.d.ts +15 -0
- package/runtime/services/collapsible-state.service.d.ts +15 -0
- package/runtime/services/configuration.service.d.ts +19 -0
- package/runtime/services/current-state.service.d.ts +8 -0
- package/runtime/services/form-scope.service.d.ts +20 -0
- package/runtime/services/index.d.ts +3 -0
- package/runtime/services/product-model-cache.service.d.ts +14 -0
- package/runtime/services/runtime-context.service.d.ts +16 -0
- package/runtime/services/runtime-form.service.d.ts +24 -0
- package/runtime/services/runtime.service.d.ts +43 -0
- package/runtime/services/section-helper.service.d.ts +8 -0
- package/runtime/services/section-scope.service.d.ts +14 -0
- package/runtime/services/section-store.service.d.ts +11 -0
- package/runtime/services/section.service.d.ts +30 -0
- package/runtime/types/bound-data.types.d.ts +13 -0
- package/runtime/types/index.d.ts +1 -0
- package/runtime/types/runtime.types.d.ts +19 -0
- package/runtime/types/script-registry.types.d.ts +13 -0
- package/runtime/utils/line-item.util.d.ts +34 -0
- package/runtime/utils/section.utils.d.ts +2 -0
- package/runtime/utils/sections-binder.helper.d.ts +16 -0
- package/runtime/veloceapps-sdk-runtime.d.ts +5 -0
- package/src/components/dialog/dialog.component.d.ts +13 -0
- package/src/components/dialog/dialog.module.d.ts +9 -0
- package/src/components/dialog/dialog.types.d.ts +6 -0
- package/src/components/doc-gen/doc-gen.component.d.ts +26 -0
- package/src/components/doc-gen/doc-gen.module.d.ts +9 -0
- package/src/components/header/cart-overlay/cart-preview.component.d.ts +36 -0
- package/src/components/header/cart-overlay/cart-preview.module.d.ts +14 -0
- package/src/components/header/header.component.d.ts +63 -0
- package/src/components/header/header.module.d.ts +14 -0
- package/src/components/header/header.types.d.ts +20 -0
- package/src/constants.d.ts +1 -0
- package/src/flow-routing.module.d.ts +13 -0
- package/src/flow.component.d.ts +23 -0
- package/src/flow.module.d.ts +16 -0
- package/src/guards/context.guard.d.ts +19 -0
- package/src/guards/index.d.ts +1 -0
- package/src/guards/product-unload.guard.d.ts +16 -0
- package/src/guards/root.guard.d.ts +15 -0
- package/src/index.d.ts +6 -0
- package/src/pages/catalog/catalog.component.d.ts +32 -0
- package/src/pages/catalog/catalog.module.d.ts +10 -0
- package/src/pages/debug/debug.component.d.ts +25 -0
- package/src/pages/debug/debug.module.d.ts +14 -0
- package/src/pages/empty-account/empty-account.component.d.ts +5 -0
- package/src/pages/empty-account/empty-account.module.d.ts +10 -0
- package/src/pages/legacy-product/legacy-product.component.d.ts +37 -0
- package/src/pages/legacy-product/legacy-product.module.d.ts +10 -0
- package/src/pages/product/product.component.d.ts +32 -0
- package/src/pages/product/product.module.d.ts +10 -0
- package/src/pages/record-not-found/record-not-found.component.d.ts +11 -0
- package/src/pages/record-not-found/record-not-found.module.d.ts +9 -0
- package/src/pages/remote/remote.component.d.ts +47 -0
- package/src/pages/remote/remote.module.d.ts +10 -0
- package/src/pages/remote/remote.types.d.ts +4 -0
- package/src/pages/shopping-cart/shopping-cart.component.d.ts +32 -0
- package/src/pages/shopping-cart/shopping-cart.module.d.ts +10 -0
- package/src/resolvers/flow.resolver.d.ts +16 -0
- package/src/resolvers/quote.resolver.d.ts +20 -0
- package/src/services/doc-gen.service.d.ts +13 -0
- package/src/services/flow-dialog.service.d.ts +26 -0
- package/src/services/flow-router.service.d.ts +35 -0
- package/src/services/flow.service.d.ts +17 -0
- package/src/services/index.d.ts +1 -0
- package/src/types/context-route.types.d.ts +5 -0
- package/src/types/flow-customization.types.d.ts +11 -0
- package/src/types/index.d.ts +2 -0
- package/src/types/route.types.d.ts +9 -0
- package/src/utils/flow.utils.d.ts +8 -0
- package/src/utils/index.d.ts +1 -0
- package/veloceapps-sdk.d.ts +5 -0
@@ -0,0 +1,427 @@
|
|
1
|
+
import { HttpErrorResponse } from '@angular/common/http';
|
2
|
+
import { Component, EventEmitter, Inject, Output } from '@angular/core';
|
3
|
+
import { FormGroup } from '@angular/forms';
|
4
|
+
import { EntityUtil, OrderByPipe, SalesforceIdUtils, SearchFilterPipe, UUID, } from '@veloceapps/core';
|
5
|
+
import { MessageService } from 'primeng/api';
|
6
|
+
import { Subject } from 'rxjs';
|
7
|
+
import { takeUntil } from 'rxjs/operators';
|
8
|
+
import { CollapsibleStateService } from '../../services/collapsible-state.service';
|
9
|
+
import { FormScopeService } from '../../services/form-scope.service';
|
10
|
+
import { SectionHelperService } from '../../services/section-helper.service';
|
11
|
+
import { BoundDataType } from '../../types/bound-data.types';
|
12
|
+
import { LineItemUtil } from '../../utils/line-item.util';
|
13
|
+
import { getSectionTree } from '../../utils/section.utils';
|
14
|
+
import { SectionsBinderHelper } from '../../utils/sections-binder.helper';
|
15
|
+
import * as i0 from "@angular/core";
|
16
|
+
import * as i1 from "../../services/section.service";
|
17
|
+
import * as i2 from "../../services/form-scope.service";
|
18
|
+
import * as i3 from "../../services/collapsible-state.service";
|
19
|
+
import * as i4 from "../../services/runtime-form.service";
|
20
|
+
import * as i5 from "../../services/runtime.service";
|
21
|
+
import * as i6 from "@veloceapps/sdk/core";
|
22
|
+
import * as i7 from "@veloceapps/core";
|
23
|
+
import * as i8 from "@veloceapps/components";
|
24
|
+
import * as i9 from "../section-renderer/section-renderer.component";
|
25
|
+
import * as i10 from "@angular/common";
|
26
|
+
import * as i11 from "@angular/forms";
|
27
|
+
import * as i12 from "primeng/api";
|
28
|
+
export class RuntimeComponent {
|
29
|
+
constructor(sectionsService, formScope, collapsibleState, formService, runtimeService, messageService, contextService, orderByPipe, searchFilterPipe, cdr) {
|
30
|
+
this.sectionsService = sectionsService;
|
31
|
+
this.formScope = formScope;
|
32
|
+
this.collapsibleState = collapsibleState;
|
33
|
+
this.formService = formService;
|
34
|
+
this.runtimeService = runtimeService;
|
35
|
+
this.messageService = messageService;
|
36
|
+
this.contextService = contextService;
|
37
|
+
this.orderByPipe = orderByPipe;
|
38
|
+
this.searchFilterPipe = searchFilterPipe;
|
39
|
+
this.cdr = cdr;
|
40
|
+
this.messageBucketId = 'ui.runtime';
|
41
|
+
this.sortedSections = [];
|
42
|
+
this.staticSections = [];
|
43
|
+
this.form = new FormGroup({});
|
44
|
+
this.solutionIsReady = false;
|
45
|
+
this.unsubscribe = new Subject();
|
46
|
+
this.solutionUpdated = new EventEmitter();
|
47
|
+
}
|
48
|
+
adjustPrice(valueOption, section, solutionLineItem, patch) {
|
49
|
+
const parentLineItem = section.model && LineItemUtil.findById(section.model.id, [solutionLineItem]);
|
50
|
+
if (!parentLineItem) {
|
51
|
+
return;
|
52
|
+
}
|
53
|
+
parentLineItem.lineItems = parentLineItem.lineItems.map(lineItem => {
|
54
|
+
const { productId, chargeItems } = lineItem;
|
55
|
+
if (productId !== valueOption) {
|
56
|
+
return lineItem;
|
57
|
+
}
|
58
|
+
const chargeItem = chargeItems.shift();
|
59
|
+
const updatedChargeItem = Object.assign(Object.assign({}, chargeItem), patch);
|
60
|
+
return Object.assign(Object.assign({}, lineItem), { chargeItems: [updatedChargeItem, ...chargeItems] });
|
61
|
+
});
|
62
|
+
this.updateRuntime(solutionLineItem);
|
63
|
+
}
|
64
|
+
ngOnInit() {
|
65
|
+
this.formScope.formSubmitEvent.pipe(takeUntil(this.unsubscribe)).subscribe((e) => {
|
66
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
67
|
+
try {
|
68
|
+
this.form.updateValueAndValidity();
|
69
|
+
const solutionLineItem = EntityUtil.clone(this.solutionLineItem);
|
70
|
+
const section = this.findSection(e.id);
|
71
|
+
if (!section) {
|
72
|
+
throw 'Section not found';
|
73
|
+
}
|
74
|
+
const entityType = section.boundData.entityType;
|
75
|
+
if (entityType === BoundDataType[BoundDataType.PORT] || entityType === BoundDataType[BoundDataType.TYPE]) {
|
76
|
+
if (e.action === 'patch' && EntityUtil.isPresent(e.valueOption)) {
|
77
|
+
const valueOption = e['valueOption'];
|
78
|
+
if (!((_a = section.model) === null || _a === void 0 ? void 0 : _a.parentId)) {
|
79
|
+
this.collapsibleState.clearState(section.id);
|
80
|
+
this.updateRuntime(valueOption);
|
81
|
+
}
|
82
|
+
else {
|
83
|
+
const parentLineItem = LineItemUtil.findById(section.model.parentId, [solutionLineItem]);
|
84
|
+
if (parentLineItem) {
|
85
|
+
const indx = parentLineItem.lineItems.findIndex(item => { var _a; return item.id === ((_a = section.model) === null || _a === void 0 ? void 0 : _a.id); });
|
86
|
+
parentLineItem.lineItems.splice(indx, 1, valueOption);
|
87
|
+
this.collapsibleState.clearState(section.id);
|
88
|
+
this.updateRuntime(solutionLineItem);
|
89
|
+
}
|
90
|
+
}
|
91
|
+
}
|
92
|
+
}
|
93
|
+
if (entityType === BoundDataType[BoundDataType.PORT]) {
|
94
|
+
if (e.action === 'upsert') {
|
95
|
+
const parentLineItem = section.model && LineItemUtil.findById(section.model.id, [solutionLineItem]);
|
96
|
+
if (parentLineItem) {
|
97
|
+
parentLineItem.lineItems.forEach(i => {
|
98
|
+
if (e.selectedValueOptions &&
|
99
|
+
e.selectedValueOptions.findIndex(v => v.toLowerCase() === i.type.toLowerCase()) < 0) {
|
100
|
+
this.updateCardinalityVariable(parentLineItem, i, 0);
|
101
|
+
}
|
102
|
+
});
|
103
|
+
const lineItems = parentLineItem === null || parentLineItem === void 0 ? void 0 : parentLineItem.lineItems.filter(i => e.selectedValueOptions &&
|
104
|
+
e.selectedValueOptions.findIndex(v => v.toLowerCase() === i.type.toLowerCase()) > -1);
|
105
|
+
(_b = e.selectedValueOptions) === null || _b === void 0 ? void 0 : _b.forEach(v => {
|
106
|
+
if ((lineItems === null || lineItems === void 0 ? void 0 : lineItems.findIndex(item => item.type.toLowerCase() === v.toLowerCase())) === -1) {
|
107
|
+
const lineItem = this.createLineItem(section, v, parentLineItem);
|
108
|
+
this.updateCardinalityVariable(parentLineItem, lineItem);
|
109
|
+
lineItems.push(lineItem);
|
110
|
+
}
|
111
|
+
});
|
112
|
+
this.updateRuntime(solutionLineItem);
|
113
|
+
}
|
114
|
+
}
|
115
|
+
if (e.action === 'create') {
|
116
|
+
const parentLineItem = section.model && LineItemUtil.findById(section.model.id, [solutionLineItem]);
|
117
|
+
if (parentLineItem) {
|
118
|
+
const valueOption = e.valueOption;
|
119
|
+
const lineItem = this.createLineItem(section, valueOption, parentLineItem);
|
120
|
+
parentLineItem.lineItems.push(lineItem);
|
121
|
+
this.updateCardinalityVariable(parentLineItem, lineItem);
|
122
|
+
this.updateRuntime(solutionLineItem);
|
123
|
+
}
|
124
|
+
}
|
125
|
+
if (e.action === 'copy') {
|
126
|
+
const parentLineItem = section.model && LineItemUtil.findById(section.model.id, [solutionLineItem]);
|
127
|
+
if (parentLineItem) {
|
128
|
+
const valueOption = e.valueOption;
|
129
|
+
const lineItemToCopy = parentLineItem.lineItems.find(li => li.id === valueOption);
|
130
|
+
if (lineItemToCopy) {
|
131
|
+
const lineItem = Object.assign(Object.assign({}, lineItemToCopy), { id: '' });
|
132
|
+
parentLineItem.lineItems.push(lineItem);
|
133
|
+
this.updateCardinalityVariable(parentLineItem, lineItem);
|
134
|
+
this.updateRuntime(solutionLineItem);
|
135
|
+
}
|
136
|
+
}
|
137
|
+
}
|
138
|
+
if (e.action === 'update') {
|
139
|
+
const parentLineItem = section.model && LineItemUtil.findById(section.model.id, [solutionLineItem]);
|
140
|
+
if (parentLineItem) {
|
141
|
+
//Assuming that radio control is the only control, that 'updates' values
|
142
|
+
const previous = (_c = section.model) === null || _c === void 0 ? void 0 : _c.lineItems.filter(li => li.port && li.port === section.boundData.name)[0];
|
143
|
+
if (previous) {
|
144
|
+
this.updateCardinalityVariable(parentLineItem, previous, 0);
|
145
|
+
}
|
146
|
+
const index = parentLineItem.lineItems.findIndex(li => li.id === (previous === null || previous === void 0 ? void 0 : previous.id));
|
147
|
+
const lineItem = {
|
148
|
+
id: UUID.UUID(),
|
149
|
+
qty: previous === null || previous === void 0 ? void 0 : previous.qty,
|
150
|
+
port: previous === null || previous === void 0 ? void 0 : previous.port,
|
151
|
+
type: EntityUtil.isPresent(e.valueOption) ? e.valueOption : this.form.controls[e.id].value,
|
152
|
+
cfgStatus: 'New',
|
153
|
+
parentId: previous === null || previous === void 0 ? void 0 : previous.parentId,
|
154
|
+
};
|
155
|
+
this.updateCardinalityVariable(parentLineItem, lineItem);
|
156
|
+
parentLineItem.lineItems[index] = lineItem;
|
157
|
+
this.updateRuntime(solutionLineItem);
|
158
|
+
}
|
159
|
+
}
|
160
|
+
if (e.action === 'remove') {
|
161
|
+
const parentLineItem = section.model && LineItemUtil.findById(section.model.id, [solutionLineItem]);
|
162
|
+
if (parentLineItem &&
|
163
|
+
SectionsBinderHelper.isRemoveAllowed(parentLineItem, section.boundData.name, (_d = section.model) === null || _d === void 0 ? void 0 : _d.qty)) {
|
164
|
+
const index = parentLineItem.lineItems.findIndex(item => { var _a; return item.type.toLowerCase() === ((_a = e.valueOption) === null || _a === void 0 ? void 0 : _a.toLowerCase()); });
|
165
|
+
if (index > -1) {
|
166
|
+
const removed = parentLineItem.lineItems.splice(index, 1)[0];
|
167
|
+
this.updateCardinalityVariable(parentLineItem, removed, 0);
|
168
|
+
this.updateRuntime(solutionLineItem);
|
169
|
+
}
|
170
|
+
}
|
171
|
+
}
|
172
|
+
if (e.action === 'qtyUpdate') {
|
173
|
+
const typeSection = e.valueOption
|
174
|
+
? SectionHelperService.findSectionForValue(section, e.valueOption)
|
175
|
+
: undefined;
|
176
|
+
const typeLineItem = (typeSection === null || typeSection === void 0 ? void 0 : typeSection.model) && LineItemUtil.findById(typeSection.model.id, [solutionLineItem]);
|
177
|
+
if (typeSection && typeLineItem) {
|
178
|
+
typeLineItem.qty = +this.form.controls[typeSection.id + 'qty'].value;
|
179
|
+
typeLineItem.cfgStatus = 'User';
|
180
|
+
this.updateRuntime(solutionLineItem);
|
181
|
+
}
|
182
|
+
}
|
183
|
+
if (e.action === 'adjustNetPrice') {
|
184
|
+
const { valueOption, options } = e;
|
185
|
+
const { amount } = options !== null && options !== void 0 ? options : {};
|
186
|
+
const priceAdjustment = {
|
187
|
+
type: 'OVERRIDE_AMOUNT',
|
188
|
+
explanation: 'Manual net price adjustment',
|
189
|
+
amount,
|
190
|
+
};
|
191
|
+
this.adjustPrice(valueOption, section, solutionLineItem, { priceAdjustment });
|
192
|
+
}
|
193
|
+
if (e.action === 'adjustListPrice') {
|
194
|
+
const { valueOption, options } = e;
|
195
|
+
const { amount } = options !== null && options !== void 0 ? options : {};
|
196
|
+
const listPriceAdjustment = {
|
197
|
+
type: 'OVERRIDE_AMOUNT',
|
198
|
+
explanation: 'Manual list price adjustment',
|
199
|
+
amount,
|
200
|
+
};
|
201
|
+
this.adjustPrice(valueOption, section, solutionLineItem, { listPriceAdjustment });
|
202
|
+
}
|
203
|
+
}
|
204
|
+
if (entityType === BoundDataType[BoundDataType.TYPE]) {
|
205
|
+
if (e.action === 'remove') {
|
206
|
+
const parentLineItem = ((_e = section.model) === null || _e === void 0 ? void 0 : _e.parentId) && LineItemUtil.findById(section.model.parentId, [solutionLineItem]);
|
207
|
+
if (parentLineItem &&
|
208
|
+
section.model &&
|
209
|
+
section.model.port &&
|
210
|
+
SectionsBinderHelper.isRemoveAllowed(parentLineItem, section.model.port, (_f = section.model) === null || _f === void 0 ? void 0 : _f.qty)) {
|
211
|
+
const index = parentLineItem.lineItems.findIndex(item => { var _a; return item.id === ((_a = section.model) === null || _a === void 0 ? void 0 : _a.id); });
|
212
|
+
if (index > -1) {
|
213
|
+
const removed = parentLineItem.lineItems.splice(index, 1)[0];
|
214
|
+
this.updateCardinalityVariable(parentLineItem, removed, 0);
|
215
|
+
this.collapsibleState.clearState(section.id);
|
216
|
+
this.updateRuntime(solutionLineItem);
|
217
|
+
}
|
218
|
+
}
|
219
|
+
}
|
220
|
+
if (e.action === 'qtyUpdate') {
|
221
|
+
const typeLineItem = section.model && LineItemUtil.findById(section.model.id, [solutionLineItem]);
|
222
|
+
if (typeLineItem) {
|
223
|
+
const qty = +this.form.controls[e.id + 'qty'].value;
|
224
|
+
if (typeLineItem.parentId) {
|
225
|
+
const parentLineItem = LineItemUtil.findById(typeLineItem.parentId, [solutionLineItem]);
|
226
|
+
if (parentLineItem) {
|
227
|
+
this.updateCardinalityVariable(parentLineItem, typeLineItem, qty);
|
228
|
+
}
|
229
|
+
}
|
230
|
+
typeLineItem.qty = qty;
|
231
|
+
typeLineItem.cfgStatus = 'User';
|
232
|
+
this.updateRuntime(solutionLineItem);
|
233
|
+
}
|
234
|
+
}
|
235
|
+
}
|
236
|
+
if (entityType === BoundDataType[BoundDataType.ATTRIBUTE]) {
|
237
|
+
if (e.action === 'update') {
|
238
|
+
const parentLineItem = section.model && LineItemUtil.findById(section.model.id, [solutionLineItem]);
|
239
|
+
const attribute = parentLineItem === null || parentLineItem === void 0 ? void 0 : parentLineItem.attributes.find(attr => attr.name.toLowerCase() === section.boundData.name.toLowerCase());
|
240
|
+
if (attribute) {
|
241
|
+
//Explicitly set value always win
|
242
|
+
let value = typeof e.valueOption !== 'undefined' ? e.valueOption : this.form.controls[e.id].value;
|
243
|
+
if (attribute.type === 'BOOLEAN') {
|
244
|
+
value = value ? 1 : 0;
|
245
|
+
}
|
246
|
+
attribute.value = value;
|
247
|
+
attribute.cfgStatus = 'User';
|
248
|
+
this.updateRuntime(solutionLineItem);
|
249
|
+
}
|
250
|
+
}
|
251
|
+
}
|
252
|
+
}
|
253
|
+
catch (e) {
|
254
|
+
console.log(e);
|
255
|
+
this.messageService.add({ key: this.messageBucketId, summary: `Configuration failed ${(_g = e) === null || _g === void 0 ? void 0 : _g.message}` });
|
256
|
+
}
|
257
|
+
});
|
258
|
+
this.runtimeService.onSolutionReadyEvent
|
259
|
+
.pipe(takeUntil(this.unsubscribe))
|
260
|
+
.subscribe(lineItem => this.onSolutionReady(lineItem));
|
261
|
+
this.runtimeService.onSolutionUpdatedEvent
|
262
|
+
.pipe(takeUntil(this.unsubscribe))
|
263
|
+
.subscribe((data) => {
|
264
|
+
if (!(data instanceof HttpErrorResponse)) {
|
265
|
+
return this.handleSolutionUpdate(data);
|
266
|
+
}
|
267
|
+
this.handleSolutionFailedUpdate(data);
|
268
|
+
});
|
269
|
+
this.runtimeService.onUIRefreshEvent.pipe(takeUntil(this.unsubscribe)).subscribe(() => {
|
270
|
+
var _a;
|
271
|
+
const { uiDefinition } = (_a = this.runtimeService.getRuntimeContext()) !== null && _a !== void 0 ? _a : {};
|
272
|
+
this.runtimeContext.uiDefinition = uiDefinition;
|
273
|
+
this.formScope.scriptSessionScope = {};
|
274
|
+
this.startRuntime();
|
275
|
+
});
|
276
|
+
}
|
277
|
+
onSolutionReady(lineItem) {
|
278
|
+
var _a;
|
279
|
+
const context = this.runtimeService.getRuntimeContext();
|
280
|
+
const configurationContext = this.contextService.resolve();
|
281
|
+
const mergeContext = Object.assign(Object.assign({}, context), { properties: Object.assign(Object.assign({}, context.properties), configurationContext.properties) });
|
282
|
+
const accountId = (_a = mergeContext.properties) === null || _a === void 0 ? void 0 : _a.AccountId;
|
283
|
+
if (accountId && accountId.length === 15) {
|
284
|
+
this.runtimeContext = Object.assign(Object.assign({}, mergeContext), { properties: Object.assign(Object.assign({}, mergeContext.properties), { AccountId: SalesforceIdUtils.generateId18FromId15(accountId) }) });
|
285
|
+
}
|
286
|
+
else {
|
287
|
+
this.runtimeContext = mergeContext;
|
288
|
+
}
|
289
|
+
this.solutionLineItem = lineItem;
|
290
|
+
this.runtimeService.setRuntimeContext(this.runtimeContext);
|
291
|
+
this.startRuntime();
|
292
|
+
}
|
293
|
+
handleSolutionUpdate(updatedLineItem) {
|
294
|
+
this.solutionLineItem = updatedLineItem;
|
295
|
+
this.processSolution(true);
|
296
|
+
this.runtimeService.solutionProcessed(this.solutionLineItem);
|
297
|
+
this.cdr.detectChanges();
|
298
|
+
}
|
299
|
+
handleSolutionFailedUpdate(error) {
|
300
|
+
var _a;
|
301
|
+
const hasErrorMessage = EntityUtil.isPresent(error.error) && EntityUtil.isPresent(error.error.message);
|
302
|
+
const message = hasErrorMessage ? error.error.message : 'Configuration failed';
|
303
|
+
const { isHandlingConfigurationErrors } = (_a = this.runtimeContext.uiDefinition) !== null && _a !== void 0 ? _a : {};
|
304
|
+
if (isHandlingConfigurationErrors) {
|
305
|
+
this.messageService.add({ key: this.messageBucketId, summary: message });
|
306
|
+
}
|
307
|
+
this.solutionLineItem = Object.assign(Object.assign({}, this.solutionLineItem), { messages: [...this.solutionLineItem.messages, `E:${message}`] });
|
308
|
+
this.processSolution(true, true);
|
309
|
+
this.runtimeService.solutionProcessed(this.solutionLineItem);
|
310
|
+
this.cdr.detectChanges();
|
311
|
+
}
|
312
|
+
updateCardinalityVariable(parent, updated, newQuantity) {
|
313
|
+
var _a;
|
314
|
+
const portDomain = updated.port ? parent.portDomains[updated.port] : undefined;
|
315
|
+
const domainType = portDomain === null || portDomain === void 0 ? void 0 : portDomain.domainTypes.find(t => t.name === updated.type);
|
316
|
+
const cardinality = (_a = domainType === null || domainType === void 0 ? void 0 : domainType.cardinality) !== null && _a !== void 0 ? _a : 0;
|
317
|
+
let qty;
|
318
|
+
if (!Number.isFinite(domainType === null || domainType === void 0 ? void 0 : domainType.cardinality)) {
|
319
|
+
qty = Number.isFinite(newQuantity) ? newQuantity : updated.qty;
|
320
|
+
}
|
321
|
+
else {
|
322
|
+
qty = EntityUtil.isPresent(newQuantity)
|
323
|
+
? cardinality - updated.qty + newQuantity
|
324
|
+
: cardinality + updated.qty;
|
325
|
+
}
|
326
|
+
const cardinalityName = '#CV-' + updated.type + '@' + updated.port;
|
327
|
+
let cardinalityVariable = parent.attributes.find(a => a.name === cardinalityName);
|
328
|
+
if (!cardinalityVariable) {
|
329
|
+
cardinalityVariable = {
|
330
|
+
id: UUID.UUID(),
|
331
|
+
name: cardinalityName,
|
332
|
+
};
|
333
|
+
parent.attributes.push(cardinalityVariable);
|
334
|
+
}
|
335
|
+
cardinalityVariable.value = qty;
|
336
|
+
cardinalityVariable.cfgStatus = 'User';
|
337
|
+
}
|
338
|
+
createLineItem(section, valueOption, parentLineItem) {
|
339
|
+
return {
|
340
|
+
qty: +this.form.controls[section.id + 'qty'].value,
|
341
|
+
port: section.boundData.name,
|
342
|
+
type: EntityUtil.isPresent(valueOption) ? valueOption : this.form.controls[section.id].value,
|
343
|
+
cfgStatus: 'New',
|
344
|
+
parentId: parentLineItem === null || parentLineItem === void 0 ? void 0 : parentLineItem.id,
|
345
|
+
};
|
346
|
+
}
|
347
|
+
ngOnDestroy() {
|
348
|
+
this.unsubscribe.next();
|
349
|
+
this.sectionsService.destroy();
|
350
|
+
}
|
351
|
+
startRuntime() {
|
352
|
+
var _a, _b, _c;
|
353
|
+
const uiDefinition = this.runtimeContext.uiDefinition;
|
354
|
+
const defaultTab = (_a = uiDefinition === null || uiDefinition === void 0 ? void 0 : uiDefinition.tabs) === null || _a === void 0 ? void 0 : _a.find(tab => tab.isDefault);
|
355
|
+
this.activeUITab = EntityUtil.isPresent(defaultTab) ? defaultTab : (_b = uiDefinition === null || uiDefinition === void 0 ? void 0 : uiDefinition.tabs) === null || _b === void 0 ? void 0 : _b[0];
|
356
|
+
this.sectionsService.compileModule((_c = uiDefinition === null || uiDefinition === void 0 ? void 0 : uiDefinition.sections) !== null && _c !== void 0 ? _c : [], uiDefinition === null || uiDefinition === void 0 ? void 0 : uiDefinition.isViewEncapsulated);
|
357
|
+
this.processSolution();
|
358
|
+
this.solutionIsReady = true;
|
359
|
+
this.cdr.detectChanges();
|
360
|
+
}
|
361
|
+
updateRuntime(lineItem) {
|
362
|
+
this.solutionUpdated.emit(lineItem);
|
363
|
+
}
|
364
|
+
addToCart() {
|
365
|
+
const lineItem = EntityUtil.clone(this.solutionLineItem);
|
366
|
+
this.runtimeService.stopRuntime(lineItem);
|
367
|
+
}
|
368
|
+
processSolution(isUpdate, isError) {
|
369
|
+
var _a, _b, _c, _d, _e, _f;
|
370
|
+
//1. Bind sections to solution
|
371
|
+
let sections = (_b = EntityUtil.clone((_a = this.runtimeContext.uiDefinition) === null || _a === void 0 ? void 0 : _a.sections)) !== null && _b !== void 0 ? _b : [];
|
372
|
+
const sourceSections = (_d = EntityUtil.clone((_c = this.runtimeContext.uiDefinition) === null || _c === void 0 ? void 0 : _c.sections)) !== null && _d !== void 0 ? _d : [];
|
373
|
+
this.updateLineItemsSectionPath(this.solutionLineItem);
|
374
|
+
SectionsBinderHelper.setLineItemsPath(this.runtimeContext.runtimeModel, this.solutionLineItem, sections, sourceSections, (sec) => !sec.parentId && sec.boundData, (_f = (_e = this.runtimeContext.uiDefinition) === null || _e === void 0 ? void 0 : _e.pricingEnabled) !== null && _f !== void 0 ? _f : false);
|
375
|
+
sections = sections.filter(s => s.model && s.template);
|
376
|
+
//2. Init form
|
377
|
+
this.form = this.formService.initForm(sections, this.solutionLineItem);
|
378
|
+
this.formScope.form = this.form;
|
379
|
+
this.sortedSections = this.filterAndSort(getSectionTree(sections.filter(s => !s.isStatic)));
|
380
|
+
if (!isUpdate) {
|
381
|
+
this.staticSections = this.filterAndSort(getSectionTree(sections.filter(s => s.isStatic)));
|
382
|
+
}
|
383
|
+
if (!isError) {
|
384
|
+
this.messageService.clear(this.messageBucketId);
|
385
|
+
}
|
386
|
+
}
|
387
|
+
hideModal() {
|
388
|
+
this.runtimeService.cancelRuntime();
|
389
|
+
}
|
390
|
+
updateLineItemsSectionPath(lineItem, parent) {
|
391
|
+
const path = {
|
392
|
+
types: parent ? parent.types.concat([lineItem.type]) : [lineItem.type],
|
393
|
+
ports: parent ? parent.ports.concat(lineItem.port ? [lineItem.port] : []) : [],
|
394
|
+
};
|
395
|
+
lineItem.path = path;
|
396
|
+
for (const child of lineItem.lineItems) {
|
397
|
+
this.updateLineItemsSectionPath(child, lineItem.path);
|
398
|
+
}
|
399
|
+
}
|
400
|
+
filterAndSort(sections) {
|
401
|
+
var _a;
|
402
|
+
const filtered = this.searchFilterPipe.transform(sections, (_a = this.activeUITab) === null || _a === void 0 ? void 0 : _a.id, 'page');
|
403
|
+
const ordered = this.orderByPipe.transform(filtered, 'order', 'asc');
|
404
|
+
return ordered;
|
405
|
+
}
|
406
|
+
findSection(id) {
|
407
|
+
return EntityUtil.findByFieldHierarchically('id', id, [...this.sortedSections, ...this.staticSections], 'children');
|
408
|
+
}
|
409
|
+
}
|
410
|
+
RuntimeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RuntimeComponent, deps: [{ token: i1.SectionsService }, { token: i2.FormScopeService }, { token: i3.CollapsibleStateService }, { token: i4.RuntimeFormService }, { token: i5.RuntimeService }, { token: MessageService }, { token: i6.ContextService }, { token: i7.OrderByPipe }, { token: i7.SearchFilterPipe }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
411
|
+
RuntimeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: RuntimeComponent, selector: "vl-runtime", outputs: { solutionUpdated: "solutionUpdated" }, providers: [FormScopeService, CollapsibleStateService, OrderByPipe, SearchFilterPipe], ngImport: i0, template: "<vl-loader label=\"Loading UI\" *ngIf=\"!solutionIsReady; else content\"></vl-loader>\n\n<ng-template #content>\n <div\n class=\"sidebar-tabs\"\n [ngClass]=\"{ hidden: !runtimeContext?.uiDefinition?.defaultPanels }\"\n #uiTabs=\"sidebarTabs\"\n sidebarTabs=\"{{ activeUITab?.id }}\"\n id=\"vl-default-sidebar-tabs\"\n >\n <ul>\n <li\n *ngFor=\"let tab of runtimeContext?.uiDefinition?.tabs | orderBy: 'order':'asc'\"\n [ngClass]=\"{ active: uiTabs.activeTab === tab.id }\"\n (click)=\"uiTabs.switchTab(tab.id)\"\n >\n <a href=\"javascript:void(0);\">{{ tab.name }}</a>\n </li>\n </ul>\n </div>\n\n <div class=\"sections-wrapper\">\n <form role=\"form\" name=\"form\" class=\"form-horizontal\" [formGroup]=\"form\" novalidate autocomplete=\"off\">\n <ng-container *ngFor=\"let section of staticSections; let i = index\">\n <ng-container *ngIf=\"section.model && section.template && !section.hidden\">\n <vl-section-renderer [section]=\"section\" [form]=\"form\"></vl-section-renderer>\n </ng-container>\n </ng-container>\n\n <ng-container *ngFor=\"let section of sortedSections; let i = index\">\n <ng-container *ngIf=\"section.model && section.template && !section.hidden\">\n <vl-section-renderer [section]=\"section\" [form]=\"form\"></vl-section-renderer>\n </ng-container>\n </ng-container>\n </form>\n\n <div\n class=\"modal-footer\"\n *ngIf=\"runtimeContext?.runtimeMode === 1\"\n id=\"vl-runtime-default-footer\"\n [ngClass]=\"{ hidden: !runtimeContext?.uiDefinition?.defaultPanels }\"\n >\n <div class=\"col-md-12 input-form-input\">\n <a href=\"javascript:void(0);\" class=\"btn btn-default\" (click)=\"form.valid && addToCart()\" id=\"add-to-cart-btn\"\n >Add to cart</a\n >\n <a href=\"javascript:void(0);\" class=\"btn btn-link\" (click)=\"hideModal()\" id=\"cancel-btn\">Cancel</a>\n </div>\n </div>\n </div>\n</ng-template>\n", styles: ["@charset \"UTF-8\";body.veloce-apex-index,body.veloce-index,body.sfdcBody{overflow:hidden;margin:0;padding:0}:host ::ng-deep .velo-app .modal.in .modal-dialog.runtime-modal{margin-left:5%;margin-right:5%;padding:0;position:relative;width:auto}:host ::ng-deep .modal-body.runtime-modal.main-container{height:100%;margin:0;padding:0}:host ::ng-deep .modal-body.runtime-modal.main-container .content-wrapper{display:flex;flex-direction:column;height:100%}:host ::ng-deep .modal-body.runtime-modal.main-container .sections-wrapper{display:flex;flex-direction:column;flex-grow:1;padding:0}:host ::ng-deep .modal-body.runtime-modal.main-container .sections-wrapper .modal-body.runtime-modal.container-fluid{height:100%;margin:0;padding:0;overflow:auto}:host ::ng-deep .modal-body.runtime-modal.main-container .sections-wrapper .modal-body.runtime-modal.container-fluid .input-form.form-horizontal,:host ::ng-deep .modal-body.runtime-modal.main-container .sections-wrapper .modal-body.runtime-modal.container-fluid .input-form.form-horizontal .form-horizontal,:host ::ng-deep .modal-body.runtime-modal.main-container .sections-wrapper .modal-body.runtime-modal.container-fluid section-script>:first-child{height:100%}:host ::ng-deep .runtime-modal .modal-content,:host ::ng-deep .gu-mirror .modal-content{background-color:--vl-input-background}:host ::ng-deep .runtime-modal .modal-content .modal-header-menu ul li a,:host ::ng-deep .gu-mirror .modal-content .modal-header-menu ul li a{color:#333333b3;font-weight:600;text-transform:uppercase;letter-spacing:.85px;font-size:10px}:host ::ng-deep .runtime-modal .modal-content .modal-header-menu ul li a.active,:host ::ng-deep .gu-mirror .modal-content .modal-header-menu ul li a.active{color:#333}:host ::ng-deep .runtime-modal .modal-content .modal-header-menu ul li a.disabled,:host ::ng-deep .gu-mirror .modal-content .modal-header-menu ul li a.disabled{color:#33333380}:host ::ng-deep .runtime-modal .modal-content .modal-header-menu ul li a.active:after,:host ::ng-deep .gu-mirror .modal-content .modal-header-menu ul li a.active:after{background-color:#f36;bottom:-1px;content:\"\";height:1px;left:0;position:absolute;width:100%}:host ::ng-deep .runtime-modal .modal-content .modal-header,:host ::ng-deep .gu-mirror .modal-content .modal-header{background:transparent;color:#fff}:host ::ng-deep .runtime-modal .runtime-group-divider,:host ::ng-deep .gu-mirror .runtime-group-divider{border-bottom:1px solid #e5e5e5}:host ::ng-deep .runtime-modal .input-form-input,:host ::ng-deep .gu-mirror .input-form-input{position:relative;padding-left:0;padding-top:0}:host ::ng-deep .runtime-modal .input-form-input--required>label,:host ::ng-deep .gu-mirror .input-form-input--required>label{color:#ff4233;font-weight:bold}:host ::ng-deep .form-control-wrapper{position:relative}:host ::ng-deep .add-config-control:hover{background-color:#e96099;color:#fff;border:1px solid transparent}:host ::ng-deep .remove-config-control:hover{background-color:#828c9e;color:#fff}:host ::ng-deep .add-config-control[disabled],:host ::ng-deep .remove-config-control[disabled]{background-color:transparent;color:#ccc;border:1px dashed #ccc}:host ::ng-deep .add-config-control[disabled]:hover,:host ::ng-deep .remove-config-control[disabled]:hover{cursor:default}:host ::ng-deep .add-config-control{height:36px;width:36px;line-height:36px;font-size:14px;text-align:center;border-radius:50%;float:left;position:absolute;top:0;right:-57px;z-index:500;background-color:#e3337c;color:#fff;border:1px solid #e3337c;transition:all .5s ease 0s}:host ::ng-deep .add-config-control .plus-icon{line-height:36px}:host ::ng-deep .remove-config-control{height:36px;width:36px;line-height:36px;font-size:14px;text-align:center;margin-right:25px;border-radius:50%;float:left;position:absolute;top:33px;right:51px;z-index:500;background-color:transparent;color:#687285;border:1px solid transparent;transition:all .5s ease 0s}:host ::ng-deep .remove-config-control .plus-icon{line-height:36px}:host ::ng-deep .sidebar .new-wrapper{min-height:96px;margin-bottom:25px}:host ::ng-deep .sidebar .new-wrapper .add-container .add-card{left:0;margin-left:15px}:host ::ng-deep .ui-settings{height:100%;display:flex;flex-direction:column}:host ::ng-deep .runtime-modal .form-horizontal form,:host ::ng-deep .gu-mirror form{margin:0}:host ::ng-deep .runtime-modal .form-horizontal .form-group,:host ::ng-deep .gu-mirror .form-group{margin:0;padding:0}:host ::ng-deep .runtime-modal .form-horizontal .control.form-group,:host ::ng-deep .gu-mirror .control.form-group{margin-bottom:25px}:host ::ng-deep .runtime-modal .form-horizontal .form-control-wrapper,:host ::ng-deep .gu-mirror .form-control-wrapper{min-width:172px;margin-bottom:25px}:host ::ng-deep .runtime-modal .form-horizontal .quantity-form-input .form-control-wrapper,:host ::ng-deep .gu-mirror .quantity-form-input .form-control-wrapper{min-width:50px}:host ::ng-deep .runtime-modal .form-horizontal .quantity-form-input .form-control-wrapper .form-control,:host ::ng-deep .gu-mirror .quantity-form-input .form-control-wrapper .form-control{width:50px}:host ::ng-deep .runtime-left-side{height:calc(100% - 97px);background:#fff;padding:48px 56px 0}:host ::ng-deep .ui-controls-group{margin-left:-8px;margin-right:-8px}:host ::ng-deep .ui-controls-group .ui-control-type:hover{border-color:#3384ff}:host ::ng-deep .ui-controls-group .ui-control-type{position:relative;min-width:140px;float:left;border-radius:3px;border:1px solid #c4c4c4;background-color:#fff;width:calc(50% - 16px);padding:12px 13px;margin-bottom:16px;margin-right:8px;margin-left:8px;cursor:pointer}:host ::ng-deep .ui-controls-group .ui-control-type span{padding-left:3px}:host ::ng-deep .sidebar-header{letter-spacing:-.5px;padding-bottom:24px;padding-top:0;line-height:32px;font-size:24px;font-weight:700;color:#333}:host ::ng-deep .sidebar-header small{display:block;color:#333;font-size:11px;font-weight:300;line-height:20px;margin:0}:host ::ng-deep .sidebar-menu-list{color:#333333b3;margin:0;width:100%;list-style:none;font-size:12px}:host ::ng-deep .sidebar-menu-list li.active a,:host ::ng-deep .sidebar-menu-list li.active i{color:#005ee3}:host ::ng-deep .sidebar-menu-list li:hover{cursor:pointer}:host ::ng-deep .sidebar-menu-list li{text-align:right;padding-left:16px}:host ::ng-deep .sidebar-menu-list li a{padding:0 8px;margin-left:-8px;cursor:pointer;white-space:nowrap;color:inherit;font-weight:700;display:inline-block;line-height:32px}:host ::ng-deep .sidebar-menu-list li i{display:none;padding-right:5px}:host ::ng-deep .runtime-builder-content{min-height:100%}:host ::ng-deep .runtime-builder-content .input-form{margin:0;padding:18px 11px 0}:host ::ng-deep .runtime-builder-content .input-form .form-group{border:3px dashed transparent}:host ::ng-deep .runtime-builder-content .input-form .form-group:hover{border:3px dashed #dedede}:host ::ng-deep .runtime-right-side{background:#fff}:host ::ng-deep .sidebar-section .section-title{color:#a1a1a1;background:#fff;position:relative;display:inline-block;padding-right:16px;text-transform:uppercase;font-size:10px;letter-spacing:.2px}:host ::ng-deep .sidebar-section:before{content:\" \";position:absolute;top:50%;left:0;right:0;border-top:1px solid #e6e6e6}:host ::ng-deep .sidebar-section{position:relative;margin-top:16px;margin-bottom:16px}:host ::ng-deep .sidebar-section .section-title{color:#a1a1a1;background-color:var(--vl-input-background);position:relative;display:inline-block;padding-right:16px;padding-left:8px;text-transform:uppercase;font-size:6px;letter-spacing:.2px}:host ::ng-deep .section-wrapper{top:-21px;position:absolute;right:0;left:12px}:host ::ng-deep .container-box.container-box-bordered{border:1px solid rgba(0,0,0,.2);margin-bottom:25px;padding-left:25px}:host ::ng-deep .container-box.container-box-radio{margin-left:0}:host ::ng-deep .container-box.container-box-radio:hover,:host ::ng-deep .container-box.container-box-checkbox:hover{cursor:pointer}:host ::ng-deep .container-box{position:relative;overflow:auto;border:1px solid transparent;background:var(--vl-input-background)}:host ::ng-deep .container-box .container-box{border:1px solid rgba(0,0,0,.2);margin-left:25px;margin-right:25px;margin-bottom:25px}:host ::ng-deep .container-box .container-box:hover{border-color:var(--vl-primary-color)}:host ::ng-deep .container-box .box-title .header .header-label{color:#333;margin:0;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.2px;line-height:75px}:host ::ng-deep .container-box .box-title .header .header-label small{padding-left:21px;color:#757575;font-weight:400;font-size:10px;line-height:75px}:host ::ng-deep .container-box .box-title .header .header-qty-container,:host ::ng-deep .container-box .box-title .header .radio-button,:host ::ng-deep .container-box .box-title .header .checkbox-select{display:table-cell;vertical-align:middle;height:75px;padding-left:21px}:host ::ng-deep .container-box .box-title .header .header-qty-container .form-control,:host ::ng-deep .container-box .box-title .header .radio-button .form-control,:host ::ng-deep .container-box .box-title .header .checkbox-select .form-control{height:auto;color:#333;width:50px;border:1px solid #dddddd}:host ::ng-deep .container-box .box-title .header .header-qty-container .form-control:focus,:host ::ng-deep .container-box .box-title .header .radio-button .form-control:focus,:host ::ng-deep .container-box .box-title .header .checkbox-select .form-control:focus{border:1px solid #c4c4c4}:host ::ng-deep .container-box .box-title .header .header-qty-container .validation-message,:host ::ng-deep .container-box .box-title .header .radio-button .validation-message,:host ::ng-deep .container-box .box-title .header .checkbox-select .validation-message{position:absolute;margin-top:3px}:host ::ng-deep .container-box .box-title .header .radio-button,:host ::ng-deep .container-box .box-title .header .checkbox-select{padding-left:0;vertical-align:middle}:host ::ng-deep .container-box .box-content{padding:25px 0 25px 33px}:host ::ng-deep .container-box .timeline-item{clear:both;display:block;width:100%;position:relative}:host ::ng-deep .container-box .timeline-item:before{display:block!important;content:\"\";position:absolute;left:25px;top:-25px;bottom:25px;width:1px;border-left:1px dashed rgba(0,0,0,.2)}:host ::ng-deep .container-box .timeline-item .icon{background:#90c7ec;width:35px;height:35px;border-radius:50%;position:absolute;left:24px;top:4px}:host ::ng-deep .container-box .timeline-item .icon .fa.fa-upload{left:11px;top:10px}:host ::ng-deep .container-box .timeline-item .icon .fa{color:#fff;position:absolute}:host ::ng-deep .container-box .timeline-item .message .content{float:left;width:80%}:host ::ng-deep .container-box .container-group-control{background:transparent;text-transform:uppercase}:host ::ng-deep .container-box-custom{margin-bottom:25px}:host ::ng-deep .unchecked .container-box{border-color:#0003}:host ::ng-deep .unchecked .container-box:hover{border-color:var(--vl-primary-color)}:host ::ng-deep .unchecked.timeline-item .icon-circle{background-color:#6e6e6e}:host ::ng-deep .collapsed .box-content-wrapper{opacity:0;display:none;transition:max-height .3s .1s}:host ::ng-deep .box-content-wrapper{transition:opacity .5s .1s;display:block;opacity:1}:host ::ng-deep .box-actions{position:absolute;right:25px;z-index:2;top:21px;opacity:1;transition:height .3s ease-out,opacity .5s .1s}:host ::ng-deep .box-action-button{height:32px;width:32px;line-height:32px;font-size:12px;text-align:center;float:left;margin-left:5px;border-radius:50%;transition:all .25s ease 0s}:host ::ng-deep .box-action-button a{color:#0000008a}:host ::ng-deep .box-action-button .check-icon{line-height:32px}:host ::ng-deep .box-actions-group{top:18px;right:45px}:host ::ng-deep .box-action-button:hover,:host ::ng-deep .box-action-button:focus{background-color:#0000001a;cursor:pointer;outline:none}:host ::ng-deep .box-action-button:active{background-color:#0003;cursor:pointer}:host ::ng-deep .box-action-button.active{background-color:#0000001a}:host ::ng-deep .div-block{clear:both;display:block}:host ::ng-deep .div-inline{float:left}:host ::ng-deep .checkbox-select{position:relative;display:block}:host ::ng-deep .checkbox-select label{color:#333;margin:0;line-height:16px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.2px;padding-left:25px;position:relative;min-height:16px;cursor:pointer}:host ::ng-deep .checkbox-select input[type=checkbox]{position:absolute;width:16px;height:16px;top:0;left:0;z-index:1;cursor:pointer;opacity:0;filter:alpha(opacity=0);margin:0;line-height:normal}:host ::ng-deep .checkbox-select .input-helper:before{position:absolute;content:\"\";top:-1px;width:12px;height:12px;border-radius:2px;left:0;border:2px solid rgba(0,0,0,.54);transition:all;transition-duration:.25s}:host ::ng-deep .checkbox-select .input-helper:after{font-weight:100;line-height:12px;font-size:10px;color:#fff;font-family:FontAwesome;position:absolute;content:\"\\f00c\";width:12px;height:12px;background:#0065ff;border-radius:0;top:1px;left:2px;transform:scale(0);transition:all;transition-duration:.15s}:host ::ng-deep .checkbox-select input[type=checkbox]:checked+.input-helper:before,:host ::ng-deep .checkbox-select input[type=checkbox].checkbox--checked+.input-helper:before{border-color:var(--vl-primary-color)}:host ::ng-deep .checkbox-select input[type=checkbox]:checked+.input-helper:after,:host ::ng-deep .checkbox-select input[type=checkbox].checkbox--checked+.input-helper:after{transform:scale(1)}:host ::ng-deep .radio-button{position:relative;display:block}:host ::ng-deep .radio-button label{color:#333;margin:0;line-height:16px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.2px;padding-left:25px;position:relative;min-height:16px;cursor:pointer}:host ::ng-deep .radio-button input[type=radio]{position:absolute;width:16px;height:16px;top:0;left:0;z-index:1;cursor:pointer;opacity:0;filter:alpha(opacity=0);margin:0;line-height:normal}:host ::ng-deep .radio-button .input-helper:before{position:absolute;content:\"\";top:-1px;width:12px;height:12px;border-radius:50%;left:0;border:2px solid rgba(0,0,0,.54);transition:all;transition-duration:.25s}:host ::ng-deep .radio-button .input-helper:after{position:absolute;content:\"\";width:6px;height:6px;background:var(--vl-primary-color);border-radius:50%;top:4px;left:5px;transform:scale(0);transition:all;transition-duration:.25s}:host ::ng-deep .radio-button input[type=radio]:checked+.input-helper:before{border-color:var(--vl-primary-color)}:host ::ng-deep .radio-button input[type=radio]:checked+.input-helper:after{transform:scale(1)}:host ::ng-deep .radio-button[disabled] input[type=radio]+.input-helper:before,:host ::ng-deep .checkbox-select[disabled] input[type=radio]+.input-helper:before{border-color:#0003}:host ::ng-deep .radio-button[disabled] input[type=checkbox]+.input-helper:before,:host ::ng-deep .checkbox-select[disabled] input[type=checkbox]+.input-helper:before{border-color:#0003}:host ::ng-deep .radio-button[disabled] input[type=radio]+.input-helper:after,:host ::ng-deep .checkbox-select[disabled] input[type=radio]+.input-helper:after{background:rgba(0,0,0,.2)}:host ::ng-deep .radio-button[disabled] input[type=checkbox]+.input-helper:after,:host ::ng-deep .checkbox-select[disabled] input[type=checkbox]+.input-helper:after{background:rgba(0,0,0,.2)}:host ::ng-deep .form-control-wrapper .checkbox-select,:host ::ng-deep .form-control-wrapper .radio-button{padding-top:10px}:host ::ng-deep .shopping-bag-sidebar.open{transform:translate(-100%)}:host ::ng-deep .shopping-bag-sidebar{position:fixed;top:0;bottom:0;z-index:1051;width:420px;right:-420px;background-color:#2a2b30;transition:.3s transform}:host ::ng-deep .shopping-bag-sidebar .close-shopping-cart{color:#abacae;position:absolute;top:20%;width:50px;height:50px;line-height:50px;text-align:center;right:100%;left:auto;background:#2a2b30;border-radius:3px 0 0 3px;display:block}:host ::ng-deep .shopping-bag-sidebar .close-shopping-cart:before{font-family:FontAwesome;content:\"\\f291\"}:host ::ng-deep .shopping-bag-sidebar .close-shopping-cart:hover{text-decoration:none;color:#abacae}:host ::ng-deep .shopping-bag-sidebar .close-shopping-cart:active,:host ::ng-deep .shopping-bag-sidebar .close-shopping-cart:focus,:host ::ng-deep .shopping-bag-sidebar .close-shopping-cart:visited{text-decoration:none;color:#abacae}:host ::ng-deep .shopping-bag-sidebar .cart-count{font-size:9px;font-weight:bold;line-height:15px;position:absolute;top:50%;right:8px;width:15px;height:15px;margin:-16px 0 0;text-align:center;color:#fff;border-radius:50%;background:var(--vl-primary-color)}:host ::ng-deep .shopping-bag-sidebar .shopping-bag-container{overflow:auto;display:block;height:100%;padding:0 25px}:host ::ng-deep .shopping-bag-sidebar .shopping-bag-item{color:#abacae;background-color:#000;position:relative;overflow:auto;margin-bottom:10px}:host ::ng-deep .shopping-bag-sidebar .shopping-bag-item .item-title{position:relative;padding-right:25px;padding-left:25px}:host ::ng-deep .shopping-bag-sidebar .shopping-bag-item .item-title .header{float:left;color:#abacae;margin:0;line-height:48px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.2px}:host ::ng-deep .shopping-bag-sidebar .shopping-bag-item .item-title .box-actions{height:48px;float:right;top:0}:host ::ng-deep .shopping-bag-sidebar .shopping-bag-item .item-title .box-action-button{height:32px;width:32px;line-height:32px;font-size:10px;font-weight:700;margin-top:8px;text-align:center;transition:all .25s ease 0s;color:#fff;background-color:var(--vl-primary-color)}:host ::ng-deep .shopping-bag-sidebar .shopping-bag-title{color:#cecece;font-size:11px;text-transform:uppercase;line-height:64px;font-weight:600;padding-top:0;margin-top:25px;margin-bottom:25px;text-align:right}:host ::ng-deep .container-box.hovered:before,:host ::ng-deep .box-title.hovered:before,:host ::ng-deep .container-box.selected:before,:host ::ng-deep .box-title.selected:before{top:0;right:0;left:0;bottom:0}:host ::ng-deep .selectable{position:relative;cursor:pointer}:host ::ng-deep .container-box.hovered:before{border-color:transparent}:host ::ng-deep .container-box.hovered{border-color:var(--vl-primary-color)}:host ::ng-deep .container-box.selected:before{border-color:transparent}:host ::ng-deep .container-box.selected{border-color:var(--vl-primary-color)}:host ::ng-deep .hovered:before{display:block!important;position:absolute;content:\" \";top:-15px;bottom:15px;left:-15px;right:15px;border:1px solid var(--vl-primary-color)}:host ::ng-deep .hovered .box-action-button{opacity:1!important}:host ::ng-deep .opacity-1{opacity:1!important}:host ::ng-deep .overflow-y--auto{overflow-y:auto}:host ::ng-deep .gu-mirror{position:fixed!important;margin:0!important;z-index:9999!important;opacity:.8;-ms-filter:\"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)\";filter:alpha(opacity=80)}:host ::ng-deep .gu-hide{display:none!important}:host ::ng-deep .gu-unselectable{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}:host ::ng-deep .gu-transit{opacity:.2;-ms-filter:\"progid:DXImageTransform.Microsoft.Alpha(Opacity=20)\";filter:alpha(opacity=20)}:host ::ng-deep .top-nav-msg{margin-top:-30px}:host ::ng-deep .runtime-info-message ul{margin-bottom:0;list-style:none}:host ::ng-deep .runtime-info-message ul li{margin-bottom:10px}:host ::ng-deep .runtime-info-message ul li:last-child{margin-bottom:0}:host ::ng-deep .runtime-info-message .message-text{font-family:\"Open Sans\",Tahoma,sans-serif!important;overflow:hidden;padding:0;font-size:11px}:host ::ng-deep .runtime-attributes-popover .popover-arrow{display:none}:host ::ng-deep .runtime-attributes-popover .popover-content{padding:0}:host ::ng-deep .runtime-attributes-popover .runtime-content-wrapper{padding:0}:host ::ng-deep .runtime-attributes-popover .container-box-custom{margin-bottom:0}:host ::ng-deep .runtime-attributes-popover .input-form{margin:0;padding:0}:host ::ng-deep .runtime-attributes-popover .input-form form{margin-bottom:0}:host ::ng-deep .runtime-attributes-popover .input-form form .div-inline{display:block;float:none}:host ::ng-deep .runtime-attributes-popover .input-form form .form-group{padding:0;margin:0}:host ::ng-deep .runtime-attributes-popover .container-box .box-content{padding:0}:host ::ng-deep .v-custom-title,:host ::ng-deep .v-custom-description,:host ::ng-deep .v-custom-image{display:none}:host ::ng-deep .dropdown{position:relative}:host ::ng-deep .dropdown-toggle:focus{outline:0}:host ::ng-deep .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;box-shadow:0 6px 12px #0000002d}:host ::ng-deep .dropdown-menu.pull-right{right:0;left:auto}:host ::ng-deep .dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}:host ::ng-deep .dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}:host ::ng-deep .dropdown-menu>li>a:hover,:host ::ng-deep .dropdown-menu>li>a:focus{color:#262626;text-decoration:none;background-color:#f5f5f5}:host ::ng-deep .dropdown-menu>.active>a,:host ::ng-deep .dropdown-menu>.active>a:hover,:host ::ng-deep .dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}:host ::ng-deep .dropdown-menu>.disabled>a,:host ::ng-deep .dropdown-menu>.disabled>a:hover,:host ::ng-deep .dropdown-menu>.disabled>a:focus{color:#777}:host ::ng-deep .dropdown-menu>.disabled>a:hover,:host ::ng-deep .dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}:host ::ng-deep .open>.dropdown-menu{display:block}:host ::ng-deep .open>a{outline:0}:host ::ng-deep .dropdown-menu-right{right:0;left:auto}:host ::ng-deep .dropdown-menu-left{right:auto;left:0}:host ::ng-deep .dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}:host ::ng-deep .dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}\n", ":host{height:100%;display:flex;flex-direction:column}.sections-wrapper{flex-grow:1;display:flex;flex-direction:column}form{flex-grow:1;display:flex;flex-direction:column}.hidden{display:none}\n"], components: [{ type: i8.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }, { type: i9.SectionRendererComponent, selector: "vl-section-renderer", inputs: ["section", "form"] }], directives: [{ type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i7.SidebarTabsDirective, selector: "[sidebarTabs]", inputs: ["sidebarTabs"], exportAs: ["sidebarTabs"] }, { type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i11.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i11.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i11.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }], pipes: { "orderBy": i7.OrderByPipe } });
|
412
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RuntimeComponent, decorators: [{
|
413
|
+
type: Component,
|
414
|
+
args: [{
|
415
|
+
selector: 'vl-runtime',
|
416
|
+
moduleId: module.id,
|
417
|
+
templateUrl: 'runtime.component.html',
|
418
|
+
styleUrls: ['./runtime-legacy-styles.scss', 'runtime.component.scss'],
|
419
|
+
providers: [FormScopeService, CollapsibleStateService, OrderByPipe, SearchFilterPipe],
|
420
|
+
}]
|
421
|
+
}], ctorParameters: function () { return [{ type: i1.SectionsService }, { type: i2.FormScopeService }, { type: i3.CollapsibleStateService }, { type: i4.RuntimeFormService }, { type: i5.RuntimeService }, { type: i12.MessageService, decorators: [{
|
422
|
+
type: Inject,
|
423
|
+
args: [MessageService]
|
424
|
+
}] }, { type: i6.ContextService }, { type: i7.OrderByPipe }, { type: i7.SearchFilterPipe }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { solutionUpdated: [{
|
425
|
+
type: Output
|
426
|
+
}] } });
|
427
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Nkay9ydW50aW1lL2NvbXBvbmVudHMvdWktcnVudGltZS9ydW50aW1lLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3J1bnRpbWUvY29tcG9uZW50cy91aS1ydW50aW1lL3J1bnRpbWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBR0wsVUFBVSxFQUVWLFdBQVcsRUFFWCxpQkFBaUIsRUFDakIsZ0JBQWdCLEVBSWhCLElBQUksR0FDTCxNQUFNLGtCQUFrQixDQUFDO0FBRzFCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFHckUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFHN0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7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QUMsZ0JBQWdCLEVBQUUsdUJBQXVCLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixDQUFDLDBCQ3ZDdkYsbWdFQW1EQTs0RkRWYSxnQkFBZ0I7a0JBUDVCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLFlBQVk7b0JBQ3RCLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRTtvQkFDbkIsV0FBVyxFQUFFLHdCQUF3QjtvQkFDckMsU0FBUyxFQUFFLENBQUMsOEJBQThCLEVBQUUsd0JBQXdCLENBQUM7b0JBQ3JFLFNBQVMsRUFBRSxDQUFDLGdCQUFnQixFQUFFLHVCQUF1QixFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQztpQkFDdEY7OzBCQXlCSSxNQUFNOzJCQUFDLGNBQWM7a0tBUkcsZUFBZTtzQkFBekMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIEF0dHJpYnV0ZSxcbiAgQ2hhcmdlSXRlbSxcbiAgRW50aXR5VXRpbCxcbiAgTGluZUl0ZW0sXG4gIE9yZGVyQnlQaXBlLFxuICBQcmljZUFkanVzdG1lbnQsXG4gIFNhbGVzZm9yY2VJZFV0aWxzLFxuICBTZWFyY2hGaWx0ZXJQaXBlLFxuICBTZWN0aW9uLFxuICBTZWN0aW9uUGF0aCxcbiAgVUlUYWIsXG4gIFVVSUQsXG59IGZyb20gJ0B2ZWxvY2VhcHBzL2NvcmUnO1xuaW1wb3J0IHsgQ29udGV4dFNlcnZpY2UgfSBmcm9tICdAdmVsb2NlYXBwcy9zZGsvY29yZSc7XG5pbXBvcnQgeyBEaWN0aW9uYXJ5IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ29sbGFwc2libGVTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb2xsYXBzaWJsZS1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1TY29wZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mb3JtLXNjb3BlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUnVudGltZUZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcnVudGltZS1mb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHsgUnVudGltZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ydW50aW1lLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VjdGlvbkhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWN0aW9uLWhlbHBlci5zZXJ2aWNlJztcbmltcG9ydCB7IFNlY3Rpb25zU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBMZWdhY3lSdW50aW1lQ29udGV4dCwgU29sdXRpb25SZWFkeUF3YXJlLCBVcGRhdGVEYXRhIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgQm91bmREYXRhVHlwZSB9IGZyb20gJy4uLy4uL3R5cGVzL2JvdW5kLWRhdGEudHlwZXMnO1xuaW1wb3J0IHsgTGluZUl0ZW1VdGlsIH0gZnJvbSAnLi4vLi4vdXRpbHMvbGluZS1pdGVtLnV0aWwnO1xuaW1wb3J0IHsgZ2V0U2VjdGlvblRyZWUgfSBmcm9tICcuLi8uLi91dGlscy9zZWN0aW9uLnV0aWxzJztcbmltcG9ydCB7IFNlY3Rpb25zQmluZGVySGVscGVyIH0gZnJvbSAnLi4vLi4vdXRpbHMvc2VjdGlvbnMtYmluZGVyLmhlbHBlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZsLXJ1bnRpbWUnLFxuICBtb2R1bGVJZDogbW9kdWxlLmlkLFxuICB0ZW1wbGF0ZVVybDogJ3J1bnRpbWUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ydW50aW1lLWxlZ2FjeS1zdHlsZXMuc2NzcycsICdydW50aW1lLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW0Zvcm1TY29wZVNlcnZpY2UsIENvbGxhcHNpYmxlU3RhdGVTZXJ2aWNlLCBPcmRlckJ5UGlwZSwgU2VhcmNoRmlsdGVyUGlwZV0sXG59KVxuZXhwb3J0IGNsYXNzIFJ1bnRpbWVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgU29sdXRpb25SZWFkeUF3YXJlIHtcbiAgcmVhZG9ubHkgbWVzc2FnZUJ1Y2tldElkID0gJ3VpLnJ1bnRpbWUnO1xuXG4gIHB1YmxpYyBzb3J0ZWRTZWN0aW9uczogU2VjdGlvbltdID0gW107XG4gIHB1YmxpYyBzdGF0aWNTZWN0aW9uczogU2VjdGlvbltdID0gW107XG5cbiAgcnVudGltZUNvbnRleHQhOiBMZWdhY3lSdW50aW1lQ29udGV4dDtcbiAgc29sdXRpb25MaW5lSXRlbSE6IExpbmVJdGVtO1xuICBmb3JtOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcblxuICBhY3RpdmVVSVRhYj86IFVJVGFiO1xuXG4gIHNvbHV0aW9uSXNSZWFkeSA9IGZhbHNlO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgdW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIEBPdXRwdXQoKSBwcml2YXRlIHJlYWRvbmx5IHNvbHV0aW9uVXBkYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2VjdGlvbnNTZXJ2aWNlOiBTZWN0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3JtU2NvcGU6IEZvcm1TY29wZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb2xsYXBzaWJsZVN0YXRlOiBDb2xsYXBzaWJsZVN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIGZvcm1TZXJ2aWNlOiBSdW50aW1lRm9ybVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBydW50aW1lU2VydmljZTogUnVudGltZVNlcnZpY2UsXG4gICAgQEluamVjdChNZXNzYWdlU2VydmljZSkgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb250ZXh0U2VydmljZTogQ29udGV4dFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBvcmRlckJ5UGlwZTogT3JkZXJCeVBpcGUsXG4gICAgcHJpdmF0ZSBzZWFyY2hGaWx0ZXJQaXBlOiBTZWFyY2hGaWx0ZXJQaXBlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgKSB7fVxuXG4gIHByaXZhdGUgYWRqdXN0UHJpY2UoXG4gICAgdmFsdWVPcHRpb246IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBzZWN0aW9uOiBTZWN0aW9uLFxuICAgIHNvbHV0aW9uTGluZUl0ZW06IExpbmVJdGVtLFxuICAgIHBhdGNoOiBEaWN0aW9uYXJ5PFByaWNlQWRqdXN0bWVudD4sXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHBhcmVudExpbmVJdGVtID0gc2VjdGlvbi5tb2RlbCAmJiBMaW5lSXRlbVV0aWwuZmluZEJ5SWQoc2VjdGlvbi5tb2RlbC5pZCwgW3NvbHV0aW9uTGluZUl0ZW1dKTtcblxuICAgIGlmICghcGFyZW50TGluZUl0ZW0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwYXJlbnRMaW5lSXRlbS5saW5lSXRlbXMgPSBwYXJlbnRMaW5lSXRlbS5saW5lSXRlbXMubWFwKGxpbmVJdGVtID0+IHtcbiAgICAgIGNvbnN0IHsgcHJvZHVjdElkLCBjaGFyZ2VJdGVtcyB9ID0gbGluZUl0ZW07XG5cbiAgICAgIGlmIChwcm9kdWN0SWQgIT09IHZhbHVlT3B0aW9uKSB7XG4gICAgICAgIHJldHVybiBsaW5lSXRlbTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2hhcmdlSXRlbSA9IGNoYXJnZUl0ZW1zLnNoaWZ0KCk7XG4gICAgICBjb25zdCB1cGRhdGVkQ2hhcmdlSXRlbSA9IHtcbiAgICAgICAgLi4uY2hhcmdlSXRlbSxcbiAgICAgICAgLi4ucGF0Y2gsXG4gICAgICB9IGFzIENoYXJnZUl0ZW07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmxpbmVJdGVtLFxuICAgICAgICBjaGFyZ2VJdGVtczogW3VwZGF0ZWRDaGFyZ2VJdGVtLCAuLi5jaGFyZ2VJdGVtc10sXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgdGhpcy51cGRhdGVSdW50aW1lKHNvbHV0aW9uTGluZUl0ZW0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtU2NvcGUuZm9ybVN1Ym1pdEV2ZW50LnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKGU6IFVwZGF0ZURhdGEpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIGNvbnN0IHNvbHV0aW9uTGluZUl0ZW0gPSBFbnRpdHlVdGlsLmNsb25lKHRoaXMuc29sdXRpb25MaW5lSXRlbSk7XG5cbiAgICAgICAgY29uc3Qgc2VjdGlvbiA9IHRoaXMuZmluZFNlY3Rpb24oZS5pZCk7XG5cbiAgICAgICAgaWYgKCFzZWN0aW9uKSB7XG4gICAgICAgICAgdGhyb3cgJ1NlY3Rpb24gbm90IGZvdW5kJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbnRpdHlUeXBlID0gc2VjdGlvbi5ib3VuZERhdGEuZW50aXR5VHlwZTtcblxuICAgICAgICBpZiAoZW50aXR5VHlwZSA9PT0gQm91bmREYXRhVHlwZVtCb3VuZERhdGFUeXBlLlBPUlRdIHx8IGVudGl0eVR5cGUgPT09IEJvdW5kRGF0YVR5cGVbQm91bmREYXRhVHlwZS5UWVBFXSkge1xuICAgICAgICAgIGlmIChlLmFjdGlvbiA9PT0gJ3BhdGNoJyAmJiBFbnRpdHlVdGlsLmlzUHJlc2VudChlLnZhbHVlT3B0aW9uKSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVPcHRpb246IGFueSA9IGVbJ3ZhbHVlT3B0aW9uJ107XG5cbiAgICAgICAgICAgIGlmICghc2VjdGlvbi5tb2RlbD8ucGFyZW50SWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5jb2xsYXBzaWJsZVN0YXRlLmNsZWFyU3RhdGUoc2VjdGlvbi5pZCk7XG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlUnVudGltZSh2YWx1ZU9wdGlvbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBwYXJlbnRMaW5lSXRlbSA9IExpbmVJdGVtVXRpbC5maW5kQnlJZChzZWN0aW9uLm1vZGVsLnBhcmVudElkLCBbc29sdXRpb25MaW5lSXRlbV0pO1xuXG4gICAgICAgICAgICAgIGlmIChwYXJlbnRMaW5lSXRlbSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZHggPSBwYXJlbnRMaW5lSXRlbS5saW5lSXRlbXMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pZCA9PT0gc2VjdGlvbi5tb2RlbD8uaWQpO1xuXG4gICAgICAgICAgICAgICAgcGFyZW50TGluZUl0ZW0ubGluZUl0ZW1zLnNwbGljZShpbmR4LCAxLCB2YWx1ZU9wdGlvbik7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmNvbGxhcHNpYmxlU3RhdGUuY2xlYXJTdGF0ZShzZWN0aW9uLmlkKTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVJ1bnRpbWUoc29sdXRpb25MaW5lSXRlbSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50aXR5VHlwZSA9PT0gQm91bmREYXRhVHlwZVtCb3VuZERhdGFUeXBlLlBPUlRdKSB7XG4gICAgICAgICAgaWYgKGUuYWN0aW9uID09PSAndXBzZXJ0Jykge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50TGluZUl0ZW0gPSBzZWN0aW9uLm1vZGVsICYmIExpbmVJdGVtVXRpbC5maW5kQnlJZChzZWN0aW9uLm1vZGVsLmlkLCBbc29sdXRpb25MaW5lSXRlbV0pO1xuXG4gICAgICAgICAgICBpZiAocGFyZW50TGluZUl0ZW0pIHtcbiAgICAgICAgICAgICAgcGFyZW50TGluZUl0ZW0ubGluZUl0ZW1zLmZvckVhY2goaSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgZS5zZWxlY3RlZFZhbHVlT3B0aW9ucyAmJlxuICAgICAgICAgICAgICAgICAgZS5zZWxlY3RlZFZhbHVlT3B0aW9ucy5maW5kSW5kZXgodiA9PiB2LnRvTG93ZXJDYXNlKCkgPT09IGkudHlwZS50b0xvd2VyQ2FzZSgpKSA8IDBcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FyZGluYWxpdHlWYXJpYWJsZShwYXJlbnRMaW5lSXRlbSwgaSwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY29uc3QgbGluZUl0ZW1zID0gcGFyZW50TGluZUl0ZW0/LmxpbmVJdGVtcy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgaSA9PlxuICAgICAgICAgICAgICAgICAgZS5zZWxlY3RlZFZhbHVlT3B0aW9ucyAmJlxuICAgICAgICAgICAgICAgICAgZS5zZWxlY3RlZFZhbHVlT3B0aW9ucy5maW5kSW5kZXgodiA9PiB2LnRvTG93ZXJDYXNlKCkgPT09IGkudHlwZS50b0xvd2VyQ2FzZSgpKSA+IC0xLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBlLnNlbGVjdGVkVmFsdWVPcHRpb25zPy5mb3JFYWNoKHYgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChsaW5lSXRlbXM/LmZpbmRJbmRleChpdGVtID0+IGl0ZW0udHlwZS50b0xvd2VyQ2FzZSgpID09PSB2LnRvTG93ZXJDYXNlKCkpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgbGluZUl0ZW0gPSB0aGlzLmNyZWF0ZUxpbmVJdGVtKHNlY3Rpb24sIHYsIHBhcmVudExpbmVJdGVtKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FyZGluYWxpdHlWYXJpYWJsZShwYXJlbnRMaW5lSXRlbSwgbGluZUl0ZW0pO1xuICAgICAgICAgICAgICAgICAgbGluZUl0ZW1zLnB1c2gobGluZUl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVSdW50aW1lKHNvbHV0aW9uTGluZUl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChlLmFjdGlvbiA9PT0gJ2NyZWF0ZScpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudExpbmVJdGVtID0gc2VjdGlvbi5tb2RlbCAmJiBMaW5lSXRlbVV0aWwuZmluZEJ5SWQoc2VjdGlvbi5tb2RlbC5pZCwgW3NvbHV0aW9uTGluZUl0ZW1dKTtcblxuICAgICAgICAgICAgaWYgKHBhcmVudExpbmVJdGVtKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlT3B0aW9uID0gZS52YWx1ZU9wdGlvbjtcbiAgICAgICAgICAgICAgY29uc3QgbGluZUl0ZW0gPSB0aGlzLmNyZWF0ZUxpbmVJdGVtKHNlY3Rpb24sIHZhbHVlT3B0aW9uLCBwYXJlbnRMaW5lSXRlbSk7XG4gICAgICAgICAgICAgIHBhcmVudExpbmVJdGVtLmxpbmVJdGVtcy5wdXNoKGxpbmVJdGVtKTtcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVDYXJkaW5hbGl0eVZhcmlhYmxlKHBhcmVudExpbmVJdGVtLCBsaW5lSXRlbSk7XG5cbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVSdW50aW1lKHNvbHV0aW9uTGluZUl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChlLmFjdGlvbiA9PT0gJ2NvcHknKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRMaW5lSXRlbSA9IHNlY3Rpb24ubW9kZWwgJiYgTGluZUl0ZW1VdGlsLmZpbmRCeUlkKHNlY3Rpb24ubW9kZWwuaWQsIFtzb2x1dGlvbkxpbmVJdGVtXSk7XG5cbiAgICAgICAgICAgIGlmIChwYXJlbnRMaW5lSXRlbSkge1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZU9wdGlvbiA9IGUudmFsdWVPcHRpb247XG4gICAgICAgICAgICAgIGNvbnN0IGxpbmVJdGVtVG9Db3B5ID0gcGFyZW50TGluZUl0ZW0ubGluZUl0ZW1zLmZpbmQobGkgPT4gbGkuaWQgPT09IHZhbHVlT3B0aW9uKTtcbiAgICAgICAgICAgICAgaWYgKGxpbmVJdGVtVG9Db3B5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGluZUl0ZW06IExpbmVJdGVtID0geyAuLi5saW5lSXRlbVRvQ29weSwgaWQ6ICcnIH07XG4gICAgICAgICAgICAgICAgcGFyZW50TGluZUl0ZW0ubGluZUl0ZW1zLnB1c2gobGluZUl0ZW0pO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FyZGluYWxpdHlWYXJpYWJsZShwYXJlbnRMaW5lSXRlbSwgbGluZUl0ZW0pO1xuXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVSdW50aW1lKHNvbHV0aW9uTGluZUl0ZW0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGUuYWN0aW9uID09PSAndXBkYXRlJykge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50TGluZUl0ZW0gPSBzZWN0aW9uLm1vZGVsICYmIExpbmVJdGVtVXRpbC5maW5kQnlJZChzZWN0aW9uLm1vZGVsLmlkLCBbc29sdXRpb25MaW5lSXRlbV0pO1xuXG4gICAgICAgICAgICBpZiAocGFyZW50TGluZUl0ZW0pIHtcbiAgICAgICAgICAgICAgLy9Bc3N1bWluZyB0aGF0IHJhZGlvIGNvbnRyb2wgaXMgdGhlIG9ubHkgY29udHJvbCwgdGhhdCAndXBkYXRlcycgdmFsdWVzXG4gICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzID0gc2VjdGlvbi5tb2RlbD8ubGluZUl0ZW1zLmZpbHRlcihsaSA9PiBsaS5wb3J0ICYmIGxpLnBvcnQgPT09IHNlY3Rpb24uYm91bmREYXRhLm5hbWUpWzBdO1xuXG4gICAgICAgICAgICAgIGlmIChwcmV2aW91cykge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FyZGluYWxpdHlWYXJpYWJsZShwYXJlbnRMaW5lSXRlbSwgcHJldmlvdXMsIDApO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBwYXJlbnRMaW5lSXRlbS5saW5lSXRlbXMuZmluZEluZGV4KGxpID0+IGxpLmlkID09PSBwcmV2aW91cz8uaWQpO1xuXG4gICAgICAgICAgICAgIGNvbnN0IGxpbmVJdGVtOiBMaW5lSXRlbSA9IHtcbiAgICAgICAgICAgICAgICBpZDogVVVJRC5VVUlEKCksXG4gICAgICAgICAgICAgICAgcXR5OiBwcmV2aW91cz8ucXR5LFxuICAgICAgICAgICAgICAgIHBvcnQ6IHByZXZpb3VzPy5wb3J0LFxuICAgICAgICAgICAgICAgIHR5cGU6IEVudGl0eVV0aWwuaXNQcmVzZW50KGUudmFsdWVPcHRpb24pID8gZS52YWx1ZU9wdGlvbiA6IHRoaXMuZm9ybS5jb250cm9sc1tlLmlkXS52YWx1ZSxcbiAgICAgICAgICAgICAgICBjZmdTdGF0dXM6ICdOZXcnLFxuICAgICAgICAgICAgICAgIHBhcmVudElkOiBwcmV2aW91cz8ucGFyZW50SWQsXG4gICAgICAgICAgICAgIH0gYXMgTGluZUl0ZW07XG5cbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVDYXJkaW5hbGl0eVZhcmlhYmxlKHBhcmVudExpbmVJdGVtLCBsaW5lSXRlbSk7XG4gICAgICAgICAgICAgIHBhcmVudExpbmVJdGVtLmxpbmVJdGVtc1tpbmRleF0gPSBsaW5lSXRlbTtcblxuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVJ1bnRpbWUoc29sdXRpb25MaW5lSXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGUuYWN0aW9uID09PSAncmVtb3ZlJykge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50TGluZUl0ZW0gPSBzZWN0aW9uLm1vZGVsICYmIExpbmVJdGVtVXRpbC5maW5kQnlJZChzZWN0aW9uLm1vZGVsLmlkLCBbc29sdXRpb25MaW5lSXRlbV0pO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHBhcmVudExpbmVJdGVtICYmXG4gICAgICAgICAgICAgIFNlY3Rpb25zQmluZGVySGVscGVyLmlzUmVtb3ZlQWxsb3dlZChwYXJlbnRMaW5lSXRlbSwgc2VjdGlvbi5ib3VuZERhdGEubmFtZSwgc2VjdGlvbi5tb2RlbD8ucXR5KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gcGFyZW50TGluZUl0ZW0ubGluZUl0ZW1zLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICBpdGVtID0+IGl0ZW0udHlwZS50b0xvd2VyQ2FzZSgpID09PSBlLnZhbHVlT3B0aW9uPy50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlbW92ZWQgPSBwYXJlbnRMaW5lSXRlbS5saW5lSXRlbXMuc3BsaWNlKGluZGV4LCAxKVswXTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhcmRpbmFsaXR5VmFyaWFibGUocGFyZW50TGluZUl0ZW0sIHJlbW92ZWQsIDApO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUnVudGltZShzb2x1dGlvbkxpbmVJdGVtKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChlLmFjdGlvbiA9PT0gJ3F0eVVwZGF0ZScpIHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVTZWN0aW9uID0gZS52YWx1ZU9wdGlvblxuICAgICAgICAgICAgICA/IFNlY3Rpb25IZWxwZXJTZXJ2aWNlLmZpbmRTZWN0aW9uRm9yVmFsdWUoc2VjdGlvbiwgZS52YWx1ZU9wdGlvbilcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgIGNvbnN0IHR5cGVMaW5lSXRlbSA9IHR5cGVTZWN0aW9uPy5tb2RlbCAmJiBMaW5lSXRlbVV0aWwuZmluZEJ5SWQodHlwZVNlY3Rpb24ubW9kZWwuaWQsIFtzb2x1dGlvbkxpbmVJdGVtXSk7XG4gICAgICAgICAgICBpZiAodHlwZVNlY3Rpb24gJiYgdHlwZUxpbmVJdGVtKSB7XG4gICAgICAgICAgICAgIHR5cGVMaW5lSXRlbS5xdHkgPSArdGhpcy5mb3JtLmNvbnRyb2xzW3R5cGVTZWN0aW9uLmlkICsgJ3F0eSddLnZhbHVlO1xuICAgICAgICAgICAgICB0eXBlTGluZUl0ZW0uY2ZnU3RhdHVzID0gJ1VzZXInO1xuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVJ1bnRpbWUoc29sdXRpb25MaW5lSXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGUuYWN0aW9uID09PSAnYWRqdXN0TmV0UHJpY2UnKSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbHVlT3B0aW9uLCBvcHRpb25zIH0gPSBlO1xuICAgICAgICAgICAgY29uc3QgeyBhbW91bnQgfSA9IG9wdGlvbnMgPz8ge307XG5cbiAgICAgICAgICAgIGNvbnN0IHByaWNlQWRqdXN0bWVudDogUHJpY2VBZGp1c3RtZW50ID0ge1xuICAgICAgICAgICAgICB0eXBlOiAnT1ZFUlJJREVfQU1PVU5UJyxcbiAgICAgICAgICAgICAgZXhwbGFuYXRpb246ICdNYW51YWwgbmV0IHByaWNlIGFkanVzdG1lbnQnLFxuICAgICAgICAgICAgICBhbW91bnQsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLmFkanVzdFByaWNlKHZhbHVlT3B0aW9uLCBzZWN0aW9uLCBzb2x1dGlvbkxpbmVJdGVtLCB7IHByaWNlQWRqdXN0bWVudCB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZS5hY3Rpb24gPT09ICdhZGp1c3RMaXN0UHJpY2UnKSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbHVlT3B0aW9uLCBvcHRpb25zIH0gPSBlO1xuICAgICAgICAgICAgY29uc3QgeyBhbW91bnQgfSA9IG9wdGlvbnMgPz8ge307XG5cbiAgICAgICAgICAgIGNvbnN0IGxpc3RQcmljZUFkanVzdG1lbnQ6IFByaWNlQWRqdXN0bWVudCA9IHtcbiAgICAgICAgICAgICAgdHlwZTogJ09WRVJSSURFX0FNT1VOVCcsXG4gICAgICAgICAgICAgIGV4cGxhbmF0aW9uOiAnTWFudWFsIGxpc3QgcHJpY2UgYWRqdXN0bWVudCcsXG4gICAgICAgICAgICAgIGFtb3VudCxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuYWRqdXN0UHJpY2UodmFsdWVPcHRpb24sIHNlY3Rpb24sIHNvbHV0aW9uTGluZUl0ZW0sIHsgbGlzdFByaWNlQWRqdXN0bWVudCB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50aXR5VHlwZSA9PT0gQm91bmREYXRhVHlwZVtCb3VuZERhdGFUeXBlLlRZUEVdKSB7XG4gICAgICAgICAgaWYgKGUuYWN0aW9uID09PSAncmVtb3ZlJykge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50TGluZUl0ZW0gPVxuICAgICAgICAgICAgICBzZWN0aW9uLm1vZGVsPy5wYXJlbnRJZCAmJiBMaW5lSXRlbVV0aWwuZmluZEJ5SWQoc2VjdGlvbi5tb2RlbC5wYXJlbnRJZCwgW3NvbHV0aW9uTGluZUl0ZW1dKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBwYXJlbnRMaW5lSXRlbSAmJlxuICAgICAgICAgICAgICBzZWN0aW9uLm1vZGVsICYmXG4gICAgICAgICAgICAgIHNlY3Rpb24ubW9kZWwucG9ydCAmJlxuICAgICAgICAgICAgICBTZWN0aW9uc0JpbmRlckhlbHBlci5pc1JlbW92ZUFsbG93ZWQocGFyZW50TGluZUl0ZW0sIHNlY3Rpb24ubW9kZWwucG9ydCwgc2VjdGlvbi5tb2RlbD8ucXR5KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gcGFyZW50TGluZUl0ZW0ubGluZUl0ZW1zLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaWQgPT09IHNlY3Rpb24ubW9kZWw/LmlkKTtcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZW1vdmVkID0gcGFyZW50TGluZUl0ZW0ubGluZUl0ZW1zLnNwbGljZShpbmRleCwgMSlbMF07XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDYXJkaW5hbGl0eVZhcmlhYmxlKHBhcmVudExpbmVJdGVtLCByZW1vdmVkLCAwKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbGxhcHNpYmxlU3RhdGUuY2xlYXJTdGF0ZShzZWN0aW9uLmlkKTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVJ1bnRpbWUoc29sdXRpb25MaW5lSXRlbSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZS5hY3Rpb24gPT09ICdxdHlVcGRhdGUnKSB7XG4gICAgICAgICAgICBjb25zdCB0eXBlTGluZUl0ZW0gPSBzZWN0aW9uLm1vZGVsICYmIExpbmVJdGVtVXRpbC5maW5kQnlJZChzZWN0aW9uLm1vZGVsLmlkLCBbc29sdXRpb25MaW5lSXRlbV0pO1xuXG4gICAgICAgICAgICBpZiAodHlwZUxpbmVJdGVtKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHF0eSA9ICt0aGlzLmZvcm0uY29udHJvbHNbZS5pZCArICdxdHknXS52YWx1ZTtcbiAgICAgICAgICAgICAgaWYgKHR5cGVMaW5lSXRlbS5wYXJlbnRJZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudExpbmVJdGVtID0gTGluZUl0ZW1VdGlsLmZpbmRCeUlkKHR5cGVMaW5lSXRlbS5wYXJlbnRJZCwgW3NvbHV0aW9uTGluZUl0ZW1dKTtcblxuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRMaW5lSXRlbSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDYXJkaW5hbGl0eVZhcmlhYmxlKHBhcmVudExpbmVJdGVtLCB0eXBlTGluZUl0ZW0sIHF0eSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHR5cGVMaW5lSXRlbS5xdHkgPSBxdHk7XG4gICAgICAgICAgICAgIHR5cGVMaW5lSXRlbS5jZmdTdGF0dXMgPSAnVXNlcic7XG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlUnVudGltZShzb2x1dGlvbkxpbmVJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50aXR5VHlwZSA9PT0gQm91bmREYXRhVHlwZVtCb3VuZERhdGFUeXBlLkFUVFJJQlVURV0pIHtcbiAgICAgICAgICBpZiAoZS5hY3Rpb24gPT09ICd1cGRhdGUnKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRMaW5lSXRlbSA9IHNlY3Rpb24ubW9kZWwgJiYgTGluZUl0ZW1VdGlsLmZpbmRCeUlkKHNlY3Rpb24ubW9kZWwuaWQsIFtzb2x1dGlvbkxpbmVJdGVtXSk7XG4gICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGUgPSBwYXJlbnRMaW5lSXRlbT8uYXR0cmlidXRlcy5maW5kKFxuICAgICAgICAgICAgICBhdHRyID0+IGF0dHIubmFtZS50b0xvd2VyQ2FzZSgpID09PSBzZWN0aW9uLmJvdW5kRGF0YS5uYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAoYXR0cmlidXRlKSB7XG4gICAgICAgICAgICAgIC8vRXhwbGljaXRseSBzZXQgdmFsdWUgYWx3YXlzIHdpblxuICAgICAgICAgICAgICBsZXQgdmFsdWUgPSB0eXBlb2YgZS52YWx1ZU9wdGlvbiAhPT0gJ3VuZGVmaW5lZCcgPyBlLnZhbHVlT3B0aW9uIDogdGhpcy5mb3JtLmNvbnRyb2xzW2UuaWRdLnZhbHVlO1xuXG4gICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUudHlwZSA9PT0gJ0JPT0xFQU4nKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSA/IDEgOiAwO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYXR0cmlidXRlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgIGF0dHJpYnV0ZS5jZmdTdGF0dXMgPSAnVXNlcic7XG5cbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVSdW50aW1lKHNvbHV0aW9uTGluZUl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBrZXk6IHRoaXMubWVzc2FnZUJ1Y2tldElkLCBzdW1tYXJ5OiBgQ29uZmlndXJhdGlvbiBmYWlsZWQgJHsoZSBhcyBhbnkpPy5tZXNzYWdlfWAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnJ1bnRpbWVTZXJ2aWNlLm9uU29sdXRpb25SZWFkeUV2ZW50XG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKGxpbmVJdGVtID0+IHRoaXMub25Tb2x1dGlvblJlYWR5KGxpbmVJdGVtKSk7XG5cbiAgICB0aGlzLnJ1bnRpbWVTZXJ2aWNlLm9uU29sdXRpb25VcGRhdGVkRXZlbnRcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IExpbmVJdGVtIHwgSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKCEoZGF0YSBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZVNvbHV0aW9uVXBkYXRlKGRhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5oYW5kbGVTb2x1dGlvbkZhaWxlZFVwZGF0ZShkYXRhKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5ydW50aW1lU2VydmljZS5vblVJUmVmcmVzaEV2ZW50LnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgY29uc3QgeyB1aURlZmluaXRpb24gfSA9IHRoaXMucnVudGltZVNlcnZpY2UuZ2V0UnVudGltZUNvbnRleHQoKSA/PyB7fTtcbiAgICAgIHRoaXMucnVudGltZUNvbnRleHQudWlEZWZpbml0aW9uID0gdWlEZWZpbml0aW9uIGFzIGFueTtcbiAgICAgIHRoaXMuZm9ybVNjb3BlLnNjcmlwdFNlc3Npb25TY29wZSA9IHt9O1xuICAgICAgdGhpcy5zdGFydFJ1bnRpbWUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uU29sdXRpb25SZWFkeShsaW5lSXRlbTogTGluZUl0ZW0pOiB2b2lkIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5ydW50aW1lU2VydmljZS5nZXRSdW50aW1lQ29udGV4dCgpIGFzIExlZ2FjeVJ1bnRpbWVDb250ZXh0O1xuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb25Db250ZXh0ID0gdGhpcy5jb250ZXh0U2VydmljZS5yZXNvbHZlKCk7XG5cbiAgICBjb25zdCBtZXJnZUNvbnRleHQ6IExlZ2FjeVJ1bnRpbWVDb250ZXh0ID0ge1xuICAgICAgLi4uY29udGV4dCxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgLi4uY29udGV4dC5wcm9wZXJ0aWVzLFxuICAgICAgICAuLi5jb25maWd1cmF0aW9uQ29udGV4dC5wcm9wZXJ0aWVzLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgYWNjb3VudElkID0gbWVyZ2VDb250ZXh0LnByb3BlcnRpZXM/LkFjY291bnRJZDtcbiAgICBpZiAoYWNjb3VudElkICYmIGFjY291bnRJZC5sZW5ndGggPT09IDE1KSB7XG4gICAgICB0aGlzLnJ1bnRpbWVDb250ZXh0ID0ge1xuICAgICAgICAuLi5tZXJnZUNvbnRleHQsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAuLi5tZXJnZUNvbnRleHQucHJvcGVydGllcyxcbiAgICAgICAgICBBY2NvdW50SWQ6IFNhbGVzZm9yY2VJZFV0aWxzLmdlbmVyYXRlSWQxOEZyb21JZDE1KGFjY291bnRJZCksXG4gICAgICAgIH0sXG4gICAgICB9IGFzIGFueTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ydW50aW1lQ29udGV4dCA9IG1lcmdlQ29udGV4dCBhcyBhbnk7XG4gICAgfVxuXG4gICAgdGhpcy5zb2x1dGlvbkxpbmVJdGVtID0gbGluZUl0ZW07XG4gICAgdGhpcy5ydW50aW1lU2VydmljZS5zZXRSdW50aW1lQ29udGV4dCh0aGlzLnJ1bnRpbWVDb250ZXh0KTtcblxuICAgIHRoaXMuc3RhcnRSdW50aW1lKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVNvbHV0aW9uVXBkYXRlKHVwZGF0ZWRMaW5lSXRlbTogTGluZUl0ZW0pIHtcbiAgICB0aGlzLnNvbHV0aW9uTGluZUl0ZW0gPSB1cGRhdGVkTGluZUl0ZW07XG4gICAgdGhpcy5wcm9jZXNzU29sdXRpb24odHJ1ZSk7XG4gICAgdGhpcy5ydW50aW1lU2VydmljZS5zb2x1dGlvblByb2Nlc3NlZCh0aGlzLnNvbHV0aW9uTGluZUl0ZW0pO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU29sdXRpb25GYWlsZWRVcGRhdGUoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKTogdm9pZCB7XG4gICAgY29uc3QgaGFzRXJyb3JNZXNzYWdlID0gRW50aXR5VXRpbC5pc1ByZXNlbnQoZXJyb3IuZXJyb3IpICYmIEVudGl0eVV0aWwuaXNQcmVzZW50KGVycm9yLmVycm9yLm1lc3NhZ2UpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBoYXNFcnJvck1lc3NhZ2UgPyBlcnJvci5lcnJvci5tZXNzYWdlIDogJ0NvbmZpZ3VyYXRpb24gZmFpbGVkJztcbiAgICBjb25zdCB7IGlzSGFuZGxpbmdDb25maWd1cmF0aW9uRXJyb3JzIH0gPSB0aGlzLnJ1bnRpbWVDb250ZXh0LnVpRGVmaW5pdGlvbiA/PyB7fTtcblxuICAgIGlmIChpc0hhbmRsaW5nQ29uZmlndXJhdGlvbkVycm9ycykge1xuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBrZXk6IHRoaXMubWVzc2FnZUJ1Y2tldElkLCBzdW1tYXJ5OiBtZXNzYWdlIH0pO1xuICAgIH1cblxuICAgIHRoaXMuc29sdXRpb25MaW5lSXRlbSA9IHtcbiAgICAgIC4uLnRoaXMuc29sdXRpb25MaW5lSXRlbSxcbiAgICAgIG1lc3NhZ2VzOiBbLi4udGhpcy5zb2x1dGlvbkxpbmVJdGVtLm1lc3NhZ2VzLCBgRToke21lc3NhZ2V9YF0sXG4gICAgfTtcbiAgICB0aGlzLnByb2Nlc3NTb2x1dGlvbih0cnVlLCB0cnVlKTtcbiAgICB0aGlzLnJ1bnRpbWVTZXJ2aWNlLnNvbHV0aW9uUHJvY2Vzc2VkKHRoaXMuc29sdXRpb25MaW5lSXRlbSk7XG5cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNhcmRpbmFsaXR5VmFyaWFibGUocGFyZW50OiBMaW5lSXRlbSwgdXBkYXRlZDogTGluZUl0ZW0sIG5ld1F1YW50aXR5PzogbnVtYmVyKSB7XG4gICAgY29uc3QgcG9ydERvbWFpbiA9IHVwZGF0ZWQucG9ydCA/IHBhcmVudC5wb3J0RG9tYWluc1t1cGRhdGVkLnBvcnRdIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGRvbWFpblR5cGUgPSBwb3J0RG9tYWluPy5kb21haW5UeXBlcy5maW5kKHQgPT4gdC5uYW1lID09PSB1cGRhdGVkLnR5cGUpO1xuICAgIGNvbnN0IGNhcmRpbmFsaXR5ID0gZG9tYWluVHlwZT8uY2FyZGluYWxpdHkgPz8gMDtcblxuICAgIGxldCBxdHk7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoZG9tYWluVHlwZT8uY2FyZGluYWxpdHkpKSB7XG4gICAgICBxdHkgPSBOdW1iZXIuaXNGaW5pdGUobmV3UXVhbnRpdHkpID8gbmV3UXVhbnRpdHkgOiB1cGRhdGVkLnF0eTtcbiAgICB9IGVsc2Uge1xuICAgICAgcXR5ID0gRW50aXR5VXRpbC5pc1ByZXNlbnQobmV3UXVhbnRpdHkpXG4gICAgICAgID8gY2FyZGluYWxpdHkgLSB1cGRhdGVkLnF0eSArIChuZXdRdWFudGl0eSBhcyBudW1iZXIpXG4gICAgICAgIDogY2FyZGluYWxpdHkgKyB1cGRhdGVkLnF0eTtcbiAgICB9XG5cbiAgICBjb25zdCBjYXJkaW5hbGl0eU5hbWUgPSAnI0NWLScgKyB1cGRhdGVkLnR5cGUgKyAnQCcgKyB1cGRhdGVkLnBvcnQ7XG5cbiAgICBsZXQgY2FyZGluYWxpdHlWYXJpYWJsZSA9IHBhcmVudC5hdHRyaWJ1dGVzLmZpbmQoYSA9PiBhLm5hbWUgPT09IGNhcmRpbmFsaXR5TmFtZSk7XG4gICAgaWYgKCFjYXJkaW5hbGl0eVZhcmlhYmxlKSB7XG4gICAgICBjYXJkaW5hbGl0eVZhcmlhYmxlID0ge1xuICAgICAgICBpZDogVVVJRC5VVUlEKCksXG4gICAgICAgIG5hbWU6IGNhcmRpbmFsaXR5TmFtZSxcbiAgICAgIH0gYXMgQXR0cmlidXRlO1xuICAgICAgcGFyZW50LmF0dHJpYnV0ZXMucHVzaChjYXJkaW5hbGl0eVZhcmlhYmxlKTtcbiAgICB9XG4gICAgY2FyZGluYWxpdHlWYXJpYWJsZS52YWx1ZSA9IHF0eTtcbiAgICBjYXJkaW5hbGl0eVZhcmlhYmxlLmNmZ1N0YXR1cyA9ICdVc2VyJztcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTGluZUl0ZW0oc2VjdGlvbjogU2VjdGlvbiwgdmFsdWVPcHRpb24/OiBzdHJpbmcsIHBhcmVudExpbmVJdGVtPzogTGluZUl0ZW0pOiBMaW5lSXRlbSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHF0eTogK3RoaXMuZm9ybS5jb250cm9sc1tzZWN0aW9uLmlkICsgJ3F0eSddLnZhbHVlLFxuICAgICAgcG9ydDogc2VjdGlvbi5ib3VuZERhdGEubmFtZSxcbiAgICAgIHR5cGU6IEVudGl0eVV0aWwuaXNQcmVzZW50KHZhbHVlT3B0aW9uKSA/IHZhbHVlT3B0aW9uIDogdGhpcy5mb3JtLmNvbnRyb2xzW3NlY3Rpb24uaWRdLnZhbHVlLFxuICAgICAgY2ZnU3RhdHVzOiAnTmV3JyxcbiAgICAgIHBhcmVudElkOiBwYXJlbnRMaW5lSXRlbT8uaWQsXG4gICAgfSBhcyBMaW5lSXRlbTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMudW5zdWJzY3JpYmUubmV4dCgpO1xuXG4gICAgdGhpcy5zZWN0aW9uc1NlcnZpY2UuZGVzdHJveSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydFJ1bnRpbWUoKSB7XG4gICAgY29uc3QgdWlEZWZpbml0aW9uID0gdGhpcy5ydW50aW1lQ29udGV4dC51aURlZmluaXRpb247XG5cbiAgICBjb25zdCBkZWZhdWx0VGFiID0gdWlEZWZpbml0aW9uPy50YWJzPy5maW5kKHRhYiA9PiB0YWIuaXNEZWZhdWx0KTtcbiAgICB0aGlzLmFjdGl2ZVVJVGFiID0gRW50aXR5VXRpbC5pc1ByZXNlbnQoZGVmYXVsdFRhYikgPyBkZWZhdWx0VGFiIDogdWlEZWZpbml0aW9uPy50YWJzPy5bMF07XG5cbiAgICB0aGlzLnNlY3Rpb25zU2VydmljZS5jb21waWxlTW9kdWxlKHVpRGVmaW5pdGlvbj8uc2VjdGlvbnMgPz8gW10sIHVpRGVmaW5pdGlvbj8uaXNWaWV3RW5jYXBzdWxhdGVkKTtcblxuICAgIHRoaXMucHJvY2Vzc1NvbHV0aW9uKCk7XG5cbiAgICB0aGlzLnNvbHV0aW9uSXNSZWFkeSA9IHRydWU7XG5cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVJ1bnRpbWUobGluZUl0ZW06IExpbmVJdGVtKSB7XG4gICAgdGhpcy5zb2x1dGlvblVwZGF0ZWQuZW1pdChsaW5lSXRlbSk7XG4gIH1cblxuICBhZGRUb0NhcnQoKSB7XG4gICAgY29uc3QgbGluZUl0ZW0gPSBFbnRpdHlVdGlsLmNsb25lKHRoaXMuc29sdXRpb25MaW5lSXRlbSk7XG5cbiAgICB0aGlzLnJ1bnRpbWVTZXJ2aWNlLnN0b3BSdW50aW1lKGxpbmVJdGVtKTtcbiAgfVxuXG4gIHByb2Nlc3NTb2x1dGlvbihpc1VwZGF0ZT86IGJvb2xlYW4sIGlzRXJyb3I/OiBib29sZWFuKTogdm9pZCB7XG4gICAgLy8xLiBCaW5kIHNlY3Rpb25zIHRvIHNvbHV0aW9uXG4gICAgbGV0IHNlY3Rpb25zID0gRW50aXR5VXRpbC5jbG9uZSh0aGlzLnJ1bnRpbWVDb250ZXh0LnVpRGVmaW5pdGlvbj8uc2VjdGlvbnMpID8/IFtdO1xuICAgIGNvbnN0IHNvdXJjZVNlY3Rpb25zID0gRW50aXR5VXRpbC5jbG9uZSh0aGlzLnJ1bnRpbWVDb250ZXh0LnVpRGVmaW5pdGlvbj8uc2VjdGlvbnMpID8/IFtdO1xuICAgIHRoaXMudXBkYXRlTGluZUl0ZW1zU2VjdGlvblBhdGgodGhpcy5zb2x1dGlvbkxpbmVJdGVtKTtcbiAgICBTZWN0aW9uc0JpbmRlckhlbHBlci5zZXRMaW5lSXRlbXNQYXRoKFxuICAgICAgdGhpcy5ydW50aW1lQ29udGV4dC5ydW50aW1lTW9kZWwsXG4gICAgICB0aGlzLnNvbHV0aW9uTGluZUl0ZW0sXG4gICAgICBzZWN0aW9ucyxcbiAgICAgIHNvdXJjZVNlY3Rpb25zLFxuICAgICAgKHNlYzogYW55KSA9PiAhc2VjLnBhcmVudElkICYmIHNlYy5ib3VuZERhdGEsXG4gICAgICB0aGlzLnJ1bnRpbWVDb250ZXh0LnVpRGVmaW5pdGlvbj8ucHJpY2luZ0VuYWJsZWQgPz8gZmFsc2UsXG4gICAgKTtcblxuICAgIHNlY3Rpb25zID0gc2VjdGlvbnMuZmlsdGVyKHMgPT4gcy5tb2RlbCAmJiBzLnRlbXBsYXRlKTtcblxuICAgIC8vMi4gSW5pdCBmb3JtXG4gICAgdGhpcy5mb3JtID0gdGhpcy5mb3JtU2VydmljZS5pbml0Rm9ybShzZWN0aW9ucywgdGhpcy5zb2x1dGlvbkxpbmVJdGVtKTtcbiAgICB0aGlzLmZvcm1TY29wZS5mb3JtID0gdGhpcy5mb3JtO1xuXG4gICAgdGhpcy5zb3J0ZWRTZWN0aW9ucyA9IHRoaXMuZmlsdGVyQW5kU29ydChnZXRTZWN0aW9uVHJlZShzZWN0aW9ucy5maWx0ZXIocyA9PiAhcy5pc1N0YXRpYykpKTtcblxuICAgIGlmICghaXNVcGRhdGUpIHtcbiAgICAgIHRoaXMuc3RhdGljU2VjdGlvbnMgPSB0aGlzLmZpbHRlckFuZFNvcnQoZ2V0U2VjdGlvblRyZWUoc2VjdGlvbnMuZmlsdGVyKHMgPT4gcy5pc1N0YXRpYykpKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzRXJyb3IpIHtcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuY2xlYXIodGhpcy5tZXNzYWdlQnVja2V0SWQpO1xuICAgIH1cbiAgfVxuXG4gIGhpZGVNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLnJ1bnRpbWVTZXJ2aWNlLmNhbmNlbFJ1bnRpbWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTGluZUl0ZW1zU2VjdGlvblBhdGgobGluZUl0ZW06IExpbmVJdGVtLCBwYXJlbnQ/OiBTZWN0aW9uUGF0aCkge1xuICAgIGNvbnN0IHBhdGg6IFNlY3Rpb25QYXRoID0ge1xuICAgICAgdHlwZXM6IHBhcmVudCA/IHBhcmVudC50eXBlcy5jb25jYXQoW2xpbmVJdGVtLnR5cGVdKSA6IFtsaW5lSXRlbS50eXBlXSxcbiAgICAgIHBvcnRzOiBwYXJlbnQgPyBwYXJlbnQucG9ydHMuY29uY2F0KGxpbmVJdGVtLnBvcnQgPyBbbGluZUl0ZW0ucG9ydF0gOiBbXSkgOiBbXSxcbiAgICB9IGFzIFNlY3Rpb25QYXRoO1xuXG4gICAgbGluZUl0ZW0ucGF0aCA9IHBhdGg7XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGxpbmVJdGVtLmxpbmVJdGVtcykge1xuICAgICAgdGhpcy51cGRhdGVMaW5lSXRlbXNTZWN0aW9uUGF0aChjaGlsZCwgbGluZUl0ZW0ucGF0aCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaWx0ZXJBbmRTb3J0KHNlY3Rpb25zOiBTZWN0aW9uW10pOiBTZWN0aW9uW10ge1xuICAgIGNvbnN0IGZpbHRlcmVkID0gdGhpcy5zZWFyY2hGaWx0ZXJQaXBlLnRyYW5zZm9ybShzZWN0aW9ucywgdGhpcy5hY3RpdmVVSVRhYj8uaWQsICdwYWdlJyk7XG4gICAgY29uc3Qgb3JkZXJlZCA9IHRoaXMub3JkZXJCeVBpcGUudHJhbnNmb3JtKGZpbHRlcmVkLCAnb3JkZXInLCAnYXNjJyk7XG5cbiAgICByZXR1cm4gb3JkZXJlZDtcbiAgfVxuXG4gIHByaXZhdGUgZmluZFNlY3Rpb24oaWQ6IHN0cmluZyk6IFNlY3Rpb24gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBFbnRpdHlVdGlsLmZpbmRCeUZpZWxkSGllcmFyY2hpY2FsbHkoJ2lkJywgaWQsIFsuLi50aGlzLnNvcnRlZFNlY3Rpb25zLCAuLi50aGlzLnN0YXRpY1NlY3Rpb25zXSwgJ2NoaWxkcmVuJyk7XG4gIH1cbn1cbiIsIjx2bC1sb2FkZXIgbGFiZWw9XCJMb2FkaW5nIFVJXCIgKm5nSWY9XCIhc29sdXRpb25Jc1JlYWR5OyBlbHNlIGNvbnRlbnRcIj48L3ZsLWxvYWRlcj5cblxuPG5nLXRlbXBsYXRlICNjb250ZW50PlxuICA8ZGl2XG4gICAgY2xhc3M9XCJzaWRlYmFyLXRhYnNcIlxuICAgIFtuZ0NsYXNzXT1cInsgaGlkZGVuOiAhcnVudGltZUNvbnRleHQ/LnVpRGVmaW5pdGlvbj8uZGVmYXVsdFBhbmVscyB9XCJcbiAgICAjdWlUYWJzPVwic2lkZWJhclRhYnNcIlxuICAgIHNpZGViYXJUYWJzPVwie3sgYWN0aXZlVUlUYWI/LmlkIH19XCJcbiAgICBpZD1cInZsLWRlZmF1bHQtc2lkZWJhci10YWJzXCJcbiAgPlxuICAgIDx1bD5cbiAgICAgIDxsaVxuICAgICAgICAqbmdGb3I9XCJsZXQgdGFiIG9mIHJ1bnRpbWVDb250ZXh0Py51aURlZmluaXRpb24/LnRhYnMgfCBvcmRlckJ5OiAnb3JkZXInOidhc2MnXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyBhY3RpdmU6IHVpVGFicy5hY3RpdmVUYWIgPT09IHRhYi5pZCB9XCJcbiAgICAgICAgKGNsaWNrKT1cInVpVGFicy5zd2l0Y2hUYWIodGFiLmlkKVwiXG4gICAgICA+XG4gICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCI+e3sgdGFiLm5hbWUgfX08L2E+XG4gICAgICA8L2xpPlxuICAgIDwvdWw+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJzZWN0aW9ucy13cmFwcGVyXCI+XG4gICAgPGZvcm0gcm9sZT1cImZvcm1cIiBuYW1lPVwiZm9ybVwiIGNsYXNzPVwiZm9ybS1ob3Jpem9udGFsXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCIgbm92YWxpZGF0ZSBhdXRvY29tcGxldGU9XCJvZmZcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNlY3Rpb24gb2Ygc3RhdGljU2VjdGlvbnM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlY3Rpb24ubW9kZWwgJiYgc2VjdGlvbi50ZW1wbGF0ZSAmJiAhc2VjdGlvbi5oaWRkZW5cIj5cbiAgICAgICAgICA8dmwtc2VjdGlvbi1yZW5kZXJlciBbc2VjdGlvbl09XCJzZWN0aW9uXCIgW2Zvcm1dPVwiZm9ybVwiPjwvdmwtc2VjdGlvbi1yZW5kZXJlcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc2VjdGlvbiBvZiBzb3J0ZWRTZWN0aW9uczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VjdGlvbi5tb2RlbCAmJiBzZWN0aW9uLnRlbXBsYXRlICYmICFzZWN0aW9uLmhpZGRlblwiPlxuICAgICAgICAgIDx2bC1zZWN0aW9uLXJlbmRlcmVyIFtzZWN0aW9uXT1cInNlY3Rpb25cIiBbZm9ybV09XCJmb3JtXCI+PC92bC1zZWN0aW9uLXJlbmRlcmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZm9ybT5cblxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwibW9kYWwtZm9vdGVyXCJcbiAgICAgICpuZ0lmPVwicnVudGltZUNvbnRleHQ/LnJ1bnRpbWVNb2RlID09PSAxXCJcbiAgICAgIGlkPVwidmwtcnVudGltZS1kZWZhdWx0LWZvb3RlclwiXG4gICAgICBbbmdDbGFzc109XCJ7IGhpZGRlbjogIXJ1bnRpbWVDb250ZXh0Py51aURlZmluaXRpb24/LmRlZmF1bHRQYW5lbHMgfVwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBpbnB1dC1mb3JtLWlucHV0XCI+XG4gICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCIgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIiAoY2xpY2spPVwiZm9ybS52YWxpZCAmJiBhZGRUb0NhcnQoKVwiIGlkPVwiYWRkLXRvLWNhcnQtYnRuXCJcbiAgICAgICAgICA+QWRkIHRvIGNhcnQ8L2FcbiAgICAgICAgPlxuICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCIgKGNsaWNrKT1cImhpZGVNb2RhbCgpXCIgaWQ9XCJjYW5jZWwtYnRuXCI+Q2FuY2VsPC9hPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|