jest-preset-angular 14.4.2 → 14.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,23 @@
1
+ ## [14.5.0](https://github.com/thymikee/jest-preset-angular/compare/v14.4.2...v14.5.0) (2025-01-10)
2
+
3
+
4
+ ### Features
5
+
6
+ * feat: add custom `jsdom` env [#2904](https://github.com/thymikee/jest-preset-angular/issues/2904) ([6045a96](https://github.com/thymikee/jest-preset-angular/commit/6045a96)), closes [#2883](https://github.com/thymikee/jest-preset-angular/issues/2883)
7
+
8
+
9
+ ### Code Refactoring
10
+
11
+ * refactor: add type for `serializers/index.ts` ([dd64d78](https://github.com/thymikee/jest-preset-angular/commit/dd64d78))
12
+
13
+
14
+ ### DEPRECATIONS
15
+
16
+ * refactor: deprecate `defaultTransformerOptions` in `presets` ([99d3112](https://github.com/thymikee/jest-preset-angular/commit/99d3112))
17
+ * refactor: deprecate `ngcc` util via `globalSetup` ([edeaa3f](https://github.com/thymikee/jest-preset-angular/commit/edeaa3f))
18
+
19
+
20
+
1
21
  ## [14.4.2](https://github.com/thymikee/jest-preset-angular/compare/v14.4.1...v14.4.2) (2024-12-03)
2
22
 
3
23
 
@@ -0,0 +1,27 @@
1
+ import type { Context } from 'node:vm';
2
+ import type { EnvironmentContext, JestEnvironment, JestEnvironmentConfig } from '@jest/environment';
3
+ import { LegacyFakeTimers, ModernFakeTimers } from '@jest/fake-timers';
4
+ import type { Global } from '@jest/types';
5
+ import { ModuleMocker } from 'jest-mock';
6
+ import type * as jsdom from 'jsdom';
7
+ type Win = Window & Global.Global & {
8
+ Error: {
9
+ stackTraceLimit: number;
10
+ };
11
+ };
12
+ export default abstract class BaseJSDOMEnvironment implements JestEnvironment<number> {
13
+ dom: jsdom.JSDOM | null;
14
+ fakeTimers: LegacyFakeTimers<number> | null;
15
+ fakeTimersModern: ModernFakeTimers | null;
16
+ global: Win;
17
+ private errorEventListener;
18
+ moduleMocker: ModuleMocker | null;
19
+ customExportConditions: string[];
20
+ private readonly _configuredExportConditions?;
21
+ protected constructor(config: JestEnvironmentConfig, context: EnvironmentContext, jsdomModule: typeof jsdom);
22
+ setup(): Promise<void>;
23
+ teardown(): Promise<void>;
24
+ exportConditions(): Array<string>;
25
+ getVmContext(): Context | null;
26
+ }
27
+ export {};
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const fake_timers_1 = require("@jest/fake-timers");
13
+ const jest_mock_1 = require("jest-mock");
14
+ const jest_util_1 = require("jest-util");
15
+ function isString(value) {
16
+ return typeof value === 'string';
17
+ }
18
+ class BaseJSDOMEnvironment {
19
+ constructor(config, context, jsdomModule) {
20
+ this.customExportConditions = ['browser'];
21
+ const { projectConfig } = config;
22
+ const { JSDOM, ResourceLoader, VirtualConsole } = jsdomModule;
23
+ const virtualConsole = new VirtualConsole();
24
+ virtualConsole.sendTo(context.console, { omitJSDOMErrors: true });
25
+ virtualConsole.on('jsdomError', (error) => {
26
+ context.console.error(error);
27
+ });
28
+ this.dom = new JSDOM(typeof projectConfig.testEnvironmentOptions.html === 'string'
29
+ ? projectConfig.testEnvironmentOptions.html
30
+ : '<!DOCTYPE html>', Object.assign({ pretendToBeVisual: true, resources: typeof projectConfig.testEnvironmentOptions.userAgent === 'string'
31
+ ? new ResourceLoader({
32
+ userAgent: projectConfig.testEnvironmentOptions.userAgent,
33
+ })
34
+ : undefined, runScripts: 'dangerously', url: 'http://localhost/', virtualConsole }, projectConfig.testEnvironmentOptions));
35
+ const global = (this.global = this.dom.window);
36
+ if (global == null) {
37
+ throw new Error('JSDOM did not return a Window object');
38
+ }
39
+ global.global = global;
40
+ this.global.Error.stackTraceLimit = 100;
41
+ (0, jest_util_1.installCommonGlobals)(global, projectConfig.globals);
42
+ this.errorEventListener = (event) => {
43
+ if (userErrorListenerCount === 0 && event.error != null) {
44
+ process.emit('uncaughtException', event.error);
45
+ }
46
+ };
47
+ global.addEventListener('error', this.errorEventListener);
48
+ const originalAddListener = global.addEventListener.bind(global);
49
+ const originalRemoveListener = global.removeEventListener.bind(global);
50
+ let userErrorListenerCount = 0;
51
+ global.addEventListener = function (...args) {
52
+ if (args[0] === 'error') {
53
+ userErrorListenerCount++;
54
+ }
55
+ return originalAddListener.apply(this, args);
56
+ };
57
+ global.removeEventListener = function (...args) {
58
+ if (args[0] === 'error') {
59
+ userErrorListenerCount--;
60
+ }
61
+ return originalRemoveListener.apply(this, args);
62
+ };
63
+ if ('customExportConditions' in projectConfig.testEnvironmentOptions) {
64
+ const { customExportConditions } = projectConfig.testEnvironmentOptions;
65
+ if (Array.isArray(customExportConditions) && customExportConditions.every(isString)) {
66
+ this._configuredExportConditions = customExportConditions;
67
+ }
68
+ else {
69
+ throw new Error('Custom export conditions specified but they are not an array of strings');
70
+ }
71
+ }
72
+ this.moduleMocker = new jest_mock_1.ModuleMocker(global);
73
+ this.fakeTimers = new fake_timers_1.LegacyFakeTimers({
74
+ config: projectConfig,
75
+ global: global,
76
+ moduleMocker: this.moduleMocker,
77
+ timerConfig: {
78
+ idToRef: (id) => id,
79
+ refToId: (ref) => ref,
80
+ },
81
+ });
82
+ this.fakeTimersModern = new fake_timers_1.ModernFakeTimers({
83
+ config: projectConfig,
84
+ global: global,
85
+ });
86
+ }
87
+ setup() {
88
+ return __awaiter(this, void 0, void 0, function* () { });
89
+ }
90
+ teardown() {
91
+ return __awaiter(this, void 0, void 0, function* () {
92
+ if (this.fakeTimers) {
93
+ this.fakeTimers.dispose();
94
+ }
95
+ if (this.fakeTimersModern) {
96
+ this.fakeTimersModern.dispose();
97
+ }
98
+ if (this.global != null) {
99
+ if (this.errorEventListener) {
100
+ this.global.removeEventListener('error', this.errorEventListener);
101
+ }
102
+ this.global.close();
103
+ }
104
+ this.errorEventListener = null;
105
+ this.global = null;
106
+ this.dom = null;
107
+ this.fakeTimers = null;
108
+ this.fakeTimersModern = null;
109
+ });
110
+ }
111
+ exportConditions() {
112
+ var _a;
113
+ return (_a = this._configuredExportConditions) !== null && _a !== void 0 ? _a : this.customExportConditions;
114
+ }
115
+ getVmContext() {
116
+ if (this.dom) {
117
+ return this.dom.getInternalVMContext();
118
+ }
119
+ return null;
120
+ }
121
+ }
122
+ exports.default = BaseJSDOMEnvironment;
@@ -0,0 +1,5 @@
1
+ import type { EnvironmentContext, JestEnvironmentConfig } from '@jest/environment';
2
+ import BaseEnv from './jest-env-jsdom-abstract';
3
+ export default class JestJSDOMEnvironment extends BaseEnv {
4
+ constructor(config: JestEnvironmentConfig, context: EnvironmentContext);
5
+ }
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ const JSDOM = __importStar(require("jsdom"));
30
+ const ts_jest_1 = require("ts-jest");
31
+ const jest_env_jsdom_abstract_1 = __importDefault(require("./jest-env-jsdom-abstract"));
32
+ class JestJSDOMEnvironment extends jest_env_jsdom_abstract_1.default {
33
+ constructor(config, context) {
34
+ super(config, context, JSDOM);
35
+ ts_jest_1.rootLogger.debug('JSDOM version: ', require('jsdom/package.json').version);
36
+ }
37
+ }
38
+ exports.default = JestJSDOMEnvironment;
@@ -5,9 +5,9 @@ declare const defaultPreset: {
5
5
  transform: {
6
6
  '^.+\\.(ts|js|mjs|html|svg)$': (string | import("ts-jest").TsJestGlobalOptions)[];
7
7
  };
8
- testEnvironment?: string | undefined;
9
- moduleFileExtensions?: string[] | undefined;
10
8
  snapshotSerializers?: string[] | undefined;
9
+ moduleFileExtensions?: string[] | undefined;
10
+ testEnvironment?: string | undefined;
11
11
  };
12
12
  declare const defaultEsmPreset: {
13
13
  extensionsToTreatAsEsm: string[];
@@ -32,9 +32,9 @@ declare const defaultEsmPreset: {
32
32
  })[];
33
33
  };
34
34
  transformIgnorePatterns: string[];
35
- testEnvironment?: string | undefined;
36
- moduleFileExtensions?: string[] | undefined;
37
35
  snapshotSerializers?: string[] | undefined;
36
+ moduleFileExtensions?: string[] | undefined;
37
+ testEnvironment?: string | undefined;
38
38
  };
39
39
  export { defaultPreset, defaultEsmPreset, defaultTransformerOptions };
40
40
  export { createCjsPreset } from './create-cjs-preset';