UNPKG

ng-timeparser

Version:

[![npm version](https://badge.fury.io/js/ng-timeparser.svg)](https://badge.fury.io/js/ng-timeparser) [![Build Status](https://travis-ci.org/feeloor/ng-timeparser.svg?branch=master)](https://travis-ci.org/feeloor/ng-timeparser)

222 lines (221 loc) 22.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import { Injectable } from '@angular/core'; var TimeParserService = /** @class */ (function () { function TimeParserService() { } /** * Parses given time-string to a correct 4 digit time or empty if it's an invalid time * @param {?} inputTime Time-string to parse * @param {?=} militaryTime Use military time (24 hour format) * @return {?} */ TimeParserService.prototype.parseTime = /** * Parses given time-string to a correct 4 digit time or empty if it's an invalid time * @param {?} inputTime Time-string to parse * @param {?=} militaryTime Use military time (24 hour format) * @return {?} */ function (inputTime, militaryTime) { if (militaryTime === void 0) { militaryTime = false; } var /** @type {?} */ returnTime = ''; var /** @type {?} */ correctFormat = false; var /** @type {?} */ time = inputTime; // English (12 hours pattern) if (!militaryTime) { if (new RegExp(/^[2-9][0-9].*$/).test(time) && (time.match(/\d/g) || []).length !== 3) { // Matches 22 or 22 PM but not 321 or 321 PM/AM correctFormat = false; time = ''; } else if (new RegExp(/^[0-1][0-9]:[0-5][0-9].*$/).test(time)) { // Matches for example 07:30 or 07:30 PM/AM correctFormat = true; time = this.addAMorPM(time, 0, 5); } else if (new RegExp(/^[0-1][0-9][0-5][0-9].*$/).test(time)) { // Matches for example 0730 or 0730 PM/AM correctFormat = true; time = this.addAMorPM(time, 0, 4); } else if (new RegExp(/^[0-9]:[0-5][0-9].*$/).test(time)) { // Matches for example 9:33 and 9:33 PM/AM correctFormat = true; time = "0" + this.addAMorPM(time, 0, 4); } else if (new RegExp(/^[0-9][0-5][0-9].*$/).test(time)) { // Matches for example 933 and 933 PM/AM correctFormat = true; time = "0" + this.addAMorPM(time, 0, 3); } else if (new RegExp(/^[0-1][0-2].*$/).test(time)) { // Matches 12 or 12 PM/AM correctFormat = true; time = this.addAMorPM(time, 0, 2); } else if (new RegExp(/^[0-9].*$/).test(time)) { // Matches for example 3 and 3 PM/AM correctFormat = true; time = this.addAMorPM(time, 0, 1); } // French / Military Time (24 hours pattern) } else { if (new RegExp(/^[0-2][0-9]:[0-5][0-9]$/).test(time)) { // Matches 17:30 correctFormat = true; } else if (new RegExp(/^[0-2][0-9][0-5][0-9]$/).test(time)) { // Matches 1730 correctFormat = true; } else if (new RegExp(/^[0-2][0-9]:[0-5]$/).test(time)) { // Matches 22:3 correctFormat = true; time = time + "0"; } else if (new RegExp(/^[0-2][0-9][0-5]$/).test(time)) { // Matches 223 correctFormat = true; time = time + "0"; } else if (new RegExp(/^[0-9]:[0-5][0-9]$/).test(time)) { // Matches 7:30 correctFormat = true; time = "0" + time; } else if (new RegExp(/^[0-9][0-5][0-9]$/).test(time)) { // Matches 730 correctFormat = true; time = "0" + time; } else if (new RegExp(/^[0-2][0-9]/).test(time)) { // Matches 19 correctFormat = true; time = time + "00"; } else if (new RegExp(/^[0-9]/).test(time)) { // Matches 9 correctFormat = true; time = "0" + time + "00"; } } // Create return data if (correctFormat) { time = time.toUpperCase(); time = this.makeTime4Digit(time); returnTime = this.addColonIfMissing(time); if (militaryTime) { returnTime = returnTime.substring(0, 5); } } else { returnTime = ''; } return returnTime; }; /** * Parses a valid time to a 4 digit time * For example 4 PM to 04:00 PM or 4:30 PM to 04:30 PM * @param {?} time Time-string to parse to 4 digit * @return {?} */ TimeParserService.prototype.makeTime4Digit = /** * Parses a valid time to a 4 digit time * For example 4 PM to 04:00 PM or 4:30 PM to 04:30 PM * @param {?} time Time-string to parse to 4 digit * @return {?} */ function (time) { var /** @type {?} */ preAMorPM = ''; var /** @type {?} */ parsed = time; // Get any existing AM/PM if (new RegExp(/PM/i).test(time)) { preAMorPM = 'PM'; parsed = parsed.replace(/PM/i, ''); } else if (new RegExp(/AM/i).test(time)) { preAMorPM = 'AM'; parsed = parsed.replace(/AM/i, ''); } parsed = parsed.replace(':', ''); parsed = parsed.replace(/ /g, ''); if (parsed.length === 1) { parsed = "0" + parsed + "00"; } else if (parsed.length === 2) { parsed = parsed + "00"; } else if (parsed.length === 3) { if (new RegExp(/^[0-1][0-9][0-5]/).test(parsed)) { parsed = parsed + "0"; } else if (new RegExp(/^[0-9][0-5][0-9]/).test(parsed)) { parsed = "0" + parsed; } } return "" + parsed + (preAMorPM ? ' ' + preAMorPM : ''); }; /** * Adds a colon if it's missing to given time-string * For example 0400 to 04:00 * @param {?} time Time-string to add missing colon to * @return {?} */ TimeParserService.prototype.addColonIfMissing = /** * Adds a colon if it's missing to given time-string * For example 0400 to 04:00 * @param {?} time Time-string to add missing colon to * @return {?} */ function (time) { if (time.indexOf(':') === -1) { return time.substring(0, 2) + ":" + time.substring(2); } return time; }; /** * Takes start and end of time-string and then adds correct AM/PM * @param {?} time Time-string to add AM or PM too * @param {?} start Where time starts in string * @param {?} end Where time ends in string * @return {?} */ TimeParserService.prototype.addAMorPM = /** * Takes start and end of time-string and then adds correct AM/PM * @param {?} time Time-string to add AM or PM too * @param {?} start Where time starts in string * @param {?} end Where time ends in string * @return {?} */ function (time, start, end) { if (new RegExp(/PM/i).test(time)) { return time.substring(start, end) + " PM"; } else if (new RegExp(/AM/i).test(time)) { return time.substring(start, end) + " AM"; } else { return time.substring(start, end) + " PM"; } }; TimeParserService.decorators = [ { type: Injectable }, ]; /** @nocollapse */ TimeParserService.ctorParameters = function () { return []; }; return TimeParserService; }()); export { TimeParserService }; function TimeParserService_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ TimeParserService.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ TimeParserService.ctorParameters; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1wYXJzZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXRpbWVwYXJzZXIvIiwic291cmNlcyI6WyJzcmMvYXBwL3RpbWUtcGFyc2VyL3NlcnZpY2VzL3RpbWUtcGFyc2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0lBS3pDO0tBQWlCOzs7Ozs7O0lBT1YscUNBQVM7Ozs7OztjQUFDLFNBQWlCLEVBQUUsWUFBNkI7UUFBN0IsNkJBQUEsRUFBQSxvQkFBNkI7UUFDL0QscUJBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNwQixxQkFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzFCLHFCQUFJLElBQUksR0FBRyxTQUFTLENBQUM7O1FBR3JCLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUNsQixFQUFFLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7O2dCQUV0RixhQUFhLEdBQUcsS0FBSyxDQUFDO2dCQUN0QixJQUFJLEdBQUcsRUFBRSxDQUFDO2FBQ1g7WUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDOztnQkFFOUQsYUFBYSxHQUFHLElBQUksQ0FBQztnQkFDckIsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNuQztZQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLE1B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QUFNLENBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLFFBQUssQ0FBQztTQUMzQzs7O2dCQTdKSixVQUFVOzs7OzRCQUZYOztTQUdhLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRpbWVQYXJzZXJTZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgZ2l2ZW4gdGltZS1zdHJpbmcgdG8gYSBjb3JyZWN0IDQgZGlnaXQgdGltZSBvciBlbXB0eSBpZiBpdCdzIGFuIGludmFsaWQgdGltZVxuICAgKiBAcGFyYW0gaW5wdXRUaW1lIFRpbWUtc3RyaW5nIHRvIHBhcnNlXG4gICAqIEBwYXJhbSBtaWxpdGFyeVRpbWUgVXNlIG1pbGl0YXJ5IHRpbWUgKDI0IGhvdXIgZm9ybWF0KVxuICAgKi9cbiAgcHVibGljIHBhcnNlVGltZShpbnB1dFRpbWU6IHN0cmluZywgbWlsaXRhcnlUaW1lOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xuICAgIGxldCByZXR1cm5UaW1lID0gJyc7XG4gICAgbGV0IGNvcnJlY3RGb3JtYXQgPSBmYWxzZTtcbiAgICBsZXQgdGltZSA9IGlucHV0VGltZTtcblxuICAgIC8vIEVuZ2xpc2ggKDEyIGhvdXJzIHBhdHRlcm4pXG4gICAgaWYgKCFtaWxpdGFyeVRpbWUpIHtcbiAgICAgIGlmIChuZXcgUmVnRXhwKC9eWzItOV1bMC05XS4qJC8pLnRlc3QodGltZSkgJiYgKHRpbWUubWF0Y2goL1xcZC9nKSB8fCBbXSkubGVuZ3RoICE9PSAzKSB7XG4gICAgICAgIC8vIE1hdGNoZXMgMjIgb3IgMjIgUE0gYnV0IG5vdCAzMjEgb3IgMzIxIFBNL0FNXG4gICAgICAgIGNvcnJlY3RGb3JtYXQgPSBmYWxzZTtcbiAgICAgICAgdGltZSA9ICcnO1xuICAgICAgfSBlbHNlIGlmIChuZXcgUmVnRXhwKC9eWzAtMV1bMC05XTpbMC01XVswLTldLiokLykudGVzdCh0aW1lKSkge1xuICAgICAgICAvLyBNYXRjaGVzIGZvciBleGFtcGxlIDA3OjMwIG9yIDA3OjMwIFBNL0FNXG4gICAgICAgIGNvcnJlY3RGb3JtYXQgPSB0cnVlO1xuICAgICAgICB0aW1lID0gdGhpcy5hZGRBTW9yUE0odGltZSwgMCwgNSk7XG4gICAgICB9IGVsc2UgaWYgKG5ldyBSZWdFeHAoL15bMC0xXVswLTldWzAtNV1bMC05XS4qJC8pLnRlc3QodGltZSkpIHtcbiAgICAgICAgLy8gTWF0Y2hlcyBmb3IgZXhhbXBsZSAwNzMwIG9yIDA3MzAgUE0vQU1cbiAgICAgICAgY29ycmVjdEZvcm1hdCA9IHRydWU7XG4gICAgICAgIHRpbWUgPSB0aGlzLmFkZEFNb3JQTSh0aW1lLCAwLCA0KTtcbiAgICAgIH0gZWxzZSBpZiAobmV3IFJlZ0V4cCgvXlswLTldOlswLTVdWzAtOV0uKiQvKS50ZXN0KHRpbWUpKSB7XG4gICAgICAgIC8vIE1hdGNoZXMgZm9yIGV4YW1wbGUgOTozMyBhbmQgOTozMyBQTS9BTVxuICAgICAgICBjb3JyZWN0Rm9ybWF0ID0gdHJ1ZTtcbiAgICAgICAgdGltZSA9IGAwJHt0aGlzLmFkZEFNb3JQTSh0aW1lLCAwLCA0KX1gO1xuICAgICAgfSBlbHNlIGlmIChuZXcgUmVnRXhwKC9eWzAtOV1bMC01XVswLTldLiokLykudGVzdCh0aW1lKSkge1xuICAgICAgICAvLyBNYXRjaGVzIGZvciBleGFtcGxlIDkzMyBhbmQgOTMzIFBNL0FNXG4gICAgICAgIGNvcnJlY3RGb3JtYXQgPSB0cnVlO1xuICAgICAgICB0aW1lID0gYDAke3RoaXMuYWRkQU1vclBNKHRpbWUsIDAsIDMpfWA7XG4gICAgICB9IGVsc2UgaWYgKG5ldyBSZWdFeHAoL15bMC0xXVswLTJdLiokLykudGVzdCh0aW1lKSkge1xuICAgICAgICAvLyBNYXRjaGVzIDEyIG9yIDEyIFBNL0FNXG4gICAgICAgIGNvcnJlY3RGb3JtYXQgPSB0cnVlO1xuICAgICAgICB0aW1lID0gdGhpcy5hZGRBTW9yUE0odGltZSwgMCwgMik7XG4gICAgICB9IGVsc2UgaWYgKG5ldyBSZWdFeHAoL15bMC05XS4qJC8pLnRlc3QodGltZSkpIHtcbiAgICAgICAgLy8gTWF0Y2hlcyBmb3IgZXhhbXBsZSAzIGFuZCAzIFBNL0FNXG4gICAgICAgIGNvcnJlY3RGb3JtYXQgPSB0cnVlO1xuICAgICAgICB0aW1lID0gdGhpcy5hZGRBTW9yUE0odGltZSwgMCwgMSk7XG4gICAgICB9XG4gICAgICAvLyBGcmVuY2ggLyBNaWxpdGFyeSBUaW1lICgyNCBob3VycyBwYXR0ZXJuKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobmV3IFJlZ0V4cCgvXlswLTJdWzAtOV06WzAtNV1bMC05XSQvKS50ZXN0KHRpbWUpKSB7XG4gICAgICAgIC8vIE1hdGNoZXMgMTc6MzBcbiAgICAgICAgY29ycmVjdEZvcm1hdCA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKG5ldyBSZWdFeHAoL15bMC0yXVswLTldWzAtNV1bMC05XSQvKS50ZXN0KHRpbWUpKSB7XG4gICAgICAgIC8vIE1hdGNoZXMgMTczMFxuICAgICAgICBjb3JyZWN0Rm9ybWF0ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAobmV3IFJlZ0V4cCgvXlswLTJdWzAtOV06WzAtNV0kLykudGVzdCh0aW1lKSkge1xuICAgICAgICAvLyBNYXRjaGVzIDIyOjNcbiAgICAgICAgY29ycmVjdEZvcm1hdCA9IHRydWU7XG4gICAgICAgIHRpbWUgPSBgJHt0aW1lfTBgO1xuICAgICAgfSBlbHNlIGlmIChuZXcgUmVnRXhwKC9eWzAtMl1bMC05XVswLTVdJC8pLnRlc3QodGltZSkpIHtcbiAgICAgICAgLy8gTWF0Y2hlcyAyMjNcbiAgICAgICAgY29ycmVjdEZvcm1hdCA9IHRydWU7XG4gICAgICAgIHRpbWUgPSBgJHt0aW1lfTBgO1xuICAgICAgfSBlbHNlIGlmIChuZXcgUmVnRXhwKC9eWzAtOV06WzAtNV1bMC05XSQvKS50ZXN0KHRpbWUpKSB7XG4gICAgICAgIC8vIE1hdGNoZXMgNzozMFxuICAgICAgICBjb3JyZWN0Rm9ybWF0ID0gdHJ1ZTtcbiAgICAgICAgdGltZSA9IGAwJHt0aW1lfWA7XG4gICAgICB9IGVsc2UgaWYgKG5ldyBSZWdFeHAoL15bMC05XVswLTVdWzAtOV0kLykudGVzdCh0aW1lKSkge1xuICAgICAgICAvLyBNYXRjaGVzIDczMFxuICAgICAgICBjb3JyZWN0Rm9ybWF0ID0gdHJ1ZTtcbiAgICAgICAgdGltZSA9IGAwJHt0aW1lfWA7XG4gICAgICB9IGVsc2UgaWYgKG5ldyBSZWdFeHAoL15bMC0yXVswLTldLykudGVzdCh0aW1lKSkge1xuICAgICAgICAvLyBNYXRjaGVzIDE5XG4gICAgICAgIGNvcnJlY3RGb3JtYXQgPSB0cnVlO1xuICAgICAgICB0aW1lID0gYCR7dGltZX0wMGA7XG4gICAgICB9IGVsc2UgaWYgKG5ldyBSZWdFeHAoL15bMC05XS8pLnRlc3QodGltZSkpIHtcbiAgICAgICAgLy8gTWF0Y2hlcyA5XG4gICAgICAgIGNvcnJlY3RGb3JtYXQgPSB0cnVlO1xuICAgICAgICB0aW1lID0gYDAke3RpbWV9MDBgO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENyZWF0ZSByZXR1cm4gZGF0YVxuICAgIGlmIChjb3JyZWN0Rm9ybWF0KSB7XG4gICAgICB0aW1lID0gdGltZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgdGltZSA9IHRoaXMubWFrZVRpbWU0RGlnaXQodGltZSk7XG4gICAgICByZXR1cm5UaW1lID0gdGhpcy5hZGRDb2xvbklmTWlzc2luZyh0aW1lKTtcblxuICAgICAgaWYgKG1pbGl0YXJ5VGltZSkge1xuICAgICAgICByZXR1cm5UaW1lID0gcmV0dXJuVGltZS5zdWJzdHJpbmcoMCwgNSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVyblRpbWUgPSAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0dXJuVGltZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgYSB2YWxpZCB0aW1lIHRvIGEgNCBkaWdpdCB0aW1lXG4gICAqIEZvciBleGFtcGxlIDQgUE0gdG8gMDQ6MDAgUE0gb3IgNDozMCBQTSB0byAwNDozMCBQTVxuICAgKiBAcGFyYW0gdGltZSBUaW1lLXN0cmluZyB0byBwYXJzZSB0byA0IGRpZ2l0XG4gICAqL1xuICBwcml2YXRlIG1ha2VUaW1lNERpZ2l0KHRpbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IHByZUFNb3JQTSA9ICcnO1xuICAgIGxldCBwYXJzZWQgPSB0aW1lO1xuXG4gICAgLy8gR2V0IGFueSBleGlzdGluZyBBTS9QTVxuICAgIGlmIChuZXcgUmVnRXhwKC9QTS9pKS50ZXN0KHRpbWUpKSB7XG4gICAgICBwcmVBTW9yUE0gPSAnUE0nO1xuICAgICAgcGFyc2VkID0gcGFyc2VkLnJlcGxhY2UoL1BNL2ksICcnKTtcbiAgICB9IGVsc2UgaWYgKG5ldyBSZWdFeHAoL0FNL2kpLnRlc3QodGltZSkpIHtcbiAgICAgIHByZUFNb3JQTSA9ICdBTSc7XG4gICAgICBwYXJzZWQgPSBwYXJzZWQucmVwbGFjZSgvQU0vaSwgJycpO1xuICAgIH1cblxuICAgIHBhcnNlZCA9IHBhcnNlZC5yZXBsYWNlKCc6JywgJycpO1xuICAgIHBhcnNlZCA9IHBhcnNlZC5yZXBsYWNlKC8gL2csICcnKTtcbiAgICBpZiAocGFyc2VkLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcGFyc2VkID0gYDAke3BhcnNlZH0wMGA7XG4gICAgfSBlbHNlIGlmIChwYXJzZWQubGVuZ3RoID09PSAyKSB7XG4gICAgICBwYXJzZWQgPSBgJHtwYXJzZWR9MDBgO1xuICAgIH0gZWxzZSBpZiAocGFyc2VkLmxlbmd0aCA9PT0gMykge1xuICAgICAgaWYgKG5ldyBSZWdFeHAoL15bMC0xXVswLTldWzAtNV0vKS50ZXN0KHBhcnNlZCkpIHtcbiAgICAgICAgcGFyc2VkID0gYCR7cGFyc2VkfTBgO1xuICAgICAgfSBlbHNlIGlmIChuZXcgUmVnRXhwKC9eWzAtOV1bMC01XVswLTldLykudGVzdChwYXJzZWQpKSB7XG4gICAgICAgIHBhcnNlZCA9IGAwJHtwYXJzZWR9YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYCR7cGFyc2VkfSR7cHJlQU1vclBNID8gJyAnICsgcHJlQU1vclBNIDogJyd9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgY29sb24gaWYgaXQncyBtaXNzaW5nIHRvIGdpdmVuIHRpbWUtc3RyaW5nXG4gICAqIEZvciBleGFtcGxlIDA0MDAgdG8gMDQ6MDBcbiAgICogQHBhcmFtIHRpbWUgVGltZS1zdHJpbmcgdG8gYWRkIG1pc3NpbmcgY29sb24gdG9cbiAgICovXG4gIHByaXZhdGUgYWRkQ29sb25JZk1pc3NpbmcodGltZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodGltZS5pbmRleE9mKCc6JykgPT09IC0xKSB7XG4gICAgICByZXR1cm4gYCR7dGltZS5zdWJzdHJpbmcoMCwgMil9OiR7dGltZS5zdWJzdHJpbmcoMil9YDtcbiAgICB9XG4gICAgcmV0dXJuIHRpbWU7XG4gIH1cblxuICAvKipcbiAgICogVGFrZXMgc3RhcnQgYW5kIGVuZCBvZiB0aW1lLXN0cmluZyBhbmQgdGhlbiBhZGRzIGNvcnJlY3QgQU0vUE1cbiAgICogQHBhcmFtIHRpbWUgVGltZS1zdHJpbmcgdG8gYWRkIEFNIG9yIFBNIHRvb1xuICAgKiBAcGFyYW0gc3RhcnQgV2hlcmUgdGltZSBzdGFydHMgaW4gc3RyaW5nXG4gICAqIEBwYXJhbSBlbmQgV2hlcmUgdGltZSBlbmRzIGluIHN0cmluZ1xuICAgKi9cbiAgcHJpdmF0ZSBhZGRBTW9yUE0odGltZTogc3RyaW5nLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKG5ldyBSZWdFeHAoL1BNL2kpLnRlc3QodGltZSkpIHtcbiAgICAgIHJldHVybiBgJHt0aW1lLnN1YnN0cmluZyhzdGFydCwgZW5kKX0gUE1gO1xuICAgIH0gZWxzZSBpZiAobmV3IFJlZ0V4cCgvQU0vaSkudGVzdCh0aW1lKSkge1xuICAgICAgcmV0dXJuIGAke3RpbWUuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpfSBBTWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgJHt0aW1lLnN1YnN0cmluZyhzdGFydCwgZW5kKX0gUE1gO1xuICAgIH1cbiAgfVxufVxuIl19