@nsalaun/ng-logger
Version:
Angular logger service
132 lines • 16.8 kB
JavaScript
/**
* @license
* Copyright Noémi Salaün 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/noemi-salaun/ng-logger/blob/master/LICENSE
*/
import { Inject, Injectable, InjectionToken } from '@angular/core';
import { Level } from './level.enum';
import * as i0 from "@angular/core";
import * as i1 from "./level.enum";
/**
* Created by Noémi Salaün on 09/17/2016.
*/
/**
* The token to provide the log {@link Level}.
*/
export const LOGGER_LEVEL = new InjectionToken('LoggerLevel');
/**
* A logger service that provide the same functions as {@link console}.
* The logger is binded to the console, so the Web Console shows the correct file and line number of the original call.
*/
export class Logger {
constructor(level) {
this._level = level;
// console.log
if (this._level >= Level.LOG && console && console.log) {
this.log = console.log.bind(console);
}
else {
this.log = () => {
// Nothing
};
}
// console.debug
if (this._level >= Level.DEBUG && console && console.debug) {
this.debug = console.debug.bind(console);
}
else {
this.debug = () => {
// Nothing
};
}
// console.info
if (this._level >= Level.INFO && console && console.info) {
this.info = console.info.bind(console);
}
else {
this.info = () => {
// Nothing
};
}
// console.warn
if (this._level >= Level.WARN && console && console.warn) {
this.warn = console.warn.bind(console);
}
else {
this.warn = () => {
// Nothing
};
}
// console.error
if (this._level >= Level.ERROR && console && console.error) {
this.error = console.error.bind(console);
}
else {
this.error = () => {
// Nothing
};
}
// console.group
if (this._level > Level.OFF && console && console.group) {
this.group = console.group.bind(console);
}
else {
this.group = () => {
// Nothing
};
}
// console.groupCollapsed
if (this._level > Level.OFF && console && console.groupCollapsed) {
this.groupCollapsed = console.groupCollapsed.bind(console);
}
else {
this.groupCollapsed = () => {
// Nothing
};
}
// console.groupEnd
if (this._level > Level.OFF && console && console.groupEnd) {
this.groupEnd = console.groupEnd.bind(console);
}
else {
this.groupEnd = () => {
// Nothing
};
}
// console.time
if (this._level >= Level.DEBUG && console && console.time) {
this.time = console.time.bind(console);
}
else {
this.time = () => {
// Nothing
};
}
// console.timeEnd
if (this._level >= Level.DEBUG && console && console.timeEnd) {
this.timeEnd = console.timeEnd.bind(console);
}
else {
this.timeEnd = () => {
// Nothing
};
}
}
/**
* Returns the log level.
*/
get level() {
return this._level;
}
}
Logger.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: Logger, deps: [{ token: LOGGER_LEVEL }], target: i0.ɵɵFactoryTarget.Injectable });
Logger.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: Logger });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: Logger, decorators: [{
type: Injectable
}], ctorParameters: function () { return [{ type: i1.Level, decorators: [{
type: Inject,
args: [LOGGER_LEVEL]
}] }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1sb2dnZXIvc3JjL2xpYi9sb2dnZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGNBQWMsQ0FBQzs7O0FBRXJDOztHQUVHO0FBRUg7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxjQUFjLENBQVEsYUFBYSxDQUFDLENBQUM7QUFFckU7OztHQUdHO0FBRUgsTUFBTSxPQUFPLE1BQU07SUF1RmpCLFlBQWtDLEtBQVk7UUFFNUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFFcEIsY0FBYztRQUNkLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFO1lBQ3RELElBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDdEM7YUFBTTtZQUNMLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFO2dCQUNkLFVBQVU7WUFDWixDQUFDLENBQUM7U0FDSDtRQUVELGdCQUFnQjtRQUNoQixJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLEtBQUssSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRTtZQUMxRCxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzFDO2FBQU07WUFDTCxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRTtnQkFDaEIsVUFBVTtZ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SUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUM5QzthQUFNO1lBQ0wsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUU7Z0JBQ2xCLFVBQVU7WUFDWixDQUFDLENBQUM7U0FDSDtJQUVILENBQUM7SUFyR0Q7O09BRUc7SUFDSCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQzs7bUdBckZVLE1BQU0sa0JBdUZHLFlBQVk7dUdBdkZyQixNQUFNOzJGQUFOLE1BQU07a0JBRGxCLFVBQVU7OzBCQXdGSSxNQUFNOzJCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgTm/DqW1pIFNhbGHDvG4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vbm9lbWktc2FsYXVuL25nLWxvZ2dlci9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGV2ZWwgfSBmcm9tICcuL2xldmVsLmVudW0nO1xuXG4vKipcbiAqIENyZWF0ZWQgYnkgTm/DqW1pIFNhbGHDvG4gb24gMDkvMTcvMjAxNi5cbiAqL1xuXG4vKipcbiAqIFRoZSB0b2tlbiB0byBwcm92aWRlIHRoZSBsb2cge0BsaW5rIExldmVsfS5cbiAqL1xuZXhwb3J0IGNvbnN0IExPR0dFUl9MRVZFTCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxMZXZlbD4oJ0xvZ2dlckxldmVsJyk7XG5cbi8qKlxuICogQSBsb2dnZXIgc2VydmljZSB0aGF0IHByb3ZpZGUgdGhlIHNhbWUgZnVuY3Rpb25zIGFzIHtAbGluayBjb25zb2xlfS5cbiAqIFRoZSBsb2dnZXIgaXMgYmluZGVkIHRvIHRoZSBjb25zb2xlLCBzbyB0aGUgV2ViIENvbnNvbGUgc2hvd3MgdGhlIGNvcnJlY3QgZmlsZSBhbmQgbGluZSBudW1iZXIgb2YgdGhlIG9yaWdpbmFsIGNhbGwuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBMb2dnZXIge1xuXG4gIC8qKlxuICAgKiBUaGUgbG9nIGxldmVsLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfbGV2ZWw6IExldmVsO1xuXG4gIC8qKlxuICAgKiBPdXRwdXRzIGEgbWVzc2FnZSB0byB0aGUgV2ViIENvbnNvbGUuXG4gICAqIEBwYXJhbSBtZXNzYWdlIEEgSmF2YVNjcmlwdCBzdHJpbmcgY29udGFpbmluZyB6ZXJvIG9yIG1vcmUgc3Vic3RpdHV0aW9uIHN0cmluZ3MuXG4gICAqIEBwYXJhbSBvcHRpb25hbFBhcmFtcyBBIGxpc3Qgb2YgSmF2YVNjcmlwdCBvYmplY3RzIHRvIG91dHB1dFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgT1IgSmF2YVNjcmlwdCBvYmplY3RzIHdpdGggd2hpY2ggdG8gcmVwbGFjZSBzdWJzdGl0dXRpb24gc3RyaW5ncyB3aXRoaW4gbWVzc2FnZS5cbiAgICovXG4gIGxvZzogKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSkgPT4gdm9pZDtcblxuICAvKipcbiAgICogT3V0cHV0cyBhIGRlYnVnZ2luZyBtZXNzYWdlIHRvIHRoZSBXZWIgQ29uc29sZS5cbiAgICogQHBhcmFtIG1lc3NhZ2UgQSBKYXZhU2NyaXB0IHN0cmluZyBjb250YWluaW5nIHplcm8gb3IgbW9yZSBzdWJzdGl0dXRpb24gc3RyaW5ncy5cbiAgICogQHBhcmFtIG9wdGlvbmFsUGFyYW1zIEEgbGlzdCBvZiBKYXZhU2NyaXB0IG9iamVjdHMgdG8gb3V0cHV0XG4gICAqICAgICAgICAgICAgICAgICAgICAgICBPUiBKYXZhU2NyaXB0IG9iamVjdHMgd2l0aCB3aGljaCB0byByZXBsYWNlIHN1YnN0aXR1dGlvbiBzdHJpbmdzIHdpdGhpbiBtZXNzYWdlLlxuICAgKi9cbiAgZGVidWc6IChtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIE91dHB1dHMgYW4gaW5mb3JtYXRpb25hbCBtZXNzYWdlIHRvIHRoZSBXZWIgQ29uc29sZS5cbiAgICogQHBhcmFtIG1lc3NhZ2UgQSBKYXZhU2NyaXB0IHN0cmluZyBjb250YWluaW5nIHplcm8gb3IgbW9yZSBzdWJzdGl0dXRpb24gc3RyaW5ncy5cbiAgICogQHBhcmFtIG9wdGlvbmFsUGFyYW1zIEEgbGlzdCBvZiBKYXZhU2NyaXB0IG9iamVjdHMgdG8gb3V0cHV0XG4gICAqICAgICAgICAgICAgICAgICAgICAgICBPUiBKYXZhU2NyaXB0IG9iamVjdHMgd2l0aCB3aGljaCB0byByZXBsYWNlIHN1YnN0aXR1dGlvbiBzdHJpbmdzIHdpdGhpbiBtZXNzYWdlLlxuICAgKi9cbiAgaW5mbzogKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSkgPT4gdm9pZDtcblxuICAvKipcbiAgICogT3V0cHV0cyBhIHdhcm5pbmcgbWVzc2FnZSB0byB0aGUgV2ViIENvbnNvbGUuXG4gICAqIEBwYXJhbSBtZXNzYWdlIEEgSmF2YVNjcmlwdCBzdHJpbmcgY29udGFpbmluZyB6ZXJvIG9yIG1vcmUgc3Vic3RpdHV0aW9uIHN0cmluZ3MuXG4gICAqIEBwYXJhbSBvcHRpb25hbFBhcmFtcyBBIGxpc3Qgb2YgSmF2YVNjcmlwdCBvYmplY3RzIHRvIG91dHB1dFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgT1IgSmF2YVNjcmlwdCBvYmplY3RzIHdpdGggd2hpY2ggdG8gcmVwbGFjZSBzdWJzdGl0dXRpb24gc3RyaW5ncyB3aXRoaW4gbWVzc2FnZS5cbiAgICovXG4gIHdhcm46IChtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIE91dHB1dHMgYW4gZXJyb3IgbWVzc2FnZSB0byB0aGUgV2ViIENvbnNvbGUuXG4gICAqIEBwYXJhbSBtZXNzYWdlIEEgSmF2YVNjcmlwdCBzdHJpbmcgY29udGFpbmluZyB6ZXJvIG9yIG1vcmUgc3Vic3RpdHV0aW9uIHN0cmluZ3MuXG4gICAqIEBwYXJhbSBvcHRpb25hbFBhcmFtcyBBIGxpc3Qgb2YgSmF2YVNjcmlwdCBvYmplY3RzIHRvIG91dHB1dFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgT1IgSmF2YVNjcmlwdCBvYmplY3RzIHdpdGggd2hpY2ggdG8gcmVwbGFjZSBzdWJzdGl0dXRpb24gc3RyaW5ncyB3aXRoaW4gbWVzc2FnZS5cbiAgICovXG4gIGVycm9yOiAobWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGlubGluZSBncm91cCBpbiB0aGUgV2ViIENvbnNvbGUgbG9nLlxuICAgKiBAcGFyYW0gZ3JvdXBUaXRsZSBBbiBvcHRpb25hbCB0aXRsZSBmb3IgdGhlIGdyb3VwLlxuICAgKi9cbiAgZ3JvdXA6IChncm91cFRpdGxlPzogc3RyaW5nKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGlubGluZSBncm91cCBpbiB0aGUgV2ViIENvbnNvbGUgbG9nIHRoYXQgaXMgaW5pdGlhbGx5IGNvbGxhcHNlZC5cbiAgICogQHBhcmFtIGdyb3VwVGl0bGUgQW4gb3B0aW9uYWwgdGl0bGUgZm9yIHRoZSBncm91cC5cbiAgICovXG4gIGdyb3VwQ29sbGFwc2VkOiAoZ3JvdXBUaXRsZT86IHN0cmluZykgPT4gdm9pZDtcblxuICAvKipcbiAgICogRXhpdHMgdGhlIGN1cnJlbnQgaW5saW5lIGdyb3VwIGluIHRoZSBXZWIgQ29uc29sZS5cbiAgICovXG4gIGdyb3VwRW5kOiAoKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBTdGFydHMgYSB0aW1lciB5b3UgY2FuIHVzZSB0byB0cmFjayBob3cgbG9uZyBhbiBvcGVyYXRpb24gdGFrZXMuXG4gICAqIEl0IHdvcmtzIG9ubHkgd2l0aCBsb2cge0BsaW5rIExldmVsfSBlcXVhbCBvciBoaWdoZXIgdGhhbiBERUJVRy5cbiAgICpcbiAgICogQHBhcmFtIHRpbWVyTmFtZSBUaGUgbmFtZSB0byBnaXZlIHRoZSBuZXcgdGltZXIuIFRoaXMgd2lsbCBpZGVudGlmeSB0aGUgdGltZXIuXG4gICAqL1xuICB0aW1lOiAodGltZXJOYW1lPzogc3RyaW5nKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBTdG9wcyBhIHRpbWVyIHRoYXQgd2FzIHByZXZpb3VzbHkgc3RhcnRlZCBieSBjYWxsaW5nIHtAbGluayBMb2dnZXIudGltZX0uXG4gICAqIEl0IHdvcmtzIG9ubHkgd2l0aCBsb2cge0BsaW5rIExldmVsfSBlcXVhbCBvciBoaWdoZXIgdGhhbiBERUJVRy5cbiAgICpcbiAgICogQHBhcmFtIHRpbWVyTmFtZSBUaGUgbmFtZSBvZiB0aGUgdGltZXIgdG8gc3RvcC4gT25jZSBzdG9wcGVkLCB0aGUgZWxhcHNlZCB0aW1lIGlzIGF1dG9tYXRpY2FsbHkgZGlzcGxheWVkIGluIHRoZSBXZWIgQ29uc29sZS5cbiAgICovXG4gIHRpbWVFbmQ6ICh0aW1lck5hbWU/OiBzdHJpbmcpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxvZyBsZXZlbC5cbiAgICovXG4gIGdldCBsZXZlbCgpOiBMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX2xldmVsO1xuICB9XG5cbiAgY29uc3RydWN0b3IoQEluamVjdChMT0dHRVJfTEVWRUwpIGxldmVsOiBMZXZlbCkge1xuXG4gICAgdGhpcy5fbGV2ZWwgPSBsZXZlbDtcblxuICAgIC8vIGNvbnNvbGUubG9nXG4gICAgaWYgKHRoaXMuX2xldmVsID49IExldmVsLkxPRyAmJiBjb25zb2xlICYmIGNvbnNvbGUubG9nKSB7XG4gICAgICB0aGlzLmxvZyA9IGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nID0gKCkgPT4ge1xuICAgICAgICAvLyBOb3RoaW5nXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIGNvbnNvbGUuZGVidWdcbiAgICBpZiAodGhpcy5fbGV2ZWwgPj0gTGV2ZWwuREVCVUcgJiYgY29uc29sZSAmJiBjb25zb2xlLmRlYnVnKSB7XG4gICAgICB0aGlzLmRlYnVnID0gY29uc29sZS5kZWJ1Zy5iaW5kKGNvbnNvbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlYnVnID0gKCkgPT4ge1xuICAgICAgICAvLyBOb3RoaW5nXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIGNvbnNvbGUuaW5mb1xuICAgIGlmICh0aGlzLl9sZXZlbCA+PSBMZXZlbC5JTkZPICYmIGNvbnNvbGUgJiYgY29uc29sZS5pbmZvKSB7XG4gICAgICB0aGlzLmluZm8gPSBjb25zb2xlLmluZm8uYmluZChjb25zb2xlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbmZvID0gKCkgPT4ge1xuICAgICAgICAvLyBOb3RoaW5nXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIGNvbnNvbGUud2FyblxuICAgIGlmICh0aGlzLl9sZXZlbCA+PSBMZXZlbC5XQVJOICYmIGNvbnNvbGUgJiYgY29uc29sZS53YXJuKSB7XG4gICAgICB0aGlzLndhcm4gPSBjb25zb2xlLndhcm4uYmluZChjb25zb2xlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy53YXJuID0gKCkgPT4ge1xuICAgICAgICAvLyBOb3RoaW5nXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIGNvbnNvbGUuZXJyb3JcbiAgICBpZiAodGhpcy5fbGV2ZWwgPj0gTGV2ZWwuRVJST1IgJiYgY29uc29sZSAmJiBjb25zb2xlLmVycm9yKSB7XG4gICAgICB0aGlzLmVycm9yID0gY29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVycm9yID0gKCkgPT4ge1xuICAgICAgICAvLyBOb3RoaW5nXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIGNvbnNvbGUuZ3JvdXBcbiAgICBpZiAodGhpcy5fbGV2ZWwgPiBMZXZlbC5PRkYgJiYgY29uc29sZSAmJiBjb25zb2xlLmdyb3VwKSB7XG4gICAgICB0aGlzLmdyb3VwID0gY29uc29sZS5ncm91cC5iaW5kKGNvbnNvbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdyb3VwID0gKCkgPT4ge1xuICAgICAgICAvLyBOb3RoaW5nXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWRcbiAgICBpZiAodGhpcy5fbGV2ZWwgPiBMZXZlbC5PRkYgJiYgY29uc29sZSAmJiBjb25zb2xlLmdyb3VwQ29sbGFwc2VkKSB7XG4gICAgICB0aGlzLmdyb3VwQ29sbGFwc2VkID0gY29uc29sZS5ncm91cENvbGxhcHNlZC5iaW5kKGNvbnNvbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdyb3VwQ29sbGFwc2VkID0gKCkgPT4ge1xuICAgICAgICAvLyBOb3RoaW5nXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIGNvbnNvbGUuZ3JvdXBFbmRcbiAgICBpZiAodGhpcy5fbGV2ZWwgPiBMZXZlbC5PRkYgJiYgY29uc29sZSAmJiBjb25zb2xlLmdyb3VwRW5kKSB7XG4gICAgICB0aGlzLmdyb3VwRW5kID0gY29uc29sZS5ncm91cEVuZC5iaW5kKGNvbnNvbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdyb3VwRW5kID0gKCkgPT4ge1xuICAgICAgICAvLyBOb3RoaW5nXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIGNvbnNvbGUudGltZVxuICAgIGlmICh0aGlzLl9sZXZlbCA+PSBMZXZlbC5ERUJVRyAmJiBjb25zb2xlICYmIGNvbnNvbGUudGltZSkge1xuICAgICAgdGhpcy50aW1lID0gY29uc29sZS50aW1lLmJpbmQoY29uc29sZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGltZSA9ICgpID0+IHtcbiAgICAgICAgLy8gTm90aGluZ1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBjb25zb2xlLnRpbWVFbmRcbiAgICBpZiAodGhpcy5fbGV2ZWwgPj0gTGV2ZWwuREVCVUcgJiYgY29uc29sZSAmJiBjb25zb2xlLnRpbWVFbmQpIHtcbiAgICAgIHRoaXMudGltZUVuZCA9IGNvbnNvbGUudGltZUVuZC5iaW5kKGNvbnNvbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRpbWVFbmQgPSAoKSA9PiB7XG4gICAgICAgIC8vIE5vdGhpbmdcbiAgICAgIH07XG4gICAgfVxuXG4gIH1cbn1cbiJdfQ==