154 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			154 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | 'use strict'; | ||
|  | 
 | ||
|  | function _vm() { | ||
|  |   const data = _interopRequireDefault(require('vm')); | ||
|  | 
 | ||
|  |   _vm = function _vm() { | ||
|  |     return data; | ||
|  |   }; | ||
|  | 
 | ||
|  |   return data; | ||
|  | } | ||
|  | 
 | ||
|  | function _jestMock() { | ||
|  |   const data = require('jest-mock'); | ||
|  | 
 | ||
|  |   _jestMock = function _jestMock() { | ||
|  |     return data; | ||
|  |   }; | ||
|  | 
 | ||
|  |   return data; | ||
|  | } | ||
|  | 
 | ||
|  | function _jestUtil() { | ||
|  |   const data = require('jest-util'); | ||
|  | 
 | ||
|  |   _jestUtil = function _jestUtil() { | ||
|  |     return data; | ||
|  |   }; | ||
|  | 
 | ||
|  |   return data; | ||
|  | } | ||
|  | 
 | ||
|  | function _fakeTimers() { | ||
|  |   const data = require('@jest/fake-timers'); | ||
|  | 
 | ||
|  |   _fakeTimers = function _fakeTimers() { | ||
|  |     return data; | ||
|  |   }; | ||
|  | 
 | ||
|  |   return data; | ||
|  | } | ||
|  | 
 | ||
|  | function _interopRequireDefault(obj) { | ||
|  |   return obj && obj.__esModule ? obj : {default: obj}; | ||
|  | } | ||
|  | 
 | ||
|  | 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 NodeEnvironment { | ||
|  |   constructor(config) { | ||
|  |     _defineProperty(this, 'context', void 0); | ||
|  | 
 | ||
|  |     _defineProperty(this, 'fakeTimers', void 0); | ||
|  | 
 | ||
|  |     _defineProperty(this, 'global', void 0); | ||
|  | 
 | ||
|  |     _defineProperty(this, 'moduleMocker', void 0); | ||
|  | 
 | ||
|  |     this.context = _vm().default.createContext(); | ||
|  | 
 | ||
|  |     const global = (this.global = _vm().default.runInContext( | ||
|  |       'this', | ||
|  |       Object.assign(this.context, config.testEnvironmentOptions) | ||
|  |     )); | ||
|  | 
 | ||
|  |     global.global = global; | ||
|  |     global.clearInterval = clearInterval; | ||
|  |     global.clearTimeout = clearTimeout; | ||
|  |     global.setInterval = setInterval; | ||
|  |     global.setTimeout = setTimeout; | ||
|  |     global.ArrayBuffer = ArrayBuffer; // URL and URLSearchParams are global in Node >= 10
 | ||
|  | 
 | ||
|  |     if (typeof URL !== 'undefined' && typeof URLSearchParams !== 'undefined') { | ||
|  |       /* global URL, URLSearchParams */ | ||
|  |       global.URL = URL; | ||
|  |       global.URLSearchParams = URLSearchParams; | ||
|  |     } // TextDecoder and TextDecoder are global in Node >= 11
 | ||
|  | 
 | ||
|  |     if ( | ||
|  |       typeof TextEncoder !== 'undefined' && | ||
|  |       typeof TextDecoder !== 'undefined' | ||
|  |     ) { | ||
|  |       /* global TextEncoder, TextDecoder */ | ||
|  |       global.TextEncoder = TextEncoder; | ||
|  |       global.TextDecoder = TextDecoder; | ||
|  |     } | ||
|  | 
 | ||
|  |     (0, _jestUtil().installCommonGlobals)(global, config.globals); | ||
|  |     this.moduleMocker = new (_jestMock()).ModuleMocker(global); | ||
|  | 
 | ||
|  |     const timerIdToRef = id => ({ | ||
|  |       id, | ||
|  | 
 | ||
|  |       ref() { | ||
|  |         return this; | ||
|  |       }, | ||
|  | 
 | ||
|  |       unref() { | ||
|  |         return this; | ||
|  |       } | ||
|  |     }); | ||
|  | 
 | ||
|  |     const timerRefToId = timer => (timer && timer.id) || undefined; | ||
|  | 
 | ||
|  |     const timerConfig = { | ||
|  |       idToRef: timerIdToRef, | ||
|  |       refToId: timerRefToId | ||
|  |     }; | ||
|  |     this.fakeTimers = new (_fakeTimers()).JestFakeTimers({ | ||
|  |       config, | ||
|  |       global, | ||
|  |       moduleMocker: this.moduleMocker, | ||
|  |       timerConfig | ||
|  |     }); | ||
|  |   } | ||
|  | 
 | ||
|  |   setup() { | ||
|  |     return Promise.resolve(); | ||
|  |   } | ||
|  | 
 | ||
|  |   teardown() { | ||
|  |     if (this.fakeTimers) { | ||
|  |       this.fakeTimers.dispose(); | ||
|  |     } | ||
|  | 
 | ||
|  |     this.context = null; | ||
|  |     this.fakeTimers = null; | ||
|  |     return Promise.resolve(); | ||
|  |   } // TS infers the return type to be `any`, since that's what `runInContext`
 | ||
|  |   // returns.
 | ||
|  | 
 | ||
|  |   runScript(script) { | ||
|  |     if (this.context) { | ||
|  |       return script.runInContext(this.context); | ||
|  |     } | ||
|  | 
 | ||
|  |     return null; | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | module.exports = NodeEnvironment; |