@veloceapps/sdk 7.0.2-72 → 7.0.2-73

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. package/cms/components/preview/preview.component.d.ts +6 -9
  2. package/cms/components/preview/preview.types.d.ts +5 -0
  3. package/cms/services/resources.service.d.ts +9 -0
  4. package/cms/vendor-map.d.ts +2 -1
  5. package/core/modules/configuration/index.d.ts +1 -0
  6. package/core/modules/configuration/services/configuration-runtime.service.d.ts +4 -3
  7. package/core/modules/configuration/services/configuration.service.d.ts +6 -4
  8. package/core/modules/configuration/services/configuration.state.d.ts +30 -0
  9. package/core/modules/configuration/services/runtime-context.service.d.ts +1 -1
  10. package/core/types/runtime.types.d.ts +2 -2
  11. package/esm2020/cms/components/preview/preview.component.mjs +17 -37
  12. package/esm2020/cms/components/preview/preview.types.mjs +1 -1
  13. package/esm2020/cms/services/resources.service.mjs +19 -1
  14. package/esm2020/cms/vendor-map.mjs +3 -2
  15. package/esm2020/core/modules/configuration/configuration.module.mjs +4 -1
  16. package/esm2020/core/modules/configuration/index.mjs +2 -1
  17. package/esm2020/core/modules/configuration/services/configuration-runtime.service.mjs +27 -19
  18. package/esm2020/core/modules/configuration/services/configuration.service.mjs +41 -29
  19. package/esm2020/core/modules/configuration/services/configuration.state.mjs +142 -0
  20. package/esm2020/core/modules/configuration/services/runtime-context.service.mjs +10 -11
  21. package/esm2020/core/services/quote-draft.service.mjs +1 -1
  22. package/esm2020/core/types/runtime.types.mjs +1 -1
  23. package/esm2020/src/components/doc-gen/doc-gen.component.mjs +1 -1
  24. package/esm2020/src/components/guided-selling/guided-selling.component.mjs +1 -1
  25. package/esm2020/src/pages/assets/assets.component.mjs +1 -1
  26. package/esm2020/src/pages/catalog/catalog.component.mjs +1 -1
  27. package/esm2020/src/pages/legacy-product/legacy-product.component.mjs +4 -4
  28. package/esm2020/src/pages/product/product.component.mjs +50 -66
  29. package/esm2020/src/pages/remote/remote.component.mjs +19 -19
  30. package/esm2020/src/pages/shopping-cart/shopping-cart.component.mjs +1 -1
  31. package/esm2020/src/types/flow-customization.types.mjs +1 -1
  32. package/fesm2015/veloceapps-sdk-cms.mjs +44 -43
  33. package/fesm2015/veloceapps-sdk-cms.mjs.map +1 -1
  34. package/fesm2015/veloceapps-sdk-core.mjs +214 -59
  35. package/fesm2015/veloceapps-sdk-core.mjs.map +1 -1
  36. package/fesm2015/veloceapps-sdk.mjs +67 -80
  37. package/fesm2015/veloceapps-sdk.mjs.map +1 -1
  38. package/fesm2020/veloceapps-sdk-cms.mjs +42 -43
  39. package/fesm2020/veloceapps-sdk-cms.mjs.map +1 -1
  40. package/fesm2020/veloceapps-sdk-core.mjs +206 -55
  41. package/fesm2020/veloceapps-sdk-core.mjs.map +1 -1
  42. package/fesm2020/veloceapps-sdk.mjs +64 -76
  43. package/fesm2020/veloceapps-sdk.mjs.map +1 -1
  44. package/package.json +1 -1
  45. package/src/pages/product/product.component.d.ts +10 -21
  46. package/src/pages/remote/remote.component.d.ts +3 -4
  47. package/src/types/flow-customization.types.d.ts +3 -3
@@ -1,8 +1,8 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { ConfigurationApiService } from '@veloceapps/api';
3
- import { ConfigurationContextMode, RuntimeModel, SalesforceIdUtils, } from '@veloceapps/core';
3
+ import { ConfigurationContextMode, RuntimeModel, SalesforceIdUtils, getUIDefinitionProperties, } from '@veloceapps/core';
4
4
  import { combineLatest } from 'rxjs';
5
- import { first, tap } from 'rxjs/operators';
5
+ import { first, map, tap } from 'rxjs/operators';
6
6
  import { ContextService } from '../../../services/context.service';
7
7
  import { RuntimeMode } from '../../../types';
8
8
  import { RuntimeContextService } from './runtime-context.service';
@@ -24,23 +24,18 @@ export class ConfigurationRuntimeService {
24
24
  this.initializationProps = undefined;
25
25
  this.uiDefinitionProperties = {};
26
26
  }
27
- initTestMode(modelId, uiDefinition) {
28
- this.uiDefinitionProperties = uiDefinition.properties ?? {};
29
- const uiDefinitionExternals = uiDefinition.externals ?? {};
27
+ initTestMode(uiDefinitionContainer) {
28
+ this.uiDefinitionProperties = getUIDefinitionProperties(uiDefinitionContainer);
29
+ const uiDefinitionExternals = uiDefinitionContainer.source.externals ?? {};
30
30
  return combineLatest([
31
- this.apiService.getRuntimeDataByModelId(modelId),
31
+ this.apiService.getRuntimeDataByModelId(uiDefinitionContainer.modelId),
32
32
  this.contextService.create('TestId', ConfigurationContextMode.TEST),
33
- ]).pipe(first(), tap(([runtimeData, context]) => {
34
- this._runtimeContext = {
35
- modelId: modelId,
36
- runtimeModel: RuntimeModel.create(runtimeData.types, runtimeData.products),
37
- runtimeMode: RuntimeMode.TEST,
38
- };
33
+ ]).pipe(first(), map(([runtimeData, context]) => {
39
34
  this.contextService.update({
40
35
  properties: {
41
36
  ...this.runtimeContext?.properties,
42
37
  ...context.properties,
43
- ModelId: modelId,
38
+ ModelId: uiDefinitionContainer.modelId,
44
39
  RuntimeMode: ConfigurationContextMode.TEST,
45
40
  PricingEnabled: this.uiDefinitionProperties.pricingEnabled ? 'true' : 'false',
46
41
  StartDate: new Date().toISOString().substring(0, 10),
@@ -50,14 +45,20 @@ export class ConfigurationRuntimeService {
50
45
  ...uiDefinitionExternals,
51
46
  },
52
47
  });
53
- this._isInitialized = true;
54
- }));
48
+ this._runtimeContext = {
49
+ modelId: uiDefinitionContainer.modelId,
50
+ runtimeModel: RuntimeModel.create(runtimeData.types, runtimeData.products),
51
+ runtimeMode: RuntimeMode.TEST,
52
+ uiDefinitionContainer,
53
+ };
54
+ return this._runtimeContext;
55
+ }), tap(() => (this._isInitialized = true)));
55
56
  }
56
57
  init(props) {
57
58
  this.initializationProps = props;
58
59
  const context = this.contextService.resolve();
59
60
  return this.runtimeContextService.getRuntimeContext(props.productId, props.offeringId).pipe(tap(runtimeContext => {
60
- this.uiDefinitionProperties = runtimeContext.uiDefinition?.properties ?? {};
61
+ this.uiDefinitionProperties = getUIDefinitionProperties(runtimeContext.uiDefinitionContainer);
61
62
  const { PriceListId } = context.properties ?? {};
62
63
  const mergeContext = {
63
64
  ...runtimeContext,
@@ -77,8 +78,15 @@ export class ConfigurationRuntimeService {
77
78
  },
78
79
  });
79
80
  }
80
- this._isInitialized = true;
81
- }));
81
+ return this._runtimeContext;
82
+ }), tap(() => (this._isInitialized = true)));
83
+ }
84
+ overrideUIDefinition(uiDefinitionContainer) {
85
+ if (!this._runtimeContext) {
86
+ return;
87
+ }
88
+ this._runtimeContext.uiDefinitionContainer = uiDefinitionContainer;
89
+ this.uiDefinitionProperties = getUIDefinitionProperties(uiDefinitionContainer);
82
90
  }
83
91
  id15to18(propertyName, source) {
84
92
  if (!source) {
@@ -104,4 +112,4 @@ ConfigurationRuntimeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "1
104
112
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ConfigurationRuntimeService, decorators: [{
105
113
  type: Injectable
106
114
  }], ctorParameters: function () { return [{ type: i1.ConfigurationApiService }, { type: i2.ContextService }, { type: i3.RuntimeContextService }]; } });
