UNPKG

@vendasta/store

Version:

Components and data for Store

222 lines 23.3 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, EventEmitter, Input, Output } from '@angular/core'; import { BehaviorSubject, ReplaySubject, combineLatest, merge as observableMerge } from 'rxjs'; import { Package } from './package'; import { Addon } from '@vendasta/core/shared'; import { skipWhile, shareReplay, map, take } from 'rxjs/operators'; import { orderProductsAndAddons } from './utils'; var VaPackageDetailsComponent = /** @class */ (function () { function VaPackageDetailsComponent() { this.showActionButton = true; this.showPricing = true; this.actionLabel = 'Get It Now'; this.getItNow = new EventEmitter(); this.standAloneProducts$$ = new BehaviorSubject([]); this.products$ = new BehaviorSubject([]); this.addons$ = new BehaviorSubject([]); this.pkg$ = new ReplaySubject(1); this.itemSelectedEvent$ = new ReplaySubject(1); this.combinedItemsList$ = combineLatest(this.products$, this.addons$, function (products, addons) { return (/** @type {?} */ ([].concat(products || []).concat(addons || []))); }); this.orderedItemsList$ = combineLatest(this.combinedItemsList$, this.pkg$, function (combined, pkg) { return orderProductsAndAddons(combined, pkg ? pkg.productOrder || [] : []); }); /** @type {?} */ var nonEmptyCombinedItemsList = this.combinedItemsList$.pipe(skipWhile(function (items) { return !items || items.length === 0; }), shareReplay(1)); // Need to map to an index because that's how product selection works. /** @type {?} */ var initialSelectedItem$ = nonEmptyCombinedItemsList.pipe(map(function (_) { return 0; }), take(1)); /** @type {?} */ var mergedSelection = observableMerge(initialSelectedItem$, this.itemSelectedEvent$); this.selectedItem$ = combineLatest(mergedSelection, this.orderedItemsList$).pipe(map(function (_a) { var _b = tslib_1.__read(_a, 2), index = _b[0], items = _b[1]; return items[index]; })); this.lmiCategories$ = this.products$.pipe(skipWhile(function (products) { return !products || products.length === 0; }), map(function (products) { return VaPackageDetailsComponent.getLmiCategories(products); })); this.productNameForSingleAddon$ = nonEmptyCombinedItemsList.pipe(map(function (items) { return VaPackageDetailsComponent.getProductNameForSingleAddon(items); })); this.displayTagName$ = combineLatest(this.pkg$, this.combinedItemsList$).pipe(map(function (_a) { var _b = tslib_1.__read(_a, 2), pkg = _b[0], items = _b[1]; return VaPackageDetailsComponent.getDisplayTagline(pkg, items); })); } Object.defineProperty(VaPackageDetailsComponent.prototype, "standAloneProducts", { set: /** * @param {?} standAloneProducts * @return {?} */ function (standAloneProducts) { this.standAloneProducts$$.next(standAloneProducts); }, enumerable: true, configurable: true }); Object.defineProperty(VaPackageDetailsComponent.prototype, "products", { set: /** * @param {?} products * @return {?} */ function (products) { this.products$.next(products); }, enumerable: true, configurable: true }); Object.defineProperty(VaPackageDetailsComponent.prototype, "addons", { set: /** * @param {?} addons * @return {?} */ function (addons) { this.addons$.next(addons); }, enumerable: true, configurable: true }); Object.defineProperty(VaPackageDetailsComponent.prototype, "pkg", { set: /** * @param {?} pkg * @return {?} */ function (pkg) { this.pkg$.next(pkg); }, enumerable: true, configurable: true }); /** * @param {?} products * @return {?} */ VaPackageDetailsComponent.getLmiCategories = /** * @param {?} products * @return {?} */ function (products) { /** @type {?} */ var lmiCategories = []; if (products) { products.forEach(function (product) { lmiCategories = lmiCategories.concat(product.getLmiCategoryNames()); }); } return new Set(lmiCategories); }; /** * @param {?} pkg * @param {?} items * @return {?} */ VaPackageDetailsComponent.getDisplayTagline = /** * @param {?} pkg * @param {?} items * @return {?} */ function (pkg, items) { if (pkg && pkg.tagline) { return pkg.tagline; } else if (items && items.length === 1) { // Single product / addon package. return items[0].tagline || ''; } return ''; }; /** * @param {?} items * @return {?} */ VaPackageDetailsComponent.getProductNameForSingleAddon = /** * @param {?} items * @return {?} */ function (items) { if (items && items.length === 1 && items[0] instanceof Addon) { /** @type {?} */ var addon = (/** @type {?} */ (items[0])); return addon.productName; } }; /** * @param {?} i * @return {?} */ VaPackageDetailsComponent.prototype.selectItem = /** * @param {?} i * @return {?} */ function (i) { this.itemSelectedEvent$.next(i); }; /** * @return {?} */ VaPackageDetailsComponent.prototype.emitGetItNow = /** * @return {?} */ function () { this.getItNow.emit(); }; VaPackageDetailsComponent.decorators = [ { type: Component, args: [{ selector: 'va-package-details', template: "<div *ngIf=\"pkg$ | async as pkg\" class=\"page\">\n <va-header-container [iconUrl]=\"pkg.icon\"\n [title]=\"pkg.name\"\n [tagline]=\"displayTagName$ | async\"\n [prerequisite]=\"productNameForSingleAddon$ | async\"\n [chipLabels]=\"lmiCategories$ | async\"\n [pricing]=\"pkg.pricing\"\n [pricingLabel]=\"'Pricing'\"\n [showAction]=\"showActionButton\"\n [showPricing]=\"showPricing\"\n [actionLabel]=\"actionLabel\"\n [actionEnabled]=true\n (actionSelected)=\"emitGetItNow()\"\n ></va-header-container>\n <ng-container *ngIf=\"pkg?.content\">\n <va-selling-info [description]=\"pkg.content\"></va-selling-info>\n </ng-container>\n\n <va-products-nav [items]=\"orderedItemsList$ | async\"\n [hideItemsNav]=\"pkg?.hide_product_icons_and_names\"\n (itemSelected)=\"selectItem($event)\"></va-products-nav>\n\n <ng-container *ngIf=\"selectedItem$ | async as selectedItem\">\n <div *ngIf=\"!pkg?.hide_product_details\" class=\"package-content\">\n <div class=\"left-column\">\n <section\n *ngIf=\"(selectedItem.endUserMarketing?.description || selectedItem.endUserMarketing?.keySellingPoints) ||\n (selectedItem.description || selectedItem.keySellingPoints)\">\n <va-selling-info [description]=\"selectedItem.endUserMarketing?.description || selectedItem.description\"\n [keySellingPoints]=\"selectedItem.endUserMarketing?.keySellingPoints || selectedItem.keySellingPoints\"></va-selling-info>\n </section>\n\n <section *ngIf=\"(selectedItem.endUserMarketing?.faqs?.length > 0\n && selectedItem.endUserMarketing?.faqs[0].question) || selectedItem.faqs?.length > 0\">\n <h2 class=\"va-component-title\">FAQs</h2>\n <va-faqs [faqs]=\"selectedItem.endUserMarketing?.faqs || selectedItem.faqs\"></va-faqs>\n </section>\n </div>\n\n <div class=\"right-column\">\n <section *ngIf=\"selectedItem.screenshotUrls?.length > 0 || selectedItem.screenshots?.length > 0\">\n <h2 class=\"va-component-title\">Gallery</h2>\n <va-image-gallery [imageUrls]=\"selectedItem.screenshotUrls || selectedItem.screenshots\"></va-image-gallery>\n </section>\n\n <section *ngIf=\"selectedItem.endUserMarketing?.files?.length > 0 || selectedItem.files?.length > 0\">\n <h2 class=\"va-component-title\">Files</h2>\n <va-files [files]=\"selectedItem.endUserMarketingFiles || selectedItem.files\"></va-files>\n </section>\n </div>\n </div>\n </ng-container>\n</div>\n", styles: [":host{display:block;font-size:14px;line-height:1.4}:host *{box-sizing:border-box}.va-component-title{font-size:24px;font-weight:300;margin-top:0}@media screen and (min-width:600px){.va-component-title{font-size:32px}}img{max-width:100%}va-icon{display:inline-block}.page{position:relative;margin:0 auto 20px;background:#fff;color:#212121;box-shadow:0 3px 10px rgba(33,33,33,.3);overflow:hidden;font-size:16px}.page .item-amount{color:#9e9e9e;font-size:14px;text-align:right;margin:0 24px 8px}section{padding:24px}.left-column{width:66%}@media screen and (max-width:600px){.left-column{width:100%}}.right-column{width:34%}.package-content{display:flex}@media screen and (max-width:600px){.right-column{width:100%}.package-content{flex-direction:column}}"] }] } ]; /** @nocollapse */ VaPackageDetailsComponent.ctorParameters = function () { return []; }; VaPackageDetailsComponent.propDecorators = { showActionButton: [{ type: Input }], showPricing: [{ type: Input }], actionLabel: [{ type: Input }], getItNow: [{ type: Output }], standAloneProducts: [{ type: Input }], products: [{ type: Input }], addons: [{ type: Input }], pkg: [{ type: Input }] }; return VaPackageDetailsComponent; }()); export { VaPackageDetailsComponent }; if (false) { /** @type {?} */ VaPackageDetailsComponent.prototype.showActionButton; /** @type {?} */ VaPackageDetailsComponent.prototype.showPricing; /** @type {?} */ VaPackageDetailsComponent.prototype.actionLabel; /** @type {?} */ VaPackageDetailsComponent.prototype.getItNow; /** @type {?} */ VaPackageDetailsComponent.prototype.standAloneProducts$$; /** @type {?} */ VaPackageDetailsComponent.prototype.products$; /** @type {?} */ VaPackageDetailsComponent.prototype.addons$; /** @type {?} */ VaPackageDetailsComponent.prototype.pkg$; /** @type {?} */ VaPackageDetailsComponent.prototype.itemSelectedEvent$; /** @type {?} */ VaPackageDetailsComponent.prototype.selectedItem$; /** @type {?} */ VaPackageDetailsComponent.prototype.combinedItemsList$; /** @type {?} */ VaPackageDetailsComponent.prototype.orderedItemsList$; /** @type {?} */ VaPackageDetailsComponent.prototype.lmiCategories$; /** @type {?} */ VaPackageDetailsComponent.prototype.productNameForSingleAddon$; /** @type {?} */ VaPackageDetailsComponent.prototype.displayTagName$; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS1kZXRhaWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B2ZW5kYXN0YS9zdG9yZS8iLCJzb3VyY2VzIjpbImxpYi9wYWNrYWdlLWRldGFpbHMvcGFja2FnZS1kZXRhaWxzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUFFLGVBQWUsRUFBYyxhQUFhLEVBQUUsYUFBYSxFQUFFLEtBQUssSUFBSSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0csT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFOUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUVqRDtJQXdFRTtRQWxFUyxxQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDeEIsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFDbkIsZ0JBQVcsR0FBRyxZQUFZLENBQUM7UUFFMUIsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFeEMseUJBQW9CLEdBQStCLElBQUksZUFBZSxDQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ3RGLGNBQVMsR0FBK0IsSUFBSSxlQUFlLENBQVksRUFBRSxDQUFDLENBQUM7UUFDM0UsWUFBTyxHQUE2QixJQUFJLGVBQWUsQ0FBVSxFQUFFLENBQUMsQ0FBQztRQUNyRSxTQUFJLEdBQTJCLElBQUksYUFBYSxDQUFVLENBQUMsQ0FBQyxDQUFDO1FBQzdELHVCQUFrQixHQUEwQixJQUFJLGFBQWEsQ0FBUyxDQUFDLENBQUMsQ0FBQztR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QUMsQ0FBQyxDQUFDLFlBQVksS0FBSyxFQUFFOztnQkFDdEQsS0FBSyxHQUFHLG1CQUFBLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBUztZQUMvQixPQUFPLEtBQUssQ0FBQyxXQUFXLENBQUM7U0FDMUI7SUFDSCxDQUFDOzs7OztJQWtERCw4Q0FBVTs7OztJQUFWLFVBQVcsQ0FBUztRQUNsQixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7Ozs7SUFFRCxnREFBWTs7O0lBQVo7UUFDRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZCLENBQUM7O2dCQTlIRixTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLG9CQUFvQjtvQkFDOUIsZ3hGQUE2Qzs7aUJBRTlDOzs7OzttQ0FFRSxLQUFLOzhCQUNMLEtBQUs7OEJBQ0wsS0FBSzsyQkFFTCxNQUFNO3FDQWVOLEtBQUs7MkJBS0wsS0FBSzt5QkFLTCxLQUFLO3NCQUtMLEtBQUs7O0lBdUZSLGdDQUFDO0NBQUEsQUEvSEQsSUErSEM7U0ExSFkseUJBQXlCOzs7SUFDcEMscURBQWlDOztJQUNqQyxnREFBNEI7O0lBQzVCLGdEQUFvQzs7SUFFcEMsNkNBQXdDOztJQUV4Qyx5REFBc0Y7O0lBQ3RGLDhDQUEyRTs7SUFDM0UsNENBQXFFOztJQUNyRSx5Q0FBNkQ7O0lBQzdELHVEQUF5RTs7SUFFekUsa0RBQTJDOztJQUMzQyx1REFBb0Q7O0lBQ3BELHNEQUFtRDs7SUFDbkQsbURBQXdDOztJQUN4QywrREFBK0M7O0lBQy9DLG9EQUFvQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG1lcmdlIGFzIG9ic2VydmFibGVNZXJnZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUGFja2FnZSB9IGZyb20gJy4vcGFja2FnZSc7XG5pbXBvcnQgeyBBZGRvbiB9IGZyb20gJ0B2ZW5kYXN0YS9jb3JlL3NoYXJlZCc7XG5pbXBvcnQgeyBQcm9kdWN0IH0gZnJvbSAnLi4vc2hhcmVkL3Byb2R1Y3QnO1xuaW1wb3J0IHsgc2tpcFdoaWxlLCBzaGFyZVJlcGxheSwgbWFwLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgb3JkZXJQcm9kdWN0c0FuZEFkZG9ucyB9IGZyb20gJy4vdXRpbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YS1wYWNrYWdlLWRldGFpbHMnLFxuICB0ZW1wbGF0ZVVybDogJ3BhY2thZ2UtZGV0YWlscy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3BhY2thZ2UtZGV0YWlscy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFZhUGFja2FnZURldGFpbHNDb21wb25lbnQge1xuICBASW5wdXQoKSBzaG93QWN0aW9uQnV0dG9uID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd1ByaWNpbmcgPSB0cnVlO1xuICBASW5wdXQoKSBhY3Rpb25MYWJlbCA9ICdHZXQgSXQgTm93JztcblxuICBAT3V0cHV0KCkgZ2V0SXROb3cgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgc3RhbmRBbG9uZVByb2R1Y3RzJCQ6IEJlaGF2aW9yU3ViamVjdDxQcm9kdWN0W10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQcm9kdWN0W10+KFtdKTtcbiAgcHJvZHVjdHMkOiBCZWhhdmlvclN1YmplY3Q8UHJvZHVjdFtdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UHJvZHVjdFtdPihbXSk7XG4gIGFkZG9ucyQ6IEJlaGF2aW9yU3ViamVjdDxBZGRvbltdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QWRkb25bXT4oW10pO1xuICBwa2ckOiBSZXBsYXlTdWJqZWN0PFBhY2thZ2U+ID0gbmV3IFJlcGxheVN1YmplY3Q8UGFja2FnZT4oMSk7XG4gIGl0ZW1TZWxlY3RlZEV2ZW50JDogUmVwbGF5U3ViamVjdDxudW1iZXI+ID0gbmV3IFJlcGxheVN1YmplY3Q8bnVtYmVyPigxKTtcblxuICBzZWxlY3RlZEl0ZW0kOiBPYnNlcnZhYmxlPFByb2R1Y3QgfCBBZGRvbj47XG4gIGNvbWJpbmVkSXRlbXNMaXN0JDogT2JzZXJ2YWJsZTwoUHJvZHVjdCB8IEFkZG9uKVtdPjtcbiAgb3JkZXJlZEl0ZW1zTGlzdCQ6IE9ic2VydmFibGU8KFByb2R1Y3QgfCBBZGRvbilbXT47XG4gIGxtaUNhdGVnb3JpZXMkOiBPYnNlcnZhYmxlPFNldDxzdHJpbmc+PjtcbiAgcHJvZHVjdE5hbWVGb3JTaW5nbGVBZGRvbiQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgZGlzcGxheVRhZ05hbWUkOiBPYnNlcnZhYmxlPHN0cmluZz47XG5cbiAgQElucHV0KClcbiAgc2V0IHN0YW5kQWxvbmVQcm9kdWN0cyhzdGFuZEFsb25lUHJvZHVjdHM6IFByb2R1Y3RbXSkge1xuICAgIHRoaXMuc3RhbmRBbG9uZVByb2R1Y3RzJCQubmV4dChzdGFuZEFsb25lUHJvZHVjdHMpO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHByb2R1Y3RzKHByb2R1Y3RzOiBQcm9kdWN0W10pIHtcbiAgICB0aGlzLnByb2R1Y3RzJC5uZXh0KHByb2R1Y3RzKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBhZGRvbnMoYWRkb25zOiBBZGRvbltdKSB7XG4gICAgdGhpcy5hZGRvbnMkLm5leHQoYWRkb25zKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBwa2cocGtnOiBQYWNrYWdlKSB7XG4gICAgdGhpcy5wa2ckLm5leHQocGtnKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRMbWlDYXRlZ29yaWVzKHByb2R1Y3RzOiBQcm9kdWN0W10pOiBTZXQ8c3RyaW5nPiB7XG4gICAgbGV0IGxtaUNhdGVnb3JpZXM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKHByb2R1Y3RzKSB7XG4gICAgICBwcm9kdWN0cy5mb3JFYWNoKHByb2R1Y3QgPT4ge1xuICAgICAgICBsbWlDYXRlZ29yaWVzID0gbG1pQ2F0ZWdvcmllcy5jb25jYXQocHJvZHVjdC5nZXRMbWlDYXRlZ29yeU5hbWVzKCkpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgU2V0KGxtaUNhdGVnb3JpZXMpO1xuICB9XG5cbiAgc3RhdGljIGdldERpc3BsYXlUYWdsaW5lKHBrZzogUGFja2FnZSwgaXRlbXM6IChQcm9kdWN0IHwgQWRkb24pW10pOiBzdHJpbmcge1xuICAgIGlmIChwa2cgJiYgcGtnLnRhZ2xpbmUpIHtcbiAgICAgIHJldHVybiBwa2cudGFnbGluZTtcbiAgICB9IGVsc2UgaWYgKGl0ZW1zICYmIGl0ZW1zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gU2luZ2xlIHByb2R1Y3QgLyBhZGRvbiBwYWNrYWdlLlxuICAgICAgcmV0dXJuIGl0ZW1zWzBdLnRhZ2xpbmUgfHwgJyc7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHN0YXRpYyBnZXRQcm9kdWN0TmFtZUZvclNpbmdsZUFkZG9uKGl0ZW1zOiAoUHJvZHVjdCB8IEFkZG9uKVtdKTogc3RyaW5nIHtcbiAgICBpZiAoaXRlbXMgJiYgaXRlbXMubGVuZ3RoID09PSAxICYmIGl0ZW1zWzBdIGluc3RhbmNlb2YgQWRkb24pIHtcbiAgICAgIGNvbnN0IGFkZG9uID0gaXRlbXNbMF0gYXMgQWRkb247XG4gICAgICByZXR1cm4gYWRkb24ucHJvZHVjdE5hbWU7XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jb21iaW5lZEl0ZW1zTGlzdCQgPSBjb21iaW5lTGF0ZXN0KHRoaXMucHJvZHVjdHMkLCB0aGlzLmFkZG9ucyQsIChwcm9kdWN0czogUHJvZHVjdFtdLCBhZGRvbnM6IEFkZG9uW10pID0+IHtcbiAgICAgIHJldHVybiBbXS5jb25jYXQocHJvZHVjdHMgfHwgW10pLmNvbmNhdChhZGRvbnMgfHwgW10pIGFzIChQcm9kdWN0IHwgQWRkb24pW107XG4gICAgfSk7XG5cbiAgICB0aGlzLm9yZGVyZWRJdGVtc0xpc3QkID0gY29tYmluZUxhdGVzdCh0aGlzLmNvbWJpbmVkSXRlbXNMaXN0JCwgdGhpcy5wa2ckLCAoY29tYmluZWQ6IChQcm9kdWN0IHwgQWRkb24pW10sIHBrZzogUGFja2FnZSkgPT4ge1xuICAgICAgcmV0dXJuIG9yZGVyUHJvZHVjdHNBbmRBZGRvbnMoY29tYmluZWQsIHBrZyA/IHBrZy5wcm9kdWN0T3JkZXIgfHwgW10gOiBbXSlcbiAgICB9KTtcblxuICAgIGNvbnN0IG5vbkVtcHR5Q29tYmluZWRJdGVtc0xpc3QgPSB0aGlzLmNvbWJpbmVkSXRlbXNMaXN0JC5waXBlKFxuICAgICAgc2tpcFdoaWxlKGl0ZW1zID0+ICFpdGVtcyB8fCBpdGVtcy5sZW5ndGggPT09IDApLFxuICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApO1xuXG4gICAgLy8gTmVlZCB0byBtYXAgdG8gYW4gaW5kZXggYmVjYXVzZSB0aGF0J3MgaG93IHByb2R1Y3Qgc2VsZWN0aW9uIHdvcmtzLlxuICAgIGNvbnN0IGluaXRpYWxTZWxlY3RlZEl0ZW0kID0gbm9uRW1wdHlDb21iaW5lZEl0ZW1zTGlzdC5waXBlKFxuICAgICAgbWFwKChfOiBhbnkpID0+IDApLFxuICAgICAgdGFrZSgxKVxuICAgICk7XG5cbiAgICBjb25zdCBtZXJnZWRTZWxlY3Rpb24gPSBvYnNlcnZhYmxlTWVyZ2UoaW5pdGlhbFNlbGVjdGVkSXRlbSQsIHRoaXMuaXRlbVNlbGVjdGVkRXZlbnQkKTtcblxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtJCA9IGNvbWJpbmVMYXRlc3QobWVyZ2VkU2VsZWN0aW9uLCB0aGlzLm9yZGVyZWRJdGVtc0xpc3QkKS5waXBlKFxuICAgICAgbWFwKChbaW5kZXgsIGl0ZW1zXSkgPT4ge1xuICAgICAgICByZXR1cm4gaXRlbXNbaW5kZXhdO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5sbWlDYXRlZ29yaWVzJCA9IHRoaXMucHJvZHVjdHMkLnBpcGUoXG4gICAgICBza2lwV2hpbGUocHJvZHVjdHMgPT4gIXByb2R1Y3RzIHx8IHByb2R1Y3RzLmxlbmd0aCA9PT0gMCksXG4gICAgICBtYXAocHJvZHVjdHMgPT4ge1xuICAgICAgICByZXR1cm4gVmFQYWNrYWdlRGV0YWlsc0NvbXBvbmVudC5nZXRMbWlDYXRlZ29yaWVzKHByb2R1Y3RzKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMucHJvZHVjdE5hbWVGb3JTaW5nbGVBZGRvbiQgPSBub25FbXB0eUNvbWJpbmVkSXRlbXNMaXN0LnBpcGUoXG4gICAgICBtYXAoaXRlbXMgPT4ge1xuICAgICAgICByZXR1cm4gVmFQYWNrYWdlRGV0YWlsc0NvbXBvbmVudC5nZXRQcm9kdWN0TmFtZUZvclNpbmdsZUFkZG9uKGl0ZW1zKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuZGlzcGxheVRhZ05hbWUkID0gY29tYmluZUxhdGVzdCh0aGlzLnBrZyQsIHRoaXMuY29tYmluZWRJdGVtc0xpc3QkKS5waXBlKFxuICAgICAgbWFwKChbcGtnLCBpdGVtc10pID0+IHtcbiAgICAgICAgcmV0dXJuIFZhUGFja2FnZURldGFpbHNDb21wb25lbnQuZ2V0RGlzcGxheVRhZ2xpbmUocGtnLCBpdGVtcyk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBzZWxlY3RJdGVtKGk6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuaXRlbVNlbGVjdGVkRXZlbnQkLm5leHQoaSk7XG4gIH1cblxuICBlbWl0R2V0SXROb3coKTogdm9pZCB7XG4gICAgdGhpcy5nZXRJdE5vdy5lbWl0KCk7XG4gIH1cbn1cbiJdfQ==