UNPKG

@spartacus/checkout

Version:

Checkout feature library for Spartacus

141 lines 20.4 kB
import { Injectable } from '@angular/core'; import { BehaviorSubject } from 'rxjs'; import { map, switchMap } from 'rxjs/operators'; import * as i0 from "@angular/core"; import * as i1 from "@spartacus/core"; import * as i2 from "@spartacus/checkout/root"; export class CheckoutStepService { constructor(routingService, checkoutConfig, routingConfigService) { this.routingService = routingService; this.checkoutConfig = checkoutConfig; this.routingConfigService = routingConfigService; this.steps$ = new BehaviorSubject([]); this.activeStepIndex$ = this.routingService .getRouterState() .pipe(switchMap((router) => { const activeStepUrl = router.state.context.id; return this.steps$.pipe(map((steps) => { let activeIndex = 0; steps.forEach((step, index) => { var _a; const routeUrl = `/${(_a = this.routingConfigService.getRouteConfig(step.routeName) .paths) === null || _a === void 0 ? void 0 : _a[0]}`; if (routeUrl === activeStepUrl) { activeIndex = index; } }); return activeIndex; })); })); this.resetSteps(); } back(activatedRoute) { const previousUrl = this.getPreviousCheckoutStepUrl(activatedRoute); this.routingService.go(previousUrl === null ? 'cart' : previousUrl); } next(activatedRoute) { const nextUrl = this.getNextCheckoutStepUrl(activatedRoute); this.routingService.go(nextUrl); } goToStepWithIndex(stepIndex) { this.routingService.go(this.getStepUrlFromStepRoute(this.allSteps[stepIndex].routeName)); } getBackBntText(activatedRoute) { if (this.getPreviousCheckoutStepUrl(activatedRoute) === null) { return 'checkout.backToCart'; } return 'common.back'; } resetSteps() { var _a, _b; this.allSteps = ((_b = (_a = this.checkoutConfig.checkout) === null || _a === void 0 ? void 0 : _a.steps) !== null && _b !== void 0 ? _b : []) .filter((step) => !step.disabled) .map((x) => Object.assign({}, x)); this.steps$.next(this.allSteps); } disableEnableStep(currentStepType, disabled) { const currentStep = this.allSteps.find((step) => step.type.includes(currentStepType)); if (currentStep && currentStep.disabled !== disabled) { currentStep.disabled = disabled; this.steps$.next(this.allSteps.filter((step) => !step.disabled)); } } getCheckoutStep(currentStepType) { const index = this.getCheckoutStepIndex('type', currentStepType); if (index !== null) { return this.allSteps[index]; } } getCheckoutStepRoute(currentStepType) { var _a; return (_a = this.getCheckoutStep(currentStepType)) === null || _a === void 0 ? void 0 : _a.routeName; } getFirstCheckoutStepRoute() { return this.allSteps[0].routeName; } getNextCheckoutStepUrl(activatedRoute) { const stepIndex = this.getCurrentStepIndex(activatedRoute); if (stepIndex !== null && stepIndex >= 0) { let i = 1; while (this.allSteps[stepIndex + i] && this.allSteps[stepIndex + i].disabled) { i++; } const nextStep = this.allSteps[stepIndex + i]; if (nextStep) { return this.getStepUrlFromStepRoute(nextStep.routeName); } } return null; } getPreviousCheckoutStepUrl(activatedRoute) { const stepIndex = this.getCurrentStepIndex(activatedRoute); if (stepIndex !== null && stepIndex >= 0) { let i = 1; while (this.allSteps[stepIndex - i] && this.allSteps[stepIndex - i].disabled) { i++; } const previousStep = this.allSteps[stepIndex - i]; if (previousStep) { return this.getStepUrlFromStepRoute(previousStep.routeName); } } return null; } getCurrentStepIndex(activatedRoute) { const currentStepUrl = this.getStepUrlFromActivatedRoute(activatedRoute); const stepIndex = this.allSteps.findIndex((step) => currentStepUrl === `/${this.getStepUrlFromStepRoute(step.routeName)}`); return stepIndex === -1 ? null : stepIndex; } getStepUrlFromActivatedRoute(activatedRoute) { return activatedRoute && activatedRoute.snapshot && activatedRoute.snapshot.url ? `/${activatedRoute.snapshot.url.join('/')}` : null; } getStepUrlFromStepRoute(stepRoute) { var _a, _b; return ((_b = (_a = this.routingConfigService.getRouteConfig(stepRoute).paths) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : null); } getCheckoutStepIndex(key, value) { return key && value ? this.allSteps.findIndex((step) => { const propertyVal = step[key]; return propertyVal instanceof Array ? propertyVal.includes(value) : propertyVal === value; }) : null; } } CheckoutStepService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CheckoutStepService, deps: [{ token: i1.RoutingService }, { token: i2.CheckoutConfig }, { token: i1.RoutingConfigService }], target: i0.ɵɵFactoryTarget.Injectable }); CheckoutStepService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CheckoutStepService, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CheckoutStepService, decorators: [{ type: Injectable, args: [{ providedIn: 'root', }] }], ctorParameters: function () { return [{ type: i1.RoutingService }, { type: i2.CheckoutConfig }, { type: i1.RoutingConfigService }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tvdXQtc3RlcC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vZmVhdHVyZS1saWJzL2NoZWNrb3V0L2NvbXBvbmVudHMvc2VydmljZXMvY2hlY2tvdXQtc3RlcC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFRM0MsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUNuRCxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBS2hELE1BQU0sT0FBTyxtQkFBbUI7SUErQjlCLFlBQ1ksY0FBOEIsRUFDOUIsY0FBOEIsRUFDOUIsb0JBQTBDO1FBRjFDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQTlCN0MsV0FBTSxHQUFvQyxJQUFJLGVBQWUsQ0FFcEUsRUFBRSxDQUFDLENBQUM7UUFFRyxxQkFBZ0IsR0FBdUIsSUFBSSxDQUFDLGNBQWM7YUFDaEUsY0FBYyxFQUFFO2FBQ2hCLElBQUksQ0FDSCxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNuQixNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDOUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDckIsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ1osSUFBSSxXQUFXLEdBQVcsQ0FBQyxDQUFDO2dCQUM1QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFOztvQkFDNUIsTUFBTSxRQUFRLEdBQUcsSUFDZixNQUFBLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENB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LENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxHQUFXLEVBQUUsS0FBVTtRQUNsRCxPQUFPLEdBQUcsSUFBSSxLQUFLO1lBQ2pCLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQWtCLEVBQUUsRUFBRTtnQkFDN0MsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQXlCLENBQUMsQ0FBQztnQkFDcEQsT0FBTyxXQUFXLFlBQVksS0FBSztvQkFDakMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO29CQUM3QixDQUFDLENBQUMsV0FBVyxLQUFLLEtBQUssQ0FBQztZQUM1QixDQUFDLENBQUM7WUFDSixDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ1gsQ0FBQzs7Z0hBMUtVLG1CQUFtQjtvSEFBbkIsbUJBQW1CLGNBRmxCLE1BQU07MkZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIENoZWNrb3V0Q29uZmlnLFxuICBDaGVja291dFN0ZXAsXG4gIENoZWNrb3V0U3RlcFR5cGUsXG59IGZyb20gJ0BzcGFydGFjdXMvY2hlY2tvdXQvcm9vdCc7XG5pbXBvcnQgeyBSb3V0aW5nQ29uZmlnU2VydmljZSwgUm91dGluZ1NlcnZpY2UgfSBmcm9tICdAc3BhcnRhY3VzL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIENoZWNrb3V0U3RlcFNlcnZpY2Uge1xuICAvLyBpbml0aWFsIGVuYWJsZWQgc3RlcHNcbiAgYWxsU3RlcHM6IENoZWNrb3V0U3RlcFtdO1xuXG4gIHJlYWRvbmx5IHN0ZXBzJDogQmVoYXZpb3JTdWJqZWN0PENoZWNrb3V0U3RlcFtdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgQ2hlY2tvdXRTdGVwW11cbiAgPihbXSk7XG5cbiAgcmVhZG9ubHkgYWN0aXZlU3RlcEluZGV4JDogT2JzZXJ2YWJsZTxudW1iZXI+ID0gdGhpcy5yb3V0aW5nU2VydmljZVxuICAgIC5nZXRSb3V0ZXJTdGF0ZSgpXG4gICAgLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHJvdXRlcikgPT4ge1xuICAgICAgICBjb25zdCBhY3RpdmVTdGVwVXJsID0gcm91dGVyLnN0YXRlLmNvbnRleHQuaWQ7XG4gICAgICAgIHJldHVybiB0aGlzLnN0ZXBzJC5waXBlKFxuICAgICAgICAgIG1hcCgoc3RlcHMpID0+IHtcbiAgICAgICAgICAgIGxldCBhY3RpdmVJbmRleDogbnVtYmVyID0gMDtcbiAgICAgICAgICAgIHN0ZXBzLmZvckVhY2goKHN0ZXAsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHJvdXRlVXJsID0gYC8ke1xuICAgICAgICAgICAgICAgIHRoaXMucm91dGluZ0NvbmZpZ1NlcnZpY2UuZ2V0Um91dGVDb25maWcoc3RlcC5yb3V0ZU5hbWUpXG4gICAgICAgICAgICAgICAgICAucGF0aHM/LlswXVxuICAgICAgICAgICAgICB9YDtcbiAgICAgICAgICAgICAgaWYgKHJvdXRlVXJsID09PSBhY3RpdmVTdGVwVXJsKSB7XG4gICAgICAgICAgICAgICAgYWN0aXZlSW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gYWN0aXZlSW5kZXg7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcm91dGluZ1NlcnZpY2U6IFJvdXRpbmdTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBjaGVja291dENvbmZpZzogQ2hlY2tvdXRDb25maWcsXG4gICAgcHJvdGVjdGVkIHJvdXRpbmdDb25maWdTZXJ2aWNlOiBSb3V0aW5nQ29uZmlnU2VydmljZVxuICApIHtcbiAgICB0aGlzLnJlc2V0U3RlcHMoKTtcbiAgfVxuXG4gIGJhY2soYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlKTogdm9pZCB7XG4gICAgY29uc3QgcHJldmlvdXNVcmwgPSB0aGlzLmdldFByZXZpb3VzQ2hlY2tvdXRTdGVwVXJsKGFjdGl2YXRlZFJvdXRlKTtcbiAgICB0aGlzLnJvdXRpbmdTZXJ2aWNlLmdvKHByZXZpb3VzVXJsID09PSBudWxsID8gJ2NhcnQnIDogcHJldmlvdXNVcmwpO1xuICB9XG5cbiAgbmV4dChhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUpOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0VXJsID0gdGhpcy5nZXROZXh0Q2hlY2tvdXRTdGVwVXJsKGFjdGl2YXRlZFJvdXRlKTtcbiAgICB0aGlzLnJvdXRpbmdTZXJ2aWNlLmdvKG5leHRVcmwpO1xuICB9XG5cbiAgZ29Ub1N0ZXBXaXRoSW5kZXgoc3RlcEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnJvdXRpbmdTZXJ2aWNlLmdvKFxuICAgICAgdGhpcy5nZXRTdGVwVXJsRnJvbVN0ZXBSb3V0ZSh0aGlzLmFsbFN0ZXBzW3N0ZXBJbmRleF0ucm91dGVOYW1lKVxuICAgICk7XG4gIH1cblxuICBnZXRCYWNrQm50VGV4dChhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmdldFByZXZpb3VzQ2hlY2tvdXRTdGVwVXJsKGFjdGl2YXRlZFJvdXRlKSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuICdjaGVja291dC5iYWNrVG9DYXJ0JztcbiAgICB9XG4gICAgcmV0dXJuICdjb21tb24uYmFjayc7XG4gIH1cblxuICByZXNldFN0ZXBzKCk6IHZvaWQge1xuICAgIHRoaXMuYWxsU3RlcHMgPSAodGhpcy5jaGVja291dENvbmZpZy5jaGVja291dD8uc3RlcHMgPz8gW10pXG4gICAgICAuZmlsdGVyKChzdGVwKSA9PiAhc3RlcC5kaXNhYmxlZClcbiAgICAgIC5tYXAoKHgpID0+IE9iamVjdC5hc3NpZ24oe30sIHgpKTtcbiAgICB0aGlzLnN0ZXBzJC5uZXh0KHRoaXMuYWxsU3RlcHMpO1xuICB9XG5cbiAgZGlzYWJsZUVuYWJsZVN0ZXAoXG4gICAgY3VycmVudFN0ZXBUeXBlOiBDaGVja291dFN0ZXBUeXBlLFxuICAgIGRpc2FibGVkOiBib29sZWFuXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRTdGVwID0gdGhpcy5hbGxTdGVwcy5maW5kKChzdGVwKSA9PlxuICAgICAgc3RlcC50eXBlLmluY2x1ZGVzKGN1cnJlbnRTdGVwVHlwZSlcbiAgICApO1xuICAgIGlmIChjdXJyZW50U3RlcCAmJiBjdXJyZW50U3RlcC5kaXNhYmxlZCAhPT0gZGlzYWJsZWQpIHtcbiAgICAgIGN1cnJlbnRTdGVwLmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gICAgICB0aGlzLnN0ZXBzJC5uZXh0KHRoaXMuYWxsU3RlcHMuZmlsdGVyKChzdGVwKSA9PiAhc3RlcC5kaXNhYmxlZCkpO1xuICAgIH1cbiAgfVxuXG4gIGdldENoZWNrb3V0U3RlcChjdXJyZW50U3RlcFR5cGU6IENoZWNrb3V0U3RlcFR5cGUpOiBDaGVja291dFN0ZXAgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRDaGVja291dFN0ZXBJbmRleCgndHlwZScsIGN1cnJlbnRTdGVwVHlwZSk7XG4gICAgaWYgKGluZGV4ICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5hbGxTdGVwc1tpbmRleF07XG4gICAgfVxuICB9XG5cbiAgZ2V0Q2hlY2tvdXRTdGVwUm91dGUoY3VycmVudFN0ZXBUeXBlOiBDaGVja291dFN0ZXBUeXBlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDaGVja291dFN0ZXAoY3VycmVudFN0ZXBUeXBlKT8ucm91dGVOYW1lO1xuICB9XG5cbiAgZ2V0Rmlyc3RDaGVja291dFN0ZXBSb3V0ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFsbFN0ZXBzWzBdLnJvdXRlTmFtZTtcbiAgfVxuXG4gIGdldE5leHRDaGVja291dFN0ZXBVcmwoYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3Qgc3RlcEluZGV4ID0gdGhpcy5nZXRDdXJyZW50U3RlcEluZGV4KGFjdGl2YXRlZFJvdXRlKTtcblxuICAgIGlmIChzdGVwSW5kZXggIT09IG51bGwgJiYgc3RlcEluZGV4ID49IDApIHtcbiAgICAgIGxldCBpID0gMTtcbiAgICAgIHdoaWxlIChcbiAgICAgICAgdGhpcy5hbGxTdGVwc1tzdGVwSW5kZXggKyBpXSAmJlxuICAgICAgICB0aGlzLmFsbFN0ZXBzW3N0ZXBJbmRleCArIGldLmRpc2FibGVkXG4gICAgICApIHtcbiAgICAgICAgaSsrO1xuICAgICAgfVxuICAgICAgY29uc3QgbmV4dFN0ZXAgPSB0aGlzLmFsbFN0ZXBzW3N0ZXBJbmRleCArIGldO1xuICAgICAgaWYgKG5leHRTdGVwKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFN0ZXBVcmxGcm9tU3RlcFJvdXRlKG5leHRTdGVwLnJvdXRlTmFtZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0UHJldmlvdXNDaGVja291dFN0ZXBVcmwoYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3Qgc3RlcEluZGV4ID0gdGhpcy5nZXRDdXJyZW50U3RlcEluZGV4KGFjdGl2YXRlZFJvdXRlKTtcblxuICAgIGlmIChzdGVwSW5kZXggIT09IG51bGwgJiYgc3RlcEluZGV4ID49IDApIHtcbiAgICAgIGxldCBpID0gMTtcbiAgICAgIHdoaWxlIChcbiAgICAgICAgdGhpcy5hbGxTdGVwc1tzdGVwSW5kZXggLSBpXSAmJlxuICAgICAgICB0aGlzLmFsbFN0ZXBzW3N0ZXBJbmRleCAtIGldLmRpc2FibGVkXG4gICAgICApIHtcbiAgICAgICAgaSsrO1xuICAgICAgfVxuICAgICAgY29uc3QgcHJldmlvdXNTdGVwID0gdGhpcy5hbGxTdGVwc1tzdGVwSW5kZXggLSBpXTtcbiAgICAgIGlmIChwcmV2aW91c1N0ZXApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RlcFVybEZyb21TdGVwUm91dGUocHJldmlvdXNTdGVwLnJvdXRlTmFtZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0Q3VycmVudFN0ZXBJbmRleChhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUpOiBudW1iZXIgfCBudWxsIHtcbiAgICBjb25zdCBjdXJyZW50U3RlcFVybCA9IHRoaXMuZ2V0U3RlcFVybEZyb21BY3RpdmF0ZWRSb3V0ZShhY3RpdmF0ZWRSb3V0ZSk7XG5cbiAgICBjb25zdCBzdGVwSW5kZXggPSB0aGlzLmFsbFN0ZXBzLmZpbmRJbmRleChcbiAgICAgIChzdGVwKSA9PlxuICAgICAgICBjdXJyZW50U3RlcFVybCA9PT0gYC8ke3RoaXMuZ2V0U3RlcFVybEZyb21TdGVwUm91dGUoc3RlcC5yb3V0ZU5hbWUpfWBcbiAgICApO1xuICAgIHJldHVybiBzdGVwSW5kZXggPT09IC0xID8gbnVsbCA6IHN0ZXBJbmRleDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3RlcFVybEZyb21BY3RpdmF0ZWRSb3V0ZShcbiAgICBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGVcbiAgKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIGFjdGl2YXRlZFJvdXRlICYmXG4gICAgICBhY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdCAmJlxuICAgICAgYWN0aXZhdGVkUm91dGUuc25hcHNob3QudXJsXG4gICAgICA/IGAvJHthY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC51cmwuam9pbignLycpfWBcbiAgICAgIDogbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3RlcFVybEZyb21TdGVwUm91dGUoc3RlcFJvdXRlOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5yb3V0aW5nQ29uZmlnU2VydmljZS5nZXRSb3V0ZUNvbmZpZyhzdGVwUm91dGUpLnBhdGhzPy5bMF0gPz8gbnVsbFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldENoZWNrb3V0U3RlcEluZGV4KGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogbnVtYmVyIHwgbnVsbCB7XG4gICAgcmV0dXJuIGtleSAmJiB2YWx1ZVxuICAgICAgPyB0aGlzLmFsbFN0ZXBzLmZpbmRJbmRleCgoc3RlcDogQ2hlY2tvdXRTdGVwKSA9PiB7XG4gICAgICAgICAgY29uc3QgcHJvcGVydHlWYWwgPSBzdGVwW2tleSBhcyBrZXlvZiBDaGVja291dFN0ZXBdO1xuICAgICAgICAgIHJldHVybiBwcm9wZXJ0eVZhbCBpbnN0YW5jZW9mIEFycmF5XG4gICAgICAgICAgICA/IHByb3BlcnR5VmFsLmluY2x1ZGVzKHZhbHVlKVxuICAgICAgICAgICAgOiBwcm9wZXJ0eVZhbCA9PT0gdmFsdWU7XG4gICAgICAgIH0pXG4gICAgICA6IG51bGw7XG4gIH1cbn1cbiJdfQ==