107
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi1ydW50aW1lLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Nkay9jb3JlL21vZHVsZXMvY29uZmlndXJhdGlvbi9zZXJ2aWNlcy9jb25maWd1cmF0aW9uLXJ1bnRpbWUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFELE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsWUFBWSxFQUNaLGlCQUFpQixHQUdsQixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLE9BQU8sRUFBYyxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbkUsT0FBTyxFQUFrQixXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7QUFHbEUsTUFBTSxPQUFPLDJCQUEyQjtJQU90QyxZQUNVLFVBQW1DLEVBQ25DLGNBQThCLEVBQzlCLHFCQUE0QztRQUY1QyxlQUFVLEdBQVYsVUFBVSxDQUF5QjtRQUNuQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQVI5QyxtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUd4QiwyQkFBc0IsR0FBc0IsRUFBRSxDQUFDO0lBTW5ELENBQUM7SUFFRyxLQUFLO1FBQ1YsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUM7UUFDakMs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RCxJQUFJLENBQUMsZUFBZSxHQUFHLFlBQVksQ0FBQztZQUVwQyxJQUFJLE9BQU8sQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFO2dCQUNwRSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztvQkFDekIsVUFBVSxFQUFFO3dCQUNWLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVO3dCQUNsQyxHQUFHLE9BQU8sQ0FBQyxVQUFVO3FCQUN0QjtpQkFDRixDQUFDLENBQUM7YUFDSjtZQUVELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRU8sUUFBUSxDQUFDLFlBQW9CLEVBQUUsTUFBd0I7UUFDN0QsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLE9BQU87U0FDUjtRQUVELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVuQyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLEVBQUUsRUFBRTtZQUNwRCxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsaUJBQWlCLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDdEU7SUFDSCxDQUFDO0lBRUQsSUFBVyxhQUFhO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBVyxZQUFZO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUM7SUFDM0MsQ0FBQztJQUVELElBQVcsY0FBYztRQUN2QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQzs7d0hBakhVLDJCQUEyQjs0SEFBM0IsMkJBQTJCOzJGQUEzQiwyQkFBMkI7a0JBRHZDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uQXBpU2VydmljZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL2FwaSc7XG5pbXBvcnQge1xuICBDb25maWd1cmF0aW9uQ29udGV4dE1vZGUsXG4gIFJ1bnRpbWVNb2RlbCxcbiAgU2FsZXNmb3JjZUlkVXRpbHMsXG4gIFVJRGVmaW5pdGlvbixcbiAgVUlEZWZpbml0aW9uUHJvcHMsXG59IGZyb20gJ0B2ZWxvY2VhcHBzL2NvcmUnO1xuaW1wb3J0IHsgRGljdGlvbmFyeSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaXJzdCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUnVudGltZUNvbnRleHQsIFJ1bnRpbWVNb2RlIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgUnVudGltZUluaXRpYWxpemF0aW9uUHJvcHMgfSBmcm9tICcuLi90eXBlcy9jb25maWd1cmF0aW9uLXJ1bnRpbWUudHlwZXMnO1xuaW1wb3J0IHsgUnVudGltZUNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi9ydW50aW1lLWNvbnRleHQuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb25maWd1cmF0aW9uUnVudGltZVNlcnZpY2Uge1xuICBwcml2YXRlIF9ydW50aW1lQ29udGV4dD86IFJ1bnRpbWVDb250ZXh0O1xuICBwcml2YXRlIF9pc0luaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgcHVibGljIGluaXRpYWxpemF0aW9uUHJvcHM/OiBSdW50aW1lSW5pdGlhbGl6YXRpb25Qcm9wcztcbiAgcHVibGljIHVpRGVmaW5pdGlvblByb3BlcnRpZXM6IFVJRGVmaW5pdGlvblByb3BzID0ge307XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhcGlTZXJ2aWNlOiBDb25maWd1cmF0aW9uQXBpU2VydmljZSxcbiAgICBwcml2YXRlIGNvbnRleHRTZXJ2aWNlOiBDb250ZXh0U2VydmljZSxcbiAgICBwcml2YXRlIHJ1bnRpbWVDb250ZXh0U2VydmljZTogUnVudGltZUNvbnRleHRTZXJ2aWNlLFxuICApIHt9XG5cbiAgcHVibGljIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9ydW50aW1lQ29udGV4dCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmluaXRpYWxpemF0aW9uUHJvcHMgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy51aURlZmluaXRpb25Qcm9wZXJ0aWVzID0ge307XG4gIH1cblxuICBwdWJsaWMgaW5pdFRlc3RNb2RlKG1vZGVsSWQ6IHN0cmluZywgdWlEZWZpbml0aW9uOiBVSURlZmluaXRpb24pOiBhbnkge1xuICAgIHRoaXMudWlEZWZpbml0aW9uUHJvcGVydGllcyA9IHVpRGVmaW5pdGlvbi5wcm9wZXJ0aWVzID8/IHt9O1xuICAgIGNvbnN0IHVpRGVmaW5pdGlvbkV4dGVybmFscyA9IHVpRGVmaW5pdGlvbi5leHRlcm5hbHMgPz8ge307XG5cbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmFwaVNlcnZpY2UuZ2V0UnVudGltZURhdGFCeU1vZGVsSWQobW9kZWxJZCksXG4gICAgICB0aGlzLmNvbnRleHRTZXJ2aWNlLmNyZWF0ZSgnVGVzdElkJywgQ29uZmlndXJhdGlvbkNvbnRleHRNb2RlLlRFU1QpLFxuICAgIF0pLnBpcGUoXG4gICAgICBmaXJzdCgpLFxuICAgICAgdGFwKChbcnVudGltZURhdGEsIGNvbnRleHRdKSA9PiB7XG4gICAgICAgIHRoaXMuX3J1bnRpbWVDb250ZXh0ID0ge1xuICAgICAgICAgIG1vZGVsSWQ6IG1vZGVsSWQsXG4gICAgICAgICAgcnVudGltZU1vZGVsOiBSdW50aW1lTW9kZWwuY3JlYXRlKHJ1bnRpbWVEYXRhLnR5cGVzLCBydW50aW1lRGF0YS5wcm9kdWN0cyksXG4gICAgICAgICAgcnVudGltZU1vZGU6IFJ1bnRpbWVNb2RlLlRFU1QsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5jb250ZXh0U2VydmljZS51cGRhdGUoe1xuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIC4uLnRoaXMucnVudGltZUNvbnRleHQ/LnByb3BlcnRpZXMsXG4gICAgICAgICAgICAuLi5jb250ZXh0LnByb3BlcnRpZXMsXG4gICAgICAgICAgICBNb2RlbElkOiBtb2RlbElkLFxuICAgICAgICAgICAgUnVudGltZU1vZGU6IENvbmZpZ3VyYXRpb25Db250ZXh0TW9kZS5URVNULFxuICAgICAgICAgICAgUHJpY2luZ0VuYWJsZWQ6IHRoaXMudWlEZWZpbml0aW9uUHJvcGVydGllcy5wcmljaW5nRW5hYmxlZCA/ICd0cnVlJyA6ICdmYWxzZScsXG4gICAgICAgICAgICBTdGFydERhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zdWJzdHJpbmcoMCwgMTApLFxuICAgICAgICAgICAgUHJpY2VMaXN0SWQ6IHRoaXMudWlEZWZpbml0aW9uUHJvcGVydGllcy5wcmljZUxpc3QsXG4gICAgICAgICAgICBvZmZlcmluZ0lkOiB0aGlzLnVpRGVmaW5pdGlvblByb3BlcnRpZXMub2ZmZXJpbmdJZCxcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6ICd0cnVlJyxcbiAgICAgICAgICAgIC4uLnVpRGVmaW5pdGlvbkV4dGVybmFscyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgaW5pdChwcm9wczogUnVudGltZUluaXRpYWxpemF0aW9uUHJvcHMpOiBPYnNlcnZhYmxlPFJ1bnRpbWVDb250ZXh0IHwgdW5kZWZpbmVkPiB7XG4gICAgdGhpcy5pbml0aWFsaXphdGlvblByb3BzID0gcHJvcHM7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dFNlcnZpY2UucmVzb2x2ZSgpO1xuXG4gICAgcmV0dXJuIHRoaXMucnVudGltZUNvbnRleHRTZXJ2aWNlLmdldFJ1bnRpbWVDb250ZXh0KHByb3BzLnByb2R1Y3RJZCwgcHJvcHMub2ZmZXJpbmdJZCkucGlwZShcbiAgICAgIHRhcChydW50aW1lQ29udGV4dCA9PiB7XG4gICAgICAgIHRoaXMudWlEZWZpbml0aW9uUHJvcGVydGllcyA9IHJ1bnRpbWVDb250ZXh0LnVpRGVmaW5pdGlvbj8ucHJvcGVydGllcyA/PyB7fTtcbiAgICAgICAgY29uc3QgeyBQcmljZUxpc3RJZCB9ID0gY29udGV4dC5wcm9wZXJ0aWVzID8/IHt9O1xuXG4gICAgICAgIGNvbnN0IG1lcmdlQ29udGV4dDogUnVudGltZUNvbnRleHQgPSB7XG4gICAgICAgICAgLi4ucnVudGltZUNvbnRleHQsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgLi4ucnVudGltZUNvbnRleHQucHJvcGVydGllcyxcbiAgICAgICAgICAgIC4uLmNvbnRleHQucHJvcGVydGllcyxcbiAgICAgICAgICAgIFByaWNpbmdFbmFibGVkOiBQcmljZUxpc3RJZCA/ICd0cnVlJyA6ICdmYWxzZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmlkMTV0bzE4KCdBY2NvdW50SWQnLCBtZXJnZUNvbnRleHQucHJvcGVydGllcyk7XG4gICAgICAgIHRoaXMuX3J1bnRpbWVDb250ZXh0ID0gbWVyZ2VDb250ZXh0O1xuXG4gICAgICAgIGlmIChjb250ZXh0LnByb3BlcnRpZXMgJiYgdGhpcy5fcnVudGltZUNvbnRleHQucHJvcGVydGllcz8uU3RhcnREYXRlKSB7XG4gICAgICAgICAgdGhpcy5jb250ZXh0U2VydmljZS51cGRhdGUoe1xuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAuLi50aGlzLl9ydW50aW1lQ29udGV4dC5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAuLi5jb250ZXh0LnByb3BlcnRpZXMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IHRydWU7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpZDE1dG8xOChwcm9wZXJ0eU5hbWU6IHN0cmluZywgc291cmNlPzogRGljdGlvbmFyeTxhbnk+KTogdm9pZCB7XG4gICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IHNvdXJjZVtwcm9wZXJ0eU5hbWVdO1xuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoID09PSAxNSkge1xuICAgICAgc291cmNlW3Byb3BlcnR5TmFtZV0gPSBTYWxlc2ZvcmNlSWRVdGlscy5nZW5lcmF0ZUlkMThGcm9tSWQxNSh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBpc0luaXRpYWxpemVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0luaXRpYWxpemVkO1xuICB9XG5cbiAgcHVibGljIGdldCBydW50aW1lTW9kZWwoKTogUnVudGltZU1vZGVsIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5ydW50aW1lQ29udGV4dD8ucnVudGltZU1vZGVsO1xuICB9XG5cbiAgcHVibGljIGdldCBydW50aW1lQ29udGV4dCgpOiBSdW50aW1lQ29udGV4dCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3J1bnRpbWVDb250ZXh0O1xuICB9XG59XG4iXX0=
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi1ydW50aW1lLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Nkay9jb3JlL21vZHVsZXMvY29uZmlndXJhdGlvbi9zZXJ2aWNlcy9jb25maWd1cmF0aW9uLXJ1bnRpbWUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFELE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsWUFBWSxFQUNaLGlCQUFpQixFQUdqQix5QkFBeUIsR0FDMUIsTUFBTSxrQkFBa0IsQ0FBQztBQUUxQixPQUFPLEVBQWMsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQWtCLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7OztBQUdsRSxNQUFNLE9BQU8sMkJBQTJCO0lBT3RDLFlBQ1UsVUFBbUMsRUFDbkMsY0FBOEIsRUFDOUIscUJBQTRDO1FBRjVDLGVBQVUsR0FBVixVQUFVLENBQXlCO1FBQ25DLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBUjlDLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBR3hCLDJCQUFzQixHQUFzQixFQUFFLENBQUM7SUFNbkQsQ0FBQztJQUVHLEtBQUs7UUFDVixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsZUFB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RTtZQUNwRCxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsaUJBQWlCLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDdEU7SUFDSCxDQUFDO0lBRUQsSUFBVyxhQUFhO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBVyxZQUFZO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUM7SUFDM0MsQ0FBQztJQUVELElBQVcsY0FBYztRQUN2QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQzs7d0hBN0hVLDJCQUEyQjs0SEFBM0IsMkJBQTJCOzJGQUEzQiwyQkFBMkI7a0JBRHZDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uQXBpU2VydmljZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL2FwaSc7XG5pbXBvcnQge1xuICBDb25maWd1cmF0aW9uQ29udGV4dE1vZGUsXG4gIFJ1bnRpbWVNb2RlbCxcbiAgU2FsZXNmb3JjZUlkVXRpbHMsXG4gIFVJRGVmaW5pdGlvbkNvbnRhaW5lcixcbiAgVUlEZWZpbml0aW9uUHJvcHMsXG4gIGdldFVJRGVmaW5pdGlvblByb3BlcnRpZXMsXG59IGZyb20gJ0B2ZWxvY2VhcHBzL2NvcmUnO1xuaW1wb3J0IHsgRGljdGlvbmFyeSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaXJzdCwgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDb250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2NvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBSdW50aW1lQ29udGV4dCwgUnVudGltZU1vZGUgfSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBSdW50aW1lSW5pdGlhbGl6YXRpb25Qcm9wcyB9IGZyb20gJy4uL3R5cGVzL2NvbmZpZ3VyYXRpb24tcnVudGltZS50eXBlcyc7XG5pbXBvcnQgeyBSdW50aW1lQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuL3J1bnRpbWUtY29udGV4dC5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENvbmZpZ3VyYXRpb25SdW50aW1lU2VydmljZSB7XG4gIHByaXZhdGUgX3J1bnRpbWVDb250ZXh0PzogUnVudGltZUNvbnRleHQ7XG4gIHByaXZhdGUgX2lzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICBwdWJsaWMgaW5pdGlhbGl6YXRpb25Qcm9wcz86IFJ1bnRpbWVJbml0aWFsaXphdGlvblByb3BzO1xuICBwdWJsaWMgdWlEZWZpbml0aW9uUHJvcGVydGllczogVUlEZWZpbml0aW9uUHJvcHMgPSB7fTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFwaVNlcnZpY2U6IENvbmZpZ3VyYXRpb25BcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29udGV4dFNlcnZpY2U6IENvbnRleHRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcnVudGltZUNvbnRleHRTZXJ2aWNlOiBSdW50aW1lQ29udGV4dFNlcnZpY2UsXG4gICkge31cblxuICBwdWJsaWMgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5faXNJbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIHRoaXMuX3J1bnRpbWVDb250ZXh0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuaW5pdGlhbGl6YXRpb25Qcm9wcyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnVpRGVmaW5pdGlvblByb3BlcnRpZXMgPSB7fTtcbiAgfVxuXG4gIHB1YmxpYyBpbml0VGVzdE1vZGUodWlEZWZpbml0aW9uQ29udGFpbmVyOiBVSURlZmluaXRpb25Db250YWluZXIpOiBPYnNlcnZhYmxlPFJ1bnRpbWVDb250ZXh0PiB7XG4gICAgdGhpcy51aURlZmluaXRpb25Qcm9wZXJ0aWVzID0gZ2V0VUlEZWZpbml0aW9uUHJvcGVydGllcyh1aURlZmluaXRpb25Db250YWluZXIpO1xuICAgIGNvbnN0IHVpRGVmaW5pdGlvbkV4dGVybmFscyA9IHVpRGVmaW5pdGlvbkNvbnRhaW5lci5zb3VyY2UuZXh0ZXJuYWxzID8/IHt9O1xuXG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5hcGlTZXJ2aWNlLmdldFJ1bnRpbWVEYXRhQnlNb2RlbElkKHVpRGVmaW5pdGlvbkNvbnRhaW5lci5tb2RlbElkKSxcbiAgICAgIHRoaXMuY29udGV4dFNlcnZpY2UuY3JlYXRlKCdUZXN0SWQnLCBDb25maWd1cmF0aW9uQ29udGV4dE1vZGUuVEVTVCksXG4gICAgXSkucGlwZShcbiAgICAgIGZpcnN0KCksXG4gICAgICBtYXAoKFtydW50aW1lRGF0YSwgY29udGV4dF0pID0+IHtcbiAgICAgICAgdGhpcy5jb250ZXh0U2VydmljZS51cGRhdGUoe1xuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIC4uLnRoaXMucnVudGltZUNvbnRleHQ/LnByb3BlcnRpZXMsXG4gICAgICAgICAgICAuLi5jb250ZXh0LnByb3BlcnRpZXMsXG4gICAgICAgICAgICBNb2RlbElkOiB1aURlZmluaXRpb25Db250YWluZXIubW9kZWxJZCxcbiAgICAgICAgICAgIFJ1bnRpbWVNb2RlOiBDb25maWd1cmF0aW9uQ29udGV4dE1vZGUuVEVTVCxcbiAgICAgICAgICAgIFByaWNpbmdFbmFibGVkOiB0aGlzLnVpRGVmaW5pdGlvblByb3BlcnRpZXMucHJpY2luZ0VuYWJsZWQgPyAndHJ1ZScgOiAnZmFsc2UnLFxuICAgICAgICAgICAgU3RhcnREYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3Vic3RyaW5nKDAsIDEwKSxcbiAgICAgICAgICAgIFByaWNlTGlzdElkOiB0aGlzLnVpRGVmaW5pdGlvblByb3BlcnRpZXMucHJpY2VMaXN0LFxuICAgICAgICAgICAgb2ZmZXJpbmdJZDogdGhpcy51aURlZmluaXRpb25Qcm9wZXJ0aWVzLm9mZmVyaW5nSWQsXG4gICAgICAgICAgICBzdGFuZGFsb25lOiAndHJ1ZScsXG4gICAgICAgICAgICAuLi51aURlZmluaXRpb25FeHRlcm5hbHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fcnVudGltZUNvbnRleHQgPSB7XG4gICAgICAgICAgbW9kZWxJZDogdWlEZWZpbml0aW9uQ29udGFpbmVyLm1vZGVsSWQsXG4gICAgICAgICAgcnVudGltZU1vZGVsOiBSdW50aW1lTW9kZWwuY3JlYXRlKHJ1bnRpbWVEYXRhLnR5cGVzLCBydW50aW1lRGF0YS5wcm9kdWN0cyksXG4gICAgICAgICAgcnVudGltZU1vZGU6IFJ1bnRpbWVNb2RlLlRFU1QsXG4gICAgICAgICAgdWlEZWZpbml0aW9uQ29udGFpbmVyLFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9ydW50aW1lQ29udGV4dDtcbiAgICAgIH0pLFxuICAgICAgdGFwKCgpID0+ICh0aGlzLl9pc0luaXRpYWxpemVkID0gdHJ1ZSkpLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgaW5pdChwcm9wczogUnVudGltZUluaXRpYWxpemF0aW9uUHJvcHMpOiBPYnNlcnZhYmxlPFJ1bnRpbWVDb250ZXh0PiB7XG4gICAgdGhpcy5pbml0aWFsaXphdGlvblByb3BzID0gcHJvcHM7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dFNlcnZpY2UucmVzb2x2ZSgpO1xuXG4gICAgcmV0dXJuIHRoaXMucnVudGltZUNvbnRleHRTZXJ2aWNlLmdldFJ1bnRpbWVDb250ZXh0KHByb3BzLnByb2R1Y3RJZCwgcHJvcHMub2ZmZXJpbmdJZCkucGlwZShcbiAgICAgIHRhcChydW50aW1lQ29udGV4dCA9PiB7XG4gICAgICAgIHRoaXMudWlEZWZpbml0aW9uUHJvcGVydGllcyA9IGdldFVJRGVmaW5pdGlvblByb3BlcnRpZXMocnVudGltZUNvbnRleHQudWlEZWZpbml0aW9uQ29udGFpbmVyKTtcbiAgICAgICAgY29uc3QgeyBQcmljZUxpc3RJZCB9ID0gY29udGV4dC5wcm9wZXJ0aWVzID8/IHt9O1xuXG4gICAgICAgIGNvbnN0IG1lcmdlQ29udGV4dDogUnVudGltZUNvbnRleHQgPSB7XG4gICAgICAgICAgLi4ucnVudGltZUNvbnRleHQsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgLi4ucnVudGltZUNvbnRleHQucHJvcGVydGllcyxcbiAgICAgICAgICAgIC4uLmNvbnRleHQucHJvcGVydGllcyxcbiAgICAgICAgICAgIFByaWNpbmdFbmFibGVkOiBQcmljZUxpc3RJZCA/ICd0cnVlJyA6ICdmYWxzZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmlkMTV0bzE4KCdBY2NvdW50SWQnLCBtZXJnZUNvbnRleHQucHJvcGVydGllcyk7XG4gICAgICAgIHRoaXMuX3J1bnRpbWVDb250ZXh0ID0gbWVyZ2VDb250ZXh0O1xuXG4gICAgICAgIGlmIChjb250ZXh0LnByb3BlcnRpZXMgJiYgdGhpcy5fcnVudGltZUNvbnRleHQucHJvcGVydGllcz8uU3RhcnREYXRlKSB7XG4gICAgICAgICAgdGhpcy5jb250ZXh0U2VydmljZS51cGRhdGUoe1xuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAuLi50aGlzLl9ydW50aW1lQ29udGV4dC5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAuLi5jb250ZXh0LnByb3BlcnRpZXMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bnRpbWVDb250ZXh0O1xuICAgICAgfSksXG4gICAgICB0YXAoKCkgPT4gKHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSB0cnVlKSksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZVVJRGVmaW5pdGlvbih1aURlZmluaXRpb25Db250YWluZXI6IFVJRGVmaW5pdGlvbkNvbnRhaW5lcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5fcnVudGltZUNvbnRleHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9ydW50aW1lQ29udGV4dC51aURlZmluaXRpb25Db250YWluZXIgPSB1aURlZmluaXRpb25Db250YWluZXI7XG4gICAgdGhpcy51aURlZmluaXRpb25Qcm9wZXJ0aWVzID0gZ2V0VUlEZWZpbml0aW9uUHJvcGVydGllcyh1aURlZmluaXRpb25Db250YWluZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBpZDE1dG8xOChwcm9wZXJ0eU5hbWU6IHN0cmluZywgc291cmNlPzogRGljdGlvbmFyeTxhbnk+KTogdm9pZCB7XG4gICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IHNvdXJjZVtwcm9wZXJ0eU5hbWVdO1xuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoID09PSAxNSkge1xuICAgICAgc291cmNlW3Byb3BlcnR5TmFtZV0gPSBTYWxlc2ZvcmNlSWRVdGlscy5nZW5lcmF0ZUlkMThGcm9tSWQxNSh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBpc0luaXRpYWxpemVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0luaXRpYWxpemVkO1xuICB9XG5cbiAgcHVibGljIGdldCBydW50aW1lTW9kZWwoKTogUnVudGltZU1vZGVsIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5ydW50aW1lQ29udGV4dD8ucnVudGltZU1vZGVsO1xuICB9XG5cbiAgcHVibGljIGdldCBydW50aW1lQ29udGV4dCgpOiBSdW50aW1lQ29udGV4dCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3J1bnRpbWVDb250ZXh0O1xuICB9XG59XG4iXX0=
@@ -2,7 +2,7 @@ import { HttpErrorResponse } from '@angular/common/http';
2
2
  import { Injectable } from '@angular/core';
