jest-environment-jsdom
Advanced tools
Comparing version 30.0.0-alpha.2 to 30.0.0-alpha.3
@@ -8,29 +8,7 @@ /** | ||
/// <reference types="node" /> | ||
import {EnvironmentContext, JestEnvironmentConfig} from '@jest/environment'; | ||
import BaseEnv from '@jest/environment-jsdom-abstract'; | ||
import {Context} from 'vm'; | ||
import {JSDOM} from 'jsdom'; | ||
import { | ||
EnvironmentContext, | ||
JestEnvironment, | ||
JestEnvironmentConfig, | ||
} from '@jest/environment'; | ||
import {LegacyFakeTimers, ModernFakeTimers} from '@jest/fake-timers'; | ||
import {Global as Global_2} from '@jest/types'; | ||
import {ModuleMocker} from 'jest-mock'; | ||
declare class JSDOMEnvironment implements JestEnvironment<number> { | ||
dom: JSDOM | null; | ||
fakeTimers: LegacyFakeTimers<number> | null; | ||
fakeTimersModern: ModernFakeTimers | null; | ||
global: Win; | ||
private errorEventListener; | ||
moduleMocker: ModuleMocker | null; | ||
customExportConditions: Array<string>; | ||
private readonly _configuredExportConditions?; | ||
declare class JSDOMEnvironment extends BaseEnv { | ||
constructor(config: JestEnvironmentConfig, context: EnvironmentContext); | ||
setup(): Promise<void>; | ||
teardown(): Promise<void>; | ||
exportConditions(): Array<string>; | ||
getVmContext(): Context | null; | ||
} | ||
@@ -41,9 +19,2 @@ export default JSDOMEnvironment; | ||
declare type Win = Window & | ||
Global_2.Global & { | ||
Error: { | ||
stackTraceLimit: number; | ||
}; | ||
}; | ||
export {}; |
@@ -21,5 +21,5 @@ /*! | ||
exports["default"] = exports.TestEnvironment = void 0; | ||
function _jsdom() { | ||
const data = require("jsdom"); | ||
_jsdom = function () { | ||
function JSDOM() { | ||
const data = _interopRequireWildcard(require("jsdom")); | ||
JSDOM = function () { | ||
return data; | ||
@@ -29,5 +29,5 @@ }; | ||
} | ||
function _fakeTimers() { | ||
const data = require("@jest/fake-timers"); | ||
_fakeTimers = function () { | ||
function _environmentJsdomAbstract() { | ||
const data = _interopRequireDefault(require("@jest/environment-jsdom-abstract")); | ||
_environmentJsdomAbstract = function () { | ||
return data; | ||
@@ -37,16 +37,5 @@ }; | ||
} | ||
function _jestMock() { | ||
const data = require("jest-mock"); | ||
_jestMock = function () { | ||
return data; | ||
}; | ||
return data; | ||
} | ||
function _jestUtil() { | ||
const data = require("jest-util"); | ||
_jestUtil = function () { | ||
return data; | ||
}; | ||
return data; | ||
} | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } | ||
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } | ||
/** | ||
@@ -59,135 +48,6 @@ * Copyright (c) Meta Platforms, Inc. and affiliates. | ||
// The `Window` interface does not have an `Error.stackTraceLimit` property, but | ||
// `JSDOMEnvironment` assumes it is there. | ||
function isString(value) { | ||
return typeof value === 'string'; | ||
} | ||
class JSDOMEnvironment { | ||
dom; | ||
fakeTimers; | ||
fakeTimersModern; | ||
global; | ||
errorEventListener; | ||
moduleMocker; | ||
customExportConditions = ['browser']; | ||
_configuredExportConditions; | ||
class JSDOMEnvironment extends _environmentJsdomAbstract().default { | ||
constructor(config, context) { | ||
const { | ||
projectConfig | ||
} = config; | ||
const virtualConsole = new (_jsdom().VirtualConsole)(); | ||
virtualConsole.sendTo(context.console, { | ||
omitJSDOMErrors: true | ||
}); | ||
virtualConsole.on('jsdomError', error => { | ||
context.console.error(error); | ||
}); | ||
this.dom = new (_jsdom().JSDOM)(typeof projectConfig.testEnvironmentOptions.html === 'string' ? projectConfig.testEnvironmentOptions.html : '<!DOCTYPE html>', { | ||
pretendToBeVisual: true, | ||
resources: typeof projectConfig.testEnvironmentOptions.userAgent === 'string' ? new (_jsdom().ResourceLoader)({ | ||
userAgent: projectConfig.testEnvironmentOptions.userAgent | ||
}) : undefined, | ||
runScripts: 'dangerously', | ||
url: 'http://localhost/', | ||
virtualConsole, | ||
...projectConfig.testEnvironmentOptions | ||
}); | ||
const global = this.global = this.dom.window; | ||
if (global == null) { | ||
throw new Error('JSDOM did not return a Window object'); | ||
} | ||
// TODO: remove at some point - for "universal" code (code should use `globalThis`) | ||
global.global = global; | ||
// Node's error-message stack size is limited at 10, but it's pretty useful | ||
// to see more than that when a test fails. | ||
this.global.Error.stackTraceLimit = 100; | ||
(0, _jestUtil().installCommonGlobals)(global, projectConfig.globals); | ||
// TODO: remove this ASAP, but it currently causes tests to run really slow | ||
global.Buffer = Buffer; | ||
// Report uncaught errors. | ||
this.errorEventListener = event => { | ||
if (userErrorListenerCount === 0 && event.error != null) { | ||
process.emit('uncaughtException', event.error); | ||
} | ||
}; | ||
global.addEventListener('error', this.errorEventListener); | ||
// However, don't report them as uncaught if the user listens to 'error' event. | ||
// In that case, we assume the might have custom error handling logic. | ||
const originalAddListener = global.addEventListener.bind(global); | ||
const originalRemoveListener = global.removeEventListener.bind(global); | ||
let userErrorListenerCount = 0; | ||
global.addEventListener = function (...args) { | ||
if (args[0] === 'error') { | ||
userErrorListenerCount++; | ||
} | ||
return originalAddListener.apply(this, args); | ||
}; | ||
global.removeEventListener = function (...args) { | ||
if (args[0] === 'error') { | ||
userErrorListenerCount--; | ||
} | ||
return originalRemoveListener.apply(this, args); | ||
}; | ||
if ('customExportConditions' in projectConfig.testEnvironmentOptions) { | ||
const { | ||
customExportConditions | ||
} = projectConfig.testEnvironmentOptions; | ||
if (Array.isArray(customExportConditions) && customExportConditions.every(isString)) { | ||
this._configuredExportConditions = customExportConditions; | ||
} else { | ||
throw new Error('Custom export conditions specified but they are not an array of strings'); | ||
} | ||
} | ||
this.moduleMocker = new (_jestMock().ModuleMocker)(global); | ||
this.fakeTimers = new (_fakeTimers().LegacyFakeTimers)({ | ||
config: projectConfig, | ||
global: global, | ||
moduleMocker: this.moduleMocker, | ||
timerConfig: { | ||
idToRef: id => id, | ||
refToId: ref => ref | ||
} | ||
}); | ||
this.fakeTimersModern = new (_fakeTimers().ModernFakeTimers)({ | ||
config: projectConfig, | ||
global: global | ||
}); | ||
super(config, context, JSDOM()); | ||
} | ||
// eslint-disable-next-line @typescript-eslint/no-empty-function | ||
async setup() {} | ||
async teardown() { | ||
if (this.fakeTimers) { | ||
this.fakeTimers.dispose(); | ||
} | ||
if (this.fakeTimersModern) { | ||
this.fakeTimersModern.dispose(); | ||
} | ||
if (this.global != null) { | ||
if (this.errorEventListener) { | ||
this.global.removeEventListener('error', this.errorEventListener); | ||
} | ||
this.global.close(); | ||
} | ||
this.errorEventListener = null; | ||
// @ts-expect-error: this.global not allowed to be `null` | ||
this.global = null; | ||
this.dom = null; | ||
this.fakeTimers = null; | ||
this.fakeTimersModern = null; | ||
} | ||
exportConditions() { | ||
return this._configuredExportConditions ?? this.customExportConditions; | ||
} | ||
getVmContext() { | ||
if (this.dom) { | ||
return this.dom.getInternalVMContext(); | ||
} | ||
return null; | ||
} | ||
} | ||
@@ -194,0 +54,0 @@ exports["default"] = JSDOMEnvironment; |
{ | ||
"name": "jest-environment-jsdom", | ||
"version": "30.0.0-alpha.2", | ||
"version": "30.0.0-alpha.3", | ||
"repository": { | ||
@@ -22,13 +22,10 @@ "type": "git", | ||
"dependencies": { | ||
"@jest/environment": "30.0.0-alpha.2", | ||
"@jest/fake-timers": "30.0.0-alpha.2", | ||
"@jest/types": "30.0.0-alpha.2", | ||
"@jest/environment": "30.0.0-alpha.3", | ||
"@jest/environment-jsdom-abstract": "30.0.0-alpha.3", | ||
"@types/jsdom": "^21.1.1", | ||
"@types/node": "*", | ||
"jest-mock": "30.0.0-alpha.2", | ||
"jest-util": "30.0.0-alpha.2", | ||
"jsdom": "^22.0.0" | ||
}, | ||
"devDependencies": { | ||
"@jest/test-utils": "30.0.0-alpha.2" | ||
"@jest/test-utils": "30.0.0-alpha.3" | ||
}, | ||
@@ -49,3 +46,3 @@ "peerDependencies": { | ||
}, | ||
"gitHead": "c04d13d7abd22e47b0997f6027886aed225c9ce4" | ||
"gitHead": "e267aff33d105399f2134bad7c8f82285104f3da" | ||
} |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
6
5203
69
1
+ Added@jest/environment@30.0.0-alpha.3(transitive)
+ Added@jest/environment-jsdom-abstract@30.0.0-alpha.3(transitive)
+ Added@jest/fake-timers@30.0.0-alpha.3(transitive)
+ Added@jest/schemas@30.0.0-alpha.3(transitive)
+ Added@jest/types@30.0.0-alpha.3(transitive)
+ Added@sinclair/typebox@0.32.26(transitive)
+ Addedjest-message-util@30.0.0-alpha.3(transitive)
+ Addedjest-mock@30.0.0-alpha.3(transitive)
+ Addedjest-util@30.0.0-alpha.3(transitive)
+ Addedpretty-format@30.0.0-alpha.3(transitive)
- Removed@jest/fake-timers@30.0.0-alpha.2
- Removed@jest/types@30.0.0-alpha.2
- Removedjest-mock@30.0.0-alpha.2
- Removedjest-util@30.0.0-alpha.2
- Removed@jest/environment@30.0.0-alpha.2(transitive)
- Removed@jest/fake-timers@30.0.0-alpha.2(transitive)
- Removed@jest/schemas@30.0.0-alpha.2(transitive)
- Removed@jest/types@30.0.0-alpha.2(transitive)
- Removed@sinclair/typebox@0.31.28(transitive)
- Removedjest-message-util@30.0.0-alpha.2(transitive)
- Removedjest-mock@30.0.0-alpha.2(transitive)
- Removedjest-util@30.0.0-alpha.2(transitive)
- Removedpretty-format@30.0.0-alpha.2(transitive)