@singleton-i18n/angular-client
Version:
Singleton client code for Angular 10.
216 lines • 24.7 kB
JavaScript
/*
* 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=