3
3
  import { ConfigurationApiService } from '@veloceapps/api';
4
4
  import { ConfirmationComponent, ToastType } from '@veloceapps/components';
5
- import { ConfigurationMode, ConfigurationTranslatorUtils, } from '@veloceapps/core';
5
+ import { ConfigurationMode, ConfigurationTranslatorUtils, getUIDefinitionProperties, } from '@veloceapps/core';
6
6
  import { transform } from 'lodash';
7
7
  import { MessageService } from 'primeng/api';
8
8
  import { DialogService } from 'primeng/dynamicdialog';
@@ -76,10 +76,18 @@ export class ConfigurationService {
76
76
  return this.lineItem.value ? { ...this.lineItem.value } : undefined;
77
77
  }
78
78
  getRuntimeModel() {
79
- return this.runtimeService.runtimeModel;
79
+ const runtimeModel = this.runtimeService.runtimeModel;
80
+ if (!runtimeModel) {
81
+ throw new Error('Runtime model not initialized');
82
+ }
83
+ return runtimeModel;
80
84
  }
81
85
  getRuntimeContext() {
82
- return this.runtimeService.runtimeContext;
86
+ const runtimeContext = this.runtimeService.runtimeContext;
87
+ if (!runtimeContext) {
88
+ throw new Error('Runtime context not initialized');
89
+ }
90
+ return runtimeContext;
83
91
  }
84
92
  get contextSnapshot() {
85
93
  return this.contextService.resolve();
@@ -100,40 +108,26 @@ export class ConfigurationService {
100
108
  return this.pricePlans.value;
101
109
  }
102
110
  configure() {
111
+ return this.configureRequest$(this.generateRequest());
112
+ }
113
+ configureRequest$(configurationRequest) {
103
114
  const runtimeContext = this.getRuntimeContext();
104
115
  const runtimeModel = this.getRuntimeModel();
105
- if (!runtimeContext || !runtimeModel) {
106
- return throwError(() => new Error('Runtime context/model not initialized'));
107
- }
108
- const uiDefinitionProperties = {
109
- ...(runtimeContext.uiDefinition?.properties ?? {}),
110
- ...(this.runtimeService.uiDefinitionProperties ?? {}),
111
- };
112
- let lineItem = this.configurableRamp;
113
- if (!lineItem) {
114
- const { initializationProps } = this.runtimeService ?? {};
115
- lineItem = getDefaultLineItem(runtimeContext, uiDefinitionProperties, initializationProps?.defaultQty);
116
- // Set default attributes
117
- if (initializationProps?.attributesMap) {
118
- const attributes = transform(initializationProps?.attributesMap, (acc, value, name) => acc.push({ name, value }), []);
119
- lineItem = new LineItemWorker(lineItem).patchAttribute(attributes).li;
120
- }
121
- }
122
- const configurationRequest = this.createRequest(lineItem);
116
+ const uiDefinitionProperties = this.getUIDefinitionProperties();
123
117
  const mainPricingEnabled = runtimeContext.properties?.PricingEnabled;
124
118
  const pricingEnabled = mainPricingEnabled ? mainPricingEnabled === 'true' : uiDefinitionProperties.pricingEnabled;
125
- return this.configurationApiService
126
- .configureLineItem({ configurationRequest, runtimeModel, pricingEnabled })
127
- .pipe(map(({ lineItem, context, charges, pricePlans, deletedLineItems }) => {
119
+ return this.configurationApiService.configureLineItem({ configurationRequest, runtimeModel, pricingEnabled }).pipe(tap(({ lineItem, context, charges, pricePlans, deletedLineItems }) => {
128
120
  this.contextService.update(context ?? {});
129
121
  this.charges.next(charges ?? {});
130
122
  this.pricePlans.next(pricePlans ?? {});
123
+ if (lineItem) {
124
+ this.lineItem.next(lineItem);
125
+ }
131
126
  if (deletedLineItems?.length) {
132
127
  this.showInactiveProductsConfirmation();
133
128
  }
134
- return lineItem;
135
- }))
136
- .pipe(tap(lineItem => lineItem && this.lineItem.next(lineItem)), catchError(error => throwError(() => new Error(error.error?.message || error.message || JSON.stringify(error)))));
129
+ this.configurableRamp = lineItem;
130
+ }), map(({ lineItem }) => lineItem), catchError(error => throwError(() => new Error(error.error?.message || error.message || JSON.stringify(error)))));
137
131
  }
138
132
  configureExternal$(props) {
139
133
  return this.runtimeService
@@ -155,7 +149,19 @@ export class ConfigurationService {
155
149
  throw error;
156
150
  }));
157
151
  }
