@veloceapps/sdk 3.1.5 → 3.1.7
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/bundles/veloce-sdk-core.umd.js +41 -16
- package/bundles/veloce-sdk-core.umd.js.map +1 -1
- package/bundles/veloce-sdk-runtime.umd.js +3 -13
- package/bundles/veloce-sdk-runtime.umd.js.map +1 -1
- package/bundles/veloce-sdk.umd.js +145 -120
- package/bundles/veloce-sdk.umd.js.map +1 -1
- package/core/modules/configuration/services/configuration.service.d.ts +2 -2
- package/core/modules/flow-configuration/services/flow-configuration.service.d.ts +2 -2
- package/core/services/context.service.d.ts +4 -4
- package/core/services/quote-draft.service.d.ts +3 -0
- package/esm2015/core/modules/configuration/services/configuration-runtime.service.js +2 -5
- package/esm2015/core/modules/configuration/services/configuration.service.js +2 -2
- package/esm2015/core/modules/flow-configuration/services/flow-configuration.service.js +1 -1
- package/esm2015/core/services/context.service.js +13 -10
- package/esm2015/core/services/quote-draft.service.js +26 -5
- package/esm2015/runtime/components/ui-runtime/runtime.component.js +1 -4
- package/esm2015/runtime/execution/directives/vl-ramp.directive.js +1 -4
- package/esm2015/runtime/services/cart.service.js +1 -1
- package/esm2015/runtime/services/configuration.service.js +3 -3
- package/esm2015/runtime/services/runtime-context.service.js +2 -3
- package/esm2015/runtime/services/runtime.service.js +1 -4
- package/esm2015/src/components/header/header.component.js +36 -19
- package/esm2015/src/flow.component.js +6 -6
- package/esm2015/src/flow.module.js +2 -2
- package/esm2015/src/guards/product-unload.guard.js +7 -6
- package/esm2015/src/pages/catalog/catalog.component.js +3 -3
- package/esm2015/src/pages/legacy-product/legacy-product.component.js +1 -1
- package/esm2015/src/pages/product/product.component.js +2 -3
- package/esm2015/src/pages/shopping-cart/shopping-cart.component.js +3 -3
- package/esm2015/src/resolvers/context.resolver.js +7 -5
- package/esm2015/src/resolvers/quote.resolver.js +2 -2
- package/esm2015/src/services/flow-dialog.service.js +80 -0
- package/esm2015/src/services/flow.service.js +2 -2
- package/esm2015/src/utils/flow.utils.js +1 -11
- package/fesm2015/veloce-sdk-core.js +38 -18
- package/fesm2015/veloce-sdk-core.js.map +1 -1
- package/fesm2015/veloce-sdk-runtime.js +3 -13
- package/fesm2015/veloce-sdk-runtime.js.map +1 -1
- package/fesm2015/veloce-sdk.js +117 -92
- package/fesm2015/veloce-sdk.js.map +1 -1
- package/package.json +1 -1
- package/runtime/services/cart.service.d.ts +1 -1
- package/src/components/header/header.component.d.ts +7 -4
- package/src/flow.component.d.ts +3 -3
- package/src/guards/product-unload.guard.d.ts +4 -3
- package/src/services/{fow-dialog.service.d.ts → flow-dialog.service.d.ts} +2 -0
- package/src/utils/flow.utils.d.ts +0 -2
- package/esm2015/src/services/fow-dialog.service.js +0 -66
package/package.json
CHANGED
@@ -8,7 +8,7 @@ export declare class ShoppingCartService {
|
|
8
8
|
private contextService;
|
9
9
|
private quoteService;
|
10
10
|
constructor(priceApiService: PriceApiService, contextService: ContextService, quoteService: QuoteDraftService);
|
11
|
-
setCartExternally(currentState: LineItem): Observable<PriceSummary>;
|
11
|
+
setCartExternally(currentState: LineItem[]): Observable<PriceSummary>;
|
12
12
|
getCurrentState(): LineItem[] | undefined;
|
13
13
|
static ɵfac: i0.ɵɵFactoryDeclaration<ShoppingCartService, never>;
|
14
14
|
static ɵprov: i0.ɵɵInjectableDeclaration<ShoppingCartService>;
|
@@ -3,12 +3,12 @@ import { QuoteApiService, SalesforceApiService } from '@veloce/api';
|
|
3
3
|
import { ContextProperties } from '@veloce/core';
|
4
4
|
import { ContextService, FlowConfigurationService, QuoteDraftService } from '@veloce/sdk/core';
|
5
5
|
import { BehaviorSubject, Observable } from 'rxjs';
|
6
|
+
import { FlowDialogService } from '../../services/flow-dialog.service';
|
6
7
|
import { FlowRouterService } from '../../services/flow-router.service';
|
7
|
-
import { FlowDialogService } from '../../services/fow-dialog.service';
|
8
8
|
import { HeaderObjectDetails, HeaderProduct } from './header.types';
|
9
9
|
import * as i0 from "@angular/core";
|
10
10
|
export declare class FlowHeaderComponent implements OnInit, OnDestroy {
|
11
|
-
private
|
11
|
+
private contextService;
|
12
12
|
private quoteDraftService;
|
13
13
|
private quoteApiService;
|
14
14
|
private sfApiService;
|
@@ -18,16 +18,18 @@ export declare class FlowHeaderComponent implements OnInit, OnDestroy {
|
|
18
18
|
readonly disabledActionButtonTooltip = "Available from the Shopping Cart";
|
19
19
|
objectName: string;
|
20
20
|
contextProperties: ContextProperties;
|
21
|
+
status$: Observable<string>;
|
21
22
|
objectDetails$: BehaviorSubject<HeaderObjectDetails>;
|
22
23
|
products$: Observable<HeaderProduct[]>;
|
23
24
|
isConfigurationRoute$: Observable<boolean>;
|
24
25
|
isCartRoute$: Observable<boolean>;
|
25
26
|
isCatalogRoute$: Observable<boolean>;
|
27
|
+
isEditMode$: Observable<boolean>;
|
26
28
|
isSaveInProgress$: BehaviorSubject<boolean>;
|
29
|
+
isSubmitInProgress$: BehaviorSubject<boolean>;
|
27
30
|
private mode?;
|
28
|
-
private isEditMode;
|
29
31
|
private destroyed$;
|
30
|
-
constructor(
|
32
|
+
constructor(contextService: ContextService, quoteDraftService: QuoteDraftService, quoteApiService: QuoteApiService, sfApiService: SalesforceApiService, flowConfiguration: FlowConfigurationService, routerService: FlowRouterService, dialogService: FlowDialogService);
|
31
33
|
ngOnInit(): void;
|
32
34
|
ngOnDestroy(): void;
|
33
35
|
get isAccountMode(): boolean;
|
@@ -37,6 +39,7 @@ export declare class FlowHeaderComponent implements OnInit, OnDestroy {
|
|
37
39
|
navigateToShoppingCart(): void;
|
38
40
|
navigateToCatalog(): void;
|
39
41
|
saveButtonClickHandler(): void;
|
42
|
+
submitButtonClickHandler(): void;
|
40
43
|
private queryName$;
|
41
44
|
private populateObjectDetails;
|
42
45
|
private generateProducts;
|
package/src/flow.component.d.ts
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
import { OnDestroy } from '@angular/core';
|
2
|
-
import {
|
2
|
+
import { QuoteDraftService } from '@veloce/sdk/core';
|
3
3
|
import { Observable } from 'rxjs';
|
4
4
|
import { FlowService } from './services';
|
5
5
|
import { FlowRouterService } from './services/flow-router.service';
|
6
6
|
import * as i0 from "@angular/core";
|
7
7
|
export declare class FlowComponent implements OnDestroy {
|
8
8
|
private routerService;
|
9
|
-
private
|
9
|
+
private quoteDraftService;
|
10
10
|
private flowService;
|
11
11
|
isLoading$: Observable<boolean>;
|
12
12
|
showHeader$: Observable<boolean>;
|
13
|
-
constructor(routerService: FlowRouterService,
|
13
|
+
constructor(routerService: FlowRouterService, quoteDraftService: QuoteDraftService, flowService: FlowService);
|
14
14
|
ngOnDestroy(): void;
|
15
15
|
static ɵfac: i0.ɵɵFactoryDeclaration<FlowComponent, never>;
|
16
16
|
static ɵcmp: i0.ɵɵComponentDeclaration<FlowComponent, "vl-flow", never, {}, {}, never, never>;
|
@@ -1,12 +1,13 @@
|
|
1
1
|
import { CanDeactivate } from '@angular/router';
|
2
|
-
import { ConfigurationService, ContextService } from '@veloce/sdk/core';
|
3
|
-
import { FlowDialogService } from '../services/
|
2
|
+
import { ConfigurationService, ContextService, QuoteDraftService } from '@veloce/sdk/core';
|
3
|
+
import { FlowDialogService } from '../services/flow-dialog.service';
|
4
4
|
import * as i0 from "@angular/core";
|
5
5
|
export declare class ProductUnloadGuard implements CanDeactivate<any> {
|
6
6
|
private contextService;
|
7
|
+
private quoteDraftService;
|
7
8
|
private configurationService;
|
8
9
|
private flowDialogService;
|
9
|
-
constructor(contextService: ContextService, configurationService: ConfigurationService, flowDialogService: FlowDialogService);
|
10
|
+
constructor(contextService: ContextService, quoteDraftService: QuoteDraftService, configurationService: ConfigurationService, flowDialogService: FlowDialogService);
|
10
11
|
canDeactivate(): import("rxjs").Observable<boolean>;
|
11
12
|
static ɵfac: i0.ɵɵFactoryDeclaration<ProductUnloadGuard, never>;
|
12
13
|
static ɵprov: i0.ɵɵInjectableDeclaration<ProductUnloadGuard>;
|
@@ -13,6 +13,8 @@ export declare class FlowDialogService {
|
|
13
13
|
showQuoteReadonlyModeDialog(): Observable<boolean>;
|
14
14
|
showAccountNoChangesDialog(): Observable<boolean>;
|
15
15
|
showUnsavedChangesDialog(): Observable<boolean>;
|
16
|
+
showReadonlyQuoteSubmitFailureDialog(): Observable<boolean>;
|
17
|
+
showAccountSubmitFailureDialog(): Observable<boolean>;
|
16
18
|
static ɵfac: i0.ɵɵFactoryDeclaration<FlowDialogService, never>;
|
17
19
|
static ɵprov: i0.ɵɵInjectableDeclaration<FlowDialogService>;
|
18
20
|
}
|
@@ -1,66 +0,0 @@
|
|
1
|
-
import { Injectable } from '@angular/core';
|
2
|
-
import { FlowDialogComponent } from '../components/dialog/dialog.component';
|
3
|
-
import * as i0 from "@angular/core";
|
4
|
-
import * as i1 from "primeng/dynamicdialog";
|
5
|
-
import * as i2 from "@veloce/sdk/core";
|
6
|
-
export class FlowDialogService {
|
7
|
-
constructor(dialogService, contextService) {
|
8
|
-
this.dialogService = dialogService;
|
9
|
-
this.contextService = contextService;
|
10
|
-
}
|
11
|
-
show(config) {
|
12
|
-
return this.dialogService.open(FlowDialogComponent, {
|
13
|
-
dismissableMask: true,
|
14
|
-
closeOnEscape: true,
|
15
|
-
closable: true,
|
16
|
-
showHeader: true,
|
17
|
-
header: config.title,
|
18
|
-
width: '440px',
|
19
|
-
data: { config },
|
20
|
-
}).onClose;
|
21
|
-
}
|
22
|
-
showEmptyCartDialog() {
|
23
|
-
return this.show({
|
24
|
-
title: 'No Products in Quote',
|
25
|
-
description: 'There are no products in your Quote. To save a Quote, add at least one product.',
|
26
|
-
primaryButton: 'OK',
|
27
|
-
});
|
28
|
-
}
|
29
|
-
showReadonlyModeDialog() {
|
30
|
-
const ctx = this.contextService.resolve();
|
31
|
-
const objectName = (ctx === null || ctx === void 0 ? void 0 : ctx.mode) ? ctx.mode[0].toUpperCase() + ctx.mode.substring(1).toLowerCase() : 'Object';
|
32
|
-
return this.show({
|
33
|
-
title: 'Error',
|
34
|
-
description: `${objectName} Cannot be Saved`,
|
35
|
-
primaryButton: 'OK',
|
36
|
-
});
|
37
|
-
}
|
38
|
-
showQuoteReadonlyModeDialog() {
|
39
|
-
return this.show({
|
40
|
-
title: 'Quote Cannot be Saved',
|
41
|
-
description: 'It is only possible to save quotes with the “Draft” status. Please create a new quote to make and save changes.',
|
42
|
-
primaryButton: 'OK',
|
43
|
-
});
|
44
|
-
}
|
45
|
-
showAccountNoChangesDialog() {
|
46
|
-
return this.show({
|
47
|
-
title: 'No Changes to Save',
|
48
|
-
description: 'There are no changes since the last update. Please make changes to proceed.',
|
49
|
-
primaryButton: 'OK',
|
50
|
-
});
|
51
|
-
}
|
52
|
-
showUnsavedChangesDialog() {
|
53
|
-
return this.show({
|
54
|
-
title: 'Unsaved Changes',
|
55
|
-
description: 'Are you sure you want to leave this page and discard your unsaved changes?',
|
56
|
-
primaryButton: 'Keep Editing',
|
57
|
-
secondaryButton: 'Discard Changes',
|
58
|
-
});
|
59
|
-
}
|
60
|
-
}
|
61
|
-
FlowDialogService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowDialogService, deps: [{ token: i1.DialogService }, { token: i2.ContextService }], target: i0.ɵɵFactoryTarget.Injectable });
|
62
|
-
FlowDialogService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowDialogService });
|
63
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: FlowDialogService, decorators: [{
|
64
|
-
type: Injectable
|
65
|
-
}], ctorParameters: function () { return [{ type: i1.DialogService }, { type: i2.ContextService }]; } });
|
66
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm93LWRpYWxvZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZGsvc3JjL3NlcnZpY2VzL2Zvdy1kaWFsb2cuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSTNDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOzs7O0FBSTVFLE1BQU0sT0FBTyxpQkFBaUI7SUFDNUIsWUFBb0IsYUFBNEIsRUFBVSxjQUE4QjtRQUFwRSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtJQUFHLENBQUM7SUFFckYsSUFBSSxDQUFDLE1BQXdCO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDbEQsZUFBZSxFQUFFLElBQUk7WUFDckIsYUFBYSxFQUFFLElBQUk7WUFDbkIsUUFBUSxFQUFFLElBQUk7WUFDZCxVQUFVLEVBQUUsSUFBSTtZQUNoQixNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUs7WUFDcEIsS0FBSyxFQUFFLE9BQU87WUFDZCxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUU7U0FDakIsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUNiLENBQUM7SUFFTSxtQkFBbUI7UUFDeEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ2YsS0FBSyxFQUFFLHNCQUFzQjtZQUM3QixXQUFXLEVBQUUsaUZBQWlGO1lBQzlGLGFBQWEsRUFBRSxJQUFJO1NBQ3BCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxzQkFBc0I7UUFDM0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMxQyxNQUFNLFVBQVUsR0FBRyxDQUFBLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUUxRyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDZixLQUFLLEVBQUUsT0FBTztZQUNkLFdBQVcsRUFBRSxHQUFHLFVBQVUsa0JBQWtCO1lBQzVDLGFBQWEsRUFBRSxJQUFJO1NBQ3BCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSwyQkFBMkI7UUFDaEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ2YsS0FBSyxFQUFFLHVCQUF1QjtZQUM5QixXQUFXLEVBQ1QsaUhBQWlIO1lBQ25ILGFBQWEsRUFBRSxJQUFJO1NBQ3BCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSwwQkFBMEI7UUFDL0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ2YsS0FBSyxFQUFFLG9CQUFvQjtZQUMzQixXQUFXLEVBQUUsNkVBQTZFO1lBQzFGLGFBQWEsRUFBRSxJQUFJO1NBQ3BCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSx3QkFBd0I7UUFDN0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ2YsS0FBSyxFQUFFLGlCQUFpQjtZQUN4QixXQUFXLEVBQUUsNEVBQTRFO1lBQ3pGLGFBQWEsRUFBRSxjQUFjO1lBQzdCLGVBQWUsRUFBRSxpQkFBaUI7U0FDbkMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7K0dBMURVLGlCQUFpQjttSEFBakIsaUJBQWlCOzRGQUFqQixpQkFBaUI7a0JBRDdCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250ZXh0U2VydmljZSB9IGZyb20gJ0B2ZWxvY2Uvc2RrL2NvcmUnO1xuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGbG93RGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9kaWFsb2cvZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGbG93RGlhbG9nQ29uZmlnIH0gZnJvbSAnLi4vY29tcG9uZW50cy9kaWFsb2cvZGlhbG9nLnR5cGVzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEZsb3dEaWFsb2dTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLCBwcml2YXRlIGNvbnRleHRTZXJ2aWNlOiBDb250ZXh0U2VydmljZSkge31cblxuICBwdWJsaWMgc2hvdyhjb25maWc6IEZsb3dEaWFsb2dDb25maWcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oRmxvd0RpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgZGlzbWlzc2FibGVNYXNrOiB0cnVlLFxuICAgICAgY2xvc2VPbkVzY2FwZTogdHJ1ZSxcbiAgICAgIGNsb3NhYmxlOiB0cnVlLFxuICAgICAgc2hvd0hlYWRlcjogdHJ1ZSxcbiAgICAgIGhlYWRlcjogY29uZmlnLnRpdGxlLFxuICAgICAgd2lkdGg6ICc0NDBweCcsXG4gICAgICBkYXRhOiB7IGNvbmZpZyB9LFxuICAgIH0pLm9uQ2xvc2U7XG4gIH1cblxuICBwdWJsaWMgc2hvd0VtcHR5Q2FydERpYWxvZygpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5zaG93KHtcbiAgICAgIHRpdGxlOiAnTm8gUHJvZHVjdHMgaW4gUXVvdGUnLFxuICAgICAgZGVzY3JpcHRpb246ICdUaGVyZSBhcmUgbm8gcHJvZHVjdHMgaW4geW91ciBRdW90ZS4gVG8gc2F2ZSBhIFF1b3RlLCBhZGQgYXQgbGVhc3Qgb25lIHByb2R1Y3QuJyxcbiAgICAgIHByaW1hcnlCdXR0b246ICdPSycsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2hvd1JlYWRvbmx5TW9kZURpYWxvZygpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBjdHggPSB0aGlzLmNvbnRleHRTZXJ2aWNlLnJlc29sdmUoKTtcbiAgICBjb25zdCBvYmplY3ROYW1lID0gY3R4Py5tb2RlID8gY3R4Lm1vZGVbMF0udG9VcHBlckNhc2UoKSArIGN0eC5tb2RlLnN1YnN0cmluZygxKS50b0xvd2VyQ2FzZSgpIDogJ09iamVjdCc7XG5cbiAgICByZXR1cm4gdGhpcy5zaG93KHtcbiAgICAgIHRpdGxlOiAnRXJyb3InLFxuICAgICAgZGVzY3JpcHRpb246IGAke29iamVjdE5hbWV9IENhbm5vdCBiZSBTYXZlZGAsXG4gICAgICBwcmltYXJ5QnV0dG9uOiAnT0snLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNob3dRdW90ZVJlYWRvbmx5TW9kZURpYWxvZygpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5zaG93KHtcbiAgICAgIHRpdGxlOiAnUXVvdGUgQ2Fubm90IGJlIFNhdmVkJyxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnSXQgaXMgb25seSBwb3NzaWJsZSB0byBzYXZlIHF1b3RlcyB3aXRoIHRoZSDigJxEcmFmdOKAnSBzdGF0dXMuIFBsZWFzZSBjcmVhdGUgYSBuZXcgcXVvdGUgdG8gbWFrZSBhbmQgc2F2ZSBjaGFuZ2VzLicsXG4gICAgICBwcmltYXJ5QnV0dG9uOiAnT0snLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNob3dBY2NvdW50Tm9DaGFuZ2VzRGlhbG9nKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnNob3coe1xuICAgICAgdGl0bGU6ICdObyBDaGFuZ2VzIHRvIFNhdmUnLFxuICAgICAgZGVzY3JpcHRpb246ICdUaGVyZSBhcmUgbm8gY2hhbmdlcyBzaW5jZSB0aGUgbGFzdCB1cGRhdGUuIFBsZWFzZSBtYWtlIGNoYW5nZXMgdG8gcHJvY2VlZC4nLFxuICAgICAgcHJpbWFyeUJ1dHRvbjogJ09LJyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzaG93VW5zYXZlZENoYW5nZXNEaWFsb2coKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuc2hvdyh7XG4gICAgICB0aXRsZTogJ1Vuc2F2ZWQgQ2hhbmdlcycsXG4gICAgICBkZXNjcmlwdGlvbjogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBsZWF2ZSB0aGlzIHBhZ2UgYW5kIGRpc2NhcmQgeW91ciB1bnNhdmVkIGNoYW5nZXM/JyxcbiAgICAgIHByaW1hcnlCdXR0b246ICdLZWVwIEVkaXRpbmcnLFxuICAgICAgc2Vjb25kYXJ5QnV0dG9uOiAnRGlzY2FyZCBDaGFuZ2VzJyxcbiAgICB9KTtcbiAgfVxufVxuIl19
|