UNPKG

ng-zorro-antd

Version:

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

296 lines 21 kB
/** * @fileoverview added by tsickle * Generated from: date-helper.service.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { __extends } from "tslib"; /** * @license * Copyright Alibaba.com All Rights Reserved. * * 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 */ import { formatDate } from '@angular/common'; import { Inject, Injectable, Injector, Optional } from '@angular/core'; import fnsFormat from 'date-fns/format'; import fnsGetISOWeek from 'date-fns/getISOWeek'; import fnsParse from 'date-fns/parse'; import { convertTokens } from './convert-tokens'; import { mergeDateConfig, NZ_DATE_CONFIG, NZ_DATE_FNS_COMPATIBLE } from './date-config'; import { NzI18nService } from './nz-i18n.service'; import * as i0 from "@angular/core"; import * as i1 from "./date-config"; /** * @param {?} injector * @param {?} config * @param {?} convertFormat * @return {?} */ export function DATE_HELPER_SERVICE_FACTORY(injector, config, convertFormat) { /** @type {?} */ var i18n = injector.get(NzI18nService); return i18n.getDateLocale() ? new DateHelperByDateFns(i18n, config, convertFormat) : new DateHelperByDatePipe(i18n, config, convertFormat); } /** * Abstract DateHelperService(Token via Class) * Compatibility: compact for original usage by default which using DatePipe * @abstract */ var DateHelperService = /** @class */ (function () { function DateHelperService(i18n, config, convertFormat) { this.i18n = i18n; this.config = config; this.convertFormat = convertFormat; this.config = mergeDateConfig(this.config); } DateHelperService.decorators = [ { type: Injectable, args: [{ providedIn: 'root', useFactory: DATE_HELPER_SERVICE_FACTORY, deps: [Injector, [new Optional(), NZ_DATE_CONFIG], [new Optional(), NZ_DATE_FNS_COMPATIBLE]] },] } ]; /** @nocollapse */ DateHelperService.ctorParameters = function () { return [ { type: NzI18nService }, { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [NZ_DATE_CONFIG,] }] }, { type: Boolean, decorators: [{ type: Optional }, { type: Inject, args: [NZ_DATE_FNS_COMPATIBLE,] }] } ]; }; /** @nocollapse */ DateHelperService.ɵprov = i0.ɵɵdefineInjectable({ factory: function DateHelperService_Factory() { return DATE_HELPER_SERVICE_FACTORY(i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(i1.NZ_DATE_CONFIG, 8), i0.ɵɵinject(i1.NZ_DATE_FNS_COMPATIBLE, 8)); }, token: DateHelperService, providedIn: "root" }); return DateHelperService; }()); export { DateHelperService }; if (false) { /** * @type {?} * @protected */ DateHelperService.prototype.i18n; /** * @type {?} * @protected */ DateHelperService.prototype.config; /** * @type {?} * @protected */ DateHelperService.prototype.convertFormat; /** * @abstract * @param {?} date * @return {?} */ DateHelperService.prototype.getISOWeek = function (date) { }; /** * @abstract * @return {?} */ DateHelperService.prototype.getFirstDayOfWeek = function () { }; /** * @abstract * @param {?} date * @param {?} formatStr * @return {?} */ DateHelperService.prototype.format = function (date, formatStr) { }; /** * @abstract * @param {?} text * @param {?=} formatStr * @return {?} */ DateHelperService.prototype.parseDate = function (text, formatStr) { }; /** * @abstract * @param {?} text * @param {?=} formatStr * @return {?} */ DateHelperService.prototype.parseTime = function (text, formatStr) { }; } /** * DateHelper that handles date formats with date-fns */ var DateHelperByDateFns = /** @class */ (function (_super) { __extends(DateHelperByDateFns, _super); function DateHelperByDateFns() { return _super !== null && _super.apply(this, arguments) || this; } /** * @param {?} date * @return {?} */ DateHelperByDateFns.prototype.getISOWeek = /** * @param {?} date * @return {?} */ function (date) { return fnsGetISOWeek(date); }; // Use date-fns's "weekStartsOn" to support different locale when "config.firstDayOfWeek" is null // https://github.com/date-fns/date-fns/blob/v2.0.0-alpha.27/src/locale/en-US/index.js#L23 // Use date-fns's "weekStartsOn" to support different locale when "config.firstDayOfWeek" is null // https://github.com/date-fns/date-fns/blob/v2.0.0-alpha.27/src/locale/en-US/index.js#L23 /** * @return {?} */ DateHelperByDateFns.prototype.getFirstDayOfWeek = // Use date-fns's "weekStartsOn" to support different locale when "config.firstDayOfWeek" is null // https://github.com/date-fns/date-fns/blob/v2.0.0-alpha.27/src/locale/en-US/index.js#L23 /** * @return {?} */ function () { /** @type {?} */ var defaultWeekStartsOn; try { defaultWeekStartsOn = (/** @type {?} */ ((/** @type {?} */ (this.i18n.getDateLocale().options)).weekStartsOn)); } catch (e) { defaultWeekStartsOn = 1; } return this.config.firstDayOfWeek == null ? defaultWeekStartsOn : this.config.firstDayOfWeek; }; /** * Format a date * @see https://date-fns.org/docs/format#description * @param date Date * @param formatStr format string */ /** * Format a date * @see https://date-fns.org/docs/format#description * @param {?} date Date * @param {?} formatStr format string * @return {?} */ DateHelperByDateFns.prototype.format = /** * Format a date * @see https://date-fns.org/docs/format#description * @param {?} date Date * @param {?} formatStr format string * @return {?} */ function (date, formatStr) { /** @type {?} */ var mergedStr = this.convertFormat ? convertTokens(formatStr) : formatStr; return date ? fnsFormat(date, mergedStr, { locale: this.i18n.getDateLocale() }) : ''; }; /** * @param {?} text * @param {?} formatStr * @return {?} */ DateHelperByDateFns.prototype.parseDate = /** * @param {?} text * @param {?} formatStr * @return {?} */ function (text, formatStr) { /** @type {?} */ var mergedStr = this.convertFormat ? convertTokens(formatStr) : formatStr; return fnsParse(text, mergedStr, new Date(), { locale: this.i18n.getDateLocale(), weekStartsOn: this.getFirstDayOfWeek() }); }; /** * @param {?} text * @param {?} formatStr * @return {?} */ DateHelperByDateFns.prototype.parseTime = /** * @param {?} text * @param {?} formatStr * @return {?} */ function (text, formatStr) { return this.parseDate(text, formatStr); }; /** @nocollapse */ DateHelperByDateFns.ɵprov = i0.ɵɵdefineInjectable({ factory: function DateHelperByDateFns_Factory() { return DATE_HELPER_SERVICE_FACTORY(i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(i1.NZ_DATE_CONFIG, 8), i0.ɵɵinject(i1.NZ_DATE_FNS_COMPATIBLE, 8)); }, token: DateHelperByDateFns, providedIn: "root" }); return DateHelperByDateFns; }(DateHelperService)); export { DateHelperByDateFns }; /** * DateHelper that handles date formats with angular's date-pipe * * @see https://github.com/NG-ZORRO/ng-zorro-antd/issues/2406 - DatePipe may cause non-standard week bug, see: * */ var DateHelperByDatePipe = /** @class */ (function (_super) { __extends(DateHelperByDatePipe, _super); function DateHelperByDatePipe() { return _super !== null && _super.apply(this, arguments) || this; } /** * @param {?} date * @return {?} */ DateHelperByDatePipe.prototype.getISOWeek = /** * @param {?} date * @return {?} */ function (date) { return +this.format(date, 'w'); }; /** * @return {?} */ DateHelperByDatePipe.prototype.getFirstDayOfWeek = /** * @return {?} */ function () { if (this.config.firstDayOfWeek === undefined) { /** @type {?} */ var locale = this.i18n.getLocaleId(); return locale && ['zh-cn', 'zh-tw'].indexOf(locale.toLowerCase()) > -1 ? 1 : 0; } return this.config.firstDayOfWeek; }; /** * @param {?} date * @param {?} formatStr * @return {?} */ DateHelperByDatePipe.prototype.format = /** * @param {?} date * @param {?} formatStr * @return {?} */ function (date, formatStr) { return date ? (/** @type {?} */ (formatDate(date, formatStr, this.i18n.getLocaleId()))) : ''; }; /** * @param {?} text * @return {?} */ DateHelperByDatePipe.prototype.parseDate = /** * @param {?} text * @return {?} */ function (text) { return new Date(text); }; /** * @param {?} text * @return {?} */ DateHelperByDatePipe.prototype.parseTime = /** * @param {?} text * @return {?} */ function (text) { if (!text) { return; } return new Date(Date.parse("1970-01-01 " + text)); }; /** @nocollapse */ DateHelperByDatePipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DateHelperByDatePipe_Factory() { return DATE_HELPER_SERVICE_FACTORY(i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(i1.NZ_DATE_CONFIG, 8), i0.ɵɵinject(i1.NZ_DATE_FNS_COMPATIBLE, 8)); }, token: DateHelperByDatePipe, providedIn: "root" }); return DateHelperByDatePipe; }(DateHelperService)); export { DateHelperByDatePipe }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1oZWxwZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXpvcnJvLWFudGQvaTE4bi8iLCJzb3VyY2VzIjpbImRhdGUtaGVscGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQVFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZFLE9BQU8sU0FBUyxNQUFNLGlCQUFpQixDQUFDO0FBQ3hDLE9BQU8sYUFBYSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sUUFBUSxNQUFNLGdCQUFnQixDQUFDO0FBR3RDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxzQkFBc0IsRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFDdEcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7Ozs7Ozs7QUFFbEQsTUFBTSxVQUFVLDJCQUEyQixDQUFDLFFBQWtCLEVBQUUsTUFBb0IsRUFBRSxhQUFzQjs7UUFDcEcsSUFBSSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDO0lBQ3hDLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRTtRQUN6QixDQUFDLENBQUMsSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLGFBQWEsQ0FBQztRQUN0RCxDQUFDLENBQUMsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBQzVELENBQUM7Ozs7OztBQU1EO0lBTUUsMkJBQ1ksSUFBbUIsRUFDaUIsTUFBb0IsRUFDWixhQUFzQjtRQUZsRSxTQUFJLEdBQUosSUFBSSxDQUFlO1FBQ2lCLFdBQU0sR0FBTixNQUFN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QkEvSEg7Q0FnSUMsQUEzQkQsQ0FBMEMsaUJBQWlCLEdBMkIxRDtTQTNCWSxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgQWxpYmFiYS5jb20gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vTkctWk9SUk8vbmctem9ycm8tYW50ZC9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgZm9ybWF0RGF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IGZuc0Zvcm1hdCBmcm9tICdkYXRlLWZucy9mb3JtYXQnO1xuaW1wb3J0IGZuc0dldElTT1dlZWsgZnJvbSAnZGF0ZS1mbnMvZ2V0SVNPV2Vlayc7XG5pbXBvcnQgZm5zUGFyc2UgZnJvbSAnZGF0ZS1mbnMvcGFyc2UnO1xuXG5pbXBvcnQgeyBXZWVrRGF5SW5kZXggfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvdGltZSc7XG5pbXBvcnQgeyBjb252ZXJ0VG9rZW5zIH0gZnJvbSAnLi9jb252ZXJ0LXRva2Vucyc7XG5pbXBvcnQgeyBtZXJnZURhdGVDb25maWcsIE5aX0RBVEVfQ09ORklHLCBOWl9EQVRFX0ZOU19DT01QQVRJQkxFLCBOekRhdGVDb25maWcgfSBmcm9tICcuL2RhdGUtY29uZmlnJztcbmltcG9ydCB7IE56STE4blNlcnZpY2UgfSBmcm9tICcuL256LWkxOG4uc2VydmljZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBEQVRFX0hFTFBFUl9TRVJWSUNFX0ZBQ1RPUlkoaW5qZWN0b3I6IEluamVjdG9yLCBjb25maWc6IE56RGF0ZUNvbmZpZywgY29udmVydEZvcm1hdDogYm9vbGVhbik6IERhdGVIZWxwZXJTZXJ2aWNlIHtcbiAgY29uc3QgaTE4biA9IGluamVjdG9yLmdldChOekkxOG5TZXJ2aWNlKTtcbiAgcmV0dXJuIGkxOG4uZ2V0RGF0ZUxvY2FsZSgpXG4gICAgPyBuZXcgRGF0ZUhlbHBlckJ5RGF0ZUZucyhpMThuLCBjb25maWcsIGNvbnZlcnRGb3JtYXQpXG4gICAgOiBuZXcgRGF0ZUhlbHBlckJ5RGF0ZVBpcGUoaTE4biwgY29uZmlnLCBjb252ZXJ0Rm9ybWF0KTtcbn1cblxuLyoqXG4gKiBBYnN0cmFjdCBEYXRlSGVscGVyU2VydmljZShUb2tlbiB2aWEgQ2xhc3MpXG4gKiBDb21wYXRpYmlsaXR5OiBjb21wYWN0IGZvciBvcmlnaW5hbCB1c2FnZSBieSBkZWZhdWx0IHdoaWNoIHVzaW5nIERhdGVQaXBlXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICB1c2VGYWN0b3J5OiBEQVRFX0hFTFBFUl9TRVJWSUNFX0ZBQ1RPUlksXG4gIGRlcHM6IFtJbmplY3RvciwgW25ldyBPcHRpb25hbCgpLCBOWl9EQVRFX0NPTkZJR10sIFtuZXcgT3B0aW9uYWwoKSwgTlpfREFURV9GTlNfQ09NUEFUSUJMRV1dXG59KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERhdGVIZWxwZXJTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGkxOG46IE56STE4blNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChOWl9EQVRFX0NPTkZJRykgcHJvdGVjdGVkIGNvbmZpZzogTnpEYXRlQ29uZmlnLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTlpfREFURV9GTlNfQ09NUEFUSUJMRSkgcHJvdGVjdGVkIGNvbnZlcnRGb3JtYXQ6IGJvb2xlYW5cbiAgKSB7XG4gICAgdGhpcy5jb25maWcgPSBtZXJnZURhdGVDb25maWcodGhpcy5jb25maWcpO1xuICB9XG5cbiAgYWJzdHJhY3QgZ2V0SVNPV2VlayhkYXRlOiBEYXRlKTogbnVtYmVyO1xuICBhYnN0cmFjdCBnZXRGaXJzdERheU9mV2VlaygpOiBXZWVrRGF5SW5kZXg7XG4gIGFic3RyYWN0IGZvcm1hdChkYXRlOiBEYXRlLCBmb3JtYXRTdHI6IHN0cmluZyk6IHN0cmluZztcbiAgYWJzdHJhY3QgcGFyc2VEYXRlKHRleHQ6IHN0cmluZywgZm9ybWF0U3RyPzogc3RyaW5nKTogRGF0ZTtcbiAgYWJzdHJhY3QgcGFyc2VUaW1lKHRleHQ6IHN0cmluZywgZm9ybWF0U3RyPzogc3RyaW5nKTogRGF0ZSB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBEYXRlSGVscGVyIHRoYXQgaGFuZGxlcyBkYXRlIGZvcm1hdHMgd2l0aCBkYXRlLWZuc1xuICovXG5leHBvcnQgY2xhc3MgRGF0ZUhlbHBlckJ5RGF0ZUZucyBleHRlbmRzIERhdGVIZWxwZXJTZXJ2aWNlIHtcbiAgZ2V0SVNPV2VlayhkYXRlOiBEYXRlKTogbnVtYmVyIHtcbiAgICByZXR1cm4gZm5zR2V0SVNPV2VlayhkYXRlKTtcbiAgfVxuXG4gIC8vIFVzZSBkYXRlLWZucydzIFwid2Vla1N0YXJ0c09uXCIgdG8gc3VwcG9ydCBkaWZmZXJlbnQgbG9jYWxlIHdoZW4gXCJjb25maWcuZmlyc3REYXlPZldlZWtcIiBpcyBudWxsXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL3YyLjAuMC1hbHBoYS4yNy9zcmMvbG9jYWxlL2VuLVVTL2luZGV4LmpzI0wyM1xuICBnZXRGaXJzdERheU9mV2VlaygpOiBXZWVrRGF5SW5kZXgge1xuICAgIGxldCBkZWZhdWx0V2Vla1N0YXJ0c09uOiBXZWVrRGF5SW5kZXg7XG4gICAgdHJ5IHtcbiAgICAgIGRlZmF1bHRXZWVrU3RhcnRzT24gPSB0aGlzLmkxOG4uZ2V0RGF0ZUxvY2FsZSgpLm9wdGlvbnMhLndlZWtTdGFydHNPbiE7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZGVmYXVsdFdlZWtTdGFydHNPbiA9IDE7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5maXJzdERheU9mV2VlayA9PSBudWxsID8gZGVmYXVsdFdlZWtTdGFydHNPbiA6IHRoaXMuY29uZmlnLmZpcnN0RGF5T2ZXZWVrO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCBhIGRhdGVcbiAgICogQHNlZSBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL2Zvcm1hdCNkZXNjcmlwdGlvblxuICAgKiBAcGFyYW0gZGF0ZSBEYXRlXG4gICAqIEBwYXJhbSBmb3JtYXRTdHIgZm9ybWF0IHN0cmluZ1xuICAgKi9cbiAgZm9ybWF0KGRhdGU6IERhdGUsIGZvcm1hdFN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXJnZWRTdHIgPSB0aGlzLmNvbnZlcnRGb3JtYXQgPyBjb252ZXJ0VG9rZW5zKGZvcm1hdFN0cikgOiBmb3JtYXRTdHI7XG4gICAgcmV0dXJuIGRhdGUgPyBmbnNGb3JtYXQoZGF0ZSwgbWVyZ2VkU3RyLCB7IGxvY2FsZTogdGhpcy5pMThuLmdldERhdGVMb2NhbGUoKSB9KSA6ICcnO1xuICB9XG5cbiAgcGFyc2VEYXRlKHRleHQ6IHN0cmluZywgZm9ybWF0U3RyOiBzdHJpbmcpOiBEYXRlIHtcbiAgICBjb25zdCBtZXJnZWRTdHIgPSB0aGlzLmNvbnZlcnRGb3JtYXQgPyBjb252ZXJ0VG9rZW5zKGZvcm1hdFN0cikgOiBmb3JtYXRTdHI7XG4gICAgcmV0dXJuIGZuc1BhcnNlKHRleHQsIG1lcmdlZFN0ciwgbmV3IERhdGUoKSwge1xuICAgICAgbG9jYWxlOiB0aGlzLmkxOG4uZ2V0RGF0ZUxvY2FsZSgpLFxuICAgICAgd2Vla1N0YXJ0c09uOiB0aGlzLmdldEZpcnN0RGF5T2ZXZWVrKClcbiAgICB9KTtcbiAgfVxuXG4gIHBhcnNlVGltZSh0ZXh0OiBzdHJpbmcsIGZvcm1hdFN0cjogc3RyaW5nKTogRGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VEYXRlKHRleHQsIGZvcm1hdFN0cik7XG4gIH1cbn1cblxuLyoqXG4gKiBEYXRlSGVscGVyIHRoYXQgaGFuZGxlcyBkYXRlIGZvcm1hdHMgd2l0aCBhbmd1bGFyJ3MgZGF0ZS1waXBlXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vTkctWk9SUk8vbmctem9ycm8tYW50ZC9pc3N1ZXMvMjQwNiAtIERhdGVQaXBlIG1heSBjYXVzZSBub24tc3RhbmRhcmQgd2VlayBidWcsIHNlZTpcbiAqXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRlSGVscGVyQnlEYXRlUGlwZSBleHRlbmRzIERhdGVIZWxwZXJTZXJ2aWNlIHtcbiAgZ2V0SVNPV2VlayhkYXRlOiBEYXRlKTogbnVtYmVyIHtcbiAgICByZXR1cm4gK3RoaXMuZm9ybWF0KGRhdGUsICd3Jyk7XG4gIH1cblxuICBnZXRGaXJzdERheU9mV2VlaygpOiBXZWVrRGF5SW5kZXgge1xuICAgIGlmICh0aGlzLmNvbmZpZy5maXJzdERheU9mV2VlayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBsb2NhbGUgPSB0aGlzLmkxOG4uZ2V0TG9jYWxlSWQoKTtcbiAgICAgIHJldHVybiBsb2NhbGUgJiYgWyd6aC1jbicsICd6aC10dyddLmluZGV4T2YobG9jYWxlLnRvTG93ZXJDYXNlKCkpID4gLTEgPyAxIDogMDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmZpcnN0RGF5T2ZXZWVrO1xuICB9XG5cbiAgZm9ybWF0KGRhdGU6IERhdGUgfCBudWxsLCBmb3JtYXRTdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGRhdGUgPyBmb3JtYXREYXRlKGRhdGUsIGZvcm1hdFN0ciwgdGhpcy5pMThuLmdldExvY2FsZUlkKCkpISA6ICcnO1xuICB9XG5cbiAgcGFyc2VEYXRlKHRleHQ6IHN0cmluZyk6IERhdGUge1xuICAgIHJldHVybiBuZXcgRGF0ZSh0ZXh0KTtcbiAgfVxuXG4gIHBhcnNlVGltZSh0ZXh0OiBzdHJpbmcpOiBEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRleHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEYXRlKERhdGUucGFyc2UoYDE5NzAtMDEtMDEgJHt0ZXh0fWApKTtcbiAgfVxufVxuIl19