158
- createRequest(lineItem) {
152
+ generateRequest() {
153
+ const runtimeContext = this.getRuntimeContext();
154
+ const uiDefinitionProperties = this.getUIDefinitionProperties();
155
+ let lineItem = this.configurableRamp;
156
+ if (!lineItem) {
157
+ const { initializationProps } = this.runtimeService ?? {};
158
+ lineItem = getDefaultLineItem(runtimeContext, uiDefinitionProperties, initializationProps?.defaultQty);
159
+ // Set default attributes
160
+ if (initializationProps?.attributesMap) {
161
+ const attributes = transform(initializationProps?.attributesMap, (acc, value, name) => acc.push({ name, value }), []);
162
+ lineItem = new LineItemWorker(lineItem).patchAttribute(attributes).li;
163
+ }
164
+ }
159
165
  let request = {
160
166
  lineItem,
161
167
  mode: this.mode,
@@ -168,6 +174,12 @@ export class ConfigurationService {
168
174
  request = ConfigurationTranslatorUtils.lightenConfigurationRequest(request);
169
175
  return request;
170
176
  }
177
+ getUIDefinitionProperties() {
178
+ return {
179
+ ...getUIDefinitionProperties(this.getRuntimeContext().uiDefinitionContainer),
180
+ ...(this.runtimeService.uiDefinitionProperties ?? {}),
181
+ };
182
+ }
171
183
  showInactiveProductsConfirmation() {
172
184
  const confirmationConfig = {
173
185
  title: ' ',
@@ -205,4 +217,4 @@ ConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0",
205
217
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ConfigurationService, decorators: [{
206
218
  type: Injectable
207
219
  }], ctorParameters: function () { return [{ type: i1.QuoteDraftService }, { type: i2.ConfigurationRuntimeService }, { type: i3.ContextService }, { type: i4.ConfigurationApiService }, { type: i5.MessageService }, { type: i6.DialogService }]; } });
208
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZGsvY29yZS9tb2R1bGVzL2NvbmZpZ3VyYXRpb24vc2VydmljZXMvY29uZmlndXJhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHFCQUFxQixFQUFzQixTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RixPQUFPLEVBSUwsaUJBQWlCLEVBRWpCLDRCQUE0QixHQU83QixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBYyxTQUFTLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDL0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBYyxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMxRSxPQUFPLEVBQWtCLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNqRSxP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QUFFLEtBQUs7WUFDcEIsUUFBUSxFQUFFLEtBQUs7WUFDZixVQUFVLEVBQUUsSUFBSTtZQUNoQixNQUFNLEVBQUUsNEJBQTRCO1lBQ3BDLEtBQUssRUFBRSxPQUFPO1lBQ2QsSUFBSSxFQUFFLEVBQUUsa0JBQWtCLEVBQUU7U0FDN0IsQ0FBQzthQUNELE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDMUIsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDWCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUM5QyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2FBQ3hEO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sUUFBUTtRQUNkLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUN2QyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2IsT0FBTztTQUNSO1FBRUQsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQ3pELENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsbUJBQW1CLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsT0FBTyxDQUN4RSxDQUFDO0lBQ0osQ0FBQzs7aUhBcFBVLG9CQUFvQjtxSEFBcEIsb0JBQW9COzJGQUFwQixvQkFBb0I7a0JBRGhDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25BcGlTZXJ2aWNlIH0gZnJvbSAnQHZlbG9jZWFwcHMvYXBpJztcbmltcG9ydCB7IENvbmZpcm1hdGlvbkNvbXBvbmVudCwgQ29uZmlybWF0aW9uQ29uZmlnLCBUb2FzdFR5cGUgfSBmcm9tICdAdmVsb2NlYXBwcy9jb21wb25lbnRzJztcbmltcG9ydCB7XG4gIENoYXJnZSxcbiAgQ29tcGlsZWRQcmljZVBsYW4sXG4gIENvbmZpZ3VyYXRpb25Db250ZXh0LFxuICBDb25maWd1cmF0aW9uTW9kZSxcbiAgQ29uZmlndXJhdGlvblJlcXVlc3QsXG4gIENvbmZpZ3VyYXRpb25UcmFuc2xhdG9yVXRpbHMsXG4gIENvbmZpZ3VyZVByaWNlLFxuICBMaW5lSXRlbSxcbiAgTmV3QXR0cmlidXRlLFxuICBQYXRjaExpbmVJdGVtT3B0aW9ucyxcbiAgUnVudGltZU1vZGVsLFxuICBWbFdpbmRvdyxcbn0gZnJvbSAnQHZlbG9jZWFwcHMvY29yZSc7XG5pbXBvcnQgeyBEaWN0aW9uYXJ5LCB0cmFuc2Zvcm0gfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgc2hhcmVSZXBsYXksIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpbmFsaXplLCBmaXJzdCwgbWFwLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IFF1b3RlRHJhZnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcXVvdGUtZHJhZnQuc2VydmljZSc7XG5pbXBvcnQgeyBSdW50aW1lQ29udGV4dCwgUnVudGltZVN0ZXAgfSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBMaW5lSXRlbVdvcmtlciB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2xpbmUtaXRlbS53b3JrZXInO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdExpbmVJdGVtLCBnZXRHdWlkZWRTZWxsaW5nQ29uZmlndXJhdGlvblJlcXVlc3QgfSBmcm9tICcuLi9oZWxwZXJzJztcbmltcG9ydCB7IEV4dGVybmFsQ29uZmlndXJhdGlvblByb3BzLCBHdWlkZWRTZWxsaW5nU3VibWl0RGF0YSB9IGZyb20gJy4uL3R5cGVzL2NvbmZpZ3VyYXRpb24udHlwZXMnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvblJ1bnRpbWVTZXJ2aWNlIH0gZnJvbSAnLi9jb25maWd1cmF0aW9uLXJ1bnRpbWUuc2VydmljZSc7XG5cbmRlY2xhcmUgY29uc3Qgd2luZG93OiBWbFdpbmRvdztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENvbmZpZ3VyYXRpb25TZXJ2aWNlIHtcbiAgcHJpdmF0ZSBtb2RlID0gQ29uZmlndXJhdGlvbk1vZGUuU0VBUkNIO1xuICBwcml2YXRlIGNvbmZpZ3VyYWJsZVJhbXA6IExpbmVJdGVtIHwgdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgbGluZUl0ZW0gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PExpbmVJdGVtIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIGNoYXJnZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERpY3Rpb25hcnk8Q2hhcmdlPj4oe30pO1xuICBwcml2YXRlIHByaWNlUGxhbnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERpY3Rpb25hcnk8Q29tcGlsZWRQcmljZVBsYW4+Pih7fSk7XG5cbiAgcHVibGljIGhhc1Vuc2F2ZWRDaGFuZ2VzID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBxdW90ZURyYWZ0U2VydmljZTogUXVvdGVEcmFmdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBydW50aW1lU2VydmljZTogQ29uZmlndXJhdGlvblJ1bnRpbWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29udGV4dFNlcnZpY2U6IENvbnRleHRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlndXJhdGlvbkFwaVNlcnZpY2U6IENvbmZpZ3VyYXRpb25BcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcbiAgKSB7fVxuXG4gIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLmhhc1Vuc2F2ZWRDaGFuZ2VzID0gZmFsc2U7XG4gICAgdGhpcy5ydW50aW1lU2VydmljZS5yZXNldCgpO1xuXG4gICAgdGhpcy5jb25maWd1cmFibGVSYW1wID0gdW5kZWZpbmVkO1xuICAgIHRoaXMubGluZUl0ZW0ubmV4dCh1bmRlZmluZWQpO1xuICAgIHRoaXMuY2hhcmdlcy5uZXh0KHt9KTtcbiAgICB0aGlzLnByaWNlUGxhbnMubmV4dCh7fSk7XG4gIH1cblxuICBwdWJsaWMgcGF0Y2gkKGxpbmVJdGVtOiBMaW5lSXRlbSwgb3B0aW9ucz86IFBhdGNoTGluZUl0ZW1PcHRpb25zKTogT2JzZXJ2YWJsZTxMaW5lSXRlbT4ge1xuICAgIGlmICghdGhpcy5saW5lSXRlbS52YWx1ZSkge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKGBTb3VyY2UgTGluZUl0ZW0gbm90IGZvdW5kYCkpO1xuICAgIH1cblxuICAgIGNvbnN0IHNraXBDYXJkaW5hbGl0eUNhbGN1bGF0aW9uID1cbiAgICAgIG9wdGlvbnM/LnNraXBDYXJkaW5hbGl0eUNhbGN1bGF0aW9uIHx8IHRoaXMuY29udGV4dFNuYXBzaG90LnByb3BlcnRpZXNbJyNza2lwQ2FyZGluYWxpdHlDYWxjdWxhdGlvbiddID09PSAndHJ1ZSc7XG5cbiAgICB0aGlzLmNvbmZpZ3VyYWJsZVJhbXAgPSBuZXcgTGluZUl0ZW1Xb3JrZXIodGhpcy5saW5lSXRlbS52YWx1ZSkucmVwbGFjZShsaW5lSXRlbSwgc2tpcENhcmRpbmFsaXR5Q2FsY3VsYXRpb24pLmxpO1xuXG4gICAgcmV0dXJuIHRoaXMuY29uZmlndXJlKCkucGlwZShcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcblxuICAgICAgICBpZiAoIXRoaXMucnVudGltZVNlcnZpY2UudWlEZWZpbml0aW9uUHJvcGVydGllcy5zdXBwcmVzc1RvYXN0TWVzc2FnZXMpIHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiBlcnJvciB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGJvdW5jZSBiYWNrIGlmIGNvbmZpZ3VyYXRpb24gY2FsbCBoYXMgZmFpbGVkXG4gICAgICAgIHRoaXMubGluZUl0ZW0ubmV4dCh0aGlzLmxpbmVJdGVtLnZhbHVlID8geyAuLi50aGlzLmxpbmVJdGVtLnZhbHVlIH0gOiB1bmRlZmluZWQpO1xuXG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICAgIH0pLFxuICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmhhc1Vuc2F2ZWRDaGFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy5oYXNVbnNhdmVkQ2hhbmdlcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcGF0Y2gobGluZUl0ZW06IExpbmVJdGVtLCBvcHRpb25zPzogUGF0Y2hMaW5lSXRlbU9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLnBhdGNoJChsaW5lSXRlbSwgb3B0aW9ucykuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0Q29uZmlndXJhYmxlUmFtcChsaW5lSXRlbTogTGluZUl0ZW0pOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZ3VyYWJsZVJhbXAgPSBsaW5lSXRlbTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQoKTogT2JzZXJ2YWJsZTxMaW5lSXRlbSB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLmxpbmVJdGVtLmFzT2JzZXJ2YWJsZSgpLnBpcGUoc2hhcmVSZXBsYXkoKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U25hcHNob3QoKTogTGluZUl0ZW0gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmxpbmVJdGVtLnZhbHVlID8geyAuLi50aGlzLmxpbmVJdGVtLnZhbHVlIH0gOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0UnVudGltZU1vZGVsKCk6IFJ1bnRpbWVNb2RlbCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucnVudGltZVNlcnZpY2UucnVudGltZU1vZGVsO1xuICB9XG5cbiAgcHVibGljIGdldFJ1bnRpbWVDb250ZXh0KCk6IFJ1bnRpbWVDb250ZXh0IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5ydW50aW1lU2VydmljZS5ydW50aW1lQ29udGV4dDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29udGV4dFNuYXBzaG90KCk6IENvbmZpZ3VyYXRpb25Db250ZXh0IHtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0U2VydmljZS5yZXNvbHZlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNvbnRleHQkKCk6IE9ic2VydmFibGU8Q29uZmlndXJhdGlvbkNvbnRleHQ+IHtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0U2VydmljZS5yZXNvbHZlJCgpO1xuICB9XG5cbiAgcHVibGljIGdldCBjaGFyZ2VzJCgpOiBPYnNlcnZhYmxlPERpY3Rpb25hcnk8Q2hhcmdlPj4ge1xuICAgIHJldHVybiB0aGlzLmNoYXJnZXMuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNoYXJnZXNTbmFwc2hvdCgpOiBEaWN0aW9uYXJ5PENoYXJnZT4ge1xuICAgIHJldHVybiB0aGlzLmNoYXJnZXMudmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHByaWNlUGxhbnMkKCk6IE9ic2VydmFibGU8RGljdGlvbmFyeTxDb21waWxlZFByaWNlUGxhbj4+IHtcbiAgICByZXR1cm4gdGhpcy5wcmljZVBsYW5zLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBwcmljZVBsYW5zU25hcHNob3QoKTogRGljdGlvbmFyeTxDb21waWxlZFByaWNlUGxhbj4ge1xuICAgIHJldHVybiB0aGlzLnByaWNlUGxhbnMudmFsdWU7XG4gIH1cblxuICBwdWJsaWMgY29uZmlndXJlKCk6IE9ic2VydmFibGU8TGluZUl0ZW0+IHtcbiAgICBjb25zdCBydW50aW1lQ29udGV4dCA9IHRoaXMuZ2V0UnVudGltZUNvbnRleHQoKTtcbiAgICBjb25zdCBydW50aW1lTW9kZWwgPSB0aGlzLmdldFJ1bnRpbWVNb2RlbCgpO1xuICAgIGlmICghcnVudGltZUNvbnRleHQgfHwgIXJ1bnRpbWVNb2RlbCkge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdSdW50aW1lIGNvbnRleHQvbW9kZWwgbm90IGluaXRpYWxpemVkJykpO1xuICAgIH1cblxuICAgIGNvbnN0IHVpRGVmaW5pdGlvblByb3BlcnRpZXMgPSB7XG4gICAgICAuLi4ocnVudGltZUNvbnRleHQudWlEZWZpbml0aW9uPy5wcm9wZXJ0aWVzID8/IHt9KSxcbiAgICAgIC4uLih0aGlzLnJ1bnRpbWVTZXJ2aWNlLnVpRGVmaW5pdGlvblByb3BlcnRpZXMgPz8ge30pLFxuICAgIH07XG5cbiAgICBsZXQgbGluZUl0ZW0gPSB0aGlzLmNvbmZpZ3VyYWJsZVJhbXA7XG4gICAgaWYgKCFsaW5lSXRlbSkge1xuICAgICAgY29uc3QgeyBpbml0aWFsaXphdGlvblByb3BzIH0gPSB0aGlzLnJ1bnRpbWVTZXJ2aWNlID8/IHt9O1xuXG4gICAgICBsaW5lSXRlbSA9IGdldERlZmF1bHRMaW5lSXRlbShydW50aW1lQ29udGV4dCwgdWlEZWZpbml0aW9uUHJvcGVydGllcywgaW5pdGlhbGl6YXRpb25Qcm9wcz8uZGVmYXVsdFF0eSk7XG5cbiAgICAgIC8vIFNldCBkZWZhdWx0IGF0dHJpYnV0ZXNcbiAgICAgIGlmIChpbml0aWFsaXphdGlvblByb3BzPy5hdHRyaWJ1dGVzTWFwKSB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB0cmFuc2Zvcm0oXG4gICAgICAgICAgaW5pdGlhbGl6YXRpb25Qcm9wcz8uYXR0cmlidXRlc01hcCxcbiAgICAgICAgICAoYWNjOiBOZXdBdHRyaWJ1dGVbXSwgdmFsdWUsIG5hbWUpID0+IGFjYy5wdXNoKHsgbmFtZSwgdmFsdWUgfSksXG4gICAgICAgICAgW10sXG4gICAgICAgICk7XG5cbiAgICAgICAgbGluZUl0ZW0gPSBuZXcgTGluZUl0ZW1Xb3JrZXIobGluZUl0ZW0pLnBhdGNoQXR0cmlidXRlKGF0dHJpYnV0ZXMpLmxpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb25SZXF1ZXN0ID0gdGhpcy5jcmVhdGVSZXF1ZXN0KGxpbmVJdGVtKTtcblxuICAgIGNvbnN0IG1haW5QcmljaW5nRW5hYmxlZCA9IHJ1bnRpbWVDb250ZXh0LnByb3BlcnRpZXM/LlByaWNpbmdFbmFibGVkO1xuICAgIGNvbnN0IHByaWNpbmdFbmFibGVkID0gbWFpblByaWNpbmdFbmFibGVkID8gbWFpblByaWNpbmdFbmFibGVkID09PSAndHJ1ZScgOiB1aURlZmluaXRpb25Qcm9wZXJ0aWVzLnByaWNpbmdFbmFibGVkO1xuXG4gICAgcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbkFwaVNlcnZpY2VcbiAgICAgIC5jb25maWd1cmVMaW5lSXRlbSh7IGNvbmZpZ3VyYXRpb25SZXF1ZXN0LCBydW50aW1lTW9kZWwsIHByaWNpbmdFbmFibGVkIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCh7IGxpbmVJdGVtLCBjb250ZXh0LCBjaGFyZ2VzLCBwcmljZVBsYW5zLCBkZWxldGVkTGluZUl0ZW1zIH0pID0+IHtcbiAgICAgICAgICB0aGlzLmNvbnRleHRTZXJ2aWNlLnVwZGF0ZShjb250ZXh0ID8/IHt9KTtcbiAgICAgICAgICB0aGlzLmNoYXJnZXMubmV4dChjaGFyZ2VzID8/IHt9KTtcbiAgICAgICAgICB0aGlzLnByaWNlUGxhbnMubmV4dChwcmljZVBsYW5zID8/IHt9KTtcbiAgICAgICAgICBpZiAoZGVsZXRlZExpbmVJdGVtcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dJbmFjdGl2ZVByb2R1Y3RzQ29uZmlybWF0aW9uKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBsaW5lSXRlbTtcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKGxpbmVJdGVtID0+IGxpbmVJdGVtICYmIHRoaXMubGluZUl0ZW0ubmV4dChsaW5lSXRlbSkpLFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+XG4gICAgICAgICAgdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoZXJyb3IuZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3IubWVzc2FnZSB8fCBKU09OLnN0cmluZ2lmeShlcnJvcikpKSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gIH1cblxuICBwdWJsaWMgY29uZmlndXJlRXh0ZXJuYWwkKHByb3BzOiBFeHRlcm5hbENvbmZpZ3VyYXRpb25Qcm9wcyk6IE9ic2VydmFibGU8TGluZUl0ZW0+IHtcbiAgICByZXR1cm4gdGhpcy5ydW50aW1lU2VydmljZVxuICAgICAgLmluaXQoeyBwcm9kdWN0SWQ6IHByb3BzLnByb2R1Y3RJZCwgZGVmYXVsdFF0eTogcHJvcHMucXR5LCBhdHRyaWJ1dGVzTWFwOiBwcm9wcy5hdHRyaWJ1dGVzTWFwIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuY29uZmlndXJlKCkpLFxuICAgICAgICBmaXJzdCgpLFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiBUb2FzdFR5cGUuZXJyb3IsIHN1bW1hcnk6IGVycm9yIH0pO1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KSxcbiAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5yZXNldCgpKSxcbiAgICAgICk7XG4gIH1cblxuICBwdWJsaWMgY29uZmlndXJlR3VpZGVkU2VsbGluZyQoZGF0YTogR3VpZGVkU2VsbGluZ1N1Ym1pdERhdGEpOiBPYnNlcnZhYmxlPENvbmZpZ3VyZVByaWNlPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbkFwaVNlcnZpY2VcbiAgICAgIC5jb25maWd1cmVMaW5lSXRlbSh7XG4gICAgICAgIGNvbmZpZ3VyYXRpb25SZXF1ZXN0OiBnZXRHdWlkZWRTZWxsaW5nQ29uZmlndXJhdGlvblJlcXVlc3QoZGF0YSksXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiBUb2FzdFR5cGUuZXJyb3IsIHN1bW1hcnk6IGVycm9yLmVycm9yLm1lc3NhZ2UgfHwgZXJyb3IuZXJyb3IgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVJlcXVlc3QobGluZUl0ZW06IExpbmVJdGVtKTogQ29uZmlndXJhdGlvblJlcXVlc3Qge1xuICAgIGxldCByZXF1ZXN0OiBDb25maWd1cmF0aW9uUmVxdWVzdCA9IHtcbiAgICAgIGxpbmVJdGVtLFxuICAgICAgbW9kZTogdGhpcy5tb2RlLFxuICAgICAgc3RlcDogIXRoaXMubGluZUl0ZW0udmFsdWUgPyBSdW50aW1lU3RlcC5TVEFSVCA6IFJ1bnRpbWVTdGVwLlVQREFURSxcbiAgICAgIGF0dHJpYnV0ZURvbWFpbk1vZGU6ICdBTEwnLFxuICAgICAgY29udGV4dDogdGhpcy5jb250ZXh0U2VydmljZS5yZXNvbHZlKCksXG4gICAgICBsaW5lSXRlbXM6IHRoaXMucXVvdGVEcmFmdFNlcnZpY2UucXVvdGVEcmFmdD8uY3VycmVudFN0YXRlIHx8IFtdLFxuICAgICAgYXNzZXQ6IHRoaXMuZ2V0QXNzZXQoKSxcbiAgICB9O1xuXG4gICAgcmVxdWVzdCA9IENvbmZpZ3VyYXRpb25UcmFuc2xhdG9yVXRpbHMubGlnaHRlbkNvbmZpZ3VyYXRpb25SZXF1ZXN0KHJlcXVlc3QpO1xuXG4gICAgcmV0dXJuIHJlcXVlc3Q7XG4gIH1cblxuICBwcml2YXRlIHNob3dJbmFjdGl2ZVByb2R1Y3RzQ29uZmlybWF0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbmZpcm1hdGlvbkNvbmZpZzogQ29uZmlybWF0aW9uQ29uZmlnID0ge1xuICAgICAgdGl0bGU6ICcgJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnVGhpcyBxdW90ZSBjb250YWlucyBpbmFjdGl2ZSBwcm9kdWN0cy4gRG8geW91IHdhbnQgdG8gcmVtb3ZlIHRoZW0/JyxcbiAgICAgIHByaW1hcnlCdXR0b25MYWJlbDogJ1JlbW92ZSBwcm9kdWN0cycsXG4gICAgICBzZWNvbmRhcnlCdXR0b25MYWJlbDogJ0JhY2sgdG8gUXVvdGUnLFxuICAgIH07XG5cbiAgICB0aGlzLmRpYWxvZ1NlcnZpY2VcbiAgICAgIC5vcGVuKENvbmZpcm1hdGlvbkNvbXBvbmVudCwge1xuICAgICAgICBkaXNtaXNzYWJsZU1hc2s6IGZhbHNlLFxuICAgICAgICBjbG9zZU9uRXNjYXBlOiBmYWxzZSxcbiAgICAgICAgY2xvc2FibGU6IGZhbHNlLFxuICAgICAgICBzaG93SGVhZGVyOiB0cnVlLFxuICAgICAgICBoZWFkZXI6IGBJbmFjdGl2ZSBQcm9kdWN0cyBpbiBRdW90ZWAsXG4gICAgICAgIHdpZHRoOiAnNDQwcHgnLFxuICAgICAgICBkYXRhOiB7IGNvbmZpcm1hdGlvbkNvbmZpZyB9LFxuICAgICAgfSlcbiAgICAgIC5vbkNsb3NlLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmNvbnRleHRTZXJ2aWNlLnJlc29sdmUoKTtcbiAgICAgICAgICB3aW5kb3dbJ1ZFTE9fQkFDS19GTiddLmFwcGx5KG51bGwsIFtjb250ZXh0LmhlYWRlcklkXSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBc3NldCgpOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbGluZUl0ZW0gPSB0aGlzLmNvbmZpZ3VyYWJsZVJhbXA7XG4gICAgaWYgKCFsaW5lSXRlbSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLnF1b3RlRHJhZnQ/LmluaXRpYWxTdGF0ZS5maW5kKFxuICAgICAgYSA9PiBhLmlkID09PSBsaW5lSXRlbS5vcGVuT3JkZXJMaW5lSXRlbUlkIHx8IGEuaWQgPT09IGxpbmVJdGVtLmFzc2V0SWQsXG4gICAgKTtcbiAgfVxufVxuIl19
220
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZGsvY29yZS9tb2R1bGVzL2NvbmZpZ3VyYXRpb24vc2VydmljZXMvY29uZmlndXJhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHFCQUFxQixFQUFzQixTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RixPQUFPLEVBSUwsaUJBQWlCLEVBRWpCLDRCQUE0QixFQVE1Qix5QkFBeUIsR0FDMUIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQWMsU0FBUyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQWMsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDMUUsT0FBTyxFQUFrQixXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUNBQWlD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QyxDQUFDLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxPQUFPLENBQ3hFLENBQUM7SUFDSixDQUFDOztpSEFuUVUsb0JBQW9CO3FIQUFwQixvQkFBb0I7MkZBQXBCLG9CQUFvQjtrQkFEaEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbkFwaVNlcnZpY2UgfSBmcm9tICdAdmVsb2NlYXBwcy9hcGknO1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uQ29tcG9uZW50LCBDb25maXJtYXRpb25Db25maWcsIFRvYXN0VHlwZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL2NvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgQ2hhcmdlLFxuICBDb21waWxlZFByaWNlUGxhbixcbiAgQ29uZmlndXJhdGlvbkNvbnRleHQsXG4gIENvbmZpZ3VyYXRpb25Nb2RlLFxuICBDb25maWd1cmF0aW9uUmVxdWVzdCxcbiAgQ29uZmlndXJhdGlvblRyYW5zbGF0b3JVdGlscyxcbiAgQ29uZmlndXJlUHJpY2UsXG4gIExpbmVJdGVtLFxuICBOZXdBdHRyaWJ1dGUsXG4gIFBhdGNoTGluZUl0ZW1PcHRpb25zLFxuICBSdW50aW1lTW9kZWwsXG4gIFVJRGVmaW5pdGlvblByb3BzLFxuICBWbFdpbmRvdyxcbiAgZ2V0VUlEZWZpbml0aW9uUHJvcGVydGllcyxcbn0gZnJvbSAnQHZlbG9jZWFwcHMvY29yZSc7XG5pbXBvcnQgeyBEaWN0aW9uYXJ5LCB0cmFuc2Zvcm0gfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgc2hhcmVSZXBsYXksIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpbmFsaXplLCBmaXJzdCwgbWFwLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IFF1b3RlRHJhZnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcXVvdGUtZHJhZnQuc2VydmljZSc7XG5pbXBvcnQgeyBSdW50aW1lQ29udGV4dCwgUnVudGltZVN0ZXAgfSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBMaW5lSXRlbVdvcmtlciB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2xpbmUtaXRlbS53b3JrZXInO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdExpbmVJdGVtLCBnZXRHdWlkZWRTZWxsaW5nQ29uZmlndXJhdGlvblJlcXVlc3QgfSBmcm9tICcuLi9oZWxwZXJzJztcbmltcG9ydCB7IEV4dGVybmFsQ29uZmlndXJhdGlvblByb3BzLCBHdWlkZWRTZWxsaW5nU3VibWl0RGF0YSB9IGZyb20gJy4uL3R5cGVzL2NvbmZpZ3VyYXRpb24udHlwZXMnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvblJ1bnRpbWVTZXJ2aWNlIH0gZnJvbSAnLi9jb25maWd1cmF0aW9uLXJ1bnRpbWUuc2VydmljZSc7XG5cbmRlY2xhcmUgY29uc3Qgd2luZG93OiBWbFdpbmRvdztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENvbmZpZ3VyYXRpb25TZXJ2aWNlIHtcbiAgcHJpdmF0ZSBtb2RlID0gQ29uZmlndXJhdGlvbk1vZGUuU0VBUkNIO1xuICBwcml2YXRlIGNvbmZpZ3VyYWJsZVJhbXA6IExpbmVJdGVtIHwgdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgbGluZUl0ZW0gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PExpbmVJdGVtIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIGNoYXJnZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERpY3Rpb25hcnk8Q2hhcmdlPj4oe30pO1xuICBwcml2YXRlIHByaWNlUGxhbnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERpY3Rpb25hcnk8Q29tcGlsZWRQcmljZVBsYW4+Pih7fSk7XG5cbiAgcHVibGljIGhhc1Vuc2F2ZWRDaGFuZ2VzID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBxdW90ZURyYWZ0U2VydmljZTogUXVvdGVEcmFmdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBydW50aW1lU2VydmljZTogQ29uZmlndXJhdGlvblJ1bnRpbWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29udGV4dFNlcnZpY2U6IENvbnRleHRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlndXJhdGlvbkFwaVNlcnZpY2U6IENvbmZpZ3VyYXRpb25BcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcbiAgKSB7fVxuXG4gIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLmhhc1Vuc2F2ZWRDaGFuZ2VzID0gZmFsc2U7XG4gICAgdGhpcy5ydW50aW1lU2VydmljZS5yZXNldCgpO1xuXG4gICAgdGhpcy5jb25maWd1cmFibGVSYW1wID0gdW5kZWZpbmVkO1xuICAgIHRoaXMubGluZUl0ZW0ubmV4dCh1bmRlZmluZWQpO1xuICAgIHRoaXMuY2hhcmdlcy5uZXh0KHt9KTtcbiAgICB0aGlzLnByaWNlUGxhbnMubmV4dCh7fSk7XG4gIH1cblxuICBwdWJsaWMgcGF0Y2gkKGxpbmVJdGVtOiBMaW5lSXRlbSwgb3B0aW9ucz86IFBhdGNoTGluZUl0ZW1PcHRpb25zKTogT2JzZXJ2YWJsZTxMaW5lSXRlbT4ge1xuICAgIGlmICghdGhpcy5saW5lSXRlbS52YWx1ZSkge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKGBTb3VyY2UgTGluZUl0ZW0gbm90IGZvdW5kYCkpO1xuICAgIH1cblxuICAgIGNvbnN0IHNraXBDYXJkaW5hbGl0eUNhbGN1bGF0aW9uID1cbiAgICAgIG9wdGlvbnM/LnNraXBDYXJkaW5hbGl0eUNhbGN1bGF0aW9uIHx8IHRoaXMuY29udGV4dFNuYXBzaG90LnByb3BlcnRpZXNbJyNza2lwQ2FyZGluYWxpdHlDYWxjdWxhdGlvbiddID09PSAndHJ1ZSc7XG5cbiAgICB0aGlzLmNvbmZpZ3VyYWJsZVJhbXAgPSBuZXcgTGluZUl0ZW1Xb3JrZXIodGhpcy5saW5lSXRlbS52YWx1ZSkucmVwbGFjZShsaW5lSXRlbSwgc2tpcENhcmRpbmFsaXR5Q2FsY3VsYXRpb24pLmxpO1xuXG4gICAgcmV0dXJuIHRoaXMuY29uZmlndXJlKCkucGlwZShcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcblxuICAgICAgICBpZiAoIXRoaXMucnVudGltZVNlcnZpY2UudWlEZWZpbml0aW9uUHJvcGVydGllcy5zdXBwcmVzc1RvYXN0TWVzc2FnZXMpIHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiBlcnJvciB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGJvdW5jZSBiYWNrIGlmIGNvbmZpZ3VyYXRpb24gY2FsbCBoYXMgZmFpbGVkXG4gICAgICAgIHRoaXMubGluZUl0ZW0ubmV4dCh0aGlzLmxpbmVJdGVtLnZhbHVlID8geyAuLi50aGlzLmxpbmVJdGVtLnZhbHVlIH0gOiB1bmRlZmluZWQpO1xuXG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICAgIH0pLFxuICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmhhc1Vuc2F2ZWRDaGFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy5oYXNVbnNhdmVkQ2hhbmdlcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcGF0Y2gobGluZUl0ZW06IExpbmVJdGVtLCBvcHRpb25zPzogUGF0Y2hMaW5lSXRlbU9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLnBhdGNoJChsaW5lSXRlbSwgb3B0aW9ucykuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0Q29uZmlndXJhYmxlUmFtcChsaW5lSXRlbTogTGluZUl0ZW0pOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZ3VyYWJsZVJhbXAgPSBsaW5lSXRlbTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQoKTogT2JzZXJ2YWJsZTxMaW5lSXRlbSB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLmxpbmVJdGVtLmFzT2JzZXJ2YWJsZSgpLnBpcGUoc2hhcmVSZXBsYXkoKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U25hcHNob3QoKTogTGluZUl0ZW0gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmxpbmVJdGVtLnZhbHVlID8geyAuLi50aGlzLmxpbmVJdGVtLnZhbHVlIH0gOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0UnVudGltZU1vZGVsKCk6IFJ1bnRpbWVNb2RlbCB7XG4gICAgY29uc3QgcnVudGltZU1vZGVsID0gdGhpcy5ydW50aW1lU2VydmljZS5ydW50aW1lTW9kZWw7XG4gICAgaWYgKCFydW50aW1lTW9kZWwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUnVudGltZSBtb2RlbCBub3QgaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcnVudGltZU1vZGVsO1xuICB9XG5cbiAgcHVibGljIGdldFJ1bnRpbWVDb250ZXh0KCk6IFJ1bnRpbWVDb250ZXh0IHtcbiAgICBjb25zdCBydW50aW1lQ29udGV4dCA9IHRoaXMucnVudGltZVNlcnZpY2UucnVudGltZUNvbnRleHQ7XG4gICAgaWYgKCFydW50aW1lQ29udGV4dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSdW50aW1lIGNvbnRleHQgbm90IGluaXRpYWxpemVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ1bnRpbWVDb250ZXh0O1xuICB9XG5cbiAgcHVibGljIGdldCBjb250ZXh0U25hcHNob3QoKTogQ29uZmlndXJhdGlvbkNvbnRleHQge1xuICAgIHJldHVybiB0aGlzLmNvbnRleHRTZXJ2aWNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29udGV4dCQoKTogT2JzZXJ2YWJsZTxDb25maWd1cmF0aW9uQ29udGV4dD4ge1xuICAgIHJldHVybiB0aGlzLmNvbnRleHRTZXJ2aWNlLnJlc29sdmUkKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNoYXJnZXMkKCk6IE9ic2VydmFibGU8RGljdGlvbmFyeTxDaGFyZ2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuY2hhcmdlcy5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY2hhcmdlc1NuYXBzaG90KCk6IERpY3Rpb25hcnk8Q2hhcmdlPiB7XG4gICAgcmV0dXJuIHRoaXMuY2hhcmdlcy52YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcHJpY2VQbGFucyQoKTogT2JzZXJ2YWJsZTxEaWN0aW9uYXJ5PENvbXBpbGVkUHJpY2VQbGFuPj4ge1xuICAgIHJldHVybiB0aGlzLnByaWNlUGxhbnMuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHByaWNlUGxhbnNTbmFwc2hvdCgpOiBEaWN0aW9uYXJ5PENvbXBpbGVkUHJpY2VQbGFuPiB7XG4gICAgcmV0dXJuIHRoaXMucHJpY2VQbGFucy52YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBjb25maWd1cmUoKTogT2JzZXJ2YWJsZTxMaW5lSXRlbT4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZ3VyZVJlcXVlc3QkKHRoaXMuZ2VuZXJhdGVSZXF1ZXN0KCkpO1xuICB9XG5cbiAgcHVibGljIGNvbmZpZ3VyZVJlcXVlc3QkKGNvbmZpZ3VyYXRpb25SZXF1ZXN0OiBDb25maWd1cmF0aW9uUmVxdWVzdCk6IE9ic2VydmFibGU8TGluZUl0ZW0+IHtcbiAgICBjb25zdCBydW50aW1lQ29udGV4dCA9IHRoaXMuZ2V0UnVudGltZUNvbnRleHQoKTtcbiAgICBjb25zdCBydW50aW1lTW9kZWwgPSB0aGlzLmdldFJ1bnRpbWVNb2RlbCgpO1xuICAgIGNvbnN0IHVpRGVmaW5pdGlvblByb3BlcnRpZXMgPSB0aGlzLmdldFVJRGVmaW5pdGlvblByb3BlcnRpZXMoKTtcblxuICAgIGNvbnN0IG1haW5QcmljaW5nRW5hYmxlZCA9IHJ1bnRpbWVDb250ZXh0LnByb3BlcnRpZXM/LlByaWNpbmdFbmFibGVkO1xuICAgIGNvbnN0IHByaWNpbmdFbmFibGVkID0gbWFpblByaWNpbmdFbmFibGVkID8gbWFpblByaWNpbmdFbmFibGVkID09PSAndHJ1ZScgOiB1aURlZmluaXRpb25Qcm9wZXJ0aWVzLnByaWNpbmdFbmFibGVkO1xuXG4gICAgcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbkFwaVNlcnZpY2UuY29uZmlndXJlTGluZUl0ZW0oeyBjb25maWd1cmF0aW9uUmVxdWVzdCwgcnVudGltZU1vZGVsLCBwcmljaW5nRW5hYmxlZCB9KS5waXBlKFxuICAgICAgdGFwKCh7IGxpbmVJdGVtLCBjb250ZXh0LCBjaGFyZ2VzLCBwcmljZVBsYW5zLCBkZWxldGVkTGluZUl0ZW1zIH0pID0+IHtcbiAgICAgICAgdGhpcy5jb250ZXh0U2VydmljZS51cGRhdGUoY29udGV4dCA/PyB7fSk7XG4gICAgICAgIHRoaXMuY2hhcmdlcy5uZXh0KGNoYXJnZXMgPz8ge30pO1xuICAgICAgICB0aGlzLnByaWNlUGxhbnMubmV4dChwcmljZVBsYW5zID8/IHt9KTtcblxuICAgICAgICBpZiAobGluZUl0ZW0pIHtcbiAgICAgICAgICB0aGlzLmxpbmVJdGVtLm5leHQobGluZUl0ZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlbGV0ZWRMaW5lSXRlbXM/Lmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuc2hvd0luYWN0aXZlUHJvZHVjdHNDb25maXJtYXRpb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlndXJhYmxlUmFtcCA9IGxpbmVJdGVtO1xuICAgICAgfSksXG4gICAgICBtYXAoKHsgbGluZUl0ZW0gfSkgPT4gbGluZUl0ZW0pLFxuICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihlcnJvci5lcnJvcj8ubWVzc2FnZSB8fCBlcnJvci5tZXNzYWdlIHx8IEpTT04uc3RyaW5naWZ5KGVycm9yKSkpKSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGNvbmZpZ3VyZUV4dGVybmFsJChwcm9wczogRXh0ZXJuYWxDb25maWd1cmF0aW9uUHJvcHMpOiBPYnNlcnZhYmxlPExpbmVJdGVtPiB7XG4gICAgcmV0dXJuIHRoaXMucnVudGltZVNlcnZpY2VcbiAgICAgIC5pbml0KHsgcHJvZHVjdElkOiBwcm9wcy5wcm9kdWN0SWQsIGRlZmF1bHRRdHk6IHByb3BzLnF0eSwgYXR0cmlidXRlc01hcDogcHJvcHMuYXR0cmlidXRlc01hcCB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmNvbmZpZ3VyZSgpKSxcbiAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogVG9hc3RUeXBlLmVycm9yLCBzdW1tYXJ5OiBlcnJvciB9KTtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSksXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMucmVzZXQoKSksXG4gICAgICApO1xuICB9XG5cbiAgcHVibGljIGNvbmZpZ3VyZUd1aWRlZFNlbGxpbmckKGRhdGE6IEd1aWRlZFNlbGxpbmdTdWJtaXREYXRhKTogT2JzZXJ2YWJsZTxDb25maWd1cmVQcmljZT4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb25BcGlTZXJ2aWNlXG4gICAgICAuY29uZmlndXJlTGluZUl0ZW0oe1xuICAgICAgICBjb25maWd1cmF0aW9uUmVxdWVzdDogZ2V0R3VpZGVkU2VsbGluZ0NvbmZpZ3VyYXRpb25SZXF1ZXN0KGRhdGEpLFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogVG9hc3RUeXBlLmVycm9yLCBzdW1tYXJ5OiBlcnJvci5lcnJvci5tZXNzYWdlIHx8IGVycm9yLmVycm9yIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSksXG4gICAgICApO1xuICB9XG5cbiAgcHVibGljIGdlbmVyYXRlUmVxdWVzdCgpOiBDb25maWd1cmF0aW9uUmVxdWVzdCB7XG4gICAgY29uc3QgcnVudGltZUNvbnRleHQgPSB0aGlzLmdldFJ1bnRpbWVDb250ZXh0KCk7XG4gICAgY29uc3QgdWlEZWZpbml0aW9uUHJvcGVydGllcyA9IHRoaXMuZ2V0VUlEZWZpbml0aW9uUHJvcGVydGllcygpO1xuXG4gICAgbGV0IGxpbmVJdGVtID0gdGhpcy5jb25maWd1cmFibGVSYW1wO1xuICAgIGlmICghbGluZUl0ZW0pIHtcbiAgICAgIGNvbnN0IHsgaW5pdGlhbGl6YXRpb25Qcm9wcyB9ID0gdGhpcy5ydW50aW1lU2VydmljZSA/PyB7fTtcblxuICAgICAgbGluZUl0ZW0gPSBnZXREZWZhdWx0TGluZUl0ZW0ocnVudGltZUNvbnRleHQsIHVpRGVmaW5pdGlvblByb3BlcnRpZXMsIGluaXRpYWxpemF0aW9uUHJvcHM/LmRlZmF1bHRRdHkpO1xuXG4gICAgICAvLyBTZXQgZGVmYXVsdCBhdHRyaWJ1dGVzXG4gICAgICBpZiAoaW5pdGlhbGl6YXRpb25Qcm9wcz8uYXR0cmlidXRlc01hcCkge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gdHJhbnNmb3JtKFxuICAgICAgICAgIGluaXRpYWxpemF0aW9uUHJvcHM/LmF0dHJpYnV0ZXNNYXAsXG4gICAgICAgICAgKGFjYzogTmV3QXR0cmlidXRlW10sIHZhbHVlLCBuYW1lKSA9PiBhY2MucHVzaCh7IG5hbWUsIHZhbHVlIH0pLFxuICAgICAgICAgIFtdLFxuICAgICAgICApO1xuXG4gICAgICAgIGxpbmVJdGVtID0gbmV3IExpbmVJdGVtV29ya2VyKGxpbmVJdGVtKS5wYXRjaEF0dHJpYnV0ZShhdHRyaWJ1dGVzKS5saTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgcmVxdWVzdDogQ29uZmlndXJhdGlvblJlcXVlc3QgPSB7XG4gICAgICBsaW5lSXRlbSxcbiAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgIHN0ZXA6ICF0aGlzLmxpbmVJdGVtLnZhbHVlID8gUnVudGltZVN0ZXAuU1RBUlQgOiBSdW50aW1lU3RlcC5VUERBVEUsXG4gICAgICBhdHRyaWJ1dGVEb21haW5Nb2RlOiAnQUxMJyxcbiAgICAgIGNvbnRleHQ6IHRoaXMuY29udGV4dFNlcnZpY2UucmVzb2x2ZSgpLFxuICAgICAgbGluZUl0ZW1zOiB0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLnF1b3RlRHJhZnQ/LmN1cnJlbnRTdGF0ZSB8fCBbXSxcbiAgICAgIGFzc2V0OiB0aGlzLmdldEFzc2V0KCksXG4gICAgfTtcblxuICAgIHJlcXVlc3QgPSBDb25maWd1cmF0aW9uVHJhbnNsYXRvclV0aWxzLmxpZ2h0ZW5Db25maWd1cmF0aW9uUmVxdWVzdChyZXF1ZXN0KTtcblxuICAgIHJldHVybiByZXF1ZXN0O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRVSURlZmluaXRpb25Qcm9wZXJ0aWVzKCk6IFVJRGVmaW5pdGlvblByb3BzIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uZ2V0VUlEZWZpbml0aW9uUHJvcGVydGllcyh0aGlzLmdldFJ1bnRpbWVDb250ZXh0KCkudWlEZWZpbml0aW9uQ29udGFpbmVyKSxcbiAgICAgIC4uLih0aGlzLnJ1bnRpbWVTZXJ2aWNlLnVpRGVmaW5pdGlvblByb3BlcnRpZXMgPz8ge30pLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHNob3dJbmFjdGl2ZVByb2R1Y3RzQ29uZmlybWF0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbmZpcm1hdGlvbkNvbmZpZzogQ29uZmlybWF0aW9uQ29uZmlnID0ge1xuICAgICAgdGl0bGU6ICcgJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnVGhpcyBxdW90ZSBjb250YWlucyBpbmFjdGl2ZSBwcm9kdWN0cy4gRG8geW91IHdhbnQgdG8gcmVtb3ZlIHRoZW0/JyxcbiAgICAgIHByaW1hcnlCdXR0b25MYWJlbDogJ1JlbW92ZSBwcm9kdWN0cycsXG4gICAgICBzZWNvbmRhcnlCdXR0b25MYWJlbDogJ0JhY2sgdG8gUXVvdGUnLFxuICAgIH07XG5cbiAgICB0aGlzLmRpYWxvZ1NlcnZpY2VcbiAgICAgIC5vcGVuKENvbmZpcm1hdGlvbkNvbXBvbmVudCwge1xuICAgICAgICBkaXNtaXNzYWJsZU1hc2s6IGZhbHNlLFxuICAgICAgICBjbG9zZU9uRXNjYXBlOiBmYWxzZSxcbiAgICAgICAgY2xvc2FibGU6IGZhbHNlLFxuICAgICAgICBzaG93SGVhZGVyOiB0cnVlLFxuICAgICAgICBoZWFkZXI6IGBJbmFjdGl2ZSBQcm9kdWN0cyBpbiBRdW90ZWAsXG4gICAgICAgIHdpZHRoOiAnNDQwcHgnLFxuICAgICAgICBkYXRhOiB7IGNvbmZpcm1hdGlvbkNvbmZpZyB9LFxuICAgICAgfSlcbiAgICAgIC5vbkNsb3NlLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmNvbnRleHRTZXJ2aWNlLnJlc29sdmUoKTtcbiAgICAgICAgICB3aW5kb3dbJ1ZFTE9fQkFDS19GTiddLmFwcGx5KG51bGwsIFtjb250ZXh0LmhlYWRlcklkXSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBc3NldCgpOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbGluZUl0ZW0gPSB0aGlzLmNvbmZpZ3VyYWJsZVJhbXA7XG4gICAgaWYgKCFsaW5lSXRlbSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLnF1b3RlRHJhZnQ/LmluaXRpYWxTdGF0ZS5maW5kKFxuICAgICAgYSA9PiBhLmlkID09PSBsaW5lSXRlbS5vcGVuT3JkZXJMaW5lSXRlbUlkIHx8IGEuaWQgPT09IGxpbmVJdGVtLmFzc2V0SWQsXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,142 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { StatefulConfigurationApiService } from '@veloceapps/api';
3
+ import { ToastService, ToastType } from '@veloceapps/components';
4
+ import { EntityUtil, UUID, } from '@veloceapps/core';
5
+ import { omit } from 'lodash';
6
+ import { BehaviorSubject, map, of, switchMap, tap } from 'rxjs';
7
+ import { ConfigurationRuntimeService } from './configuration-runtime.service';
8
+ import { ConfigurationService } from './configuration.service';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "@veloceapps/api";
11
+ import * as i2 from "./configuration-runtime.service";
12
+ import * as i3 from "./configuration.service";
13
+ import * as i4 from "@veloceapps/components";
14
+ export class ConfigurationState {
15
+ constructor(statefulConfigurationApiService, runtimeService, configurationService, toastService) {
16
+ this.statefulConfigurationApiService = statefulConfigurationApiService;
17
+ this.runtimeService = runtimeService;
18
+ this.configurationService = configurationService;
19
+ this.toastService = toastService;
20
+ this.stateSubj$ = new BehaviorSubject({});
21
+ this.state$ = this.stateSubj$.asObservable();
22
+ this.stateId = null;
23
+ }
24
+ init$() {
25
+ return this.configurationService.configure().pipe(switchMap(() => {
26
+ if (!this.isStatefulConfiguration) {
27
+ return of(undefined);
28
+ }
29
+ const { actions, selectors } = this.runtimeService.runtimeContext?.uiDefinitionContainer ?? {};
30
+ return this.statefulConfigurationApiService.init({
31
+ request: this.configurationService.generateRequest(),
32
+ actions: actions?.map(action => ({ name: action.apiName, script: action.script })),
33
+ selectors: selectors?.map(selector => ({ name: selector.apiName, script: selector.script })),
34
+ });
35
+ }), tap(stateId => (this.stateId = stateId || null)), map(() => undefined));
36
+ }
37
+ cleanup() {
38
+ this.stateId = null;
39
+ this.configurationService.reset();
40
+ this.stateSubj$.next({});
41
+ }
42
+ execute$(req) {
43
+ if (this.isStatefulConfiguration) {
44
+ return this.executeStateful$(req);
45
+ }
46
+ else {
47
+ return this.executeStateless$(req);
48
+ }
49
+ }
50
+ dispatch$(actionName, inputData) {
51
+ return this.execute$({ actions: [{ name: actionName, inputData }] });
52
+ }
53
+ select$(selectorName, inputData) {
54
+ const requestId = UUID.UUID();
55
+ return this.execute$({
56
+ selectors: {
57
+ [requestId]: {
58
+ name: selectorName,
59
+ inputData,
60
+ },
61
+ },
62
+ }).pipe(map(() => this.stateSubj$.value[requestId]), tap(() => this.stateSubj$.next(omit(this.stateSubj$.value, requestId))));
63
+ }
64
+ get isStatefulConfiguration() {
65
+ return this.runtimeService.uiDefinitionProperties.statefulConfigurationEnabled ?? false;
66
+ }
67
+ executeStateless$(request) {
68
+ return of(undefined).pipe(switchMap(() => {
69
+ // Apply actions and execute configuration/price call
70
+ // No need to run configuration if no actions in the request
71
+ if (!request.actions?.length) {
72
+ return of(undefined);
73
+ }
74
+ let configurationRequest = this.configurationService.generateRequest();
75
+ request.actions.forEach(action => {
76
+ configurationRequest = this.executeActionScript(configurationRequest, action) ?? configurationRequest;
77
+ });
78
+ return this.configurationService.configureRequest$(configurationRequest);
79
+ }), tap(() => {
80
+ if (!request.selectors) {
81
+ return;
82
+ }
83
+ // Run selectors and apply them to the state
84
+ const finalConfigurationRequest = this.configurationService.generateRequest();
85
+ const selectorsResult = EntityUtil.entries(request.selectors).reduce((trunk, [key, selector]) => {
86
+ trunk[key] = this.executeSelectorScript(finalConfigurationRequest, selector);
87
+ return trunk;
88
+ }, {});
89
+ this.stateSubj$.next({
90
+ ...this.stateSubj$.value,
91
+ ...selectorsResult,
92
+ });
93
+ }), map(() => undefined));
94
+ }
95
+ executeStateful$(request) {
96
+ if (!this.stateId) {
97
+ return of(undefined);
98
+ }
99
+ return this.statefulConfigurationApiService.execute(this.stateId, request).pipe(tap(response => {
100
+ this.stateId = response.stateId;
101
+ const updatedState = this.stateSubj$.value;
102
+ EntityUtil.entries(response.selectors).forEach(([key, value]) => {
103
+ if (!value.success) {
104
+ if (!this.runtimeService.uiDefinitionProperties.suppressToastMessages) {
105
+ this.toastService.add({ summary: value.errorMessage, severity: ToastType.error });
106
+ }
107
+ return;
108
+ }
109
+ updatedState[key] = value.result;
110
+ });
111
+ this.stateSubj$.next(updatedState);
112
+ }), map(() => undefined));
113
+ }
114
+ executeActionScript(request, processor) {
115
+ const { actions } = this.runtimeService.runtimeContext?.uiDefinitionContainer ?? {};
116
+ const script = actions?.find(action => action.apiName === processor.name)?.script;
117
+ if (!script) {
118
+ return null;
119
+ }
120
+ return this.executeProcessorScript(request, script, processor.inputData);
121
+ }
122
+ executeSelectorScript(request, processor) {
123
+ const { selectors } = this.runtimeService.runtimeContext?.uiDefinitionContainer ?? {};
124
+ const script = selectors?.find(selector => selector.apiName === processor.name)?.script;
125
+ if (!script) {
126
+ return null;
127
+ }
128
+ return this.executeProcessorScript(request, script, processor.inputData);
129
+ }
130
+ executeProcessorScript(request, script, inputData) {
131
+ return new Function(`${script}\nreturn transform;`)()({
132
+ request,
133
+ inputData: inputData,
134
+ });
135
+ }
136
+ }
137
+ ConfigurationState.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ConfigurationState, deps: [{ token: i1.StatefulConfigurationApiService }, { token: i2.ConfigurationRuntimeService }, { token: i3.ConfigurationService }, { token: i4.ToastService }], target: i0.ɵɵFactoryTarget.Injectable });
138
+ ConfigurationState.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ConfigurationState });
139
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ConfigurationState, decorators: [{
140
+ type: Injectable
141
+ }], ctorParameters: function () { return [{ type: i1.StatefulConfigurationApiService }, { type: i2.ConfigurationRuntimeService }, { type: i3.ConfigurationService }, { type: i4.ToastService }]; } });
142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi5zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL2NvcmUvbW9kdWxlcy9jb25maWd1cmF0aW9uL3NlcnZpY2VzL2NvbmZpZ3VyYXRpb24uc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pFLE9BQU8sRUFLTCxVQUFVLEVBQ1YsSUFBSSxHQUNMLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM5QixPQUFPLEVBQUUsZUFBZSxFQUFjLEdBQUcsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7O0FBRy9ELE1BQU0sT0FBTyxrQkFBa0I7SUFPN0IsWUFDVSwrQkFBZ0UsRUFDaEUsY0FBMkMsRUFDM0Msb0JBQTBDLEVBQzFDLFlBQTBCO1FBSDFCLG9DQUErQixHQUEvQiwrQkFBK0IsQ0FBaUM7UUFDaEUsbUJBQWMsR0FBZCxjQUFjLENBQTZCO1FBQzNDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDMUMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFWbkIsZUFBVSxHQUFHLElBQUksZUFBZSxDQUEwQixFQUFFLENBQUMsQ0FBQztRQUV4RSxXQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUV2QyxZ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QzNFLENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxPQUE2QixFQUFFLE1BQWMsRUFBRSxTQUFrQjtRQUM5RixPQUFPLElBQUksUUFBUSxDQUFDLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQyxFQUFFLENBQUM7WUFDcEQsT0FBTztZQUNQLFNBQVMsRUFBRSxTQUFTO1NBQ3JCLENBQUMsQ0FBQztJQUNMLENBQUM7OytHQXhLVSxrQkFBa0I7bUhBQWxCLGtCQUFrQjsyRkFBbEIsa0JBQWtCO2tCQUQ5QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RhdGVmdWxDb25maWd1cmF0aW9uQXBpU2VydmljZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL2FwaSc7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UsIFRvYXN0VHlwZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL2NvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgQ29uZmlndXJhdGlvbkV4ZWN1dGVSZXF1ZXN0LFxuICBDb25maWd1cmF0aW9uUmVxdWVzdCxcbiAgQ29uZmlndXJhdGlvblJlcXVlc3RBY3Rpb24sXG4gIENvbmZpZ3VyYXRpb25SZXF1ZXN0U2VsZWN0b3IsXG4gIEVudGl0eVV0aWwsXG4gIFVVSUQsXG59IGZyb20gJ0B2ZWxvY2VhcHBzL2NvcmUnO1xuaW1wb3J0IHsgb21pdCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIG1hcCwgb2YsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uUnVudGltZVNlcnZpY2UgfSBmcm9tICcuL2NvbmZpZ3VyYXRpb24tcnVudGltZS5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29uZmlndXJhdGlvblN0YXRlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBzdGF0ZVN1YmokID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oe30pO1xuXG4gIHB1YmxpYyBzdGF0ZSQgPSB0aGlzLnN0YXRlU3ViaiQuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBzdGF0ZUlkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHN0YXRlZnVsQ29uZmlndXJhdGlvbkFwaVNlcnZpY2U6IFN0YXRlZnVsQ29uZmlndXJhdGlvbkFwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBydW50aW1lU2VydmljZTogQ29uZmlndXJhdGlvblJ1bnRpbWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlndXJhdGlvblNlcnZpY2U6IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXG4gICkge31cblxuICBwdWJsaWMgaW5pdCQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuY29uZmlndXJlKCkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5pc1N0YXRlZnVsQ29uZmlndXJhdGlvbikge1xuICAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBhY3Rpb25zLCBzZWxlY3RvcnMgfSA9IHRoaXMucnVudGltZVNlcnZpY2UucnVudGltZUNvbnRleHQ/LnVpRGVmaW5pdGlvbkNvbnRhaW5lciA/PyB7fTtcblxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZWZ1bENvbmZpZ3VyYXRpb25BcGlTZXJ2aWNlLmluaXQoe1xuICAgICAgICAgIHJlcXVlc3Q6IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuZ2VuZXJhdGVSZXF1ZXN0KCksXG4gICAgICAgICAgYWN0aW9uczogYWN0aW9ucz8ubWFwKGFjdGlvbiA9PiAoeyBuYW1lOiBhY3Rpb24uYXBpTmFtZSwgc2NyaXB0OiBhY3Rpb24uc2NyaXB0IH0pKSxcbiAgICAgICAgICBzZWxlY3RvcnM6IHNlbGVjdG9ycz8ubWFwKHNlbGVjdG9yID0+ICh7IG5hbWU6IHNlbGVjdG9yLmFwaU5hbWUsIHNjcmlwdDogc2VsZWN0b3Iuc2NyaXB0IH0pKSxcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICAgIHRhcChzdGF0ZUlkID0+ICh0aGlzLnN0YXRlSWQgPSBzdGF0ZUlkIHx8IG51bGwpKSxcbiAgICAgIG1hcCgoKSA9PiB1bmRlZmluZWQpLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgY2xlYW51cCgpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlSWQgPSBudWxsO1xuICAgIHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UucmVzZXQoKTtcbiAgICB0aGlzLnN0YXRlU3ViaiQubmV4dCh7fSk7XG4gIH1cblxuICBwdWJsaWMgZXhlY3V0ZSQocmVxOiBDb25maWd1cmF0aW9uRXhlY3V0ZVJlcXVlc3QpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5pc1N0YXRlZnVsQ29uZmlndXJhdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVN0YXRlZnVsJChyZXEpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5leGVjdXRlU3RhdGVsZXNzJChyZXEpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBkaXNwYXRjaCQoYWN0aW9uTmFtZTogc3RyaW5nLCBpbnB1dERhdGE6IHVua25vd24pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlJCh7IGFjdGlvbnM6IFt7IG5hbWU6IGFjdGlvbk5hbWUsIGlucHV0RGF0YSB9XSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3QkKHNlbGVjdG9yTmFtZTogc3RyaW5nLCBpbnB1dERhdGE6IHVua25vd24pOiBPYnNlcnZhYmxlPHVua25vd24+IHtcbiAgICBjb25zdCByZXF1ZXN0SWQgPSBVVUlELlVVSUQoKTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUkKHtcbiAgICAgIHNlbGVjdG9yczoge1xuICAgICAgICBbcmVxdWVzdElkXToge1xuICAgICAgICAgIG5hbWU6IHNlbGVjdG9yTmFtZSxcbiAgICAgICAgICBpbnB1dERhdGEsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pLnBpcGUoXG4gICAgICBtYXAoKCkgPT4gdGhpcy5zdGF0ZVN1YmokLnZhbHVlW3JlcXVlc3RJZF0pLFxuICAgICAgdGFwKCgpID0+IHRoaXMuc3RhdGVTdWJqJC5uZXh0KG9taXQodGhpcy5zdGF0ZVN1YmokLnZhbHVlLCByZXF1ZXN0SWQpKSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGlzU3RhdGVmdWxDb25maWd1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJ1bnRpbWVTZXJ2aWNlLnVpRGVmaW5pdGlvblByb3BlcnRpZXMuc3RhdGVmdWxDb25maWd1cmF0aW9uRW5hYmxlZCA/PyBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZVN0YXRlbGVzcyQocmVxdWVzdDogQ29uZmlndXJhdGlvbkV4ZWN1dGVSZXF1ZXN0KTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIG9mKHVuZGVmaW5lZCkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgIC8vIEFwcGx5IGFjdGlvbnMgYW5kIGV4ZWN1dGUgY29uZmlndXJhdGlvbi9wcmljZSBjYWxsXG4gICAgICAgIC8vIE5vIG5lZWQgdG8gcnVuIGNvbmZpZ3VyYXRpb24gaWYgbm8gYWN0aW9ucyBpbiB0aGUgcmVxdWVzdFxuICAgICAgICBpZiAoIXJlcXVlc3QuYWN0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY29uZmlndXJhdGlvblJlcXVlc3QgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLmdlbmVyYXRlUmVxdWVzdCgpO1xuICAgICAgICByZXF1ZXN0LmFjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4ge1xuICAgICAgICAgIGNvbmZpZ3VyYXRpb25SZXF1ZXN0ID0gdGhpcy5leGVjdXRlQWN0aW9uU2NyaXB0KGNvbmZpZ3VyYXRpb25SZXF1ZXN0LCBhY3Rpb24pID8/IGNvbmZpZ3VyYXRpb25SZXF1ZXN0O1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5jb25maWd1cmVSZXF1ZXN0JChjb25maWd1cmF0aW9uUmVxdWVzdCk7XG4gICAgICB9KSxcbiAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgIGlmICghcmVxdWVzdC5zZWxlY3RvcnMpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSdW4gc2VsZWN0b3JzIGFuZCBhcHBseSB0aGVtIHRvIHRoZSBzdGF0ZVxuICAgICAgICBjb25zdCBmaW5hbENvbmZpZ3VyYXRpb25SZXF1ZXN0ID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5nZW5lcmF0ZVJlcXVlc3QoKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0b3JzUmVzdWx0ID0gRW50aXR5VXRpbC5lbnRyaWVzKHJlcXVlc3Quc2VsZWN0b3JzKS5yZWR1Y2UoXG4gICAgICAgICAgKHRydW5rOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgW2tleSwgc2VsZWN0b3JdKSA9PiB7XG4gICAgICAgICAgICB0cnVua1trZXldID0gdGhpcy5leGVjdXRlU2VsZWN0b3JTY3JpcHQoZmluYWxDb25maWd1cmF0aW9uUmVxdWVzdCwgc2VsZWN0b3IpO1xuICAgICAgICAgICAgcmV0dXJuIHRydW5rO1xuICAgICAgICAgIH0sXG4gICAgICAgICAge30sXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZVN1YmokLm5leHQoe1xuICAgICAgICAgIC4uLnRoaXMuc3RhdGVTdWJqJC52YWx1ZSxcbiAgICAgICAgICAuLi5zZWxlY3RvcnNSZXN1bHQsXG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgICBtYXAoKCkgPT4gdW5kZWZpbmVkKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlU3RhdGVmdWwkKHJlcXVlc3Q6IENvbmZpZ3VyYXRpb25FeGVjdXRlUmVxdWVzdCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGlmICghdGhpcy5zdGF0ZUlkKSB7XG4gICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdGF0ZWZ1bENvbmZpZ3VyYXRpb25BcGlTZXJ2aWNlLmV4ZWN1dGUodGhpcy5zdGF0ZUlkLCByZXF1ZXN0KS5waXBlKFxuICAgICAgdGFwKHJlc3BvbnNlID0+IHtcbiAgICAgICAgdGhpcy5zdGF0ZUlkID0gcmVzcG9uc2Uuc3RhdGVJZDtcbiAgICAgICAgY29uc3QgdXBkYXRlZFN0YXRlID0gdGhpcy5zdGF0ZVN1YmokLnZhbHVlO1xuXG4gICAgICAgIEVudGl0eVV0aWwuZW50cmllcyhyZXNwb25zZS5zZWxlY3RvcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgIGlmICghdmFsdWUuc3VjY2Vzcykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJ1bnRpbWVTZXJ2aWNlLnVpRGVmaW5pdGlvblByb3BlcnRpZXMuc3VwcHJlc3NUb2FzdE1lc3NhZ2VzKSB7XG4gICAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmFkZCh7IHN1bW1hcnk6IHZhbHVlLmVycm9yTWVzc2FnZSwgc2V2ZXJpdHk6IFRvYXN0VHlwZS5lcnJvciB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHVwZGF0ZWRTdGF0ZVtrZXldID0gdmFsdWUucmVzdWx0O1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnN0YXRlU3ViaiQubmV4dCh1cGRhdGVkU3RhdGUpO1xuICAgICAgfSksXG4gICAgICBtYXAoKCkgPT4gdW5kZWZpbmVkKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlQWN0aW9uU2NyaXB0KFxuICAgIHJlcXVlc3Q6IENvbmZpZ3VyYXRpb25SZXF1ZXN0LFxuICAgIHByb2Nlc3NvcjogQ29uZmlndXJhdGlvblJlcXVlc3RBY3Rpb24sXG4gICk6IENvbmZpZ3VyYXRpb25SZXF1ZXN0IHwgbnVsbCB7XG4gICAgY29uc3QgeyBhY3Rpb25zIH0gPSB0aGlzLnJ1bnRpbWVTZXJ2aWNlLnJ1bnRpbWVDb250ZXh0Py51aURlZmluaXRpb25Db250YWluZXIgPz8ge307XG4gICAgY29uc3Qgc2NyaXB0ID0gYWN0aW9ucz8uZmluZChhY3Rpb24gPT4gYWN0aW9uLmFwaU5hbWUgPT09IHByb2Nlc3Nvci5uYW1lKT8uc2NyaXB0O1xuICAgIGlmICghc2NyaXB0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlUHJvY2Vzc29yU2NyaXB0KHJlcXVlc3QsIHNjcmlwdCwgcHJvY2Vzc29yLmlucHV0RGF0YSkgYXMgQ29uZmlndXJhdGlvblJlcXVlc3Q7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVTZWxlY3RvclNjcmlwdChyZXF1ZXN0OiBDb25maWd1cmF0aW9uUmVxdWVzdCwgcHJvY2Vzc29yOiBDb25maWd1cmF0aW9uUmVxdWVzdFNlbGVjdG9yKTogdW5rbm93biB7XG4gICAgY29uc3QgeyBzZWxlY3RvcnMgfSA9IHRoaXMucnVudGltZVNlcnZpY2UucnVudGltZUNvbnRleHQ/LnVpRGVmaW5pdGlvbkNvbnRhaW5lciA/PyB7fTtcbiAgICBjb25zdCBzY3JpcHQgPSBzZWxlY3RvcnM/LmZpbmQoc2VsZWN0b3IgPT4gc2VsZWN0b3IuYXBpTmFtZSA9PT0gcHJvY2Vzc29yLm5hbWUpPy5zY3JpcHQ7XG4gICAgaWYgKCFzY3JpcHQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVQcm9jZXNzb3JTY3JpcHQocmVxdWVzdCwgc2NyaXB0LCBwcm9jZXNzb3IuaW5wdXREYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZVByb2Nlc3NvclNjcmlwdChyZXF1ZXN0OiBDb25maWd1cmF0aW9uUmVxdWVzdCwgc2NyaXB0OiBzdHJpbmcsIGlucHV0RGF0YTogdW5rbm93bik6IHVua25vd24ge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb24oYCR7c2NyaXB0fVxcbnJldHVybiB0cmFuc2Zvcm07YCkoKSh7XG4gICAgICByZXF1ZXN0LFxuICAgICAgaW5wdXREYXRhOiBpbnB1dERhdGEsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,6 +1,6 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { ConfigurationApiService } from '@veloceapps/api';
3
- import { RuntimeModel, isLegacyUIDefinition } from '@veloceapps/core';
3
+ import { RuntimeModel, getUIDefinitionProperties, isLegacyUIDefinition, } from '@veloceapps/core';
4
4
  import { map } from 'rxjs/operators';
