UNPKG

@singleton-i18n/angular-client

Version:

Singleton client code for Angular 10.

216 lines 24.7 kB
/* * Copyright 2019-2021 VMware, Inc. * SPDX-License-Identifier: EPL-2.0 */ import { Pipe } from '@angular/core'; import { I18nService } from './services/i18n.service'; import { isDefined, equals } from './util'; import { invalidPipeArgumentError } from './exceptions'; export class I18nPipe { constructor() { } _dispose() { if (typeof this.onPatternChange !== 'undefined') { this.onPatternChange.unsubscribe(); this.onPatternChange = undefined; } } ngOnDestroy() { this._dispose(); } } I18nPipe.decorators = [ { type: Pipe, args: [{ name: 'I18nPipe' },] } ]; I18nPipe.ctorParameters = () => []; export class NumberFormatPipe extends I18nPipe { constructor(i18nService) { super(); this.i18nService = i18nService; } updateValue(value, locale, formatOptions) { const onChange = (currentLocale) => { try { this.value = this.i18nService.formatNumber(value, currentLocale, formatOptions); } catch (error) { throw invalidPipeArgumentError(NumberFormatPipe, error.message); } }; if (locale) { onChange(locale); } else { this.i18nService.current.subscribe(onChange); } } transform(value, formatOptions) { if (!isDefined(value)) { return null; } if (equals(this.lastInput, arguments)) { return this.value; } this.lastInput = arguments; // locale and formatOptions are optional parameters, // the locale will be current locale if the parameter is passed as 'undefined'. this.updateValue(value, undefined, formatOptions); this._dispose(); if (!this.onPatternChange) { this.onPatternChange = this.i18nService.onLocaleChange.subscribe((locale) => { this.updateValue(value, locale, formatOptions); }); } return this.value; } } NumberFormatPipe.decorators = [ { type: Pipe, args: [{ name: 'numberFormat', pure: false },] } ]; NumberFormatPipe.ctorParameters = () => [ { type: I18nService } ]; export class CurrencyFormatPipe extends I18nPipe { constructor(i18nService) { super(); this.i18nService = i18nService; } updateValue(amount, currencyCode = 'USD', locale, formatOptions) { const onChange = (currentLocale) => { try { this.value = this.i18nService.formatCurrency(amount, currencyCode, currentLocale, formatOptions); } catch (error) { throw invalidPipeArgumentError(CurrencyFormatPipe, error.message); } }; if (locale) { onChange(locale); } else { this.i18nService.current.subscribe(onChange); } } transform(amount, currencyCode, formatOptions) { if (!isDefined(amount)) { return null; } if (equals(this.lastInput, arguments)) { return this.value; } this.lastInput = arguments; // locale and formatOptions are optional parameters, // the locale will be current locale if the parameter is passed as 'undefined'. this.updateValue(amount, currencyCode, undefined, formatOptions); this._dispose(); if (!this.onPatternChange) { this.onPatternChange = this.i18nService.onLocaleChange.subscribe((locale) => { this.updateValue(amount, currencyCode, locale, formatOptions); }); } return this.value; } } CurrencyFormatPipe.decorators = [ { type: Pipe, args: [{ name: 'currencyFormat', pure: false },] } ]; CurrencyFormatPipe.ctorParameters = () => [ { type: I18nService } ]; export class PercentFormatPipe extends I18nPipe { constructor(i18nService) { super(); this.i18nService = i18nService; } updateValue(value, locale, formatOptions) { const onChange = (currentLocale) => { try { this.value = this.i18nService.formatPercent(value, currentLocale, formatOptions); } catch (error) { throw invalidPipeArgumentError(PercentFormatPipe, error.message); } }; if (locale) { onChange(locale); } else { this.i18nService.current.subscribe(onChange); } } transform(value, formatOptions) { if (!isDefined(value)) { return null; } if (equals(this.lastInput, arguments)) { return this.value; } this.lastInput = arguments; // locale and formatOptions are optional parameters, // the locale will be current locale if the parameter is passed as 'undefined'. this.updateValue(value, undefined, formatOptions); this._dispose(); if (!this.onPatternChange) { this.onPatternChange = this.i18nService.onLocaleChange.subscribe((locale) => { this.updateValue(value, locale, formatOptions); }); } return this.value; } } PercentFormatPipe.decorators = [ { type: Pipe, args: [{ name: 'percentFormat', pure: false },] } ]; PercentFormatPipe.ctorParameters = () => [ { type: I18nService } ]; export class DateFormatPipe extends I18nPipe { constructor(i18nService) { super(); this.i18nService = i18nService; } updateValue(value, pattern, timezone, locale) { const onChange = (currentLocale) => { try { timezone = timezone ? timezone : null; const formattedDate = this.i18nService.formatDate(value, pattern, currentLocale, timezone); this.value = formattedDate; } catch (error) { throw invalidPipeArgumentError(DateFormatPipe, error.message); } }; if (locale) { onChange(locale); } else { this.i18nService.current.subscribe(onChange); } } transform(value, pattern = 'mediumDate', timezone) { if (!isDefined(value)) { return null; } if (equals(this.lastInput, arguments)) { return this.value; } this.lastInput = arguments; this.updateValue(value, pattern, timezone); this._dispose(); if (!this.onPatternChange) { this.onPatternChange = this.i18nService.onLocaleChange.subscribe((locale) => { this.updateValue(value, pattern, timezone, locale); }); } if (typeof value === 'string') { value = value.trim(); } return this.value; } } DateFormatPipe.decorators = [ { type: Pipe, args: [{ name: 'dateFormat', pure: false },] } ]; DateFormatPipe.ctorParameters = () => [ { type: I18nService } ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi5waXBlLmpzIiwic291cmNlUm9vdCI6Ii9ob21lL3JsaWdlbmcvUHJvamVjdHMvRGV2b3BzL0NsaWVudF9Bbmd1bGFyX0dpdEh1Yl9OcG1qcy92aXAvY2kvcHViMm9yZy9DbGllbnRfQW5ndWxhcl9HaXRIdWJfTnBtanMvc2luZ2xldG9uL3Byb2plY3RzL2FuZ3VsYXItY2xpZW50LyIsInNvdXJjZXMiOlsic3JjL2kxOG4ucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxPQUFPLEVBQUUsSUFBSSxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUMvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFdEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDM0MsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBSXhELE1BQU0sT0FBTyxRQUFRO0lBQ2pCLGdCQUFnQixDQUFDO0lBSVAsUUFBUTtRQUNkLElBQUksT0FBTyxJQUFJLENBQUMsZUFBZSxLQUFLLFdBQVcsRUFBRTtZQUM3QyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDO1NBQ3BDO0lBQ0wsQ0FBQztJQUNELFdBQVc7UUFDUCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDcEIsQ0FBQzs7O1lBZEosSUFBSSxTQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTs7O0FBa0IxQixNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsUUFBUTtJQUMxQyxZQUFvQixXQUF3QjtRQUN4QyxLQUFLLEVBQUUsQ0FBQztRQURRLGdCQUFXLEdBQVgsV0FBVyxDQUFhO0lBRTVDLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBVSxFQUFFLE1BQWUsRUFBRSxhQUFtQztRQUN4RSxNQUFNLFFBQVEsR0FBRyxDQUFDLGFBQXFCLEVBQUUs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SSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDdkIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQzVELENBQUMsTUFBYyxFQUFFLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN2RCxDQUFDLENBQ0osQ0FBQztTQUNMO1FBQ0QsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDM0IsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUN4QjtRQUNELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN0QixDQUFDOzs7WUFoREosSUFBSSxTQUFDLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFOzs7WUE1S2hDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTktMjAyMSBWTXdhcmUsIEluYy5cbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wXG4gKi9cbmltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0sIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2kxOG4uc2VydmljZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGlzRGVmaW5lZCwgZXF1YWxzIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7IGludmFsaWRQaXBlQXJndW1lbnRFcnJvciB9IGZyb20gJy4vZXhjZXB0aW9ucyc7XG5pbXBvcnQgeyBOdW1iZXJGb3JtYXRPcHRpb25zIH0gZnJvbSAnLi9mb3JtYXR0ZXJzL251bWJlci5mb3JtYXQubW9kZWwnO1xuXG5AUGlwZSh7IG5hbWU6ICdJMThuUGlwZScgfSlcbmV4cG9ydCBjbGFzcyBJMThuUGlwZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgY29uc3RydWN0b3IoKSB7IH1cbiAgICBwcm90ZWN0ZWQgdmFsdWU6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgbGFzdElucHV0OiBhbnk7XG4gICAgcHJvdGVjdGVkIG9uUGF0dGVybkNoYW5nZTogU3Vic2NyaXB0aW9uO1xuICAgIHByb3RlY3RlZCBfZGlzcG9zZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9uUGF0dGVybkNoYW5nZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRoaXMub25QYXR0ZXJuQ2hhbmdlLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLm9uUGF0dGVybkNoYW5nZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5fZGlzcG9zZSgpO1xuICAgIH1cbn1cblxuQFBpcGUoeyBuYW1lOiAnbnVtYmVyRm9ybWF0JywgcHVyZTogZmFsc2UgfSlcbmV4cG9ydCBjbGFzcyBOdW1iZXJGb3JtYXRQaXBlIGV4dGVuZHMgSTE4blBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGkxOG5TZXJ2aWNlOiBJMThuU2VydmljZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIHVwZGF0ZVZhbHVlKHZhbHVlOiBhbnksIGxvY2FsZT86IHN0cmluZywgZm9ybWF0T3B0aW9ucz86IE51bWJlckZvcm1hdE9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgb25DaGFuZ2UgPSAoY3VycmVudExvY2FsZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmkxOG5TZXJ2aWNlLmZvcm1hdE51bWJlcih2YWx1ZSwgY3VycmVudExvY2FsZSwgZm9ybWF0T3B0aW9ucyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHRocm93IGludmFsaWRQaXBlQXJndW1lbnRFcnJvcihOdW1iZXJGb3JtYXRQaXBlLCBlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAobG9jYWxlKSB7XG4gICAgICAgICAgICBvbkNoYW5nZShsb2NhbGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pMThuU2VydmljZS5jdXJyZW50LnN1YnNjcmliZShvbkNoYW5nZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0cmFuc2Zvcm0odmFsdWU6IGFueSwgZm9ybWF0T3B0aW9ucz86IE51bWJlckZvcm1hdE9wdGlvbnMpOiBzdHJpbmcgfCBudWxsIHtcblxuICAgICAgICBpZiAoIWlzRGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVxdWFscyh0aGlzLmxhc3RJbnB1dCwgYXJndW1lbnRzKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxhc3RJbnB1dCA9IGFyZ3VtZW50cztcbiAgICAgICAgLy8gbG9jYWxlIGFuZCBmb3JtYXRPcHRpb25zIGFyZSBvcHRpb25hbCBwYXJhbWV0ZXJzLFxuICAgICAgICAvLyB0aGUgbG9jYWxlIHdpbGwgYmUgY3VycmVudCBsb2NhbGUgaWYgdGhlIHBhcmFtZXRlciBpcyBwYXNzZWQgYXMgJ3VuZGVmaW5lZCcuXG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWUodmFsdWUsIHVuZGVmaW5lZCwgZm9ybWF0T3B0aW9ucyk7XG4gICAgICAgIHRoaXMuX2Rpc3Bvc2UoKTtcblxuICAgICAgICBpZiAoIXRoaXMub25QYXR0ZXJuQ2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLm9uUGF0dGVybkNoYW5nZSA9IHRoaXMuaTE4blNlcnZpY2Uub25Mb2NhbGVDaGFuZ2Uuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgIChsb2NhbGU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKHZhbHVlLCBsb2NhbGUsIGZvcm1hdE9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICB9XG59XG5cbkBQaXBlKHsgbmFtZTogJ2N1cnJlbmN5Rm9ybWF0JywgcHVyZTogZmFsc2UgfSlcbmV4cG9ydCBjbGFzcyBDdXJyZW5jeUZvcm1hdFBpcGUgZXh0ZW5kcyBJMThuUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaTE4blNlcnZpY2U6IEkxOG5TZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgdXBkYXRlVmFsdWUoYW1vdW50OiBhbnksIGN1cnJlbmN5Q29kZTogc3RyaW5nID0gJ1VTRCcsIGxvY2FsZT86IHN0cmluZywgZm9ybWF0T3B0aW9ucz86IE51bWJlckZvcm1hdE9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgb25DaGFuZ2UgPSAoY3VycmVudExvY2FsZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmkxOG5TZXJ2aWNlLmZvcm1hdEN1cnJlbmN5KGFtb3VudCwgY3VycmVuY3lDb2RlLCBjdXJyZW50TG9jYWxlLCBmb3JtYXRPcHRpb25zKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgaW52YWxpZFBpcGVBcmd1bWVudEVycm9yKEN1cnJlbmN5Rm9ybWF0UGlwZSwgZXJyb3IubWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICAgICAgb25DaGFuZ2UobG9jYWxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaTE4blNlcnZpY2UuY3VycmVudC5zdWJzY3JpYmUob25DaGFuZ2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdHJhbnNmb3JtKGFtb3VudDogYW55LCBjdXJyZW5jeUNvZGU6IHN0cmluZywgZm9ybWF0T3B0aW9ucz86IE51bWJlckZvcm1hdE9wdGlvbnMpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgaWYgKCFpc0RlZmluZWQoYW1vdW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXF1YWxzKHRoaXMubGFzdElucHV0LCBhcmd1bWVudHMpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGFzdElucHV0ID0gYXJndW1lbnRzO1xuICAgICAgICAvLyBsb2NhbGUgYW5kIGZvcm1hdE9wdGlvbnMgYXJlIG9wdGlvbmFsIHBhcmFtZXRlcnMsXG4gICAgICAgIC8vIHRoZSBsb2NhbGUgd2lsbCBiZSBjdXJyZW50IGxvY2FsZSBpZiB0aGUgcGFyYW1ldGVyIGlzIHBhc3NlZCBhcyAndW5kZWZpbmVkJy5cbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZShhbW91bnQsIGN1cnJlbmN5Q29kZSwgdW5kZWZpbmVkLCBmb3JtYXRPcHRpb25zKTtcbiAgICAgICAgdGhpcy5fZGlzcG9zZSgpO1xuXG4gICAgICAgIGlmICghdGhpcy5vblBhdHRlcm5DaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMub25QYXR0ZXJuQ2hhbmdlID0gdGhpcy5pMThuU2VydmljZS5vbkxvY2FsZUNoYW5nZS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgKGxvY2FsZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWUoYW1vdW50LCBjdXJyZW5jeUNvZGUsIGxvY2FsZSwgZm9ybWF0T3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICB9XG59XG5cblxuQFBpcGUoeyBuYW1lOiAncGVyY2VudEZvcm1hdCcsIHB1cmU6IGZhbHNlIH0pXG5leHBvcnQgY2xhc3MgUGVyY2VudEZvcm1hdFBpcGUgZXh0ZW5kcyBJMThuUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBpMThuU2VydmljZTogSTE4blNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICB1cGRhdGVWYWx1ZSh2YWx1ZTogYW55LCBsb2NhbGU/OiBzdHJpbmcsIGZvcm1hdE9wdGlvbnM/OiBOdW1iZXJGb3JtYXRPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IG9uQ2hhbmdlID0gKGN1cnJlbnRMb2NhbGU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pMThuU2VydmljZS5mb3JtYXRQZXJjZW50KHZhbHVlLCBjdXJyZW50TG9jYWxlLCBmb3JtYXRPcHRpb25zKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgaW52YWxpZFBpcGVBcmd1bWVudEVycm9yKFBlcmNlbnRGb3JtYXRQaXBlLCBlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAobG9jYWxlKSB7XG4gICAgICAgICAgICBvbkNoYW5nZShsb2NhbGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pMThuU2VydmljZS5jdXJyZW50LnN1YnNjcmliZShvbkNoYW5nZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0cmFuc2Zvcm0odmFsdWU6IGFueSwgZm9ybWF0T3B0aW9ucz86IE51bWJlckZvcm1hdE9wdGlvbnMpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgaWYgKCFpc0RlZmluZWQodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXF1YWxzKHRoaXMubGFzdElucHV0LCBhcmd1bWVudHMpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGFzdElucHV0ID0gYXJndW1lbnRzO1xuICAgICAgICAvLyBsb2NhbGUgYW5kIGZvcm1hdE9wdGlvbnMgYXJlIG9wdGlvbmFsIHBhcmFtZXRlcnMsXG4gICAgICAgIC8vIHRoZSBsb2NhbGUgd2lsbCBiZSBjdXJyZW50IGxvY2FsZSBpZiB0aGUgcGFyYW1ldGVyIGlzIHBhc3NlZCBhcyAndW5kZWZpbmVkJy5cbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZSh2YWx1ZSwgdW5kZWZpbmVkLCBmb3JtYXRPcHRpb25zKTtcbiAgICAgICAgdGhpcy5fZGlzcG9zZSgpO1xuXG4gICAgICAgIGlmICghdGhpcy5vblBhdHRlcm5DaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMub25QYXR0ZXJuQ2hhbmdlID0gdGhpcy5pMThuU2VydmljZS5vbkxvY2FsZUNoYW5nZS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgKGxvY2FsZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWUodmFsdWUsIGxvY2FsZSwgZm9ybWF0T3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgIH1cbn1cblxuXG5AUGlwZSh7IG5hbWU6ICdkYXRlRm9ybWF0JywgcHVyZTogZmFsc2UgfSlcbmV4cG9ydCBjbGFzcyBEYXRlRm9ybWF0UGlwZSBleHRlbmRzIEkxOG5QaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBpMThuU2VydmljZTogSTE4blNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICB1cGRhdGVWYWx1ZSh2YWx1ZTogYW55LCBwYXR0ZXJuOiBzdHJpbmcsIHRpbWV6b25lPzogc3RyaW5nLCBsb2NhbGU/OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgb25DaGFuZ2UgPSAoY3VycmVudExvY2FsZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRpbWV6b25lID0gdGltZXpvbmUgPyB0aW1lem9uZSA6IG51bGw7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkRGF0ZSA9IHRoaXMuaTE4blNlcnZpY2UuZm9ybWF0RGF0ZSh2YWx1ZSwgcGF0dGVybiwgY3VycmVudExvY2FsZSwgdGltZXpvbmUpO1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBmb3JtYXR0ZWREYXRlO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBpbnZhbGlkUGlwZUFyZ3VtZW50RXJyb3IoRGF0ZUZvcm1hdFBpcGUsIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChsb2NhbGUpIHtcbiAgICAgICAgICAgIG9uQ2hhbmdlKGxvY2FsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmkxOG5TZXJ2aWNlLmN1cnJlbnQuc3Vic2NyaWJlKG9uQ2hhbmdlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRyYW5zZm9ybSh2YWx1ZTogYW55LCBwYXR0ZXJuOiBzdHJpbmcgPSAnbWVkaXVtRGF0ZScsIHRpbWV6b25lPzogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGlmICghaXNEZWZpbmVkKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXF1YWxzKHRoaXMubGFzdElucHV0LCBhcmd1bWVudHMpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGFzdElucHV0ID0gYXJndW1lbnRzO1xuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKHZhbHVlLCBwYXR0ZXJuLCB0aW1lem9uZSk7XG4gICAgICAgIHRoaXMuX2Rpc3Bvc2UoKTtcblxuICAgICAgICBpZiAoIXRoaXMub25QYXR0ZXJuQ2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLm9uUGF0dGVybkNoYW5nZSA9IHRoaXMuaTE4blNlcnZpY2Uub25Mb2NhbGVDaGFuZ2Uuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgIChsb2NhbGU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKHZhbHVlLCBwYXR0ZXJuLCB0aW1lem9uZSwgbG9jYWxlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICB9XG59XG4iXX0=