UNPKG

la-gregory

Version:
67 lines 1.87 kB
let nowDate = undefined; // performance.now() = nowDate + performanceOffset let performanceOffset = 0; const now = () => nowDate; const mockDateClass = (OriginalDate) => { // if undefined, use real date, or else mock date const mockNow = () => (now() === undefined ? OriginalDate.now() : now()); // eslint-disable-next-line @typescript-eslint/no-explicit-any function Date(...args) { const dateArgs = args.length === 0 ? [mockNow()] : args; const instance = new OriginalDate(...dateArgs); // @ts-ignore Object.setPrototypeOf(instance, Object.getPrototypeOf(this)); return instance; } Date.prototype = Object.create(OriginalDate.prototype); Object.setPrototypeOf(Date, OriginalDate); Date.now = () => mockNow(); Date.__OriginalDate__ = OriginalDate; return Date; }; const MockDate = mockDateClass(Date); if (global.window) { // dom env global.window.Date = MockDate; global.window.performance.now = function () { return MockDate.now() + performanceOffset; }; } else { // node / native env global.Date = MockDate; require('perf_hooks').performance.now = function () { return MockDate.now() + performanceOffset; }; } /** * Move date by offset `ms` */ export const advanceDate = (ms) => { if (nowDate === undefined) { nowDate = ms; } else { nowDate += ms; } }; /** * Set date to absolute value */ export const setDate = (dateOrMs) => { nowDate = dateOrMs instanceof Date ? dateOrMs.getTime() : dateOrMs; }; /** * Clear date mock */ export const clearDateMock = () => { nowDate = undefined; performanceOffset = 0; }; /** * Set offset between performance.now() and Date.now() */ export const setPerformanceOffset = (offset) => { performanceOffset = offset; }; //# sourceMappingURL=index.js.map