From 8138c7980b216991eccf92fc01da64d7e887e519 Mon Sep 17 00:00:00 2001 From: Alexander Akait <4567934+alexander-akait@users.noreply.github.com> Date: Tue, 22 Jul 2025 15:04:22 +0300 Subject: [PATCH 1/4] test: worker loading chunks (#19716) --- .../node-worker-esm-class-worker/chunk.js | 3 +++ .../node-worker-esm-class-worker/index.js | 17 ++++++++++++++ .../test.config.js | 10 +++++++++ .../test.filter.js | 5 +++++ .../webpack.config.js | 17 ++++++++++++++ .../node-worker-esm-class-worker/worker.js | 8 +++++++ .../worker/node-worker-require/chunk.js | 3 +++ .../worker/node-worker-require/index.js | 22 +++++++++++++++++++ .../worker/node-worker-require/test.config.js | 22 +++++++++++++++++++ .../worker/node-worker-require/test.filter.js | 5 +++++ .../node-worker-require/webpack.config.js | 14 ++++++++++++ .../worker/node-worker-require/worker.js | 8 +++++++ 12 files changed, 134 insertions(+) create mode 100644 test/configCases/worker/node-worker-esm-class-worker/chunk.js create mode 100644 test/configCases/worker/node-worker-esm-class-worker/index.js create mode 100644 test/configCases/worker/node-worker-esm-class-worker/test.config.js create mode 100644 test/configCases/worker/node-worker-esm-class-worker/test.filter.js create mode 100644 test/configCases/worker/node-worker-esm-class-worker/webpack.config.js create mode 100644 test/configCases/worker/node-worker-esm-class-worker/worker.js create mode 100644 test/configCases/worker/node-worker-require/chunk.js create mode 100644 test/configCases/worker/node-worker-require/index.js create mode 100644 test/configCases/worker/node-worker-require/test.config.js create mode 100644 test/configCases/worker/node-worker-require/test.filter.js create mode 100644 test/configCases/worker/node-worker-require/webpack.config.js create mode 100644 test/configCases/worker/node-worker-require/worker.js diff --git a/test/configCases/worker/node-worker-esm-class-worker/chunk.js b/test/configCases/worker/node-worker-esm-class-worker/chunk.js new file mode 100644 index 00000000000..2c52aca6628 --- /dev/null +++ b/test/configCases/worker/node-worker-esm-class-worker/chunk.js @@ -0,0 +1,3 @@ +export function getMessage(msg) { + return msg + " from worker with ESM import"; +} diff --git a/test/configCases/worker/node-worker-esm-class-worker/index.js b/test/configCases/worker/node-worker-esm-class-worker/index.js new file mode 100644 index 00000000000..3e54ccf8c90 --- /dev/null +++ b/test/configCases/worker/node-worker-esm-class-worker/index.js @@ -0,0 +1,17 @@ +import { Worker } from "worker_threads"; + +it("should support class worker chunk in Node.js", async () => { + const worker = new Worker(new URL("./worker.js" + __resourceQuery, import.meta.url)); + + const promise = new Promise((resolve, reject) => { + worker.on("message", resolve); + worker.on("error", reject); + }); + + worker.postMessage("hello"); + + const result = await promise; + expect(result).toBe("hello from worker with ESM import"); + + await worker.terminate(); +}); diff --git a/test/configCases/worker/node-worker-esm-class-worker/test.config.js b/test/configCases/worker/node-worker-esm-class-worker/test.config.js new file mode 100644 index 00000000000..b850ec8e5ad --- /dev/null +++ b/test/configCases/worker/node-worker-esm-class-worker/test.config.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = { + findBundle() { + return "./bundle.mjs"; + }, + moduleScope(scope) { + scope.URL = URL; + } +}; diff --git a/test/configCases/worker/node-worker-esm-class-worker/test.filter.js b/test/configCases/worker/node-worker-esm-class-worker/test.filter.js new file mode 100644 index 00000000000..fc9b5e2ce0d --- /dev/null +++ b/test/configCases/worker/node-worker-esm-class-worker/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsWorker = require("../../../helpers/supportsWorker"); + +module.exports = () => supportsWorker(); diff --git a/test/configCases/worker/node-worker-esm-class-worker/webpack.config.js b/test/configCases/worker/node-worker-esm-class-worker/webpack.config.js new file mode 100644 index 00000000000..b95db4679db --- /dev/null +++ b/test/configCases/worker/node-worker-esm-class-worker/webpack.config.js @@ -0,0 +1,17 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "node14", + entry: "./index.js", + optimization: { + chunkIds: "named" + }, + output: { + module: true, + filename: "bundle.mjs" + }, + experiments: { + outputModule: true + } +}; diff --git a/test/configCases/worker/node-worker-esm-class-worker/worker.js b/test/configCases/worker/node-worker-esm-class-worker/worker.js new file mode 100644 index 00000000000..839478a5e7f --- /dev/null +++ b/test/configCases/worker/node-worker-esm-class-worker/worker.js @@ -0,0 +1,8 @@ +const { parentPort } = require("worker_threads"); + +const { getMessage } = require("./chunk.js"); + +parentPort.on("message", (msg) => { + // Worker with ESM import + parentPort.postMessage(getMessage(msg)); +}); diff --git a/test/configCases/worker/node-worker-require/chunk.js b/test/configCases/worker/node-worker-require/chunk.js new file mode 100644 index 00000000000..2c52aca6628 --- /dev/null +++ b/test/configCases/worker/node-worker-require/chunk.js @@ -0,0 +1,3 @@ +export function getMessage(msg) { + return msg + " from worker with ESM import"; +} diff --git a/test/configCases/worker/node-worker-require/index.js b/test/configCases/worker/node-worker-require/index.js new file mode 100644 index 00000000000..55035f56b64 --- /dev/null +++ b/test/configCases/worker/node-worker-require/index.js @@ -0,0 +1,22 @@ +import { Worker } from "worker_threads"; + +it("should support ESM worker chunks in Node.js", async () => { + const worker = new Worker( + new URL("./worker.js" + __resourceQuery, import.meta.url), + { + type: "module" + } + ); + + const promise = new Promise((resolve, reject) => { + worker.on("message", resolve); + worker.on("error", reject); + }); + + worker.postMessage("hello"); + + const result = await promise; + expect(result).toBe("hello from worker with ESM import"); + + await worker.terminate(); +}); diff --git a/test/configCases/worker/node-worker-require/test.config.js b/test/configCases/worker/node-worker-require/test.config.js new file mode 100644 index 00000000000..0e90f9b43a6 --- /dev/null +++ b/test/configCases/worker/node-worker-require/test.config.js @@ -0,0 +1,22 @@ +"use strict"; + +const fs = require("fs"); +const path = require("path"); + +module.exports = { + findBundle() { + return "./bundle.js"; + }, + afterExecute(options) { + const workerCode = fs.readFileSync( + path.resolve(options.output.path, "./worker_js.bundle.js"), + "utf8" + ); + + if (!/require\(\) chunk loading for javascript/.test(workerCode)) { + throw new Error( + "require was not found in the worker code for loading async chunks" + ); + } + } +}; diff --git a/test/configCases/worker/node-worker-require/test.filter.js b/test/configCases/worker/node-worker-require/test.filter.js new file mode 100644 index 00000000000..fc9b5e2ce0d --- /dev/null +++ b/test/configCases/worker/node-worker-require/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsWorker = require("../../../helpers/supportsWorker"); + +module.exports = () => supportsWorker(); diff --git a/test/configCases/worker/node-worker-require/webpack.config.js b/test/configCases/worker/node-worker-require/webpack.config.js new file mode 100644 index 00000000000..22d8316a035 --- /dev/null +++ b/test/configCases/worker/node-worker-require/webpack.config.js @@ -0,0 +1,14 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "async-node14", + entry: "./index.js", + optimization: { + chunkIds: "named" + }, + output: { + filename: "bundle.js", + workerChunkLoading: "require" + } +}; diff --git a/test/configCases/worker/node-worker-require/worker.js b/test/configCases/worker/node-worker-require/worker.js new file mode 100644 index 00000000000..7db06d04718 --- /dev/null +++ b/test/configCases/worker/node-worker-require/worker.js @@ -0,0 +1,8 @@ +import { parentPort } from "worker_threads"; + +const { getMessage } = await import("./chunk.js"); + +parentPort.on("message", (msg) => { + // Worker with ESM import + parentPort.postMessage(getMessage(msg)); +}); From 239aacc0a37a67eb1af9dccec93565b53cd1d79f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 22 Jul 2025 15:17:49 +0300 Subject: [PATCH 2/4] chore(deps-dev): bump the dependencies group with 3 updates (#19718) Bumps the dependencies group with 3 updates: [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node), [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier) and [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier). Updates `@types/node` from 24.0.14 to 24.0.15 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) Updates `eslint-config-prettier` from 10.1.5 to 10.1.8 - [Release notes](https://github.com/prettier/eslint-config-prettier/releases) - [Changelog](https://github.com/prettier/eslint-config-prettier/blob/main/CHANGELOG.md) - [Commits](https://github.com/prettier/eslint-config-prettier/compare/v10.1.5...v10.1.8) Updates `eslint-plugin-prettier` from 5.5.1 to 5.5.3 - [Release notes](https://github.com/prettier/eslint-plugin-prettier/releases) - [Changelog](https://github.com/prettier/eslint-plugin-prettier/blob/main/CHANGELOG.md) - [Commits](https://github.com/prettier/eslint-plugin-prettier/compare/v5.5.1...v5.5.3) --- updated-dependencies: - dependency-name: "@types/node" dependency-version: 24.0.15 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: eslint-config-prettier dependency-version: 10.1.8 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: eslint-plugin-prettier dependency-version: 5.5.3 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/yarn.lock b/yarn.lock index b43f33607ff..0df20d9624e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1496,9 +1496,9 @@ integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== "@types/node@*", "@types/node@^24.0.13": - version "24.0.14" - resolved "https://registry.yarnpkg.com/@types/node/-/node-24.0.14.tgz#6e3d4fb6d858c48c69707394e1a0e08ce1ecc1bc" - integrity sha512-4zXMWD91vBLGRtHK3YbIoFMia+1nqEz72coM42C5ETjnNCa/heoj7NT1G67iAfOqMmcfhuCZ4uNpyz8EjlAejw== + version "24.0.15" + resolved "https://registry.yarnpkg.com/@types/node/-/node-24.0.15.tgz#f34fbc973e7d64217106e0c59ed8761e6b51381e" + integrity sha512-oaeTSbCef7U/z7rDeJA138xpG3NuKc64/rZ2qmUFkFJmnMsAPaluIifqyWd8hSSMxyP9oie3dLAqYPblag9KgA== dependencies: undici-types "~7.8.0" @@ -3315,9 +3315,9 @@ eslint-compat-utils@^0.5.1: semver "^7.5.4" eslint-config-prettier@^10.1.1: - version "10.1.5" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-10.1.5.tgz#00c18d7225043b6fbce6a665697377998d453782" - integrity sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw== + version "10.1.8" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz#15734ce4af8c2778cc32f0b01b37b0b5cd1ecb97" + integrity sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w== eslint-config-webpack@^4.4.1: version "4.4.1" @@ -3418,9 +3418,9 @@ eslint-plugin-n@^17.21.0: ts-declaration-location "^1.0.6" eslint-plugin-prettier@^5.5.0: - version "5.5.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.1.tgz#470820964de9aedb37e9ce62c3266d2d26d08d15" - integrity sha512-dobTkHT6XaEVOo8IO90Q4DOSxnm3Y151QxPJlM/vKC0bVy+d6cVWQZLlFiuZPP0wS6vZwSKeJgKkcS+KfMBlRw== + version "5.5.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.3.tgz#1f88e9220a72ac8be171eec5f9d4e4d529b5f4a0" + integrity sha512-NAdMYww51ehKfDyDhv59/eIItUVzU0Io9H2E8nHNGKEeeqlnci+1gCvrHib6EmZdf6GxF+LCV5K7UC65Ezvw7w== dependencies: prettier-linter-helpers "^1.0.0" synckit "^0.11.7" From c3230114bc33b924a6390aa8d27f935250494bda Mon Sep 17 00:00:00 2001 From: hai-x <98948357+hai-x@users.noreply.github.com> Date: Tue, 22 Jul 2025 20:22:32 +0800 Subject: [PATCH 3/4] test: correct local cli test (#19717) --- test/Cli.basictest.js | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/test/Cli.basictest.js b/test/Cli.basictest.js index 3ea6d95f1af..5eaf0c63b4c 100644 --- a/test/Cli.basictest.js +++ b/test/Cli.basictest.js @@ -429,6 +429,14 @@ describe("Cli", () => { // Most important - it clears the cache jest.resetModules(); process.env = { ...OLD_ENV }; + // Prevent `process.env.FORCE_COLOR` from being auto set by `jest-worker` + if (OLD_ENV.FORCE_COLOR) { + delete process.env.FORCE_COLOR; + } + // Prevent `process.env.TERM` default value + if (OLD_ENV.TERM) { + delete process.env.TERM; + } }); afterAll(() => { @@ -459,25 +467,22 @@ describe("Cli", () => { expect(isColorSupported()).toBe(isCI); }); - it("env CI", () => { - process.env.CI = "1"; - - expect(isColorSupported()).toBe(true); - }); - it("env GITHUB_ACTIONS", () => { + process.env.CI = "1"; process.env.GITHUB_ACTIONS = "1"; expect(isColorSupported()).toBe(true); }); it("env GITLAB_CI", () => { + process.env.CI = "1"; process.env.GITLAB_CI = "1"; expect(isColorSupported()).toBe(true); }); it("env CIRCLECI", () => { + process.env.CI = "1"; process.env.CIRCLECI = "1"; expect(isColorSupported()).toBe(true); From 36476f788b06db3c6ea67942cb60f5ac2586ebf4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 22 Jul 2025 15:31:37 +0300 Subject: [PATCH 4/4] chore(deps): bump form-data from 4.0.3 to 4.0.4 (#19719) Bumps [form-data](https://github.com/form-data/form-data) from 4.0.3 to 4.0.4. - [Release notes](https://github.com/form-data/form-data/releases) - [Changelog](https://github.com/form-data/form-data/blob/master/CHANGELOG.md) - [Commits](https://github.com/form-data/form-data/compare/v4.0.3...v4.0.4) --- updated-dependencies: - dependency-name: form-data dependency-version: 4.0.4 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 0df20d9624e..c87686fc9af 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3875,9 +3875,9 @@ fork-ts-checker-webpack-plugin@^9.0.2: tapable "^2.2.1" form-data@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.3.tgz#608b1b3f3e28be0fccf5901fc85fb3641e5cf0ae" - integrity sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA== + version "4.0.4" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.4.tgz#784cdcce0669a9d68e94d11ac4eea98088edd2c4" + integrity sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8"