@openhps/core
Version:
Open Hybrid Positioning System - Core component
87 lines • 3.01 kB
JavaScript
var TimeService_1;
import { __decorate, __metadata } from "tslib";
import { Service } from './Service';
import { TimeUnit } from '../utils';
import { SerializableMember, SerializableMemberFunction, SerializableObject } from '../data/decorators';
/**
* Time service for retrieving the current time.
*/
let TimeService = TimeService_1 = class TimeService extends Service {
constructor(timeCallback, unit = TimeUnit.MILLISECOND) {
super();
this._timeCallback = timeCallback;
this._timeUnit = unit;
this.uid = this.constructor.name;
// Specify the default time callback used by class initializers
if (!TimeService_1._defaultTimeCallback) {
TimeService_1.initialize();
}
// If time callback is undefined, use the default
if (!this._timeCallback) {
this._timeCallback = TimeService_1.now;
this._timeUnit = TimeService_1.getUnit();
} else {
TimeService_1._defaultTimeCallback = timeCallback;
TimeService_1._defaultUnit = unit;
}
}
get isDefault() {
return TimeService_1._defaultTimeCallback === this._timeCallback;
}
set isDefault(value) {
if (value) {
TimeService_1._defaultTimeCallback = this._timeCallback;
TimeService_1._defaultUnit = this._timeUnit;
}
}
static initialize() {
TimeService_1._defaultTimeCallback = Date.now;
TimeService_1._defaultUnit = TimeUnit.MILLISECOND;
// Specify the default time callback used by class initializers
try {
const microtime = require('microtime'); // eslint-disable-line
// Check if function exists, needed for webpack
if (microtime.now) {
TimeService_1._defaultTimeCallback = microtime.now;
TimeService_1._defaultUnit = TimeUnit.MICROSECOND;
}
} catch (ex) {
return;
}
}
/**
* Get the current time
* @returns {number} Current time
*/
getTime() {
return this._timeCallback();
}
/**
* Get the time unit
* @returns {TimeUnit} Unit of time service
*/
getUnit() {
return this._timeUnit;
}
/**
* Get the current time
* @returns {number} Current time in a specific unit
*/
static now() {
if (!TimeService_1._defaultTimeCallback) {
TimeService_1.initialize();
}
return TimeService_1._defaultTimeCallback();
}
static getUnit() {
if (!TimeService_1._defaultTimeCallback) {
TimeService_1.initialize();
}
return TimeService_1._defaultUnit;
}
};
__decorate([SerializableMemberFunction(), __metadata("design:type", Function)], TimeService.prototype, "_timeCallback", void 0);
__decorate([SerializableMember(), __metadata("design:type", TimeUnit)], TimeService.prototype, "_timeUnit", void 0);
__decorate([SerializableMember(), __metadata("design:type", Boolean), __metadata("design:paramtypes", [Boolean])], TimeService.prototype, "isDefault", null);
TimeService = TimeService_1 = __decorate([SerializableObject(), __metadata("design:paramtypes", [Function, TimeUnit])], TimeService);
export { TimeService };