@alauda-fe/common
Version:
Alauda frontend team common codes.
115 lines • 14.5 kB
JavaScript
/**
* @packageDocumentation
* @module utils
*/
import { ChangeDetectorRef, Injectable, Pipe, } from '@angular/core';
import dayjs from 'dayjs';
import { Subject, takeUntil } from 'rxjs';
import { TranslateService } from '../../translate/public-api';
import { DATE_FORMAT, DATE_TIME_FORMAT } from '../constants/public-api';
import { TimeService } from '../services/public-api';
import { FIELD_NOT_AVAILABLE_PLACEHOLDER, isFieldNotAvailable, } from './field-not-available.pipe';
import * as i0 from "@angular/core";
import * as i1 from "../services/public-api";
import * as i2 from "../../translate/public-api";
const MILLISECONDS_SECOND = 1000;
const MILLISECONDS_MINUTE = MILLISECONDS_SECOND * 60;
const MILLISECONDS_HOUR = MILLISECONDS_MINUTE * 60;
const MILLISECONDS_DAY = MILLISECONDS_HOUR * 24;
const MILLISECONDS_WEEK = MILLISECONDS_DAY * 7;
export class RelativeTimePipe {
constructor(cdr, time, translate) {
this.cdr = cdr;
this.time = time;
this.translate = translate;
this.destroy$$ = new Subject();
this.translate.locale$
.pipe(takeUntil(this.destroy$$))
.subscribe(() => this.cdr.markForCheck());
}
ngOnDestroy() {
this.destroy$$.next();
this.destroy$$.complete();
if (this.timerId) {
clearTimeout(this.timerId);
}
}
transform(value) {
if (isFieldNotAvailable(value)) {
return FIELD_NOT_AVAILABLE_PLACEHOLDER;
}
const currentTime = Date.now();
const givenTime = dayjs(value).valueOf();
const distance = currentTime - givenTime;
if (distance >= MILLISECONDS_WEEK) {
return this.time.format(value, DATE_FORMAT);
}
this.checkDistance(distance);
return distance < MILLISECONDS_MINUTE
? this.translate.get('just_now')
: this.time.distance(givenTime, currentTime);
}
checkDistance(distance) {
if (distance < MILLISECONDS_MINUTE) {
return this.startTimer(MILLISECONDS_SECOND);
}
if (distance < MILLISECONDS_HOUR) {
return this.startTimer(MILLISECONDS_MINUTE);
}
if (distance < MILLISECONDS_DAY) {
return this.startTimer(MILLISECONDS_HOUR);
}
return this.startTimer(MILLISECONDS_DAY);
}
startTimer(timeout) {
clearTimeout(this.timerId);
this.timerId = window.setTimeout(() => this.cdr.markForCheck(), timeout);
}
static { this.ɵfac = function RelativeTimePipe_Factory(t) { return new (t || RelativeTimePipe)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef, 16), i0.ɵɵdirectiveInject(i1.TimeService, 16), i0.ɵɵdirectiveInject(i2.TranslateService, 16)); }; }
static { this.ɵpipe = /*@__PURE__*/ i0.ɵɵdefinePipe({ name: "aclRelativeTime", type: RelativeTimePipe, pure: false, standalone: true }); }
}
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(RelativeTimePipe, [{
type: Pipe,
args: [{ name: 'aclRelativeTime', pure: false, standalone: true }]
}], () => [{ type: i0.ChangeDetectorRef }, { type: i1.TimeService }, { type: i2.TranslateService }], null); })();
export class DateTimePipe {
constructor(time) {
this.time = time;
}
transform(value, utc = false) {
if (!value?.toString().trim()) {
return FIELD_NOT_AVAILABLE_PLACEHOLDER;
}
return this.time.format(utc ? dayjs.utc(value) : value, this.format);
}
static { this.ɵfac = function DateTimePipe_Factory(t) { return new (t || DateTimePipe)(i0.ɵɵinject(i1.TimeService)); }; }
static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: DateTimePipe, factory: DateTimePipe.ɵfac }); }
}
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DateTimePipe, [{
type: Injectable
}], () => [{ type: i1.TimeService }], null); })();
export class StandardTimePipe extends DateTimePipe {
constructor() {
super(...arguments);
this.format = DATE_TIME_FORMAT;
}
static { this.ɵfac = /*@__PURE__*/ (() => { let ɵStandardTimePipe_BaseFactory; return function StandardTimePipe_Factory(t) { return (ɵStandardTimePipe_BaseFactory || (ɵStandardTimePipe_BaseFactory = i0.ɵɵgetInheritedFactory(StandardTimePipe)))(t || StandardTimePipe); }; })(); }
static { this.ɵpipe = /*@__PURE__*/ i0.ɵɵdefinePipe({ name: "aclStandardTime", type: StandardTimePipe, pure: true, standalone: true }); }
}
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(StandardTimePipe, [{
type: Pipe,
args: [{ name: 'aclStandardTime', standalone: true }]
}], null, null); })();
export class StandardDatePipe extends DateTimePipe {
constructor() {
super(...arguments);
this.format = DATE_FORMAT;
}
static { this.ɵfac = /*@__PURE__*/ (() => { let ɵStandardDatePipe_BaseFactory; return function StandardDatePipe_Factory(t) { return (ɵStandardDatePipe_BaseFactory || (ɵStandardDatePipe_BaseFactory = i0.ɵɵgetInheritedFactory(StandardDatePipe)))(t || StandardDatePipe); }; })(); }
static { this.ɵpipe = /*@__PURE__*/ i0.ɵɵdefinePipe({ name: "aclStandardDate", type: StandardDatePipe, pure: true, standalone: true }); }
}
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(StandardDatePipe, [{
type: Pipe,
args: [{ name: 'aclStandardDate', standalone: true }]
}], null, null); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL2NvcmUvcGlwZXMvdGltZS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsVUFBVSxFQUVWLElBQUksR0FFTCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEtBQXFCLE1BQU0sT0FBTyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFckQsT0FBTyxFQUNMLCtCQUErQixFQUMvQixtQkFBbUIsR0FDcEIsTUFBTSw0QkFBNEIsQ0FBQzs7OztBQUVwQyxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQztBQUNqQyxNQUFNLG1CQUFtQixHQUFHLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztBQUNyRCxNQUFNLGlCQUFpQixHQUFHLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztBQUNuRCxNQUFNLGdCQUFnQixHQUFHLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztBQUNoRCxNQUFNLGlCQUFpQixHQUFHLGdCQUFnQixHQUFHLENBQUMsQ0FBQztBQUcvQyxNQUFNLE9BQU8sZ0JBQWdCO0lBSzNCLFlBQ21CLEdBQXNCLEVBQ3RCLElBQWlCLEVBQ2pCLFNBQTJCO1FBRjNCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLFNBQUksR0FBSixJQUFJLENBQWE7UUFDakIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFQN0IsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFTL0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPO2FBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQy9CLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFMUIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFpQjtRQUN6QixJQUFJLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0IsT0FBTywrQkFBK0IsQ0FBQztRQUN6QyxDQUFDO1FBRUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQy9CLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUV6QyxNQUFNLFFBQVEsR0FBRyxXQUFXLEdBQUcsU0FBUyxDQUFDO1FBRXpDLElBQUksUUFBUSxJQUFJLGlCQUFpQixFQUFFLENBQUM7WUFDbEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUVELElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFN0IsT0FBTyxRQUFRLEdBQUcsbUJBQW1CO1lBQ25DLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7WUFDaEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRVMsYUFBYSxDQUFDLFFBQWdCO1FBQ3RDLElBQUksUUFBUSxHQUFHLG1CQUFtQixFQUFFLENBQUM7WUFDbkMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUVELElBQUksUUFBUSxHQUFHLGlCQUFpQixFQUFFLENBQUM7WUFDakMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUVELElBQUksUUFBUSxHQUFHLGdCQUFnQixFQUFFLENBQUM7WUFDaEMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFTyxVQUFVLENBQUMsT0FBZTtRQUNoQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzNFLENBQUM7aUZBaEVVLGdCQUFnQjt5RkFBaEIsZ0JBQWdCOztpRkFBaEIsZ0JBQWdCO2NBRDVCLElBQUk7ZUFBQyxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUU7O0FBcUVoRSxNQUFNLE9BQWdCLFlBQVk7SUFHaEMsWUFBNkIsSUFBaUI7UUFBakIsU0FBSSxHQUFKLElBQUksQ0FBYTtJQUFHLENBQUM7SUFFbEQsU0FBUyxDQUFDLEtBQWlCLEVBQUUsR0FBRyxHQUFHLEtBQUs7UUFDdEMsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQzlCLE9BQU8sK0JBQStCLENBQUM7UUFDekMsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7NkVBWG1CLFlBQVk7dUVBQVosWUFBWSxXQUFaLFlBQVk7O2lGQUFaLFlBQVk7Y0FEakMsVUFBVTs7QUFnQlgsTUFBTSxPQUFPLGdCQUFpQixTQUFRLFlBQVk7SUFEbEQ7O1FBRVcsV0FBTSxHQUFHLGdCQUFnQixDQUFDO0tBQ3BDO29PQUZZLGdCQUFnQixTQUFoQixnQkFBZ0I7eUZBQWhCLGdCQUFnQjs7aUZBQWhCLGdCQUFnQjtjQUQ1QixJQUFJO2VBQUMsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRTs7QUFNbkQsTUFBTSxPQUFPLGdCQUFpQixTQUFRLFlBQVk7SUFEbEQ7O1FBRVcsV0FBTSxHQUFHLFdBQVcsQ0FBQztLQUMvQjtvT0FGWSxnQkFBZ0IsU0FBaEIsZ0JBQWdCO3lGQUFoQixnQkFBZ0I7O2lGQUFoQixnQkFBZ0I7Y0FENUIsSUFBSTtlQUFDLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICogQG1vZHVsZSB1dGlsc1xuICovXG5cbmltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBJbmplY3RhYmxlLFxuICBPbkRlc3Ryb3ksXG4gIFBpcGUsXG4gIFBpcGVUcmFuc2Zvcm0sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IGRheWpzLCB7IENvbmZpZ1R5cGUgfSBmcm9tICdkYXlqcyc7XG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3RyYW5zbGF0ZS9wdWJsaWMtYXBpJztcbmltcG9ydCB7IERBVEVfRk9STUFULCBEQVRFX1RJTUVfRk9STUFUIH0gZnJvbSAnLi4vY29uc3RhbnRzL3B1YmxpYy1hcGknO1xuaW1wb3J0IHsgVGltZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wdWJsaWMtYXBpJztcblxuaW1wb3J0IHtcbiAgRklFTERfTk9UX0FWQUlMQUJMRV9QTEFDRUhPTERFUixcbiAgaXNGaWVsZE5vdEF2YWlsYWJsZSxcbn0gZnJvbSAnLi9maWVsZC1ub3QtYXZhaWxhYmxlLnBpcGUnO1xuXG5jb25zdCBNSUxMSVNFQ09ORFNfU0VDT05EID0gMTAwMDtcbmNvbnN0IE1JTExJU0VDT05EU19NSU5VVEUgPSBNSUxMSVNFQ09ORFNfU0VDT05EICogNjA7XG5jb25zdCBNSUxMSVNFQ09ORFNfSE9VUiA9IE1JTExJU0VDT05EU19NSU5VVEUgKiA2MDtcbmNvbnN0IE1JTExJU0VDT05EU19EQVkgPSBNSUxMSVNFQ09ORFNfSE9VUiAqIDI0O1xuY29uc3QgTUlMTElTRUNPTkRTX1dFRUsgPSBNSUxMSVNFQ09ORFNfREFZICogNztcblxuQFBpcGUoeyBuYW1lOiAnYWNsUmVsYXRpdmVUaW1lJywgcHVyZTogZmFsc2UsIHN0YW5kYWxvbmU6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBSZWxhdGl2ZVRpbWVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHByaXZhdGUgdGltZXJJZDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRpbWU6IFRpbWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICApIHtcbiAgICB0aGlzLnRyYW5zbGF0ZS5sb2NhbGUkXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCQpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3kkJC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JCQuY29tcGxldGUoKTtcblxuICAgIGlmICh0aGlzLnRpbWVySWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVySWQpO1xuICAgIH1cbiAgfVxuXG4gIHRyYW5zZm9ybSh2YWx1ZTogQ29uZmlnVHlwZSkge1xuICAgIGlmIChpc0ZpZWxkTm90QXZhaWxhYmxlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIEZJRUxEX05PVF9BVkFJTEFCTEVfUExBQ0VIT0xERVI7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGdpdmVuVGltZSA9IGRheWpzKHZhbHVlKS52YWx1ZU9mKCk7XG5cbiAgICBjb25zdCBkaXN0YW5jZSA9IGN1cnJlbnRUaW1lIC0gZ2l2ZW5UaW1lO1xuXG4gICAgaWYgKGRpc3RhbmNlID49IE1JTExJU0VDT05EU19XRUVLKSB7XG4gICAgICByZXR1cm4gdGhpcy50aW1lLmZvcm1hdCh2YWx1ZSwgREFURV9GT1JNQVQpO1xuICAgIH1cblxuICAgIHRoaXMuY2hlY2tEaXN0YW5jZShkaXN0YW5jZSk7XG5cbiAgICByZXR1cm4gZGlzdGFuY2UgPCBNSUxMSVNFQ09ORFNfTUlOVVRFXG4gICAgICA/IHRoaXMudHJhbnNsYXRlLmdldCgnanVzdF9ub3cnKVxuICAgICAgOiB0aGlzLnRpbWUuZGlzdGFuY2UoZ2l2ZW5UaW1lLCBjdXJyZW50VGltZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2hlY2tEaXN0YW5jZShkaXN0YW5jZTogbnVtYmVyKSB7XG4gICAgaWYgKGRpc3RhbmNlIDwgTUlMTElTRUNPTkRTX01JTlVURSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhcnRUaW1lcihNSUxMSVNFQ09ORFNfU0VDT05EKTtcbiAgICB9XG5cbiAgICBpZiAoZGlzdGFuY2UgPCBNSUxMSVNFQ09ORFNfSE9VUikge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhcnRUaW1lcihNSUxMSVNFQ09ORFNfTUlOVVRFKTtcbiAgICB9XG5cbiAgICBpZiAoZGlzdGFuY2UgPCBNSUxMSVNFQ09ORFNfREFZKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGFydFRpbWVyKE1JTExJU0VDT05EU19IT1VSKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdGFydFRpbWVyKE1JTExJU0VDT05EU19EQVkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydFRpbWVyKHRpbWVvdXQ6IG51bWJlcikge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVySWQpO1xuICAgIHRoaXMudGltZXJJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpLCB0aW1lb3V0KTtcbiAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRGF0ZVRpbWVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIGFic3RyYWN0IGZvcm1hdDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgdGltZTogVGltZVNlcnZpY2UpIHt9XG5cbiAgdHJhbnNmb3JtKHZhbHVlOiBDb25maWdUeXBlLCB1dGMgPSBmYWxzZSkge1xuICAgIGlmICghdmFsdWU/LnRvU3RyaW5nKCkudHJpbSgpKSB7XG4gICAgICByZXR1cm4gRklFTERfTk9UX0FWQUlMQUJMRV9QTEFDRUhPTERFUjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50aW1lLmZvcm1hdCh1dGMgPyBkYXlqcy51dGModmFsdWUpIDogdmFsdWUsIHRoaXMuZm9ybWF0KTtcbiAgfVxufVxuXG5AUGlwZSh7IG5hbWU6ICdhY2xTdGFuZGFyZFRpbWUnLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgU3RhbmRhcmRUaW1lUGlwZSBleHRlbmRzIERhdGVUaW1lUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICBvdmVycmlkZSBmb3JtYXQgPSBEQVRFX1RJTUVfRk9STUFUO1xufVxuXG5AUGlwZSh7IG5hbWU6ICdhY2xTdGFuZGFyZERhdGUnLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgU3RhbmRhcmREYXRlUGlwZSBleHRlbmRzIERhdGVUaW1lUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICBvdmVycmlkZSBmb3JtYXQgPSBEQVRFX0ZPUk1BVDtcbn1cbiJdfQ==