5
5
  import { RuntimeMode } from '../../../types';
6
6
  import * as i0 from "@angular/core";
@@ -11,29 +11,28 @@ export class RuntimeContextService {
11
11
  }
12
12
  getRuntimeContext(productId, offeringId) {
13
13
  return this.configurationApiService.getRuntimeDataByProductId(productId, offeringId).pipe(map(runtimeData => {
14
- const uiDefinition = this.getUIDefinition(runtimeData);
14
+ const uiDefinitionContainer = this.getUIDefinitionContainer(runtimeData);
15
15
  const runtimeModel = RuntimeModel.create(runtimeData.types, runtimeData.products);
16
16
  const { productName, properties } = Array.from(runtimeModel.components.values()).find(c => c.productId === productId) ?? {};
17
+ const uiDefinitionProperties = getUIDefinitionProperties(uiDefinitionContainer);
17
18
  return {
18
19
  modelId: runtimeData.modelId,
19
- uiDefinition: uiDefinition,
20
+ uiDefinitionContainer: uiDefinitionContainer,
20
21
  runtimeModel: runtimeModel,
21
22
  runtimeMode: RuntimeMode.PROD,
22
23
  productId: productId,
23
24
  productType: properties?.['displayName'] || productName,
24
25
  offeringId: offeringId,
25
26
  properties: {
26
- PricingEnabled: uiDefinition?.properties?.pricingEnabled ? 'true' : 'false',
27
- PriceListId: uiDefinition?.properties?.priceList,
27
+ PricingEnabled: uiDefinitionProperties.pricingEnabled ? 'true' : 'false',
28
+ PriceListId: uiDefinitionProperties.priceList,
28
29
  },
29
30
  };
30
31
  }));
31
32
  }
