UNPKG

ng-zorro-antd

Version:

An enterprise-class UI components based on Ant Design and Angular

121 lines 19.4 kB
/** * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE */ // from https://github.com/hsuanxyz/ng-time-parser import { FormStyle, getLocaleDayPeriods, TranslationWidth } from '@angular/common'; import { isNotNil } from 'ng-zorro-antd/core/util'; export class NgTimeParser { constructor(format, localeId) { this.format = format; this.localeId = localeId; this.regex = null; this.matchMap = { hour: null, minute: null, second: null, periodNarrow: null, periodWide: null, periodAbbreviated: null }; this.genRegexp(); } toDate(str) { const result = this.getTimeResult(str); const time = new Date(); if (isNotNil(result?.hour)) { time.setHours(result.hour); } if (isNotNil(result?.minute)) { time.setMinutes(result.minute); } if (isNotNil(result?.second)) { time.setSeconds(result.second); } if (result?.period === 1 && time.getHours() < 12) { time.setHours(time.getHours() + 12); } return time; } getTimeResult(str) { const match = this.regex.exec(str); let period = null; if (match) { if (isNotNil(this.matchMap.periodNarrow)) { period = getLocaleDayPeriods(this.localeId, FormStyle.Format, TranslationWidth.Narrow).indexOf(match[this.matchMap.periodNarrow + 1]); } if (isNotNil(this.matchMap.periodWide)) { period = getLocaleDayPeriods(this.localeId, FormStyle.Format, TranslationWidth.Wide).indexOf(match[this.matchMap.periodWide + 1]); } if (isNotNil(this.matchMap.periodAbbreviated)) { period = getLocaleDayPeriods(this.localeId, FormStyle.Format, TranslationWidth.Abbreviated).indexOf(match[this.matchMap.periodAbbreviated + 1]); } return { hour: isNotNil(this.matchMap.hour) ? Number.parseInt(match[this.matchMap.hour + 1], 10) : null, minute: isNotNil(this.matchMap.minute) ? Number.parseInt(match[this.matchMap.minute + 1], 10) : null, second: isNotNil(this.matchMap.second) ? Number.parseInt(match[this.matchMap.second + 1], 10) : null, period }; } else { return null; } } genRegexp() { let regexStr = this.format.replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$&'); const hourRegex = /h{1,2}/i; const minuteRegex = /m{1,2}/; const secondRegex = /s{1,2}/; const periodNarrow = /aaaaa/; const periodWide = /aaaa/; const periodAbbreviated = /a{1,3}/; const hourMatch = hourRegex.exec(this.format); const minuteMatch = minuteRegex.exec(this.format); const secondMatch = secondRegex.exec(this.format); const periodNarrowMatch = periodNarrow.exec(this.format); let periodWideMatch = null; let periodAbbreviatedMatch = null; if (!periodNarrowMatch) { periodWideMatch = periodWide.exec(this.format); } if (!periodWideMatch && !periodNarrowMatch) { periodAbbreviatedMatch = periodAbbreviated.exec(this.format); } const matchs = [hourMatch, minuteMatch, secondMatch, periodNarrowMatch, periodWideMatch, periodAbbreviatedMatch] .filter(m => !!m) .sort((a, b) => a.index - b.index); matchs.forEach((match, index) => { switch (match) { case hourMatch: this.matchMap.hour = index; regexStr = regexStr.replace(hourRegex, '(\\d{1,2})'); break; case minuteMatch: this.matchMap.minute = index; regexStr = regexStr.replace(minuteRegex, '(\\d{1,2})'); break; case secondMatch: this.matchMap.second = index; regexStr = regexStr.replace(secondRegex, '(\\d{1,2})'); break; case periodNarrowMatch: this.matchMap.periodNarrow = index; const periodsNarrow = getLocaleDayPeriods(this.localeId, FormStyle.Format, TranslationWidth.Narrow).join('|'); regexStr = regexStr.replace(periodNarrow, `(${periodsNarrow})`); break; case periodWideMatch: this.matchMap.periodWide = index; const periodsWide = getLocaleDayPeriods(this.localeId, FormStyle.Format, TranslationWidth.Wide).join('|'); regexStr = regexStr.replace(periodWide, `(${periodsWide})`); break; case periodAbbreviatedMatch: this.matchMap.periodAbbreviated = index; const periodsAbbreviated = getLocaleDayPeriods(this.localeId, FormStyle.Format, TranslationWidth.Abbreviated).join('|'); regexStr = regexStr.replace(periodAbbreviated, `(${periodsAbbreviated})`); break; } }); this.regex = new RegExp(regexStr); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1wYXJzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb21wb25lbnRzL2NvcmUvdGltZS90aW1lLXBhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxrREFBa0Q7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRW5GLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQVNuRCxNQUFNLE9BQU8sWUFBWTtJQVd2QixZQUNVLE1BQWMsRUFDZCxRQUFnQjtRQURoQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQVoxQixVQUFLLEdBQVcsSUFBSyxDQUFDO1FBQ3RCLGFBQVEsR0FBcUM7WUFDM0MsSUFBSSxFQUFFLElBQUk7WUFDVixNQUFNLEVBQUUsSUFBSTtZQUNaLE1BQU0sRUFBRSxJQUFJO1lBQ1osWUFBWSxFQUFFLElBQUk7WUFDbEIsVUFBVSxFQUFFLElBQUk7WUFDaEIsaUJBQWlCLEVBQUUsSUFBSTtTQUN4QixDQUFDO1FBTUEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxNQUFNLENBQUMsR0FBVztRQUNoQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFFeEIsSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsQ0FBQztRQUVELElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxVQUFVLENBQUMsTUFB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QUFPLENBQUMsWUFBWSxFQUFFLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQztvQkFDaEUsTUFBTTtnQkFDUixLQUFLLGVBQWU7b0JBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztvQkFDakMsTUFBTSxXQUFXLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDMUcsUUFBUSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQztvQkFDNUQsTUFBTTtnQkFDUixLQUFLLHNCQUFzQjtvQkFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7b0JBQ3hDLE1BQU0sa0JBQWtCLEdBQUcsbUJBQW1CLENBQzVDLElBQUksQ0FBQyxRQUFRLEVBQ2IsU0FBUyxDQUFDLE1BQU0sRUFDaEIsZ0JBQWdCLENBQUMsV0FBVyxDQUM3QixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDWixRQUFRLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLGtCQUFrQixHQUFHLENBQUMsQ0FBQztvQkFDMUUsTUFBTTtZQUNWLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vTkctWk9SUk8vbmctem9ycm8tYW50ZC9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuLy8gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vaHN1YW54eXovbmctdGltZS1wYXJzZXJcbmltcG9ydCB7IEZvcm1TdHlsZSwgZ2V0TG9jYWxlRGF5UGVyaW9kcywgVHJhbnNsYXRpb25XaWR0aCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7IGlzTm90TmlsIH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL3V0aWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVSZXN1bHQge1xuICBob3VyOiBudW1iZXIgfCBudWxsO1xuICBtaW51dGU6IG51bWJlciB8IG51bGw7XG4gIHNlY29uZDogbnVtYmVyIHwgbnVsbDtcbiAgcGVyaW9kOiBudW1iZXIgfCBudWxsO1xufVxuXG5leHBvcnQgY2xhc3MgTmdUaW1lUGFyc2VyIHtcbiAgcmVnZXg6IFJlZ0V4cCA9IG51bGwhO1xuICBtYXRjaE1hcDogeyBba2V5OiBzdHJpbmddOiBudWxsIHwgbnVtYmVyIH0gPSB7XG4gICAgaG91cjogbnVsbCxcbiAgICBtaW51dGU6IG51bGwsXG4gICAgc2Vjb25kOiBudWxsLFxuICAgIHBlcmlvZE5hcnJvdzogbnVsbCxcbiAgICBwZXJpb2RXaWRlOiBudWxsLFxuICAgIHBlcmlvZEFiYnJldmlhdGVkOiBudWxsXG4gIH07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmb3JtYXQ6IHN0cmluZyxcbiAgICBwcml2YXRlIGxvY2FsZUlkOiBzdHJpbmdcbiAgKSB7XG4gICAgdGhpcy5nZW5SZWdleHAoKTtcbiAgfVxuXG4gIHRvRGF0ZShzdHI6IHN0cmluZyk6IERhdGUge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZ2V0VGltZVJlc3VsdChzdHIpO1xuICAgIGNvbnN0IHRpbWUgPSBuZXcgRGF0ZSgpO1xuXG4gICAgaWYgKGlzTm90TmlsKHJlc3VsdD8uaG91cikpIHtcbiAgICAgIHRpbWUuc2V0SG91cnMocmVzdWx0IS5ob3VyKTtcbiAgICB9XG5cbiAgICBpZiAoaXNOb3ROaWwocmVzdWx0Py5taW51dGUpKSB7XG4gICAgICB0aW1lLnNldE1pbnV0ZXMocmVzdWx0IS5taW51dGUpO1xuICAgIH1cblxuICAgIGlmIChpc05vdE5pbChyZXN1bHQ/LnNlY29uZCkpIHtcbiAgICAgIHRpbWUuc2V0U2Vjb25kcyhyZXN1bHQhLnNlY29uZCk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdD8ucGVyaW9kID09PSAxICYmIHRpbWUuZ2V0SG91cnMoKSA8IDEyKSB7XG4gICAgICB0aW1lLnNldEhvdXJzKHRpbWUuZ2V0SG91cnMoKSArIDEyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGltZTtcbiAgfVxuXG4gIGdldFRpbWVSZXN1bHQoc3RyOiBzdHJpbmcpOiBUaW1lUmVzdWx0IHwgbnVsbCB7XG4gICAgY29uc3QgbWF0Y2ggPSB0aGlzLnJlZ2V4LmV4ZWMoc3RyKTtcbiAgICBsZXQgcGVyaW9kID0gbnVsbDtcbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIGlmIChpc05vdE5pbCh0aGlzLm1hdGNoTWFwLnBlcmlvZE5hcnJvdykpIHtcbiAgICAgICAgcGVyaW9kID0gZ2V0TG9jYWxlRGF5UGVyaW9kcyh0aGlzLmxvY2FsZUlkLCBGb3JtU3R5bGUuRm9ybWF0LCBUcmFuc2xhdGlvbldpZHRoLk5hcnJvdykuaW5kZXhPZihcbiAgICAgICAgICBtYXRjaFt0aGlzLm1hdGNoTWFwLnBlcmlvZE5hcnJvdyArIDFdXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoaXNOb3ROaWwodGhpcy5tYXRjaE1hcC5wZXJpb2RXaWRlKSkge1xuICAgICAgICBwZXJpb2QgPSBnZXRMb2NhbGVEYXlQZXJpb2RzKHRoaXMubG9jYWxlSWQsIEZvcm1TdHlsZS5Gb3JtYXQsIFRyYW5zbGF0aW9uV2lkdGguV2lkZSkuaW5kZXhPZihcbiAgICAgICAgICBtYXRjaFt0aGlzLm1hdGNoTWFwLnBlcmlvZFdpZGUgKyAxXVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGlzTm90TmlsKHRoaXMubWF0Y2hNYXAucGVyaW9kQWJicmV2aWF0ZWQpKSB7XG4gICAgICAgIHBlcmlvZCA9IGdldExvY2FsZURheVBlcmlvZHModGhpcy5sb2NhbGVJZCwgRm9ybVN0eWxlLkZvcm1hdCwgVHJhbnNsYXRpb25XaWR0aC5BYmJyZXZpYXRlZCkuaW5kZXhPZihcbiAgICAgICAgICBtYXRjaFt0aGlzLm1hdGNoTWFwLnBlcmlvZEFiYnJldmlhdGVkICsgMV1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhvdXI6IGlzTm90TmlsKHRoaXMubWF0Y2hNYXAuaG91cikgPyBOdW1iZXIucGFyc2VJbnQobWF0Y2hbdGhpcy5tYXRjaE1hcC5ob3VyICsgMV0sIDEwKSA6IG51bGwsXG4gICAgICAgIG1pbnV0ZTogaXNOb3ROaWwodGhpcy5tYXRjaE1hcC5taW51dGUpID8gTnVtYmVyLnBhcnNlSW50KG1hdGNoW3RoaXMubWF0Y2hNYXAubWludXRlICsgMV0sIDEwKSA6IG51bGwsXG4gICAgICAgIHNlY29uZDogaXNOb3ROaWwodGhpcy5tYXRjaE1hcC5zZWNvbmQpID8gTnVtYmVyLnBhcnNlSW50KG1hdGNoW3RoaXMubWF0Y2hNYXAuc2Vjb25kICsgMV0sIDEwKSA6IG51bGwsXG4gICAgICAgIHBlcmlvZFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZ2VuUmVnZXhwKCk6IHZvaWQge1xuICAgIGxldCByZWdleFN0ciA9IHRoaXMuZm9ybWF0LnJlcGxhY2UoLyhbLiorP149IToke30oKXxbXFxdXFwvXFxcXF0pL2csICdcXFxcJCYnKTtcbiAgICBjb25zdCBob3VyUmVnZXggPSAvaHsxLDJ9L2k7XG4gICAgY29uc3QgbWludXRlUmVnZXggPSAvbXsxLDJ9LztcbiAgICBjb25zdCBzZWNvbmRSZWdleCA9IC9zezEsMn0vO1xuICAgIGNvbnN0IHBlcmlvZE5hcnJvdyA9IC9hYWFhYS87XG4gICAgY29uc3QgcGVyaW9kV2lkZSA9IC9hYWFhLztcbiAgICBjb25zdCBwZXJpb2RBYmJyZXZpYXRlZCA9IC9hezEsM30vO1xuXG4gICAgY29uc3QgaG91ck1hdGNoID0gaG91clJlZ2V4LmV4ZWModGhpcy5mb3JtYXQpO1xuICAgIGNvbnN0IG1pbnV0ZU1hdGNoID0gbWludXRlUmVnZXguZXhlYyh0aGlzLmZvcm1hdCk7XG4gICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBzZWNvbmRSZWdleC5leGVjKHRoaXMuZm9ybWF0KTtcbiAgICBjb25zdCBwZXJpb2ROYXJyb3dNYXRjaCA9IHBlcmlvZE5hcnJvdy5leGVjKHRoaXMuZm9ybWF0KTtcbiAgICBsZXQgcGVyaW9kV2lkZU1hdGNoOiBudWxsIHwgUmVnRXhwRXhlY0FycmF5ID0gbnVsbDtcbiAgICBsZXQgcGVyaW9kQWJicmV2aWF0ZWRNYXRjaDogbnVsbCB8IFJlZ0V4cEV4ZWNBcnJheSA9IG51bGw7XG4gICAgaWYgKCFwZXJpb2ROYXJyb3dNYXRjaCkge1xuICAgICAgcGVyaW9kV2lkZU1hdGNoID0gcGVyaW9kV2lkZS5leGVjKHRoaXMuZm9ybWF0KTtcbiAgICB9XG4gICAgaWYgKCFwZXJpb2RXaWRlTWF0Y2ggJiYgIXBlcmlvZE5hcnJvd01hdGNoKSB7XG4gICAgICBwZXJpb2RBYmJyZXZpYXRlZE1hdGNoID0gcGVyaW9kQWJicmV2aWF0ZWQuZXhlYyh0aGlzLmZvcm1hdCk7XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2hzID0gW2hvdXJNYXRjaCwgbWludXRlTWF0Y2gsIHNlY29uZE1hdGNoLCBwZXJpb2ROYXJyb3dNYXRjaCwgcGVyaW9kV2lkZU1hdGNoLCBwZXJpb2RBYmJyZXZpYXRlZE1hdGNoXVxuICAgICAgLmZpbHRlcihtID0+ICEhbSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhIS5pbmRleCAtIGIhLmluZGV4KTtcblxuICAgIG1hdGNocy5mb3JFYWNoKChtYXRjaCwgaW5kZXgpID0+IHtcbiAgICAgIHN3aXRjaCAobWF0Y2gpIHtcbiAgICAgICAgY2FzZSBob3VyTWF0Y2g6XG4gICAgICAgICAgdGhpcy5tYXRjaE1hcC5ob3VyID0gaW5kZXg7XG4gICAgICAgICAgcmVnZXhTdHIgPSByZWdleFN0ci5yZXBsYWNlKGhvdXJSZWdleCwgJyhcXFxcZHsxLDJ9KScpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIG1pbnV0ZU1hdGNoOlxuICAgICAgICAgIHRoaXMubWF0Y2hNYXAubWludXRlID0gaW5kZXg7XG4gICAgICAgICAgcmVnZXhTdHIgPSByZWdleFN0ci5yZXBsYWNlKG1pbnV0ZVJlZ2V4LCAnKFxcXFxkezEsMn0pJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugc2Vjb25kTWF0Y2g6XG4gICAgICAgICAgdGhpcy5tYXRjaE1hcC5zZWNvbmQgPSBpbmRleDtcbiAgICAgICAgICByZWdleFN0ciA9IHJlZ2V4U3RyLnJlcGxhY2Uoc2Vjb25kUmVnZXgsICcoXFxcXGR7MSwyfSknKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBwZXJpb2ROYXJyb3dNYXRjaDpcbiAgICAgICAgICB0aGlzLm1hdGNoTWFwLnBlcmlvZE5hcnJvdyA9IGluZGV4O1xuICAgICAgICAgIGNvbnN0IHBlcmlvZHNOYXJyb3cgPSBnZXRMb2NhbGVEYXlQZXJpb2RzKHRoaXMubG9jYWxlSWQsIEZvcm1TdHlsZS5Gb3JtYXQsIFRyYW5zbGF0aW9uV2lkdGguTmFycm93KS5qb2luKCd8Jyk7XG4gICAgICAgICAgcmVnZXhTdHIgPSByZWdleFN0ci5yZXBsYWNlKHBlcmlvZE5hcnJvdywgYCgke3BlcmlvZHNOYXJyb3d9KWApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHBlcmlvZFdpZGVNYXRjaDpcbiAgICAgICAgICB0aGlzLm1hdGNoTWFwLnBlcmlvZFdpZGUgPSBpbmRleDtcbiAgICAgICAgICBjb25zdCBwZXJpb2RzV2lkZSA9IGdldExvY2FsZURheVBlcmlvZHModGhpcy5sb2NhbGVJZCwgRm9ybVN0eWxlLkZvcm1hdCwgVHJhbnNsYXRpb25XaWR0aC5XaWRlKS5qb2luKCd8Jyk7XG4gICAgICAgICAgcmVnZXhTdHIgPSByZWdleFN0ci5yZXBsYWNlKHBlcmlvZFdpZGUsIGAoJHtwZXJpb2RzV2lkZX0pYCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgcGVyaW9kQWJicmV2aWF0ZWRNYXRjaDpcbiAgICAgICAgICB0aGlzLm1hdGNoTWFwLnBlcmlvZEFiYnJldmlhdGVkID0gaW5kZXg7XG4gICAgICAgICAgY29uc3QgcGVyaW9kc0FiYnJldmlhdGVkID0gZ2V0TG9jYWxlRGF5UGVyaW9kcyhcbiAgICAgICAgICAgIHRoaXMubG9jYWxlSWQsXG4gICAgICAgICAgICBGb3JtU3R5bGUuRm9ybWF0LFxuICAgICAgICAgICAgVHJhbnNsYXRpb25XaWR0aC5BYmJyZXZpYXRlZFxuICAgICAgICAgICkuam9pbignfCcpO1xuICAgICAgICAgIHJlZ2V4U3RyID0gcmVnZXhTdHIucmVwbGFjZShwZXJpb2RBYmJyZXZpYXRlZCwgYCgke3BlcmlvZHNBYmJyZXZpYXRlZH0pYCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnJlZ2V4ID0gbmV3IFJlZ0V4cChyZWdleFN0cik7XG4gIH1cbn1cbiJdfQ==