@@ -11,6 +11,8 @@ const {
11
11
DateNow,
12
12
FunctionPrototypeApply,
13
13
FunctionPrototypeBind,
14
+ ObjectDefineProperty,
15
+ ObjectGetOwnPropertyDescriptor,
14
16
Promise,
15
17
SymbolAsyncIterator,
16
18
SymbolDispose,
@@ -239,11 +241,26 @@ class MockTimers {
239
241
toFake : {
240
242
__proto__ : null ,
241
243
setTimeout : ( ) => {
242
- this . #realSetTimeout = globalThis . setTimeout ;
243
- this . #realClearTimeout = globalThis . clearTimeout ;
244
- this . #realTimersSetTimeout = nodeTimers . setTimeout ;
245
- this . #realTimersClearTimeout = nodeTimers . clearTimeout ;
246
- this . #realPromisifiedSetTimeout = nodeTimersPromises . setTimeout ;
244
+ this . #realSetTimeout = ObjectGetOwnPropertyDescriptor (
245
+ globalThis ,
246
+ 'setTimeout' ,
247
+ ) ;
248
+ this . #realClearTimeout = ObjectGetOwnPropertyDescriptor (
249
+ globalThis ,
250
+ 'clearTimeout' ,
251
+ ) ;
252
+ this . #realTimersSetTimeout = ObjectGetOwnPropertyDescriptor (
253
+ nodeTimers ,
254
+ 'setTimeout' ,
255
+ ) ;
256
+ this . #realTimersClearTimeout = ObjectGetOwnPropertyDescriptor (
257
+ nodeTimers ,
258
+ 'clearTimeout' ,
259
+ ) ;
260
+ this . #realPromisifiedSetTimeout = ObjectGetOwnPropertyDescriptor (
261
+ nodeTimersPromises ,
262
+ 'setTimeout' ,
263
+ ) ;
247
264
248
265
globalThis . setTimeout = this . #setTimeout;
249
266
globalThis . clearTimeout = this . #clearTimeout;
@@ -257,11 +274,26 @@ class MockTimers {
257
274
) ;
258
275
} ,
259
276
setInterval : ( ) => {
260
- this . #realSetInterval = globalThis . setInterval ;
261
- this . #realClearInterval = globalThis . clearInterval ;
262
- this . #realTimersSetInterval = nodeTimers . setInterval ;
263
- this . #realTimersClearInterval = nodeTimers . clearInterval ;
264
- this . #realPromisifiedSetInterval = nodeTimersPromises . setInterval ;
277
+ this . #realSetInterval = ObjectGetOwnPropertyDescriptor (
278
+ globalThis ,
279
+ 'setInterval' ,
280
+ ) ;
281
+ this . #realClearInterval = ObjectGetOwnPropertyDescriptor (
282
+ globalThis ,
283
+ 'clearInterval' ,
284
+ ) ;
285
+ this . #realTimersSetInterval = ObjectGetOwnPropertyDescriptor (
286
+ nodeTimers ,
287
+ 'setInterval' ,
288
+ ) ;
289
+ this . #realTimersClearInterval = ObjectGetOwnPropertyDescriptor (
290
+ nodeTimers ,
291
+ 'clearInterval' ,
292
+ ) ;
293
+ this . #realPromisifiedSetInterval = ObjectGetOwnPropertyDescriptor (
294
+ nodeTimersPromises ,
295
+ 'setInterval' ,
296
+ ) ;
265
297
266
298
globalThis . setInterval = this . #setInterval;
267
299
globalThis . clearInterval = this . #clearInterval;
@@ -275,10 +307,26 @@ class MockTimers {
275
307
) ;
276
308
} ,
277
309
setImmediate : ( ) => {
278
- this . #realSetImmediate = globalThis . setImmediate ;
279
- this . #realClearImmediate = globalThis . clearImmediate ;
280
- this . #realTimersSetImmediate = nodeTimers . setImmediate ;
281
- this . #realTimersClearImmediate = nodeTimers . clearImmediate ;
310
+ this . #realSetImmediate = ObjectGetOwnPropertyDescriptor (
311
+ globalThis ,
312
+ 'setImmediate' ,
313
+ ) ;
314
+ this . #realClearImmediate = ObjectGetOwnPropertyDescriptor (
315
+ globalThis ,
316
+ 'clearImmediate' ,
317
+ ) ;
318
+ this . #realTimersSetImmediate = ObjectGetOwnPropertyDescriptor (
319
+ nodeTimers ,
320
+ 'setImmediate' ,
321
+ ) ;
322
+ this . #realTimersClearImmediate = ObjectGetOwnPropertyDescriptor (
323
+ nodeTimers ,
324
+ 'clearImmediate' ,
325
+ ) ;
326
+ this . #realPromisifiedSetImmediate = ObjectGetOwnPropertyDescriptor (
327
+ nodeTimersPromises ,
328
+ 'setImmediate' ,
329
+ ) ;
282
330
283
331
globalThis . setImmediate = this . #setImmediate;
284
332
globalThis . clearImmediate = this . #clearImmediate;
@@ -295,31 +343,85 @@ class MockTimers {
295
343
toReal : {
296
344
__proto__ : null ,
297
345
setTimeout : ( ) => {
298
- globalThis . setTimeout = this . #realSetTimeout;
299
- globalThis . clearTimeout = this . #realClearTimeout;
300
-
301
- nodeTimers . setTimeout = this . #realTimersSetTimeout;
302
- nodeTimers . clearTimeout = this . #realTimersClearTimeout;
303
-
304
- nodeTimersPromises . setTimeout = this . #realPromisifiedSetTimeout;
346
+ ObjectDefineProperty (
347
+ globalThis ,
348
+ 'setTimeout' ,
349
+ this . #realSetTimeout,
350
+ ) ;
351
+ ObjectDefineProperty (
352
+ globalThis ,
353
+ 'clearTimeout' ,
354
+ this . #realClearTimeout,
355
+ ) ;
356
+ ObjectDefineProperty (
357
+ nodeTimers ,
358
+ 'setTimeout' ,
359
+ this . #realSetTimeout,
360
+ ) ;
361
+ ObjectDefineProperty (
362
+ nodeTimers ,
363
+ 'clearTimeout' ,
364
+ this . #realTimersClearTimeout,
365
+ ) ;
366
+ ObjectDefineProperty (
367
+ nodeTimersPromises ,
368
+ 'setTimeout' ,
369
+ this . #realPromisifiedSetTimeout,
370
+ ) ;
305
371
} ,
306
372
setInterval : ( ) => {
307
- globalThis . setInterval = this . #realSetInterval;
308
- globalThis . clearInterval = this . #realClearInterval;
309
-
310
- nodeTimers . setInterval = this . #realTimersSetInterval;
311
- nodeTimers . clearInterval = this . #realTimersClearInterval;
312
-
313
- nodeTimersPromises . setInterval = this . #realPromisifiedSetInterval;
373
+ ObjectDefineProperty (
374
+ globalThis ,
375
+ 'setInterval' ,
376
+ this . #realSetInterval,
377
+ ) ;
378
+ ObjectDefineProperty (
379
+ globalThis ,
380
+ 'clearInterval' ,
381
+ this . #realClearInterval,
382
+ ) ;
383
+ ObjectDefineProperty (
384
+ nodeTimers ,
385
+ 'setInterval' ,
386
+ this . #realTimersSetInterval,
387
+ ) ;
388
+ ObjectDefineProperty (
389
+ nodeTimers ,
390
+ 'clearInterval' ,
391
+ this . #realTimersClearInterval,
392
+ ) ;
393
+ ObjectDefineProperty (
394
+ nodeTimersPromises ,
395
+ 'setInterval' ,
396
+ this . #realPromisifiedSetInterval,
397
+ ) ;
314
398
} ,
315
399
setImmediate : ( ) => {
316
- globalThis . setImmediate = this . #realSetImmediate;
317
- globalThis . clearImmediate = this . #realClearImmediate;
318
-
319
- nodeTimers . setImmediate = this . #realTimersSetImmediate;
320
- nodeTimers . clearImmediate = this . #realTimersClearImmediate;
321
-
322
- nodeTimersPromises . setImmediate = this . #realPromisifiedSetImmediate;
400
+ ObjectDefineProperty (
401
+ globalThis ,
402
+ 'setImmediate' ,
403
+ this . #realSetImmediate,
404
+ ) ;
405
+ ObjectDefineProperty (
406
+ globalThis ,
407
+ 'clearImmediate' ,
408
+ this . #realClearImmediate,
409
+ ) ;
410
+ ObjectDefineProperty (
411
+ nodeTimers ,
412
+ 'setImmediate' ,
413
+ this . #realTimersSetImmediate,
414
+ ) ;
415
+ ObjectDefineProperty (
416
+ nodeTimers ,
417
+ 'clearImmediate' ,
418
+ this . #realTimersClearImmediate,
419
+ ) ;
420
+ ObjectDefineProperty (
421
+ nodeTimersPromises ,
422
+ 'setImmediate' ,
423
+ this . #realPromisifiedSetImmediate,
424
+ ) ;
323
425
} ,
324
426
} ,
325
427
} ;
0 commit comments