com.phloxui
Version:
PhloxUI Ng2+ Framework
248 lines (247 loc) • 19 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { AbstractPipeFormatter } from './AbstractPipeFormatter';
import { Option } from '../decorator/Option.decorator';
import { DateTimeUtils } from '../utils/DateTimeUtils';
var /** @type {?} */ NAME = 'date';
var /** @type {?} */ DEFAULT_DATA_YEAR_OFFSET = 0;
var /** @type {?} */ DEFAULT_PATTERN = 'dd/MM/yyyy HH:mm:ss';
var /** @type {?} */ DEFAULT_YEAR_OFFSET = 0;
var DateFormatter = /** @class */ (function (_super) {
tslib_1.__extends(DateFormatter, _super);
function DateFormatter() {
return _super.call(this, NAME) || this;
}
/**
* @param {?} data
* @return {?}
*/
DateFormatter.prototype.format = /**
* @param {?} data
* @return {?}
*/
function (data) {
var /** @type {?} */ date = DateTimeUtils.getDateFromAny(data);
if (date === null || typeof date === 'undefined') {
return null;
}
var /** @type {?} */ dataYearOffset = 0;
if (typeof data !== 'number' && !(data instanceof Date)) {
if (this.dataYearOffset !== null && this.dataYearOffset !== undefined) {
dataYearOffset = this.dataYearOffset;
}
else {
dataYearOffset = DEFAULT_DATA_YEAR_OFFSET;
}
}
var /** @type {?} */ yearOffset = this.yearOffset;
if (yearOffset === null || yearOffset === undefined) {
yearOffset = DEFAULT_YEAR_OFFSET;
}
// Browser's date api will only parse as gregorian calendar
// So, we've to "-dateYearOffset then + yearOffset back".
date.addYears(-dataYearOffset + yearOffset);
if (this.timezone !== null) {
// See: https://code.google.com/archive/p/datejs/wikis/APIDocumentation.wiki
var /** @type {?} */ offsetHours = -Math.floor(date.getTimezoneOffset() / 60);
var /** @type {?} */ offsetMins = -(date.getTimezoneOffset() % 60);
var /** @type {?} */ curOffset = offsetHours * 100 + offsetMins;
if (typeof this.timezone === 'string') {
// Set by timezone name
var /** @type {?} */ tz = DateTimeUtils.parseTimeZone(this.timezone);
// date.setTimezone(this.timezone);
date.setTimezoneOffset(2 * curOffset - tz);
}
else if (typeof this.timezone === 'number') {
// Set by timezone offset
// getTimezoneOffset() returns offset in minutes according to UTC
// setTimezoneOffset() accept number in format 0700, -0800
date.setTimezoneOffset(2 * curOffset - this.timezone);
}
}
if (this.pattern !== null && this.pattern !== undefined) {
return date.toString(this.pattern);
}
else {
return date.toString(DEFAULT_PATTERN);
}
};
/**
* @param {?} data
* @return {?}
*/
DateFormatter.prototype.parse = /**
* @param {?} data
* @return {?}
*/
function (data) {
if (data === null || typeof data === 'undefined') {
return null;
}
return Date.parse(data);
};
/**
* @return {?}
*/
DateFormatter.prototype.getDataYearOffset = /**
* @return {?}
*/
function () {
return this.dataYearOffset;
};
/**
* @param {?} offset
* @return {?}
*/
DateFormatter.prototype.setDataYearOffset = /**
* @param {?} offset
* @return {?}
*/
function (offset) {
this.dataYearOffset = offset;
};
/**
* @return {?}
*/
DateFormatter.prototype.getPattern = /**
* @return {?}
*/
function () {
return this.pattern;
};
/**
* @param {?} pattern
* @return {?}
*/
DateFormatter.prototype.setPattern = /**
* @param {?} pattern
* @return {?}
*/
function (pattern) {
this.pattern = pattern;
};
/**
* @return {?}
*/
DateFormatter.prototype.getYearOffset = /**
* @return {?}
*/
function () {
return this.yearOffset;
};
/**
* @param {?} offset
* @return {?}
*/
DateFormatter.prototype.setYearOffset = /**
* @param {?} offset
* @return {?}
*/
function (offset) {
this.yearOffset = offset;
};
/**
* @return {?}
*/
DateFormatter.prototype.getTimeZone = /**
* @return {?}
*/
function () {
return this.timezone;
};
/**
* @param {?} timezone
* @return {?}
*/
DateFormatter.prototype.setTimeZone = /**
* @param {?} timezone
* @return {?}
*/
function (timezone) {
this.timezone = timezone;
};
/**
* @param {?} args
* @return {?}
*/
DateFormatter.prototype.parseToOptions = /**
* @param {?} args
* @return {?}
*/
function (args) {
var /** @type {?} */ pattern = undefined;
var /** @type {?} */ timezone = undefined;
var /** @type {?} */ yearOffset = undefined;
var /** @type {?} */ dataYearOffset = undefined;
if (args !== null && typeof args !== 'undefined') {
if (args.length > 0) {
pattern = args[0];
}
if (args.length > 1) {
timezone = args[1];
}
if (args.length > 2) {
yearOffset = args[2];
}
if (args.length > 3) {
dataYearOffset = args[3];
}
else {
dataYearOffset = yearOffset;
}
}
return {
pattern: pattern,
timezone: timezone,
yearOffset: yearOffset,
dataYearOffset: dataYearOffset
};
};
DateFormatter.NAME = NAME;
DateFormatter.DEFAULT_DATA_YEAR_OFFSET = DEFAULT_DATA_YEAR_OFFSET;
DateFormatter.DEFAULT_PATTERN = DEFAULT_PATTERN;
DateFormatter.DEFAULT_YEAR_OFFSET = DEFAULT_YEAR_OFFSET;
tslib_1.__decorate([
Option()
// Offset to gregorian calendar year
// Ex: Bhuddist calendar is offset = 543
,
tslib_1.__metadata("design:type", Number)
], DateFormatter.prototype, "dataYearOffset", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], DateFormatter.prototype, "pattern", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Number)
], DateFormatter.prototype, "yearOffset", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Object)
], DateFormatter.prototype, "timezone", void 0);
return DateFormatter;
}(AbstractPipeFormatter));
export { DateFormatter };
function DateFormatter_tsickle_Closure_declarations() {
/** @type {?} */
DateFormatter.NAME;
/** @type {?} */
DateFormatter.DEFAULT_DATA_YEAR_OFFSET;
/** @type {?} */
DateFormatter.DEFAULT_PATTERN;
/** @type {?} */
DateFormatter.DEFAULT_YEAR_OFFSET;
/** @type {?} */
DateFormatter.prototype.dataYearOffset;
/** @type {?} */
DateFormatter.prototype.pattern;
/** @type {?} */
DateFormatter.prototype.yearOffset;
/** @type {?} */
DateFormatter.prototype.timezone;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0ZUZvcm1hdHRlci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL2Zvcm1hdHRlci9EYXRlRm9ybWF0dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUl2RCxxQkFBTSxJQUFJLEdBQVcsTUFBTSxDQUFDO0FBRTVCLHFCQUFNLHdCQUF3QixHQUFXLENBQUMsQ0FBQztBQUMzQyxxQkFBTSxlQUFlLEdBQVcscUJBQXFCLENBQUM7QUFDdEQscUJBQU0sbUJBQW1CLEdBQVcsQ0FBQyxDQUFDOztJQUVILHlDQUFxQjtJQWtCdEQ7ZUFDRSxrQkFBTSxJQUFJLENBQUM7S0FDWjs7Ozs7SUFFTSw4QkFBTTs7OztjQUFDLElBQVM7UUFDckIscUJBQUksSUFBSSxHQUFTLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFcEQsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ2pELE1BQU0sQ0FBQyxJQUFJLENBQUM7U0FDYjtRQUVELHFCQUFJLGNBQWMsR0FBVyxDQUFDLENBQUM7UUFDL0IsRUFBRSxDQUFDLENBQUMsT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFDdEUsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7YUFD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O1FBRXZFLE1BQU0sRUFBRTtRQUNULG9DQUFvQztRQUNwQyx3Q0FBd0M7Ozs7O1FBRXZDLE1BQU0sRUFBRTs7OztRQUVSLE1BQU0sRUFBRTs7OztRQUVSLE1BQU0sRUFBRTs7O3dCQTNCWDtFQVltQyxxQkFBcUI7U0FBM0MsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0UGlwZUZvcm1hdHRlciB9IGZyb20gJy4vQWJzdHJhY3RQaXBlRm9ybWF0dGVyJztcclxuaW1wb3J0IHsgT3B0aW9uIH0gZnJvbSAnLi4vZGVjb3JhdG9yL09wdGlvbi5kZWNvcmF0b3InO1xyXG5pbXBvcnQgeyBEYXRlVGltZVV0aWxzIH0gZnJvbSAnLi4vdXRpbHMvRGF0ZVRpbWVVdGlscyc7XHJcbmltcG9ydCB7IFBobG94QXBwSW5mb1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgUGhsb3hBcHBJbmZvIH0gZnJvbSAnLi4vbW9kZWwvUGhsb3hBcHBJbmZvJztcclxuXHJcbmNvbnN0IE5BTUU6IHN0cmluZyA9ICdkYXRlJztcclxuXHJcbmNvbnN0IERFRkFVTFRfREFUQV9ZRUFSX09GRlNFVDogbnVtYmVyID0gMDtcclxuY29uc3QgREVGQVVMVF9QQVRURVJOOiBzdHJpbmcgPSAnZGQvTU0veXl5eSBISDptbTpzcyc7XHJcbmNvbnN0IERFRkFVTFRfWUVBUl9PRkZTRVQ6IG51bWJlciA9IDA7XHJcblxyXG5leHBvcnQgY2xhc3MgRGF0ZUZvcm1hdHRlciBleHRlbmRzIEFic3RyYWN0UGlwZUZvcm1hdHRlciB7XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTkFNRTogc3RyaW5nID0gTkFNRTtcclxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfREFUQV9ZRUFSX09GRlNFVDogbnVtYmVyID0gREVGQVVMVF9EQVRBX1lFQVJfT0ZGU0VUO1xyXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9QQVRURVJOOiBzdHJpbmcgPSBERUZBVUxUX1BBVFRFUk47XHJcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBERUZBVUxUX1lFQVJfT0ZGU0VUOiBudW1iZXIgPSBERUZBVUxUX1lFQVJfT0ZGU0VUO1xyXG5cclxuICBAT3B0aW9uKClcclxuICAvLyBPZmZzZXQgdG8gZ3JlZ29yaWFuIGNhbGVuZGFyIHllYXJcclxuICAvLyBFeDogQmh1ZGRpc3QgY2FsZW5kYXIgaXMgb2Zmc2V0ID0gNTQzXHJcbiAgcHJpdmF0ZSBkYXRhWWVhck9mZnNldDogbnVtYmVyO1xyXG4gIEBPcHRpb24oKVxyXG4gIHByaXZhdGUgcGF0dGVybjogc3RyaW5nO1xyXG4gIEBPcHRpb24oKVxyXG4gIHByaXZhdGUgeWVhck9mZnNldDogbnVtYmVyO1xyXG4gIEBPcHRpb24oKVxyXG4gIHByaXZhdGUgdGltZXpvbmU6IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBzdXBlcihOQU1FKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmb3JtYXQoZGF0YTogYW55KTogc3RyaW5nIHtcclxuICAgIGxldCBkYXRlOiBEYXRlID0gRGF0ZVRpbWVVdGlscy5nZXREYXRlRnJvbUFueShkYXRhKTtcclxuXHJcbiAgICBpZiAoZGF0ZSA9PT0gbnVsbCB8fCB0eXBlb2YgZGF0ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGRhdGFZZWFyT2Zmc2V0OiBudW1iZXIgPSAwO1xyXG4gICAgaWYgKHR5cGVvZiBkYXRhICE9PSAnbnVtYmVyJyAmJiAhKGRhdGEgaW5zdGFuY2VvZiBEYXRlKSkge1xyXG4gICAgICBpZiAodGhpcy5kYXRhWWVhck9mZnNldCAhPT0gbnVsbCAmJiB0aGlzLmRhdGFZZWFyT2Zmc2V0ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBkYXRhWWVhck9mZnNldCA9IHRoaXMuZGF0YVllYXJPZmZzZXQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZGF0YVllYXJPZmZzZXQgPSBERUZBVUxUX0RBVEFfWUVBUl9PRkZTRVQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgeWVhck9mZnNldDogbnVtYmVyID0gdGhpcy55ZWFyT2Zmc2V0O1xyXG4gICAgaWYgKHllYXJPZmZzZXQgPT09IG51bGwgfHwgeWVhck9mZnNldCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHllYXJPZmZzZXQgPSBERUZBVUxUX1lFQVJfT0ZGU0VUO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEJyb3dzZXIncyBkYXRlIGFwaSB3aWxsIG9ubHkgcGFyc2UgYXMgZ3JlZ29yaWFuIGNhbGVuZGFyXHJcbiAgICAvLyBTbywgd2UndmUgdG8gXCItZGF0ZVllYXJPZmZzZXQgdGhlbiArIHllYXJPZmZzZXQgYmFja1wiLlxyXG4gICAgZGF0ZS5hZGRZZWFycygtZGF0YVllYXJPZmZzZXQgKyB5ZWFyT2Zmc2V0KTtcclxuXHJcbiAgICBpZiAodGhpcy50aW1lem9uZSAhPT0gbnVsbCkge1xyXG4gICAgICAvLyBTZWU6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL2FyY2hpdmUvcC9kYXRlanMvd2lraXMvQVBJRG9jdW1lbnRhdGlvbi53aWtpXHJcblxyXG4gICAgICBsZXQgb2Zmc2V0SG91cnM6IG51bWJlciA9IC1NYXRoLmZsb29yKGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSAvIDYwKTtcclxuICAgICAgbGV0IG9mZnNldE1pbnM6IG51bWJlciA9IC0oZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpICUgNjApO1xyXG5cclxuICAgICAgbGV0IGN1ck9mZnNldDogbnVtYmVyID0gb2Zmc2V0SG91cnMgKiAxMDAgKyBvZmZzZXRNaW5zO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiB0aGlzLnRpbWV6b25lID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIC8vIFNldCBieSB0aW1lem9uZSBuYW1lXHJcblxyXG4gICAgICAgIGxldCB0ejogbnVtYmVyID0gRGF0ZVRpbWVVdGlscy5wYXJzZVRpbWVab25lKHRoaXMudGltZXpvbmUpO1xyXG4gICAgICAgIC8vIGRhdGUuc2V0VGltZXpvbmUodGhpcy50aW1lem9uZSk7XHJcbiAgICAgICAgZGF0ZS5zZXRUaW1lem9uZU9mZnNldCgyICogY3VyT2Zmc2V0IC0gdHopO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLnRpbWV6b25lID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgIC8vIFNldCBieSB0aW1lem9uZSBvZmZzZXRcclxuXHJcbiAgICAgICAgLy8gZ2V0VGltZXpvbmVPZmZzZXQoKSByZXR1cm5zIG9mZnNldCBpbiBtaW51dGVzIGFjY29yZGluZyB0byBVVENcclxuXHJcbiAgICAgICAgLy8gc2V0VGltZXpvbmVPZmZzZXQoKSBhY2NlcHQgbnVtYmVyIGluIGZvcm1hdCAwNzAwLCAtMDgwMFxyXG4gICAgICAgIGRhdGUuc2V0VGltZXpvbmVPZmZzZXQoMiAqIGN1ck9mZnNldCAtIHRoaXMudGltZXpvbmUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucGF0dGVybiAhPT0gbnVsbCAmJiB0aGlzLnBhdHRlcm4gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gZGF0ZS50b1N0cmluZyh0aGlzLnBhdHRlcm4pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGRhdGUudG9TdHJpbmcoREVGQVVMVF9QQVRURVJOKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBwYXJzZShkYXRhOiBzdHJpbmcpOiBEYXRlIHtcclxuICAgIGlmIChkYXRhID09PSBudWxsIHx8IHR5cGVvZiBkYXRhID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gRGF0ZS5wYXJzZShkYXRhKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXREYXRhWWVhck9mZnNldCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YVllYXJPZmZzZXQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RGF0YVllYXJPZmZzZXQob2Zmc2V0OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuZGF0YVllYXJPZmZzZXQgPSBvZmZzZXQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UGF0dGVybigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMucGF0dGVybjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRQYXR0ZXJuKHBhdHRlcm46IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5wYXR0ZXJuID0gcGF0dGVybjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRZZWFyT2Zmc2V0KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy55ZWFyT2Zmc2V0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFllYXJPZmZzZXQob2Zmc2V0OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMueWVhck9mZnNldCA9IG9mZnNldDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRUaW1lWm9uZSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMudGltZXpvbmU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0VGltZVpvbmUodGltZXpvbmU6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy50aW1lem9uZSA9IHRpbWV6b25lO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHBhcnNlVG9PcHRpb25zKGFyZ3M6IGFueVtdKTogYW55IHtcclxuICAgIGxldCBwYXR0ZXJuOiBzdHJpbmcgPSB1bmRlZmluZWQ7XHJcbiAgICBsZXQgdGltZXpvbmU6IGFueSA9IHVuZGVmaW5lZDtcclxuICAgIGxldCB5ZWFyT2Zmc2V0OiBudW1iZXIgPSB1bmRlZmluZWQ7XHJcbiAgICBsZXQgZGF0YVllYXJPZmZzZXQ6IG51bWJlciA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICBpZiAoYXJncyAhPT0gbnVsbCAmJiB0eXBlb2YgYXJncyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHBhdHRlcm4gPSBhcmdzWzBdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICB0aW1lem9uZSA9IGFyZ3NbMV07XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMikge1xyXG4gICAgICAgIHllYXJPZmZzZXQgPSBhcmdzWzJdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDMpIHtcclxuICAgICAgICBkYXRhWWVhck9mZnNldCA9IGFyZ3NbM107XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZGF0YVllYXJPZmZzZXQgPSB5ZWFyT2Zmc2V0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcGF0dGVybjogcGF0dGVybixcclxuICAgICAgdGltZXpvbmU6IHRpbWV6b25lLFxyXG4gICAgICB5ZWFyT2Zmc2V0OiB5ZWFyT2Zmc2V0LFxyXG4gICAgICBkYXRhWWVhck9mZnNldDogZGF0YVllYXJPZmZzZXRcclxuICAgIH07XHJcbiAgfVxyXG59XHJcbiJdfQ==