32
- getUIDefinition(runtimeData) {
33
- const uiDefinitions = runtimeData.uiDefinitions
34
- .map(({ source }) => source)
35
- .filter((uiDefinition) => !isLegacyUIDefinition(uiDefinition));
36
- return uiDefinitions.find(uiDef => uiDef.primary) ?? uiDefinitions[0];
33
+ getUIDefinitionContainer(runtimeData) {
34
+ const containers = runtimeData.uiDefinitions.filter(container => !isLegacyUIDefinition(container.source));
35
+ return containers.find(container => container.source.primary) ?? containers[0];
37
36
  }
38
37
  }
39
38
  RuntimeContextService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: RuntimeContextService, deps: [{ token: i1.ConfigurationApiService }], target: i0.ɵɵFactoryTarget.Injectable });
@@ -41,4 +40,4 @@ RuntimeContextService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0"
41
40
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: RuntimeContextService, decorators: [{
42
41
  type: Injectable
43
42
  }], ctorParameters: function () { return [{ type: i1.ConfigurationApiService }]; } });
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS1jb250ZXh0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Nkay9jb3JlL21vZHVsZXMvY29uZmlndXJhdGlvbi9zZXJ2aWNlcy9ydW50aW1lLWNvbnRleHQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFELE9BQU8sRUFBZSxZQUFZLEVBQWdCLG9CQUFvQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFakcsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBa0IsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQUc3RCxNQUFNLE9BQU8scUJBQXFCO0lBQ2hDLFlBQW9CLHVCQUFnRDtRQUFoRCw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO0lBQUcsQ0FBQztJQUVqRSxpQkFBaUIsQ0FBQyxTQUFpQixFQUFFLFVBQW1CO1FBQzdELE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDLHlCQUF5QixDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQ3ZGLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUNoQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEYsTUFBTSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsR0FDL0IsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7WUFFMUYsT0FBTztnQkFDTCxPQUFPLEVBQUUsV0FBVyxDQUFDLE9BQU87Z0JBQzVCLFlBQVksRUFBRSxZQUFZO2dCQUMxQixZQUFZLEVBQUUsWUFBWTtnQkFDMUIsV0FBVyxFQUFFLFdBQVcsQ0FBQyxJQUFJO2dCQUM3QixTQUFTLEVBQUUsU0FBUztnQkFDcEIsV0FBVyxFQUFFLFVBQVUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLFdBQVc7Z0JBQ3ZELFVBQVUsRUFBRSxVQUFVO2dCQUN0QixVQUFVLEVBQUU7b0JBQ1YsY0FBYyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU87b0JBQzNFLFdBQVcsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFNBQVM7aUJBQ2pEO2FBQ0YsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRU8sZUFBZSxDQUFDLFdBQXdCO1FBQzlDLE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQyxhQUFhO2FBQzVDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQzthQUMzQixNQUFNLENBQUMsQ0FBQyxZQUFZLEVBQWdDLEVBQUUsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFFL0YsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDOztrSEFsQ1UscUJBQXFCO3NIQUFyQixxQkFBcUI7MkZBQXJCLHFCQUFxQjtrQkFEakMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25BcGlTZXJ2aWNlIH0gZnJvbSAnQHZlbG9jZWFwcHMvYXBpJztcbmltcG9ydCB7IFJ1bnRpbWVEYXRhLCBSdW50aW1lTW9kZWwsIFVJRGVmaW5pdGlvbiwgaXNMZWdhY3lVSURlZmluaXRpb24gfSBmcm9tICdAdmVsb2NlYXBwcy9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFJ1bnRpbWVDb250ZXh0LCBSdW50aW1lTW9kZSB9IGZyb20gJy4uLy4uLy4uL3R5cGVzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFJ1bnRpbWVDb250ZXh0U2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29uZmlndXJhdGlvbkFwaVNlcnZpY2U6IENvbmZpZ3VyYXRpb25BcGlTZXJ2aWNlKSB7fVxuXG4gIHB1YmxpYyBnZXRSdW50aW1lQ29udGV4dChwcm9kdWN0SWQ6IHN0cmluZywgb2ZmZXJpbmdJZD86IHN0cmluZyk6IE9ic2VydmFibGU8UnVudGltZUNvbnRleHQ+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uQXBpU2VydmljZS5nZXRSdW50aW1lRGF0YUJ5UHJvZHVjdElkKHByb2R1Y3RJZCwgb2ZmZXJpbmdJZCkucGlwZShcbiAgICAgIG1hcChydW50aW1lRGF0YSA9PiB7XG4gICAgICAgIGNvbnN0IHVpRGVmaW5pdGlvbiA9IHRoaXMuZ2V0VUlEZWZpbml0aW9uKHJ1bnRpbWVEYXRhKTtcbiAgICAgICAgY29uc3QgcnVudGltZU1vZGVsID0gUnVudGltZU1vZGVsLmNyZWF0ZShydW50aW1lRGF0YS50eXBlcywgcnVudGltZURhdGEucHJvZHVjdHMpO1xuICAgICAgICBjb25zdCB7IHByb2R1Y3ROYW1lLCBwcm9wZXJ0aWVzIH0gPVxuICAgICAgICAgIEFycmF5LmZyb20ocnVudGltZU1vZGVsLmNvbXBvbmVudHMudmFsdWVzKCkpLmZpbmQoYyA9PiBjLnByb2R1Y3RJZCA9PT0gcHJvZHVjdElkKSA/PyB7fTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1vZGVsSWQ6IHJ1bnRpbWVEYXRhLm1vZGVsSWQsXG4gICAgICAgICAgdWlEZWZpbml0aW9uOiB1aURlZmluaXRpb24sXG4gICAgICAgICAgcnVudGltZU1vZGVsOiBydW50aW1lTW9kZWwsXG4gICAgICAgICAgcnVudGltZU1vZGU6IFJ1bnRpbWVNb2RlLlBST0QsXG4gICAgICAgICAgcHJvZHVjdElkOiBwcm9kdWN0SWQsXG4gICAgICAgICAgcHJvZHVjdFR5cGU6IHByb3BlcnRpZXM/LlsnZGlzcGxheU5hbWUnXSB8fCBwcm9kdWN0TmFtZSxcbiAgICAgICAgICBvZmZlcmluZ0lkOiBvZmZlcmluZ0lkLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIFByaWNpbmdFbmFibGVkOiB1aURlZmluaXRpb24/LnByb3BlcnRpZXM/LnByaWNpbmdFbmFibGVkID8gJ3RydWUnIDogJ2ZhbHNlJyxcbiAgICAgICAgICAgIFByaWNlTGlzdElkOiB1aURlZmluaXRpb24/LnByb3BlcnRpZXM/LnByaWNlTGlzdCxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VUlEZWZpbml0aW9uKHJ1bnRpbWVEYXRhOiBSdW50aW1lRGF0YSk6IFVJRGVmaW5pdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgdWlEZWZpbml0aW9ucyA9IHJ1bnRpbWVEYXRhLnVpRGVmaW5pdGlvbnNcbiAgICAgIC5tYXAoKHsgc291cmNlIH0pID0+IHNvdXJjZSlcbiAgICAgIC5maWx0ZXIoKHVpRGVmaW5pdGlvbik6IHVpRGVmaW5pdGlvbiBpcyBVSURlZmluaXRpb24gPT4gIWlzTGVnYWN5VUlEZWZpbml0aW9uKHVpRGVmaW5pdGlvbikpO1xuXG4gICAgcmV0dXJuIHVpRGVmaW5pdGlvbnMuZmluZCh1aURlZiA9PiB1aURlZi5wcmltYXJ5KSA/PyB1aURlZmluaXRpb25zWzBdO1xuICB9XG59XG4iXX0=
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS1jb250ZXh0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Nkay9jb3JlL21vZHVsZXMvY29uZmlndXJhdGlvbi9zZXJ2aWNlcy9ydW50aW1lLWNvbnRleHQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFELE9BQU8sRUFFTCxZQUFZLEVBRVoseUJBQXlCLEVBQ3pCLG9CQUFvQixHQUNyQixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQWtCLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFHN0QsTUFBTSxPQUFPLHFCQUFxQjtJQUNoQyxZQUFvQix1QkFBZ0Q7UUFBaEQsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtJQUFHLENBQUM7SUFFakUsaUJBQWlCLENBQUMsU0FBaUIsRUFBRSxVQUFtQjtRQUM3RCxPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyx5QkFBeUIsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUN2RixHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDaEIsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDekUsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNsRixNQUFNLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxHQUMvQixLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUUxRixNQUFNLHNCQUFzQixHQUFHLHlCQUF5QixDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFFaEYsT0FBTztnQkFDTCxPQUFPLEVBQUUsV0FBVyxDQUFDLE9BQU87Z0JBQzVCLHFCQUFxQixFQUFFLHFCQUFxQjtnQkFDNUMsWUFBWSxFQUFFLFlBQVk7Z0JBQzFCLFdBQVcsRUFBRSxXQUFXLENBQUMsSUFBSTtnQkFDN0IsU0FBUyxFQUFFLFNBQVM7Z0JBQ3BCLFdBQVcsRUFBRSxVQUFVLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxXQUFXO2dCQUN2RCxVQUFVLEVBQUUsVUFBVTtnQkFDdEIsVUFBVSxFQUFFO29CQUNWLGNBQWMsRUFBRSxzQkFBc0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTztvQkFDeEUsV0FBVyxFQUFFLHNCQUFzQixDQUFDLFNBQVM7aUJBQzlDO2FBQ3VCLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFTyx3QkFBd0IsQ0FBQyxXQUF3QjtRQUN2RCxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDMUcsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakYsQ0FBQzs7a0hBakNVLHFCQUFxQjtzSEFBckIscUJBQXFCOzJGQUFyQixxQkFBcUI7a0JBRGpDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uQXBpU2VydmljZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL2FwaSc7XG5pbXBvcnQge1xuICBSdW50aW1lRGF0YSxcbiAgUnVudGltZU1vZGVsLFxuICBVSURlZmluaXRpb25Db250YWluZXIsXG4gIGdldFVJRGVmaW5pdGlvblByb3BlcnRpZXMsXG4gIGlzTGVnYWN5VUlEZWZpbml0aW9uLFxufSBmcm9tICdAdmVsb2NlYXBwcy9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFJ1bnRpbWVDb250ZXh0LCBSdW50aW1lTW9kZSB9IGZyb20gJy4uLy4uLy4uL3R5cGVzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFJ1bnRpbWVDb250ZXh0U2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29uZmlndXJhdGlvbkFwaVNlcnZpY2U6IENvbmZpZ3VyYXRpb25BcGlTZXJ2aWNlKSB7fVxuXG4gIHB1YmxpYyBnZXRSdW50aW1lQ29udGV4dChwcm9kdWN0SWQ6IHN0cmluZywgb2ZmZXJpbmdJZD86IHN0cmluZyk6IE9ic2VydmFibGU8UnVudGltZUNvbnRleHQ+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uQXBpU2VydmljZS5nZXRSdW50aW1lRGF0YUJ5UHJvZHVjdElkKHByb2R1Y3RJZCwgb2ZmZXJpbmdJZCkucGlwZShcbiAgICAgIG1hcChydW50aW1lRGF0YSA9PiB7XG4gICAgICAgIGNvbnN0IHVpRGVmaW5pdGlvbkNvbnRhaW5lciA9IHRoaXMuZ2V0VUlEZWZpbml0aW9uQ29udGFpbmVyKHJ1bnRpbWVEYXRhKTtcbiAgICAgICAgY29uc3QgcnVudGltZU1vZGVsID0gUnVudGltZU1vZGVsLmNyZWF0ZShydW50aW1lRGF0YS50eXBlcywgcnVudGltZURhdGEucHJvZHVjdHMpO1xuICAgICAgICBjb25zdCB7IHByb2R1Y3ROYW1lLCBwcm9wZXJ0aWVzIH0gPVxuICAgICAgICAgIEFycmF5LmZyb20ocnVudGltZU1vZGVsLmNvbXBvbmVudHMudmFsdWVzKCkpLmZpbmQoYyA9PiBjLnByb2R1Y3RJZCA9PT0gcHJvZHVjdElkKSA/PyB7fTtcblxuICAgICAgICBjb25zdCB1aURlZmluaXRpb25Qcm9wZXJ0aWVzID0gZ2V0VUlEZWZpbml0aW9uUHJvcGVydGllcyh1aURlZmluaXRpb25Db250YWluZXIpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbW9kZWxJZDogcnVudGltZURhdGEubW9kZWxJZCxcbiAgICAgICAgICB1aURlZmluaXRpb25Db250YWluZXI6IHVpRGVmaW5pdGlvbkNvbnRhaW5lcixcbiAgICAgICAgICBydW50aW1lTW9kZWw6IHJ1bnRpbWVNb2RlbCxcbiAgICAgICAgICBydW50aW1lTW9kZTogUnVudGltZU1vZGUuUFJPRCxcbiAgICAgICAgICBwcm9kdWN0SWQ6IHByb2R1Y3RJZCxcbiAgICAgICAgICBwcm9kdWN0VHlwZTogcHJvcGVydGllcz8uWydkaXNwbGF5TmFtZSddIHx8IHByb2R1Y3ROYW1lLFxuICAgICAgICAgIG9mZmVyaW5nSWQ6IG9mZmVyaW5nSWQsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgUHJpY2luZ0VuYWJsZWQ6IHVpRGVmaW5pdGlvblByb3BlcnRpZXMucHJpY2luZ0VuYWJsZWQgPyAndHJ1ZScgOiAnZmFsc2UnLFxuICAgICAgICAgICAgUHJpY2VMaXN0SWQ6IHVpRGVmaW5pdGlvblByb3BlcnRpZXMucHJpY2VMaXN0LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0gc2F0aXNmaWVzIFJ1bnRpbWVDb250ZXh0O1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VUlEZWZpbml0aW9uQ29udGFpbmVyKHJ1bnRpbWVEYXRhOiBSdW50aW1lRGF0YSk6IFVJRGVmaW5pdGlvbkNvbnRhaW5lciB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgY29udGFpbmVycyA9IHJ1bnRpbWVEYXRhLnVpRGVmaW5pdGlvbnMuZmlsdGVyKGNvbnRhaW5lciA9PiAhaXNMZWdhY3lVSURlZmluaXRpb24oY29udGFpbmVyLnNvdXJjZSkpO1xuICAgIHJldHVybiBjb250YWluZXJzLmZpbmQoY29udGFpbmVyID0+IGNvbnRhaW5lci5zb3VyY2UucHJpbWFyeSkgPz8gY29udGFpbmVyc1swXTtcbiAgfVxufVxuIl19