UNPKG

@vendasta/store

Version:

Components and data for Store

228 lines 20.1 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, Input } from '@angular/core'; import { formatDisplayPrice, formatBillingFrequency } from '@vendasta/core/shared'; var VaPricingComponent = /** @class */ (function () { function VaPricingComponent() { this.pricing = null; this.wrapFrequency = false; this.isAddon = false; this.hasVerifiedContract = false; this.highlightPrice = true; this.loaded = true; } Object.defineProperty(VaPricingComponent.prototype, "isFree", { get: /** * @return {?} */ function () { /** @type {?} */ var isFreeHelper = function (prices) { return prices ? prices.some(function (p) { return p.price === 0 || p.price === undefined; }) : false; }; if (this.hasVerifiedContract && this.billedProduct) { return this.billedProduct.pricingTiers.length === 1 ? isFreeHelper(this.billedProduct.pricingTiers) : false; } return this.pricing && isFreeHelper(this.pricing.prices) ? true : false; }, enumerable: true, configurable: true }); Object.defineProperty(VaPricingComponent.prototype, "shouldContactSales", { get: /** * @return {?} */ function () { /** @type {?} */ var nestedPricesIsContactSales = function (prices) { return prices && prices.length > 0 ? prices.some(function (p) { return p.price === null || p.price < 0; }) : true; }; if (this.hasVerifiedContract && this.billedProduct) { return nestedPricesIsContactSales(this.billedProduct.pricingTiers) ? true : false; } if (!this.pricing) { return true; } return nestedPricesIsContactSales(this.pricing.prices); }, enumerable: true, configurable: true }); /** * @param {?} billedProduct * @return {?} */ VaPricingComponent.prototype.isFlatPrice = /** * @param {?} billedProduct * @return {?} */ function (billedProduct) { return billedProduct.pricingTiers.length === 1; }; /** * @param {?} tier * @return {?} */ VaPricingComponent.prototype.buildPricingTierString = /** * @param {?} tier * @return {?} */ function (tier) { /** @type {?} */ var max = String(tier.rangeMax); if (tier.rangeMax === -1) { max = '∞'; if (tier.rangeMin === 0 || tier.rangeMin === 1) { return ''; } } return String(tier.rangeMin) + ' to ' + max; }; /** * @param {?} tier * @param {?=} frequency * @return {?} */ VaPricingComponent.prototype.buildPricingTierForProduct = /** * @param {?} tier * @param {?=} frequency * @return {?} */ function (tier, frequency) { /** @type {?} */ var pricingTier = this.buildPricingTierString(tier); /** @type {?} */ var formattedFrequency = formatBillingFrequency(frequency); return pricingTier ? pricingTier + ' accounts ' + formattedFrequency : formattedFrequency; }; /** * @param {?} tier * @return {?} */ VaPricingComponent.prototype.buildPricingTierForAddon = /** * @param {?} tier * @return {?} */ function (tier) { /** @type {?} */ var pricingRange = this.buildPricingTierString(tier); return pricingRange ? pricingRange : ''; }; /** * @param {?} price * @param {?} currency * @param {?=} excludeFrequency * @return {?} */ VaPricingComponent.prototype.buildPriceStringForPricing = /** * @param {?} price * @param {?} currency * @param {?=} excludeFrequency * @return {?} */ function (price, currency, excludeFrequency) { return formatDisplayPrice(price.price, currency, (/** @type {?} */ ((excludeFrequency ? '' : price.frequency))), true, true, true, price.isStartingPrice); }; /** * @param {?} tier * @param {?=} frequency * @param {?=} isStartingPrice * @return {?} */ VaPricingComponent.prototype.buildPriceStringForTier = /** * @param {?} tier * @param {?=} frequency * @param {?=} isStartingPrice * @return {?} */ function (tier, frequency, isStartingPrice) { return formatDisplayPrice(tier.price, this.billedProduct.currency, (/** @type {?} */ (frequency)), undefined, undefined, undefined, isStartingPrice); }; /** * @param {?=} frequency * @return {?} */ VaPricingComponent.prototype.buildFrequencyString = /** * @param {?=} frequency * @return {?} */ function (frequency) { return formatBillingFrequency(frequency); }; /** * @return {?} */ VaPricingComponent.prototype.buildCommitmentMessage = /** * @return {?} */ function () { /** @type {?} */ var frequency = this.billedProduct ? this.billedProduct.billingFrequency.toString().toLowerCase() : this.pricing && this.pricing.prices.length > 0 ? this.pricing.prices[0].frequency.toLowerCase() : ''; /** @type {?} */ var frequencyString = ''; if (frequency === 'yearly') { frequencyString = 'year'; } else if (frequency === 'monthly') { frequencyString = 'month'; } if (!frequencyString || this.isFree || this.shouldContactSales) { return ''; } if (this.billedProduct && this.billedProduct.commitment) { /** @type {?} */ var initial = this.billedProduct.commitment.initial; /** @type {?} */ var recurring = this.billedProduct.commitment.recurring; if (this.highlightPrice) { return "*" + initial + " " + frequencyString + " minimum, renews for " + recurring + " " + frequencyString + " periods"; } else { return initial + " " + frequencyString + " commitment"; } } return ''; }; VaPricingComponent.decorators = [ { type: Component, args: [{ selector: 'va-pricing', template: "<ng-container *ngIf=\"highlightPrice\">\n <highlight-pricing [pricing]=\"pricing\"\n [billedProduct]=\"billedProduct\"\n [highlightPrice]=\"highlightPrice\"\n [isAddon]=\"isAddon\"\n [hasVerifiedContract]=\"hasVerifiedContract\"\n [wrapFrequency]=\"wrapFrequency\"\n [loaded]=\"loaded\">\n </highlight-pricing>\n</ng-container>\n<ng-container *ngIf=\"!highlightPrice\">\n <table-pricing [pricing]=\"pricing\"\n [highlightPrice]=\"highlightPrice\"\n [billedProduct]=\"billedProduct\"\n [hasVerifiedContract]=\"hasVerifiedContract\"\n [loaded]=\"loaded\">\n </table-pricing>\n</ng-container>\n", styles: [""] }] } ]; VaPricingComponent.propDecorators = { pricing: [{ type: Input }], billedProduct: [{ type: Input }], wrapFrequency: [{ type: Input }], isAddon: [{ type: Input }], hasVerifiedContract: [{ type: Input }], highlightPrice: [{ type: Input }], loaded: [{ type: Input }] }; return VaPricingComponent; }()); export { VaPricingComponent }; if (false) { /** @type {?} */ VaPricingComponent.prototype.pricing; /** @type {?} */ VaPricingComponent.prototype.billedProduct; /** @type {?} */ VaPricingComponent.prototype.wrapFrequency; /** @type {?} */ VaPricingComponent.prototype.isAddon; /** @type {?} */ VaPricingComponent.prototype.hasVerifiedContract; /** @type {?} */ VaPricingComponent.prototype.highlightPrice; /** @type {?} */ VaPricingComponent.prototype.loaded; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpY2luZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdmVuZGFzdGEvc3RvcmUvIiwic291cmNlcyI6WyJsaWIvcHJpY2luZy9wcmljaW5nLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUErQixrQkFBa0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBR2hIO0lBQUE7UUFNYSxZQUFPLEdBQVksSUFBSSxDQUFDO1FBRXhCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQzVCLG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLFdBQU0sR0FBRyxJQUFJLENBQUM7SUEyRzNCLENBQUM7SUF6R0csc0JBQUksc0NBQU07Ozs7UUFBVjs7Z0JBQ1UsWUFBWSxHQUFHLFVBQUMsTUFBMkI7Z0JBQzdDLE9BQU8sTUFBTTtvQkFDVCxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUF0QyxDQUFzQyxDQUFDO29CQUMxRCxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ2hCLENBQUM7WUFFRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUNoRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7YUFDL0c7WUFDRCxPQUFPLElBQUksQ0FBQyxPQUFP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YUFBYSxDQUFDLFVBQVUsQ0FBQyxPQUFPOztnQkFDL0MsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLFNBQVM7WUFDekQsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUN2QixPQUFPLE1BQUksT0FBTyxTQUFJLGVBQWUsNkJBQXdCLFNBQVMsU0FBSSxlQUFlLGFBQVUsQ0FBQTthQUNwRztpQkFBTTtnQkFDTCxPQUFVLE9BQU8sU0FBSSxlQUFlLGdCQUFhLENBQUM7YUFDbkQ7U0FDRjtRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQzs7Z0JBdEhKLFNBQVMsU0FBQztvQkFDUCxRQUFRLEVBQUUsWUFBWTtvQkFDdEIsdXhCQUF1Qzs7aUJBRTFDOzs7MEJBRUksS0FBSztnQ0FDTCxLQUFLO2dDQUNMLEtBQUs7MEJBQ0wsS0FBSztzQ0FDTCxLQUFLO2lDQUNMLEtBQUs7eUJBQ0wsS0FBSzs7SUEyR1YseUJBQUM7Q0FBQSxBQXZIRCxJQXVIQztTQWxIWSxrQkFBa0I7OztJQUMzQixxQ0FBaUM7O0lBQ2pDLDJDQUFzQzs7SUFDdEMsMkNBQStCOztJQUMvQixxQ0FBeUI7O0lBQ3pCLGlEQUFxQzs7SUFDckMsNENBQStCOztJQUMvQixvQ0FBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCaWxsZWRQcm9kdWN0LCBQcmljaW5nVGllciB9IGZyb20gJ0B2ZW5kYXN0YS9jb3JlL2JpbGxpbmcnO1xuaW1wb3J0IHsgTWFya2V0cGxhY2VCaWxsaW5nRnJlcXVlbmN5LCBmb3JtYXREaXNwbGF5UHJpY2UsIGZvcm1hdEJpbGxpbmdGcmVxdWVuY3kgfSBmcm9tICdAdmVuZGFzdGEvY29yZS9zaGFyZWQnO1xuaW1wb3J0IHsgUHJpY2luZywgUHJpY2UgfSBmcm9tICcuL3ByaWNpbmcnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3ZhLXByaWNpbmcnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9wcmljaW5nLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9wcmljaW5nLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgVmFQcmljaW5nQ29tcG9uZW50IHtcbiAgICBASW5wdXQoKSBwcmljaW5nOiBQcmljaW5nID0gbnVsbDtcbiAgICBASW5wdXQoKSBiaWxsZWRQcm9kdWN0OiBCaWxsZWRQcm9kdWN0O1xuICAgIEBJbnB1dCgpIHdyYXBGcmVxdWVuY3kgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBpc0FkZG9uID0gZmFsc2U7XG4gICAgQElucHV0KCkgaGFzVmVyaWZpZWRDb250cmFjdCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGhpZ2hsaWdodFByaWNlID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBsb2FkZWQgPSB0cnVlO1xuXG4gICAgZ2V0IGlzRnJlZSgpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgaXNGcmVlSGVscGVyID0gKHByaWNlczogeyBwcmljZTogbnVtYmVyIH1bXSk6IGJvb2xlYW4gPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHByaWNlc1xuICAgICAgICAgICAgICAgID8gcHJpY2VzLnNvbWUocCA9PiBwLnByaWNlID09PSAwIHx8IHAucHJpY2UgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLmhhc1ZlcmlmaWVkQ29udHJhY3QgJiYgdGhpcy5iaWxsZWRQcm9kdWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5iaWxsZWRQcm9kdWN0LnByaWNpbmdUaWVycy5sZW5ndGggPT09IDEgPyBpc0ZyZWVIZWxwZXIodGhpcy5iaWxsZWRQcm9kdWN0LnByaWNpbmdUaWVycykgOiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5wcmljaW5nICYmIGlzRnJlZUhlbHBlcih0aGlzLnByaWNpbmcucHJpY2VzKSA/IHRydWUgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXQgc2hvdWxkQ29udGFjdFNhbGVzKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBuZXN0ZWRQcmljZXNJc0NvbnRhY3RTYWxlcyA9IChwcmljZXM6IHsgcHJpY2U6IG51bWJlciB9W10pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBwcmljZXMgJiYgcHJpY2VzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IHByaWNlcy5zb21lKHAgPT4gcC5wcmljZSA9PT0gbnVsbCB8fCBwLnByaWNlIDwgMClcbiAgICAgICAgICAgICAgICA6IHRydWU7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMuaGFzVmVyaWZpZWRDb250cmFjdCAmJiB0aGlzLmJpbGxlZFByb2R1Y3QpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXN0ZWRQcmljZXNJc0NvbnRhY3RTYWxlcyh0aGlzLmJpbGxlZFByb2R1Y3QucHJpY2luZ1RpZXJzKSA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMucHJpY2luZykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5lc3RlZFByaWNlc0lzQ29udGFjdFNhbGVzKHRoaXMucHJpY2luZy5wcmljZXMpO1xuICAgIH1cblxuICAgIGlzRmxhdFByaWNlKGJpbGxlZFByb2R1Y3Q6IEJpbGxlZFByb2R1Y3QpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGJpbGxlZFByb2R1Y3QucHJpY2luZ1RpZXJzLmxlbmd0aCA9PT0gMTtcbiAgICB9XG5cbiAgICBidWlsZFByaWNpbmdUaWVyU3RyaW5nKHRpZXI6IFByaWNpbmdUaWVyKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IG1heCA9IFN0cmluZyh0aWVyLnJhbmdlTWF4KTtcbiAgICAgICAgaWYgKHRpZXIucmFuZ2VNYXggPT09IC0xKSB7XG4gICAgICAgICAgICBtYXggPSAn4oieJztcbiAgICAgICAgICAgIGlmICh0aWVyLnJhbmdlTWluID09PSAwIHx8IHRpZXIucmFuZ2VNaW4gPT09IDEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFN0cmluZyh0aWVyLnJhbmdlTWluKSArICcgdG8gJyArIG1heDtcbiAgICB9XG5cbiAgICBidWlsZFByaWNpbmdUaWVyRm9yUHJvZHVjdCh0aWVyOiBQcmljaW5nVGllciwgZnJlcXVlbmN5Pzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHByaWNpbmdUaWVyID0gdGhpcy5idWlsZFByaWNpbmdUaWVyU3RyaW5nKHRpZXIpO1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWRGcmVxdWVuY3kgPSBmb3JtYXRCaWxsaW5nRnJlcXVlbmN5KGZyZXF1ZW5jeSk7XG4gICAgICAgIHJldHVybiBwcmljaW5nVGllciA/IHByaWNpbmdUaWVyICsgJyBhY2NvdW50cyAnICsgZm9ybWF0dGVkRnJlcXVlbmN5IDogZm9ybWF0dGVkRnJlcXVlbmN5O1xuICAgIH1cblxuICAgIGJ1aWxkUHJpY2luZ1RpZXJGb3JBZGRvbih0aWVyOiBQcmljaW5nVGllcik6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHByaWNpbmdSYW5nZSA9IHRoaXMuYnVpbGRQcmljaW5nVGllclN0cmluZyh0aWVyKTtcbiAgICAgICAgcmV0dXJuIHByaWNpbmdSYW5nZSA/IHByaWNpbmdSYW5nZSA6ICcnO1xuICAgIH1cblxuICAgIGJ1aWxkUHJpY2VTdHJpbmdGb3JQcmljaW5nKHByaWNlOiBQcmljZSwgY3VycmVuY3k6IHN0cmluZywgZXhjbHVkZUZyZXF1ZW5jeT86IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gZm9ybWF0RGlzcGxheVByaWNlKFxuICAgICAgICAgIHByaWNlLnByaWNlLFxuICAgICAgICAgIGN1cnJlbmN5LFxuICAgICAgICAgIChleGNsdWRlRnJlcXVlbmN5ID8gJycgOiBwcmljZS5mcmVxdWVuY3kpIGFzIGFueSxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICBwcmljZS5pc1N0YXJ0aW5nUHJpY2UsXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBidWlsZFByaWNlU3RyaW5nRm9yVGllcih0aWVyOiBQcmljaW5nVGllciwgZnJlcXVlbmN5PzogTWFya2V0cGxhY2VCaWxsaW5nRnJlcXVlbmN5LCBpc1N0YXJ0aW5nUHJpY2U/OiBib29sZWFuKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXREaXNwbGF5UHJpY2UoXG4gICAgICAgICAgdGllci5wcmljZSxcbiAgICAgICAgICB0aGlzLmJpbGxlZFByb2R1Y3QuY3VycmVuY3ksXG4gICAgICAgICAgZnJlcXVlbmN5IGFzIGFueSxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBpc1N0YXJ0aW5nUHJpY2UpO1xuICAgIH1cblxuICAgIGJ1aWxkRnJlcXVlbmN5U3RyaW5nKGZyZXF1ZW5jeT86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBmb3JtYXRCaWxsaW5nRnJlcXVlbmN5KGZyZXF1ZW5jeSk7XG4gICAgfVxuXG4gICAgYnVpbGRDb21taXRtZW50TWVzc2FnZSgpOiBzdHJpbmcge1xuICAgICAgY29uc3QgZnJlcXVlbmN5ID0gdGhpcy5iaWxsZWRQcm9kdWN0ID8gdGhpcy5iaWxsZWRQcm9kdWN0LmJpbGxpbmdGcmVxdWVuY3kudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpIDpcbiAgICAgICAgdGhpcy5wcmljaW5nICYmIHRoaXMucHJpY2luZy5wcmljZXMubGVuZ3RoID4gMCA/IHRoaXMucHJpY2luZy5wcmljZXNbMF0uZnJlcXVlbmN5LnRvTG93ZXJDYXNlKCkgOiAnJztcbiAgICAgIGxldCBmcmVxdWVuY3lTdHJpbmcgPSAnJztcbiAgICAgIGlmIChmcmVxdWVuY3kgPT09ICd5ZWFybHknKSB7XG4gICAgICAgIGZyZXF1ZW5jeVN0cmluZyA9ICd5ZWFyJztcbiAgICAgIH0gZWxzZSBpZiAoZnJlcXVlbmN5ID09PSAnbW9udGhseScpIHtcbiAgICAgICAgZnJlcXVlbmN5U3RyaW5nID0gJ21vbnRoJztcbiAgICAgIH1cbiAgICAgIGlmICghZnJlcXVlbmN5U3RyaW5nIHx8IHRoaXMuaXNGcmVlIHx8IHRoaXMuc2hvdWxkQ29udGFjdFNhbGVzKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmJpbGxlZFByb2R1Y3QgJiYgdGhpcy5iaWxsZWRQcm9kdWN0LmNvbW1pdG1lbnQpIHtcbiAgICAgICAgY29uc3QgaW5pdGlhbCA9IHRoaXMuYmlsbGVkUHJvZHVjdC5jb21taXRtZW50LmluaXRpYWw7XG4gICAgICAgIGNvbnN0IHJlY3VycmluZyA9IHRoaXMuYmlsbGVkUHJvZHVjdC5jb21taXRtZW50LnJlY3VycmluZztcbiAgICAgICAgaWYgKHRoaXMuaGlnaGxpZ2h0UHJpY2UpIHtcbiAgICAgICAgICByZXR1cm4gYCoke2luaXRpYWx9ICR7ZnJlcXVlbmN5U3RyaW5nfSBtaW5pbXVtLCByZW5ld3MgZm9yICR7cmVjdXJyaW5nfSAke2ZyZXF1ZW5jeVN0cmluZ30gcGVyaW9kc2BcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gYCR7aW5pdGlhbH0gJHtmcmVxdWVuY3lTdHJpbmd9IGNvbW1pdG1lbnRgO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxufVxuIl19