'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); exports.default = void 0; function _fakeTimers() { const data = require('@sinonjs/fake-timers'); _fakeTimers = function () { return data; }; return data; } function _jestMessageUtil() { const data = require('jest-message-util'); _jestMessageUtil = function () { return data; }; return data; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } class FakeTimers { constructor({global, config, maxLoops}) { _defineProperty(this, '_clock', void 0); _defineProperty(this, '_config', void 0); _defineProperty(this, '_fakingTime', void 0); _defineProperty(this, '_global', void 0); _defineProperty(this, '_fakeTimers', void 0); _defineProperty(this, '_maxLoops', void 0); this._global = global; this._config = config; this._maxLoops = maxLoops || 100000; this._fakingTime = false; this._fakeTimers = (0, _fakeTimers().withGlobal)(global); } clearAllTimers() { if (this._fakingTime) { this._clock.reset(); } } dispose() { this.useRealTimers(); } runAllTimers() { if (this._checkFakeTimers()) { this._clock.runAll(); } } runOnlyPendingTimers() { if (this._checkFakeTimers()) { this._clock.runToLast(); } } advanceTimersToNextTimer(steps = 1) { if (this._checkFakeTimers()) { for (let i = steps; i > 0; i--) { this._clock.next(); // Fire all timers at this point: https://github.com/sinonjs/fake-timers/issues/250 this._clock.tick(0); if (this._clock.countTimers() === 0) { break; } } } } advanceTimersByTime(msToRun) { if (this._checkFakeTimers()) { this._clock.tick(msToRun); } } runAllTicks() { if (this._checkFakeTimers()) { // @ts-expect-error this._clock.runMicrotasks(); } } useRealTimers() { if (this._fakingTime) { this._clock.uninstall(); this._fakingTime = false; } } useFakeTimers() { if (!this._fakingTime) { const toFake = Object.keys(this._fakeTimers.timers); this._clock = this._fakeTimers.install({ loopLimit: this._maxLoops, now: Date.now(), toFake }); this._fakingTime = true; } } reset() { if (this._checkFakeTimers()) { const {now} = this._clock; this._clock.reset(); this._clock.setSystemTime(now); } } setSystemTime(now) { if (this._checkFakeTimers()) { this._clock.setSystemTime(now); } } getRealSystemTime() { return Date.now(); } getTimerCount() { if (this._checkFakeTimers()) { return this._clock.countTimers(); } return 0; } _checkFakeTimers() { if (!this._fakingTime) { this._global.console.warn( 'A function to advance timers was called but the timers API is not ' + 'mocked with fake timers. Call `jest.useFakeTimers()` in this test or ' + 'enable fake timers globally by setting `"timers": "fake"` in the ' + 'configuration file\nStack Trace:\n' + (0, _jestMessageUtil().formatStackTrace)( new Error().stack, this._config, { noStackTrace: false } ) ); } return this._fakingTime; } } exports.default = FakeTimers;