From 09bdda507769adb982473558214209e1c18920e8 Mon Sep 17 00:00:00 2001 From: Sebastian Beltran Date: Mon, 12 Jan 2026 15:19:11 -0500 Subject: [PATCH 01/21] feat!: remove internalIP methods (#5625) --- .../api/{internal-ip => find-ip}/README.md | 8 +++---- examples/api/{internal-ip => find-ip}/app.js | 4 ++-- examples/api/internal-ip-sync/README.md | 23 ------------------- examples/api/internal-ip-sync/app.js | 9 -------- lib/Server.js | 18 --------------- migration-v6.md | 19 +++++++++++++++ test/e2e/allowed-hosts.test.js | 2 +- test/e2e/web-socket-server-url.test.js | 12 +++++----- test/server/open-option.test.js | 2 +- types/lib/Server.d.ts | 10 -------- 10 files changed, 33 insertions(+), 74 deletions(-) rename examples/api/{internal-ip => find-ip}/README.md (65%) rename examples/api/{internal-ip => find-ip}/app.js (65%) delete mode 100644 examples/api/internal-ip-sync/README.md delete mode 100644 examples/api/internal-ip-sync/app.js create mode 100644 migration-v6.md diff --git a/examples/api/internal-ip/README.md b/examples/api/find-ip/README.md similarity index 65% rename from examples/api/internal-ip/README.md rename to examples/api/find-ip/README.md index 07c1446444..00e67e7da6 100644 --- a/examples/api/internal-ip/README.md +++ b/examples/api/find-ip/README.md @@ -1,13 +1,13 @@ -# internalIP(family: "v4" | "v6") +# findIp(family: "v4" | "v6") -Returns the internal IP address asynchronously. +Returns the internal IP address. ```js const WebpackDevServer = require("webpack-dev-server"); const logInternalIPs = async () => { - const localIPv4 = await WebpackDevServer.internalIP("v4"); - const localIPv6 = await WebpackDevServer.internalIP("v6"); + const localIPv4 = WebpackDevServer.findIp("v4", false); + const localIPv6 = WebpackDevServer.findIp("v6", false); console.log("Local IPv4 address:", localIPv4); console.log("Local IPv6 address:", localIPv6); diff --git a/examples/api/internal-ip/app.js b/examples/api/find-ip/app.js similarity index 65% rename from examples/api/internal-ip/app.js rename to examples/api/find-ip/app.js index 5b95533e56..b4dc418ddc 100644 --- a/examples/api/internal-ip/app.js +++ b/examples/api/find-ip/app.js @@ -3,8 +3,8 @@ const WebpackDevServer = require("../../../lib/Server"); const logInternalIPs = async () => { - const localIPv4 = await WebpackDevServer.internalIP("v4"); - const localIPv6 = await WebpackDevServer.internalIP("v6"); + const localIPv4 = WebpackDevServer.findIp("v4", false); + const localIPv6 = WebpackDevServer.findIp("v6", false); console.log("Local IPv4 address:", localIPv4); console.log("Local IPv6 address:", localIPv6); diff --git a/examples/api/internal-ip-sync/README.md b/examples/api/internal-ip-sync/README.md deleted file mode 100644 index 6c880a4e7d..0000000000 --- a/examples/api/internal-ip-sync/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# internalIPSync(family: "v4" | "v6") - -Returns the internal IP address synchronously. - -```js -const WebpackDevServer = require("webpack-dev-server"); - -const localIPv4 = WebpackDevServer.internalIPSync("v4"); -const localIPv6 = WebpackDevServer.internalIPSync("v6"); - -console.log("Local IPv4 address:", localIPv4); -console.log("Local IPv6 address:", localIPv6); -``` - -Use the following command to run this example: - -```console -node app.js -``` - -## What Should Happen - -- The script should log your local IPv4 and IPv6 address. diff --git a/examples/api/internal-ip-sync/app.js b/examples/api/internal-ip-sync/app.js deleted file mode 100644 index ecf504551c..0000000000 --- a/examples/api/internal-ip-sync/app.js +++ /dev/null @@ -1,9 +0,0 @@ -"use strict"; - -const WebpackDevServer = require("../../../lib/Server"); - -const localIPv4 = WebpackDevServer.internalIPSync("v4"); -const localIPv6 = WebpackDevServer.internalIPSync("v6"); - -console.log("Local IPv4 address:", localIPv4); -console.log("Local IPv6 address:", localIPv6); diff --git a/lib/Server.js b/lib/Server.js index 87c4edb347..ad990ab1f6 100644 --- a/lib/Server.js +++ b/lib/Server.js @@ -475,24 +475,6 @@ class Server { } } - // TODO remove me in the next major release, we have `findIp` - /** - * @param {"v4" | "v6"} family family - * @returns {Promise} internal API - */ - static async internalIP(family) { - return Server.findIp(family, false); - } - - // TODO remove me in the next major release, we have `findIp` - /** - * @param {"v4" | "v6"} family family - * @returns {string | undefined} internal IP - */ - static internalIPSync(family) { - return Server.findIp(family, false); - } - /** * @param {Host} hostname hostname * @returns {Promise} resolved hostname diff --git a/migration-v6.md b/migration-v6.md new file mode 100644 index 0000000000..2a44ec147a --- /dev/null +++ b/migration-v6.md @@ -0,0 +1,19 @@ +# Migration guide + +This document serves as a migration guide for `webpack-dev-server@6.0.0`. + +## Deprecations + +- The static methods `internalIP` and `internalIPSync` were removed. Use `findIp` instead. + + v4: + + ```js + const ip = Server.internalIP("v4"); + ``` + + v5: + + ```js + const ip = Server.findIp("v4", true); + ``` diff --git a/test/e2e/allowed-hosts.test.js b/test/e2e/allowed-hosts.test.js index 163a24f265..f31769baea 100644 --- a/test/e2e/allowed-hosts.test.js +++ b/test/e2e/allowed-hosts.test.js @@ -1657,7 +1657,7 @@ describe("allowed hosts", () => { }); it("should always allow value from the `host` options if options.allowedHosts is auto", async () => { - const networkIP = Server.internalIPSync("v4"); + const networkIP = Server.findIp("v4", false); const options = { host: networkIP, allowedHosts: "auto", diff --git a/test/e2e/web-socket-server-url.test.js b/test/e2e/web-socket-server-url.test.js index 24147d0ba2..e6ed541468 100644 --- a/test/e2e/web-socket-server-url.test.js +++ b/test/e2e/web-socket-server-url.test.js @@ -113,7 +113,7 @@ describe("web socket server URL", () => { it(`should work behind proxy, when hostnames are different and ports are same ("${webSocketServer}")`, async () => { const devServerHost = "127.0.0.1"; const devServerPort = port1; - const proxyHost = Server.internalIPSync("v4"); + const proxyHost = Server.findIp("v4", false); const proxyPort = port1; const compiler = webpack(config); @@ -209,7 +209,7 @@ describe("web socket server URL", () => { it(`should work behind proxy, when hostnames are different and ports are different ("${webSocketServer}")`, async () => { const devServerHost = "localhost"; const devServerPort = port1; - const proxyHost = Server.internalIPSync("v4"); + const proxyHost = Server.findIp("v4", false); const proxyPort = port2; const compiler = webpack(config); @@ -310,7 +310,7 @@ describe("web socket server URL", () => { it(`should work behind proxy, when the "host" option is "local-ip" and the "port" option is "auto" ("${webSocketServer}")`, async () => { process.env.WEBPACK_DEV_SERVER_BASE_PORT = 40000; - const proxyHost = Server.internalIPSync("v4"); + const proxyHost = Server.findIp("v4", false); const proxyPort = port2; const compiler = webpack(config); @@ -2006,7 +2006,7 @@ describe("web socket server URL", () => { }); it(`should work when "host" option is IPv4 ("${webSocketServer}")`, async () => { - const hostname = Server.internalIPSync("v4"); + const hostname = Server.findIp("v4", false); const compiler = webpack(config); const devServerOptions = { webSocketServer, @@ -2074,7 +2074,7 @@ describe("web socket server URL", () => { }); it(`should work when "host" option is "local-ip" ("${webSocketServer}")`, async () => { - const hostname = Server.internalIPSync("v4"); + const hostname = Server.findIp("v4", false); const compiler = webpack(config); const devServerOptions = { webSocketServer, @@ -2143,7 +2143,7 @@ describe("web socket server URL", () => { }); it(`should work when "host" option is "local-ipv4" ("${webSocketServer}")`, async () => { - const hostname = Server.internalIPSync("v4"); + const hostname = Server.findIp("v4", false); const compiler = webpack(config); const devServerOptions = { webSocketServer, diff --git a/test/server/open-option.test.js b/test/server/open-option.test.js index fea4bf65a6..11e249d4ba 100644 --- a/test/server/open-option.test.js +++ b/test/server/open-option.test.js @@ -5,7 +5,7 @@ const Server = require("../../lib/Server"); const config = require("../fixtures/simple-config/webpack.config"); const port = require("../ports-map")["open-option"]; -const internalIPv4 = Server.internalIPSync("v4"); +const internalIPv4 = Server.findIp("v4", false); let open; diff --git a/types/lib/Server.d.ts b/types/lib/Server.d.ts index 47dfba4c62..c46b9ea61a 100644 --- a/types/lib/Server.d.ts +++ b/types/lib/Server.d.ts @@ -1141,16 +1141,6 @@ declare class Server< gatewayOrFamily: string, isInternal?: boolean | undefined, ): string | undefined; - /** - * @param {"v4" | "v6"} family family - * @returns {Promise} internal API - */ - static internalIP(family: "v4" | "v6"): Promise; - /** - * @param {"v4" | "v6"} family family - * @returns {string | undefined} internal IP - */ - static internalIPSync(family: "v4" | "v6"): string | undefined; /** * @param {Host} hostname hostname * @returns {Promise} resolved hostname From f0caae48b1108eaf7722428e082426cf812aa692 Mon Sep 17 00:00:00 2001 From: Sebastian Beltran Date: Tue, 20 Jan 2026 11:14:43 -0500 Subject: [PATCH 02/21] feat!: drop support for node <20.9 (#5631) * feat!: drop support for node <20.9 * feat: update baseline-browser-mapping to version 2.9.16 * chore: remove baseline-browser-mapping dependency --- .github/workflows/nodejs.yml | 13 +---- babel.config.js | 2 +- migration-v6.md | 4 ++ package-lock.json | 8 +-- package.json | 2 +- scripts/prepare-test-for-old-node.js | 32 ------------ test/e2e/overlay.test.js | 73 +--------------------------- test/server/open-option.test.js | 26 ++-------- 8 files changed, 17 insertions(+), 143 deletions(-) delete mode 100644 scripts/prepare-test-for-old-node.js diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 74945cdeb6..601903e675 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -69,7 +69,7 @@ jobs: strategy: matrix: os: [ubuntu-latest, windows-latest, macos-latest] - node-version: [18.x, 20.x, 22.x, 24.x] + node-version: [20.x, 22.x, 24.x, 25.x] shard: ["1/4", "2/4", "3/4", "4/4"] webpack-version: [latest] @@ -91,12 +91,6 @@ jobs: - name: Install dependencies run: npm ci - - name: Install dependencies for Node.js@18 - run: | - npm i p-retry@^4.5.0 open@^8.0.9 - node ./scripts/prepare-test-for-old-node.js - if: matrix.node-version == '18.x' - - name: Setup firefox if: matrix.os != 'windows-latest' uses: browser-actions/setup-firefox@latest @@ -111,13 +105,8 @@ jobs: rm -r client cp -R tmp-client client - - name: Run tests for webpack version ${{ matrix.webpack-version }} - run: node_modules/.bin/jest --coverage --ci --shard=${{ matrix.shard }} - if: matrix.node-version == '18.x' - - name: Run tests for webpack version ${{ matrix.webpack-version }} run: npm run test:coverage -- --ci --shard=${{ matrix.shard }} - if: matrix.node-version != '18.x' - name: Submit coverage data to codecov uses: codecov/codecov-action@v5 diff --git a/babel.config.js b/babel.config.js index 419046888f..a34db39f39 100644 --- a/babel.config.js +++ b/babel.config.js @@ -24,7 +24,7 @@ module.exports = (api) => { "@babel/preset-env", { targets: { - node: "18.12.0", + node: "20.9.0", }, }, ], diff --git a/migration-v6.md b/migration-v6.md index 2a44ec147a..9a4d78722d 100644 --- a/migration-v6.md +++ b/migration-v6.md @@ -2,6 +2,10 @@ This document serves as a migration guide for `webpack-dev-server@6.0.0`. +## ⚠ BREAKING CHANGES + +- Minimum supported `Node.js` version is `20.9.0`. + ## Deprecations - The static methods `internalIP` and `internalIPSync` were removed. Use `findIp` instead. diff --git a/package-lock.json b/package-lock.json index 9680dbf5e1..0824a00b3a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -105,7 +105,7 @@ "webpack-merge": "^6.0.1" }, "engines": { - "node": ">= 18.12.0" + "node": ">= 20.9.0" }, "funding": { "type": "opencollective", @@ -6819,9 +6819,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.29.tgz", - "integrity": "sha512-sXdt2elaVnhpDNRDz+1BDx1JQoJRuNk7oVlAlbGiFkLikHCAQiccexF/9e91zVi6RCgqspl04aP+6Cnl9zRLrA==", + "version": "2.9.16", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.16.tgz", + "integrity": "sha512-KeUZdBuxngy825i8xvzaK1Ncnkx0tBmb3k8DkEuqjKRkmtvNTjey2ZsNeh8Dw4lfKvbCOu9oeNx2TKm2vHqcRw==", "devOptional": true, "license": "Apache-2.0", "bin": { diff --git a/package.json b/package.json index 84d2d5b407..0cc2dc22d7 100644 --- a/package.json +++ b/package.json @@ -148,6 +148,6 @@ } }, "engines": { - "node": ">= 18.12.0" + "node": ">= 20.9.0" } } diff --git a/scripts/prepare-test-for-old-node.js b/scripts/prepare-test-for-old-node.js deleted file mode 100644 index a5ef6dbfa1..0000000000 --- a/scripts/prepare-test-for-old-node.js +++ /dev/null @@ -1,32 +0,0 @@ -"use strict"; - -const fs = require("node:fs"); -const path = require("node:path"); - -/** - * @returns {Promise} - */ -async function setup() { - const serverCodePath = path.resolve(__dirname, "../lib/Server.js"); - let serverCode = await fs.promises.readFile(serverCodePath, "utf8"); - - serverCode = serverCode.replaceAll( - /\(await import\((".+")\)\)\.default/g, - "require($1)", - ); - - await fs.promises.writeFile(serverCodePath, serverCode); -} - -Promise.resolve() - .then(() => setup()) - // eslint-disable-next-line unicorn/prefer-top-level-await - .then( - () => { - // eslint-disable-next-line no-console - console.log("The setup was successful"); - }, - (error) => { - throw error; - }, - ); diff --git a/test/e2e/overlay.test.js b/test/e2e/overlay.test.js index be3c059233..5ccb678bdd 100644 --- a/test/e2e/overlay.test.js +++ b/test/e2e/overlay.test.js @@ -2,6 +2,7 @@ const path = require("node:path"); const fs = require("graceful-fs"); +const prettier = require("prettier"); const waitForExpect = require("wait-for-expect"); const webpack = require("webpack"); const Server = require("../../lib/Server"); @@ -68,19 +69,7 @@ const delay = (ms) => setTimeout(resolve, ms); }); -let prettier; -let prettierHTML; -let prettierCSS; - describe("overlay", () => { - beforeAll(async () => { - // Due problems with ESM modules for Node.js@18 - // TODO replace it on import/require when Node.js@18 will be dropped - prettier = require("../../node_modules/prettier/standalone"); - prettierHTML = require("../../node_modules/prettier/plugins/html"); - prettierCSS = require("../../node_modules/prettier/plugins/postcss"); - }); - it("should show a warning for initial compilation", async () => { const compiler = webpack(config); @@ -113,13 +102,11 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("page html"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("overlay html"); } finally { @@ -160,13 +147,11 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("page html"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("overlay html"); } finally { @@ -211,13 +196,11 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("page html"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("overlay html"); } finally { @@ -260,13 +243,11 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("page html"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("overlay html"); } finally { @@ -308,13 +289,11 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("page html"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("overlay html"); } finally { @@ -346,7 +325,6 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("page html initial"); @@ -371,13 +349,11 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("page html with error"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("overlay html"); @@ -394,7 +370,6 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("page html after fix error"); } finally { @@ -426,7 +401,6 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("page html initial"); @@ -451,13 +425,11 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("page html with error"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("overlay html"); @@ -477,13 +449,11 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("page html with other error"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("overlay html"); @@ -500,7 +470,6 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("page html after fix error"); } finally { @@ -532,7 +501,6 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("page html initial"); @@ -557,13 +525,11 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("page html with error"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("overlay html"); @@ -586,7 +552,6 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("page html after close"); @@ -677,7 +642,6 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("page html"); } finally { @@ -720,7 +684,6 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("page html"); } finally { @@ -810,13 +773,11 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("page html"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("overlay html"); } finally { @@ -860,13 +821,11 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("page html"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("overlay html"); } finally { @@ -912,13 +871,11 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("page html"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("overlay html"); } finally { @@ -964,13 +921,11 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("page html"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("overlay html"); } finally { @@ -1011,7 +966,6 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("page html"); } finally { @@ -1054,7 +1008,6 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("page html"); } finally { @@ -1145,13 +1098,11 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("page html"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("overlay html"); } finally { @@ -1195,13 +1146,11 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("page html"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("overlay html"); } finally { @@ -1258,13 +1207,11 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("page html"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("overlay html"); } finally { @@ -1331,13 +1278,11 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("page html"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("overlay html"); } finally { @@ -1379,7 +1324,6 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("page html"); } finally { @@ -1425,13 +1369,11 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("page html"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("overlay html"); } finally { @@ -1477,13 +1419,11 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("page html"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("overlay html"); } finally { @@ -1528,13 +1468,11 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("page html"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("overlay html"); @@ -1557,7 +1495,6 @@ describe("overlay", () => { expect( await prettier.format(pageHtmlAfterClose, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("page html"); } finally { @@ -1611,13 +1548,11 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("page html"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("overlay html"); } finally { @@ -1672,13 +1607,11 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("page html"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("overlay html"); } finally { @@ -1724,7 +1657,6 @@ describe("overlay", () => { expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("overlay html"); } finally { @@ -1814,7 +1746,6 @@ describe("overlay", () => { expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("overlay html"); } finally { @@ -1956,7 +1887,6 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS], }), ).toMatchSnapshot("page html"); expect( @@ -1967,7 +1897,6 @@ describe("overlay", () => { ), { parser: "html", - plugins: [prettierHTML, prettierCSS], }, ), ).toMatchSnapshot("overlay html"); diff --git a/test/server/open-option.test.js b/test/server/open-option.test.js index 11e249d4ba..292eb59b07 100644 --- a/test/server/open-option.test.js +++ b/test/server/open-option.test.js @@ -7,34 +7,18 @@ const port = require("../ports-map")["open-option"]; const internalIPv4 = Server.findIp("v4", false); -let open; - -const needRequireMock = - process.version.startsWith("v18") || process.version.startsWith("v19"); - -if (needRequireMock) { - open = require("open"); - - jest.mock("open"); - - open.mockImplementation(() => ({ - catch: jest.fn(), - })); -} - describe('"open" option', () => { let compiler; + let open; beforeEach(async () => { compiler = webpack(config); - if (!needRequireMock) { - jest.unstable_mockModule("open", () => ({ - default: jest.fn(() => Promise.resolve()), - })); + jest.unstable_mockModule("open", () => ({ + default: jest.fn(() => Promise.resolve()), + })); - open = (await import("open")).default; - } + open = (await import("open")).default; }); afterEach(async () => { From cc0b9316066024e6d6467a102c17b9aa4332350d Mon Sep 17 00:00:00 2001 From: Sebastian Beltran Date: Wed, 21 Jan 2026 09:33:54 -0500 Subject: [PATCH 03/21] feat: remove SockJS support (#5626) * chore: remove SockJSClient and related files from the project * chore: remove SockJS support and related configurations from the project * chore: remove SockJS example files and configurations * chore: remove SockJS support and related tests from the project * refactor: change sockjs to ws for customclient * fix: update import typedef * fix: update snapshots Signed-off-by: Sebastian Beltran * chore: remove SockJS and related type definitions from package.json and package-lock.json * refactor: simplify WebSocket session handling in tests * test: update WebSocket handling in client tests to use CDP sessions * fix: update snapshot for SSL certificate generation log in server options test * docs: update migration guide to reflect removal of SockJS support * refactor: remove SockJS dependency from CustomWebSocketClient * chore: update puppeteer to version 24.35.0 in package.json * fix: update import path for webpack config in client tests * fix: update createCDPSession usage in client tests * refactor: update session creation and subscription handling in tests * fix: update webSocketTransport configuration to include webSocketURL and host --------- Signed-off-by: Sebastian Beltran --- bin/cli-flags.js | 6 +- client-src/clients/SockJSClient.js | 46 - client-src/modules/sockjs-client/index.js | 1 - client-src/socket.js | 2 +- client-src/webpack.config.js | 9 - examples/web-socket-server/sockjs/README.md | 29 - examples/web-socket-server/sockjs/app.js | 6 - .../sockjs/webpack.config.js | 13 - jest.config.js | 4 - lib/Server.js | 108 +- lib/options.json | 6 +- lib/servers/SockJSServer.js | 128 --- migration-v6.md | 3 +- package-lock.json | 195 +--- package.json | 6 +- .../normalize-options.test.js.snap.webpack5 | 57 - .../validate-options.test.js.snap.webpack5 | 33 +- test/cli/client-option.test.js | 11 - test/cli/webSocketServer-option.test.js | 11 - test/client/clients/SockJSClient.test.js | 87 -- .../SockJSClient.test.js.snap.webpack5 | 9 - .../allowed-hosts.test.js.snap.webpack5 | 212 ---- .../__snapshots__/api.test.js.snap.webpack5 | 4 +- .../built-in-routes.test.js.snap.webpack5 | 16 - .../client-reconnect.test.js.snap.webpack5 | 4 +- .../client.test.js.snap.webpack5 | 38 +- .../hot-and-live-reload.test.js.snap.webpack5 | 88 -- .../__snapshots__/ipc.test.js.snap.webpack5 | 20 - .../logging.test.js.snap.webpack5 | 131 --- .../__snapshots__/port.test.js.snap.webpack5 | 8 +- ...and-client-transport.test.js.snap.webpack5 | 43 +- ...socket-communication.test.js.snap.webpack5 | 42 - ...eb-socket-server-url.test.js.snap.webpack5 | 350 +----- test/e2e/allowed-hosts.test.js | 2 +- test/e2e/api.test.js | 12 +- test/e2e/built-in-routes.test.js | 63 -- test/e2e/client.test.js | 113 +- test/e2e/hot-and-live-reload.test.js | 171 +-- test/e2e/ipc.test.js | 88 +- test/e2e/logging.test.js | 5 +- test/e2e/server-and-client-transport.test.js | 199 ---- test/e2e/web-socket-communication.test.js | 2 +- test/e2e/web-socket-server-url.test.js | 1004 ++++++----------- test/e2e/web-socket-server.test.js | 12 +- ...ckJSClient.js => CustomWebSocketClient.js} | 17 +- test/fixtures/provide-plugin-custom/foo.js | 2 +- .../provide-plugin-sockjs-config/foo.js | 8 - .../webpack.config.js | 21 - test/helpers/session-subscribe.js | 4 +- test/normalize-options.test.js | 9 - test/ports-map.js | 2 - test/server/proxy-option.test.js | 2 +- test/validate-options.test.js | 6 +- types/lib/Server.d.ts | 29 +- types/lib/servers/SockJSServer.d.ts | 12 - 55 files changed, 646 insertions(+), 2863 deletions(-) delete mode 100644 client-src/clients/SockJSClient.js delete mode 100644 client-src/modules/sockjs-client/index.js delete mode 100644 examples/web-socket-server/sockjs/README.md delete mode 100644 examples/web-socket-server/sockjs/app.js delete mode 100644 examples/web-socket-server/sockjs/webpack.config.js delete mode 100644 lib/servers/SockJSServer.js delete mode 100644 test/client/clients/SockJSClient.test.js delete mode 100644 test/client/clients/__snapshots__/SockJSClient.test.js.snap.webpack5 rename test/fixtures/custom-client/{CustomSockJSClient.js => CustomWebSocketClient.js} (53%) delete mode 100644 test/fixtures/provide-plugin-sockjs-config/foo.js delete mode 100644 test/fixtures/provide-plugin-sockjs-config/webpack.config.js delete mode 100644 types/lib/servers/SockJSServer.d.ts diff --git a/bin/cli-flags.js b/bin/cli-flags.js index d32c38cbb0..a4549786fe 100644 --- a/bin/cli-flags.js +++ b/bin/cli-flags.js @@ -214,7 +214,7 @@ module.exports = { configs: [ { type: "enum", - values: ["sockjs", "ws"], + values: ["ws"], multiple: false, description: "Allows to set custom web socket transport to communicate with dev server.", @@ -1253,7 +1253,7 @@ module.exports = { multiple: false, path: "webSocketServer", type: "enum", - values: ["sockjs", "ws"], + values: ["ws"], }, { description: @@ -1276,7 +1276,7 @@ module.exports = { multiple: false, path: "webSocketServer.type", type: "enum", - values: ["sockjs", "ws"], + values: ["ws"], }, { description: diff --git a/client-src/clients/SockJSClient.js b/client-src/clients/SockJSClient.js deleted file mode 100644 index cd9d67ad48..0000000000 --- a/client-src/clients/SockJSClient.js +++ /dev/null @@ -1,46 +0,0 @@ -import SockJS from "../modules/sockjs-client/index.js"; -import { log } from "../utils/log.js"; - -/** @typedef {import("../index").EXPECTED_ANY} EXPECTED_ANY */ - -/** - * @implements {CommunicationClient} - */ -export default class SockJSClient { - /** - * @param {string} url url - */ - constructor(url) { - // SockJS requires `http` and `https` protocols - this.sock = new SockJS( - url.replace(/^ws:/i, "http:").replace(/^wss:/i, "https:"), - ); - this.sock.onerror = (error) => { - log.error(error); - }; - } - - /** - * @param {(...args: EXPECTED_ANY[]) => void} fn function - */ - onOpen(fn) { - this.sock.onopen = fn; - } - - /** - * @param {(...args: EXPECTED_ANY[]) => void} fn function - */ - onClose(fn) { - this.sock.onclose = fn; - } - - // call f with the message string as the first argument - /** - * @param {(...args: EXPECTED_ANY[]) => void} fn function - */ - onMessage(fn) { - this.sock.onmessage = (err) => { - fn(err.data); - }; - } -} diff --git a/client-src/modules/sockjs-client/index.js b/client-src/modules/sockjs-client/index.js deleted file mode 100644 index 96035e03ab..0000000000 --- a/client-src/modules/sockjs-client/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from "sockjs-client"; diff --git a/client-src/socket.js b/client-src/socket.js index 7fa045a06a..c44e633a3e 100644 --- a/client-src/socket.js +++ b/client-src/socket.js @@ -4,7 +4,7 @@ import WebSocketClient from "./clients/WebSocketClient.js"; import { log } from "./utils/log.js"; /** @typedef {import("./index.js").EXPECTED_ANY} EXPECTED_ANY */ -/** @typedef {import("./clients/SockJSClient")} SockJSClient */ +/** @typedef {WebSocketClient} */ // this WebsocketClient is here as a default fallback, in case the client is not injected /** @type {CommunicationClientConstructor} */ diff --git a/client-src/webpack.config.js b/client-src/webpack.config.js index 210f775f5c..7037f9406f 100644 --- a/client-src/webpack.config.js +++ b/client-src/webpack.config.js @@ -69,13 +69,4 @@ module.exports = [ ), ], }), - merge(baseForModules, { - entry: path.join(__dirname, "modules/sockjs-client/index.js"), - output: { - filename: "sockjs-client/index.js", - library: "SockJS", - libraryTarget: "umd", - globalObject: "(typeof self !== 'undefined' ? self : this)", - }, - }), ]; diff --git a/examples/web-socket-server/sockjs/README.md b/examples/web-socket-server/sockjs/README.md deleted file mode 100644 index a69a36ad9a..0000000000 --- a/examples/web-socket-server/sockjs/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# web-socket-server (sockjs) - -To create a custom server implementation. - -## sockjs - -This mode uses [SockJS-node](https://github.com/sockjs/sockjs-node) as a server. - -**webpack.config.js** - -```js -module.exports = { - // ... - devServer: { - webSocketServer: "sockjs", - }, -}; -``` - -Usage via CLI: - -```console -npx webpack serve --web-socket-server-type sockjs --open -``` - -### What Should Happen - -1. The script should open `http://localhost:8080/` in your default browser. -2. You should see the text on the page itself change to read `Success!`. diff --git a/examples/web-socket-server/sockjs/app.js b/examples/web-socket-server/sockjs/app.js deleted file mode 100644 index 51cf4a396b..0000000000 --- a/examples/web-socket-server/sockjs/app.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -const target = document.querySelector("#target"); - -target.classList.add("pass"); -target.innerHTML = "Success!"; diff --git a/examples/web-socket-server/sockjs/webpack.config.js b/examples/web-socket-server/sockjs/webpack.config.js deleted file mode 100644 index 4740693e79..0000000000 --- a/examples/web-socket-server/sockjs/webpack.config.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; - -// our setup function adds behind-the-scenes bits to the config that all of our -// examples need -const { setup } = require("../../util"); - -module.exports = setup({ - context: __dirname, - entry: "./app.js", - devServer: { - webSocketServer: "sockjs", - }, -}); diff --git a/jest.config.js b/jest.config.js index 197b147833..7bd7b0bb03 100644 --- a/jest.config.js +++ b/jest.config.js @@ -26,9 +26,5 @@ module.exports = { // https://jestjs.io/docs/upgrading-to-jest28#packagejson-exports // https://github.com/microsoft/accessibility-insights-web/pull/5421#issuecomment-1109168149 // - // FIXME: this uuid moduleNameMapper workaround can be removed after sockjs > uuid@v9 release - // https://github.com/uuidjs/uuid/pull/616#issuecomment-1206283882 - // eslint-disable-next-line n/no-extraneous-require - "^uuid$": require.resolve("uuid"), }, }; diff --git a/lib/Server.js b/lib/Server.js index ad990ab1f6..0867678dc1 100644 --- a/lib/Server.js +++ b/lib/Server.js @@ -121,16 +121,16 @@ const schema = require("./options.json"); /** * @typedef {object} WebSocketServerConfiguration - * @property {("sockjs" | "ws" | string | (() => WebSocketServerConfiguration))=} type type + * @property {( "ws" | string | (() => WebSocketServerConfiguration))=} type type * @property {Record=} options options */ /** - * @typedef {(import("ws").WebSocket | import("sockjs").Connection & { send: import("ws").WebSocket["send"], terminate: import("ws").WebSocket["terminate"], ping: import("ws").WebSocket["ping"] }) & { isAlive?: boolean }} ClientConnection + * @typedef {(import("ws").WebSocket & { send: import("ws").WebSocket["send"], terminate: import("ws").WebSocket["terminate"], ping: import("ws").WebSocket["ping"] }) & { isAlive?: boolean }} ClientConnection */ /** - * @typedef {import("ws").WebSocketServer | import("sockjs").Server & { close: import("ws").WebSocketServer["close"] }} WebSocketServer + * @typedef {import("ws").WebSocketServer & { close: import("ws").WebSocketServer["close"] }} WebSocketServer */ /** @@ -190,7 +190,7 @@ const schema = require("./options.json"); * @property {(boolean | { warnings?: OverlayMessageOptions, errors?: OverlayMessageOptions, runtimeErrors?: OverlayMessageOptions })=} overlay overlay * @property {boolean=} progress progress * @property {(boolean | number)=} reconnect reconnect - * @property {("ws" | "sockjs" | string)=} webSocketTransport web socket transport + * @property {("ws" | string)=} webSocketTransport web socket transport * @property {(string | WebSocketURL)=} webSocketURL web socket URL */ @@ -231,7 +231,7 @@ const schema = require("./options.json"); * @property {(boolean | string | Static | Array)=} static * @property {(ServerType | ServerConfiguration)=} server * @property {(() => Promise)=} app - * @property {(boolean | "sockjs" | "ws" | string | WebSocketServerConfiguration)=} webSocketServer + * @property {(boolean | "ws" | string | WebSocketServerConfiguration)=} webSocketServer * @property {ProxyConfigArray=} proxy * @property {(boolean | string | Open | Array)=} open * @property {boolean=} setupExitSignals @@ -656,28 +656,17 @@ class Server { /** @type {string} */ let hostname; - // SockJS is not supported server mode, so `hostname` and `port` can't specified, let's ignore them - const isSockJSType = webSocketServer.type === "sockjs"; const isWebSocketServerHostDefined = typeof webSocketServer.options.host !== "undefined"; const isWebSocketServerPortDefined = typeof webSocketServer.options.port !== "undefined"; - if ( - isSockJSType && - (isWebSocketServerHostDefined || isWebSocketServerPortDefined) - ) { - this.logger.warn( - "SockJS only supports client mode and does not support custom hostname and port options. Please consider using 'ws' if you need to customize these options.", - ); - } - // We are proxying dev server and need to specify custom `hostname` if (typeof webSocketURL.hostname !== "undefined") { hostname = webSocketURL.hostname; } // Web socket server works on custom `hostname`, only for `ws` because `sock-js` is not support custom `hostname` - else if (isWebSocketServerHostDefined && !isSockJSType) { + else if (isWebSocketServerHostDefined) { hostname = webSocketServer.options.host; } // The `host` option is specified @@ -699,7 +688,7 @@ class Server { port = webSocketURL.port; } // Web socket server works on custom `port`, only for `ws` because `sock-js` is not support custom `port` - else if (isWebSocketServerPortDefined && !isSockJSType) { + else if (isWebSocketServerPortDefined) { port = webSocketServer.options.port; } // The `port` option is specified @@ -1542,9 +1531,7 @@ class Server { (this.options.webSocketServer).type ) === "string" && // @ts-expect-error - (this.options.webSocketServer.type === "ws" || - /** @type {WebSocketServerConfiguration} */ - (this.options.webSocketServer).type === "sockjs"); + this.options.webSocketServer.type === "ws"; let clientTransport; @@ -1571,12 +1558,8 @@ class Server { switch (typeof clientTransport) { case "string": - // could be 'sockjs', 'ws', or a path that should be required - if (clientTransport === "sockjs") { - clientImplementation = require.resolve( - "../client/clients/SockJSClient", - ); - } else if (clientTransport === "ws") { + // could be 'ws', or a path that should be required + if (clientTransport === "ws") { clientImplementation = require.resolve( "../client/clients/WebSocketClient", ); @@ -1598,7 +1581,7 @@ class Server { !isKnownWebSocketServerImplementation ? "When you use custom web socket implementation you must explicitly specify client.webSocketTransport. " : "" - }client.webSocketTransport must be a string denoting a default implementation (e.g. 'sockjs', 'ws') or a full path to a JS file via require.resolve(...) which exports a class `, + }client.webSocketTransport must be a string denoting a default implementation (e.g. 'ws') or a full path to a JS file via require.resolve(...) which exports a class `, ); } @@ -1621,14 +1604,8 @@ class Server { ) ) { case "string": - // Could be 'sockjs', in the future 'ws', or a path that should be required + // Could be 'ws', or a path that should be required if ( - /** @type {WebSocketServerConfiguration} */ ( - this.options.webSocketServer - ).type === "sockjs" - ) { - implementation = require("./servers/SockJSServer"); - } else if ( /** @type {WebSocketServerConfiguration} */ ( this.options.webSocketServer ).type === "ws" @@ -1656,7 +1633,7 @@ class Server { if (!implementationFound) { throw new Error( - "webSocketServer (webSocketServer.type) must be a string denoting a default implementation (e.g. 'ws', 'sockjs'), a full path to " + + "webSocketServer (webSocketServer.type) must be a string denoting a default implementation (e.g. 'ws'), a full path to " + "a JS file which exports a class extending BaseServer (webpack-dev-server/lib/servers/BaseServer.js) " + "via require.resolve(...), or the class itself which extends BaseServer", ); @@ -2047,56 +2024,6 @@ class Server { middleware: /** @type {MiddlewareHandler} */ (this.middleware), }); - // Should be after `webpack-dev-middleware`, otherwise other middlewares might rewrite response - middlewares.push({ - name: "webpack-dev-server-sockjs-bundle", - path: "/__webpack_dev_server__/sockjs.bundle.js", - /** - * @param {Request} req request - * @param {Response} res response - * @param {NextFunction} next next function - * @returns {void} - */ - middleware: (req, res, next) => { - if (req.method !== "GET" && req.method !== "HEAD") { - next(); - return; - } - - const clientPath = path.join( - __dirname, - "..", - "client/modules/sockjs-client/index.js", - ); - - // Express send Etag and other headers by default, so let's keep them for compatibility reasons - if (typeof res.sendFile === "function") { - res.sendFile(clientPath); - return; - } - - let stats; - - try { - // TODO implement `inputFileSystem.createReadStream` in webpack - stats = fs.statSync(clientPath); - } catch { - next(); - return; - } - - res.setHeader("Content-Type", "application/javascript; charset=UTF-8"); - res.setHeader("Content-Length", stats.size); - - if (req.method === "HEAD") { - res.end(); - return; - } - - fs.createReadStream(clientPath).pipe(res); - }, - }); - middlewares.push({ name: "webpack-dev-server-invalidate", path: "/webpack-dev-server/invalidate", @@ -2659,11 +2586,7 @@ class Server { typeof request !== "undefined" ? /** @type {{ [key: string]: string | undefined }} */ (request.headers) - : typeof ( - /** @type {import("sockjs").Connection} */ (client).headers - ) !== "undefined" - ? /** @type {import("sockjs").Connection} */ (client).headers - : undefined; + : undefined; if (!headers) { this.logger.warn( @@ -3297,8 +3220,7 @@ class Server { */ sendMessage(clients, type, data, params) { for (const client of clients) { - // `sockjs` uses `1` to indicate client is ready to accept data - // `ws` uses `WebSocket.OPEN`, but it is mean `1` too + // `ws` uses `WebSocket.OPEN`, which is `1` if (client.readyState === 1) { client.send(JSON.stringify({ type, data, params })); } diff --git a/lib/options.json b/lib/options.json index f5fa540624..116292d8a0 100644 --- a/lib/options.json +++ b/lib/options.json @@ -193,7 +193,7 @@ "link": "https://webpack.js.org/configuration/dev-server/#websockettransport" }, "ClientWebSocketTransportEnum": { - "enum": ["sockjs", "ws"] + "enum": ["ws"] }, "ClientWebSocketTransportString": { "type": "string", @@ -907,7 +907,7 @@ "link": "https://webpack.js.org/configuration/dev-server/#devserverwebsocketserver" }, "WebSocketServerType": { - "enum": ["sockjs", "ws"] + "enum": ["ws"] }, "WebSocketServerEnum": { "anyOf": [ @@ -918,7 +918,7 @@ } }, { - "enum": ["sockjs", "ws"], + "enum": ["ws"], "cli": { "exclude": true } diff --git a/lib/servers/SockJSServer.js b/lib/servers/SockJSServer.js deleted file mode 100644 index 5468355bd7..0000000000 --- a/lib/servers/SockJSServer.js +++ /dev/null @@ -1,128 +0,0 @@ -"use strict"; - -const sockjs = require("sockjs"); -const BaseServer = require("./BaseServer"); - -/** @typedef {import("../Server").WebSocketServerConfiguration} WebSocketServerConfiguration */ -/** @typedef {import("../Server").ClientConnection} ClientConnection */ - -// Workaround for sockjs@~0.3.19 -// sockjs will remove Origin header, however Origin header is required for checking host. -// See https://github.com/webpack/webpack-dev-server/issues/1604 for more information -{ - // @ts-expect-error - const SockjsSession = require("sockjs/lib/transport").Session; - - const { decorateConnection } = SockjsSession.prototype; - - /** - * @param {import("http").IncomingMessage} req request - */ - // eslint-disable-next-line func-names - SockjsSession.prototype.decorateConnection = function (req) { - decorateConnection.call(this, req); - - const { connection } = this; - - if ( - connection.headers && - !("origin" in connection.headers) && - "origin" in req.headers - ) { - connection.headers.origin = req.headers.origin; - } - }; -} - -module.exports = class SockJSServer extends BaseServer { - // options has: error (function), debug (function), server (http/s server), path (string) - /** - * @param {import("../Server")} server server - */ - constructor(server) { - super(server); - - const webSocketServerOptions = - /** @type {NonNullable} */ - ( - /** @type {WebSocketServerConfiguration} */ - (this.server.options.webSocketServer).options - ); - - /** - * @param {NonNullable} options options - * @returns {string} sockjs URL - */ - const getSockjsUrl = (options) => { - if (typeof options.sockjsUrl !== "undefined") { - return options.sockjsUrl; - } - - return "/__webpack_dev_server__/sockjs.bundle.js"; - }; - - this.implementation = sockjs.createServer({ - // Use provided up-to-date sockjs-client - // eslint-disable-next-line camelcase - sockjs_url: getSockjsUrl(webSocketServerOptions), - // Default logger is very annoy. Limit useless logs. - /** - * @param {string} severity severity - * @param {string} line line - */ - log: (severity, line) => { - if (severity === "error") { - this.server.logger.error(line); - } else if (severity === "info") { - this.server.logger.log(line); - } else { - this.server.logger.debug(line); - } - }, - }); - - /** - * @param {import("sockjs").ServerOptions & { path?: string }} options options - * @returns {string | undefined} prefix - */ - const getPrefix = (options) => { - if (typeof options.prefix !== "undefined") { - return options.prefix; - } - - return options.path; - }; - - const options = { - ...webSocketServerOptions, - prefix: getPrefix(webSocketServerOptions), - }; - - this.implementation.installHandlers( - /** @type {import("http").Server} */ (this.server.server), - options, - ); - - this.implementation.on("connection", (client) => { - // @ts-expect-error - // Implement the the same API as for `ws` - client.send = client.write; - // @ts-expect-error - client.terminate = client.close; - - this.clients.push(/** @type {ClientConnection} */ (client)); - - client.on("close", () => { - this.clients.splice( - this.clients.indexOf(/** @type {ClientConnection} */ (client)), - 1, - ); - }); - }); - - // @ts-expect-error - this.implementation.close = (callback) => { - callback(); - }; - } -}; diff --git a/migration-v6.md b/migration-v6.md index 9a4d78722d..7007bafd38 100644 --- a/migration-v6.md +++ b/migration-v6.md @@ -2,9 +2,10 @@ This document serves as a migration guide for `webpack-dev-server@6.0.0`. -## ⚠ BREAKING CHANGES +## ⚠ Breaking Changes - Minimum supported `Node.js` version is `20.9.0`. +- Support for **SockJS** in the WebSocket transport has been removed. Now, only **native WebSocket** is supported, or **custom** client and server implementations can be used. ## Deprecations diff --git a/package-lock.json b/package-lock.json index 0824a00b3a..69275b339f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,6 @@ "@types/express-serve-static-core": "^4.17.21", "@types/serve-index": "^1.9.4", "@types/serve-static": "^1.15.5", - "@types/sockjs": "^0.3.36", "@types/ws": "^8.5.10", "ansi-html-community": "^0.0.8", "bonjour-service": "^1.2.1", @@ -33,7 +32,6 @@ "schema-utils": "^4.2.0", "selfsigned": "^5.5.0", "serve-index": "^1.9.1", - "sockjs": "^0.3.24", "spdy": "^4.0.2", "webpack-dev-middleware": "^7.4.2", "ws": "^8.18.0" @@ -57,7 +55,6 @@ "@types/graceful-fs": "^4.1.9", "@types/node": "^24.0.14", "@types/node-forge": "^1.3.1", - "@types/sockjs-client": "^1.5.1", "@types/trusted-types": "^2.0.7", "acorn": "^8.14.0", "babel-jest": "^30.0.4", @@ -88,11 +85,10 @@ "memfs": "^4.14.0", "npm-run-all": "^4.1.5", "prettier": "^3.2.4", - "puppeteer": "^24.10.0", + "puppeteer": "^24.35.0", "readable-stream": "^4.5.2", "require-from-string": "^2.0.2", "rimraf": "^5.0.5", - "sockjs-client": "^1.6.1", "standard-version": "^9.3.0", "style-loader": "^4.0.0", "supertest": "^7.2.2", @@ -4559,9 +4555,9 @@ } }, "node_modules/@puppeteer/browsers": { - "version": "2.10.13", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.10.13.tgz", - "integrity": "sha512-a9Ruw3j3qlnB5a/zHRTkruppynxqaeE4H9WNj5eYGRWqw0ZauZ23f4W2ARf3hghF5doozyD+CRtt7XSYuYRI/Q==", + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.11.1.tgz", + "integrity": "sha512-YmhAxs7XPuxN0j7LJloHpfD1ylhDuFmmwMvfy/+6nBSrETT2ycL53LrhgPtR+f+GcPSybQVuQ5inWWu5MrWCpA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -5046,22 +5042,6 @@ "@types/send": "<1" } }, - "node_modules/@types/sockjs": { - "version": "0.3.36", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", - "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/sockjs-client": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/sockjs-client/-/sockjs-client-1.5.4.tgz", - "integrity": "sha512-zk+uFZeWyvJ5ZFkLIwoGA/DfJ+pYzcZ8eH4H/EILCm2OBZyHH6Hkdna1/UWL/CFruh5wj6ES7g75SvUB0VsH5w==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/stack-utils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", @@ -6716,9 +6696,9 @@ } }, "node_modules/bare-fs": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.5.1.tgz", - "integrity": "sha512-zGUCsm3yv/ePt2PHNbVxjjn0nNB1MkIaR4wOCxJ2ig5pCf5cCVAYJXVhQg/3OhhJV6DB1ts7Hv0oUaElc2TPQg==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.5.2.tgz", + "integrity": "sha512-veTnRzkb6aPHOvSKIOy60KzURfBdUflr5VReI+NSaPL6xf+XLdONQgZgpYvUuZLVQ8dCqxpBAudaOM1+KpAUxw==", "dev": true, "license": "Apache-2.0", "optional": true, @@ -6829,9 +6809,9 @@ } }, "node_modules/basic-ftp": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", - "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.1.0.tgz", + "integrity": "sha512-RkaJzeJKDbaDWTIPiJwubyljaEPwpVWkm9Rt5h9Nd6h7tEXTJ3VB4qxdZBioV7JO5yLUaOKwz7vDOzlncUsegw==", "dev": true, "license": "MIT", "engines": { @@ -7318,9 +7298,9 @@ } }, "node_modules/chromium-bidi": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-11.0.0.tgz", - "integrity": "sha512-cM3DI+OOb89T3wO8cpPSro80Q9eKYJ7hGVXoGS3GkDPxnYSqiv+6xwpIf6XERyJ9Tdsl09hmNmY94BkgZdVekw==", + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-12.0.1.tgz", + "integrity": "sha512-fGg+6jr0xjQhzpy5N4ErZxQ4wF7KLEvhGZXD6EgvZKDhu7iOhZXnZhcDxPJDcwTcrD48NPzOCo84RP2lv3Z+Cg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -9982,9 +9962,9 @@ } }, "node_modules/devtools-protocol": { - "version": "0.0.1521046", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1521046.tgz", - "integrity": "sha512-vhE6eymDQSKWUXwwA37NtTTVEzjtGVfDr3pRbsWEQ5onH/Snp2c+2xZHWJJawG/0hCCJLRGt4xVtEVUVILol4w==", + "version": "0.0.1534754", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1534754.tgz", + "integrity": "sha512-26T91cV5dbOYnXdJi5qQHoTtUoNEqwkHcAyu/IKtjIAxiEqPMrDiRkDOPWVsGfNZGmlQVHQbZRSjD8sxagWVsQ==", "dev": true, "license": "BSD-3-Clause", "peer": true @@ -11484,16 +11464,6 @@ "bare-events": "^2.7.0" } }, - "node_modules/eventsource": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-2.0.2.tgz", - "integrity": "sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -11753,18 +11723,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "license": "Apache-2.0", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/fb-watchman": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", @@ -13426,12 +13384,6 @@ "node": ">= 0.8" } }, - "node_modules/http-parser-js": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", - "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", - "license": "MIT" - }, "node_modules/http-proxy": { "version": "1.18.1", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", @@ -19840,18 +19792,18 @@ } }, "node_modules/puppeteer": { - "version": "24.31.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-24.31.0.tgz", - "integrity": "sha512-q8y5yLxLD8xdZdzNWqdOL43NbfvUOp60SYhaLZQwHC9CdKldxQKXOyJAciOr7oUJfyAH/KgB2wKvqT2sFKoVXA==", + "version": "24.35.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-24.35.0.tgz", + "integrity": "sha512-sbjB5JnJ+3nwgSdRM/bqkFXqLxRz/vsz0GRIeTlCk+j+fGpqaF2dId9Qp25rXz9zfhqnN9s0krek1M/C2GDKtA==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@puppeteer/browsers": "2.10.13", - "chromium-bidi": "11.0.0", + "@puppeteer/browsers": "2.11.1", + "chromium-bidi": "12.0.1", "cosmiconfig": "^9.0.0", - "devtools-protocol": "0.0.1521046", - "puppeteer-core": "24.31.0", + "devtools-protocol": "0.0.1534754", + "puppeteer-core": "24.35.0", "typed-query-selector": "^2.12.0" }, "bin": { @@ -19862,19 +19814,19 @@ } }, "node_modules/puppeteer-core": { - "version": "24.31.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.31.0.tgz", - "integrity": "sha512-pnAohhSZipWQoFpXuGV7xCZfaGhqcBR9C4pVrU0QSrcMi7tQMH9J9lDBqBvyMAHQqe8HCARuREqFuVKRQOgTvg==", + "version": "24.35.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.35.0.tgz", + "integrity": "sha512-vt1zc2ME0kHBn7ZDOqLvgvrYD5bqNv5y2ZNXzYnCv8DEtZGw/zKhljlrGuImxptZ4rq+QI9dFGrUIYqG4/IQzA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@puppeteer/browsers": "2.10.13", - "chromium-bidi": "11.0.0", + "@puppeteer/browsers": "2.11.1", + "chromium-bidi": "12.0.1", "debug": "^4.4.3", - "devtools-protocol": "0.0.1521046", + "devtools-protocol": "0.0.1534754", "typed-query-selector": "^2.12.0", - "webdriver-bidi-protocol": "0.3.9", - "ws": "^8.18.3" + "webdriver-bidi-protocol": "0.3.10", + "ws": "^8.19.0" }, "engines": { "node": ">=18" @@ -21160,47 +21112,6 @@ "npm": ">= 3.0.0" } }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "license": "MIT", - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/sockjs-client": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.6.1.tgz", - "integrity": "sha512-2g0tjOR+fRs0amxENLi/q5TiJTqY+WXFOzb5UwXndlK6TO3U/mirZznpx6w34HVMoc3g7cY24yC/ZMIYnDlfkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7", - "eventsource": "^2.0.2", - "faye-websocket": "^0.11.4", - "inherits": "^2.0.4", - "url-parse": "^1.5.10" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://tidelift.com/funding/github/npm/sockjs-client" - } - }, - "node_modules/sockjs-client/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, "node_modules/socks": { "version": "2.8.7", "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", @@ -23210,15 +23121,6 @@ "node": ">= 0.4.0" } }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/v8-to-istanbul": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", @@ -23333,9 +23235,9 @@ } }, "node_modules/webdriver-bidi-protocol": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.3.9.tgz", - "integrity": "sha512-uIYvlRQ0PwtZR1EzHlTMol1G0lAlmOe6wPykF9a77AK3bkpvZHzIVxRE2ThOx5vjy2zISe0zhwf5rzuUfbo1PQ==", + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.3.10.tgz", + "integrity": "sha512-5LAE43jAVLOhB/QqX4bwSiv0Hg1HBfMmOuwBSXHdvg4GMGu9Y0lIq7p4R/yySu6w74WmaR4GM4H9t2IwLW7hgw==", "dev": true, "license": "Apache-2.0" }, @@ -23519,29 +23421,6 @@ "node": ">=10.13.0" } }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "license": "Apache-2.0", - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "license": "Apache-2.0", - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/whatwg-encoding": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", @@ -23897,9 +23776,9 @@ } }, "node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", + "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", "license": "MIT", "engines": { "node": ">=10.0.0" diff --git a/package.json b/package.json index 0cc2dc22d7..2d66dbdf1d 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,6 @@ "@types/express-serve-static-core": "^4.17.21", "@types/serve-index": "^1.9.4", "@types/serve-static": "^1.15.5", - "@types/sockjs": "^0.3.36", "@types/ws": "^8.5.10", "ansi-html-community": "^0.0.8", "bonjour-service": "^1.2.1", @@ -68,7 +67,6 @@ "schema-utils": "^4.2.0", "selfsigned": "^5.5.0", "serve-index": "^1.9.1", - "sockjs": "^0.3.24", "spdy": "^4.0.2", "webpack-dev-middleware": "^7.4.2", "ws": "^8.18.0" @@ -89,7 +87,6 @@ "@types/graceful-fs": "^4.1.9", "@types/node": "^24.0.14", "@types/node-forge": "^1.3.1", - "@types/sockjs-client": "^1.5.1", "@types/trusted-types": "^2.0.7", "acorn": "^8.14.0", "babel-jest": "^30.0.4", @@ -120,11 +117,10 @@ "memfs": "^4.14.0", "npm-run-all": "^4.1.5", "prettier": "^3.2.4", - "puppeteer": "^24.10.0", + "puppeteer": "^24.35.0", "readable-stream": "^4.5.2", "require-from-string": "^2.0.2", "rimraf": "^5.0.5", - "sockjs-client": "^1.6.1", "standard-version": "^9.3.0", "style-loader": "^4.0.0", "supertest": "^7.2.2", diff --git a/test/__snapshots__/normalize-options.test.js.snap.webpack5 b/test/__snapshots__/normalize-options.test.js.snap.webpack5 index 436119cd68..06c223f976 100644 --- a/test/__snapshots__/normalize-options.test.js.snap.webpack5 +++ b/test/__snapshots__/normalize-options.test.js.snap.webpack5 @@ -403,63 +403,6 @@ exports[`normalize options client path without leading/ending slashes 1`] = ` } `; -exports[`normalize options client.webSocketTransport sockjs string 1`] = ` -{ - "allowedHosts": "auto", - "bonjour": false, - "client": { - "logging": "info", - "overlay": true, - "reconnect": 10, - "webSocketTransport": "sockjs", - "webSocketURL": {}, - }, - "compress": true, - "devMiddleware": {}, - "historyApiFallback": false, - "host": undefined, - "hot": true, - "liveReload": true, - "open": [], - "port": "", - "server": { - "options": {}, - "type": "http", - }, - "setupExitSignals": true, - "static": [ - { - "directory": "/public", - "publicPath": [ - "/", - ], - "serveIndex": { - "icons": true, - }, - "staticOptions": {}, - "watch": { - "alwaysStat": true, - "atomic": false, - "followSymlinks": false, - "ignoreInitial": true, - "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, - "persistent": true, - "usePolling": false, - }, - }, - ], - "watchFiles": [], - "webSocketServer": { - "options": { - "path": "/ws", - }, - "type": "ws", - }, -} -`; - exports[`normalize options client.webSocketTransport ws string 1`] = ` { "allowedHosts": "auto", diff --git a/test/__snapshots__/validate-options.test.js.snap.webpack5 b/test/__snapshots__/validate-options.test.js.snap.webpack5 index 840a0143c1..b043e1c9ee 100644 --- a/test/__snapshots__/validate-options.test.js.snap.webpack5 +++ b/test/__snapshots__/validate-options.test.js.snap.webpack5 @@ -189,12 +189,11 @@ exports[`options validate should throw an error on the "client" option with '{"w -> Read more at https://webpack.js.org/configuration/dev-server/#devserverclient Details: * options.client.webSocketTransport should be one of these: - "sockjs" | "ws" | non-empty string + "ws" | non-empty string -> Allows to set custom web socket transport to communicate with dev server. -> Read more at https://webpack.js.org/configuration/dev-server/#websockettransport Details: - * options.client.webSocketTransport should be one of these: - "sockjs" | "ws" + * options.client.webSocketTransport should be "ws". * options.client.webSocketTransport should be a non-empty string." `; @@ -787,15 +786,14 @@ exports[`options validate should throw an error on the "webSocketServer" option exports[`options validate should throw an error on the "webSocketServer" option with '{"type":false}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.webSocketServer should be one of these: - false | "sockjs" | "ws" | non-empty string | function | object { type?, options? } + false | "ws" | non-empty string | function | object { type?, options? } -> Allows to set web socket server and options (by default 'ws'). -> Read more at https://webpack.js.org/configuration/dev-server/#devserverwebsocketserver Details: * options.webSocketServer.type should be one of these: - "sockjs" | "ws" | non-empty string | function + "ws" | non-empty string | function Details: - * options.webSocketServer.type should be one of these: - "sockjs" | "ws" + * options.webSocketServer.type should be "ws". * options.webSocketServer.type should be a non-empty string. * options.webSocketServer.type should be an instance of function." `; @@ -803,15 +801,14 @@ exports[`options validate should throw an error on the "webSocketServer" option exports[`options validate should throw an error on the "webSocketServer" option with '{"type":true}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.webSocketServer should be one of these: - false | "sockjs" | "ws" | non-empty string | function | object { type?, options? } + false | "ws" | non-empty string | function | object { type?, options? } -> Allows to set web socket server and options (by default 'ws'). -> Read more at https://webpack.js.org/configuration/dev-server/#devserverwebsocketserver Details: * options.webSocketServer.type should be one of these: - "sockjs" | "ws" | non-empty string | function + "ws" | non-empty string | function Details: - * options.webSocketServer.type should be one of these: - "sockjs" | "ws" + * options.webSocketServer.type should be "ws". * options.webSocketServer.type should be a non-empty string. * options.webSocketServer.type should be an instance of function." `; @@ -819,16 +816,15 @@ exports[`options validate should throw an error on the "webSocketServer" option exports[`options validate should throw an error on the "webSocketServer" option with 'null' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.webSocketServer should be one of these: - false | "sockjs" | "ws" | non-empty string | function | object { type?, options? } + false | "ws" | non-empty string | function | object { type?, options? } -> Allows to set web socket server and options (by default 'ws'). -> Read more at https://webpack.js.org/configuration/dev-server/#devserverwebsocketserver Details: * options.webSocketServer should be one of these: - false | "sockjs" | "ws" + false | "ws" Details: * options.webSocketServer should be false. - * options.webSocketServer should be one of these: - "sockjs" | "ws" + * options.webSocketServer should be "ws". * options.webSocketServer should be a non-empty string. * options.webSocketServer should be an instance of function. * options.webSocketServer should be an object: @@ -838,16 +834,15 @@ exports[`options validate should throw an error on the "webSocketServer" option exports[`options validate should throw an error on the "webSocketServer" option with 'true' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.webSocketServer should be one of these: - false | "sockjs" | "ws" | non-empty string | function | object { type?, options? } + false | "ws" | non-empty string | function | object { type?, options? } -> Allows to set web socket server and options (by default 'ws'). -> Read more at https://webpack.js.org/configuration/dev-server/#devserverwebsocketserver Details: * options.webSocketServer should be one of these: - false | "sockjs" | "ws" + false | "ws" Details: * options.webSocketServer should be false. - * options.webSocketServer should be one of these: - "sockjs" | "ws" + * options.webSocketServer should be "ws". * options.webSocketServer should be a non-empty string. * options.webSocketServer should be an instance of function. * options.webSocketServer should be an object: diff --git a/test/cli/client-option.test.js b/test/cli/client-option.test.js index d9c95c609f..0fd38d6af8 100644 --- a/test/cli/client-option.test.js +++ b/test/cli/client-option.test.js @@ -4,17 +4,6 @@ const { testBin } = require("../helpers/test-bin"); const port = require("../ports-map")["cli-client"]; describe('"client" CLI option', () => { - it('should work using "--client-web-socket-transport sockjs"', async () => { - const { exitCode } = await testBin([ - "--port", - port, - "--client-web-socket-transport", - "sockjs", - ]); - - expect(exitCode).toBe(0); - }); - it('should work using "--client-web-socket-transport ws"', async () => { const { exitCode } = await testBin([ "--port", diff --git a/test/cli/webSocketServer-option.test.js b/test/cli/webSocketServer-option.test.js index ec383cd767..e7394c8933 100644 --- a/test/cli/webSocketServer-option.test.js +++ b/test/cli/webSocketServer-option.test.js @@ -15,17 +15,6 @@ describe('"webSocketServer" CLI option', () => { expect(exitCode).toBe(0); }); - it('should work using "--web-socket-server-type sockjs"', async () => { - const { exitCode } = await testBin([ - "--port", - port, - "--web-socket-server-type", - "sockjs", - ]); - - expect(exitCode).toBe(0); - }); - it('should work using "--no-web-socket-server"', async () => { const { exitCode } = await testBin([ "--port", diff --git a/test/client/clients/SockJSClient.test.js b/test/client/clients/SockJSClient.test.js deleted file mode 100644 index ae388b5f20..0000000000 --- a/test/client/clients/SockJSClient.test.js +++ /dev/null @@ -1,87 +0,0 @@ -/** - * @jest-environment jsdom - */ - -"use strict"; - -const http = require("node:http"); -const express = require("express"); -const sockjs = require("sockjs"); -const port = require("../../ports-map")["sockjs-client"]; - -jest.setMock("../../../client-src/utils/log", { - log: { - error: jest.fn(), - }, -}); - -describe("SockJSClient", () => { - const SockJSClient = - require("../../../client-src/clients/SockJSClient").default; - const { log } = require("../../../client-src/utils/log"); - - let consoleMock; - let socketServer; - let server; - - beforeAll((done) => { - consoleMock = jest.spyOn(console, "log").mockImplementation(); - - // eslint-disable-next-line new-cap - const app = new express(); - - server = http.createServer(app); - server.listen(port, "localhost", () => { - socketServer = sockjs.createServer(); - socketServer.installHandlers(server, { - prefix: "/ws", - }); - done(); - }); - }); - - afterAll((done) => { - consoleMock.mockRestore(); - server.close(() => { - done(); - }); - }); - - describe("client", () => { - it("should open, receive message, and close", (done) => { - socketServer.on("connection", (connection) => { - connection.write("hello world"); - - setTimeout(() => { - connection.close(); - }, 1000); - }); - - const client = new SockJSClient(`http://localhost:${port}/ws`); - const data = []; - - client.onOpen(() => { - data.push("open"); - }); - client.onClose(() => { - data.push("close"); - }); - client.onMessage((msg) => { - data.push(msg); - }); - - const testError = new Error("test"); - - client.sock.onerror(testError); - - expect(log.error.mock.calls).toHaveLength(1); - expect(log.error.mock.calls[0]).toEqual([testError]); - - setTimeout(() => { - expect(data).toMatchSnapshot(); - - done(); - }, 3000); - }); - }); -}); diff --git a/test/client/clients/__snapshots__/SockJSClient.test.js.snap.webpack5 b/test/client/clients/__snapshots__/SockJSClient.test.js.snap.webpack5 deleted file mode 100644 index 79ed1603fe..0000000000 --- a/test/client/clients/__snapshots__/SockJSClient.test.js.snap.webpack5 +++ /dev/null @@ -1,9 +0,0 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`SockJSClient client should open, receive message, and close 1`] = ` -[ - "open", - "hello world", - "close", -] -`; diff --git a/test/e2e/__snapshots__/allowed-hosts.test.js.snap.webpack5 b/test/e2e/__snapshots__/allowed-hosts.test.js.snap.webpack5 index edd5d77571..4f79109c83 100644 --- a/test/e2e/__snapshots__/allowed-hosts.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/allowed-hosts.test.js.snap.webpack5 @@ -42,16 +42,6 @@ exports[`allowed hosts check host headers should always allow value of the \`hos exports[`allowed hosts check host headers should always allow value of the \`host\` option from the \`client.webSocketURL\` option if options.allowedHosts is auto: response status 1`] = `200`; -exports[`allowed hosts should connect web socket client using "[::1] host to web socket server with the "auto" value ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`allowed hosts should connect web socket client using "[::1] host to web socket server with the "auto" value ("sockjs"): page errors 1`] = `[]`; - exports[`allowed hosts should connect web socket client using "[::1] host to web socket server with the "auto" value ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -62,16 +52,6 @@ exports[`allowed hosts should connect web socket client using "[::1] host to web exports[`allowed hosts should connect web socket client using "[::1] host to web socket server with the "auto" value ("ws"): page errors 1`] = `[]`; -exports[`allowed hosts should connect web socket client using "0.0.0.0" host to web socket server with the "auto" value ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`allowed hosts should connect web socket client using "0.0.0.0" host to web socket server with the "auto" value ("sockjs"): page errors 1`] = `[]`; - exports[`allowed hosts should connect web socket client using "0.0.0.0" host to web socket server with the "auto" value ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -82,16 +62,6 @@ exports[`allowed hosts should connect web socket client using "0.0.0.0" host to exports[`allowed hosts should connect web socket client using "0.0.0.0" host to web socket server with the "auto" value ("ws"): page errors 1`] = `[]`; -exports[`allowed hosts should connect web socket client using "127.0.0.1" host to web socket server by default ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`allowed hosts should connect web socket client using "127.0.0.1" host to web socket server by default ("sockjs"): page errors 1`] = `[]`; - exports[`allowed hosts should connect web socket client using "127.0.0.1" host to web socket server by default ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -102,16 +72,6 @@ exports[`allowed hosts should connect web socket client using "127.0.0.1" host t exports[`allowed hosts should connect web socket client using "127.0.0.1" host to web socket server by default ("ws"): page errors 1`] = `[]`; -exports[`allowed hosts should connect web socket client using "127.0.0.1" host to web socket server with the "auto" value ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`allowed hosts should connect web socket client using "127.0.0.1" host to web socket server with the "auto" value ("sockjs"): page errors 1`] = `[]`; - exports[`allowed hosts should connect web socket client using "127.0.0.1" host to web socket server with the "auto" value ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -122,16 +82,6 @@ exports[`allowed hosts should connect web socket client using "127.0.0.1" host t exports[`allowed hosts should connect web socket client using "127.0.0.1" host to web socket server with the "auto" value ("ws"): page errors 1`] = `[]`; -exports[`allowed hosts should connect web socket client using "chrome-extension:" protocol to web socket server with the "auto" value ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`allowed hosts should connect web socket client using "chrome-extension:" protocol to web socket server with the "auto" value ("sockjs"): page errors 1`] = `[]`; - exports[`allowed hosts should connect web socket client using "chrome-extension:" protocol to web socket server with the "auto" value ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -142,16 +92,6 @@ exports[`allowed hosts should connect web socket client using "chrome-extension: exports[`allowed hosts should connect web socket client using "chrome-extension:" protocol to web socket server with the "auto" value ("ws"): page errors 1`] = `[]`; -exports[`allowed hosts should connect web socket client using "file:" protocol to web socket server with the "auto" value ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`allowed hosts should connect web socket client using "file:" protocol to web socket server with the "auto" value ("sockjs"): page errors 1`] = `[]`; - exports[`allowed hosts should connect web socket client using "file:" protocol to web socket server with the "auto" value ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -162,16 +102,6 @@ exports[`allowed hosts should connect web socket client using "file:" protocol t exports[`allowed hosts should connect web socket client using "file:" protocol to web socket server with the "auto" value ("ws"): page errors 1`] = `[]`; -exports[`allowed hosts should connect web socket client using "localhost" host to web socket server by default ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`allowed hosts should connect web socket client using "localhost" host to web socket server by default ("sockjs"): page errors 1`] = `[]`; - exports[`allowed hosts should connect web socket client using "localhost" host to web socket server by default ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -182,16 +112,6 @@ exports[`allowed hosts should connect web socket client using "localhost" host t exports[`allowed hosts should connect web socket client using "localhost" host to web socket server by default ("ws"): page errors 1`] = `[]`; -exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the "all" value ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the "all" value ("sockjs"): page errors 1`] = `[]`; - exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the "all" value ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -202,16 +122,6 @@ exports[`allowed hosts should connect web socket client using custom hostname to exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the "all" value ("ws"): page errors 1`] = `[]`; -exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the "all" value in array ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the "all" value in array ("sockjs"): page errors 1`] = `[]`; - exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the "all" value in array ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -222,16 +132,6 @@ exports[`allowed hosts should connect web socket client using custom hostname to exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the "all" value in array ("ws"): page errors 1`] = `[]`; -exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the custom hostname value ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the custom hostname value ("sockjs"): page errors 1`] = `[]`; - exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the custom hostname value ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -242,16 +142,6 @@ exports[`allowed hosts should connect web socket client using custom hostname to exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the custom hostname value ("ws"): page errors 1`] = `[]`; -exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the custom hostname value starting with dot ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the custom hostname value starting with dot ("sockjs"): page errors 1`] = `[]`; - exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the custom hostname value starting with dot ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -262,16 +152,6 @@ exports[`allowed hosts should connect web socket client using custom hostname to exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the custom hostname value starting with dot ("ws"): page errors 1`] = `[]`; -exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the multiple custom hostname values ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the multiple custom hostname values ("sockjs"): page errors 1`] = `[]`; - exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the multiple custom hostname values ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -282,16 +162,6 @@ exports[`allowed hosts should connect web socket client using custom hostname to exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the multiple custom hostname values ("ws"): page errors 1`] = `[]`; -exports[`allowed hosts should connect web socket client using custom sub hostname to web socket server with the custom hostname value ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`allowed hosts should connect web socket client using custom sub hostname to web socket server with the custom hostname value ("sockjs"): page errors 1`] = `[]`; - exports[`allowed hosts should connect web socket client using custom sub hostname to web socket server with the custom hostname value ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -302,16 +172,6 @@ exports[`allowed hosts should connect web socket client using custom sub hostnam exports[`allowed hosts should connect web socket client using custom sub hostname to web socket server with the custom hostname value ("ws"): page errors 1`] = `[]`; -exports[`allowed hosts should connect web socket client using localhost to web socket server with the "auto" value ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`allowed hosts should connect web socket client using localhost to web socket server with the "auto" value ("sockjs"): page errors 1`] = `[]`; - exports[`allowed hosts should connect web socket client using localhost to web socket server with the "auto" value ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -322,16 +182,6 @@ exports[`allowed hosts should connect web socket client using localhost to web s exports[`allowed hosts should connect web socket client using localhost to web socket server with the "auto" value ("ws"): page errors 1`] = `[]`; -exports[`allowed hosts should connect web socket client using origin header containing an IP address with the custom hostname value ("sockjs"): (work) console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`allowed hosts should connect web socket client using origin header containing an IP address with the custom hostname value ("sockjs"): (work) page errors 1`] = `[]`; - exports[`allowed hosts should connect web socket client using origin header containing an IP address with the custom hostname value ("ws"): (work) console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -342,16 +192,6 @@ exports[`allowed hosts should connect web socket client using origin header cont exports[`allowed hosts should connect web socket client using origin header containing an IP address with the custom hostname value ("ws"): (work) page errors 1`] = `[]`; -exports[`allowed hosts should disconnect web client using localhost to web socket server with the "auto" value ("sockjs"): console messages 1`] = ` -[ - "Failed to load resource: the server responded with a status of 403 (Forbidden)", -] -`; - -exports[`allowed hosts should disconnect web client using localhost to web socket server with the "auto" value ("sockjs"): html 1`] = `"
Invalid Host header
"`; - -exports[`allowed hosts should disconnect web client using localhost to web socket server with the "auto" value ("sockjs"): page errors 1`] = `[]`; - exports[`allowed hosts should disconnect web client using localhost to web socket server with the "auto" value ("ws"): console messages 1`] = ` [ "Failed to load resource: the server responded with a status of 403 (Forbidden)", @@ -362,19 +202,6 @@ exports[`allowed hosts should disconnect web client using localhost to web socke exports[`allowed hosts should disconnect web client using localhost to web socket server with the "auto" value ("ws"): page errors 1`] = `[]`; -exports[`allowed hosts should disconnect web client using origin header containing an IP address with the "auto" value ("sockjs"): (work) console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", - "[webpack-dev-server] Invalid Host/Origin header", - "[webpack-dev-server] Disconnected!", - "[webpack-dev-server] Trying to reconnect...", -] -`; - -exports[`allowed hosts should disconnect web client using origin header containing an IP address with the "auto" value ("sockjs"): (work) page errors 1`] = `[]`; - exports[`allowed hosts should disconnect web client using origin header containing an IP address with the "auto" value ("ws"): (work) console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -388,19 +215,6 @@ exports[`allowed hosts should disconnect web client using origin header containi exports[`allowed hosts should disconnect web client using origin header containing an IP address with the "auto" value ("ws"): (work) page errors 1`] = `[]`; -exports[`allowed hosts should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "host" header ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", - "[webpack-dev-server] Invalid Host/Origin header", - "[webpack-dev-server] Disconnected!", - "[webpack-dev-server] Trying to reconnect...", -] -`; - -exports[`allowed hosts should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "host" header ("sockjs"): page errors 1`] = `[]`; - exports[`allowed hosts should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "host" header ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -414,19 +228,6 @@ exports[`allowed hosts should disconnect web socket client using custom hostname exports[`allowed hosts should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "host" header ("ws"): page errors 1`] = `[]`; -exports[`allowed hosts should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "host" header when "server: 'https'" is enabled ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", - "[webpack-dev-server] Invalid Host/Origin header", - "[webpack-dev-server] Disconnected!", - "[webpack-dev-server] Trying to reconnect...", -] -`; - -exports[`allowed hosts should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "host" header when "server: 'https'" is enabled ("sockjs"): page errors 1`] = `[]`; - exports[`allowed hosts should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "host" header when "server: 'https'" is enabled ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -440,19 +241,6 @@ exports[`allowed hosts should disconnect web socket client using custom hostname exports[`allowed hosts should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "host" header when "server: 'https'" is enabled ("ws"): page errors 1`] = `[]`; -exports[`allowed hosts should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "origin" header ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", - "[webpack-dev-server] Invalid Host/Origin header", - "[webpack-dev-server] Disconnected!", - "[webpack-dev-server] Trying to reconnect...", -] -`; - -exports[`allowed hosts should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "origin" header ("sockjs"): page errors 1`] = `[]`; - exports[`allowed hosts should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "origin" header ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", diff --git a/test/e2e/__snapshots__/api.test.js.snap.webpack5 b/test/e2e/__snapshots__/api.test.js.snap.webpack5 index 0d6367ba1f..14c74e33ea 100644 --- a/test/e2e/__snapshots__/api.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/api.test.js.snap.webpack5 @@ -29,7 +29,7 @@ exports[`API Server.checkHostHeader should allow URLs with scheme for checking o "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", "Hey.", - "WebSocket connection to 'ws://test.host:8158/ws' failed: Error in connection establishment: net::ERR_NAME_NOT_RESOLVED", + "WebSocket connection to 'ws://test.host:8156/ws' failed: Error in connection establishment: net::ERR_NAME_NOT_RESOLVED", "[webpack-dev-server] JSHandle@object", "[webpack-dev-server] Disconnected!", "[webpack-dev-server] Trying to reconnect...", @@ -40,7 +40,7 @@ exports[`API Server.checkHostHeader should allow URLs with scheme for checking o exports[`API Server.checkHostHeader should allow URLs with scheme for checking origin when the "option.client.webSocketURL" is object: response status 1`] = `200`; -exports[`API Server.checkHostHeader should allow URLs with scheme for checking origin when the "option.client.webSocketURL" is object: web socket URL 1`] = `"ws://test.host:8158/ws"`; +exports[`API Server.checkHostHeader should allow URLs with scheme for checking origin when the "option.client.webSocketURL" is object: web socket URL 1`] = `"ws://test.host:8156/ws"`; exports[`API Server.getFreePort should retry finding the port for up to defaultPortRetry times (number): console messages 1`] = ` [ diff --git a/test/e2e/__snapshots__/built-in-routes.test.js.snap.webpack5 b/test/e2e/__snapshots__/built-in-routes.test.js.snap.webpack5 index 789e304fbe..c3df0191d7 100644 --- a/test/e2e/__snapshots__/built-in-routes.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/built-in-routes.test.js.snap.webpack5 @@ -65,19 +65,3 @@ exports[`Built in routes with simple config should handle HEAD request to magic exports[`Built in routes with simple config should handle HEAD request to magic async chunk: response headers content-type 1`] = `"text/javascript; charset=utf-8"`; exports[`Built in routes with simple config should handle HEAD request to magic async chunk: response status 1`] = `200`; - -exports[`Built in routes with simple config should handles GET request to sockjs bundle: console messages 1`] = `[]`; - -exports[`Built in routes with simple config should handles GET request to sockjs bundle: page errors 1`] = `[]`; - -exports[`Built in routes with simple config should handles GET request to sockjs bundle: response headers content-type 1`] = `"application/javascript; charset=UTF-8"`; - -exports[`Built in routes with simple config should handles GET request to sockjs bundle: response status 1`] = `200`; - -exports[`Built in routes with simple config should handles HEAD request to sockjs bundle: console messages 1`] = `[]`; - -exports[`Built in routes with simple config should handles HEAD request to sockjs bundle: page errors 1`] = `[]`; - -exports[`Built in routes with simple config should handles HEAD request to sockjs bundle: response headers content-type 1`] = `"application/javascript; charset=UTF-8"`; - -exports[`Built in routes with simple config should handles HEAD request to sockjs bundle: response status 1`] = `200`; diff --git a/test/e2e/__snapshots__/client-reconnect.test.js.snap.webpack5 b/test/e2e/__snapshots__/client-reconnect.test.js.snap.webpack5 index 6beb3163b8..d043471d44 100644 --- a/test/e2e/__snapshots__/client-reconnect.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/client-reconnect.test.js.snap.webpack5 @@ -20,10 +20,10 @@ exports[`client.reconnect option specified as number should try to reconnect 2 t "Hey.", "[webpack-dev-server] Disconnected!", "[webpack-dev-server] Trying to reconnect...", - "WebSocket connection to 'ws://localhost:8163/ws' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED", + "WebSocket connection to 'ws://localhost:8161/ws' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED", "[webpack-dev-server] JSHandle@object", "[webpack-dev-server] Trying to reconnect...", - "WebSocket connection to 'ws://localhost:8163/ws' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED", + "WebSocket connection to 'ws://localhost:8161/ws' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED", "[webpack-dev-server] JSHandle@object", ] `; diff --git a/test/e2e/__snapshots__/client.test.js.snap.webpack5 b/test/e2e/__snapshots__/client.test.js.snap.webpack5 index 142b64205d..5e818f99ca 100644 --- a/test/e2e/__snapshots__/client.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/client.test.js.snap.webpack5 @@ -6,16 +6,40 @@ exports[`client option configure client entry should disable client entry: page exports[`client option configure client entry should disable client entry: response status 1`] = `200`; -exports[`client option default behaviour responds with a 200 status code for /ws path: console messages 1`] = `[]`; +exports[`client option configure client entry should disable client entry: webSockets 1`] = `[]`; -exports[`client option default behaviour responds with a 200 status code for /ws path: page errors 1`] = `[]`; +exports[`client option default behaviour responds with a 200 status code for / path: console messages 1`] = ` +[ + "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", + "[HMR] Waiting for update signal from WDS...", + "Hey.", +] +`; -exports[`client option default behaviour responds with a 200 status code for /ws path: response status 1`] = `200`; +exports[`client option default behaviour responds with a 200 status code for / path: page errors 1`] = `[]`; -exports[`client option override client entry should disable client entry: response status 1`] = `200`; +exports[`client option default behaviour responds with a 200 status code for / path: response status 1`] = `200`; -exports[`client option should respect path option responds with a 200 status code for /foo/test/bar path: console messages 1`] = `[]`; +exports[`client option default behaviour responds with a 200 status code for / path: webSockets 1`] = ` +[ + "ws://localhost:8104/ws", +] +`; -exports[`client option should respect path option responds with a 200 status code for /foo/test/bar path: page errors 1`] = `[]`; +exports[`client option override client entry should disable client entry: response status 1`] = `200`; -exports[`client option should respect path option responds with a 200 status code for /foo/test/bar path: response status 1`] = `200`; +exports[`client option should respect path option responds with a websocket with the /foo/test/bar path: console messages 1`] = ` +[ + "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", + "[HMR] Waiting for update signal from WDS...", + "Hey.", +] +`; + +exports[`client option should respect path option responds with a websocket with the /foo/test/bar path: page errors 1`] = `[]`; + +exports[`client option should respect path option responds with a websocket with the /foo/test/bar path: webSockets 1`] = ` +[ + "ws://localhost:8104/foo/test/bar", +] +`; diff --git a/test/e2e/__snapshots__/hot-and-live-reload.test.js.snap.webpack5 b/test/e2e/__snapshots__/hot-and-live-reload.test.js.snap.webpack5 index 729e827490..eb184786fa 100644 --- a/test/e2e/__snapshots__/hot-and-live-reload.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/hot-and-live-reload.test.js.snap.webpack5 @@ -9,15 +9,6 @@ exports[`hot and live reload should not refresh content when hot and no live rel exports[`hot and live reload should not refresh content when hot and no live reload disabled (default): page errors 1`] = `[]`; -exports[`hot and live reload should not refresh content when hot and no live reload disabled (sockjs): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading disabled, Progress disabled, Overlay enabled.", - "[webpack-dev-server] App updated. Recompiling...", -] -`; - -exports[`hot and live reload should not refresh content when hot and no live reload disabled (sockjs): page errors 1`] = `[]`; - exports[`hot and live reload should not refresh content when hot and no live reload disabled (ws): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading disabled, Progress disabled, Overlay enabled.", @@ -97,23 +88,6 @@ exports[`hot and live reload should work and refresh content using hot module re exports[`hot and live reload should work and refresh content using hot module replacement when hot enabled (default): page errors 1`] = `[]`; -exports[`hot and live reload should work and refresh content using hot module replacement when hot enabled (sockjs): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "[webpack-dev-server] App updated. Recompiling...", - "[webpack-dev-server] App hot update...", - "[HMR] Checking for updates on the server...", - "[HMR] Updated modules:", - "[HMR] - ./main.css", - "[HMR] - ../../../node_modules/css-loader/dist/cjs.js!./main.css", - "", - "[HMR] App is up to date.", -] -`; - -exports[`hot and live reload should work and refresh content using hot module replacement when hot enabled (sockjs): page errors 1`] = `[]`; - exports[`hot and live reload should work and refresh content using hot module replacement when hot enabled (ws): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -131,23 +105,6 @@ exports[`hot and live reload should work and refresh content using hot module re exports[`hot and live reload should work and refresh content using hot module replacement when hot enabled (ws): page errors 1`] = `[]`; -exports[`hot and live reload should work and refresh content using hot module replacement when live reload and hot enabled (sockjs): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "[webpack-dev-server] App updated. Recompiling...", - "[webpack-dev-server] App hot update...", - "[HMR] Checking for updates on the server...", - "[HMR] Updated modules:", - "[HMR] - ./main.css", - "[HMR] - ../../../node_modules/css-loader/dist/cjs.js!./main.css", - "", - "[HMR] App is up to date.", -] -`; - -exports[`hot and live reload should work and refresh content using hot module replacement when live reload and hot enabled (sockjs): page errors 1`] = `[]`; - exports[`hot and live reload should work and refresh content using hot module replacement when live reload and hot enabled (ws): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -182,23 +139,6 @@ exports[`hot and live reload should work and refresh content using hot module re exports[`hot and live reload should work and refresh content using hot module replacement when live reload disabled and hot enabled (default): page errors 1`] = `[]`; -exports[`hot and live reload should work and refresh content using hot module replacement when live reload disabled and hot enabled (sockjs): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading disabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "[webpack-dev-server] App updated. Recompiling...", - "[webpack-dev-server] App hot update...", - "[HMR] Checking for updates on the server...", - "[HMR] Updated modules:", - "[HMR] - ./main.css", - "[HMR] - ../../../node_modules/css-loader/dist/cjs.js!./main.css", - "", - "[HMR] App is up to date.", -] -`; - -exports[`hot and live reload should work and refresh content using hot module replacement when live reload disabled and hot enabled (sockjs): page errors 1`] = `[]`; - exports[`hot and live reload should work and refresh content using hot module replacement when live reload disabled and hot enabled (ws): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading disabled, Progress disabled, Overlay enabled.", @@ -233,23 +173,6 @@ exports[`hot and live reload should work and refresh content using hot module re exports[`hot and live reload should work and refresh content using hot module replacement when live reload enabled (default): page errors 1`] = `[]`; -exports[`hot and live reload should work and refresh content using hot module replacement when live reload enabled (sockjs): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "[webpack-dev-server] App updated. Recompiling...", - "[webpack-dev-server] App hot update...", - "[HMR] Checking for updates on the server...", - "[HMR] Updated modules:", - "[HMR] - ./main.css", - "[HMR] - ../../../node_modules/css-loader/dist/cjs.js!./main.css", - "", - "[HMR] App is up to date.", -] -`; - -exports[`hot and live reload should work and refresh content using hot module replacement when live reload enabled (sockjs): page errors 1`] = `[]`; - exports[`hot and live reload should work and refresh content using hot module replacement when live reload enabled (ws): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -295,17 +218,6 @@ exports[`hot and live reload should work and refresh content using live reload ( exports[`hot and live reload should work and refresh content using live reload (default): page errors 1`] = `[]`; -exports[`hot and live reload should work and refresh content using live reload when live reload disabled and hot enabled (sockjs): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[webpack-dev-server] App updated. Recompiling...", - "[webpack-dev-server] App updated. Reloading...", - "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.", -] -`; - -exports[`hot and live reload should work and refresh content using live reload when live reload disabled and hot enabled (sockjs): page errors 1`] = `[]`; - exports[`hot and live reload should work and refresh content using live reload when live reload enabled and hot disabled (ws): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.", diff --git a/test/e2e/__snapshots__/ipc.test.js.snap.webpack5 b/test/e2e/__snapshots__/ipc.test.js.snap.webpack5 index 96c5973c2d..bf7ab3e4da 100644 --- a/test/e2e/__snapshots__/ipc.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/ipc.test.js.snap.webpack5 @@ -1,15 +1,5 @@ // Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing -exports[`web socket server URL should work with the "ipc" option using "string" value ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`web socket server URL should work with the "ipc" option using "string" value ("sockjs"): page errors 1`] = `[]`; - exports[`web socket server URL should work with the "ipc" option using "string" value ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -20,16 +10,6 @@ exports[`web socket server URL should work with the "ipc" option using "string" exports[`web socket server URL should work with the "ipc" option using "string" value ("ws"): page errors 1`] = `[]`; -exports[`web socket server URL should work with the "ipc" option using "true" value ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`web socket server URL should work with the "ipc" option using "true" value ("sockjs"): page errors 1`] = `[]`; - exports[`web socket server URL should work with the "ipc" option using "true" value ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", diff --git a/test/e2e/__snapshots__/logging.test.js.snap.webpack5 b/test/e2e/__snapshots__/logging.test.js.snap.webpack5 index bd5c6336ea..4c8cc479f7 100644 --- a/test/e2e/__snapshots__/logging.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/logging.test.js.snap.webpack5 @@ -1,12 +1,5 @@ // Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing -exports[`logging should work and do not log messages about hot and live reloading is enabled (sockjs) 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading disabled, Progress disabled, Overlay enabled.", - "Hey.", -] -`; - exports[`logging should work and do not log messages about hot and live reloading is enabled (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading disabled, Progress disabled, Overlay enabled.", @@ -14,17 +7,6 @@ exports[`logging should work and do not log messages about hot and live reloadin ] `; -exports[`logging should work and log errors by default (sockjs) 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", - "[webpack-dev-server] Errors while compiling. Reload prevented.", - "[webpack-dev-server] ERROR -Error from compilation", -] -`; - exports[`logging should work and log errors by default (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -36,13 +18,6 @@ Error from compilation", ] `; -exports[`logging should work and log message about live reloading is enabled (sockjs) 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "Hey.", -] -`; - exports[`logging should work and log message about live reloading is enabled (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -50,30 +25,6 @@ exports[`logging should work and log message about live reloading is enabled (ws ] `; -exports[`logging should work and log messages about hot and live reloading is enabled (sockjs) 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`logging should work and log messages about hot and live reloading is enabled (sockjs) 2`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`logging should work and log messages about hot and live reloading is enabled (sockjs) 3`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - exports[`logging should work and log messages about hot and live reloading is enabled (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -98,14 +49,6 @@ exports[`logging should work and log messages about hot and live reloading is en ] `; -exports[`logging should work and log messages about hot is enabled (sockjs) 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading disabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - exports[`logging should work and log messages about hot is enabled (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading disabled, Progress disabled, Overlay enabled.", @@ -114,15 +57,6 @@ exports[`logging should work and log messages about hot is enabled (ws) 1`] = ` ] `; -exports[`logging should work and log only error (sockjs) 1`] = ` -[ - "Hey.", - "[webpack-dev-server] Errors while compiling. Reload prevented.", - "[webpack-dev-server] ERROR -Error from compilation", -] -`; - exports[`logging should work and log only error (ws) 1`] = ` [ "Hey.", @@ -132,18 +66,6 @@ Error from compilation", ] `; -exports[`logging should work and log static changes (sockjs) 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", - "[webpack-dev-server] "/test/fixtures/client-config/static/foo.txt" from static directory was changed. Reloading...", - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - exports[`logging should work and log static changes (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -156,18 +78,6 @@ exports[`logging should work and log static changes (ws) 1`] = ` ] `; -exports[`logging should work and log warning and errors (sockjs) 1`] = ` -[ - "Hey.", - "[webpack-dev-server] Warnings while compiling.", - "[webpack-dev-server] WARNING -Warning from compilation", - "[webpack-dev-server] Errors while compiling. Reload prevented.", - "[webpack-dev-server] ERROR -Error from compilation", -] -`; - exports[`logging should work and log warning and errors (ws) 1`] = ` [ "Hey.", @@ -180,17 +90,6 @@ Error from compilation", ] `; -exports[`logging should work and log warnings by default (sockjs) 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", - "[webpack-dev-server] Warnings while compiling.", - "[webpack-dev-server] WARNING -Warning from compilation", -] -`; - exports[`logging should work and log warnings by default (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -202,14 +101,6 @@ Warning from compilation", ] `; -exports[`logging should work when the "client.logging" is "info" (sockjs) 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - exports[`logging should work when the "client.logging" is "info" (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -218,14 +109,6 @@ exports[`logging should work when the "client.logging" is "info" (ws) 1`] = ` ] `; -exports[`logging should work when the "client.logging" is "log" (sockjs) 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - exports[`logging should work when the "client.logging" is "log" (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -234,26 +117,12 @@ exports[`logging should work when the "client.logging" is "log" (ws) 1`] = ` ] `; -exports[`logging should work when the "client.logging" is "none" (sockjs) 1`] = ` -[ - "Hey.", -] -`; - exports[`logging should work when the "client.logging" is "none" (ws) 1`] = ` [ "Hey.", ] `; -exports[`logging should work when the "client.logging" is "verbose" (sockjs) 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - exports[`logging should work when the "client.logging" is "verbose" (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", diff --git a/test/e2e/__snapshots__/port.test.js.snap.webpack5 b/test/e2e/__snapshots__/port.test.js.snap.webpack5 index b88dae9b1a..3a5dc33cd7 100644 --- a/test/e2e/__snapshots__/port.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/port.test.js.snap.webpack5 @@ -20,7 +20,7 @@ exports[`port should work using "0" port : console messages 1`] = ` exports[`port should work using "0" port : page errors 1`] = `[]`; -exports[`port should work using "8161" port : console messages 1`] = ` +exports[`port should work using "8159" port : console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -28,7 +28,7 @@ exports[`port should work using "8161" port : console messages 1`] = ` ] `; -exports[`port should work using "8161" port : console messages 2`] = ` +exports[`port should work using "8159" port : console messages 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -36,9 +36,9 @@ exports[`port should work using "8161" port : console messages 2`] = ` ] `; -exports[`port should work using "8161" port : page errors 1`] = `[]`; +exports[`port should work using "8159" port : page errors 1`] = `[]`; -exports[`port should work using "8161" port : page errors 2`] = `[]`; +exports[`port should work using "8159" port : page errors 2`] = `[]`; exports[`port should work using "auto" port : console messages 1`] = ` [ diff --git a/test/e2e/__snapshots__/server-and-client-transport.test.js.snap.webpack5 b/test/e2e/__snapshots__/server-and-client-transport.test.js.snap.webpack5 index f789fc8cdc..a106b87b20 100644 --- a/test/e2e/__snapshots__/server-and-client-transport.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/server-and-client-transport.test.js.snap.webpack5 @@ -1,33 +1,10 @@ // Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing -exports[`server and client transport should throw an error on invalid path to client transport 1`] = `"client.webSocketTransport must be a string denoting a default implementation (e.g. 'sockjs', 'ws') or a full path to a JS file via require.resolve(...) which exports a class "`; +exports[`server and client transport should throw an error on invalid path to client transport 1`] = `"client.webSocketTransport must be a string denoting a default implementation (e.g. 'ws') or a full path to a JS file via require.resolve(...) which exports a class "`; -exports[`server and client transport should throw an error on invalid path to server transport 1`] = `"webSocketServer (webSocketServer.type) must be a string denoting a default implementation (e.g. 'ws', 'sockjs'), a full path to a JS file which exports a class extending BaseServer (webpack-dev-server/lib/servers/BaseServer.js) via require.resolve(...), or the class itself which extends BaseServer"`; +exports[`server and client transport should throw an error on invalid path to server transport 1`] = `"webSocketServer (webSocketServer.type) must be a string denoting a default implementation (e.g. 'ws'), a full path to a JS file which exports a class extending BaseServer (webpack-dev-server/lib/servers/BaseServer.js) via require.resolve(...), or the class itself which extends BaseServer"`; -exports[`server and client transport should throw an error on wrong path 1`] = `"webSocketServer (webSocketServer.type) must be a string denoting a default implementation (e.g. 'ws', 'sockjs'), a full path to a JS file which exports a class extending BaseServer (webpack-dev-server/lib/servers/BaseServer.js) via require.resolve(...), or the class itself which extends BaseServer"`; - -exports[`server and client transport should use "sockjs" transport and "sockjs" web socket server 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", -] -`; - -exports[`server and client transport should use "sockjs" transport, when web socket server is not specify 1`] = `[]`; - -exports[`server and client transport should use "sockjs" web socket server when specify "sockjs" value 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", -] -`; - -exports[`server and client transport should use "sockjs" web socket server when specify "sockjs" value using object 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", -] -`; +exports[`server and client transport should throw an error on wrong path 1`] = `"webSocketServer (webSocketServer.type) must be a string denoting a default implementation (e.g. 'ws'), a full path to a JS file which exports a class extending BaseServer (webpack-dev-server/lib/servers/BaseServer.js) via require.resolve(...), or the class itself which extends BaseServer"`; exports[`server and client transport should use "ws" transport and "ws" web socket server 1`] = ` [ @@ -57,20 +34,6 @@ exports[`server and client transport should use "ws" web socket server when spec ] `; -exports[`server and client transport should use custom transport and "sockjs" web socket server 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "open", - "hot", - "liveReload", - "reconnect", - "overlay", - "hash", - "ok", -] -`; - exports[`server and client transport should use custom web socket server when specify class 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", diff --git a/test/e2e/__snapshots__/web-socket-communication.test.js.snap.webpack5 b/test/e2e/__snapshots__/web-socket-communication.test.js.snap.webpack5 index 267eb3545e..5a31cc7769 100644 --- a/test/e2e/__snapshots__/web-socket-communication.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/web-socket-communication.test.js.snap.webpack5 @@ -1,17 +1,5 @@ // Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing -exports[`web socket communication should work and close web socket client connection when web socket server closed ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", - "[webpack-dev-server] Disconnected!", - "[webpack-dev-server] Trying to reconnect...", -] -`; - -exports[`web socket communication should work and close web socket client connection when web socket server closed ("sockjs"): page errors 1`] = `[]`; - exports[`web socket communication should work and close web socket client connection when web socket server closed ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -24,26 +12,6 @@ exports[`web socket communication should work and close web socket client connec exports[`web socket communication should work and close web socket client connection when web socket server closed ("ws"): page errors 1`] = `[]`; -exports[`web socket communication should work and reconnect when the connection is lost ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", - "[webpack-dev-server] Disconnected!", - "[webpack-dev-server] Trying to reconnect...", - "[webpack-dev-server] App hot update...", - "[HMR] Checking for updates on the server...", - "Failed to load resource: the server responded with a status of 404 (Not Found)", - "[HMR] Cannot find update. Need to do a full reload!", - "[HMR] (Probably because of restarting the webpack-dev-server)", - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`web socket communication should work and reconnect when the connection is lost ("sockjs"): page errors 1`] = `[]`; - exports[`web socket communication should work and reconnect when the connection is lost ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -64,16 +32,6 @@ exports[`web socket communication should work and reconnect when the connection exports[`web socket communication should work and reconnect when the connection is lost ("ws"): page errors 1`] = `[]`; -exports[`web socket communication should work and terminate client that is not alive ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`web socket communication should work and terminate client that is not alive ("sockjs"): page errors 1`] = `[]`; - exports[`web socket communication should work and terminate client that is not alive ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", diff --git a/test/e2e/__snapshots__/web-socket-server-url.test.js.snap.webpack5 b/test/e2e/__snapshots__/web-socket-server-url.test.js.snap.webpack5 index 2640f84902..931f7df51e 100644 --- a/test/e2e/__snapshots__/web-socket-server-url.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/web-socket-server-url.test.js.snap.webpack5 @@ -1,17 +1,5 @@ // Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing -exports[`web socket server URL should not work and output disconnect wrong web socket URL ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", - "Failed to load resource: net::ERR_NAME_NOT_RESOLVED", - "[webpack-dev-server] Disconnected!", -] -`; - -exports[`web socket server URL should not work and output disconnect wrong web socket URL ("sockjs"): page errors 1`] = `[]`; - exports[`web socket server URL should not work and output disconnect wrong web socket URL ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -25,18 +13,6 @@ exports[`web socket server URL should not work and output disconnect wrong web s exports[`web socket server URL should not work and output disconnect wrong web socket URL ("ws"): page errors 1`] = `[]`; -exports[`web socket server URL should work and throw an error on invalid web socket URL ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", -] -`; - -exports[`web socket server URL should work and throw an error on invalid web socket URL ("sockjs"): page errors 1`] = ` -[ - "The URL's scheme must be either 'http:' or 'https:'. 'unknown:' is not allowed.", -] -`; - exports[`web socket server URL should work and throw an error on invalid web socket URL ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -49,16 +25,6 @@ exports[`web socket server URL should work and throw an error on invalid web soc ] `; -exports[`web socket server URL should work behind proxy, when hostnames are different and ports are different ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`web socket server URL should work behind proxy, when hostnames are different and ports are different ("sockjs"): page errors 1`] = `[]`; - exports[`web socket server URL should work behind proxy, when hostnames are different and ports are different ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -69,16 +35,6 @@ exports[`web socket server URL should work behind proxy, when hostnames are diff exports[`web socket server URL should work behind proxy, when hostnames are different and ports are different ("ws"): page errors 1`] = `[]`; -exports[`web socket server URL should work behind proxy, when hostnames are different and ports are same ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`web socket server URL should work behind proxy, when hostnames are different and ports are same ("sockjs"): page errors 1`] = `[]`; - exports[`web socket server URL should work behind proxy, when hostnames are different and ports are same ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -89,16 +45,6 @@ exports[`web socket server URL should work behind proxy, when hostnames are diff exports[`web socket server URL should work behind proxy, when hostnames are different and ports are same ("ws"): page errors 1`] = `[]`; -exports[`web socket server URL should work behind proxy, when hostnames are same and ports are different ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`web socket server URL should work behind proxy, when hostnames are same and ports are different ("sockjs"): page errors 1`] = `[]`; - exports[`web socket server URL should work behind proxy, when hostnames are same and ports are different ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -109,16 +55,6 @@ exports[`web socket server URL should work behind proxy, when hostnames are same exports[`web socket server URL should work behind proxy, when hostnames are same and ports are different ("ws"): page errors 1`] = `[]`; -exports[`web socket server URL should work behind proxy, when the "host" option is "local-ip" and the "port" option is "auto" ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`web socket server URL should work behind proxy, when the "host" option is "local-ip" and the "port" option is "auto" ("sockjs"): page errors 1`] = `[]`; - exports[`web socket server URL should work behind proxy, when the "host" option is "local-ip" and the "port" option is "auto" ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -129,16 +65,6 @@ exports[`web socket server URL should work behind proxy, when the "host" option exports[`web socket server URL should work behind proxy, when the "host" option is "local-ip" and the "port" option is "auto" ("ws"): page errors 1`] = `[]`; -exports[`web socket server URL should work when "host" option is "local-ip" ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`web socket server URL should work when "host" option is "local-ip" ("sockjs"): page errors 1`] = `[]`; - exports[`web socket server URL should work when "host" option is "local-ip" ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -149,16 +75,6 @@ exports[`web socket server URL should work when "host" option is "local-ip" ("ws exports[`web socket server URL should work when "host" option is "local-ip" ("ws"): page errors 1`] = `[]`; -exports[`web socket server URL should work when "host" option is "local-ipv4" ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`web socket server URL should work when "host" option is "local-ipv4" ("sockjs"): page errors 1`] = `[]`; - exports[`web socket server URL should work when "host" option is "local-ipv4" ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -169,16 +85,6 @@ exports[`web socket server URL should work when "host" option is "local-ipv4" (" exports[`web socket server URL should work when "host" option is "local-ipv4" ("ws"): page errors 1`] = `[]`; -exports[`web socket server URL should work when "host" option is IPv4 ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`web socket server URL should work when "host" option is IPv4 ("sockjs"): page errors 1`] = `[]`; - exports[`web socket server URL should work when "host" option is IPv4 ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -189,16 +95,6 @@ exports[`web socket server URL should work when "host" option is IPv4 ("ws"): co exports[`web socket server URL should work when "host" option is IPv4 ("ws"): page errors 1`] = `[]`; -exports[`web socket server URL should work when "port" option is "auto" ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`web socket server URL should work when "port" option is "auto" ("sockjs"): page errors 1`] = `[]`; - exports[`web socket server URL should work when "port" option is "auto" ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -209,16 +105,6 @@ exports[`web socket server URL should work when "port" option is "auto" ("ws"): exports[`web socket server URL should work when "port" option is "auto" ("ws"): page errors 1`] = `[]`; -exports[`web socket server URL should work with "client.webSocketURL.*" options ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`web socket server URL should work with "client.webSocketURL.*" options ("sockjs"): page errors 1`] = `[]`; - exports[`web socket server URL should work with "client.webSocketURL.*" options ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -229,16 +115,6 @@ exports[`web socket server URL should work with "client.webSocketURL.*" options exports[`web socket server URL should work with "client.webSocketURL.*" options ("ws"): page errors 1`] = `[]`; -exports[`web socket server URL should work with "client.webSocketURL.port" and "webSocketServer.options.port" options as string ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`web socket server URL should work with "client.webSocketURL.port" and "webSocketServer.options.port" options as string ("sockjs"): page errors 1`] = `[]`; - exports[`web socket server URL should work with "client.webSocketURL.port" and "webSocketServer.options.port" options as string ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -249,16 +125,6 @@ exports[`web socket server URL should work with "client.webSocketURL.port" and " exports[`web socket server URL should work with "client.webSocketURL.port" and "webSocketServer.options.port" options as string ("ws"): page errors 1`] = `[]`; -exports[`web socket server URL should work with "server: 'https'" option ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`web socket server URL should work with "server: 'https'" option ("sockjs"): page errors 1`] = `[]`; - exports[`web socket server URL should work with "server: 'https'" option ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -269,16 +135,6 @@ exports[`web socket server URL should work with "server: 'https'" option ("ws"): exports[`web socket server URL should work with "server: 'https'" option ("ws"): page errors 1`] = `[]`; -exports[`web socket server URL should work with default "/ws" value of the "client.webSocketURL.pathname" option ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`web socket server URL should work with default "/ws" value of the "client.webSocketURL.pathname" option ("sockjs"): page errors 1`] = `[]`; - exports[`web socket server URL should work with default "/ws" value of the "client.webSocketURL.pathname" option ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -289,16 +145,6 @@ exports[`web socket server URL should work with default "/ws" value of the "clie exports[`web socket server URL should work with default "/ws" value of the "client.webSocketURL.pathname" option ("ws"): page errors 1`] = `[]`; -exports[`web socket server URL should work with the "client.webSocketURL" option as "string" ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`web socket server URL should work with the "client.webSocketURL" option as "string" ("sockjs"): page errors 1`] = `[]`; - exports[`web socket server URL should work with the "client.webSocketURL" option as "string" ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -309,16 +155,6 @@ exports[`web socket server URL should work with the "client.webSocketURL" option exports[`web socket server URL should work with the "client.webSocketURL" option as "string" ("ws"): page errors 1`] = `[]`; -exports[`web socket server URL should work with the "client.webSocketURL.host" option ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`web socket server URL should work with the "client.webSocketURL.host" option ("sockjs"): page errors 1`] = `[]`; - exports[`web socket server URL should work with the "client.webSocketURL.host" option ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -329,16 +165,6 @@ exports[`web socket server URL should work with the "client.webSocketURL.host" o exports[`web socket server URL should work with the "client.webSocketURL.host" option ("ws"): page errors 1`] = `[]`; -exports[`web socket server URL should work with the "client.webSocketURL.host" option using "0.0.0.0" value ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`web socket server URL should work with the "client.webSocketURL.host" option using "0.0.0.0" value ("sockjs"): page errors 1`] = `[]`; - exports[`web socket server URL should work with the "client.webSocketURL.host" option using "0.0.0.0" value ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -349,16 +175,6 @@ exports[`web socket server URL should work with the "client.webSocketURL.host" o exports[`web socket server URL should work with the "client.webSocketURL.host" option using "0.0.0.0" value ("ws"): page errors 1`] = `[]`; -exports[`web socket server URL should work with the "client.webSocketURL.password" option ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`web socket server URL should work with the "client.webSocketURL.password" option ("sockjs"): page errors 1`] = `[]`; - exports[`web socket server URL should work with the "client.webSocketURL.password" option ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -369,7 +185,7 @@ exports[`web socket server URL should work with the "client.webSocketURL.passwor exports[`web socket server URL should work with the "client.webSocketURL.password" option ("ws"): page errors 1`] = `[]`; -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option ("sockjs"): console messages 1`] = ` +exports[`web socket server URL should work with the "client.webSocketURL.pathname" option ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -377,9 +193,7 @@ exports[`web socket server URL should work with the "client.webSocketURL.pathnam ] `; -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option ("sockjs"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option ("ws"): console messages 1`] = ` +exports[`web socket server URL should work with the "client.webSocketURL.pathname" option ("ws"): console messages 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -389,15 +203,7 @@ exports[`web socket server URL should work with the "client.webSocketURL.pathnam exports[`web socket server URL should work with the "client.webSocketURL.pathname" option ("ws"): page errors 1`] = `[]`; -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ("sockjs"): page errors 1`] = `[]`; +exports[`web socket server URL should work with the "client.webSocketURL.pathname" option ("ws"): page errors 2`] = `[]`; exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ("ws"): console messages 1`] = ` [ @@ -409,16 +215,6 @@ exports[`web socket server URL should work with the "client.webSocketURL.pathnam exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ("ws"): page errors 1`] = `[]`; -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ending with slash ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ending with slash ("sockjs"): page errors 1`] = `[]`; - exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ending with slash ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -429,16 +225,6 @@ exports[`web socket server URL should work with the "client.webSocketURL.pathnam exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ending with slash ("ws"): page errors 1`] = `[]`; -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ending without slash ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ending without slash ("sockjs"): page errors 1`] = `[]`; - exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ending without slash ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -449,16 +235,6 @@ exports[`web socket server URL should work with the "client.webSocketURL.pathnam exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ending without slash ("ws"): page errors 1`] = `[]`; -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" using empty value ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" using empty value ("sockjs"): page errors 1`] = `[]`; - exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" using empty value ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -469,36 +245,6 @@ exports[`web socket server URL should work with the "client.webSocketURL.pathnam exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" using empty value ("ws"): page errors 1`] = `[]`; -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "prefix" for compatibility with "sockjs" ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "prefix" for compatibility with "sockjs" ("sockjs"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "prefix" for compatibility with "sockjs" ("ws"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "prefix" for compatibility with "sockjs" ("ws"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "client.webSocketURL.port" option ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`web socket server URL should work with the "client.webSocketURL.port" option ("sockjs"): page errors 1`] = `[]`; - exports[`web socket server URL should work with the "client.webSocketURL.port" option ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -509,16 +255,6 @@ exports[`web socket server URL should work with the "client.webSocketURL.port" o exports[`web socket server URL should work with the "client.webSocketURL.port" option ("ws"): page errors 1`] = `[]`; -exports[`web socket server URL should work with the "client.webSocketURL.port" option as string ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`web socket server URL should work with the "client.webSocketURL.port" option as string ("sockjs"): page errors 1`] = `[]`; - exports[`web socket server URL should work with the "client.webSocketURL.port" option as string ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -529,16 +265,6 @@ exports[`web socket server URL should work with the "client.webSocketURL.port" o exports[`web socket server URL should work with the "client.webSocketURL.port" option as string ("ws"): page errors 1`] = `[]`; -exports[`web socket server URL should work with the "client.webSocketURL.port" option using "0" value ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`web socket server URL should work with the "client.webSocketURL.port" option using "0" value ("sockjs"): page errors 1`] = `[]`; - exports[`web socket server URL should work with the "client.webSocketURL.port" option using "0" value ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -549,16 +275,6 @@ exports[`web socket server URL should work with the "client.webSocketURL.port" o exports[`web socket server URL should work with the "client.webSocketURL.port" option using "0" value ("ws"): page errors 1`] = `[]`; -exports[`web socket server URL should work with the "client.webSocketURL.protocol" option ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`web socket server URL should work with the "client.webSocketURL.protocol" option ("sockjs"): page errors 1`] = `[]`; - exports[`web socket server URL should work with the "client.webSocketURL.protocol" option ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -569,16 +285,6 @@ exports[`web socket server URL should work with the "client.webSocketURL.protoco exports[`web socket server URL should work with the "client.webSocketURL.protocol" option ("ws"): page errors 1`] = `[]`; -exports[`web socket server URL should work with the "client.webSocketURL.protocol" option using "auto:" value ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`web socket server URL should work with the "client.webSocketURL.protocol" option using "auto:" value ("sockjs"): page errors 1`] = `[]`; - exports[`web socket server URL should work with the "client.webSocketURL.protocol" option using "auto:" value ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -589,16 +295,6 @@ exports[`web socket server URL should work with the "client.webSocketURL.protoco exports[`web socket server URL should work with the "client.webSocketURL.protocol" option using "auto:" value ("ws"): page errors 1`] = `[]`; -exports[`web socket server URL should work with the "client.webSocketURL.protocol" option using "http:" value and convert to "ws:" ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`web socket server URL should work with the "client.webSocketURL.protocol" option using "http:" value and convert to "ws:" ("sockjs"): page errors 1`] = `[]`; - exports[`web socket server URL should work with the "client.webSocketURL.protocol" option using "http:" value and convert to "ws:" ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -609,16 +305,6 @@ exports[`web socket server URL should work with the "client.webSocketURL.protoco exports[`web socket server URL should work with the "client.webSocketURL.protocol" option using "http:" value and convert to "ws:" ("ws"): page errors 1`] = `[]`; -exports[`web socket server URL should work with the "client.webSocketURL.username" and "client.webSocketURL.password" option ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`web socket server URL should work with the "client.webSocketURL.username" and "client.webSocketURL.password" option ("sockjs"): page errors 1`] = `[]`; - exports[`web socket server URL should work with the "client.webSocketURL.username" and "client.webSocketURL.password" option ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -629,16 +315,6 @@ exports[`web socket server URL should work with the "client.webSocketURL.usernam exports[`web socket server URL should work with the "client.webSocketURL.username" and "client.webSocketURL.password" option ("ws"): page errors 1`] = `[]`; -exports[`web socket server URL should work with the "client.webSocketURL.username" option ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`web socket server URL should work with the "client.webSocketURL.username" option ("sockjs"): page errors 1`] = `[]`; - exports[`web socket server URL should work with the "client.webSocketURL.username" option ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -649,16 +325,6 @@ exports[`web socket server URL should work with the "client.webSocketURL.usernam exports[`web socket server URL should work with the "client.webSocketURL.username" option ("ws"): page errors 1`] = `[]`; -exports[`web socket server URL should work with the custom web socket server "path" ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`web socket server URL should work with the custom web socket server "path" ("sockjs"): page errors 1`] = `[]`; - exports[`web socket server URL should work with the custom web socket server "path" ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -669,16 +335,6 @@ exports[`web socket server URL should work with the custom web socket server "pa exports[`web socket server URL should work with the custom web socket server "path" ("ws"): page errors 1`] = `[]`; -exports[`web socket server URL should work with the custom web socket server "path" using empty value ("sockjs"): console messages 1`] = ` -[ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", -] -`; - -exports[`web socket server URL should work with the custom web socket server "path" using empty value ("sockjs"): page errors 1`] = `[]`; - exports[`web socket server URL should work with the custom web socket server "path" using empty value ("ws"): console messages 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", diff --git a/test/e2e/allowed-hosts.test.js b/test/e2e/allowed-hosts.test.js index f31769baea..63d4dc0291 100644 --- a/test/e2e/allowed-hosts.test.js +++ b/test/e2e/allowed-hosts.test.js @@ -8,7 +8,7 @@ const config = require("../fixtures/client-config/webpack.config"); const runBrowser = require("../helpers/run-browser"); const [port1, port2] = require("../ports-map")["allowed-hosts"]; -const webSocketServers = ["ws", "sockjs"]; +const webSocketServers = ["ws"]; describe("allowed hosts", () => { for (const webSocketServer of webSocketServers) { diff --git a/test/e2e/api.test.js b/test/e2e/api.test.js index f8a536af49..ee09842d04 100644 --- a/test/e2e/api.test.js +++ b/test/e2e/api.test.js @@ -907,11 +907,7 @@ describe("API", () => { }); const webSocketRequests = []; - const session = await page.target().createCDPSession(); - - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + const session = await page.createCDPSession(); await session.send("Target.setAutoAttach", { autoAttach: true, @@ -919,7 +915,11 @@ describe("API", () => { waitForDebuggerOnStart: true, }); - sessionSubscribe(session); + await sessionSubscribe(session); + + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); try { const response = await page.goto(`http://localhost:${port}/`, { diff --git a/test/e2e/built-in-routes.test.js b/test/e2e/built-in-routes.test.js index faab99f224..a0af821a2a 100644 --- a/test/e2e/built-in-routes.test.js +++ b/test/e2e/built-in-routes.test.js @@ -33,69 +33,6 @@ describe("Built in routes", () => { await server.stop(); }); - it("should handles GET request to sockjs bundle", async () => { - page - .on("console", (message) => { - consoleMessages.push(message); - }) - .on("pageerror", (error) => { - pageErrors.push(error); - }); - - const response = await page.goto( - `http://localhost:${port}/__webpack_dev_server__/sockjs.bundle.js`, - { - waitUntil: "networkidle0", - }, - ); - - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); - - expect(response.status()).toMatchSnapshot("response status"); - - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); - - expect(pageErrors).toMatchSnapshot("page errors"); - }); - - it("should handles HEAD request to sockjs bundle", async () => { - page - .on("console", (message) => { - consoleMessages.push(message); - }) - .on("pageerror", (error) => { - pageErrors.push(error); - }) - .on("request", (interceptedRequest) => { - if (interceptedRequest.isInterceptResolutionHandled()) return; - - interceptedRequest.continue({ method: "HEAD" }, 10); - }); - - const response = await page.goto( - `http://localhost:${port}/__webpack_dev_server__/sockjs.bundle.js`, - { - waitUntil: "networkidle0", - }, - ); - - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); - - expect(response.status()).toMatchSnapshot("response status"); - - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); - - expect(pageErrors).toMatchSnapshot("page errors"); - }); - it("should handle GET request to invalidate endpoint", async () => { page .on("console", (message) => { diff --git a/test/e2e/client.test.js b/test/e2e/client.test.js index 335ca39648..5c779a2cbd 100644 --- a/test/e2e/client.test.js +++ b/test/e2e/client.test.js @@ -2,8 +2,9 @@ const webpack = require("webpack"); const Server = require("../../lib/Server"); -const config = require("../fixtures/simple-config-other/webpack.config"); +const config = require("../fixtures/client-config/webpack.config"); const runBrowser = require("../helpers/run-browser"); +const sessionSubscribe = require("../helpers/session-subscribe"); const port = require("../ports-map")["client-option"]; describe("client option", () => { @@ -21,9 +22,9 @@ describe("client option", () => { server = new Server( { client: { - webSocketTransport: "sockjs", + webSocketTransport: "ws", }, - webSocketServer: "sockjs", + webSocketServer: "ws", port, }, compiler, @@ -42,7 +43,7 @@ describe("client option", () => { await server.stop(); }); - it("responds with a 200 status code for /ws path", async () => { + it("responds with a 200 status code for / path", async () => { page .on("console", (message) => { consoleMessages.push(message); @@ -51,7 +52,22 @@ describe("client option", () => { pageErrors.push(error); }); - const response = await page.goto(`http://localhost:${port}/ws`, { + const webSocketRequests = []; + const session = await page.createCDPSession(); + + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); + + await sessionSubscribe(session); + + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); + + const response = await page.goto(`http://localhost:${port}/`, { waitUntil: "networkidle0", }); @@ -60,6 +76,10 @@ describe("client option", () => { expect(response.status()).toMatchSnapshot("response status"); + expect(webSocketRequests.map((request) => request.url)).toMatchSnapshot( + "webSockets", + ); + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( "console messages", ); @@ -82,16 +102,18 @@ describe("client option", () => { server = new Server( { client: { - webSocketTransport: "sockjs", + webSocketTransport: "ws", + webSocketURL: { + pathname: "/foo/test/bar", + }, }, webSocketServer: { - type: "sockjs", + type: "ws", options: { - host: "localhost", - port, path: "/foo/test/bar", }, }, + host: "localhost", port, }, compiler, @@ -110,7 +132,7 @@ describe("client option", () => { await server.stop(); }); - it("responds with a 200 status code for /foo/test/bar path", async () => { + it("responds with a websocket with the /foo/test/bar path", async () => { page .on("console", (message) => { consoleMessages.push(message); @@ -119,14 +141,28 @@ describe("client option", () => { pageErrors.push(error); }); - const response = await page.goto( - `http://localhost:${port}/foo/test/bar`, - { - waitUntil: "networkidle0", - }, - ); + const webSocketRequests = []; + const session = await page.createCDPSession(); - expect(response.status()).toMatchSnapshot("response status"); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); + + await sessionSubscribe(session); + + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); + + await page.goto(`http://localhost:${port}/`, { + waitUntil: "networkidle0", + }); + + expect(webSocketRequests.map((request) => request.url)).toMatchSnapshot( + "webSockets", + ); expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( "console messages", @@ -177,10 +213,27 @@ describe("client option", () => { pageErrors.push(error); }); + const webSocketRequests = []; + const session = await page.createCDPSession(); + + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); + + await sessionSubscribe(session); + + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); + const response = await page.goto(`http://localhost:${port}/main.js`, { waitUntil: "networkidle0", }); + expect(webSocketRequests).toMatchSnapshot("webSockets"); + expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).not.toMatch(/client\/index\.js/); @@ -248,14 +301,6 @@ describe("client option", () => { describe("webSocketTransport", () => { const clientModes = [ - { - title: 'as a string ("sockjs")', - client: { - webSocketTransport: "sockjs", - }, - webSocketServer: "sockjs", - shouldThrow: false, - }, { title: 'as a string ("ws")', client: { @@ -264,16 +309,6 @@ describe("client option", () => { webSocketServer: "ws", shouldThrow: false, }, - { - title: 'as a path ("sockjs")', - client: { - webSocketTransport: require.resolve( - "../../client-src/clients/SockJSClient", - ), - }, - webSocketServer: "sockjs", - shouldThrow: false, - }, { title: 'as a path ("ws")', client: { @@ -284,14 +319,6 @@ describe("client option", () => { webSocketServer: "ws", shouldThrow: false, }, - { - title: "as a nonexistent path (sockjs)", - client: { - webSocketTransport: "/bad/path/to/implementation", - }, - webSocketServer: "sockjs", - shouldThrow: true, - }, { title: "as a nonexistent path (ws)", client: { diff --git a/test/e2e/hot-and-live-reload.test.js b/test/e2e/hot-and-live-reload.test.js index 32e1f9dcb3..9778b2cd5f 100644 --- a/test/e2e/hot-and-live-reload.test.js +++ b/test/e2e/hot-and-live-reload.test.js @@ -6,7 +6,6 @@ const path = require("node:path"); const fs = require("graceful-fs"); -const SockJS = require("sockjs-client"); const webpack = require("webpack"); const WebSocket = require("ws"); const Server = require("../../lib/Server"); @@ -25,7 +24,6 @@ const cssFilePath = path.resolve( const INVALID_MESSAGE = "[webpack-dev-server] App updated. Recompiling..."; describe("hot and live reload", () => { - // "sockjs" client cannot add additional headers const modes = [ { title: "should work and refresh content using hot module replacement", @@ -133,70 +131,6 @@ describe("hot and live reload", () => { hot: true, }, }, - // "sockjs" web socket serve - { - title: - "should work and refresh content using hot module replacement when hot enabled", - options: { - allowedHosts: "all", - - webSocketServer: "sockjs", - hot: true, - }, - }, - { - title: - "should work and refresh content using hot module replacement when live reload enabled", - options: { - allowedHosts: "all", - - webSocketServer: "sockjs", - liveReload: true, - }, - }, - { - title: "should not refresh content when hot and no live reload disabled", - options: { - allowedHosts: "all", - - webSocketServer: "sockjs", - hot: false, - liveReload: false, - }, - }, - { - title: - "should work and refresh content using hot module replacement when live reload disabled and hot enabled", - options: { - allowedHosts: "all", - - webSocketServer: "sockjs", - liveReload: false, - hot: true, - }, - }, - { - title: - "should work and refresh content using live reload when live reload disabled and hot enabled", - options: { - allowedHosts: "all", - - webSocketServer: "sockjs", - liveReload: true, - hot: false, - }, - }, - { - title: - "should work and refresh content using hot module replacement when live reload and hot enabled", - options: { - allowedHosts: "all", - - webSocketServer: "sockjs", - liveReload: true, - hot: true, - }, - }, { title: 'should work and allow to disable hot module replacement using the "webpack-dev-server-hot=false"', @@ -347,89 +281,44 @@ describe("hot and live reload", () => { testDevServerOptions.webSocketServer !== false; await new Promise((resolve) => { - const webSocketTransport = - typeof testDevServerOptions.webSocketServer !== "undefined" && - testDevServerOptions.webSocketServer !== false - ? testDevServerOptions.webSocketServer - : "ws"; - - if (webSocketTransport === "ws") { - const ws = new WebSocket( - `ws://localhost:${devServerOptions.port}/ws`, - { - headers: { - host: `localhost:${devServerOptions.port}`, - origin: `http://localhost:${devServerOptions.port}`, - }, - }, - ); - - let opened = false; - let received = false; - let errored = false; - - ws.on("error", (_error) => { - errored = true; - - ws.close(); - }); - - ws.on("open", () => { - opened = true; - }); - - ws.on("message", (data) => { - const message = JSON.parse(data); - - if (message.type === "ok") { - received = true; + const ws = new WebSocket(`ws://localhost:${devServerOptions.port}/ws`, { + headers: { + host: `localhost:${devServerOptions.port}`, + origin: `http://localhost:${devServerOptions.port}`, + }, + }); - ws.close(); - } - }); + let opened = false; + let received = false; + let errored = false; - ws.on("close", () => { - if (opened && received && !errored) { - resolve(); - } else if (!webSocketServerLaunched && errored) { - resolve(); - } - }); - } else { - const sockjs = new SockJS( - `http://localhost:${devServerOptions.port}/ws`, - ); + ws.on("error", (_error) => { + errored = true; - let opened = false; - let received = false; - let errored = false; - - sockjs.onerror = () => { - errored = true; - }; + ws.close(); + }); - sockjs.onopen = () => { - opened = true; - }; + ws.on("open", () => { + opened = true; + }); - sockjs.onmessage = ({ data }) => { - const message = JSON.parse(data); + ws.on("message", (data) => { + const message = JSON.parse(data); - if (message.type === "ok") { - received = true; + if (message.type === "ok") { + received = true; - sockjs.close(); - } - }; + ws.close(); + } + }); - sockjs.onclose = (event) => { - if (opened && received && !errored) { - resolve(); - } else if (event && event.reason === "Cannot connect to server") { - resolve(); - } - }; - } + ws.on("close", () => { + if (opened && received && !errored) { + resolve(); + } else if (!webSocketServerLaunched && errored) { + resolve(); + } + }); }); const launched = await runBrowser(); diff --git a/test/e2e/ipc.test.js b/test/e2e/ipc.test.js index 735b0e652f..519c9e1ea4 100644 --- a/test/e2e/ipc.test.js +++ b/test/e2e/ipc.test.js @@ -12,11 +12,11 @@ const runBrowser = require("../helpers/run-browser"); const sessionSubscribe = require("../helpers/session-subscribe"); const port1 = require("../ports-map").ipc; -const webSocketServers = ["ws", "sockjs"]; +const webSocketServers = ["ws"]; describe("web socket server URL", () => { for (const webSocketServer of webSocketServers) { - const websocketURLProtocol = webSocketServer === "ws" ? "ws" : "http"; + const websocketURLProtocol = webSocketServer; it(`should work with the "ipc" option using "true" value ("${webSocketServer}")`, async () => { const devServerHost = "localhost"; @@ -72,27 +72,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://${proxyHost}:${proxyPort}/`, { waitUntil: "networkidle0", @@ -174,27 +166,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://${proxyHost}:${proxyPort}/`, { waitUntil: "networkidle0", @@ -294,27 +278,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://${proxyHost}:${proxyPort}/`, { waitUntil: "networkidle0", diff --git a/test/e2e/logging.test.js b/test/e2e/logging.test.js index b00d2fa783..9ba530ba3d 100644 --- a/test/e2e/logging.test.js +++ b/test/e2e/logging.test.js @@ -10,10 +10,7 @@ const runBrowser = require("../helpers/run-browser"); const port = require("../ports-map").logging; describe("logging", () => { - const webSocketServers = [ - { webSocketServer: "ws" }, - { webSocketServer: "sockjs" }, - ]; + const webSocketServers = [{ webSocketServer: "ws" }]; const cases = [ { diff --git a/test/e2e/server-and-client-transport.test.js b/test/e2e/server-and-client-transport.test.js index 763a4be353..b8dc4ad79d 100644 --- a/test/e2e/server-and-client-transport.test.js +++ b/test/e2e/server-and-client-transport.test.js @@ -3,9 +3,7 @@ const webpack = require("webpack"); const Server = require("../../lib/Server"); const WebsocketServer = require("../../lib/servers/WebsocketServer"); -const customConfig = require("../fixtures/provide-plugin-custom/webpack.config"); const defaultConfig = require("../fixtures/provide-plugin-default/webpack.config"); -const sockjsConfig = require("../fixtures/provide-plugin-sockjs-config/webpack.config"); const wsConfig = require("../fixtures/provide-plugin-ws-config/webpack.config"); const runBrowser = require("../helpers/run-browser"); const port = require("../ports-map")["server-and-client-transport"]; @@ -123,82 +121,6 @@ describe("server and client transport", () => { } }); - it('should use "sockjs" web socket server when specify "sockjs" value', async () => { - const compiler = webpack(sockjsConfig); - const devServerOptions = { - port, - webSocketServer: "sockjs", - }; - const server = new Server(devServerOptions, compiler); - - await server.start(); - - const { page, browser } = await runBrowser(); - - try { - const consoleMessages = []; - - page.on("console", (message) => { - consoleMessages.push(message); - }); - - await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0", - }); - - const isCorrectTransport = await page.evaluate( - () => globalThis.injectedClient === globalThis.expectedClient, - ); - - expect(isCorrectTransport).toBe(true); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot(); - } finally { - await browser.close(); - await server.stop(); - } - }); - - it('should use "sockjs" web socket server when specify "sockjs" value using object', async () => { - const compiler = webpack(sockjsConfig); - const devServerOptions = { - port, - webSocketServer: { - type: "sockjs", - }, - }; - const server = new Server(devServerOptions, compiler); - - await server.start(); - - const { page, browser } = await runBrowser(); - - try { - const consoleMessages = []; - - page.on("console", (message) => { - consoleMessages.push(message); - }); - - await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0", - }); - - const isCorrectTransport = await page.evaluate( - () => globalThis.injectedClient === globalThis.expectedClient, - ); - - expect(isCorrectTransport).toBe(true); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot(); - } finally { - await browser.close(); - await server.stop(); - } - }); - it("should use custom web socket server when specify class", async () => { const compiler = webpack(defaultConfig); const devServerOptions = { @@ -384,45 +306,6 @@ describe("server and client transport", () => { } }); - it('should use "sockjs" transport, when web socket server is not specify', async () => { - const compiler = webpack(sockjsConfig); - const devServerOptions = { - port, - client: { - webSocketTransport: "sockjs", - }, - }; - const server = new Server(devServerOptions, compiler); - - await server.start(); - - const { page, browser } = await runBrowser(); - - try { - const consoleMessages = []; - - page.on("console", (message) => { - consoleMessages.push(message); - }); - - await page.goto(`http://localhost:${port}/main.js`, { - waitUntil: "networkidle0", - }); - - const isCorrectTransport = await page.evaluate( - () => globalThis.injectedClient === globalThis.expectedClient, - ); - - expect(isCorrectTransport).toBe(true); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot(); - } finally { - await browser.close(); - await server.stop(); - } - }); - it('should use "ws" transport, when web socket server is not specify', async () => { const compiler = webpack(wsConfig); const devServerOptions = { @@ -462,46 +345,6 @@ describe("server and client transport", () => { } }); - it('should use "sockjs" transport and "sockjs" web socket server', async () => { - const compiler = webpack(sockjsConfig); - const devServerOptions = { - port, - client: { - webSocketTransport: "sockjs", - }, - webSocketServer: "sockjs", - }; - const server = new Server(devServerOptions, compiler); - - await server.start(); - - const { page, browser } = await runBrowser(); - - try { - const consoleMessages = []; - - page.on("console", (message) => { - consoleMessages.push(message); - }); - - await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0", - }); - - const isCorrectTransport = await page.evaluate( - () => globalThis.injectedClient === globalThis.expectedClient, - ); - - expect(isCorrectTransport).toBe(true); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot(); - } finally { - await browser.close(); - await server.stop(); - } - }); - it('should use "ws" transport and "ws" web socket server', async () => { const compiler = webpack(wsConfig); const devServerOptions = { @@ -542,48 +385,6 @@ describe("server and client transport", () => { } }); - it('should use custom transport and "sockjs" web socket server', async () => { - const compiler = webpack(customConfig); - const devServerOptions = { - port, - client: { - webSocketTransport: require.resolve( - "../fixtures/custom-client/CustomSockJSClient", - ), - }, - webSocketServer: "sockjs", - }; - const server = new Server(devServerOptions, compiler); - - await server.start(); - - const { page, browser } = await runBrowser(); - - try { - const consoleMessages = []; - - page.on("console", (message) => { - consoleMessages.push(message); - }); - - await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0", - }); - - const isCorrectTransport = await page.evaluate( - () => globalThis.injectedClient === globalThis.expectedClient, - ); - - expect(isCorrectTransport).toBe(true); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot(); - } finally { - await browser.close(); - await server.stop(); - } - }); - it("should throw an error on invalid path to server transport", async () => { const compiler = webpack(defaultConfig); const devServerOptions = { diff --git a/test/e2e/web-socket-communication.test.js b/test/e2e/web-socket-communication.test.js index 8af3b3678a..d071576eff 100644 --- a/test/e2e/web-socket-communication.test.js +++ b/test/e2e/web-socket-communication.test.js @@ -9,7 +9,7 @@ const runBrowser = require("../helpers/run-browser"); const port = require("../ports-map")["web-socket-communication"]; describe("web socket communication", () => { - const webSocketServers = ["ws", "sockjs"]; + const webSocketServers = ["ws"]; for (const websocketServer of webSocketServers) { it(`should work and close web socket client connection when web socket server closed ("${websocketServer}")`, async () => { diff --git a/test/e2e/web-socket-server-url.test.js b/test/e2e/web-socket-server-url.test.js index e6ed541468..6b62cf0248 100644 --- a/test/e2e/web-socket-server-url.test.js +++ b/test/e2e/web-socket-server-url.test.js @@ -9,11 +9,11 @@ const runBrowser = require("../helpers/run-browser"); const sessionSubscribe = require("../helpers/session-subscribe"); const [port1, port2] = require("../ports-map")["web-socket-server-url"]; -const webSocketServers = ["ws", "sockjs"]; +const webSocketServers = ["ws"]; describe("web socket server URL", () => { for (const webSocketServer of webSocketServers) { - const websocketURLProtocol = webSocketServer === "ws" ? "ws" : "http"; + const websocketURLProtocol = webSocketServer; it(`should work behind proxy, when hostnames are same and ports are different ("${webSocketServer}")`, async () => { const devServerHost = "127.0.0.1"; @@ -69,27 +69,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://${proxyHost}:${proxyPort}/`, { waitUntil: "networkidle0", @@ -164,27 +156,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://${proxyHost}:${proxyPort}/`, { waitUntil: "networkidle0", @@ -265,27 +249,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://${proxyHost}:${proxyPort}/`, { waitUntil: "networkidle0", }); @@ -365,27 +341,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://${proxyHost}:${proxyPort}/`, { waitUntil: "networkidle0", @@ -443,27 +411,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://localhost:${port1}/`, { waitUntil: "networkidle0", @@ -517,27 +477,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://localhost:${port1}/`, { waitUntil: "networkidle0", @@ -591,27 +543,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://localhost:${port1}/`, { waitUntil: "networkidle0", @@ -665,27 +609,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://127.0.0.1:${port1}/`, { waitUntil: "networkidle0", @@ -739,27 +675,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://127.0.0.1:${port1}/`, { waitUntil: "networkidle0", }); @@ -812,27 +740,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://127.0.0.1:${port1}/`, { waitUntil: "networkidle0", @@ -886,27 +806,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://127.0.0.1:${port1}/`, { waitUntil: "networkidle0", @@ -934,15 +846,14 @@ describe("web socket server URL", () => { type: webSocketServer, options: { host: "0.0.0.0", - // "sockjs" doesn't support external server - port: webSocketServer === "sockjs" ? `${port1}` : `${port2}`, + port: `${port2}`, }, }, port: port1, host: "0.0.0.0", client: { webSocketURL: { - port: webSocketServer === "sockjs" ? `${port1}` : `${port2}`, + port: `${port2}`, }, }, allowedHosts: "all", @@ -967,27 +878,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://127.0.0.1:${port1}/`, { waitUntil: "networkidle0", @@ -996,9 +899,7 @@ describe("web socket server URL", () => { const [webSocketRequest] = webSocketRequests; expect(webSocketRequest.url).toContain( - webSocketServer === "sockjs" - ? `${websocketURLProtocol}://127.0.0.1:${port1}/ws` - : `${websocketURLProtocol}://127.0.0.1:${port2}/ws`, + `${websocketURLProtocol}://127.0.0.1:${port2}/ws`, ); expect( consoleMessages.map((message) => message.text()), @@ -1043,27 +944,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://127.0.0.1:${port1}/`, { waitUntil: "networkidle0", }); @@ -1116,27 +1009,18 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); - - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + const session = await page.createCDPSession(); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://127.0.0.1:${port1}/`, { waitUntil: "networkidle0", @@ -1185,27 +1069,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://127.0.0.1:${port1}/`, { waitUntil: "networkidle0", @@ -1259,27 +1135,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://127.0.0.1:${port1}/`, { waitUntil: "networkidle0", }); @@ -1303,13 +1171,10 @@ describe("web socket server URL", () => { const compiler = webpack(config); const devServerOptions = { client: { - webSocketURL: - webSocketServer === "ws" - ? { - username: "foo", - password: "chuntaro", - } - : {}, + webSocketURL: { + username: "foo", + password: "chuntaro", + }, }, webSocketServer, port: port1, @@ -1336,27 +1201,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://127.0.0.1:${port1}/`, { waitUntil: "networkidle0", }); @@ -1364,10 +1221,7 @@ describe("web socket server URL", () => { const [webSocketRequest] = webSocketRequests; expect(webSocketRequest.url).toContain( - // "sockjs" has bug with parsing URL - webSocketServer === "ws" - ? `${websocketURLProtocol}://foo:chuntaro@127.0.0.1:${port1}/ws` - : `${websocketURLProtocol}://127.0.0.1:${port1}/ws`, + `${websocketURLProtocol}://foo:chuntaro@127.0.0.1:${port1}/ws`, ); expect( consoleMessages.map((message) => message.text()), @@ -1413,27 +1267,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://127.0.0.1:${port1}/`, { waitUntil: "networkidle0", @@ -1487,27 +1333,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/custom-ws\/foo\/bar/.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://127.0.0.1:${port1}/`, { waitUntil: "networkidle0", @@ -1535,7 +1373,7 @@ describe("web socket server URL", () => { webSocketServer: { type: webSocketServer, options: { - path: webSocketServer === "ws" ? "" : "/custom-ws", + path: "", }, }, port: port1, @@ -1562,27 +1400,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/custom-ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://127.0.0.1:${port1}/`, { waitUntil: "networkidle0", @@ -1591,9 +1421,7 @@ describe("web socket server URL", () => { const [webSocketRequest] = webSocketRequests; expect(webSocketRequest.url).toContain( - webSocketServer === "ws" - ? `${websocketURLProtocol}://127.0.0.1:${port1}` - : `${websocketURLProtocol}://127.0.0.1:${port1}/custom-ws`, + `${websocketURLProtocol}://127.0.0.1:${port1}`, ); expect( consoleMessages.map((message) => message.text()), @@ -1643,27 +1471,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/custom-ws\/foo\/bar/.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://127.0.0.1:${port1}/`, { waitUntil: "networkidle0", @@ -1722,27 +1542,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/custom-ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://127.0.0.1:${port1}/`, { waitUntil: "networkidle0", @@ -1763,19 +1575,18 @@ describe("web socket server URL", () => { } }); - // Only works for "ws" server, "sockjs" adds "/" be default, because need do requests like "/custom-ws/info?t=1624462615772" it(`should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ending with slash ("${webSocketServer}")`, async () => { const compiler = webpack(config); const devServerOptions = { client: { webSocketURL: { - pathname: webSocketServer === "ws" ? "/custom-ws/" : "/custom-ws", + pathname: "/custom-ws/", }, }, webSocketServer: { type: webSocketServer, options: { - path: webSocketServer === "ws" ? "/custom-ws/" : "/custom-ws", + path: "/custom-ws/", }, }, port: port1, @@ -1802,27 +1613,20 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); + + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/custom-ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } await page.goto(`http://127.0.0.1:${port1}/`, { waitUntil: "networkidle0", }); @@ -1848,13 +1652,13 @@ describe("web socket server URL", () => { const devServerOptions = { client: { webSocketURL: { - pathname: webSocketServer === "ws" ? "" : "/custom-ws", + pathname: "", }, }, webSocketServer: { type: webSocketServer, options: { - path: webSocketServer === "ws" ? "" : "/custom-ws", + path: "", }, }, port: port1, @@ -1881,27 +1685,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/custom-ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://127.0.0.1:${port1}/`, { waitUntil: "networkidle0", @@ -1910,9 +1706,7 @@ describe("web socket server URL", () => { const [webSocketRequest] = webSocketRequests; expect(webSocketRequest.url).toContain( - webSocketServer === "ws" - ? `${websocketURLProtocol}://127.0.0.1:${port1}` - : `${websocketURLProtocol}://127.0.0.1:${port1}/custom-ws`, + `${websocketURLProtocol}://127.0.0.1:${port1}`, ); expect( consoleMessages.map((message) => message.text()), @@ -1924,8 +1718,7 @@ describe("web socket server URL", () => { } }); - // Only works for "sockjs" server - it(`should work with the "client.webSocketURL.pathname" option and the custom web socket server "prefix" for compatibility with "sockjs" ("${webSocketServer}")`, async () => { + it(`should work with the "client.webSocketURL.pathname" option ("${webSocketServer}")`, async () => { const compiler = webpack(config); const devServerOptions = { client: { @@ -1935,10 +1728,7 @@ describe("web socket server URL", () => { }, webSocketServer: { type: webSocketServer, - options: - webSocketServer === "ws" - ? { path: "/custom-ws" } - : { prefix: "/custom-ws" }, + options: { path: "/custom-ws" }, }, port: port1, host: "0.0.0.0", @@ -1964,27 +1754,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/custom-ws/.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://127.0.0.1:${port1}/`, { waitUntil: "networkidle0", @@ -2033,27 +1815,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://${hostname}:${port1}/`, { waitUntil: "networkidle0", }); @@ -2101,27 +1875,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://${hostname}:${port1}/`, { waitUntil: "networkidle0", @@ -2170,27 +1936,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://${hostname}:${port1}/`, { waitUntil: "networkidle0", }); @@ -2238,27 +1996,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`https://${hostname}:${port1}/`, { waitUntil: "networkidle0", @@ -2266,15 +2016,7 @@ describe("web socket server URL", () => { const [webSocketRequest] = webSocketRequests; - if (webSocketServer === "ws") { - expect(webSocketRequest.url).toContain( - `wss://${hostname}:${port1}/ws`, - ); - } else { - expect(webSocketRequest.url).toContain( - `https://${hostname}:${port1}/ws`, - ); - } + expect(webSocketRequest.url).toContain(`wss://${hostname}:${port1}/ws`); expect( consoleMessages.map((message) => message.text()), @@ -2318,27 +2060,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`https://${hostname}:${port1}/`, { waitUntil: "networkidle0", @@ -2347,15 +2081,9 @@ describe("web socket server URL", () => { const [webSocketRequest] = webSocketRequests; /* eslint-disable jest/no-standalone-expect */ - if (webSocketServer === "ws") { - expect(webSocketRequest.url).toContain( - `wss://${hostname}:${port1}/ws`, - ); - } else { - expect(webSocketRequest.url).toContain( - `https://${hostname}:${port1}/ws`, - ); - } + expect(webSocketRequest.url).toContain( + `wss://${hostname}:${port1}/ws`, + ); expect(consoleMessages.map((message) => message.text())).toEqual([ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", @@ -2403,27 +2131,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://127.0.0.1:${resolvedFreePort}/`, { waitUntil: "networkidle0", @@ -2482,27 +2202,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://127.0.0.1:${port1}/`, { waitUntil: "networkidle0", @@ -2554,27 +2266,19 @@ describe("web socket server URL", () => { const webSocketRequests = []; - if (webSocketServer === "ws") { - const session = await page.target().createCDPSession(); + const session = await page.createCDPSession(); - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); + await sessionSubscribe(session); - sessionSubscribe(session); - } else { - page.on("request", (request) => { - if (/\/ws\//.test(request.url())) { - webSocketRequests.push({ url: request.url() }); - } - }); - } + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://127.0.0.1:${port1}/`, { waitUntil: "networkidle0", diff --git a/test/e2e/web-socket-server.test.js b/test/e2e/web-socket-server.test.js index b611040e2e..ea50d4aa24 100644 --- a/test/e2e/web-socket-server.test.js +++ b/test/e2e/web-socket-server.test.js @@ -35,11 +35,7 @@ describe("web socket server", () => { }); const webSocketRequests = []; - const session = await page.target().createCDPSession(); - - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); + const session = await page.createCDPSession(); await session.send("Target.setAutoAttach", { autoAttach: true, @@ -47,7 +43,11 @@ describe("web socket server", () => { waitForDebuggerOnStart: true, }); - sessionSubscribe(session); + await sessionSubscribe(session); + + session.on("Network.webSocketCreated", (test) => { + webSocketRequests.push(test); + }); await page.goto(`http://localhost:${port}/`, { waitUntil: "networkidle0", diff --git a/test/fixtures/custom-client/CustomSockJSClient.js b/test/fixtures/custom-client/CustomWebSocketClient.js similarity index 53% rename from test/fixtures/custom-client/CustomSockJSClient.js rename to test/fixtures/custom-client/CustomWebSocketClient.js index e4f6c54de0..58ec6c2136 100644 --- a/test/fixtures/custom-client/CustomSockJSClient.js +++ b/test/fixtures/custom-client/CustomWebSocketClient.js @@ -1,23 +1,22 @@ "use strict"; -const SockJS = require("sockjs-client/dist/sockjs"); - -module.exports = class SockJSClient { +module.exports = class WebSocketClient { constructor(url) { - this.sock = new SockJS( - url.replace(/^ws:/i, "http://").replace(/^wss:/i, "https://"), - ); + this.client = new WebSocket(url); + this.client.onerror = (error) => { + console.error(error); + }; } onOpen(f) { - this.sock.onopen = () => { + this.client.onopen = () => { console.log("open"); f(); }; } onClose(f) { - this.sock.onclose = () => { + this.client.onclose = () => { console.log("close"); f(); }; @@ -25,7 +24,7 @@ module.exports = class SockJSClient { // call f with the message string as the first argument onMessage(f) { - this.sock.onmessage = (e) => { + this.client.onmessage = (e) => { const obj = JSON.parse(e.data); console.log(obj.type); f(e.data); diff --git a/test/fixtures/provide-plugin-custom/foo.js b/test/fixtures/provide-plugin-custom/foo.js index c28b40f73c..c1faff1c20 100644 --- a/test/fixtures/provide-plugin-custom/foo.js +++ b/test/fixtures/provide-plugin-custom/foo.js @@ -1,7 +1,7 @@ "use strict"; // 'npm run prepare' must be run for this to work during testing -const CustomClient = require("../../fixtures/custom-client/CustomSockJSClient"); +const CustomClient = require("../custom-client/CustomWebSocketClient"); window.expectedClient = CustomClient; // eslint-disable-next-line camelcase, no-undef diff --git a/test/fixtures/provide-plugin-sockjs-config/foo.js b/test/fixtures/provide-plugin-sockjs-config/foo.js deleted file mode 100644 index dd47486385..0000000000 --- a/test/fixtures/provide-plugin-sockjs-config/foo.js +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; - -// 'npm run prepare' must be run for this to work during testing -const SockJSClient = require("../../../client/clients/SockJSClient").default; - -window.expectedClient = SockJSClient; -// eslint-disable-next-line camelcase, no-undef -window.injectedClient = __webpack_dev_server_client__.default; diff --git a/test/fixtures/provide-plugin-sockjs-config/webpack.config.js b/test/fixtures/provide-plugin-sockjs-config/webpack.config.js deleted file mode 100644 index 6006074030..0000000000 --- a/test/fixtures/provide-plugin-sockjs-config/webpack.config.js +++ /dev/null @@ -1,21 +0,0 @@ -"use strict"; - -const HTMLGeneratorPlugin = require("../../helpers/html-generator-plugin"); - -module.exports = { - mode: "development", - context: __dirname, - stats: "none", - entry: "./foo.js", - output: { - path: "/", - }, - node: false, - infrastructureLogging: { - level: "info", - stream: { - write: () => {}, - }, - }, - plugins: [new HTMLGeneratorPlugin()], -}; diff --git a/test/helpers/session-subscribe.js b/test/helpers/session-subscribe.js index 88e71864b5..9287e2646a 100644 --- a/test/helpers/session-subscribe.js +++ b/test/helpers/session-subscribe.js @@ -4,6 +4,6 @@ module.exports = async function sessionSubscribe(session) { session.on("sessionattached", (attachedSession) => { sessionSubscribe(attachedSession); }); - session.send("Network.enable"); - session.send("Runtime.runIfWaitingForDebugger"); + await session.send("Network.enable"); + await session.send("Runtime.runIfWaitingForDebugger"); }; diff --git a/test/normalize-options.test.js b/test/normalize-options.test.js index b3ae68c021..b80d418ed0 100644 --- a/test/normalize-options.test.js +++ b/test/normalize-options.test.js @@ -19,15 +19,6 @@ describe("normalize options", () => { port: "9000", }, }, - { - title: "client.webSocketTransport sockjs string", - multiCompiler: false, - options: { - client: { - webSocketTransport: "sockjs", - }, - }, - }, { title: "client.webSocketTransport ws string", multiCompiler: false, diff --git a/test/ports-map.js b/test/ports-map.js index d95dc62af9..d898970fdf 100644 --- a/test/ports-map.js +++ b/test/ports-map.js @@ -7,7 +7,6 @@ const listOfTests = { "cli-port-option": 1, // e2e tests bundle: 1, - "sockjs-client": 1, "web-socket-client": 1, "hot-and-live-reload": 1, logging: 1, @@ -43,7 +42,6 @@ const listOfTests = { "stats-option": 1, "watch-files-option": 1, "web-socket-server-option": 1, - "sockjs-server": 1, "web-socket-server": 1, routes: 1, "web-socket-communication": 1, diff --git a/test/server/proxy-option.test.js b/test/server/proxy-option.test.js index d6c209e055..dcc0fae9bf 100644 --- a/test/server/proxy-option.test.js +++ b/test/server/proxy-option.test.js @@ -596,7 +596,7 @@ describe("proxy option", () => { let webSocketServer; let responseMessage; - const webSocketServerTypes = ["sockjs", "ws"]; + const webSocketServerTypes = ["ws"]; for (const webSocketServerType of webSocketServerTypes) { // eslint-disable-next-line no-loop-func diff --git a/test/validate-options.test.js b/test/validate-options.test.js index b92f9be1fd..97590dfc13 100644 --- a/test/validate-options.test.js +++ b/test/validate-options.test.js @@ -68,10 +68,7 @@ const tests = { }, }, { - webSocketTransport: "sockjs", - }, - { - webSocketTransport: require.resolve("../client/clients/SockJSClient"), + webSocketTransport: "ws", }, { webSocketURL: "ws://localhost:8080", @@ -502,7 +499,6 @@ const tests = { success: [ false, "ws", - "sockjs", { type: "ws", options: { diff --git a/types/lib/Server.d.ts b/types/lib/Server.d.ts index c46b9ea61a..ca7f05728c 100644 --- a/types/lib/Server.d.ts +++ b/types/lib/Server.d.ts @@ -1644,29 +1644,22 @@ type WebSocketServerConfiguration = { /** * type */ - type?: - | ("sockjs" | "ws" | string | (() => WebSocketServerConfiguration)) - | undefined; + type?: ("ws" | string | (() => WebSocketServerConfiguration)) | undefined; /** * options */ options?: Record | undefined; }; -type ClientConnection = ( - | import("ws").WebSocket - | (import("sockjs").Connection & { - send: import("ws").WebSocket["send"]; - terminate: import("ws").WebSocket["terminate"]; - ping: import("ws").WebSocket["ping"]; - }) -) & { +type ClientConnection = (import("ws").WebSocket & { + send: import("ws").WebSocket["send"]; + terminate: import("ws").WebSocket["terminate"]; + ping: import("ws").WebSocket["ping"]; +}) & { isAlive?: boolean; }; -type WebSocketServer = - | import("ws").WebSocketServer - | (import("sockjs").Server & { - close: import("ws").WebSocketServer["close"]; - }); +type WebSocketServer = import("ws").WebSocketServer & { + close: import("ws").WebSocketServer["close"]; +}; type WebSocketServerImplementation = { implementation: WebSocketServer; clients: ClientConnection[]; @@ -1763,7 +1756,7 @@ type ClientConfiguration = { /** * web socket transport */ - webSocketTransport?: ("ws" | "sockjs" | string) | undefined; + webSocketTransport?: ("ws" | string) | undefined; /** * web socket URL */ @@ -1811,7 +1804,7 @@ type Configuration< server?: (ServerType | ServerConfiguration) | undefined; app?: (() => Promise
) | undefined; webSocketServer?: - | (boolean | "sockjs" | "ws" | string | WebSocketServerConfiguration) + | (boolean | "ws" | string | WebSocketServerConfiguration) | undefined; proxy?: ProxyConfigArray | undefined; open?: (boolean | string | Open | Array) | undefined; diff --git a/types/lib/servers/SockJSServer.d.ts b/types/lib/servers/SockJSServer.d.ts deleted file mode 100644 index 8116b4dd9d..0000000000 --- a/types/lib/servers/SockJSServer.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -export = SockJSServer; -declare class SockJSServer extends BaseServer { - implementation: sockjs.Server; -} -declare namespace SockJSServer { - export { WebSocketServerConfiguration, ClientConnection }; -} -import BaseServer = require("./BaseServer"); -import sockjs = require("sockjs"); -type WebSocketServerConfiguration = - import("../Server").WebSocketServerConfiguration; -type ClientConnection = import("../Server").ClientConnection; From 873a803a4740cdafbdda78f83d18d2ee97ec086d Mon Sep 17 00:00:00 2001 From: Sebastian Beltran Date: Fri, 23 Jan 2026 12:08:44 -0500 Subject: [PATCH 04/21] feat: bump to express 5 (#5564) * feat: bump to express 5 Signed-off-by: Sebastian Beltran * fix: update webpack-dev-middleware to version 7.4.5 and adjust snapshot for response headers * test: remove TODO comment regarding content-type in range-header test * refactor: simplify logger assignment in proxy * test: update expectation for error logging in proxy option test * test: mock console.error for proxy option tests and verify error logging * refactor: replace logger string with server.logger in allowed hosts tests * refactor: update proxy middleware to use 'on' object for request handling * docs: update migration guide to clarify proxy options changes --------- Signed-off-by: Sebastian Beltran --- lib/Server.js | 40 +- migration-v6.md | 1 + package-lock.json | 613 +++++++++--------- package.json | 12 +- ...history-api-fallback.test.js.snap.webpack5 | 10 +- .../static-public-path.test.js.snap.webpack5 | 2 +- test/e2e/allowed-hosts.test.js | 132 ++-- .../proxy-option.test.js.snap.webpack5 | 10 + test/server/proxy-option.test.js | 125 ++-- 9 files changed, 444 insertions(+), 501 deletions(-) create mode 100644 test/server/__snapshots__/proxy-option.test.js.snap.webpack5 diff --git a/lib/Server.js b/lib/Server.js index 0867678dc1..9751714937 100644 --- a/lib/Server.js +++ b/lib/Server.js @@ -1391,36 +1391,8 @@ class Server { return item; } - /** - * @param {"info" | "warn" | "error" | "debug" | "silent" | undefined | "none" | "log" | "verbose"} level level - * @returns {"info" | "warn" | "error" | "debug" | "silent" | undefined} log level for proxy - */ - const getLogLevelForProxy = (level) => { - if (level === "none") { - return "silent"; - } - - if (level === "log") { - return "info"; - } - - if (level === "verbose") { - return "debug"; - } - - return level; - }; - - if (typeof item.logLevel === "undefined") { - item.logLevel = getLogLevelForProxy( - compilerOptions.infrastructureLogging - ? compilerOptions.infrastructureLogging.level - : "info", - ); - } - - if (typeof item.logProvider === "undefined") { - item.logProvider = () => this.logger; + if (typeof item.logger === "undefined") { + item.logger = this.logger; } return item; @@ -2175,10 +2147,10 @@ class Server { if (proxyConfig.target) { const context = proxyConfig.context || proxyConfig.path; - return createProxyMiddleware( - /** @type {string} */ (context), - proxyConfig, - ); + return createProxyMiddleware({ + ...proxyConfig, + pathFilter: /** @type {string} */ (context), + }); } if (proxyConfig.router) { diff --git a/migration-v6.md b/migration-v6.md index 7007bafd38..4a8978294c 100644 --- a/migration-v6.md +++ b/migration-v6.md @@ -6,6 +6,7 @@ This document serves as a migration guide for `webpack-dev-server@6.0.0`. - Minimum supported `Node.js` version is `20.9.0`. - Support for **SockJS** in the WebSocket transport has been removed. Now, only **native WebSocket** is supported, or **custom** client and server implementations can be used. +- The options for passing to the `proxy` have changed. Please refer to the [http-proxy-middleware migration guide](https://github.com/chimurai/http-proxy-middleware/blob/master/MIGRATION.md) for details. ## Deprecations diff --git a/package-lock.json b/package-lock.json index 69275b339f..c1508ff08b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,10 +11,10 @@ "dependencies": { "@types/bonjour": "^3.5.13", "@types/connect-history-api-fallback": "^1.5.4", - "@types/express": "^4.17.25", - "@types/express-serve-static-core": "^4.17.21", + "@types/express": "^5.0.3", + "@types/express-serve-static-core": "^5.0.7", "@types/serve-index": "^1.9.4", - "@types/serve-static": "^1.15.5", + "@types/serve-static": "^1.15.8", "@types/ws": "^8.5.10", "ansi-html-community": "^0.0.8", "bonjour-service": "^1.2.1", @@ -22,9 +22,9 @@ "colorette": "^2.0.10", "compression": "^1.8.1", "connect-history-api-fallback": "^2.0.0", - "express": "^4.22.1", + "express": "^5.1.0", "graceful-fs": "^4.2.6", - "http-proxy-middleware": "^2.0.9", + "http-proxy-middleware": "^3.0.5", "ipaddr.js": "^2.1.0", "launch-editor": "^2.6.1", "open": "^10.0.3", @@ -33,7 +33,7 @@ "selfsigned": "^5.5.0", "serve-index": "^1.9.1", "spdy": "^4.0.2", - "webpack-dev-middleware": "^7.4.2", + "webpack-dev-middleware": "^7.4.5", "ws": "^8.18.0" }, "bin": { @@ -2833,9 +2833,9 @@ } }, "node_modules/@emnapi/core": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.7.1.tgz", - "integrity": "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.8.1.tgz", + "integrity": "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==", "dev": true, "license": "MIT", "optional": true, @@ -2845,9 +2845,9 @@ } }, "node_modules/@emnapi/runtime": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.7.1.tgz", - "integrity": "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz", + "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", "dev": true, "license": "MIT", "optional": true, @@ -4830,21 +4830,20 @@ "license": "MIT" }, "node_modules/@types/express": { - "version": "4.17.25", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz", - "integrity": "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.6.tgz", + "integrity": "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==", "license": "MIT", "dependencies": { "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "^1" + "@types/express-serve-static-core": "^5.0.0", + "@types/serve-static": "^2" } }, "node_modules/@types/express-serve-static-core": { - "version": "4.19.7", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.7.tgz", - "integrity": "sha512-FvPtiIf1LfhzsaIXhv/PHan/2FeQBbtBDtfX2QfvPxdUelMDEckK08SM6nqo1MIZY3RUlfA+HV8+hFUSio78qg==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.1.tgz", + "integrity": "sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A==", "license": "MIT", "dependencies": { "@types/node": "*", @@ -4853,6 +4852,16 @@ "@types/send": "*" } }, + "node_modules/@types/express/node_modules/@types/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==", + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*" + } + }, "node_modules/@types/graceful-fs": { "version": "4.1.9", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", @@ -6176,12 +6185,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "license": "MIT" - }, "node_modules/array-ify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", @@ -6837,73 +6840,29 @@ } }, "node_modules/body-parser": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", - "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", - "license": "MIT", - "dependencies": { - "bytes": "~3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "~1.2.0", - "http-errors": "~2.0.1", - "iconv-lite": "~0.4.24", - "on-finished": "~2.4.1", - "qs": "~6.14.0", - "raw-body": "~2.5.3", - "type-is": "~1.6.18", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", + "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", "license": "MIT", "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" }, "engines": { - "node": ">= 0.8" + "node": ">=18" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/express" } }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/body-parser/node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/bonjour-service": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", @@ -7797,15 +7756,16 @@ "license": "MIT" }, "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", + "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/content-type": { @@ -9108,10 +9068,13 @@ } }, "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "license": "MIT" + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } }, "node_modules/cookiejar": { "version": "2.1.4", @@ -9911,16 +9874,6 @@ "node": ">=6" } }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, "node_modules/detect-indent": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-7.0.1.tgz", @@ -11517,83 +11470,106 @@ } }, "node_modules/express": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", - "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "~1.20.3", - "content-disposition": "~0.5.4", - "content-type": "~1.0.4", - "cookie": "~0.7.1", - "cookie-signature": "~1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.3.1", - "fresh": "~0.5.2", - "http-errors": "~2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "~2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "~0.1.12", - "proxy-addr": "~2.0.7", - "qs": "~6.14.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "~0.19.0", - "serve-static": "~1.16.2", - "setprototypeof": "1.2.0", - "statuses": "~2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" }, "engines": { - "node": ">= 0.10.0" + "node": ">= 18" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/express" } }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/express/node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", "license": "MIT", "dependencies": { - "ms": "2.0.0" + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" } }, "node_modules/express/node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", "license": "MIT", "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" }, "engines": { - "node": ">= 0.8" + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" + "node_modules/express/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express/node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, "node_modules/extract-zip": { "version": "2.0.1", @@ -12063,12 +12039,12 @@ } }, "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/fs-readdir-recursive": { @@ -13369,19 +13345,23 @@ "license": "MIT" }, "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", "license": "MIT", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" }, "engines": { "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/http-proxy": { @@ -13414,27 +13394,29 @@ } }, "node_modules/http-proxy-middleware": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", - "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.5.tgz", + "integrity": "sha512-GLZZm1X38BPY4lkXA01jhwxvDoOkkXqjgVyUzVxiEK4iuRu03PZoYHhHRwxnfhQMDuaxi3vVri0YgSro/1oWqg==", "license": "MIT", "dependencies": { - "@types/http-proxy": "^1.17.8", + "@types/http-proxy": "^1.17.15", + "debug": "^4.3.6", "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" + "is-glob": "^4.0.3", + "is-plain-object": "^5.0.0", + "micromatch": "^4.0.8" }, "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, "node_modules/https-proxy-agent": { @@ -13487,15 +13469,19 @@ } }, "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/icss-utils": { @@ -14088,18 +14074,6 @@ "node": ">=8" } }, - "node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -14120,6 +14094,12 @@ "dev": true, "license": "MIT" }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, "node_modules/is-regex": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", @@ -17445,12 +17425,12 @@ } }, "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/memfs": { @@ -17494,10 +17474,13 @@ } }, "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", "license": "MIT", + "engines": { + "node": ">=18" + }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } @@ -17513,6 +17496,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -18155,7 +18139,9 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, "license": "MIT", + "optional": true, "bin": { "mime": "cli.js" }, @@ -18810,7 +18796,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "license": "ISC", "dependencies": { "wrappy": "1" @@ -19218,10 +19203,14 @@ "license": "ISC" }, "node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", - "license": "MIT" + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", + "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } }, "node_modules/path-type": { "version": "3.0.0", @@ -19931,47 +19920,18 @@ } }, "node_modules/raw-body": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", - "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", "license": "MIT", "dependencies": { "bytes": "~3.1.2", "http-errors": "~2.0.1", - "iconv-lite": "~0.4.24", + "iconv-lite": "~0.7.0", "unpipe": "~1.0.0" }, "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", - "license": "MIT", - "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/raw-body/node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" + "node": ">= 0.10" } }, "node_modules/react-is": { @@ -20566,6 +20526,22 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, "node_modules/run-applescript": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", @@ -20729,51 +20705,45 @@ } }, "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", "license": "MIT", "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/send/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", "license": "MIT", "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", + "mime-db": "^1.54.0" + }, "engines": { - "node": ">= 0.8" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/serialize-javascript": { @@ -20865,18 +20835,22 @@ } }, "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", "license": "MIT", "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/set-function-length": { @@ -21720,9 +21694,9 @@ } }, "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -22122,16 +22096,6 @@ "node": ">=14.18.0" } }, - "node_modules/supertest/node_modules/cookie-signature": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", - "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.6.0" - } - }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -22694,18 +22658,35 @@ } }, "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", "license": "MIT", "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" }, "engines": { "node": ">= 0.6" } }, + "node_modules/type-is/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/typed-array-buffer": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", @@ -23116,6 +23097,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4.0" @@ -23745,7 +23727,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, "license": "ISC" }, "node_modules/write-file-atomic": { diff --git a/package.json b/package.json index 2d66dbdf1d..73acc4751a 100644 --- a/package.json +++ b/package.json @@ -46,10 +46,10 @@ "dependencies": { "@types/bonjour": "^3.5.13", "@types/connect-history-api-fallback": "^1.5.4", - "@types/express": "^4.17.25", - "@types/express-serve-static-core": "^4.17.21", + "@types/express": "^5.0.3", + "@types/express-serve-static-core": "^5.0.7", "@types/serve-index": "^1.9.4", - "@types/serve-static": "^1.15.5", + "@types/serve-static": "^1.15.8", "@types/ws": "^8.5.10", "ansi-html-community": "^0.0.8", "bonjour-service": "^1.2.1", @@ -57,9 +57,9 @@ "colorette": "^2.0.10", "compression": "^1.8.1", "connect-history-api-fallback": "^2.0.0", - "express": "^4.22.1", + "express": "^5.1.0", "graceful-fs": "^4.2.6", - "http-proxy-middleware": "^2.0.9", + "http-proxy-middleware": "^3.0.5", "ipaddr.js": "^2.1.0", "launch-editor": "^2.6.1", "open": "^10.0.3", @@ -68,7 +68,7 @@ "selfsigned": "^5.5.0", "serve-index": "^1.9.1", "spdy": "^4.0.2", - "webpack-dev-middleware": "^7.4.2", + "webpack-dev-middleware": "^7.4.5", "ws": "^8.18.0" }, "devDependencies": { diff --git a/test/e2e/__snapshots__/history-api-fallback.test.js.snap.webpack5 b/test/e2e/__snapshots__/history-api-fallback.test.js.snap.webpack5 index 0fb6a663b9..5490dc26d5 100644 --- a/test/e2e/__snapshots__/history-api-fallback.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/history-api-fallback.test.js.snap.webpack5 @@ -30,7 +30,7 @@ exports[`historyApiFallback option as object with static and rewrites historyApi exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect any other specified rewrites: page errors 1`] = `[]`; -exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect any other specified rewrites: response headers content-type 1`] = `"text/html; charset=UTF-8"`; +exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect any other specified rewrites: response headers content-type 1`] = `"text/html; charset=utf-8"`; exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect any other specified rewrites: response status 1`] = `200`; @@ -43,7 +43,7 @@ exports[`historyApiFallback option as object with static and rewrites historyApi exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect rewrites and shows index for unknown urls: page errors 1`] = `[]`; -exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect rewrites and shows index for unknown urls: response headers content-type 1`] = `"text/html; charset=UTF-8"`; +exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect rewrites and shows index for unknown urls: response headers content-type 1`] = `"text/html; charset=utf-8"`; exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect rewrites and shows index for unknown urls: response status 1`] = `200`; @@ -56,7 +56,7 @@ exports[`historyApiFallback option as object with static and rewrites historyApi exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect rewrites for index: page errors 1`] = `[]`; -exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect rewrites for index: response headers content-type 1`] = `"text/html; charset=UTF-8"`; +exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect rewrites for index: response headers content-type 1`] = `"text/html; charset=utf-8"`; exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect rewrites for index: response status 1`] = `200`; @@ -82,7 +82,7 @@ exports[`historyApiFallback option as object with static should handle GET reque exports[`historyApiFallback option as object with static should handle GET request to directory: page errors 1`] = `[]`; -exports[`historyApiFallback option as object with static should handle GET request to directory: response headers content-type 1`] = `"text/html; charset=UTF-8"`; +exports[`historyApiFallback option as object with static should handle GET request to directory: response headers content-type 1`] = `"text/html; charset=utf-8"`; exports[`historyApiFallback option as object with static should handle GET request to directory: response status 1`] = `200`; @@ -95,7 +95,7 @@ exports[`historyApiFallback option as object with static should prefer static fi exports[`historyApiFallback option as object with static should prefer static file over historyApiFallback: page errors 1`] = `[]`; -exports[`historyApiFallback option as object with static should prefer static file over historyApiFallback: response headers content-type 1`] = `"text/plain; charset=UTF-8"`; +exports[`historyApiFallback option as object with static should prefer static file over historyApiFallback: response headers content-type 1`] = `"text/plain; charset=utf-8"`; exports[`historyApiFallback option as object with static should prefer static file over historyApiFallback: response status 1`] = `200`; diff --git a/test/e2e/__snapshots__/static-public-path.test.js.snap.webpack5 b/test/e2e/__snapshots__/static-public-path.test.js.snap.webpack5 index 687d41d403..de31661060 100644 --- a/test/e2e/__snapshots__/static-public-path.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/static-public-path.test.js.snap.webpack5 @@ -4,7 +4,7 @@ exports[`static.publicPath option Content type should handle request to example. exports[`static.publicPath option Content type should handle request to example.txt: page errors 1`] = `[]`; -exports[`static.publicPath option Content type should handle request to example.txt: response header content-type 1`] = `"text/plain; charset=UTF-8"`; +exports[`static.publicPath option Content type should handle request to example.txt: response header content-type 1`] = `"text/plain; charset=utf-8"`; exports[`static.publicPath option Content type should handle request to example.txt: response status 1`] = `200`; diff --git a/test/e2e/allowed-hosts.test.js b/test/e2e/allowed-hosts.test.js index 63d4dc0291..7f7f9b492d 100644 --- a/test/e2e/allowed-hosts.test.js +++ b/test/e2e/allowed-hosts.test.js @@ -43,7 +43,7 @@ describe("allowed hosts", () => { target: `http://${devServerHost}:${devServerPort}`, ws: true, changeOrigin: true, - logLevel: "warn", + logger: server.logger, }), ); @@ -115,7 +115,7 @@ describe("allowed hosts", () => { target: `http://${devServerHost}:${devServerPort}`, ws: true, changeOrigin: true, - logLevel: "warn", + logger: server.logger, }), ); @@ -188,7 +188,7 @@ describe("allowed hosts", () => { target: `http://${devServerHost}:${devServerPort}`, ws: true, changeOrigin: true, - logLevel: "warn", + logger: server.logger, }), ); @@ -262,7 +262,7 @@ describe("allowed hosts", () => { target: `http://${devServerHost}:${devServerPort}`, ws: true, changeOrigin: true, - logLevel: "warn", + logger: server.logger, }), ); @@ -336,7 +336,7 @@ describe("allowed hosts", () => { target: `http://[${devServerHost}]:${devServerPort}`, ws: true, changeOrigin: true, - logLevel: "warn", + logger: server.logger, }), ); @@ -411,7 +411,7 @@ describe("allowed hosts", () => { target: `http://${IPv4}:${devServerPort}`, ws: true, changeOrigin: true, - logLevel: "warn", + logger: server.logger, }), ); @@ -483,12 +483,14 @@ describe("allowed hosts", () => { "/", createProxyMiddleware({ target: `http://${devServerHost}:${devServerPort}`, - onProxyReqWs: (proxyReq) => { - proxyReq.setHeader("origin", "file:///path/to/local/file.js"); + on: { + proxyReqWs: (proxyReq) => { + proxyReq.setHeader("origin", "file:///path/to/local/file.js"); + }, }, ws: true, changeOrigin: true, - logLevel: "warn", + logger: server.logger, }), ); @@ -560,12 +562,14 @@ describe("allowed hosts", () => { "/", createProxyMiddleware({ target: `http://${devServerHost}:${devServerPort}`, - onProxyReqWs: (proxyReq) => { - proxyReq.setHeader("origin", "chrome-extension:///abcdef"); + on: { + proxyReqWs: (proxyReq) => { + proxyReq.setHeader("origin", "chrome-extension:///abcdef"); + }, }, ws: true, changeOrigin: true, - logLevel: "warn", + logger: server.logger, }), ); @@ -637,13 +641,15 @@ describe("allowed hosts", () => { "/", createProxyMiddleware({ // Emulation - onProxyReqWs: (proxyReq) => { - proxyReq.setHeader("origin", "http://my-test-origin.com/"); + on: { + proxyReqWs: (proxyReq) => { + proxyReq.setHeader("origin", "http://my-test-origin.com/"); + }, }, target: `http://${devServerHost}:${devServerPort}`, ws: true, changeOrigin: true, - logLevel: "warn", + logger: server.logger, }), ); @@ -715,13 +721,15 @@ describe("allowed hosts", () => { "/", createProxyMiddleware({ // Emulation - onProxyReqWs: (proxyReq) => { - proxyReq.setHeader("origin", "http://my-test-origin.com/"); + on: { + proxyReqWs: (proxyReq) => { + proxyReq.setHeader("origin", "http://my-test-origin.com/"); + }, }, target: `http://${devServerHost}:${devServerPort}`, ws: true, changeOrigin: true, - logLevel: "warn", + logger: server.logger, }), ); @@ -793,13 +801,15 @@ describe("allowed hosts", () => { "/", createProxyMiddleware({ // Emulation - onProxyReqWs: (proxyReq) => { - proxyReq.setHeader("origin", "http://my-test-origin.com/"); + on: { + proxyReqWs: (proxyReq) => { + proxyReq.setHeader("origin", "http://my-test-origin.com/"); + }, }, target: `http://${devServerHost}:${devServerPort}`, ws: true, changeOrigin: true, - logLevel: "warn", + logger: server.logger, }), ); @@ -871,13 +881,15 @@ describe("allowed hosts", () => { "/", createProxyMiddleware({ // Emulation - onProxyReqWs: (proxyReq) => { - proxyReq.setHeader("origin", "http://my-test-origin.com/"); + on: { + proxyReqWs: (proxyReq) => { + proxyReq.setHeader("origin", "http://my-test-origin.com/"); + }, }, target: `http://${devServerHost}:${devServerPort}`, ws: true, changeOrigin: true, - logLevel: "warn", + logger: server.logger, }), ); @@ -949,16 +961,18 @@ describe("allowed hosts", () => { "/", createProxyMiddleware({ // Emulation - onProxyReqWs: (proxyReq) => { - proxyReq.setHeader( - "origin", - "http://foo.bar.baz.my-test-origin.com/", - ); + on: { + proxyReqWs: (proxyReq) => { + proxyReq.setHeader( + "origin", + "http://foo.bar.baz.my-test-origin.com/", + ); + }, }, target: `http://${devServerHost}:${devServerPort}`, ws: true, changeOrigin: true, - logLevel: "warn", + logger: server.logger, }), ); @@ -1030,13 +1044,15 @@ describe("allowed hosts", () => { "/", createProxyMiddleware({ // Emulation - onProxyReqWs: (proxyReq) => { - proxyReq.setHeader("origin", "http://my-test-origin.com/"); + on: { + proxyReqWs: (proxyReq) => { + proxyReq.setHeader("origin", "http://my-test-origin.com/"); + }, }, target: `http://${devServerHost}:${devServerPort}`, ws: true, changeOrigin: true, - logLevel: "warn", + logger: server.logger, }), ); @@ -1108,13 +1124,15 @@ describe("allowed hosts", () => { "/", createProxyMiddleware({ // Emulation - onProxyReqWs: (proxyReq) => { - proxyReq.setHeader("origin", "http://192.168.1.1/"); + on: { + proxyReqWs: (proxyReq) => { + proxyReq.setHeader("origin", "http://192.168.1.1"); + }, }, target: `http://${devServerHost}:${devServerPort}`, ws: true, changeOrigin: true, - logLevel: "warn", + logger: server.logger, }), ); @@ -1186,13 +1204,15 @@ describe("allowed hosts", () => { "/", createProxyMiddleware({ // Emulation - onProxyReqWs: (proxyReq) => { - proxyReq.setHeader("host", "my-test-host"); + on: { + proxyReqWs: (proxyReq) => { + proxyReq.setHeader("host", "my-test-host"); + }, }, target: `http://${devServerHost}:${devServerPort}`, ws: true, changeOrigin: true, - logLevel: "warn", + logger: server.logger, }), ); @@ -1266,14 +1286,16 @@ describe("allowed hosts", () => { "/", createProxyMiddleware({ // Emulation - onProxyReqWs: (proxyReq) => { - proxyReq.setHeader("host", "my-test-host"); + on: { + proxyReqWs: (proxyReq) => { + proxyReq.setHeader("origin", "my-test-host/"); + }, }, target: `https://${devServerHost}:${devServerPort}`, secure: false, ws: true, changeOrigin: true, - logLevel: "warn", + logger: server.logger, }), ); @@ -1345,13 +1367,15 @@ describe("allowed hosts", () => { "/", createProxyMiddleware({ // Emulation - onProxyReqWs: (proxyReq) => { - proxyReq.setHeader("origin", "http://my-test-origin.com/"); + on: { + proxyReqWs: (proxyReq) => { + proxyReq.setHeader("origin", "http://my-test-origin.com/"); + }, }, target: `http://${devServerHost}:${devServerPort}`, ws: true, changeOrigin: true, - logLevel: "warn", + logger: server.logger, }), ); @@ -1423,14 +1447,16 @@ describe("allowed hosts", () => { "/", createProxyMiddleware({ // Emulation - onProxyReq: (proxyReq, req, res) => { - proxyReq.setHeader("host", "unknown"); - res.setHeader("host", devServerHost); + on: { + proxyReq: (proxyReq, req, res) => { + proxyReq.setHeader("host", "unknown"); + res.setHeader("host", devServerHost); + }, }, target: `http://${devServerHost}:${devServerPort}`, ws: true, changeOrigin: true, - logLevel: "warn", + logger: server.logger, }), ); @@ -1505,13 +1531,15 @@ describe("allowed hosts", () => { "/", createProxyMiddleware({ // Emulation - onProxyReqWs: (proxyReq) => { - proxyReq.setHeader("origin", "http://192.168.0.1/"); + on: { + proxyReqWs: (proxyReq) => { + proxyReq.setHeader("origin", "http://192.168.0.1"); + }, }, target: `http://${devServerHost}:${devServerPort}`, ws: true, changeOrigin: true, - logLevel: "warn", + logger: server.logger, }), ); diff --git a/test/server/__snapshots__/proxy-option.test.js.snap.webpack5 b/test/server/__snapshots__/proxy-option.test.js.snap.webpack5 new file mode 100644 index 0000000000..afcadddb77 --- /dev/null +++ b/test/server/__snapshots__/proxy-option.test.js.snap.webpack5 @@ -0,0 +1,10 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`proxy option should work and respect \`logger\` option target respects a proxy option when a request path is matched 1`] = `"[HPM] Error occurred while proxying request %s to %s [%s] (%s)"`; + +exports[`proxy option should work and respect the \`infrastructureLogging.level\` option target respects a proxy option when a request path is matched 1`] = ` +" [webpack-dev-server] [HPM] Error occurred while proxying request 127.0.0.1:/my-path to http://unknown:1234/ [] (https://nodejs.org/api/errors.html#errors_common_system_errors) +" +`; + +exports[`proxy option should work and respect the \`infrastructureLogging.level\` option with \`none\` value target respects a proxy option when a request path is matched 1`] = `""`; diff --git a/test/server/proxy-option.test.js b/test/server/proxy-option.test.js index dcc0fae9bf..deb99e1ba9 100644 --- a/test/server/proxy-option.test.js +++ b/test/server/proxy-option.test.js @@ -140,6 +140,23 @@ describe("proxy option", () => { let proxyServer1; let proxyServer2; + function getStderrOutput(stderrSpy) { + return stderrSpy.mock.calls + .map((call) => call[0]) + .filter((output) => !output.includes("DeprecationWarning")) + .join("") + .replaceAll(/127\.0\.0\.1:\d+/g, "127.0.0.1:") + .replaceAll(/\[ENOTFOUND\]|\[EAI_AGAIN\]/g, "[]"); + } + + function getConsoleErrorOutput(consoleSpy) { + return consoleSpy.mock.calls + .map((call) => call[0]) + .join("\n") + .replaceAll(/127\.0\.0\.1:\d+/g, "127.0.0.1:") + .replaceAll(/\[ENOTFOUND\]|\[EAI_AGAIN\]/g, "[]"); + } + async function listenProxyServers() { const proxyApp1 = express(); const proxyApp2 = express(); @@ -557,7 +574,7 @@ describe("proxy option", () => { const proxy = express(); - proxy.get("*", (proxyReq, res) => { + proxy.get("*slug", (proxyReq, res) => { res.send("from proxy"); }); @@ -692,7 +709,7 @@ describe("proxy option", () => { // This forces Express to try to decode URLs, which is needed for the test // associated with the middleware below. - proxy.all("*", (_req, res, next) => { + proxy.all("*slug", (_req, res, next) => { next(); }); // We must define all 4 params in order for this to be detected as an @@ -831,19 +848,13 @@ describe("proxy option", () => { }); }); - describe("should work and respect `logProvider` and `logLevel` options", () => { + describe("should work and respect `logger` option", () => { let server; let req; - let customLogProvider; + let consoleSpy; beforeAll(async () => { - customLogProvider = { - log: jest.fn(), - debug: jest.fn(), - info: jest.fn(), - warn: jest.fn(), - error: jest.fn(), - }; + consoleSpy = jest.spyOn(console, "error").mockImplementation(() => {}); const compiler = webpack([config, config]); @@ -853,60 +864,7 @@ describe("proxy option", () => { { context: "/my-path", target: "http://unknown:1234", - logProvider: () => customLogProvider, - logLevel: "error", - }, - ], - port: port3, - }, - compiler, - ); - - await server.start(); - - await listenProxyServers(); - - req = request(server.app); - }); - - afterAll(async () => { - await server.stop(); - await closeProxyServers(); - }); - - describe("target", () => { - it("respects a proxy option when a request path is matched", async () => { - await req.get("/my-path"); - - expect(customLogProvider.error).toHaveBeenCalledTimes(1); - }); - }); - }); - - describe("should work and respect the `logLevel` option with `silent` value", () => { - let server; - let req; - let customLogProvider; - - beforeAll(async () => { - customLogProvider = { - log: jest.fn(), - debug: jest.fn(), - info: jest.fn(), - warn: jest.fn(), - error: jest.fn(), - }; - - const compiler = webpack([config, config]); - - server = new Server( - { - proxy: [ - { - context: "my-path", - target: "http://unknown:1234", - logProvider: () => customLogProvider, - logLevel: "silent", + logger: console, }, ], port: port3, @@ -922,6 +880,7 @@ describe("proxy option", () => { }); afterAll(async () => { + consoleSpy.mockRestore(); await server.stop(); await closeProxyServers(); }); @@ -930,7 +889,7 @@ describe("proxy option", () => { it("respects a proxy option when a request path is matched", async () => { await req.get("/my-path"); - expect(customLogProvider.error).toHaveBeenCalledTimes(0); + expect(getConsoleErrorOutput(consoleSpy)).toMatchSnapshot(); }); }); }); @@ -938,20 +897,16 @@ describe("proxy option", () => { describe("should work and respect the `infrastructureLogging.level` option", () => { let server; let req; - let customLogProvider; + let stderrSpy; beforeAll(async () => { - customLogProvider = { - log: jest.fn(), - debug: jest.fn(), - info: jest.fn(), - warn: jest.fn(), - error: jest.fn(), - }; + stderrSpy = jest + .spyOn(process.stderr, "write") + .mockImplementation(() => true); const compiler = webpack({ ...config, - infrastructureLogging: { level: "error" }, + infrastructureLogging: { colors: false, level: "error" }, }); server = new Server( @@ -960,7 +915,6 @@ describe("proxy option", () => { { context: "/my-path", target: "http://unknown:1234", - logProvider: () => customLogProvider, }, ], port: port3, @@ -976,6 +930,7 @@ describe("proxy option", () => { }); afterAll(async () => { + stderrSpy.mockRestore(); await server.stop(); await closeProxyServers(); }); @@ -984,7 +939,7 @@ describe("proxy option", () => { it("respects a proxy option when a request path is matched", async () => { await req.get("/my-path"); - expect(customLogProvider.error).toHaveBeenCalledTimes(1); + expect(getStderrOutput(stderrSpy)).toMatchSnapshot(); }); }); }); @@ -992,16 +947,12 @@ describe("proxy option", () => { describe("should work and respect the `infrastructureLogging.level` option with `none` value", () => { let server; let req; - let customLogProvider; + let stderrSpy; beforeAll(async () => { - customLogProvider = { - log: jest.fn(), - debug: jest.fn(), - info: jest.fn(), - warn: jest.fn(), - error: jest.fn(), - }; + stderrSpy = jest + .spyOn(process.stderr, "write") + .mockImplementation(() => true); const compiler = webpack({ ...config, @@ -1014,7 +965,6 @@ describe("proxy option", () => { { context: "/my-path", target: "http://unknown:1234", - logProvider: () => customLogProvider, }, ], port: port3, @@ -1028,6 +978,7 @@ describe("proxy option", () => { }); afterAll(async () => { + stderrSpy.mockRestore(); await server.stop(); }); @@ -1035,7 +986,7 @@ describe("proxy option", () => { it("respects a proxy option when a request path is matched", async () => { await req.get("/my-path"); - expect(customLogProvider.error).toHaveBeenCalledTimes(0); + expect(getStderrOutput(stderrSpy)).toMatchSnapshot(); }); }); }); From 1a30c21f2a40f1f7ae1ce5da374f28fc4fbf1fed Mon Sep 17 00:00:00 2001 From: Sebastian Beltran Date: Sat, 24 Jan 2026 11:19:05 -0500 Subject: [PATCH 05/21] feat: remove spdy (#5635) * feat: remove spdy support * docs: update migration guide to remove spdy server type support --- bin/cli-flags.js | 2 +- examples/server/spdy/README.md | 44 ---- examples/server/spdy/app.js | 6 - examples/server/spdy/ssl/ca.pem | 27 --- examples/server/spdy/ssl/server.crt | 21 -- examples/server/spdy/ssl/server.key | 28 --- examples/server/spdy/ssl/server.pfx | Bin 2469 -> 0 bytes examples/server/spdy/webpack.config.js | 22 -- lib/Server.js | 17 +- lib/options.json | 4 +- migration-v6.md | 28 +++ package-lock.json | 207 +++--------------- package.json | 1 - .../validate-options.test.js.snap.webpack5 | 8 +- .../server-option.test.js.snap.webpack5 | 10 - test/cli/server-option.test.js | 21 -- test/e2e/app.test.js | 10 - test/e2e/server.test.js | 135 ------------ test/e2e/web-socket-server-url.test.js | 71 ------ test/server/open-option.test.js | 18 -- test/validate-options.test.js | 4 - types/lib/Server.d.ts | 11 +- 22 files changed, 69 insertions(+), 626 deletions(-) delete mode 100644 examples/server/spdy/README.md delete mode 100644 examples/server/spdy/app.js delete mode 100644 examples/server/spdy/ssl/ca.pem delete mode 100644 examples/server/spdy/ssl/server.crt delete mode 100644 examples/server/spdy/ssl/server.key delete mode 100644 examples/server/spdy/ssl/server.pfx delete mode 100644 examples/server/spdy/webpack.config.js diff --git a/bin/cli-flags.js b/bin/cli-flags.js index a4549786fe..82d40db418 100644 --- a/bin/cli-flags.js +++ b/bin/cli-flags.js @@ -1079,7 +1079,7 @@ module.exports = { multiple: false, path: "server.type", type: "enum", - values: ["http", "https", "spdy"], + values: ["http", "https"], }, ], description: "Allows to set server and options (by default 'http').", diff --git a/examples/server/spdy/README.md b/examples/server/spdy/README.md deleted file mode 100644 index 9759544498..0000000000 --- a/examples/server/spdy/README.md +++ /dev/null @@ -1,44 +0,0 @@ -# spdy server - -Serve over HTTP/2 using [spdy](https://www.npmjs.com/package/spdy). This option is ignored for Node 15.0.0 and above, as `spdy` is broken for those versions. - -## HTTP/2 with a custom certificate: - -Provide your own certificate using the `server.options` configuration: - -- `key`: Path to an SSL key. -- `pfx`: Path to an SSL pfx file. -- `cert`: Path to an SSL certificate or content of an SSL certificate. -- `ca`: Path to an SSL CA certificate or content of an SSL CA certificate. -- `crl`: Path to PEM formatted CRLs (Certificate Revocation Lists) or content of PEM formatted CRLs (Certificate Revocation Lists). -- `passphrase`: Passphrase for a pfx file. -- `requestCert`: Request for an SSL certificate. - -```js -module.exports = { - // ... - devServer: { - server: { - type: "spdy", - options: { - key: "./ssl/server.key", - pfx: "./ssl/server.pfx", - cert: "./ssl/server.crt", - ca: "./ssl/ca.pem", - passphrase: "webpack-dev-server", - }, - }, - }, -}; -``` - -Usage via CLI: - -```console -npx webpack serve --open --server-type spdy --server-options-key ./ssl/server.key --server-options-cert ./ssl/server.crt --server-options-ca ./ssl/ca.pem --server-options-passphrase webpack-dev-server -``` - -## What Should Happen - -1. The script should open `https://localhost:8080/` in your default browser. -2. You should see the text on the page itself change to read `Success!`. diff --git a/examples/server/spdy/app.js b/examples/server/spdy/app.js deleted file mode 100644 index 51cf4a396b..0000000000 --- a/examples/server/spdy/app.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -const target = document.querySelector("#target"); - -target.classList.add("pass"); -target.innerHTML = "Success!"; diff --git a/examples/server/spdy/ssl/ca.pem b/examples/server/spdy/ssl/ca.pem deleted file mode 100644 index 05b314535b..0000000000 --- a/examples/server/spdy/ssl/ca.pem +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpQIBAAKCAQEAxAUVLFM+K3XDLQkBi7xt0s1Ip7JoHYDskzUDQNHjjMkUq5kv -C/hf5Ei1J6qruJs3Xqg86Nl4+ed4ynUajAkRRibhp0P1SG1tgPssIK6iC7g8heYu -Dy9WkFuMie0513zjSn6bMEAK5TegxYAWCbaCZX/Fw9bDniabL/zuOv4sf8J4EPhs -EENnH6sUE9HxPUgQmNt1Tbd0j1Cd5PXrSTLyfVPRh0m9QhXTUHuxsse8XSn9U2sw -duxJTWRINmhffYn+O7kbJGI77xYr8u58Rsf3HCMI8DTKZNvQLChvvtLJ9ckyu7Q+ -T8emgklStASm3V2UtnriaK/IQEhgSdxqVRib3QIDAQABAoIBAGqWKPE1QnT3T+3J -G+ITz9P0dDFbvWltlTZmeSJh/s2q+WZloUNtBxdmwbqT/1QecnkyGgyzVCjvSKsu -CgVjWNVAhysgtNtxRT4BVflffBXLVH2qsBjpsLRGU6EcMXuPGTiEp3YRHNuO6Aj8 -oP8fEsCGPc9DlJMGgxQRAKlrVF8TN/0j6Qk+YpS4MZ0YFQfBY+WdKu04Z8TVTplQ -tTkiGpBI+Oj85jF59aQiizglJgADkAZ6zmbrctm/G9jPxh7JLS2cKI0ECZgK5yAc -pk10E1YWhoCksjr9arxy6fS9TiX9P15vv06k+s7c4c5X7XDm3X0GWeSbqBMJb8q7 -BhZQNzECgYEA4kAtymDBvFYiZFq7+lzQBRKAI1RCq7YqxlieumH0PSkie2bba3dW -NVdTi7at8+GDB9/cHUPKzg/skfJllek57MZmusiVwB/Lmp/IlW8YyGShdYZ7zQsV -KMWJljpky3BEDM5sb08wIkfrOkelI/S4Bqqabd9JzOMJzoTiVOlMam8CgYEA3ctN -yonWz2bsnCUstQvQCLdI5a8Q7GJvlH2awephxGXIKGUuRmyyop0AnRnIBEWtOQV7 -yZjW32bU+Wt+2BJ247EyJiIQ4gT+T51t+v/Wt1YNbL3dSj9ttOvwYd4H2W4E7EIO -GKIF4I39FM7r8NfG7YE7S1aVcnrqs01N3nhd9HMCgYEAjepbzpmqbAxLPk97oase -AFB+d6qetz5ozklAJwDSRprKukTmVR5hwMup5/UKX/OQURwl4WVojKCIb3NwLPxC -DTbVsUuoQv6uo6qeEr3A+dHFRQa6GP9eolhl2Ql/t+wPg0jn01oEgzxBXCkceNVD -qUrR2yE4FYBD4nqPzVsZR5kCgYEA1yTi7NkQeldIpZ6Z43T18753A/Xx4JsLyWqd -uAT3mV9x7V1Yqg++qGbLtZjQoPRFt85N6ZxMsqA5b0iK3mXq1auJDdx1rAlT9z6q -9JM/YNAkbZsvEVq9vIYxw31w98T1GYhpzBM+yDhzir+9tv5YhQKa1dXDWi1JhWwz -YN45pWkCgYEAxuVsJ4D4Th5o050ppWpnxM/WuMhIUKqaoFTVucMKFzn+g24y9pv5 -miYdNYIk4Y+4pzHG6ZGZSHJcQ9BLui6H/nLQnqkgCb2lT5nfp7/GKdus7BdcjPGs -fcV46yL7/X0m8nDb3hkwwrDTU4mKFkMrzKpjdZBsttEmW0Aw/3y36gU= ------END RSA PRIVATE KEY----- diff --git a/examples/server/spdy/ssl/server.crt b/examples/server/spdy/ssl/server.crt deleted file mode 100644 index 1992bb1610..0000000000 --- a/examples/server/spdy/ssl/server.crt +++ /dev/null @@ -1,21 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDXTCCAkWgAwIBAgIJALz8gD/gAt0OMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV -BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX -aWRnaXRzIFB0eSBMdGQwHhcNMTgxMDIzMTgyMTQ5WhcNMTkxMDIzMTgyMTQ5WjBF -MQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50 -ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB -CgKCAQEAxAUVLFM+K3XDLQkBi7xt0s1Ip7JoHYDskzUDQNHjjMkUq5kvC/hf5Ei1 -J6qruJs3Xqg86Nl4+ed4ynUajAkRRibhp0P1SG1tgPssIK6iC7g8heYuDy9WkFuM -ie0513zjSn6bMEAK5TegxYAWCbaCZX/Fw9bDniabL/zuOv4sf8J4EPhsEENnH6sU -E9HxPUgQmNt1Tbd0j1Cd5PXrSTLyfVPRh0m9QhXTUHuxsse8XSn9U2swduxJTWRI -NmhffYn+O7kbJGI77xYr8u58Rsf3HCMI8DTKZNvQLChvvtLJ9ckyu7Q+T8emgklS -tASm3V2UtnriaK/IQEhgSdxqVRib3QIDAQABo1AwTjAdBgNVHQ4EFgQUDZBhVKdb -3BRhLIhuuE522Vsul0IwHwYDVR0jBBgwFoAUDZBhVKdb3BRhLIhuuE522Vsul0Iw -DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEABh9WWZwWLgb9/DcTxL72 -6pI96t4jiF79Q+pPefkaIIi0mE6yodWrTAsBQu9I6bNRaEcCSoiXkP2bqskD/UGg -LwUFgSrDOAA3UjdHw3QU5g2NocduG7mcFwA40TB98sOsxsUyYlzSyWzoiQWwPYwb -hek1djuWkqPXsTjlj54PTPN/SjTFmo4p5Ip6nbRf2nOREl7v0rJpGbJvXiCMYyd+ -Zv+j4mRjCGo8ysMR2HjCUGkYReLAgKyyz3M7i8vevJhKslyOmy6Txn4F0nPVumaU -DDIy4xXPW1STWfsmSYJfYW3wa0wk+pJQ3j2cTzkPQQ8gwpvM3U9DJl43uwb37v6I -7Q== ------END CERTIFICATE----- diff --git a/examples/server/spdy/ssl/server.key b/examples/server/spdy/ssl/server.key deleted file mode 100644 index c002d19e49..0000000000 --- a/examples/server/spdy/ssl/server.key +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDEBRUsUz4rdcMt -CQGLvG3SzUinsmgdgOyTNQNA0eOMyRSrmS8L+F/kSLUnqqu4mzdeqDzo2Xj553jK -dRqMCRFGJuGnQ/VIbW2A+ywgrqILuDyF5i4PL1aQW4yJ7TnXfONKfpswQArlN6DF -gBYJtoJlf8XD1sOeJpsv/O46/ix/wngQ+GwQQ2cfqxQT0fE9SBCY23VNt3SPUJ3k -9etJMvJ9U9GHSb1CFdNQe7Gyx7xdKf1TazB27ElNZEg2aF99if47uRskYjvvFivy -7nxGx/ccIwjwNMpk29AsKG++0sn1yTK7tD5Px6aCSVK0BKbdXZS2euJor8hASGBJ -3GpVGJvdAgMBAAECggEAapYo8TVCdPdP7ckb4hPP0/R0MVu9aW2VNmZ5ImH+zar5 -ZmWhQ20HF2bBupP/VB5yeTIaDLNUKO9Iqy4KBWNY1UCHKyC023FFPgFV+V98FctU -faqwGOmwtEZToRwxe48ZOISndhEc247oCPyg/x8SwIY9z0OUkwaDFBEAqWtUXxM3 -/SPpCT5ilLgxnRgVB8Fj5Z0q7ThnxNVOmVC1OSIakEj46PzmMXn1pCKLOCUmAAOQ -BnrOZuty2b8b2M/GHsktLZwojQQJmArnIBymTXQTVhaGgKSyOv1qvHLp9L1OJf0/ -Xm+/TqT6ztzhzlftcObdfQZZ5JuoEwlvyrsGFlA3MQKBgQDiQC3KYMG8ViJkWrv6 -XNAFEoAjVEKrtirGWJ66YfQ9KSJ7Zttrd1Y1V1OLtq3z4YMH39wdQ8rOD+yR8mWV -6Tnsxma6yJXAH8uan8iVbxjIZKF1hnvNCxUoxYmWOmTLcEQMzmxvTzAiR+s6R6Uj -9LgGqppt30nM4wnOhOJU6UxqbwKBgQDdy03KidbPZuycJSy1C9AIt0jlrxDsYm+U -fZrB6mHEZcgoZS5GbLKinQCdGcgERa05BXvJmNbfZtT5a37YEnbjsTImIhDiBP5P -nW36/9a3Vg1svd1KP2206/Bh3gfZbgTsQg4YogXgjf0Uzuvw18btgTtLVpVyeuqz -TU3eeF30cwKBgQCN6lvOmapsDEs+T3uhqx4AUH53qp63PmjOSUAnANJGmsq6ROZV -HmHAy6nn9Qpf85BRHCXhZWiMoIhvc3As/EINNtWxS6hC/q6jqp4SvcD50cVFBroY -/16iWGXZCX+37A+DSOfTWgSDPEFcKRx41UOpStHbITgVgEPieo/NWxlHmQKBgQDX -JOLs2RB6V0ilnpnjdPXzvncD9fHgmwvJap24BPeZX3HtXViqD76oZsu1mNCg9EW3 -zk3pnEyyoDlvSIreZerVq4kN3HWsCVP3Pqr0kz9g0CRtmy8RWr28hjHDfXD3xPUZ -iGnMEz7IOHOKv722/liFAprV1cNaLUmFbDNg3jmlaQKBgQDG5WwngPhOHmjTnSml -amfEz9a4yEhQqpqgVNW5wwoXOf6DbjL2m/maJh01giThj7inMcbpkZlIclxD0Eu6 -Lof+ctCeqSAJvaVPmd+nv8Yp26zsF1yM8ax9xXjrIvv9fSbycNveGTDCsNNTiYoW -QyvMqmN1kGy20SZbQDD/fLfqBQ== ------END PRIVATE KEY----- diff --git a/examples/server/spdy/ssl/server.pfx b/examples/server/spdy/ssl/server.pfx deleted file mode 100644 index 4645e131de9b00367dd6ba1aca772c5ca31a1a81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2469 zcmV;W30n3rf(fAl0Ru3C31OKjdlAVPcck4he} zKtQd@c`rk7>p39zeCODu-xx#jdh*jO8;DZ3ikkUKYlnD_rQmI|Dmk`q0s?I7Qu@6q z$-ur;g|O6@&{v_A?)`7lz(Un!=W|`m{;n{+mp#KFxgVZP$3_pg?0*9tpIvIV2zdaQ ziezLVa~88CC(9Nd1l$p+RVlP5cb}>kA@oIjbP(7zCKp_|Ev)EO_OF44Oiyg>+O97$ zNm4%vKk3?v`f?u`Gt|x{!WfH00tQ>3Ha}%otT(j(Yhgtd9ns+^THgx_h|`Ih=>~0E zMXjG()R-sVy~^F?gWz8Cu%g_B> z$8sPeOHHW35S>wbeV3D=|As%J3j&wt2_C@>Xv{I4GMdT2WU4@ zv%%Ucl4FP7Cf*v;?`Y zD>>>;of+3q87X=vcjBV7svI66fp4O5R#s*aP-#J+2F8_ga&F(wdz%lA`g8s{hzHnu z5ka%Y&>tR8bc$Xqq>nsK6wZv9odEIDjNjCcInG?imAS#W*f`50)p|4iPtU<6 zo6??n*4qt*b~~2;M8+UE%*PP-?1K>RW1DrYdOl2ugWm@^sP%r;wx^RIg0lK*c~!Mj z2|y)Vrh?zpiM&s04^mtHPpp1Z#Vny&##ywrdDDDwnIIVwm2VnJ>Gkc^I0Z=^K0_Nj z^XjJqFeWN@u8|4j#2~bCt^(M2MGP+AA86|lDSm4%u#m9fv*7aip*IzP+ut?H*YT=M zhNXzQ-olP8IBfc*w1RWq z7HT%^HBqNITkcw5tuHeQt0I3{{t2aFoFd^1_>&LNQUazhm(@T-E^vLWl%=A zTq9>nqq`Kl{}*W&g9eF{{cYSJW;HxeNAKu~aKuSq3?;;GVpBJm2ud?VaRRqHO~OSx zRQfQhC}stMUj)CTAY{M^2M`W_$RO>`s?`ON;stqdai7@GK^P-$gFnMcl&iWHv4HrR zCdq2p=8fdDuEc|EiS%=YzFe#Ex4Aj5S*0E&=vaWaX4=4teuwK7CGdD{lSamcb8$@_ zUViDSWF8I0h$TAne!1vGT`^E2OmKmN`XiumncaMYI%J&mb{I(`HRD_8pdPLDvtr*P z!EjB{3i~*K7f57>IS%ym%mRWj&xi)=seUU;N7Y#267c|qClkD+;u1UjB`9hW{FJHC zJgie>&kbkZcmV(O5uh|YUL>m+od&N)kUu6xPmJ>>h}F%@sO8%nO927q9&N zQEx$eaSdt+!;E68?Jvn(30dPP-B?#VfVg^fM*&^DZ2)_ScV2SO+$&X=y7QGk;M#s) zCar)X@>bJ?4d^vOXxFf^gk8Flyv7iO$o9ON`?=21*6lWr6qD35ydn{xIE$P0xksjK zd%1NE?;70(Qg)_2Z?c{;H(DZfy?}^S{0*M6*oDVxw3ZLUN$eMAnf!_01_(TblvsRf z)DC;5jcNVR*dEBJW6ckS6}iK_UKZvZJ!CEI1D2p<2*7Fm?cJJcl+1; z9|L?;c-ySPzft*awmJaP96YlX6?dFi7r+qx>%RIz^xl2*Op?gXRlE0v%F{C`e{}b3(6x4` z`|`TkvLr7;Xe(3=H=N=pR(bSD?!T4HrxM%=GP#U0(|%7&GhkLI;EYLPg2zh*e#WSpX117k!{Ssm3l{<~nf3*&*U(U|+q?idPgmx}F)b`y> z4E^lqhH<=pF6ZJdt?5J_;rXysP8}kp)?Qu&F?)$qUO3?+yeOS%AXTM)eYq0!5bCp! zX9KM&wLBC9bU^iW3h4m;DY8s|8~#A+3HR{sWcwOGW9Aje-V-BjUNcK?+;pO;#9R=J zjzdBVOe3Go_|y!X39r2Yejr)2{d`IA_eUpE(3HkCcgswD`2!|2WGHtkVe@Pw>5ZSa z=QW2)6?}qZTw|N|=(ud?pHl6zjHdA75v9jy-#>5Jq)xAjX(zF544=_LAwo8x2;sCc zX)%S|I4xb-!d`@>ai)mkPAtB{{EIK<(w5-)8E void} ErrorHandleFunction */ /** @typedef {SimpleHandleFunction | NextHandleFunction | ErrorHandleFunction} HandleFunction */ -/** @typedef {import("https").ServerOptions & { spdy?: { plain?: boolean | undefined, ssl?: boolean | undefined, 'x-forwarded-for'?: string | undefined, protocol?: string | undefined, protocols?: string[] | undefined }}} ServerOptions */ +/** @typedef {import("https").ServerOptions} ServerOptions */ /** * @template {BasicApplication} [T=ExpressApplication] @@ -108,7 +108,7 @@ const schema = require("./options.json"); /** * @template {BasicApplication} [A=ExpressApplication] * @template {BasicServer} [S=import("http").Server] - * @typedef {"http" | "https" | "spdy" | "http2" | string | ((serverOptions: ServerOptions, application: A) => S)} ServerType + * @typedef {"http" | "https" | "http2" | string | ((serverOptions: ServerOptions, application: A) => S)} ServerType */ /** @@ -1107,18 +1107,7 @@ class Server { const serverOptions = /** @type {ServerOptions} */ (options.server.options); - if ( - options.server.type === "spdy" && - typeof serverOptions.spdy === "undefined" - ) { - serverOptions.spdy = { protocols: ["h2", "http/1.1"] }; - } - - if ( - options.server.type === "https" || - options.server.type === "http2" || - options.server.type === "spdy" - ) { + if (options.server.type === "https" || options.server.type === "http2") { if (typeof serverOptions.requestCert === "undefined") { serverOptions.requestCert = false; } diff --git a/lib/options.json b/lib/options.json index 116292d8a0..683f383cc5 100644 --- a/lib/options.json +++ b/lib/options.json @@ -529,13 +529,13 @@ "description": "Allows to set server and options (by default 'http')." }, "ServerType": { - "enum": ["http", "https", "spdy", "http2"] + "enum": ["http", "https", "http2"] }, "ServerFn": { "instanceof": "Function" }, "ServerEnum": { - "enum": ["http", "https", "spdy", "http2"], + "enum": ["http", "https", "http2"], "cli": { "exclude": true } diff --git a/migration-v6.md b/migration-v6.md index 4a8978294c..e99a494b70 100644 --- a/migration-v6.md +++ b/migration-v6.md @@ -7,6 +7,34 @@ This document serves as a migration guide for `webpack-dev-server@6.0.0`. - Minimum supported `Node.js` version is `20.9.0`. - Support for **SockJS** in the WebSocket transport has been removed. Now, only **native WebSocket** is supported, or **custom** client and server implementations can be used. - The options for passing to the `proxy` have changed. Please refer to the [http-proxy-middleware migration guide](https://github.com/chimurai/http-proxy-middleware/blob/master/MIGRATION.md) for details. +- Remove support for the spdy server type. Use the http2 server type instead; however, since Express does not work correctly with it, a custom server (e.g., Connect or Hono) should be used. + + v4: + + ```js + module.exports = { + // ... + devServer: { + server: "spdy", + }, + }; + ``` + + v5: + + ```js + const connect = require("connect"); + + module.exports = { + // ... + devServer: { + server: { + server: "http2", + app: () => connect(), + }, + }, + }; + ``` ## Deprecations diff --git a/package-lock.json b/package-lock.json index c1508ff08b..71c78e9b36 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,7 +32,6 @@ "schema-utils": "^4.2.0", "selfsigned": "^5.5.0", "serve-index": "^1.9.1", - "spdy": "^4.0.2", "webpack-dev-middleware": "^7.4.5", "ws": "^8.18.0" }, @@ -180,7 +179,6 @@ "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -2420,8 +2418,7 @@ "resolved": "https://registry.npmjs.org/@cspell/dict-css/-/dict-css-4.0.18.tgz", "integrity": "sha512-EF77RqROHL+4LhMGW5NTeKqfUd/e4OOv6EDFQ/UQQiFyWuqkEKyEz0NDILxOFxWUEVdjT2GQ2cC7t12B6pESwg==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@cspell/dict-dart": { "version": "2.3.1", @@ -2561,16 +2558,14 @@ "resolved": "https://registry.npmjs.org/@cspell/dict-html/-/dict-html-4.0.12.tgz", "integrity": "sha512-JFffQ1dDVEyJq6tCDWv0r/RqkdSnV43P2F/3jJ9rwLgdsOIXwQbXrz6QDlvQLVvNSnORH9KjDtenFTGDyzfCaA==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@cspell/dict-html-symbol-entities": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/@cspell/dict-html-symbol-entities/-/dict-html-symbol-entities-4.0.4.tgz", "integrity": "sha512-afea+0rGPDeOV9gdO06UW183Qg6wRhWVkgCFwiO3bDupAoyXRuvupbb5nUyqSTsLXIKL8u8uXQlJ9pkz07oVXw==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@cspell/dict-java": { "version": "5.0.12", @@ -2768,8 +2763,7 @@ "resolved": "https://registry.npmjs.org/@cspell/dict-typescript/-/dict-typescript-3.2.3.tgz", "integrity": "sha512-zXh1wYsNljQZfWWdSPYwQhpwiuW0KPW1dSd8idjMRvSD0aSvWWHoWlrMsmZeRl4qM4QCEAjua8+cjflm41cQBg==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@cspell/dict-vue": { "version": "3.0.5", @@ -2972,6 +2966,7 @@ "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@types/json-schema": "^7.0.15" }, @@ -3066,7 +3061,6 @@ "integrity": "sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -3141,6 +3135,7 @@ "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@eslint/core": "^0.15.2", "levn": "^0.4.1" @@ -4629,6 +4624,7 @@ "integrity": "sha512-Ykums1VYonM0TgkD0VteVq9mrlO2FhF48MDJnPyv3MktIB2ydtuhlO0AfWm7xnW1kyf5bjOqA6xc7JjviuVTxg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", "@typescript-eslint/types": "^8.41.0", @@ -4650,6 +4646,7 @@ "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, "license": "Apache-2.0", + "peer": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -4805,7 +4802,6 @@ "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -4981,7 +4977,6 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -5122,7 +5117,6 @@ "integrity": "sha512-XxXP5tL1txl13YFtrECECQYeZjBZad4fyd3cFV4a19LkAY/bIp9fev3US4S5fDVV2JaYFiKAZ/GRTOLer+mbyQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "8.48.0", @@ -5163,7 +5157,6 @@ "integrity": "sha512-jCzKdm/QK0Kg4V4IK/oMlRZlY+QOcdjv89U2NgKHZk1CYTj82/RVSx1mV/0gqCVMJ/DA+Zf/S4NBWNF8GQ+eqQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.48.0", "@typescript-eslint/types": "8.48.0", @@ -5948,7 +5941,6 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "devOptional": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -6028,7 +6020,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -6923,7 +6914,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.8.25", "caniuse-lite": "^1.0.30001754", @@ -6996,6 +6986,7 @@ "integrity": "sha512-bkXY9WsVpY7CvMhKSR6pZilZu9Ln5WDrKVBUXf2S443etkmEO4V58heTecXcUIsNsi4Rx8JUO4NfX1IcQl4deg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=18.20" }, @@ -7199,7 +7190,8 @@ "resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz", "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/char-regex": { "version": "1.0.2", @@ -7312,6 +7304,7 @@ "integrity": "sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "escape-string-regexp": "^1.0.5" }, @@ -7325,6 +7318,7 @@ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=0.8.0" } @@ -9126,6 +9120,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, "license": "MIT" }, "node_modules/cosmiconfig": { @@ -9134,7 +9129,6 @@ "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "env-paths": "^2.2.1", "import-fresh": "^3.3.0", @@ -9894,12 +9888,6 @@ "node": ">=8" } }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "license": "MIT" - }, "node_modules/devlop": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", @@ -9919,8 +9907,7 @@ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1534754.tgz", "integrity": "sha512-26T91cV5dbOYnXdJi5qQHoTtUoNEqwkHcAyu/IKtjIAxiEqPMrDiRkDOPWVsGfNZGmlQVHQbZRSjD8sxagWVsQ==", "dev": true, - "license": "BSD-3-Clause", - "peer": true + "license": "BSD-3-Clause" }, "node_modules/dezalgo": { "version": "1.0.4", @@ -10525,7 +10512,6 @@ "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -10615,7 +10601,6 @@ "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", "dev": true, "license": "MIT", - "peer": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -10774,7 +10759,6 @@ "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", @@ -10819,7 +10803,6 @@ "integrity": "sha512-0WLIezrIxitUGbjMIGwznVzSIp0uFJV0PZ2fiSvpyVcxe+QMXKUt7MRhUpzdbctnnLwiOTOFkACplgB0wAglFw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/utils": "^8.0.0" }, @@ -10846,7 +10829,6 @@ "integrity": "sha512-y4CA9OkachG8v5nAtrwvcvjIbdcKgSyS6U//IfQr4FZFFyeBFwZFf/tfSsMr46mWDJgidZjBTqoCRlXywfFBMg==", "dev": true, "license": "BSD-3-Clause", - "peer": true, "dependencies": { "@es-joy/jsdoccomment": "~0.52.0", "are-docs-informative": "^0.0.2", @@ -10885,7 +10867,6 @@ "integrity": "sha512-68PealUpYoHOBh332JLLD9Sj7OQUDkFpmcfqt8R9sySfFSeuGJjMTJQvCRRB96zO3A/PELRLkPrzsHmzEFQQ5A==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.5.0", "enhanced-resolve": "^5.17.1", @@ -10971,6 +10952,7 @@ "integrity": "sha512-zLihukvneYT7f74GNbVJXfWIiNQmkc/a9vYBTE4qPkQZswolWNdu+Wsp9sIXno1JOzdn6OUwLPd19ekXVkahRA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "@eslint-community/eslint-utils": "^4.7.0", @@ -11007,6 +10989,7 @@ "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, "license": "ISC", + "peer": true, "bin": { "semver": "bin/semver.js" }, @@ -11619,7 +11602,8 @@ "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", "dev": true, - "license": "Apache-2.0" + "license": "Apache-2.0", + "peer": true }, "node_modules/fast-equals": { "version": "5.2.2", @@ -11881,6 +11865,7 @@ "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -13007,12 +12992,6 @@ "dev": true, "license": "MIT" }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "license": "MIT" - }, "node_modules/handlebars": { "version": "4.7.8", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", @@ -13163,7 +13142,6 @@ "integrity": "sha512-icXIITfw/07Q88nLSkB9aiUrd8rYzSweK681Kjo/TSggaGbOX4RRyxxm71v+3PC8C/j+4rlxGeoTRxQDkaJkUw==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=16.9.0" } @@ -13175,54 +13153,6 @@ "dev": true, "license": "ISC" }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "license": "MIT" - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/hpack.js/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/html-encoding-sniffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", @@ -13338,12 +13268,6 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "license": "MIT" - }, "node_modules/http-errors": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", @@ -13629,6 +13553,7 @@ "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -13814,6 +13739,7 @@ "integrity": "sha512-f4RqJKBUe5rQkJ2eJEJBXSticB3hGbN9j0yxxMQFqIW89Jp9WYFtzfTcRlstDKVUTRzSOTLKRfO9vIztenwtxA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "builtin-modules": "^5.0.0" }, @@ -14474,7 +14400,6 @@ "integrity": "sha512-F26gjC0yWN8uAA5m5Ss8ZQf5nDHWGlN/xWZIh8S5SRbsEKBovwZhxGd6LJlbZYxBgCYOtreSUyb8hpXyGC5O4A==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@jest/core": "30.2.0", "@jest/types": "30.2.0", @@ -16522,7 +16447,6 @@ "integrity": "sha512-j1n1IuTX1VQjIy3tT7cyGbX7nvQOsFLoIqobZv4ttI5axP923gA44zUj6miiA6R5Aoms4sEGVIIcucXUbRI14g==", "dev": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "copy-anything": "^2.0.1", "parse-node-version": "^1.0.1", @@ -18212,12 +18136,6 @@ "node": ">=4" } }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "license": "ISC" - }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -18765,12 +18683,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "license": "MIT" - }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -19408,6 +19320,7 @@ "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=4" } @@ -19442,7 +19355,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -19552,7 +19464,6 @@ "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, "license": "MIT", - "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -19569,6 +19480,7 @@ "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-diff": "^1.1.2" }, @@ -19629,6 +19541,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, "license": "MIT" }, "node_modules/progress": { @@ -20189,6 +20102,7 @@ "integrity": "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==", "dev": true, "license": "MIT", + "peer": true, "bin": { "regexp-tree": "bin/regexp-tree" } @@ -20675,12 +20589,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "license": "MIT" - }, "node_modules/selfsigned": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-5.5.0.tgz", @@ -21272,50 +21180,6 @@ "dev": true, "license": "CC0-1.0" }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/spdy-transport/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/split": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", @@ -21732,6 +21596,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" @@ -22010,6 +21875,7 @@ "integrity": "sha512-OA95x+JPmL7kc7zCu+e+TeYxEiaIyndRx0OrBcK2QPPH09oAndr2ALvymxWA+Lx1PYYvFUm4O63pRkdJAaW96w==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -22600,8 +22466,7 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD", - "peer": true + "license": "0BSD" }, "node_modules/tsyringe": { "version": "4.10.0", @@ -22785,7 +22650,6 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -22800,7 +22664,6 @@ "integrity": "sha512-fcKOvQD9GUn3Xw63EgiDqhvWJ5jsyZUaekl3KVpGsDJnN46WJTe3jWxtQP9lMZm1LJNkFLlTaWAxK2vUQR+cqw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/eslint-plugin": "8.48.0", "@typescript-eslint/parser": "8.48.0", @@ -23084,6 +22947,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, "license": "MIT" }, "node_modules/utila": { @@ -23207,15 +23071,6 @@ "node": ">=10.13.0" } }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "license": "MIT", - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, "node_modules/webdriver-bidi-protocol": { "version": "0.3.10", "resolved": "https://registry.npmjs.org/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.3.10.tgz", @@ -23239,7 +23094,6 @@ "integrity": "sha512-HU1JOuV1OavsZ+mfigY0j8d1TgQgbZ6M+J75zDkpEAwYeXjWSqrGJtgnPblJjd/mAyTNQ7ygw0MiKOn6etz8yw==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", @@ -23289,7 +23143,6 @@ "integrity": "sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@discoveryjs/json-ext": "^0.6.1", "@webpack-cli/configtest": "^3.0.1", diff --git a/package.json b/package.json index 73acc4751a..a93662213b 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,6 @@ "schema-utils": "^4.2.0", "selfsigned": "^5.5.0", "serve-index": "^1.9.1", - "spdy": "^4.0.2", "webpack-dev-middleware": "^7.4.5", "ws": "^8.18.0" }, diff --git a/test/__snapshots__/validate-options.test.js.snap.webpack5 b/test/__snapshots__/validate-options.test.js.snap.webpack5 index b043e1c9ee..f00fa55646 100644 --- a/test/__snapshots__/validate-options.test.js.snap.webpack5 +++ b/test/__snapshots__/validate-options.test.js.snap.webpack5 @@ -532,7 +532,7 @@ exports[`options validate should throw an error on the "server" option with '{"t exports[`options validate should throw an error on the "server" option with '{"type":"https","options":{"ca":true}}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.server should be one of these: - "http" | "https" | "spdy" | "http2" | function | non-empty string | object { type?, options? } + "http" | "https" | "http2" | function | non-empty string | object { type?, options? } -> Allows to set server and options (by default 'http'). -> Read more at https://webpack.js.org/configuration/dev-server/#devserverserver Details: @@ -549,7 +549,7 @@ exports[`options validate should throw an error on the "server" option with '{"t exports[`options validate should throw an error on the "server" option with '{"type":"https","options":{"cert":true}}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.server should be one of these: - "http" | "https" | "spdy" | "http2" | function | non-empty string | object { type?, options? } + "http" | "https" | "http2" | function | non-empty string | object { type?, options? } -> Allows to set server and options (by default 'http'). -> Read more at https://webpack.js.org/configuration/dev-server/#devserverserver Details: @@ -566,7 +566,7 @@ exports[`options validate should throw an error on the "server" option with '{"t exports[`options validate should throw an error on the "server" option with '{"type":"https","options":{"key":10}}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.server should be one of these: - "http" | "https" | "spdy" | "http2" | function | non-empty string | object { type?, options? } + "http" | "https" | "http2" | function | non-empty string | object { type?, options? } -> Allows to set server and options (by default 'http'). -> Read more at https://webpack.js.org/configuration/dev-server/#devserverserver Details: @@ -589,7 +589,7 @@ exports[`options validate should throw an error on the "server" option with '{"t exports[`options validate should throw an error on the "server" option with '{"type":"https","options":{"pfx":10}}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.server should be one of these: - "http" | "https" | "spdy" | "http2" | function | non-empty string | object { type?, options? } + "http" | "https" | "http2" | function | non-empty string | object { type?, options? } -> Allows to set server and options (by default 'http'). -> Read more at https://webpack.js.org/configuration/dev-server/#devserverserver Details: diff --git a/test/cli/__snapshots__/server-option.test.js.snap.webpack5 b/test/cli/__snapshots__/server-option.test.js.snap.webpack5 index 62011435d3..34f6afebb7 100644 --- a/test/cli/__snapshots__/server-option.test.js.snap.webpack5 +++ b/test/cli/__snapshots__/server-option.test.js.snap.webpack5 @@ -61,13 +61,3 @@ exports[`"server" CLI options should work using "--server-type https" 1`] = ` [webpack-dev-server] On Your Network (IPv6): https://[]:/ [webpack-dev-server] Content not from webpack is served from '/public' directory" `; - -exports[`"server" CLI options should work using "--server-type spdy" 1`] = ` -" [webpack-dev-server] Generating SSL certificate... - [webpack-dev-server] SSL certificate: /node_modules/.cache/webpack-dev-server/server.pem - [webpack-dev-server] Project is running at: - Loopback: https://localhost:/, https://:/, https://[]:/ - [webpack-dev-server] On Your Network (IPv4): https://:/ - [webpack-dev-server] On Your Network (IPv6): https://[]:/ - [webpack-dev-server] Content not from webpack is served from '/public' directory" -`; diff --git a/test/cli/server-option.test.js b/test/cli/server-option.test.js index f59af97255..7b9e77256b 100644 --- a/test/cli/server-option.test.js +++ b/test/cli/server-option.test.js @@ -46,27 +46,6 @@ describe('"server" CLI options', () => { ).toMatchSnapshot(); }); - const [major] = process.versions.node.split(".").map(Number); - - (major >= 24 ? it.skip : it)( - 'should work using "--server-type spdy"', - async () => { - const { exitCode, stderr } = await testBin([ - "--port", - port, - "--server-type", - "spdy", - ]); - - // eslint-disable-next-line jest/no-standalone-expect - expect(exitCode).toBe(0); - // eslint-disable-next-line jest/no-standalone-expect - expect( - normalizeStderr(stderr, { ipv6: true, https: true }), - ).toMatchSnapshot(); - }, - ); - it('should work using "--server-options-key --server-options-pfx --server-options-passphrase webpack-dev-server --server-options-cert --server-options-ca "', async () => { const pfxFile = path.join(httpsCertificateDirectory, "server.pfx"); const key = path.join(httpsCertificateDirectory, "server.key"); diff --git a/test/e2e/app.test.js b/test/e2e/app.test.js index 767fb5b980..b98b9f65e9 100644 --- a/test/e2e/app.test.js +++ b/test/e2e/app.test.js @@ -87,15 +87,6 @@ const apps = [ ], ]; -const [major] = process.versions.node.split(".").map(Number); - -if (major < 24) { - apps.push( - ["express", () => require("express")(), "spdy"], - ["connect", () => require("connect")(), "spdy"], - ); -} - describe("app option", () => { for (const [appName, app, server, setupMiddlewares] of apps) { let compiler; @@ -166,7 +157,6 @@ describe("app option", () => { ); if ( - server === "spdy" || server === "http2" || (server.options && server.options.allowHTTP1) ) { diff --git a/test/e2e/server.test.js b/test/e2e/server.test.js index 582e531873..3a41e99bdd 100644 --- a/test/e2e/server.test.js +++ b/test/e2e/server.test.js @@ -23,8 +23,6 @@ const staticDirectory = path.resolve( "../fixtures/static-config/public", ); -const [major] = process.versions.node.split(".").map(Number); - describe("server option", () => { describe("as string", () => { let compiler; @@ -213,60 +211,6 @@ describe("server option", () => { expect(pageErrors).toMatchSnapshot("page errors"); }); }); - - (major >= 24 ? describe.skip : describe)("spdy", () => { - beforeEach(async () => { - compiler = webpack(config); - - server = new Server( - { - static: { - directory: staticDirectory, - watch: false, - }, - server: "spdy", - port, - }, - compiler, - ); - - await server.start(); - - ({ page, browser } = await runBrowser()); - - pageErrors = []; - consoleMessages = []; - }); - - afterEach(async () => { - await browser.close(); - await server.stop(); - }); - - it("should handle GET request to index route (/)", async () => { - page - .on("console", (message) => { - consoleMessages.push(message); - }) - .on("pageerror", (error) => { - pageErrors.push(error); - }); - - const response = await page.goto(`https://localhost:${port}/`, { - waitUntil: "networkidle0", - }); - - const HTTPVersion = await page.evaluate( - () => performance.getEntries()[0].nextHopProtocol, - ); - - expect(HTTPVersion).toBe("h2"); - expect(response.status()).toBe(200); - expect((await response.text()).trim()).toBe("Heyo."); - expect(consoleMessages).toHaveLength(0); - expect(pageErrors).toHaveLength(0); - }); - }); }); describe("as object", () => { @@ -1193,85 +1137,6 @@ describe("server option", () => { }); }); - (major >= 24 ? describe.skip : describe)("spdy server with options", () => { - let compiler; - let server; - let createServerSpy; - let page; - let browser; - let pageErrors; - let consoleMessages; - - beforeEach(async () => { - compiler = webpack(config); - - createServerSpy = jest.spyOn(require("spdy"), "createServer"); - - server = new Server( - { - static: { - directory: staticDirectory, - watch: false, - }, - server: { - type: "spdy", - options: { - requestCert: false, - ca: [path.join(httpsCertificateDirectory, "ca.pem")], - pfx: [path.join(httpsCertificateDirectory, "server.pfx")], - key: [path.join(httpsCertificateDirectory, "server.key")], - cert: [path.join(httpsCertificateDirectory, "server.crt")], - passphrase: "webpack-dev-server", - }, - }, - port, - }, - compiler, - ); - - await server.start(); - - ({ page, browser } = await runBrowser()); - - pageErrors = []; - consoleMessages = []; - }); - - afterEach(async () => { - createServerSpy.mockRestore(); - - await browser.close(); - await server.stop(); - }); - - it("should handle GET request to index route (/)", async () => { - page - .on("console", (message) => { - consoleMessages.push(message); - }) - .on("pageerror", (error) => { - pageErrors.push(error); - }); - - const response = await page.goto(`https://localhost:${port}/`, { - waitUntil: "networkidle0", - }); - - const HTTPVersion = await page.evaluate( - () => performance.getEntries()[0].nextHopProtocol, - ); - - const options = normalizeOptions(createServerSpy.mock.calls[0][0]); - - expect(HTTPVersion).toBe("h2"); - expect(options.spdy).toEqual({ protocols: ["h2", "http/1.1"] }); - expect(response.status()).toBe(200); - expect((await response.text()).trim()).toBe("Heyo."); - expect(consoleMessages).toHaveLength(0); - expect(pageErrors).toHaveLength(0); - }); - }); - describe("custom server with options", () => { let compiler; let server; diff --git a/test/e2e/web-socket-server-url.test.js b/test/e2e/web-socket-server-url.test.js index 6b62cf0248..b8fdba83cf 100644 --- a/test/e2e/web-socket-server-url.test.js +++ b/test/e2e/web-socket-server-url.test.js @@ -2028,77 +2028,6 @@ describe("web socket server URL", () => { } }); - const [major] = process.versions.node.split(".").map(Number); - - (major >= 24 ? it.skip : it)( - `should work with "server: 'spdy'" option ("${webSocketServer}")`, - async () => { - const hostname = "localhost"; - const compiler = webpack(config); - const devServerOptions = { - webSocketServer, - port: port1, - server: "spdy", - }; - const server = new Server(devServerOptions, compiler); - - await server.start(); - - const { page, browser } = await runBrowser(); - - try { - const pageErrors = []; - const consoleMessages = []; - - page - .on("console", (message) => { - consoleMessages.push(message); - }) - .on("pageerror", (error) => { - pageErrors.push(error); - }); - - const webSocketRequests = []; - - const session = await page.createCDPSession(); - - await session.send("Target.setAutoAttach", { - autoAttach: true, - flatten: true, - waitForDebuggerOnStart: true, - }); - - await sessionSubscribe(session); - - session.on("Network.webSocketCreated", (test) => { - webSocketRequests.push(test); - }); - - await page.goto(`https://${hostname}:${port1}/`, { - waitUntil: "networkidle0", - }); - - const [webSocketRequest] = webSocketRequests; - - /* eslint-disable jest/no-standalone-expect */ - expect(webSocketRequest.url).toContain( - `wss://${hostname}:${port1}/ws`, - ); - - expect(consoleMessages.map((message) => message.text())).toEqual([ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", - "Hey.", - ]); - expect(pageErrors).toHaveLength(0); - /* eslint-enable jest/no-standalone-expect */ - } finally { - await browser.close(); - await server.stop(); - } - }, - ); - it(`should work when "port" option is "auto" ("${webSocketServer}")`, async () => { process.env.WEBPACK_DEV_SERVER_BASE_PORT = 50000; diff --git a/test/server/open-option.test.js b/test/server/open-option.test.js index 292eb59b07..ddd100186c 100644 --- a/test/server/open-option.test.js +++ b/test/server/open-option.test.js @@ -61,24 +61,6 @@ describe('"open" option', () => { }); }); - it("should work with the server: 'spdy' option", async () => { - const server = new Server( - { - open: true, - port, - server: "spdy", - }, - compiler, - ); - - await server.start(); - await server.stop(); - - expect(open).toHaveBeenCalledWith(`https://localhost:${port}/`, { - wait: false, - }); - }); - it("should work with '0.0.0.0' host but open localhost", async () => { const host = "0.0.0.0"; diff --git a/test/validate-options.test.js b/test/validate-options.test.js index 97590dfc13..da416cee23 100644 --- a/test/validate-options.test.js +++ b/test/validate-options.test.js @@ -245,7 +245,6 @@ const tests = { success: [ "http", "https", - "spdy", "custom-server.js", { type: "http", @@ -253,9 +252,6 @@ const tests = { { type: "https", }, - { - type: "spdy", - }, { type: "custom-server.js", }, diff --git a/types/lib/Server.d.ts b/types/lib/Server.d.ts index ca7f05728c..9ad8a3dca8 100644 --- a/types/lib/Server.d.ts +++ b/types/lib/Server.d.ts @@ -1534,15 +1534,7 @@ type HandleFunction = | SimpleHandleFunction | NextHandleFunction | ErrorHandleFunction; -type ServerOptions = import("https").ServerOptions & { - spdy?: { - plain?: boolean | undefined; - ssl?: boolean | undefined; - "x-forwarded-for"?: string | undefined; - protocol?: string | undefined; - protocols?: string[] | undefined; - }; -}; +type ServerOptions = import("https").ServerOptions; type Request = T extends ExpressApplication ? ExpressRequest : IncomingMessage; type Response = @@ -1620,7 +1612,6 @@ type ServerType< > = | "http" | "https" - | "spdy" | "http2" | string | ((serverOptions: ServerOptions, application: A) => S); From 18704b60ba4cc8f2132409ed84a8f7b6306edd30 Mon Sep 17 00:00:00 2001 From: Sebastian Beltran Date: Thu, 29 Jan 2026 05:16:25 -0500 Subject: [PATCH 06/21] feat: enable compression middleware for http/2 (#5638) --- lib/Server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Server.js b/lib/Server.js index 7b6cdb5a95..bbfe8aa29d 100644 --- a/lib/Server.js +++ b/lib/Server.js @@ -1967,7 +1967,7 @@ class Server { } // compress is placed last and uses unshift so that it will be the first middleware used - if (this.options.compress && !isHTTP2) { + if (this.options.compress) { const compression = require("compression"); middlewares.push({ name: "compression", middleware: compression() }); From ebd7f64ea19b94561519cb68dd35ab061769d957 Mon Sep 17 00:00:00 2001 From: Sebastian Beltran Date: Sun, 1 Feb 2026 10:12:14 -0500 Subject: [PATCH 07/21] feat: use new URL instead of url.parse (#5637) --- lib/Server.js | 51 +++++++++++++++++++++++++------------------ types/lib/Server.d.ts | 1 + 2 files changed, 31 insertions(+), 21 deletions(-) diff --git a/lib/Server.js b/lib/Server.js index bbfe8aa29d..c47026ca84 100644 --- a/lib/Server.js +++ b/lib/Server.js @@ -3050,6 +3050,32 @@ class Server { return false; } + /** + * Extracts and normalizes the hostname from a header, removing brackets for IPv6. + * @param {string} header header value + * @returns {string|null} hostname or null + */ + #parseHostnameFromHeader = function (header) { + if (!header) return null; + try { + // If the header does not have a scheme, prepend // so URL can parse it + const parseUrl = new URL( + /^(.+:)?\/\//.test(header) ? header : `//${header}`, + "http://localhost/", + ); + + let hostname = parseUrl.hostname; + // Normalize IPv6: remove brackets if present + if (hostname.startsWith("[") && hostname.endsWith("]")) { + hostname = hostname.slice(1, -1); + } + + return hostname; + } catch { + return null; + } + }; + /** * @private * @param {{ [key: string]: string | undefined }} headers headers @@ -3074,15 +3100,7 @@ class Server { return true; } - // use the node url-parser to retrieve the hostname from the host-header. - // TODO resolve me in the next major release - // eslint-disable-next-line n/no-deprecated-api - const { hostname } = url.parse( - // if header doesn't have scheme, add // for parsing. - /^(.+:)?\/\//.test(header) ? header : `//${header}`, - false, - true, - ); + const hostname = this.#parseHostnameFromHeader(header); if (hostname === null) { return false; @@ -3096,8 +3114,7 @@ class Server { // A note on IPv6 addresses: // header will always contain the brackets denoting // an IPv6-address in URLs, - // these are removed from the hostname in url.parse(), - // so we have the pure IPv6-address in hostname. + // these aren't removed from the hostname in new URL(), // For convenience, always allow localhost (hostname === 'localhost') // and its subdomains (hostname.endsWith(".localhost")). // allow hostname of listening address (hostname === this.options.host) @@ -3132,9 +3149,7 @@ class Server { return true; } - // TODO resolve me in the next major release - // eslint-disable-next-line n/no-deprecated-api - const origin = url.parse(originHeader, false, true).hostname; + const origin = this.#parseHostnameFromHeader(originHeader); if (origin === null) { return false; @@ -3154,13 +3169,7 @@ class Server { return true; } - // eslint-disable-next-line n/no-deprecated-api - const host = url.parse( - // if hostHeader doesn't have scheme, add // for parsing. - /^(.+:)?\/\//.test(hostHeader) ? hostHeader : `//${hostHeader}`, - false, - true, - ).hostname; + const host = this.#parseHostnameFromHeader(hostHeader); if (host === null) { return false; diff --git a/types/lib/Server.d.ts b/types/lib/Server.d.ts index 9ad8a3dca8..5ba932ce6e 100644 --- a/types/lib/Server.d.ts +++ b/types/lib/Server.d.ts @@ -1409,6 +1409,7 @@ declare class Server< * @param {((err?: Error) => void)=} callback callback */ stopCallback(callback?: ((err?: Error) => void) | undefined): void; + #private; } declare namespace Server { export { From 230679d0ab91d39624667da54181020085efa104 Mon Sep 17 00:00:00 2001 From: Sebastian Beltran Date: Sun, 1 Feb 2026 11:38:36 -0500 Subject: [PATCH 08/21] feat: remove colorette dependency (#5642) --- lib/Server.js | 24 ++++++++- package-lock.json | 128 +++++++++++++++++++++++++--------------------- package.json | 5 +- 3 files changed, 94 insertions(+), 63 deletions(-) diff --git a/lib/Server.js b/lib/Server.js index c47026ca84..6458f9ffa7 100644 --- a/lib/Server.js +++ b/lib/Server.js @@ -1477,6 +1477,23 @@ class Server { } } + /** + * @returns { { isColorSupported: () => boolean, colors: import("webpack").Colors } } colors support + */ + #getColors() { + const compilerOptions = + /** @type {MultiCompiler} */ + (this.compiler).compilers + ? /** @type {MultiCompiler} */ (this.compiler).compilers[0].webpack + : /** @type {Compiler} */ (this.compiler).webpack; + + const colors = compilerOptions.cli.createColors({ + useColor: compilerOptions.cli.isColorSupported(), + }); + + return { isColorSupported: compilerOptions.cli.isColorSupported, colors }; + } + /** * @private * @returns {string} client transport @@ -2735,7 +2752,10 @@ class Server { * @returns {Promise} */ async logStatus() { - const { cyan, isColorSupported, red } = require("colorette"); + const { + isColorSupported, + colors: { cyan, red }, + } = this.#getColors(); /** * @param {Compiler["options"]} compilerOptions compiler options @@ -2756,7 +2776,7 @@ class Server { /** @type {boolean} */ (/** @type {StatsOptions} */ (compilerOptions.stats).colors); } else { - colorsEnabled = isColorSupported; + colorsEnabled = isColorSupported(); } return colorsEnabled; diff --git a/package-lock.json b/package-lock.json index 71c78e9b36..e977186fc8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,6 @@ "ansi-html-community": "^0.0.8", "bonjour-service": "^1.2.1", "chokidar": "^3.6.0", - "colorette": "^2.0.10", "compression": "^1.8.1", "connect-history-api-fallback": "^2.0.0", "express": "^5.1.0", @@ -95,7 +94,7 @@ "typescript": "^5.7.2", "typescript-eslint": "^8.36.0", "wait-for-expect": "^3.0.2", - "webpack": "^5.94.0", + "webpack": "^5.104.1", "webpack-cli": "^6.0.1", "webpack-merge": "^6.0.1" }, @@ -107,7 +106,7 @@ "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^5.0.0" + "webpack": "^5.101.0" }, "peerDependenciesMeta": { "webpack": { @@ -179,6 +178,7 @@ "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -2418,7 +2418,8 @@ "resolved": "https://registry.npmjs.org/@cspell/dict-css/-/dict-css-4.0.18.tgz", "integrity": "sha512-EF77RqROHL+4LhMGW5NTeKqfUd/e4OOv6EDFQ/UQQiFyWuqkEKyEz0NDILxOFxWUEVdjT2GQ2cC7t12B6pESwg==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@cspell/dict-dart": { "version": "2.3.1", @@ -2558,14 +2559,16 @@ "resolved": "https://registry.npmjs.org/@cspell/dict-html/-/dict-html-4.0.12.tgz", "integrity": "sha512-JFffQ1dDVEyJq6tCDWv0r/RqkdSnV43P2F/3jJ9rwLgdsOIXwQbXrz6QDlvQLVvNSnORH9KjDtenFTGDyzfCaA==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@cspell/dict-html-symbol-entities": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/@cspell/dict-html-symbol-entities/-/dict-html-symbol-entities-4.0.4.tgz", "integrity": "sha512-afea+0rGPDeOV9gdO06UW183Qg6wRhWVkgCFwiO3bDupAoyXRuvupbb5nUyqSTsLXIKL8u8uXQlJ9pkz07oVXw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@cspell/dict-java": { "version": "5.0.12", @@ -2763,7 +2766,8 @@ "resolved": "https://registry.npmjs.org/@cspell/dict-typescript/-/dict-typescript-3.2.3.tgz", "integrity": "sha512-zXh1wYsNljQZfWWdSPYwQhpwiuW0KPW1dSd8idjMRvSD0aSvWWHoWlrMsmZeRl4qM4QCEAjua8+cjflm41cQBg==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@cspell/dict-vue": { "version": "3.0.5", @@ -2966,7 +2970,6 @@ "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", "dev": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "@types/json-schema": "^7.0.15" }, @@ -3061,6 +3064,7 @@ "integrity": "sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -3135,7 +3139,6 @@ "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", "dev": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "@eslint/core": "^0.15.2", "levn": "^0.4.1" @@ -4624,7 +4627,6 @@ "integrity": "sha512-Ykums1VYonM0TgkD0VteVq9mrlO2FhF48MDJnPyv3MktIB2ydtuhlO0AfWm7xnW1kyf5bjOqA6xc7JjviuVTxg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", "@typescript-eslint/types": "^8.41.0", @@ -4646,7 +4648,6 @@ "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, "license": "Apache-2.0", - "peer": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -4802,6 +4803,7 @@ "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -4977,6 +4979,7 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -5117,6 +5120,7 @@ "integrity": "sha512-XxXP5tL1txl13YFtrECECQYeZjBZad4fyd3cFV4a19LkAY/bIp9fev3US4S5fDVV2JaYFiKAZ/GRTOLer+mbyQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "8.48.0", @@ -5157,6 +5161,7 @@ "integrity": "sha512-jCzKdm/QK0Kg4V4IK/oMlRZlY+QOcdjv89U2NgKHZk1CYTj82/RVSx1mV/0gqCVMJ/DA+Zf/S4NBWNF8GQ+eqQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.48.0", "@typescript-eslint/types": "8.48.0", @@ -5941,6 +5946,7 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "devOptional": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -6020,6 +6026,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -6895,9 +6902,9 @@ } }, "node_modules/browserslist": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.0.tgz", - "integrity": "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", "devOptional": true, "funding": [ { @@ -6914,12 +6921,13 @@ } ], "license": "MIT", + "peer": true, "dependencies": { - "baseline-browser-mapping": "^2.8.25", - "caniuse-lite": "^1.0.30001754", - "electron-to-chromium": "^1.5.249", + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", "node-releases": "^2.0.27", - "update-browserslist-db": "^1.1.4" + "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" @@ -6986,7 +6994,6 @@ "integrity": "sha512-bkXY9WsVpY7CvMhKSR6pZilZu9Ln5WDrKVBUXf2S443etkmEO4V58heTecXcUIsNsi4Rx8JUO4NfX1IcQl4deg==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=18.20" }, @@ -7125,9 +7132,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001755", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001755.tgz", - "integrity": "sha512-44V+Jm6ctPj7R52Na4TLi3Zri4dWUljJd+RDm+j8LtNCc/ihLCT+X1TzoOAkRETEWqjuLnh9581Tl80FvK7jVA==", + "version": "1.0.30001766", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001766.tgz", + "integrity": "sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==", "devOptional": true, "funding": [ { @@ -7190,8 +7197,7 @@ "resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz", "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/char-regex": { "version": "1.0.2", @@ -7304,7 +7310,6 @@ "integrity": "sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "escape-string-regexp": "^1.0.5" }, @@ -7318,7 +7323,6 @@ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=0.8.0" } @@ -9129,6 +9133,7 @@ "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "env-paths": "^2.2.1", "import-fresh": "^3.3.0", @@ -9907,7 +9912,8 @@ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1534754.tgz", "integrity": "sha512-26T91cV5dbOYnXdJi5qQHoTtUoNEqwkHcAyu/IKtjIAxiEqPMrDiRkDOPWVsGfNZGmlQVHQbZRSjD8sxagWVsQ==", "dev": true, - "license": "BSD-3-Clause" + "license": "BSD-3-Clause", + "peer": true }, "node_modules/dezalgo": { "version": "1.0.4", @@ -10170,9 +10176,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.256", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.256.tgz", - "integrity": "sha512-uqYq1IQhpXXLX+HgiXdyOZml7spy4xfy42yPxcCCRjswp0fYM2X+JwCON07lqnpLEGVCj739B7Yr+FngmHBMEQ==", + "version": "1.5.283", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.283.tgz", + "integrity": "sha512-3vifjt1HgrGW/h76UEeny+adYApveS9dH2h3p57JYzBSXJIKUJAvtmIytDKjcSCt9xHfrNCFJ7gts6vkhuq++w==", "devOptional": true, "license": "ISC" }, @@ -10390,9 +10396,9 @@ } }, "node_modules/es-module-lexer": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", + "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", "devOptional": true, "license": "MIT" }, @@ -10512,6 +10518,7 @@ "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -10601,6 +10608,7 @@ "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", "dev": true, "license": "MIT", + "peer": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -10759,6 +10767,7 @@ "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", @@ -10803,6 +10812,7 @@ "integrity": "sha512-0WLIezrIxitUGbjMIGwznVzSIp0uFJV0PZ2fiSvpyVcxe+QMXKUt7MRhUpzdbctnnLwiOTOFkACplgB0wAglFw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/utils": "^8.0.0" }, @@ -10829,6 +10839,7 @@ "integrity": "sha512-y4CA9OkachG8v5nAtrwvcvjIbdcKgSyS6U//IfQr4FZFFyeBFwZFf/tfSsMr46mWDJgidZjBTqoCRlXywfFBMg==", "dev": true, "license": "BSD-3-Clause", + "peer": true, "dependencies": { "@es-joy/jsdoccomment": "~0.52.0", "are-docs-informative": "^0.0.2", @@ -10867,6 +10878,7 @@ "integrity": "sha512-68PealUpYoHOBh332JLLD9Sj7OQUDkFpmcfqt8R9sySfFSeuGJjMTJQvCRRB96zO3A/PELRLkPrzsHmzEFQQ5A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.5.0", "enhanced-resolve": "^5.17.1", @@ -10952,7 +10964,6 @@ "integrity": "sha512-zLihukvneYT7f74GNbVJXfWIiNQmkc/a9vYBTE4qPkQZswolWNdu+Wsp9sIXno1JOzdn6OUwLPd19ekXVkahRA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "@eslint-community/eslint-utils": "^4.7.0", @@ -10989,7 +11000,6 @@ "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, "license": "ISC", - "peer": true, "bin": { "semver": "bin/semver.js" }, @@ -11602,8 +11612,7 @@ "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", "dev": true, - "license": "Apache-2.0", - "peer": true + "license": "Apache-2.0" }, "node_modules/fast-equals": { "version": "5.2.2", @@ -11865,7 +11874,6 @@ "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=18" }, @@ -13142,6 +13150,7 @@ "integrity": "sha512-icXIITfw/07Q88nLSkB9aiUrd8rYzSweK681Kjo/TSggaGbOX4RRyxxm71v+3PC8C/j+4rlxGeoTRxQDkaJkUw==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=16.9.0" } @@ -13553,7 +13562,6 @@ "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -13739,7 +13747,6 @@ "integrity": "sha512-f4RqJKBUe5rQkJ2eJEJBXSticB3hGbN9j0yxxMQFqIW89Jp9WYFtzfTcRlstDKVUTRzSOTLKRfO9vIztenwtxA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "builtin-modules": "^5.0.0" }, @@ -14400,6 +14407,7 @@ "integrity": "sha512-F26gjC0yWN8uAA5m5Ss8ZQf5nDHWGlN/xWZIh8S5SRbsEKBovwZhxGd6LJlbZYxBgCYOtreSUyb8hpXyGC5O4A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@jest/core": "30.2.0", "@jest/types": "30.2.0", @@ -16447,6 +16455,7 @@ "integrity": "sha512-j1n1IuTX1VQjIy3tT7cyGbX7nvQOsFLoIqobZv4ttI5axP923gA44zUj6miiA6R5Aoms4sEGVIIcucXUbRI14g==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "copy-anything": "^2.0.1", "parse-node-version": "^1.0.1", @@ -19320,7 +19329,6 @@ "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=4" } @@ -19355,6 +19363,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -19464,6 +19473,7 @@ "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, "license": "MIT", + "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -19480,7 +19490,6 @@ "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "fast-diff": "^1.1.2" }, @@ -20102,7 +20111,6 @@ "integrity": "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==", "dev": true, "license": "MIT", - "peer": true, "bin": { "regexp-tree": "bin/regexp-tree" } @@ -21875,7 +21883,6 @@ "integrity": "sha512-OA95x+JPmL7kc7zCu+e+TeYxEiaIyndRx0OrBcK2QPPH09oAndr2ALvymxWA+Lx1PYYvFUm4O63pRkdJAaW96w==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -22108,9 +22115,9 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", - "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", + "version": "5.3.16", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz", + "integrity": "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==", "devOptional": true, "license": "MIT", "dependencies": { @@ -22466,7 +22473,8 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" + "license": "0BSD", + "peer": true }, "node_modules/tsyringe": { "version": "4.10.0", @@ -22650,6 +22658,7 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -22664,6 +22673,7 @@ "integrity": "sha512-fcKOvQD9GUn3Xw63EgiDqhvWJ5jsyZUaekl3KVpGsDJnN46WJTe3jWxtQP9lMZm1LJNkFLlTaWAxK2vUQR+cqw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/eslint-plugin": "8.48.0", "@typescript-eslint/parser": "8.48.0", @@ -22892,9 +22902,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", - "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "devOptional": true, "funding": [ { @@ -23089,11 +23099,12 @@ } }, "node_modules/webpack": { - "version": "5.103.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.103.0.tgz", - "integrity": "sha512-HU1JOuV1OavsZ+mfigY0j8d1TgQgbZ6M+J75zDkpEAwYeXjWSqrGJtgnPblJjd/mAyTNQ7ygw0MiKOn6etz8yw==", + "version": "5.104.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.104.1.tgz", + "integrity": "sha512-Qphch25abbMNtekmEGJmeRUhLDbe+QfiWTiqpKYkpCOWY64v9eyl+KRRLmqOFA2AvKPpc9DC6+u2n76tQLBoaA==", "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", @@ -23103,10 +23114,10 @@ "@webassemblyjs/wasm-parser": "^1.14.1", "acorn": "^8.15.0", "acorn-import-phases": "^1.0.3", - "browserslist": "^4.26.3", + "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.3", - "es-module-lexer": "^1.2.1", + "enhanced-resolve": "^5.17.4", + "es-module-lexer": "^2.0.0", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", @@ -23117,7 +23128,7 @@ "neo-async": "^2.6.2", "schema-utils": "^4.3.3", "tapable": "^2.3.0", - "terser-webpack-plugin": "^5.3.11", + "terser-webpack-plugin": "^5.3.16", "watchpack": "^2.4.4", "webpack-sources": "^3.3.3" }, @@ -23143,6 +23154,7 @@ "integrity": "sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@discoveryjs/json-ext": "^0.6.1", "@webpack-cli/configtest": "^3.0.1", diff --git a/package.json b/package.json index a93662213b..265269b6c7 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,6 @@ "ansi-html-community": "^0.0.8", "bonjour-service": "^1.2.1", "chokidar": "^3.6.0", - "colorette": "^2.0.10", "compression": "^1.8.1", "connect-history-api-fallback": "^2.0.0", "express": "^5.1.0", @@ -127,12 +126,12 @@ "typescript": "^5.7.2", "typescript-eslint": "^8.36.0", "wait-for-expect": "^3.0.2", - "webpack": "^5.94.0", + "webpack": "^5.104.1", "webpack-cli": "^6.0.1", "webpack-merge": "^6.0.1" }, "peerDependencies": { - "webpack": "^5.0.0" + "webpack": "^5.101.0" }, "peerDependenciesMeta": { "webpack-cli": { From a4012b6b9a27a36f20dd632306aeacc5ec8a5281 Mon Sep 17 00:00:00 2001 From: Sebastian Beltran Date: Mon, 2 Feb 2026 22:57:43 -0500 Subject: [PATCH 09/21] feat: remove bypass option from proxy configuration (#5641) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * test: remove async bypass handling from proxy options the router does not allow sending data the way bypass did. In the router we only have the req object, so this test is removed since it is invalid (https://github.com/chimurai/http-proxy-middleware/blob/6436ffc522a3a2485c198bd2fb544db0e33e3821/src/router.ts#L7) * test: remove another test Just like in the previous commit, the router, or any other handler ,does not allow sending data; it only changes where the request should be forwarded via the proxy. Therefore, it doesn’t make sense to keep this test. * test: remove deprecated bypass option tests * test: use only pathRewrite * feat: remove deprecated bypass option from proxy configuration * test: improve tests * test: update pathFilter in proxy option tests * docs: update migration guide to reflect removal of bypass function in proxy configuration * chore: update examples * fixup! * docs: update migration guide to clarify minimum webpack version requirement --- .../general/proxy-advanced/webpack.config.js | 21 ++-- examples/proxy/webpack.config.js | 7 +- lib/Server.js | 73 ++--------- migration-v6.md | 44 +++++++ test/server/proxy-option.test.js | 117 ++++-------------- types/lib/Server.d.ts | 8 -- 6 files changed, 90 insertions(+), 180 deletions(-) diff --git a/examples/general/proxy-advanced/webpack.config.js b/examples/general/proxy-advanced/webpack.config.js index 215ab84a01..e573112ea5 100644 --- a/examples/general/proxy-advanced/webpack.config.js +++ b/examples/general/proxy-advanced/webpack.config.js @@ -8,19 +8,24 @@ module.exports = setup({ context: __dirname, entry: "./app.js", devServer: { - proxy: { - "/api": { + port: 8080, + static: { + directory: ".", + }, + proxy: [ + { + context: "/api/nope", + router: () => "http://localhost:8080", + pathRewrite: () => "/bypass.html", + }, + { + context: "/api", target: "http://jsonplaceholder.typicode.com/", changeOrigin: true, pathRewrite: { "^/api": "", }, - bypass(req) { - if (req.url === "/api/nope") { - return "/bypass.html"; - } - }, }, - }, + ], }, }); diff --git a/examples/proxy/webpack.config.js b/examples/proxy/webpack.config.js index 0b550270a2..ad87568081 100644 --- a/examples/proxy/webpack.config.js +++ b/examples/proxy/webpack.config.js @@ -29,10 +29,11 @@ module.exports = setup({ onBeforeSetupMiddleware: async () => { await listenProxyServer(); }, - proxy: { - "/proxy": { + proxy: [ + { + context: "/proxy", target: "http://localhost:5000", }, - }, + ], }, }); diff --git a/lib/Server.js b/lib/Server.js index 6458f9ffa7..93bc098643 100644 --- a/lib/Server.js +++ b/lib/Server.js @@ -3,7 +3,6 @@ const os = require("node:os"); const path = require("node:path"); const url = require("node:url"); -const util = require("node:util"); const fs = require("graceful-fs"); const ipaddr = require("ipaddr.js"); const { validate } = require("schema-utils"); @@ -138,14 +137,7 @@ const schema = require("./options.json"); */ /** - * @callback ByPass - * @param {Request} req - * @param {Response} res - * @param {ProxyConfigArrayItem} proxyConfig - */ - -/** - * @typedef {{ path?: HttpProxyMiddlewareOptionsFilter | undefined, context?: HttpProxyMiddlewareOptionsFilter | undefined } & { bypass?: ByPass } & HttpProxyMiddlewareOptions } ProxyConfigArrayItem + * @typedef {{ path?: HttpProxyMiddlewareOptionsFilter | undefined, context?: HttpProxyMiddlewareOptionsFilter | undefined } & HttpProxyMiddlewareOptions } ProxyConfigArrayItem */ /** @@ -2148,29 +2140,13 @@ class Server { * @returns {RequestHandler | undefined} request handler */ const getProxyMiddleware = (proxyConfig) => { - // It is possible to use the `bypass` method without a `target` or `router`. - // However, the proxy middleware has no use in this case, and will fail to instantiate. - if (proxyConfig.target) { - const context = proxyConfig.context || proxyConfig.path; - - return createProxyMiddleware({ - ...proxyConfig, - pathFilter: /** @type {string} */ (context), - }); - } + const context = + proxyConfig.context || proxyConfig.path || proxyConfig.pathFilter; - if (proxyConfig.router) { - return createProxyMiddleware(proxyConfig); - } - - // TODO improve me after drop `bypass` to always generate error when configuration is bad - if (!proxyConfig.bypass) { - util.deprecate( - () => {}, - `Invalid proxy configuration:\n\n${JSON.stringify(proxyConfig, null, 2)}\n\nThe use of proxy object notation as proxy routes has been removed.\nPlease use the 'router' or 'context' options. Read more at https://github.com/chimurai/http-proxy-middleware/tree/v2.0.6#http-proxy-middleware-options`, - "DEP_WEBPACK_DEV_SERVER_PROXY_ROUTES_ARGUMENT", - )(); - } + return createProxyMiddleware({ + ...proxyConfig, + pathFilter: /** @type {string} */ (context), + }); }; /** @@ -2236,40 +2212,7 @@ class Server { } } - // - Check if we have a bypass function defined - // - In case the bypass function is defined we'll retrieve the - // bypassUrl from it otherwise bypassUrl would be null - // TODO remove in the next major in favor `context` and `router` options - const isByPassFuncDefined = typeof proxyConfig.bypass === "function"; - if (isByPassFuncDefined) { - util.deprecate( - () => {}, - "Using the 'bypass' option is deprecated. Please use the 'router' or 'context' options. Read more at https://github.com/chimurai/http-proxy-middleware/tree/v2.0.6#http-proxy-middleware-options", - "DEP_WEBPACK_DEV_SERVER_PROXY_BYPASS_ARGUMENT", - )(); - } - const bypassUrl = isByPassFuncDefined - ? await /** @type {ByPass} */ (proxyConfig.bypass)( - req, - res, - proxyConfig, - ) - : null; - - if (typeof bypassUrl === "boolean") { - // skip the proxy - res.statusCode = 404; - req.url = ""; - next(); - } else if (typeof bypassUrl === "string") { - // byPass to that url - req.url = bypassUrl; - next(); - } else if (proxyMiddleware) { - return proxyMiddleware(req, res, next); - } else { - next(); - } + return proxyMiddleware(req, res, next); }; middlewares.push({ diff --git a/migration-v6.md b/migration-v6.md index e99a494b70..f5aa4c0bbb 100644 --- a/migration-v6.md +++ b/migration-v6.md @@ -5,6 +5,7 @@ This document serves as a migration guide for `webpack-dev-server@6.0.0`. ## ⚠ Breaking Changes - Minimum supported `Node.js` version is `20.9.0`. +- Minimum supported `webpack` version is `5.101.0`. - Support for **SockJS** in the WebSocket transport has been removed. Now, only **native WebSocket** is supported, or **custom** client and server implementations can be used. - The options for passing to the `proxy` have changed. Please refer to the [http-proxy-middleware migration guide](https://github.com/chimurai/http-proxy-middleware/blob/master/MIGRATION.md) for details. - Remove support for the spdy server type. Use the http2 server type instead; however, since Express does not work correctly with it, a custom server (e.g., Connect or Hono) should be used. @@ -51,3 +52,46 @@ This document serves as a migration guide for `webpack-dev-server@6.0.0`. ```js const ip = Server.findIp("v4", true); ``` + +- The bypass function in the proxy configuration was removed. Use the `pathFilter` and `router` for similar functionality. See the example below. + + v4: + + ```js + module.exports = { + // ... + devServer: { + proxy: [ + { + context: "/api", + bypass(req, res, proxyOptions) { + if (req.url.startsWith("/api/special")) { + return "/special.html"; + } + }, + }, + ], + }, + }; + ``` + + v5: + + ```js + module.exports = { + // ... + devServer: { + proxy: [ + { + pathFilter: "/api/special", + router: () => "http://localhost:3000", // Original Server + pathRewrite: () => "/special.html", + }, + ], + }, + }; + ``` + + When `bypass` was used and that function returned a boolean, it would automatically result in a `404` request. This can’t be achieved in a similar way now, or, if it returned a string, you can do what was done in the example above. + + `bypass` also allowed sending data; this can no longer be done. If you really need to do it, you’d have to create a new route in the proxy that sends the same data, or alternatively create a new route on the main server and, following the example above, send the data you wanted. diff --git a/test/server/proxy-option.test.js b/test/server/proxy-option.test.js index deb99e1ba9..76865bc1e9 100644 --- a/test/server/proxy-option.test.js +++ b/test/server/proxy-option.test.js @@ -1,7 +1,6 @@ "use strict"; const path = require("node:path"); -const util = require("node:util"); const express = require("express"); const request = require("supertest"); const webpack = require("webpack"); @@ -19,51 +18,14 @@ const proxyOptionPathsAsProperties = [ target: `http://localhost:${port1}`, }, { - context: "/api/proxy2", + path: "/api/proxy2", target: `http://localhost:${port2}`, pathRewrite: { "^/api": "" }, }, { - context: "/foo", - bypass(req) { - if (/\.html$/.test(req.path || req.url)) { - return "/index.html"; - } - - return null; - }, - }, - { - context: "proxyfalse", - bypass(req) { - if (/\/proxyfalse$/.test(req.path || req.url)) { - return false; - } - }, - }, - { - context: "/proxy/async", - bypass(req, res) { - if (/\/proxy\/async$/.test(req.path || req.url)) { - return new Promise((resolve) => { - setTimeout(() => { - res.end("proxy async response"); - resolve(true); - }, 10); - }); - } - }, - }, - { - context: "/bypass-with-target", - target: `http://localhost:${port1}`, - changeOrigin: true, - secure: false, - bypass(req) { - if (/\.(html)$/i.test(req.path || req.url)) { - return req.url; - } - }, + pathFilter: ["/foo/*.html", "/baz/*.html", "/bypass-with-target/*.html"], + pathRewrite: () => "/index.html", + router: () => `http://localhost:${port3}`, }, ]; @@ -77,7 +39,7 @@ const proxyOption = [ let maxServerListeners = 0; const proxyOptionOfArray = [ { context: "/proxy1", target: `http://localhost:${port1}` }, - function proxy(req, res, next) { + function proxy(req) { if (req) { const socket = req.socket || req.connection; const server = socket ? socket.server : null; @@ -92,19 +54,6 @@ const proxyOptionOfArray = [ context: "/api/proxy2", target: `http://localhost:${port2}`, pathRewrite: { "^/api": "" }, - bypass: () => { - if (req) { - const resolveUrl = new URL(req.url, `http://${req.headers.host}`); - const params = new URLSearchParams(resolveUrl.search); - const foo = params.get("foo"); - - if (foo) { - res.end(`foo+${next.name}+${typeof next}`); - - return false; - } - } - }, }; }, ]; @@ -167,6 +116,9 @@ describe("proxy option", () => { proxyApp1.get("/api", (req, res) => { res.send("api response from proxy1"); }); + proxyApp1.get("/index.html", (req, res) => { + res.send("Hello"); + }); proxyApp2.get("/proxy2", (req, res) => { res.send("from proxy2"); }); @@ -247,68 +199,48 @@ describe("proxy option", () => { }); }); - describe("bypass", () => { - it("should log deprecation warning when bypass is used", async () => { - const utilSpy = jest.spyOn(util, "deprecate"); - - const response = await req.get("/foo/bar.html"); - - expect(response.status).toBe(200); - expect(response.text).toContain("Hello"); - - const lastCall = utilSpy.mock.calls[utilSpy.mock.calls.length - 1]; - - expect(lastCall[1]).toBe( - "Using the 'bypass' option is deprecated. Please use the 'router' or 'context' options. Read more at https://github.com/chimurai/http-proxy-middleware/tree/v2.0.6#http-proxy-middleware-options", - ); - expect(lastCall[2]).toBe( - "DEP_WEBPACK_DEV_SERVER_PROXY_BYPASS_ARGUMENT", - ); - - utilSpy.mockRestore(); - }); - - it("can rewrite a request path", async () => { + describe("pathFilter and pathRewrite", () => { + it("should rewrite matching paths using pathFilter", async () => { const response = await req.get("/foo/bar.html"); expect(response.status).toBe(200); expect(response.text).toContain("Hello"); }); - it("can rewrite a request path regardless of the target defined a bypass option", async () => { + it("should rewrite paths using pathRewrite function", async () => { const response = await req.get("/baz/hoge.html"); expect(response.status).toBe(200); expect(response.text).toContain("Hello"); }); - it("should pass through a proxy when a bypass function returns null", async () => { + it("should proxy requests that don't match pathFilter", async () => { const response = await req.get("/foo.js"); expect(response.status).toBe(200); expect(response.text).toContain("Hey"); }); - it("should not pass through a proxy when a bypass function returns false", async () => { - const response = await req.get("/proxyfalse"); + it("should serve static files when not matching proxy rules", async () => { + const response = await req.get("/index.html"); - expect(response.status).toBe(404); + expect(response.status).toBe(200); + expect(response.text).toContain("Hello"); }); - it("should wait if bypass returns promise", async () => { - const response = await req.get("/proxy/async"); + it("should return 404 for unmatched paths", async () => { + const response = await req.get("/proxyfalse"); - expect(response.status).toBe(200); - expect(response.text).toContain("proxy async response"); + expect(response.status).toBe(404); }); - it("should work with the 'target' option", async () => { + it("should handle pathFilter with router option", async () => { const response = await req.get("/bypass-with-target/foo.js"); expect(response.status).toBe(404); }); - it("should work with the 'target' option #2", async () => { + it("should rewrite matching pathFilter patterns with router", async () => { const response = await req.get("/bypass-with-target/index.html"); expect(response.status).toBe(200); @@ -498,13 +430,6 @@ describe("proxy option", () => { expect(response.text).toContain("from proxy2"); }); - it("should allow req, res, and next", async () => { - const response = await req.get("/api/proxy2?foo=true"); - - expect(response.statusCode).toBe(200); - expect(response.text).toBe("foo+next+function"); - }); - it("should not exist multiple close events registered", async () => { expect(maxServerListeners).toBeLessThanOrEqual(1); }); diff --git a/types/lib/Server.d.ts b/types/lib/Server.d.ts index 5ba932ce6e..dd895e2e3c 100644 --- a/types/lib/Server.d.ts +++ b/types/lib/Server.d.ts @@ -1466,7 +1466,6 @@ declare namespace Server { ClientConnection, WebSocketServer, WebSocketServerImplementation, - ByPass, ProxyConfigArrayItem, ProxyConfigArray, OpenApp, @@ -1656,16 +1655,9 @@ type WebSocketServerImplementation = { implementation: WebSocketServer; clients: ClientConnection[]; }; -type ByPass = ( - req: Request, - res: Response, - proxyConfig: ProxyConfigArrayItem, -) => any; type ProxyConfigArrayItem = { path?: HttpProxyMiddlewareOptionsFilter | undefined; context?: HttpProxyMiddlewareOptionsFilter | undefined; -} & { - bypass?: ByPass; } & HttpProxyMiddlewareOptions; type ProxyConfigArray = ( | ProxyConfigArrayItem From 6cd1752cedd9b9c00770c39172f8f4e20cba181f Mon Sep 17 00:00:00 2001 From: Sebastian Beltran Date: Tue, 17 Feb 2026 09:25:51 -0500 Subject: [PATCH 10/21] feat: use compiler.platform to determine the target (#5647) * feat: use compiler.platform to determine the target * feat: update WebSocket communication conditions and multi-compiler fallback logic * chore: update qs package to version 6.15.0 * fixup! --- lib/Server.js | 53 ++--------------------------------------------- migration-v6.md | 4 ++++ package-lock.json | 6 +++--- 3 files changed, 9 insertions(+), 54 deletions(-) diff --git a/lib/Server.js b/lib/Server.js index 93bc098643..41cbe3f654 100644 --- a/lib/Server.js +++ b/lib/Server.js @@ -560,42 +560,7 @@ class Server { * @returns {boolean} true when target is `web`, otherwise false */ static isWebTarget(compiler) { - if (compiler.platform && compiler.platform.web) { - return compiler.platform.web; - } - - // TODO improve for the next major version and keep only `webTargets` to fallback for old versions - if ( - compiler.options.externalsPresets && - compiler.options.externalsPresets.web - ) { - return true; - } - - if ( - compiler.options.resolve.conditionNames && - compiler.options.resolve.conditionNames.includes("browser") - ) { - return true; - } - - const webTargets = [ - "web", - "webworker", - "electron-preload", - "electron-renderer", - "nwjs", - "node-webkit", - - undefined, - null, - ]; - - if (Array.isArray(compiler.options.target)) { - return compiler.options.target.some((r) => webTargets.includes(r)); - } - - return webTargets.includes(/** @type {string} */ (compiler.options.target)); + return compiler.platform.web || false; } /** @@ -811,21 +776,7 @@ class Server { // Configuration with `web` preset const compilerWithWebPreset = /** @type {MultiCompiler} */ - (this.compiler).compilers.find( - (config) => - (config.options.externalsPresets && - config.options.externalsPresets.web) || - [ - "web", - "webworker", - "electron-preload", - "electron-renderer", - "node-webkit", - - undefined, - null, - ].includes(/** @type {string} */ (config.options.target)), - ); + (this.compiler).compilers.find((config) => Server.isWebTarget(config)); if (compilerWithWebPreset) { return compilerWithWebPreset.options; diff --git a/migration-v6.md b/migration-v6.md index f5aa4c0bbb..40919f82b9 100644 --- a/migration-v6.md +++ b/migration-v6.md @@ -37,6 +37,10 @@ This document serves as a migration guide for `webpack-dev-server@6.0.0`. }; ``` +- Now, webpack-dev-server adds WebSocket communication only when the `target` is set to a web-compatible environment. Previously, it also injected WebSocket communication if `resolve` contained a `conditionNames` entry with `browser` or if `externalsPresets.web` existed. + +- When retrieving the configuration in a multi-compiler setup, it will look for one that has a target compatible with a web environment. If it doesn’t find one, it will fall back to the first compiler found by webpack. + ## Deprecations - The static methods `internalIP` and `internalIPSync` were removed. Use `findIp` instead. diff --git a/package-lock.json b/package-lock.json index e977186fc8..53d6db2a54 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19791,9 +19791,9 @@ } }, "node_modules/qs": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", - "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.1.0" From 21df33f42fb86a4abafb86ec722395b72ada855b Mon Sep 17 00:00:00 2001 From: Sebastian Beltran Date: Fri, 6 Mar 2026 13:44:03 -0500 Subject: [PATCH 11/21] feat: remove cli-flags (#5634) * feat: remove deprecated CLI flags for HTTP/2, HTTPS, and web socket server options * chore: update migration guide to reflect removal of deprecated CLI options * feat: remove cli-flags * feat: remove cli-flags.d.ts --- bin/cli-flags.js | 1294 -------------------------------------- migration-v6.md | 1 + types/bin/cli-flags.d.ts | 1002 ----------------------------- 3 files changed, 1 insertion(+), 2296 deletions(-) delete mode 100644 bin/cli-flags.js delete mode 100644 types/bin/cli-flags.d.ts diff --git a/bin/cli-flags.js b/bin/cli-flags.js deleted file mode 100644 index 82d40db418..0000000000 --- a/bin/cli-flags.js +++ /dev/null @@ -1,1294 +0,0 @@ -"use strict"; - -module.exports = { - "allowed-hosts": { - configs: [ - { - type: "string", - multiple: true, - description: - "Allows to enumerate the hosts from which access to the dev server are allowed (useful when you are proxying dev server, by default is 'auto').", - path: "allowedHosts[]", - }, - { - description: - "Allows to enumerate the hosts from which access to the dev server are allowed (useful when you are proxying dev server, by default is 'auto').", - multiple: false, - path: "allowedHosts", - type: "enum", - values: ["auto", "all"], - }, - ], - description: - "Allows to enumerate the hosts from which access to the dev server are allowed (useful when you are proxying dev server, by default is 'auto').", - multiple: true, - simpleType: "string", - }, - "allowed-hosts-reset": { - configs: [ - { - type: "reset", - multiple: false, - description: - "Clear all items provided in 'allowedHosts' configuration. Allows to enumerate the hosts from which access to the dev server are allowed (useful when you are proxying dev server, by default is 'auto').", - path: "allowedHosts", - }, - ], - description: - "Clear all items provided in 'allowedHosts' configuration. Allows to enumerate the hosts from which access to the dev server are allowed (useful when you are proxying dev server, by default is 'auto').", - simpleType: "boolean", - multiple: false, - }, - bonjour: { - configs: [ - { - type: "boolean", - multiple: false, - description: - "Allows to broadcasts dev server via ZeroConf networking on start.", - negatedDescription: - "Disallows to broadcasts dev server via ZeroConf networking on start.", - path: "bonjour", - }, - ], - description: - "Allows to broadcasts dev server via ZeroConf networking on start.", - simpleType: "boolean", - multiple: false, - }, - client: { - configs: [ - { - description: - "Allows to specify options for client script in the browser or disable client script.", - negatedDescription: "Disables client script.", - multiple: false, - path: "client", - type: "enum", - values: [false], - }, - ], - description: - "Allows to specify options for client script in the browser or disable client script.", - multiple: false, - simpleType: "boolean", - }, - "client-logging": { - configs: [ - { - type: "enum", - values: ["none", "error", "warn", "info", "log", "verbose"], - multiple: false, - description: "Allows to set log level in the browser.", - path: "client.logging", - }, - ], - description: "Allows to set log level in the browser.", - simpleType: "string", - multiple: false, - }, - "client-overlay": { - configs: [ - { - type: "boolean", - multiple: false, - description: - "Enables a full-screen overlay in the browser when there are compiler errors or warnings.", - negatedDescription: - "Disables the full-screen overlay in the browser when there are compiler errors or warnings.", - path: "client.overlay", - }, - ], - description: - "Enables a full-screen overlay in the browser when there are compiler errors or warnings.", - simpleType: "boolean", - multiple: false, - }, - "client-overlay-errors": { - configs: [ - { - type: "boolean", - multiple: false, - description: - "Enables a full-screen overlay in the browser when there are compiler errors.", - negatedDescription: - "Disables the full-screen overlay in the browser when there are compiler errors.", - path: "client.overlay.errors", - }, - ], - description: - "Enables a full-screen overlay in the browser when there are compiler errors.", - simpleType: "boolean", - multiple: false, - }, - "client-overlay-trusted-types-policy-name": { - configs: [ - { - description: - "The name of a Trusted Types policy for the overlay. Defaults to 'webpack-dev-server#overlay'.", - multiple: false, - path: "client.overlay.trustedTypesPolicyName", - type: "string", - }, - ], - description: - "The name of a Trusted Types policy for the overlay. Defaults to 'webpack-dev-server#overlay'.", - multiple: false, - simpleType: "string", - }, - "client-overlay-warnings": { - configs: [ - { - type: "boolean", - multiple: false, - description: - "Enables a full-screen overlay in the browser when there are compiler warnings.", - negatedDescription: - "Disables the full-screen overlay in the browser when there are compiler warnings.", - path: "client.overlay.warnings", - }, - ], - description: - "Enables a full-screen overlay in the browser when there are compiler warnings.", - simpleType: "boolean", - multiple: false, - }, - "client-overlay-runtime-errors": { - configs: [ - { - type: "boolean", - multiple: false, - description: - "Enables a full-screen overlay in the browser when there are uncaught runtime errors.", - negatedDescription: - "Disables the full-screen overlay in the browser when there are uncaught runtime errors.", - path: "client.overlay.runtimeErrors", - }, - ], - description: - "Enables a full-screen overlay in the browser when there are uncaught runtime errors.", - simpleType: "boolean", - multiple: false, - }, - "client-progress": { - configs: [ - { - type: "boolean", - multiple: false, - description: - "Prints compilation progress in percentage in the browser.", - negatedDescription: - "Does not print compilation progress in percentage in the browser.", - path: "client.progress", - }, - ], - description: "Prints compilation progress in percentage in the browser.", - simpleType: "boolean", - multiple: false, - }, - "client-reconnect": { - configs: [ - { - type: "boolean", - multiple: false, - description: - "Tells dev-server the number of times it should try to reconnect the client.", - negatedDescription: - "Tells dev-server to not to try to reconnect the client.", - path: "client.reconnect", - }, - { - type: "number", - multiple: false, - description: - "Tells dev-server the number of times it should try to reconnect the client.", - path: "client.reconnect", - }, - ], - description: - "Tells dev-server the number of times it should try to reconnect the client.", - simpleType: "string", - multiple: false, - }, - "client-web-socket-transport": { - configs: [ - { - type: "enum", - values: ["ws"], - multiple: false, - description: - "Allows to set custom web socket transport to communicate with dev server.", - path: "client.webSocketTransport", - }, - { - type: "string", - multiple: false, - description: - "Allows to set custom web socket transport to communicate with dev server.", - path: "client.webSocketTransport", - }, - ], - description: - "Allows to set custom web socket transport to communicate with dev server.", - simpleType: "string", - multiple: false, - }, - "client-web-socket-url": { - configs: [ - { - type: "string", - multiple: false, - description: - "Allows to specify URL to web socket server (useful when you're proxying dev server and client script does not always know where to connect to).", - path: "client.webSocketURL", - }, - ], - description: - "Allows to specify URL to web socket server (useful when you're proxying dev server and client script does not always know where to connect to).", - simpleType: "string", - multiple: false, - }, - "client-web-socket-url-hostname": { - configs: [ - { - type: "string", - multiple: false, - description: - "Tells clients connected to devServer to use the provided hostname.", - path: "client.webSocketURL.hostname", - }, - ], - description: - "Tells clients connected to devServer to use the provided hostname.", - simpleType: "string", - multiple: false, - }, - "client-web-socket-url-password": { - configs: [ - { - type: "string", - multiple: false, - description: - "Tells clients connected to devServer to use the provided password to authenticate.", - path: "client.webSocketURL.password", - }, - ], - description: - "Tells clients connected to devServer to use the provided password to authenticate.", - simpleType: "string", - multiple: false, - }, - "client-web-socket-url-pathname": { - configs: [ - { - type: "string", - multiple: false, - description: - "Tells clients connected to devServer to use the provided path to connect.", - path: "client.webSocketURL.pathname", - }, - ], - description: - "Tells clients connected to devServer to use the provided path to connect.", - simpleType: "string", - multiple: false, - }, - "client-web-socket-url-port": { - configs: [ - { - type: "number", - multiple: false, - description: - "Tells clients connected to devServer to use the provided port.", - path: "client.webSocketURL.port", - }, - { - description: - "Tells clients connected to devServer to use the provided port.", - multiple: false, - path: "client.webSocketURL.port", - type: "string", - }, - ], - description: - "Tells clients connected to devServer to use the provided port.", - simpleType: "string", - multiple: false, - }, - "client-web-socket-url-protocol": { - configs: [ - { - description: - "Tells clients connected to devServer to use the provided protocol.", - multiple: false, - path: "client.webSocketURL.protocol", - type: "enum", - values: ["auto"], - }, - { - description: - "Tells clients connected to devServer to use the provided protocol.", - multiple: false, - path: "client.webSocketURL.protocol", - type: "string", - }, - ], - description: - "Tells clients connected to devServer to use the provided protocol.", - multiple: false, - simpleType: "string", - }, - "client-web-socket-url-username": { - configs: [ - { - type: "string", - multiple: false, - description: - "Tells clients connected to devServer to use the provided username to authenticate.", - path: "client.webSocketURL.username", - }, - ], - description: - "Tells clients connected to devServer to use the provided username to authenticate.", - simpleType: "string", - multiple: false, - }, - compress: { - configs: [ - { - type: "boolean", - multiple: false, - description: "Enables gzip compression for everything served.", - negatedDescription: "Disables gzip compression for everything served.", - path: "compress", - }, - ], - description: "Enables gzip compression for everything served.", - simpleType: "boolean", - multiple: false, - }, - "history-api-fallback": { - configs: [ - { - type: "boolean", - multiple: false, - description: - "Allows to proxy requests through a specified index page (by default 'index.html'), useful for Single Page Applications that utilise the HTML5 History API.", - negatedDescription: - "Disallows to proxy requests through a specified index page.", - path: "historyApiFallback", - }, - ], - description: - "Allows to proxy requests through a specified index page (by default 'index.html'), useful for Single Page Applications that utilise the HTML5 History API.", - simpleType: "boolean", - multiple: false, - }, - host: { - configs: [ - { - description: "Allows to specify a hostname to use.", - multiple: false, - path: "host", - type: "enum", - values: ["local-ip", "local-ipv4", "local-ipv6"], - }, - { - description: "Allows to specify a hostname to use.", - multiple: false, - path: "host", - type: "string", - }, - ], - description: "Allows to specify a hostname to use.", - simpleType: "string", - multiple: false, - }, - hot: { - configs: [ - { - type: "boolean", - multiple: false, - description: "Enables Hot Module Replacement.", - negatedDescription: "Disables Hot Module Replacement.", - path: "hot", - }, - { - type: "enum", - values: ["only"], - multiple: false, - description: "Enables Hot Module Replacement.", - path: "hot", - }, - ], - description: "Enables Hot Module Replacement.", - simpleType: "string", - multiple: false, - }, - http2: { - configs: [ - { - type: "boolean", - multiple: false, - description: - "Allows to serve over HTTP/2 using SPDY. Deprecated, use the `server` option.", - negatedDescription: "Does not serve over HTTP/2 using SPDY.", - path: "http2", - }, - ], - description: - "Allows to serve over HTTP/2 using SPDY. Deprecated, use the `server` option.", - simpleType: "boolean", - multiple: false, - }, - https: { - configs: [ - { - type: "boolean", - multiple: false, - description: - "Allows to configure the server's listening socket for TLS (by default, dev server will be served over HTTP). Deprecated, use the `server` option.", - negatedDescription: - "Disallows to configure the server's listening socket for TLS (by default, dev server will be served over HTTP).", - path: "https", - }, - ], - description: - "Allows to configure the server's listening socket for TLS (by default, dev server will be served over HTTP). Deprecated, use the `server` option.", - simpleType: "boolean", - multiple: false, - }, - "https-ca": { - configs: [ - { - type: "string", - multiple: true, - description: - "Path to an SSL CA certificate or content of an SSL CA certificate. Deprecated, use the `server.options.ca` option.", - path: "https.ca[]", - }, - ], - description: - "Path to an SSL CA certificate or content of an SSL CA certificate. Deprecated, use the `server.options.ca` option.", - simpleType: "string", - multiple: true, - }, - "https-ca-reset": { - configs: [ - { - description: - "Clear all items provided in 'https.ca' configuration. Path to an SSL CA certificate or content of an SSL CA certificate. Deprecated, use the `server.options.ca` option.", - multiple: false, - path: "https.ca", - type: "reset", - }, - ], - description: - "Clear all items provided in 'https.ca' configuration. Path to an SSL CA certificate or content of an SSL CA certificate. Deprecated, use the `server.options.ca` option.", - multiple: false, - simpleType: "boolean", - }, - "https-cacert": { - configs: [ - { - type: "string", - multiple: true, - description: - "Path to an SSL CA certificate or content of an SSL CA certificate. Deprecated, use the `server.options.ca` option.", - path: "https.cacert[]", - }, - ], - description: - "Path to an SSL CA certificate or content of an SSL CA certificate. Deprecated, use the `server.options.ca` option.", - simpleType: "string", - multiple: true, - }, - "https-cacert-reset": { - configs: [ - { - description: - "Clear all items provided in 'https.cacert' configuration. Path to an SSL CA certificate or content of an SSL CA certificate. Deprecated, use the `server.options.ca` option.", - multiple: false, - path: "https.cacert", - type: "reset", - }, - ], - description: - "Clear all items provided in 'https.cacert' configuration. Path to an SSL CA certificate or content of an SSL CA certificate. Deprecated, use the `server.options.ca` option.", - multiple: false, - simpleType: "boolean", - }, - "https-cert": { - configs: [ - { - type: "string", - multiple: true, - description: - "Path to an SSL certificate or content of an SSL certificate. Deprecated, use the `server.options.cert` option.", - path: "https.cert[]", - }, - ], - description: - "Path to an SSL certificate or content of an SSL certificate. Deprecated, use the `server.options.cert` option.", - simpleType: "string", - multiple: true, - }, - "https-cert-reset": { - configs: [ - { - description: - "Clear all items provided in 'https.cert' configuration. Path to an SSL certificate or content of an SSL certificate. Deprecated, use the `server.options.cert` option.", - multiple: false, - path: "https.cert", - type: "reset", - }, - ], - description: - "Clear all items provided in 'https.cert' configuration. Path to an SSL certificate or content of an SSL certificate. Deprecated, use the `server.options.cert` option.", - multiple: false, - simpleType: "boolean", - }, - "https-crl": { - configs: [ - { - description: - "Path to PEM formatted CRLs (Certificate Revocation Lists) or content of PEM formatted CRLs (Certificate Revocation Lists). Deprecated, use the `server.options.crl` option.", - multiple: true, - path: "https.crl[]", - type: "string", - }, - ], - description: - "Path to PEM formatted CRLs (Certificate Revocation Lists) or content of PEM formatted CRLs (Certificate Revocation Lists). Deprecated, use the `server.options.crl` option.", - multiple: true, - simpleType: "string", - }, - "https-crl-reset": { - configs: [ - { - description: - "Clear all items provided in 'https.crl' configuration. Path to PEM formatted CRLs (Certificate Revocation Lists) or content of PEM formatted CRLs (Certificate Revocation Lists). Deprecated, use the `server.options.crl` option.", - multiple: false, - path: "https.crl", - type: "reset", - }, - ], - description: - "Clear all items provided in 'https.crl' configuration. Path to PEM formatted CRLs (Certificate Revocation Lists) or content of PEM formatted CRLs (Certificate Revocation Lists). Deprecated, use the `server.options.crl` option.", - multiple: false, - simpleType: "boolean", - }, - "https-key": { - configs: [ - { - type: "string", - multiple: true, - description: - "Path to an SSL key or content of an SSL key. Deprecated, use the `server.options.key` option.", - path: "https.key[]", - }, - ], - description: - "Path to an SSL key or content of an SSL key. Deprecated, use the `server.options.key` option.", - simpleType: "string", - multiple: true, - }, - "https-key-reset": { - configs: [ - { - description: - "Clear all items provided in 'https.key' configuration. Path to an SSL key or content of an SSL key. Deprecated, use the `server.options.key` option.", - multiple: false, - path: "https.key", - type: "reset", - }, - ], - description: - "Clear all items provided in 'https.key' configuration. Path to an SSL key or content of an SSL key. Deprecated, use the `server.options.key` option.", - multiple: false, - simpleType: "boolean", - }, - "https-passphrase": { - configs: [ - { - type: "string", - multiple: false, - description: - "Passphrase for a pfx file. Deprecated, use the `server.options.passphrase` option.", - path: "https.passphrase", - }, - ], - description: - "Passphrase for a pfx file. Deprecated, use the `server.options.passphrase` option.", - simpleType: "string", - multiple: false, - }, - "https-pfx": { - configs: [ - { - type: "string", - multiple: true, - description: - "Path to an SSL pfx file or content of an SSL pfx file. Deprecated, use the `server.options.pfx` option.", - path: "https.pfx[]", - }, - ], - description: - "Path to an SSL pfx file or content of an SSL pfx file. Deprecated, use the `server.options.pfx` option.", - simpleType: "string", - multiple: true, - }, - "https-pfx-reset": { - configs: [ - { - description: - "Clear all items provided in 'https.pfx' configuration. Path to an SSL pfx file or content of an SSL pfx file. Deprecated, use the `server.options.pfx` option.", - multiple: false, - path: "https.pfx", - type: "reset", - }, - ], - description: - "Clear all items provided in 'https.pfx' configuration. Path to an SSL pfx file or content of an SSL pfx file. Deprecated, use the `server.options.pfx` option.", - multiple: false, - simpleType: "boolean", - }, - "https-request-cert": { - configs: [ - { - type: "boolean", - multiple: false, - description: - "Request for an SSL certificate. Deprecated, use the `server.options.requestCert` option.", - negatedDescription: "Does not request for an SSL certificate.", - path: "https.requestCert", - }, - ], - description: - "Request for an SSL certificate. Deprecated, use the `server.options.requestCert` option.", - simpleType: "boolean", - multiple: false, - }, - ipc: { - configs: [ - { - type: "string", - multiple: false, - description: "Listen to a unix socket.", - path: "ipc", - }, - { - type: "enum", - values: [true], - multiple: false, - description: "Listen to a unix socket.", - path: "ipc", - }, - ], - description: "Listen to a unix socket.", - simpleType: "string", - multiple: false, - }, - "live-reload": { - configs: [ - { - type: "boolean", - multiple: false, - description: - "Enables reload/refresh the page(s) when file changes are detected (enabled by default).", - negatedDescription: - "Disables reload/refresh the page(s) when file changes are detected (enabled by default).", - path: "liveReload", - }, - ], - description: - "Enables reload/refresh the page(s) when file changes are detected (enabled by default).", - simpleType: "boolean", - multiple: false, - }, - "magic-html": { - configs: [ - { - type: "boolean", - multiple: false, - description: - "Tells dev-server whether to enable magic HTML routes (routes corresponding to your webpack output, for example '/main' for 'main.js').", - negatedDescription: - "Disables magic HTML routes (routes corresponding to your webpack output, for example '/main' for 'main.js').", - path: "magicHtml", - }, - ], - description: - "Tells dev-server whether to enable magic HTML routes (routes corresponding to your webpack output, for example '/main' for 'main.js').", - simpleType: "boolean", - multiple: false, - }, - open: { - configs: [ - { - type: "string", - multiple: true, - description: - "Allows to configure dev server to open the browser(s) and page(s) after server had been started (set it to true to open your default browser).", - path: "open[]", - }, - { - type: "boolean", - multiple: false, - description: - "Allows to configure dev server to open the browser(s) and page(s) after server had been started (set it to true to open your default browser).", - negatedDescription: "Does not open the default browser.", - path: "open", - }, - ], - description: - "Allows to configure dev server to open the browser(s) and page(s) after server had been started (set it to true to open your default browser).", - simpleType: "string", - multiple: true, - }, - "open-app": { - configs: [ - { - type: "string", - multiple: true, - description: - "Open specified browser. Deprecated: please use '--open-app-name'.", - path: "open[].app", - }, - ], - description: - "Open specified browser. Deprecated: please use '--open-app-name'.", - simpleType: "string", - multiple: true, - }, - "open-app-name": { - configs: [ - { - type: "string", - multiple: true, - description: "Open specified browser.", - path: "open[].app.name", - }, - { - type: "string", - multiple: true, - description: "Open specified browser.", - path: "open.app.name[]", - }, - ], - description: "Open specified browser.", - simpleType: "string", - multiple: true, - }, - "open-app-name-reset": { - configs: [ - { - type: "reset", - multiple: false, - description: - "Clear all items provided in 'open.app.name' configuration. Open specified browser.", - path: "open.app.name", - }, - ], - description: - "Clear all items provided in 'open.app.name' configuration. Open specified browser.", - simpleType: "boolean", - multiple: false, - }, - "open-reset": { - configs: [ - { - type: "reset", - multiple: false, - description: - "Clear all items provided in 'open' configuration. Allows to configure dev server to open the browser(s) and page(s) after server had been started (set it to true to open your default browser).", - path: "open", - }, - ], - description: - "Clear all items provided in 'open' configuration. Allows to configure dev server to open the browser(s) and page(s) after server had been started (set it to true to open your default browser).", - simpleType: "boolean", - multiple: false, - }, - "open-target": { - configs: [ - { - type: "string", - multiple: true, - description: "Opens specified page in browser.", - path: "open[].target", - }, - { - type: "string", - multiple: true, - description: "Opens specified page in browser.", - path: "open.target[]", - }, - ], - description: "Opens specified page in browser.", - simpleType: "string", - multiple: true, - }, - "open-target-reset": { - configs: [ - { - type: "reset", - multiple: false, - description: - "Clear all items provided in 'open.target' configuration. Opens specified page in browser.", - path: "open.target", - }, - ], - description: - "Clear all items provided in 'open.target' configuration. Opens specified page in browser.", - simpleType: "boolean", - multiple: false, - }, - port: { - configs: [ - { - type: "number", - multiple: false, - description: "Allows to specify a port to use.", - path: "port", - }, - { - type: "string", - multiple: false, - description: "Allows to specify a port to use.", - path: "port", - }, - { - type: "enum", - values: ["auto"], - multiple: false, - description: "Allows to specify a port to use.", - path: "port", - }, - ], - description: "Allows to specify a port to use.", - simpleType: "string", - multiple: false, - }, - "server-options-ca": { - configs: [ - { - description: - "Path to an SSL CA certificate or content of an SSL CA certificate.", - multiple: true, - path: "server.options.ca[]", - type: "string", - }, - ], - description: - "Path to an SSL CA certificate or content of an SSL CA certificate.", - multiple: true, - simpleType: "string", - }, - "server-options-ca-reset": { - configs: [ - { - description: - "Clear all items provided in 'server.options.ca' configuration. Path to an SSL CA certificate or content of an SSL CA certificate.", - multiple: false, - path: "server.options.ca", - type: "reset", - }, - ], - description: - "Clear all items provided in 'server.options.ca' configuration. Path to an SSL CA certificate or content of an SSL CA certificate.", - multiple: false, - simpleType: "boolean", - }, - "server-options-cacert": { - configs: [ - { - description: - "Path to an SSL CA certificate or content of an SSL CA certificate. Deprecated, use the `server.options.ca` option.", - multiple: true, - path: "server.options.cacert[]", - type: "string", - }, - ], - description: - "Path to an SSL CA certificate or content of an SSL CA certificate. Deprecated, use the `server.options.ca` option.", - multiple: true, - simpleType: "string", - }, - "server-options-cacert-reset": { - configs: [ - { - description: - "Clear all items provided in 'server.options.cacert' configuration. Path to an SSL CA certificate or content of an SSL CA certificate. Deprecated, use the `server.options.ca` option.", - multiple: false, - path: "server.options.cacert", - type: "reset", - }, - ], - description: - "Clear all items provided in 'server.options.cacert' configuration. Path to an SSL CA certificate or content of an SSL CA certificate. Deprecated, use the `server.options.ca` option.", - multiple: false, - simpleType: "boolean", - }, - "server-options-cert": { - configs: [ - { - description: - "Path to an SSL certificate or content of an SSL certificate.", - multiple: true, - path: "server.options.cert[]", - type: "string", - }, - ], - description: "Path to an SSL certificate or content of an SSL certificate.", - multiple: true, - simpleType: "string", - }, - "server-options-cert-reset": { - configs: [ - { - description: - "Clear all items provided in 'server.options.cert' configuration. Path to an SSL certificate or content of an SSL certificate.", - multiple: false, - path: "server.options.cert", - type: "reset", - }, - ], - description: - "Clear all items provided in 'server.options.cert' configuration. Path to an SSL certificate or content of an SSL certificate.", - multiple: false, - simpleType: "boolean", - }, - "server-options-crl": { - configs: [ - { - description: - "Path to PEM formatted CRLs (Certificate Revocation Lists) or content of PEM formatted CRLs (Certificate Revocation Lists).", - multiple: true, - path: "server.options.crl[]", - type: "string", - }, - ], - description: - "Path to PEM formatted CRLs (Certificate Revocation Lists) or content of PEM formatted CRLs (Certificate Revocation Lists).", - multiple: true, - simpleType: "string", - }, - "server-options-crl-reset": { - configs: [ - { - description: - "Clear all items provided in 'server.options.crl' configuration. Path to PEM formatted CRLs (Certificate Revocation Lists) or content of PEM formatted CRLs (Certificate Revocation Lists).", - multiple: false, - path: "server.options.crl", - type: "reset", - }, - ], - description: - "Clear all items provided in 'server.options.crl' configuration. Path to PEM formatted CRLs (Certificate Revocation Lists) or content of PEM formatted CRLs (Certificate Revocation Lists).", - multiple: false, - simpleType: "boolean", - }, - "server-options-key": { - configs: [ - { - description: "Path to an SSL key or content of an SSL key.", - multiple: true, - path: "server.options.key[]", - type: "string", - }, - ], - description: "Path to an SSL key or content of an SSL key.", - multiple: true, - simpleType: "string", - }, - "server-options-key-reset": { - configs: [ - { - description: - "Clear all items provided in 'server.options.key' configuration. Path to an SSL key or content of an SSL key.", - multiple: false, - path: "server.options.key", - type: "reset", - }, - ], - description: - "Clear all items provided in 'server.options.key' configuration. Path to an SSL key or content of an SSL key.", - multiple: false, - simpleType: "boolean", - }, - "server-options-passphrase": { - configs: [ - { - description: "Passphrase for a pfx file.", - multiple: false, - path: "server.options.passphrase", - type: "string", - }, - ], - description: "Passphrase for a pfx file.", - multiple: false, - simpleType: "string", - }, - "server-options-pfx": { - configs: [ - { - description: "Path to an SSL pfx file or content of an SSL pfx file.", - multiple: true, - path: "server.options.pfx[]", - type: "string", - }, - ], - description: "Path to an SSL pfx file or content of an SSL pfx file.", - multiple: true, - simpleType: "string", - }, - "server-options-pfx-reset": { - configs: [ - { - description: - "Clear all items provided in 'server.options.pfx' configuration. Path to an SSL pfx file or content of an SSL pfx file.", - multiple: false, - path: "server.options.pfx", - type: "reset", - }, - ], - description: - "Clear all items provided in 'server.options.pfx' configuration. Path to an SSL pfx file or content of an SSL pfx file.", - multiple: false, - simpleType: "boolean", - }, - "server-options-request-cert": { - configs: [ - { - description: "Request for an SSL certificate.", - negatedDescription: "Does not request for an SSL certificate.", - multiple: false, - path: "server.options.requestCert", - type: "boolean", - }, - ], - description: "Request for an SSL certificate.", - multiple: false, - simpleType: "boolean", - }, - "server-type": { - configs: [ - { - description: "Allows to set server and options (by default 'http').", - multiple: false, - path: "server.type", - type: "enum", - values: ["http", "https"], - }, - ], - description: "Allows to set server and options (by default 'http').", - multiple: false, - simpleType: "string", - }, - static: { - configs: [ - { - type: "string", - multiple: true, - description: - "Allows to configure options for serving static files from directory (by default 'public' directory).", - path: "static[]", - }, - { - type: "boolean", - multiple: false, - description: - "Allows to configure options for serving static files from directory (by default 'public' directory).", - negatedDescription: - "Disallows to configure options for serving static files from directory.", - path: "static", - }, - ], - description: - "Allows to configure options for serving static files from directory (by default 'public' directory).", - simpleType: "string", - multiple: true, - }, - "static-directory": { - configs: [ - { - type: "string", - multiple: true, - description: "Directory for static contents.", - path: "static[].directory", - }, - ], - description: "Directory for static contents.", - simpleType: "string", - multiple: true, - }, - "static-public-path": { - configs: [ - { - type: "string", - multiple: true, - description: - "The static files will be available in the browser under this public path.", - path: "static[].publicPath", - }, - { - type: "string", - multiple: true, - description: - "The static files will be available in the browser under this public path.", - path: "static.publicPath[]", - }, - ], - description: - "The static files will be available in the browser under this public path.", - simpleType: "string", - multiple: true, - }, - "static-public-path-reset": { - configs: [ - { - type: "reset", - multiple: false, - description: - "Clear all items provided in 'static.publicPath' configuration. The static files will be available in the browser under this public path.", - path: "static.publicPath", - }, - ], - description: - "Clear all items provided in 'static.publicPath' configuration. The static files will be available in the browser under this public path.", - simpleType: "boolean", - multiple: false, - }, - "static-reset": { - configs: [ - { - type: "reset", - multiple: false, - description: - "Clear all items provided in 'static' configuration. Allows to configure options for serving static files from directory (by default 'public' directory).", - path: "static", - }, - ], - description: - "Clear all items provided in 'static' configuration. Allows to configure options for serving static files from directory (by default 'public' directory).", - simpleType: "boolean", - multiple: false, - }, - "static-serve-index": { - configs: [ - { - type: "boolean", - multiple: true, - description: - "Tells dev server to use serveIndex middleware when enabled.", - negatedDescription: - "Does not tell dev server to use serveIndex middleware.", - path: "static[].serveIndex", - }, - ], - description: "Tells dev server to use serveIndex middleware when enabled.", - simpleType: "boolean", - multiple: true, - }, - "static-watch": { - configs: [ - { - type: "boolean", - multiple: true, - description: "Watches for files in static content directory.", - negatedDescription: - "Does not watch for files in static content directory.", - path: "static[].watch", - }, - ], - description: "Watches for files in static content directory.", - simpleType: "boolean", - multiple: true, - }, - "watch-files": { - configs: [ - { - type: "string", - multiple: true, - description: - "Allows to configure list of globs/directories/files to watch for file changes.", - path: "watchFiles[]", - }, - ], - description: - "Allows to configure list of globs/directories/files to watch for file changes.", - simpleType: "string", - multiple: true, - }, - "watch-files-reset": { - configs: [ - { - type: "reset", - multiple: false, - description: - "Clear all items provided in 'watchFiles' configuration. Allows to configure list of globs/directories/files to watch for file changes.", - path: "watchFiles", - }, - ], - description: - "Clear all items provided in 'watchFiles' configuration. Allows to configure list of globs/directories/files to watch for file changes.", - simpleType: "boolean", - multiple: false, - }, - "web-socket-server": { - configs: [ - { - description: - "Deprecated: please use '--web-socket-server-type' option.", - negatedDescription: "Disallows to set web socket server and options.", - multiple: false, - path: "webSocketServer", - type: "enum", - values: [false], - }, - { - description: - "Deprecated: please use '--web-socket-server-type' option.", - multiple: false, - path: "webSocketServer", - type: "enum", - values: ["ws"], - }, - { - description: - "Allows to set web socket server and options (by default 'ws').", - multiple: false, - path: "webSocketServer", - type: "string", - }, - ], - description: - "Deprecated: please use '--web-socket-server-type' option. Allows to set web socket server and options (by default 'ws').", - simpleType: "string", - multiple: false, - }, - "web-socket-server-type": { - configs: [ - { - description: - "Allows to set web socket server and options (by default 'ws').", - multiple: false, - path: "webSocketServer.type", - type: "enum", - values: ["ws"], - }, - { - description: - "Allows to set web socket server and options (by default 'ws').", - multiple: false, - path: "webSocketServer.type", - type: "string", - }, - ], - description: - "Allows to set web socket server and options (by default 'ws').", - simpleType: "string", - multiple: false, - }, -}; diff --git a/migration-v6.md b/migration-v6.md index 40919f82b9..5c768ab123 100644 --- a/migration-v6.md +++ b/migration-v6.md @@ -57,6 +57,7 @@ This document serves as a migration guide for `webpack-dev-server@6.0.0`. const ip = Server.findIp("v4", true); ``` +- Support for webpack-dev-server using CLI flags has been removed. Please use the latest version of webpack-cli. - The bypass function in the proxy configuration was removed. Use the `pathFilter` and `router` for similar functionality. See the example below. v4: diff --git a/types/bin/cli-flags.d.ts b/types/bin/cli-flags.d.ts deleted file mode 100644 index 4c50ae6e5a..0000000000 --- a/types/bin/cli-flags.d.ts +++ /dev/null @@ -1,1002 +0,0 @@ -declare const _exports: { - "allowed-hosts": { - configs: ( - | { - type: string; - multiple: boolean; - description: string; - path: string; - values?: undefined; - } - | { - description: string; - multiple: boolean; - path: string; - type: string; - values: string[]; - } - )[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "allowed-hosts-reset": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - bonjour: { - configs: { - type: string; - multiple: boolean; - description: string; - negatedDescription: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - client: { - configs: { - description: string; - negatedDescription: string; - multiple: boolean; - path: string; - type: string; - values: boolean[]; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "client-logging": { - configs: { - type: string; - values: string[]; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "client-overlay": { - configs: { - type: string; - multiple: boolean; - description: string; - negatedDescription: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "client-overlay-errors": { - configs: { - type: string; - multiple: boolean; - description: string; - negatedDescription: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "client-overlay-trusted-types-policy-name": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "client-overlay-warnings": { - configs: { - type: string; - multiple: boolean; - description: string; - negatedDescription: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "client-overlay-runtime-errors": { - configs: { - type: string; - multiple: boolean; - description: string; - negatedDescription: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "client-progress": { - configs: { - type: string; - multiple: boolean; - description: string; - negatedDescription: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "client-reconnect": { - configs: ( - | { - type: string; - multiple: boolean; - description: string; - negatedDescription: string; - path: string; - } - | { - type: string; - multiple: boolean; - description: string; - path: string; - negatedDescription?: undefined; - } - )[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "client-web-socket-transport": { - configs: ( - | { - type: string; - values: string[]; - multiple: boolean; - description: string; - path: string; - } - | { - type: string; - multiple: boolean; - description: string; - path: string; - values?: undefined; - } - )[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "client-web-socket-url": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "client-web-socket-url-hostname": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "client-web-socket-url-password": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "client-web-socket-url-pathname": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "client-web-socket-url-port": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "client-web-socket-url-protocol": { - configs: ( - | { - description: string; - multiple: boolean; - path: string; - type: string; - values: string[]; - } - | { - description: string; - multiple: boolean; - path: string; - type: string; - values?: undefined; - } - )[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "client-web-socket-url-username": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - compress: { - configs: { - type: string; - multiple: boolean; - description: string; - negatedDescription: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "history-api-fallback": { - configs: { - type: string; - multiple: boolean; - description: string; - negatedDescription: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - host: { - configs: ( - | { - description: string; - multiple: boolean; - path: string; - type: string; - values: string[]; - } - | { - description: string; - multiple: boolean; - path: string; - type: string; - values?: undefined; - } - )[]; - description: string; - simpleType: string; - multiple: boolean; - }; - hot: { - configs: ( - | { - type: string; - multiple: boolean; - description: string; - negatedDescription: string; - path: string; - values?: undefined; - } - | { - type: string; - values: string[]; - multiple: boolean; - description: string; - path: string; - negatedDescription?: undefined; - } - )[]; - description: string; - simpleType: string; - multiple: boolean; - }; - http2: { - configs: { - type: string; - multiple: boolean; - description: string; - negatedDescription: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - https: { - configs: { - type: string; - multiple: boolean; - description: string; - negatedDescription: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "https-ca": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "https-ca-reset": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "https-cacert": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "https-cacert-reset": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "https-cert": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "https-cert-reset": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "https-crl": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "https-crl-reset": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "https-key": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "https-key-reset": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "https-passphrase": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "https-pfx": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "https-pfx-reset": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "https-request-cert": { - configs: { - type: string; - multiple: boolean; - description: string; - negatedDescription: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - ipc: { - configs: ( - | { - type: string; - multiple: boolean; - description: string; - path: string; - values?: undefined; - } - | { - type: string; - values: boolean[]; - multiple: boolean; - description: string; - path: string; - } - )[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "live-reload": { - configs: { - type: string; - multiple: boolean; - description: string; - negatedDescription: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "magic-html": { - configs: { - type: string; - multiple: boolean; - description: string; - negatedDescription: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - open: { - configs: ( - | { - type: string; - multiple: boolean; - description: string; - path: string; - negatedDescription?: undefined; - } - | { - type: string; - multiple: boolean; - description: string; - negatedDescription: string; - path: string; - } - )[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "open-app": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "open-app-name": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "open-app-name-reset": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "open-reset": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "open-target": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "open-target-reset": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - port: { - configs: ( - | { - type: string; - multiple: boolean; - description: string; - path: string; - values?: undefined; - } - | { - type: string; - values: string[]; - multiple: boolean; - description: string; - path: string; - } - )[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "server-options-ca": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "server-options-ca-reset": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "server-options-cacert": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "server-options-cacert-reset": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "server-options-cert": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "server-options-cert-reset": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "server-options-crl": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "server-options-crl-reset": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "server-options-key": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "server-options-key-reset": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "server-options-passphrase": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "server-options-pfx": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "server-options-pfx-reset": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "server-options-request-cert": { - configs: { - description: string; - negatedDescription: string; - multiple: boolean; - path: string; - type: string; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - "server-type": { - configs: { - description: string; - multiple: boolean; - path: string; - type: string; - values: string[]; - }[]; - description: string; - multiple: boolean; - simpleType: string; - }; - static: { - configs: ( - | { - type: string; - multiple: boolean; - description: string; - path: string; - negatedDescription?: undefined; - } - | { - type: string; - multiple: boolean; - description: string; - negatedDescription: string; - path: string; - } - )[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "static-directory": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "static-public-path": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "static-public-path-reset": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "static-reset": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "static-serve-index": { - configs: { - type: string; - multiple: boolean; - description: string; - negatedDescription: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "static-watch": { - configs: { - type: string; - multiple: boolean; - description: string; - negatedDescription: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "watch-files": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "watch-files-reset": { - configs: { - type: string; - multiple: boolean; - description: string; - path: string; - }[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "web-socket-server": { - configs: ( - | { - description: string; - negatedDescription: string; - multiple: boolean; - path: string; - type: string; - values: boolean[]; - } - | { - description: string; - multiple: boolean; - path: string; - type: string; - values: string[]; - negatedDescription?: undefined; - } - | { - description: string; - multiple: boolean; - path: string; - type: string; - negatedDescription?: undefined; - values?: undefined; - } - )[]; - description: string; - simpleType: string; - multiple: boolean; - }; - "web-socket-server-type": { - configs: ( - | { - description: string; - multiple: boolean; - path: string; - type: string; - values: string[]; - } - | { - description: string; - multiple: boolean; - path: string; - type: string; - values?: undefined; - } - )[]; - description: string; - simpleType: string; - multiple: boolean; - }; -}; -export = _exports; From 3c09a1a9a11026bce1500bbee47157ea7c2b78e2 Mon Sep 17 00:00:00 2001 From: Sebastian Beltran Date: Mon, 30 Mar 2026 13:08:30 -0500 Subject: [PATCH 12/21] chore: update webpack-dev-middleware@8 (#5654) * chore: update webpack-dev-middleware * feat: sync originalUrl in middleware for webpack-dev-middleware compatibility --- lib/Server.js | 15 +++ package-lock.json | 328 +++++++++++++++++++++++++++++++++++++++++++--- package.json | 2 +- 3 files changed, 327 insertions(+), 18 deletions(-) diff --git a/lib/Server.js b/lib/Server.js index 41cbe3f654..cb7da1a6de 100644 --- a/lib/Server.js +++ b/lib/Server.js @@ -2242,6 +2242,21 @@ class Server { ), }); + // Sync originalUrl with the rewritten url so that webpack-dev-middleware + // (which reads originalUrl) can serve the correct file after the rewrite. + middlewares.push({ + name: "connect-history-api-fallback-url-sync", + /** + * @param {Request} req request + * @param {Response} res response + * @param {NextFunction} next next function + */ + middleware: (req, res, next) => { + req.originalUrl = req.url; + next(); + }, + }); + // include our middleware to ensure // it is able to handle '/index.html' request after redirect middlewares.push({ diff --git a/package-lock.json b/package-lock.json index 53d6db2a54..c56ba32934 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,7 +31,7 @@ "schema-utils": "^4.2.0", "selfsigned": "^5.5.0", "serve-index": "^1.9.1", - "webpack-dev-middleware": "^7.4.5", + "webpack-dev-middleware": "^8.0.2", "ws": "^8.18.0" }, "bin": { @@ -4255,6 +4255,285 @@ "tslib": "2" } }, + "node_modules/@jsonjoy.com/fs-core": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.57.1.tgz", + "integrity": "sha512-YrEi/ZPmgc+GfdO0esBF04qv8boK9Dg9WpRQw/+vM8Qt3nnVIJWIa8HwZ/LXVZ0DB11XUROM8El/7yYTJX+WtA==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-node-builtins": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.1", + "thingies": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-fsa": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.57.1.tgz", + "integrity": "sha512-ooEPvSW/HQDivPDPZMibHGKZf/QS4WRir1czGZmXmp3MsQqLECZEpN0JobrD8iV9BzsuwdIv+PxtWX9WpPLsIA==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-core": "4.57.1", + "@jsonjoy.com/fs-node-builtins": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.1", + "thingies": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.57.1.tgz", + "integrity": "sha512-3YaKhP8gXEKN+2O49GLNfNb5l2gbnCFHyAaybbA2JkkbQP3dpdef7WcUaHAulg/c5Dg4VncHsA3NWAUSZMR5KQ==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-core": "4.57.1", + "@jsonjoy.com/fs-node-builtins": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.1", + "@jsonjoy.com/fs-print": "4.57.1", + "@jsonjoy.com/fs-snapshot": "4.57.1", + "glob-to-regex.js": "^1.0.0", + "thingies": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node-builtins": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.57.1.tgz", + "integrity": "sha512-XHkFKQ5GSH3uxm8c3ZYXVrexGdscpWKIcMWKFQpMpMJc8gA3AwOMBJXJlgpdJqmrhPyQXxaY9nbkNeYpacC0Og==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node-to-fsa": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.57.1.tgz", + "integrity": "sha512-pqGHyWWzNck4jRfaGV39hkqpY5QjRUQ/nRbNT7FYbBa0xf4bDG+TE1Gt2KWZrSkrkZZDE3qZUjYMbjwSliX6pg==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-fsa": "4.57.1", + "@jsonjoy.com/fs-node-builtins": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.1" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node-utils": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.57.1.tgz", + "integrity": "sha512-vp+7ZzIB8v43G+GLXTS4oDUSQmhAsRz532QmmWBbdYA20s465JvwhkSFvX9cVTqRRAQg+vZ7zWDaIEh0lFe2gw==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-node-builtins": "4.57.1" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-print": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.57.1.tgz", + "integrity": "sha512-Ynct7ZJmfk6qoXDOKfpovNA36ITUx8rChLmRQtW08J73VOiuNsU8PB6d/Xs7fxJC2ohWR3a5AqyjmLojfrw5yw==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-node-utils": "4.57.1", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.57.1.tgz", + "integrity": "sha512-/oG8xBNFMbDXTq9J7vepSA1kerS5vpgd3p5QZSPd+nX59uwodGJftI51gDYyHRpP57P3WCQf7LHtBYPqwUg2Bg==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "^17.65.0", + "@jsonjoy.com/fs-node-utils": "4.57.1", + "@jsonjoy.com/json-pack": "^17.65.0", + "@jsonjoy.com/util": "^17.65.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/base64": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-17.67.0.tgz", + "integrity": "sha512-5SEsJGsm15aP8TQGkDfJvz9axgPwAEm98S5DxOuYe8e1EbfajcDmgeXXzccEjh+mLnjqEKrkBdjHWS5vFNwDdw==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/buffers": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-17.67.0.tgz", + "integrity": "sha512-tfExRpYxBvi32vPs9ZHaTjSP4fHAfzSmcahOfNxtvGHcyJel+aibkPlGeBB+7AoC6hL7lXIE++8okecBxx7lcw==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/codegen": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-17.67.0.tgz", + "integrity": "sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pack": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-17.67.0.tgz", + "integrity": "sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "17.67.0", + "@jsonjoy.com/buffers": "17.67.0", + "@jsonjoy.com/codegen": "17.67.0", + "@jsonjoy.com/json-pointer": "17.67.0", + "@jsonjoy.com/util": "17.67.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pointer": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-17.67.0.tgz", + "integrity": "sha512-+iqOFInH+QZGmSuaybBUNdh7yvNrXvqR+h3wjXm0N/3JK1EyyFAeGJvqnmQL61d1ARLlk/wJdFKSL+LHJ1eaUA==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/util": "17.67.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/util": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-17.67.0.tgz", + "integrity": "sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "17.67.0", + "@jsonjoy.com/codegen": "17.67.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, "node_modules/@jsonjoy.com/json-pack": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.11.0.tgz", @@ -7555,6 +7834,7 @@ "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, "license": "MIT" }, "node_modules/combined-stream": { @@ -17367,11 +17647,19 @@ } }, "node_modules/memfs": { - "version": "4.51.0", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.51.0.tgz", - "integrity": "sha512-4zngfkVM/GpIhC8YazOsM6E8hoB33NP0BCESPOA6z7qaL6umPJNqkO8CNYaLV2FB2MV6H1O3x2luHHOSqppv+A==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.57.1.tgz", + "integrity": "sha512-WvzrWPwMQT+PtbX2Et64R4qXKK0fj/8pO85MrUCzymX3twwCiJCdvntW3HdhG1teLJcHDDLIKx5+c3HckWYZtQ==", "license": "Apache-2.0", "dependencies": { + "@jsonjoy.com/fs-core": "4.57.1", + "@jsonjoy.com/fs-fsa": "4.57.1", + "@jsonjoy.com/fs-node": "4.57.1", + "@jsonjoy.com/fs-node-builtins": "4.57.1", + "@jsonjoy.com/fs-node-to-fsa": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.1", + "@jsonjoy.com/fs-print": "4.57.1", + "@jsonjoy.com/fs-snapshot": "4.57.1", "@jsonjoy.com/json-pack": "^1.11.0", "@jsonjoy.com/util": "^1.9.0", "glob-to-regex.js": "^1.0.1", @@ -17382,6 +17670,9 @@ "funding": { "type": "github", "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, "node_modules/memorystream": { @@ -23203,27 +23494,26 @@ } }, "node_modules/webpack-dev-middleware": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.5.tgz", - "integrity": "sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-8.0.2.tgz", + "integrity": "sha512-MCBgoI025uJEcIYDT+R3mXUnhZA/GAxqwngADOwmHxMhQUgDztGow6AmyeEfI8L9KG2pDVg2kU6vjFnbCBH5Pg==", "license": "MIT", "dependencies": { - "colorette": "^2.0.10", - "memfs": "^4.43.1", - "mime-types": "^3.0.1", + "memfs": "^4.56.10", + "mime-types": "^3.0.2", "on-finished": "^2.4.1", "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" + "schema-utils": "^4.3.3" }, "engines": { - "node": ">= 18.12.0" + "node": ">= 20.9.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^5.0.0" + "webpack": "^5.101.0" }, "peerDependenciesMeta": { "webpack": { @@ -23232,15 +23522,19 @@ } }, "node_modules/webpack-dev-middleware/node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", "license": "MIT", "dependencies": { "mime-db": "^1.54.0" }, "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/webpack-merge": { diff --git a/package.json b/package.json index 265269b6c7..d8d40f5b7e 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "schema-utils": "^4.2.0", "selfsigned": "^5.5.0", "serve-index": "^1.9.1", - "webpack-dev-middleware": "^7.4.5", + "webpack-dev-middleware": "^8.0.2", "ws": "^8.18.0" }, "devDependencies": { From 112197701327bc7896e1fce31f4967eb617ba550 Mon Sep 17 00:00:00 2001 From: Sebastian Beltran Date: Mon, 30 Mar 2026 14:35:28 -0500 Subject: [PATCH 13/21] chore: bump dependencies (#5655) * chore: bump dependencies * chore: bump vulnerables dependencies --- package-lock.json | 519 ++++++++++++++++++++++------------------------ package.json | 46 ++-- 2 files changed, 268 insertions(+), 297 deletions(-) diff --git a/package-lock.json b/package-lock.json index c56ba32934..a678e12e5f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,44 +11,44 @@ "dependencies": { "@types/bonjour": "^3.5.13", "@types/connect-history-api-fallback": "^1.5.4", - "@types/express": "^5.0.3", - "@types/express-serve-static-core": "^5.0.7", + "@types/express": "^5.0.6", + "@types/express-serve-static-core": "^5.1.1", "@types/serve-index": "^1.9.4", - "@types/serve-static": "^1.15.8", - "@types/ws": "^8.5.10", + "@types/serve-static": "^2.2.0", + "@types/ws": "^8.18.1", "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.2.1", + "bonjour-service": "^1.3.0", "chokidar": "^3.6.0", "compression": "^1.8.1", "connect-history-api-fallback": "^2.0.0", - "express": "^5.1.0", - "graceful-fs": "^4.2.6", + "express": "^5.2.1", + "graceful-fs": "^4.2.11", "http-proxy-middleware": "^3.0.5", - "ipaddr.js": "^2.1.0", - "launch-editor": "^2.6.1", - "open": "^10.0.3", - "p-retry": "^6.2.0", - "schema-utils": "^4.2.0", + "ipaddr.js": "^2.3.0", + "launch-editor": "^2.13.2", + "open": "^11.0.0", + "p-retry": "^7.1.1", + "schema-utils": "^4.3.3", "selfsigned": "^5.5.0", - "serve-index": "^1.9.1", + "serve-index": "^1.9.2", "webpack-dev-middleware": "^8.0.2", - "ws": "^8.18.0" + "ws": "^8.20.0" }, "bin": { "webpack-dev-server": "bin/webpack-dev-server.js" }, "devDependencies": { - "@babel/cli": "^7.25.9", - "@babel/core": "^7.25.9", - "@babel/eslint-parser": "^7.25.9", - "@babel/plugin-transform-object-assign": "^7.25.9", - "@babel/plugin-transform-runtime": "^7.25.9", + "@babel/cli": "^7.28.6", + "@babel/core": "^7.29.0", + "@babel/eslint-parser": "^7.28.6", + "@babel/plugin-transform-object-assign": "^7.27.1", + "@babel/plugin-transform-runtime": "^7.29.0", "@babel/preset-env": "^7.25.9", - "@babel/runtime": "^7.25.9", + "@babel/runtime": "^7.29.2", "@commitlint/cli": "^19.5.0", "@commitlint/config-conventional": "^19.5.0", "@eslint/markdown": "^7.0.0", - "@hono/node-server": "^1.13.3", + "@hono/node-server": "^1.19.12", "@types/compression": "^1.7.2", "@types/graceful-fs": "^4.1.9", "@types/node": "^24.0.14", @@ -69,7 +69,7 @@ "eslint-plugin-jsdoc": "^51.3.4", "eslint-plugin-n": "^17.21.0", "execa": "^5.1.1", - "hono": "^4.6.8", + "hono": "^4.12.9", "html-webpack-plugin": "^5.6.3", "http-proxy": "^1.18.1", "husky": "^9.1.6", @@ -94,7 +94,7 @@ "typescript": "^5.7.2", "typescript-eslint": "^8.36.0", "wait-for-expect": "^3.0.2", - "webpack": "^5.104.1", + "webpack": "^5.105.4", "webpack-cli": "^6.0.1", "webpack-merge": "^6.0.1" }, @@ -118,9 +118,9 @@ } }, "node_modules/@babel/cli": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.28.3.tgz", - "integrity": "sha512-n1RU5vuCX0CsaqaXm9I0KUCNKNQMy5epmzl/xdSSm70bSqhg9GWhgeosypyQLc0bK24+Xpk1WGzZlI9pJtkZdg==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.28.6.tgz", + "integrity": "sha512-6EUNcuBbNkj08Oj4gAZ+BUU8yLCgKzgVX4gaTh09Ya2C8ICM4P+G30g4m3akRxSYAp3A/gnWchrNst7px4/nUQ==", "dev": true, "license": "MIT", "dependencies": { @@ -148,13 +148,13 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -163,9 +163,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", - "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", "dev": true, "license": "MIT", "engines": { @@ -173,22 +173,22 @@ } }, "node_modules/@babel/core": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", - "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.28.3", - "@babel/helpers": "^7.28.4", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.5", - "@babel/types": "^7.28.5", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -205,9 +205,9 @@ } }, "node_modules/@babel/eslint-parser": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.28.5.tgz", - "integrity": "sha512-fcdRcWahONYo+JRnJg1/AekOacGvKx12Gu0qXJXFi2WBqQA1i7+O5PaxRB7kxE/Op94dExnCiiar6T09pvdHpA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.28.6.tgz", + "integrity": "sha512-QGmsKi2PBO/MHSQk+AAgA9R6OHQr+VqnniFE0eMWZcVcfBZoA2dKn2hUsl3Csg/Plt9opRUWdY7//VXsrIlEiA==", "dev": true, "license": "MIT", "dependencies": { @@ -224,14 +224,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", - "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.5", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -254,13 +254,13 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.2", + "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -352,29 +352,29 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", - "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", - "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.28.3" + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -397,9 +397,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", - "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", "dev": true, "license": "MIT", "engines": { @@ -502,27 +502,27 @@ } }, "node_modules/@babel/helpers": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", - "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.4" + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", - "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.28.5" + "@babel/types": "^7.29.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -1625,14 +1625,14 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.5.tgz", - "integrity": "sha512-20NUVgOrinudkIBzQ2bNxP08YpKprUkRTiRSd2/Z5GOdPImJGkoN4Z7IQe1T5AdyKI1i5L6RBmluqdSzvaq9/w==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.29.0.tgz", + "integrity": "sha512-jlaRT5dJtMaMCV6fAuLbsQMSwz/QkvaHOHOSXRitGGwSpR1blCY4KUKoyP2tYO8vJcqYe8cEj96cqSztv3uF9w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", "babel-plugin-polyfill-corejs2": "^0.4.14", "babel-plugin-polyfill-corejs3": "^0.13.0", "babel-plugin-polyfill-regenerator": "^0.6.5", @@ -1894,9 +1894,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", - "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz", + "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==", "dev": true, "license": "MIT", "engines": { @@ -1904,33 +1904,33 @@ } }, "node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", - "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", "debug": "^4.3.1" }, "engines": { @@ -1938,9 +1938,9 @@ } }, "node_modules/@babel/types": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", - "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", "dev": true, "license": "MIT", "dependencies": { @@ -3002,9 +3002,9 @@ } }, "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", "dev": true, "license": "MIT", "dependencies": { @@ -3148,9 +3148,9 @@ } }, "node_modules/@hono/node-server": { - "version": "1.19.6", - "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.6.tgz", - "integrity": "sha512-Shz/KjlIeAhfiuE93NDKVdZ7HdBVLQAfdbaXEaoAVO3ic9ibRSLGIQGkcBbFyuLr+7/1D5ZCINM8B+6IvXeMtw==", + "version": "1.19.12", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.12.tgz", + "integrity": "sha512-txsUW4SQ1iilgE0l9/e9VQWmELXifEFvmdA1j6WFh/aFPj99hIntrSsq/if0UWyGVkmrRPKA1wCeP+UCr1B9Uw==", "dev": true, "license": "MIT", "engines": { @@ -5129,16 +5129,6 @@ "@types/send": "*" } }, - "node_modules/@types/express/node_modules/@types/serve-static": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz", - "integrity": "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==", - "license": "MIT", - "dependencies": { - "@types/http-errors": "*", - "@types/node": "*" - } - }, "node_modules/@types/graceful-fs": { "version": "4.1.9", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", @@ -5292,12 +5282,6 @@ "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", "license": "MIT" }, - "node_modules/@types/retry": { - "version": "0.12.2", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", - "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", - "license": "MIT" - }, "node_modules/@types/send": { "version": "0.17.5", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", @@ -5318,14 +5302,13 @@ } }, "node_modules/@types/serve-static": { - "version": "1.15.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz", - "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==", "license": "MIT", "dependencies": { "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "<1" + "@types/node": "*" } }, "node_modules/@types/stack-utils": { @@ -6220,9 +6203,9 @@ } }, "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "devOptional": true, "license": "MIT", "peer": true, @@ -6301,9 +6284,9 @@ } }, "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "license": "MIT", "peer": true, "dependencies": { @@ -6414,9 +6397,9 @@ } }, "node_modules/anymatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "license": "MIT", "engines": { "node": ">=8.6" @@ -10034,9 +10017,9 @@ } }, "node_modules/default-browser": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", - "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", + "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", "license": "MIT", "dependencies": { "bundle-name": "^4.1.0", @@ -10050,9 +10033,9 @@ } }, "node_modules/default-browser-id": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", - "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", "license": "MIT", "engines": { "node": ">=18" @@ -10502,14 +10485,14 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.18.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", - "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.1.tgz", + "integrity": "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==", "devOptional": true, "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "tapable": "^2.3.0" }, "engines": { "node": ">=10.13.0" @@ -11349,9 +11332,9 @@ } }, "node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", "dev": true, "license": "MIT", "dependencies": { @@ -13425,9 +13408,9 @@ } }, "node_modules/hono": { - "version": "4.10.7", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.10.7.tgz", - "integrity": "sha512-icXIITfw/07Q88nLSkB9aiUrd8rYzSweK681Kjo/TSggaGbOX4RRyxxm71v+3PC8C/j+4rlxGeoTRxQDkaJkUw==", + "version": "4.12.9", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.9.tgz", + "integrity": "sha512-wy3T8Zm2bsEvxKZM5w21VdHDDcwVS1yUFFY6i8UobSsKfFceT7TOwhbhfKsDyx7tYQlmRM5FLpIuYvNFyjctiA==", "dev": true, "license": "MIT", "peer": true, @@ -13923,9 +13906,9 @@ } }, "node_modules/ipaddr.js": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", - "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.3.0.tgz", + "integrity": "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==", "license": "MIT", "engines": { "node": ">= 10" @@ -14195,6 +14178,18 @@ "node": ">=0.10.0" } }, + "node_modules/is-in-ssh": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-in-ssh/-/is-in-ssh-1.0.0.tgz", + "integrity": "sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-inside-container": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", @@ -14499,9 +14494,9 @@ "license": "MIT" }, "node_modules/is-wsl": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", - "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", "license": "MIT", "dependencies": { "is-inside-container": "^1.0.0" @@ -15453,9 +15448,9 @@ } }, "node_modules/jest-environment-jsdom/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "license": "MIT", "engines": { @@ -16720,9 +16715,9 @@ } }, "node_modules/launch-editor": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.12.0.tgz", - "integrity": "sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg==", + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.13.2.tgz", + "integrity": "sha512-4VVDnbOpLXy/s8rdRCSXb+zfMeFR0WlJWpET1iA9CQdlZDfwyLjUuGQzXU4VeOoey6AicSAluWan7Etga6Kcmg==", "license": "MIT", "dependencies": { "picocolors": "^1.1.1", @@ -18348,9 +18343,9 @@ } }, "node_modules/micromatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "license": "MIT", "engines": { "node": ">=8.6" @@ -19030,18 +19025,20 @@ } }, "node_modules/open": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", - "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/open/-/open-11.0.0.tgz", + "integrity": "sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==", "license": "MIT", "dependencies": { - "default-browser": "^5.2.1", + "default-browser": "^5.4.0", "define-lazy-prop": "^3.0.0", + "is-in-ssh": "^1.0.0", "is-inside-container": "^1.0.0", - "wsl-utils": "^0.1.0" + "powershell-utils": "^0.1.0", + "wsl-utils": "^0.3.0" }, "engines": { - "node": ">=18" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -19145,17 +19142,15 @@ } }, "node_modules/p-retry": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz", - "integrity": "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-7.1.1.tgz", + "integrity": "sha512-J5ApzjyRkkf601HpEeykoiCvzHQjWxPAHhyjFcEUP2SWq0+35NKh8TLhpLw+Dkq5TZBFvUM6UigdE9hIVYTl5w==", "license": "MIT", "dependencies": { - "@types/retry": "0.12.2", - "is-network-error": "^1.0.0", - "retry": "^0.13.1" + "is-network-error": "^1.1.0" }, "engines": { - "node": ">=16.17" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -19415,9 +19410,9 @@ "license": "ISC" }, "node_modules/path-to-regexp": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", - "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.0.tgz", + "integrity": "sha512-PuseHIvAnz3bjrM2rGJtSgo1zjgxapTLZ7x2pjhzWwlp4SJQgK3f3iZIQwkpEnBaKz6seKBADpM4B4ySkuYypg==", "license": "MIT", "funding": { "type": "opencollective", @@ -19461,9 +19456,9 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, "license": "MIT", "engines": { @@ -19748,6 +19743,18 @@ "dev": true, "license": "MIT" }, + "node_modules/powershell-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/powershell-utils/-/powershell-utils-0.1.0.tgz", + "integrity": "sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -20113,16 +20120,6 @@ "node": ">=8" } }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -20286,9 +20283,9 @@ } }, "node_modules/readdirp/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "license": "MIT", "engines": { "node": ">=8.6" @@ -20660,15 +20657,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, "node_modules/rfdc": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", @@ -20953,32 +20941,26 @@ "url": "https://opencollective.com/express" } }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "devOptional": true, - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.2.tgz", + "integrity": "sha512-KDj11HScOaLmrPxl70KYNW1PksP4Nb/CLL2yvC+Qd2kHMPEEpfc4Re2e4FOay+bC/+XQl/7zAcWON3JVo5v3KQ==", "license": "MIT", "dependencies": { - "accepts": "~1.3.4", + "accepts": "~1.3.8", "batch": "0.6.1", "debug": "2.6.9", "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" + "http-errors": "~1.8.0", + "mime-types": "~2.1.35", + "parseurl": "~1.3.3" }, "engines": { "node": ">= 0.8.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/serve-index/node_modules/debug": { @@ -21000,38 +20982,27 @@ } }, "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "license": "MIT", "dependencies": { "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" }, "engines": { "node": ">= 0.6" } }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "license": "ISC" - }, "node_modules/serve-index/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "license": "ISC" - }, "node_modules/serve-index/node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", @@ -22406,16 +22377,15 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.16", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz", - "integrity": "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.4.0.tgz", + "integrity": "sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g==", "devOptional": true, "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", "schema-utils": "^4.3.0", - "serialize-javascript": "^6.0.2", "terser": "^5.31.1" }, "engines": { @@ -23359,9 +23329,9 @@ } }, "node_modules/watchpack": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", - "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz", + "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==", "devOptional": true, "license": "MIT", "dependencies": { @@ -23390,9 +23360,9 @@ } }, "node_modules/webpack": { - "version": "5.104.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.104.1.tgz", - "integrity": "sha512-Qphch25abbMNtekmEGJmeRUhLDbe+QfiWTiqpKYkpCOWY64v9eyl+KRRLmqOFA2AvKPpc9DC6+u2n76tQLBoaA==", + "version": "5.105.4", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.4.tgz", + "integrity": "sha512-jTywjboN9aHxFlToqb0K0Zs9SbBoW4zRUlGzI2tYNxVYcEi/IPpn+Xi4ye5jTLvX2YeLuic/IvxNot+Q1jMoOw==", "devOptional": true, "license": "MIT", "peer": true, @@ -23403,11 +23373,11 @@ "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.15.0", + "acorn": "^8.16.0", "acorn-import-phases": "^1.0.3", "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.4", + "enhanced-resolve": "^5.20.0", "es-module-lexer": "^2.0.0", "eslint-scope": "5.1.1", "events": "^3.2.0", @@ -23419,9 +23389,9 @@ "neo-async": "^2.6.2", "schema-utils": "^4.3.3", "tapable": "^2.3.0", - "terser-webpack-plugin": "^5.3.16", - "watchpack": "^2.4.4", - "webpack-sources": "^3.3.3" + "terser-webpack-plugin": "^5.3.17", + "watchpack": "^2.5.1", + "webpack-sources": "^3.3.4" }, "bin": { "webpack": "bin/webpack.js" @@ -23553,9 +23523,9 @@ } }, "node_modules/webpack-sources": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", - "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.4.tgz", + "integrity": "sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==", "devOptional": true, "license": "MIT", "engines": { @@ -23916,9 +23886,9 @@ } }, "node_modules/ws": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", - "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.0.tgz", + "integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==", "license": "MIT", "engines": { "node": ">=10.0.0" @@ -23937,15 +23907,16 @@ } }, "node_modules/wsl-utils": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", - "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.3.1.tgz", + "integrity": "sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg==", "license": "MIT", "dependencies": { - "is-wsl": "^3.1.0" + "is-wsl": "^3.1.0", + "powershell-utils": "^0.1.0" }, "engines": { - "node": ">=18" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" diff --git a/package.json b/package.json index d8d40f5b7e..b4ba70d0d8 100644 --- a/package.json +++ b/package.json @@ -46,41 +46,41 @@ "dependencies": { "@types/bonjour": "^3.5.13", "@types/connect-history-api-fallback": "^1.5.4", - "@types/express": "^5.0.3", - "@types/express-serve-static-core": "^5.0.7", + "@types/express": "^5.0.6", + "@types/express-serve-static-core": "^5.1.1", "@types/serve-index": "^1.9.4", - "@types/serve-static": "^1.15.8", - "@types/ws": "^8.5.10", + "@types/serve-static": "^2.2.0", + "@types/ws": "^8.18.1", "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.2.1", + "bonjour-service": "^1.3.0", "chokidar": "^3.6.0", "compression": "^1.8.1", "connect-history-api-fallback": "^2.0.0", - "express": "^5.1.0", - "graceful-fs": "^4.2.6", + "express": "^5.2.1", + "graceful-fs": "^4.2.11", "http-proxy-middleware": "^3.0.5", - "ipaddr.js": "^2.1.0", - "launch-editor": "^2.6.1", - "open": "^10.0.3", - "p-retry": "^6.2.0", - "schema-utils": "^4.2.0", + "ipaddr.js": "^2.3.0", + "launch-editor": "^2.13.2", + "open": "^11.0.0", + "p-retry": "^7.1.1", + "schema-utils": "^4.3.3", "selfsigned": "^5.5.0", - "serve-index": "^1.9.1", + "serve-index": "^1.9.2", "webpack-dev-middleware": "^8.0.2", - "ws": "^8.18.0" + "ws": "^8.20.0" }, "devDependencies": { - "@babel/cli": "^7.25.9", - "@babel/core": "^7.25.9", - "@babel/eslint-parser": "^7.25.9", - "@babel/plugin-transform-object-assign": "^7.25.9", - "@babel/plugin-transform-runtime": "^7.25.9", + "@babel/cli": "^7.28.6", + "@babel/core": "^7.29.0", + "@babel/eslint-parser": "^7.28.6", + "@babel/plugin-transform-object-assign": "^7.27.1", + "@babel/plugin-transform-runtime": "^7.29.0", "@babel/preset-env": "^7.25.9", - "@babel/runtime": "^7.25.9", + "@babel/runtime": "^7.29.2", "@commitlint/cli": "^19.5.0", "@commitlint/config-conventional": "^19.5.0", "@eslint/markdown": "^7.0.0", - "@hono/node-server": "^1.13.3", + "@hono/node-server": "^1.19.12", "@types/compression": "^1.7.2", "@types/graceful-fs": "^4.1.9", "@types/node": "^24.0.14", @@ -101,7 +101,7 @@ "eslint-plugin-jsdoc": "^51.3.4", "eslint-plugin-n": "^17.21.0", "execa": "^5.1.1", - "hono": "^4.6.8", + "hono": "^4.12.9", "html-webpack-plugin": "^5.6.3", "http-proxy": "^1.18.1", "husky": "^9.1.6", @@ -126,7 +126,7 @@ "typescript": "^5.7.2", "typescript-eslint": "^8.36.0", "wait-for-expect": "^3.0.2", - "webpack": "^5.104.1", + "webpack": "^5.105.4", "webpack-cli": "^6.0.1", "webpack-merge": "^6.0.1" }, From d16348838a55457c162cc148d70ccb8c6b4da436 Mon Sep 17 00:00:00 2001 From: Sebastian Beltran Date: Wed, 1 Apr 2026 15:43:24 -0500 Subject: [PATCH 14/21] chore: update webpack-cli to version 7.0.2 (#5656) * chore: update webpack-cli to version 7.0.2 * fixup! --- package-lock.json | 86 ++++--------------- package.json | 2 +- .../__snapshots__/basic.test.js.snap.webpack5 | 9 +- 3 files changed, 21 insertions(+), 76 deletions(-) diff --git a/package-lock.json b/package-lock.json index a678e12e5f..9c63a967bc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -95,7 +95,7 @@ "typescript-eslint": "^8.36.0", "wait-for-expect": "^3.0.2", "webpack": "^5.105.4", - "webpack-cli": "^6.0.1", + "webpack-cli": "^7.0.2", "webpack-merge": "^6.0.1" }, "engines": { @@ -2821,9 +2821,9 @@ } }, "node_modules/@discoveryjs/json-ext": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz", - "integrity": "sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-1.0.0.tgz", + "integrity": "sha512-dDlz3W405VMFO4w5kIP9DOmELBcvFQGmLoKSdIRstBDubKFYwaNHV1NnlzMCQpXQFGWVALmeMORAuiLx18AvZQ==", "dev": true, "license": "MIT", "engines": { @@ -6098,53 +6098,6 @@ "@xtuc/long": "4.2.2" } }, - "node_modules/@webpack-cli/configtest": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-3.0.1.tgz", - "integrity": "sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "webpack": "^5.82.0", - "webpack-cli": "6.x.x" - } - }, - "node_modules/@webpack-cli/info": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-3.0.1.tgz", - "integrity": "sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "webpack": "^5.82.0", - "webpack-cli": "6.x.x" - } - }, - "node_modules/@webpack-cli/serve": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-3.0.1.tgz", - "integrity": "sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "webpack": "^5.82.0", - "webpack-cli": "6.x.x" - }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } - } - }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -23410,20 +23363,15 @@ } }, "node_modules/webpack-cli": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-6.0.1.tgz", - "integrity": "sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-7.0.2.tgz", + "integrity": "sha512-dB0R4T+C/8YuvM+fabdvil6QE44/ChDXikV5lOOkrUeCkW5hTJv2pGLE3keh+D5hjYw8icBaJkZzpFoaHV4T+g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@discoveryjs/json-ext": "^0.6.1", - "@webpack-cli/configtest": "^3.0.1", - "@webpack-cli/info": "^3.0.1", - "@webpack-cli/serve": "^3.0.1", - "colorette": "^2.0.14", - "commander": "^12.1.0", - "cross-spawn": "^7.0.3", + "@discoveryjs/json-ext": "^1.0.0", + "commander": "^14.0.3", + "cross-spawn": "^7.0.6", "envinfo": "^7.14.0", "fastest-levenshtein": "^1.0.12", "import-local": "^3.0.2", @@ -23435,14 +23383,16 @@ "webpack-cli": "bin/cli.js" }, "engines": { - "node": ">=18.12.0" + "node": ">=20.9.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^5.82.0" + "webpack": "^5.101.0", + "webpack-bundle-analyzer": "^4.0.0 || ^5.0.0", + "webpack-dev-server": "^5.0.0" }, "peerDependenciesMeta": { "webpack-bundle-analyzer": { @@ -23454,13 +23404,13 @@ } }, "node_modules/webpack-cli/node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", "dev": true, "license": "MIT", "engines": { - "node": ">=18" + "node": ">=20" } }, "node_modules/webpack-dev-middleware": { diff --git a/package.json b/package.json index b4ba70d0d8..83bd4d3513 100644 --- a/package.json +++ b/package.json @@ -127,7 +127,7 @@ "typescript-eslint": "^8.36.0", "wait-for-expect": "^3.0.2", "webpack": "^5.105.4", - "webpack-cli": "^6.0.1", + "webpack-cli": "^7.0.2", "webpack-merge": "^6.0.1" }, "peerDependencies": { diff --git a/test/cli/__snapshots__/basic.test.js.snap.webpack5 b/test/cli/__snapshots__/basic.test.js.snap.webpack5 index 7265ad5b12..eedd96b09d 100644 --- a/test/cli/__snapshots__/basic.test.js.snap.webpack5 +++ b/test/cli/__snapshots__/basic.test.js.snap.webpack5 @@ -39,14 +39,13 @@ Options: -c, --config Provide path to one or more webpack configuration files to process, e.g. "./webpack.config.js". --config-name Name(s) of particular configuration(s) to use if configuration file exports an array of multiple configurations. -m, --merge Merge two or more configurations using 'webpack-merge'. - --disable-interpret Disable interpret for loading the config file. --env Environment variables passed to the configuration when it is a function, e.g. "myvar" or "myvar=myval". - --node-env Sets process.env.NODE_ENV to the specified value for access within the configuration.(Deprecated: Use '--config-node-env' instead) --config-node-env Sets process.env.NODE_ENV to the specified value for access within the configuration. --analyze It invokes webpack-bundle-analyzer plugin to get bundle information. --progress [value] Print compilation progress during build. -j, --json [pathToJsonFile] Prints result as JSON or store it in a file. --fail-on-warnings Stop webpack-cli process with non-zero exit code on warnings from webpack. + --disable-interpret Disable interpret for loading the config file. -d, --devtool A developer tool to enhance debugging (false | eval | [inline-|hidden-|eval-][nosources-][cheap-[module-]]source-map). --no-devtool Negative 'devtool' option. --entry A module that is loaded upon startup. Only the last one is exported. @@ -55,13 +54,9 @@ Options: --name Name of the configuration. Used when loading multiple configurations. -o, --output-path The output directory as **absolute path** (required). --stats [value] Stats options object or preset name. - --no-stats Negative 'stats' option. -t, --target Environment to build for. Environment to build for. An array of environments to build for all of them when possible. - --no-target Negative 'target' option. -w, --watch Enter watch mode, which rebuilds on file change. - --no-watch Negative 'watch' option. --watch-options-stdin Stop watching when stdin stream has ended. - --no-watch-options-stdin Negative 'watch-options-stdin' option. --allowed-hosts Allows to enumerate the hosts from which access to the dev server are allowed (useful when you are proxying dev server, by default is 'auto'). --allowed-hosts-reset Clear all items provided in 'allowedHosts' configuration. Allows to enumerate the hosts from which access to the dev server are allowed (useful when you are proxying dev server, by default is 'auto'). --bonjour Allows to broadcasts dev server via ZeroConf networking on start. @@ -139,7 +134,7 @@ Options: Global options: --color Enable colors on console. --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. + -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and other packages. -h, --help [verbose] Display help for commands and options. To see list of all supported commands and options run 'webpack --help=verbose'. From 9e36127b70205e8baf4ba5563231703a89bb491b Mon Sep 17 00:00:00 2001 From: Sebastian Beltran Date: Sun, 26 Apr 2026 10:49:54 -0500 Subject: [PATCH 15/21] chore: update chokidar to v4 (#5657) * chore: update chokidar to v4 * chore: only prevent interval be undefined * feat: support for glob support * feat: enhance watchFiles option to support ignored patterns with glob strings * feat: add tests for watchFiles option with ignored glob array support * fix: windows support --- lib/Server.js | 44 +- package-lock.json | 156 +++--- package.json | 4 +- .../normalize-options.test.js.snap.webpack5 | 100 ---- .../watch-files.test.js.snap.webpack5 | 311 +++++++++++- test/e2e/watch-files.test.js | 445 +++++++++++++++++- .../public/assets/example.js | 1 + types/lib/Server.d.ts | 2 +- 8 files changed, 877 insertions(+), 186 deletions(-) create mode 100644 test/fixtures/watch-files-config/public/assets/example.js diff --git a/lib/Server.js b/lib/Server.js index cb7da1a6de..b5a81f1348 100644 --- a/lib/Server.js +++ b/lib/Server.js @@ -17,7 +17,7 @@ const schema = require("./options.json"); /** @typedef {import("webpack").Stats} Stats */ /** @typedef {import("webpack").MultiStats} MultiStats */ /** @typedef {import("os").NetworkInterfaceInfo} NetworkInterfaceInfo */ -/** @typedef {import("chokidar").WatchOptions} WatchOptions */ +/** @typedef {import("chokidar").ChokidarOptions} WatchOptions */ /** @typedef {import("chokidar").FSWatcher} FSWatcher */ /** @typedef {import("connect-history-api-fallback").Options} ConnectHistoryApiFallbackOptions */ /** @typedef {import("bonjour-service").Bonjour} Bonjour */ @@ -833,7 +833,7 @@ class Server { const usePolling = getPolling(); const interval = getInterval(); - const { poll, ...rest } = watchOptions; + const { poll: _poll, interval: _interval, ...rest } = watchOptions; return { ignoreInitial: true, @@ -844,9 +844,7 @@ class Server { ignorePermissionErrors: true, // Respect options from compiler watchOptions usePolling, - interval, - ignored: watchOptions.ignored, - // TODO: we respect these options for all watch options and allow developers to pass them to chokidar, but chokidar doesn't have these options maybe we need revisit that in future + ...(interval !== undefined ? { interval } : {}), ...rest, }; }; @@ -3188,10 +3186,42 @@ class Server { * @param {string | string[]} watchPath watch path * @param {WatchOptions=} watchOptions watch options */ - watchFiles(watchPath, watchOptions) { + watchFiles(watchPath, watchOptions = {}) { const chokidar = require("chokidar"); + const path = require("node:path"); + const { globSync, isDynamicPattern } = require("tinyglobby"); + + const isWin = path.sep === "\\"; + const toPosix = (/** @type {string} */ filePath) => + isWin ? filePath.split(path.sep).join("/") : filePath; + const toNative = (/** @type {string} */ filePath) => + isWin ? filePath.split("/").join(path.sep) : filePath; + + const cwd = watchOptions.cwd ? toPosix(watchOptions.cwd) : undefined; + + const expand = (/** @type {string} */ item) => { + const posix = toPosix(item); + return isDynamicPattern(posix) + ? globSync(posix, { cwd, absolute: true }).map(toNative) + : item; + }; + + const resolveGlobs = (/** @type {string | string[]} */ input) => + (Array.isArray(input) ? input : [input]).flatMap((item) => + typeof item === "string" ? expand(item) : item, + ); + + const resolvedPaths = resolveGlobs(watchPath); + + if (typeof watchOptions.ignored === "string") { + watchOptions.ignored = resolveGlobs(watchOptions.ignored); + } else if (Array.isArray(watchOptions.ignored)) { + watchOptions.ignored = watchOptions.ignored.flatMap((item) => + typeof item === "string" ? expand(item) : item, + ); + } - const watcher = chokidar.watch(watchPath, watchOptions); + const watcher = chokidar.watch(resolvedPaths, watchOptions); // disabling refreshing on changing the content if (this.options.liveReload) { diff --git a/package-lock.json b/package-lock.json index 9c63a967bc..4647869111 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@types/ws": "^8.18.1", "ansi-html-community": "^0.0.8", "bonjour-service": "^1.3.0", - "chokidar": "^3.6.0", + "chokidar": "^4.0.3", "compression": "^1.8.1", "connect-history-api-fallback": "^2.0.0", "express": "^5.2.1", @@ -31,6 +31,7 @@ "schema-utils": "^4.3.3", "selfsigned": "^5.5.0", "serve-index": "^1.9.2", + "tinyglobby": "^0.2.15", "webpack-dev-middleware": "^8.0.2", "ws": "^8.20.0" }, @@ -53,6 +54,7 @@ "@types/graceful-fs": "^4.1.9", "@types/node": "^24.0.14", "@types/node-forge": "^1.3.1", + "@types/picomatch": "^4.0.2", "@types/trusted-types": "^2.0.7", "acorn": "^8.14.0", "babel-jest": "^30.0.4", @@ -147,6 +149,74 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/cli/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/@babel/cli/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@babel/cli/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@babel/cli/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, "node_modules/@babel/code-frame": { "version": "7.29.0", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", @@ -5270,6 +5340,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-qHHxQ+P9PysNEGbALT8f8YOSHW0KJu6l2xU8DYY0fu/EmGxXdVnuTLvFUvBgPJMSqXq29SYHveejeAha+4AYgA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/qs": { "version": "6.14.0", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", @@ -6340,6 +6417,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", @@ -6353,6 +6431,7 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, "license": "MIT", "engines": { "node": ">=8.6" @@ -7044,7 +7123,9 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, "license": "MIT", + "optional": true, "engines": { "node": ">=8" }, @@ -7436,27 +7517,18 @@ } }, "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", "license": "MIT", "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "readdirp": "^4.0.1" }, "engines": { - "node": ">= 8.10.0" + "node": ">= 14.16.0" }, "funding": { "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" } }, "node_modules/chrome-trace-event": { @@ -11428,19 +11500,6 @@ "node": ">=16" } }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/eslint/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -11932,7 +11991,6 @@ "version": "6.5.0", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, "license": "MIT", "engines": { "node": ">=12.0.0" @@ -12274,6 +12332,7 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -13103,15 +13162,16 @@ } }, "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, "license": "ISC", "dependencies": { - "is-glob": "^4.0.1" + "is-glob": "^4.0.3" }, "engines": { - "node": ">= 6" + "node": ">=10.13.0" } }, "node_modules/glob-to-regex.js": { @@ -13932,7 +13992,9 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, "license": "MIT", + "optional": true, "dependencies": { "binary-extensions": "^2.0.0" }, @@ -18637,6 +18699,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -19412,7 +19475,6 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -20224,27 +20286,16 @@ } }, "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/readdirp/node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "license": "MIT", "engines": { - "node": ">=8.6" + "node": ">= 14.18.0" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, "node_modules/rechoir": { @@ -22515,7 +22566,6 @@ "version": "0.2.15", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", - "dev": true, "license": "MIT", "dependencies": { "fdir": "^6.5.0", diff --git a/package.json b/package.json index 83bd4d3513..521f2e716f 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "@types/ws": "^8.18.1", "ansi-html-community": "^0.0.8", "bonjour-service": "^1.3.0", - "chokidar": "^3.6.0", + "chokidar": "^4.0.3", "compression": "^1.8.1", "connect-history-api-fallback": "^2.0.0", "express": "^5.2.1", @@ -66,6 +66,7 @@ "schema-utils": "^4.3.3", "selfsigned": "^5.5.0", "serve-index": "^1.9.2", + "tinyglobby": "^0.2.15", "webpack-dev-middleware": "^8.0.2", "ws": "^8.20.0" }, @@ -85,6 +86,7 @@ "@types/graceful-fs": "^4.1.9", "@types/node": "^24.0.14", "@types/node-forge": "^1.3.1", + "@types/picomatch": "^4.0.2", "@types/trusted-types": "^2.0.7", "acorn": "^8.14.0", "babel-jest": "^30.0.4", diff --git a/test/__snapshots__/normalize-options.test.js.snap.webpack5 b/test/__snapshots__/normalize-options.test.js.snap.webpack5 index 06c223f976..52099cfd75 100644 --- a/test/__snapshots__/normalize-options.test.js.snap.webpack5 +++ b/test/__snapshots__/normalize-options.test.js.snap.webpack5 @@ -39,8 +39,6 @@ exports[`normalize options allowedHosts is array 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -95,8 +93,6 @@ exports[`normalize options allowedHosts is string 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -152,8 +148,6 @@ exports[`normalize options client custom webSocketTransport path 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -211,8 +205,6 @@ exports[`normalize options client host and port 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -270,8 +262,6 @@ exports[`normalize options client host and string port 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -328,8 +318,6 @@ exports[`normalize options client path 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -386,8 +374,6 @@ exports[`normalize options client path without leading/ending slashes 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -443,8 +429,6 @@ exports[`normalize options client.webSocketTransport ws string 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -500,8 +484,6 @@ exports[`normalize options client.webSocketTransport ws string and webSocketServ "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -559,8 +541,6 @@ exports[`normalize options client.webSocketTransport ws string and webSocketServ "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -618,8 +598,6 @@ exports[`normalize options client.webSocketTransport ws string and webSocketServ "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -676,8 +654,6 @@ exports[`normalize options dev is set 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -732,8 +708,6 @@ exports[`normalize options hot is false 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -788,8 +762,6 @@ exports[`normalize options hot is only 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -844,8 +816,6 @@ exports[`normalize options hot is true 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -900,8 +870,6 @@ exports[`normalize options liveReload is false 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -956,8 +924,6 @@ exports[`normalize options liveReload is true 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -1012,8 +978,6 @@ exports[`normalize options multi compiler client.logging should override infrast "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -1068,8 +1032,6 @@ exports[`normalize options multi compiler client.logging should respect infrastr "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -1124,8 +1086,6 @@ exports[`normalize options multi compiler client.logging should respect infrastr "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -1180,8 +1140,6 @@ exports[`normalize options multi compiler client.logging should respect infrastr "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -1236,8 +1194,6 @@ exports[`normalize options multi compiler watchOptions is set 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -1292,8 +1248,6 @@ exports[`normalize options no options 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -1348,8 +1302,6 @@ exports[`normalize options port string 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -1404,8 +1356,6 @@ exports[`normalize options single compiler client.logging should default to infr "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -1460,8 +1410,6 @@ exports[`normalize options single compiler client.logging should override to inf "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -1516,8 +1464,6 @@ exports[`normalize options single compiler watchOptions is object 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -1572,7 +1518,6 @@ exports[`normalize options single compiler watchOptions is object with static wa "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, "interval": 500, "persistent": true, "usePolling": true, @@ -1628,8 +1573,6 @@ exports[`normalize options single compiler watchOptions is object with static wa "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -1684,8 +1627,6 @@ exports[`normalize options single compiler watchOptions is object with watch fal "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -1740,8 +1681,6 @@ exports[`normalize options static is an array of static objects 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -1761,8 +1700,6 @@ exports[`normalize options static is an array of static objects 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -1817,8 +1754,6 @@ exports[`normalize options static is an array of strings 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -1838,8 +1773,6 @@ exports[`normalize options static is an array of strings 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -1894,8 +1827,6 @@ exports[`normalize options static is an array of strings and static objects 1`] "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -1915,8 +1846,6 @@ exports[`normalize options static is an array of strings and static objects 1`] "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -1971,8 +1900,6 @@ exports[`normalize options static is an object 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -2030,8 +1957,6 @@ exports[`normalize options static is an object with staticOptions 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -2120,8 +2045,6 @@ exports[`normalize options static is string 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -2176,8 +2099,6 @@ exports[`normalize options static is true 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -2232,8 +2153,6 @@ exports[`normalize options static publicPath is a string 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -2289,8 +2208,6 @@ exports[`normalize options static publicPath is an array 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -2348,8 +2265,6 @@ exports[`normalize options static serveIndex is an object more options 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -2404,8 +2319,6 @@ exports[`normalize options static serveIndex is an object with icons false 1`] = "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -2458,8 +2371,6 @@ exports[`normalize options static serveIndex is false 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -2514,8 +2425,6 @@ exports[`normalize options static serveIndex is true 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -2570,7 +2479,6 @@ exports[`normalize options static watch is an object 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, "interval": 500, "persistent": true, "usePolling": true, @@ -2672,8 +2580,6 @@ exports[`normalize options static watch is true 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -2731,8 +2637,6 @@ exports[`normalize options username and password 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -2787,8 +2691,6 @@ exports[`normalize options webSocketServer custom server class 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, @@ -2843,8 +2745,6 @@ exports[`normalize options webSocketServer custom server path 1`] = ` "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, "persistent": true, "usePolling": false, }, diff --git a/test/e2e/__snapshots__/watch-files.test.js.snap.webpack5 b/test/e2e/__snapshots__/watch-files.test.js.snap.webpack5 index cd385cfd38..adf5ea5d50 100644 --- a/test/e2e/__snapshots__/watch-files.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/watch-files.test.js.snap.webpack5 @@ -20,6 +20,52 @@ exports[`watchFiles option should work with array config should reload when file exports[`watchFiles option should work with array config should reload when file content is changed: response status 1`] = `200`; +exports[`watchFiles option should work with array of globs should reload when file content is changed: console messages 1`] = ` +[ + "Hey.", +] +`; + +exports[`watchFiles option should work with array of globs should reload when file content is changed: page errors 1`] = `[]`; + +exports[`watchFiles option should work with array of globs should reload when file content is changed: response status 1`] = `200`; + +exports[`watchFiles option should work with directory and ignored option to filter files should not reload when a non-matching file is changed: response status 1`] = `200`; + +exports[`watchFiles option should work with directory and ignored option to filter files should reload when file content is changed: console messages 1`] = ` +[ + "Hey.", +] +`; + +exports[`watchFiles option should work with directory and ignored option to filter files should reload when file content is changed: page errors 1`] = `[]`; + +exports[`watchFiles option should work with directory and ignored option to filter files should reload when file content is changed: response status 1`] = `200`; + +exports[`watchFiles option should work with ignored option using glob array should not reload when an ignored glob file is changed: response status 1`] = `200`; + +exports[`watchFiles option should work with ignored option using glob array should reload when file content is changed: console messages 1`] = ` +[ + "Hey.", +] +`; + +exports[`watchFiles option should work with ignored option using glob array should reload when file content is changed: page errors 1`] = `[]`; + +exports[`watchFiles option should work with ignored option using glob array should reload when file content is changed: response status 1`] = `200`; + +exports[`watchFiles option should work with ignored option using glob string should not reload when an ignored glob file is changed: response status 1`] = `200`; + +exports[`watchFiles option should work with ignored option using glob string should reload when file content is changed: console messages 1`] = ` +[ + "Hey.", +] +`; + +exports[`watchFiles option should work with ignored option using glob string should reload when file content is changed: page errors 1`] = `[]`; + +exports[`watchFiles option should work with ignored option using glob string should reload when file content is changed: response status 1`] = `200`; + exports[`watchFiles option should work with object with multiple paths should reload when file content is changed: console messages 1`] = ` [ "Hey.", @@ -44,10 +90,12 @@ exports[`watchFiles option should work with options {"interval":400,"poll":200} { "alwaysStat": true, "atomic": false, + "awaitWriteFinish": false, + "binaryInterval": 300, "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, + "ignored": [], "interval": 400, "persistent": true, "usePolling": true, @@ -68,10 +116,12 @@ exports[`watchFiles option should work with options {"poll":200} should reload w { "alwaysStat": true, "atomic": false, + "awaitWriteFinish": false, + "binaryInterval": 300, "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, + "ignored": [], "interval": 200, "persistent": true, "usePolling": true, @@ -92,11 +142,13 @@ exports[`watchFiles option should work with options {"poll":true} should reload { "alwaysStat": true, "atomic": false, + "awaitWriteFinish": false, + "binaryInterval": 300, "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, + "ignored": [], + "interval": 100, "persistent": true, "usePolling": true, } @@ -116,13 +168,15 @@ exports[`watchFiles option should work with options {"usePolling":false,"interva { "alwaysStat": true, "atomic": false, + "awaitWriteFinish": false, + "binaryInterval": 300, "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, + "ignored": [], "interval": 200, "persistent": true, - "usePolling": false, + "usePolling": true, } `; @@ -140,13 +194,15 @@ exports[`watchFiles option should work with options {"usePolling":false,"poll":2 { "alwaysStat": true, "atomic": false, + "awaitWriteFinish": false, + "binaryInterval": 300, "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, + "ignored": [], "interval": 200, "persistent": true, - "usePolling": false, + "usePolling": true, } `; @@ -164,13 +220,15 @@ exports[`watchFiles option should work with options {"usePolling":false,"poll":t { "alwaysStat": true, "atomic": false, + "awaitWriteFinish": false, + "binaryInterval": 300, "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, + "ignored": [], + "interval": 100, "persistent": true, - "usePolling": false, + "usePolling": true, } `; @@ -188,13 +246,15 @@ exports[`watchFiles option should work with options {"usePolling":false} should { "alwaysStat": true, "atomic": false, + "awaitWriteFinish": false, + "binaryInterval": 300, "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, + "ignored": [], + "interval": 100, "persistent": true, - "usePolling": false, + "usePolling": true, } `; @@ -212,10 +272,12 @@ exports[`watchFiles option should work with options {"usePolling":true,"interval { "alwaysStat": true, "atomic": false, + "awaitWriteFinish": false, + "binaryInterval": 300, "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, + "ignored": [], "interval": 200, "persistent": true, "usePolling": true, @@ -236,10 +298,12 @@ exports[`watchFiles option should work with options {"usePolling":true,"poll":20 { "alwaysStat": true, "atomic": false, + "awaitWriteFinish": false, + "binaryInterval": 300, "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, + "ignored": [], "interval": 200, "persistent": true, "usePolling": true, @@ -260,11 +324,13 @@ exports[`watchFiles option should work with options {"usePolling":true} should r { "alwaysStat": true, "atomic": false, + "awaitWriteFinish": false, + "binaryInterval": 300, "followSymlinks": false, "ignoreInitial": true, "ignorePermissionErrors": true, - "ignored": undefined, - "interval": undefined, + "ignored": [], + "interval": 100, "persistent": true, "usePolling": true, } @@ -280,6 +346,215 @@ exports[`watchFiles option should work with options {"usePolling":true} should r exports[`watchFiles option should work with options {"usePolling":true} should reload when file content is changed: response status 1`] = `200`; +exports[`watchFiles option should work with options {} should reload when file content is changed 1`] = ` +{ + "alwaysStat": true, + "atomic": false, + "awaitWriteFinish": false, + "binaryInterval": 300, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "ignored": [], + "interval": 100, + "persistent": true, + "usePolling": true, +} +`; + +exports[`watchFiles option should work with options {} should reload when file content is changed 2`] = ` +{ + "alwaysStat": true, + "atomic": false, + "awaitWriteFinish": false, + "binaryInterval": 300, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "ignored": [], + "interval": 100, + "persistent": true, + "usePolling": true, +} +`; + +exports[`watchFiles option should work with options {} should reload when file content is changed 3`] = ` +{ + "alwaysStat": true, + "atomic": false, + "awaitWriteFinish": false, + "binaryInterval": 300, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "ignored": [], + "interval": 100, + "persistent": undefined, + "usePolling": true, +} +`; + +exports[`watchFiles option should work with options {} should reload when file content is changed 4`] = ` +{ + "alwaysStat": true, + "atomic": false, + "awaitWriteFinish": false, + "binaryInterval": 300, + "followSymlinks": undefined, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "ignored": [], + "interval": 100, + "persistent": true, + "usePolling": true, +} +`; + +exports[`watchFiles option should work with options {} should reload when file content is changed 5`] = ` +{ + "alwaysStat": true, + "atomic": true, + "awaitWriteFinish": false, + "binaryInterval": 300, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "ignored": [], + "interval": 100, + "persistent": true, + "usePolling": true, +} +`; + +exports[`watchFiles option should work with options {} should reload when file content is changed 6`] = ` +{ + "alwaysStat": undefined, + "atomic": false, + "awaitWriteFinish": false, + "binaryInterval": 300, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "ignored": [], + "interval": 100, + "persistent": true, + "usePolling": true, +} +`; + +exports[`watchFiles option should work with options {} should reload when file content is changed 7`] = ` +{ + "alwaysStat": true, + "atomic": false, + "awaitWriteFinish": false, + "binaryInterval": 300, + "depth": undefined, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "ignored": [], + "interval": 100, + "persistent": true, + "usePolling": true, +} +`; + +exports[`watchFiles option should work with options {} should reload when file content is changed 8`] = ` +{ + "alwaysStat": true, + "atomic": false, + "awaitWriteFinish": false, + "binaryInterval": 300, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": undefined, + "ignored": [], + "interval": 100, + "persistent": true, + "usePolling": true, +} +`; + +exports[`watchFiles option should work with options {} should reload when file content is changed: console messages 1`] = ` +[ + "Hey.", +] +`; + +exports[`watchFiles option should work with options {} should reload when file content is changed: console messages 2`] = ` +[ + "Hey.", +] +`; + +exports[`watchFiles option should work with options {} should reload when file content is changed: console messages 3`] = ` +[ + "Hey.", +] +`; + +exports[`watchFiles option should work with options {} should reload when file content is changed: console messages 4`] = ` +[ + "Hey.", +] +`; + +exports[`watchFiles option should work with options {} should reload when file content is changed: console messages 5`] = ` +[ + "Hey.", +] +`; + +exports[`watchFiles option should work with options {} should reload when file content is changed: console messages 6`] = ` +[ + "Hey.", +] +`; + +exports[`watchFiles option should work with options {} should reload when file content is changed: console messages 7`] = ` +[ + "Hey.", +] +`; + +exports[`watchFiles option should work with options {} should reload when file content is changed: console messages 8`] = ` +[ + "Hey.", +] +`; + +exports[`watchFiles option should work with options {} should reload when file content is changed: page errors 1`] = `[]`; + +exports[`watchFiles option should work with options {} should reload when file content is changed: page errors 2`] = `[]`; + +exports[`watchFiles option should work with options {} should reload when file content is changed: page errors 3`] = `[]`; + +exports[`watchFiles option should work with options {} should reload when file content is changed: page errors 4`] = `[]`; + +exports[`watchFiles option should work with options {} should reload when file content is changed: page errors 5`] = `[]`; + +exports[`watchFiles option should work with options {} should reload when file content is changed: page errors 6`] = `[]`; + +exports[`watchFiles option should work with options {} should reload when file content is changed: page errors 7`] = `[]`; + +exports[`watchFiles option should work with options {} should reload when file content is changed: page errors 8`] = `[]`; + +exports[`watchFiles option should work with options {} should reload when file content is changed: response status 1`] = `200`; + +exports[`watchFiles option should work with options {} should reload when file content is changed: response status 2`] = `200`; + +exports[`watchFiles option should work with options {} should reload when file content is changed: response status 3`] = `200`; + +exports[`watchFiles option should work with options {} should reload when file content is changed: response status 4`] = `200`; + +exports[`watchFiles option should work with options {} should reload when file content is changed: response status 5`] = `200`; + +exports[`watchFiles option should work with options {} should reload when file content is changed: response status 6`] = `200`; + +exports[`watchFiles option should work with options {} should reload when file content is changed: response status 7`] = `200`; + +exports[`watchFiles option should work with options {} should reload when file content is changed: response status 8`] = `200`; + exports[`watchFiles option should work with string and glob should reload when file content is changed: console messages 1`] = ` [ "Hey.", diff --git a/test/e2e/watch-files.test.js b/test/e2e/watch-files.test.js index c3785fbbec..e06126ef92 100644 --- a/test/e2e/watch-files.test.js +++ b/test/e2e/watch-files.test.js @@ -1,7 +1,6 @@ "use strict"; const path = require("node:path"); -const chokidar = require("chokidar"); const fs = require("graceful-fs"); const webpack = require("webpack"); const Server = require("../../lib/Server"); @@ -228,6 +227,420 @@ describe("watchFiles option", () => { }); }); + describe("should work with array of globs", () => { + const file = path.join(watchDir, "assets/example.txt"); + const other = path.join(watchDir, "assets/other.txt"); + let compiler; + let server; + let page; + let browser; + let pageErrors; + let consoleMessages; + + beforeEach(async () => { + compiler = webpack(config); + + server = new Server( + { + watchFiles: [`${watchDir}/**/*.txt`, `${watchDir}/**/*.js`], + port, + }, + compiler, + ); + + await server.start(); + + ({ page, browser } = await runBrowser()); + + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + await browser.close(); + await server.stop(); + fs.truncateSync(file); + fs.truncateSync(other); + }); + + it("should reload when file content is changed", async () => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://localhost:${port}/`, { + waitUntil: "networkidle0", + }); + + expect(response.status()).toMatchSnapshot("response status"); + + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", + ); + + expect(pageErrors).toMatchSnapshot("page errors"); + + // change file content + fs.writeFileSync(file, "Kurosaki Ichigo", "utf8"); + + await new Promise((resolve) => { + server.staticWatchers[0].on("change", async (changedPath) => { + // page reload + await page.waitForNavigation({ waitUntil: "networkidle0" }); + + expect(changedPath).toBe(file); + + resolve(); + }); + }); + }); + }); + + describe("should work with directory and ignored option to filter files", () => { + const file = path.join(watchDir, "assets/example.txt"); + let compiler; + let server; + let page; + let browser; + let pageErrors; + let consoleMessages; + + beforeEach(async () => { + compiler = webpack(config); + + server = new Server( + { + watchFiles: { + paths: watchDir, + options: { + ignored: (filePath, stats) => + stats?.isFile() && !filePath.endsWith(".txt"), + }, + }, + port, + }, + compiler, + ); + + await server.start(); + + ({ page, browser } = await runBrowser()); + + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + await browser.close(); + await server.stop(); + fs.truncateSync(file); + }); + + it("should reload when file content is changed", async () => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://localhost:${port}/`, { + waitUntil: "networkidle0", + }); + + expect(response.status()).toMatchSnapshot("response status"); + + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", + ); + + expect(pageErrors).toMatchSnapshot("page errors"); + + // change file content + fs.writeFileSync(file, "Kurosaki Ichigo", "utf8"); + + await new Promise((resolve) => { + server.staticWatchers[0].on("change", async (changedPath) => { + // page reload + await page.waitForNavigation({ waitUntil: "networkidle0" }); + + expect(changedPath).toBe(file); + + resolve(); + }); + }); + }); + + it("should not reload when a non-matching file is changed", async () => { + const ignoredFile = path.join(watchDir, "assets/example.js"); + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://localhost:${port}/`, { + waitUntil: "networkidle0", + }); + + expect(response.status()).toMatchSnapshot("response status"); + + // change ignored file content + fs.writeFileSync(ignoredFile, "// changed", "utf8"); + + // wait a bit to ensure no reload happens + await new Promise((resolve) => { + let changed = false; + + server.staticWatchers[0].on("change", () => { + changed = true; + }); + + setTimeout(() => { + expect(changed).toBe(false); + resolve(); + }, 2000); + }); + + // restore file + fs.writeFileSync(ignoredFile, "// test file\n", "utf8"); + }); + }); + + describe("should work with ignored option using glob string", () => { + const file = path.join(watchDir, "assets/example.txt"); + const ignoredFile = path.join(watchDir, "assets/example.js"); + let compiler; + let server; + let page; + let browser; + let pageErrors; + let consoleMessages; + + beforeEach(async () => { + compiler = webpack(config); + + server = new Server( + { + watchFiles: { + paths: watchDir, + options: { + ignored: `${watchDir}/**/*.js`, + }, + }, + port, + }, + compiler, + ); + + await server.start(); + + ({ page, browser } = await runBrowser()); + + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + await browser.close(); + await server.stop(); + fs.truncateSync(file); + }); + + it("should reload when file content is changed", async () => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://localhost:${port}/`, { + waitUntil: "networkidle0", + }); + + expect(response.status()).toMatchSnapshot("response status"); + + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", + ); + + expect(pageErrors).toMatchSnapshot("page errors"); + + // change file content + fs.writeFileSync(file, "Kurosaki Ichigo", "utf8"); + + await new Promise((resolve) => { + server.staticWatchers[0].on("change", async (changedPath) => { + // page reload + await page.waitForNavigation({ waitUntil: "networkidle0" }); + + expect(changedPath).toBe(file); + + resolve(); + }); + }); + }); + + it("should not reload when an ignored glob file is changed", async () => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://localhost:${port}/`, { + waitUntil: "networkidle0", + }); + + expect(response.status()).toMatchSnapshot("response status"); + + // change ignored file content + fs.writeFileSync(ignoredFile, "// changed", "utf8"); + + // wait a bit to ensure no reload happens + await new Promise((resolve) => { + let changed = false; + + server.staticWatchers[0].on("change", () => { + changed = true; + }); + + setTimeout(() => { + expect(changed).toBe(false); + resolve(); + }, 2000); + }); + + // restore file + fs.writeFileSync(ignoredFile, "// test file\n", "utf8"); + }); + }); + + describe("should work with ignored option using glob array", () => { + const file = path.join(watchDir, "assets/example.txt"); + const ignoredFile = path.join(watchDir, "assets/example.js"); + let compiler; + let server; + let page; + let browser; + let pageErrors; + let consoleMessages; + + beforeEach(async () => { + compiler = webpack(config); + + server = new Server( + { + watchFiles: { + paths: watchDir, + options: { + ignored: [`${watchDir}/**/*.js`], + }, + }, + port, + }, + compiler, + ); + + await server.start(); + + ({ page, browser } = await runBrowser()); + + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + await browser.close(); + await server.stop(); + fs.truncateSync(file); + }); + + it("should reload when file content is changed", async () => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://localhost:${port}/`, { + waitUntil: "networkidle0", + }); + + expect(response.status()).toMatchSnapshot("response status"); + + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", + ); + + expect(pageErrors).toMatchSnapshot("page errors"); + + // change file content + fs.writeFileSync(file, "Kurosaki Ichigo", "utf8"); + + await new Promise((resolve) => { + server.staticWatchers[0].on("change", async (changedPath) => { + // page reload + await page.waitForNavigation({ waitUntil: "networkidle0" }); + + expect(changedPath).toBe(file); + + resolve(); + }); + }); + }); + + it("should not reload when an ignored glob file is changed", async () => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://localhost:${port}/`, { + waitUntil: "networkidle0", + }); + + expect(response.status()).toMatchSnapshot("response status"); + + // change ignored file content + fs.writeFileSync(ignoredFile, "// changed", "utf8"); + + // wait a bit to ensure no reload happens + await new Promise((resolve) => { + let changed = false; + + server.staticWatchers[0].on("change", () => { + changed = true; + }); + + setTimeout(() => { + expect(changed).toBe(false); + resolve(); + }, 2000); + }); + + // restore file + fs.writeFileSync(ignoredFile, "// test file\n", "utf8"); + }); + }); + describe("should not crash if file doesn't exist", () => { const nonExistFile = path.join(watchDir, "assets/non-exist.txt"); let compiler; @@ -556,9 +969,31 @@ describe("watchFiles option", () => { describe("should work with options", () => { const file = path.join(watchDir, "assets/example.txt"); - const chokidarMock = jest.spyOn(chokidar, "watch"); - const optionCases = [ + { + interval: undefined, + }, + { + usePolling: undefined, + }, + { + persistent: undefined, + }, + { + followSymlinks: undefined, + }, + { + atomic: undefined, + }, + { + alwaysStat: undefined, + }, + { + depth: undefined, + }, + { + ignorePermissionErrors: undefined, + }, { poll: true, }, @@ -609,8 +1044,6 @@ describe("watchFiles option", () => { let consoleMessages; beforeEach(async () => { - chokidarMock.mockClear(); - compiler = webpack(config); server = new Server( @@ -652,7 +1085,7 @@ describe("watchFiles option", () => { }); // should pass correct options to chokidar config - expect(chokidarMock.mock.calls[0][1]).toMatchSnapshot(); + expect(server.staticWatchers[0].options).toMatchSnapshot(); expect(response.status()).toMatchSnapshot("response status"); diff --git a/test/fixtures/watch-files-config/public/assets/example.js b/test/fixtures/watch-files-config/public/assets/example.js new file mode 100644 index 0000000000..346e384d2b --- /dev/null +++ b/test/fixtures/watch-files-config/public/assets/example.js @@ -0,0 +1 @@ +// test file diff --git a/types/lib/Server.d.ts b/types/lib/Server.d.ts index dd895e2e3c..80a7fbe2df 100644 --- a/types/lib/Server.d.ts +++ b/types/lib/Server.d.ts @@ -1493,7 +1493,7 @@ type StatsCompilation = import("webpack").StatsCompilation; type Stats = import("webpack").Stats; type MultiStats = import("webpack").MultiStats; type NetworkInterfaceInfo = import("os").NetworkInterfaceInfo; -type WatchOptions = import("chokidar").WatchOptions; +type WatchOptions = import("chokidar").ChokidarOptions; type FSWatcher = import("chokidar").FSWatcher; type ConnectHistoryApiFallbackOptions = import("connect-history-api-fallback").Options; From 93c191a285101c94a72e5be180c997595cb330f3 Mon Sep 17 00:00:00 2001 From: Sebastian Beltran Date: Sun, 26 Apr 2026 13:48:17 -0500 Subject: [PATCH 16/21] chore: update dev-middleware (#5664) --- lib/Server.js | 15 --------------- package-lock.json | 8 ++++---- package.json | 2 +- 3 files changed, 5 insertions(+), 20 deletions(-) diff --git a/lib/Server.js b/lib/Server.js index b5a81f1348..093e03ab62 100644 --- a/lib/Server.js +++ b/lib/Server.js @@ -2240,21 +2240,6 @@ class Server { ), }); - // Sync originalUrl with the rewritten url so that webpack-dev-middleware - // (which reads originalUrl) can serve the correct file after the rewrite. - middlewares.push({ - name: "connect-history-api-fallback-url-sync", - /** - * @param {Request} req request - * @param {Response} res response - * @param {NextFunction} next next function - */ - middleware: (req, res, next) => { - req.originalUrl = req.url; - next(); - }, - }); - // include our middleware to ensure // it is able to handle '/index.html' request after redirect middlewares.push({ diff --git a/package-lock.json b/package-lock.json index 4647869111..f50f5ca9df 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,7 +32,7 @@ "selfsigned": "^5.5.0", "serve-index": "^1.9.2", "tinyglobby": "^0.2.15", - "webpack-dev-middleware": "^8.0.2", + "webpack-dev-middleware": "^8.0.3", "ws": "^8.20.0" }, "bin": { @@ -23464,9 +23464,9 @@ } }, "node_modules/webpack-dev-middleware": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-8.0.2.tgz", - "integrity": "sha512-MCBgoI025uJEcIYDT+R3mXUnhZA/GAxqwngADOwmHxMhQUgDztGow6AmyeEfI8L9KG2pDVg2kU6vjFnbCBH5Pg==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-8.0.3.tgz", + "integrity": "sha512-zWrde9VZDiRaFuWsjHO40wm9LxxtXEk8DdzFXdU7eU5ZpiANnZZDBbZgN3guxbEoKqUHd9YupBmynyioz42nkA==", "license": "MIT", "dependencies": { "memfs": "^4.56.10", diff --git a/package.json b/package.json index 521f2e716f..613b8ecdeb 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,7 @@ "selfsigned": "^5.5.0", "serve-index": "^1.9.2", "tinyglobby": "^0.2.15", - "webpack-dev-middleware": "^8.0.2", + "webpack-dev-middleware": "^8.0.3", "ws": "^8.20.0" }, "devDependencies": { From a7ab30f98ad2d1c92c1e8f0298fe24f0736d756c Mon Sep 17 00:00:00 2001 From: Sebastian Beltran Date: Fri, 1 May 2026 16:42:10 -0500 Subject: [PATCH 17/21] chore: update p-retry to v8.0.0 and node engine requirement to >=22.12.0 (#5666) --- .github/workflows/nodejs.yml | 2 +- package-lock.json | 20 ++++++++++---------- package.json | 4 ++-- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 601903e675..8dd6eac59b 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -69,7 +69,7 @@ jobs: strategy: matrix: os: [ubuntu-latest, windows-latest, macos-latest] - node-version: [20.x, 22.x, 24.x, 25.x] + node-version: [22.x, 24.x, 25.x] shard: ["1/4", "2/4", "3/4", "4/4"] webpack-version: [latest] diff --git a/package-lock.json b/package-lock.json index f50f5ca9df..217a4cd486 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,7 +27,7 @@ "ipaddr.js": "^2.3.0", "launch-editor": "^2.13.2", "open": "^11.0.0", - "p-retry": "^7.1.1", + "p-retry": "^8.0.0", "schema-utils": "^4.3.3", "selfsigned": "^5.5.0", "serve-index": "^1.9.2", @@ -101,7 +101,7 @@ "webpack-merge": "^6.0.1" }, "engines": { - "node": ">= 20.9.0" + "node": ">= 22.12.0" }, "funding": { "type": "opencollective", @@ -14250,9 +14250,9 @@ } }, "node_modules/is-network-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", - "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.1.tgz", + "integrity": "sha512-6QCxa49rQbmUWLfk0nuGqzql9U8uaV2H6279bRErPBHe/109hCzsLUBUHfbEtvLIHBd6hyXbgedBSHevm43Edw==", "license": "MIT", "engines": { "node": ">=16" @@ -19158,15 +19158,15 @@ } }, "node_modules/p-retry": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-7.1.1.tgz", - "integrity": "sha512-J5ApzjyRkkf601HpEeykoiCvzHQjWxPAHhyjFcEUP2SWq0+35NKh8TLhpLw+Dkq5TZBFvUM6UigdE9hIVYTl5w==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-8.0.0.tgz", + "integrity": "sha512-kFVqH1HxOHp8LupNsOys7bSV09VYTRLxarH/mokO4Rqhk6wGi70E0jh4VzvVGXfEVNggHoHLAMWsQqHyU1Ey9A==", "license": "MIT", "dependencies": { - "is-network-error": "^1.1.0" + "is-network-error": "^1.3.0" }, "engines": { - "node": ">=20" + "node": ">=22" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" diff --git a/package.json b/package.json index 613b8ecdeb..6f71d9a0ca 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ "ipaddr.js": "^2.3.0", "launch-editor": "^2.13.2", "open": "^11.0.0", - "p-retry": "^7.1.1", + "p-retry": "^8.0.0", "schema-utils": "^4.3.3", "selfsigned": "^5.5.0", "serve-index": "^1.9.2", @@ -144,6 +144,6 @@ } }, "engines": { - "node": ">= 20.9.0" + "node": ">= 22.12.0" } } From 4d2acaad9d90f81573b28c8d27df7c4542dd04a3 Mon Sep 17 00:00:00 2001 From: Sebastian Beltran Date: Sun, 10 May 2026 17:47:08 -0500 Subject: [PATCH 18/21] refactor: migrate to node:test and setup jsdom environment (#5667) * feat(tests): add node test setup and update test utilities - Introduced a new script for node test setup (`scripts/node-test-setup.mjs`) to configure snapshot serializers and resolve snapshot paths for webpack tests. - Added new npm script `test:node` in `package.json` for running node tests with specific configurations. - Updated Jest snapshots in `proxy-option.test.js.snap.webpack5` to reflect changes in test descriptions. - Refactored tests in `open-option.test.js` and `proxy-option.test.js` to utilize `jest-mock` for mocking and spying, replacing previous Jest mocking methods. - Changed `beforeAll` and `afterAll` hooks to `before` and `after` for better test isolation and readability. * refactor(tests): update snapshot test descriptions and improve test structure - Changed snapshot test descriptions to include a more structured format. - Updated snapshot assertions to use `t.assert.snapshot` for consistency. - Refactored test setup and teardown methods to use `before` and `after` from `node:test`. - Adjusted the test cases in `normalize-options.test.js` and `validate-options.test.js` for improved clarity and maintainability. * refactor(tests): update CLI option tests to use node:test and expect - Refactored multiple test files to utilize the `node:test` module for structuring tests. - Replaced direct assertions with `t.assert.snapshot` for snapshot testing. - Ensured consistency across tests by adding async context to test functions. - Updated imports to include necessary testing utilities from `node:test` and `expect`. * refactor(tests): update web socket tests to use node:test and expect assertions - Replaced traditional test structure with node:test for better test organization. - Updated snapshot assertions to use the new test framework's syntax. - Ensured all test cases in web-socket-communication.test.js, web-socket-server-url.test.js, and web-socket-server.test.js are consistent with the new structure. * refactor(tests): migrate tests to use node:test and improve snapshot organization - Updated test files to utilize the `node:test` module for better compatibility and performance. - Replaced `jest.fn()` with `jest-mock` functions for mocking in various test cases. - Enhanced snapshot descriptions for clarity and consistency across tests. - Introduced a new `jsdom-setup.js` helper to streamline JSDOM configuration for tests. - Adjusted test cases to use `t.assert.snapshot()` for snapshot assertions. - Cleaned up mock implementations and reset logic in tests for improved reliability. * refactor: migrate tests from Jest to Node's test module - Updated package.json to remove Jest dependencies and adjust test scripts for Node's test module. - Deleted globalSetupTest.js and setupTest.js as they are no longer needed. - Refactored ReactErrorBoundary.test.js to utilize real jsdom window/document. - Updated WebsocketClient.test.js to use async/await and improved test structure. - Skipped index.test.js due to dependency on Jest's mocking capabilities. - Refactored socket-helper.test.js to create a mock WebSocketClient class. - Updated log.test.js to simplify logger tests and remove unnecessary mocks. - Enhanced jsdom-setup.js to replace jsdom's WebSocket with Node's ws library for better testing of WebSocket connections. * fixup! * fixup! * fixup! * fixup! * fixup! * fixup! * fixup! * fixup! * fixup! * fixup! * fixup! * chore: update test runner * fixup! * chore: update snapshots and fix module path in API tests * fixup! * fixup! * chore: update snapshots for watchFiles option tests * refactor: remove unused Logger interface and simplify socket function parameters * fix: update snapshot serialization for Windows compatibility and adjust test helper import * fix: codecov upload * fix: ensure directories are created for test reporter destination * refactor: simplify client resolution and clean up socket tests * refactor: clean up comments and improve clarity in test files * fixup! --- .github/workflows/nodejs.yml | 2 +- eslint.config.mjs | 18 + jest.config.js | 30 - lib/Server.js | 11 + package-lock.json | 17329 ++++++---------- package.json | 16 +- scripts/check-test-ports.mjs | 33 + scripts/globalSetupTest.js | 41 - scripts/node-test-setup.mjs | 29 + scripts/run-tests.mjs | 64 + scripts/setupTest.js | 7 - .../normalize-options.test.js.snap.webpack5 | 102 +- .../validate-options.test.js.snap.webpack5 | 362 +- .../__snapshots__/basic.test.js.snap.webpack5 | 16 +- .../bonjour-option.test.js.snap.webpack5 | 11 +- .../colors.test.js.snap.webpack5 | 12 +- ...ryApiFallback-option.test.js.snap.webpack5 | 6 +- .../host-option.test.js.snap.webpack5 | 24 +- .../ipc-option.test.js.snap.webpack5 | 6 +- .../port-option.test.js.snap.webpack5 | 6 +- .../server-option.test.js.snap.webpack5 | 25 +- .../static-option.test.js.snap.webpack5 | 26 +- .../watchFiles-option.test.js.snap.webpack5 | 8 +- test/cli/allowedHosts-option.test.js | 2 + test/cli/basic.test.js | 237 +- test/cli/bonjour-option.test.js | 16 +- test/cli/client-option.test.js | 2 + test/cli/colors.test.js | 22 +- test/cli/compress-option.test.js | 2 + test/cli/historyApiFallback-option.test.js | 10 +- test/cli/host-option.test.js | 43 +- test/cli/hot-option.test.js | 2 + test/cli/ipc-option.test.js | 10 +- test/cli/liveReload-option.test.js | 2 + test/cli/open-option.test.js | 2 + test/cli/port-option.test.js | 10 +- test/cli/server-option.test.js | 44 +- test/cli/static-option.test.js | 50 +- test/cli/watchFiles-option.test.js | 14 +- test/cli/webSocketServer-option.test.js | 2 + test/client/ReactErrorBoundary.test.js | 63 +- .../__snapshots__/index.test.js.snap.webpack5 | 78 +- .../socket-helper.test.js.snap.webpack5 | 22 +- test/client/bundle.test.js | 6 +- test/client/clients/WebsocketClient.test.js | 90 +- .../WebsocketClient.test.js.snap.webpack5 | 4 +- test/client/index.test.js | 291 +- test/client/socket-helper.test.js | 133 +- ...tCurrentScriptSource.test.js.snap.webpack5 | 14 +- .../__snapshots__/log.test.js.snap.webpack5 | 4 +- .../sendMessage.test.js.snap.webpack5 | 4 +- test/client/utils/createSocketURL.test.js | 14 +- .../utils/getCurrentScriptSource.test.js | 21 +- test/client/utils/log.test.js | 69 +- test/client/utils/sendMessage.test.js | 19 +- .../allowed-hosts.test.js.snap.webpack5 | 212 +- .../__snapshots__/api.test.js.snap.webpack5 | 134 +- .../bonjour.test.js.snap.webpack5 | 42 +- .../built-in-routes.test.js.snap.webpack5 | 94 +- .../client-reconnect.test.js.snap.webpack5 | 30 +- .../client.test.js.snap.webpack5 | 52 +- .../compress.test.js.snap.webpack5 | 50 +- .../__snapshots__/entry.test.js.snap.webpack5 | 58 +- .../headers.test.js.snap.webpack5 | 114 +- ...history-api-fallback.test.js.snap.webpack5 | 228 +- .../__snapshots__/host.test.js.snap.webpack5 | 182 +- .../hot-and-live-reload.test.js.snap.webpack5 | 178 +- .../__snapshots__/ipc.test.js.snap.webpack5 | 14 +- .../logging.test.js.snap.webpack5 | 32 +- .../mime-types.test.js.snap.webpack5 | 34 +- .../module-federation.test.js.snap.webpack5 | 50 +- .../multi-compiler.test.js.snap.webpack5 | 124 +- .../on-listening.test.js.snap.webpack5 | 42 +- .../overlay.test.js.snap.webpack5 | 432 +- .../__snapshots__/port.test.js.snap.webpack5 | 40 +- ...and-client-transport.test.js.snap.webpack5 | 32 +- .../server.test.js.snap.webpack5 | 238 +- .../setup-exit-signals.test.js.snap.webpack5 | 22 +- .../setup-middlewares.test.js.snap.webpack5 | 78 +- .../static-directory.test.js.snap.webpack5 | 178 +- .../static-public-path.test.js.snap.webpack5 | 344 +- .../__snapshots__/stats.test.js.snap.webpack5 | 20 +- .../target.test.js.snap.webpack5 | 82 +- .../watch-files.test.js.snap.webpack5 | 470 +- ...socket-communication.test.js.snap.webpack5 | 20 +- ...eb-socket-server-url.test.js.snap.webpack5 | 206 +- .../web-socket-server.test.js.snap.webpack5 | 8 +- test/e2e/allowed-hosts.test.js | 234 +- test/e2e/api.test.js | 155 +- test/e2e/app.test.js | 2 + test/e2e/bonjour.test.js | 121 +- test/e2e/built-in-routes.test.js | 84 +- test/e2e/client-reconnect.test.js | 28 +- test/e2e/client.test.js | 44 +- test/e2e/compress.test.js | 44 +- test/e2e/cross-origin-request.test.js | 2 + test/e2e/entry.test.js | 68 +- test/e2e/headers.test.js | 108 +- test/e2e/history-api-fallback.test.js | 193 +- test/e2e/host.test.js | 27 +- test/e2e/hot-and-live-reload.test.js | 70 +- test/e2e/ipc.test.js | 28 +- test/e2e/lazy-compilation.test.js | 17 +- test/e2e/logging.test.js | 8 +- test/e2e/mime-types.test.js | 30 +- test/e2e/module-federation.test.js | 50 +- test/e2e/multi-compiler.test.js | 96 +- test/e2e/on-listening.test.js | 34 +- test/e2e/options-middleware.test.js | 2 + test/e2e/overlay.test.js | 309 +- test/e2e/port.test.js | 10 +- test/e2e/progress.test.js | 2 + test/e2e/range-header.test.js | 6 +- test/e2e/server-and-client-transport.test.js | 86 +- test/e2e/server.test.js | 235 +- test/e2e/setup-exit-signals.test.js | 90 +- test/e2e/setup-middlewares.test.js | 58 +- test/e2e/static-directory.test.js | 396 +- test/e2e/static-public-path.test.js | 293 +- test/e2e/stats.test.js | 11 +- test/e2e/target.test.js | 30 +- test/e2e/watch-files.test.js | 136 +- test/e2e/web-socket-communication.test.js | 24 +- test/e2e/web-socket-server-url.test.js | 276 +- test/e2e/web-socket-server.test.js | 10 +- test/helpers/conditional-test.js | 2 +- test/helpers/jsdom-setup.js | 81 + test/helpers/test-bin.js | 2 +- test/normalize-options.test.js | 10 +- .../proxy-option.test.js.snap.webpack5 | 12 +- test/server/open-option.test.js | 99 +- test/server/proxy-option.test.js | 104 +- test/validate-options.test.js | 13 +- 133 files changed, 12270 insertions(+), 14796 deletions(-) delete mode 100644 jest.config.js create mode 100644 scripts/check-test-ports.mjs delete mode 100644 scripts/globalSetupTest.js create mode 100644 scripts/node-test-setup.mjs create mode 100644 scripts/run-tests.mjs delete mode 100644 scripts/setupTest.js create mode 100644 test/helpers/jsdom-setup.js diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 8dd6eac59b..ed15e14c8e 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -106,7 +106,7 @@ jobs: cp -R tmp-client client - name: Run tests for webpack version ${{ matrix.webpack-version }} - run: npm run test:coverage -- --ci --shard=${{ matrix.shard }} + run: npm run test:coverage -- --test-shard=${{ matrix.shard }} - name: Submit coverage data to codecov uses: codecov/codecov-action@v5 diff --git a/eslint.config.mjs b/eslint.config.mjs index 52ac3be3ee..6cd919c421 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -21,5 +21,23 @@ export default defineConfig([ { files: ["test/**/*"], extends: [configs["universal-recommended"]], + rules: { + // Tests use experimental node:test APIs intentionally + // (mock.module, mock.timers, snapshot.*). The package's engines field + // is wider than where these are stable, so silence the linter here. + "n/no-unsupported-features/node-builtins": "off", + // Test callbacks (it/test/subtest arrow functions) don't need JSDoc. + "jsdoc/require-jsdoc": "off", + // Tests legitimately log diagnostics (retry attempts, etc.). + "no-console": "off", + // node:test callbacks receive `t` (TestContext) as a parameter. + "id-length": "off", + }, + }, + { + files: ["scripts/node-test-setup.mjs", "scripts/run-tests.mjs"], + rules: { + "n/no-unsupported-features/node-builtins": "off", + }, }, ]); diff --git a/jest.config.js b/jest.config.js deleted file mode 100644 index 7bd7b0bb03..0000000000 --- a/jest.config.js +++ /dev/null @@ -1,30 +0,0 @@ -"use strict"; - -module.exports = { - testEnvironmentOptions: { - url: "http://localhost/", - }, - collectCoverage: false, - coveragePathIgnorePatterns: [ - "/node_modules/", - "/test/", - "/client/", - ], - testPathIgnorePatterns: ["/bin/this/process-arguments.js"], - snapshotResolver: "/test/helpers/snapshotResolver.js", - setupFilesAfterEnv: ["/scripts/setupTest.js"], - globalSetup: "/scripts/globalSetupTest.js", - moduleNameMapper: { - // This forces Jest/jest-environment-jsdom to use a Node+CommonJS version of uuid, not a Browser+ESM one - // See https://github.com/uuidjs/uuid/pull/616 - // - // WARNING: if your dependency tree has multiple paths leading to uuid, this will force all of them to resolve to - // whichever one happens to be hoisted to your root node_modules folder. This makes it much more dangerous - // to consume future uuid upgrades. Consider using a custom resolver instead of moduleNameMapper. - // - // More: - // https://jestjs.io/docs/upgrading-to-jest28#packagejson-exports - // https://github.com/microsoft/accessibility-insights-web/pull/5421#issuecomment-1109168149 - // - }, -}; diff --git a/lib/Server.js b/lib/Server.js index 093e03ab62..70f131041f 100644 --- a/lib/Server.js +++ b/lib/Server.js @@ -3392,6 +3392,17 @@ class Server { } this.sockets = []; + + // Force-close any remaining connections that aren't in `this.sockets` + // (HTTP keep-alive idle connections from upstream clients, + // long-poll requests, sockets that were upgraded out of `connection` + // tracking, etc). Without this, `server.close()`'s callback can hang + // indefinitely waiting for connections that never close on their own + // — a problem that surfaces in test suites that rapidly start/stop + // servers on the same port (next start hits EADDRINUSE). + // `closeAllConnections` is available since Node.js 18.2. + /** @type {S & { closeAllConnections?: () => void }} */ + (this.server).closeAllConnections?.(); }) ); diff --git a/package-lock.json b/package-lock.json index 217a4cd486..8f0c3c0a79 100644 --- a/package-lock.json +++ b/package-lock.json @@ -57,7 +57,6 @@ "@types/picomatch": "^4.0.2", "@types/trusted-types": "^2.0.7", "acorn": "^8.14.0", - "babel-jest": "^30.0.4", "babel-loader": "^10.0.0", "connect": "^3.7.0", "core-js": "^3.38.1", @@ -67,16 +66,16 @@ "eslint-config-prettier": "^10.1.5", "eslint-config-webpack": "^4.4.0", "eslint-plugin-import": "^2.32.0", - "eslint-plugin-jest": "^29.0.1", "eslint-plugin-jsdoc": "^51.3.4", "eslint-plugin-n": "^17.21.0", "execa": "^5.1.1", + "expect": "^30.4.1", "hono": "^4.12.9", "html-webpack-plugin": "^5.6.3", "http-proxy": "^1.18.1", "husky": "^9.1.6", - "jest": "^30.0.4", - "jest-environment-jsdom": "^29.7.0", + "jest-mock": "^30.4.1", + "jsdom": "^29.1.1", "klona": "^2.0.4", "less": "^4.1.1", "less-loader": "^12.1.0", @@ -85,6 +84,7 @@ "memfs": "^4.14.0", "npm-run-all": "^4.1.5", "prettier": "^3.2.4", + "pretty-format": "^30.4.1", "puppeteer": "^24.35.0", "readable-stream": "^4.5.2", "require-from-string": "^2.0.2", @@ -101,7 +101,7 @@ "webpack-merge": "^6.0.1" }, "engines": { - "node": ">= 22.12.0" + "node": ">= 22.15.0" }, "funding": { "type": "opencollective", @@ -119,6 +119,57 @@ } } }, + "node_modules/@asamuzakjp/css-color": { + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-5.1.11.tgz", + "integrity": "sha512-KVw6qIiCTUQhByfTd78h2yD1/00waTmm9uy/R7Ck/ctUyAPj+AEDLkQIdJW0T8+qGgj3j5bpNKK7Q3G+LedJWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/generational-cache": "^1.0.1", + "@csstools/css-calc": "^3.2.0", + "@csstools/css-color-parser": "^4.1.0", + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/@asamuzakjp/dom-selector": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-7.1.1.tgz", + "integrity": "sha512-67RZDnYRc8H/8MLDgQCDE//zoqVFwajkepHZgmXrbwybzXOEwOWGPYGmALYl9J2DOLfFPPs6kKCqmbzV895hTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/generational-cache": "^1.0.1", + "@asamuzakjp/nwsapi": "^2.3.9", + "bidi-js": "^1.0.3", + "css-tree": "^3.2.1", + "is-potential-custom-element-name": "^1.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/@asamuzakjp/generational-cache": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@asamuzakjp/generational-cache/-/generational-cache-1.0.1.tgz", + "integrity": "sha512-wajfB8KqzMCN2KGNFdLkReeHncd0AslUSrvHVvvYWuU8ghncRJoA50kT3zP9MVL0+9g4/67H+cdvBskj9THPzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/@asamuzakjp/nwsapi": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@asamuzakjp/nwsapi/-/nwsapi-2.3.9.tgz", + "integrity": "sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==", + "dev": true, + "license": "MIT" + }, "node_modules/@babel/cli": { "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.28.6.tgz", @@ -698,61 +749,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-import-assertions": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", @@ -785,174 +781,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", - "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", - "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-unicode-sets-regex": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", @@ -2021,12 +1849,18 @@ "node": ">=6.9.0" } }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "node_modules/@bramus/specificity": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@bramus/specificity/-/specificity-2.4.2.tgz", + "integrity": "sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "css-tree": "^3.0.0" + }, + "bin": { + "specificity": "bin/cli.js" + } }, "node_modules/@commitlint/cli": { "version": "19.8.1", @@ -2890,84 +2724,192 @@ "node": ">=18.0" } }, - "node_modules/@discoveryjs/json-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-1.0.0.tgz", - "integrity": "sha512-dDlz3W405VMFO4w5kIP9DOmELBcvFQGmLoKSdIRstBDubKFYwaNHV1NnlzMCQpXQFGWVALmeMORAuiLx18AvZQ==", + "node_modules/@csstools/color-helpers": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-6.0.2.tgz", + "integrity": "sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q==", "dev": true, - "license": "MIT", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", "engines": { - "node": ">=14.17.0" - } - }, - "node_modules/@emnapi/core": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.8.1.tgz", - "integrity": "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/wasi-threads": "1.1.0", - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz", - "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/wasi-threads": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", - "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" + "node": ">=20.19.0" } }, - "node_modules/@es-joy/jsdoccomment": { - "version": "0.52.0", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.52.0.tgz", - "integrity": "sha512-BXuN7BII+8AyNtn57euU2Yxo9yA/KUDNzrpXyi3pfqKmBhhysR6ZWOebFh3vyPoqA3/j1SOvGgucElMGwlXing==", + "node_modules/@csstools/css-calc": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.2.0.tgz", + "integrity": "sha512-bR9e6o2BDB12jzN/gIbjHa5wLJ4UjD1CB9pM7ehlc0ddk6EBz+yYS1EV2MF55/HUxrHcB/hehAyt5vhsA3hx7w==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.8", - "@typescript-eslint/types": "^8.34.1", - "comment-parser": "1.4.1", - "esquery": "^1.6.0", - "jsdoc-type-pratt-parser": "~4.1.0" - }, "engines": { - "node": ">=20.11.0" + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", - "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", + "node_modules/@csstools/css-color-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.1.0.tgz", + "integrity": "sha512-U0KhLYmy2GVj6q4T3WaAe6NPuFYCPQoE3b0dRGxejWDgcPp8TP7S5rVdM5ZrFaqu4N67X8YaPBw14dQSYx3IyQ==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.4.3" + "@csstools/color-helpers": "^6.0.2", + "@csstools/css-calc": "^3.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=20.19.0" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-4.0.0.tgz", + "integrity": "sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-syntax-patches-for-csstree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.3.tgz", + "integrity": "sha512-SH60bMfrRCJF3morcdk57WklujF4Jr/EsQUzqkarfHXEFcAR1gg7fS/chAE922Sehgzc1/+Tz5H3Ypa1HiEKrg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "peerDependencies": { + "css-tree": "^3.2.1" + }, + "peerDependenciesMeta": { + "css-tree": { + "optional": true + } + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-4.0.0.tgz", + "integrity": "sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=20.19.0" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-1.0.0.tgz", + "integrity": "sha512-dDlz3W405VMFO4w5kIP9DOmELBcvFQGmLoKSdIRstBDubKFYwaNHV1NnlzMCQpXQFGWVALmeMORAuiLx18AvZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.17.0" + } + }, + "node_modules/@es-joy/jsdoccomment": { + "version": "0.52.0", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.52.0.tgz", + "integrity": "sha512-BXuN7BII+8AyNtn57euU2Yxo9yA/KUDNzrpXyi3pfqKmBhhysR6ZWOebFh3vyPoqA3/j1SOvGgucElMGwlXing==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.8", + "@typescript-eslint/types": "^8.34.1", + "comment-parser": "1.4.1", + "esquery": "^1.6.0", + "jsdoc-type-pratt-parser": "~4.1.0" + }, + "engines": { + "node": ">=20.11.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { @@ -3217,6 +3159,24 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@exodus/bytes": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@exodus/bytes/-/bytes-1.15.0.tgz", + "integrity": "sha512-UY0nlA+feH81UGSHv92sLEPLCeZFjXOuHhrIo0HQydScuQc8s0A7kL/UdgwgDq8g8ilksmuoF35YVTNphV2aBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@noble/hashes": "^1.8.0 || ^2.0.0" + }, + "peerDependenciesMeta": { + "@noble/hashes": { + "optional": true + } + } + }, "node_modules/@hono/node-server": { "version": "1.19.12", "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.12.tgz", @@ -3366,5084 +3326,2092 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/@jest/get-type": { + "version": "30.1.0", + "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz", + "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==", "dev": true, "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "devOptional": true, "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", "dev": true, "license": "MIT", "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "devOptional": true, "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, "engines": { - "node": ">=8" + "node": ">=6.0.0" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "devOptional": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "devOptional": true, + "license": "MIT" }, - "node_modules/@jest/console": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.2.0.tgz", - "integrity": "sha512-+O1ifRjkvYIkBqASKWgLxrpEhQAAE7hY77ALLUufSk5717KfOShg6IbqLmdsLMPdUiFvA2kTs0R7YZy+l0IzZQ==", - "dev": true, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "devOptional": true, "license": "MIT", "dependencies": { - "@jest/types": "30.2.0", - "@types/node": "*", - "chalk": "^4.1.2", - "jest-message-util": "30.2.0", - "jest-util": "30.2.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@jest/console/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, + "node_modules/@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", + "license": "Apache-2.0", "engines": { - "node": ">=8" + "node": ">=10.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/console/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "node_modules/@jsonjoy.com/buffers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.0.0.tgz", + "integrity": "sha512-NDigYR3PHqCnQLXYyoLbnEdzMMvzeiCWo1KOut7Q0CoIqg9tUAPKJ1iq/2nFhc5kZtexzutNY0LFjdwWL3Dw3Q==", + "license": "Apache-2.0", "engines": { - "node": ">=10" + "node": ">=10.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" + "type": "github", + "url": "https://github.com/sponsors/streamich" }, - "engines": { - "node": ">=7.0.0" + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/console/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/console/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", + "node_modules/@jsonjoy.com/codegen": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz", + "integrity": "sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==", + "license": "Apache-2.0", "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.2.0.tgz", - "integrity": "sha512-03W6IhuhjqTlpzh/ojut/pDB2LPRygyWX8ExpgHtQA8H/3K7+1vKmcINx5UzeOX1se6YEsBsOHQ1CRzf3fOwTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "30.2.0", - "@jest/pattern": "30.0.1", - "@jest/reporters": "30.2.0", - "@jest/test-result": "30.2.0", - "@jest/transform": "30.2.0", - "@jest/types": "30.2.0", - "@types/node": "*", - "ansi-escapes": "^4.3.2", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "exit-x": "^0.2.2", - "graceful-fs": "^4.2.11", - "jest-changed-files": "30.2.0", - "jest-config": "30.2.0", - "jest-haste-map": "30.2.0", - "jest-message-util": "30.2.0", - "jest-regex-util": "30.0.1", - "jest-resolve": "30.2.0", - "jest-resolve-dependencies": "30.2.0", - "jest-runner": "30.2.0", - "jest-runtime": "30.2.0", - "jest-snapshot": "30.2.0", - "jest-util": "30.2.0", - "jest-validate": "30.2.0", - "jest-watcher": "30.2.0", - "micromatch": "^4.0.8", - "pretty-format": "30.2.0", - "slash": "^3.0.0" + "node": ">=10.0" }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" }, "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "tslib": "2" } }, - "node_modules/@jest/core/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", + "node_modules/@jsonjoy.com/fs-core": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.57.1.tgz", + "integrity": "sha512-YrEi/ZPmgc+GfdO0esBF04qv8boK9Dg9WpRQw/+vM8Qt3nnVIJWIa8HwZ/LXVZ0DB11XUROM8El/7yYTJX+WtA==", + "license": "Apache-2.0", "dependencies": { - "color-convert": "^2.0.1" + "@jsonjoy.com/fs-node-builtins": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.1", + "thingies": "^2.5.0" }, "engines": { - "node": ">=8" + "node": ">=10.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/core/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", + "node_modules/@jsonjoy.com/fs-fsa": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.57.1.tgz", + "integrity": "sha512-ooEPvSW/HQDivPDPZMibHGKZf/QS4WRir1czGZmXmp3MsQqLECZEpN0JobrD8iV9BzsuwdIv+PxtWX9WpPLsIA==", + "license": "Apache-2.0", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@jsonjoy.com/fs-core": "4.57.1", + "@jsonjoy.com/fs-node-builtins": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.1", + "thingies": "^2.5.0" }, "engines": { - "node": ">=10" + "node": ">=10.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/core/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", + "node_modules/@jsonjoy.com/fs-node": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.57.1.tgz", + "integrity": "sha512-3YaKhP8gXEKN+2O49GLNfNb5l2gbnCFHyAaybbA2JkkbQP3dpdef7WcUaHAulg/c5Dg4VncHsA3NWAUSZMR5KQ==", + "license": "Apache-2.0", "dependencies": { - "color-name": "~1.1.4" + "@jsonjoy.com/fs-core": "4.57.1", + "@jsonjoy.com/fs-node-builtins": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.1", + "@jsonjoy.com/fs-print": "4.57.1", + "@jsonjoy.com/fs-snapshot": "4.57.1", + "glob-to-regex.js": "^1.0.0", + "thingies": "^2.5.0" }, "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/core/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/core/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/diff-sequences": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.0.1.tgz", - "integrity": "sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==", - "dev": true, - "license": "MIT", + "node_modules/@jsonjoy.com/fs-node-builtins": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.57.1.tgz", + "integrity": "sha512-XHkFKQ5GSH3uxm8c3ZYXVrexGdscpWKIcMWKFQpMpMJc8gA3AwOMBJXJlgpdJqmrhPyQXxaY9nbkNeYpacC0Og==", + "license": "Apache-2.0", "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/environment": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.2.0.tgz", - "integrity": "sha512-/QPTL7OBJQ5ac09UDRa3EQes4gt1FTEG/8jZ/4v5IVzx+Cv7dLxlVIvfvSVRiiX2drWyXeBjkMSR8hvOWSog5g==", - "dev": true, - "license": "MIT", + "node_modules/@jsonjoy.com/fs-node-to-fsa": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.57.1.tgz", + "integrity": "sha512-pqGHyWWzNck4jRfaGV39hkqpY5QjRUQ/nRbNT7FYbBa0xf4bDG+TE1Gt2KWZrSkrkZZDE3qZUjYMbjwSliX6pg==", + "license": "Apache-2.0", "dependencies": { - "@jest/fake-timers": "30.2.0", - "@jest/types": "30.2.0", - "@types/node": "*", - "jest-mock": "30.2.0" + "@jsonjoy.com/fs-fsa": "4.57.1", + "@jsonjoy.com/fs-node-builtins": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.1" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/expect": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.2.0.tgz", - "integrity": "sha512-V9yxQK5erfzx99Sf+7LbhBwNWEZ9eZay8qQ9+JSC0TrMR1pMDHLMY+BnVPacWU6Jamrh252/IKo4F1Xn/zfiqA==", - "dev": true, - "license": "MIT", + "node_modules/@jsonjoy.com/fs-node-utils": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.57.1.tgz", + "integrity": "sha512-vp+7ZzIB8v43G+GLXTS4oDUSQmhAsRz532QmmWBbdYA20s465JvwhkSFvX9cVTqRRAQg+vZ7zWDaIEh0lFe2gw==", + "license": "Apache-2.0", "dependencies": { - "expect": "30.2.0", - "jest-snapshot": "30.2.0" + "@jsonjoy.com/fs-node-builtins": "4.57.1" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/expect-utils": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.2.0.tgz", - "integrity": "sha512-1JnRfhqpD8HGpOmQp180Fo9Zt69zNtC+9lR+kT7NVL05tNXIi+QC8Csz7lfidMoVLPD3FnOtcmp0CEFnxExGEA==", - "dev": true, - "license": "MIT", + "node_modules/@jsonjoy.com/fs-print": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.57.1.tgz", + "integrity": "sha512-Ynct7ZJmfk6qoXDOKfpovNA36ITUx8rChLmRQtW08J73VOiuNsU8PB6d/Xs7fxJC2ohWR3a5AqyjmLojfrw5yw==", + "license": "Apache-2.0", "dependencies": { - "@jest/get-type": "30.1.0" + "@jsonjoy.com/fs-node-utils": "4.57.1", + "tree-dump": "^1.1.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/fake-timers": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.2.0.tgz", - "integrity": "sha512-HI3tRLjRxAbBy0VO8dqqm7Hb2mIa8d5bg/NJkyQcOk7V118ObQML8RC5luTF/Zsg4474a+gDvhce7eTnP4GhYw==", - "dev": true, - "license": "MIT", + "node_modules/@jsonjoy.com/fs-snapshot": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.57.1.tgz", + "integrity": "sha512-/oG8xBNFMbDXTq9J7vepSA1kerS5vpgd3p5QZSPd+nX59uwodGJftI51gDYyHRpP57P3WCQf7LHtBYPqwUg2Bg==", + "license": "Apache-2.0", "dependencies": { - "@jest/types": "30.2.0", - "@sinonjs/fake-timers": "^13.0.0", - "@types/node": "*", - "jest-message-util": "30.2.0", - "jest-mock": "30.2.0", - "jest-util": "30.2.0" + "@jsonjoy.com/buffers": "^17.65.0", + "@jsonjoy.com/fs-node-utils": "4.57.1", + "@jsonjoy.com/json-pack": "^17.65.0", + "@jsonjoy.com/util": "^17.65.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/get-type": { - "version": "30.1.0", - "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz", - "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==", - "dev": true, - "license": "MIT", + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/base64": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-17.67.0.tgz", + "integrity": "sha512-5SEsJGsm15aP8TQGkDfJvz9axgPwAEm98S5DxOuYe8e1EbfajcDmgeXXzccEjh+mLnjqEKrkBdjHWS5vFNwDdw==", + "license": "Apache-2.0", "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/globals": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.2.0.tgz", - "integrity": "sha512-b63wmnKPaK+6ZZfpYhz9K61oybvbI1aMcIs80++JI1O1rR1vaxHUCNqo3ITu6NU0d4V34yZFoHMn/uoKr/Rwfw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "30.2.0", - "@jest/expect": "30.2.0", - "@jest/types": "30.2.0", - "jest-mock": "30.2.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/buffers": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-17.67.0.tgz", + "integrity": "sha512-tfExRpYxBvi32vPs9ZHaTjSP4fHAfzSmcahOfNxtvGHcyJel+aibkPlGeBB+7AoC6hL7lXIE++8okecBxx7lcw==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/pattern": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz", - "integrity": "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "jest-regex-util": "30.0.1" - }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/codegen": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-17.67.0.tgz", + "integrity": "sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q==", + "license": "Apache-2.0", "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/reporters": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.2.0.tgz", - "integrity": "sha512-DRyW6baWPqKMa9CzeiBjHwjd8XeAyco2Vt8XbcLFjiwCOEKOvy82GJ8QQnJE9ofsxCMPjH4MfH8fCWIHHDKpAQ==", - "dev": true, - "license": "MIT", + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pack": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-17.67.0.tgz", + "integrity": "sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w==", + "license": "Apache-2.0", "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "30.2.0", - "@jest/test-result": "30.2.0", - "@jest/transform": "30.2.0", - "@jest/types": "30.2.0", - "@jridgewell/trace-mapping": "^0.3.25", - "@types/node": "*", - "chalk": "^4.1.2", - "collect-v8-coverage": "^1.0.2", - "exit-x": "^0.2.2", - "glob": "^10.3.10", - "graceful-fs": "^4.2.11", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^5.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "30.2.0", - "jest-util": "30.2.0", - "jest-worker": "30.2.0", - "slash": "^3.0.0", - "string-length": "^4.0.2", - "v8-to-istanbul": "^9.0.1" + "@jsonjoy.com/base64": "17.67.0", + "@jsonjoy.com/buffers": "17.67.0", + "@jsonjoy.com/codegen": "17.67.0", + "@jsonjoy.com/json-pointer": "17.67.0", + "@jsonjoy.com/util": "17.67.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=10.0" }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pointer": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-17.67.0.tgz", + "integrity": "sha512-+iqOFInH+QZGmSuaybBUNdh7yvNrXvqR+h3wjXm0N/3JK1EyyFAeGJvqnmQL61d1ARLlk/wJdFKSL+LHJ1eaUA==", + "license": "Apache-2.0", "dependencies": { - "color-convert": "^2.0.1" + "@jsonjoy.com/util": "17.67.0" }, "engines": { - "node": ">=8" + "node": ">=10.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/reporters/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/util": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-17.67.0.tgz", + "integrity": "sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew==", + "license": "Apache-2.0", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@jsonjoy.com/buffers": "17.67.0", + "@jsonjoy.com/codegen": "17.67.0" }, "engines": { - "node": ">=10" + "node": ">=10.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/reporters/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", + "node_modules/@jsonjoy.com/json-pack": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.11.0.tgz", + "integrity": "sha512-nLqSTAYwpk+5ZQIoVp7pfd/oSKNWlEdvTq2LzVA4r2wtWZg6v+5u0VgBOaDJuUfNOuw/4Ysq6glN5QKSrOCgrA==", + "license": "Apache-2.0", "dependencies": { - "color-name": "~1.1.4" + "@jsonjoy.com/base64": "^1.1.2", + "@jsonjoy.com/buffers": "^1.0.0", + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/json-pointer": "^1.0.1", + "@jsonjoy.com/util": "^1.9.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/reporters/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/reporters/node_modules/glob": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", - "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", - "dev": true, - "license": "ISC", + "node_modules/@jsonjoy.com/json-pointer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz", + "integrity": "sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==", + "license": "Apache-2.0", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/util": "^1.9.0" }, - "bin": { - "glob": "dist/esm/bin.mjs" + "engines": { + "node": ">=10.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/reporters/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", + "node_modules/@jsonjoy.com/util": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.9.0.tgz", + "integrity": "sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==", + "license": "Apache-2.0", "dependencies": { - "brace-expansion": "^2.0.1" + "@jsonjoy.com/buffers": "^1.0.0", + "@jsonjoy.com/codegen": "^1.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=10.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/reporters/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "license": "MIT" }, - "node_modules/@jest/schemas": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz", - "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==", + "node_modules/@nicolo-ribaudo/chokidar-2": { + "version": "2.1.8-no-fsevents.3", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", + "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==", "dev": true, "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.34.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } + "optional": true }, - "node_modules/@jest/snapshot-utils": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.2.0.tgz", - "integrity": "sha512-0aVxM3RH6DaiLcjj/b0KrIBZhSX1373Xci4l3cW5xiUWPctZ59zQ7jj4rqcJQ/Z8JuN/4wX3FpJSa3RssVvCug==", + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { + "version": "5.1.1-v1", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", + "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.2.0", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "natural-compare": "^1.4.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "eslint-scope": "5.1.1" } }, - "node_modules/@jest/snapshot-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", "dev": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, + "peer": true, "engines": { - "node": ">=8" + "node": "^14.21.3 || >=16" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@jest/snapshot-utils/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@paralleldrive/cuid2": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.3.1.tgz", + "integrity": "sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "@noble/hashes": "^1.1.5" } }, - "node_modules/@jest/snapshot-utils/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "node_modules/@peculiar/asn1-cms": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.6.0.tgz", + "integrity": "sha512-2uZqP+ggSncESeUF/9Su8rWqGclEfEiz1SyU02WX5fUONFfkjzS2Z/F1Li0ofSmf4JqYXIOdCAZqIXAIBAT1OA==", "license": "MIT", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", + "@peculiar/asn1-x509-attr": "^2.6.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" } }, - "node_modules/@jest/snapshot-utils/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/source-map": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-30.0.1.tgz", - "integrity": "sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==", - "dev": true, + "node_modules/@peculiar/asn1-csr": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-csr/-/asn1-csr-2.6.0.tgz", + "integrity": "sha512-BeWIu5VpTIhfRysfEp73SGbwjjoLL/JWXhJ/9mo4vXnz3tRGm+NGm3KNcRzQ9VMVqwYS2RHlolz21svzRXIHPQ==", "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", - "callsites": "^3.1.0", - "graceful-fs": "^4.2.11" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" } }, - "node_modules/@jest/test-result": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.2.0.tgz", - "integrity": "sha512-RF+Z+0CCHkARz5HT9mcQCBulb1wgCP3FBvl9VFokMX27acKphwyQsNuWH3c+ojd1LeWBLoTYoxF0zm6S/66mjg==", - "dev": true, + "node_modules/@peculiar/asn1-ecc": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.6.0.tgz", + "integrity": "sha512-FF3LMGq6SfAOwUG2sKpPXblibn6XnEIKa+SryvUl5Pik+WR9rmRA3OCiwz8R3lVXnYnyRkSZsSLdml8H3UiOcw==", "license": "MIT", "dependencies": { - "@jest/console": "30.2.0", - "@jest/types": "30.2.0", - "@types/istanbul-lib-coverage": "^2.0.6", - "collect-v8-coverage": "^1.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" } }, - "node_modules/@jest/test-sequencer": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.2.0.tgz", - "integrity": "sha512-wXKgU/lk8fKXMu/l5Hog1R61bL4q5GCdT6OJvdAFz1P+QrpoFuLU68eoKuVc4RbrTtNnTL5FByhWdLgOPSph+Q==", - "dev": true, + "node_modules/@peculiar/asn1-pfx": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pfx/-/asn1-pfx-2.6.0.tgz", + "integrity": "sha512-rtUvtf+tyKGgokHHmZzeUojRZJYPxoD/jaN1+VAB4kKR7tXrnDCA/RAWXAIhMJJC+7W27IIRGe9djvxKgsldCQ==", "license": "MIT", "dependencies": { - "@jest/test-result": "30.2.0", - "graceful-fs": "^4.2.11", - "jest-haste-map": "30.2.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "@peculiar/asn1-cms": "^2.6.0", + "@peculiar/asn1-pkcs8": "^2.6.0", + "@peculiar/asn1-rsa": "^2.6.0", + "@peculiar/asn1-schema": "^2.6.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" } }, - "node_modules/@jest/test-sequencer/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, + "node_modules/@peculiar/asn1-pkcs8": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.6.0.tgz", + "integrity": "sha512-KyQ4D8G/NrS7Fw3XCJrngxmjwO/3htnA0lL9gDICvEQ+GJ+EPFqldcJQTwPIdvx98Tua+WjkdKHSC0/Km7T+lA==", "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" } }, - "node_modules/@jest/transform": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.2.0.tgz", - "integrity": "sha512-XsauDV82o5qXbhalKxD7p4TZYYdwcaEXC77PPD2HixEFF+6YGppjrAAQurTl2ECWcEomHBMMNS9AH3kcCFx8jA==", - "dev": true, + "node_modules/@peculiar/asn1-pkcs9": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.6.0.tgz", + "integrity": "sha512-b78OQ6OciW0aqZxdzliXGYHASeCvvw5caqidbpQRYW2mBtXIX2WhofNXTEe7NyxTb0P6J62kAAWLwn0HuMF1Fw==", "license": "MIT", "dependencies": { - "@babel/core": "^7.27.4", - "@jest/types": "30.2.0", - "@jridgewell/trace-mapping": "^0.3.25", - "babel-plugin-istanbul": "^7.0.1", - "chalk": "^4.1.2", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.11", - "jest-haste-map": "30.2.0", - "jest-regex-util": "30.0.1", - "jest-util": "30.2.0", - "micromatch": "^4.0.8", - "pirates": "^4.0.7", - "slash": "^3.0.0", - "write-file-atomic": "^5.0.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "@peculiar/asn1-cms": "^2.6.0", + "@peculiar/asn1-pfx": "^2.6.0", + "@peculiar/asn1-pkcs8": "^2.6.0", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", + "@peculiar/asn1-x509-attr": "^2.6.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" } }, - "node_modules/@jest/transform/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "node_modules/@peculiar/asn1-rsa": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.6.0.tgz", + "integrity": "sha512-Nu4C19tsrTsCp9fDrH+sdcOKoVfdfoQQ7S3VqjJU6vedR7tY3RLkQ5oguOIB3zFW33USDUuYZnPEQYySlgha4w==", "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" } }, - "node_modules/@jest/transform/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/@peculiar/asn1-schema": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.6.0.tgz", + "integrity": "sha512-xNLYLBFTBKkCzEZIw842BxytQQATQv+lDTCEMZ8C196iJcJJMBUZxrhSTxLaohMyKK8QlzRNTRkUmanucnDSqg==", "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "asn1js": "^3.0.6", + "pvtsutils": "^1.3.6", + "tslib": "^2.8.1" } }, - "node_modules/@jest/transform/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "node_modules/@peculiar/asn1-x509": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.6.0.tgz", + "integrity": "sha512-uzYbPEpoQiBoTq0/+jZtpM6Gq6zADBx+JNFP3yqRgziWBxQ/Dt/HcuvRfm9zJTPdRcBqPNdaRHTVwpyiq6iNMA==", "license": "MIT", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "@peculiar/asn1-schema": "^2.6.0", + "asn1js": "^3.0.6", + "pvtsutils": "^1.3.6", + "tslib": "^2.8.1" } }, - "node_modules/@jest/transform/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/transform/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, + "node_modules/@peculiar/asn1-x509-attr": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.6.0.tgz", + "integrity": "sha512-MuIAXFX3/dc8gmoZBkwJWxUWOSvG4MMDntXhrOZpJVMkYX+MYc/rUAU2uJOved9iJEoiUx7//3D8oG83a78UJA==", "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" } }, - "node_modules/@jest/types": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.2.0.tgz", - "integrity": "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg==", - "dev": true, + "node_modules/@peculiar/x509": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/@peculiar/x509/-/x509-1.14.2.tgz", + "integrity": "sha512-r2w1Hg6pODDs0zfAKHkSS5HLkOLSeburtcgwvlLLWWCixw+MmW3U6kD5ddyvc2Y2YdbGuVwCF2S2ASoU1cFAag==", "license": "MIT", "dependencies": { - "@jest/pattern": "30.0.1", - "@jest/schemas": "30.0.5", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" + "@peculiar/asn1-cms": "^2.6.0", + "@peculiar/asn1-csr": "^2.6.0", + "@peculiar/asn1-ecc": "^2.6.0", + "@peculiar/asn1-pkcs9": "^2.6.0", + "@peculiar/asn1-rsa": "^2.6.0", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", + "pvtsutils": "^1.3.6", + "reflect-metadata": "^0.2.2", + "tslib": "^2.8.1", + "tsyringe": "^4.10.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=22.0.0" } }, - "node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, + "optional": true, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=14" } }, - "node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@pkgr/core": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://opencollective.com/pkgr" } }, - "node_modules/@jest/types/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/@puppeteer/browsers": { + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.11.1.tgz", + "integrity": "sha512-YmhAxs7XPuxN0j7LJloHpfD1ylhDuFmmwMvfy/+6nBSrETT2ycL53LrhgPtR+f+GcPSybQVuQ5inWWu5MrWCpA==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "color-name": "~1.1.4" + "debug": "^4.4.3", + "extract-zip": "^2.0.1", + "progress": "^2.0.3", + "proxy-agent": "^6.5.0", + "semver": "^7.7.3", + "tar-fs": "^3.1.1", + "yargs": "^17.7.2" + }, + "bin": { + "browsers": "lib/cjs/main-cli.js" }, "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/types/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", - "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@jsonjoy.com/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", - "license": "Apache-2.0", - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/buffers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.0.0.tgz", - "integrity": "sha512-NDigYR3PHqCnQLXYyoLbnEdzMMvzeiCWo1KOut7Q0CoIqg9tUAPKJ1iq/2nFhc5kZtexzutNY0LFjdwWL3Dw3Q==", - "license": "Apache-2.0", - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/codegen": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz", - "integrity": "sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==", - "license": "Apache-2.0", - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/fs-core": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.57.1.tgz", - "integrity": "sha512-YrEi/ZPmgc+GfdO0esBF04qv8boK9Dg9WpRQw/+vM8Qt3nnVIJWIa8HwZ/LXVZ0DB11XUROM8El/7yYTJX+WtA==", - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/fs-node-builtins": "4.57.1", - "@jsonjoy.com/fs-node-utils": "4.57.1", - "thingies": "^2.5.0" - }, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/fs-fsa": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.57.1.tgz", - "integrity": "sha512-ooEPvSW/HQDivPDPZMibHGKZf/QS4WRir1czGZmXmp3MsQqLECZEpN0JobrD8iV9BzsuwdIv+PxtWX9WpPLsIA==", - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/fs-core": "4.57.1", - "@jsonjoy.com/fs-node-builtins": "4.57.1", - "@jsonjoy.com/fs-node-utils": "4.57.1", - "thingies": "^2.5.0" - }, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/fs-node": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.57.1.tgz", - "integrity": "sha512-3YaKhP8gXEKN+2O49GLNfNb5l2gbnCFHyAaybbA2JkkbQP3dpdef7WcUaHAulg/c5Dg4VncHsA3NWAUSZMR5KQ==", - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/fs-core": "4.57.1", - "@jsonjoy.com/fs-node-builtins": "4.57.1", - "@jsonjoy.com/fs-node-utils": "4.57.1", - "@jsonjoy.com/fs-print": "4.57.1", - "@jsonjoy.com/fs-snapshot": "4.57.1", - "glob-to-regex.js": "^1.0.0", - "thingies": "^2.5.0" - }, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/fs-node-builtins": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.57.1.tgz", - "integrity": "sha512-XHkFKQ5GSH3uxm8c3ZYXVrexGdscpWKIcMWKFQpMpMJc8gA3AwOMBJXJlgpdJqmrhPyQXxaY9nbkNeYpacC0Og==", - "license": "Apache-2.0", - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/fs-node-to-fsa": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.57.1.tgz", - "integrity": "sha512-pqGHyWWzNck4jRfaGV39hkqpY5QjRUQ/nRbNT7FYbBa0xf4bDG+TE1Gt2KWZrSkrkZZDE3qZUjYMbjwSliX6pg==", - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/fs-fsa": "4.57.1", - "@jsonjoy.com/fs-node-builtins": "4.57.1", - "@jsonjoy.com/fs-node-utils": "4.57.1" - }, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/fs-node-utils": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.57.1.tgz", - "integrity": "sha512-vp+7ZzIB8v43G+GLXTS4oDUSQmhAsRz532QmmWBbdYA20s465JvwhkSFvX9cVTqRRAQg+vZ7zWDaIEh0lFe2gw==", - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/fs-node-builtins": "4.57.1" - }, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/fs-print": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.57.1.tgz", - "integrity": "sha512-Ynct7ZJmfk6qoXDOKfpovNA36ITUx8rChLmRQtW08J73VOiuNsU8PB6d/Xs7fxJC2ohWR3a5AqyjmLojfrw5yw==", - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/fs-node-utils": "4.57.1", - "tree-dump": "^1.1.0" - }, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/fs-snapshot": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.57.1.tgz", - "integrity": "sha512-/oG8xBNFMbDXTq9J7vepSA1kerS5vpgd3p5QZSPd+nX59uwodGJftI51gDYyHRpP57P3WCQf7LHtBYPqwUg2Bg==", - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/buffers": "^17.65.0", - "@jsonjoy.com/fs-node-utils": "4.57.1", - "@jsonjoy.com/json-pack": "^17.65.0", - "@jsonjoy.com/util": "^17.65.0" - }, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/base64": { - "version": "17.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-17.67.0.tgz", - "integrity": "sha512-5SEsJGsm15aP8TQGkDfJvz9axgPwAEm98S5DxOuYe8e1EbfajcDmgeXXzccEjh+mLnjqEKrkBdjHWS5vFNwDdw==", - "license": "Apache-2.0", - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/buffers": { - "version": "17.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-17.67.0.tgz", - "integrity": "sha512-tfExRpYxBvi32vPs9ZHaTjSP4fHAfzSmcahOfNxtvGHcyJel+aibkPlGeBB+7AoC6hL7lXIE++8okecBxx7lcw==", - "license": "Apache-2.0", - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/codegen": { - "version": "17.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-17.67.0.tgz", - "integrity": "sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q==", - "license": "Apache-2.0", - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pack": { - "version": "17.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-17.67.0.tgz", - "integrity": "sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w==", - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/base64": "17.67.0", - "@jsonjoy.com/buffers": "17.67.0", - "@jsonjoy.com/codegen": "17.67.0", - "@jsonjoy.com/json-pointer": "17.67.0", - "@jsonjoy.com/util": "17.67.0", - "hyperdyperid": "^1.2.0", - "thingies": "^2.5.0", - "tree-dump": "^1.1.0" - }, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pointer": { - "version": "17.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-17.67.0.tgz", - "integrity": "sha512-+iqOFInH+QZGmSuaybBUNdh7yvNrXvqR+h3wjXm0N/3JK1EyyFAeGJvqnmQL61d1ARLlk/wJdFKSL+LHJ1eaUA==", - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/util": "17.67.0" - }, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/util": { - "version": "17.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-17.67.0.tgz", - "integrity": "sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew==", - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/buffers": "17.67.0", - "@jsonjoy.com/codegen": "17.67.0" - }, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/json-pack": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.11.0.tgz", - "integrity": "sha512-nLqSTAYwpk+5ZQIoVp7pfd/oSKNWlEdvTq2LzVA4r2wtWZg6v+5u0VgBOaDJuUfNOuw/4Ysq6glN5QKSrOCgrA==", - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/base64": "^1.1.2", - "@jsonjoy.com/buffers": "^1.0.0", - "@jsonjoy.com/codegen": "^1.0.0", - "@jsonjoy.com/json-pointer": "^1.0.1", - "@jsonjoy.com/util": "^1.9.0", - "hyperdyperid": "^1.2.0", - "thingies": "^2.5.0" - }, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/json-pointer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz", - "integrity": "sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==", - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/codegen": "^1.0.0", - "@jsonjoy.com/util": "^1.9.0" - }, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/util": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.9.0.tgz", - "integrity": "sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==", - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/buffers": "^1.0.0", - "@jsonjoy.com/codegen": "^1.0.0" - }, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", - "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", - "license": "MIT" - }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", - "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "^1.4.3", - "@emnapi/runtime": "^1.4.3", - "@tybys/wasm-util": "^0.10.0" - } - }, - "node_modules/@nicolo-ribaudo/chokidar-2": { - "version": "2.1.8-no-fsevents.3", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", - "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { - "version": "5.1.1-v1", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", - "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-scope": "5.1.1" - } - }, - "node_modules/@noble/hashes": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", - "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@paralleldrive/cuid2": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.3.1.tgz", - "integrity": "sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@noble/hashes": "^1.1.5" - } - }, - "node_modules/@peculiar/asn1-cms": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.6.0.tgz", - "integrity": "sha512-2uZqP+ggSncESeUF/9Su8rWqGclEfEiz1SyU02WX5fUONFfkjzS2Z/F1Li0ofSmf4JqYXIOdCAZqIXAIBAT1OA==", - "license": "MIT", - "dependencies": { - "@peculiar/asn1-schema": "^2.6.0", - "@peculiar/asn1-x509": "^2.6.0", - "@peculiar/asn1-x509-attr": "^2.6.0", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/asn1-csr": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-csr/-/asn1-csr-2.6.0.tgz", - "integrity": "sha512-BeWIu5VpTIhfRysfEp73SGbwjjoLL/JWXhJ/9mo4vXnz3tRGm+NGm3KNcRzQ9VMVqwYS2RHlolz21svzRXIHPQ==", - "license": "MIT", - "dependencies": { - "@peculiar/asn1-schema": "^2.6.0", - "@peculiar/asn1-x509": "^2.6.0", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/asn1-ecc": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.6.0.tgz", - "integrity": "sha512-FF3LMGq6SfAOwUG2sKpPXblibn6XnEIKa+SryvUl5Pik+WR9rmRA3OCiwz8R3lVXnYnyRkSZsSLdml8H3UiOcw==", - "license": "MIT", - "dependencies": { - "@peculiar/asn1-schema": "^2.6.0", - "@peculiar/asn1-x509": "^2.6.0", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/asn1-pfx": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-pfx/-/asn1-pfx-2.6.0.tgz", - "integrity": "sha512-rtUvtf+tyKGgokHHmZzeUojRZJYPxoD/jaN1+VAB4kKR7tXrnDCA/RAWXAIhMJJC+7W27IIRGe9djvxKgsldCQ==", - "license": "MIT", - "dependencies": { - "@peculiar/asn1-cms": "^2.6.0", - "@peculiar/asn1-pkcs8": "^2.6.0", - "@peculiar/asn1-rsa": "^2.6.0", - "@peculiar/asn1-schema": "^2.6.0", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/asn1-pkcs8": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.6.0.tgz", - "integrity": "sha512-KyQ4D8G/NrS7Fw3XCJrngxmjwO/3htnA0lL9gDICvEQ+GJ+EPFqldcJQTwPIdvx98Tua+WjkdKHSC0/Km7T+lA==", - "license": "MIT", - "dependencies": { - "@peculiar/asn1-schema": "^2.6.0", - "@peculiar/asn1-x509": "^2.6.0", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/asn1-pkcs9": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.6.0.tgz", - "integrity": "sha512-b78OQ6OciW0aqZxdzliXGYHASeCvvw5caqidbpQRYW2mBtXIX2WhofNXTEe7NyxTb0P6J62kAAWLwn0HuMF1Fw==", - "license": "MIT", - "dependencies": { - "@peculiar/asn1-cms": "^2.6.0", - "@peculiar/asn1-pfx": "^2.6.0", - "@peculiar/asn1-pkcs8": "^2.6.0", - "@peculiar/asn1-schema": "^2.6.0", - "@peculiar/asn1-x509": "^2.6.0", - "@peculiar/asn1-x509-attr": "^2.6.0", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/asn1-rsa": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.6.0.tgz", - "integrity": "sha512-Nu4C19tsrTsCp9fDrH+sdcOKoVfdfoQQ7S3VqjJU6vedR7tY3RLkQ5oguOIB3zFW33USDUuYZnPEQYySlgha4w==", - "license": "MIT", - "dependencies": { - "@peculiar/asn1-schema": "^2.6.0", - "@peculiar/asn1-x509": "^2.6.0", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/asn1-schema": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.6.0.tgz", - "integrity": "sha512-xNLYLBFTBKkCzEZIw842BxytQQATQv+lDTCEMZ8C196iJcJJMBUZxrhSTxLaohMyKK8QlzRNTRkUmanucnDSqg==", - "license": "MIT", - "dependencies": { - "asn1js": "^3.0.6", - "pvtsutils": "^1.3.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/asn1-x509": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.6.0.tgz", - "integrity": "sha512-uzYbPEpoQiBoTq0/+jZtpM6Gq6zADBx+JNFP3yqRgziWBxQ/Dt/HcuvRfm9zJTPdRcBqPNdaRHTVwpyiq6iNMA==", - "license": "MIT", - "dependencies": { - "@peculiar/asn1-schema": "^2.6.0", - "asn1js": "^3.0.6", - "pvtsutils": "^1.3.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/asn1-x509-attr": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.6.0.tgz", - "integrity": "sha512-MuIAXFX3/dc8gmoZBkwJWxUWOSvG4MMDntXhrOZpJVMkYX+MYc/rUAU2uJOved9iJEoiUx7//3D8oG83a78UJA==", - "license": "MIT", - "dependencies": { - "@peculiar/asn1-schema": "^2.6.0", - "@peculiar/asn1-x509": "^2.6.0", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/x509": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/@peculiar/x509/-/x509-1.14.2.tgz", - "integrity": "sha512-r2w1Hg6pODDs0zfAKHkSS5HLkOLSeburtcgwvlLLWWCixw+MmW3U6kD5ddyvc2Y2YdbGuVwCF2S2ASoU1cFAag==", - "license": "MIT", - "dependencies": { - "@peculiar/asn1-cms": "^2.6.0", - "@peculiar/asn1-csr": "^2.6.0", - "@peculiar/asn1-ecc": "^2.6.0", - "@peculiar/asn1-pkcs9": "^2.6.0", - "@peculiar/asn1-rsa": "^2.6.0", - "@peculiar/asn1-schema": "^2.6.0", - "@peculiar/asn1-x509": "^2.6.0", - "pvtsutils": "^1.3.6", - "reflect-metadata": "^0.2.2", - "tslib": "^2.8.1", - "tsyringe": "^4.10.0" - }, - "engines": { - "node": ">=22.0.0" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@pkgr/core": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", - "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/pkgr" - } - }, - "node_modules/@puppeteer/browsers": { - "version": "2.11.1", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.11.1.tgz", - "integrity": "sha512-YmhAxs7XPuxN0j7LJloHpfD1ylhDuFmmwMvfy/+6nBSrETT2ycL53LrhgPtR+f+GcPSybQVuQ5inWWu5MrWCpA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "debug": "^4.4.3", - "extract-zip": "^2.0.1", - "progress": "^2.0.3", - "proxy-agent": "^6.5.0", - "semver": "^7.7.3", - "tar-fs": "^3.1.1", - "yargs": "^17.7.2" - }, - "bin": { - "browsers": "lib/cjs/main-cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@puppeteer/browsers/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@rtsao/scc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@sinclair/typebox": { - "version": "0.34.41", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.41.tgz", - "integrity": "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "13.0.5", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", - "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.1" - } - }, - "node_modules/@stylistic/eslint-plugin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-5.3.1.tgz", - "integrity": "sha512-Ykums1VYonM0TgkD0VteVq9mrlO2FhF48MDJnPyv3MktIB2ydtuhlO0AfWm7xnW1kyf5bjOqA6xc7JjviuVTxg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/types": "^8.41.0", - "eslint-visitor-keys": "^4.2.1", - "espree": "^10.4.0", - "estraverse": "^5.3.0", - "picomatch": "^4.0.3" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "peerDependencies": { - "eslint": ">=9.0.0" - } - }, - "node_modules/@stylistic/eslint-plugin/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tootallnate/quickjs-emscripten": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", - "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tybys/wasm-util": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", - "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", - "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", - "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.28.2" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.6", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", - "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", - "license": "MIT", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", - "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/compression": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@types/compression/-/compression-1.8.1.tgz", - "integrity": "sha512-kCFuWS0ebDbmxs0AXYn6e2r2nrGAb5KwQhknjSPSPgJcGd8+HVSILlUyFhGqML2gk39HcG7D1ydW9/qpYkN00Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/express": "*", - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", - "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", - "license": "MIT", - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/conventional-commits-parser": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.1.tgz", - "integrity": "sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "devOptional": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/@types/express": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.6.tgz", - "integrity": "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==", - "license": "MIT", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^5.0.0", - "@types/serve-static": "^2" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.1.tgz", - "integrity": "sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/http-errors": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", - "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", - "license": "MIT" - }, - "node_modules/@types/http-proxy": { - "version": "1.17.16", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.16.tgz", - "integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jsdom": { - "version": "20.0.1", - "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", - "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/tough-cookie": "*", - "parse5": "^7.0.0" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "license": "MIT" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/mdast": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", - "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "license": "MIT" - }, - "node_modules/@types/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", - "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "24.10.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", - "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "undici-types": "~7.16.0" - } - }, - "node_modules/@types/node-forge": { - "version": "1.3.14", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.14.tgz", - "integrity": "sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-qHHxQ+P9PysNEGbALT8f8YOSHW0KJu6l2xU8DYY0fu/EmGxXdVnuTLvFUvBgPJMSqXq29SYHveejeAha+4AYgA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", - "license": "MIT" - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "license": "MIT" - }, - "node_modules/@types/send": { - "version": "0.17.5", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", - "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", - "license": "MIT", - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-index": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", - "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", - "license": "MIT", - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz", - "integrity": "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==", - "license": "MIT", - "dependencies": { - "@types/http-errors": "*", - "@types/node": "*" - } - }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/tough-cookie": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", - "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/trusted-types": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", - "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/yauzl": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", - "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.48.0.tgz", - "integrity": "sha512-XxXP5tL1txl13YFtrECECQYeZjBZad4fyd3cFV4a19LkAY/bIp9fev3US4S5fDVV2JaYFiKAZ/GRTOLer+mbyQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.48.0", - "@typescript-eslint/type-utils": "8.48.0", - "@typescript-eslint/utils": "8.48.0", - "@typescript-eslint/visitor-keys": "8.48.0", - "graphemer": "^1.4.0", - "ignore": "^7.0.0", - "natural-compare": "^1.4.0", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^8.48.0", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.48.0.tgz", - "integrity": "sha512-jCzKdm/QK0Kg4V4IK/oMlRZlY+QOcdjv89U2NgKHZk1CYTj82/RVSx1mV/0gqCVMJ/DA+Zf/S4NBWNF8GQ+eqQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@typescript-eslint/scope-manager": "8.48.0", - "@typescript-eslint/types": "8.48.0", - "@typescript-eslint/typescript-estree": "8.48.0", - "@typescript-eslint/visitor-keys": "8.48.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/project-service": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.48.0.tgz", - "integrity": "sha512-Ne4CTZyRh1BecBf84siv42wv5vQvVmgtk8AuiEffKTUo3DrBaGYZueJSxxBZ8fjk/N3DrgChH4TOdIOwOwiqqw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.48.0", - "@typescript-eslint/types": "^8.48.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.48.0.tgz", - "integrity": "sha512-uGSSsbrtJrLduti0Q1Q9+BF1/iFKaxGoQwjWOIVNJv0o6omrdyR8ct37m4xIl5Zzpkp69Kkmvom7QFTtue89YQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.48.0", - "@typescript-eslint/visitor-keys": "8.48.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.48.0.tgz", - "integrity": "sha512-WNebjBdFdyu10sR1M4OXTt2OkMd5KWIL+LLfeH9KhgP+jzfDV/LI3eXzwJ1s9+Yc0Kzo2fQCdY/OpdusCMmh6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.48.0.tgz", - "integrity": "sha512-zbeVaVqeXhhab6QNEKfK96Xyc7UQuoFWERhEnj3mLVnUWrQnv15cJNseUni7f3g557gm0e46LZ6IJ4NJVOgOpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.48.0", - "@typescript-eslint/typescript-estree": "8.48.0", - "@typescript-eslint/utils": "8.48.0", - "debug": "^4.3.4", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.48.0.tgz", - "integrity": "sha512-cQMcGQQH7kwKoVswD1xdOytxQR60MWKM1di26xSUtxehaDs/32Zpqsu5WJlXTtTTqyAVK8R7hvsUnIXRS+bjvA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.48.0.tgz", - "integrity": "sha512-ljHab1CSO4rGrQIAyizUS6UGHHCiAYhbfcIZ1zVJr5nMryxlXMVWS3duFPSKvSUbFPwkXMFk1k0EMIjub4sRRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/project-service": "8.48.0", - "@typescript-eslint/tsconfig-utils": "8.48.0", - "@typescript-eslint/types": "8.48.0", - "@typescript-eslint/visitor-keys": "8.48.0", - "debug": "^4.3.4", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "tinyglobby": "^0.2.15", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.48.0.tgz", - "integrity": "sha512-yTJO1XuGxCsSfIVt1+1UrLHtue8xz16V8apzPYI06W0HbEbEWHxHXgZaAgavIkoh+GeV6hKKd5jm0sS6OYxWXQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.48.0", - "@typescript-eslint/types": "8.48.0", - "@typescript-eslint/typescript-estree": "8.48.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.48.0.tgz", - "integrity": "sha512-T0XJMaRPOH3+LBbAfzR2jalckP1MSG/L9eUtY0DEzUyVaXJ/t6zN0nR7co5kz0Jko/nkSYCBRkz1djvjajVTTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.48.0", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", - "dev": true, - "license": "ISC" - }, - "node_modules/@unrs/resolver-binding-android-arm-eabi": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", - "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@unrs/resolver-binding-android-arm64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", - "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@unrs/resolver-binding-darwin-arm64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz", - "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@unrs/resolver-binding-darwin-x64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", - "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@unrs/resolver-binding-freebsd-x64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", - "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", - "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", - "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", - "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", - "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", - "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", - "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", - "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", - "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-x64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", - "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-x64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", - "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-wasm32-wasi": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", - "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==", - "cpu": [ - "wasm32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@napi-rs/wasm-runtime": "^0.2.11" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", - "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", - "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@unrs/resolver-binding-win32-x64-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", - "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", - "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", - "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", - "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", - "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", - "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.13.2", - "@webassemblyjs/helper-api-error": "1.13.2", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", - "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", - "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/wasm-gen": "1.14.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", - "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", - "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", - "devOptional": true, - "license": "Apache-2.0", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", - "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", - "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/helper-wasm-section": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-opt": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1", - "@webassemblyjs/wast-printer": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", - "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", - "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", - "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-api-error": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", - "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "devOptional": true, - "license": "BSD-3-Clause" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "devOptional": true, - "license": "Apache-2.0" - }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "deprecated": "Use your platform's native atob() and btoa() methods instead", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dev": true, - "license": "MIT", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "devOptional": true, - "license": "MIT", - "peer": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", - "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.1.0", - "acorn-walk": "^8.0.2" - } - }, - "node_modules/acorn-import-phases": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", - "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "acorn": "^8.14.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/add-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", - "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ajv": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", - "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", - "license": "MIT", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "engines": [ - "node >= 0.8.0" - ], - "license": "Apache-2.0", - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/anymatch/node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/are-docs-informative": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", - "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", - "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "is-array-buffer": "^3.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-ify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", - "dev": true, - "license": "MIT" - }, - "node_modules/array-includes": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", - "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.24.0", - "es-object-atoms": "^1.1.1", - "get-intrinsic": "^1.3.0", - "is-string": "^1.1.1", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-timsort": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", - "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", - "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "es-shim-unscopables": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", - "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", - "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", - "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "license": "MIT" - }, - "node_modules/asn1js": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.7.tgz", - "integrity": "sha512-uLvq6KJu04qoQM6gvBfKFjlh6Gl0vOKQuR5cJMDHQkmwfMOQeN3F3SHCv9SNYSL+CRoHvOGFfllDlVz03GQjvQ==", - "license": "BSD-3-Clause", - "dependencies": { - "pvtsutils": "^1.3.6", - "pvutils": "^1.1.3", - "tslib": "^2.8.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/ast-types": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", - "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/async-function": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", - "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/b4a": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz", - "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==", - "dev": true, - "license": "Apache-2.0", - "peerDependencies": { - "react-native-b4a": "*" - }, - "peerDependenciesMeta": { - "react-native-b4a": { - "optional": true - } - } - }, - "node_modules/babel-jest": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.2.0.tgz", - "integrity": "sha512-0YiBEOxWqKkSQWL9nNGGEgndoeL0ZpWrbLMNL5u/Kaxrli3Eaxlt3ZtIDktEvXt4L/R9r3ODr2zKwGM/2BjxVw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/transform": "30.2.0", - "@types/babel__core": "^7.20.5", - "babel-plugin-istanbul": "^7.0.1", - "babel-preset-jest": "30.2.0", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "slash": "^3.0.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.11.0 || ^8.0.0-0" - } - }, - "node_modules/babel-jest/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/babel-jest/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-jest/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-loader": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-10.0.0.tgz", - "integrity": "sha512-z8jt+EdS61AMw22nSfoNJAZ0vrtmhPRVi6ghL3rCeRZI8cdNYFiV5xeV3HbE7rlZZNmGH8BVccwWt8/ED0QOHA==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^5.0.0" - }, - "engines": { - "node": "^18.20.0 || ^20.10.0 || >=22.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0", - "webpack": ">=5.61.0" - } - }, - "node_modules/babel-loader/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/babel-loader/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/babel-loader/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/babel-loader/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.1.tgz", - "integrity": "sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==", - "dev": true, - "license": "BSD-3-Clause", - "workspaces": [ - "test/babel-8" - ], - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-instrument": "^6.0.2", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.2.0.tgz", - "integrity": "sha512-ftzhzSGMUnOzcCXd6WHdBGMyuwy15Wnn0iyyWGKgBDLxf9/s5ABuraCSpBX2uG0jUg4rqJnxsLc5+oYBqoxVaA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/babel__core": "^7.20.5" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", - "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.27.7", - "@babel/helper-define-polyfill-provider": "^0.6.5", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", - "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.5", - "core-js-compat": "^3.43.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz", - "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.5" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", - "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-import-attributes": "^7.24.7", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5" - }, - "peerDependencies": { - "@babel/core": "^7.0.0 || ^8.0.0-0" + "node": ">=18" } }, - "node_modules/babel-preset-jest": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.2.0.tgz", - "integrity": "sha512-US4Z3NOieAQumwFnYdUWKvUKh8+YSnS/gB3t6YBiz0bskpu7Pine8pPCheNxlPEW4wnUkma2a94YuW2q3guvCQ==", + "node_modules/@puppeteer/browsers/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, - "license": "MIT", - "dependencies": { - "babel-plugin-jest-hoist": "30.2.0", - "babel-preset-current-node-syntax": "^1.2.0" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.11.0 || ^8.0.0-beta.1" + "node": ">=10" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", "dev": true, "license": "MIT" }, - "node_modules/bare-events": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz", - "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==", + "node_modules/@sinclair/typebox": { + "version": "0.34.41", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.41.tgz", + "integrity": "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g==", "dev": true, - "license": "Apache-2.0", - "peerDependencies": { - "bare-abort-controller": "*" - }, - "peerDependenciesMeta": { - "bare-abort-controller": { - "optional": true - } - } + "license": "MIT" }, - "node_modules/bare-fs": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.5.2.tgz", - "integrity": "sha512-veTnRzkb6aPHOvSKIOy60KzURfBdUflr5VReI+NSaPL6xf+XLdONQgZgpYvUuZLVQ8dCqxpBAudaOM1+KpAUxw==", + "node_modules/@stylistic/eslint-plugin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-5.3.1.tgz", + "integrity": "sha512-Ykums1VYonM0TgkD0VteVq9mrlO2FhF48MDJnPyv3MktIB2ydtuhlO0AfWm7xnW1kyf5bjOqA6xc7JjviuVTxg==", "dev": true, - "license": "Apache-2.0", - "optional": true, + "license": "MIT", "dependencies": { - "bare-events": "^2.5.4", - "bare-path": "^3.0.0", - "bare-stream": "^2.6.4", - "bare-url": "^2.2.2", - "fast-fifo": "^1.3.2" + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/types": "^8.41.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "estraverse": "^5.3.0", + "picomatch": "^4.0.3" }, "engines": { - "bare": ">=1.16.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "peerDependencies": { - "bare-buffer": "*" - }, - "peerDependenciesMeta": { - "bare-buffer": { - "optional": true - } + "eslint": ">=9.0.0" } }, - "node_modules/bare-os": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.2.tgz", - "integrity": "sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==", + "node_modules/@stylistic/eslint-plugin/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, "license": "Apache-2.0", - "optional": true, "engines": { - "bare": ">=1.14.0" - } - }, - "node_modules/bare-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", - "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "bare-os": "^3.0.1" - } - }, - "node_modules/bare-stream": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.7.0.tgz", - "integrity": "sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "streamx": "^2.21.0" - }, - "peerDependencies": { - "bare-buffer": "*", - "bare-events": "*" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, - "peerDependenciesMeta": { - "bare-buffer": { - "optional": true - }, - "bare-events": { - "optional": true - } - } - }, - "node_modules/bare-url": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.3.2.tgz", - "integrity": "sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "bare-path": "^3.0.0" + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], "license": "MIT" }, - "node_modules/baseline-browser-mapping": { - "version": "2.9.16", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.16.tgz", - "integrity": "sha512-KeUZdBuxngy825i8xvzaK1Ncnkx0tBmb3k8DkEuqjKRkmtvNTjey2ZsNeh8Dw4lfKvbCOu9oeNx2TKm2vHqcRw==", - "devOptional": true, - "license": "Apache-2.0", - "bin": { - "baseline-browser-mapping": "dist/cli.js" - } - }, - "node_modules/basic-ftp": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.1.0.tgz", - "integrity": "sha512-RkaJzeJKDbaDWTIPiJwubyljaEPwpVWkm9Rt5h9Nd6h7tEXTJ3VB4qxdZBioV7JO5yLUaOKwz7vDOzlncUsegw==", - "dev": true, + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", "license": "MIT", - "engines": { - "node": ">=10.0.0" + "dependencies": { + "@types/connect": "*", + "@types/node": "*" } }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "license": "MIT" + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "node_modules/@types/compression": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@types/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-kCFuWS0ebDbmxs0AXYn6e2r2nrGAb5KwQhknjSPSPgJcGd8+HVSILlUyFhGqML2gk39HcG7D1ydW9/qpYkN00Q==", "dev": true, "license": "MIT", - "optional": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "@types/express": "*", + "@types/node": "*" } }, - "node_modules/body-parser": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", - "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "license": "MIT", "dependencies": { - "bytes": "^3.1.2", - "content-type": "^1.0.5", - "debug": "^4.4.3", - "http-errors": "^2.0.0", - "iconv-lite": "^0.7.0", - "on-finished": "^2.4.1", - "qs": "^6.14.1", - "raw-body": "^3.0.1", - "type-is": "^2.0.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "@types/node": "*" } }, - "node_modules/bonjour-service": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", - "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" + "@types/express-serve-static-core": "*", + "@types/node": "*" } }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "node_modules/@types/conventional-commits-parser": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.1.tgz", + "integrity": "sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==", "dev": true, - "license": "ISC" + "license": "MIT", + "dependencies": { + "@types/node": "*" + } }, - "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@types/ms": "*" } }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" + "@types/estree": "*", + "@types/json-schema": "*" } }, - "node_modules/browserslist": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", - "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "devOptional": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], "license": "MIT", - "peer": true, "dependencies": { - "baseline-browser-mapping": "^2.9.0", - "caniuse-lite": "^1.0.30001759", - "electron-to-chromium": "^1.5.263", - "node-releases": "^2.0.27", - "update-browserslist-db": "^1.2.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "@types/eslint": "*", + "@types/estree": "*" } }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "license": "Apache-2.0", + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.6.tgz", + "integrity": "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==", + "license": "MIT", "dependencies": { - "node-int64": "^0.4.0" + "@types/body-parser": "*", + "@types/express-serve-static-core": "^5.0.0", + "@types/serve-static": "^2" } }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/@types/express-serve-static-core": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.1.tgz", + "integrity": "sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A==", "license": "MIT", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" } }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", "dev": true, "license": "MIT", - "engines": { - "node": "*" + "dependencies": { + "@types/node": "*" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "devOptional": true, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "dev": true, "license": "MIT" }, - "node_modules/builtin-modules": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-5.0.0.tgz", - "integrity": "sha512-bkXY9WsVpY7CvMhKSR6pZilZu9Ln5WDrKVBUXf2S443etkmEO4V58heTecXcUIsNsi4Rx8JUO4NfX1IcQl4deg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "license": "MIT" }, - "node_modules/bundle-name": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", - "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "node_modules/@types/http-proxy": { + "version": "1.17.16", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.16.tgz", + "integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==", "license": "MIT", "dependencies": { - "run-applescript": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" } }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.8" + "dependencies": { + "@types/istanbul-lib-report": "*" } }, - "node_modules/bytestreamjs": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bytestreamjs/-/bytestreamjs-2.0.1.tgz", - "integrity": "sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=6.0.0" - } + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "license": "MIT" }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@types/unist": "*" } }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "license": "MIT" + }, + "node_modules/@types/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.10.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", + "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", "license": "MIT", + "peer": true, "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" + "undici-types": "~7.16.0" } }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "node_modules/@types/node-forge": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.14.tgz", + "integrity": "sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==", + "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@types/node": "*" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } + "license": "MIT" }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "node_modules/@types/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-qHHxQ+P9PysNEGbALT8f8YOSHW0KJu6l2xU8DYY0fu/EmGxXdVnuTLvFUvBgPJMSqXq29SYHveejeAha+4AYgA==", "dev": true, + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", + "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", "license": "MIT", "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" + "@types/mime": "^1", + "@types/node": "*" } }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "@types/express": "*" } }, - "node_modules/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, + "node_modules/@types/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==", "license": "MIT", "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@types/http-errors": "*", + "@types/node": "*" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001766", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001766.tgz", - "integrity": "sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==", - "devOptional": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true, + "license": "MIT" }, - "node_modules/ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } + "license": "MIT" }, - "node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", "dev": true, + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "dependencies": { + "@types/node": "*" } }, - "node_modules/chalk-template": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-1.1.2.tgz", - "integrity": "sha512-2bxTP2yUH7AJj/VAXfcA+4IcWGdQ87HwBANLt5XxGTeomo8yG0y95N1um9i5StvhT/Bl0/2cARA5v1PpPXUxUA==", + "node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", "dev": true, "license": "MIT", "dependencies": { - "chalk": "^5.2.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/chalk/chalk-template?sponsor=1" + "@types/yargs-parser": "*" } }, - "node_modules/change-case": { - "version": "5.4.4", - "resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz", - "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==", + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", "dev": true, "license": "MIT" }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", "dev": true, "license": "MIT", - "engines": { - "node": ">=10" + "optional": true, + "dependencies": { + "@types/node": "*" } }, - "node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.48.0.tgz", + "integrity": "sha512-XxXP5tL1txl13YFtrECECQYeZjBZad4fyd3cFV4a19LkAY/bIp9fev3US4S5fDVV2JaYFiKAZ/GRTOLer+mbyQ==", "dev": true, "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "license": "MIT", "dependencies": { - "readdirp": "^4.0.1" + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.48.0", + "@typescript-eslint/type-utils": "8.48.0", + "@typescript-eslint/utils": "8.48.0", + "@typescript-eslint/visitor-keys": "8.48.0", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" }, "engines": { - "node": ">= 14.16.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://paulmillr.com/funding/" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.48.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "devOptional": true, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, "license": "MIT", "engines": { - "node": ">=6.0" + "node": ">= 4" } }, - "node_modules/chromium-bidi": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-12.0.1.tgz", - "integrity": "sha512-fGg+6jr0xjQhzpy5N4ErZxQ4wF7KLEvhGZXD6EgvZKDhu7iOhZXnZhcDxPJDcwTcrD48NPzOCo84RP2lv3Z+Cg==", + "node_modules/@typescript-eslint/parser": { + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.48.0.tgz", + "integrity": "sha512-jCzKdm/QK0Kg4V4IK/oMlRZlY+QOcdjv89U2NgKHZk1CYTj82/RVSx1mV/0gqCVMJ/DA+Zf/S4NBWNF8GQ+eqQ==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "peer": true, "dependencies": { - "mitt": "^3.0.1", - "zod": "^3.24.1" + "@typescript-eslint/scope-manager": "8.48.0", + "@typescript-eslint/types": "8.48.0", + "@typescript-eslint/typescript-estree": "8.48.0", + "@typescript-eslint/visitor-keys": "8.48.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "devtools-protocol": "*" + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/ci-info": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", - "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", + "node_modules/@typescript-eslint/project-service": { + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.48.0.tgz", + "integrity": "sha512-Ne4CTZyRh1BecBf84siv42wv5vQvVmgtk8AuiEffKTUo3DrBaGYZueJSxxBZ8fjk/N3DrgChH4TOdIOwOwiqqw==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.48.0", + "@typescript-eslint/types": "^8.48.0", + "debug": "^4.3.4" + }, "engines": { - "node": ">=8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/cjs-module-lexer": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.1.1.tgz", - "integrity": "sha512-+CmxIZ/L2vNcEfvNtLdU0ZQ6mbq3FZnwAP2PPTiKP+1QOoKwlKlPgb8UKV0Dds7QVaMnHm+FwSft2VB0s/SLjQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/clean-css": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", - "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.48.0.tgz", + "integrity": "sha512-uGSSsbrtJrLduti0Q1Q9+BF1/iFKaxGoQwjWOIVNJv0o6omrdyR8ct37m4xIl5Zzpkp69Kkmvom7QFTtue89YQ==", "dev": true, "license": "MIT", "dependencies": { - "source-map": "~0.6.0" + "@typescript-eslint/types": "8.48.0", + "@typescript-eslint/visitor-keys": "8.48.0" }, "engines": { - "node": ">= 10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/clean-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", - "integrity": "sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==", + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.48.0.tgz", + "integrity": "sha512-WNebjBdFdyu10sR1M4OXTt2OkMd5KWIL+LLfeH9KhgP+jzfDV/LI3eXzwJ1s9+Yc0Kzo2fQCdY/OpdusCMmh6w==", "dev": true, "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, "engines": { - "node": ">=4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/clean-regexp/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/@typescript-eslint/type-utils": { + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.48.0.tgz", + "integrity": "sha512-zbeVaVqeXhhab6QNEKfK96Xyc7UQuoFWERhEnj3mLVnUWrQnv15cJNseUni7f3g557gm0e46LZ6IJ4NJVOgOpw==", "dev": true, "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.48.0", + "@typescript-eslint/typescript-estree": "8.48.0", + "@typescript-eslint/utils": "8.48.0", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" + }, "engines": { - "node": ">=0.8.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/clear-module": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/clear-module/-/clear-module-4.1.2.tgz", - "integrity": "sha512-LWAxzHqdHsAZlPlEyJ2Poz6AIs384mPeqLVCru2p0BrP9G/kVGuhNyZYClLO6cXlnuJjzC8xtsJIuMjKqLXoAw==", + "node_modules/@typescript-eslint/types": { + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.48.0.tgz", + "integrity": "sha512-cQMcGQQH7kwKoVswD1xdOytxQR60MWKM1di26xSUtxehaDs/32Zpqsu5WJlXTtTTqyAVK8R7hvsUnIXRS+bjvA==", "dev": true, "license": "MIT", - "dependencies": { - "parent-module": "^2.0.0", - "resolve-from": "^5.0.0" - }, "engines": { - "node": ">=8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/cli-cursor": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", - "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.48.0.tgz", + "integrity": "sha512-ljHab1CSO4rGrQIAyizUS6UGHHCiAYhbfcIZ1zVJr5nMryxlXMVWS3duFPSKvSUbFPwkXMFk1k0EMIjub4sRRQ==", "dev": true, "license": "MIT", "dependencies": { - "restore-cursor": "^5.0.0" + "@typescript-eslint/project-service": "8.48.0", + "@typescript-eslint/tsconfig-utils": "8.48.0", + "@typescript-eslint/types": "8.48.0", + "@typescript-eslint/visitor-keys": "8.48.0", + "debug": "^4.3.4", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.1.0" }, "engines": { - "node": ">=18" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/cli-truncate": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", - "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^7.0.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=18" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=12" + "node": ">=10" } }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/@typescript-eslint/utils": { + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.48.0.tgz", + "integrity": "sha512-yTJO1XuGxCsSfIVt1+1UrLHtue8xz16V8apzPYI06W0HbEbEWHxHXgZaAgavIkoh+GeV6hKKd5jm0sS6OYxWXQ==", "dev": true, "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.48.0", + "@typescript-eslint/types": "8.48.0", + "@typescript-eslint/typescript-estree": "8.48.0" + }, "engines": { - "node": ">=8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/cliui/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.48.0.tgz", + "integrity": "sha512-T0XJMaRPOH3+LBbAfzR2jalckP1MSG/L9eUtY0DEzUyVaXJ/t6zN0nR7co5kz0Jko/nkSYCBRkz1djvjajVTTg==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "@typescript-eslint/types": "8.48.0", + "eslint-visitor-keys": "^4.2.1" }, "engines": { - "node": ">=8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/cliui/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "devOptional": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" } }, - "node_modules/cliui/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "devOptional": true, "license": "MIT" }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "devOptional": true, "license": "MIT" }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "devOptional": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" } }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "devOptional": true, "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" } }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "devOptional": true, "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" + "@xtuc/ieee754": "^1.2.0" } }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "devOptional": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" } }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "devOptional": true, "license": "MIT", "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" } }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "devOptional": true, "license": "MIT", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, - "node_modules/collect-v8-coverage": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", - "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==", - "dev": true, - "license": "MIT" - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "devOptional": true, "license": "MIT", "dependencies": { - "color-name": "1.1.3" + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" } }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "license": "MIT" + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "devOptional": true, + "license": "BSD-3-Clause" }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true, - "license": "MIT" + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "devOptional": true, + "license": "Apache-2.0" }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", "dev": true, "license": "MIT", "dependencies": { - "delayed-stream": "~1.0.0" + "event-target-shim": "^5.0.0" }, "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" + "node": ">=6.5" } }, - "node_modules/comment-json": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.5.tgz", - "integrity": "sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==", - "dev": true, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "license": "MIT", "dependencies": { - "array-timsort": "^1.0.3", - "core-util-is": "^1.0.3", - "esprima": "^4.0.1", - "has-own-prop": "^2.0.0", - "repeat-string": "^1.6.1" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, "engines": { - "node": ">= 6" + "node": ">= 0.6" } }, - "node_modules/comment-parser": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", - "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", - "dev": true, + "node_modules/accepts/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "license": "MIT", "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/compare-func": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" - } - }, - "node_modules/component-emitter": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", - "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.6" } }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "devOptional": true, "license": "MIT", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" + "peer": true, + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": ">= 0.6" + "node": ">=0.4.0" } }, - "node_modules/compression": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", - "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", + "node_modules/acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", + "devOptional": true, "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "compressible": "~2.0.18", - "debug": "2.6.9", - "negotiator": "~0.6.4", - "on-headers": "~1.1.0", - "safe-buffer": "5.2.1", - "vary": "~1.1.2" - }, "engines": { - "node": ">= 0.8.0" + "node": ">=10.13.0" + }, + "peerDependencies": { + "acorn": "^8.14.0" } }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, "license": "MIT", - "dependencies": { - "ms": "2.0.0" + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "node_modules/add-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", + "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", "dev": true, "license": "MIT" }, - "node_modules/concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", - "dev": true, - "engines": [ - "node >= 6.0" - ], - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/concat-stream/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, + "node_modules/ajv": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "license": "MIT", + "peer": true, "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, - "engines": { - "node": ">= 6" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dev": true, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "license": "MIT", "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" + "ajv": "^8.0.0" }, - "engines": { - "node": ">= 0.10.0" + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } } }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "license": "MIT", - "engines": { - "node": ">=0.8" + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" } }, - "node_modules/connect/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" } }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, - "license": "MIT" - }, - "node_modules/content-disposition": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", - "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", "license": "MIT", "engines": { - "node": ">=18" + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/conventional-changelog": { - "version": "3.1.25", - "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.25.tgz", - "integrity": "sha512-ryhi3fd1mKf3fSjbLXOfK2D06YwKNic1nC9mWqybBHdObPd8KJ2vjaXZfYj1U23t+V8T8n0d7gwnc9XbIdFbyQ==", + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "license": "MIT", "dependencies": { - "conventional-changelog-angular": "^5.0.12", - "conventional-changelog-atom": "^2.0.8", - "conventional-changelog-codemirror": "^2.0.8", - "conventional-changelog-conventionalcommits": "^4.5.0", - "conventional-changelog-core": "^4.2.1", - "conventional-changelog-ember": "^2.0.9", - "conventional-changelog-eslint": "^3.0.9", - "conventional-changelog-express": "^2.0.6", - "conventional-changelog-jquery": "^3.0.11", - "conventional-changelog-jshint": "^2.0.9", - "conventional-changelog-preset-loader": "^2.3.4" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=10" + "node": ">=4" } }, - "node_modules/conventional-changelog-angular": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz", - "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==", + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "license": "ISC", + "optional": true, "dependencies": { - "compare-func": "^2.0.0" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" }, "engines": { - "node": ">=16" + "node": ">= 8" } }, - "node_modules/conventional-changelog-atom": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz", - "integrity": "sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw==", + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, - "license": "ISC", - "dependencies": { - "q": "^1.5.1" - }, + "license": "MIT", + "optional": true, "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-codemirror": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz", - "integrity": "sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw==", - "dev": true, - "license": "ISC", - "dependencies": { - "q": "^1.5.1" + "node": ">=8.6" }, - "engines": { - "node": ">=10" + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/conventional-changelog-config-spec": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-config-spec/-/conventional-changelog-config-spec-2.1.0.tgz", - "integrity": "sha512-IpVePh16EbbB02V+UA+HQnnPIohgXvJRxHcS5+Uwk4AT5LjzCZJm5sp/yqs5C6KZJ1jMsV4paEV13BN1pvDuxQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/conventional-changelog-conventionalcommits": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz", - "integrity": "sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==", + "node_modules/are-docs-informative": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", + "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", "dev": true, - "license": "ISC", - "dependencies": { - "compare-func": "^2.0.0" - }, + "license": "MIT", "engines": { - "node": ">=16" + "node": ">=14" } }, - "node_modules/conventional-changelog-core": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz", - "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==", + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, "license": "MIT", "dependencies": { - "add-stream": "^1.0.0", - "conventional-changelog-writer": "^5.0.0", - "conventional-commits-parser": "^3.2.0", - "dateformat": "^3.0.0", - "get-pkg-repo": "^4.0.0", - "git-raw-commits": "^2.0.8", - "git-remote-origin-url": "^2.0.0", - "git-semver-tags": "^4.1.1", - "lodash": "^4.17.15", - "normalize-package-data": "^3.0.0", - "q": "^1.5.1", - "read-pkg": "^3.0.0", - "read-pkg-up": "^3.0.0", - "through2": "^4.0.0" + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/conventional-changelog-core/node_modules/conventional-commits-parser": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", - "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", + "node_modules/array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", + "dev": true, + "license": "MIT" + }, + "node_modules/array-includes": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", "dev": true, "license": "MIT", "dependencies": { - "is-text-path": "^1.0.1", - "JSONStream": "^1.0.4", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - }, - "bin": { - "conventional-commits-parser": "cli.js" + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/conventional-changelog-core/node_modules/dargs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", - "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", + "node_modules/array-timsort": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", + "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/conventional-changelog-core/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/array.prototype.findlastindex": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", "dev": true, "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/conventional-changelog-core/node_modules/git-raw-commits": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", - "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", "dev": true, "license": "MIT", "dependencies": { - "dargs": "^7.0.0", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - }, - "bin": { - "git-raw-commits": "cli.js" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/conventional-changelog-core/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/conventional-changelog-core/node_modules/is-text-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, "license": "MIT", "dependencies": { - "text-extensions": "^1.0.0" + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/conventional-changelog-core/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true, "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/conventional-changelog-core/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", "dev": true, - "license": "ISC", + "license": "MIT" + }, + "node_modules/asn1js": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.7.tgz", + "integrity": "sha512-uLvq6KJu04qoQM6gvBfKFjlh6Gl0vOKQuR5cJMDHQkmwfMOQeN3F3SHCv9SNYSL+CRoHvOGFfllDlVz03GQjvQ==", + "license": "BSD-3-Clause", "dependencies": { - "yallist": "^4.0.0" + "pvtsutils": "^1.3.6", + "pvutils": "^1.1.3", + "tslib": "^2.8.1" }, "engines": { - "node": ">=10" + "node": ">=12.0.0" } }, - "node_modules/conventional-changelog-core/node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "node_modules/ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", "dev": true, "license": "MIT", "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" + "tslib": "^2.0.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/conventional-changelog-core/node_modules/meow/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true, - "license": "ISC" - }, - "node_modules/conventional-changelog-core/node_modules/meow/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", "dev": true, "license": "MIT", - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/conventional-changelog-core/node_modules/meow/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, "license": "MIT", "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" + "possible-typed-array-names": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/conventional-changelog-core/node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "node_modules/b4a": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz", + "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==", "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" + "license": "Apache-2.0", + "peerDependencies": { + "react-native-b4a": "*" + }, + "peerDependenciesMeta": { + "react-native-b4a": { + "optional": true + } } }, - "node_modules/conventional-changelog-core/node_modules/meow/node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "node_modules/babel-loader": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-10.0.0.tgz", + "integrity": "sha512-z8jt+EdS61AMw22nSfoNJAZ0vrtmhPRVi6ghL3rCeRZI8cdNYFiV5xeV3HbE7rlZZNmGH8BVccwWt8/ED0QOHA==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/conventional-changelog-core/node_modules/meow/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "license": "(MIT OR CC0-1.0)", + "find-up": "^5.0.0" + }, "engines": { - "node": ">=8" - } - }, - "node_modules/conventional-changelog-core/node_modules/meow/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" + "node": "^18.20.0 || ^20.10.0 || >=22.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5.61.0" } }, - "node_modules/conventional-changelog-core/node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "node_modules/babel-loader/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/conventional-changelog-core/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/babel-loader/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", "dependencies": { - "p-try": "^2.0.0" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/conventional-changelog-core/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/babel-loader/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/conventional-changelog-core/node_modules/path-exists": { + "node_modules/babel-loader/node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", @@ -8453,357 +5421,499 @@ "node": ">=8" } }, - "node_modules/conventional-changelog-core/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", + "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==", "dev": true, "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "@babel/compat-data": "^7.27.7", + "@babel/helper-define-polyfill-provider": "^0.6.5", + "semver": "^6.3.1" }, - "engines": { - "node": ">= 6" + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/conventional-changelog-core/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", + "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.5", + "core-js-compat": "^3.43.0" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/conventional-changelog-core/node_modules/split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz", + "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "readable-stream": "^3.0.0" + "@babel/helper-define-polyfill-provider": "^0.6.5" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/conventional-changelog-core/node_modules/text-extensions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, - "license": "MIT", + "license": "MIT" + }, + "node_modules/bare-events": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz", + "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==", + "dev": true, + "license": "Apache-2.0", + "peerDependencies": { + "bare-abort-controller": "*" + }, + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + } + } + }, + "node_modules/bare-fs": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.5.2.tgz", + "integrity": "sha512-veTnRzkb6aPHOvSKIOy60KzURfBdUflr5VReI+NSaPL6xf+XLdONQgZgpYvUuZLVQ8dCqxpBAudaOM1+KpAUxw==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-events": "^2.5.4", + "bare-path": "^3.0.0", + "bare-stream": "^2.6.4", + "bare-url": "^2.2.2", + "fast-fifo": "^1.3.2" + }, "engines": { - "node": ">=0.10" + "bare": ">=1.16.0" + }, + "peerDependencies": { + "bare-buffer": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + } } }, - "node_modules/conventional-changelog-core/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "node_modules/bare-os": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.2.tgz", + "integrity": "sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "Apache-2.0", + "optional": true, "engines": { - "node": ">=10" + "bare": ">=1.14.0" + } + }, + "node_modules/bare-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", + "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-os": "^3.0.1" + } + }, + "node_modules/bare-stream": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.7.0.tgz", + "integrity": "sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "streamx": "^2.21.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "bare-buffer": "*", + "bare-events": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + }, + "bare-events": { + "optional": true + } } }, - "node_modules/conventional-changelog-core/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "node_modules/bare-url": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.3.2.tgz", + "integrity": "sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==", "dev": true, - "license": "ISC" + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-path": "^3.0.0" + } }, - "node_modules/conventional-changelog-core/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true, - "license": "ISC", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.16", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.16.tgz", + "integrity": "sha512-KeUZdBuxngy825i8xvzaK1Ncnkx0tBmb3k8DkEuqjKRkmtvNTjey2ZsNeh8Dw4lfKvbCOu9oeNx2TKm2vHqcRw==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/basic-ftp": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.1.0.tgz", + "integrity": "sha512-RkaJzeJKDbaDWTIPiJwubyljaEPwpVWkm9Rt5h9Nd6h7tEXTJ3VB4qxdZBioV7JO5yLUaOKwz7vDOzlncUsegw==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=10.0.0" } }, - "node_modules/conventional-changelog-ember": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz", - "integrity": "sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A==", + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "license": "MIT" + }, + "node_modules/bidi-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", + "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", "dev": true, - "license": "ISC", + "license": "MIT", + "dependencies": { + "require-from-string": "^2.0.2" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/body-parser": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", + "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", + "license": "MIT", "dependencies": { - "q": "^1.5.1" + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/conventional-changelog-eslint": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz", - "integrity": "sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA==", - "dev": true, - "license": "ISC", + "node_modules/bonjour-service": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", + "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", + "license": "MIT", "dependencies": { - "q": "^1.5.1" - }, - "engines": { - "node": ">=10" + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" } }, - "node_modules/conventional-changelog-express": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz", - "integrity": "sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ==", + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "dev": true, - "license": "ISC", + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", "dependencies": { - "q": "^1.5.1" - }, - "engines": { - "node": ">=10" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/conventional-changelog-jquery": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz", - "integrity": "sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw==", - "dev": true, - "license": "ISC", + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", "dependencies": { - "q": "^1.5.1" + "fill-range": "^7.1.1" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/conventional-changelog-jshint": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz", - "integrity": "sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA==", - "dev": true, - "license": "ISC", + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "devOptional": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, "dependencies": { - "compare-func": "^2.0.0", - "q": "^1.5.1" + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" }, "engines": { - "node": ">=10" + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/conventional-changelog-preset-loader": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", - "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT", - "engines": { - "node": ">=10" + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/conventional-changelog-writer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz", - "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==", + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true, "license": "MIT", - "dependencies": { - "conventional-commits-filter": "^2.0.7", - "dateformat": "^3.0.0", - "handlebars": "^4.7.7", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "semver": "^6.0.0", - "split": "^1.0.0", - "through2": "^4.0.0" - }, - "bin": { - "conventional-changelog-writer": "cli.js" - }, "engines": { - "node": ">=10" + "node": "*" } }, - "node_modules/conventional-changelog-writer/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/builtin-modules": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-5.0.0.tgz", + "integrity": "sha512-bkXY9WsVpY7CvMhKSR6pZilZu9Ln5WDrKVBUXf2S443etkmEO4V58heTecXcUIsNsi4Rx8JUO4NfX1IcQl4deg==", "dev": true, "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=18.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/conventional-changelog-writer/node_modules/hosted-git-info": { + "node_modules/bundle-name": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "license": "ISC", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" + "run-applescript": "^7.0.0" }, "engines": { - "node": ">=10" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/conventional-changelog-writer/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, "engines": { - "node": ">=8" + "node": ">= 0.8" } }, - "node_modules/conventional-changelog-writer/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, + "node_modules/bytestreamjs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bytestreamjs/-/bytestreamjs-2.0.1.tgz", + "integrity": "sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==", + "license": "BSD-3-Clause", "engines": { - "node": ">=10" + "node": ">=6.0.0" } }, - "node_modules/conventional-changelog-writer/node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, "license": "MIT", "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/conventional-changelog-writer/node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "license": "BSD-2-Clause", + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-writer/node_modules/normalize-package-data/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" }, "engines": { - "node": ">=10" + "node": ">= 0.4" } }, - "node_modules/conventional-changelog-writer/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "license": "MIT", "dependencies": { - "p-try": "^2.0.0" + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" }, "engines": { - "node": ">=6" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/conventional-changelog-writer/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/conventional-changelog-writer/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" } }, - "node_modules/conventional-changelog-writer/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, "license": "MIT", - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/conventional-changelog-writer/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, "license": "MIT", "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" }, "engines": { "node": ">=8" @@ -8812,1965 +5922,1857 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/conventional-changelog-writer/node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } - }, - "node_modules/conventional-changelog-writer/node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true, - "license": "ISC" - }, - "node_modules/conventional-changelog-writer/node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } + "node_modules/caniuse-lite": { + "version": "1.0.30001766", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001766.tgz", + "integrity": "sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==", + "devOptional": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" }, - "node_modules/conventional-changelog-writer/node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/conventional-changelog-writer/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", "engines": { - "node": ">=8" + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/conventional-changelog-writer/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "node_modules/chalk-template": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-1.1.2.tgz", + "integrity": "sha512-2bxTP2yUH7AJj/VAXfcA+4IcWGdQ87HwBANLt5XxGTeomo8yG0y95N1um9i5StvhT/Bl0/2cARA5v1PpPXUxUA==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", + "dependencies": { + "chalk": "^5.2.0" + }, "engines": { - "node": ">=10" + "node": ">=14.16" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/chalk-template?sponsor=1" } }, - "node_modules/conventional-changelog-writer/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "node_modules/change-case": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz", + "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==", "dev": true, - "license": "ISC" + "license": "MIT" }, - "node_modules/conventional-changelog-writer/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/conventional-changelog/node_modules/conventional-changelog-angular": { - "version": "5.0.13", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", - "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", - "dev": true, - "license": "ISC", + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", "dependencies": { - "compare-func": "^2.0.0", - "q": "^1.5.1" + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "devOptional": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=6.0" } }, - "node_modules/conventional-changelog/node_modules/conventional-changelog-conventionalcommits": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.3.tgz", - "integrity": "sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==", + "node_modules/chromium-bidi": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-12.0.1.tgz", + "integrity": "sha512-fGg+6jr0xjQhzpy5N4ErZxQ4wF7KLEvhGZXD6EgvZKDhu7iOhZXnZhcDxPJDcwTcrD48NPzOCo84RP2lv3Z+Cg==", "dev": true, - "license": "ISC", + "license": "Apache-2.0", "dependencies": { - "compare-func": "^2.0.0", - "lodash": "^4.17.15", - "q": "^1.5.1" + "mitt": "^3.0.1", + "zod": "^3.24.1" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "devtools-protocol": "*" } }, - "node_modules/conventional-commits-filter": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", - "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", + "node_modules/ci-info": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", + "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], "license": "MIT", - "dependencies": { - "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.0" - }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/conventional-commits-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", - "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==", + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", "dev": true, "license": "MIT", "dependencies": { - "is-text-path": "^2.0.0", - "JSONStream": "^1.3.5", - "meow": "^12.0.1", - "split2": "^4.0.0" - }, - "bin": { - "conventional-commits-parser": "cli.mjs" + "source-map": "~0.6.0" }, "engines": { - "node": ">=16" + "node": ">= 10.0" } }, - "node_modules/conventional-recommended-bump": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", - "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", + "node_modules/clean-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", + "integrity": "sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==", "dev": true, "license": "MIT", "dependencies": { - "concat-stream": "^2.0.0", - "conventional-changelog-preset-loader": "^2.3.4", - "conventional-commits-filter": "^2.0.7", - "conventional-commits-parser": "^3.2.0", - "git-raw-commits": "^2.0.8", - "git-semver-tags": "^4.1.1", - "meow": "^8.0.0", - "q": "^1.5.1" - }, - "bin": { - "conventional-recommended-bump": "cli.js" + "escape-string-regexp": "^1.0.5" }, "engines": { - "node": ">=10" + "node": ">=4" } }, - "node_modules/conventional-recommended-bump/node_modules/conventional-commits-parser": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", - "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", + "node_modules/clean-regexp/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "license": "MIT", - "dependencies": { - "is-text-path": "^1.0.1", - "JSONStream": "^1.0.4", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - }, - "bin": { - "conventional-commits-parser": "cli.js" - }, "engines": { - "node": ">=10" + "node": ">=0.8.0" } }, - "node_modules/conventional-recommended-bump/node_modules/dargs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", - "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", + "node_modules/clear-module": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/clear-module/-/clear-module-4.1.2.tgz", + "integrity": "sha512-LWAxzHqdHsAZlPlEyJ2Poz6AIs384mPeqLVCru2p0BrP9G/kVGuhNyZYClLO6cXlnuJjzC8xtsJIuMjKqLXoAw==", "dev": true, "license": "MIT", + "dependencies": { + "parent-module": "^2.0.0", + "resolve-from": "^5.0.0" + }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/conventional-recommended-bump/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", "dev": true, "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "restore-cursor": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/conventional-recommended-bump/node_modules/git-raw-commits": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", - "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", + "node_modules/cli-truncate": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", "dev": true, "license": "MIT", "dependencies": { - "dargs": "^7.0.0", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - }, - "bin": { - "git-raw-commits": "cli.js" + "slice-ansi": "^5.0.0", + "string-width": "^7.0.0" }, "engines": { - "node": ">=10" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/conventional-recommended-bump/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "license": "ISC", "dependencies": { - "lru-cache": "^6.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/conventional-recommended-bump/node_modules/is-text-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "license": "MIT", - "dependencies": { - "text-extensions": "^1.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/conventional-recommended-bump/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" + "color-convert": "^2.0.1" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/conventional-recommended-bump/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/cliui/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=10" + "node": ">=7.0.0" } }, - "node_modules/conventional-recommended-bump/node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "node_modules/cliui/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/conventional-recommended-bump/node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/conventional-recommended-bump/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "license": "MIT", "dependencies": { - "p-try": "^2.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/conventional-recommended-bump/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/conventional-recommended-bump/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "color-name": "1.1.3" } }, - "node_modules/conventional-recommended-bump/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "license": "MIT", "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" + "delayed-stream": "~1.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.8" } }, - "node_modules/conventional-recommended-bump/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", "dev": true, "license": "MIT", - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 6" } }, - "node_modules/conventional-recommended-bump/node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "node_modules/comment-json": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.5.tgz", + "integrity": "sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", + "dependencies": { + "array-timsort": "^1.0.3", + "core-util-is": "^1.0.3", + "esprima": "^4.0.1", + "has-own-prop": "^2.0.0", + "repeat-string": "^1.6.1" + }, "engines": { - "node": ">=8" + "node": ">= 6" } }, - "node_modules/conventional-recommended-bump/node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "node_modules/comment-parser": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", + "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", "dev": true, - "license": "ISC" + "license": "MIT", + "engines": { + "node": ">= 12.0.0" + } }, - "node_modules/conventional-recommended-bump/node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "node_modules/compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" } }, - "node_modules/conventional-recommended-bump/node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "node_modules/component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/conventional-recommended-bump/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "license": "(MIT OR CC0-1.0)", + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/conventional-recommended-bump/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, + "node_modules/compression": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "negotiator": "~0.6.4", + "on-headers": "~1.1.0", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" }, "engines": { - "node": ">= 6" + "node": ">= 0.8.0" } }, - "node_modules/conventional-recommended-bump/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/conventional-recommended-bump/node_modules/split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true, - "license": "ISC", + "license": "MIT" + }, + "node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "dev": true, + "engines": [ + "node >= 6.0" + ], + "license": "MIT", "dependencies": { - "readable-stream": "^3.0.0" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" } }, - "node_modules/conventional-recommended-bump/node_modules/text-extensions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, "engines": { - "node": ">=0.10" + "node": ">= 6" } }, - "node_modules/conventional-recommended-bump/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conventional-recommended-bump/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/conventional-recommended-bump/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "license": "ISC", "engines": { - "node": ">=10" + "node": ">= 0.10.0" } }, - "node_modules/convert-source-map": { + "node_modules/connect-history-api-fallback": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=0.8" } }, - "node_modules/cookie-signature": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", - "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=6.6.0" + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/cookiejar": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", - "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, "license": "MIT" }, - "node_modules/copy-anything": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", - "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", - "dev": true, + "node_modules/content-disposition": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", + "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", "license": "MIT", - "dependencies": { - "is-what": "^3.14.1" + "engines": { + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/mesqueeb" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/core-js": { - "version": "3.47.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.47.0.tgz", - "integrity": "sha512-c3Q2VVkGAUyupsjRnaNX6u8Dq2vAdzm9iuPj5FW0fRxzlxgq9Q39MDq10IvmQSpLgHQNyQzQmOo6bgGHmH3NNg==", - "dev": true, - "hasInstallScript": true, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "engines": { + "node": ">= 0.6" } }, - "node_modules/core-js-compat": { - "version": "3.45.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.45.1.tgz", - "integrity": "sha512-tqTt5T4PzsMIZ430XGviK4vzYSoeNJ6CXODi6c/voxOT6IZqBht5/EKaSNnYiEjjRYxjVz7DQIsOsY0XNi8PIA==", + "node_modules/conventional-changelog": { + "version": "3.1.25", + "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.25.tgz", + "integrity": "sha512-ryhi3fd1mKf3fSjbLXOfK2D06YwKNic1nC9mWqybBHdObPd8KJ2vjaXZfYj1U23t+V8T8n0d7gwnc9XbIdFbyQ==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.25.3" + "conventional-changelog-angular": "^5.0.12", + "conventional-changelog-atom": "^2.0.8", + "conventional-changelog-codemirror": "^2.0.8", + "conventional-changelog-conventionalcommits": "^4.5.0", + "conventional-changelog-core": "^4.2.1", + "conventional-changelog-ember": "^2.0.9", + "conventional-changelog-eslint": "^3.0.9", + "conventional-changelog-express": "^2.0.6", + "conventional-changelog-jquery": "^3.0.11", + "conventional-changelog-jshint": "^2.0.9", + "conventional-changelog-preset-loader": "^2.3.4" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "engines": { + "node": ">=10" } }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "node_modules/conventional-changelog-angular": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz", + "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==", "dev": true, - "license": "MIT" + "license": "ISC", + "dependencies": { + "compare-func": "^2.0.0" + }, + "engines": { + "node": ">=16" + } }, - "node_modules/cosmiconfig": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "node_modules/conventional-changelog-atom": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz", + "integrity": "sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw==", "dev": true, - "license": "MIT", - "peer": true, + "license": "ISC", "dependencies": { - "env-paths": "^2.2.1", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0" + "q": "^1.5.1" }, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=10" } }, - "node_modules/cosmiconfig-typescript-loader": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-6.1.0.tgz", - "integrity": "sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==", + "node_modules/conventional-changelog-codemirror": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz", + "integrity": "sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "jiti": "^2.4.1" + "q": "^1.5.1" }, "engines": { - "node": ">=v18" - }, - "peerDependencies": { - "@types/node": "*", - "cosmiconfig": ">=9", - "typescript": ">=5" + "node": ">=10" } }, - "node_modules/cosmiconfig/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "node_modules/conventional-changelog-config-spec": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-config-spec/-/conventional-changelog-config-spec-2.1.0.tgz", + "integrity": "sha512-IpVePh16EbbB02V+UA+HQnnPIohgXvJRxHcS5+Uwk4AT5LjzCZJm5sp/yqs5C6KZJ1jMsV4paEV13BN1pvDuxQ==", "dev": true, - "license": "Python-2.0" + "license": "MIT" }, - "node_modules/cosmiconfig/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "node_modules/conventional-changelog-conventionalcommits": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz", + "integrity": "sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "argparse": "^2.0.1" + "compare-func": "^2.0.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=16" } }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "node_modules/conventional-changelog-core": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz", + "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==", "dev": true, "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "add-stream": "^1.0.0", + "conventional-changelog-writer": "^5.0.0", + "conventional-commits-parser": "^3.2.0", + "dateformat": "^3.0.0", + "get-pkg-repo": "^4.0.0", + "git-raw-commits": "^2.0.8", + "git-remote-origin-url": "^2.0.0", + "git-semver-tags": "^4.1.1", + "lodash": "^4.17.15", + "normalize-package-data": "^3.0.0", + "q": "^1.5.1", + "read-pkg": "^3.0.0", + "read-pkg-up": "^3.0.0", + "through2": "^4.0.0" }, "engines": { - "node": ">= 8" + "node": ">=10" } }, - "node_modules/cspell": { - "version": "8.19.4", - "resolved": "https://registry.npmjs.org/cspell/-/cspell-8.19.4.tgz", - "integrity": "sha512-toaLrLj3usWY0Bvdi661zMmpKW2DVLAG3tcwkAv4JBTisdIRn15kN/qZDrhSieUEhVgJgZJDH4UKRiq29mIFxA==", + "node_modules/conventional-changelog-core/node_modules/conventional-commits-parser": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", + "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-json-reporter": "8.19.4", - "@cspell/cspell-pipe": "8.19.4", - "@cspell/cspell-types": "8.19.4", - "@cspell/dynamic-import": "8.19.4", - "@cspell/url": "8.19.4", - "chalk": "^5.4.1", - "chalk-template": "^1.1.0", - "commander": "^13.1.0", - "cspell-dictionary": "8.19.4", - "cspell-gitignore": "8.19.4", - "cspell-glob": "8.19.4", - "cspell-io": "8.19.4", - "cspell-lib": "8.19.4", - "fast-json-stable-stringify": "^2.1.0", - "file-entry-cache": "^9.1.0", - "semver": "^7.7.1", - "tinyglobby": "^0.2.13" + "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" }, "bin": { - "cspell": "bin.mjs", - "cspell-esm": "bin.mjs" + "conventional-commits-parser": "cli.js" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/streetsidesoftware/cspell?sponsor=1" + "node": ">=10" } }, - "node_modules/cspell-config-lib": { - "version": "8.19.4", - "resolved": "https://registry.npmjs.org/cspell-config-lib/-/cspell-config-lib-8.19.4.tgz", - "integrity": "sha512-LtFNZEWVrnpjiTNgEDsVN05UqhhJ1iA0HnTv4jsascPehlaUYVoyucgNbFeRs6UMaClJnqR0qT9lnPX+KO1OLg==", + "node_modules/conventional-changelog-core/node_modules/dargs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", "dev": true, "license": "MIT", - "dependencies": { - "@cspell/cspell-types": "8.19.4", - "comment-json": "^4.2.5", - "yaml": "^2.7.1" - }, "engines": { - "node": ">=18" + "node": ">=8" } }, - "node_modules/cspell-dictionary": { - "version": "8.19.4", - "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-8.19.4.tgz", - "integrity": "sha512-lr8uIm7Wub8ToRXO9f6f7in429P1Egm3I+Ps3ZGfWpwLTCUBnHvJdNF/kQqF7PL0Lw6acXcjVWFYT7l2Wdst2g==", + "node_modules/conventional-changelog-core/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-pipe": "8.19.4", - "@cspell/cspell-types": "8.19.4", - "cspell-trie-lib": "8.19.4", - "fast-equals": "^5.2.2" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=18" + "node": ">=8" } }, - "node_modules/cspell-gitignore": { - "version": "8.19.4", - "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-8.19.4.tgz", - "integrity": "sha512-KrViypPilNUHWZkMV0SM8P9EQVIyH8HvUqFscI7+cyzWnlglvzqDdV4N5f+Ax5mK+IqR6rTEX8JZbCwIWWV7og==", + "node_modules/conventional-changelog-core/node_modules/git-raw-commits": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", + "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/url": "8.19.4", - "cspell-glob": "8.19.4", - "cspell-io": "8.19.4" + "dargs": "^7.0.0", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" }, "bin": { - "cspell-gitignore": "bin.mjs" + "git-raw-commits": "cli.js" }, "engines": { - "node": ">=18" + "node": ">=10" } }, - "node_modules/cspell-glob": { - "version": "8.19.4", - "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-8.19.4.tgz", - "integrity": "sha512-042uDU+RjAz882w+DXKuYxI2rrgVPfRQDYvIQvUrY1hexH4sHbne78+OMlFjjzOCEAgyjnm1ktWUCCmh08pQUw==", + "node_modules/conventional-changelog-core/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@cspell/url": "8.19.4", - "picomatch": "^4.0.2" + "lru-cache": "^6.0.0" }, "engines": { - "node": ">=18" + "node": ">=10" } }, - "node_modules/cspell-grammar": { - "version": "8.19.4", - "resolved": "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-8.19.4.tgz", - "integrity": "sha512-lzWgZYTu/L7DNOHjxuKf8H7DCXvraHMKxtFObf8bAzgT+aBmey5fW2LviXUkZ2Lb2R0qQY+TJ5VIGoEjNf55ow==", + "node_modules/conventional-changelog-core/node_modules/is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-pipe": "8.19.4", - "@cspell/cspell-types": "8.19.4" - }, - "bin": { - "cspell-grammar": "bin.mjs" + "text-extensions": "^1.0.0" }, "engines": { - "node": ">=18" + "node": ">=0.10.0" } }, - "node_modules/cspell-io": { - "version": "8.19.4", - "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-8.19.4.tgz", - "integrity": "sha512-W48egJqZ2saEhPWf5ftyighvm4mztxEOi45ILsKgFikXcWFs0H0/hLwqVFeDurgELSzprr12b6dXsr67dV8amg==", + "node_modules/conventional-changelog-core/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-service-bus": "8.19.4", - "@cspell/url": "8.19.4" + "p-locate": "^4.1.0" }, "engines": { - "node": ">=18" + "node": ">=8" } }, - "node_modules/cspell-lib": { - "version": "8.19.4", - "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-8.19.4.tgz", - "integrity": "sha512-NwfdCCYtIBNQuZcoMlMmL3HSv2olXNErMi/aOTI9BBAjvCHjhgX5hbHySMZ0NFNynnN+Mlbu5kooJ5asZeB3KA==", + "node_modules/conventional-changelog-core/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@cspell/cspell-bundled-dicts": "8.19.4", - "@cspell/cspell-pipe": "8.19.4", - "@cspell/cspell-resolver": "8.19.4", - "@cspell/cspell-types": "8.19.4", - "@cspell/dynamic-import": "8.19.4", - "@cspell/filetypes": "8.19.4", - "@cspell/strong-weak-map": "8.19.4", - "@cspell/url": "8.19.4", - "clear-module": "^4.1.2", - "comment-json": "^4.2.5", - "cspell-config-lib": "8.19.4", - "cspell-dictionary": "8.19.4", - "cspell-glob": "8.19.4", - "cspell-grammar": "8.19.4", - "cspell-io": "8.19.4", - "cspell-trie-lib": "8.19.4", - "env-paths": "^3.0.0", - "fast-equals": "^5.2.2", - "gensequence": "^7.0.0", - "import-fresh": "^3.3.1", - "resolve-from": "^5.0.0", - "vscode-languageserver-textdocument": "^1.0.12", - "vscode-uri": "^3.1.0", - "xdg-basedir": "^5.1.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">=18" + "node": ">=10" } }, - "node_modules/cspell-lib/node_modules/env-paths": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", - "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", + "node_modules/conventional-changelog-core/node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, "license": "MIT", + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cspell-trie-lib": { - "version": "8.19.4", - "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-8.19.4.tgz", - "integrity": "sha512-yIPlmGSP3tT3j8Nmu+7CNpkPh/gBO2ovdnqNmZV+LNtQmVxqFd2fH7XvR1TKjQyctSH1ip0P5uIdJmzY1uhaYg==", + "node_modules/conventional-changelog-core/node_modules/meow/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true, - "license": "MIT", - "dependencies": { - "@cspell/cspell-pipe": "8.19.4", - "@cspell/cspell-types": "8.19.4", - "gensequence": "^7.0.0" - }, - "engines": { - "node": ">=18" - } + "license": "ISC" }, - "node_modules/cspell/node_modules/commander": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", - "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", + "node_modules/conventional-changelog-core/node_modules/meow/node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/cspell/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/css-loader": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz", - "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==", + "node_modules/conventional-changelog-core/node_modules/meow/node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "license": "MIT", "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.1.0", - "postcss-modules-local-by-default": "^4.0.5", - "postcss-modules-scope": "^3.2.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.5.4" + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" }, "engines": { - "node": ">= 18.12.0" + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.27.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/css-loader/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "node_modules/conventional-changelog-core/node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "node_modules/conventional-changelog-core/node_modules/meow/node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "node_modules/css-what": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", - "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "node_modules/conventional-changelog-core/node_modules/meow/node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, - "license": "BSD-2-Clause", + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" + "node": ">=8" } }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "node_modules/conventional-changelog-core/node_modules/meow/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "license": "MIT", + "license": "ISC", "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" + "semver": "bin/semver" } }, - "node_modules/cssom": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", - "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", - "dev": true, - "license": "MIT" - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "node_modules/conventional-changelog-core/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "cssom": "~0.3.6" + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true, - "license": "MIT" - }, - "node_modules/dargs": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-8.1.0.tgz", - "integrity": "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==", + "node_modules/conventional-changelog-core/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, "engines": { - "node": ">=12" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/data-uri-to-buffer": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", - "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", + "node_modules/conventional-changelog-core/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, "engines": { - "node": ">= 14" + "node": ">=8" } }, - "node_modules/data-urls": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", - "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "node_modules/conventional-changelog-core/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", - "dependencies": { - "abab": "^2.0.6", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0" - }, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/data-view-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "node_modules/conventional-changelog-core/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 6" } }, - "node_modules/data-view-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "node_modules/conventional-changelog-core/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/inspect-js" + "node": ">=10" } }, - "node_modules/data-view-byte-offset": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", - "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "node_modules/conventional-changelog-core/node_modules/split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "readable-stream": "^3.0.0" } }, - "node_modules/dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "node_modules/conventional-changelog-core/node_modules/text-extensions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", "dev": true, "license": "MIT", "engines": { - "node": "*" + "node": ">=0.10" } }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, + "node_modules/conventional-changelog-core/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=6.0" + "node": ">=10" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "node_modules/conventional-changelog-core/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, - "license": "MIT", + "license": "ISC" + }, + "node_modules/conventional-changelog-core/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/decamelize-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", + "node_modules/conventional-changelog-ember": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz", + "integrity": "sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" + "q": "^1.5.1" }, "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10" } }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "node_modules/conventional-changelog-eslint": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz", + "integrity": "sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA==", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "q": "^1.5.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/decimal.js": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", - "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", - "dev": true, - "license": "MIT" - }, - "node_modules/decode-named-character-reference": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz", - "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==", + "node_modules/conventional-changelog-express": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz", + "integrity": "sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "character-entities": "^2.0.0" + "q": "^1.5.1" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "engines": { + "node": ">=10" } }, - "node_modules/dedent": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.0.tgz", - "integrity": "sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==", + "node_modules/conventional-changelog-jquery": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz", + "integrity": "sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw==", "dev": true, - "license": "MIT", - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" + "license": "ISC", + "dependencies": { + "q": "^1.5.1" }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } + "engines": { + "node": ">=10" } }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "node_modules/conventional-changelog-jshint": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz", + "integrity": "sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA==", "dev": true, - "license": "MIT" + "license": "ISC", + "dependencies": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "node_modules/conventional-changelog-preset-loader": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", + "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/default-browser": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", - "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", + "node_modules/conventional-changelog-writer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz", + "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==", + "dev": true, "license": "MIT", "dependencies": { - "bundle-name": "^4.1.0", - "default-browser-id": "^5.0.0" + "conventional-commits-filter": "^2.0.7", + "dateformat": "^3.0.0", + "handlebars": "^4.7.7", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "semver": "^6.0.0", + "split": "^1.0.0", + "through2": "^4.0.0" }, - "engines": { - "node": ">=18" + "bin": { + "conventional-changelog-writer": "cli.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=10" } }, - "node_modules/default-browser-id": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", - "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "node_modules/conventional-changelog-writer/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=18" + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8" } }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "node_modules/conventional-changelog-writer/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" + "lru-cache": "^6.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10" } }, - "node_modules/define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "node_modules/conventional-changelog-writer/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "p-locate": "^4.1.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8" } }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "node_modules/conventional-changelog-writer/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "yallist": "^4.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10" } }, - "node_modules/degenerator": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", - "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", + "node_modules/conventional-changelog-writer/node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, "license": "MIT", "dependencies": { - "ast-types": "^0.13.4", - "escodegen": "^2.1.0", - "esprima": "^4.0.1" + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" }, "engines": { - "node": ">= 14" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "node_modules/conventional-changelog-writer/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, "engines": { - "node": ">=0.4.0" + "node": ">=10" } }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", + "node_modules/conventional-changelog-writer/node_modules/normalize-package-data/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">= 0.8" + "node": ">=10" } }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "node_modules/conventional-changelog-writer/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, "engines": { "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/detect-indent": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-7.0.1.tgz", - "integrity": "sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==", + "node_modules/conventional-changelog-writer/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, "engines": { - "node": ">=12.20" + "node": ">=8" } }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "node_modules/conventional-changelog-writer/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/devlop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "node_modules/conventional-changelog-writer/node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "license": "MIT", "dependencies": { - "dequal": "^2.0.0" + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "engines": { + "node": ">=8" } }, - "node_modules/devtools-protocol": { - "version": "0.0.1534754", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1534754.tgz", - "integrity": "sha512-26T91cV5dbOYnXdJi5qQHoTtUoNEqwkHcAyu/IKtjIAxiEqPMrDiRkDOPWVsGfNZGmlQVHQbZRSjD8sxagWVsQ==", - "dev": true, - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/dezalgo": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "node_modules/conventional-changelog-writer/node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, - "license": "ISC", - "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "node_modules/dns-packet": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", - "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", "license": "MIT", "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" }, "engines": { - "node": ">=6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "node_modules/conventional-changelog-writer/node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "node_modules/conventional-changelog-writer/node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true, - "license": "MIT", - "dependencies": { - "utila": "~0.4" - } + "license": "ISC" }, - "node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "node_modules/conventional-changelog-writer/node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "node_modules/dom-serializer/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "node_modules/conventional-changelog-writer/node_modules/read-pkg/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/domexception": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", - "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", - "deprecated": "Use your platform's native DOMException instead", + "node_modules/conventional-changelog-writer/node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, - "license": "MIT", - "dependencies": { - "webidl-conversions": "^7.0.0" - }, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "node_modules/conventional-changelog-writer/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.2.0" - }, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">= 4" + "node": ">=10" }, "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "node_modules/conventional-changelog-writer/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } + "license": "ISC" }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "node_modules/conventional-changelog-writer/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" + "license": "ISC", + "engines": { + "node": ">=10" } }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "node_modules/conventional-changelog/node_modules/conventional-changelog-angular": { + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", + "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "is-obj": "^2.0.0" + "compare-func": "^2.0.0", + "q": "^1.5.1" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/dotgitignore": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/dotgitignore/-/dotgitignore-2.1.0.tgz", - "integrity": "sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA==", + "node_modules/conventional-changelog/node_modules/conventional-changelog-conventionalcommits": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.3.tgz", + "integrity": "sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==", "dev": true, "license": "ISC", "dependencies": { - "find-up": "^3.0.0", - "minimatch": "^3.0.4" + "compare-func": "^2.0.0", + "lodash": "^4.17.15", + "q": "^1.5.1" }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/dotgitignore/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "node_modules/conventional-commits-filter": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", + "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", "dev": true, "license": "MIT", "dependencies": { - "locate-path": "^3.0.0" + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.0" }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/dotgitignore/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "node_modules/conventional-commits-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", + "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==", "dev": true, "license": "MIT", "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "is-text-path": "^2.0.0", + "JSONStream": "^1.3.5", + "meow": "^12.0.1", + "split2": "^4.0.0" + }, + "bin": { + "conventional-commits-parser": "cli.mjs" }, "engines": { - "node": ">=6" + "node": ">=16" } }, - "node_modules/dotgitignore/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/conventional-recommended-bump": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", + "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", "dev": true, "license": "MIT", "dependencies": { - "p-try": "^2.0.0" + "concat-stream": "^2.0.0", + "conventional-changelog-preset-loader": "^2.3.4", + "conventional-commits-filter": "^2.0.7", + "conventional-commits-parser": "^3.2.0", + "git-raw-commits": "^2.0.8", + "git-semver-tags": "^4.1.1", + "meow": "^8.0.0", + "q": "^1.5.1" }, - "engines": { - "node": ">=6" + "bin": { + "conventional-recommended-bump": "cli.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=10" } }, - "node_modules/dotgitignore/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "node_modules/conventional-recommended-bump/node_modules/conventional-commits-parser": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", + "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^2.0.0" + "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "conventional-commits-parser": "cli.js" }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/dotgitignore/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "node_modules/conventional-recommended-bump/node_modules/dargs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "node_modules/conventional-recommended-bump/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, - "license": "MIT" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" - }, - "node_modules/electron-to-chromium": { - "version": "1.5.283", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.283.tgz", - "integrity": "sha512-3vifjt1HgrGW/h76UEeny+adYApveS9dH2h3p57JYzBSXJIKUJAvtmIytDKjcSCt9xHfrNCFJ7gts6vkhuq++w==", - "devOptional": true, - "license": "ISC" - }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "node_modules/conventional-recommended-bump/node_modules/git-raw-commits": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", + "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "dargs": "^7.0.0", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" + "bin": { + "git-raw-commits": "cli.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/emoji-regex": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.5.0.tgz", - "integrity": "sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==", + "node_modules/conventional-recommended-bump/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, - "license": "MIT" - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "license": "MIT", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, "engines": { - "node": ">= 0.8" + "node": ">=10" } }, - "node_modules/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "node_modules/conventional-recommended-bump/node_modules/is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", "dev": true, "license": "MIT", "dependencies": { - "once": "^1.4.0" + "text-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/enhanced-resolve": { - "version": "5.20.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.1.tgz", - "integrity": "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==", - "devOptional": true, + "node_modules/conventional-recommended-bump/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.3.0" + "p-locate": "^4.1.0" }, "engines": { - "node": ">=10.13.0" + "node": ">=8" } }, - "node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "node_modules/conventional-recommended-bump/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "engines": { + "node": ">=10" } }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "node_modules/conventional-recommended-bump/node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, "license": "MIT", + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/envinfo": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", - "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", + "node_modules/conventional-recommended-bump/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, - "license": "MIT", - "bin": { - "envinfo": "dist/cli.js" + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" }, "engines": { - "node": ">=4" - } - }, - "node_modules/environment": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", - "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "node": ">=10" + } + }, + "node_modules/conventional-recommended-bump/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, "engines": { - "node": ">=18" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "node_modules/conventional-recommended-bump/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "prr": "~1.0.1" + "p-limit": "^2.2.0" }, - "bin": { - "errno": "cli.js" + "engines": { + "node": ">=8" } }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "node_modules/conventional-recommended-bump/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" + "engines": { + "node": ">=8" } }, - "node_modules/es-abstract": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", - "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "node_modules/conventional-recommended-bump/node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.2", - "arraybuffer.prototype.slice": "^1.0.4", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "data-view-buffer": "^1.0.2", - "data-view-byte-length": "^1.0.2", - "data-view-byte-offset": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "es-set-tostringtag": "^2.1.0", - "es-to-primitive": "^1.3.0", - "function.prototype.name": "^1.1.8", - "get-intrinsic": "^1.3.0", - "get-proto": "^1.0.1", - "get-symbol-description": "^1.1.0", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "internal-slot": "^1.1.0", - "is-array-buffer": "^3.0.5", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.2", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.2.1", - "is-set": "^2.0.3", - "is-shared-array-buffer": "^1.0.4", - "is-string": "^1.1.1", - "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.1", - "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.4", - "object-keys": "^1.1.1", - "object.assign": "^4.1.7", - "own-keys": "^1.0.1", - "regexp.prototype.flags": "^1.5.4", - "safe-array-concat": "^1.1.3", - "safe-push-apply": "^1.0.0", - "safe-regex-test": "^1.1.0", - "set-proto": "^1.0.0", - "stop-iteration-iterator": "^1.1.0", - "string.prototype.trim": "^1.2.10", - "string.prototype.trimend": "^1.0.9", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.3", - "typed-array-byte-length": "^1.0.3", - "typed-array-byte-offset": "^1.0.4", - "typed-array-length": "^1.0.7", - "unbox-primitive": "^1.1.0", - "which-typed-array": "^1.1.19" + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "node_modules/conventional-recommended-bump/node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, "license": "MIT", + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, "engines": { - "node": ">= 0.4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", + "node_modules/conventional-recommended-bump/node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/es-module-lexer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", - "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", - "devOptional": true, - "license": "MIT" + "node_modules/conventional-recommended-bump/node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true, + "license": "ISC" }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", + "node_modules/conventional-recommended-bump/node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "es-errors": "^1.3.0" - }, + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/conventional-recommended-bump/node_modules/read-pkg/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/conventional-recommended-bump/node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "node_modules/conventional-recommended-bump/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">= 6" } }, - "node_modules/es-shim-unscopables": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", - "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "node_modules/conventional-recommended-bump/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">= 0.4" + "node": ">=10" } }, - "node_modules/es-to-primitive": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "node_modules/conventional-recommended-bump/node_modules/split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "is-callable": "^1.2.7", - "is-date-object": "^1.0.5", - "is-symbol": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "readable-stream": "^3.0.0" } }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "devOptional": true, + "node_modules/conventional-recommended-bump/node_modules/text-extensions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", + "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=0.10" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/conventional-recommended-bump/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, - "license": "MIT", + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -10778,430 +7780,387 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "node_modules/conventional-recommended-bump/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, + "license": "ISC" + }, + "node_modules/conventional-recommended-bump/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" + "node": ">=10" } }, - "node_modules/eslint": { - "version": "9.39.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.1.tgz", - "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "license": "MIT", - "peer": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.1", - "@eslint/config-helpers": "^0.4.2", - "@eslint/core": "^0.17.0", - "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.39.1", - "@eslint/plugin-kit": "^0.4.1", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.4.0", - "eslint-visitor-keys": "^4.2.1", - "espree": "^10.4.0", - "esquery": "^1.5.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } + "node": ">= 0.6" } }, - "node_modules/eslint-compat-utils": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", - "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", + "dev": true, + "license": "MIT" + }, + "node_modules/copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", "dev": true, "license": "MIT", "dependencies": { - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12" + "is-what": "^3.14.1" }, - "peerDependencies": { - "eslint": ">=6.0.0" + "funding": { + "url": "https://github.com/sponsors/mesqueeb" } }, - "node_modules/eslint-compat-utils/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "node_modules/core-js": { + "version": "3.47.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.47.0.tgz", + "integrity": "sha512-c3Q2VVkGAUyupsjRnaNX6u8Dq2vAdzm9iuPj5FW0fRxzlxgq9Q39MDq10IvmQSpLgHQNyQzQmOo6bgGHmH3NNg==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "node_modules/eslint-config-prettier": { - "version": "10.1.8", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", - "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", + "node_modules/core-js-compat": { + "version": "3.45.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.45.1.tgz", + "integrity": "sha512-tqTt5T4PzsMIZ430XGviK4vzYSoeNJ6CXODi6c/voxOT6IZqBht5/EKaSNnYiEjjRYxjVz7DQIsOsY0XNi8PIA==", "dev": true, "license": "MIT", - "peer": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" + "dependencies": { + "browserslist": "^4.25.3" }, "funding": { - "url": "https://opencollective.com/eslint-config-prettier" - }, - "peerDependencies": { - "eslint": ">=7.0.0" + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "node_modules/eslint-config-webpack": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/eslint-config-webpack/-/eslint-config-webpack-4.6.3.tgz", - "integrity": "sha512-nKUWDmJ1SYwibd/zI5ntk6alKQ26e5ly0d5EQpDDRWtBJuBqvCyJtvphBtS0m58EsLLkQgCrSaWJVU4yGjSneg==", + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "detect-indent": "^7.0.1", - "jsonc-eslint-parser": "^2.4.0", - "semver": "^7.7.2", - "sort-package-json": "^3.4.0" + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" }, "engines": { - "node": ">= 20.9.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" }, "peerDependencies": { - "@eslint/js": ">= 9.28.0", - "@eslint/markdown": ">= 7.1.0", - "@stylistic/eslint-plugin": ">= 4.4.1", - "eslint": ">= 9.28.0", - "eslint-config-prettier": "^10.1.8", - "eslint-plugin-import": ">= 2.31.0", - "eslint-plugin-jest": ">= 28.12.0", - "eslint-plugin-jsdoc": ">= 50.7.1", - "eslint-plugin-n": ">= 17.19.0", - "eslint-plugin-prettier": ">= 5.5.3", - "eslint-plugin-react": ">= 7.37.5", - "eslint-plugin-unicorn": ">= 60.0.0", - "globals": ">= 16.2.0", - "prettier": ">= 3.5.3", - "typescript": ">= 5.0.0", - "typescript-eslint": ">= 8.34.0" + "typescript": ">=4.9.5" }, "peerDependenciesMeta": { - "@eslint/markdown": { - "optional": true - }, - "eslint-plugin-jest": { - "optional": true - }, - "eslint-plugin-jsdoc": { - "optional": true - }, - "eslint-plugin-n": { - "optional": true - }, - "eslint-plugin-react": { - "optional": true - }, "typescript": { "optional": true - }, - "typescript-eslint": { - "optional": true - } - } - }, - "node_modules/eslint-config-webpack/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + } + } + }, + "node_modules/cosmiconfig-typescript-loader": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-6.1.0.tgz", + "integrity": "sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "license": "MIT", + "dependencies": { + "jiti": "^2.4.1" }, "engines": { - "node": ">=10" + "node": ">=v18" + }, + "peerDependencies": { + "@types/node": "*", + "cosmiconfig": ">=9", + "typescript": ">=5" } }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "license": "MIT", "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "license": "MIT", "dependencies": { - "ms": "^2.1.1" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/eslint-module-utils": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", - "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", + "node_modules/cspell": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/cspell/-/cspell-8.19.4.tgz", + "integrity": "sha512-toaLrLj3usWY0Bvdi661zMmpKW2DVLAG3tcwkAv4JBTisdIRn15kN/qZDrhSieUEhVgJgZJDH4UKRiq29mIFxA==", "dev": true, "license": "MIT", "dependencies": { - "debug": "^3.2.7" + "@cspell/cspell-json-reporter": "8.19.4", + "@cspell/cspell-pipe": "8.19.4", + "@cspell/cspell-types": "8.19.4", + "@cspell/dynamic-import": "8.19.4", + "@cspell/url": "8.19.4", + "chalk": "^5.4.1", + "chalk-template": "^1.1.0", + "commander": "^13.1.0", + "cspell-dictionary": "8.19.4", + "cspell-gitignore": "8.19.4", + "cspell-glob": "8.19.4", + "cspell-io": "8.19.4", + "cspell-lib": "8.19.4", + "fast-json-stable-stringify": "^2.1.0", + "file-entry-cache": "^9.1.0", + "semver": "^7.7.1", + "tinyglobby": "^0.2.13" + }, + "bin": { + "cspell": "bin.mjs", + "cspell-esm": "bin.mjs" }, "engines": { - "node": ">=4" + "node": ">=18" }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } + "funding": { + "url": "https://github.com/streetsidesoftware/cspell?sponsor=1" } }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/cspell-config-lib": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/cspell-config-lib/-/cspell-config-lib-8.19.4.tgz", + "integrity": "sha512-LtFNZEWVrnpjiTNgEDsVN05UqhhJ1iA0HnTv4jsascPehlaUYVoyucgNbFeRs6UMaClJnqR0qT9lnPX+KO1OLg==", "dev": true, "license": "MIT", "dependencies": { - "ms": "^2.1.1" + "@cspell/cspell-types": "8.19.4", + "comment-json": "^4.2.5", + "yaml": "^2.7.1" + }, + "engines": { + "node": ">=18" } }, - "node_modules/eslint-plugin-es-x": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz", - "integrity": "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==", + "node_modules/cspell-dictionary": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-8.19.4.tgz", + "integrity": "sha512-lr8uIm7Wub8ToRXO9f6f7in429P1Egm3I+Ps3ZGfWpwLTCUBnHvJdNF/kQqF7PL0Lw6acXcjVWFYT7l2Wdst2g==", "dev": true, - "funding": [ - "https://github.com/sponsors/ota-meshi", - "https://opencollective.com/eslint" - ], "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.1.2", - "@eslint-community/regexpp": "^4.11.0", - "eslint-compat-utils": "^0.5.1" + "@cspell/cspell-pipe": "8.19.4", + "@cspell/cspell-types": "8.19.4", + "cspell-trie-lib": "8.19.4", + "fast-equals": "^5.2.2" }, "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": ">=8" + "node": ">=18" } }, - "node_modules/eslint-plugin-import": { - "version": "2.32.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", - "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", + "node_modules/cspell-gitignore": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-8.19.4.tgz", + "integrity": "sha512-KrViypPilNUHWZkMV0SM8P9EQVIyH8HvUqFscI7+cyzWnlglvzqDdV4N5f+Ax5mK+IqR6rTEX8JZbCwIWWV7og==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.9", - "array.prototype.findlastindex": "^1.2.6", - "array.prototype.flat": "^1.3.3", - "array.prototype.flatmap": "^1.3.3", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.12.1", - "hasown": "^2.0.2", - "is-core-module": "^2.16.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "object.groupby": "^1.0.3", - "object.values": "^1.2.1", - "semver": "^6.3.1", - "string.prototype.trimend": "^1.0.9", - "tsconfig-paths": "^3.15.0" + "@cspell/url": "8.19.4", + "cspell-glob": "8.19.4", + "cspell-io": "8.19.4" }, - "engines": { - "node": ">=4" + "bin": { + "cspell-gitignore": "bin.mjs" }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + "engines": { + "node": ">=18" } }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/cspell-glob": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-8.19.4.tgz", + "integrity": "sha512-042uDU+RjAz882w+DXKuYxI2rrgVPfRQDYvIQvUrY1hexH4sHbne78+OMlFjjzOCEAgyjnm1ktWUCCmh08pQUw==", "dev": true, "license": "MIT", "dependencies": { - "ms": "^2.1.1" + "@cspell/url": "8.19.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=18" } }, - "node_modules/eslint-plugin-jest": { - "version": "29.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-29.2.1.tgz", - "integrity": "sha512-0WLIezrIxitUGbjMIGwznVzSIp0uFJV0PZ2fiSvpyVcxe+QMXKUt7MRhUpzdbctnnLwiOTOFkACplgB0wAglFw==", + "node_modules/cspell-grammar": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-8.19.4.tgz", + "integrity": "sha512-lzWgZYTu/L7DNOHjxuKf8H7DCXvraHMKxtFObf8bAzgT+aBmey5fW2LviXUkZ2Lb2R0qQY+TJ5VIGoEjNf55ow==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@typescript-eslint/utils": "^8.0.0" + "@cspell/cspell-pipe": "8.19.4", + "@cspell/cspell-types": "8.19.4" }, - "engines": { - "node": "^20.12.0 || ^22.0.0 || >=24.0.0" + "bin": { + "cspell-grammar": "bin.mjs" }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^8.0.0", - "eslint": "^8.57.0 || ^9.0.0", - "jest": "*" + "engines": { + "node": ">=18" + } + }, + "node_modules/cspell-io": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-8.19.4.tgz", + "integrity": "sha512-W48egJqZ2saEhPWf5ftyighvm4mztxEOi45ILsKgFikXcWFs0H0/hLwqVFeDurgELSzprr12b6dXsr67dV8amg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspell/cspell-service-bus": "8.19.4", + "@cspell/url": "8.19.4" }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - }, - "jest": { - "optional": true - } + "engines": { + "node": ">=18" } }, - "node_modules/eslint-plugin-jsdoc": { - "version": "51.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-51.4.1.tgz", - "integrity": "sha512-y4CA9OkachG8v5nAtrwvcvjIbdcKgSyS6U//IfQr4FZFFyeBFwZFf/tfSsMr46mWDJgidZjBTqoCRlXywfFBMg==", + "node_modules/cspell-lib": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-8.19.4.tgz", + "integrity": "sha512-NwfdCCYtIBNQuZcoMlMmL3HSv2olXNErMi/aOTI9BBAjvCHjhgX5hbHySMZ0NFNynnN+Mlbu5kooJ5asZeB3KA==", "dev": true, - "license": "BSD-3-Clause", - "peer": true, + "license": "MIT", "dependencies": { - "@es-joy/jsdoccomment": "~0.52.0", - "are-docs-informative": "^0.0.2", - "comment-parser": "1.4.1", - "debug": "^4.4.1", - "escape-string-regexp": "^4.0.0", - "espree": "^10.4.0", - "esquery": "^1.6.0", - "parse-imports-exports": "^0.2.4", - "semver": "^7.7.2", - "spdx-expression-parse": "^4.0.0" + "@cspell/cspell-bundled-dicts": "8.19.4", + "@cspell/cspell-pipe": "8.19.4", + "@cspell/cspell-resolver": "8.19.4", + "@cspell/cspell-types": "8.19.4", + "@cspell/dynamic-import": "8.19.4", + "@cspell/filetypes": "8.19.4", + "@cspell/strong-weak-map": "8.19.4", + "@cspell/url": "8.19.4", + "clear-module": "^4.1.2", + "comment-json": "^4.2.5", + "cspell-config-lib": "8.19.4", + "cspell-dictionary": "8.19.4", + "cspell-glob": "8.19.4", + "cspell-grammar": "8.19.4", + "cspell-io": "8.19.4", + "cspell-trie-lib": "8.19.4", + "env-paths": "^3.0.0", + "fast-equals": "^5.2.2", + "gensequence": "^7.0.0", + "import-fresh": "^3.3.1", + "resolve-from": "^5.0.0", + "vscode-languageserver-textdocument": "^1.0.12", + "vscode-uri": "^3.1.0", + "xdg-basedir": "^5.1.0" }, "engines": { - "node": ">=20.11.0" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" + "node": ">=18" } }, - "node_modules/eslint-plugin-jsdoc/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "node_modules/cspell-lib/node_modules/env-paths": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", + "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-n": { - "version": "17.23.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.23.1.tgz", - "integrity": "sha512-68PealUpYoHOBh332JLLD9Sj7OQUDkFpmcfqt8R9sySfFSeuGJjMTJQvCRRB96zO3A/PELRLkPrzsHmzEFQQ5A==", + "node_modules/cspell-trie-lib": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-8.19.4.tgz", + "integrity": "sha512-yIPlmGSP3tT3j8Nmu+7CNpkPh/gBO2ovdnqNmZV+LNtQmVxqFd2fH7XvR1TKjQyctSH1ip0P5uIdJmzY1uhaYg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.5.0", - "enhanced-resolve": "^5.17.1", - "eslint-plugin-es-x": "^7.8.0", - "get-tsconfig": "^4.8.1", - "globals": "^15.11.0", - "globrex": "^0.1.2", - "ignore": "^5.3.2", - "semver": "^7.6.3", - "ts-declaration-location": "^1.0.6" + "@cspell/cspell-pipe": "8.19.4", + "@cspell/cspell-types": "8.19.4", + "gensequence": "^7.0.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": ">=8.23.0" + "node": ">=18" } }, - "node_modules/eslint-plugin-n/node_modules/globals": { - "version": "15.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", - "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", + "node_modules/cspell/node_modules/commander": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", + "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", "dev": true, "license": "MIT", "engines": { "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-n/node_modules/semver": { + "node_modules/cspell/node_modules/semver": { "version": "7.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", @@ -11214,75 +8173,43 @@ "node": ">=10" } }, - "node_modules/eslint-plugin-prettier": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.4.tgz", - "integrity": "sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==", + "node_modules/css-loader": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz", + "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.11.7" + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": ">= 18.12.0" }, "funding": { - "url": "https://opencollective.com/eslint-plugin-prettier" + "type": "opencollective", + "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "@types/eslint": ">=8.0.0", - "eslint": ">=8.0.0", - "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", - "prettier": ">=3.0.0" + "@rspack/core": "0.x || 1.x", + "webpack": "^5.27.0" }, "peerDependenciesMeta": { - "@types/eslint": { + "@rspack/core": { "optional": true }, - "eslint-config-prettier": { + "webpack": { "optional": true } } }, - "node_modules/eslint-plugin-unicorn": { - "version": "61.0.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-61.0.2.tgz", - "integrity": "sha512-zLihukvneYT7f74GNbVJXfWIiNQmkc/a9vYBTE4qPkQZswolWNdu+Wsp9sIXno1JOzdn6OUwLPd19ekXVkahRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", - "@eslint-community/eslint-utils": "^4.7.0", - "@eslint/plugin-kit": "^0.3.3", - "change-case": "^5.4.4", - "ci-info": "^4.3.0", - "clean-regexp": "^1.0.0", - "core-js-compat": "^3.44.0", - "esquery": "^1.6.0", - "find-up-simple": "^1.0.1", - "globals": "^16.3.0", - "indent-string": "^5.0.0", - "is-builtin-module": "^5.0.0", - "jsesc": "^3.1.0", - "pluralize": "^8.0.0", - "regexp-tree": "^0.1.27", - "regjsparser": "^0.12.0", - "semver": "^7.7.2", - "strip-indent": "^4.0.0" - }, - "engines": { - "node": "^20.10.0 || >=21.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1" - }, - "peerDependencies": { - "eslint": ">=9.29.0" - } - }, - "node_modules/eslint-plugin-unicorn/node_modules/semver": { + "node_modules/css-loader/node_modules/semver": { "version": "7.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", @@ -11295,857 +8222,728 @@ "node": ">=10" } }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "devOptional": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-scope/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "devOptional": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/@eslint/core": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", - "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/eslint/node_modules/@eslint/plugin-kit": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", - "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^0.17.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/eslint/node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "color-name": "~1.1.4" + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" }, - "engines": { - "node": ">=7.0.0" + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", - "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "node_modules/css-tree": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", + "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "mdn-data": "2.27.1", + "source-map-js": "^1.2.1" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" } }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", "dev": true, - "license": "Apache-2.0", + "license": "BSD-2-Clause", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">= 6" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/eslint/node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" + "bin": { + "cssesc": "bin/cssesc" }, "engines": { - "node": ">=16.0.0" + "node": ">=4" } }, - "node_modules/eslint/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/dargs": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-8.1.0.tgz", + "integrity": "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==", "dev": true, "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "node_modules/data-uri-to-buffer": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", "dev": true, "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, "engines": { - "node": ">=16" + "node": ">= 14" } }, - "node_modules/eslint/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "node_modules/data-urls": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-7.0.0.tgz", + "integrity": "sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==", "dev": true, "license": "MIT", "dependencies": { - "p-locate": "^5.0.0" + "whatwg-mimetype": "^5.0.0", + "whatwg-url": "^16.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" } }, - "node_modules/eslint/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^3.0.2" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/espree": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", - "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", - "dev": true, - "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.15.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.1" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">= 0.4" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/inspect-js" } }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">= 0.4" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "node_modules/dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, + "license": "MIT", "engines": { - "node": ">=4" + "node": "*" } }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", "dependencies": { - "estraverse": "^5.1.0" + "ms": "^2.1.3" }, "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "devOptional": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" + "node": ">=6.0" }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "devOptional": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "node_modules/decamelize-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", + "dev": true, "license": "MIT", + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "dev": true, "license": "MIT" }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/events-universal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", - "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", + "node_modules/decode-named-character-reference": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz", + "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "bare-events": "^2.7.0" + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true, + "license": "MIT" + }, + "node_modules/default-browser": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", + "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/exit-x": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/exit-x/-/exit-x-0.2.2.tgz", - "integrity": "sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==", - "dev": true, + "node_modules/default-browser-id": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", "license": "MIT", "engines": { - "node": ">= 0.8.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/expect": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-30.2.0.tgz", - "integrity": "sha512-u/feCi0GPsI+988gU2FLcsHyAHTU0MX1Wg68NhAnN7z/+C5wqG+CY8J53N9ioe8RXgaoz0nBR/TYMf3AycUuPw==", + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, "license": "MIT", "dependencies": { - "@jest/expect-utils": "30.2.0", - "@jest/get-type": "30.1.0", - "jest-matcher-utils": "30.2.0", - "jest-message-util": "30.2.0", - "jest-mock": "30.2.0", - "jest-util": "30.2.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/express": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", - "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", "license": "MIT", - "dependencies": { - "accepts": "^2.0.0", - "body-parser": "^2.2.1", - "content-disposition": "^1.0.0", - "content-type": "^1.0.5", - "cookie": "^0.7.1", - "cookie-signature": "^1.2.1", - "debug": "^4.4.0", - "depd": "^2.0.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "finalhandler": "^2.1.0", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "merge-descriptors": "^2.0.0", - "mime-types": "^3.0.0", - "on-finished": "^2.4.1", - "once": "^1.4.0", - "parseurl": "^1.3.3", - "proxy-addr": "^2.0.7", - "qs": "^6.14.0", - "range-parser": "^1.2.1", - "router": "^2.2.0", - "send": "^1.1.0", - "serve-static": "^2.2.0", - "statuses": "^2.0.1", - "type-is": "^2.0.1", - "vary": "^1.1.2" - }, "engines": { - "node": ">= 18" + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/express/node_modules/accepts": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, "license": "MIT", "dependencies": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/express/node_modules/finalhandler": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", - "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "node_modules/degenerator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", + "dev": true, "license": "MIT", "dependencies": { - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "on-finished": "^2.4.1", - "parseurl": "^1.3.3", - "statuses": "^2.0.1" + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" }, "engines": { - "node": ">= 18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "node": ">= 14" } }, - "node_modules/express/node_modules/mime-types": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", - "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "node": ">=0.4.0" } }, - "node_modules/express/node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/detect-indent": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-7.0.1.tgz", + "integrity": "sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" + "node": ">=8" } }, - "node_modules/extract-zip/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", "dev": true, "license": "MIT", "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" + "dequal": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "license": "MIT" - }, - "node_modules/fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "node_modules/devtools-protocol": { + "version": "0.0.1534754", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1534754.tgz", + "integrity": "sha512-26T91cV5dbOYnXdJi5qQHoTtUoNEqwkHcAyu/IKtjIAxiEqPMrDiRkDOPWVsGfNZGmlQVHQbZRSjD8sxagWVsQ==", "dev": true, - "license": "Apache-2.0" + "license": "BSD-3-Clause", + "peer": true }, - "node_modules/fast-equals": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.2.2.tgz", - "integrity": "sha512-V7/RktU11J3I36Nwq2JnZEM7tNm17eBJz+u25qdxBZeCKiX6BkVSZQjwWIr+IobgnZy+ag73tTZgZi7tr0LrBw==", + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", "dev": true, + "license": "ISC", + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", "license": "MIT", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, "engines": { - "node": ">=6.0.0" + "node": ">=6" } }, - "node_modules/fast-fifo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, - "license": "MIT" + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "utila": "~0.4" + } }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true, - "license": "MIT" + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } }, - "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, "funding": [ { "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" + "url": "https://github.com/sponsors/fb55" } ], - "license": "BSD-3-Clause" + "license": "BSD-2-Clause" }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, "engines": { - "node": ">= 4.9.1" + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/fault": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", - "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "format": "^0.2.0" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "bser": "2.1.1" + "no-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, "license": "MIT", "dependencies": { - "pend": "~1.2.0" + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" + "node_modules/dotgitignore": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/dotgitignore/-/dotgitignore-2.1.0.tgz", + "integrity": "sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA==", + "dev": true, + "license": "ISC", + "dependencies": { + "find-up": "^3.0.0", + "minimatch": "^3.0.4" }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } + "engines": { + "node": ">=6" } }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "node_modules/dotgitignore/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "license": "MIT", "dependencies": { - "escape-string-regexp": "^1.0.5" + "locate-path": "^3.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/dotgitignore/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "license": "MIT", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, "engines": { - "node": ">=0.8.0" + "node": ">=6" } }, - "node_modules/file-entry-cache": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.1.0.tgz", - "integrity": "sha512-/pqPFG+FdxWQj+/WSuzXSDaNzxgTLr/OrR1QuqfEZzDakpdYE70PwUxL7BPUa8hpjbvY1+qvCl8k+8Tq34xJgg==", + "node_modules/dotgitignore/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^5.0.0" + "p-try": "^2.0.0" }, "engines": { - "node": ">=18" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "node_modules/dotgitignore/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, "license": "MIT", "dependencies": { - "to-regex-range": "^5.0.1" + "p-limit": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "node_modules/dotgitignore/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, "engines": { - "node": ">= 0.8" + "node": ">=4" } }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "license": "MIT", "dependencies": { - "ms": "2.0.0" + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/finalhandler/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.283", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.283.tgz", + "integrity": "sha512-3vifjt1HgrGW/h76UEeny+adYApveS9dH2h3p57JYzBSXJIKUJAvtmIytDKjcSCt9xHfrNCFJ7gts6vkhuq++w==", + "devOptional": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.5.0.tgz", + "integrity": "sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==", "dev": true, + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "license": "MIT", "engines": { "node": ">= 0.8" } }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } }, - "node_modules/finalhandler/node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "dev": true, + "node_modules/enhanced-resolve": { + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.1.tgz", + "integrity": "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==", + "devOptional": true, "license": "MIT", "dependencies": { - "ee-first": "1.1.1" + "graceful-fs": "^4.2.4", + "tapable": "^2.3.0" }, "engines": { - "node": ">= 0.8" + "node": ">=10.13.0" } }, - "node_modules/finalhandler/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=6" } }, - "node_modules/find-up": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz", - "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==", + "node_modules/envinfo": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", + "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", "dev": true, "license": "MIT", - "dependencies": { - "locate-path": "^7.2.0", - "path-exists": "^5.0.0", - "unicorn-magic": "^0.1.0" + "bin": { + "envinfo": "dist/cli.js" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/find-up-simple": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz", - "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==", + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", "dev": true, "license": "MIT", "engines": { @@ -12155,65 +8953,91 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "license": "BSD-3-Clause", - "bin": { - "flat": "cli.js" - } - }, - "node_modules/flat-cache": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-5.0.0.tgz", - "integrity": "sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==", + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "flatted": "^3.3.1", - "keyv": "^4.5.4" + "prr": "~1.0.1" }, - "engines": { - "node": ">=18" + "bin": { + "errno": "cli.js" } }, - "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, - "license": "ISC" - }, - "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "dependencies": { + "is-arrayish": "^0.2.1" } }, - "node_modules/for-each": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "node_modules/es-abstract": { + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", "dev": true, "license": "MIT", "dependencies": { - "is-callable": "^1.2.7" + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" }, "engines": { "node": ">= 0.4" @@ -12222,709 +9046,792 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 0.4" } }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 0.4" } }, - "node_modules/form-data": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", - "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", - "dev": true, + "node_modules/es-module-lexer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", + "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" + "es-errors": "^1.3.0" }, "engines": { - "node": ">= 6" + "node": ">= 0.4" } }, - "node_modules/format": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, "engines": { - "node": ">=0.4.x" + "node": ">= 0.4" } }, - "node_modules/formidable": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.4.tgz", - "integrity": "sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==", + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", "dev": true, "license": "MIT", "dependencies": { - "@paralleldrive/cuid2": "^2.2.2", - "dezalgo": "^1.0.4", - "once": "^1.4.0" + "hasown": "^2.0.2" }, "engines": { - "node": ">=14.0.0" - }, - "funding": { - "url": "https://ko-fi.com/tunnckoCore/commissions" + "node": ">= 0.4" } }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, "engines": { - "node": ">= 0.6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", - "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "devOptional": true, "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">=6" } }, - "node_modules/fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", - "dev": true, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "license": "MIT" }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "hasInstallScript": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", + "node": ">=10" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/function.prototype.name": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "functions-have-names": "^1.2.3", - "hasown": "^2.0.2", - "is-callable": "^1.2.7" + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" }, "engines": { - "node": ">= 0.4" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "optionalDependencies": { + "source-map": "~0.6.1" } }, - "node_modules/gensequence": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/gensequence/-/gensequence-7.0.0.tgz", - "integrity": "sha512-47Frx13aZh01afHJTB3zTtKIlFI6vWY+MYCN9Qpew6i52rfKjnhCF/l1YlC8UmEMvvntZZ6z4PiCcmyuedR2aQ==", + "node_modules/eslint": { + "version": "9.39.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.1.tgz", + "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", "dev": true, "license": "MIT", + "peer": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.39.1", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, "engines": { - "node": ">=18" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "node_modules/eslint-compat-utils": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", + "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", "dev": true, "license": "MIT", + "dependencies": { + "semver": "^7.5.4" + }, "engines": { - "node": ">=6.9.0" + "node": ">=12" + }, + "peerDependencies": { + "eslint": ">=6.0.0" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "node_modules/eslint-compat-utils/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=10" } }, - "node_modules/get-east-asian-width": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", - "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", + "node_modules/eslint-config-prettier": { + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", + "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", "dev": true, "license": "MIT", - "engines": { - "node": ">=18" + "peer": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/eslint-config-prettier" + }, + "peerDependencies": { + "eslint": ">=7.0.0" } }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "node_modules/eslint-config-webpack": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/eslint-config-webpack/-/eslint-config-webpack-4.6.3.tgz", + "integrity": "sha512-nKUWDmJ1SYwibd/zI5ntk6alKQ26e5ly0d5EQpDDRWtBJuBqvCyJtvphBtS0m58EsLLkQgCrSaWJVU4yGjSneg==", + "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" + "detect-indent": "^7.0.1", + "jsonc-eslint-parser": "^2.4.0", + "semver": "^7.7.2", + "sort-package-json": "^3.4.0" }, "engines": { - "node": ">= 0.4" + "node": ">= 20.9.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0" + "peerDependencies": { + "@eslint/js": ">= 9.28.0", + "@eslint/markdown": ">= 7.1.0", + "@stylistic/eslint-plugin": ">= 4.4.1", + "eslint": ">= 9.28.0", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-import": ">= 2.31.0", + "eslint-plugin-jest": ">= 28.12.0", + "eslint-plugin-jsdoc": ">= 50.7.1", + "eslint-plugin-n": ">= 17.19.0", + "eslint-plugin-prettier": ">= 5.5.3", + "eslint-plugin-react": ">= 7.37.5", + "eslint-plugin-unicorn": ">= 60.0.0", + "globals": ">= 16.2.0", + "prettier": ">= 3.5.3", + "typescript": ">= 5.0.0", + "typescript-eslint": ">= 8.34.0" + }, + "peerDependenciesMeta": { + "@eslint/markdown": { + "optional": true + }, + "eslint-plugin-jest": { + "optional": true + }, + "eslint-plugin-jsdoc": { + "optional": true + }, + "eslint-plugin-n": { + "optional": true + }, + "eslint-plugin-react": { + "optional": true + }, + "typescript": { + "optional": true + }, + "typescript-eslint": { + "optional": true + } } }, - "node_modules/get-pkg-repo": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", - "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", + "node_modules/eslint-config-webpack/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, - "license": "MIT", - "dependencies": { - "@hutson/parse-repository-url": "^3.0.0", - "hosted-git-info": "^4.0.0", - "through2": "^2.0.0", - "yargs": "^16.2.0" - }, + "license": "ISC", "bin": { - "get-pkg-repo": "src/cli.js" + "semver": "bin/semver.js" }, "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-pkg-repo/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/get-pkg-repo/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" } }, - "node_modules/get-pkg-repo/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "ms": "^2.1.1" } }, - "node_modules/get-pkg-repo/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/eslint-module-utils": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", + "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "debug": "^3.2.7" }, "engines": { - "node": ">=7.0.0" + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } } }, - "node_modules/get-pkg-repo/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/get-pkg-repo/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/get-pkg-repo/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" } }, - "node_modules/get-pkg-repo/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/eslint-plugin-es-x": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz", + "integrity": "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==", "dev": true, + "funding": [ + "https://github.com/sponsors/ota-meshi", + "https://opencollective.com/eslint" + ], "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.1.2", + "@eslint-community/regexpp": "^4.11.0", + "eslint-compat-utils": "^0.5.1" + }, "engines": { - "node": ">=8" + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": ">=8" } }, - "node_modules/get-pkg-repo/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/get-pkg-repo/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/eslint-plugin-import": { + "version": "2.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", + "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, - "license": "ISC", + "license": "MIT", + "peer": true, "dependencies": { - "yallist": "^4.0.0" + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.1", + "hasown": "^2.0.2", + "is-core-module": "^2.16.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.1", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.9", + "tsconfig-paths": "^3.15.0" }, "engines": { - "node": ">=10" + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, - "node_modules/get-pkg-repo/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "ms": "^2.1.1" } }, - "node_modules/get-pkg-repo/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT" - }, - "node_modules/get-pkg-repo/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/eslint-plugin-jsdoc": { + "version": "51.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-51.4.1.tgz", + "integrity": "sha512-y4CA9OkachG8v5nAtrwvcvjIbdcKgSyS6U//IfQr4FZFFyeBFwZFf/tfSsMr46mWDJgidZjBTqoCRlXywfFBMg==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", + "peer": true, "dependencies": { - "safe-buffer": "~5.1.0" + "@es-joy/jsdoccomment": "~0.52.0", + "are-docs-informative": "^0.0.2", + "comment-parser": "1.4.1", + "debug": "^4.4.1", + "escape-string-regexp": "^4.0.0", + "espree": "^10.4.0", + "esquery": "^1.6.0", + "parse-imports-exports": "^0.2.4", + "semver": "^7.7.2", + "spdx-expression-parse": "^4.0.0" + }, + "engines": { + "node": ">=20.11.0" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" } }, - "node_modules/get-pkg-repo/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/eslint-plugin-jsdoc/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/get-pkg-repo/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/eslint-plugin-n": { + "version": "17.23.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.23.1.tgz", + "integrity": "sha512-68PealUpYoHOBh332JLLD9Sj7OQUDkFpmcfqt8R9sySfFSeuGJjMTJQvCRRB96zO3A/PELRLkPrzsHmzEFQQ5A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "ansi-regex": "^5.0.1" + "@eslint-community/eslint-utils": "^4.5.0", + "enhanced-resolve": "^5.17.1", + "eslint-plugin-es-x": "^7.8.0", + "get-tsconfig": "^4.8.1", + "globals": "^15.11.0", + "globrex": "^0.1.2", + "ignore": "^5.3.2", + "semver": "^7.6.3", + "ts-declaration-location": "^1.0.6" }, "engines": { - "node": ">=8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": ">=8.23.0" } }, - "node_modules/get-pkg-repo/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "node_modules/eslint-plugin-n/node_modules/globals": { + "version": "15.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", "dev": true, "license": "MIT", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-pkg-repo/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "node_modules/eslint-plugin-n/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.4.tgz", + "integrity": "sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.11.7" }, "engines": { - "node": ">=10" + "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } } }, - "node_modules/get-pkg-repo/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/get-pkg-repo/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "node_modules/eslint-plugin-unicorn": { + "version": "61.0.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-61.0.2.tgz", + "integrity": "sha512-zLihukvneYT7f74GNbVJXfWIiNQmkc/a9vYBTE4qPkQZswolWNdu+Wsp9sIXno1JOzdn6OUwLPd19ekXVkahRA==", "dev": true, "license": "MIT", "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "@babel/helper-validator-identifier": "^7.27.1", + "@eslint-community/eslint-utils": "^4.7.0", + "@eslint/plugin-kit": "^0.3.3", + "change-case": "^5.4.4", + "ci-info": "^4.3.0", + "clean-regexp": "^1.0.0", + "core-js-compat": "^3.44.0", + "esquery": "^1.6.0", + "find-up-simple": "^1.0.1", + "globals": "^16.3.0", + "indent-string": "^5.0.0", + "is-builtin-module": "^5.0.0", + "jsesc": "^3.1.0", + "pluralize": "^8.0.0", + "regexp-tree": "^0.1.27", + "regjsparser": "^0.12.0", + "semver": "^7.7.2", + "strip-indent": "^4.0.0" }, "engines": { - "node": ">=10" + "node": "^20.10.0 || >=21.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1" + }, + "peerDependencies": { + "eslint": ">=9.29.0" } }, - "node_modules/get-pkg-repo/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "node_modules/eslint-plugin-unicorn/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, "engines": { "node": ">=10" } }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "devOptional": true, + "license": "BSD-2-Clause", "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" }, "engines": { - "node": ">= 0.4" + "node": ">=8.0.0" } }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "license": "MIT", + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "devOptional": true, + "license": "BSD-2-Clause", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4.0" } }, - "node_modules/get-symbol-description": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", - "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6" - }, + "license": "Apache-2.0", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10" } }, - "node_modules/get-tsconfig": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz", - "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==", + "node_modules/eslint/node_modules/@eslint/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "resolve-pkg-maps": "^1.0.0" + "@types/json-schema": "^7.0.15" }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/get-uri": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.5.tgz", - "integrity": "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==", + "node_modules/eslint/node_modules/@eslint/plugin-kit": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "basic-ftp": "^5.0.2", - "data-uri-to-buffer": "^6.0.2", - "debug": "^4.3.4" + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" }, "engines": { - "node": ">= 14" - } - }, - "node_modules/git-hooks-list": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-4.1.1.tgz", - "integrity": "sha512-cmP497iLq54AZnv4YRAEMnEyQ1eIn4tGKbmswqwmFV4GBnAqE8NLtWxxdXa++AalfgL5EBH4IxTPyquEuGY/jA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/fisker/git-hooks-list?sponsor=1" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/git-raw-commits": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz", - "integrity": "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==", + "node_modules/eslint/node_modules/ajv": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", "dev": true, "license": "MIT", "dependencies": { - "dargs": "^8.0.0", - "meow": "^12.0.1", - "split2": "^4.0.0" - }, - "bin": { - "git-raw-commits": "cli.mjs" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, - "engines": { - "node": ">=16" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/git-remote-origin-url": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", - "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { - "gitconfiglocal": "^1.0.0", - "pify": "^2.3.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" - } - }, - "node_modules/git-remote-origin-url/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/git-semver-tags": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", - "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { - "meow": "^8.0.0", - "semver": "^6.0.0" - }, - "bin": { - "git-semver-tags": "cli.js" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/git-semver-tags/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=8" + "node": ">=7.0.0" } }, - "node_modules/git-semver-tags/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, - "license": "ISC", + "license": "MIT" + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "lru-cache": "^6.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">=10" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/git-semver-tags/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, + "license": "Apache-2.0", "engines": { - "node": ">=8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/git-semver-tags/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/eslint/node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "flat-cache": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=16.0.0" } }, - "node_modules/git-semver-tags/node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { "node": ">=10" @@ -12933,65 +9840,60 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/git-semver-tags/node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "node_modules/eslint/node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" + "flatted": "^3.2.9", + "keyv": "^4.5.4" }, "engines": { - "node": ">=10" + "node": ">=16" } }, - "node_modules/git-semver-tags/node_modules/normalize-package-data/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } + "license": "MIT" }, - "node_modules/git-semver-tags/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", "dependencies": { - "p-try": "^2.0.0" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/git-semver-tags/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/git-semver-tags/node_modules/path-exists": { + "node_modules/eslint/node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", @@ -13001,942 +9903,1016 @@ "node": ">=8" } }, - "node_modules/git-semver-tags/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" }, "engines": { - "node": ">=8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/git-semver-tags/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, + "license": "Apache-2.0", "engines": { - "node": ">=8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/eslint" } }, - "node_modules/git-semver-tags/node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, - "license": "ISC" + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } }, - "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "devOptional": true, "license": "BSD-2-Clause", "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" } }, - "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "devOptional": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/git-semver-tags/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/events-universal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", + "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bare-events": "^2.7.0" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/git-semver-tags/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "node_modules/expect": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-30.4.1.tgz", + "integrity": "sha512-PMARsyh/JtqC20HoGqlFcIlQAyqUtW4PlI1rup1uhYJtKuwAjbvWi3GQMAn+STdHum/dk8xrKfUM1+5SAwpolA==", "dev": true, - "license": "ISC" + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "30.4.1", + "@jest/get-type": "30.1.0", + "jest-matcher-utils": "30.4.1", + "jest-message-util": "30.4.1", + "jest-mock": "30.4.1", + "jest-util": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } }, - "node_modules/git-semver-tags/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "node_modules/expect/node_modules/@jest/diff-sequences": { + "version": "30.4.0", + "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.4.0.tgz", + "integrity": "sha512-zOpzlfUs45l6u7jm39qr87JCHUDsaeCtvL+kQe/Vn9jSnRB4/5IPXISm0h9I1vZW/o00Kn4UTJ2MOlhnUGwv3g==", "dev": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": ">=10" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/gitconfiglocal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", - "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==", + "node_modules/expect/node_modules/@jest/expect-utils": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.4.1.tgz", + "integrity": "sha512-ZBn5CglH8fBsQsvs4VWNzD4aWfUYks+IdOOQU3MEK71ol/BcVm+P+rtb1KpiFBpSWSCE27uOahyyf1vfqOVbcQ==", "dev": true, - "license": "BSD", + "license": "MIT", "dependencies": { - "ini": "^1.3.2" + "@jest/get-type": "30.1.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/gitconfiglocal/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true, - "license": "ISC" - }, - "node_modules/github-slugger": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", - "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", - "dev": true, - "license": "ISC" - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "node_modules/expect/node_modules/@jest/pattern": { + "version": "30.4.0", + "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.4.0.tgz", + "integrity": "sha512-RAWn3+f9u8BsHijKJ71uHcFp6vmyEt6VvoWXkl6hKF3qVIuWNmudVjg12DlBPGup/frIl5UcUlH5HfEuvHpEXg==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "@types/node": "*", + "jest-regex-util": "30.4.0" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "node_modules/expect/node_modules/@jest/schemas": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.4.1.tgz", + "integrity": "sha512-i6b4qw5qnP8c5FEeBJg/uZQ4ddrkN6Ca8qISJh0pr7a5hfn3h3v5x60BEbOC7OYAGZNMs1LfFLwnW2CuK8F57Q==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "is-glob": "^4.0.3" + "@sinclair/typebox": "^0.34.0" }, "engines": { - "node": ">=10.13.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/glob-to-regex.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.0.1.tgz", - "integrity": "sha512-CG/iEvgQqfzoVsMUbxSJcwbG2JwyZ3naEqPkeltwl0BSS8Bp83k3xlGms+0QdWFUAwV+uvo80wNswKF6FWEkKg==", - "license": "Apache-2.0", - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" + "node_modules/expect/node_modules/@jest/types": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.4.1.tgz", + "integrity": "sha512-f1x/vJXIfjOlEmejYpbkbgw1gOqpPECwMvMEtBqe47j7H2Hg8h8w3o3ikhSXq3MI15kg+oQ0exWO0uCtTNJLoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/pattern": "30.4.0", + "@jest/schemas": "30.4.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" }, - "peerDependencies": { - "tslib": "2" + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "devOptional": true, - "license": "BSD-2-Clause" - }, - "node_modules/global-directory": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", - "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", + "node_modules/expect/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { - "ini": "4.1.1" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=18" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/globals": { - "version": "16.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-16.4.0.tgz", - "integrity": "sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==", + "node_modules/expect/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", - "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">=18" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "node_modules/expect/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=7.0.0" } }, - "node_modules/globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "node_modules/expect/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "node_modules/expect/node_modules/jest-diff": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.4.1.tgz", + "integrity": "sha512-CRpFK0RtLriVDGcPPAnR6HMVI8bSR2jnUIgralhauzYQZIb4RH9AtEInTuQr65LmmGggGcRT6HIASxwqsVsmlA==", + "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "@jest/diff-sequences": "30.4.0", + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "pretty-format": "30.4.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "license": "ISC" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, - "node_modules/handlebars": { - "version": "4.7.8", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", - "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "node_modules/expect/node_modules/jest-matcher-utils": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.4.1.tgz", + "integrity": "sha512-zvYfX5CaeEkFrrLS9suWe9rvJrm9J1Iv3ua8kIBv9GEPzcnsfBf0bob37la7s67fs0nlBC3EuvkOLnXQKxtx4A==", "dev": true, "license": "MIT", "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.2", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "jest-diff": "30.4.1", + "pretty-format": "30.4.1" }, "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "node_modules/expect/node_modules/jest-message-util": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.4.1.tgz", + "integrity": "sha512-kwCKIvq0MCW1HzLoGola9Te6JUdzgV0loyKJ3Qghrkz9i5/RRIHsL95BMQc2HBBhlBKC4j22K9p11TGHH8RBpQ==", "dev": true, "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@jest/types": "30.4.1", + "@types/stack-utils": "^2.0.3", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "jest-util": "30.4.1", + "picomatch": "^4.0.3", + "pretty-format": "30.4.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.6" + }, "engines": { - "node": ">=6" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/has-bigints": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", - "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "node_modules/expect/node_modules/jest-regex-util": { + "version": "30.4.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.4.0.tgz", + "integrity": "sha512-mWlvLviKIgIQ8VCuM1xRdD0TWp3zlzionlmDBjuXVBs+VkmXq6FgW9T4Emr7oGz/Rk6feDCGyiugolcQEyp3mg==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true, + "node_modules/expect/node_modules/jest-util": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.4.1.tgz", + "integrity": "sha512-vjQb1sACEiv13DKJMDToJpzVW0joCsIQrmbg0fi7CyOOt+g9jTuQl2A216pWRBYhOVt53XbL/2LbMKg1BECWOw==", + "dev": true, "license": "MIT", + "dependencies": { + "@jest/types": "30.4.1", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.3" + }, "engines": { - "node": ">=8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/has-own-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz", - "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==", + "node_modules/expect/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, + "node_modules/express": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", "license": "MIT", "dependencies": { - "es-define-property": "^1.0.0" + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/has-proto": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", - "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", - "dev": true, + "node_modules/express/node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", "license": "MIT", "dependencies": { - "dunder-proto": "^1.0.0" + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.6" } }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "node_modules/express/node_modules/finalhandler": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, "engines": { - "node": ">= 0.4" + "node": ">= 18.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, + "node_modules/express/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", "license": "MIT", "dependencies": { - "has-symbols": "^1.0.3" + "mime-db": "^1.54.0" }, "engines": { - "node": ">= 0.4" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "node_modules/express/node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, "engines": { - "node": ">= 0.4" + "node": ">= 0.6" } }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, "bin": { - "he": "bin/he" - } - }, - "node_modules/hono": { - "version": "4.12.9", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.9.tgz", - "integrity": "sha512-wy3T8Zm2bsEvxKZM5w21VdHDDcwVS1yUFFY6i8UobSsKfFceT7TOwhbhfKsDyx7tYQlmRM5FLpIuYvNFyjctiA==", - "dev": true, - "license": "MIT", - "peer": true, + "extract-zip": "cli.js" + }, "engines": { - "node": ">=16.9.0" + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" } }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true, - "license": "ISC" - }, - "node_modules/html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "node_modules/extract-zip/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, "license": "MIT", "dependencies": { - "whatwg-encoding": "^2.0.0" + "pump": "^3.0.0" }, "engines": { - "node": ">=12" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "license": "MIT" }, - "node_modules/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", "dev": true, - "license": "MIT", - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=12" - } + "license": "Apache-2.0" }, - "node_modules/html-minifier-terser/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "node_modules/fast-equals": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.2.2.tgz", + "integrity": "sha512-V7/RktU11J3I36Nwq2JnZEM7tNm17eBJz+u25qdxBZeCKiX6BkVSZQjwWIr+IobgnZy+ag73tTZgZi7tr0LrBw==", "dev": true, "license": "MIT", "engines": { - "node": ">= 12" + "node": ">=6.0.0" } }, - "node_modules/html-webpack-plugin": { - "version": "5.6.5", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.5.tgz", - "integrity": "sha512-4xynFbKNNk+WlzXeQQ+6YYsH2g7mpfPszQZUi3ovKlj+pDmngQ7vRXjrrmGROabmKwyQkcgcX5hqfOwHbFmK5g==", + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", "dev": true, - "license": "MIT", - "dependencies": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/html-webpack-plugin" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.20.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" }, - "node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", { "type": "github", - "url": "https://github.com/sponsors/fb55" + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" } ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } + "license": "BSD-3-Clause" }, - "node_modules/htmlparser2/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "license": "MIT", + "engines": { + "node": ">= 4.9.1" } }, - "node_modules/http-errors": { + "node_modules/fault": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", + "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", + "dev": true, "license": "MIT", "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - }, - "engines": { - "node": ">= 0.8" + "format": "^0.2.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, "license": "MIT", "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" + "pend": "~1.2.0" } }, - "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "license": "MIT", - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, "engines": { - "node": ">= 6" + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } } }, - "node_modules/http-proxy-middleware": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.5.tgz", - "integrity": "sha512-GLZZm1X38BPY4lkXA01jhwxvDoOkkXqjgVyUzVxiEK4iuRu03PZoYHhHRwxnfhQMDuaxi3vVri0YgSro/1oWqg==", + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, "license": "MIT", "dependencies": { - "@types/http-proxy": "^1.17.15", - "debug": "^4.3.6", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.3", - "is-plain-object": "^5.0.0", - "micromatch": "^4.0.8" + "escape-string-regexp": "^1.0.5" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/http-proxy-middleware/node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=0.8.0" } }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "node_modules/file-entry-cache": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.1.0.tgz", + "integrity": "sha512-/pqPFG+FdxWQj+/WSuzXSDaNzxgTLr/OrR1QuqfEZzDakpdYE70PwUxL7BPUa8hpjbvY1+qvCl8k+8Tq34xJgg==", "dev": true, "license": "MIT", "dependencies": { - "agent-base": "6", - "debug": "4" + "flat-cache": "^5.0.0" }, "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" + "node": ">=18" } }, - "node_modules/husky": { - "version": "9.1.7", - "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", - "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", - "dev": true, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "license": "MIT", - "bin": { - "husky": "bin.js" + "dependencies": { + "to-regex-range": "^5.0.1" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" + "node": ">=8" } }, - "node_modules/hyperdyperid": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", - "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, "engines": { - "node": ">=10.18" + "node": ">= 0.8" } }, - "node_modules/iconv-lite": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", - "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "ms": "2.0.0" } }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "node_modules/finalhandler/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "node": ">= 0.8" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" + "license": "MIT" }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "node_modules/finalhandler/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", "dev": true, "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, "engines": { - "node": ">= 4" + "node": ">= 0.8" } }, - "node_modules/image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "node_modules/finalhandler/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, "license": "MIT", - "optional": true, - "bin": { - "image-size": "bin/image-size.js" - }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "node_modules/find-up": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz", + "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==", "dev": true, "license": "MIT", "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "locate-path": "^7.2.0", + "path-exists": "^5.0.0", + "unicorn-magic": "^0.1.0" }, "engines": { - "node": ">=6" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-fresh/node_modules/parent-module": { + "node_modules/find-up-simple": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz", + "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==", "dev": true, "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, "engines": { - "node": ">=6" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" } }, - "node_modules/import-local": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", - "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "node_modules/flat-cache": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-5.0.0.tgz", + "integrity": "sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==", "dev": true, "license": "MIT", "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" + "flatted": "^3.3.1", + "keyv": "^4.5.4" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "node_modules/import-meta-resolve": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", - "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } + "license": "ISC" }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], "license": "MIT", "engines": { - "node": ">=0.8.19" + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, - "node_modules/indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dev": true, "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, "engines": { - "node": ">=12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", "dev": true, "license": "ISC", "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/ini": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", - "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/internal-slot": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", - "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", "dev": true, "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", "hasown": "^2.0.2", - "side-channel": "^1.1.0" + "mime-types": "^2.1.12" }, "engines": { - "node": ">= 0.4" + "node": ">= 6" } }, - "node_modules/interpret": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", - "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "node_modules/format": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", + "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", "dev": true, - "license": "MIT", "engines": { - "node": ">=10.13.0" + "node": ">=0.4.x" } }, - "node_modules/ip-address": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", - "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", + "node_modules/formidable": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.4.tgz", + "integrity": "sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==", "dev": true, "license": "MIT", + "dependencies": { + "@paralleldrive/cuid2": "^2.2.2", + "dezalgo": "^1.0.4", + "once": "^1.4.0" + }, "engines": { - "node": ">= 12" + "node": ">=14.0.0" + }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" } }, - "node_modules/ip-regex": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", - "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "dev": true, + "license": "MIT" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, + "hasInstallScript": true, "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=8" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/ipaddr.js": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.3.0.tgz", - "integrity": "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==", + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "license": "MIT", - "engines": { - "node": ">= 10" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-array-buffer": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", - "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" }, "engines": { "node": ">= 0.4" @@ -13945,102 +10921,76 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-async-function": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", - "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, "license": "MIT", - "dependencies": { - "async-function": "^1.0.0", - "call-bound": "^1.0.3", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-bigint": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", - "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "node_modules/gensequence": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/gensequence/-/gensequence-7.0.0.tgz", + "integrity": "sha512-47Frx13aZh01afHJTB3zTtKIlFI6vWY+MYCN9Qpew6i52rfKjnhCF/l1YlC8UmEMvvntZZ6z4PiCcmyuedR2aQ==", "dev": true, "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.2" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=18" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, "license": "MIT", - "optional": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, "engines": { - "node": ">=8" + "node": ">=6.9.0" } }, - "node_modules/is-boolean-object": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", - "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, + "license": "ISC", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/is-builtin-module": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-5.0.0.tgz", - "integrity": "sha512-f4RqJKBUe5rQkJ2eJEJBXSticB3hGbN9j0yxxMQFqIW89Jp9WYFtzfTcRlstDKVUTRzSOTLKRfO9vIztenwtxA==", + "node_modules/get-east-asian-width": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", + "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", "dev": true, "license": "MIT", - "dependencies": { - "builtin-modules": "^5.0.0" - }, "engines": { - "node": ">=18.20" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, "engines": { "node": ">= 0.4" }, @@ -14048,292 +10998,295 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "node_modules/get-pkg-repo": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", + "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", "dev": true, "license": "MIT", "dependencies": { - "hasown": "^2.0.2" + "@hutson/parse-repository-url": "^3.0.0", + "hosted-git-info": "^4.0.0", + "through2": "^2.0.0", + "yargs": "^16.2.0" }, - "engines": { - "node": ">= 0.4" + "bin": { + "get-pkg-repo": "src/cli.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/is-data-view": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", - "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "node_modules/get-pkg-repo/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "is-typed-array": "^1.1.13" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/is-date-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "node_modules/get-pkg-repo/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/get-pkg-repo/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "node_modules/get-pkg-repo/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, "engines": { - "node": ">=0.10.0" + "node": ">=7.0.0" } }, - "node_modules/is-finalizationregistry": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", - "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "node_modules/get-pkg-repo/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, - "license": "MIT", + "license": "MIT" + }, + "node_modules/get-pkg-repo/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/get-pkg-repo/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "license": "ISC", "dependencies": { - "call-bound": "^1.0.3" + "lru-cache": "^6.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10" } }, - "node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "node_modules/get-pkg-repo/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "node_modules/get-pkg-repo/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } + "license": "MIT" }, - "node_modules/is-generator-function": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", - "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "node_modules/get-pkg-repo/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "call-bound": "^1.0.3", - "get-proto": "^1.0.0", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/get-pkg-repo/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, "license": "MIT", "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/is-in-ssh": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-in-ssh/-/is-in-ssh-1.0.0.tgz", - "integrity": "sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==", + "node_modules/get-pkg-repo/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/get-pkg-repo/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "safe-buffer": "~5.1.0" } }, - "node_modules/is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "node_modules/get-pkg-repo/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "license": "MIT", "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "node_modules/get-pkg-repo/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "ansi-regex": "^5.0.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8" } }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "node_modules/get-pkg-repo/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" } }, - "node_modules/is-network-error": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.1.tgz", - "integrity": "sha512-6QCxa49rQbmUWLfk0nuGqzql9U8uaV2H6279bRErPBHe/109hCzsLUBUHfbEtvLIHBd6hyXbgedBSHevm43Edw==", + "node_modules/get-pkg-repo/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, "engines": { - "node": ">=16" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } + "node_modules/get-pkg-repo/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" }, - "node_modules/is-number-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "node_modules/get-pkg-repo/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10" } }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "node_modules/get-pkg-repo/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "license": "MIT", "dependencies": { - "isobject": "^3.0.1" + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, - "license": "MIT" - }, - "node_modules/is-promise": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -14342,290 +11295,340 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "node_modules/get-tsconfig": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz", + "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "resolve-pkg-maps": "^1.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", - "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "node_modules/get-uri": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.5.tgz", + "integrity": "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3" + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.2", + "debug": "^4.3.4" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 14" } }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "node_modules/git-hooks-list": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-4.1.1.tgz", + "integrity": "sha512-cmP497iLq54AZnv4YRAEMnEyQ1eIn4tGKbmswqwmFV4GBnAqE8NLtWxxdXa++AalfgL5EBH4IxTPyquEuGY/jA==", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" - }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/fisker/git-hooks-list?sponsor=1" } }, - "node_modules/is-string": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "node_modules/git-raw-commits": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz", + "integrity": "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" + "dargs": "^8.0.0", + "meow": "^12.0.1", + "split2": "^4.0.0" }, - "engines": { - "node": ">= 0.4" + "bin": { + "git-raw-commits": "cli.mjs" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=16" } }, - "node_modules/is-symbol": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", - "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "node_modules/git-remote-origin-url": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", + "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "has-symbols": "^1.1.0", - "safe-regex-test": "^1.1.0" + "gitconfiglocal": "^1.0.0", + "pify": "^2.3.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4" } }, - "node_modules/is-text-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz", - "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", + "node_modules/git-remote-origin-url/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/git-semver-tags": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", + "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", "dev": true, "license": "MIT", "dependencies": { - "text-extensions": "^2.0.0" + "meow": "^8.0.0", + "semver": "^6.0.0" + }, + "bin": { + "git-semver-tags": "cli.js" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "node_modules/git-semver-tags/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", "dependencies": { - "which-typed-array": "^1.1.16" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/is-url": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", - "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", + "node_modules/git-semver-tags/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, - "license": "MIT" + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } }, - "node_modules/is-weakmap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "node_modules/git-semver-tags/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, "engines": { - "node": ">= 0.4" + "node": ">=8" + } + }, + "node_modules/git-semver-tags/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=10" } }, - "node_modules/is-weakref": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", - "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "node_modules/git-semver-tags/node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3" + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-weakset": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", - "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "node_modules/git-semver-tags/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10" } }, - "node_modules/is-what": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", - "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "node_modules/git-semver-tags/node_modules/normalize-package-data/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, - "license": "MIT" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } }, - "node_modules/is-wsl": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", - "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "node_modules/git-semver-tags/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, "license": "MIT", "dependencies": { - "is-inside-container": "^1.0.0" + "p-try": "^2.0.0" }, "engines": { - "node": ">=16" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is2": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.9.tgz", - "integrity": "sha512-rZkHeBn9Zzq52sd9IUIV3a5mfwBY+o2HePMh0wkGBM4z4qjvy2GwVxQ6nNXSfw6MmVP6gf1QIlWjiOavhM3x5g==", + } + }, + "node_modules/git-semver-tags/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "license": "MIT", "dependencies": { - "deep-is": "^0.1.3", - "ip-regex": "^4.1.0", - "is-url": "^1.2.4" + "p-limit": "^2.2.0" }, "engines": { - "node": ">=v0.10.0" + "node": ">=8" } }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "node_modules/git-semver-tags/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "node_modules/git-semver-tags/node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, - "license": "ISC" + "license": "MIT", + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "node_modules/git-semver-tags/node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "license": "MIT", + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "node_modules/git-semver-tags/node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, - "license": "BSD-3-Clause", + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } }, - "node_modules/istanbul-lib-instrument": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", - "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true, - "license": "BSD-3-Clause", + "license": "ISC" + }, + "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=10" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "license": "ISC", "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "semver": "bin/semver" } }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/istanbul-lib-report/node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "node_modules/git-semver-tags/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.5.3" - }, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -14633,1743 +11636,1502 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/istanbul-lib-report/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "node_modules/git-semver-tags/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/git-semver-tags/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, "engines": { "node": ">=10" } }, - "node_modules/istanbul-lib-source-maps": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", - "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "node_modules/gitconfiglocal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", + "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==", "dev": true, - "license": "BSD-3-Clause", + "license": "BSD", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.23", - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0" - }, - "engines": { - "node": ">=10" + "ini": "^1.3.2" } }, - "node_modules/istanbul-reports": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", - "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", + "node_modules/gitconfiglocal/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } + "license": "ISC" }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "node_modules/github-slugger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } + "license": "ISC" }, - "node_modules/jest": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-30.2.0.tgz", - "integrity": "sha512-F26gjC0yWN8uAA5m5Ss8ZQf5nDHWGlN/xWZIh8S5SRbsEKBovwZhxGd6LJlbZYxBgCYOtreSUyb8hpXyGC5O4A==", + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "license": "MIT", - "peer": true, + "license": "ISC", "dependencies": { - "@jest/core": "30.2.0", - "@jest/types": "30.2.0", - "import-local": "^3.2.0", - "jest-cli": "30.2.0" - }, - "bin": { - "jest": "bin/jest.js" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "node": "*" }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/jest-changed-files": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.2.0.tgz", - "integrity": "sha512-L8lR1ChrRnSdfeOvTrwZMlnWV8G/LLjQ0nG9MBclwWZidA2N5FviRki0Bvh20WRMOX31/JYvzdqTJrk5oBdydQ==", + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "execa": "^5.1.1", - "jest-util": "30.2.0", - "p-limit": "^3.1.0" + "is-glob": "^4.0.3" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=10.13.0" } }, - "node_modules/jest-circus": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.2.0.tgz", - "integrity": "sha512-Fh0096NC3ZkFx05EP2OXCxJAREVxj1BcW/i6EWqqymcgYKWjyyDpral3fMxVcHXg6oZM7iULer9wGRFvfpl+Tg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "30.2.0", - "@jest/expect": "30.2.0", - "@jest/test-result": "30.2.0", - "@jest/types": "30.2.0", - "@types/node": "*", - "chalk": "^4.1.2", - "co": "^4.6.0", - "dedent": "^1.6.0", - "is-generator-fn": "^2.1.0", - "jest-each": "30.2.0", - "jest-matcher-utils": "30.2.0", - "jest-message-util": "30.2.0", - "jest-runtime": "30.2.0", - "jest-snapshot": "30.2.0", - "jest-util": "30.2.0", - "p-limit": "^3.1.0", - "pretty-format": "30.2.0", - "pure-rand": "^7.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.6" - }, + "node_modules/glob-to-regex.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.0.1.tgz", + "integrity": "sha512-CG/iEvgQqfzoVsMUbxSJcwbG2JwyZ3naEqPkeltwl0BSS8Bp83k3xlGms+0QdWFUAwV+uvo80wNswKF6FWEkKg==", + "license": "Apache-2.0", "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/jest-circus/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "devOptional": true, + "license": "BSD-2-Clause" + }, + "node_modules/global-directory": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", + "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "ini": "4.1.1" }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-circus/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/globals": { + "version": "16.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.4.0.tgz", + "integrity": "sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "peer": true, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-circus/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { - "node": ">=7.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-circus/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", "dev": true, "license": "MIT" }, - "node_modules/jest-circus/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-cli": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.2.0.tgz", - "integrity": "sha512-Os9ukIvADX/A9sLt6Zse3+nmHtHaE6hqOsjQtNiugFTbKRHYIYtZXNGNK9NChseXy7djFPjndX1tL0sCTlfpAA==", + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/core": "30.2.0", - "@jest/test-result": "30.2.0", - "@jest/types": "30.2.0", - "chalk": "^4.1.2", - "exit-x": "^0.2.2", - "import-local": "^3.2.0", - "jest-config": "30.2.0", - "jest-util": "30.2.0", - "jest-validate": "30.2.0", - "yargs": "^17.7.2" + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" }, "bin": { - "jest": "bin/jest.js" + "handlebars": "bin/handlebars" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "node": ">=0.4.7" }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "optionalDependencies": { + "uglify-js": "^3.1.4" } }, - "node_modules/jest-cli/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=6" } }, - "node_modules/jest-cli/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-cli/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "devOptional": true, "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, "engines": { - "node": ">=7.0.0" + "node": ">=8" } }, - "node_modules/jest-cli/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/has-own-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz", + "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/jest-config": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.2.0.tgz", - "integrity": "sha512-g4WkyzFQVWHtu6uqGmQR4CQxz/CH3yDSlhzXMWzNjDx843gYjReZnMRanjRCq5XZFuQrGDxgUaiYWE8BRfVckA==", + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.27.4", - "@jest/get-type": "30.1.0", - "@jest/pattern": "30.0.1", - "@jest/test-sequencer": "30.2.0", - "@jest/types": "30.2.0", - "babel-jest": "30.2.0", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "deepmerge": "^4.3.1", - "glob": "^10.3.10", - "graceful-fs": "^4.2.11", - "jest-circus": "30.2.0", - "jest-docblock": "30.2.0", - "jest-environment-node": "30.2.0", - "jest-regex-util": "30.0.1", - "jest-resolve": "30.2.0", - "jest-runner": "30.2.0", - "jest-util": "30.2.0", - "jest-validate": "30.2.0", - "micromatch": "^4.0.8", - "parse-json": "^5.2.0", - "pretty-format": "30.2.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "esbuild-register": ">=3.4.0", - "ts-node": ">=9.0.0" + "es-define-property": "^1.0.0" }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "esbuild-register": { - "optional": true - }, - "ts-node": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-config/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "dunder-proto": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-config/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-config/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "has-symbols": "^1.0.3" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-config/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "function-bind": "^1.1.2" }, "engines": { - "node": ">=7.0.0" + "node": ">= 0.4" } }, - "node_modules/jest-config/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, - "license": "MIT" + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hono": { + "version": "4.12.9", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.9.tgz", + "integrity": "sha512-wy3T8Zm2bsEvxKZM5w21VdHDDcwVS1yUFFY6i8UobSsKfFceT7TOwhbhfKsDyx7tYQlmRM5FLpIuYvNFyjctiA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true, + "license": "ISC" }, - "node_modules/jest-config/node_modules/glob": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", - "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "node_modules/html-encoding-sniffer": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-6.0.0.tgz", + "integrity": "sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" + "@exodus/bytes": "^1.6.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" } }, - "node_modules/jest-config/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" }, - "engines": { - "node": ">=16 || 14 >=14.17" + "bin": { + "html-minifier-terser": "cli.js" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=12" } }, - "node_modules/jest-config/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 12" } }, - "node_modules/jest-diff": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.2.0.tgz", - "integrity": "sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==", + "node_modules/html-webpack-plugin": { + "version": "5.6.5", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.5.tgz", + "integrity": "sha512-4xynFbKNNk+WlzXeQQ+6YYsH2g7mpfPszQZUi3ovKlj+pDmngQ7vRXjrrmGROabmKwyQkcgcX5hqfOwHbFmK5g==", "dev": true, "license": "MIT", "dependencies": { - "@jest/diff-sequences": "30.0.1", - "@jest/get-type": "30.1.0", - "chalk": "^4.1.2", - "pretty-format": "30.2.0" + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.20.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } } }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" } }, - "node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/htmlparser2/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true, + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" }, "engines": { - "node": ">=10" + "node": ">= 0.8" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/jest-diff/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=8.0.0" } }, - "node_modules/jest-diff/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-docblock": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.2.0.tgz", - "integrity": "sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA==", - "dev": true, + "node_modules/http-proxy-middleware": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.5.tgz", + "integrity": "sha512-GLZZm1X38BPY4lkXA01jhwxvDoOkkXqjgVyUzVxiEK4iuRu03PZoYHhHRwxnfhQMDuaxi3vVri0YgSro/1oWqg==", "license": "MIT", "dependencies": { - "detect-newline": "^3.1.0" + "@types/http-proxy": "^1.17.15", + "debug": "^4.3.6", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.3", + "is-plain-object": "^5.0.0", + "micromatch": "^4.0.8" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-each": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.2.0.tgz", - "integrity": "sha512-lpWlJlM7bCUf1mfmuqTA8+j2lNURW9eNafOy99knBM01i5CQeY5UH1vZjgT9071nDJac1M4XsbyI44oNOdhlDQ==", - "dev": true, + "node_modules/http-proxy-middleware/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "license": "MIT", - "dependencies": { - "@jest/get-type": "30.1.0", - "@jest/types": "30.2.0", - "chalk": "^4.1.2", - "jest-util": "30.2.0", - "pretty-format": "30.2.0" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-each/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/husky": { + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", + "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", "dev": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" + "bin": { + "husky": "bin.js" }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/typicode" } }, - "node_modules/jest-each/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/hyperdyperid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", + "license": "MIT", + "engines": { + "node": ">=10.18" + } + }, + "node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": ">=10" + "node": ">=0.10.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/jest-each/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, + "license": "ISC", "engines": { - "node": ">=7.0.0" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/jest-each/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true, - "license": "MIT" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" }, - "node_modules/jest-environment-jsdom": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz", - "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==", + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/jsdom": "^20.0.0", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0", - "jsdom": "^20.0.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } + "node": ">= 4" } }, - "node_modules/jest-environment-jsdom/node_modules/@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", "dev": true, "license": "MIT", - "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" + "optional": true, + "bin": { + "image-size": "bin/image-size.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-environment-jsdom/node_modules/@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-environment-jsdom/node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "node_modules/import-fresh/node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "license": "MIT", "dependencies": { - "@sinclair/typebox": "^0.27.8" + "callsites": "^3.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=6" } }, - "node_modules/jest-environment-jsdom/node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-environment-jsdom/node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-environment-jsdom/node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.0" + "node": ">=4" } }, - "node_modules/jest-environment-jsdom/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" }, "engines": { "node": ">=8" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-environment-jsdom/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/import-meta-resolve": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", + "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/jest-environment-jsdom/node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.8.19" } }, - "node_modules/jest-environment-jsdom/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, "engines": { - "node": ">=7.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-environment-jsdom/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-environment-jsdom/node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/jest-environment-jsdom/node_modules/jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" - }, + "license": "ISC", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/jest-environment-jsdom/node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.4" } }, - "node_modules/jest-environment-jsdom/node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "node": ">=10.13.0" } }, - "node_modules/jest-environment-jsdom/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/ip-address": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", + "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", "dev": true, "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 12" } }, - "node_modules/jest-environment-jsdom/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/ip-regex": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", + "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", "dev": true, "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=8" } }, - "node_modules/jest-environment-jsdom/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, + "node_modules/ipaddr.js": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.3.0.tgz", + "integrity": "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 10" } }, - "node_modules/jest-environment-node": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.2.0.tgz", - "integrity": "sha512-ElU8v92QJ9UrYsKrxDIKCxu6PfNj4Hdcktcn0JX12zqNdqWHB0N+hwOnnBBXvjLd2vApZtuLUGs1QSY+MsXoNA==", + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.2.0", - "@jest/fake-timers": "30.2.0", - "@jest/types": "30.2.0", - "@types/node": "*", - "jest-mock": "30.2.0", - "jest-util": "30.2.0", - "jest-validate": "30.2.0" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-haste-map": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.2.0.tgz", - "integrity": "sha512-sQA/jCb9kNt+neM0anSj6eZhLZUIhQgwDt7cPGjumgLM4rXsfb9kpnlacmvZz3Q5tb80nS+oG/if+NBKrHC+Xw==", + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.2.0", - "@types/node": "*", - "anymatch": "^3.1.3", - "fb-watchman": "^2.0.2", - "graceful-fs": "^4.2.11", - "jest-regex-util": "30.0.1", - "jest-util": "30.2.0", - "jest-worker": "30.2.0", - "micromatch": "^4.0.8", - "walker": "^1.0.8" + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 0.4" }, - "optionalDependencies": { - "fsevents": "^2.3.3" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-leak-detector": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.2.0.tgz", - "integrity": "sha512-M6jKAjyzjHG0SrQgwhgZGy9hFazcudwCNovY/9HPIicmNSBuockPSedAP9vlPK6ONFJ1zfyH/M2/YYJxOz5cdQ==", + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/get-type": "30.1.0", - "pretty-format": "30.2.0" + "has-bigints": "^1.0.2" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-matcher-utils": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.2.0.tgz", - "integrity": "sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg==", + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "@jest/get-type": "30.1.0", - "chalk": "^4.1.2", - "jest-diff": "30.2.0", - "pretty-format": "30.2.0" + "binary-extensions": "^2.0.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=8" } }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/is-builtin-module": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-5.0.0.tgz", + "integrity": "sha512-f4RqJKBUe5rQkJ2eJEJBXSticB3hGbN9j0yxxMQFqIW89Jp9WYFtzfTcRlstDKVUTRzSOTLKRfO9vIztenwtxA==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "builtin-modules": "^5.0.0" }, "engines": { - "node": ">=10" + "node": ">=18.20" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-matcher-utils/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-message-util": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.2.0.tgz", - "integrity": "sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@jest/types": "30.2.0", - "@types/stack-utils": "^2.0.3", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "micromatch": "^4.0.8", - "pretty-format": "30.2.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.6" + "node": ">= 0.4" }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "hasown": "^2.0.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-message-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-message-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": ">=7.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-message-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-message-util/node_modules/slash": { + "node_modules/is-docker": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-mock": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.2.0.tgz", - "integrity": "sha512-JNNNl2rj4b5ICpmAcq+WbLH83XswjPbjH4T7yvGzfAGCPh1rw+xVNbtk+FnRslvt9lkCcdn9i1oAoKUuFsOxRw==", - "dev": true, + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", "license": "MIT", - "dependencies": { - "@jest/types": "30.2.0", - "@types/node": "*", - "jest-util": "30.2.0" + "bin": { + "is-docker": "cli.js" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-regex-util": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.1.tgz", - "integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==", - "dev": true, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "license": "MIT", "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-resolve": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.2.0.tgz", - "integrity": "sha512-TCrHSxPlx3tBY3hWNtRQKbtgLhsXa1WmbJEqBlTBrGafd5fiQFByy2GNCEoGR+Tns8d15GaL9cxEzKOO3GEb2A==", + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", "dev": true, "license": "MIT", "dependencies": { - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "jest-haste-map": "30.2.0", - "jest-pnp-resolver": "^1.2.3", - "jest-util": "30.2.0", - "jest-validate": "30.2.0", - "slash": "^3.0.0", - "unrs-resolver": "^1.7.11" + "call-bound": "^1.0.3" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.2.0.tgz", - "integrity": "sha512-xTOIGug/0RmIe3mmCqCT95yO0vj6JURrn1TKWlNbhiAefJRWINNPgwVkrVgt/YaerPzY3iItufd80v3lOrFJ2w==", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-regex-util": "30.0.1", - "jest-snapshot": "30.2.0" + "node": ">= 0.4" }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-resolve/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-resolve/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-resolve/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "is-extglob": "^2.1.1" }, "engines": { - "node": ">=7.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-resolve/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-resolve/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, + "node_modules/is-in-ssh": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-in-ssh/-/is-in-ssh-1.0.0.tgz", + "integrity": "sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-runner": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.2.0.tgz", - "integrity": "sha512-PqvZ2B2XEyPEbclp+gV6KO/F1FIFSbIwewRgmROCMBo/aZ6J1w8Qypoj2pEOcg3G2HzLlaP6VUtvwCI8dM3oqQ==", - "dev": true, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", "license": "MIT", "dependencies": { - "@jest/console": "30.2.0", - "@jest/environment": "30.2.0", - "@jest/test-result": "30.2.0", - "@jest/transform": "30.2.0", - "@jest/types": "30.2.0", - "@types/node": "*", - "chalk": "^4.1.2", - "emittery": "^0.13.1", - "exit-x": "^0.2.2", - "graceful-fs": "^4.2.11", - "jest-docblock": "30.2.0", - "jest-environment-node": "30.2.0", - "jest-haste-map": "30.2.0", - "jest-leak-detector": "30.2.0", - "jest-message-util": "30.2.0", - "jest-resolve": "30.2.0", - "jest-runtime": "30.2.0", - "jest-util": "30.2.0", - "jest-watcher": "30.2.0", - "jest-worker": "30.2.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-runner/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-runner/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-runner/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "node_modules/is-network-error": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.1.tgz", + "integrity": "sha512-6QCxa49rQbmUWLfk0nuGqzql9U8uaV2H6279bRErPBHe/109hCzsLUBUHfbEtvLIHBd6hyXbgedBSHevm43Edw==", "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, "engines": { - "node": ">=7.0.0" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-runner/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-runtime": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.2.0.tgz", - "integrity": "sha512-p1+GVX/PJqTucvsmERPMgCPvQJpFt4hFbM+VN3n8TMo47decMUcJbt+rgzwrEme0MQUA/R+1de2axftTHkKckg==", - "dev": true, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "license": "MIT", - "dependencies": { - "@jest/environment": "30.2.0", - "@jest/fake-timers": "30.2.0", - "@jest/globals": "30.2.0", - "@jest/source-map": "30.0.1", - "@jest/test-result": "30.2.0", - "@jest/transform": "30.2.0", - "@jest/types": "30.2.0", - "@types/node": "*", - "chalk": "^4.1.2", - "cjs-module-lexer": "^2.1.0", - "collect-v8-coverage": "^1.0.2", - "glob": "^10.3.10", - "graceful-fs": "^4.2.11", - "jest-haste-map": "30.2.0", - "jest-message-util": "30.2.0", - "jest-mock": "30.2.0", - "jest-regex-util": "30.0.1", - "jest-resolve": "30.2.0", - "jest-snapshot": "30.2.0", - "jest-util": "30.2.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=0.12.0" } }, - "node_modules/jest-runtime/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-runtime/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" + "engines": { + "node": ">=8" } }, - "node_modules/jest-runtime/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "isobject": "^3.0.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/jest-runtime/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { - "node": ">=7.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-runtime/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-runtime/node_modules/glob": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", - "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" + "license": "MIT", + "engines": { + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-runtime/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "call-bound": "^1.0.3" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-runtime/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, "license": "MIT", "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-snapshot": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.2.0.tgz", - "integrity": "sha512-5WEtTy2jXPFypadKNpbNkZ72puZCa6UjSr/7djeecHWOu7iYhSXSnHScT8wBz3Rn8Ena5d5RYRcsyKIeqG1IyA==", + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.27.4", - "@babel/generator": "^7.27.5", - "@babel/plugin-syntax-jsx": "^7.27.1", - "@babel/plugin-syntax-typescript": "^7.27.1", - "@babel/types": "^7.27.3", - "@jest/expect-utils": "30.2.0", - "@jest/get-type": "30.1.0", - "@jest/snapshot-utils": "30.2.0", - "@jest/transform": "30.2.0", - "@jest/types": "30.2.0", - "babel-preset-current-node-syntax": "^1.2.0", - "chalk": "^4.1.2", - "expect": "30.2.0", - "graceful-fs": "^4.2.11", - "jest-diff": "30.2.0", - "jest-matcher-utils": "30.2.0", - "jest-message-util": "30.2.0", - "jest-util": "30.2.0", - "pretty-format": "30.2.0", - "semver": "^7.7.2", - "synckit": "^0.11.8" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-snapshot/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-snapshot/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/is-text-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz", + "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "text-extensions": "^2.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=8" } }, - "node_modules/jest-snapshot/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "which-typed-array": "^1.1.16" }, "engines": { - "node": ">=7.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-snapshot/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", "dev": true, "license": "MIT" }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-util": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.2.0.tgz", - "integrity": "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA==", + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.2.0", - "@types/node": "*", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "graceful-fs": "^4.2.11", - "picomatch": "^4.0.2" + "call-bound": "^1.0.3" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", "dev": true, + "license": "MIT" + }, + "node_modules/is-wsl": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "is-inside-container": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">=16" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/is2": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.9.tgz", + "integrity": "sha512-rZkHeBn9Zzq52sd9IUIV3a5mfwBY+o2HePMh0wkGBM4z4qjvy2GwVxQ6nNXSfw6MmVP6gf1QIlWjiOavhM3x5g==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "deep-is": "^0.1.3", + "ip-regex": "^4.1.0", + "is-url": "^1.2.4" }, "engines": { - "node": ">=7.0.0" + "node": ">=v0.10.0" } }, - "node_modules/jest-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true, "license": "MIT" }, - "node_modules/jest-validate": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.2.0.tgz", - "integrity": "sha512-FBGWi7dP2hpdi8nBoWxSsLvBFewKAg0+uSQwBaof4Y4DPgBabXgpSYC5/lR7VmnIlSpASmCi/ntRWPbv7089Pw==", + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, "license": "MIT", - "dependencies": { - "@jest/get-type": "30.1.0", - "@jest/types": "30.2.0", - "camelcase": "^6.3.0", - "chalk": "^4.1.2", - "leven": "^3.1.0", - "pretty-format": "30.2.0" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "@isaacs/cliui": "^8.0.2" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "node_modules/jest-mock": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.4.1.tgz", + "integrity": "sha512-/i8SVb8/NSB7RfNi8gfqu8gxLV23KaL5EpAttyb9iz8qWRIqXRLflycz/32wXsYkOnaUlx8NAKnJYtpsmXUmfw==", "dev": true, "license": "MIT", - "engines": { - "node": ">=10" + "dependencies": { + "@jest/types": "30.4.1", + "@types/node": "*", + "jest-util": "30.4.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-validate/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/jest-mock/node_modules/@jest/pattern": { + "version": "30.4.0", + "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.4.0.tgz", + "integrity": "sha512-RAWn3+f9u8BsHijKJ71uHcFp6vmyEt6VvoWXkl6hKF3qVIuWNmudVjg12DlBPGup/frIl5UcUlH5HfEuvHpEXg==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@types/node": "*", + "jest-regex-util": "30.4.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-validate/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/jest-mock/node_modules/@jest/schemas": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.4.1.tgz", + "integrity": "sha512-i6b4qw5qnP8c5FEeBJg/uZQ4ddrkN6Ca8qISJh0pr7a5hfn3h3v5x60BEbOC7OYAGZNMs1LfFLwnW2CuK8F57Q==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "@sinclair/typebox": "^0.34.0" }, "engines": { - "node": ">=7.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-validate/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-watcher": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.2.0.tgz", - "integrity": "sha512-PYxa28dxJ9g777pGm/7PrbnMeA0Jr7osHP9bS7eJy9DuAjMgdGtxgf0uKMyoIsTWAkIbUW5hSDdJ3urmgXBqxg==", + "node_modules/jest-mock/node_modules/@jest/types": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.4.1.tgz", + "integrity": "sha512-f1x/vJXIfjOlEmejYpbkbgw1gOqpPECwMvMEtBqe47j7H2Hg8h8w3o3ikhSXq3MI15kg+oQ0exWO0uCtTNJLoQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/test-result": "30.2.0", - "@jest/types": "30.2.0", + "@jest/pattern": "30.4.0", + "@jest/schemas": "30.4.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", "@types/node": "*", - "ansi-escapes": "^4.3.2", - "chalk": "^4.1.2", - "emittery": "^0.13.1", - "jest-util": "30.2.0", - "string-length": "^4.0.2" + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-watcher/node_modules/ansi-styles": { + "node_modules/jest-mock/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -16385,7 +13147,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-watcher/node_modules/chalk": { + "node_modules/jest-mock/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -16402,7 +13164,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-watcher/node_modules/color-convert": { + "node_modules/jest-mock/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", @@ -16415,44 +13177,39 @@ "node": ">=7.0.0" } }, - "node_modules/jest-watcher/node_modules/color-name": { + "node_modules/jest-mock/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, - "node_modules/jest-worker": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.2.0.tgz", - "integrity": "sha512-0Q4Uk8WF7BUwqXHuAjc23vmopWJw5WH7w2tqBoUOZpOjW/ZnR44GXXd1r82RvnmI2GZge3ivrYXk/BE2+VtW2g==", + "node_modules/jest-mock/node_modules/jest-regex-util": { + "version": "30.4.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.4.0.tgz", + "integrity": "sha512-mWlvLviKIgIQ8VCuM1xRdD0TWp3zlzionlmDBjuXVBs+VkmXq6FgW9T4Emr7oGz/Rk6feDCGyiugolcQEyp3mg==", "dev": true, "license": "MIT", - "dependencies": { - "@types/node": "*", - "@ungap/structured-clone": "^1.3.0", - "jest-util": "30.2.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.1.1" - }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/jest-mock/node_modules/jest-util": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.4.1.tgz", + "integrity": "sha512-vjQb1sACEiv13DKJMDToJpzVW0joCsIQrmbg0fi7CyOOt+g9jTuQl2A216pWRBYhOVt53XbL/2LbMKg1BECWOw==", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "@jest/types": "30.4.1", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.3" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jiti": { @@ -16472,20 +13229,6 @@ "dev": true, "license": "MIT" }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/jsdoc-type-pratt-parser": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.1.0.tgz", @@ -16497,44 +13240,39 @@ } }, "node_modules/jsdom": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", - "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "abab": "^2.0.6", - "acorn": "^8.8.1", - "acorn-globals": "^7.0.0", - "cssom": "^0.5.0", - "cssstyle": "^2.3.0", - "data-urls": "^3.0.2", - "decimal.js": "^10.4.2", - "domexception": "^4.0.0", - "escodegen": "^2.0.0", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.1", + "version": "29.1.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-29.1.1.tgz", + "integrity": "sha512-ECi4Fi2f7BdJtUKTflYRTiaMxIB0O6zfR1fX0GXpUrf6flp8QIYn1UT20YQqdSOfk2dfkCwS8LAFoJDEppNK5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/css-color": "^5.1.11", + "@asamuzakjp/dom-selector": "^7.1.1", + "@bramus/specificity": "^2.4.2", + "@csstools/css-syntax-patches-for-csstree": "^1.1.3", + "@exodus/bytes": "^1.15.0", + "css-tree": "^3.2.1", + "data-urls": "^7.0.0", + "decimal.js": "^10.6.0", + "html-encoding-sniffer": "^6.0.0", "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.2", - "parse5": "^7.1.1", + "lru-cache": "^11.3.5", + "parse5": "^8.0.1", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.2", - "w3c-xmlserializer": "^4.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^2.0.0", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0", - "ws": "^8.11.0", - "xml-name-validator": "^4.0.0" + "tough-cookie": "^6.0.1", + "undici": "^7.25.0", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^8.0.1", + "whatwg-mimetype": "^5.0.0", + "whatwg-url": "^16.0.1", + "xml-name-validator": "^5.0.0" }, "engines": { - "node": ">=14" + "node": "^20.19.0 || ^22.13.0 || >=24.0.0" }, "peerDependencies": { - "canvas": "^2.5.0" + "canvas": "^3.0.0" }, "peerDependenciesMeta": { "canvas": { @@ -16542,6 +13280,42 @@ } } }, + "node_modules/jsdom/node_modules/entities": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-8.0.0.tgz", + "integrity": "sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/jsdom/node_modules/lru-cache": { + "version": "11.3.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.6.tgz", + "integrity": "sha512-Gf/KoL3C/MlI7Bt0PGI9I+TeTC/I6r/csU58N4BSNc4lppLBeKsOdFYkK+dX0ABDUMJNfCHTyPpzwwO21Awd3A==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/jsdom/node_modules/parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.1.tgz", + "integrity": "sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, "node_modules/jsesc": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", @@ -16794,16 +13568,6 @@ } } }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -17346,16 +14110,6 @@ "semver": "bin/semver" } }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tmpl": "1.0.5" - } - }, "node_modules/map-obj": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", @@ -17647,6 +14401,13 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/mdn-data": { + "version": "2.27.1", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", + "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", + "dev": true, + "license": "CC0-1.0" + }, "node_modules/media-typer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", @@ -18559,22 +15320,6 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/napi-postinstall": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", - "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==", - "dev": true, - "license": "MIT", - "bin": { - "napi-postinstall": "lib/cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/napi-postinstall" - } - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -18658,13 +15403,6 @@ "tslib": "^2.0.3" } }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true, - "license": "MIT" - }, "node_modules/node-releases": { "version": "2.0.27", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", @@ -18701,6 +15439,7 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, "license": "MIT", + "optional": true, "engines": { "node": ">=0.10.0" } @@ -18891,13 +15630,6 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/nwsapi": { - "version": "2.2.22", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.22.tgz", - "integrity": "sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ==", - "dev": true, - "license": "MIT" - }, "node_modules/object-inspect": { "version": "1.13.4", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", @@ -19331,19 +16063,6 @@ "dev": true, "license": "MIT" }, - "node_modules/parse5": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", - "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "entities": "^6.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -19506,16 +16225,6 @@ "node": ">=6" } }, - "node_modules/pirates": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", - "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -19822,15 +16531,29 @@ } }, "node_modules/pretty-format": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.2.0.tgz", - "integrity": "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==", + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.4.1.tgz", + "integrity": "sha512-K6KiKMHTL4jjX4u3Kir2EW07nRfcqVTXIImx50wbjHQTcZPgg+gjVeNTIT3l3L1Rd4UefxfogquC9J37SoFyyw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/schemas": "30.0.5", + "@jest/schemas": "30.4.1", "ansi-styles": "^5.2.0", - "react-is": "^18.3.1" + "react-is-18": "npm:react-is@^18.3.1", + "react-is-19": "npm:react-is@^19.2.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/pretty-format/node_modules/@jest/schemas": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.4.1.tgz", + "integrity": "sha512-i6b4qw5qnP8c5FEeBJg/uZQ4ddrkN6Ca8qISJh0pr7a5hfn3h3v5x60BEbOC7OYAGZNMs1LfFLwnW2CuK8F57Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.34.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -19981,19 +16704,6 @@ "license": "MIT", "optional": true }, - "node_modules/psl": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", - "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "punycode": "^2.3.1" - }, - "funding": { - "url": "https://github.com/sponsors/lupomontero" - } - }, "node_modules/pump": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", @@ -20056,23 +16766,6 @@ "node": ">=18" } }, - "node_modules/pure-rand": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-7.0.1.tgz", - "integrity": "sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ], - "license": "MIT" - }, "node_modules/pvtsutils": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz", @@ -20118,13 +16811,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true, - "license": "MIT" - }, "node_modules/quick-lru": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", @@ -20159,13 +16845,22 @@ "node": ">= 0.10" } }, - "node_modules/react-is": { + "node_modules/react-is-18": { + "name": "react-is", "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true, "license": "MIT" }, + "node_modules/react-is-19": { + "name": "react-is", + "version": "19.2.6", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.6.tgz", + "integrity": "sha512-XjBR15BhXuylgWGuslhDKqlSayuqvqBX91BP8pauG8kd1zY8kotkNWbXksTCNRarse4kuGbe2kIY05ARtwNIvw==", + "dev": true, + "license": "MIT" + }, "node_modules/read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", @@ -21396,17 +18091,6 @@ "node": ">=0.10.0" } }, - "node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, "node_modules/spdx-correct": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", @@ -21477,13 +18161,6 @@ "node": ">= 10.x" } }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, - "license": "BSD-3-Clause" - }, "node_modules/stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", @@ -21886,43 +18563,6 @@ "node": ">=0.6.19" } }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-length/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-length/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/string-width": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", @@ -22123,16 +18763,6 @@ "node": ">=8" } }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -22463,21 +19093,6 @@ "source-map": "^0.6.0" } }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/text-decoder": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", @@ -22578,12 +19193,25 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "node_modules/tldts": { + "version": "7.0.30", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.30.tgz", + "integrity": "sha512-ELrFxuqsDdHUwoh0XxDbxuLD3Wnz49Z57IFvTtvWy1hJdcMZjXLIuonjilCiWHlT2GbE4Wlv1wKVTzDFnXH1aw==", "dev": true, - "license": "BSD-3-Clause" + "license": "MIT", + "dependencies": { + "tldts-core": "^7.0.30" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "7.0.30", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.30.tgz", + "integrity": "sha512-uiHN8PIB1VmWyS98eZYja4xzlYqeFZVjb4OuYlJQnZAuJhMw4PbKQOKgHKhBdJR3FE/t5mUQ1Kd80++B+qhD1Q==", + "dev": true, + "license": "MIT" }, "node_modules/to-regex-range": { "version": "5.0.1", @@ -22607,32 +19235,29 @@ } }, "node_modules/tough-cookie": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", - "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.1.tgz", + "integrity": "sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" + "tldts": "^7.0.5" }, "engines": { - "node": ">=6" + "node": ">=16" } }, "node_modules/tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-6.0.0.tgz", + "integrity": "sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==", "dev": true, "license": "MIT", "dependencies": { - "punycode": "^2.1.1" + "punycode": "^2.3.1" }, "engines": { - "node": ">=12" + "node": ">=20" } }, "node_modules/tree-dump": { @@ -22771,29 +19396,6 @@ "node": ">= 0.8.0" } }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/type-is": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", @@ -22989,6 +19591,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/undici": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.25.0.tgz", + "integrity": "sha512-xXnp4kTyor2Zq+J1FfPI6Eq3ew5h6Vl0F/8d9XU5zZQf1tX9s2Su1/3PiMmUANFULpmksxkClamIZcaUqryHsQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, "node_modules/undici-types": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", @@ -23111,16 +19723,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -23130,41 +19732,6 @@ "node": ">= 0.8" } }, - "node_modules/unrs-resolver": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", - "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "napi-postinstall": "^0.3.0" - }, - "funding": { - "url": "https://opencollective.com/unrs-resolver" - }, - "optionalDependencies": { - "@unrs/resolver-binding-android-arm-eabi": "1.11.1", - "@unrs/resolver-binding-android-arm64": "1.11.1", - "@unrs/resolver-binding-darwin-arm64": "1.11.1", - "@unrs/resolver-binding-darwin-x64": "1.11.1", - "@unrs/resolver-binding-freebsd-x64": "1.11.1", - "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", - "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", - "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", - "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", - "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", - "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-x64-musl": "1.11.1", - "@unrs/resolver-binding-wasm32-wasi": "1.11.1", - "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", - "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", - "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" - } - }, "node_modules/update-browserslist-db": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", @@ -23206,17 +19773,6 @@ "punycode": "^2.1.0" } }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -23241,21 +19797,6 @@ "node": ">= 0.4.0" } }, - "node_modules/v8-to-istanbul": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", - "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", - "dev": true, - "license": "ISC", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -23302,16 +19843,16 @@ "license": "MIT" }, "node_modules/w3c-xmlserializer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", - "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", "dev": true, "license": "MIT", "dependencies": { - "xml-name-validator": "^4.0.0" + "xml-name-validator": "^5.0.0" }, "engines": { - "node": ">=14" + "node": ">=18" } }, "node_modules/wait-for-expect": { @@ -23321,16 +19862,6 @@ "dev": true, "license": "MIT" }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "makeerror": "1.0.12" - } - }, "node_modules/watchpack": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz", @@ -23353,13 +19884,13 @@ "license": "Apache-2.0" }, "node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-8.0.1.tgz", + "integrity": "sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==", "dev": true, "license": "BSD-2-Clause", "engines": { - "node": ">=12" + "node": ">=20" } }, "node_modules/webpack": { @@ -23532,54 +20063,29 @@ "node": ">=10.13.0" } }, - "node_modules/whatwg-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", - "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", - "dev": true, - "license": "MIT", - "dependencies": { - "iconv-lite": "0.6.3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/whatwg-encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/whatwg-mimetype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-5.0.0.tgz", + "integrity": "sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==", "dev": true, "license": "MIT", "engines": { - "node": ">=12" + "node": ">=20" } }, "node_modules/whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-16.0.1.tgz", + "integrity": "sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw==", "dev": true, "license": "MIT", "dependencies": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" + "@exodus/bytes": "^1.11.0", + "tr46": "^6.0.0", + "webidl-conversions": "^8.0.1" }, "engines": { - "node": ">=12" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" } }, "node_modules/which": { @@ -23858,33 +20364,6 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "license": "ISC" }, - "node_modules/write-file-atomic": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", - "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/write-file-atomic/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/ws": { "version": "8.20.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.0.tgz", @@ -23936,13 +20415,13 @@ } }, "node_modules/xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", "dev": true, "license": "Apache-2.0", "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/xmlchars": { diff --git a/package.json b/package.json index 6f71d9a0ca..c5462e75c2 100644 --- a/package.json +++ b/package.json @@ -35,9 +35,9 @@ "build:client": "rimraf -g ./client/* && babel client-src/ --out-dir client/ --ignore \"client-src/webpack.config.js\" --ignore \"client-src/modules\" && webpack --config client-src/webpack.config.js", "build:types": "rimraf -g ./types/* && tsc --declaration --emitDeclarationOnly --outDir types && node ./scripts/extend-webpack-types.js && prettier \"types/**/*.ts\" --write && prettier \"types/**/*.ts\" --write", "build": "npm-run-all -p \"build:**\"", - "test:only": "node --experimental-vm-modules node_modules/jest/bin/jest.js", - "test:coverage": "npm run test:only -- --coverage", - "test:watch": "npm run test:coverage --watch", + "test:only": "node ./scripts/check-test-ports.mjs && node ./scripts/run-tests.mjs", + "test:coverage": "npm run test:only -- --experimental-test-coverage --test-reporter=spec --test-reporter-destination=stdout --test-reporter=lcov --test-reporter-destination=coverage/lcov.info", + "test:watch": "npm run test:only -- --watch", "test": "npm run test:coverage", "pretest": "npm run lint", "prepare": "husky && npm run build", @@ -89,7 +89,6 @@ "@types/picomatch": "^4.0.2", "@types/trusted-types": "^2.0.7", "acorn": "^8.14.0", - "babel-jest": "^30.0.4", "babel-loader": "^10.0.0", "connect": "^3.7.0", "core-js": "^3.38.1", @@ -99,16 +98,16 @@ "eslint-config-prettier": "^10.1.5", "eslint-config-webpack": "^4.4.0", "eslint-plugin-import": "^2.32.0", - "eslint-plugin-jest": "^29.0.1", "eslint-plugin-jsdoc": "^51.3.4", "eslint-plugin-n": "^17.21.0", "execa": "^5.1.1", + "expect": "^30.4.1", "hono": "^4.12.9", "html-webpack-plugin": "^5.6.3", "http-proxy": "^1.18.1", "husky": "^9.1.6", - "jest": "^30.0.4", - "jest-environment-jsdom": "^29.7.0", + "jest-mock": "^30.4.1", + "jsdom": "^29.1.1", "klona": "^2.0.4", "less": "^4.1.1", "less-loader": "^12.1.0", @@ -117,6 +116,7 @@ "memfs": "^4.14.0", "npm-run-all": "^4.1.5", "prettier": "^3.2.4", + "pretty-format": "^30.4.1", "puppeteer": "^24.35.0", "readable-stream": "^4.5.2", "require-from-string": "^2.0.2", @@ -144,6 +144,6 @@ } }, "engines": { - "node": ">= 22.12.0" + "node": ">= 22.15.0" } } diff --git a/scripts/check-test-ports.mjs b/scripts/check-test-ports.mjs new file mode 100644 index 0000000000..1960c3144e --- /dev/null +++ b/scripts/check-test-ports.mjs @@ -0,0 +1,33 @@ +import tcpPortUsed from "tcp-port-used"; +import webpack from "webpack"; +import ports from "../test/ports-map.js"; + +const { version } = webpack; +// eslint-disable-next-line no-console +console.log(`\n Running tests for webpack @${version} \n`); + +const checks = []; +for (const key of Object.keys(ports)) { + const value = ports[key]; + const arr = Array.isArray(value) ? value : [value]; + + for (const port of arr) { + checks.push({ port, key }); + } +} + +try { + await Promise.all( + checks.map(async ({ port, key }) => { + const inUse = await tcpPortUsed.check(port, "localhost"); + if (inUse) { + throw new Error(`${port} has already used. [${key}]`); + } + }), + ); +} catch (err) { + // eslint-disable-next-line no-console + console.error(err); + // eslint-disable-next-line n/no-process-exit + process.exit(1); +} diff --git a/scripts/globalSetupTest.js b/scripts/globalSetupTest.js deleted file mode 100644 index e8ee1c86b3..0000000000 --- a/scripts/globalSetupTest.js +++ /dev/null @@ -1,41 +0,0 @@ -"use strict"; - -const tcpPortUsed = require("tcp-port-used"); -const { version } = require("webpack"); -const ports = require("../test/ports-map"); - -// eslint-disable-next-line no-console -console.log(`\n Running tests for webpack @${version} \n`); - -/** - * @returns {Promise} - */ -async function validatePorts() { - const samples = []; - - for (const key of Object.keys(ports)) { - const value = ports[key]; - const arr = Array.isArray(value) ? value : [value]; - - for (const port of arr) { - const check = tcpPortUsed.check(port, "localhost").then((inUse) => { - if (inUse) { - throw new Error(`${port} has already used. [${key}]`); - } - }); - - samples.push(check); - } - } - - try { - await Promise.all(samples); - } catch (err) { - // eslint-disable-next-line no-console - console.error(err); - // eslint-disable-next-line n/no-process-exit - process.exit(1); - } -} - -module.exports = validatePorts; diff --git a/scripts/node-test-setup.mjs b/scripts/node-test-setup.mjs new file mode 100644 index 0000000000..9775a39872 --- /dev/null +++ b/scripts/node-test-setup.mjs @@ -0,0 +1,29 @@ +import path from "node:path"; +import { snapshot } from "node:test"; +import { format } from "pretty-format"; +import webpack from "webpack"; + +process.env.CHOKIDAR_USEPOLLING = "true"; + +// Normalize "\r\n" and "\r" to "\n" so snapshots are platform-agnostic. +snapshot.setDefaultSnapshotSerializers([ + (value) => + format(value, { + escapeRegex: true, + escapeString: false, + indent: 2, + printBasicPrototype: false, + printFunctionName: false, + }).replaceAll(/\r\n|\r/g, "\n"), +]); + +const [webpackVersion] = webpack.version; +const snapshotExtension = `.snap.webpack${webpackVersion}`; + +snapshot.setResolveSnapshotPath((testPath) => + path.join( + path.dirname(testPath), + "__snapshots__", + `${path.basename(testPath)}${snapshotExtension}`, + ), +); diff --git a/scripts/run-tests.mjs b/scripts/run-tests.mjs new file mode 100644 index 0000000000..973cb94106 --- /dev/null +++ b/scripts/run-tests.mjs @@ -0,0 +1,64 @@ +import { spawn } from "node:child_process"; +import { glob, mkdir } from "node:fs/promises"; +import path from "node:path"; + +const ROOT = path.resolve(import.meta.dirname, ".."); + +// Pre-create any directory referenced by `--test-reporter-destination` because +// Node's reporter stream opens the file with `fs.createWriteStream` and won't +// create missing parent directories. +for (let i = 0; i < process.argv.length; i++) { + const arg = process.argv[i]; + let destination; + if (arg === "--test-reporter-destination") { + destination = process.argv[i + 1]; + } else if (arg?.startsWith("--test-reporter-destination=")) { + destination = arg.slice("--test-reporter-destination=".length); + } + if (destination && destination !== "stdout" && destination !== "stderr") { + await mkdir(path.dirname(path.resolve(ROOT, destination)), { + recursive: true, + }); + } +} + +const PATTERNS = [ + "test/*.test.js", + "test/cli/**/*.test.js", + "test/client/**/*.test.js", + "test/e2e/**/*.test.js", + "test/server/**/*.test.js", +]; + +const files = new Set(); +for (const pattern of PATTERNS) { + for await (const file of glob(pattern, { cwd: ROOT })) { + files.add(file); + } +} + +const testFiles = [...files].sort(); + +const nodeArgs = [ + "--import", + "./scripts/node-test-setup.mjs", + "--experimental-test-module-mocks", + "--test", + "--test-timeout=400000", + "--test-force-exit", + ...process.argv.slice(2), + ...testFiles, +]; + +const child = spawn(process.execPath, nodeArgs, { + cwd: ROOT, + stdio: "inherit", +}); + +child.on("exit", (code, signal) => { + if (signal) { + process.kill(process.pid, signal); + } else { + process.exitCode = code ?? 1; + } +}); diff --git a/scripts/setupTest.js b/scripts/setupTest.js deleted file mode 100644 index 5e0aaeb46d..0000000000 --- a/scripts/setupTest.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; - -/* global jest */ - -process.env.CHOKIDAR_USEPOLLING = true; - -jest.setTimeout(400000); diff --git a/test/__snapshots__/normalize-options.test.js.snap.webpack5 b/test/__snapshots__/normalize-options.test.js.snap.webpack5 index 52099cfd75..4d965b0a59 100644 --- a/test/__snapshots__/normalize-options.test.js.snap.webpack5 +++ b/test/__snapshots__/normalize-options.test.js.snap.webpack5 @@ -1,6 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`normalize options allowedHosts is array 1`] = ` +exports[`normalize options > allowedHosts is array 1`] = ` { "allowedHosts": "all", "bonjour": false, @@ -54,7 +52,7 @@ exports[`normalize options allowedHosts is array 1`] = ` } `; -exports[`normalize options allowedHosts is string 1`] = ` +exports[`normalize options > allowedHosts is string 1`] = ` { "allowedHosts": "all", "bonjour": false, @@ -108,7 +106,7 @@ exports[`normalize options allowedHosts is string 1`] = ` } `; -exports[`normalize options client custom webSocketTransport path 1`] = ` +exports[`normalize options > client custom webSocketTransport path 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -163,7 +161,7 @@ exports[`normalize options client custom webSocketTransport path 1`] = ` } `; -exports[`normalize options client host and port 1`] = ` +exports[`normalize options > client host and port 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -220,7 +218,7 @@ exports[`normalize options client host and port 1`] = ` } `; -exports[`normalize options client host and string port 1`] = ` +exports[`normalize options > client host and string port 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -277,7 +275,7 @@ exports[`normalize options client host and string port 1`] = ` } `; -exports[`normalize options client path 1`] = ` +exports[`normalize options > client path 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -333,7 +331,7 @@ exports[`normalize options client path 1`] = ` } `; -exports[`normalize options client path without leading/ending slashes 1`] = ` +exports[`normalize options > client path without leading/ending slashes 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -389,7 +387,7 @@ exports[`normalize options client path without leading/ending slashes 1`] = ` } `; -exports[`normalize options client.webSocketTransport ws string 1`] = ` +exports[`normalize options > client.webSocketTransport ws string 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -444,7 +442,7 @@ exports[`normalize options client.webSocketTransport ws string 1`] = ` } `; -exports[`normalize options client.webSocketTransport ws string and webSocketServer object 1`] = ` +exports[`normalize options > client.webSocketTransport ws string and webSocketServer object 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -501,7 +499,7 @@ exports[`normalize options client.webSocketTransport ws string and webSocketServ } `; -exports[`normalize options client.webSocketTransport ws string and webSocketServer object with port as string 1`] = ` +exports[`normalize options > client.webSocketTransport ws string and webSocketServer object with port as string 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -558,7 +556,7 @@ exports[`normalize options client.webSocketTransport ws string and webSocketServ } `; -exports[`normalize options client.webSocketTransport ws string and webSocketServer ws string 1`] = ` +exports[`normalize options > client.webSocketTransport ws string and webSocketServer ws string 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -613,7 +611,7 @@ exports[`normalize options client.webSocketTransport ws string and webSocketServ } `; -exports[`normalize options dev is set 1`] = ` +exports[`normalize options > dev is set 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -669,7 +667,7 @@ exports[`normalize options dev is set 1`] = ` } `; -exports[`normalize options hot is false 1`] = ` +exports[`normalize options > hot is false 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -723,7 +721,7 @@ exports[`normalize options hot is false 1`] = ` } `; -exports[`normalize options hot is only 1`] = ` +exports[`normalize options > hot is only 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -777,7 +775,7 @@ exports[`normalize options hot is only 1`] = ` } `; -exports[`normalize options hot is true 1`] = ` +exports[`normalize options > hot is true 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -831,7 +829,7 @@ exports[`normalize options hot is true 1`] = ` } `; -exports[`normalize options liveReload is false 1`] = ` +exports[`normalize options > liveReload is false 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -885,7 +883,7 @@ exports[`normalize options liveReload is false 1`] = ` } `; -exports[`normalize options liveReload is true 1`] = ` +exports[`normalize options > liveReload is true 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -939,7 +937,7 @@ exports[`normalize options liveReload is true 1`] = ` } `; -exports[`normalize options multi compiler client.logging should override infrastructureLogging.level 1`] = ` +exports[`normalize options > multi compiler client.logging should override infrastructureLogging.level 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -993,7 +991,7 @@ exports[`normalize options multi compiler client.logging should override infrast } `; -exports[`normalize options multi compiler client.logging should respect infrastructureLogging.level 1`] = ` +exports[`normalize options > multi compiler client.logging should respect infrastructureLogging.level 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -1047,7 +1045,7 @@ exports[`normalize options multi compiler client.logging should respect infrastr } `; -exports[`normalize options multi compiler client.logging should respect infrastructureLogging.level 2`] = ` +exports[`normalize options > multi compiler client.logging should respect infrastructureLogging.level 2`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -1101,7 +1099,7 @@ exports[`normalize options multi compiler client.logging should respect infrastr } `; -exports[`normalize options multi compiler client.logging should respect infrastructureLogging.level 3`] = ` +exports[`normalize options > multi compiler client.logging should respect infrastructureLogging.level 3`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -1155,7 +1153,7 @@ exports[`normalize options multi compiler client.logging should respect infrastr } `; -exports[`normalize options multi compiler watchOptions is set 1`] = ` +exports[`normalize options > multi compiler watchOptions is set 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -1209,7 +1207,7 @@ exports[`normalize options multi compiler watchOptions is set 1`] = ` } `; -exports[`normalize options no options 1`] = ` +exports[`normalize options > no options 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -1263,7 +1261,7 @@ exports[`normalize options no options 1`] = ` } `; -exports[`normalize options port string 1`] = ` +exports[`normalize options > port string 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -1317,7 +1315,7 @@ exports[`normalize options port string 1`] = ` } `; -exports[`normalize options single compiler client.logging should default to infrastructureLogging.level 1`] = ` +exports[`normalize options > single compiler client.logging should default to infrastructureLogging.level 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -1371,7 +1369,7 @@ exports[`normalize options single compiler client.logging should default to infr } `; -exports[`normalize options single compiler client.logging should override to infrastructureLogging.level 1`] = ` +exports[`normalize options > single compiler client.logging should override to infrastructureLogging.level 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -1425,7 +1423,7 @@ exports[`normalize options single compiler client.logging should override to inf } `; -exports[`normalize options single compiler watchOptions is object 1`] = ` +exports[`normalize options > single compiler watchOptions is object 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -1479,7 +1477,7 @@ exports[`normalize options single compiler watchOptions is object 1`] = ` } `; -exports[`normalize options single compiler watchOptions is object with static watch overriding it 1`] = ` +exports[`normalize options > single compiler watchOptions is object with static watch overriding it 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -1534,7 +1532,7 @@ exports[`normalize options single compiler watchOptions is object with static wa } `; -exports[`normalize options single compiler watchOptions is object with static watch true 1`] = ` +exports[`normalize options > single compiler watchOptions is object with static watch true 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -1588,7 +1586,7 @@ exports[`normalize options single compiler watchOptions is object with static wa } `; -exports[`normalize options single compiler watchOptions is object with watch false 1`] = ` +exports[`normalize options > single compiler watchOptions is object with watch false 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -1642,7 +1640,7 @@ exports[`normalize options single compiler watchOptions is object with watch fal } `; -exports[`normalize options static is an array of static objects 1`] = ` +exports[`normalize options > static is an array of static objects 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -1715,7 +1713,7 @@ exports[`normalize options static is an array of static objects 1`] = ` } `; -exports[`normalize options static is an array of strings 1`] = ` +exports[`normalize options > static is an array of strings 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -1788,7 +1786,7 @@ exports[`normalize options static is an array of strings 1`] = ` } `; -exports[`normalize options static is an array of strings and static objects 1`] = ` +exports[`normalize options > static is an array of strings and static objects 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -1861,7 +1859,7 @@ exports[`normalize options static is an array of strings and static objects 1`] } `; -exports[`normalize options static is an object 1`] = ` +exports[`normalize options > static is an object 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -1915,7 +1913,7 @@ exports[`normalize options static is an object 1`] = ` } `; -exports[`normalize options static is an object with staticOptions 1`] = ` +exports[`normalize options > static is an object with staticOptions 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -1972,7 +1970,7 @@ exports[`normalize options static is an object with staticOptions 1`] = ` } `; -exports[`normalize options static is false 1`] = ` +exports[`normalize options > static is false 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -2006,7 +2004,7 @@ exports[`normalize options static is false 1`] = ` } `; -exports[`normalize options static is string 1`] = ` +exports[`normalize options > static is string 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -2060,7 +2058,7 @@ exports[`normalize options static is string 1`] = ` } `; -exports[`normalize options static is true 1`] = ` +exports[`normalize options > static is true 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -2114,7 +2112,7 @@ exports[`normalize options static is true 1`] = ` } `; -exports[`normalize options static publicPath is a string 1`] = ` +exports[`normalize options > static publicPath is a string 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -2168,7 +2166,7 @@ exports[`normalize options static publicPath is a string 1`] = ` } `; -exports[`normalize options static publicPath is an array 1`] = ` +exports[`normalize options > static publicPath is an array 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -2223,7 +2221,7 @@ exports[`normalize options static publicPath is an array 1`] = ` } `; -exports[`normalize options static serveIndex is an object more options 1`] = ` +exports[`normalize options > static serveIndex is an object more options 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -2280,7 +2278,7 @@ exports[`normalize options static serveIndex is an object more options 1`] = ` } `; -exports[`normalize options static serveIndex is an object with icons false 1`] = ` +exports[`normalize options > static serveIndex is an object with icons false 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -2334,7 +2332,7 @@ exports[`normalize options static serveIndex is an object with icons false 1`] = } `; -exports[`normalize options static serveIndex is false 1`] = ` +exports[`normalize options > static serveIndex is false 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -2386,7 +2384,7 @@ exports[`normalize options static serveIndex is false 1`] = ` } `; -exports[`normalize options static serveIndex is true 1`] = ` +exports[`normalize options > static serveIndex is true 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -2440,7 +2438,7 @@ exports[`normalize options static serveIndex is true 1`] = ` } `; -exports[`normalize options static watch is an object 1`] = ` +exports[`normalize options > static watch is an object 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -2495,7 +2493,7 @@ exports[`normalize options static watch is an object 1`] = ` } `; -exports[`normalize options static watch is false 1`] = ` +exports[`normalize options > static watch is false 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -2541,7 +2539,7 @@ exports[`normalize options static watch is false 1`] = ` } `; -exports[`normalize options static watch is true 1`] = ` +exports[`normalize options > static watch is true 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -2595,7 +2593,7 @@ exports[`normalize options static watch is true 1`] = ` } `; -exports[`normalize options username and password 1`] = ` +exports[`normalize options > username and password 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -2652,7 +2650,7 @@ exports[`normalize options username and password 1`] = ` } `; -exports[`normalize options webSocketServer custom server class 1`] = ` +exports[`normalize options > webSocketServer custom server class 1`] = ` { "allowedHosts": "auto", "bonjour": false, @@ -2706,7 +2704,7 @@ exports[`normalize options webSocketServer custom server class 1`] = ` } `; -exports[`normalize options webSocketServer custom server path 1`] = ` +exports[`normalize options > webSocketServer custom server path 1`] = ` { "allowedHosts": "auto", "bonjour": false, diff --git a/test/__snapshots__/validate-options.test.js.snap.webpack5 b/test/__snapshots__/validate-options.test.js.snap.webpack5 index f00fa55646..43dbda2f6b 100644 --- a/test/__snapshots__/validate-options.test.js.snap.webpack5 +++ b/test/__snapshots__/validate-options.test.js.snap.webpack5 @@ -1,16 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`options validate should throw an error on the "allowedHosts" option with '[""]' value 1`] = ` -"ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - - options.allowedHosts[0] should be a non-empty string." -`; - -exports[`options validate should throw an error on the "allowedHosts" option with '[]' value 1`] = ` -"ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - - options.allowedHosts should be a non-empty array." -`; - -exports[`options validate should throw an error on the "allowedHosts" option with '123' value 1`] = ` +exports[`options > validate > should throw an error on the "allowedHosts" option with '123' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.allowedHosts should be one of these: [non-empty string, ...] (should not have fewer than 1 item) | "auto" | "all" | non-empty string @@ -24,7 +12,17 @@ exports[`options validate should throw an error on the "allowedHosts" option wit * options.allowedHosts should be a non-empty string." `; -exports[`options validate should throw an error on the "allowedHosts" option with 'false' value 1`] = ` +exports[`options > validate > should throw an error on the "allowedHosts" option with '[""]' value 1`] = ` +"ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. + - options.allowedHosts[0] should be a non-empty string." +`; + +exports[`options > validate > should throw an error on the "allowedHosts" option with '[]' value 1`] = ` +"ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. + - options.allowedHosts should be a non-empty array." +`; + +exports[`options > validate > should throw an error on the "allowedHosts" option with 'false' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.allowedHosts should be one of these: [non-empty string, ...] (should not have fewer than 1 item) | "auto" | "all" | non-empty string @@ -38,7 +36,7 @@ exports[`options validate should throw an error on the "allowedHosts" option wit * options.allowedHosts should be a non-empty string." `; -exports[`options validate should throw an error on the "allowedHosts" option with 'true' value 1`] = ` +exports[`options > validate > should throw an error on the "allowedHosts" option with 'true' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.allowedHosts should be one of these: [non-empty string, ...] (should not have fewer than 1 item) | "auto" | "all" | non-empty string @@ -52,21 +50,21 @@ exports[`options validate should throw an error on the "allowedHosts" option wit * options.allowedHosts should be a non-empty string." `; -exports[`options validate should throw an error on the "app" option with 'false' value 1`] = ` +exports[`options > validate > should throw an error on the "app" option with 'false' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.app should be an instance of function. -> Allows to use custom applications, such as 'connect', 'fastify', etc. -> Read more at https://webpack.js.org/configuration/dev-server/#devserverapp" `; -exports[`options validate should throw an error on the "app" option with 'test' value 1`] = ` +exports[`options > validate > should throw an error on the "app" option with 'test' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.app should be an instance of function. -> Allows to use custom applications, such as 'connect', 'fastify', etc. -> Read more at https://webpack.js.org/configuration/dev-server/#devserverapp" `; -exports[`options validate should throw an error on the "bonjour" option with '' value 1`] = ` +exports[`options > validate > should throw an error on the "bonjour" option with '' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.bonjour should be one of these: boolean | object { … } @@ -80,7 +78,19 @@ exports[`options validate should throw an error on the "bonjour" option with '' -> Read more at https://github.com/watson/bonjour#initializing" `; -exports[`options validate should throw an error on the "client" option with '{"logging":"silent"}' value 1`] = ` +exports[`options > validate > should throw an error on the "client" option with 'whoops!' value 1`] = ` +"ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. + - options.client should be one of these: + false | object { logging?, overlay?, progress?, reconnect?, webSocketTransport?, webSocketURL? } + -> Allows to specify options for client script in the browser or disable client script. + -> Read more at https://webpack.js.org/configuration/dev-server/#devserverclient + Details: + * options.client should be false. + * options.client should be an object: + object { logging?, overlay?, progress?, reconnect?, webSocketTransport?, webSocketURL? }" +`; + +exports[`options > validate > should throw an error on the "client" option with '{"logging":"silent"}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.client.logging should be one of these: "none" | "error" | "warn" | "info" | "log" | "verbose" @@ -88,7 +98,7 @@ exports[`options validate should throw an error on the "client" option with '{"l -> Read more at https://webpack.js.org/configuration/dev-server/#logging" `; -exports[`options validate should throw an error on the "client" option with '{"logging":"whoops!"}' value 1`] = ` +exports[`options > validate > should throw an error on the "client" option with '{"logging":"whoops!"}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.client.logging should be one of these: "none" | "error" | "warn" | "info" | "log" | "verbose" @@ -96,7 +106,7 @@ exports[`options validate should throw an error on the "client" option with '{"l -> Read more at https://webpack.js.org/configuration/dev-server/#logging" `; -exports[`options validate should throw an error on the "client" option with '{"overlay":""}' value 1`] = ` +exports[`options > validate > should throw an error on the "client" option with '{"overlay":""}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.client should be one of these: false | object { logging?, overlay?, progress?, reconnect?, webSocketTransport?, webSocketURL? } @@ -113,13 +123,13 @@ exports[`options validate should throw an error on the "client" option with '{"o object { errors?, warnings?, runtimeErrors?, trustedTypesPolicyName? }" `; -exports[`options validate should throw an error on the "client" option with '{"overlay":{"arbitrary":""}}' value 1`] = ` +exports[`options > validate > should throw an error on the "client" option with '{"overlay":{"arbitrary":""}}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.client.overlay has an unknown property 'arbitrary'. These properties are valid: object { errors?, warnings?, runtimeErrors?, trustedTypesPolicyName? }" `; -exports[`options validate should throw an error on the "client" option with '{"overlay":{"errors":""}}' value 1`] = ` +exports[`options > validate > should throw an error on the "client" option with '{"overlay":{"errors":""}}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.client should be one of these: false | object { logging?, overlay?, progress?, reconnect?, webSocketTransport?, webSocketURL? } @@ -135,7 +145,7 @@ exports[`options validate should throw an error on the "client" option with '{"o -> Filter compiler errors. Return true to include and return false to exclude." `; -exports[`options validate should throw an error on the "client" option with '{"overlay":{"warnings":""}}' value 1`] = ` +exports[`options > validate > should throw an error on the "client" option with '{"overlay":{"warnings":""}}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.client should be one of these: false | object { logging?, overlay?, progress?, reconnect?, webSocketTransport?, webSocketURL? } @@ -151,7 +161,7 @@ exports[`options validate should throw an error on the "client" option with '{"o -> Filter compiler warnings. Return true to include and return false to exclude." `; -exports[`options validate should throw an error on the "client" option with '{"progress":""}' value 1`] = ` +exports[`options > validate > should throw an error on the "client" option with '{"progress":""}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.client.progress should be one of these: true | false | "linear" | "circular" @@ -159,7 +169,7 @@ exports[`options validate should throw an error on the "client" option with '{"p -> Read more at https://webpack.js.org/configuration/dev-server/#progress" `; -exports[`options validate should throw an error on the "client" option with '{"reconnect":""}' value 1`] = ` +exports[`options > validate > should throw an error on the "client" option with '{"reconnect":""}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.client should be one of these: false | object { logging?, overlay?, progress?, reconnect?, webSocketTransport?, webSocketURL? } @@ -175,13 +185,13 @@ exports[`options validate should throw an error on the "client" option with '{"r * options.client.reconnect should be a number (should be >= 0)." `; -exports[`options validate should throw an error on the "client" option with '{"unknownOption":true}' value 1`] = ` +exports[`options > validate > should throw an error on the "client" option with '{"unknownOption":true}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.client has an unknown property 'unknownOption'. These properties are valid: object { logging?, overlay?, progress?, reconnect?, webSocketTransport?, webSocketURL? }" `; -exports[`options validate should throw an error on the "client" option with '{"webSocketTransport":true}' value 1`] = ` +exports[`options > validate > should throw an error on the "client" option with '{"webSocketTransport":true}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.client should be one of these: false | object { logging?, overlay?, progress?, reconnect?, webSocketTransport?, webSocketURL? } @@ -197,30 +207,30 @@ exports[`options validate should throw an error on the "client" option with '{"w * options.client.webSocketTransport should be a non-empty string." `; -exports[`options validate should throw an error on the "client" option with '{"webSocketURL":{"hostname":""}}' value 1`] = ` +exports[`options > validate > should throw an error on the "client" option with '{"webSocketURL":{"hostname":""}}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.client.webSocketURL.hostname should be a non-empty string. -> Tells clients connected to devServer to use the provided hostname." `; -exports[`options validate should throw an error on the "client" option with '{"webSocketURL":{"hostname":true,"pathname":"","port":8080}}' value 1`] = ` +exports[`options > validate > should throw an error on the "client" option with '{"webSocketURL":{"hostname":true,"pathname":"","port":8080}}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.client.webSocketURL.hostname should be a non-empty string. -> Tells clients connected to devServer to use the provided hostname." `; -exports[`options validate should throw an error on the "client" option with '{"webSocketURL":{"pathname":true}}' value 1`] = ` +exports[`options > validate > should throw an error on the "client" option with '{"webSocketURL":{"pathname":true}}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.client.webSocketURL.pathname should be a string. -> Tells clients connected to devServer to use the provided path to connect." `; -exports[`options validate should throw an error on the "client" option with '{"webSocketURL":{"port":""}}' value 1`] = ` +exports[`options > validate > should throw an error on the "client" option with '{"webSocketURL":{"port":""}}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.client.webSocketURL.port should be a non-empty string." `; -exports[`options validate should throw an error on the "client" option with '{"webSocketURL":{"port":true}}' value 1`] = ` +exports[`options > validate > should throw an error on the "client" option with '{"webSocketURL":{"port":true}}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.client should be one of these: false | object { logging?, overlay?, progress?, reconnect?, webSocketTransport?, webSocketURL? } @@ -235,7 +245,7 @@ exports[`options validate should throw an error on the "client" option with '{"w * options.client.webSocketURL.port should be a non-empty string." `; -exports[`options validate should throw an error on the "client" option with '{"webSocketURL":{"username":123,"password":976}}' value 1`] = ` +exports[`options > validate > should throw an error on the "client" option with '{"webSocketURL":{"username":123,"password":976}}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.client should be one of these: false | object { logging?, overlay?, progress?, reconnect?, webSocketTransport?, webSocketURL? } @@ -248,26 +258,14 @@ exports[`options validate should throw an error on the "client" option with '{"w -> Tells clients connected to devServer to use the provided username to authenticate." `; -exports[`options validate should throw an error on the "client" option with 'whoops!' value 1`] = ` -"ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - - options.client should be one of these: - false | object { logging?, overlay?, progress?, reconnect?, webSocketTransport?, webSocketURL? } - -> Allows to specify options for client script in the browser or disable client script. - -> Read more at https://webpack.js.org/configuration/dev-server/#devserverclient - Details: - * options.client should be false. - * options.client should be an object: - object { logging?, overlay?, progress?, reconnect?, webSocketTransport?, webSocketURL? }" -`; - -exports[`options validate should throw an error on the "compress" option with '' value 1`] = ` +exports[`options > validate > should throw an error on the "compress" option with '' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.compress should be a boolean. -> Enables gzip compression for everything served. -> Read more at https://webpack.js.org/configuration/dev-server/#devservercompress" `; -exports[`options validate should throw an error on the "devMiddleware" option with '' value 1`] = ` +exports[`options > validate > should throw an error on the "devMiddleware" option with '' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.devMiddleware should be an object: object { … } @@ -275,18 +273,7 @@ exports[`options validate should throw an error on the "devMiddleware" option wi -> Read more at https://webpack.js.org/configuration/dev-server/#devserverdevmiddleware" `; -exports[`options validate should throw an error on the "headers" option with '[]' value 1`] = ` -"ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - - options.headers should be a non-empty array." -`; - -exports[`options validate should throw an error on the "headers" option with '[{"foo":"bar"}]' value 1`] = ` -"ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - - options.headers[0] has an unknown property 'foo'. These properties are valid: - object { key?, value? }" -`; - -exports[`options validate should throw an error on the "headers" option with '1' value 1`] = ` +exports[`options > validate > should throw an error on the "headers" option with '1' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.headers should be one of these: [object { key?, value? }, ...] (should not have fewer than 1 item) | object { … } | function @@ -300,7 +287,18 @@ exports[`options validate should throw an error on the "headers" option with '1' * options.headers should be an instance of function." `; -exports[`options validate should throw an error on the "headers" option with 'false' value 1`] = ` +exports[`options > validate > should throw an error on the "headers" option with '[]' value 1`] = ` +"ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. + - options.headers should be a non-empty array." +`; + +exports[`options > validate > should throw an error on the "headers" option with '[{"foo":"bar"}]' value 1`] = ` +"ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. + - options.headers[0] has an unknown property 'foo'. These properties are valid: + object { key?, value? }" +`; + +exports[`options > validate > should throw an error on the "headers" option with 'false' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.headers should be one of these: [object { key?, value? }, ...] (should not have fewer than 1 item) | object { … } | function @@ -314,7 +312,7 @@ exports[`options validate should throw an error on the "headers" option with 'fa * options.headers should be an instance of function." `; -exports[`options validate should throw an error on the "historyApiFallback" option with '' value 1`] = ` +exports[`options > validate > should throw an error on the "historyApiFallback" option with '' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.historyApiFallback should be one of these: boolean | object { … } @@ -328,12 +326,12 @@ exports[`options validate should throw an error on the "historyApiFallback" opti -> Read more at https://github.com/bripkens/connect-history-api-fallback#options" `; -exports[`options validate should throw an error on the "host" option with '' value 1`] = ` +exports[`options > validate > should throw an error on the "host" option with '' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.host should be a non-empty string." `; -exports[`options validate should throw an error on the "host" option with 'false' value 1`] = ` +exports[`options > validate > should throw an error on the "host" option with 'false' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.host should be one of these: "local-ip" | "local-ipv4" | "local-ipv6" | non-empty string @@ -345,7 +343,7 @@ exports[`options validate should throw an error on the "host" option with 'false * options.host should be a non-empty string." `; -exports[`options validate should throw an error on the "host" option with 'null' value 1`] = ` +exports[`options > validate > should throw an error on the "host" option with 'null' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.host should be one of these: "local-ip" | "local-ipv4" | "local-ipv6" | non-empty string @@ -357,7 +355,7 @@ exports[`options validate should throw an error on the "host" option with 'null' * options.host should be a non-empty string." `; -exports[`options validate should throw an error on the "hot" option with '' value 1`] = ` +exports[`options > validate > should throw an error on the "hot" option with '' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.hot should be one of these: boolean | "only" @@ -368,7 +366,7 @@ exports[`options validate should throw an error on the "hot" option with '' valu * options.hot should be "only"." `; -exports[`options validate should throw an error on the "hot" option with 'foo' value 1`] = ` +exports[`options > validate > should throw an error on the "hot" option with 'foo' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.hot should be one of these: boolean | "only" @@ -379,7 +377,7 @@ exports[`options validate should throw an error on the "hot" option with 'foo' v * options.hot should be "only"." `; -exports[`options validate should throw an error on the "ipc" option with '{}' value 1`] = ` +exports[`options > validate > should throw an error on the "ipc" option with 'false' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.ipc should be one of these: non-empty string | true @@ -387,11 +385,10 @@ exports[`options validate should throw an error on the "ipc" option with '{}' va -> Read more at https://webpack.js.org/configuration/dev-server/#devserveripc Details: * options.ipc should be a non-empty string. - * options.ipc should be a true. * options.ipc should be true." `; -exports[`options validate should throw an error on the "ipc" option with 'false' value 1`] = ` +exports[`options > validate > should throw an error on the "ipc" option with '{}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.ipc should be one of these: non-empty string | true @@ -399,29 +396,30 @@ exports[`options validate should throw an error on the "ipc" option with 'false' -> Read more at https://webpack.js.org/configuration/dev-server/#devserveripc Details: * options.ipc should be a non-empty string. + * options.ipc should be a true. * options.ipc should be true." `; -exports[`options validate should throw an error on the "liveReload" option with 'invalid' value 1`] = ` +exports[`options > validate > should throw an error on the "liveReload" option with 'invalid' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.liveReload should be a boolean. -> Enables reload/refresh the page(s) when file changes are detected (enabled by default). -> Read more at https://webpack.js.org/configuration/dev-server/#devserverlivereload" `; -exports[`options validate should throw an error on the "onListening" option with '' value 1`] = ` +exports[`options > validate > should throw an error on the "onListening" option with '' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.onListening should be an instance of function. -> Provides the ability to execute a custom function when dev server starts listening. -> Read more at https://webpack.js.org/configuration/dev-server/#devserveronlistening" `; -exports[`options validate should throw an error on the "open" option with '' value 1`] = ` +exports[`options > validate > should throw an error on the "open" option with '' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.open should be a non-empty string." `; -exports[`options validate should throw an error on the "open" option with '{"app":true}' value 1`] = ` +exports[`options > validate > should throw an error on the "open" option with '{"app":true}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.open should be one of these: [non-empty string | object { target?, app? }, ...] | boolean | non-empty string | object { target?, app? } @@ -438,13 +436,13 @@ exports[`options validate should throw an error on the "open" option with '{"app -> Open specified browser." `; -exports[`options validate should throw an error on the "open" option with '{"foo":"bar"}' value 1`] = ` +exports[`options > validate > should throw an error on the "open" option with '{"foo":"bar"}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.open has an unknown property 'foo'. These properties are valid: object { target?, app? }" `; -exports[`options validate should throw an error on the "open" option with '{"target":90}' value 1`] = ` +exports[`options > validate > should throw an error on the "open" option with '{"target":90}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.open should be one of these: [non-empty string | object { target?, app? }, ...] | boolean | non-empty string | object { target?, app? } @@ -460,22 +458,22 @@ exports[`options validate should throw an error on the "open" option with '{"tar * options.open.target should be a string." `; -exports[`options validate should throw an error on the "port" option with '' value 1`] = ` +exports[`options > validate > should throw an error on the "port" option with '' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.port should be a non-empty string." `; -exports[`options validate should throw an error on the "port" option with '-1' value 1`] = ` +exports[`options > validate > should throw an error on the "port" option with '-1' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.port should be >= 0 and <= 65535." `; -exports[`options validate should throw an error on the "port" option with '65536' value 1`] = ` +exports[`options > validate > should throw an error on the "port" option with '65536' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.port should be >= 0 and <= 65535." `; -exports[`options validate should throw an error on the "port" option with 'false' value 1`] = ` +exports[`options > validate > should throw an error on the "port" option with 'false' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.port should be one of these: number (should be >= 0 and <= 65535) | non-empty string | "auto" @@ -487,7 +485,7 @@ exports[`options validate should throw an error on the "port" option with 'false * options.port should be "auto"." `; -exports[`options validate should throw an error on the "port" option with 'null' value 1`] = ` +exports[`options > validate > should throw an error on the "port" option with 'null' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.port should be one of these: number (should be >= 0 and <= 65535) | non-empty string | "auto" @@ -499,7 +497,7 @@ exports[`options validate should throw an error on the "port" option with 'null' * options.port should be "auto"." `; -exports[`options validate should throw an error on the "proxy" option with '() => {}' value 1`] = ` +exports[`options > validate > should throw an error on the "proxy" option with '() => {}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.proxy should be an array: [object { … } | function, ...] @@ -507,7 +505,7 @@ exports[`options validate should throw an error on the "proxy" option with '() = -> Read more at https://webpack.js.org/configuration/dev-server/#devserverproxy" `; -exports[`options validate should throw an error on the "proxy" option with '{"/api":"http://localhost:3000"}' value 1`] = ` +exports[`options > validate > should throw an error on the "proxy" option with 'false' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.proxy should be an array: [object { … } | function, ...] @@ -515,7 +513,7 @@ exports[`options validate should throw an error on the "proxy" option with '{"/a -> Read more at https://webpack.js.org/configuration/dev-server/#devserverproxy" `; -exports[`options validate should throw an error on the "proxy" option with 'false' value 1`] = ` +exports[`options > validate > should throw an error on the "proxy" option with '{"/api":"http://localhost:3000"}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.proxy should be an array: [object { … } | function, ...] @@ -523,13 +521,13 @@ exports[`options validate should throw an error on the "proxy" option with 'fals -> Read more at https://webpack.js.org/configuration/dev-server/#devserverproxy" `; -exports[`options validate should throw an error on the "server" option with '{"type":"https","additional":"test"}' value 1`] = ` +exports[`options > validate > should throw an error on the "server" option with '{"type":"https","additional":"test"}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.server has an unknown property 'additional'. These properties are valid: object { type?, options? }" `; -exports[`options validate should throw an error on the "server" option with '{"type":"https","options":{"ca":true}}' value 1`] = ` +exports[`options > validate > should throw an error on the "server" option with '{"type":"https","options":{"ca":true}}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.server should be one of these: "http" | "https" | "http2" | function | non-empty string | object { type?, options? } @@ -546,7 +544,7 @@ exports[`options validate should throw an error on the "server" option with '{"t * options.server.options.ca should be an instance of Buffer." `; -exports[`options validate should throw an error on the "server" option with '{"type":"https","options":{"cert":true}}' value 1`] = ` +exports[`options > validate > should throw an error on the "server" option with '{"type":"https","options":{"cert":true}}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.server should be one of these: "http" | "https" | "http2" | function | non-empty string | object { type?, options? } @@ -563,7 +561,7 @@ exports[`options validate should throw an error on the "server" option with '{"t * options.server.options.cert should be an instance of Buffer." `; -exports[`options validate should throw an error on the "server" option with '{"type":"https","options":{"key":10}}' value 1`] = ` +exports[`options > validate > should throw an error on the "server" option with '{"type":"https","options":{"key":10}}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.server should be one of these: "http" | "https" | "http2" | function | non-empty string | object { type?, options? } @@ -580,13 +578,13 @@ exports[`options validate should throw an error on the "server" option with '{"t * options.server.options.key should be an instance of Buffer." `; -exports[`options validate should throw an error on the "server" option with '{"type":"https","options":{"passphrase":false}}' value 1`] = ` +exports[`options > validate > should throw an error on the "server" option with '{"type":"https","options":{"passphrase":false}}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.server.options.passphrase should be a string. -> Passphrase for a pfx file." `; -exports[`options validate should throw an error on the "server" option with '{"type":"https","options":{"pfx":10}}' value 1`] = ` +exports[`options > validate > should throw an error on the "server" option with '{"type":"https","options":{"pfx":10}}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.server should be one of these: "http" | "https" | "http2" | function | non-empty string | object { type?, options? } @@ -603,46 +601,76 @@ exports[`options validate should throw an error on the "server" option with '{"t * options.server.options.pfx should be an instance of Buffer." `; -exports[`options validate should throw an error on the "server" option with '{"type":"https","options":{"requestCert":"false"}}' value 1`] = ` +exports[`options > validate > should throw an error on the "server" option with '{"type":"https","options":{"requestCert":"false"}}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.server.options.requestCert should be a boolean. -> Request for an SSL certificate." `; -exports[`options validate should throw an error on the "setupMiddlewares" option with '10' value 1`] = ` +exports[`options > validate > should throw an error on the "setupMiddlewares" option with '10' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.setupMiddlewares should be an instance of function. -> Provides the ability to execute a custom function and apply custom middleware(s). -> Read more at https://webpack.js.org/configuration/dev-server/#devserversetupmiddlewares" `; -exports[`options validate should throw an error on the "setupMiddlewares" option with 'false' value 1`] = ` +exports[`options > validate > should throw an error on the "setupMiddlewares" option with 'false' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.setupMiddlewares should be an instance of function. -> Provides the ability to execute a custom function and apply custom middleware(s). -> Read more at https://webpack.js.org/configuration/dev-server/#devserversetupmiddlewares" `; -exports[`options validate should throw an error on the "setupMiddlewares" option with 'true' value 1`] = ` +exports[`options > validate > should throw an error on the "setupMiddlewares" option with 'true' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.setupMiddlewares should be an instance of function. -> Provides the ability to execute a custom function and apply custom middleware(s). -> Read more at https://webpack.js.org/configuration/dev-server/#devserversetupmiddlewares" `; -exports[`options validate should throw an error on the "static" option with '' value 1`] = ` +exports[`options > validate > should throw an error on the "static" option with '' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.static should be a non-empty string." `; -exports[`options validate should throw an error on the "static" option with '{"directory":false}' value 1`] = ` +exports[`options > validate > should throw an error on the "static" option with '0' value 1`] = ` +"ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. + - options.static should be one of these: + [non-empty string | object { directory?, staticOptions?, publicPath?, serveIndex?, watch? }, ...] | boolean | non-empty string | object { directory?, staticOptions?, publicPath?, serveIndex?, watch? } + -> Allows to configure options for serving static files from directory (by default 'public' directory). + -> Read more at https://webpack.js.org/configuration/dev-server/#devserverstatic + Details: + * options.static should be an array: + [non-empty string | object { directory?, staticOptions?, publicPath?, serveIndex?, watch? }, ...] + * options.static should be a boolean. + * options.static should be a non-empty string. + * options.static should be an object: + object { directory?, staticOptions?, publicPath?, serveIndex?, watch? }" +`; + +exports[`options > validate > should throw an error on the "static" option with 'null' value 1`] = ` +"ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. + - options.static should be one of these: + [non-empty string | object { directory?, staticOptions?, publicPath?, serveIndex?, watch? }, ...] | boolean | non-empty string | object { directory?, staticOptions?, publicPath?, serveIndex?, watch? } + -> Allows to configure options for serving static files from directory (by default 'public' directory). + -> Read more at https://webpack.js.org/configuration/dev-server/#devserverstatic + Details: + * options.static should be an array: + [non-empty string | object { directory?, staticOptions?, publicPath?, serveIndex?, watch? }, ...] + * options.static should be a boolean. + * options.static should be a non-empty string. + * options.static should be an object: + object { directory?, staticOptions?, publicPath?, serveIndex?, watch? }" +`; + +exports[`options > validate > should throw an error on the "static" option with '{"directory":false}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.static.directory should be a non-empty string. -> Directory for static contents. -> Read more at https://webpack.js.org/configuration/dev-server/#directory" `; -exports[`options validate should throw an error on the "static" option with '{"publicPath":false}' value 1`] = ` +exports[`options > validate > should throw an error on the "static" option with '{"publicPath":false}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.static should be one of these: [non-empty string | object { directory?, staticOptions?, publicPath?, serveIndex?, watch? }, ...] | boolean | non-empty string | object { directory?, staticOptions?, publicPath?, serveIndex?, watch? } @@ -659,7 +687,7 @@ exports[`options validate should throw an error on the "static" option with '{"p * options.static.publicPath should be a string." `; -exports[`options validate should throw an error on the "static" option with '{"serveIndex":"true"}' value 1`] = ` +exports[`options > validate > should throw an error on the "static" option with '{"serveIndex":"true"}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.static should be one of these: [non-empty string | object { directory?, staticOptions?, publicPath?, serveIndex?, watch? }, ...] | boolean | non-empty string | object { directory?, staticOptions?, publicPath?, serveIndex?, watch? } @@ -676,7 +704,7 @@ exports[`options validate should throw an error on the "static" option with '{"s object { … }" `; -exports[`options validate should throw an error on the "static" option with '{"watch":10}' value 1`] = ` +exports[`options > validate > should throw an error on the "static" option with '{"watch":10}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.static should be one of these: [non-empty string | object { directory?, staticOptions?, publicPath?, serveIndex?, watch? }, ...] | boolean | non-empty string | object { directory?, staticOptions?, publicPath?, serveIndex?, watch? } @@ -695,37 +723,35 @@ exports[`options validate should throw an error on the "static" option with '{"w -> Read more at https://github.com/paulmillr/chokidar#api" `; -exports[`options validate should throw an error on the "static" option with '0' value 1`] = ` +exports[`options > validate > should throw an error on the "watchFiles" option with '123' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - - options.static should be one of these: - [non-empty string | object { directory?, staticOptions?, publicPath?, serveIndex?, watch? }, ...] | boolean | non-empty string | object { directory?, staticOptions?, publicPath?, serveIndex?, watch? } - -> Allows to configure options for serving static files from directory (by default 'public' directory). - -> Read more at https://webpack.js.org/configuration/dev-server/#devserverstatic + - options.watchFiles should be one of these: + [non-empty string | object { paths?, options? }, ...] | non-empty string | object { paths?, options? } + -> Allows to configure list of globs/directories/files to watch for file changes. + -> Read more at https://webpack.js.org/configuration/dev-server/#devserverwatchfiles Details: - * options.static should be an array: - [non-empty string | object { directory?, staticOptions?, publicPath?, serveIndex?, watch? }, ...] - * options.static should be a boolean. - * options.static should be a non-empty string. - * options.static should be an object: - object { directory?, staticOptions?, publicPath?, serveIndex?, watch? }" + * options.watchFiles should be an array: + [non-empty string | object { paths?, options? }, ...] + * options.watchFiles should be a non-empty string. + * options.watchFiles should be an object: + object { paths?, options? }" `; -exports[`options validate should throw an error on the "static" option with 'null' value 1`] = ` +exports[`options > validate > should throw an error on the "watchFiles" option with 'false' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - - options.static should be one of these: - [non-empty string | object { directory?, staticOptions?, publicPath?, serveIndex?, watch? }, ...] | boolean | non-empty string | object { directory?, staticOptions?, publicPath?, serveIndex?, watch? } - -> Allows to configure options for serving static files from directory (by default 'public' directory). - -> Read more at https://webpack.js.org/configuration/dev-server/#devserverstatic + - options.watchFiles should be one of these: + [non-empty string | object { paths?, options? }, ...] | non-empty string | object { paths?, options? } + -> Allows to configure list of globs/directories/files to watch for file changes. + -> Read more at https://webpack.js.org/configuration/dev-server/#devserverwatchfiles Details: - * options.static should be an array: - [non-empty string | object { directory?, staticOptions?, publicPath?, serveIndex?, watch? }, ...] - * options.static should be a boolean. - * options.static should be a non-empty string. - * options.static should be an object: - object { directory?, staticOptions?, publicPath?, serveIndex?, watch? }" + * options.watchFiles should be an array: + [non-empty string | object { paths?, options? }, ...] + * options.watchFiles should be a non-empty string. + * options.watchFiles should be an object: + object { paths?, options? }" `; -exports[`options validate should throw an error on the "watchFiles" option with '{"options":false}' value 1`] = ` +exports[`options > validate > should throw an error on the "watchFiles" option with '{"options":false}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.watchFiles.options should be an object: object { … } @@ -733,7 +759,7 @@ exports[`options validate should throw an error on the "watchFiles" option with -> Read more at https://github.com/paulmillr/chokidar#api" `; -exports[`options validate should throw an error on the "watchFiles" option with '{"paths":false}' value 1`] = ` +exports[`options > validate > should throw an error on the "watchFiles" option with '{"paths":false}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.watchFiles should be one of these: [non-empty string | object { paths?, options? }, ...] | non-empty string | object { paths?, options? } @@ -749,41 +775,49 @@ exports[`options validate should throw an error on the "watchFiles" option with * options.watchFiles.paths should be a non-empty string." `; -exports[`options validate should throw an error on the "watchFiles" option with '123' value 1`] = ` +exports[`options > validate > should throw an error on the "webSocketServer" option with 'null' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - - options.watchFiles should be one of these: - [non-empty string | object { paths?, options? }, ...] | non-empty string | object { paths?, options? } - -> Allows to configure list of globs/directories/files to watch for file changes. - -> Read more at https://webpack.js.org/configuration/dev-server/#devserverwatchfiles + - options.webSocketServer should be one of these: + false | "ws" | non-empty string | function | object { type?, options? } + -> Allows to set web socket server and options (by default 'ws'). + -> Read more at https://webpack.js.org/configuration/dev-server/#devserverwebsocketserver Details: - * options.watchFiles should be an array: - [non-empty string | object { paths?, options? }, ...] - * options.watchFiles should be a non-empty string. - * options.watchFiles should be an object: - object { paths?, options? }" + * options.webSocketServer should be one of these: + false | "ws" + Details: + * options.webSocketServer should be false. + * options.webSocketServer should be "ws". + * options.webSocketServer should be a non-empty string. + * options.webSocketServer should be an instance of function. + * options.webSocketServer should be an object: + object { type?, options? }" `; -exports[`options validate should throw an error on the "watchFiles" option with 'false' value 1`] = ` +exports[`options > validate > should throw an error on the "webSocketServer" option with 'true' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - - options.watchFiles should be one of these: - [non-empty string | object { paths?, options? }, ...] | non-empty string | object { paths?, options? } - -> Allows to configure list of globs/directories/files to watch for file changes. - -> Read more at https://webpack.js.org/configuration/dev-server/#devserverwatchfiles + - options.webSocketServer should be one of these: + false | "ws" | non-empty string | function | object { type?, options? } + -> Allows to set web socket server and options (by default 'ws'). + -> Read more at https://webpack.js.org/configuration/dev-server/#devserverwebsocketserver Details: - * options.watchFiles should be an array: - [non-empty string | object { paths?, options? }, ...] - * options.watchFiles should be a non-empty string. - * options.watchFiles should be an object: - object { paths?, options? }" + * options.webSocketServer should be one of these: + false | "ws" + Details: + * options.webSocketServer should be false. + * options.webSocketServer should be "ws". + * options.webSocketServer should be a non-empty string. + * options.webSocketServer should be an instance of function. + * options.webSocketServer should be an object: + object { type?, options? }" `; -exports[`options validate should throw an error on the "webSocketServer" option with '{"notAnOption":true}' value 1`] = ` +exports[`options > validate > should throw an error on the "webSocketServer" option with '{"notAnOption":true}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.webSocketServer has an unknown property 'notAnOption'. These properties are valid: object { type?, options? }" `; -exports[`options validate should throw an error on the "webSocketServer" option with '{"type":false}' value 1`] = ` +exports[`options > validate > should throw an error on the "webSocketServer" option with '{"type":false}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.webSocketServer should be one of these: false | "ws" | non-empty string | function | object { type?, options? } @@ -798,7 +832,7 @@ exports[`options validate should throw an error on the "webSocketServer" option * options.webSocketServer.type should be an instance of function." `; -exports[`options validate should throw an error on the "webSocketServer" option with '{"type":true}' value 1`] = ` +exports[`options > validate > should throw an error on the "webSocketServer" option with '{"type":true}' value 1`] = ` "ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options.webSocketServer should be one of these: false | "ws" | non-empty string | function | object { type?, options? } @@ -812,39 +846,3 @@ exports[`options validate should throw an error on the "webSocketServer" option * options.webSocketServer.type should be a non-empty string. * options.webSocketServer.type should be an instance of function." `; - -exports[`options validate should throw an error on the "webSocketServer" option with 'null' value 1`] = ` -"ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - - options.webSocketServer should be one of these: - false | "ws" | non-empty string | function | object { type?, options? } - -> Allows to set web socket server and options (by default 'ws'). - -> Read more at https://webpack.js.org/configuration/dev-server/#devserverwebsocketserver - Details: - * options.webSocketServer should be one of these: - false | "ws" - Details: - * options.webSocketServer should be false. - * options.webSocketServer should be "ws". - * options.webSocketServer should be a non-empty string. - * options.webSocketServer should be an instance of function. - * options.webSocketServer should be an object: - object { type?, options? }" -`; - -exports[`options validate should throw an error on the "webSocketServer" option with 'true' value 1`] = ` -"ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - - options.webSocketServer should be one of these: - false | "ws" | non-empty string | function | object { type?, options? } - -> Allows to set web socket server and options (by default 'ws'). - -> Read more at https://webpack.js.org/configuration/dev-server/#devserverwebsocketserver - Details: - * options.webSocketServer should be one of these: - false | "ws" - Details: - * options.webSocketServer should be false. - * options.webSocketServer should be "ws". - * options.webSocketServer should be a non-empty string. - * options.webSocketServer should be an instance of function. - * options.webSocketServer should be an object: - object { type?, options? }" -`; diff --git a/test/cli/__snapshots__/basic.test.js.snap.webpack5 b/test/cli/__snapshots__/basic.test.js.snap.webpack5 index eedd96b09d..d9198c24f1 100644 --- a/test/cli/__snapshots__/basic.test.js.snap.webpack5 +++ b/test/cli/__snapshots__/basic.test.js.snap.webpack5 @@ -1,6 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`basic basic should accept the promise function of webpack.config.js: stderr 1`] = ` +exports[`basic > basic > should accept the promise function of webpack.config.js 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -8,21 +6,21 @@ exports[`basic basic should accept the promise function of webpack.config.js: st [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`basic basic should work using "--host localhost --port ": stderr 1`] = ` +exports[`basic > basic > should work 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ + [webpack-dev-server] On Your Network (IPv4): http://:/ + [webpack-dev-server] On Your Network (IPv6): http://[]:/ [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`basic basic should work using multi compiler mode: stderr 1`] = ` +exports[`basic > basic > should work using "--host localhost --port " 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ - [webpack-dev-server] On Your Network (IPv4): http://:/ - [webpack-dev-server] On Your Network (IPv6): http://[]:/ [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`basic basic should work: stderr 1`] = ` +exports[`basic > basic > should work using multi compiler mode 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -30,7 +28,7 @@ exports[`basic basic should work: stderr 1`] = ` [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`basic should output help should generate correct cli flags 1`] = ` +exports[`basic > should output help > should generate correct cli flags 1`] = ` "Usage: webpack serve|server|s [entries...] [options] Run the webpack dev server and watch for source file changes while serving. diff --git a/test/cli/__snapshots__/bonjour-option.test.js.snap.webpack5 b/test/cli/__snapshots__/bonjour-option.test.js.snap.webpack5 index 98b5687372..bfbb3207cf 100644 --- a/test/cli/__snapshots__/bonjour-option.test.js.snap.webpack5 +++ b/test/cli/__snapshots__/bonjour-option.test.js.snap.webpack5 @@ -1,8 +1,5 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`"bonjour" CLI option should work using "--bonjour and --server-type=https" 1`] = ` -" [webpack-dev-server] Generating SSL certificate... - [webpack-dev-server] SSL certificate: /node_modules/.cache/webpack-dev-server/server.pem +exports[`"bonjour" CLI option > should work using "--bonjour and --server-type=https" 1`] = ` +" [webpack-dev-server] SSL certificate: /node_modules/.cache/webpack-dev-server/server.pem [webpack-dev-server] Project is running at: Loopback: https://localhost:/, https://:/, https://[]:/ [webpack-dev-server] On Your Network (IPv4): https://:/ @@ -11,7 +8,7 @@ exports[`"bonjour" CLI option should work using "--bonjour and --server-type=htt [webpack-dev-server] Broadcasting "https" with subtype of "webpack" via ZeroConf DNS (Bonjour)" `; -exports[`"bonjour" CLI option should work using "--bonjour" 1`] = ` +exports[`"bonjour" CLI option > should work using "--bonjour" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -20,7 +17,7 @@ exports[`"bonjour" CLI option should work using "--bonjour" 1`] = ` [webpack-dev-server] Broadcasting "http" with subtype of "webpack" via ZeroConf DNS (Bonjour)" `; -exports[`"bonjour" CLI option should work using "--no-bonjour" 1`] = ` +exports[`"bonjour" CLI option > should work using "--no-bonjour" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ diff --git a/test/cli/__snapshots__/colors.test.js.snap.webpack5 b/test/cli/__snapshots__/colors.test.js.snap.webpack5 index b507ff813f..fe59574bb5 100644 --- a/test/cli/__snapshots__/colors.test.js.snap.webpack5 +++ b/test/cli/__snapshots__/colors.test.js.snap.webpack5 @@ -1,6 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`colors should work and do not use colors using configuration with disabled colors: stderr 1`] = ` +exports[`colors > should work and do not use colors using configuration with disabled colors 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -8,7 +6,7 @@ exports[`colors should work and do not use colors using configuration with disab [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`colors should work do not use colors using "--no-color": stderr 1`] = ` +exports[`colors > should work do not use colors using "--no-color" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -16,7 +14,7 @@ exports[`colors should work do not use colors using "--no-color": stderr 1`] = ` [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`colors should work use colors by default: stderr 1`] = ` +exports[`colors > should work use colors by default 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -24,7 +22,7 @@ exports[`colors should work use colors by default: stderr 1`] = ` [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`colors should work use colors using "--color": stderr 1`] = ` +exports[`colors > should work use colors using "--color" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -32,7 +30,7 @@ exports[`colors should work use colors using "--color": stderr 1`] = ` [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`colors should work use colors using configuration with enabled colors: stderr 1`] = ` +exports[`colors > should work use colors using configuration with enabled colors 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ diff --git a/test/cli/__snapshots__/historyApiFallback-option.test.js.snap.webpack5 b/test/cli/__snapshots__/historyApiFallback-option.test.js.snap.webpack5 index bc6ae29da6..a3a2cddc06 100644 --- a/test/cli/__snapshots__/historyApiFallback-option.test.js.snap.webpack5 +++ b/test/cli/__snapshots__/historyApiFallback-option.test.js.snap.webpack5 @@ -1,6 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`"historyApiFallback" CLI option should work using "--history-api-fallback" 1`] = ` +exports[`"historyApiFallback" CLI option > should work using "--history-api-fallback" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -9,7 +7,7 @@ exports[`"historyApiFallback" CLI option should work using "--history-api-fallba [webpack-dev-server] 404s will fallback to '/index.html'" `; -exports[`"historyApiFallback" CLI option should work using "--no-history-api-fallback" 1`] = ` +exports[`"historyApiFallback" CLI option > should work using "--no-history-api-fallback" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ diff --git a/test/cli/__snapshots__/host-option.test.js.snap.webpack5 b/test/cli/__snapshots__/host-option.test.js.snap.webpack5 index db9cf49b4a..ccb658ce70 100644 --- a/test/cli/__snapshots__/host-option.test.js.snap.webpack5 +++ b/test/cli/__snapshots__/host-option.test.js.snap.webpack5 @@ -1,6 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`"host" CLI option should work using "--host ::" (IPv6): stderr 1`] = ` +exports[`"host" CLI option > should work using "--host 0.0.0.0" (IPv4) 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -8,45 +6,45 @@ exports[`"host" CLI option should work using "--host ::" (IPv6): stderr 1`] = ` [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"host" CLI option should work using "--host ::1" (IPv6): stderr 1`] = ` +exports[`"host" CLI option > should work using "--host 127.0.0.1" (IPv4) 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"host" CLI option should work using "--host ": stderr 1`] = ` +exports[`"host" CLI option > should work using "--host ::" (IPv6) 1`] = ` " [webpack-dev-server] Project is running at: + Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ + [webpack-dev-server] On Your Network (IPv6): http://[]:/ [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"host" CLI option should work using "--host 0.0.0.0" (IPv4): stderr 1`] = ` +exports[`"host" CLI option > should work using "--host ::1" (IPv6) 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ - [webpack-dev-server] On Your Network (IPv4): http://:/ - [webpack-dev-server] On Your Network (IPv6): http://[]:/ [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"host" CLI option should work using "--host 127.0.0.1" (IPv4): stderr 1`] = ` +exports[`"host" CLI option > should work using "--host " 1`] = ` " [webpack-dev-server] Project is running at: - Loopback: http://localhost:/, http://:/, http://[]:/ + [webpack-dev-server] On Your Network (IPv4): http://:/ [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"host" CLI option should work using "--host local-ip": stderr 1`] = ` +exports[`"host" CLI option > should work using "--host local-ip" 1`] = ` " [webpack-dev-server] Project is running at: [webpack-dev-server] On Your Network (IPv4): http://:/ [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"host" CLI option should work using "--host local-ipv4": stderr 1`] = ` +exports[`"host" CLI option > should work using "--host local-ipv4" 1`] = ` " [webpack-dev-server] Project is running at: [webpack-dev-server] On Your Network (IPv4): http://:/ [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"host" CLI option should work using "--host localhost": stderr 1`] = ` +exports[`"host" CLI option > should work using "--host localhost" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] Content not from webpack is served from '/public' directory" diff --git a/test/cli/__snapshots__/ipc-option.test.js.snap.webpack5 b/test/cli/__snapshots__/ipc-option.test.js.snap.webpack5 index 0eef347cf9..e32e695559 100644 --- a/test/cli/__snapshots__/ipc-option.test.js.snap.webpack5 +++ b/test/cli/__snapshots__/ipc-option.test.js.snap.webpack5 @@ -1,11 +1,9 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`"ipc" CLI option should work using "--ipc": stderr 1`] = ` +exports[`"ipc" CLI option > should work using "--ipc" 1`] = ` " [webpack-dev-server] Project is running at: "/webpack-dev-server.sock" [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"ipc" CLI option should work using "--ipc=": stderr 1`] = ` +exports[`"ipc" CLI option > should work using "--ipc=" 1`] = ` " [webpack-dev-server] Project is running at: "/webpack-dev-server.cli.sock" [webpack-dev-server] Content not from webpack is served from '/public' directory" `; diff --git a/test/cli/__snapshots__/port-option.test.js.snap.webpack5 b/test/cli/__snapshots__/port-option.test.js.snap.webpack5 index 5b4cc76e34..e9b950d2dd 100644 --- a/test/cli/__snapshots__/port-option.test.js.snap.webpack5 +++ b/test/cli/__snapshots__/port-option.test.js.snap.webpack5 @@ -1,6 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`"port" CLI option should work using "--port ": stderr 1`] = ` +exports[`"port" CLI option > should work using "--port " 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -8,7 +6,7 @@ exports[`"port" CLI option should work using "--port ": stderr 1`] = ` [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"port" CLI option should work using "--port auto": stderr 1`] = ` +exports[`"port" CLI option > should work using "--port auto" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ diff --git a/test/cli/__snapshots__/server-option.test.js.snap.webpack5 b/test/cli/__snapshots__/server-option.test.js.snap.webpack5 index 34f6afebb7..3205463969 100644 --- a/test/cli/__snapshots__/server-option.test.js.snap.webpack5 +++ b/test/cli/__snapshots__/server-option.test.js.snap.webpack5 @@ -1,8 +1,5 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`"server" CLI options should work using "--no-server-options-request-cert" 1`] = ` -" [webpack-dev-server] Generating SSL certificate... - [webpack-dev-server] SSL certificate: /node_modules/.cache/webpack-dev-server/server.pem +exports[`"server" CLI options > should work using "--no-server-options-request-cert" 1`] = ` +" [webpack-dev-server] SSL certificate: /node_modules/.cache/webpack-dev-server/server.pem [webpack-dev-server] Project is running at: Loopback: https://localhost:/, https://:/, https://[]:/ [webpack-dev-server] On Your Network (IPv4): https://:/ @@ -10,7 +7,7 @@ exports[`"server" CLI options should work using "--no-server-options-request-cer [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"server" CLI options should work using "--server-options-key --server-options-pfx --server-options-passphrase webpack-dev-server --server-options-cert --server-options-ca " 1`] = ` +exports[`"server" CLI options > should work using "--server-options-key --server-options-pfx --server-options-passphrase webpack-dev-server --server-options-cert --server-options-ca " 1`] = ` " [webpack-dev-server] Project is running at: Loopback: https://localhost:/, https://:/, https://[]:/ [webpack-dev-server] On Your Network (IPv4): https://:/ @@ -18,7 +15,7 @@ exports[`"server" CLI options should work using "--server-options-key --s [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"server" CLI options should work using "--server-options-key --server-options-pfx --server-options-passphrase webpack-dev-server --server-options-cert " 1`] = ` +exports[`"server" CLI options > should work using "--server-options-key --server-options-pfx --server-options-passphrase webpack-dev-server --server-options-cert " 1`] = ` " [webpack-dev-server] Project is running at: Loopback: https://localhost:/, https://:/, https://[]:/ [webpack-dev-server] On Your Network (IPv4): https://:/ @@ -26,7 +23,7 @@ exports[`"server" CLI options should work using "--server-options-key --s [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"server" CLI options should work using "--server-options-key-reset --server-options-key --server-options-pfx-reset --server-options-pfx --server-options-passphrase webpack-dev-server --server-options-cert-reset --server-options-cert --server-options-ca-reset --server-options-ca " 1`] = ` +exports[`"server" CLI options > should work using "--server-options-key-reset --server-options-key --server-options-pfx-reset --server-options-pfx --server-options-passphrase webpack-dev-server --server-options-cert-reset --server-options-cert --server-options-ca-reset --server-options-ca " 1`] = ` " [webpack-dev-server] Project is running at: Loopback: https://localhost:/, https://:/, https://[]:/ [webpack-dev-server] On Your Network (IPv4): https://:/ @@ -34,9 +31,8 @@ exports[`"server" CLI options should work using "--server-options-key-reset --se [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"server" CLI options should work using "--server-options-request-cert" 1`] = ` -" [webpack-dev-server] Generating SSL certificate... - [webpack-dev-server] SSL certificate: /node_modules/.cache/webpack-dev-server/server.pem +exports[`"server" CLI options > should work using "--server-options-request-cert" 1`] = ` +" [webpack-dev-server] SSL certificate: /node_modules/.cache/webpack-dev-server/server.pem [webpack-dev-server] Project is running at: Loopback: https://localhost:/, https://:/, https://[]:/ [webpack-dev-server] On Your Network (IPv4): https://:/ @@ -44,7 +40,7 @@ exports[`"server" CLI options should work using "--server-options-request-cert" [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"server" CLI options should work using "--server-type http" 1`] = ` +exports[`"server" CLI options > should work using "--server-type http" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -52,9 +48,8 @@ exports[`"server" CLI options should work using "--server-type http" 1`] = ` [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"server" CLI options should work using "--server-type https" 1`] = ` -" [webpack-dev-server] Generating SSL certificate... - [webpack-dev-server] SSL certificate: /node_modules/.cache/webpack-dev-server/server.pem +exports[`"server" CLI options > should work using "--server-type https" 1`] = ` +" [webpack-dev-server] SSL certificate: /node_modules/.cache/webpack-dev-server/server.pem [webpack-dev-server] Project is running at: Loopback: https://localhost:/, https://:/, https://[]:/ [webpack-dev-server] On Your Network (IPv4): https://:/ diff --git a/test/cli/__snapshots__/static-option.test.js.snap.webpack5 b/test/cli/__snapshots__/static-option.test.js.snap.webpack5 index e7e7fbe670..68f0f803b8 100644 --- a/test/cli/__snapshots__/static-option.test.js.snap.webpack5 +++ b/test/cli/__snapshots__/static-option.test.js.snap.webpack5 @@ -1,6 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`"static" CLI option should work using "--no-static-serve-index": stderr 1`] = ` +exports[`"static" CLI option > should work using "--no-static-serve-index" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -8,7 +6,7 @@ exports[`"static" CLI option should work using "--no-static-serve-index": stderr [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"static" CLI option should work using "--no-static-watch": stderr 1`] = ` +exports[`"static" CLI option > should work using "--no-static-watch" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -16,7 +14,7 @@ exports[`"static" CLI option should work using "--no-static-watch": stderr 1`] = [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"static" CLI option should work using "--static new-static --static other-static": stderr 1`] = ` +exports[`"static" CLI option > should work using "--static new-static --static other-static" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -24,7 +22,7 @@ exports[`"static" CLI option should work using "--static new-static --static oth [webpack-dev-server] Content not from webpack is served from 'new-static, other-static' directory" `; -exports[`"static" CLI option should work using "--static new-static": stderr 1`] = ` +exports[`"static" CLI option > should work using "--static new-static" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -32,7 +30,7 @@ exports[`"static" CLI option should work using "--static new-static": stderr 1`] [webpack-dev-server] Content not from webpack is served from 'new-static' directory" `; -exports[`"static" CLI option should work using "--static": stderr 1`] = ` +exports[`"static" CLI option > should work using "--static" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -40,7 +38,7 @@ exports[`"static" CLI option should work using "--static": stderr 1`] = ` [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"static" CLI option should work using "--static-directory static-dir": stderr 1`] = ` +exports[`"static" CLI option > should work using "--static-directory static-dir" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -48,7 +46,7 @@ exports[`"static" CLI option should work using "--static-directory static-dir": [webpack-dev-server] Content not from webpack is served from 'static-dir' directory" `; -exports[`"static" CLI option should work using "--static-public-path /public": stderr 1`] = ` +exports[`"static" CLI option > should work using "--static-public-path /public" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -56,7 +54,7 @@ exports[`"static" CLI option should work using "--static-public-path /public": s [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"static" CLI option should work using "--static-public-path-reset": stderr 1`] = ` +exports[`"static" CLI option > should work using "--static-public-path-reset" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -64,7 +62,7 @@ exports[`"static" CLI option should work using "--static-public-path-reset": std [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"static" CLI option should work using "--static-reset --static-directory new-static-directory": stderr 1`] = ` +exports[`"static" CLI option > should work using "--static-reset --static-directory new-static-directory" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -72,7 +70,7 @@ exports[`"static" CLI option should work using "--static-reset --static-director [webpack-dev-server] Content not from webpack is served from 'new-static-directory' directory" `; -exports[`"static" CLI option should work using "--static-reset": stderr 1`] = ` +exports[`"static" CLI option > should work using "--static-reset" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -80,7 +78,7 @@ exports[`"static" CLI option should work using "--static-reset": stderr 1`] = ` [webpack-dev-server] Content not from webpack is served from 'new-static-after-reset' directory" `; -exports[`"static" CLI option should work using "--static-serve-index": stderr 1`] = ` +exports[`"static" CLI option > should work using "--static-serve-index" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -88,7 +86,7 @@ exports[`"static" CLI option should work using "--static-serve-index": stderr 1` [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"static" CLI option should work using "--static-watch": stderr 1`] = ` +exports[`"static" CLI option > should work using "--static-watch" 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ diff --git a/test/cli/__snapshots__/watchFiles-option.test.js.snap.webpack5 b/test/cli/__snapshots__/watchFiles-option.test.js.snap.webpack5 index fcd2eada1d..5662d95a2e 100644 --- a/test/cli/__snapshots__/watchFiles-option.test.js.snap.webpack5 +++ b/test/cli/__snapshots__/watchFiles-option.test.js.snap.webpack5 @@ -1,6 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`"watchFiles" CLI option should work using "--watch-files --watch-files ": stderr 1`] = ` +exports[`"watchFiles" CLI option > should work using "--watch-files --watch-files " 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -8,7 +6,7 @@ exports[`"watchFiles" CLI option should work using "--watch-files --watc [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"watchFiles" CLI option should work using "--watch-files ": stderr 1`] = ` +exports[`"watchFiles" CLI option > should work using "--watch-files " 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ @@ -16,7 +14,7 @@ exports[`"watchFiles" CLI option should work using "--watch-files ": stde [webpack-dev-server] Content not from webpack is served from '/public' directory" `; -exports[`"watchFiles" CLI option should work using "--watch-files-reset --watch-files ": stderr 1`] = ` +exports[`"watchFiles" CLI option > should work using "--watch-files-reset --watch-files " 1`] = ` " [webpack-dev-server] Project is running at: Loopback: http://localhost:/, http://:/, http://[]:/ [webpack-dev-server] On Your Network (IPv4): http://:/ diff --git a/test/cli/allowedHosts-option.test.js b/test/cli/allowedHosts-option.test.js index 548314d148..f6be66b972 100644 --- a/test/cli/allowedHosts-option.test.js +++ b/test/cli/allowedHosts-option.test.js @@ -1,5 +1,7 @@ "use strict"; +const { describe, it } = require("node:test"); +const { expect } = require("expect"); const { testBin } = require("../helpers/test-bin"); const port = require("../ports-map")["cli-allowed-hosts"]; diff --git a/test/cli/basic.test.js b/test/cli/basic.test.js index cf5b4a4964..11fe928de0 100644 --- a/test/cli/basic.test.js +++ b/test/cli/basic.test.js @@ -1,8 +1,10 @@ "use strict"; const path = require("node:path"); +const { describe, it } = require("node:test"); const util = require("node:util"); const execa = require("execa"); +const { expect } = require("expect"); const { normalizeStderr, testBin } = require("../helpers/test-bin"); const port = require("../ports-map")["cli-basic"]; @@ -10,18 +12,16 @@ const isMacOS = process.platform === "darwin"; describe("basic", () => { describe("should output help", () => { - (isMacOS ? it.skip : it)("should generate correct cli flags", async () => { + (isMacOS ? it.skip : it)("should generate correct cli flags", async (t) => { const { exitCode, stdout } = await testBin(["--help"]); - // eslint-disable-next-line jest/no-standalone-expect expect(exitCode).toBe(0); - // eslint-disable-next-line jest/no-standalone-expect - expect(util.stripVTControlCharacters(stdout)).toMatchSnapshot(); + t.assert.snapshot(util.stripVTControlCharacters(stdout)); }); }); describe("basic", () => { - it("should work", async () => { + it("should work", async (t) => { const { exitCode, stderr } = await testBin([ // Ideally it should be empty to test without arguments, unfortunately it takes 8080 port and other test can failed "--port", @@ -29,10 +29,10 @@ describe("basic", () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it('should work using "--host localhost --port "', async () => { + it('should work using "--host localhost --port "', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -41,10 +41,10 @@ describe("basic", () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr)); }); - it("should accept the promise function of webpack.config.js", async () => { + it("should accept the promise function of webpack.config.js", async (t) => { const { exitCode, stderr } = await testBin([ "--config", path.resolve( @@ -56,10 +56,10 @@ describe("basic", () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it("should work using multi compiler mode", async () => { + it("should work using multi compiler mode", async (t) => { const { exitCode, stderr } = await testBin([ "--config", path.resolve( @@ -71,130 +71,136 @@ describe("basic", () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it("should exit the process when SIGINT is detected", (done) => { - const cliPath = path.resolve( - __dirname, - "../../bin/webpack-dev-server.js", - ); - const examplePath = path.resolve( - __dirname, - "../../examples/client/web-socket-url", - ); - const cp = execa("node", ["--port", port, cliPath], { cwd: examplePath }); + it("should exit the process when SIGINT is detected", () => + new Promise((resolve) => { + const cliPath = path.resolve( + __dirname, + "../../bin/webpack-dev-server.js", + ); + const examplePath = path.resolve( + __dirname, + "../../examples/client/web-socket-url", + ); + const cp = execa("node", ["--port", port, cliPath], { + cwd: examplePath, + }); - cp.stdout.on("data", (data) => { - const bits = data.toString(); + cp.stdout.on("data", (data) => { + const bits = data.toString(); - if (/main.js/.test(bits)) { - expect(cp.pid).not.toBe(0); + if (/main.js/.test(bits)) { + expect(cp.pid).not.toBe(0); - cp.kill("SIGINT"); - } - }); + cp.kill("SIGINT"); + } + }); - cp.on("exit", () => { - done(); - }); - }); + cp.on("exit", () => { + resolve(); + }); + })); - it("should exit the process when SIGINT is detected, even before the compilation is done", (done) => { - const cliPath = path.resolve( - __dirname, - "../../bin/webpack-dev-server.js", - ); - const cwd = path.resolve(__dirname, "../fixtures/cli"); - const cp = execa("node", ["--port", port, cliPath], { cwd }); + it("should exit the process when SIGINT is detected, even before the compilation is done", () => + new Promise((resolve) => { + const cliPath = path.resolve( + __dirname, + "../../bin/webpack-dev-server.js", + ); + const cwd = path.resolve(__dirname, "../fixtures/cli"); + const cp = execa("node", ["--port", port, cliPath], { cwd }); - let killed = false; + let killed = false; - cp.stdout.on("data", () => { - if (!killed) { - expect(cp.pid).not.toBe(0); + cp.stdout.on("data", () => { + if (!killed) { + expect(cp.pid).not.toBe(0); - cp.kill("SIGINT"); - } + cp.kill("SIGINT"); + } - killed = true; - }); + killed = true; + }); - cp.on("exit", () => { - done(); - }); - }); + cp.on("exit", () => { + resolve(); + }); + })); - it("should exit the process when stdin ends if --watch-options-stdin", (done) => { - const cliPath = path.resolve( - __dirname, - "../../bin/webpack-dev-server.js", - ); - const examplePath = path.resolve( - __dirname, - "../../examples/client/web-socket-url", - ); - const cp = execa( - "node", - [cliPath, "--port", port, "--watch-options-stdin"], - { - cwd: examplePath, - }, - ); - - cp.stdout.on("data", (data) => { - const bits = data.toString(); - - if (/main.js/.test(bits)) { - expect(cp.pid).not.toBe(0); - - cp.stdin.write("hello"); - cp.stdin.end("world"); - } - }); - - cp.on("exit", () => { - done(); - }); - }); - - it("should exit the process when stdin ends if --watch-options-stdin, even before the compilation is done", (done) => { - const cliPath = path.resolve( - __dirname, - "../../bin/webpack-dev-server.js", - ); - const cwd = path.resolve(__dirname, "../fixtures/cli"); - const cp = execa( - "node", - [cliPath, "--port", port, "--watch-options-stdin"], - { cwd }, - ); + it("should exit the process when stdin ends if --watch-options-stdin", () => + new Promise((resolve) => { + const cliPath = path.resolve( + __dirname, + "../../bin/webpack-dev-server.js", + ); + const examplePath = path.resolve( + __dirname, + "../../examples/client/web-socket-url", + ); + const cp = execa( + "node", + [cliPath, "--port", port, "--watch-options-stdin"], + { + cwd: examplePath, + }, + ); + + cp.stdout.on("data", (data) => { + const bits = data.toString(); + + if (/main.js/.test(bits)) { + expect(cp.pid).not.toBe(0); + + cp.stdin.write("hello"); + cp.stdin.end("world"); + } + }); + + cp.on("exit", () => { + resolve(); + }); + })); + + it("should exit the process when stdin ends if --watch-options-stdin, even before the compilation is done", () => + new Promise((resolve, reject) => { + const cliPath = path.resolve( + __dirname, + "../../bin/webpack-dev-server.js", + ); + const cwd = path.resolve(__dirname, "../fixtures/cli"); + const cp = execa( + "node", + [cliPath, "--port", port, "--watch-options-stdin"], + { cwd }, + ); - let killed = false; + let killed = false; - cp.on("error", (error) => { - done(error); - }); + cp.on("error", (error) => { + reject(error); + }); - cp.stdin.on("error", (error) => { - done(error); - }); + cp.stdin.on("error", (error) => { + reject(error); + }); - cp.stdout.on("data", () => { - if (!killed) { - expect(cp.pid).not.toBe(0); + cp.stdout.on("data", () => { + if (!killed) { + expect(cp.pid).not.toBe(0); - cp.stdin.write("hello"); - cp.stdin.end("world"); - } + cp.stdin.write("hello"); + cp.stdin.end("world"); + } - killed = true; - }); + killed = true; + }); - cp.on("exit", () => { - done(); - }); - }); + cp.on("exit", () => { + resolve(); + }); + })); it("should add dev server entry points to a single entry point", async () => { const { exitCode, stdout } = await testBin( @@ -324,7 +330,6 @@ describe("basic", () => { expect(stdout).toContain("client/index.js"); }); - // eslint-disable-next-line jest/no-disabled-tests it.skip("should use different random port when multiple instances are started on different processes", async () => { const cliPath = path.resolve( __dirname, diff --git a/test/cli/bonjour-option.test.js b/test/cli/bonjour-option.test.js index 77d1df223b..973301c60e 100644 --- a/test/cli/bonjour-option.test.js +++ b/test/cli/bonjour-option.test.js @@ -1,6 +1,8 @@ "use strict"; const fs = require("node:fs"); +const { beforeEach, describe, it } = require("node:test"); +const { expect } = require("expect"); const Server = require("../../lib/Server"); const { normalizeStderr, testBin } = require("../helpers/test-bin"); const port = require("../ports-map")["cli-bonjour"]; @@ -12,16 +14,16 @@ describe('"bonjour" CLI option', () => { fs.rmSync(defaultCertificateDir, { recursive: true, force: true }); }); - it('should work using "--bonjour"', async () => { + it('should work using "--bonjour"', async (t) => { const { exitCode, stderr } = await testBin(["--port", port, "--bonjour"], { outputKillStr: /Broadcasting/, }); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot(); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it('should work using "--bonjour and --server-type=https"', async () => { + it('should work using "--bonjour and --server-type=https"', async (t) => { const { exitCode, stderr } = await testBin( ["--port", port, "--bonjour", "--server-type=https"], { @@ -30,12 +32,10 @@ describe('"bonjour" CLI option', () => { ); expect(exitCode).toBe(0); - expect( - normalizeStderr(stderr, { ipv6: true, https: true }), - ).toMatchSnapshot(); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true, https: true })); }); - it('should work using "--no-bonjour"', async () => { + it('should work using "--no-bonjour"', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -43,6 +43,6 @@ describe('"bonjour" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot(); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); }); diff --git a/test/cli/client-option.test.js b/test/cli/client-option.test.js index 0fd38d6af8..61ede3cb01 100644 --- a/test/cli/client-option.test.js +++ b/test/cli/client-option.test.js @@ -1,5 +1,7 @@ "use strict"; +const { describe, it } = require("node:test"); +const { expect } = require("expect"); const { testBin } = require("../helpers/test-bin"); const port = require("../ports-map")["cli-client"]; diff --git a/test/cli/colors.test.js b/test/cli/colors.test.js index a19143439e..8ed4ab9db1 100644 --- a/test/cli/colors.test.js +++ b/test/cli/colors.test.js @@ -1,5 +1,7 @@ "use strict"; +const { describe, it } = require("node:test"); +const { expect } = require("expect"); const { normalizeStderr, testBin } = require("../helpers/test-bin"); const port = require("../ports-map")["cli-colors"]; @@ -14,7 +16,7 @@ const colorsEnabled = require.resolve( ); describe("colors", () => { - it("should work use colors by default", async () => { + it("should work use colors by default", async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -23,27 +25,27 @@ describe("colors", () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); expect(stderr).toContain("\u001B["); }); - it('should work use colors using "--color"', async () => { + it('should work use colors using "--color"', async (t) => { const { exitCode, stderr } = await testBin(["--port", port, "--color"]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); expect(stderr).toContain("\u001B["); }); - it('should work do not use colors using "--no-color"', async () => { + it('should work do not use colors using "--no-color"', async (t) => { const { exitCode, stderr } = await testBin(["--port", port, "--no-color"]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); expect(stderr).not.toContain("\u001B["); }); - it("should work use colors using configuration with enabled colors", async () => { + it("should work use colors using configuration with enabled colors", async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -52,11 +54,11 @@ describe("colors", () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); expect(stderr).toContain("\u001B["); }); - it("should work and do not use colors using configuration with disabled colors", async () => { + it("should work and do not use colors using configuration with disabled colors", async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -65,7 +67,7 @@ describe("colors", () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); expect(stderr).not.toContain("\u001B["); }); }); diff --git a/test/cli/compress-option.test.js b/test/cli/compress-option.test.js index ccd3884350..b6a83baabb 100644 --- a/test/cli/compress-option.test.js +++ b/test/cli/compress-option.test.js @@ -1,5 +1,7 @@ "use strict"; +const { describe, it } = require("node:test"); +const { expect } = require("expect"); const { testBin } = require("../helpers/test-bin"); const port = require("../ports-map")["cli-compress"]; diff --git a/test/cli/historyApiFallback-option.test.js b/test/cli/historyApiFallback-option.test.js index 018db0e5b3..ab2f344667 100644 --- a/test/cli/historyApiFallback-option.test.js +++ b/test/cli/historyApiFallback-option.test.js @@ -1,10 +1,12 @@ "use strict"; +const { describe, it } = require("node:test"); +const { expect } = require("expect"); const { normalizeStderr, testBin } = require("../helpers/test-bin"); const port = require("../ports-map")["cli-history-api-fallback"]; describe('"historyApiFallback" CLI option', () => { - it('should work using "--history-api-fallback"', async () => { + it('should work using "--history-api-fallback"', async (t) => { const { exitCode, stderr } = await testBin( ["--port", port, "--history-api-fallback"], { @@ -13,10 +15,10 @@ describe('"historyApiFallback" CLI option', () => { ); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot(); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it('should work using "--no-history-api-fallback"', async () => { + it('should work using "--no-history-api-fallback"', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -24,6 +26,6 @@ describe('"historyApiFallback" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot(); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); }); diff --git a/test/cli/host-option.test.js b/test/cli/host-option.test.js index dfa65ee92b..2d6d83932d 100644 --- a/test/cli/host-option.test.js +++ b/test/cli/host-option.test.js @@ -1,6 +1,9 @@ "use strict"; const os = require("node:os"); +const { describe, it } = require("node:test"); +const { expect } = require("expect"); +const { spyOn } = require("jest-mock"); const Server = require("../../lib/Server"); const { normalizeStderr, testBin } = require("../helpers/test-bin"); const port = require("../ports-map")["cli-host"]; @@ -9,7 +12,7 @@ const localIPv4 = Server.findIp("v4", false); const localIPv6 = Server.findIp("v6", false); describe('"host" CLI option', () => { - it('should work using "--host 0.0.0.0" (IPv4)', async () => { + it('should work using "--host 0.0.0.0" (IPv4)', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -18,10 +21,10 @@ describe('"host" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it('should work using "--host ::" (IPv6)', async () => { + it('should work using "--host ::" (IPv6)', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -30,10 +33,10 @@ describe('"host" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it('should work using "--host ::1" (IPv6)', async () => { + it('should work using "--host ::1" (IPv6)', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -42,10 +45,10 @@ describe('"host" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr)); }); - it('should work using "--host localhost"', async () => { + it('should work using "--host localhost"', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -54,10 +57,10 @@ describe('"host" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr)); }); - it('should work using "--host 127.0.0.1" (IPv4)', async () => { + it('should work using "--host 127.0.0.1" (IPv4)', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -66,10 +69,10 @@ describe('"host" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr)); }); - it('should work using "--host "', async () => { + it('should work using "--host "', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -78,11 +81,10 @@ describe('"host" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr)); }); - // eslint-disable-next-line jest/no-disabled-tests - it.skip('should work using "--host "', async () => { + it.skip('should work using "--host "', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -91,10 +93,10 @@ describe('"host" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr)); }); - it('should work using "--host local-ip"', async () => { + it('should work using "--host local-ip"', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -103,10 +105,9 @@ describe('"host" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr)); }); - // eslint-disable-next-line jest/no-disabled-tests it.skip('should work using "--host local-ip" take the first network found', async () => { const { exitCode, stderr } = await testBin([ "--port", @@ -116,7 +117,7 @@ describe('"host" CLI option', () => { ]); expect(exitCode).toBe(0); - jest.spyOn(os, "networkInterfaces").mockImplementation(() => ({ + spyOn(os, "networkInterfaces").mockImplementation(() => ({ lo: [ { address: "127.0.0.1", @@ -226,7 +227,7 @@ describe('"host" CLI option', () => { expect(stderr).toContain("192.168.1.15"); }); - it('should work using "--host local-ipv4"', async () => { + it('should work using "--host local-ipv4"', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -235,6 +236,6 @@ describe('"host" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr)); }); }); diff --git a/test/cli/hot-option.test.js b/test/cli/hot-option.test.js index 6b525d885a..6e62e3a2ff 100644 --- a/test/cli/hot-option.test.js +++ b/test/cli/hot-option.test.js @@ -1,5 +1,7 @@ "use strict"; +const { describe, it } = require("node:test"); +const { expect } = require("expect"); const { testBin } = require("../helpers/test-bin"); const port = require("../ports-map")["cli-hot"]; diff --git a/test/cli/ipc-option.test.js b/test/cli/ipc-option.test.js index 304c05f38d..8d4dbe40b8 100644 --- a/test/cli/ipc-option.test.js +++ b/test/cli/ipc-option.test.js @@ -2,17 +2,19 @@ const os = require("node:os"); const path = require("node:path"); +const { describe, it } = require("node:test"); +const { expect } = require("expect"); const { normalizeStderr, testBin } = require("../helpers/test-bin"); describe('"ipc" CLI option', () => { - it('should work using "--ipc"', async () => { + it('should work using "--ipc"', async (t) => { const { exitCode, stderr } = await testBin(["--ipc"]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr)); }); - it('should work using "--ipc="', async () => { + it('should work using "--ipc="', async (t) => { const isWindows = process.platform === "win32"; const pipePrefix = isWindows ? "\\\\.\\pipe\\" : os.tmpdir(); const pipeName = "webpack-dev-server.cli.sock"; @@ -21,6 +23,6 @@ describe('"ipc" CLI option', () => { const { exitCode, stderr } = await testBin(["--ipc", ipc]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr)); }); }); diff --git a/test/cli/liveReload-option.test.js b/test/cli/liveReload-option.test.js index 53e2b198e8..1725910ab5 100644 --- a/test/cli/liveReload-option.test.js +++ b/test/cli/liveReload-option.test.js @@ -1,5 +1,7 @@ "use strict"; +const { describe, it } = require("node:test"); +const { expect } = require("expect"); const { testBin } = require("../helpers/test-bin"); const port = require("../ports-map")["cli-live-reload"]; diff --git a/test/cli/open-option.test.js b/test/cli/open-option.test.js index 9cc9b9cd41..c017a2f3f5 100644 --- a/test/cli/open-option.test.js +++ b/test/cli/open-option.test.js @@ -1,5 +1,7 @@ "use strict"; +const { describe, it } = require("node:test"); +const { expect } = require("expect"); const { testBin } = require("../helpers/test-bin"); const port = require("../ports-map")["cli-open"]; diff --git a/test/cli/port-option.test.js b/test/cli/port-option.test.js index b771e7f280..05361d83ca 100644 --- a/test/cli/port-option.test.js +++ b/test/cli/port-option.test.js @@ -1,20 +1,22 @@ "use strict"; +const { describe, it } = require("node:test"); +const { expect } = require("expect"); const { normalizeStderr, testBin } = require("../helpers/test-bin"); const port = require("../ports-map")["cli-port-option"]; describe('"port" CLI option', () => { - it('should work using "--port "', async () => { + it('should work using "--port "', async (t) => { const { exitCode, stderr } = await testBin(["--port", port]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it('should work using "--port auto"', async () => { + it('should work using "--port auto"', async (t) => { const { exitCode, stderr } = await testBin(["--port", "auto"]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); }); diff --git a/test/cli/server-option.test.js b/test/cli/server-option.test.js index 7b9e77256b..5d36a5726e 100644 --- a/test/cli/server-option.test.js +++ b/test/cli/server-option.test.js @@ -1,6 +1,8 @@ "use strict"; const path = require("node:path"); +const { beforeEach, describe, it } = require("node:test"); +const { expect } = require("expect"); const { rimraf } = require("rimraf"); const Server = require("../../lib/Server"); const { normalizeStderr, testBin } = require("../helpers/test-bin"); @@ -18,7 +20,7 @@ describe('"server" CLI options', () => { await rimraf(defaultCertificateDir); }); - it('should work using "--server-type http"', async () => { + it('should work using "--server-type http"', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -27,12 +29,10 @@ describe('"server" CLI options', () => { ]); expect(exitCode).toBe(0); - expect( - normalizeStderr(stderr, { ipv6: true, https: false }), - ).toMatchSnapshot(); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true, https: false })); }); - it('should work using "--server-type https"', async () => { + it('should work using "--server-type https"', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -41,12 +41,10 @@ describe('"server" CLI options', () => { ]); expect(exitCode).toBe(0); - expect( - normalizeStderr(stderr, { ipv6: true, https: true }), - ).toMatchSnapshot(); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true, https: true })); }); - it('should work using "--server-options-key --server-options-pfx --server-options-passphrase webpack-dev-server --server-options-cert --server-options-ca "', async () => { + it('should work using "--server-options-key --server-options-pfx --server-options-passphrase webpack-dev-server --server-options-cert --server-options-ca "', async (t) => { const pfxFile = path.join(httpsCertificateDirectory, "server.pfx"); const key = path.join(httpsCertificateDirectory, "server.key"); const cert = path.join(httpsCertificateDirectory, "server.crt"); @@ -71,12 +69,10 @@ describe('"server" CLI options', () => { ]); expect(exitCode).toBe(0); - expect( - normalizeStderr(stderr, { ipv6: true, https: true }), - ).toMatchSnapshot(); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true, https: true })); }); - it('should work using "--server-options-key-reset --server-options-key --server-options-pfx-reset --server-options-pfx --server-options-passphrase webpack-dev-server --server-options-cert-reset --server-options-cert --server-options-ca-reset --server-options-ca "', async () => { + it('should work using "--server-options-key-reset --server-options-key --server-options-pfx-reset --server-options-pfx --server-options-passphrase webpack-dev-server --server-options-cert-reset --server-options-cert --server-options-ca-reset --server-options-ca "', async (t) => { const pfxFile = path.join(httpsCertificateDirectory, "server.pfx"); const key = path.join(httpsCertificateDirectory, "server.key"); const cert = path.join(httpsCertificateDirectory, "server.crt"); @@ -105,13 +101,11 @@ describe('"server" CLI options', () => { ]); expect(exitCode).toBe(0); - expect( - normalizeStderr(stderr, { ipv6: true, https: true }), - ).toMatchSnapshot(); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true, https: true })); }); // For https://github.com/webpack/webpack-dev-server/issues/3306 - it('should work using "--server-options-key --server-options-pfx --server-options-passphrase webpack-dev-server --server-options-cert "', async () => { + it('should work using "--server-options-key --server-options-pfx --server-options-passphrase webpack-dev-server --server-options-cert "', async (t) => { const pfxFile = path.join(httpsCertificateDirectory, "server.pfx"); const key = path.join(httpsCertificateDirectory, "server.key"); const cert = path.join(httpsCertificateDirectory, "server.crt"); @@ -133,12 +127,10 @@ describe('"server" CLI options', () => { ]); expect(exitCode).toBe(0); - expect( - normalizeStderr(stderr, { ipv6: true, https: true }), - ).toMatchSnapshot(); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true, https: true })); }); - it('should work using "--server-options-request-cert"', async () => { + it('should work using "--server-options-request-cert"', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -148,12 +140,10 @@ describe('"server" CLI options', () => { ]); expect(exitCode).toBe(0); - expect( - normalizeStderr(stderr, { ipv6: true, https: true }), - ).toMatchSnapshot(); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true, https: true })); }); - it('should work using "--no-server-options-request-cert"', async () => { + it('should work using "--no-server-options-request-cert"', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -163,8 +153,6 @@ describe('"server" CLI options', () => { ]); expect(exitCode).toBe(0); - expect( - normalizeStderr(stderr, { ipv6: true, https: true }), - ).toMatchSnapshot(); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true, https: true })); }); }); diff --git a/test/cli/static-option.test.js b/test/cli/static-option.test.js index 66ccd5ec67..e968c48c44 100644 --- a/test/cli/static-option.test.js +++ b/test/cli/static-option.test.js @@ -1,17 +1,19 @@ "use strict"; +const { describe, it } = require("node:test"); +const { expect } = require("expect"); const { normalizeStderr, testBin } = require("../helpers/test-bin"); const port = require("../ports-map")["cli-static"]; describe('"static" CLI option', () => { - it('should work using "--static"', async () => { + it('should work using "--static"', async (t) => { const { exitCode, stderr } = await testBin(["--port", port, "--static"]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it('should work using "--static new-static"', async () => { + it('should work using "--static new-static"', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -20,10 +22,10 @@ describe('"static" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it('should work using "--static new-static --static other-static"', async () => { + it('should work using "--static new-static --static other-static"', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -34,10 +36,10 @@ describe('"static" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it('should work using "--static-reset"', async () => { + it('should work using "--static-reset"', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -47,10 +49,10 @@ describe('"static" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it('should work using "--static-reset --static-directory new-static-directory"', async () => { + it('should work using "--static-reset --static-directory new-static-directory"', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -60,10 +62,10 @@ describe('"static" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it('should work using "--static-directory static-dir"', async () => { + it('should work using "--static-directory static-dir"', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -72,10 +74,10 @@ describe('"static" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it('should work using "--static-public-path /public"', async () => { + it('should work using "--static-public-path /public"', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -84,10 +86,10 @@ describe('"static" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it('should work using "--static-public-path-reset"', async () => { + it('should work using "--static-public-path-reset"', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -97,10 +99,10 @@ describe('"static" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it('should work using "--static-serve-index"', async () => { + it('should work using "--static-serve-index"', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -108,10 +110,10 @@ describe('"static" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it('should work using "--no-static-serve-index"', async () => { + it('should work using "--no-static-serve-index"', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -119,10 +121,10 @@ describe('"static" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it('should work using "--static-watch"', async () => { + it('should work using "--static-watch"', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -130,10 +132,10 @@ describe('"static" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it('should work using "--no-static-watch"', async () => { + it('should work using "--no-static-watch"', async (t) => { const { exitCode, stderr } = await testBin([ "--port", port, @@ -141,6 +143,6 @@ describe('"static" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); }); diff --git a/test/cli/watchFiles-option.test.js b/test/cli/watchFiles-option.test.js index 93eeebfe78..f95752b11b 100644 --- a/test/cli/watchFiles-option.test.js +++ b/test/cli/watchFiles-option.test.js @@ -1,11 +1,13 @@ "use strict"; const path = require("node:path"); +const { describe, it } = require("node:test"); +const { expect } = require("expect"); const { normalizeStderr, testBin } = require("../helpers/test-bin"); const port = require("../ports-map")["cli-watch-files"]; describe('"watchFiles" CLI option', () => { - it('should work using "--watch-files "', async () => { + it('should work using "--watch-files "', async (t) => { const watchDirectory = path.resolve(__dirname, "../fixtures/static/static"); const { exitCode, stderr } = await testBin([ @@ -16,10 +18,10 @@ describe('"watchFiles" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it('should work using "--watch-files --watch-files "', async () => { + it('should work using "--watch-files --watch-files "', async (t) => { const watchDirectory = path.resolve(__dirname, "../fixtures/static/static"); const watchOtherDirectory = path.resolve( __dirname, @@ -36,10 +38,10 @@ describe('"watchFiles" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); - it('should work using "--watch-files-reset --watch-files "', async () => { + it('should work using "--watch-files-reset --watch-files "', async (t) => { const watchDirectory = path.resolve(__dirname, "../fixtures/static/static"); const { exitCode, stderr } = await testBin([ @@ -51,6 +53,6 @@ describe('"watchFiles" CLI option', () => { ]); expect(exitCode).toBe(0); - expect(normalizeStderr(stderr, { ipv6: true })).toMatchSnapshot("stderr"); + t.assert.snapshot(normalizeStderr(stderr, { ipv6: true })); }); }); diff --git a/test/cli/webSocketServer-option.test.js b/test/cli/webSocketServer-option.test.js index e7394c8933..1e614a6cdb 100644 --- a/test/cli/webSocketServer-option.test.js +++ b/test/cli/webSocketServer-option.test.js @@ -1,5 +1,7 @@ "use strict"; +const { describe, it } = require("node:test"); +const { expect } = require("expect"); const { testBin } = require("../helpers/test-bin"); const port = require("../ports-map")["cli-web-socket-server"]; diff --git a/test/client/ReactErrorBoundary.test.js b/test/client/ReactErrorBoundary.test.js index 8932de9a2c..37080a73e9 100644 --- a/test/client/ReactErrorBoundary.test.js +++ b/test/client/ReactErrorBoundary.test.js @@ -1,51 +1,26 @@ -/** - * @jest-environment jsdom - */ - "use strict"; +require("../helpers/jsdom-setup"); + +const { afterEach, beforeEach, describe, it, mock } = require("node:test"); +const { expect } = require("expect"); +const { spyOn } = require("jest-mock"); const { createOverlay } = require("../../client-src/overlay"); describe("createOverlay", () => { - const originalDocument = globalThis.document; - const originalWindow = globalThis.window; - beforeEach(() => { - globalThis.document = { - createElement: jest.fn(() => ({ - style: {}, - appendChild: jest.fn(), - addEventListener: jest.fn(), - contentDocument: { - createElement: jest.fn(() => ({ style: {}, appendChild: jest.fn() })), - body: { appendChild: jest.fn() }, - }, - })), - body: { appendChild: jest.fn(), removeChild: jest.fn() }, - }; - globalThis.window = { - // Keep addEventListener mocked for other potential uses - addEventListener: jest.fn(), - removeEventListener: jest.fn(), - // Mock trustedTypes - trustedTypes: null, - // Mock dispatchEvent - dispatchEvent: jest.fn(), - }; - jest.useFakeTimers(); + mock.timers.enable(); }); afterEach(() => { - globalThis.document = originalDocument; - globalThis.window = originalWindow; - jest.useRealTimers(); - jest.clearAllMocks(); + mock.timers.reset(); + mock.reset(); }); it("should not show overlay for errors caught by React error boundaries", () => { const options = { trustedTypesPolicyName: null, catchRuntimeError: true }; const overlay = createOverlay(options); - const showOverlayMock = jest.spyOn(overlay, "send"); + const showOverlayMock = spyOn(overlay, "send"); const reactError = new Error( "Error inside React render\n" + @@ -75,7 +50,7 @@ describe("createOverlay", () => { it("should show overlay for normal uncaught errors", () => { const options = { trustedTypesPolicyName: null, catchRuntimeError: true }; const overlay = createOverlay(options); - const showOverlayMock = jest.spyOn(overlay, "send"); + const showOverlayMock = spyOn(overlay, "send"); const regularError = new Error( "Error inside React render\n" + @@ -107,7 +82,7 @@ describe("createOverlay", () => { it("should show overlay for normal uncaught errors (when null is thrown)", () => { const options = { trustedTypesPolicyName: null, catchRuntimeError: true }; const overlay = createOverlay(options); - const showOverlayMock = jest.spyOn(overlay, "send"); + const showOverlayMock = spyOn(overlay, "send"); const errorEvent = new ErrorEvent("error", { error: null, @@ -133,7 +108,7 @@ describe("createOverlay", () => { catchRuntimeError: () => true, }; const overlay = createOverlay(options); - const showOverlayMock = jest.spyOn(overlay, "send"); + const showOverlayMock = spyOn(overlay, "send"); const regularError = new Error("Regular test error"); const errorEvent = new ErrorEvent("error", { @@ -160,7 +135,7 @@ describe("createOverlay", () => { catchRuntimeError: () => false, }; const overlay = createOverlay(options); - const showOverlayMock = jest.spyOn(overlay, "send"); + const showOverlayMock = spyOn(overlay, "send"); const regularError = new Error("Regular test error"); const errorEvent = new ErrorEvent("error", { @@ -176,7 +151,7 @@ describe("createOverlay", () => { it("should not show the overlay for errors with stack containing 'invokeGuardedCallbackDev'", () => { const options = { trustedTypesPolicyName: null, catchRuntimeError: true }; const overlay = createOverlay(options); - const showOverlayMock = jest.spyOn(overlay, "send"); + const showOverlayMock = spyOn(overlay, "send"); const reactInternalError = new Error("React internal error"); reactInternalError.stack = "invokeGuardedCallbackDev\n at somefile.js"; @@ -193,7 +168,7 @@ describe("createOverlay", () => { it("should show overlay for unhandled rejections", () => { const options = { trustedTypesPolicyName: null, catchRuntimeError: true }; const overlay = createOverlay(options); - const showOverlayMock = jest.spyOn(overlay, "send"); + const showOverlayMock = spyOn(overlay, "send"); const rejectionReason = new Error("Promise rejection reason"); const rejectionEvent = new Event("unhandledrejection"); @@ -216,7 +191,7 @@ describe("createOverlay", () => { it("should show overlay for unhandled rejections with string reason", () => { const options = { trustedTypesPolicyName: null, catchRuntimeError: true }; const overlay = createOverlay(options); - const showOverlayMock = jest.spyOn(overlay, "send"); + const showOverlayMock = spyOn(overlay, "send"); const rejectionEvent = new Event("unhandledrejection"); rejectionEvent.reason = "some reason"; globalThis.dispatchEvent(rejectionEvent); @@ -237,7 +212,7 @@ describe("createOverlay", () => { it("should dismiss overlay when ESC key is pressed", () => { const options = { trustedTypesPolicyName: null, catchRuntimeError: true }; const overlay = createOverlay(options); - const showOverlayMock = jest.spyOn(overlay, "send"); + const showOverlayMock = spyOn(overlay, "send"); const escEvent = new KeyboardEvent("keydown", { key: "Escape" }); globalThis.window.dispatchEvent(escEvent); @@ -249,7 +224,7 @@ describe("createOverlay", () => { it("should dismiss overlay when 'Esc' key is pressed (older browsers)", () => { const options = { trustedTypesPolicyName: null, catchRuntimeError: true }; const overlay = createOverlay(options); - const showOverlayMock = jest.spyOn(overlay, "send"); + const showOverlayMock = spyOn(overlay, "send"); const escEvent = new KeyboardEvent("keydown", { key: "Esc" }); globalThis.window.dispatchEvent(escEvent); @@ -261,7 +236,7 @@ describe("createOverlay", () => { it("should not dismiss overlay for other keys", () => { const options = { trustedTypesPolicyName: null, catchRuntimeError: true }; const overlay = createOverlay(options); - const showOverlayMock = jest.spyOn(overlay, "send"); + const showOverlayMock = spyOn(overlay, "send"); const otherKeyEvent = new KeyboardEvent("keydown", { key: "Enter" }); globalThis.window.dispatchEvent(otherKeyEvent); diff --git a/test/client/__snapshots__/index.test.js.snap.webpack5 b/test/client/__snapshots__/index.test.js.snap.webpack5 index 7b3d6672fe..3e010cc5f4 100644 --- a/test/client/__snapshots__/index.test.js.snap.webpack5 +++ b/test/client/__snapshots__/index.test.js.snap.webpack5 @@ -1,34 +1,60 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`index should run onSocketMessage.close (hot enabled) 1`] = `"Disconnected!"`; +exports[`index > should run onSocketMessage.close (hot enabled) 1`] = ` +"Disconnected!" +`; -exports[`index should run onSocketMessage.close (hot enabled) 2`] = `"Close"`; +exports[`index > should run onSocketMessage.close (hot enabled) 2`] = ` +"Close" +`; -exports[`index should run onSocketMessage.close (liveReload enabled) 1`] = `"Disconnected!"`; +exports[`index > should run onSocketMessage.close (liveReload enabled) 1`] = ` +"Disconnected!" +`; -exports[`index should run onSocketMessage.close (liveReload enabled) 2`] = `"Close"`; +exports[`index > should run onSocketMessage.close (liveReload enabled) 2`] = ` +"Close" +`; -exports[`index should run onSocketMessage.close 1`] = `"Disconnected!"`; +exports[`index > should run onSocketMessage.close 1`] = ` +"Disconnected!" +`; -exports[`index should run onSocketMessage.close 2`] = `"Close"`; +exports[`index > should run onSocketMessage.close 2`] = ` +"Close" +`; -exports[`index should run onSocketMessage.error 1`] = `"error!!"`; +exports[`index > should run onSocketMessage.error 1`] = ` +"error!!" +`; -exports[`index should run onSocketMessage.ok 1`] = `"Ok"`; +exports[`index > should run onSocketMessage.ok 1`] = ` +"Ok" +`; -exports[`index should run onSocketMessage.progress and onSocketMessage['progress-update'] 1`] = `"Progress"`; +exports[`index > should run onSocketMessage.progress and onSocketMessage['progress-update'] 1`] = ` +"Progress" +`; -exports[`index should run onSocketMessage.progress and onSocketMessage['progress-update'] 2`] = `"12% - mock-msg."`; +exports[`index > should run onSocketMessage.progress and onSocketMessage['progress-update'] 2`] = ` +"12% - mock-msg." +`; -exports[`index should run onSocketMessage.progress and onSocketMessage['progress-update'] and log plugin name 1`] = `"Progress"`; +exports[`index > should run onSocketMessage.progress and onSocketMessage['progress-update'] and log plugin name 1`] = ` +"Progress" +`; -exports[`index should run onSocketMessage.progress and onSocketMessage['progress-update'] and log plugin name 2`] = `"[mock-plugin] 12% - mock-msg."`; +exports[`index > should run onSocketMessage.progress and onSocketMessage['progress-update'] and log plugin name 2`] = ` +"[mock-plugin] 12% - mock-msg." +`; -exports[`index should run onSocketMessage.warnings 1`] = `"Warnings while compiling."`; +exports[`index > should run onSocketMessage.warnings 1`] = ` +"Warnings while compiling." +`; -exports[`index should run onSocketMessage.warnings 2`] = `"Warnings"`; +exports[`index > should run onSocketMessage.warnings 2`] = ` +"Warnings" +`; -exports[`index should run onSocketMessage.warnings 3`] = ` +exports[`index > should run onSocketMessage.warnings 3`] = ` [ [ "HEADER warning @@ -45,15 +71,23 @@ BODY: warning", ] `; -exports[`index should run onSocketMessage['static-changed'] 1`] = `"Content from static directory was changed. Reloading..."`; +exports[`index > should run onSocketMessage['static-changed'] 1`] = ` +"Content from static directory was changed. Reloading..." +`; -exports[`index should run onSocketMessage['static-changed'](file) 1`] = `""/static/assets/index.html" from static directory was changed. Reloading..."`; +exports[`index > should run onSocketMessage['static-changed'](file) 1`] = ` +""/static/assets/index.html" from static directory was changed. Reloading..." +`; -exports[`index should run onSocketMessage['still-ok'] 1`] = `"Nothing changed."`; +exports[`index > should run onSocketMessage['still-ok'] 1`] = ` +"Nothing changed." +`; -exports[`index should run onSocketMessage['still-ok'] 2`] = `"StillOk"`; +exports[`index > should run onSocketMessage['still-ok'] 2`] = ` +"StillOk" +`; -exports[`index should set arguments into socket function 1`] = ` +exports[`index > should set arguments into socket function 1`] = ` [ "ws://localhost/ws", { diff --git a/test/client/__snapshots__/socket-helper.test.js.snap.webpack5 b/test/client/__snapshots__/socket-helper.test.js.snap.webpack5 index 6db58361bb..dc319ec27d 100644 --- a/test/client/__snapshots__/socket-helper.test.js.snap.webpack5 +++ b/test/client/__snapshots__/socket-helper.test.js.snap.webpack5 @@ -1,12 +1,10 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`socket should default to WebsocketClient when no __webpack_dev_server_client__ set 1`] = ` +exports[`socket > should default to WebsocketClient when no __webpack_dev_server_client__ set 1`] = ` [ "my.url", ] `; -exports[`socket should default to WebsocketClient when no __webpack_dev_server_client__ set 2`] = ` +exports[`socket > should default to WebsocketClient when no __webpack_dev_server_client__ set 2`] = ` [ [ [Function], @@ -14,7 +12,7 @@ exports[`socket should default to WebsocketClient when no __webpack_dev_server_c ] `; -exports[`socket should default to WebsocketClient when no __webpack_dev_server_client__ set 3`] = ` +exports[`socket > should default to WebsocketClient when no __webpack_dev_server_client__ set 3`] = ` [ [ [Function], @@ -22,7 +20,7 @@ exports[`socket should default to WebsocketClient when no __webpack_dev_server_c ] `; -exports[`socket should default to WebsocketClient when no __webpack_dev_server_client__ set 4`] = ` +exports[`socket > should default to WebsocketClient when no __webpack_dev_server_client__ set 4`] = ` [ [ [Function], @@ -30,7 +28,7 @@ exports[`socket should default to WebsocketClient when no __webpack_dev_server_c ] `; -exports[`socket should default to WebsocketClient when no __webpack_dev_server_client__ set 5`] = ` +exports[`socket > should default to WebsocketClient when no __webpack_dev_server_client__ set 5`] = ` [ [ "hello world", @@ -41,13 +39,13 @@ exports[`socket should default to WebsocketClient when no __webpack_dev_server_c ] `; -exports[`socket should use __webpack_dev_server_client__ when set 1`] = ` +exports[`socket > should use __webpack_dev_server_client__ when set 1`] = ` [ "my.url", ] `; -exports[`socket should use __webpack_dev_server_client__ when set 2`] = ` +exports[`socket > should use __webpack_dev_server_client__ when set 2`] = ` [ [ [Function], @@ -55,7 +53,7 @@ exports[`socket should use __webpack_dev_server_client__ when set 2`] = ` ] `; -exports[`socket should use __webpack_dev_server_client__ when set 3`] = ` +exports[`socket > should use __webpack_dev_server_client__ when set 3`] = ` [ [ [Function], @@ -63,7 +61,7 @@ exports[`socket should use __webpack_dev_server_client__ when set 3`] = ` ] `; -exports[`socket should use __webpack_dev_server_client__ when set 4`] = ` +exports[`socket > should use __webpack_dev_server_client__ when set 4`] = ` [ [ [Function], @@ -71,7 +69,7 @@ exports[`socket should use __webpack_dev_server_client__ when set 4`] = ` ] `; -exports[`socket should use __webpack_dev_server_client__ when set 5`] = ` +exports[`socket > should use __webpack_dev_server_client__ when set 5`] = ` [ [ "hello world", diff --git a/test/client/bundle.test.js b/test/client/bundle.test.js index c392196be9..0df082287a 100644 --- a/test/client/bundle.test.js +++ b/test/client/bundle.test.js @@ -1,6 +1,8 @@ "use strict"; +const { after, before, describe, it } = require("node:test"); const acorn = require("acorn"); +const { expect } = require("expect"); const request = require("supertest"); const webpack = require("webpack"); const Server = require("../../lib/Server"); @@ -12,7 +14,7 @@ describe("bundle", () => { let server; let req; - beforeAll(async () => { + before(async () => { const compiler = webpack({ ...config, target: ["es5", "web"], @@ -25,7 +27,7 @@ describe("bundle", () => { req = request(server.app); }); - afterAll(async () => { + after(async () => { await server.stop(); }); diff --git a/test/client/clients/WebsocketClient.test.js b/test/client/clients/WebsocketClient.test.js index de113abb2c..89bef19143 100644 --- a/test/client/clients/WebsocketClient.test.js +++ b/test/client/clients/WebsocketClient.test.js @@ -1,45 +1,61 @@ -/** - * @jest-environment jsdom - * @jest-environment-options { "customExportConditions": ["main"] } - */ - "use strict"; +require("../../helpers/jsdom-setup"); + const http = require("node:http"); +const { after, before, describe, it } = require("node:test"); +const { expect } = require("expect"); const express = require("express"); +const { spyOn } = require("jest-mock"); const ws = require("ws"); -const port = require("../../ports-map")["web-socket-client"]; -jest.setMock("../../../client-src/utils/log", { - log: { - error: jest.fn(), - }, -}); +// jsdom's built-in WebSocket stays in CONNECTING for unreachable URLs (good +// for silencing other client tests) but doesn't fully drive open/close +// against a real local server. Use Node's `ws` library here so this test +// can talk to the express+ws server below. +globalThis.WebSocket = ws; -describe("WebsocketClient", () => { - const WebSocketClient = - require("../../../client-src/clients/WebSocketClient").default; - const { log } = require("../../../client-src/utils/log"); +const WebSocketClient = + require("../../../client-src/clients/WebSocketClient").default; +const { log } = require("../../../client-src/utils/log"); +const port = require("../../ports-map")["web-socket-client"]; +describe("WebsocketClient", () => { let socketServer; let server; - - beforeAll((done) => { - // eslint-disable-next-line new-cap - const app = new express(); - - server = http.createServer(app); - server.listen(port, "localhost", () => { - socketServer = new ws.Server({ - server, - path: "/ws-server", - }); - done(); - }); - }); + let logErrorSpy; + + before( + () => + new Promise((resolve) => { + // eslint-disable-next-line new-cap + const app = new express(); + + server = http.createServer(app); + server.listen(port, "localhost", () => { + socketServer = new ws.Server({ + server, + path: "/ws-server", + }); + resolve(); + }); + }), + ); + + after( + () => + new Promise((resolve) => { + logErrorSpy.mockRestore(); + server.close(() => { + resolve(); + }); + }), + ); describe("client", () => { - it("should open, receive message, and close", (done) => { + it("should open, receive message, and close", async (t) => { + logErrorSpy = spyOn(log, "error").mockImplementation(); + socketServer.on("connection", (connection) => { connection.send("hello world"); @@ -68,17 +84,11 @@ describe("WebsocketClient", () => { expect(log.error.mock.calls).toHaveLength(1); expect(log.error.mock.calls[0]).toEqual([testError]); - setTimeout(() => { - expect(data).toMatchSnapshot(); - - done(); - }, 3000); - }); - }); + await new Promise((resolve) => { + setTimeout(resolve, 3000); + }); - afterAll((done) => { - server.close(() => { - done(); + t.assert.snapshot(data); }); }); }); diff --git a/test/client/clients/__snapshots__/WebsocketClient.test.js.snap.webpack5 b/test/client/clients/__snapshots__/WebsocketClient.test.js.snap.webpack5 index b27fa29f63..9a0c138a65 100644 --- a/test/client/clients/__snapshots__/WebsocketClient.test.js.snap.webpack5 +++ b/test/client/clients/__snapshots__/WebsocketClient.test.js.snap.webpack5 @@ -1,6 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`WebsocketClient client should open, receive message, and close 1`] = ` +exports[`WebsocketClient > client > should open, receive message, and close 1`] = ` [ "open", "hello world", diff --git a/test/client/index.test.js b/test/client/index.test.js index aaa1c9f0f5..14bacbb46f 100644 --- a/test/client/index.test.js +++ b/test/client/index.test.js @@ -1,8 +1,21 @@ +"use strict"; + +require("../helpers/jsdom-setup"); + +const { afterEach, beforeEach, describe, it, mock } = require("node:test"); +const { expect } = require("expect"); +const { fn } = require("jest-mock"); + /** - * @jest-environment jsdom + * Clear all client-src/* entries from require.cache so a fresh require() + * re-evaluates client-src/index.js with the active mock.module() mocks. + * @returns {void} */ - -"use strict"; +function clearClientCache() { + for (const key of Object.keys(require.cache)) { + if (key.includes("/client-src/")) delete require.cache[key]; + } +} describe("index", () => { let log; @@ -10,76 +23,97 @@ describe("index", () => { let overlay; let sendMessage; let onSocketMessage; + let logMockCtx; + let socketMockCtx; + let overlayMockCtx; + let sendMessageMockCtx; const locationValue = self.location; const resourceQueryValue = globalThis.__resourceQuery; - beforeEach(() => { - globalThis.__resourceQuery = "?mock-url"; - globalThis.__webpack_hash__ = "mock-hash"; - - // log - jest.setMock("../../client-src/utils/log.js", { - log: { - info: jest.fn(), - warn: jest.fn(), - error: jest.fn(), - }, - logEnabledFeatures: jest.fn(), - setLogLevel: jest.fn(), + /** + * Install fresh mock.module() interceptors for the four modules + * client-src/index.js loads at evaluation time. + * @returns {void} + */ + function installMocks() { + log = { + log: { info: fn(), warn: fn(), error: fn() }, + logEnabledFeatures: fn(), + setLogLevel: fn(), + }; + logMockCtx = mock.module("../../client-src/utils/log.js", { + namedExports: log, }); - log = require("../../client-src/utils/log"); - - // socket - jest.setMock("../../client-src/socket.js", jest.fn()); - socket = require("../../client-src/socket"); - - const send = jest.fn(); - - // overlay - jest.setMock("../../client-src/overlay.js", { - createOverlay: () => ({ - send, - }), - formatProblem: (item) => ({ - header: "HEADER warning", - body: `BODY: ${item}`, - }), + socket = fn(); + socketMockCtx = mock.module("../../client-src/socket.js", { + defaultExport: socket, }); - const { createOverlay } = require("../../client-src/overlay"); + const send = fn(); + overlay = { send }; + overlayMockCtx = mock.module("../../client-src/overlay.js", { + namedExports: { + createOverlay: () => overlay, + formatProblem: (item) => ({ + header: "HEADER warning", + body: `BODY: ${item}`, + }), + }, + }); - overlay = createOverlay(); + sendMessage = fn(); + sendMessageMockCtx = mock.module("../../client-src/utils/sendMessage.js", { + defaultExport: sendMessage, + }); + } + + /** + * Tear down the mock.module() interceptors installed by installMocks(). + * @returns {void} + */ + function restoreMocks() { + logMockCtx.restore(); + socketMockCtx.restore(); + overlayMockCtx.restore(); + sendMessageMockCtx.restore(); + } + + beforeEach(async () => { + globalThis.__resourceQuery = "?mock-url"; + globalThis.__webpack_hash__ = "mock-hash"; - // sendMessage - jest.setMock("../../client-src/utils/sendMessage.js", jest.fn()); - sendMessage = require("../../client-src/utils/sendMessage"); + clearClientCache(); + installMocks(); // issue: https://github.com/jsdom/jsdom/issues/2112 delete globalThis.location; + globalThis.location = { ...locationValue, reload: fn() }; - globalThis.location = { ...locationValue, reload: jest.fn() }; - - require("../../client-src"); + // Use dynamic import with a cache-busting query string to force a fresh + // module evaluation each test (ESM modules aren't invalidated by deleting + // entries from require.cache). + const indexUrl = require.resolve("../../client-src"); + await import(`file://${indexUrl}?t=${Date.now()}-${Math.random()}`); [[, onSocketMessage]] = socket.mock.calls; }); afterEach(() => { globalThis.__resourceQuery = resourceQueryValue; Object.assign(globalThis, locationValue); - jest.resetAllMocks(); - jest.resetModules(); + restoreMocks(); + clearClientCache(); }); - it("should set arguments into socket function", () => { - expect(socket.mock.calls[0]).toMatchSnapshot(); + it("should set arguments into socket function", (t) => { + t.assert.snapshot(socket.mock.calls[0]); }); - it("should run onSocketMessage['still-ok']", () => { + it("should run onSocketMessage['still-ok']", (t) => { onSocketMessage["still-ok"](); - expect(log.log.info.mock.calls[1][0]).toMatchSnapshot(); - expect(sendMessage.mock.calls[0][0]).toMatchSnapshot(); + t.assert.snapshot(log.log.info.mock.calls[1][0]); + t.assert.snapshot(sendMessage.mock.calls[0][0]); expect(overlay.send).not.toHaveBeenCalledWith({ type: "DISMISS" }); // change flags @@ -89,14 +123,14 @@ describe("index", () => { expect(overlay.send).toHaveBeenCalledWith({ type: "DISMISS" }); }); - it("should run onSocketMessage.progress and onSocketMessage['progress-update']", () => { + it("should run onSocketMessage.progress and onSocketMessage['progress-update']", (t) => { onSocketMessage.progress(false); onSocketMessage["progress-update"]({ msg: "mock-msg", percent: "12", }); - expect(sendMessage.mock.calls[0][0]).toMatchSnapshot(); + t.assert.snapshot(sendMessage.mock.calls[0][0]); onSocketMessage.progress(true); onSocketMessage["progress-update"]({ @@ -104,10 +138,10 @@ describe("index", () => { percent: "12", }); - expect(log.log.info.mock.calls[1][0]).toMatchSnapshot(); + t.assert.snapshot(log.log.info.mock.calls[1][0]); }); - it("should run onSocketMessage.progress and onSocketMessage['progress-update'] and log plugin name", () => { + it("should run onSocketMessage.progress and onSocketMessage['progress-update'] and log plugin name", (t) => { onSocketMessage.progress(false); onSocketMessage["progress-update"]({ msg: "mock-msg", @@ -115,7 +149,7 @@ describe("index", () => { pluginName: "mock-plugin", }); - expect(sendMessage.mock.calls[0][0]).toMatchSnapshot(); + t.assert.snapshot(sendMessage.mock.calls[0][0]); onSocketMessage.progress(true); onSocketMessage["progress-update"]({ @@ -124,13 +158,13 @@ describe("index", () => { pluginName: "mock-plugin", }); - expect(log.log.info.mock.calls[1][0]).toMatchSnapshot(); + t.assert.snapshot(log.log.info.mock.calls[1][0]); }); - it("should run onSocketMessage.ok", () => { + it("should run onSocketMessage.ok", (t) => { onSocketMessage.ok(); - expect(sendMessage.mock.calls[0][0]).toMatchSnapshot(); + t.assert.snapshot(sendMessage.mock.calls[0][0]); onSocketMessage.errors([]); onSocketMessage.hash("mock-hash"); @@ -140,26 +174,26 @@ describe("index", () => { expect(res).toBeUndefined(); }); - it("should run onSocketMessage['static-changed']", () => { + it("should run onSocketMessage['static-changed']", (t) => { onSocketMessage["static-changed"](); - expect(log.log.info.mock.calls[1][0]).toMatchSnapshot(); + t.assert.snapshot(log.log.info.mock.calls[1][0]); expect(self.location.reload).toHaveBeenCalled(); }); - it("should run onSocketMessage['static-changed'](file)", () => { + it("should run onSocketMessage['static-changed'](file)", (t) => { onSocketMessage["static-changed"]("/static/assets/index.html"); - expect(log.log.info.mock.calls[1][0]).toMatchSnapshot(); + t.assert.snapshot(log.log.info.mock.calls[1][0]); expect(self.location.reload).toHaveBeenCalled(); }); - it("should run onSocketMessage.warnings", () => { + it("should run onSocketMessage.warnings", (t) => { onSocketMessage.warnings(["warn1", "\u001B[4mwarn2\u001B[0m", "warn3"]); - expect(log.log.warn.mock.calls[0][0]).toMatchSnapshot(); - expect(sendMessage.mock.calls[0][0]).toMatchSnapshot(); - expect(log.log.warn.mock.calls.splice(1)).toMatchSnapshot(); + t.assert.snapshot(log.log.warn.mock.calls[0][0]); + t.assert.snapshot(sendMessage.mock.calls[0][0]); + t.assert.snapshot(log.log.warn.mock.calls.splice(1)); // change flags onSocketMessage.overlay({ warnings: true }); @@ -173,105 +207,100 @@ describe("index", () => { }); }); - it("should parse overlay options from resource query", () => { - jest.isolateModules(() => { - // Pass JSON config with warnings disabled - globalThis.__resourceQuery = `?overlay=${encodeURIComponent( - '{"warnings": false}', - )}`; + it("should parse overlay options from resource query", async () => { + // Re-evaluate client-src/index.js fresh after mutating __resourceQuery so + // top-level option parsing runs again. + async function reloadClient() { overlay.send.mockReset(); socket.mockReset(); - require("../../client-src"); + const indexUrl = require.resolve("../../client-src"); + await import(`file://${indexUrl}?t=${Date.now()}-${Math.random()}`); [[, onSocketMessage]] = socket.mock.calls; + } + + // Pass JSON config with warnings disabled + globalThis.__resourceQuery = `?overlay=${encodeURIComponent( + '{"warnings": false}', + )}`; + await reloadClient(); - onSocketMessage.warnings(["warn1"]); - expect(overlay.send).not.toHaveBeenCalled(); + onSocketMessage.warnings(["warn1"]); + expect(overlay.send).not.toHaveBeenCalled(); - onSocketMessage.errors(["error1"]); - expect(overlay.send).toHaveBeenCalledTimes(1); - expect(overlay.send).toHaveBeenCalledWith({ - type: "BUILD_ERROR", - level: "error", - messages: ["error1"], - }); + onSocketMessage.errors(["error1"]); + expect(overlay.send).toHaveBeenCalledTimes(1); + expect(overlay.send).toHaveBeenCalledWith({ + type: "BUILD_ERROR", + level: "error", + messages: ["error1"], }); - jest.isolateModules(() => { - // Pass JSON config with errors disabled - globalThis.__resourceQuery = `?overlay=${encodeURIComponent( - '{"errors": false}', - )}`; - overlay.send.mockReset(); - socket.mockReset(); - require("../../client-src"); - [[, onSocketMessage]] = socket.mock.calls; + // Pass JSON config with errors disabled + globalThis.__resourceQuery = `?overlay=${encodeURIComponent( + '{"errors": false}', + )}`; + await reloadClient(); - onSocketMessage.errors(["error1"]); - expect(overlay.send).not.toHaveBeenCalled(); + onSocketMessage.errors(["error1"]); + expect(overlay.send).not.toHaveBeenCalled(); - onSocketMessage.warnings(["warn1"]); - expect(overlay.send).toHaveBeenCalledTimes(1); - expect(overlay.send).toHaveBeenCalledWith({ - type: "BUILD_ERROR", - level: "warning", - messages: ["warn1"], - }); + onSocketMessage.warnings(["warn1"]); + expect(overlay.send).toHaveBeenCalledTimes(1); + expect(overlay.send).toHaveBeenCalledWith({ + type: "BUILD_ERROR", + level: "warning", + messages: ["warn1"], }); - jest.isolateModules(() => { - // Use simple boolean - globalThis.__resourceQuery = "?overlay=true"; - socket.mockReset(); - overlay.send.mockReset(); - require("../../client-src"); - [[, onSocketMessage]] = socket.mock.calls; + // Use simple boolean + globalThis.__resourceQuery = "?overlay=true"; + await reloadClient(); - onSocketMessage.warnings(["warn2"]); - expect(overlay.send).toHaveBeenCalledTimes(1); - expect(overlay.send).toHaveBeenLastCalledWith({ - type: "BUILD_ERROR", - level: "warning", - messages: ["warn2"], - }); - - onSocketMessage.errors(["error2"]); - expect(overlay.send).toHaveBeenCalledTimes(2); - expect(overlay.send).toHaveBeenLastCalledWith({ - type: "BUILD_ERROR", - level: "error", - messages: ["error2"], - }); + onSocketMessage.warnings(["warn2"]); + expect(overlay.send).toHaveBeenCalledTimes(1); + expect(overlay.send).toHaveBeenLastCalledWith({ + type: "BUILD_ERROR", + level: "warning", + messages: ["warn2"], + }); + + onSocketMessage.errors(["error2"]); + expect(overlay.send).toHaveBeenCalledTimes(2); + expect(overlay.send).toHaveBeenLastCalledWith({ + type: "BUILD_ERROR", + level: "error", + messages: ["error2"], }); }); - it("should run onSocketMessage.error", () => { + it("should run onSocketMessage.error", (t) => { onSocketMessage.error("error!!"); - expect(log.log.error.mock.calls[0][0]).toMatchSnapshot(); + t.assert.snapshot(log.log.error.mock.calls[0][0]); }); - it("should run onSocketMessage.close", () => { + it("should run onSocketMessage.close", (t) => { onSocketMessage.close(); - expect(log.log.info.mock.calls[1][0]).toMatchSnapshot(); - expect(sendMessage.mock.calls[0][0]).toMatchSnapshot(); + t.assert.snapshot(log.log.info.mock.calls[1][0]); + t.assert.snapshot(sendMessage.mock.calls[0][0]); }); - it("should run onSocketMessage.close (hot enabled)", () => { + it("should run onSocketMessage.close (hot enabled)", (t) => { // enabling hot onSocketMessage.hot(); onSocketMessage.close(); - expect(log.log.info.mock.calls[1][0]).toMatchSnapshot(); - expect(sendMessage.mock.calls[0][0]).toMatchSnapshot(); + t.assert.snapshot(log.log.info.mock.calls[1][0]); + t.assert.snapshot(sendMessage.mock.calls[0][0]); }); - it("should run onSocketMessage.close (liveReload enabled)", () => { + it("should run onSocketMessage.close (liveReload enabled)", (t) => { // enabling liveReload onSocketMessage.liveReload(); onSocketMessage.close(); - expect(log.log.info.mock.calls[1][0]).toMatchSnapshot(); - expect(sendMessage.mock.calls[0][0]).toMatchSnapshot(); + t.assert.snapshot(log.log.info.mock.calls[1][0]); + t.assert.snapshot(sendMessage.mock.calls[0][0]); }); }); diff --git a/test/client/socket-helper.test.js b/test/client/socket-helper.test.js index 2ebcf25c98..2ee40e1c7c 100644 --- a/test/client/socket-helper.test.js +++ b/test/client/socket-helper.test.js @@ -1,56 +1,86 @@ +"use strict"; + +require("../helpers/jsdom-setup"); + +const { beforeEach, describe, it, mock } = require("node:test"); +const { expect } = require("expect"); +const { fn } = require("jest-mock"); + /** - * @jest-environment jsdom + * Build a fresh mock WebSocketClient class. Each `new MockClient(url)` + * registers the instance and arguments on the static `.mock` so tests can + * assert on them. + * @returns {new (url: string) => unknown} mock client constructor */ - -"use strict"; +function createMockClient() { + class MockClient { + constructor(url) { + MockClient.mock.instances.push(this); + MockClient.mock.calls.push([url]); + this.onOpen = fn(); + this.onClose = fn(); + this.onMessage = fn(); + } + } + MockClient.mock = { instances: [], calls: [] }; + return MockClient; +} describe("socket", () => { beforeEach(() => { - jest.resetAllMocks(); - jest.resetModules(); + delete globalThis.__webpack_dev_server_client__; + for (const key of Object.keys(require.cache)) { + if (key.includes("/client-src/")) delete require.cache[key]; + } }); - it("should default to WebsocketClient when no __webpack_dev_server_client__ set", () => { - jest.mock("../../client/clients/WebSocketClient"); - - const socket = require("../../client/socket").default; - const WebsocketClient = - require("../../client/clients/WebSocketClient").default; - - const mockHandler = jest.fn(); - - socket("my.url", { - example: mockHandler, - }); - - const [mockClientInstance] = WebsocketClient.mock.instances; - - // this simulates receiving a message from the server and passing it - // along to the callback of onMessage - mockClientInstance.onMessage.mock.calls[0][0]( - JSON.stringify({ - type: "example", - data: "hello world", - params: { foo: "bar" }, - }), + it("should default to WebsocketClient when no __webpack_dev_server_client__ set", async (t) => { + const MockClient = createMockClient(); + const webSocketClientMock = mock.module( + "../../client-src/clients/WebSocketClient.js", + { + defaultExport: MockClient, + }, ); - expect(WebsocketClient.mock.calls[0]).toMatchSnapshot(); - expect(mockClientInstance.onOpen.mock.calls).toMatchSnapshot(); - expect(mockClientInstance.onClose.mock.calls).toMatchSnapshot(); - expect(mockClientInstance.onMessage.mock.calls).toMatchSnapshot(); - expect(mockHandler.mock.calls).toMatchSnapshot(); + try { + const freshSocket = ( + await import(`../../client-src/socket.js?t=${Date.now()}`) + ).default; + + const mockHandler = fn(); + + freshSocket("my.url", { + example: mockHandler, + }); + + const [mockClientInstance] = MockClient.mock.instances; + + mockClientInstance.onMessage.mock.calls[0][0]( + JSON.stringify({ + type: "example", + data: "hello world", + params: { foo: "bar" }, + }), + ); + + t.assert.snapshot(MockClient.mock.calls[0]); + t.assert.snapshot(mockClientInstance.onOpen.mock.calls); + t.assert.snapshot(mockClientInstance.onClose.mock.calls); + t.assert.snapshot(mockClientInstance.onMessage.mock.calls); + t.assert.snapshot(mockHandler.mock.calls); + } finally { + webSocketClientMock.restore(); + } }); - it("should use __webpack_dev_server_client__ when set", () => { - jest.mock("../../client/clients/WebSocketClient"); + it("should use __webpack_dev_server_client__ when set", (t) => { + const MockClient = createMockClient(); + globalThis.__webpack_dev_server_client__ = MockClient; - const socket = require("../../client/socket").default; + const socket = require("../../client-src/socket").default; - globalThis.__webpack_dev_server_client__ = - require("../../client/clients/WebSocketClient").default; - - const mockHandler = jest.fn(); + const mockHandler = fn(); socket("my.url", { example: mockHandler, @@ -59,8 +89,6 @@ describe("socket", () => { const [mockClientInstance] = globalThis.__webpack_dev_server_client__.mock.instances; - // this simulates receiving a message from the server and passing it - // along to the callback of onMessage mockClientInstance.onMessage.mock.calls[0][0]( JSON.stringify({ type: "example", @@ -69,25 +97,22 @@ describe("socket", () => { }), ); - expect( - globalThis.__webpack_dev_server_client__.mock.calls[0], - ).toMatchSnapshot(); - expect(mockClientInstance.onOpen.mock.calls).toMatchSnapshot(); - expect(mockClientInstance.onClose.mock.calls).toMatchSnapshot(); - expect(mockClientInstance.onMessage.mock.calls).toMatchSnapshot(); - expect(mockHandler.mock.calls).toMatchSnapshot(); + t.assert.snapshot(globalThis.__webpack_dev_server_client__.mock.calls[0]); + t.assert.snapshot(mockClientInstance.onOpen.mock.calls); + t.assert.snapshot(mockClientInstance.onClose.mock.calls); + t.assert.snapshot(mockClientInstance.onMessage.mock.calls); + t.assert.snapshot(mockHandler.mock.calls); }); it("should export initialized client", () => { - const socket = require("../../client/socket").default; - - const nonInitializedInstance = require("../../client/socket").client; + const MockClient = createMockClient(); + globalThis.__webpack_dev_server_client__ = MockClient; - expect(nonInitializedInstance).toBeNull(); + const socket = require("../../client-src/socket").default; socket("my.url", {}); - const initializedInstance = require("../../client/socket").client; + const initializedInstance = require("../../client-src/socket").client; expect(initializedInstance).not.toBeNull(); expect(typeof initializedInstance.onClose).toBe("function"); diff --git a/test/client/utils/__snapshots__/getCurrentScriptSource.test.js.snap.webpack5 b/test/client/utils/__snapshots__/getCurrentScriptSource.test.js.snap.webpack5 index 76ff325ffa..7a5d695376 100644 --- a/test/client/utils/__snapshots__/getCurrentScriptSource.test.js.snap.webpack5 +++ b/test/client/utils/__snapshots__/getCurrentScriptSource.test.js.snap.webpack5 @@ -1,7 +1,11 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +exports[`'getCurrentScriptSource' function > should fail when 'document.currentScript' doesn't exist and no 'script' tags 1`] = ` +[Error: [webpack-dev-server] Failed to get current script source.] +`; -exports[`'getCurrentScriptSource' function should fail when 'document.currentScript' doesn't exist and no 'script' tags 1`] = `[Error: [webpack-dev-server] Failed to get current script source.]`; +exports[`'getCurrentScriptSource' function > should fail when 'document.scripts' doesn't exist and no scripts 1`] = ` +[Error: [webpack-dev-server] Failed to get current script source.] +`; -exports[`'getCurrentScriptSource' function should fail when 'document.scripts' doesn't exist and no scripts 1`] = `[Error: [webpack-dev-server] Failed to get current script source.]`; - -exports[`'getCurrentScriptSource' function should fail when no scripts with the 'scr' attribute 1`] = `[Error: [webpack-dev-server] Failed to get current script source.]`; +exports[`'getCurrentScriptSource' function > should fail when no scripts with the 'scr' attribute 1`] = ` +[Error: [webpack-dev-server] Failed to get current script source.] +`; diff --git a/test/client/utils/__snapshots__/log.test.js.snap.webpack5 b/test/client/utils/__snapshots__/log.test.js.snap.webpack5 index b02da380e8..29e0eba274 100644 --- a/test/client/utils/__snapshots__/log.test.js.snap.webpack5 +++ b/test/client/utils/__snapshots__/log.test.js.snap.webpack5 @@ -1,6 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`'log' function should set log level via setLogLevel 1`] = ` +exports[`'log' function > should set log level via setLogLevel 1`] = ` [ [ { diff --git a/test/client/utils/__snapshots__/sendMessage.test.js.snap.webpack5 b/test/client/utils/__snapshots__/sendMessage.test.js.snap.webpack5 index e99efa7e7f..ee89e94a8c 100644 --- a/test/client/utils/__snapshots__/sendMessage.test.js.snap.webpack5 +++ b/test/client/utils/__snapshots__/sendMessage.test.js.snap.webpack5 @@ -1,6 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`'sendMessage' function should run self.postMessage 1`] = ` +exports[`'sendMessage' function > should run self.postMessage 1`] = ` [ { "data": "bar", diff --git a/test/client/utils/createSocketURL.test.js b/test/client/utils/createSocketURL.test.js index 3170d8fa62..00c766173d 100644 --- a/test/client/utils/createSocketURL.test.js +++ b/test/client/utils/createSocketURL.test.js @@ -1,9 +1,10 @@ -/** - * @jest-environment jsdom - */ - "use strict"; +const { describe, it } = require("node:test"); +const { expect } = require("expect"); + +require("../../helpers/jsdom-setup"); + describe("'createSocketURL' function", () => { globalThis.__webpack_hash__ = "hash"; @@ -138,6 +139,9 @@ describe("'createSocketURL' function", () => { expect(createSocketURL(parsedURL)).toBe(expected); }); - jest.resetModules(); + // Reset between cases so top-level state in client-src doesn't bleed. + for (const key of Object.keys(require.cache)) { + if (key.includes("/client-src/")) delete require.cache[key]; + } } }); diff --git a/test/client/utils/getCurrentScriptSource.test.js b/test/client/utils/getCurrentScriptSource.test.js index 8eca65c0bd..bd1f94420b 100644 --- a/test/client/utils/getCurrentScriptSource.test.js +++ b/test/client/utils/getCurrentScriptSource.test.js @@ -1,9 +1,10 @@ -/** - * @jest-environment jsdom - */ - "use strict"; +const { afterEach, beforeEach, describe, it } = require("node:test"); +const { expect } = require("expect"); + +require("../../helpers/jsdom-setup"); + describe("'getCurrentScriptSource' function", () => { let getCurrentScriptSource; @@ -26,11 +27,11 @@ describe("'getCurrentScriptSource' function", () => { }); }); - it("should fail when 'document.currentScript' doesn't exist and no 'script' tags", () => { + it("should fail when 'document.currentScript' doesn't exist and no 'script' tags", (t) => { try { getCurrentScriptSource(); } catch (error) { - expect(error).toMatchSnapshot(); + t.assert.snapshot(error); } }); @@ -46,7 +47,7 @@ describe("'getCurrentScriptSource' function", () => { expect(getCurrentScriptSource()).toBe("foo"); }); - it("should fail when 'document.scripts' doesn't exist and no scripts", () => { + it("should fail when 'document.scripts' doesn't exist and no scripts", (t) => { Object.defineProperty(document, "scripts", { value: undefined, writable: true, @@ -55,7 +56,7 @@ describe("'getCurrentScriptSource' function", () => { try { getCurrentScriptSource(); } catch (error) { - expect(error).toMatchSnapshot(); + t.assert.snapshot(error); } }); @@ -75,7 +76,7 @@ describe("'getCurrentScriptSource' function", () => { expect(getCurrentScriptSource()).toBe("bar"); }); - it("should fail when no scripts with the 'scr' attribute", () => { + it("should fail when no scripts with the 'scr' attribute", (t) => { const elements = ["foo", "bar"].map(() => document.createElement("script")); Object.defineProperty(document, "scripts", { @@ -85,7 +86,7 @@ describe("'getCurrentScriptSource' function", () => { try { getCurrentScriptSource(); } catch (error) { - expect(error).toMatchSnapshot(); + t.assert.snapshot(error); } }); }); diff --git a/test/client/utils/log.test.js b/test/client/utils/log.test.js index 53c0fb64a5..451ef88a65 100644 --- a/test/client/utils/log.test.js +++ b/test/client/utils/log.test.js @@ -1,46 +1,67 @@ -/** - * @jest-environment jsdom - */ - "use strict"; +require("../../helpers/jsdom-setup"); + +const { afterEach, beforeEach, describe, it, mock } = require("node:test"); +const { expect } = require("expect"); +const { fn } = require("jest-mock"); + describe("'log' function", () => { - let logMock; - let setLogLevel; + let logger; + let loggerMockCtx; beforeEach(() => { - jest.setMock("webpack/lib/logging/runtime", { - getLogger: jest.fn(), - configureDefaultLogger: jest.fn(), + logger = { + getLogger: fn(), + configureDefaultLogger: fn(), + }; + // Mock the intermediate module that log.js imports directly. Mocking the + // deeper webpack runtime through the re-export chain doesn't propagate; + // mocking the file log.js actually requires does. + loggerMockCtx = mock.module("../../../client-src/modules/logger/index.js", { + defaultExport: logger, }); - logMock = require("webpack/lib/logging/runtime"); - - setLogLevel = require("../../../client-src/utils/log").setLogLevel; + for (const key of Object.keys(require.cache)) { + if (key.includes("/client-src/")) delete require.cache[key]; + } }); afterEach(() => { - logMock.getLogger.mockClear(); - logMock.configureDefaultLogger.mockClear(); + loggerMockCtx.restore(); + for (const key of Object.keys(require.cache)) { + if (key.includes("/client-src/")) delete require.cache[key]; + } }); - it("should set info as the default level and create logger", () => { - const { getLogger } = logMock; - const { configureDefaultLogger } = logMock; + /** + * Force a fresh evaluation of log.js so the mocked logger is observed. + * @returns {Promise} the freshly evaluated log module + */ + function freshLogModule() { + const url = require.resolve("../../../client-src/utils/log"); + return import(`file://${url}?t=${Date.now()}-${Math.random()}`); + } + + it("should set info as the default level and create logger", async () => { + await freshLogModule(); - expect(configureDefaultLogger).toHaveBeenCalled(); - expect(configureDefaultLogger.mock.calls[0][0]).toEqual({ + expect(logger.configureDefaultLogger).toHaveBeenCalledWith({ level: "info", }); - - expect(getLogger).toHaveBeenCalled(); - expect(getLogger.mock.calls[0][0]).toBe("webpack-dev-server"); + expect(logger.getLogger).toHaveBeenCalledWith("webpack-dev-server"); }); - it("should set log level via setLogLevel", () => { + it("should set log level via setLogLevel", async (t) => { + const { setLogLevel } = await freshLogModule(); + + // Drop the call recorded by the module-load setLogLevel(defaultLevel) + // so the snapshot only reflects what this test triggers. + logger.configureDefaultLogger.mockClear(); + for (const level of ["none", "error", "warn", "info", "log", "verbose"]) { setLogLevel(level); } - expect(logMock.configureDefaultLogger.mock.calls).toMatchSnapshot(); + t.assert.snapshot(logger.configureDefaultLogger.mock.calls); }); }); diff --git a/test/client/utils/sendMessage.test.js b/test/client/utils/sendMessage.test.js index 3bfdb588d5..8b3d59b337 100644 --- a/test/client/utils/sendMessage.test.js +++ b/test/client/utils/sendMessage.test.js @@ -1,22 +1,19 @@ -/** - * @jest-environment jsdom - */ - "use strict"; +require("../../helpers/jsdom-setup"); + +const { describe, it } = require("node:test"); +const { expect } = require("expect"); +const { spyOn } = require("jest-mock"); const sendMessage = require("../../../client-src/utils/sendMessage").default; describe("'sendMessage' function", () => { - afterEach(() => { - jest.resetAllMocks(); - }); - - it("should run self.postMessage", () => { - jest.spyOn(globalThis, "postMessage").mockImplementation(); + it("should run self.postMessage", (t) => { + spyOn(globalThis, "postMessage").mockImplementation(); sendMessage("foo", "bar"); expect(self.postMessage).toHaveBeenCalled(); - expect(self.postMessage.mock.calls[0]).toMatchSnapshot(); + t.assert.snapshot(self.postMessage.mock.calls[0]); }); }); diff --git a/test/e2e/__snapshots__/allowed-hosts.test.js.snap.webpack5 b/test/e2e/__snapshots__/allowed-hosts.test.js.snap.webpack5 index 4f79109c83..73a5c5325c 100644 --- a/test/e2e/__snapshots__/allowed-hosts.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/allowed-hosts.test.js.snap.webpack5 @@ -1,48 +1,88 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`allowed hosts check host headers should allow hosts in allowedHosts: console messages 1`] = `[]`; +exports[`allowed hosts > check host headers > should allow hosts in allowedHosts 1`] = ` +200 +`; -exports[`allowed hosts check host headers should allow hosts in allowedHosts: page errors 1`] = `[]`; +exports[`allowed hosts > check host headers > should allow hosts in allowedHosts 2`] = ` +[] +`; -exports[`allowed hosts check host headers should allow hosts in allowedHosts: response status 1`] = `200`; +exports[`allowed hosts > check host headers > should allow hosts in allowedHosts 3`] = ` +[] +`; -exports[`allowed hosts check host headers should allow hosts that pass a wildcard in allowedHosts: console messages 1`] = `[]`; +exports[`allowed hosts > check host headers > should allow hosts that pass a wildcard in allowedHosts 1`] = ` +200 +`; -exports[`allowed hosts check host headers should allow hosts that pass a wildcard in allowedHosts: page errors 1`] = `[]`; +exports[`allowed hosts > check host headers > should allow hosts that pass a wildcard in allowedHosts 2`] = ` +[] +`; -exports[`allowed hosts check host headers should allow hosts that pass a wildcard in allowedHosts: response status 1`] = `200`; +exports[`allowed hosts > check host headers > should allow hosts that pass a wildcard in allowedHosts 3`] = ` +[] +`; -exports[`allowed hosts check host headers should always allow \`localhost\` if options.allowedHosts is auto: console messages 1`] = `[]`; +exports[`allowed hosts > check host headers > should always allow \`localhost\` if options.allowedHosts is auto 1`] = ` +200 +`; -exports[`allowed hosts check host headers should always allow \`localhost\` if options.allowedHosts is auto: page errors 1`] = `[]`; +exports[`allowed hosts > check host headers > should always allow \`localhost\` if options.allowedHosts is auto 2`] = ` +[] +`; -exports[`allowed hosts check host headers should always allow \`localhost\` if options.allowedHosts is auto: response status 1`] = `200`; +exports[`allowed hosts > check host headers > should always allow \`localhost\` if options.allowedHosts is auto 3`] = ` +[] +`; -exports[`allowed hosts check host headers should always allow \`localhost\` subdomain if options.allowedHosts is auto: console messages 1`] = `[]`; +exports[`allowed hosts > check host headers > should always allow \`localhost\` subdomain if options.allowedHosts is auto 1`] = ` +200 +`; -exports[`allowed hosts check host headers should always allow \`localhost\` subdomain if options.allowedHosts is auto: page errors 1`] = `[]`; +exports[`allowed hosts > check host headers > should always allow \`localhost\` subdomain if options.allowedHosts is auto 2`] = ` +[] +`; -exports[`allowed hosts check host headers should always allow \`localhost\` subdomain if options.allowedHosts is auto: response status 1`] = `200`; +exports[`allowed hosts > check host headers > should always allow \`localhost\` subdomain if options.allowedHosts is auto 3`] = ` +[] +`; -exports[`allowed hosts check host headers should always allow any host if options.allowedHosts is all: console messages 1`] = `[]`; +exports[`allowed hosts > check host headers > should always allow any host if options.allowedHosts is all 1`] = ` +200 +`; -exports[`allowed hosts check host headers should always allow any host if options.allowedHosts is all: page errors 1`] = `[]`; +exports[`allowed hosts > check host headers > should always allow any host if options.allowedHosts is all 2`] = ` +[] +`; -exports[`allowed hosts check host headers should always allow any host if options.allowedHosts is all: response status 1`] = `200`; +exports[`allowed hosts > check host headers > should always allow any host if options.allowedHosts is all 3`] = ` +[] +`; -exports[`allowed hosts check host headers should always allow value from the \`host\` options if options.allowedHosts is auto: console messages 1`] = `[]`; +exports[`allowed hosts > check host headers > should always allow value from the \`host\` options if options.allowedHosts is auto 1`] = ` +200 +`; -exports[`allowed hosts check host headers should always allow value from the \`host\` options if options.allowedHosts is auto: page errors 1`] = `[]`; +exports[`allowed hosts > check host headers > should always allow value from the \`host\` options if options.allowedHosts is auto 2`] = ` +[] +`; -exports[`allowed hosts check host headers should always allow value from the \`host\` options if options.allowedHosts is auto: response status 1`] = `200`; +exports[`allowed hosts > check host headers > should always allow value from the \`host\` options if options.allowedHosts is auto 3`] = ` +[] +`; -exports[`allowed hosts check host headers should always allow value of the \`host\` option from the \`client.webSocketURL\` option if options.allowedHosts is auto: console messages 1`] = `[]`; +exports[`allowed hosts > check host headers > should always allow value of the \`host\` option from the \`client.webSocketURL\` option if options.allowedHosts is auto 1`] = ` +200 +`; -exports[`allowed hosts check host headers should always allow value of the \`host\` option from the \`client.webSocketURL\` option if options.allowedHosts is auto: page errors 1`] = `[]`; +exports[`allowed hosts > check host headers > should always allow value of the \`host\` option from the \`client.webSocketURL\` option if options.allowedHosts is auto 2`] = ` +[] +`; -exports[`allowed hosts check host headers should always allow value of the \`host\` option from the \`client.webSocketURL\` option if options.allowedHosts is auto: response status 1`] = `200`; +exports[`allowed hosts > check host headers > should always allow value of the \`host\` option from the \`client.webSocketURL\` option if options.allowedHosts is auto 3`] = ` +[] +`; -exports[`allowed hosts should connect web socket client using "[::1] host to web socket server with the "auto" value ("ws"): console messages 1`] = ` +exports[`allowed hosts > should connect web socket client using "0.0.0.0" host to web socket server with the "auto" value ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -50,9 +90,11 @@ exports[`allowed hosts should connect web socket client using "[::1] host to web ] `; -exports[`allowed hosts should connect web socket client using "[::1] host to web socket server with the "auto" value ("ws"): page errors 1`] = `[]`; +exports[`allowed hosts > should connect web socket client using "0.0.0.0" host to web socket server with the "auto" value ("ws") 2`] = ` +[] +`; -exports[`allowed hosts should connect web socket client using "0.0.0.0" host to web socket server with the "auto" value ("ws"): console messages 1`] = ` +exports[`allowed hosts > should connect web socket client using "127.0.0.1" host to web socket server by default ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -60,9 +102,11 @@ exports[`allowed hosts should connect web socket client using "0.0.0.0" host to ] `; -exports[`allowed hosts should connect web socket client using "0.0.0.0" host to web socket server with the "auto" value ("ws"): page errors 1`] = `[]`; +exports[`allowed hosts > should connect web socket client using "127.0.0.1" host to web socket server by default ("ws") 2`] = ` +[] +`; -exports[`allowed hosts should connect web socket client using "127.0.0.1" host to web socket server by default ("ws"): console messages 1`] = ` +exports[`allowed hosts > should connect web socket client using "127.0.0.1" host to web socket server with the "auto" value ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -70,9 +114,11 @@ exports[`allowed hosts should connect web socket client using "127.0.0.1" host t ] `; -exports[`allowed hosts should connect web socket client using "127.0.0.1" host to web socket server by default ("ws"): page errors 1`] = `[]`; +exports[`allowed hosts > should connect web socket client using "127.0.0.1" host to web socket server with the "auto" value ("ws") 2`] = ` +[] +`; -exports[`allowed hosts should connect web socket client using "127.0.0.1" host to web socket server with the "auto" value ("ws"): console messages 1`] = ` +exports[`allowed hosts > should connect web socket client using "[::1] host to web socket server with the "auto" value ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -80,9 +126,11 @@ exports[`allowed hosts should connect web socket client using "127.0.0.1" host t ] `; -exports[`allowed hosts should connect web socket client using "127.0.0.1" host to web socket server with the "auto" value ("ws"): page errors 1`] = `[]`; +exports[`allowed hosts > should connect web socket client using "[::1] host to web socket server with the "auto" value ("ws") 2`] = ` +[] +`; -exports[`allowed hosts should connect web socket client using "chrome-extension:" protocol to web socket server with the "auto" value ("ws"): console messages 1`] = ` +exports[`allowed hosts > should connect web socket client using "chrome-extension:" protocol to web socket server with the "auto" value ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -90,9 +138,11 @@ exports[`allowed hosts should connect web socket client using "chrome-extension: ] `; -exports[`allowed hosts should connect web socket client using "chrome-extension:" protocol to web socket server with the "auto" value ("ws"): page errors 1`] = `[]`; +exports[`allowed hosts > should connect web socket client using "chrome-extension:" protocol to web socket server with the "auto" value ("ws") 2`] = ` +[] +`; -exports[`allowed hosts should connect web socket client using "file:" protocol to web socket server with the "auto" value ("ws"): console messages 1`] = ` +exports[`allowed hosts > should connect web socket client using "file:" protocol to web socket server with the "auto" value ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -100,9 +150,11 @@ exports[`allowed hosts should connect web socket client using "file:" protocol t ] `; -exports[`allowed hosts should connect web socket client using "file:" protocol to web socket server with the "auto" value ("ws"): page errors 1`] = `[]`; +exports[`allowed hosts > should connect web socket client using "file:" protocol to web socket server with the "auto" value ("ws") 2`] = ` +[] +`; -exports[`allowed hosts should connect web socket client using "localhost" host to web socket server by default ("ws"): console messages 1`] = ` +exports[`allowed hosts > should connect web socket client using "localhost" host to web socket server by default ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -110,9 +162,11 @@ exports[`allowed hosts should connect web socket client using "localhost" host t ] `; -exports[`allowed hosts should connect web socket client using "localhost" host to web socket server by default ("ws"): page errors 1`] = `[]`; +exports[`allowed hosts > should connect web socket client using "localhost" host to web socket server by default ("ws") 2`] = ` +[] +`; -exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the "all" value ("ws"): console messages 1`] = ` +exports[`allowed hosts > should connect web socket client using custom hostname to web socket server with the "all" value ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -120,9 +174,11 @@ exports[`allowed hosts should connect web socket client using custom hostname to ] `; -exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the "all" value ("ws"): page errors 1`] = `[]`; +exports[`allowed hosts > should connect web socket client using custom hostname to web socket server with the "all" value ("ws") 2`] = ` +[] +`; -exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the "all" value in array ("ws"): console messages 1`] = ` +exports[`allowed hosts > should connect web socket client using custom hostname to web socket server with the "all" value in array ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -130,9 +186,11 @@ exports[`allowed hosts should connect web socket client using custom hostname to ] `; -exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the "all" value in array ("ws"): page errors 1`] = `[]`; +exports[`allowed hosts > should connect web socket client using custom hostname to web socket server with the "all" value in array ("ws") 2`] = ` +[] +`; -exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the custom hostname value ("ws"): console messages 1`] = ` +exports[`allowed hosts > should connect web socket client using custom hostname to web socket server with the custom hostname value ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -140,9 +198,11 @@ exports[`allowed hosts should connect web socket client using custom hostname to ] `; -exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the custom hostname value ("ws"): page errors 1`] = `[]`; +exports[`allowed hosts > should connect web socket client using custom hostname to web socket server with the custom hostname value ("ws") 2`] = ` +[] +`; -exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the custom hostname value starting with dot ("ws"): console messages 1`] = ` +exports[`allowed hosts > should connect web socket client using custom hostname to web socket server with the custom hostname value starting with dot ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -150,9 +210,11 @@ exports[`allowed hosts should connect web socket client using custom hostname to ] `; -exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the custom hostname value starting with dot ("ws"): page errors 1`] = `[]`; +exports[`allowed hosts > should connect web socket client using custom hostname to web socket server with the custom hostname value starting with dot ("ws") 2`] = ` +[] +`; -exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the multiple custom hostname values ("ws"): console messages 1`] = ` +exports[`allowed hosts > should connect web socket client using custom hostname to web socket server with the multiple custom hostname values ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -160,9 +222,11 @@ exports[`allowed hosts should connect web socket client using custom hostname to ] `; -exports[`allowed hosts should connect web socket client using custom hostname to web socket server with the multiple custom hostname values ("ws"): page errors 1`] = `[]`; +exports[`allowed hosts > should connect web socket client using custom hostname to web socket server with the multiple custom hostname values ("ws") 2`] = ` +[] +`; -exports[`allowed hosts should connect web socket client using custom sub hostname to web socket server with the custom hostname value ("ws"): console messages 1`] = ` +exports[`allowed hosts > should connect web socket client using custom sub hostname to web socket server with the custom hostname value ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -170,9 +234,11 @@ exports[`allowed hosts should connect web socket client using custom sub hostnam ] `; -exports[`allowed hosts should connect web socket client using custom sub hostname to web socket server with the custom hostname value ("ws"): page errors 1`] = `[]`; +exports[`allowed hosts > should connect web socket client using custom sub hostname to web socket server with the custom hostname value ("ws") 2`] = ` +[] +`; -exports[`allowed hosts should connect web socket client using localhost to web socket server with the "auto" value ("ws"): console messages 1`] = ` +exports[`allowed hosts > should connect web socket client using localhost to web socket server with the "auto" value ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -180,9 +246,11 @@ exports[`allowed hosts should connect web socket client using localhost to web s ] `; -exports[`allowed hosts should connect web socket client using localhost to web socket server with the "auto" value ("ws"): page errors 1`] = `[]`; +exports[`allowed hosts > should connect web socket client using localhost to web socket server with the "auto" value ("ws") 2`] = ` +[] +`; -exports[`allowed hosts should connect web socket client using origin header containing an IP address with the custom hostname value ("ws"): (work) console messages 1`] = ` +exports[`allowed hosts > should connect web socket client using origin header containing an IP address with the custom hostname value ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -190,19 +258,25 @@ exports[`allowed hosts should connect web socket client using origin header cont ] `; -exports[`allowed hosts should connect web socket client using origin header containing an IP address with the custom hostname value ("ws"): (work) page errors 1`] = `[]`; +exports[`allowed hosts > should connect web socket client using origin header containing an IP address with the custom hostname value ("ws") 2`] = ` +[] +`; + +exports[`allowed hosts > should disconnect web client using localhost to web socket server with the "auto" value ("ws") 1`] = ` +"
Invalid Host header
" +`; -exports[`allowed hosts should disconnect web client using localhost to web socket server with the "auto" value ("ws"): console messages 1`] = ` +exports[`allowed hosts > should disconnect web client using localhost to web socket server with the "auto" value ("ws") 2`] = ` [ "Failed to load resource: the server responded with a status of 403 (Forbidden)", ] `; -exports[`allowed hosts should disconnect web client using localhost to web socket server with the "auto" value ("ws"): html 1`] = `"
Invalid Host header
"`; - -exports[`allowed hosts should disconnect web client using localhost to web socket server with the "auto" value ("ws"): page errors 1`] = `[]`; +exports[`allowed hosts > should disconnect web client using localhost to web socket server with the "auto" value ("ws") 3`] = ` +[] +`; -exports[`allowed hosts should disconnect web client using origin header containing an IP address with the "auto" value ("ws"): (work) console messages 1`] = ` +exports[`allowed hosts > should disconnect web client using origin header containing an IP address with the "auto" value ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -213,9 +287,11 @@ exports[`allowed hosts should disconnect web client using origin header containi ] `; -exports[`allowed hosts should disconnect web client using origin header containing an IP address with the "auto" value ("ws"): (work) page errors 1`] = `[]`; +exports[`allowed hosts > should disconnect web client using origin header containing an IP address with the "auto" value ("ws") 2`] = ` +[] +`; -exports[`allowed hosts should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "host" header ("ws"): console messages 1`] = ` +exports[`allowed hosts > should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "host" header ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -226,9 +302,11 @@ exports[`allowed hosts should disconnect web socket client using custom hostname ] `; -exports[`allowed hosts should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "host" header ("ws"): page errors 1`] = `[]`; +exports[`allowed hosts > should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "host" header ("ws") 2`] = ` +[] +`; -exports[`allowed hosts should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "host" header when "server: 'https'" is enabled ("ws"): console messages 1`] = ` +exports[`allowed hosts > should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "host" header when "server: 'https'" is enabled ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -239,9 +317,11 @@ exports[`allowed hosts should disconnect web socket client using custom hostname ] `; -exports[`allowed hosts should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "host" header when "server: 'https'" is enabled ("ws"): page errors 1`] = `[]`; +exports[`allowed hosts > should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "host" header when "server: 'https'" is enabled ("ws") 2`] = ` +[] +`; -exports[`allowed hosts should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "origin" header ("ws"): console messages 1`] = ` +exports[`allowed hosts > should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "origin" header ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -252,4 +332,6 @@ exports[`allowed hosts should disconnect web socket client using custom hostname ] `; -exports[`allowed hosts should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "origin" header ("ws"): page errors 1`] = `[]`; +exports[`allowed hosts > should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "origin" header ("ws") 2`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/api.test.js.snap.webpack5 b/test/e2e/__snapshots__/api.test.js.snap.webpack5 index 14c74e33ea..9a55574007 100644 --- a/test/e2e/__snapshots__/api.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/api.test.js.snap.webpack5 @@ -1,6 +1,8 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +exports[`API > Invalidate callback > should use the default \`noop\` callback when invalidate is called without any callback 1`] = ` +200 +`; -exports[`API Invalidate callback should use the default \`noop\` callback when invalidate is called without any callback: console messages 1`] = ` +exports[`API > Invalidate callback > should use the default \`noop\` callback when invalidate is called without any callback 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -8,11 +10,15 @@ exports[`API Invalidate callback should use the default \`noop\` callback when i ] `; -exports[`API Invalidate callback should use the default \`noop\` callback when invalidate is called without any callback: page errors 1`] = `[]`; +exports[`API > Invalidate callback > should use the default \`noop\` callback when invalidate is called without any callback 3`] = ` +[] +`; -exports[`API Invalidate callback should use the default \`noop\` callback when invalidate is called without any callback: response status 1`] = `200`; +exports[`API > Invalidate callback > should use the provided \`callback\` function 1`] = ` +200 +`; -exports[`API Invalidate callback should use the provided \`callback\` function: console messages 1`] = ` +exports[`API > Invalidate callback > should use the provided \`callback\` function 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -20,11 +26,19 @@ exports[`API Invalidate callback should use the provided \`callback\` function: ] `; -exports[`API Invalidate callback should use the provided \`callback\` function: page errors 1`] = `[]`; +exports[`API > Invalidate callback > should use the provided \`callback\` function 3`] = ` +[] +`; + +exports[`API > Server.checkHostHeader > should allow URLs with scheme for checking origin when the "option.client.webSocketURL" is object 1`] = ` +"ws://test.host:8156/ws" +`; -exports[`API Invalidate callback should use the provided \`callback\` function: response status 1`] = `200`; +exports[`API > Server.checkHostHeader > should allow URLs with scheme for checking origin when the "option.client.webSocketURL" is object 2`] = ` +200 +`; -exports[`API Server.checkHostHeader should allow URLs with scheme for checking origin when the "option.client.webSocketURL" is object: console messages 1`] = ` +exports[`API > Server.checkHostHeader > should allow URLs with scheme for checking origin when the "option.client.webSocketURL" is object 3`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -36,13 +50,15 @@ exports[`API Server.checkHostHeader should allow URLs with scheme for checking o ] `; -exports[`API Server.checkHostHeader should allow URLs with scheme for checking origin when the "option.client.webSocketURL" is object: page errors 1`] = `[]`; - -exports[`API Server.checkHostHeader should allow URLs with scheme for checking origin when the "option.client.webSocketURL" is object: response status 1`] = `200`; +exports[`API > Server.checkHostHeader > should allow URLs with scheme for checking origin when the "option.client.webSocketURL" is object 4`] = ` +[] +`; -exports[`API Server.checkHostHeader should allow URLs with scheme for checking origin when the "option.client.webSocketURL" is object: web socket URL 1`] = `"ws://test.host:8156/ws"`; +exports[`API > Server.getFreePort > should retry finding the port for up to defaultPortRetry times (number) 1`] = ` +200 +`; -exports[`API Server.getFreePort should retry finding the port for up to defaultPortRetry times (number): console messages 1`] = ` +exports[`API > Server.getFreePort > should retry finding the port for up to defaultPortRetry times (number) 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -50,11 +66,15 @@ exports[`API Server.getFreePort should retry finding the port for up to defaultP ] `; -exports[`API Server.getFreePort should retry finding the port for up to defaultPortRetry times (number): page errors 1`] = `[]`; +exports[`API > Server.getFreePort > should retry finding the port for up to defaultPortRetry times (number) 3`] = ` +[] +`; -exports[`API Server.getFreePort should retry finding the port for up to defaultPortRetry times (number): response status 1`] = `200`; +exports[`API > Server.getFreePort > should retry finding the port for up to defaultPortRetry times (string) 1`] = ` +200 +`; -exports[`API Server.getFreePort should retry finding the port for up to defaultPortRetry times (string): console messages 1`] = ` +exports[`API > Server.getFreePort > should retry finding the port for up to defaultPortRetry times (string) 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -62,11 +82,15 @@ exports[`API Server.getFreePort should retry finding the port for up to defaultP ] `; -exports[`API Server.getFreePort should retry finding the port for up to defaultPortRetry times (string): page errors 1`] = `[]`; +exports[`API > Server.getFreePort > should retry finding the port for up to defaultPortRetry times (string) 3`] = ` +[] +`; -exports[`API Server.getFreePort should retry finding the port for up to defaultPortRetry times (string): response status 1`] = `200`; +exports[`API > Server.getFreePort > should retry finding the port when serial ports are busy 1`] = ` +200 +`; -exports[`API Server.getFreePort should retry finding the port when serial ports are busy: console messages 1`] = ` +exports[`API > Server.getFreePort > should retry finding the port when serial ports are busy 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -74,11 +98,15 @@ exports[`API Server.getFreePort should retry finding the port when serial ports ] `; -exports[`API Server.getFreePort should retry finding the port when serial ports are busy: page errors 1`] = `[]`; +exports[`API > Server.getFreePort > should retry finding the port when serial ports are busy 3`] = ` +[] +`; -exports[`API Server.getFreePort should retry finding the port when serial ports are busy: response status 1`] = `200`; +exports[`API > Server.getFreePort > should return the port when the port is \`null\` 1`] = ` +200 +`; -exports[`API Server.getFreePort should return the port when the port is \`null\`: console messages 1`] = ` +exports[`API > Server.getFreePort > should return the port when the port is \`null\` 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -86,11 +114,15 @@ exports[`API Server.getFreePort should return the port when the port is \`null\` ] `; -exports[`API Server.getFreePort should return the port when the port is \`null\`: page errors 1`] = `[]`; +exports[`API > Server.getFreePort > should return the port when the port is \`null\` 3`] = ` +[] +`; -exports[`API Server.getFreePort should return the port when the port is \`null\`: response status 1`] = `200`; +exports[`API > Server.getFreePort > should return the port when the port is undefined 1`] = ` +200 +`; -exports[`API Server.getFreePort should return the port when the port is undefined: console messages 1`] = ` +exports[`API > Server.getFreePort > should return the port when the port is undefined 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -98,13 +130,19 @@ exports[`API Server.getFreePort should return the port when the port is undefine ] `; -exports[`API Server.getFreePort should return the port when the port is undefined: page errors 1`] = `[]`; +exports[`API > Server.getFreePort > should return the port when the port is undefined 3`] = ` +[] +`; -exports[`API Server.getFreePort should return the port when the port is undefined: response status 1`] = `200`; +exports[`API > Server.getFreePort > should throw the error when the port isn't found 1`] = ` +"busy" +`; -exports[`API Server.getFreePort should throw the error when the port isn't found 1`] = `"busy"`; +exports[`API > WEBPACK_SERVE environment variable > should be present 1`] = ` +200 +`; -exports[`API WEBPACK_SERVE environment variable should be present: console messages 1`] = ` +exports[`API > WEBPACK_SERVE environment variable > should be present 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -112,11 +150,11 @@ exports[`API WEBPACK_SERVE environment variable should be present: console messa ] `; -exports[`API WEBPACK_SERVE environment variable should be present: page errors 1`] = `[]`; - -exports[`API WEBPACK_SERVE environment variable should be present: response status 1`] = `200`; +exports[`API > WEBPACK_SERVE environment variable > should be present 3`] = ` +[] +`; -exports[`API latest async API should work and allow to rerun dev server multiple times: console messages 1`] = ` +exports[`API > latest async API > should work and allow to rerun dev server multiple times 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -124,7 +162,11 @@ exports[`API latest async API should work and allow to rerun dev server multiple ] `; -exports[`API latest async API should work and allow to rerun dev server multiple times: console messages 2`] = ` +exports[`API > latest async API > should work and allow to rerun dev server multiple times 2`] = ` +[] +`; + +exports[`API > latest async API > should work and allow to rerun dev server multiple times 3`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -132,11 +174,11 @@ exports[`API latest async API should work and allow to rerun dev server multiple ] `; -exports[`API latest async API should work and allow to rerun dev server multiple times: page errors 1`] = `[]`; - -exports[`API latest async API should work and allow to rerun dev server multiple times: page errors 2`] = `[]`; +exports[`API > latest async API > should work and allow to rerun dev server multiple times 4`] = ` +[] +`; -exports[`API latest async API should work when using configured manually: console messages 1`] = ` +exports[`API > latest async API > should work when using configured manually 1`] = ` [ "[HMR] Waiting for update signal from WDS...", "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading disabled, Progress disabled, Overlay disabled.", @@ -144,9 +186,11 @@ exports[`API latest async API should work when using configured manually: consol ] `; -exports[`API latest async API should work when using configured manually: page errors 1`] = `[]`; +exports[`API > latest async API > should work when using configured manually 2`] = ` +[] +`; -exports[`API latest async API should work with async API: console messages 1`] = ` +exports[`API > latest async API > should work with async API 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -154,9 +198,11 @@ exports[`API latest async API should work with async API: console messages 1`] = ] `; -exports[`API latest async API should work with async API: page errors 1`] = `[]`; +exports[`API > latest async API > should work with async API 2`] = ` +[] +`; -exports[`API latest async API should work with callback API: console messages 1`] = ` +exports[`API > latest async API > should work with callback API 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -164,4 +210,6 @@ exports[`API latest async API should work with callback API: console messages 1` ] `; -exports[`API latest async API should work with callback API: page errors 1`] = `[]`; +exports[`API > latest async API > should work with callback API 2`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/bonjour.test.js.snap.webpack5 b/test/e2e/__snapshots__/bonjour.test.js.snap.webpack5 index 2ddbc8b934..052b86ba5d 100644 --- a/test/e2e/__snapshots__/bonjour.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/bonjour.test.js.snap.webpack5 @@ -1,6 +1,8 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +exports[`bonjour option > as object > should apply bonjour options 1`] = ` +200 +`; -exports[`bonjour option as object should apply bonjour options: console messages 1`] = ` +exports[`bonjour option > as object > should apply bonjour options 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -8,11 +10,15 @@ exports[`bonjour option as object should apply bonjour options: console messages ] `; -exports[`bonjour option as object should apply bonjour options: page errors 1`] = `[]`; +exports[`bonjour option > as object > should apply bonjour options 3`] = ` +[] +`; -exports[`bonjour option as object should apply bonjour options: response status 1`] = `200`; +exports[`bonjour option > as true > should call bonjour with correct params 1`] = ` +200 +`; -exports[`bonjour option as true should call bonjour with correct params: console messages 1`] = ` +exports[`bonjour option > as true > should call bonjour with correct params 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -20,11 +26,15 @@ exports[`bonjour option as true should call bonjour with correct params: console ] `; -exports[`bonjour option as true should call bonjour with correct params: page errors 1`] = `[]`; +exports[`bonjour option > as true > should call bonjour with correct params 3`] = ` +[] +`; -exports[`bonjour option as true should call bonjour with correct params: response status 1`] = `200`; +exports[`bonjour option > bonjour object and 'server' option > should apply bonjour options 1`] = ` +200 +`; -exports[`bonjour option bonjour object and 'server' option should apply bonjour options: console messages 1`] = ` +exports[`bonjour option > bonjour object and 'server' option > should apply bonjour options 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -32,11 +42,15 @@ exports[`bonjour option bonjour object and 'server' option should apply bonjour ] `; -exports[`bonjour option bonjour object and 'server' option should apply bonjour options: page errors 1`] = `[]`; +exports[`bonjour option > bonjour object and 'server' option > should apply bonjour options 3`] = ` +[] +`; -exports[`bonjour option bonjour object and 'server' option should apply bonjour options: response status 1`] = `200`; +exports[`bonjour option > with 'server' option > should call bonjour with 'https' type 1`] = ` +200 +`; -exports[`bonjour option with 'server' option should call bonjour with 'https' type: console messages 1`] = ` +exports[`bonjour option > with 'server' option > should call bonjour with 'https' type 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -44,6 +58,6 @@ exports[`bonjour option with 'server' option should call bonjour with 'https' ty ] `; -exports[`bonjour option with 'server' option should call bonjour with 'https' type: page errors 1`] = `[]`; - -exports[`bonjour option with 'server' option should call bonjour with 'https' type: response status 1`] = `200`; +exports[`bonjour option > with 'server' option > should call bonjour with 'https' type 3`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/built-in-routes.test.js.snap.webpack5 b/test/e2e/__snapshots__/built-in-routes.test.js.snap.webpack5 index c3df0191d7..5e20bc556f 100644 --- a/test/e2e/__snapshots__/built-in-routes.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/built-in-routes.test.js.snap.webpack5 @@ -1,8 +1,12 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +exports[`Built in routes > with multi config > should handle GET request to directory index and list all middleware directories 1`] = ` +"text/html; charset=utf-8" +`; -exports[`Built in routes with multi config should handle GET request to directory index and list all middleware directories: console messages 1`] = `[]`; +exports[`Built in routes > with multi config > should handle GET request to directory index and list all middleware directories 2`] = ` +200 +`; -exports[`Built in routes with multi config should handle GET request to directory index and list all middleware directories: directory list 1`] = ` +exports[`Built in routes > with multi config > should handle GET request to directory index and list all middleware directories 3`] = ` "

Assets Report:

" `; -exports[`Built in routes with multi config should handle GET request to directory index and list all middleware directories: page errors 1`] = `[]`; +exports[`Built in routes > with multi config > should handle GET request to directory index and list all middleware directories 4`] = ` +[] +`; -exports[`Built in routes with multi config should handle GET request to directory index and list all middleware directories: response headers content-type 1`] = `"text/html; charset=utf-8"`; +exports[`Built in routes > with multi config > should handle GET request to directory index and list all middleware directories 5`] = ` +[] +`; -exports[`Built in routes with multi config should handle GET request to directory index and list all middleware directories: response status 1`] = `200`; +exports[`Built in routes > with simple config > should handle GET request to directory index and list all middleware directories 1`] = ` +"text/html; charset=utf-8" +`; -exports[`Built in routes with simple config should handle GET request to directory index and list all middleware directories: console messages 1`] = `[]`; +exports[`Built in routes > with simple config > should handle GET request to directory index and list all middleware directories 2`] = ` +200 +`; -exports[`Built in routes with simple config should handle GET request to directory index and list all middleware directories: directory list 1`] = ` +exports[`Built in routes > with simple config > should handle GET request to directory index and list all middleware directories 3`] = ` "

Assets Report:

Compilation: unnamed

  • main.js
  • @@ -32,36 +44,66 @@ exports[`Built in routes with simple config should handle GET request to directo
" `; -exports[`Built in routes with simple config should handle GET request to directory index and list all middleware directories: page errors 1`] = `[]`; - -exports[`Built in routes with simple config should handle GET request to directory index and list all middleware directories: response headers content-type 1`] = `"text/html; charset=utf-8"`; +exports[`Built in routes > with simple config > should handle GET request to directory index and list all middleware directories 4`] = ` +[] +`; -exports[`Built in routes with simple config should handle GET request to directory index and list all middleware directories: response status 1`] = `200`; +exports[`Built in routes > with simple config > should handle GET request to directory index and list all middleware directories 5`] = ` +[] +`; -exports[`Built in routes with simple config should handle GET request to invalidate endpoint: console messages 1`] = `[]`; +exports[`Built in routes > with simple config > should handle GET request to invalidate endpoint 1`] = ` +200 +`; -exports[`Built in routes with simple config should handle GET request to invalidate endpoint: page errors 1`] = `[]`; +exports[`Built in routes > with simple config > should handle GET request to invalidate endpoint 2`] = ` +[] +`; -exports[`Built in routes with simple config should handle GET request to invalidate endpoint: response status 1`] = `200`; +exports[`Built in routes > with simple config > should handle GET request to invalidate endpoint 3`] = ` +[] +`; -exports[`Built in routes with simple config should handle GET request to magic async chunk: console messages 1`] = `[]`; +exports[`Built in routes > with simple config > should handle GET request to magic async chunk 1`] = ` +"text/javascript; charset=utf-8" +`; -exports[`Built in routes with simple config should handle GET request to magic async chunk: response headers content-type 1`] = `"text/javascript; charset=utf-8"`; +exports[`Built in routes > with simple config > should handle GET request to magic async chunk 2`] = ` +200 +`; -exports[`Built in routes with simple config should handle GET request to magic async chunk: response status 1`] = `200`; +exports[`Built in routes > with simple config > should handle GET request to magic async chunk 3`] = ` +[] +`; -exports[`Built in routes with simple config should handle HEAD request to directory index: console messages 1`] = `[]`; +exports[`Built in routes > with simple config > should handle HEAD request to directory index 1`] = ` +"text/html; charset=utf-8" +`; -exports[`Built in routes with simple config should handle HEAD request to directory index: directory list 1`] = `""`; +exports[`Built in routes > with simple config > should handle HEAD request to directory index 2`] = ` +200 +`; -exports[`Built in routes with simple config should handle HEAD request to directory index: page errors 1`] = `[]`; +exports[`Built in routes > with simple config > should handle HEAD request to directory index 3`] = ` +"" +`; -exports[`Built in routes with simple config should handle HEAD request to directory index: response headers content-type 1`] = `"text/html; charset=utf-8"`; +exports[`Built in routes > with simple config > should handle HEAD request to directory index 4`] = ` +[] +`; -exports[`Built in routes with simple config should handle HEAD request to directory index: response status 1`] = `200`; +exports[`Built in routes > with simple config > should handle HEAD request to directory index 5`] = ` +[] +`; -exports[`Built in routes with simple config should handle HEAD request to magic async chunk: console messages 1`] = `[]`; +exports[`Built in routes > with simple config > should handle HEAD request to magic async chunk 1`] = ` +"text/javascript; charset=utf-8" +`; -exports[`Built in routes with simple config should handle HEAD request to magic async chunk: response headers content-type 1`] = `"text/javascript; charset=utf-8"`; +exports[`Built in routes > with simple config > should handle HEAD request to magic async chunk 2`] = ` +200 +`; -exports[`Built in routes with simple config should handle HEAD request to magic async chunk: response status 1`] = `200`; +exports[`Built in routes > with simple config > should handle HEAD request to magic async chunk 3`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/client-reconnect.test.js.snap.webpack5 b/test/e2e/__snapshots__/client-reconnect.test.js.snap.webpack5 index d043471d44..9b4fc89af7 100644 --- a/test/e2e/__snapshots__/client-reconnect.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/client-reconnect.test.js.snap.webpack5 @@ -1,6 +1,8 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +exports[`client.reconnect option > specified as false > should not try to reconnect 1`] = ` +200 +`; -exports[`client.reconnect option specified as false should not try to reconnect: console messages 1`] = ` +exports[`client.reconnect option > specified as false > should not try to reconnect 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -9,11 +11,15 @@ exports[`client.reconnect option specified as false should not try to reconnect: ] `; -exports[`client.reconnect option specified as false should not try to reconnect: page errors 1`] = `[]`; +exports[`client.reconnect option > specified as false > should not try to reconnect 3`] = ` +[] +`; -exports[`client.reconnect option specified as false should not try to reconnect: response status 1`] = `200`; +exports[`client.reconnect option > specified as number > should try to reconnect 2 times 1`] = ` +200 +`; -exports[`client.reconnect option specified as number should try to reconnect 2 times: console messages 1`] = ` +exports[`client.reconnect option > specified as number > should try to reconnect 2 times 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -28,10 +34,14 @@ exports[`client.reconnect option specified as number should try to reconnect 2 t ] `; -exports[`client.reconnect option specified as number should try to reconnect 2 times: page errors 1`] = `[]`; - -exports[`client.reconnect option specified as number should try to reconnect 2 times: response status 1`] = `200`; +exports[`client.reconnect option > specified as number > should try to reconnect 2 times 3`] = ` +[] +`; -exports[`client.reconnect option specified as true should try to reconnect unlimited times: page errors 1`] = `[]`; +exports[`client.reconnect option > specified as true > should try to reconnect unlimited times 1`] = ` +200 +`; -exports[`client.reconnect option specified as true should try to reconnect unlimited times: response status 1`] = `200`; +exports[`client.reconnect option > specified as true > should try to reconnect unlimited times 2`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/client.test.js.snap.webpack5 b/test/e2e/__snapshots__/client.test.js.snap.webpack5 index 5e818f99ca..d1c447ec4c 100644 --- a/test/e2e/__snapshots__/client.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/client.test.js.snap.webpack5 @@ -1,14 +1,30 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +exports[`client option > configure client entry > should disable client entry 1`] = ` +[] +`; -exports[`client option configure client entry should disable client entry: console messages 1`] = `[]`; +exports[`client option > configure client entry > should disable client entry 2`] = ` +200 +`; -exports[`client option configure client entry should disable client entry: page errors 1`] = `[]`; +exports[`client option > configure client entry > should disable client entry 3`] = ` +[] +`; + +exports[`client option > configure client entry > should disable client entry 4`] = ` +[] +`; -exports[`client option configure client entry should disable client entry: response status 1`] = `200`; +exports[`client option > default behaviour > responds with a 200 status code for / path 1`] = ` +200 +`; -exports[`client option configure client entry should disable client entry: webSockets 1`] = `[]`; +exports[`client option > default behaviour > responds with a 200 status code for / path 2`] = ` +[ + "ws://localhost:8104/ws", +] +`; -exports[`client option default behaviour responds with a 200 status code for / path: console messages 1`] = ` +exports[`client option > default behaviour > responds with a 200 status code for / path 3`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -16,19 +32,21 @@ exports[`client option default behaviour responds with a 200 status code for / p ] `; -exports[`client option default behaviour responds with a 200 status code for / path: page errors 1`] = `[]`; +exports[`client option > default behaviour > responds with a 200 status code for / path 4`] = ` +[] +`; -exports[`client option default behaviour responds with a 200 status code for / path: response status 1`] = `200`; +exports[`client option > override client entry > should disable client entry 1`] = ` +200 +`; -exports[`client option default behaviour responds with a 200 status code for / path: webSockets 1`] = ` +exports[`client option > should respect path option > responds with a websocket with the /foo/test/bar path 1`] = ` [ - "ws://localhost:8104/ws", + "ws://localhost:8104/foo/test/bar", ] `; -exports[`client option override client entry should disable client entry: response status 1`] = `200`; - -exports[`client option should respect path option responds with a websocket with the /foo/test/bar path: console messages 1`] = ` +exports[`client option > should respect path option > responds with a websocket with the /foo/test/bar path 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -36,10 +54,6 @@ exports[`client option should respect path option responds with a websocket with ] `; -exports[`client option should respect path option responds with a websocket with the /foo/test/bar path: page errors 1`] = `[]`; - -exports[`client option should respect path option responds with a websocket with the /foo/test/bar path: webSockets 1`] = ` -[ - "ws://localhost:8104/foo/test/bar", -] +exports[`client option > should respect path option > responds with a websocket with the /foo/test/bar path 3`] = ` +[] `; diff --git a/test/e2e/__snapshots__/compress.test.js.snap.webpack5 b/test/e2e/__snapshots__/compress.test.js.snap.webpack5 index 306717f6a9..5bc874886d 100644 --- a/test/e2e/__snapshots__/compress.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/compress.test.js.snap.webpack5 @@ -1,25 +1,47 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +exports[`compress option > as false > should handle GET request to bundle file 1`] = ` +200 +`; -exports[`compress option as false should handle GET request to bundle file: console messages 1`] = `[]`; +exports[`compress option > as false > should handle GET request to bundle file 2`] = ` +undefined +`; -exports[`compress option as false should handle GET request to bundle file: page errors 1`] = `[]`; +exports[`compress option > as false > should handle GET request to bundle file 3`] = ` +[] +`; -exports[`compress option as false should handle GET request to bundle file: response headers content-encoding 1`] = `undefined`; +exports[`compress option > as false > should handle GET request to bundle file 4`] = ` +[] +`; -exports[`compress option as false should handle GET request to bundle file: response status 1`] = `200`; +exports[`compress option > as true > should handle GET request to bundle file 1`] = ` +200 +`; -exports[`compress option as true should handle GET request to bundle file: console messages 1`] = `[]`; +exports[`compress option > as true > should handle GET request to bundle file 2`] = ` +"br" +`; -exports[`compress option as true should handle GET request to bundle file: page errors 1`] = `[]`; +exports[`compress option > as true > should handle GET request to bundle file 3`] = ` +[] +`; -exports[`compress option as true should handle GET request to bundle file: response headers content-encoding 1`] = `"br"`; +exports[`compress option > as true > should handle GET request to bundle file 4`] = ` +[] +`; -exports[`compress option as true should handle GET request to bundle file: response status 1`] = `200`; +exports[`compress option > enabled by default when not specified > should handle GET request to bundle file 1`] = ` +200 +`; -exports[`compress option enabled by default when not specified should handle GET request to bundle file: console messages 1`] = `[]`; +exports[`compress option > enabled by default when not specified > should handle GET request to bundle file 2`] = ` +"br" +`; -exports[`compress option enabled by default when not specified should handle GET request to bundle file: page errors 1`] = `[]`; +exports[`compress option > enabled by default when not specified > should handle GET request to bundle file 3`] = ` +[] +`; -exports[`compress option enabled by default when not specified should handle GET request to bundle file: response headers content-encoding 1`] = `"br"`; - -exports[`compress option enabled by default when not specified should handle GET request to bundle file: response status 1`] = `200`; +exports[`compress option > enabled by default when not specified > should handle GET request to bundle file 4`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/entry.test.js.snap.webpack5 b/test/e2e/__snapshots__/entry.test.js.snap.webpack5 index 9c5547bbce..7b9589d95c 100644 --- a/test/e2e/__snapshots__/entry.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/entry.test.js.snap.webpack5 @@ -1,6 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`entry should work with dynamic async entry: console messages 1`] = ` +exports[`entry > should work with dynamic async entry 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -8,9 +6,11 @@ exports[`entry should work with dynamic async entry: console messages 1`] = ` ] `; -exports[`entry should work with dynamic async entry: page errors 1`] = `[]`; +exports[`entry > should work with dynamic async entry 2`] = ` +[] +`; -exports[`entry should work with dynamic entry: console messages 1`] = ` +exports[`entry > should work with dynamic entry 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -18,9 +18,11 @@ exports[`entry should work with dynamic entry: console messages 1`] = ` ] `; -exports[`entry should work with dynamic entry: page errors 1`] = `[]`; +exports[`entry > should work with dynamic entry 2`] = ` +[] +`; -exports[`entry should work with empty: console messages 1`] = ` +exports[`entry > should work with empty 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -28,9 +30,11 @@ exports[`entry should work with empty: console messages 1`] = ` ] `; -exports[`entry should work with empty: page errors 1`] = `[]`; +exports[`entry > should work with empty 2`] = ` +[] +`; -exports[`entry should work with multiple entries #2: console messages 1`] = ` +exports[`entry > should work with multiple entries #2 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -38,30 +42,36 @@ exports[`entry should work with multiple entries #2: console messages 1`] = ` ] `; -exports[`entry should work with multiple entries #2: page errors 1`] = `[]`; +exports[`entry > should work with multiple entries #2 2`] = ` +[] +`; -exports[`entry should work with multiple entries and "dependOn": console messages 1`] = ` +exports[`entry > should work with multiple entries 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", - "Bar.", "Hey.", ] `; -exports[`entry should work with multiple entries and "dependOn": page errors 1`] = `[]`; +exports[`entry > should work with multiple entries 2`] = ` +[] +`; -exports[`entry should work with multiple entries: console messages 1`] = ` +exports[`entry > should work with multiple entries and "dependOn" 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", + "Bar.", "Hey.", ] `; -exports[`entry should work with multiple entries: page errors 1`] = `[]`; +exports[`entry > should work with multiple entries and "dependOn" 2`] = ` +[] +`; -exports[`entry should work with object entry: console messages 1`] = ` +exports[`entry > should work with object entry 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -69,9 +79,11 @@ exports[`entry should work with object entry: console messages 1`] = ` ] `; -exports[`entry should work with object entry: page errors 1`] = `[]`; +exports[`entry > should work with object entry 2`] = ` +[] +`; -exports[`entry should work with single array entry: console messages 1`] = ` +exports[`entry > should work with single array entry 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -80,9 +92,11 @@ exports[`entry should work with single array entry: console messages 1`] = ` ] `; -exports[`entry should work with single array entry: page errors 1`] = `[]`; +exports[`entry > should work with single array entry 2`] = ` +[] +`; -exports[`entry should work with single entry: console messages 1`] = ` +exports[`entry > should work with single entry 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -90,4 +104,6 @@ exports[`entry should work with single entry: console messages 1`] = ` ] `; -exports[`entry should work with single entry: page errors 1`] = `[]`; +exports[`entry > should work with single entry 2`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/headers.test.js.snap.webpack5 b/test/e2e/__snapshots__/headers.test.js.snap.webpack5 index b8141019c5..8fc426151c 100644 --- a/test/e2e/__snapshots__/headers.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/headers.test.js.snap.webpack5 @@ -1,6 +1,13 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +exports[`headers option > as a function > should handle GET request with headers as a function 1`] = ` +"key1=value1 +key2=value2" +`; + +exports[`headers option > as a function > should handle GET request with headers as a function 2`] = ` +200 +`; -exports[`headers option as a function returning an array should handle GET request with headers: console messages 1`] = ` +exports[`headers option > as a function > should handle GET request with headers as a function 3`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -8,15 +15,23 @@ exports[`headers option as a function returning an array should handle GET reque ] `; -exports[`headers option as a function returning an array should handle GET request with headers: page errors 1`] = `[]`; +exports[`headers option > as a function > should handle GET request with headers as a function 4`] = ` +[] +`; -exports[`headers option as a function returning an array should handle GET request with headers: response headers x-bar 1`] = `"value2"`; +exports[`headers option > as a function returning an array > should handle GET request with headers 1`] = ` +"value1" +`; -exports[`headers option as a function returning an array should handle GET request with headers: response headers x-foo 1`] = `"value1"`; +exports[`headers option > as a function returning an array > should handle GET request with headers 2`] = ` +"value2" +`; -exports[`headers option as a function returning an array should handle GET request with headers: response status 1`] = `200`; +exports[`headers option > as a function returning an array > should handle GET request with headers 3`] = ` +200 +`; -exports[`headers option as a function should handle GET request with headers as a function: console messages 1`] = ` +exports[`headers option > as a function returning an array > should handle GET request with headers 4`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -24,16 +39,19 @@ exports[`headers option as a function should handle GET request with headers as ] `; -exports[`headers option as a function should handle GET request with headers as a function: page errors 1`] = `[]`; +exports[`headers option > as a function returning an array > should handle GET request with headers 5`] = ` +[] +`; -exports[`headers option as a function should handle GET request with headers as a function: response headers x-bar 1`] = ` -"key1=value1 -key2=value2" +exports[`headers option > as a string > should handle GET request with headers 1`] = ` +"dev-server headers" `; -exports[`headers option as a function should handle GET request with headers as a function: response status 1`] = `200`; +exports[`headers option > as a string > should handle GET request with headers 2`] = ` +200 +`; -exports[`headers option as a string and support HEAD request should handle HEAD request with headers: console messages 1`] = ` +exports[`headers option > as a string > should handle GET request with headers 3`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -41,13 +59,19 @@ exports[`headers option as a string and support HEAD request should handle HEAD ] `; -exports[`headers option as a string and support HEAD request should handle HEAD request with headers: page errors 1`] = `[]`; +exports[`headers option > as a string > should handle GET request with headers 4`] = ` +[] +`; -exports[`headers option as a string and support HEAD request should handle HEAD request with headers: response headers x-foo 1`] = `"dev-server headers"`; +exports[`headers option > as a string and support HEAD request > should handle HEAD request with headers 1`] = ` +"dev-server headers" +`; -exports[`headers option as a string and support HEAD request should handle HEAD request with headers: response status 1`] = `200`; +exports[`headers option > as a string and support HEAD request > should handle HEAD request with headers 2`] = ` +200 +`; -exports[`headers option as a string should handle GET request with headers: console messages 1`] = ` +exports[`headers option > as a string and support HEAD request > should handle HEAD request with headers 3`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -55,13 +79,20 @@ exports[`headers option as a string should handle GET request with headers: cons ] `; -exports[`headers option as a string should handle GET request with headers: page errors 1`] = `[]`; +exports[`headers option > as a string and support HEAD request > should handle HEAD request with headers 4`] = ` +[] +`; -exports[`headers option as a string should handle GET request with headers: response headers x-foo 1`] = `"dev-server headers"`; +exports[`headers option > as an array > should handle GET request with headers as an array 1`] = ` +"key1=value1 +key2=value2" +`; -exports[`headers option as a string should handle GET request with headers: response status 1`] = `200`; +exports[`headers option > as an array > should handle GET request with headers as an array 2`] = ` +200 +`; -exports[`headers option as an array of objects should handle GET request with headers: console messages 1`] = ` +exports[`headers option > as an array > should handle GET request with headers as an array 3`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -69,15 +100,23 @@ exports[`headers option as an array of objects should handle GET request with he ] `; -exports[`headers option as an array of objects should handle GET request with headers: page errors 1`] = `[]`; +exports[`headers option > as an array > should handle GET request with headers as an array 4`] = ` +[] +`; -exports[`headers option as an array of objects should handle GET request with headers: response headers x-bar 1`] = `"value2"`; +exports[`headers option > as an array of objects > should handle GET request with headers 1`] = ` +"value1" +`; -exports[`headers option as an array of objects should handle GET request with headers: response headers x-foo 1`] = `"value1"`; +exports[`headers option > as an array of objects > should handle GET request with headers 2`] = ` +"value2" +`; -exports[`headers option as an array of objects should handle GET request with headers: response status 1`] = `200`; +exports[`headers option > as an array of objects > should handle GET request with headers 3`] = ` +200 +`; -exports[`headers option as an array should handle GET request with headers as an array: console messages 1`] = ` +exports[`headers option > as an array of objects > should handle GET request with headers 4`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -85,16 +124,19 @@ exports[`headers option as an array should handle GET request with headers as an ] `; -exports[`headers option as an array should handle GET request with headers as an array: page errors 1`] = `[]`; +exports[`headers option > as an array of objects > should handle GET request with headers 5`] = ` +[] +`; -exports[`headers option as an array should handle GET request with headers as an array: response headers x-bar 1`] = ` -"key1=value1 -key2=value2" +exports[`headers option > dev middleware headers take precedence for dev middleware output files > should handle GET request with headers as a function 1`] = ` +"dev-middleware-headers" `; -exports[`headers option as an array should handle GET request with headers as an array: response status 1`] = `200`; +exports[`headers option > dev middleware headers take precedence for dev middleware output files > should handle GET request with headers as a function 2`] = ` +200 +`; -exports[`headers option dev middleware headers take precedence for dev middleware output files should handle GET request with headers as a function: console messages 1`] = ` +exports[`headers option > dev middleware headers take precedence for dev middleware output files > should handle GET request with headers as a function 3`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -102,8 +144,6 @@ exports[`headers option dev middleware headers take precedence for dev middlewar ] `; -exports[`headers option dev middleware headers take precedence for dev middleware output files should handle GET request with headers as a function: page errors 1`] = `[]`; - -exports[`headers option dev middleware headers take precedence for dev middleware output files should handle GET request with headers as a function: response headers x-foo 1`] = `"dev-middleware-headers"`; - -exports[`headers option dev middleware headers take precedence for dev middleware output files should handle GET request with headers as a function: response status 1`] = `200`; +exports[`headers option > dev middleware headers take precedence for dev middleware output files > should handle GET request with headers as a function 4`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/history-api-fallback.test.js.snap.webpack5 b/test/e2e/__snapshots__/history-api-fallback.test.js.snap.webpack5 index 5490dc26d5..1ddc3106f8 100644 --- a/test/e2e/__snapshots__/history-api-fallback.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/history-api-fallback.test.js.snap.webpack5 @@ -1,153 +1,243 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`historyApiFallback option as boolean should handle GET request to directory: console messages 1`] = `[]`; - -exports[`historyApiFallback option as boolean should handle GET request to directory: page errors 1`] = `[]`; - -exports[`historyApiFallback option as boolean should handle GET request to directory: response headers content-type 1`] = `"text/html; charset=utf-8"`; +exports[`historyApiFallback option > as boolean > should handle GET request to directory 1`] = ` +"text/html; charset=utf-8" +`; -exports[`historyApiFallback option as boolean should handle GET request to directory: response status 1`] = `200`; +exports[`historyApiFallback option > as boolean > should handle GET request to directory 2`] = ` +200 +`; -exports[`historyApiFallback option as boolean should handle GET request to directory: response text 1`] = ` +exports[`historyApiFallback option > as boolean > should handle GET request to directory 3`] = ` "Heyyy " `; -exports[`historyApiFallback option as object should handle GET request to directory: console messages 1`] = `[]`; +exports[`historyApiFallback option > as boolean > should handle GET request to directory 4`] = ` +[] +`; -exports[`historyApiFallback option as object should handle GET request to directory: page errors 1`] = `[]`; +exports[`historyApiFallback option > as boolean > should handle GET request to directory 5`] = ` +[] +`; -exports[`historyApiFallback option as object should handle GET request to directory: response headers content-type 1`] = `"text/html; charset=utf-8"`; +exports[`historyApiFallback option > as object > should handle GET request to directory 1`] = ` +"text/html; charset=utf-8" +`; -exports[`historyApiFallback option as object should handle GET request to directory: response status 1`] = `200`; +exports[`historyApiFallback option > as object > should handle GET request to directory 2`] = ` +200 +`; -exports[`historyApiFallback option as object should handle GET request to directory: response text 1`] = ` +exports[`historyApiFallback option > as object > should handle GET request to directory 3`] = ` "Foobar " `; -exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect any other specified rewrites: console messages 1`] = `[]`; +exports[`historyApiFallback option > as object > should handle GET request to directory 4`] = ` +[] +`; -exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect any other specified rewrites: page errors 1`] = `[]`; +exports[`historyApiFallback option > as object > should handle GET request to directory 5`] = ` +[] +`; -exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect any other specified rewrites: response headers content-type 1`] = `"text/html; charset=utf-8"`; +exports[`historyApiFallback option > as object with static > should handle GET request to directory 1`] = ` +"text/html; charset=utf-8" +`; -exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect any other specified rewrites: response status 1`] = `200`; +exports[`historyApiFallback option > as object with static > should handle GET request to directory 2`] = ` +200 +`; -exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect any other specified rewrites: response text 1`] = ` -"Other file +exports[`historyApiFallback option > as object with static > should handle GET request to directory 3`] = ` +"Foobar " `; -exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect rewrites and shows index for unknown urls: console messages 1`] = `[]`; +exports[`historyApiFallback option > as object with static > should handle GET request to directory 4`] = ` +[] +`; -exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect rewrites and shows index for unknown urls: page errors 1`] = `[]`; +exports[`historyApiFallback option > as object with static > should handle GET request to directory 5`] = ` +[] +`; -exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect rewrites and shows index for unknown urls: response headers content-type 1`] = `"text/html; charset=utf-8"`; +exports[`historyApiFallback option > as object with static > should prefer static file over historyApiFallback 1`] = ` +"text/plain; charset=utf-8" +`; -exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect rewrites and shows index for unknown urls: response status 1`] = `200`; +exports[`historyApiFallback option > as object with static > should prefer static file over historyApiFallback 2`] = ` +200 +`; -exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect rewrites and shows index for unknown urls: response text 1`] = ` -"Foobar +exports[`historyApiFallback option > as object with static > should prefer static file over historyApiFallback 3`] = ` +"Random file " `; -exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect rewrites for index: console messages 1`] = `[]`; +exports[`historyApiFallback option > as object with static > should prefer static file over historyApiFallback 4`] = ` +[] +`; -exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect rewrites for index: page errors 1`] = `[]`; +exports[`historyApiFallback option > as object with static > should prefer static file over historyApiFallback 5`] = ` +[] +`; -exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect rewrites for index: response headers content-type 1`] = `"text/html; charset=utf-8"`; +exports[`historyApiFallback option > as object with static and rewrites > historyApiFallback respect any other specified rewrites 1`] = ` +"text/html; charset=utf-8" +`; -exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect rewrites for index: response status 1`] = `200`; +exports[`historyApiFallback option > as object with static and rewrites > historyApiFallback respect any other specified rewrites 2`] = ` +200 +`; -exports[`historyApiFallback option as object with static and rewrites historyApiFallback respect rewrites for index: response text 1`] = ` -"Foobar +exports[`historyApiFallback option > as object with static and rewrites > historyApiFallback respect any other specified rewrites 3`] = ` +"Other file " `; -exports[`historyApiFallback option as object with static set to false historyApiFallback should work and ignore static content: console messages 1`] = `[]`; +exports[`historyApiFallback option > as object with static and rewrites > historyApiFallback respect any other specified rewrites 4`] = ` +[] +`; -exports[`historyApiFallback option as object with static set to false historyApiFallback should work and ignore static content: page errors 1`] = `[]`; +exports[`historyApiFallback option > as object with static and rewrites > historyApiFallback respect any other specified rewrites 5`] = ` +[] +`; -exports[`historyApiFallback option as object with static set to false historyApiFallback should work and ignore static content: response headers content-type 1`] = `"text/html; charset=utf-8"`; +exports[`historyApiFallback option > as object with static and rewrites > historyApiFallback respect rewrites and shows index for unknown urls 1`] = ` +"text/html; charset=utf-8" +`; -exports[`historyApiFallback option as object with static set to false historyApiFallback should work and ignore static content: response status 1`] = `200`; +exports[`historyApiFallback option > as object with static and rewrites > historyApiFallback respect rewrites and shows index for unknown urls 2`] = ` +200 +`; -exports[`historyApiFallback option as object with static set to false historyApiFallback should work and ignore static content: response text 1`] = ` -"In-memory file +exports[`historyApiFallback option > as object with static and rewrites > historyApiFallback respect rewrites and shows index for unknown urls 3`] = ` +"Foobar " `; -exports[`historyApiFallback option as object with static should handle GET request to directory: console messages 1`] = `[]`; +exports[`historyApiFallback option > as object with static and rewrites > historyApiFallback respect rewrites and shows index for unknown urls 4`] = ` +[] +`; -exports[`historyApiFallback option as object with static should handle GET request to directory: page errors 1`] = `[]`; +exports[`historyApiFallback option > as object with static and rewrites > historyApiFallback respect rewrites and shows index for unknown urls 5`] = ` +[] +`; -exports[`historyApiFallback option as object with static should handle GET request to directory: response headers content-type 1`] = `"text/html; charset=utf-8"`; +exports[`historyApiFallback option > as object with static and rewrites > historyApiFallback respect rewrites for index 1`] = ` +"text/html; charset=utf-8" +`; -exports[`historyApiFallback option as object with static should handle GET request to directory: response status 1`] = `200`; +exports[`historyApiFallback option > as object with static and rewrites > historyApiFallback respect rewrites for index 2`] = ` +200 +`; -exports[`historyApiFallback option as object with static should handle GET request to directory: response text 1`] = ` +exports[`historyApiFallback option > as object with static and rewrites > historyApiFallback respect rewrites for index 3`] = ` "Foobar " `; -exports[`historyApiFallback option as object with static should prefer static file over historyApiFallback: console messages 1`] = `[]`; +exports[`historyApiFallback option > as object with static and rewrites > historyApiFallback respect rewrites for index 4`] = ` +[] +`; -exports[`historyApiFallback option as object with static should prefer static file over historyApiFallback: page errors 1`] = `[]`; +exports[`historyApiFallback option > as object with static and rewrites > historyApiFallback respect rewrites for index 5`] = ` +[] +`; -exports[`historyApiFallback option as object with static should prefer static file over historyApiFallback: response headers content-type 1`] = `"text/plain; charset=utf-8"`; +exports[`historyApiFallback option > as object with static set to false > historyApiFallback should work and ignore static content 1`] = ` +"text/html; charset=utf-8" +`; -exports[`historyApiFallback option as object with static should prefer static file over historyApiFallback: response status 1`] = `200`; +exports[`historyApiFallback option > as object with static set to false > historyApiFallback should work and ignore static content 2`] = ` +200 +`; -exports[`historyApiFallback option as object with static should prefer static file over historyApiFallback: response text 1`] = ` -"Random file +exports[`historyApiFallback option > as object with static set to false > historyApiFallback should work and ignore static content 3`] = ` +"In-memory file " `; -exports[`historyApiFallback option as object with the "logger" option request to directory and log: console messages 1`] = `[]`; +exports[`historyApiFallback option > as object with static set to false > historyApiFallback should work and ignore static content 4`] = ` +[] +`; -exports[`historyApiFallback option as object with the "logger" option request to directory and log: page errors 1`] = `[]`; +exports[`historyApiFallback option > as object with static set to false > historyApiFallback should work and ignore static content 5`] = ` +[] +`; -exports[`historyApiFallback option as object with the "logger" option request to directory and log: response headers content-type 1`] = `"text/html; charset=utf-8"`; +exports[`historyApiFallback option > as object with the "logger" option > request to directory and log 1`] = ` +"text/html; charset=utf-8" +`; -exports[`historyApiFallback option as object with the "logger" option request to directory and log: response status 1`] = `200`; +exports[`historyApiFallback option > as object with the "logger" option > request to directory and log 2`] = ` +200 +`; -exports[`historyApiFallback option as object with the "logger" option request to directory and log: response text 1`] = ` +exports[`historyApiFallback option > as object with the "logger" option > request to directory and log 3`] = ` "Foobar " `; -exports[`historyApiFallback option as object with the "verbose" option request to directory and log: console messages 1`] = `[]`; +exports[`historyApiFallback option > as object with the "logger" option > request to directory and log 4`] = ` +[] +`; -exports[`historyApiFallback option as object with the "verbose" option request to directory and log: page errors 1`] = `[]`; +exports[`historyApiFallback option > as object with the "logger" option > request to directory and log 5`] = ` +[] +`; -exports[`historyApiFallback option as object with the "verbose" option request to directory and log: response headers content-type 1`] = `"text/html; charset=utf-8"`; +exports[`historyApiFallback option > as object with the "verbose" option > request to directory and log 1`] = ` +"text/html; charset=utf-8" +`; -exports[`historyApiFallback option as object with the "verbose" option request to directory and log: response status 1`] = `200`; +exports[`historyApiFallback option > as object with the "verbose" option > request to directory and log 2`] = ` +200 +`; -exports[`historyApiFallback option as object with the "verbose" option request to directory and log: response text 1`] = ` +exports[`historyApiFallback option > as object with the "verbose" option > request to directory and log 3`] = ` "Foobar " `; -exports[`historyApiFallback option in-memory files should perform HEAD request in same way as GET: response headers content-type 1`] = `"text/html; charset=utf-8"`; +exports[`historyApiFallback option > as object with the "verbose" option > request to directory and log 4`] = ` +[] +`; -exports[`historyApiFallback option in-memory files should perform HEAD request in same way as GET: response status 1`] = `"OK"`; +exports[`historyApiFallback option > as object with the "verbose" option > request to directory and log 5`] = ` +[] +`; -exports[`historyApiFallback option in-memory files should perform HEAD request in same way as GET: response text 1`] = ` -"In-memory file -" +exports[`historyApiFallback option > in-memory files > should perform HEAD request in same way as GET 1`] = ` +"text/html; charset=utf-8" `; -exports[`historyApiFallback option in-memory files should take precedence over static files: console messages 1`] = `[]`; +exports[`historyApiFallback option > in-memory files > should perform HEAD request in same way as GET 2`] = ` +"OK" +`; -exports[`historyApiFallback option in-memory files should take precedence over static files: page errors 1`] = `[]`; +exports[`historyApiFallback option > in-memory files > should perform HEAD request in same way as GET 3`] = ` +"In-memory file +" +`; -exports[`historyApiFallback option in-memory files should take precedence over static files: response headers content-type 1`] = `"text/html; charset=utf-8"`; +exports[`historyApiFallback option > in-memory files > should take precedence over static files 1`] = ` +"text/html; charset=utf-8" +`; -exports[`historyApiFallback option in-memory files should take precedence over static files: response status 1`] = `200`; +exports[`historyApiFallback option > in-memory files > should take precedence over static files 2`] = ` +200 +`; -exports[`historyApiFallback option in-memory files should take precedence over static files: response text 1`] = ` +exports[`historyApiFallback option > in-memory files > should take precedence over static files 3`] = ` "In-memory file " `; + +exports[`historyApiFallback option > in-memory files > should take precedence over static files 4`] = ` +[] +`; + +exports[`historyApiFallback option > in-memory files > should take precedence over static files 5`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/host.test.js.snap.webpack5 b/test/e2e/__snapshots__/host.test.js.snap.webpack5 index 69c627cdb0..b43c45a9d1 100644 --- a/test/e2e/__snapshots__/host.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/host.test.js.snap.webpack5 @@ -1,6 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`host should work using "::" host and "auto" port: console messages 1`] = ` +exports[`host > should work using "0.0.0.0" host and "auto" port 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -8,9 +6,11 @@ exports[`host should work using "::" host and "auto" port: console messages 1`] ] `; -exports[`host should work using "::" host and "auto" port: page errors 1`] = `[]`; +exports[`host > should work using "0.0.0.0" host and "auto" port 2`] = ` +[] +`; -exports[`host should work using "::" host and port as number: console messages 1`] = ` +exports[`host > should work using "0.0.0.0" host and port as number 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -18,9 +18,11 @@ exports[`host should work using "::" host and port as number: console messages 1 ] `; -exports[`host should work using "::" host and port as number: page errors 1`] = `[]`; +exports[`host > should work using "0.0.0.0" host and port as number 2`] = ` +[] +`; -exports[`host should work using "::" host and port as string: console messages 1`] = ` +exports[`host > should work using "0.0.0.0" host and port as string 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -28,9 +30,11 @@ exports[`host should work using "::" host and port as string: console messages 1 ] `; -exports[`host should work using "::" host and port as string: page errors 1`] = `[]`; +exports[`host > should work using "0.0.0.0" host and port as string 2`] = ` +[] +`; -exports[`host should work using "::1" host and "auto" port: console messages 1`] = ` +exports[`host > should work using "127.0.0.1" host and "auto" port 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -38,9 +42,11 @@ exports[`host should work using "::1" host and "auto" port: console messages 1`] ] `; -exports[`host should work using "::1" host and "auto" port: page errors 1`] = `[]`; +exports[`host > should work using "127.0.0.1" host and "auto" port 2`] = ` +[] +`; -exports[`host should work using "::1" host and port as number: console messages 1`] = ` +exports[`host > should work using "127.0.0.1" host and port as number 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -48,9 +54,11 @@ exports[`host should work using "::1" host and port as number: console messages ] `; -exports[`host should work using "::1" host and port as number: page errors 1`] = `[]`; +exports[`host > should work using "127.0.0.1" host and port as number 2`] = ` +[] +`; -exports[`host should work using "::1" host and port as string: console messages 1`] = ` +exports[`host > should work using "127.0.0.1" host and port as string 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -58,9 +66,11 @@ exports[`host should work using "::1" host and port as string: console messages ] `; -exports[`host should work using "::1" host and port as string: page errors 1`] = `[]`; +exports[`host > should work using "127.0.0.1" host and port as string 2`] = ` +[] +`; -exports[`host should work using "" host and "auto" port: console messages 1`] = ` +exports[`host > should work using "::" host and "auto" port 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -68,9 +78,11 @@ exports[`host should work using "" host and "auto" port: console ] `; -exports[`host should work using "" host and "auto" port: page errors 1`] = `[]`; +exports[`host > should work using "::" host and "auto" port 2`] = ` +[] +`; -exports[`host should work using "" host and port as number: console messages 1`] = ` +exports[`host > should work using "::" host and port as number 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -78,9 +90,11 @@ exports[`host should work using "" host and port as number: conso ] `; -exports[`host should work using "" host and port as number: page errors 1`] = `[]`; +exports[`host > should work using "::" host and port as number 2`] = ` +[] +`; -exports[`host should work using "" host and port as string: console messages 1`] = ` +exports[`host > should work using "::" host and port as string 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -88,9 +102,11 @@ exports[`host should work using "" host and port as string: conso ] `; -exports[`host should work using "" host and port as string: page errors 1`] = `[]`; +exports[`host > should work using "::" host and port as string 2`] = ` +[] +`; -exports[`host should work using "0.0.0.0" host and "auto" port: console messages 1`] = ` +exports[`host > should work using "::1" host and "auto" port 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -98,9 +114,11 @@ exports[`host should work using "0.0.0.0" host and "auto" port: console messages ] `; -exports[`host should work using "0.0.0.0" host and "auto" port: page errors 1`] = `[]`; +exports[`host > should work using "::1" host and "auto" port 2`] = ` +[] +`; -exports[`host should work using "0.0.0.0" host and port as number: console messages 1`] = ` +exports[`host > should work using "::1" host and port as number 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -108,9 +126,11 @@ exports[`host should work using "0.0.0.0" host and port as number: console messa ] `; -exports[`host should work using "0.0.0.0" host and port as number: page errors 1`] = `[]`; +exports[`host > should work using "::1" host and port as number 2`] = ` +[] +`; -exports[`host should work using "0.0.0.0" host and port as string: console messages 1`] = ` +exports[`host > should work using "::1" host and port as string 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -118,9 +138,11 @@ exports[`host should work using "0.0.0.0" host and port as string: console messa ] `; -exports[`host should work using "0.0.0.0" host and port as string: page errors 1`] = `[]`; +exports[`host > should work using "::1" host and port as string 2`] = ` +[] +`; -exports[`host should work using "127.0.0.1" host and "auto" port: console messages 1`] = ` +exports[`host > should work using "" host and "auto" port 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -128,9 +150,11 @@ exports[`host should work using "127.0.0.1" host and "auto" port: console messag ] `; -exports[`host should work using "127.0.0.1" host and "auto" port: page errors 1`] = `[]`; +exports[`host > should work using "" host and "auto" port 2`] = ` +[] +`; -exports[`host should work using "127.0.0.1" host and port as number: console messages 1`] = ` +exports[`host > should work using "" host and port as number 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -138,9 +162,11 @@ exports[`host should work using "127.0.0.1" host and port as number: console mes ] `; -exports[`host should work using "127.0.0.1" host and port as number: page errors 1`] = `[]`; +exports[`host > should work using "" host and port as number 2`] = ` +[] +`; -exports[`host should work using "127.0.0.1" host and port as string: console messages 1`] = ` +exports[`host > should work using "" host and port as string 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -148,9 +174,11 @@ exports[`host should work using "127.0.0.1" host and port as string: console mes ] `; -exports[`host should work using "127.0.0.1" host and port as string: page errors 1`] = `[]`; +exports[`host > should work using "" host and port as string 2`] = ` +[] +`; -exports[`host should work using "local-ip" host and "auto" port: console messages 1`] = ` +exports[`host > should work using "local-ip" host and "auto" port 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -158,9 +186,11 @@ exports[`host should work using "local-ip" host and "auto" port: console message ] `; -exports[`host should work using "local-ip" host and "auto" port: page errors 1`] = `[]`; +exports[`host > should work using "local-ip" host and "auto" port 2`] = ` +[] +`; -exports[`host should work using "local-ip" host and port as number: console messages 1`] = ` +exports[`host > should work using "local-ip" host and port as number 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -168,9 +198,11 @@ exports[`host should work using "local-ip" host and port as number: console mess ] `; -exports[`host should work using "local-ip" host and port as number: page errors 1`] = `[]`; +exports[`host > should work using "local-ip" host and port as number 2`] = ` +[] +`; -exports[`host should work using "local-ip" host and port as string: console messages 1`] = ` +exports[`host > should work using "local-ip" host and port as string 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -178,9 +210,11 @@ exports[`host should work using "local-ip" host and port as string: console mess ] `; -exports[`host should work using "local-ip" host and port as string: page errors 1`] = `[]`; +exports[`host > should work using "local-ip" host and port as string 2`] = ` +[] +`; -exports[`host should work using "local-ipv4" host and "auto" port: console messages 1`] = ` +exports[`host > should work using "local-ipv4" host and "auto" port 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -188,9 +222,11 @@ exports[`host should work using "local-ipv4" host and "auto" port: console messa ] `; -exports[`host should work using "local-ipv4" host and "auto" port: page errors 1`] = `[]`; +exports[`host > should work using "local-ipv4" host and "auto" port 2`] = ` +[] +`; -exports[`host should work using "local-ipv4" host and port as number: console messages 1`] = ` +exports[`host > should work using "local-ipv4" host and port as number 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -198,9 +234,11 @@ exports[`host should work using "local-ipv4" host and port as number: console me ] `; -exports[`host should work using "local-ipv4" host and port as number: page errors 1`] = `[]`; +exports[`host > should work using "local-ipv4" host and port as number 2`] = ` +[] +`; -exports[`host should work using "local-ipv4" host and port as string: console messages 1`] = ` +exports[`host > should work using "local-ipv4" host and port as string 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -208,9 +246,11 @@ exports[`host should work using "local-ipv4" host and port as string: console me ] `; -exports[`host should work using "local-ipv4" host and port as string: page errors 1`] = `[]`; +exports[`host > should work using "local-ipv4" host and port as string 2`] = ` +[] +`; -exports[`host should work using "local-ipv6" host and "auto" port: console messages 1`] = ` +exports[`host > should work using "local-ipv6" host and "auto" port 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -218,9 +258,11 @@ exports[`host should work using "local-ipv6" host and "auto" port: console messa ] `; -exports[`host should work using "local-ipv6" host and "auto" port: page errors 1`] = `[]`; +exports[`host > should work using "local-ipv6" host and "auto" port 2`] = ` +[] +`; -exports[`host should work using "local-ipv6" host and port as number: console messages 1`] = ` +exports[`host > should work using "local-ipv6" host and port as number 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -228,9 +270,11 @@ exports[`host should work using "local-ipv6" host and port as number: console me ] `; -exports[`host should work using "local-ipv6" host and port as number: page errors 1`] = `[]`; +exports[`host > should work using "local-ipv6" host and port as number 2`] = ` +[] +`; -exports[`host should work using "local-ipv6" host and port as string: console messages 1`] = ` +exports[`host > should work using "local-ipv6" host and port as string 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -238,9 +282,11 @@ exports[`host should work using "local-ipv6" host and port as string: console me ] `; -exports[`host should work using "local-ipv6" host and port as string: page errors 1`] = `[]`; +exports[`host > should work using "local-ipv6" host and port as string 2`] = ` +[] +`; -exports[`host should work using "localhost" host and "auto" port: console messages 1`] = ` +exports[`host > should work using "localhost" host and "auto" port 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -248,9 +294,11 @@ exports[`host should work using "localhost" host and "auto" port: console messag ] `; -exports[`host should work using "localhost" host and "auto" port: page errors 1`] = `[]`; +exports[`host > should work using "localhost" host and "auto" port 2`] = ` +[] +`; -exports[`host should work using "localhost" host and port as number: console messages 1`] = ` +exports[`host > should work using "localhost" host and port as number 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -258,9 +306,11 @@ exports[`host should work using "localhost" host and port as number: console mes ] `; -exports[`host should work using "localhost" host and port as number: page errors 1`] = `[]`; +exports[`host > should work using "localhost" host and port as number 2`] = ` +[] +`; -exports[`host should work using "localhost" host and port as string: console messages 1`] = ` +exports[`host > should work using "localhost" host and port as string 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -268,9 +318,11 @@ exports[`host should work using "localhost" host and port as string: console mes ] `; -exports[`host should work using "localhost" host and port as string: page errors 1`] = `[]`; +exports[`host > should work using "localhost" host and port as string 2`] = ` +[] +`; -exports[`host should work using "undefined" host and "auto" port: console messages 1`] = ` +exports[`host > should work using "undefined" host and "auto" port 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -278,9 +330,11 @@ exports[`host should work using "undefined" host and "auto" port: console messag ] `; -exports[`host should work using "undefined" host and "auto" port: page errors 1`] = `[]`; +exports[`host > should work using "undefined" host and "auto" port 2`] = ` +[] +`; -exports[`host should work using "undefined" host and port as number: console messages 1`] = ` +exports[`host > should work using "undefined" host and port as number 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -288,9 +342,11 @@ exports[`host should work using "undefined" host and port as number: console mes ] `; -exports[`host should work using "undefined" host and port as number: page errors 1`] = `[]`; +exports[`host > should work using "undefined" host and port as number 2`] = ` +[] +`; -exports[`host should work using "undefined" host and port as string: console messages 1`] = ` +exports[`host > should work using "undefined" host and port as string 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -298,4 +354,6 @@ exports[`host should work using "undefined" host and port as string: console mes ] `; -exports[`host should work using "undefined" host and port as string: page errors 1`] = `[]`; +exports[`host > should work using "undefined" host and port as string 2`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/hot-and-live-reload.test.js.snap.webpack5 b/test/e2e/__snapshots__/hot-and-live-reload.test.js.snap.webpack5 index eb184786fa..cedf476743 100644 --- a/test/e2e/__snapshots__/hot-and-live-reload.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/hot-and-live-reload.test.js.snap.webpack5 @@ -1,24 +1,26 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`hot and live reload should not refresh content when hot and no live reload disabled (default): console messages 1`] = ` +exports[`hot and live reload > should not refresh content when hot and no live reload disabled (default) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading disabled, Progress disabled, Overlay enabled.", "[webpack-dev-server] App updated. Recompiling...", ] `; -exports[`hot and live reload should not refresh content when hot and no live reload disabled (default): page errors 1`] = `[]`; +exports[`hot and live reload > should not refresh content when hot and no live reload disabled (default) 2`] = ` +[] +`; -exports[`hot and live reload should not refresh content when hot and no live reload disabled (ws): console messages 1`] = ` +exports[`hot and live reload > should not refresh content when hot and no live reload disabled (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading disabled, Progress disabled, Overlay enabled.", "[webpack-dev-server] App updated. Recompiling...", ] `; -exports[`hot and live reload should not refresh content when hot and no live reload disabled (ws): page errors 1`] = `[]`; +exports[`hot and live reload > should not refresh content when hot and no live reload disabled (ws) 2`] = ` +[] +`; -exports[`hot and live reload should work and allow to disable hot module replacement and live reload using the "webpack-dev-server-hot=false&webpack-dev-server-live-reload=false" (default): console messages 1`] = ` +exports[`hot and live reload > should work and allow to disable hot module replacement and live reload using the "webpack-dev-server-hot=false&webpack-dev-server-live-reload=false" (default) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -26,9 +28,11 @@ exports[`hot and live reload should work and allow to disable hot module replace ] `; -exports[`hot and live reload should work and allow to disable hot module replacement and live reload using the "webpack-dev-server-hot=false&webpack-dev-server-live-reload=false" (default): page errors 1`] = `[]`; +exports[`hot and live reload > should work and allow to disable hot module replacement and live reload using the "webpack-dev-server-hot=false&webpack-dev-server-live-reload=false" (default) 2`] = ` +[] +`; -exports[`hot and live reload should work and allow to disable hot module replacement using the "webpack-dev-server-hot=false" (default): console messages 1`] = ` +exports[`hot and live reload > should work and allow to disable hot module replacement using the "webpack-dev-server-hot=false" (default) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -39,22 +43,30 @@ exports[`hot and live reload should work and allow to disable hot module replace ] `; -exports[`hot and live reload should work and allow to disable hot module replacement using the "webpack-dev-server-hot=false" (default): page errors 1`] = `[]`; +exports[`hot and live reload > should work and allow to disable hot module replacement using the "webpack-dev-server-hot=false" (default) 2`] = ` +[] +`; -exports[`hot and live reload should work and allow to disable live reload using the "webpack-dev-server-live-reload=false" (default): console messages 1`] = ` +exports[`hot and live reload > should work and allow to disable live reload using the "webpack-dev-server-live-reload=false" (default) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[webpack-dev-server] App updated. Recompiling...", ] `; -exports[`hot and live reload should work and allow to disable live reload using the "webpack-dev-server-live-reload=false" (default): page errors 1`] = `[]`; +exports[`hot and live reload > should work and allow to disable live reload using the "webpack-dev-server-live-reload=false" (default) 2`] = ` +[] +`; -exports[`hot and live reload should work and do nothing when web socket server disabled (default): console messages 1`] = `[]`; +exports[`hot and live reload > should work and do nothing when web socket server disabled (default) 1`] = ` +[] +`; -exports[`hot and live reload should work and do nothing when web socket server disabled (default): page errors 1`] = `[]`; +exports[`hot and live reload > should work and do nothing when web socket server disabled (default) 2`] = ` +[] +`; -exports[`hot and live reload should work and refresh content using hot module replacement (default): console messages 1`] = ` +exports[`hot and live reload > should work and refresh content using hot module replacement (default) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -69,9 +81,11 @@ exports[`hot and live reload should work and refresh content using hot module re ] `; -exports[`hot and live reload should work and refresh content using hot module replacement (default): page errors 1`] = `[]`; +exports[`hot and live reload > should work and refresh content using hot module replacement (default) 2`] = ` +[] +`; -exports[`hot and live reload should work and refresh content using hot module replacement when hot enabled (default): console messages 1`] = ` +exports[`hot and live reload > should work and refresh content using hot module replacement when hot enabled (default) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -86,9 +100,11 @@ exports[`hot and live reload should work and refresh content using hot module re ] `; -exports[`hot and live reload should work and refresh content using hot module replacement when hot enabled (default): page errors 1`] = `[]`; +exports[`hot and live reload > should work and refresh content using hot module replacement when hot enabled (default) 2`] = ` +[] +`; -exports[`hot and live reload should work and refresh content using hot module replacement when hot enabled (ws): console messages 1`] = ` +exports[`hot and live reload > should work and refresh content using hot module replacement when hot enabled (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -103,9 +119,11 @@ exports[`hot and live reload should work and refresh content using hot module re ] `; -exports[`hot and live reload should work and refresh content using hot module replacement when hot enabled (ws): page errors 1`] = `[]`; +exports[`hot and live reload > should work and refresh content using hot module replacement when hot enabled (ws) 2`] = ` +[] +`; -exports[`hot and live reload should work and refresh content using hot module replacement when live reload and hot enabled (ws): console messages 1`] = ` +exports[`hot and live reload > should work and refresh content using hot module replacement when live reload and hot enabled (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -120,9 +138,11 @@ exports[`hot and live reload should work and refresh content using hot module re ] `; -exports[`hot and live reload should work and refresh content using hot module replacement when live reload and hot enabled (ws): page errors 1`] = `[]`; +exports[`hot and live reload > should work and refresh content using hot module replacement when live reload and hot enabled (ws) 2`] = ` +[] +`; -exports[`hot and live reload should work and refresh content using hot module replacement when live reload disabled and hot enabled (default): console messages 1`] = ` +exports[`hot and live reload > should work and refresh content using hot module replacement when live reload disabled and hot enabled (default) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading disabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -137,9 +157,11 @@ exports[`hot and live reload should work and refresh content using hot module re ] `; -exports[`hot and live reload should work and refresh content using hot module replacement when live reload disabled and hot enabled (default): page errors 1`] = `[]`; +exports[`hot and live reload > should work and refresh content using hot module replacement when live reload disabled and hot enabled (default) 2`] = ` +[] +`; -exports[`hot and live reload should work and refresh content using hot module replacement when live reload disabled and hot enabled (ws): console messages 1`] = ` +exports[`hot and live reload > should work and refresh content using hot module replacement when live reload disabled and hot enabled (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading disabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -154,9 +176,11 @@ exports[`hot and live reload should work and refresh content using hot module re ] `; -exports[`hot and live reload should work and refresh content using hot module replacement when live reload disabled and hot enabled (ws): page errors 1`] = `[]`; +exports[`hot and live reload > should work and refresh content using hot module replacement when live reload disabled and hot enabled (ws) 2`] = ` +[] +`; -exports[`hot and live reload should work and refresh content using hot module replacement when live reload enabled (default): console messages 1`] = ` +exports[`hot and live reload > should work and refresh content using hot module replacement when live reload enabled (default) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -171,9 +195,11 @@ exports[`hot and live reload should work and refresh content using hot module re ] `; -exports[`hot and live reload should work and refresh content using hot module replacement when live reload enabled (default): page errors 1`] = `[]`; +exports[`hot and live reload > should work and refresh content using hot module replacement when live reload enabled (default) 2`] = ` +[] +`; -exports[`hot and live reload should work and refresh content using hot module replacement when live reload enabled (ws): console messages 1`] = ` +exports[`hot and live reload > should work and refresh content using hot module replacement when live reload enabled (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -188,9 +214,11 @@ exports[`hot and live reload should work and refresh content using hot module re ] `; -exports[`hot and live reload should work and refresh content using hot module replacement when live reload enabled (ws): page errors 1`] = `[]`; +exports[`hot and live reload > should work and refresh content using hot module replacement when live reload enabled (ws) 2`] = ` +[] +`; -exports[`hot and live reload should work and refresh content using hot module replacement when live reload enabled and hot disabled (default): console messages 1`] = ` +exports[`hot and live reload > should work and refresh content using hot module replacement when live reload enabled and hot disabled (default) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -205,9 +233,11 @@ exports[`hot and live reload should work and refresh content using hot module re ] `; -exports[`hot and live reload should work and refresh content using hot module replacement when live reload enabled and hot disabled (default): page errors 1`] = `[]`; +exports[`hot and live reload > should work and refresh content using hot module replacement when live reload enabled and hot disabled (default) 2`] = ` +[] +`; -exports[`hot and live reload should work and refresh content using live reload (default): console messages 1`] = ` +exports[`hot and live reload > should work and refresh content using live reload (default) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[webpack-dev-server] App updated. Recompiling...", @@ -216,9 +246,11 @@ exports[`hot and live reload should work and refresh content using live reload ( ] `; -exports[`hot and live reload should work and refresh content using live reload (default): page errors 1`] = `[]`; +exports[`hot and live reload > should work and refresh content using live reload (default) 2`] = ` +[] +`; -exports[`hot and live reload should work and refresh content using live reload when live reload enabled and hot disabled (ws): console messages 1`] = ` +exports[`hot and live reload > should work and refresh content using live reload when live reload enabled and hot disabled (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[webpack-dev-server] App updated. Recompiling...", @@ -227,9 +259,11 @@ exports[`hot and live reload should work and refresh content using live reload w ] `; -exports[`hot and live reload should work and refresh content using live reload when live reload enabled and hot disabled (ws): page errors 1`] = `[]`; +exports[`hot and live reload > should work and refresh content using live reload when live reload enabled and hot disabled (ws) 2`] = ` +[] +`; -exports[`hot and live reload should work with manual client setup (default): console messages 1`] = ` +exports[`hot and live reload > should work with manual client setup (default) 1`] = ` [ "[HMR] Waiting for update signal from WDS...", "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading disabled, Progress disabled, Overlay disabled.", @@ -244,9 +278,11 @@ exports[`hot and live reload should work with manual client setup (default): con ] `; -exports[`hot and live reload should work with manual client setup (default): page errors 1`] = `[]`; +exports[`hot and live reload > should work with manual client setup (default) 2`] = ` +[] +`; -exports[`hot and live reload should work with manual client setup and allow to disable hot module replacement (default): console messages 1`] = ` +exports[`hot and live reload > should work with manual client setup and allow to disable hot module replacement (default) 1`] = ` [ "[HMR] Waiting for update signal from WDS...", "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading disabled, Progress disabled, Overlay disabled.", @@ -257,18 +293,22 @@ exports[`hot and live reload should work with manual client setup and allow to d ] `; -exports[`hot and live reload should work with manual client setup and allow to disable hot module replacement (default): page errors 1`] = `[]`; +exports[`hot and live reload > should work with manual client setup and allow to disable hot module replacement (default) 2`] = ` +[] +`; -exports[`hot and live reload should work with manual client setup and allow to disable live reload (default): console messages 1`] = ` +exports[`hot and live reload > should work with manual client setup and allow to disable live reload (default) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading disabled, Progress disabled, Overlay disabled.", "[webpack-dev-server] App updated. Recompiling...", ] `; -exports[`hot and live reload should work with manual client setup and allow to disable live reload (default): page errors 1`] = `[]`; +exports[`hot and live reload > should work with manual client setup and allow to disable live reload (default) 2`] = ` +[] +`; -exports[`hot and live reload should work with manual client setup and allow to enable hot module replacement (default): console messages 1`] = ` +exports[`hot and live reload > should work with manual client setup and allow to enable hot module replacement (default) 1`] = ` [ "[HMR] Waiting for update signal from WDS...", "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading disabled, Progress disabled, Overlay disabled.", @@ -283,9 +323,11 @@ exports[`hot and live reload should work with manual client setup and allow to e ] `; -exports[`hot and live reload should work with manual client setup and allow to enable hot module replacement (default): page errors 1`] = `[]`; +exports[`hot and live reload > should work with manual client setup and allow to enable hot module replacement (default) 2`] = ` +[] +`; -exports[`hot and live reload should work with manual client setup and allow to enable live reload (default): console messages 1`] = ` +exports[`hot and live reload > should work with manual client setup and allow to enable live reload (default) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay disabled.", "[webpack-dev-server] App updated. Recompiling...", @@ -294,20 +336,30 @@ exports[`hot and live reload should work with manual client setup and allow to e ] `; -exports[`hot and live reload should work with manual client setup and allow to enable live reload (default): page errors 1`] = `[]`; +exports[`hot and live reload > should work with manual client setup and allow to enable live reload (default) 2`] = ` +[] +`; + +exports[`hot disabled HMR plugin > should NOT register the HMR plugin before compilation is complete 1`] = ` +200 +`; -exports[`hot disabled HMR plugin should NOT register the HMR plugin before compilation is complete: console messages 1`] = ` +exports[`hot disabled HMR plugin > should NOT register the HMR plugin before compilation is complete 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "Hey.", ] `; -exports[`hot disabled HMR plugin should NOT register the HMR plugin before compilation is complete: page errors 1`] = `[]`; +exports[`hot disabled HMR plugin > should NOT register the HMR plugin before compilation is complete 3`] = ` +[] +`; -exports[`hot disabled HMR plugin should NOT register the HMR plugin before compilation is complete: response status 1`] = `200`; +exports[`multi compiler hot config HMR plugin > should register the HMR plugin before compilation is complete 1`] = ` +200 +`; -exports[`multi compiler hot config HMR plugin should register the HMR plugin before compilation is complete: console messages 1`] = ` +exports[`multi compiler hot config HMR plugin > should register the HMR plugin before compilation is complete 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -315,11 +367,15 @@ exports[`multi compiler hot config HMR plugin should register the HMR plugin bef ] `; -exports[`multi compiler hot config HMR plugin should register the HMR plugin before compilation is complete: page errors 1`] = `[]`; +exports[`multi compiler hot config HMR plugin > should register the HMR plugin before compilation is complete 3`] = ` +[] +`; -exports[`multi compiler hot config HMR plugin should register the HMR plugin before compilation is complete: response status 1`] = `200`; +exports[`simple hot config HMR plugin > should register the HMR plugin before compilation is complete 1`] = ` +200 +`; -exports[`simple hot config HMR plugin should register the HMR plugin before compilation is complete: console messages 1`] = ` +exports[`simple hot config HMR plugin > should register the HMR plugin before compilation is complete 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -327,11 +383,15 @@ exports[`simple hot config HMR plugin should register the HMR plugin before comp ] `; -exports[`simple hot config HMR plugin should register the HMR plugin before compilation is complete: page errors 1`] = `[]`; +exports[`simple hot config HMR plugin > should register the HMR plugin before compilation is complete 3`] = ` +[] +`; -exports[`simple hot config HMR plugin should register the HMR plugin before compilation is complete: response status 1`] = `200`; +exports[`simple hot config HMR plugin with already added HMR plugin > should register the HMR plugin before compilation is complete 1`] = ` +200 +`; -exports[`simple hot config HMR plugin with already added HMR plugin should register the HMR plugin before compilation is complete: console messages 1`] = ` +exports[`simple hot config HMR plugin with already added HMR plugin > should register the HMR plugin before compilation is complete 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -339,6 +399,6 @@ exports[`simple hot config HMR plugin with already added HMR plugin should regis ] `; -exports[`simple hot config HMR plugin with already added HMR plugin should register the HMR plugin before compilation is complete: page errors 1`] = `[]`; - -exports[`simple hot config HMR plugin with already added HMR plugin should register the HMR plugin before compilation is complete: response status 1`] = `200`; +exports[`simple hot config HMR plugin with already added HMR plugin > should register the HMR plugin before compilation is complete 3`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/ipc.test.js.snap.webpack5 b/test/e2e/__snapshots__/ipc.test.js.snap.webpack5 index bf7ab3e4da..22b543cf22 100644 --- a/test/e2e/__snapshots__/ipc.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/ipc.test.js.snap.webpack5 @@ -1,6 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`web socket server URL should work with the "ipc" option using "string" value ("ws"): console messages 1`] = ` +exports[`web socket server URL > should work with the "ipc" option using "string" value ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -8,9 +6,11 @@ exports[`web socket server URL should work with the "ipc" option using "string" ] `; -exports[`web socket server URL should work with the "ipc" option using "string" value ("ws"): page errors 1`] = `[]`; +exports[`web socket server URL > should work with the "ipc" option using "string" value ("ws") 2`] = ` +[] +`; -exports[`web socket server URL should work with the "ipc" option using "true" value ("ws"): console messages 1`] = ` +exports[`web socket server URL > should work with the "ipc" option using "true" value ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -18,4 +18,6 @@ exports[`web socket server URL should work with the "ipc" option using "true" va ] `; -exports[`web socket server URL should work with the "ipc" option using "true" value ("ws"): page errors 1`] = `[]`; +exports[`web socket server URL > should work with the "ipc" option using "true" value ("ws") 2`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/logging.test.js.snap.webpack5 b/test/e2e/__snapshots__/logging.test.js.snap.webpack5 index 4c8cc479f7..2ed213cbd4 100644 --- a/test/e2e/__snapshots__/logging.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/logging.test.js.snap.webpack5 @@ -1,13 +1,11 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`logging should work and do not log messages about hot and live reloading is enabled (ws) 1`] = ` +exports[`logging > should work and do not log messages about hot and live reloading is enabled (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading disabled, Progress disabled, Overlay enabled.", "Hey.", ] `; -exports[`logging should work and log errors by default (ws) 1`] = ` +exports[`logging > should work and log errors by default (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -18,14 +16,14 @@ Error from compilation", ] `; -exports[`logging should work and log message about live reloading is enabled (ws) 1`] = ` +exports[`logging > should work and log message about live reloading is enabled (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "Hey.", ] `; -exports[`logging should work and log messages about hot and live reloading is enabled (ws) 1`] = ` +exports[`logging > should work and log messages about hot and live reloading is enabled (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -33,7 +31,7 @@ exports[`logging should work and log messages about hot and live reloading is en ] `; -exports[`logging should work and log messages about hot and live reloading is enabled (ws) 2`] = ` +exports[`logging > should work and log messages about hot and live reloading is enabled (ws) 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -41,7 +39,7 @@ exports[`logging should work and log messages about hot and live reloading is en ] `; -exports[`logging should work and log messages about hot and live reloading is enabled (ws) 3`] = ` +exports[`logging > should work and log messages about hot and live reloading is enabled (ws) 3`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -49,7 +47,7 @@ exports[`logging should work and log messages about hot and live reloading is en ] `; -exports[`logging should work and log messages about hot is enabled (ws) 1`] = ` +exports[`logging > should work and log messages about hot is enabled (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading disabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -57,7 +55,7 @@ exports[`logging should work and log messages about hot is enabled (ws) 1`] = ` ] `; -exports[`logging should work and log only error (ws) 1`] = ` +exports[`logging > should work and log only error (ws) 1`] = ` [ "Hey.", "[webpack-dev-server] Errors while compiling. Reload prevented.", @@ -66,7 +64,7 @@ Error from compilation", ] `; -exports[`logging should work and log static changes (ws) 1`] = ` +exports[`logging > should work and log static changes (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -78,7 +76,7 @@ exports[`logging should work and log static changes (ws) 1`] = ` ] `; -exports[`logging should work and log warning and errors (ws) 1`] = ` +exports[`logging > should work and log warning and errors (ws) 1`] = ` [ "Hey.", "[webpack-dev-server] Warnings while compiling.", @@ -90,7 +88,7 @@ Error from compilation", ] `; -exports[`logging should work and log warnings by default (ws) 1`] = ` +exports[`logging > should work and log warnings by default (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -101,7 +99,7 @@ Warning from compilation", ] `; -exports[`logging should work when the "client.logging" is "info" (ws) 1`] = ` +exports[`logging > should work when the "client.logging" is "info" (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -109,7 +107,7 @@ exports[`logging should work when the "client.logging" is "info" (ws) 1`] = ` ] `; -exports[`logging should work when the "client.logging" is "log" (ws) 1`] = ` +exports[`logging > should work when the "client.logging" is "log" (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -117,13 +115,13 @@ exports[`logging should work when the "client.logging" is "log" (ws) 1`] = ` ] `; -exports[`logging should work when the "client.logging" is "none" (ws) 1`] = ` +exports[`logging > should work when the "client.logging" is "none" (ws) 1`] = ` [ "Hey.", ] `; -exports[`logging should work when the "client.logging" is "verbose" (ws) 1`] = ` +exports[`logging > should work when the "client.logging" is "verbose" (ws) 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", diff --git a/test/e2e/__snapshots__/mime-types.test.js.snap.webpack5 b/test/e2e/__snapshots__/mime-types.test.js.snap.webpack5 index 2fe136bcf6..953ab8283c 100644 --- a/test/e2e/__snapshots__/mime-types.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/mime-types.test.js.snap.webpack5 @@ -1,17 +1,31 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +exports[`mimeTypes option > as an object with a custom type > should request file with different js mime type 1`] = ` +200 +`; -exports[`mimeTypes option as an object with a custom type should request file with different js mime type: console messages 1`] = `[]`; +exports[`mimeTypes option > as an object with a custom type > should request file with different js mime type 2`] = ` +"text/html; charset=utf-8" +`; -exports[`mimeTypes option as an object with a custom type should request file with different js mime type: page errors 1`] = `[]`; +exports[`mimeTypes option > as an object with a custom type > should request file with different js mime type 3`] = ` +[] +`; -exports[`mimeTypes option as an object with a custom type should request file with different js mime type: response headers content-type 1`] = `"text/html; charset=utf-8"`; +exports[`mimeTypes option > as an object with a custom type > should request file with different js mime type 4`] = ` +[] +`; -exports[`mimeTypes option as an object with a custom type should request file with different js mime type: response status 1`] = `200`; +exports[`mimeTypes option > as an object with a remapped type > should request file with different js mime type 1`] = ` +200 +`; -exports[`mimeTypes option as an object with a remapped type should request file with different js mime type: console messages 1`] = `[]`; +exports[`mimeTypes option > as an object with a remapped type > should request file with different js mime type 2`] = ` +"text/plain; charset=utf-8" +`; -exports[`mimeTypes option as an object with a remapped type should request file with different js mime type: page errors 1`] = `[]`; +exports[`mimeTypes option > as an object with a remapped type > should request file with different js mime type 3`] = ` +[] +`; -exports[`mimeTypes option as an object with a remapped type should request file with different js mime type: response headers content-type 1`] = `"text/plain; charset=utf-8"`; - -exports[`mimeTypes option as an object with a remapped type should request file with different js mime type: response status 1`] = `200`; +exports[`mimeTypes option > as an object with a remapped type > should request file with different js mime type 4`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/module-federation.test.js.snap.webpack5 b/test/e2e/__snapshots__/module-federation.test.js.snap.webpack5 index 1c3c271708..20120329dd 100644 --- a/test/e2e/__snapshots__/module-federation.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/module-federation.test.js.snap.webpack5 @@ -1,25 +1,47 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +exports[`Module federation > should use plugin > should contain hot script in main.js 1`] = ` +[] +`; -exports[`Module federation should use plugin should contain hot script in main.js: console messages 1`] = `[]`; +exports[`Module federation > should use plugin > should contain hot script in main.js 2`] = ` +[] +`; -exports[`Module federation should use plugin should contain hot script in main.js: page errors 1`] = `[]`; +exports[`Module federation > should use plugin > should contain hot script in remoteEntry.js 1`] = ` +[] +`; -exports[`Module federation should use plugin should contain hot script in remoteEntry.js: console messages 1`] = `[]`; +exports[`Module federation > should use plugin > should contain hot script in remoteEntry.js 2`] = ` +[] +`; -exports[`Module federation should use plugin should contain hot script in remoteEntry.js: page errors 1`] = `[]`; +exports[`Module federation > should work with multi compiler config > should use the last entry export 1`] = ` +[] +`; -exports[`Module federation should work with multi compiler config should use the last entry export: console messages 1`] = `[]`; +exports[`Module federation > should work with multi compiler config > should use the last entry export 2`] = ` +[] +`; -exports[`Module federation should work with multi compiler config should use the last entry export: page errors 1`] = `[]`; +exports[`Module federation > should work with object multi-entry config > should support the named entry export 1`] = ` +[] +`; -exports[`Module federation should work with object multi-entry config should support the named entry export: console messages 1`] = `[]`; +exports[`Module federation > should work with object multi-entry config > should support the named entry export 2`] = ` +[] +`; -exports[`Module federation should work with object multi-entry config should support the named entry export: page errors 1`] = `[]`; +exports[`Module federation > should work with object multi-entry config > should use the last entry export 1`] = ` +[] +`; -exports[`Module federation should work with object multi-entry config should use the last entry export: console messages 1`] = `[]`; +exports[`Module federation > should work with object multi-entry config > should use the last entry export 2`] = ` +[] +`; -exports[`Module federation should work with object multi-entry config should use the last entry export: page errors 1`] = `[]`; +exports[`Module federation > should work with simple multi-entry config > should use the last entry export 1`] = ` +[] +`; -exports[`Module federation should work with simple multi-entry config should use the last entry export: console messages 1`] = `[]`; - -exports[`Module federation should work with simple multi-entry config should use the last entry export: page errors 1`] = `[]`; +exports[`Module federation > should work with simple multi-entry config > should use the last entry export 2`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/multi-compiler.test.js.snap.webpack5 b/test/e2e/__snapshots__/multi-compiler.test.js.snap.webpack5 index 1d99bb38ff..58509f79ac 100644 --- a/test/e2e/__snapshots__/multi-compiler.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/multi-compiler.test.js.snap.webpack5 @@ -1,6 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`multi compiler should work with one web target configuration and do nothing: console messages 1`] = ` +exports[`multi compiler > should work with one web target configuration and do nothing 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -8,9 +6,11 @@ exports[`multi compiler should work with one web target configuration and do not ] `; -exports[`multi compiler should work with one web target configuration and do nothing: page errors 1`] = `[]`; +exports[`multi compiler > should work with one web target configuration and do nothing 2`] = ` +[] +`; -exports[`multi compiler should work with universal configuration and do nothing: console messages 1`] = ` +exports[`multi compiler > should work with universal configuration and do nothing 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -18,9 +18,11 @@ exports[`multi compiler should work with universal configuration and do nothing: ] `; -exports[`multi compiler should work with universal configuration and do nothing: page errors 1`] = `[]`; +exports[`multi compiler > should work with universal configuration and do nothing 2`] = ` +[] +`; -exports[`multi compiler should work with universal configuration when hot and live reloads are enabled, and do hot reload for browser compiler by default when browser entry changed: console messages 1`] = ` +exports[`multi compiler > should work with universal configuration when hot and live reloads are enabled, and do hot reload for browser compiler by default when browser entry changed 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -38,9 +40,11 @@ Update propagation: ./browser.js ] `; -exports[`multi compiler should work with universal configuration when hot and live reloads are enabled, and do hot reload for browser compiler by default when browser entry changed: page errors 1`] = `[]`; +exports[`multi compiler > should work with universal configuration when hot and live reloads are enabled, and do hot reload for browser compiler by default when browser entry changed 2`] = ` +[] +`; -exports[`multi compiler should work with universal configuration when only hot reload is enabled, and do hot reload for browser compiler when browser entry changed: console messages 1`] = ` +exports[`multi compiler > should work with universal configuration when only hot reload is enabled, and do hot reload for browser compiler when browser entry changed 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading disabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -58,9 +62,11 @@ Update propagation: ./browser.js ] `; -exports[`multi compiler should work with universal configuration when only hot reload is enabled, and do hot reload for browser compiler when browser entry changed: page errors 1`] = `[]`; +exports[`multi compiler > should work with universal configuration when only hot reload is enabled, and do hot reload for browser compiler when browser entry changed 2`] = ` +[] +`; -exports[`multi compiler should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing browser and server entries: console messages 1`] = ` +exports[`multi compiler > should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing browser and server entries 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "Hello from the browser", @@ -71,7 +77,11 @@ exports[`multi compiler should work with universal configuration when only live ] `; -exports[`multi compiler should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing browser and server entries: console messages 2`] = ` +exports[`multi compiler > should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing browser and server entries 2`] = ` +[] +`; + +exports[`multi compiler > should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing browser and server entries 3`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "Hello from the browser", @@ -82,11 +92,11 @@ exports[`multi compiler should work with universal configuration when only live ] `; -exports[`multi compiler should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing browser and server entries: page errors 1`] = `[]`; - -exports[`multi compiler should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing browser and server entries: page errors 2`] = `[]`; +exports[`multi compiler > should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing browser and server entries 4`] = ` +[] +`; -exports[`multi compiler should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing server and browser entries: console messages 1`] = ` +exports[`multi compiler > should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing server and browser entries 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "Hello from the browser", @@ -97,7 +107,11 @@ exports[`multi compiler should work with universal configuration when only live ] `; -exports[`multi compiler should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing server and browser entries: console messages 2`] = ` +exports[`multi compiler > should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing server and browser entries 2`] = ` +[] +`; + +exports[`multi compiler > should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing server and browser entries 3`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "Hello from the browser", @@ -108,11 +122,11 @@ exports[`multi compiler should work with universal configuration when only live ] `; -exports[`multi compiler should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing server and browser entries: page errors 1`] = `[]`; - -exports[`multi compiler should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing server and browser entries: page errors 2`] = `[]`; +exports[`multi compiler > should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing server and browser entries 4`] = ` +[] +`; -exports[`multi compiler should work with web target configurations and do nothing: console messages 1`] = ` +exports[`multi compiler > should work with web target configurations and do nothing 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -120,7 +134,11 @@ exports[`multi compiler should work with web target configurations and do nothin ] `; -exports[`multi compiler should work with web target configurations and do nothing: console messages 2`] = ` +exports[`multi compiler > should work with web target configurations and do nothing 2`] = ` +[] +`; + +exports[`multi compiler > should work with web target configurations and do nothing 3`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -128,11 +146,11 @@ exports[`multi compiler should work with web target configurations and do nothin ] `; -exports[`multi compiler should work with web target configurations and do nothing: page errors 1`] = `[]`; - -exports[`multi compiler should work with web target configurations and do nothing: page errors 2`] = `[]`; +exports[`multi compiler > should work with web target configurations and do nothing 4`] = ` +[] +`; -exports[`multi compiler should work with web target configurations when hot and live reloads are enabled, and do hot reload by default when changing own entries: console messages 1`] = ` +exports[`multi compiler > should work with web target configurations when hot and live reloads are enabled, and do hot reload by default when changing own entries 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -150,7 +168,11 @@ Update propagation: ./one.js ] `; -exports[`multi compiler should work with web target configurations when hot and live reloads are enabled, and do hot reload by default when changing own entries: console messages 2`] = ` +exports[`multi compiler > should work with web target configurations when hot and live reloads are enabled, and do hot reload by default when changing own entries 2`] = ` +[] +`; + +exports[`multi compiler > should work with web target configurations when hot and live reloads are enabled, and do hot reload by default when changing own entries 3`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -168,11 +190,11 @@ Update propagation: ./two.js ] `; -exports[`multi compiler should work with web target configurations when hot and live reloads are enabled, and do hot reload by default when changing own entries: page errors 1`] = `[]`; - -exports[`multi compiler should work with web target configurations when hot and live reloads are enabled, and do hot reload by default when changing own entries: page errors 2`] = `[]`; +exports[`multi compiler > should work with web target configurations when hot and live reloads are enabled, and do hot reload by default when changing own entries 4`] = ` +[] +`; -exports[`multi compiler should work with web target configurations when only hot reload is enabled, and do hot reload when changing own entries: console messages 1`] = ` +exports[`multi compiler > should work with web target configurations when only hot reload is enabled, and do hot reload when changing own entries 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading disabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -190,7 +212,11 @@ Update propagation: ./one.js ] `; -exports[`multi compiler should work with web target configurations when only hot reload is enabled, and do hot reload when changing own entries: console messages 2`] = ` +exports[`multi compiler > should work with web target configurations when only hot reload is enabled, and do hot reload when changing own entries 2`] = ` +[] +`; + +exports[`multi compiler > should work with web target configurations when only hot reload is enabled, and do hot reload when changing own entries 3`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading disabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -208,11 +234,11 @@ Update propagation: ./two.js ] `; -exports[`multi compiler should work with web target configurations when only hot reload is enabled, and do hot reload when changing own entries: page errors 1`] = `[]`; - -exports[`multi compiler should work with web target configurations when only hot reload is enabled, and do hot reload when changing own entries: page errors 2`] = `[]`; +exports[`multi compiler > should work with web target configurations when only hot reload is enabled, and do hot reload when changing own entries 4`] = ` +[] +`; -exports[`multi compiler should work with web target configurations when only live reload is enabled and do live reload when changing other entries: console messages 1`] = ` +exports[`multi compiler > should work with web target configurations when only live reload is enabled and do live reload when changing other entries 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "one", @@ -223,7 +249,11 @@ exports[`multi compiler should work with web target configurations when only liv ] `; -exports[`multi compiler should work with web target configurations when only live reload is enabled and do live reload when changing other entries: console messages 2`] = ` +exports[`multi compiler > should work with web target configurations when only live reload is enabled and do live reload when changing other entries 2`] = ` +[] +`; + +exports[`multi compiler > should work with web target configurations when only live reload is enabled and do live reload when changing other entries 3`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "two", @@ -234,11 +264,11 @@ exports[`multi compiler should work with web target configurations when only liv ] `; -exports[`multi compiler should work with web target configurations when only live reload is enabled and do live reload when changing other entries: page errors 1`] = `[]`; - -exports[`multi compiler should work with web target configurations when only live reload is enabled and do live reload when changing other entries: page errors 2`] = `[]`; +exports[`multi compiler > should work with web target configurations when only live reload is enabled and do live reload when changing other entries 4`] = ` +[] +`; -exports[`multi compiler should work with web target configurations when only live reload is enabled, and do live reload when changing own entries: console messages 1`] = ` +exports[`multi compiler > should work with web target configurations when only live reload is enabled, and do live reload when changing own entries 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "one", @@ -249,7 +279,11 @@ exports[`multi compiler should work with web target configurations when only liv ] `; -exports[`multi compiler should work with web target configurations when only live reload is enabled, and do live reload when changing own entries: console messages 2`] = ` +exports[`multi compiler > should work with web target configurations when only live reload is enabled, and do live reload when changing own entries 2`] = ` +[] +`; + +exports[`multi compiler > should work with web target configurations when only live reload is enabled, and do live reload when changing own entries 3`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "two", @@ -260,6 +294,6 @@ exports[`multi compiler should work with web target configurations when only liv ] `; -exports[`multi compiler should work with web target configurations when only live reload is enabled, and do live reload when changing own entries: page errors 1`] = `[]`; - -exports[`multi compiler should work with web target configurations when only live reload is enabled, and do live reload when changing own entries: page errors 2`] = `[]`; +exports[`multi compiler > should work with web target configurations when only live reload is enabled, and do live reload when changing own entries 4`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/on-listening.test.js.snap.webpack5 b/test/e2e/__snapshots__/on-listening.test.js.snap.webpack5 index 66bebdb439..b7d494e486 100644 --- a/test/e2e/__snapshots__/on-listening.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/on-listening.test.js.snap.webpack5 @@ -1,21 +1,39 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +exports[`onListening option > should handle GET request to /listening/some/path route 1`] = ` +"text/html; charset=utf-8" +`; -exports[`onListening option should handle GET request to /listening/some/path route: console messages 1`] = `[]`; +exports[`onListening option > should handle GET request to /listening/some/path route 2`] = ` +200 +`; -exports[`onListening option should handle GET request to /listening/some/path route: page errors 1`] = `[]`; +exports[`onListening option > should handle GET request to /listening/some/path route 3`] = ` +"listening" +`; -exports[`onListening option should handle GET request to /listening/some/path route: response headers content-type 1`] = `"text/html; charset=utf-8"`; +exports[`onListening option > should handle GET request to /listening/some/path route 4`] = ` +[] +`; -exports[`onListening option should handle GET request to /listening/some/path route: response status 1`] = `200`; +exports[`onListening option > should handle GET request to /listening/some/path route 5`] = ` +[] +`; -exports[`onListening option should handle GET request to /listening/some/path route: response text 1`] = `"listening"`; +exports[`onListening option > should handle POST request to /listening/some/path route 1`] = ` +"text/html; charset=utf-8" +`; -exports[`onListening option should handle POST request to /listening/some/path route: console messages 1`] = `[]`; +exports[`onListening option > should handle POST request to /listening/some/path route 2`] = ` +200 +`; -exports[`onListening option should handle POST request to /listening/some/path route: page errors 1`] = `[]`; +exports[`onListening option > should handle POST request to /listening/some/path route 3`] = ` +"listening POST" +`; -exports[`onListening option should handle POST request to /listening/some/path route: response headers content-type 1`] = `"text/html; charset=utf-8"`; +exports[`onListening option > should handle POST request to /listening/some/path route 4`] = ` +[] +`; -exports[`onListening option should handle POST request to /listening/some/path route: response status 1`] = `200`; - -exports[`onListening option should handle POST request to /listening/some/path route: response text 1`] = `"listening POST"`; +exports[`onListening option > should handle POST request to /listening/some/path route 5`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/overlay.test.js.snap.webpack5 b/test/e2e/__snapshots__/overlay.test.js.snap.webpack5 index 45e917b284..90edcf521b 100644 --- a/test/e2e/__snapshots__/overlay.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/overlay.test.js.snap.webpack5 @@ -1,6 +1,12 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +exports[`overlay > should not show a warning when "client.overlay" is "false" 1`] = ` +" +

webpack-dev-server is running...

+ + +" +`; -exports[`overlay should not show a warning when "client.overlay" is "false": page html 1`] = ` +exports[`overlay > should not show a warning when "client.overlay.warnings" is "false" 1`] = ` "

webpack-dev-server is running...

@@ -8,7 +14,7 @@ exports[`overlay should not show a warning when "client.overlay" is "false": pag " `; -exports[`overlay should not show a warning when "client.overlay.warnings" is "false": page html 1`] = ` +exports[`overlay > should not show an error when "client.overlay" is "false" 1`] = ` "

webpack-dev-server is running...

@@ -16,7 +22,7 @@ exports[`overlay should not show a warning when "client.overlay.warnings" is "fa " `; -exports[`overlay should not show an error when "client.overlay" is "false": page html 1`] = ` +exports[`overlay > should not show an error when "client.overlay.errors" is "false" 1`] = ` "

webpack-dev-server is running...

@@ -24,7 +30,7 @@ exports[`overlay should not show an error when "client.overlay" is "false": page " `; -exports[`overlay should not show an error when "client.overlay.errors" is "false": page html 1`] = ` +exports[`overlay > should not show initially, then show on an error and allow to close 1`] = ` "

webpack-dev-server is running...

@@ -32,7 +38,28 @@ exports[`overlay should not show an error when "client.overlay.errors" is "false " `; -exports[`overlay should not show initially, then show on an error and allow to close: overlay html 1`] = ` +exports[`overlay > should not show initially, then show on an error and allow to close 2`] = ` +" +

webpack-dev-server is running...

+ + + + +" +`; + +exports[`overlay > should not show initially, then show on an error and allow to close 3`] = ` "
should not show initially, then show on an error and allow to close 4`] = ` "

webpack-dev-server is running...

@@ -129,7 +156,7 @@ exports[`overlay should not show initially, then show on an error and allow to c " `; -exports[`overlay should not show initially, then show on an error and allow to close: page html initial 1`] = ` +exports[`overlay > should not show initially, then show on an error, then hide on fix 1`] = ` "

webpack-dev-server is running...

@@ -137,7 +164,7 @@ exports[`overlay should not show initially, then show on an error and allow to c " `; -exports[`overlay should not show initially, then show on an error and allow to close: page html with error 1`] = ` +exports[`overlay > should not show initially, then show on an error, then hide on fix 2`] = ` "

webpack-dev-server is running...

@@ -158,7 +185,7 @@ exports[`overlay should not show initially, then show on an error and allow to c " `; -exports[`overlay should not show initially, then show on an error, then hide on fix: overlay html 1`] = ` +exports[`overlay > should not show initially, then show on an error, then hide on fix 3`] = ` "
should not show initially, then show on an error, then hide on fix 4`] = ` "

webpack-dev-server is running...

@@ -255,7 +282,7 @@ exports[`overlay should not show initially, then show on an error, then hide on " `; -exports[`overlay should not show initially, then show on an error, then hide on fix: page html initial 1`] = ` +exports[`overlay > should not show initially, then show on an error, then show other error, then hide on fix 1`] = ` "

webpack-dev-server is running...

@@ -263,7 +290,7 @@ exports[`overlay should not show initially, then show on an error, then hide on " `; -exports[`overlay should not show initially, then show on an error, then hide on fix: page html with error 1`] = ` +exports[`overlay > should not show initially, then show on an error, then show other error, then hide on fix 2`] = ` "

webpack-dev-server is running...

@@ -284,7 +311,7 @@ exports[`overlay should not show initially, then show on an error, then hide on " `; -exports[`overlay should not show initially, then show on an error, then show other error, then hide on fix: overlay html 1`] = ` +exports[`overlay > should not show initially, then show on an error, then show other error, then hide on fix 3`] = ` "
should not show initially, then show on an error, then show other error, then hide on fix 4`] = ` +" +

webpack-dev-server is running...

+ + + + +" +`; + +exports[`overlay > should not show initially, then show on an error, then show other error, then hide on fix 5`] = ` "
should not show initially, then show on an error, then show other error, then hide on fix 6`] = ` "

webpack-dev-server is running...

@@ -470,7 +518,7 @@ exports[`overlay should not show initially, then show on an error, then show oth " `; -exports[`overlay should not show initially, then show on an error, then show other error, then hide on fix: page html initial 1`] = ` +exports[`overlay > should not show overlay when Trusted Types are enabled, but policy is not allowed 1`] = ` "

webpack-dev-server is running...

@@ -478,7 +526,7 @@ exports[`overlay should not show initially, then show on an error, then show oth " `; -exports[`overlay should not show initially, then show on an error, then show other error, then hide on fix: page html with error 1`] = ` +exports[`overlay > should show a warning after invalidation 1`] = ` "

webpack-dev-server is running...

@@ -499,36 +547,7 @@ exports[`overlay should not show initially, then show on an error, then show oth " `; -exports[`overlay should not show initially, then show on an error, then show other error, then hide on fix: page html with other error 1`] = ` -" -

webpack-dev-server is running...

- - - - -" -`; - -exports[`overlay should not show overlay when Trusted Types are enabled, but policy is not allowed: page html 1`] = ` -" -

webpack-dev-server is running...

- - -" -`; - -exports[`overlay should show a warning after invalidation: overlay html 1`] = ` +exports[`overlay > should show a warning after invalidation 2`] = ` "
should show a warning and error for initial compilation 1`] = ` "

webpack-dev-server is running...

@@ -633,7 +652,7 @@ exports[`overlay should show a warning after invalidation: page html 1`] = ` " `; -exports[`overlay should show a warning and error for initial compilation and protects against xss: overlay html 1`] = ` +exports[`overlay > should show a warning and error for initial compilation 2`] = ` "
- <strong>strong</strong> + Warning from compilation
- <strong>strong</strong> + Warning from compilation
-
-
- -" -`; - -exports[`overlay should show a warning and error for initial compilation and protects against xss: page html 1`] = ` -" -

webpack-dev-server is running...

- - - - -" -`; - -exports[`overlay should show a warning and error for initial compilation: overlay html 1`] = ` -" -
-
- Compiled with problems: -
- -
- Warning from compilation + Error from compilation. Can't find 'test' module.
- Warning from compilation + Error from compilation. Can't find 'test' module.
+
+ + +" +`; + +exports[`overlay > should show a warning and error for initial compilation and protects against xss 1`] = ` +" +

webpack-dev-server is running...

+ + + + +" +`; + +exports[`overlay > should show a warning and error for initial compilation and protects against xss 2`] = ` +" +
+
+ Compiled with problems: +
+ +
- Error from compilation. Can't find 'test' module. + <strong>strong</strong>
- Error from compilation. Can't find 'test' module. + <strong>strong</strong>
@@ -957,7 +976,7 @@ exports[`overlay should show a warning and error for initial compilation: overla " `; -exports[`overlay should show a warning and error for initial compilation: page html 1`] = ` +exports[`overlay > should show a warning and hide them after closing connection 1`] = ` "

webpack-dev-server is running...

@@ -978,7 +997,7 @@ exports[`overlay should show a warning and error for initial compilation: page h " `; -exports[`overlay should show a warning and hide them after closing connection: overlay html 1`] = ` +exports[`overlay > should show a warning and hide them after closing connection 2`] = ` "
should show a warning and hide them after closing connection 3`] = ` +" +

webpack-dev-server is running...

+ + +" +`; + +exports[`overlay > should show a warning for initial compilation 1`] = ` "

webpack-dev-server is running...

@@ -1083,15 +1110,7 @@ exports[`overlay should show a warning and hide them after closing connection: p " `; -exports[`overlay should show a warning and hide them after closing connection: page html 2`] = ` -" -

webpack-dev-server is running...

- - -" -`; - -exports[`overlay should show a warning for initial compilation: overlay html 1`] = ` +exports[`overlay > should show a warning for initial compilation 2`] = ` "
should show a warning when "client.overlay" is "true" 1`] = ` "

webpack-dev-server is running...

@@ -1196,7 +1215,7 @@ exports[`overlay should show a warning for initial compilation: page html 1`] = " `; -exports[`overlay should show a warning when "client.overlay" is "true": overlay html 1`] = ` +exports[`overlay > should show a warning when "client.overlay" is "true" 2`] = ` "
should show a warning when "client.overlay.errors" is "true" 1`] = ` "

webpack-dev-server is running...

@@ -1301,7 +1320,7 @@ exports[`overlay should show a warning when "client.overlay" is "true": page htm " `; -exports[`overlay should show a warning when "client.overlay.errors" is "true": overlay html 1`] = ` +exports[`overlay > should show a warning when "client.overlay.errors" is "true" 2`] = ` "
should show a warning when "client.overlay.warnings" is "true" 1`] = ` "

webpack-dev-server is running...

@@ -1406,7 +1425,7 @@ exports[`overlay should show a warning when "client.overlay.errors" is "true": p " `; -exports[`overlay should show a warning when "client.overlay.warnings" is "true": overlay html 1`] = ` +exports[`overlay > should show a warning when "client.overlay.warnings" is "true" 2`] = ` "
should show an ansi formatted error for initial compilation 1`] = ` "

webpack-dev-server is running...

@@ -1511,7 +1530,7 @@ exports[`overlay should show a warning when "client.overlay.warnings" is "true": " `; -exports[`overlay should show an ansi formatted error for initial compilation: overlay html 1`] = ` +exports[`overlay > should show an ansi formatted error for initial compilation 2`] = ` "
should show an error after invalidation 1`] = ` "

webpack-dev-server is running...

@@ -1627,7 +1646,7 @@ exports[`overlay should show an ansi formatted error for initial compilation: pa " `; -exports[`overlay should show an error after invalidation: overlay html 1`] = ` +exports[`overlay > should show an error after invalidation 2`] = ` "
should show an error for initial compilation 1`] = ` "

webpack-dev-server is running...

@@ -1732,7 +1751,7 @@ exports[`overlay should show an error after invalidation: page html 1`] = ` " `; -exports[`overlay should show an error for initial compilation: overlay html 1`] = ` +exports[`overlay > should show an error for initial compilation 2`] = ` "
should show an error when "client.overlay" is "true" 1`] = ` "

webpack-dev-server is running...

@@ -1837,7 +1856,7 @@ exports[`overlay should show an error for initial compilation: page html 1`] = ` " `; -exports[`overlay should show an error when "client.overlay" is "true": overlay html 1`] = ` +exports[`overlay > should show an error when "client.overlay" is "true" 2`] = ` "
should show an error when "client.overlay.errors" is "true" 1`] = ` "

webpack-dev-server is running...

@@ -1942,7 +1961,7 @@ exports[`overlay should show an error when "client.overlay" is "true": page html " `; -exports[`overlay should show an error when "client.overlay.errors" is "true": overlay html 1`] = ` +exports[`overlay > should show an error when "client.overlay.errors" is "true" 2`] = ` "
should show an error when "client.overlay.warnings" is "true" 1`] = ` "

webpack-dev-server is running...

@@ -2047,7 +2066,7 @@ exports[`overlay should show an error when "client.overlay.errors" is "true": pa " `; -exports[`overlay should show an error when "client.overlay.warnings" is "true": overlay html 1`] = ` +exports[`overlay > should show an error when "client.overlay.warnings" is "true" 2`] = ` "
-

webpack-dev-server is running...

- - - - -" -`; - -exports[`overlay should show error for uncaught promise rejection: overlay html 1`] = ` +exports[`overlay > should show error for uncaught promise rejection 1`] = ` "
should show error for uncaught runtime error 1`] = ` "
should show error when it is not filtered 1`] = ` +" +

webpack-dev-server is running...

+ + + + +" +`; + +exports[`overlay > should show error when it is not filtered 2`] = ` "
should show overlay when "Content-Security-Policy" is "default-src 'self'" was used 1`] = ` "

webpack-dev-server is running...

@@ -2426,7 +2445,7 @@ exports[`overlay should show error when it is not filtered: page html 1`] = ` " `; -exports[`overlay should show overlay when "Content-Security-Policy" is "default-src 'self'" was used: overlay html 1`] = ` +exports[`overlay > should show overlay when "Content-Security-Policy" is "default-src 'self'" was used 2`] = ` "
should show overlay when Trusted Types are enabled 1`] = ` "

webpack-dev-server is running...

@@ -2531,7 +2550,7 @@ exports[`overlay should show overlay when "Content-Security-Policy" is "default- " `; -exports[`overlay should show overlay when Trusted Types are enabled and the "require-trusted-types-for 'script'" header was used: overlay html 1`] = ` +exports[`overlay > should show overlay when Trusted Types are enabled 2`] = ` "
should show overlay when Trusted Types are enabled and the "require-trusted-types-for 'script'" header was used 1`] = ` "

webpack-dev-server is running...

@@ -2636,7 +2655,7 @@ exports[`overlay should show overlay when Trusted Types are enabled and the "req " `; -exports[`overlay should show overlay when Trusted Types are enabled: overlay html 1`] = ` +exports[`overlay > should show overlay when Trusted Types are enabled and the "require-trusted-types-for 'script'" header was used 2`] = ` "
should show warning when it is not filtered 1`] = ` "

webpack-dev-server is running...

@@ -2741,7 +2760,7 @@ exports[`overlay should show overlay when Trusted Types are enabled: page html 1 " `; -exports[`overlay should show warning when it is not filtered: overlay html 1`] = ` +exports[`overlay > should show warning when it is not filtered 2`] = ` "
" `; - -exports[`overlay should show warning when it is not filtered: page html 1`] = ` -" -

webpack-dev-server is running...

- - - - -" -`; diff --git a/test/e2e/__snapshots__/port.test.js.snap.webpack5 b/test/e2e/__snapshots__/port.test.js.snap.webpack5 index 3a5dc33cd7..317910202e 100644 --- a/test/e2e/__snapshots__/port.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/port.test.js.snap.webpack5 @@ -1,6 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`port should work using "" port : console messages 1`] = ` +exports[`port > should work using "0" port 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -8,9 +6,11 @@ exports[`port should work using "" port : console messages 1`] = ] `; -exports[`port should work using "" port : page errors 1`] = `[]`; +exports[`port > should work using "0" port 2`] = ` +[] +`; -exports[`port should work using "0" port : console messages 1`] = ` +exports[`port > should work using "8159" port 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -18,9 +18,11 @@ exports[`port should work using "0" port : console messages 1`] = ` ] `; -exports[`port should work using "0" port : page errors 1`] = `[]`; +exports[`port > should work using "8159" port 2`] = ` +[] +`; -exports[`port should work using "8159" port : console messages 1`] = ` +exports[`port > should work using "8159" port 3`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -28,7 +30,11 @@ exports[`port should work using "8159" port : console messages 1`] = ` ] `; -exports[`port should work using "8159" port : console messages 2`] = ` +exports[`port > should work using "8159" port 4`] = ` +[] +`; + +exports[`port > should work using "" port 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -36,11 +42,11 @@ exports[`port should work using "8159" port : console messages 2`] = ` ] `; -exports[`port should work using "8159" port : page errors 1`] = `[]`; - -exports[`port should work using "8159" port : page errors 2`] = `[]`; +exports[`port > should work using "" port 2`] = ` +[] +`; -exports[`port should work using "auto" port : console messages 1`] = ` +exports[`port > should work using "auto" port 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -48,9 +54,11 @@ exports[`port should work using "auto" port : console messages 1`] = ` ] `; -exports[`port should work using "auto" port : page errors 1`] = `[]`; +exports[`port > should work using "auto" port 2`] = ` +[] +`; -exports[`port should work using "undefined" port : console messages 1`] = ` +exports[`port > should work using "undefined" port 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -58,4 +66,6 @@ exports[`port should work using "undefined" port : console messages 1`] = ` ] `; -exports[`port should work using "undefined" port : page errors 1`] = `[]`; +exports[`port > should work using "undefined" port 2`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/server-and-client-transport.test.js.snap.webpack5 b/test/e2e/__snapshots__/server-and-client-transport.test.js.snap.webpack5 index a106b87b20..9a6e519f00 100644 --- a/test/e2e/__snapshots__/server-and-client-transport.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/server-and-client-transport.test.js.snap.webpack5 @@ -1,68 +1,72 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`server and client transport should throw an error on invalid path to client transport 1`] = `"client.webSocketTransport must be a string denoting a default implementation (e.g. 'ws') or a full path to a JS file via require.resolve(...) which exports a class "`; +exports[`server and client transport > should throw an error on invalid path to client transport 1`] = ` +"client.webSocketTransport must be a string denoting a default implementation (e.g. 'ws') or a full path to a JS file via require.resolve(...) which exports a class " +`; -exports[`server and client transport should throw an error on invalid path to server transport 1`] = `"webSocketServer (webSocketServer.type) must be a string denoting a default implementation (e.g. 'ws'), a full path to a JS file which exports a class extending BaseServer (webpack-dev-server/lib/servers/BaseServer.js) via require.resolve(...), or the class itself which extends BaseServer"`; +exports[`server and client transport > should throw an error on invalid path to server transport 1`] = ` +"webSocketServer (webSocketServer.type) must be a string denoting a default implementation (e.g. 'ws'), a full path to a JS file which exports a class extending BaseServer (webpack-dev-server/lib/servers/BaseServer.js) via require.resolve(...), or the class itself which extends BaseServer" +`; -exports[`server and client transport should throw an error on wrong path 1`] = `"webSocketServer (webSocketServer.type) must be a string denoting a default implementation (e.g. 'ws'), a full path to a JS file which exports a class extending BaseServer (webpack-dev-server/lib/servers/BaseServer.js) via require.resolve(...), or the class itself which extends BaseServer"`; +exports[`server and client transport > should throw an error on wrong path 1`] = ` +"webSocketServer (webSocketServer.type) must be a string denoting a default implementation (e.g. 'ws'), a full path to a JS file which exports a class extending BaseServer (webpack-dev-server/lib/servers/BaseServer.js) via require.resolve(...), or the class itself which extends BaseServer" +`; -exports[`server and client transport should use "ws" transport and "ws" web socket server 1`] = ` +exports[`server and client transport > should use "ws" transport and "ws" web socket server 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", ] `; -exports[`server and client transport should use "ws" transport, when web socket server is not specify 1`] = ` +exports[`server and client transport > should use "ws" transport, when web socket server is not specify 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", ] `; -exports[`server and client transport should use "ws" web socket server when specify "ws" value 1`] = ` +exports[`server and client transport > should use "ws" web socket server when specify "ws" value 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", ] `; -exports[`server and client transport should use "ws" web socket server when specify "ws" value using object 1`] = ` +exports[`server and client transport > should use "ws" web socket server when specify "ws" value using object 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", ] `; -exports[`server and client transport should use custom web socket server when specify class 1`] = ` +exports[`server and client transport > should use custom web socket server when specify class 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", ] `; -exports[`server and client transport should use custom web socket server when specify class using object 1`] = ` +exports[`server and client transport > should use custom web socket server when specify class using object 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", ] `; -exports[`server and client transport should use custom web socket server when specify path to class 1`] = ` +exports[`server and client transport > should use custom web socket server when specify path to class 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", ] `; -exports[`server and client transport should use custom web socket server when specify path to class using object 1`] = ` +exports[`server and client transport > should use custom web socket server when specify path to class using object 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", ] `; -exports[`server and client transport should use default web socket server ("ws") 1`] = ` +exports[`server and client transport > should use default web socket server ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", diff --git a/test/e2e/__snapshots__/server.test.js.snap.webpack5 b/test/e2e/__snapshots__/server.test.js.snap.webpack5 index 9eb2a7c938..96e974a7ec 100644 --- a/test/e2e/__snapshots__/server.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/server.test.js.snap.webpack5 @@ -1,8 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`server option as object allow to pass more options should handle GET request to index route (/): console messages 1`] = `[]`; - -exports[`server option as object allow to pass more options should handle GET request to index route (/): https options 1`] = ` +exports[`server option > as object > allow to pass more options > should handle GET request to index route (/) 1`] = ` { "ca": "", "cert": "", @@ -14,18 +10,24 @@ exports[`server option as object allow to pass more options should handle GET re } `; -exports[`server option as object allow to pass more options should handle GET request to index route (/): page errors 1`] = `[]`; - -exports[`server option as object allow to pass more options should handle GET request to index route (/): response status 1`] = `200`; +exports[`server option > as object > allow to pass more options > should handle GET request to index route (/) 2`] = ` +200 +`; -exports[`server option as object allow to pass more options should handle GET request to index route (/): response text 1`] = ` +exports[`server option > as object > allow to pass more options > should handle GET request to index route (/) 3`] = ` "Heyo. " `; -exports[`server option as object ca, pfx, key and cert are array of buffers should handle GET request to index route (/): console messages 1`] = `[]`; +exports[`server option > as object > allow to pass more options > should handle GET request to index route (/) 4`] = ` +[] +`; -exports[`server option as object ca, pfx, key and cert are array of buffers should handle GET request to index route (/): https options 1`] = ` +exports[`server option > as object > allow to pass more options > should handle GET request to index route (/) 5`] = ` +[] +`; + +exports[`server option > as object > ca, pfx, key and cert are array of buffers > should handle GET request to index route (/) 1`] = ` { "ca": [ "", @@ -44,18 +46,24 @@ exports[`server option as object ca, pfx, key and cert are array of buffers shou } `; -exports[`server option as object ca, pfx, key and cert are array of buffers should handle GET request to index route (/): page errors 1`] = `[]`; - -exports[`server option as object ca, pfx, key and cert are array of buffers should handle GET request to index route (/): response status 1`] = `200`; +exports[`server option > as object > ca, pfx, key and cert are array of buffers > should handle GET request to index route (/) 2`] = ` +200 +`; -exports[`server option as object ca, pfx, key and cert are array of buffers should handle GET request to index route (/): response text 1`] = ` +exports[`server option > as object > ca, pfx, key and cert are array of buffers > should handle GET request to index route (/) 3`] = ` "Heyo. " `; -exports[`server option as object ca, pfx, key and cert are array of paths to files should handle GET request to index route (/): console messages 1`] = `[]`; +exports[`server option > as object > ca, pfx, key and cert are array of buffers > should handle GET request to index route (/) 4`] = ` +[] +`; + +exports[`server option > as object > ca, pfx, key and cert are array of buffers > should handle GET request to index route (/) 5`] = ` +[] +`; -exports[`server option as object ca, pfx, key and cert are array of paths to files should handle GET request to index route (/): https options 1`] = ` +exports[`server option > as object > ca, pfx, key and cert are array of paths to files > should handle GET request to index route (/) 1`] = ` { "ca": [ "", @@ -74,18 +82,24 @@ exports[`server option as object ca, pfx, key and cert are array of paths to fil } `; -exports[`server option as object ca, pfx, key and cert are array of paths to files should handle GET request to index route (/): page errors 1`] = `[]`; - -exports[`server option as object ca, pfx, key and cert are array of paths to files should handle GET request to index route (/): response status 1`] = `200`; +exports[`server option > as object > ca, pfx, key and cert are array of paths to files > should handle GET request to index route (/) 2`] = ` +200 +`; -exports[`server option as object ca, pfx, key and cert are array of paths to files should handle GET request to index route (/): response text 1`] = ` +exports[`server option > as object > ca, pfx, key and cert are array of paths to files > should handle GET request to index route (/) 3`] = ` "Heyo. " `; -exports[`server option as object ca, pfx, key and cert are array of strings should handle GET request to index route (/): console messages 1`] = `[]`; +exports[`server option > as object > ca, pfx, key and cert are array of paths to files > should handle GET request to index route (/) 4`] = ` +[] +`; + +exports[`server option > as object > ca, pfx, key and cert are array of paths to files > should handle GET request to index route (/) 5`] = ` +[] +`; -exports[`server option as object ca, pfx, key and cert are array of strings should handle GET request to index route (/): https options 1`] = ` +exports[`server option > as object > ca, pfx, key and cert are array of strings > should handle GET request to index route (/) 1`] = ` { "ca": [ "-----BEGIN RSA PRIVATE KEY----- @@ -180,18 +194,24 @@ QyvMqmN1kGy20SZbQDD/fLfqBQ== } `; -exports[`server option as object ca, pfx, key and cert are array of strings should handle GET request to index route (/): page errors 1`] = `[]`; - -exports[`server option as object ca, pfx, key and cert are array of strings should handle GET request to index route (/): response status 1`] = `200`; +exports[`server option > as object > ca, pfx, key and cert are array of strings > should handle GET request to index route (/) 2`] = ` +200 +`; -exports[`server option as object ca, pfx, key and cert are array of strings should handle GET request to index route (/): response text 1`] = ` +exports[`server option > as object > ca, pfx, key and cert are array of strings > should handle GET request to index route (/) 3`] = ` "Heyo. " `; -exports[`server option as object ca, pfx, key and cert are buffer should handle GET request to index route (/): console messages 1`] = `[]`; +exports[`server option > as object > ca, pfx, key and cert are array of strings > should handle GET request to index route (/) 4`] = ` +[] +`; + +exports[`server option > as object > ca, pfx, key and cert are array of strings > should handle GET request to index route (/) 5`] = ` +[] +`; -exports[`server option as object ca, pfx, key and cert are buffer should handle GET request to index route (/): https options 1`] = ` +exports[`server option > as object > ca, pfx, key and cert are buffer > should handle GET request to index route (/) 1`] = ` { "ca": "", "cert": "", @@ -202,18 +222,24 @@ exports[`server option as object ca, pfx, key and cert are buffer should handle } `; -exports[`server option as object ca, pfx, key and cert are buffer should handle GET request to index route (/): page errors 1`] = `[]`; - -exports[`server option as object ca, pfx, key and cert are buffer should handle GET request to index route (/): response status 1`] = `200`; +exports[`server option > as object > ca, pfx, key and cert are buffer > should handle GET request to index route (/) 2`] = ` +200 +`; -exports[`server option as object ca, pfx, key and cert are buffer should handle GET request to index route (/): response text 1`] = ` +exports[`server option > as object > ca, pfx, key and cert are buffer > should handle GET request to index route (/) 3`] = ` "Heyo. " `; -exports[`server option as object ca, pfx, key and cert are buffer, key and pfx are objects should handle GET request to index route (/): console messages 1`] = `[]`; +exports[`server option > as object > ca, pfx, key and cert are buffer > should handle GET request to index route (/) 4`] = ` +[] +`; -exports[`server option as object ca, pfx, key and cert are buffer, key and pfx are objects should handle GET request to index route (/): https options 1`] = ` +exports[`server option > as object > ca, pfx, key and cert are buffer > should handle GET request to index route (/) 5`] = ` +[] +`; + +exports[`server option > as object > ca, pfx, key and cert are buffer, key and pfx are objects > should handle GET request to index route (/) 1`] = ` { "ca": "", "cert": "", @@ -232,18 +258,24 @@ exports[`server option as object ca, pfx, key and cert are buffer, key and pfx a } `; -exports[`server option as object ca, pfx, key and cert are buffer, key and pfx are objects should handle GET request to index route (/): page errors 1`] = `[]`; - -exports[`server option as object ca, pfx, key and cert are buffer, key and pfx are objects should handle GET request to index route (/): response status 1`] = `200`; +exports[`server option > as object > ca, pfx, key and cert are buffer, key and pfx are objects > should handle GET request to index route (/) 2`] = ` +200 +`; -exports[`server option as object ca, pfx, key and cert are buffer, key and pfx are objects should handle GET request to index route (/): response text 1`] = ` +exports[`server option > as object > ca, pfx, key and cert are buffer, key and pfx are objects > should handle GET request to index route (/) 3`] = ` "Heyo. " `; -exports[`server option as object ca, pfx, key and cert are paths to files should handle GET request to index route (/): console messages 1`] = `[]`; +exports[`server option > as object > ca, pfx, key and cert are buffer, key and pfx are objects > should handle GET request to index route (/) 4`] = ` +[] +`; + +exports[`server option > as object > ca, pfx, key and cert are buffer, key and pfx are objects > should handle GET request to index route (/) 5`] = ` +[] +`; -exports[`server option as object ca, pfx, key and cert are paths to files should handle GET request to index route (/): https options 1`] = ` +exports[`server option > as object > ca, pfx, key and cert are paths to files > should handle GET request to index route (/) 1`] = ` { "ca": "", "cert": "", @@ -254,18 +286,24 @@ exports[`server option as object ca, pfx, key and cert are paths to files should } `; -exports[`server option as object ca, pfx, key and cert are paths to files should handle GET request to index route (/): page errors 1`] = `[]`; - -exports[`server option as object ca, pfx, key and cert are paths to files should handle GET request to index route (/): response status 1`] = `200`; +exports[`server option > as object > ca, pfx, key and cert are paths to files > should handle GET request to index route (/) 2`] = ` +200 +`; -exports[`server option as object ca, pfx, key and cert are paths to files should handle GET request to index route (/): response text 1`] = ` +exports[`server option > as object > ca, pfx, key and cert are paths to files > should handle GET request to index route (/) 3`] = ` "Heyo. " `; -exports[`server option as object ca, pfx, key and cert are strings should handle GET request to index route (/): console messages 1`] = `[]`; +exports[`server option > as object > ca, pfx, key and cert are paths to files > should handle GET request to index route (/) 4`] = ` +[] +`; + +exports[`server option > as object > ca, pfx, key and cert are paths to files > should handle GET request to index route (/) 5`] = ` +[] +`; -exports[`server option as object ca, pfx, key and cert are strings should handle GET request to index route (/): https options 1`] = ` +exports[`server option > as object > ca, pfx, key and cert are strings > should handle GET request to index route (/) 1`] = ` { "ca": "-----BEGIN RSA PRIVATE KEY----- MIIEpQIBAAKCAQEAxAUVLFM+K3XDLQkBi7xt0s1Ip7JoHYDskzUDQNHjjMkUq5kv @@ -352,18 +390,24 @@ QyvMqmN1kGy20SZbQDD/fLfqBQ== } `; -exports[`server option as object ca, pfx, key and cert are strings should handle GET request to index route (/): page errors 1`] = `[]`; - -exports[`server option as object ca, pfx, key and cert are strings should handle GET request to index route (/): response status 1`] = `200`; +exports[`server option > as object > ca, pfx, key and cert are strings > should handle GET request to index route (/) 2`] = ` +200 +`; -exports[`server option as object ca, pfx, key and cert are strings should handle GET request to index route (/): response text 1`] = ` +exports[`server option > as object > ca, pfx, key and cert are strings > should handle GET request to index route (/) 3`] = ` "Heyo. " `; -exports[`server option as object ca, pfx, key and cert are strings, key and pfx are objects should handle GET request to index route (/): console messages 1`] = `[]`; +exports[`server option > as object > ca, pfx, key and cert are strings > should handle GET request to index route (/) 4`] = ` +[] +`; + +exports[`server option > as object > ca, pfx, key and cert are strings > should handle GET request to index route (/) 5`] = ` +[] +`; -exports[`server option as object ca, pfx, key and cert are strings, key and pfx are objects should handle GET request to index route (/): https options 1`] = ` +exports[`server option > as object > ca, pfx, key and cert are strings, key and pfx are objects > should handle GET request to index route (/) 1`] = ` { "ca": "-----BEGIN RSA PRIVATE KEY----- MIIEpQIBAAKCAQEAxAUVLFM+K3XDLQkBi7xt0s1Ip7JoHYDskzUDQNHjjMkUq5kv @@ -458,40 +502,56 @@ QyvMqmN1kGy20SZbQDD/fLfqBQ== } `; -exports[`server option as object ca, pfx, key and cert are strings, key and pfx are objects should handle GET request to index route (/): page errors 1`] = `[]`; - -exports[`server option as object ca, pfx, key and cert are strings, key and pfx are objects should handle GET request to index route (/): response status 1`] = `200`; +exports[`server option > as object > ca, pfx, key and cert are strings, key and pfx are objects > should handle GET request to index route (/) 2`] = ` +200 +`; -exports[`server option as object ca, pfx, key and cert are strings, key and pfx are objects should handle GET request to index route (/): response text 1`] = ` +exports[`server option > as object > ca, pfx, key and cert are strings, key and pfx are objects > should handle GET request to index route (/) 3`] = ` "Heyo. " `; -exports[`server option as object custom server with options should handle GET request to index route (/): console messages 1`] = `[]`; +exports[`server option > as object > ca, pfx, key and cert are strings, key and pfx are objects > should handle GET request to index route (/) 4`] = ` +[] +`; + +exports[`server option > as object > ca, pfx, key and cert are strings, key and pfx are objects > should handle GET request to index route (/) 5`] = ` +[] +`; -exports[`server option as object custom server with options should handle GET request to index route (/): http options 1`] = ` +exports[`server option > as object > custom server with options > should handle GET request to index route (/) 1`] = ` { "maxHeaderSize": 16384, } `; -exports[`server option as object custom server with options should handle GET request to index route (/): page errors 1`] = `[]`; - -exports[`server option as object custom server with options should handle GET request to index route (/): response status 1`] = `200`; +exports[`server option > as object > custom server with options > should handle GET request to index route (/) 2`] = ` +200 +`; -exports[`server option as object custom server with options should handle GET request to index route (/): response text 1`] = ` +exports[`server option > as object > custom server with options > should handle GET request to index route (/) 3`] = ` "Heyo. " `; -exports[`server option as object should support the "requestCert" option should handle GET request to index route (/): response status 1`] = `200`; +exports[`server option > as object > custom server with options > should handle GET request to index route (/) 4`] = ` +[] +`; -exports[`server option as object should support the "requestCert" option should handle GET request to index route (/): response text 1`] = ` +exports[`server option > as object > custom server with options > should handle GET request to index route (/) 5`] = ` +[] +`; + +exports[`server option > as object > should support the "requestCert" option > should handle GET request to index route (/) 1`] = ` +200 +`; + +exports[`server option > as object > should support the "requestCert" option > should handle GET request to index route (/) 2`] = ` "Heyo. " `; -exports[`server option as object should support the "requestCert" option should pass options to the 'https.createServer' method: https options 1`] = ` +exports[`server option > as object > should support the "requestCert" option > should pass options to the 'https.createServer' method 1`] = ` { "cert": "", "key": "", @@ -501,35 +561,53 @@ exports[`server option as object should support the "requestCert" option should } `; -exports[`server option as string custom-http should handle GET request to index route (/): console messages 1`] = `[]`; - -exports[`server option as string custom-http should handle GET request to index route (/): page errors 1`] = `[]`; - -exports[`server option as string custom-http should handle GET request to index route (/): response status 1`] = `200`; +exports[`server option > as string > custom-http > should handle GET request to index route (/) 1`] = ` +200 +`; -exports[`server option as string custom-http should handle GET request to index route (/): response text 1`] = ` +exports[`server option > as string > custom-http > should handle GET request to index route (/) 2`] = ` "Heyo. " `; -exports[`server option as string http should handle GET request to index route (/): console messages 1`] = `[]`; +exports[`server option > as string > custom-http > should handle GET request to index route (/) 3`] = ` +[] +`; -exports[`server option as string http should handle GET request to index route (/): page errors 1`] = `[]`; +exports[`server option > as string > custom-http > should handle GET request to index route (/) 4`] = ` +[] +`; -exports[`server option as string http should handle GET request to index route (/): response status 1`] = `200`; +exports[`server option > as string > http > should handle GET request to index route (/) 1`] = ` +200 +`; -exports[`server option as string http should handle GET request to index route (/): response text 1`] = ` +exports[`server option > as string > http > should handle GET request to index route (/) 2`] = ` "Heyo. " `; -exports[`server option as string https should handle GET request to index route (/): console messages 1`] = `[]`; +exports[`server option > as string > http > should handle GET request to index route (/) 3`] = ` +[] +`; -exports[`server option as string https should handle GET request to index route (/): page errors 1`] = `[]`; +exports[`server option > as string > http > should handle GET request to index route (/) 4`] = ` +[] +`; -exports[`server option as string https should handle GET request to index route (/): response status 1`] = `200`; +exports[`server option > as string > https > should handle GET request to index route (/) 1`] = ` +200 +`; -exports[`server option as string https should handle GET request to index route (/): response text 1`] = ` +exports[`server option > as string > https > should handle GET request to index route (/) 2`] = ` "Heyo. " `; + +exports[`server option > as string > https > should handle GET request to index route (/) 3`] = ` +[] +`; + +exports[`server option > as string > https > should handle GET request to index route (/) 4`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/setup-exit-signals.test.js.snap.webpack5 b/test/e2e/__snapshots__/setup-exit-signals.test.js.snap.webpack5 index c593d85b82..fa26de3eab 100644 --- a/test/e2e/__snapshots__/setup-exit-signals.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/setup-exit-signals.test.js.snap.webpack5 @@ -1,6 +1,8 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +exports[`setupExitSignals option > should handle 'SIGINT' and 'SIGTERM' signals > should close and exit on SIGINT 1`] = ` +200 +`; -exports[`setupExitSignals option should handle 'SIGINT' and 'SIGTERM' signals should close and exit on SIGINT: console messages 1`] = ` +exports[`setupExitSignals option > should handle 'SIGINT' and 'SIGTERM' signals > should close and exit on SIGINT 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -8,11 +10,15 @@ exports[`setupExitSignals option should handle 'SIGINT' and 'SIGTERM' signals sh ] `; -exports[`setupExitSignals option should handle 'SIGINT' and 'SIGTERM' signals should close and exit on SIGINT: page errors 1`] = `[]`; +exports[`setupExitSignals option > should handle 'SIGINT' and 'SIGTERM' signals > should close and exit on SIGINT 3`] = ` +[] +`; -exports[`setupExitSignals option should handle 'SIGINT' and 'SIGTERM' signals should close and exit on SIGINT: response status 1`] = `200`; +exports[`setupExitSignals option > should handle 'SIGINT' and 'SIGTERM' signals > should close and exit on SIGTERM 1`] = ` +200 +`; -exports[`setupExitSignals option should handle 'SIGINT' and 'SIGTERM' signals should close and exit on SIGTERM: console messages 1`] = ` +exports[`setupExitSignals option > should handle 'SIGINT' and 'SIGTERM' signals > should close and exit on SIGTERM 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -20,6 +26,6 @@ exports[`setupExitSignals option should handle 'SIGINT' and 'SIGTERM' signals sh ] `; -exports[`setupExitSignals option should handle 'SIGINT' and 'SIGTERM' signals should close and exit on SIGTERM: page errors 1`] = `[]`; - -exports[`setupExitSignals option should handle 'SIGINT' and 'SIGTERM' signals should close and exit on SIGTERM: response status 1`] = `200`; +exports[`setupExitSignals option > should handle 'SIGINT' and 'SIGTERM' signals > should close and exit on SIGTERM 3`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/setup-middlewares.test.js.snap.webpack5 b/test/e2e/__snapshots__/setup-middlewares.test.js.snap.webpack5 index 2a83e8bbbf..7407c58602 100644 --- a/test/e2e/__snapshots__/setup-middlewares.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/setup-middlewares.test.js.snap.webpack5 @@ -1,39 +1,75 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +exports[`setupMiddlewares option > should handle GET request to /setup-middleware/some/path route 1`] = ` +"text/html; charset=utf-8" +`; -exports[`setupMiddlewares option should handle GET request to /setup-middleware/some/path route: console messages 1`] = `[]`; +exports[`setupMiddlewares option > should handle GET request to /setup-middleware/some/path route 2`] = ` +200 +`; -exports[`setupMiddlewares option should handle GET request to /setup-middleware/some/path route: page errors 1`] = `[]`; +exports[`setupMiddlewares option > should handle GET request to /setup-middleware/some/path route 3`] = ` +"setup-middlewares option GET" +`; -exports[`setupMiddlewares option should handle GET request to /setup-middleware/some/path route: response headers content-type 1`] = `"text/html; charset=utf-8"`; +exports[`setupMiddlewares option > should handle GET request to /setup-middleware/some/path route 4`] = ` +"text/html; charset=utf-8" +`; -exports[`setupMiddlewares option should handle GET request to /setup-middleware/some/path route: response headers content-type 2`] = `"text/html; charset=utf-8"`; +exports[`setupMiddlewares option > should handle GET request to /setup-middleware/some/path route 5`] = ` +200 +`; -exports[`setupMiddlewares option should handle GET request to /setup-middleware/some/path route: response headers content-type 3`] = `"text/html; charset=utf-8"`; +exports[`setupMiddlewares option > should handle GET request to /setup-middleware/some/path route 6`] = ` +"Hello World with path!" +`; -exports[`setupMiddlewares option should handle GET request to /setup-middleware/some/path route: response headers content-type 4`] = `"text/html; charset=utf-8"`; +exports[`setupMiddlewares option > should handle GET request to /setup-middleware/some/path route 7`] = ` +"text/html; charset=utf-8" +`; -exports[`setupMiddlewares option should handle GET request to /setup-middleware/some/path route: response status 1`] = `200`; +exports[`setupMiddlewares option > should handle GET request to /setup-middleware/some/path route 8`] = ` +200 +`; -exports[`setupMiddlewares option should handle GET request to /setup-middleware/some/path route: response status 2`] = `200`; +exports[`setupMiddlewares option > should handle GET request to /setup-middleware/some/path route 9`] = ` +"Hello World without path!" +`; -exports[`setupMiddlewares option should handle GET request to /setup-middleware/some/path route: response status 3`] = `200`; +exports[`setupMiddlewares option > should handle GET request to /setup-middleware/some/path route 10`] = ` +"text/html; charset=utf-8" +`; -exports[`setupMiddlewares option should handle GET request to /setup-middleware/some/path route: response status 4`] = `200`; +exports[`setupMiddlewares option > should handle GET request to /setup-middleware/some/path route 11`] = ` +200 +`; -exports[`setupMiddlewares option should handle GET request to /setup-middleware/some/path route: response text 1`] = `"setup-middlewares option GET"`; +exports[`setupMiddlewares option > should handle GET request to /setup-middleware/some/path route 12`] = ` +"Hello World as function!" +`; -exports[`setupMiddlewares option should handle GET request to /setup-middleware/some/path route: response text 2`] = `"Hello World with path!"`; +exports[`setupMiddlewares option > should handle GET request to /setup-middleware/some/path route 13`] = ` +[] +`; -exports[`setupMiddlewares option should handle GET request to /setup-middleware/some/path route: response text 3`] = `"Hello World without path!"`; +exports[`setupMiddlewares option > should handle GET request to /setup-middleware/some/path route 14`] = ` +[] +`; -exports[`setupMiddlewares option should handle GET request to /setup-middleware/some/path route: response text 4`] = `"Hello World as function!"`; +exports[`setupMiddlewares option > should handle POST request to /setup-middleware/some/path route 1`] = ` +"text/html; charset=utf-8" +`; -exports[`setupMiddlewares option should handle POST request to /setup-middleware/some/path route: console messages 1`] = `[]`; +exports[`setupMiddlewares option > should handle POST request to /setup-middleware/some/path route 2`] = ` +200 +`; -exports[`setupMiddlewares option should handle POST request to /setup-middleware/some/path route: page errors 1`] = `[]`; +exports[`setupMiddlewares option > should handle POST request to /setup-middleware/some/path route 3`] = ` +"setup-middlewares option POST" +`; -exports[`setupMiddlewares option should handle POST request to /setup-middleware/some/path route: response headers content-type 1`] = `"text/html; charset=utf-8"`; +exports[`setupMiddlewares option > should handle POST request to /setup-middleware/some/path route 4`] = ` +[] +`; -exports[`setupMiddlewares option should handle POST request to /setup-middleware/some/path route: response status 1`] = `200`; - -exports[`setupMiddlewares option should handle POST request to /setup-middleware/some/path route: response text 1`] = `"setup-middlewares option POST"`; +exports[`setupMiddlewares option > should handle POST request to /setup-middleware/some/path route 5`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/static-directory.test.js.snap.webpack5 b/test/e2e/__snapshots__/static-directory.test.js.snap.webpack5 index 4d88c538a7..611c8ad3e5 100644 --- a/test/e2e/__snapshots__/static-directory.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/static-directory.test.js.snap.webpack5 @@ -1,27 +1,25 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`static.directory option defaults to PWD should handle request to /index.html: console messages 1`] = `[]`; - -exports[`static.directory option defaults to PWD should handle request to /index.html: page errors 1`] = `[]`; - -exports[`static.directory option defaults to PWD should handle request to /index.html: response status 1`] = `200`; +exports[`static.directory option > defaults to PWD > should handle request to /index.html 1`] = ` +200 +`; -exports[`static.directory option defaults to PWD should handle request to /index.html: response text 1`] = ` +exports[`static.directory option > defaults to PWD > should handle request to /index.html 2`] = ` "Heyo. " `; -exports[`static.directory option disabled should not handle request to /other.html (404): console messages 1`] = ` -[ - "Failed to load resource: the server responded with a status of 404 (Not Found)", -] +exports[`static.directory option > defaults to PWD > should handle request to /index.html 3`] = ` +[] `; -exports[`static.directory option disabled should not handle request to /other.html (404): page errors 1`] = `[]`; +exports[`static.directory option > defaults to PWD > should handle request to /index.html 4`] = ` +[] +`; -exports[`static.directory option disabled should not handle request to /other.html (404): response status 1`] = `404`; +exports[`static.directory option > disabled > should not handle request to /other.html (404) 1`] = ` +404 +`; -exports[`static.directory option disabled should not handle request to /other.html (404): response text 1`] = ` +exports[`static.directory option > disabled > should not handle request to /other.html (404) 2`] = ` " @@ -35,34 +33,50 @@ exports[`static.directory option disabled should not handle request to /other.ht " `; -exports[`static.directory option test listing files in folders without index.html using the default static.serveIndex option (true) should list the files inside the assets folder (200): console messages 1`] = `[]`; +exports[`static.directory option > disabled > should not handle request to /other.html (404) 3`] = ` +[ + "Failed to load resource: the server responded with a status of 404 (Not Found)", +] +`; -exports[`static.directory option test listing files in folders without index.html using the default static.serveIndex option (true) should list the files inside the assets folder (200): page errors 1`] = `[]`; +exports[`static.directory option > disabled > should not handle request to /other.html (404) 4`] = ` +[] +`; -exports[`static.directory option test listing files in folders without index.html using the default static.serveIndex option (true) should list the files inside the assets folder (200): response status 1`] = `200`; +exports[`static.directory option > test listing files in folders without index.html using the default static.serveIndex option (true) > should list the files inside the assets folder (200) 1`] = ` +200 +`; -exports[`static.directory option test listing files in folders without index.html using the default static.serveIndex option (true) should show Heyo. because bar has index.html inside it (200): console messages 1`] = `[]`; +exports[`static.directory option > test listing files in folders without index.html using the default static.serveIndex option (true) > should list the files inside the assets folder (200) 2`] = ` +[] +`; -exports[`static.directory option test listing files in folders without index.html using the default static.serveIndex option (true) should show Heyo. because bar has index.html inside it (200): page errors 1`] = `[]`; +exports[`static.directory option > test listing files in folders without index.html using the default static.serveIndex option (true) > should list the files inside the assets folder (200) 3`] = ` +[] +`; -exports[`static.directory option test listing files in folders without index.html using the default static.serveIndex option (true) should show Heyo. because bar has index.html inside it (200): response status 1`] = `200`; +exports[`static.directory option > test listing files in folders without index.html using the default static.serveIndex option (true) > should show Heyo. because bar has index.html inside it (200) 1`] = ` +200 +`; -exports[`static.directory option test listing files in folders without index.html using the default static.serveIndex option (true) should show Heyo. because bar has index.html inside it (200): response text 1`] = ` +exports[`static.directory option > test listing files in folders without index.html using the default static.serveIndex option (true) > should show Heyo. because bar has index.html inside it (200) 2`] = ` "Heyo " `; -exports[`static.directory option test listing files in folders without index.html using the option static.serveIndex: false should not list the files inside the assets folder (404): console messages 1`] = ` -[ - "Failed to load resource: the server responded with a status of 404 (Not Found)", -] +exports[`static.directory option > test listing files in folders without index.html using the default static.serveIndex option (true) > should show Heyo. because bar has index.html inside it (200) 3`] = ` +[] `; -exports[`static.directory option test listing files in folders without index.html using the option static.serveIndex: false should not list the files inside the assets folder (404): page errors 1`] = `[]`; +exports[`static.directory option > test listing files in folders without index.html using the default static.serveIndex option (true) > should show Heyo. because bar has index.html inside it (200) 4`] = ` +[] +`; -exports[`static.directory option test listing files in folders without index.html using the option static.serveIndex: false should not list the files inside the assets folder (404): response status 1`] = `404`; +exports[`static.directory option > test listing files in folders without index.html using the option static.serveIndex: false > should not list the files inside the assets folder (404) 1`] = ` +404 +`; -exports[`static.directory option test listing files in folders without index.html using the option static.serveIndex: false should not list the files inside the assets folder (404): response text 1`] = ` +exports[`static.directory option > test listing files in folders without index.html using the option static.serveIndex: false > should not list the files inside the assets folder (404) 2`] = ` " @@ -76,74 +90,126 @@ exports[`static.directory option test listing files in folders without index.htm " `; -exports[`static.directory option test listing files in folders without index.html using the option static.serveIndex: false should show Heyo. because bar has index.html inside it (200): console messages 1`] = `[]`; +exports[`static.directory option > test listing files in folders without index.html using the option static.serveIndex: false > should not list the files inside the assets folder (404) 3`] = ` +[ + "Failed to load resource: the server responded with a status of 404 (Not Found)", +] +`; -exports[`static.directory option test listing files in folders without index.html using the option static.serveIndex: false should show Heyo. because bar has index.html inside it (200): page errors 1`] = `[]`; +exports[`static.directory option > test listing files in folders without index.html using the option static.serveIndex: false > should not list the files inside the assets folder (404) 4`] = ` +[] +`; -exports[`static.directory option test listing files in folders without index.html using the option static.serveIndex: false should show Heyo. because bar has index.html inside it (200): response status 1`] = `200`; +exports[`static.directory option > test listing files in folders without index.html using the option static.serveIndex: false > should show Heyo. because bar has index.html inside it (200) 1`] = ` +200 +`; -exports[`static.directory option test listing files in folders without index.html using the option static.serveIndex: false should show Heyo. because bar has index.html inside it (200): response text 1`] = ` +exports[`static.directory option > test listing files in folders without index.html using the option static.serveIndex: false > should show Heyo. because bar has index.html inside it (200) 2`] = ` "Heyo " `; -exports[`static.directory option test listing files in folders without index.html using the option static.serveIndex: true should list the files inside the assets folder (200): console messages 1`] = `[]`; +exports[`static.directory option > test listing files in folders without index.html using the option static.serveIndex: false > should show Heyo. because bar has index.html inside it (200) 3`] = ` +[] +`; -exports[`static.directory option test listing files in folders without index.html using the option static.serveIndex: true should list the files inside the assets folder (200): page errors 1`] = `[]`; +exports[`static.directory option > test listing files in folders without index.html using the option static.serveIndex: false > should show Heyo. because bar has index.html inside it (200) 4`] = ` +[] +`; -exports[`static.directory option test listing files in folders without index.html using the option static.serveIndex: true should list the files inside the assets folder (200): response status 1`] = `200`; +exports[`static.directory option > test listing files in folders without index.html using the option static.serveIndex: true > should list the files inside the assets folder (200) 1`] = ` +200 +`; -exports[`static.directory option test listing files in folders without index.html using the option static.serveIndex: true should show Heyo. because bar has index.html inside it (200): console messages 1`] = `[]`; +exports[`static.directory option > test listing files in folders without index.html using the option static.serveIndex: true > should list the files inside the assets folder (200) 2`] = ` +[] +`; -exports[`static.directory option test listing files in folders without index.html using the option static.serveIndex: true should show Heyo. because bar has index.html inside it (200): page errors 1`] = `[]`; +exports[`static.directory option > test listing files in folders without index.html using the option static.serveIndex: true > should list the files inside the assets folder (200) 3`] = ` +[] +`; -exports[`static.directory option test listing files in folders without index.html using the option static.serveIndex: true should show Heyo. because bar has index.html inside it (200): response status 1`] = `200`; +exports[`static.directory option > test listing files in folders without index.html using the option static.serveIndex: true > should show Heyo. because bar has index.html inside it (200) 1`] = ` +200 +`; -exports[`static.directory option test listing files in folders without index.html using the option static.serveIndex: true should show Heyo. because bar has index.html inside it (200): response text 1`] = ` +exports[`static.directory option > test listing files in folders without index.html using the option static.serveIndex: true > should show Heyo. because bar has index.html inside it (200) 2`] = ` "Heyo " `; -exports[`static.directory option to directory should handle request to index route: console messages 1`] = `[]`; +exports[`static.directory option > test listing files in folders without index.html using the option static.serveIndex: true > should show Heyo. because bar has index.html inside it (200) 3`] = ` +[] +`; -exports[`static.directory option to directory should handle request to index route: page errors 1`] = `[]`; +exports[`static.directory option > test listing files in folders without index.html using the option static.serveIndex: true > should show Heyo. because bar has index.html inside it (200) 4`] = ` +[] +`; -exports[`static.directory option to directory should handle request to index route: response status 1`] = `200`; +exports[`static.directory option > to directory > should handle request to index route 1`] = ` +200 +`; -exports[`static.directory option to directory should handle request to index route: response text 1`] = ` +exports[`static.directory option > to directory > should handle request to index route 2`] = ` "Heyo. " `; -exports[`static.directory option to directory should handle request to other file: console messages 1`] = `[]`; +exports[`static.directory option > to directory > should handle request to index route 3`] = ` +[] +`; -exports[`static.directory option to directory should handle request to other file: page errors 1`] = `[]`; +exports[`static.directory option > to directory > should handle request to index route 4`] = ` +[] +`; -exports[`static.directory option to directory should handle request to other file: response status 1`] = `200`; +exports[`static.directory option > to directory > should handle request to other file 1`] = ` +200 +`; -exports[`static.directory option to directory should handle request to other file: response text 1`] = ` +exports[`static.directory option > to directory > should handle request to other file 2`] = ` "Other html " `; -exports[`static.directory option to multiple directories should handle request first directory: console messages 1`] = `[]`; +exports[`static.directory option > to directory > should handle request to other file 3`] = ` +[] +`; -exports[`static.directory option to multiple directories should handle request first directory: page errors 1`] = `[]`; +exports[`static.directory option > to directory > should handle request to other file 4`] = ` +[] +`; -exports[`static.directory option to multiple directories should handle request first directory: response status 1`] = `200`; +exports[`static.directory option > to multiple directories > should handle request first directory 1`] = ` +200 +`; -exports[`static.directory option to multiple directories should handle request first directory: response text 1`] = ` +exports[`static.directory option > to multiple directories > should handle request first directory 2`] = ` "Heyo. " `; -exports[`static.directory option to multiple directories should handle request to second directory: console messages 1`] = `[]`; +exports[`static.directory option > to multiple directories > should handle request first directory 3`] = ` +[] +`; -exports[`static.directory option to multiple directories should handle request to second directory: page errors 1`] = `[]`; +exports[`static.directory option > to multiple directories > should handle request first directory 4`] = ` +[] +`; -exports[`static.directory option to multiple directories should handle request to second directory: response status 1`] = `200`; +exports[`static.directory option > to multiple directories > should handle request to second directory 1`] = ` +200 +`; -exports[`static.directory option to multiple directories should handle request to second directory: response text 1`] = ` +exports[`static.directory option > to multiple directories > should handle request to second directory 2`] = ` "Foo! " `; + +exports[`static.directory option > to multiple directories > should handle request to second directory 3`] = ` +[] +`; + +exports[`static.directory option > to multiple directories > should handle request to second directory 4`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/static-public-path.test.js.snap.webpack5 b/test/e2e/__snapshots__/static-public-path.test.js.snap.webpack5 index de31661060..3849475a92 100644 --- a/test/e2e/__snapshots__/static-public-path.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/static-public-path.test.js.snap.webpack5 @@ -1,192 +1,286 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`static.publicPath option Content type should handle request to example.txt: console messages 1`] = `[]`; - -exports[`static.publicPath option Content type should handle request to example.txt: page errors 1`] = `[]`; - -exports[`static.publicPath option Content type should handle request to example.txt: response header content-type 1`] = `"text/plain; charset=utf-8"`; +exports[`static.publicPath option > Content type > should handle request to example.txt 1`] = ` +200 +`; -exports[`static.publicPath option Content type should handle request to example.txt: response status 1`] = `200`; +exports[`static.publicPath option > Content type > should handle request to example.txt 2`] = ` +"text/plain; charset=utf-8" +`; -exports[`static.publicPath option defaults to CWD should handle request to page: console messages 1`] = `[]`; +exports[`static.publicPath option > Content type > should handle request to example.txt 3`] = ` +[] +`; -exports[`static.publicPath option defaults to CWD should handle request to page: page errors 1`] = `[]`; +exports[`static.publicPath option > Content type > should handle request to example.txt 4`] = ` +[] +`; -exports[`static.publicPath option defaults to CWD should handle request to page: response status 1`] = `200`; +exports[`static.publicPath option > defaults to CWD > should handle request to page 1`] = ` +200 +`; -exports[`static.publicPath option defaults to CWD should handle request to page: response text 1`] = ` +exports[`static.publicPath option > defaults to CWD > should handle request to page 2`] = ` "Heyo. " `; -exports[`static.publicPath option multiple static.publicPath entries should handle request to the /foo route of second path: console messages 1`] = `[]`; +exports[`static.publicPath option > defaults to CWD > should handle request to page 3`] = ` +[] +`; -exports[`static.publicPath option multiple static.publicPath entries should handle request to the /foo route of second path: page errors 1`] = `[]`; +exports[`static.publicPath option > defaults to CWD > should handle request to page 4`] = ` +[] +`; -exports[`static.publicPath option multiple static.publicPath entries should handle request to the /foo route of second path: response status 1`] = `200`; +exports[`static.publicPath option > multiple static.publicPath entries > should handle request to the /foo route of second path 1`] = ` +200 +`; -exports[`static.publicPath option multiple static.publicPath entries should handle request to the /foo route of second path: response text 1`] = ` +exports[`static.publicPath option > multiple static.publicPath entries > should handle request to the /foo route of second path 2`] = ` "Foo! " `; -exports[`static.publicPath option multiple static.publicPath entries should handle request to the index of first path: console messages 1`] = `[]`; +exports[`static.publicPath option > multiple static.publicPath entries > should handle request to the /foo route of second path 3`] = ` +[] +`; -exports[`static.publicPath option multiple static.publicPath entries should handle request to the index of first path: page errors 1`] = `[]`; +exports[`static.publicPath option > multiple static.publicPath entries > should handle request to the /foo route of second path 4`] = ` +[] +`; -exports[`static.publicPath option multiple static.publicPath entries should handle request to the index of first path: response status 1`] = `200`; +exports[`static.publicPath option > multiple static.publicPath entries > should handle request to the index of first path 1`] = ` +200 +`; -exports[`static.publicPath option multiple static.publicPath entries should handle request to the index of first path: response text 1`] = ` +exports[`static.publicPath option > multiple static.publicPath entries > should handle request to the index of first path 2`] = ` "Heyo. " `; -exports[`static.publicPath option multiple static.publicPath entries should handle request to the other file of first path: console messages 1`] = `[]`; +exports[`static.publicPath option > multiple static.publicPath entries > should handle request to the index of first path 3`] = ` +[] +`; -exports[`static.publicPath option multiple static.publicPath entries should handle request to the other file of first path: page errors 1`] = `[]`; +exports[`static.publicPath option > multiple static.publicPath entries > should handle request to the index of first path 4`] = ` +[] +`; -exports[`static.publicPath option multiple static.publicPath entries should handle request to the other file of first path: response status 1`] = `200`; +exports[`static.publicPath option > multiple static.publicPath entries > should handle request to the other file of first path 1`] = ` +200 +`; -exports[`static.publicPath option multiple static.publicPath entries should handle request to the other file of first path: response text 1`] = ` +exports[`static.publicPath option > multiple static.publicPath entries > should handle request to the other file of first path 2`] = ` "Other html " `; -exports[`static.publicPath option multiple static.publicPath entries with publicPath array should handle request to the /foo route of first path: console messages 1`] = `[]`; +exports[`static.publicPath option > multiple static.publicPath entries > should handle request to the other file of first path 3`] = ` +[] +`; -exports[`static.publicPath option multiple static.publicPath entries with publicPath array should handle request to the /foo route of first path: page errors 1`] = `[]`; +exports[`static.publicPath option > multiple static.publicPath entries > should handle request to the other file of first path 4`] = ` +[] +`; -exports[`static.publicPath option multiple static.publicPath entries with publicPath array should handle request to the /foo route of first path: response status 1`] = `200`; +exports[`static.publicPath option > multiple static.publicPath entries with publicPath array > should handle request to the /foo route of first path 1`] = ` +200 +`; -exports[`static.publicPath option multiple static.publicPath entries with publicPath array should handle request to the /foo route of first path: response text 1`] = ` +exports[`static.publicPath option > multiple static.publicPath entries with publicPath array > should handle request to the /foo route of first path 2`] = ` "Foo! " `; -exports[`static.publicPath option multiple static.publicPath entries with publicPath array should handle request to the /foo route of second path: console messages 1`] = `[]`; +exports[`static.publicPath option > multiple static.publicPath entries with publicPath array > should handle request to the /foo route of first path 3`] = ` +[] +`; -exports[`static.publicPath option multiple static.publicPath entries with publicPath array should handle request to the /foo route of second path: page errors 1`] = `[]`; +exports[`static.publicPath option > multiple static.publicPath entries with publicPath array > should handle request to the /foo route of first path 4`] = ` +[] +`; -exports[`static.publicPath option multiple static.publicPath entries with publicPath array should handle request to the /foo route of second path: response status 1`] = `200`; +exports[`static.publicPath option > multiple static.publicPath entries with publicPath array > should handle request to the /foo route of second path 1`] = ` +200 +`; -exports[`static.publicPath option multiple static.publicPath entries with publicPath array should handle request to the /foo route of second path: response text 1`] = ` +exports[`static.publicPath option > multiple static.publicPath entries with publicPath array > should handle request to the /foo route of second path 2`] = ` "Foo! " `; -exports[`static.publicPath option multiple static.publicPath entries with publicPath array should handle request to the index of first path: console messages 1`] = `[]`; +exports[`static.publicPath option > multiple static.publicPath entries with publicPath array > should handle request to the /foo route of second path 3`] = ` +[] +`; -exports[`static.publicPath option multiple static.publicPath entries with publicPath array should handle request to the index of first path: page errors 1`] = `[]`; +exports[`static.publicPath option > multiple static.publicPath entries with publicPath array > should handle request to the /foo route of second path 4`] = ` +[] +`; -exports[`static.publicPath option multiple static.publicPath entries with publicPath array should handle request to the index of first path: response status 1`] = `200`; +exports[`static.publicPath option > multiple static.publicPath entries with publicPath array > should handle request to the index of first path 1`] = ` +200 +`; -exports[`static.publicPath option multiple static.publicPath entries with publicPath array should handle request to the index of first path: response text 1`] = ` +exports[`static.publicPath option > multiple static.publicPath entries with publicPath array > should handle request to the index of first path 2`] = ` "Heyo. " `; -exports[`static.publicPath option multiple static.publicPath entries with publicPath array should handle request to the other file of first path: console messages 1`] = `[]`; +exports[`static.publicPath option > multiple static.publicPath entries with publicPath array > should handle request to the index of first path 3`] = ` +[] +`; -exports[`static.publicPath option multiple static.publicPath entries with publicPath array should handle request to the other file of first path: page errors 1`] = `[]`; +exports[`static.publicPath option > multiple static.publicPath entries with publicPath array > should handle request to the index of first path 4`] = ` +[] +`; -exports[`static.publicPath option multiple static.publicPath entries with publicPath array should handle request to the other file of first path: response status 1`] = `200`; +exports[`static.publicPath option > multiple static.publicPath entries with publicPath array > should handle request to the other file of first path 1`] = ` +200 +`; -exports[`static.publicPath option multiple static.publicPath entries with publicPath array should handle request to the other file of first path: response text 1`] = ` +exports[`static.publicPath option > multiple static.publicPath entries with publicPath array > should handle request to the other file of first path 2`] = ` "Other html " `; -exports[`static.publicPath option should ignore methods other than GET and HEAD should handle GET request: console messages 1`] = `[]`; +exports[`static.publicPath option > multiple static.publicPath entries with publicPath array > should handle request to the other file of first path 3`] = ` +[] +`; -exports[`static.publicPath option should ignore methods other than GET and HEAD should handle GET request: page errors 1`] = `[]`; +exports[`static.publicPath option > multiple static.publicPath entries with publicPath array > should handle request to the other file of first path 4`] = ` +[] +`; -exports[`static.publicPath option should ignore methods other than GET and HEAD should handle GET request: response status 1`] = `200`; +exports[`static.publicPath option > should ignore methods other than GET and HEAD > should handle GET request 1`] = ` +200 +`; -exports[`static.publicPath option should ignore methods other than GET and HEAD should handle HEAD request: console messages 1`] = `[]`; +exports[`static.publicPath option > should ignore methods other than GET and HEAD > should handle GET request 2`] = ` +[] +`; -exports[`static.publicPath option should ignore methods other than GET and HEAD should handle HEAD request: page errors 1`] = `[]`; +exports[`static.publicPath option > should ignore methods other than GET and HEAD > should handle GET request 3`] = ` +[] +`; -exports[`static.publicPath option should ignore methods other than GET and HEAD should handle HEAD request: response status 1`] = `200`; +exports[`static.publicPath option > should ignore methods other than GET and HEAD > should handle HEAD request 1`] = ` +200 +`; -exports[`static.publicPath option should ignore methods other than GET and HEAD should not handle DELETE request: console messages 1`] = ` -[ - "Failed to load resource: the server responded with a status of 404 (Not Found)", -] +exports[`static.publicPath option > should ignore methods other than GET and HEAD > should handle HEAD request 2`] = ` +[] `; -exports[`static.publicPath option should ignore methods other than GET and HEAD should not handle DELETE request: page errors 1`] = `[]`; +exports[`static.publicPath option > should ignore methods other than GET and HEAD > should handle HEAD request 3`] = ` +[] +`; -exports[`static.publicPath option should ignore methods other than GET and HEAD should not handle DELETE request: response status 1`] = `404`; +exports[`static.publicPath option > should ignore methods other than GET and HEAD > should not handle DELETE request 1`] = ` +404 +`; -exports[`static.publicPath option should ignore methods other than GET and HEAD should not handle PATCH request: console messages 1`] = ` +exports[`static.publicPath option > should ignore methods other than GET and HEAD > should not handle DELETE request 2`] = ` [ "Failed to load resource: the server responded with a status of 404 (Not Found)", ] `; -exports[`static.publicPath option should ignore methods other than GET and HEAD should not handle PATCH request: page errors 1`] = `[]`; +exports[`static.publicPath option > should ignore methods other than GET and HEAD > should not handle DELETE request 3`] = ` +[] +`; -exports[`static.publicPath option should ignore methods other than GET and HEAD should not handle PATCH request: response status 1`] = `404`; +exports[`static.publicPath option > should ignore methods other than GET and HEAD > should not handle PATCH request 1`] = ` +404 +`; -exports[`static.publicPath option should ignore methods other than GET and HEAD should not handle POST request: console messages 1`] = ` +exports[`static.publicPath option > should ignore methods other than GET and HEAD > should not handle PATCH request 2`] = ` [ "Failed to load resource: the server responded with a status of 404 (Not Found)", ] `; -exports[`static.publicPath option should ignore methods other than GET and HEAD should not handle POST request: page errors 1`] = `[]`; +exports[`static.publicPath option > should ignore methods other than GET and HEAD > should not handle PATCH request 3`] = ` +[] +`; -exports[`static.publicPath option should ignore methods other than GET and HEAD should not handle POST request: response status 1`] = `404`; +exports[`static.publicPath option > should ignore methods other than GET and HEAD > should not handle POST request 1`] = ` +404 +`; -exports[`static.publicPath option should ignore methods other than GET and HEAD should not handle PUT request: console messages 1`] = ` +exports[`static.publicPath option > should ignore methods other than GET and HEAD > should not handle POST request 2`] = ` [ "Failed to load resource: the server responded with a status of 404 (Not Found)", ] `; -exports[`static.publicPath option should ignore methods other than GET and HEAD should not handle PUT request: page errors 1`] = `[]`; +exports[`static.publicPath option > should ignore methods other than GET and HEAD > should not handle POST request 3`] = ` +[] +`; -exports[`static.publicPath option should ignore methods other than GET and HEAD should not handle PUT request: response status 1`] = `404`; +exports[`static.publicPath option > should ignore methods other than GET and HEAD > should not handle PUT request 1`] = ` +404 +`; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex default (true) should list the files inside the assets folder (200): console messages 1`] = `[]`; +exports[`static.publicPath option > should ignore methods other than GET and HEAD > should not handle PUT request 2`] = ` +[ + "Failed to load resource: the server responded with a status of 404 (Not Found)", +] +`; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex default (true) should list the files inside the assets folder (200): page errors 1`] = `[]`; +exports[`static.publicPath option > should ignore methods other than GET and HEAD > should not handle PUT request 3`] = ` +[] +`; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex default (true) should list the files inside the assets folder (200): response status 1`] = `200`; +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex default (true) > should list the files inside the assets folder (200) 1`] = ` +200 +`; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex default (true) should show Heyo. because bar has index.html inside it (200): console messages 1`] = `[]`; +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex default (true) > should list the files inside the assets folder (200) 2`] = ` +[] +`; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex default (true) should show Heyo. because bar has index.html inside it (200): page errors 1`] = `[]`; +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex default (true) > should list the files inside the assets folder (200) 3`] = ` +[] +`; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex default (true) should show Heyo. because bar has index.html inside it (200): response status 1`] = `200`; +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex default (true) > should show Heyo. because bar has index.html inside it (200) 1`] = ` +200 +`; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex default (true) should show Heyo. because bar has index.html inside it (200): response text 1`] = ` +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex default (true) > should show Heyo. because bar has index.html inside it (200) 2`] = ` "Heyo " `; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex: false should show Heyo. because bar has index.html inside it (200): console messages 1`] = `[]`; +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex default (true) > should show Heyo. because bar has index.html inside it (200) 3`] = ` +[] +`; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex: false should show Heyo. because bar has index.html inside it (200): page errors 1`] = `[]`; +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex default (true) > should show Heyo. because bar has index.html inside it (200) 4`] = ` +[] +`; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex: false should show Heyo. because bar has index.html inside it (200): response status 1`] = `200`; +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex: false > should show Heyo. because bar has index.html inside it (200) 1`] = ` +200 +`; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex: false should show Heyo. because bar has index.html inside it (200): response text 1`] = ` +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex: false > should show Heyo. because bar has index.html inside it (200) 2`] = ` "Heyo " `; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex: false shouldn't list the files inside the assets folder (404): console messages 1`] = ` -[ - "Failed to load resource: the server responded with a status of 404 (Not Found)", -] +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex: false > should show Heyo. because bar has index.html inside it (200) 3`] = ` +[] `; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex: false shouldn't list the files inside the assets folder (404): page errors 1`] = `[]`; +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex: false > should show Heyo. because bar has index.html inside it (200) 4`] = ` +[] +`; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex: false shouldn't list the files inside the assets folder (404): response status 1`] = `404`; +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex: false > shouldn't list the files inside the assets folder (404) 1`] = ` +404 +`; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex: false shouldn't list the files inside the assets folder (404): response text 1`] = ` +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex: false > shouldn't list the files inside the assets folder (404) 2`] = ` " @@ -200,63 +294,109 @@ exports[`static.publicPath option test listing files in folders without index.ht " `; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex: true should list the files inside the assets folder (200): console messages 1`] = `[]`; +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex: false > shouldn't list the files inside the assets folder (404) 3`] = ` +[ + "Failed to load resource: the server responded with a status of 404 (Not Found)", +] +`; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex: true should list the files inside the assets folder (200): page errors 1`] = `[]`; +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex: false > shouldn't list the files inside the assets folder (404) 4`] = ` +[] +`; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex: true should list the files inside the assets folder (200): response status 1`] = `200`; +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex: true > should list the files inside the assets folder (200) 1`] = ` +200 +`; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex: true should show Heyo. because bar has index.html inside it (200): console messages 1`] = `[]`; +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex: true > should list the files inside the assets folder (200) 2`] = ` +[] +`; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex: true should show Heyo. because bar has index.html inside it (200): page errors 1`] = `[]`; +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex: true > should list the files inside the assets folder (200) 3`] = ` +[] +`; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex: true should show Heyo. because bar has index.html inside it (200): response status 1`] = `200`; +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex: true > should show Heyo. because bar has index.html inside it (200) 1`] = ` +200 +`; -exports[`static.publicPath option test listing files in folders without index.html using the option static.serveIndex: true should show Heyo. because bar has index.html inside it (200): response text 1`] = ` +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex: true > should show Heyo. because bar has index.html inside it (200) 2`] = ` "Heyo " `; -exports[`static.publicPath option to directory should handle request to index: console messages 1`] = `[]`; +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex: true > should show Heyo. because bar has index.html inside it (200) 3`] = ` +[] +`; -exports[`static.publicPath option to directory should handle request to index: page errors 1`] = `[]`; +exports[`static.publicPath option > test listing files in folders without index.html using the option static.serveIndex: true > should show Heyo. because bar has index.html inside it (200) 4`] = ` +[] +`; -exports[`static.publicPath option to directory should handle request to index: response status 1`] = `200`; +exports[`static.publicPath option > to directory > should handle request to index 1`] = ` +200 +`; -exports[`static.publicPath option to directory should handle request to index: response text 1`] = ` +exports[`static.publicPath option > to directory > should handle request to index 2`] = ` "Heyo. " `; -exports[`static.publicPath option to directory should handle request to other file: console messages 1`] = `[]`; +exports[`static.publicPath option > to directory > should handle request to index 3`] = ` +[] +`; -exports[`static.publicPath option to directory should handle request to other file: page errors 1`] = `[]`; +exports[`static.publicPath option > to directory > should handle request to index 4`] = ` +[] +`; -exports[`static.publicPath option to directory should handle request to other file: response status 1`] = `200`; +exports[`static.publicPath option > to directory > should handle request to other file 1`] = ` +200 +`; -exports[`static.publicPath option to directory should handle request to other file: response text 1`] = ` +exports[`static.publicPath option > to directory > should handle request to other file 2`] = ` "Other html " `; -exports[`static.publicPath option to multiple directories should handle request to first directory: console messages 1`] = `[]`; +exports[`static.publicPath option > to directory > should handle request to other file 3`] = ` +[] +`; -exports[`static.publicPath option to multiple directories should handle request to first directory: page errors 1`] = `[]`; +exports[`static.publicPath option > to directory > should handle request to other file 4`] = ` +[] +`; -exports[`static.publicPath option to multiple directories should handle request to first directory: response status 1`] = `200`; +exports[`static.publicPath option > to multiple directories > should handle request to first directory 1`] = ` +200 +`; -exports[`static.publicPath option to multiple directories should handle request to first directory: response text 1`] = ` +exports[`static.publicPath option > to multiple directories > should handle request to first directory 2`] = ` "Heyo. " `; -exports[`static.publicPath option to multiple directories should handle request to second directory: console messages 1`] = `[]`; +exports[`static.publicPath option > to multiple directories > should handle request to first directory 3`] = ` +[] +`; -exports[`static.publicPath option to multiple directories should handle request to second directory: page errors 1`] = `[]`; +exports[`static.publicPath option > to multiple directories > should handle request to first directory 4`] = ` +[] +`; -exports[`static.publicPath option to multiple directories should handle request to second directory: response status 1`] = `200`; +exports[`static.publicPath option > to multiple directories > should handle request to second directory 1`] = ` +200 +`; -exports[`static.publicPath option to multiple directories should handle request to second directory: response text 1`] = ` +exports[`static.publicPath option > to multiple directories > should handle request to second directory 2`] = ` "Foo! " `; + +exports[`static.publicPath option > to multiple directories > should handle request to second directory 3`] = ` +[] +`; + +exports[`static.publicPath option > to multiple directories > should handle request to second directory 4`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/stats.test.js.snap.webpack5 b/test/e2e/__snapshots__/stats.test.js.snap.webpack5 index c36c1f21f7..b055692428 100644 --- a/test/e2e/__snapshots__/stats.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/stats.test.js.snap.webpack5 @@ -1,6 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`stats should work and respect the "ignoreWarnings" option 1`] = ` +exports[`stats > should work and respect the "ignoreWarnings" option 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -8,7 +6,7 @@ exports[`stats should work and respect the "ignoreWarnings" option 1`] = ` ] `; -exports[`stats should work using "{ assets: false }" value for the "stats" option 1`] = ` +exports[`stats > should work using "errors-only" value for the "stats" option 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -16,7 +14,7 @@ exports[`stats should work using "{ assets: false }" value for the "stats" optio ] `; -exports[`stats should work using "{ assets: false }" value for the "stats" option 2`] = ` +exports[`stats > should work using "false" value for the "stats" option 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -24,7 +22,7 @@ exports[`stats should work using "{ assets: false }" value for the "stats" optio ] `; -exports[`stats should work using "{ warningsFilter: 'test' }" value for the "stats" option 1`] = ` +exports[`stats > should work using "undefined" value for the "stats" option 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -32,7 +30,7 @@ exports[`stats should work using "{ warningsFilter: 'test' }" value for the "sta ] `; -exports[`stats should work using "{}" value for the "stats" option 1`] = ` +exports[`stats > should work using "{ assets: false }" value for the "stats" option 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -40,7 +38,7 @@ exports[`stats should work using "{}" value for the "stats" option 1`] = ` ] `; -exports[`stats should work using "errors-only" value for the "stats" option 1`] = ` +exports[`stats > should work using "{ assets: false }" value for the "stats" option 2`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -48,7 +46,7 @@ exports[`stats should work using "errors-only" value for the "stats" option 1`] ] `; -exports[`stats should work using "false" value for the "stats" option 1`] = ` +exports[`stats > should work using "{ warningsFilter: 'test' }" value for the "stats" option 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -56,7 +54,7 @@ exports[`stats should work using "false" value for the "stats" option 1`] = ` ] `; -exports[`stats should work using "undefined" value for the "stats" option 1`] = ` +exports[`stats > should work using "{}" value for the "stats" option 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -64,7 +62,7 @@ exports[`stats should work using "undefined" value for the "stats" option 1`] = ] `; -exports[`stats should work when "stats" is not specified 1`] = ` +exports[`stats > should work when "stats" is not specified 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", diff --git a/test/e2e/__snapshots__/target.test.js.snap.webpack5 b/test/e2e/__snapshots__/target.test.js.snap.webpack5 index fd2295ff09..62f2319d3d 100644 --- a/test/e2e/__snapshots__/target.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/target.test.js.snap.webpack5 @@ -1,8 +1,8 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`target should work using "async-node" target: console messages 1`] = `[]`; +exports[`target > should work using "async-node" target 1`] = ` +[] +`; -exports[`target should work using "browserslist:defaults" target: console messages 1`] = ` +exports[`target > should work using "browserslist:defaults" target 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -10,39 +10,57 @@ exports[`target should work using "browserslist:defaults" target: console messag ] `; -exports[`target should work using "browserslist:defaults" target: page errors 1`] = `[]`; +exports[`target > should work using "browserslist:defaults" target 2`] = ` +[] +`; -exports[`target should work using "electron-main" target: console messages 1`] = `[]`; +exports[`target > should work using "electron-main" target 1`] = ` +[] +`; -exports[`target should work using "electron-preload" target: console messages 1`] = `[]`; +exports[`target > should work using "electron-preload" target 1`] = ` +[] +`; -exports[`target should work using "electron-renderer" target: console messages 1`] = `[]`; +exports[`target > should work using "electron-renderer" target 1`] = ` +[] +`; -exports[`target should work using "es5" target: console messages 1`] = ` +exports[`target > should work using "es5" target 1`] = ` [ "[HMR] Waiting for update signal from WDS...", "Hey.", ] `; -exports[`target should work using "es5" target: page errors 1`] = `[]`; +exports[`target > should work using "es5" target 2`] = ` +[] +`; -exports[`target should work using "false" target: console messages 1`] = ` +exports[`target > should work using "false" target 1`] = ` [ "[HMR] Waiting for update signal from WDS...", "Hey.", ] `; -exports[`target should work using "false" target: page errors 1`] = `[]`; +exports[`target > should work using "false" target 2`] = ` +[] +`; -exports[`target should work using "node" target: console messages 1`] = `[]`; +exports[`target > should work using "node" target 1`] = ` +[] +`; -exports[`target should work using "node-webkit" target: console messages 1`] = `[]`; +exports[`target > should work using "node-webkit" target 1`] = ` +[] +`; -exports[`target should work using "nwjs" target: console messages 1`] = `[]`; +exports[`target > should work using "nwjs" target 1`] = ` +[] +`; -exports[`target should work using "web" target: console messages 1`] = ` +exports[`target > should work using "web" target 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -50,9 +68,11 @@ exports[`target should work using "web" target: console messages 1`] = ` ] `; -exports[`target should work using "web" target: page errors 1`] = `[]`; +exports[`target > should work using "web" target 2`] = ` +[] +`; -exports[`target should work using "web,es5" target: console messages 1`] = ` +exports[`target > should work using "web,es5" target 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -60,9 +80,11 @@ exports[`target should work using "web,es5" target: console messages 1`] = ` ] `; -exports[`target should work using "web,es5" target: page errors 1`] = `[]`; +exports[`target > should work using "web,es5" target 2`] = ` +[] +`; -exports[`target should work using "webworker" target: console messages 1`] = ` +exports[`target > should work using "webworker" target 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -70,10 +92,14 @@ exports[`target should work using "webworker" target: console messages 1`] = ` ] `; -exports[`target should work using "webworker" target: page errors 1`] = `[]`; +exports[`target > should work using "webworker" target 2`] = ` +[] +`; -exports[`target should work using multi compiler mode with \`web\` and \`webworker\` targets with \`devServer: false\`: console messages 1`] = ` +exports[`target > should work using multi compiler mode with \`web\` and \`webworker\` targets 1`] = ` [ + "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", + "[HMR] Waiting for update signal from WDS...", "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", "Worker said: I'm working before postMessage", @@ -81,12 +107,12 @@ exports[`target should work using multi compiler mode with \`web\` and \`webwork ] `; -exports[`target should work using multi compiler mode with \`web\` and \`webworker\` targets with \`devServer: false\`: page errors 1`] = `[]`; +exports[`target > should work using multi compiler mode with \`web\` and \`webworker\` targets 2`] = ` +[] +`; -exports[`target should work using multi compiler mode with \`web\` and \`webworker\` targets: console messages 1`] = ` +exports[`target > should work using multi compiler mode with \`web\` and \`webworker\` targets with \`devServer: false\` 1`] = ` [ - "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", - "[HMR] Waiting for update signal from WDS...", "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", "Worker said: I'm working before postMessage", @@ -94,4 +120,6 @@ exports[`target should work using multi compiler mode with \`web\` and \`webwork ] `; -exports[`target should work using multi compiler mode with \`web\` and \`webworker\` targets: page errors 1`] = `[]`; +exports[`target > should work using multi compiler mode with \`web\` and \`webworker\` targets with \`devServer: false\` 2`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/watch-files.test.js.snap.webpack5 b/test/e2e/__snapshots__/watch-files.test.js.snap.webpack5 index adf5ea5d50..523a975216 100644 --- a/test/e2e/__snapshots__/watch-files.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/watch-files.test.js.snap.webpack5 @@ -1,92 +1,128 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +exports[`watchFiles option > should not crash if file doesn't exist > should reload when file content is changed 1`] = ` +200 +`; -exports[`watchFiles option should not crash if file doesn't exist should reload when file content is changed: console messages 1`] = ` +exports[`watchFiles option > should not crash if file doesn't exist > should reload when file content is changed 2`] = ` [ "Hey.", ] `; -exports[`watchFiles option should not crash if file doesn't exist should reload when file content is changed: page errors 1`] = `[]`; +exports[`watchFiles option > should not crash if file doesn't exist > should reload when file content is changed 3`] = ` +[] +`; -exports[`watchFiles option should not crash if file doesn't exist should reload when file content is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with array config > should reload when file content is changed 1`] = ` +200 +`; -exports[`watchFiles option should work with array config should reload when file content is changed: console messages 1`] = ` +exports[`watchFiles option > should work with array config > should reload when file content is changed 2`] = ` [ "Hey.", ] `; -exports[`watchFiles option should work with array config should reload when file content is changed: page errors 1`] = `[]`; +exports[`watchFiles option > should work with array config > should reload when file content is changed 3`] = ` +[] +`; -exports[`watchFiles option should work with array config should reload when file content is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with array of globs > should reload when file content is changed 1`] = ` +200 +`; -exports[`watchFiles option should work with array of globs should reload when file content is changed: console messages 1`] = ` +exports[`watchFiles option > should work with array of globs > should reload when file content is changed 2`] = ` [ "Hey.", ] `; -exports[`watchFiles option should work with array of globs should reload when file content is changed: page errors 1`] = `[]`; +exports[`watchFiles option > should work with array of globs > should reload when file content is changed 3`] = ` +[] +`; -exports[`watchFiles option should work with array of globs should reload when file content is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with directory and ignored option to filter files > should not reload when a non-matching file is changed 1`] = ` +200 +`; -exports[`watchFiles option should work with directory and ignored option to filter files should not reload when a non-matching file is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with directory and ignored option to filter files > should reload when file content is changed 1`] = ` +200 +`; -exports[`watchFiles option should work with directory and ignored option to filter files should reload when file content is changed: console messages 1`] = ` +exports[`watchFiles option > should work with directory and ignored option to filter files > should reload when file content is changed 2`] = ` [ "Hey.", ] `; -exports[`watchFiles option should work with directory and ignored option to filter files should reload when file content is changed: page errors 1`] = `[]`; +exports[`watchFiles option > should work with directory and ignored option to filter files > should reload when file content is changed 3`] = ` +[] +`; -exports[`watchFiles option should work with directory and ignored option to filter files should reload when file content is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with ignored option using glob array > should not reload when an ignored glob file is changed 1`] = ` +200 +`; -exports[`watchFiles option should work with ignored option using glob array should not reload when an ignored glob file is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with ignored option using glob array > should reload when file content is changed 1`] = ` +200 +`; -exports[`watchFiles option should work with ignored option using glob array should reload when file content is changed: console messages 1`] = ` +exports[`watchFiles option > should work with ignored option using glob array > should reload when file content is changed 2`] = ` [ "Hey.", ] `; -exports[`watchFiles option should work with ignored option using glob array should reload when file content is changed: page errors 1`] = `[]`; +exports[`watchFiles option > should work with ignored option using glob array > should reload when file content is changed 3`] = ` +[] +`; -exports[`watchFiles option should work with ignored option using glob array should reload when file content is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with ignored option using glob string > should not reload when an ignored glob file is changed 1`] = ` +200 +`; -exports[`watchFiles option should work with ignored option using glob string should not reload when an ignored glob file is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with ignored option using glob string > should reload when file content is changed 1`] = ` +200 +`; -exports[`watchFiles option should work with ignored option using glob string should reload when file content is changed: console messages 1`] = ` +exports[`watchFiles option > should work with ignored option using glob string > should reload when file content is changed 2`] = ` [ "Hey.", ] `; -exports[`watchFiles option should work with ignored option using glob string should reload when file content is changed: page errors 1`] = `[]`; +exports[`watchFiles option > should work with ignored option using glob string > should reload when file content is changed 3`] = ` +[] +`; -exports[`watchFiles option should work with ignored option using glob string should reload when file content is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with object with multiple paths > should reload when file content is changed 1`] = ` +200 +`; -exports[`watchFiles option should work with object with multiple paths should reload when file content is changed: console messages 1`] = ` +exports[`watchFiles option > should work with object with multiple paths > should reload when file content is changed 2`] = ` [ "Hey.", ] `; -exports[`watchFiles option should work with object with multiple paths should reload when file content is changed: page errors 1`] = `[]`; +exports[`watchFiles option > should work with object with multiple paths > should reload when file content is changed 3`] = ` +[] +`; -exports[`watchFiles option should work with object with multiple paths should reload when file content is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with object with single path > should reload when file content is changed 1`] = ` +200 +`; -exports[`watchFiles option should work with object with single path should reload when file content is changed: console messages 1`] = ` +exports[`watchFiles option > should work with object with single path > should reload when file content is changed 2`] = ` [ "Hey.", ] `; -exports[`watchFiles option should work with object with single path should reload when file content is changed: page errors 1`] = `[]`; - -exports[`watchFiles option should work with object with single path should reload when file content is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with object with single path > should reload when file content is changed 3`] = ` +[] +`; -exports[`watchFiles option should work with options {"interval":400,"poll":200} should reload when file content is changed 1`] = ` +exports[`watchFiles option > should work with options > {"interval":400,"poll":200} > should reload when file content is changed 1`] = ` { "alwaysStat": true, "atomic": false, @@ -102,17 +138,21 @@ exports[`watchFiles option should work with options {"interval":400,"poll":200} } `; -exports[`watchFiles option should work with options {"interval":400,"poll":200} should reload when file content is changed: console messages 1`] = ` +exports[`watchFiles option > should work with options > {"interval":400,"poll":200} > should reload when file content is changed 2`] = ` +200 +`; + +exports[`watchFiles option > should work with options > {"interval":400,"poll":200} > should reload when file content is changed 3`] = ` [ "Hey.", ] `; -exports[`watchFiles option should work with options {"interval":400,"poll":200} should reload when file content is changed: page errors 1`] = `[]`; - -exports[`watchFiles option should work with options {"interval":400,"poll":200} should reload when file content is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with options > {"interval":400,"poll":200} > should reload when file content is changed 4`] = ` +[] +`; -exports[`watchFiles option should work with options {"poll":200} should reload when file content is changed 1`] = ` +exports[`watchFiles option > should work with options > {"poll":200} > should reload when file content is changed 1`] = ` { "alwaysStat": true, "atomic": false, @@ -128,17 +168,21 @@ exports[`watchFiles option should work with options {"poll":200} should reload w } `; -exports[`watchFiles option should work with options {"poll":200} should reload when file content is changed: console messages 1`] = ` +exports[`watchFiles option > should work with options > {"poll":200} > should reload when file content is changed 2`] = ` +200 +`; + +exports[`watchFiles option > should work with options > {"poll":200} > should reload when file content is changed 3`] = ` [ "Hey.", ] `; -exports[`watchFiles option should work with options {"poll":200} should reload when file content is changed: page errors 1`] = `[]`; - -exports[`watchFiles option should work with options {"poll":200} should reload when file content is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with options > {"poll":200} > should reload when file content is changed 4`] = ` +[] +`; -exports[`watchFiles option should work with options {"poll":true} should reload when file content is changed 1`] = ` +exports[`watchFiles option > should work with options > {"poll":true} > should reload when file content is changed 1`] = ` { "alwaysStat": true, "atomic": false, @@ -154,17 +198,21 @@ exports[`watchFiles option should work with options {"poll":true} should reload } `; -exports[`watchFiles option should work with options {"poll":true} should reload when file content is changed: console messages 1`] = ` +exports[`watchFiles option > should work with options > {"poll":true} > should reload when file content is changed 2`] = ` +200 +`; + +exports[`watchFiles option > should work with options > {"poll":true} > should reload when file content is changed 3`] = ` [ "Hey.", ] `; -exports[`watchFiles option should work with options {"poll":true} should reload when file content is changed: page errors 1`] = `[]`; - -exports[`watchFiles option should work with options {"poll":true} should reload when file content is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with options > {"poll":true} > should reload when file content is changed 4`] = ` +[] +`; -exports[`watchFiles option should work with options {"usePolling":false,"interval":200,"poll":400} should reload when file content is changed 1`] = ` +exports[`watchFiles option > should work with options > {"usePolling":false,"interval":200,"poll":400} > should reload when file content is changed 1`] = ` { "alwaysStat": true, "atomic": false, @@ -180,17 +228,21 @@ exports[`watchFiles option should work with options {"usePolling":false,"interva } `; -exports[`watchFiles option should work with options {"usePolling":false,"interval":200,"poll":400} should reload when file content is changed: console messages 1`] = ` +exports[`watchFiles option > should work with options > {"usePolling":false,"interval":200,"poll":400} > should reload when file content is changed 2`] = ` +200 +`; + +exports[`watchFiles option > should work with options > {"usePolling":false,"interval":200,"poll":400} > should reload when file content is changed 3`] = ` [ "Hey.", ] `; -exports[`watchFiles option should work with options {"usePolling":false,"interval":200,"poll":400} should reload when file content is changed: page errors 1`] = `[]`; - -exports[`watchFiles option should work with options {"usePolling":false,"interval":200,"poll":400} should reload when file content is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with options > {"usePolling":false,"interval":200,"poll":400} > should reload when file content is changed 4`] = ` +[] +`; -exports[`watchFiles option should work with options {"usePolling":false,"poll":200} should reload when file content is changed 1`] = ` +exports[`watchFiles option > should work with options > {"usePolling":false,"poll":200} > should reload when file content is changed 1`] = ` { "alwaysStat": true, "atomic": false, @@ -206,17 +258,21 @@ exports[`watchFiles option should work with options {"usePolling":false,"poll":2 } `; -exports[`watchFiles option should work with options {"usePolling":false,"poll":200} should reload when file content is changed: console messages 1`] = ` +exports[`watchFiles option > should work with options > {"usePolling":false,"poll":200} > should reload when file content is changed 2`] = ` +200 +`; + +exports[`watchFiles option > should work with options > {"usePolling":false,"poll":200} > should reload when file content is changed 3`] = ` [ "Hey.", ] `; -exports[`watchFiles option should work with options {"usePolling":false,"poll":200} should reload when file content is changed: page errors 1`] = `[]`; - -exports[`watchFiles option should work with options {"usePolling":false,"poll":200} should reload when file content is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with options > {"usePolling":false,"poll":200} > should reload when file content is changed 4`] = ` +[] +`; -exports[`watchFiles option should work with options {"usePolling":false,"poll":true} should reload when file content is changed 1`] = ` +exports[`watchFiles option > should work with options > {"usePolling":false,"poll":true} > should reload when file content is changed 1`] = ` { "alwaysStat": true, "atomic": false, @@ -232,17 +288,21 @@ exports[`watchFiles option should work with options {"usePolling":false,"poll":t } `; -exports[`watchFiles option should work with options {"usePolling":false,"poll":true} should reload when file content is changed: console messages 1`] = ` +exports[`watchFiles option > should work with options > {"usePolling":false,"poll":true} > should reload when file content is changed 2`] = ` +200 +`; + +exports[`watchFiles option > should work with options > {"usePolling":false,"poll":true} > should reload when file content is changed 3`] = ` [ "Hey.", ] `; -exports[`watchFiles option should work with options {"usePolling":false,"poll":true} should reload when file content is changed: page errors 1`] = `[]`; - -exports[`watchFiles option should work with options {"usePolling":false,"poll":true} should reload when file content is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with options > {"usePolling":false,"poll":true} > should reload when file content is changed 4`] = ` +[] +`; -exports[`watchFiles option should work with options {"usePolling":false} should reload when file content is changed 1`] = ` +exports[`watchFiles option > should work with options > {"usePolling":false} > should reload when file content is changed 1`] = ` { "alwaysStat": true, "atomic": false, @@ -258,17 +318,21 @@ exports[`watchFiles option should work with options {"usePolling":false} should } `; -exports[`watchFiles option should work with options {"usePolling":false} should reload when file content is changed: console messages 1`] = ` +exports[`watchFiles option > should work with options > {"usePolling":false} > should reload when file content is changed 2`] = ` +200 +`; + +exports[`watchFiles option > should work with options > {"usePolling":false} > should reload when file content is changed 3`] = ` [ "Hey.", ] `; -exports[`watchFiles option should work with options {"usePolling":false} should reload when file content is changed: page errors 1`] = `[]`; - -exports[`watchFiles option should work with options {"usePolling":false} should reload when file content is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with options > {"usePolling":false} > should reload when file content is changed 4`] = ` +[] +`; -exports[`watchFiles option should work with options {"usePolling":true,"interval":200,"poll":400} should reload when file content is changed 1`] = ` +exports[`watchFiles option > should work with options > {"usePolling":true,"interval":200,"poll":400} > should reload when file content is changed 1`] = ` { "alwaysStat": true, "atomic": false, @@ -284,17 +348,21 @@ exports[`watchFiles option should work with options {"usePolling":true,"interval } `; -exports[`watchFiles option should work with options {"usePolling":true,"interval":200,"poll":400} should reload when file content is changed: console messages 1`] = ` +exports[`watchFiles option > should work with options > {"usePolling":true,"interval":200,"poll":400} > should reload when file content is changed 2`] = ` +200 +`; + +exports[`watchFiles option > should work with options > {"usePolling":true,"interval":200,"poll":400} > should reload when file content is changed 3`] = ` [ "Hey.", ] `; -exports[`watchFiles option should work with options {"usePolling":true,"interval":200,"poll":400} should reload when file content is changed: page errors 1`] = `[]`; - -exports[`watchFiles option should work with options {"usePolling":true,"interval":200,"poll":400} should reload when file content is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with options > {"usePolling":true,"interval":200,"poll":400} > should reload when file content is changed 4`] = ` +[] +`; -exports[`watchFiles option should work with options {"usePolling":true,"poll":200} should reload when file content is changed 1`] = ` +exports[`watchFiles option > should work with options > {"usePolling":true,"poll":200} > should reload when file content is changed 1`] = ` { "alwaysStat": true, "atomic": false, @@ -310,17 +378,21 @@ exports[`watchFiles option should work with options {"usePolling":true,"poll":20 } `; -exports[`watchFiles option should work with options {"usePolling":true,"poll":200} should reload when file content is changed: console messages 1`] = ` +exports[`watchFiles option > should work with options > {"usePolling":true,"poll":200} > should reload when file content is changed 2`] = ` +200 +`; + +exports[`watchFiles option > should work with options > {"usePolling":true,"poll":200} > should reload when file content is changed 3`] = ` [ "Hey.", ] `; -exports[`watchFiles option should work with options {"usePolling":true,"poll":200} should reload when file content is changed: page errors 1`] = `[]`; - -exports[`watchFiles option should work with options {"usePolling":true,"poll":200} should reload when file content is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with options > {"usePolling":true,"poll":200} > should reload when file content is changed 4`] = ` +[] +`; -exports[`watchFiles option should work with options {"usePolling":true} should reload when file content is changed 1`] = ` +exports[`watchFiles option > should work with options > {"usePolling":true} > should reload when file content is changed 1`] = ` { "alwaysStat": true, "atomic": false, @@ -336,17 +408,21 @@ exports[`watchFiles option should work with options {"usePolling":true} should r } `; -exports[`watchFiles option should work with options {"usePolling":true} should reload when file content is changed: console messages 1`] = ` +exports[`watchFiles option > should work with options > {"usePolling":true} > should reload when file content is changed 2`] = ` +200 +`; + +exports[`watchFiles option > should work with options > {"usePolling":true} > should reload when file content is changed 3`] = ` [ "Hey.", ] `; -exports[`watchFiles option should work with options {"usePolling":true} should reload when file content is changed: page errors 1`] = `[]`; - -exports[`watchFiles option should work with options {"usePolling":true} should reload when file content is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with options > {"usePolling":true} > should reload when file content is changed 4`] = ` +[] +`; -exports[`watchFiles option should work with options {} should reload when file content is changed 1`] = ` +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 1`] = ` { "alwaysStat": true, "atomic": false, @@ -362,39 +438,21 @@ exports[`watchFiles option should work with options {} should reload when file c } `; -exports[`watchFiles option should work with options {} should reload when file content is changed 2`] = ` -{ - "alwaysStat": true, - "atomic": false, - "awaitWriteFinish": false, - "binaryInterval": 300, - "followSymlinks": false, - "ignoreInitial": true, - "ignorePermissionErrors": true, - "ignored": [], - "interval": 100, - "persistent": true, - "usePolling": true, -} +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 10`] = ` +200 `; -exports[`watchFiles option should work with options {} should reload when file content is changed 3`] = ` -{ - "alwaysStat": true, - "atomic": false, - "awaitWriteFinish": false, - "binaryInterval": 300, - "followSymlinks": false, - "ignoreInitial": true, - "ignorePermissionErrors": true, - "ignored": [], - "interval": 100, - "persistent": undefined, - "usePolling": true, -} +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 11`] = ` +[ + "Hey.", +] +`; + +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 12`] = ` +[] `; -exports[`watchFiles option should work with options {} should reload when file content is changed 4`] = ` +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 13`] = ` { "alwaysStat": true, "atomic": false, @@ -410,7 +468,21 @@ exports[`watchFiles option should work with options {} should reload when file c } `; -exports[`watchFiles option should work with options {} should reload when file content is changed 5`] = ` +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 14`] = ` +200 +`; + +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 15`] = ` +[ + "Hey.", +] +`; + +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 16`] = ` +[] +`; + +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 17`] = ` { "alwaysStat": true, "atomic": true, @@ -426,7 +498,25 @@ exports[`watchFiles option should work with options {} should reload when file c } `; -exports[`watchFiles option should work with options {} should reload when file content is changed 6`] = ` +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 18`] = ` +200 +`; + +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 19`] = ` +[ + "Hey.", +] +`; + +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 2`] = ` +200 +`; + +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 20`] = ` +[] +`; + +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 21`] = ` { "alwaysStat": undefined, "atomic": false, @@ -442,7 +532,21 @@ exports[`watchFiles option should work with options {} should reload when file c } `; -exports[`watchFiles option should work with options {} should reload when file content is changed 7`] = ` +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 22`] = ` +200 +`; + +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 23`] = ` +[ + "Hey.", +] +`; + +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 24`] = ` +[] +`; + +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 25`] = ` { "alwaysStat": true, "atomic": false, @@ -459,7 +563,21 @@ exports[`watchFiles option should work with options {} should reload when file c } `; -exports[`watchFiles option should work with options {} should reload when file content is changed 8`] = ` +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 26`] = ` +200 +`; + +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 27`] = ` +[ + "Hey.", +] +`; + +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 28`] = ` +[] +`; + +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 29`] = ` { "alwaysStat": true, "atomic": false, @@ -475,112 +593,114 @@ exports[`watchFiles option should work with options {} should reload when file c } `; -exports[`watchFiles option should work with options {} should reload when file content is changed: console messages 1`] = ` +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 3`] = ` [ "Hey.", ] `; -exports[`watchFiles option should work with options {} should reload when file content is changed: console messages 2`] = ` -[ - "Hey.", -] +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 30`] = ` +200 `; -exports[`watchFiles option should work with options {} should reload when file content is changed: console messages 3`] = ` +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 31`] = ` [ "Hey.", ] `; -exports[`watchFiles option should work with options {} should reload when file content is changed: console messages 4`] = ` -[ - "Hey.", -] +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 32`] = ` +[] `; -exports[`watchFiles option should work with options {} should reload when file content is changed: console messages 5`] = ` -[ - "Hey.", -] +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 4`] = ` +[] `; -exports[`watchFiles option should work with options {} should reload when file content is changed: console messages 6`] = ` -[ - "Hey.", -] +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 5`] = ` +{ + "alwaysStat": true, + "atomic": false, + "awaitWriteFinish": false, + "binaryInterval": 300, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "ignored": [], + "interval": 100, + "persistent": true, + "usePolling": true, +} `; -exports[`watchFiles option should work with options {} should reload when file content is changed: console messages 7`] = ` -[ - "Hey.", -] +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 6`] = ` +200 `; -exports[`watchFiles option should work with options {} should reload when file content is changed: console messages 8`] = ` +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 7`] = ` [ "Hey.", ] `; -exports[`watchFiles option should work with options {} should reload when file content is changed: page errors 1`] = `[]`; - -exports[`watchFiles option should work with options {} should reload when file content is changed: page errors 2`] = `[]`; - -exports[`watchFiles option should work with options {} should reload when file content is changed: page errors 3`] = `[]`; - -exports[`watchFiles option should work with options {} should reload when file content is changed: page errors 4`] = `[]`; - -exports[`watchFiles option should work with options {} should reload when file content is changed: page errors 5`] = `[]`; - -exports[`watchFiles option should work with options {} should reload when file content is changed: page errors 6`] = `[]`; - -exports[`watchFiles option should work with options {} should reload when file content is changed: page errors 7`] = `[]`; - -exports[`watchFiles option should work with options {} should reload when file content is changed: page errors 8`] = `[]`; - -exports[`watchFiles option should work with options {} should reload when file content is changed: response status 1`] = `200`; - -exports[`watchFiles option should work with options {} should reload when file content is changed: response status 2`] = `200`; - -exports[`watchFiles option should work with options {} should reload when file content is changed: response status 3`] = `200`; - -exports[`watchFiles option should work with options {} should reload when file content is changed: response status 4`] = `200`; - -exports[`watchFiles option should work with options {} should reload when file content is changed: response status 5`] = `200`; - -exports[`watchFiles option should work with options {} should reload when file content is changed: response status 6`] = `200`; +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 8`] = ` +[] +`; -exports[`watchFiles option should work with options {} should reload when file content is changed: response status 7`] = `200`; +exports[`watchFiles option > should work with options > {} > should reload when file content is changed 9`] = ` +{ + "alwaysStat": true, + "atomic": false, + "awaitWriteFinish": false, + "binaryInterval": 300, + "followSymlinks": false, + "ignoreInitial": true, + "ignorePermissionErrors": true, + "ignored": [], + "interval": 100, + "persistent": undefined, + "usePolling": true, +} +`; -exports[`watchFiles option should work with options {} should reload when file content is changed: response status 8`] = `200`; +exports[`watchFiles option > should work with string and glob > should reload when file content is changed 1`] = ` +200 +`; -exports[`watchFiles option should work with string and glob should reload when file content is changed: console messages 1`] = ` +exports[`watchFiles option > should work with string and glob > should reload when file content is changed 2`] = ` [ "Hey.", ] `; -exports[`watchFiles option should work with string and glob should reload when file content is changed: page errors 1`] = `[]`; +exports[`watchFiles option > should work with string and glob > should reload when file content is changed 3`] = ` +[] +`; -exports[`watchFiles option should work with string and glob should reload when file content is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with string and path to directory > should reload when file content is changed 1`] = ` +200 +`; -exports[`watchFiles option should work with string and path to directory should reload when file content is changed: console messages 1`] = ` +exports[`watchFiles option > should work with string and path to directory > should reload when file content is changed 2`] = ` [ "Hey.", ] `; -exports[`watchFiles option should work with string and path to directory should reload when file content is changed: page errors 1`] = `[]`; +exports[`watchFiles option > should work with string and path to directory > should reload when file content is changed 3`] = ` +[] +`; -exports[`watchFiles option should work with string and path to directory should reload when file content is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with string and path to file > should reload when file content is changed 1`] = ` +200 +`; -exports[`watchFiles option should work with string and path to file should reload when file content is changed: console messages 1`] = ` +exports[`watchFiles option > should work with string and path to file > should reload when file content is changed 2`] = ` [ "Hey.", ] `; -exports[`watchFiles option should work with string and path to file should reload when file content is changed: page errors 1`] = `[]`; - -exports[`watchFiles option should work with string and path to file should reload when file content is changed: response status 1`] = `200`; +exports[`watchFiles option > should work with string and path to file > should reload when file content is changed 3`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/web-socket-communication.test.js.snap.webpack5 b/test/e2e/__snapshots__/web-socket-communication.test.js.snap.webpack5 index 5a31cc7769..de28937f66 100644 --- a/test/e2e/__snapshots__/web-socket-communication.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/web-socket-communication.test.js.snap.webpack5 @@ -1,6 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`web socket communication should work and close web socket client connection when web socket server closed ("ws"): console messages 1`] = ` +exports[`web socket communication > should work and close web socket client connection when web socket server closed ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -10,9 +8,11 @@ exports[`web socket communication should work and close web socket client connec ] `; -exports[`web socket communication should work and close web socket client connection when web socket server closed ("ws"): page errors 1`] = `[]`; +exports[`web socket communication > should work and close web socket client connection when web socket server closed ("ws") 2`] = ` +[] +`; -exports[`web socket communication should work and reconnect when the connection is lost ("ws"): console messages 1`] = ` +exports[`web socket communication > should work and reconnect when the connection is lost ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -30,9 +30,11 @@ exports[`web socket communication should work and reconnect when the connection ] `; -exports[`web socket communication should work and reconnect when the connection is lost ("ws"): page errors 1`] = `[]`; +exports[`web socket communication > should work and reconnect when the connection is lost ("ws") 2`] = ` +[] +`; -exports[`web socket communication should work and terminate client that is not alive ("ws"): console messages 1`] = ` +exports[`web socket communication > should work and terminate client that is not alive ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -40,4 +42,6 @@ exports[`web socket communication should work and terminate client that is not a ] `; -exports[`web socket communication should work and terminate client that is not alive ("ws"): page errors 1`] = `[]`; +exports[`web socket communication > should work and terminate client that is not alive ("ws") 2`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/web-socket-server-url.test.js.snap.webpack5 b/test/e2e/__snapshots__/web-socket-server-url.test.js.snap.webpack5 index 931f7df51e..64c7eaadb1 100644 --- a/test/e2e/__snapshots__/web-socket-server-url.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/web-socket-server-url.test.js.snap.webpack5 @@ -1,6 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`web socket server URL should not work and output disconnect wrong web socket URL ("ws"): console messages 1`] = ` +exports[`web socket server URL > should not work and output disconnect wrong web socket URL ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -11,21 +9,23 @@ exports[`web socket server URL should not work and output disconnect wrong web s ] `; -exports[`web socket server URL should not work and output disconnect wrong web socket URL ("ws"): page errors 1`] = `[]`; +exports[`web socket server URL > should not work and output disconnect wrong web socket URL ("ws") 2`] = ` +[] +`; -exports[`web socket server URL should work and throw an error on invalid web socket URL ("ws"): console messages 1`] = ` +exports[`web socket server URL > should work and throw an error on invalid web socket URL ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", ] `; -exports[`web socket server URL should work and throw an error on invalid web socket URL ("ws"): page errors 1`] = ` +exports[`web socket server URL > should work and throw an error on invalid web socket URL ("ws") 2`] = ` [ "Failed to construct 'WebSocket': The URL's scheme must be either 'http', 'https', 'ws', or 'wss'. 'unknown' is not allowed.", ] `; -exports[`web socket server URL should work behind proxy, when hostnames are different and ports are different ("ws"): console messages 1`] = ` +exports[`web socket server URL > should work behind proxy, when hostnames are different and ports are different ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -33,9 +33,11 @@ exports[`web socket server URL should work behind proxy, when hostnames are diff ] `; -exports[`web socket server URL should work behind proxy, when hostnames are different and ports are different ("ws"): page errors 1`] = `[]`; +exports[`web socket server URL > should work behind proxy, when hostnames are different and ports are different ("ws") 2`] = ` +[] +`; -exports[`web socket server URL should work behind proxy, when hostnames are different and ports are same ("ws"): console messages 1`] = ` +exports[`web socket server URL > should work behind proxy, when hostnames are different and ports are same ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -43,9 +45,11 @@ exports[`web socket server URL should work behind proxy, when hostnames are diff ] `; -exports[`web socket server URL should work behind proxy, when hostnames are different and ports are same ("ws"): page errors 1`] = `[]`; +exports[`web socket server URL > should work behind proxy, when hostnames are different and ports are same ("ws") 2`] = ` +[] +`; -exports[`web socket server URL should work behind proxy, when hostnames are same and ports are different ("ws"): console messages 1`] = ` +exports[`web socket server URL > should work behind proxy, when hostnames are same and ports are different ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -53,9 +57,11 @@ exports[`web socket server URL should work behind proxy, when hostnames are same ] `; -exports[`web socket server URL should work behind proxy, when hostnames are same and ports are different ("ws"): page errors 1`] = `[]`; +exports[`web socket server URL > should work behind proxy, when hostnames are same and ports are different ("ws") 2`] = ` +[] +`; -exports[`web socket server URL should work behind proxy, when the "host" option is "local-ip" and the "port" option is "auto" ("ws"): console messages 1`] = ` +exports[`web socket server URL > should work behind proxy, when the "host" option is "local-ip" and the "port" option is "auto" ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -63,9 +69,11 @@ exports[`web socket server URL should work behind proxy, when the "host" option ] `; -exports[`web socket server URL should work behind proxy, when the "host" option is "local-ip" and the "port" option is "auto" ("ws"): page errors 1`] = `[]`; +exports[`web socket server URL > should work behind proxy, when the "host" option is "local-ip" and the "port" option is "auto" ("ws") 2`] = ` +[] +`; -exports[`web socket server URL should work when "host" option is "local-ip" ("ws"): console messages 1`] = ` +exports[`web socket server URL > should work when "host" option is "local-ip" ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -73,9 +81,11 @@ exports[`web socket server URL should work when "host" option is "local-ip" ("ws ] `; -exports[`web socket server URL should work when "host" option is "local-ip" ("ws"): page errors 1`] = `[]`; +exports[`web socket server URL > should work when "host" option is "local-ip" ("ws") 2`] = ` +[] +`; -exports[`web socket server URL should work when "host" option is "local-ipv4" ("ws"): console messages 1`] = ` +exports[`web socket server URL > should work when "host" option is "local-ipv4" ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -83,9 +93,11 @@ exports[`web socket server URL should work when "host" option is "local-ipv4" (" ] `; -exports[`web socket server URL should work when "host" option is "local-ipv4" ("ws"): page errors 1`] = `[]`; +exports[`web socket server URL > should work when "host" option is "local-ipv4" ("ws") 2`] = ` +[] +`; -exports[`web socket server URL should work when "host" option is IPv4 ("ws"): console messages 1`] = ` +exports[`web socket server URL > should work when "host" option is IPv4 ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -93,9 +105,11 @@ exports[`web socket server URL should work when "host" option is IPv4 ("ws"): co ] `; -exports[`web socket server URL should work when "host" option is IPv4 ("ws"): page errors 1`] = `[]`; +exports[`web socket server URL > should work when "host" option is IPv4 ("ws") 2`] = ` +[] +`; -exports[`web socket server URL should work when "port" option is "auto" ("ws"): console messages 1`] = ` +exports[`web socket server URL > should work when "port" option is "auto" ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -103,9 +117,11 @@ exports[`web socket server URL should work when "port" option is "auto" ("ws"): ] `; -exports[`web socket server URL should work when "port" option is "auto" ("ws"): page errors 1`] = `[]`; +exports[`web socket server URL > should work when "port" option is "auto" ("ws") 2`] = ` +[] +`; -exports[`web socket server URL should work with "client.webSocketURL.*" options ("ws"): console messages 1`] = ` +exports[`web socket server URL > should work with "client.webSocketURL.*" options ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -113,9 +129,11 @@ exports[`web socket server URL should work with "client.webSocketURL.*" options ] `; -exports[`web socket server URL should work with "client.webSocketURL.*" options ("ws"): page errors 1`] = `[]`; +exports[`web socket server URL > should work with "client.webSocketURL.*" options ("ws") 2`] = ` +[] +`; -exports[`web socket server URL should work with "client.webSocketURL.port" and "webSocketServer.options.port" options as string ("ws"): console messages 1`] = ` +exports[`web socket server URL > should work with "client.webSocketURL.port" and "webSocketServer.options.port" options as string ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -123,9 +141,11 @@ exports[`web socket server URL should work with "client.webSocketURL.port" and " ] `; -exports[`web socket server URL should work with "client.webSocketURL.port" and "webSocketServer.options.port" options as string ("ws"): page errors 1`] = `[]`; +exports[`web socket server URL > should work with "client.webSocketURL.port" and "webSocketServer.options.port" options as string ("ws") 2`] = ` +[] +`; -exports[`web socket server URL should work with "server: 'https'" option ("ws"): console messages 1`] = ` +exports[`web socket server URL > should work with "server: 'https'" option ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -133,9 +153,11 @@ exports[`web socket server URL should work with "server: 'https'" option ("ws"): ] `; -exports[`web socket server URL should work with "server: 'https'" option ("ws"): page errors 1`] = `[]`; +exports[`web socket server URL > should work with "server: 'https'" option ("ws") 2`] = ` +[] +`; -exports[`web socket server URL should work with default "/ws" value of the "client.webSocketURL.pathname" option ("ws"): console messages 1`] = ` +exports[`web socket server URL > should work with default "/ws" value of the "client.webSocketURL.pathname" option ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -143,9 +165,11 @@ exports[`web socket server URL should work with default "/ws" value of the "clie ] `; -exports[`web socket server URL should work with default "/ws" value of the "client.webSocketURL.pathname" option ("ws"): page errors 1`] = `[]`; +exports[`web socket server URL > should work with default "/ws" value of the "client.webSocketURL.pathname" option ("ws") 2`] = ` +[] +`; -exports[`web socket server URL should work with the "client.webSocketURL" option as "string" ("ws"): console messages 1`] = ` +exports[`web socket server URL > should work with the "client.webSocketURL" option as "string" ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -153,9 +177,11 @@ exports[`web socket server URL should work with the "client.webSocketURL" option ] `; -exports[`web socket server URL should work with the "client.webSocketURL" option as "string" ("ws"): page errors 1`] = `[]`; +exports[`web socket server URL > should work with the "client.webSocketURL" option as "string" ("ws") 2`] = ` +[] +`; -exports[`web socket server URL should work with the "client.webSocketURL.host" option ("ws"): console messages 1`] = ` +exports[`web socket server URL > should work with the "client.webSocketURL.host" option ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -163,9 +189,11 @@ exports[`web socket server URL should work with the "client.webSocketURL.host" o ] `; -exports[`web socket server URL should work with the "client.webSocketURL.host" option ("ws"): page errors 1`] = `[]`; +exports[`web socket server URL > should work with the "client.webSocketURL.host" option ("ws") 2`] = ` +[] +`; -exports[`web socket server URL should work with the "client.webSocketURL.host" option using "0.0.0.0" value ("ws"): console messages 1`] = ` +exports[`web socket server URL > should work with the "client.webSocketURL.host" option using "0.0.0.0" value ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -173,9 +201,11 @@ exports[`web socket server URL should work with the "client.webSocketURL.host" o ] `; -exports[`web socket server URL should work with the "client.webSocketURL.host" option using "0.0.0.0" value ("ws"): page errors 1`] = `[]`; +exports[`web socket server URL > should work with the "client.webSocketURL.host" option using "0.0.0.0" value ("ws") 2`] = ` +[] +`; -exports[`web socket server URL should work with the "client.webSocketURL.password" option ("ws"): console messages 1`] = ` +exports[`web socket server URL > should work with the "client.webSocketURL.password" option ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -183,9 +213,11 @@ exports[`web socket server URL should work with the "client.webSocketURL.passwor ] `; -exports[`web socket server URL should work with the "client.webSocketURL.password" option ("ws"): page errors 1`] = `[]`; +exports[`web socket server URL > should work with the "client.webSocketURL.password" option ("ws") 2`] = ` +[] +`; -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option ("ws"): console messages 1`] = ` +exports[`web socket server URL > should work with the "client.webSocketURL.pathname" option ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -193,7 +225,11 @@ exports[`web socket server URL should work with the "client.webSocketURL.pathnam ] `; -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option ("ws"): console messages 2`] = ` +exports[`web socket server URL > should work with the "client.webSocketURL.pathname" option ("ws") 2`] = ` +[] +`; + +exports[`web socket server URL > should work with the "client.webSocketURL.pathname" option ("ws") 3`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -201,11 +237,11 @@ exports[`web socket server URL should work with the "client.webSocketURL.pathnam ] `; -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option ("ws"): page errors 1`] = `[]`; - -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option ("ws"): page errors 2`] = `[]`; +exports[`web socket server URL > should work with the "client.webSocketURL.pathname" option ("ws") 4`] = ` +[] +`; -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ("ws"): console messages 1`] = ` +exports[`web socket server URL > should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -213,9 +249,11 @@ exports[`web socket server URL should work with the "client.webSocketURL.pathnam ] `; -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ("ws"): page errors 1`] = `[]`; +exports[`web socket server URL > should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ("ws") 2`] = ` +[] +`; -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ending with slash ("ws"): console messages 1`] = ` +exports[`web socket server URL > should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ending with slash ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -223,9 +261,11 @@ exports[`web socket server URL should work with the "client.webSocketURL.pathnam ] `; -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ending with slash ("ws"): page errors 1`] = `[]`; +exports[`web socket server URL > should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ending with slash ("ws") 2`] = ` +[] +`; -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ending without slash ("ws"): console messages 1`] = ` +exports[`web socket server URL > should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ending without slash ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -233,9 +273,11 @@ exports[`web socket server URL should work with the "client.webSocketURL.pathnam ] `; -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ending without slash ("ws"): page errors 1`] = `[]`; +exports[`web socket server URL > should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ending without slash ("ws") 2`] = ` +[] +`; -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" using empty value ("ws"): console messages 1`] = ` +exports[`web socket server URL > should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" using empty value ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -243,9 +285,11 @@ exports[`web socket server URL should work with the "client.webSocketURL.pathnam ] `; -exports[`web socket server URL should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" using empty value ("ws"): page errors 1`] = `[]`; +exports[`web socket server URL > should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" using empty value ("ws") 2`] = ` +[] +`; -exports[`web socket server URL should work with the "client.webSocketURL.port" option ("ws"): console messages 1`] = ` +exports[`web socket server URL > should work with the "client.webSocketURL.port" option ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -253,9 +297,11 @@ exports[`web socket server URL should work with the "client.webSocketURL.port" o ] `; -exports[`web socket server URL should work with the "client.webSocketURL.port" option ("ws"): page errors 1`] = `[]`; +exports[`web socket server URL > should work with the "client.webSocketURL.port" option ("ws") 2`] = ` +[] +`; -exports[`web socket server URL should work with the "client.webSocketURL.port" option as string ("ws"): console messages 1`] = ` +exports[`web socket server URL > should work with the "client.webSocketURL.port" option as string ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -263,9 +309,11 @@ exports[`web socket server URL should work with the "client.webSocketURL.port" o ] `; -exports[`web socket server URL should work with the "client.webSocketURL.port" option as string ("ws"): page errors 1`] = `[]`; +exports[`web socket server URL > should work with the "client.webSocketURL.port" option as string ("ws") 2`] = ` +[] +`; -exports[`web socket server URL should work with the "client.webSocketURL.port" option using "0" value ("ws"): console messages 1`] = ` +exports[`web socket server URL > should work with the "client.webSocketURL.port" option using "0" value ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -273,9 +321,11 @@ exports[`web socket server URL should work with the "client.webSocketURL.port" o ] `; -exports[`web socket server URL should work with the "client.webSocketURL.port" option using "0" value ("ws"): page errors 1`] = `[]`; +exports[`web socket server URL > should work with the "client.webSocketURL.port" option using "0" value ("ws") 2`] = ` +[] +`; -exports[`web socket server URL should work with the "client.webSocketURL.protocol" option ("ws"): console messages 1`] = ` +exports[`web socket server URL > should work with the "client.webSocketURL.protocol" option ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -283,9 +333,11 @@ exports[`web socket server URL should work with the "client.webSocketURL.protoco ] `; -exports[`web socket server URL should work with the "client.webSocketURL.protocol" option ("ws"): page errors 1`] = `[]`; +exports[`web socket server URL > should work with the "client.webSocketURL.protocol" option ("ws") 2`] = ` +[] +`; -exports[`web socket server URL should work with the "client.webSocketURL.protocol" option using "auto:" value ("ws"): console messages 1`] = ` +exports[`web socket server URL > should work with the "client.webSocketURL.protocol" option using "auto:" value ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -293,9 +345,11 @@ exports[`web socket server URL should work with the "client.webSocketURL.protoco ] `; -exports[`web socket server URL should work with the "client.webSocketURL.protocol" option using "auto:" value ("ws"): page errors 1`] = `[]`; +exports[`web socket server URL > should work with the "client.webSocketURL.protocol" option using "auto:" value ("ws") 2`] = ` +[] +`; -exports[`web socket server URL should work with the "client.webSocketURL.protocol" option using "http:" value and convert to "ws:" ("ws"): console messages 1`] = ` +exports[`web socket server URL > should work with the "client.webSocketURL.protocol" option using "http:" value and convert to "ws:" ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -303,9 +357,11 @@ exports[`web socket server URL should work with the "client.webSocketURL.protoco ] `; -exports[`web socket server URL should work with the "client.webSocketURL.protocol" option using "http:" value and convert to "ws:" ("ws"): page errors 1`] = `[]`; +exports[`web socket server URL > should work with the "client.webSocketURL.protocol" option using "http:" value and convert to "ws:" ("ws") 2`] = ` +[] +`; -exports[`web socket server URL should work with the "client.webSocketURL.username" and "client.webSocketURL.password" option ("ws"): console messages 1`] = ` +exports[`web socket server URL > should work with the "client.webSocketURL.username" and "client.webSocketURL.password" option ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -313,9 +369,11 @@ exports[`web socket server URL should work with the "client.webSocketURL.usernam ] `; -exports[`web socket server URL should work with the "client.webSocketURL.username" and "client.webSocketURL.password" option ("ws"): page errors 1`] = `[]`; +exports[`web socket server URL > should work with the "client.webSocketURL.username" and "client.webSocketURL.password" option ("ws") 2`] = ` +[] +`; -exports[`web socket server URL should work with the "client.webSocketURL.username" option ("ws"): console messages 1`] = ` +exports[`web socket server URL > should work with the "client.webSocketURL.username" option ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -323,9 +381,11 @@ exports[`web socket server URL should work with the "client.webSocketURL.usernam ] `; -exports[`web socket server URL should work with the "client.webSocketURL.username" option ("ws"): page errors 1`] = `[]`; +exports[`web socket server URL > should work with the "client.webSocketURL.username" option ("ws") 2`] = ` +[] +`; -exports[`web socket server URL should work with the custom web socket server "path" ("ws"): console messages 1`] = ` +exports[`web socket server URL > should work with the custom web socket server "path" ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -333,9 +393,11 @@ exports[`web socket server URL should work with the custom web socket server "pa ] `; -exports[`web socket server URL should work with the custom web socket server "path" ("ws"): page errors 1`] = `[]`; +exports[`web socket server URL > should work with the custom web socket server "path" ("ws") 2`] = ` +[] +`; -exports[`web socket server URL should work with the custom web socket server "path" using empty value ("ws"): console messages 1`] = ` +exports[`web socket server URL > should work with the custom web socket server "path" using empty value ("ws") 1`] = ` [ "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", "[HMR] Waiting for update signal from WDS...", @@ -343,4 +405,6 @@ exports[`web socket server URL should work with the custom web socket server "pa ] `; -exports[`web socket server URL should work with the custom web socket server "path" using empty value ("ws"): page errors 1`] = `[]`; +exports[`web socket server URL > should work with the custom web socket server "path" using empty value ("ws") 2`] = ` +[] +`; diff --git a/test/e2e/__snapshots__/web-socket-server.test.js.snap.webpack5 b/test/e2e/__snapshots__/web-socket-server.test.js.snap.webpack5 index db4b4ffb5b..d8505a22f4 100644 --- a/test/e2e/__snapshots__/web-socket-server.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/web-socket-server.test.js.snap.webpack5 @@ -1,9 +1,9 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing - -exports[`web socket server should work allow to disable: console messages 1`] = ` +exports[`web socket server > should work allow to disable 1`] = ` [ "Hey.", ] `; -exports[`web socket server should work allow to disable: page errors 1`] = `[]`; +exports[`web socket server > should work allow to disable 2`] = ` +[] +`; diff --git a/test/e2e/allowed-hosts.test.js b/test/e2e/allowed-hosts.test.js index 7f7f9b492d..47f403eaf4 100644 --- a/test/e2e/allowed-hosts.test.js +++ b/test/e2e/allowed-hosts.test.js @@ -1,5 +1,7 @@ "use strict"; +const { afterEach, beforeEach, describe, it } = require("node:test"); + const express = require("express"); const { createProxyMiddleware } = require("http-proxy-middleware"); const webpack = require("webpack"); @@ -12,7 +14,7 @@ const webSocketServers = ["ws"]; describe("allowed hosts", () => { for (const webSocketServer of webSocketServers) { - it(`should connect web socket client using localhost to web socket server with the "auto" value ("${webSocketServer}")`, async () => { + it(`should connect web socket client using localhost to web socket server with the "auto" value ("${webSocketServer}")`, async (t) => { const devServerHost = "localhost"; const devServerPort = port1; const proxyHost = devServerHost; @@ -73,10 +75,8 @@ describe("allowed hosts", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -85,7 +85,7 @@ describe("allowed hosts", () => { } }); - it(`should connect web socket client using "localhost" host to web socket server by default ("${webSocketServer}")`, async () => { + it(`should connect web socket client using "localhost" host to web socket server by default ("${webSocketServer}")`, async (t) => { const devServerHost = "localhost"; const devServerPort = port1; const proxyHost = devServerHost; @@ -146,10 +146,8 @@ describe("allowed hosts", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -158,7 +156,7 @@ describe("allowed hosts", () => { } }); - it(`should connect web socket client using "127.0.0.1" host to web socket server by default ("${webSocketServer}")`, async () => { + it(`should connect web socket client using "127.0.0.1" host to web socket server by default ("${webSocketServer}")`, async (t) => { const devServerHost = "127.0.0.1"; const devServerPort = port1; const proxyHost = devServerHost; @@ -219,10 +217,8 @@ describe("allowed hosts", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -231,7 +227,7 @@ describe("allowed hosts", () => { } }); - it(`should connect web socket client using "127.0.0.1" host to web socket server with the "auto" value ("${webSocketServer}")`, async () => { + it(`should connect web socket client using "127.0.0.1" host to web socket server with the "auto" value ("${webSocketServer}")`, async (t) => { const devServerHost = "127.0.0.1"; const devServerPort = port1; const proxyHost = devServerHost; @@ -293,10 +289,8 @@ describe("allowed hosts", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -305,7 +299,7 @@ describe("allowed hosts", () => { } }); - it(`should connect web socket client using "[::1] host to web socket server with the "auto" value ("${webSocketServer}")`, async () => { + it(`should connect web socket client using "[::1] host to web socket server with the "auto" value ("${webSocketServer}")`, async (t) => { const devServerHost = "::1"; const devServerPort = port1; const proxyHost = devServerHost; @@ -367,10 +361,8 @@ describe("allowed hosts", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -379,7 +371,7 @@ describe("allowed hosts", () => { } }); - it(`should connect web socket client using "0.0.0.0" host to web socket server with the "auto" value ("${webSocketServer}")`, async () => { + it(`should connect web socket client using "0.0.0.0" host to web socket server with the "auto" value ("${webSocketServer}")`, async (t) => { const devServerHost = "0.0.0.0"; const IPv4 = Server.findIp("v4"); const devServerPort = port1; @@ -442,10 +434,8 @@ describe("allowed hosts", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -454,7 +444,7 @@ describe("allowed hosts", () => { } }); - it(`should connect web socket client using "file:" protocol to web socket server with the "auto" value ("${webSocketServer}")`, async () => { + it(`should connect web socket client using "file:" protocol to web socket server with the "auto" value ("${webSocketServer}")`, async (t) => { const devServerHost = "127.0.0.1"; const devServerPort = port1; const proxyHost = devServerHost; @@ -521,10 +511,8 @@ describe("allowed hosts", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -533,7 +521,7 @@ describe("allowed hosts", () => { } }); - it(`should connect web socket client using "chrome-extension:" protocol to web socket server with the "auto" value ("${webSocketServer}")`, async () => { + it(`should connect web socket client using "chrome-extension:" protocol to web socket server with the "auto" value ("${webSocketServer}")`, async (t) => { const devServerHost = "127.0.0.1"; const devServerPort = port1; const proxyHost = devServerHost; @@ -600,10 +588,8 @@ describe("allowed hosts", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -612,7 +598,7 @@ describe("allowed hosts", () => { } }); - it(`should connect web socket client using custom hostname to web socket server with the "all" value ("${webSocketServer}")`, async () => { + it(`should connect web socket client using custom hostname to web socket server with the "all" value ("${webSocketServer}")`, async (t) => { const devServerHost = "127.0.0.1"; const devServerPort = port1; const proxyHost = devServerHost; @@ -680,10 +666,8 @@ describe("allowed hosts", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -692,7 +676,7 @@ describe("allowed hosts", () => { } }); - it(`should connect web socket client using custom hostname to web socket server with the "all" value in array ("${webSocketServer}")`, async () => { + it(`should connect web socket client using custom hostname to web socket server with the "all" value in array ("${webSocketServer}")`, async (t) => { const devServerHost = "127.0.0.1"; const devServerPort = port1; const proxyHost = devServerHost; @@ -760,10 +744,8 @@ describe("allowed hosts", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -772,7 +754,7 @@ describe("allowed hosts", () => { } }); - it(`should connect web socket client using custom hostname to web socket server with the custom hostname value ("${webSocketServer}")`, async () => { + it(`should connect web socket client using custom hostname to web socket server with the custom hostname value ("${webSocketServer}")`, async (t) => { const devServerHost = "127.0.0.1"; const devServerPort = port1; const proxyHost = devServerHost; @@ -840,10 +822,8 @@ describe("allowed hosts", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -852,7 +832,7 @@ describe("allowed hosts", () => { } }); - it(`should connect web socket client using custom hostname to web socket server with the custom hostname value starting with dot ("${webSocketServer}")`, async () => { + it(`should connect web socket client using custom hostname to web socket server with the custom hostname value starting with dot ("${webSocketServer}")`, async (t) => { const devServerHost = "127.0.0.1"; const devServerPort = port1; const proxyHost = devServerHost; @@ -920,10 +900,8 @@ describe("allowed hosts", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -932,7 +910,7 @@ describe("allowed hosts", () => { } }); - it(`should connect web socket client using custom sub hostname to web socket server with the custom hostname value ("${webSocketServer}")`, async () => { + it(`should connect web socket client using custom sub hostname to web socket server with the custom hostname value ("${webSocketServer}")`, async (t) => { const devServerHost = "127.0.0.1"; const devServerPort = port1; const proxyHost = devServerHost; @@ -1003,10 +981,8 @@ describe("allowed hosts", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -1015,7 +991,7 @@ describe("allowed hosts", () => { } }); - it(`should connect web socket client using custom hostname to web socket server with the multiple custom hostname values ("${webSocketServer}")`, async () => { + it(`should connect web socket client using custom hostname to web socket server with the multiple custom hostname values ("${webSocketServer}")`, async (t) => { const devServerHost = "127.0.0.1"; const devServerPort = port1; const proxyHost = devServerHost; @@ -1083,10 +1059,8 @@ describe("allowed hosts", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -1095,7 +1069,7 @@ describe("allowed hosts", () => { } }); - it(`should connect web socket client using origin header containing an IP address with the custom hostname value ("${webSocketServer}")`, async () => { + it(`should connect web socket client using origin header containing an IP address with the custom hostname value ("${webSocketServer}")`, async (t) => { const devServerHost = "127.0.0.1"; const devServerPort = port1; const proxyHost = devServerHost; @@ -1163,10 +1137,8 @@ describe("allowed hosts", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("(work) console messages"); - expect(pageErrors).toMatchSnapshot("(work) page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -1175,7 +1147,7 @@ describe("allowed hosts", () => { } }); - it(`should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "host" header ("${webSocketServer}")`, async () => { + it(`should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "host" header ("${webSocketServer}")`, async (t) => { const devServerHost = "127.0.0.1"; const devServerPort = port1; const proxyHost = devServerHost; @@ -1243,10 +1215,8 @@ describe("allowed hosts", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -1255,7 +1225,7 @@ describe("allowed hosts", () => { } }); - it(`should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "host" header when "server: 'https'" is enabled ("${webSocketServer}")`, async () => { + it(`should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "host" header when "server: 'https'" is enabled ("${webSocketServer}")`, async (t) => { const devServerHost = "127.0.0.1"; const devServerPort = port1; const proxyHost = devServerHost; @@ -1326,10 +1296,8 @@ describe("allowed hosts", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -1338,7 +1306,7 @@ describe("allowed hosts", () => { } }); - it(`should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "origin" header ("${webSocketServer}")`, async () => { + it(`should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "origin" header ("${webSocketServer}")`, async (t) => { const devServerHost = "127.0.0.1"; const devServerPort = port1; const proxyHost = devServerHost; @@ -1406,10 +1374,8 @@ describe("allowed hosts", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -1418,7 +1384,7 @@ describe("allowed hosts", () => { } }); - it(`should disconnect web client using localhost to web socket server with the "auto" value ("${webSocketServer}")`, async () => { + it(`should disconnect web client using localhost to web socket server with the "auto" value ("${webSocketServer}")`, async (t) => { const devServerHost = "127.0.0.1"; const devServerPort = port1; const proxyHost = devServerHost; @@ -1489,11 +1455,9 @@ describe("allowed hosts", () => { const html = await page.content(); - expect(html).toMatchSnapshot("html"); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(html); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -1502,7 +1466,7 @@ describe("allowed hosts", () => { } }); - it(`should disconnect web client using origin header containing an IP address with the "auto" value ("${webSocketServer}")`, async () => { + it(`should disconnect web client using origin header containing an IP address with the "auto" value ("${webSocketServer}")`, async (t) => { const devServerHost = "127.0.0.1"; const devServerPort = port1; const proxyHost = devServerHost; @@ -1570,10 +1534,8 @@ describe("allowed hosts", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("(work) console messages"); - expect(pageErrors).toMatchSnapshot("(work) page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -1602,7 +1564,7 @@ describe("allowed hosts", () => { await server.stop(); }); - it("should always allow `localhost` if options.allowedHosts is auto", async () => { + it("should always allow `localhost` if options.allowedHosts is auto", async (t) => { const options = { allowedHosts: "auto", port: port1, @@ -1634,16 +1596,14 @@ describe("allowed hosts", () => { throw new Error("Validation didn't fail"); } - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should always allow `localhost` subdomain if options.allowedHosts is auto", async () => { + it("should always allow `localhost` subdomain if options.allowedHosts is auto", async (t) => { const options = { allowedHosts: "auto", port: port1, @@ -1675,16 +1635,14 @@ describe("allowed hosts", () => { throw new Error("Validation didn't fail"); } - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should always allow value from the `host` options if options.allowedHosts is auto", async () => { + it("should always allow value from the `host` options if options.allowedHosts is auto", async (t) => { const networkIP = Server.findIp("v4", false); const options = { host: networkIP, @@ -1718,16 +1676,14 @@ describe("allowed hosts", () => { throw new Error("Validation didn't fail"); } - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should always allow value of the `host` option from the `client.webSocketURL` option if options.allowedHosts is auto", async () => { + it("should always allow value of the `host` option from the `client.webSocketURL` option if options.allowedHosts is auto", async (t) => { const options = { allowedHosts: "auto", port: port1, @@ -1762,16 +1718,14 @@ describe("allowed hosts", () => { throw new Error("Validation didn't fail"); } - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should always allow any host if options.allowedHosts is all", async () => { + it("should always allow any host if options.allowedHosts is all", async (t) => { const options = { allowedHosts: "all", port: port1, @@ -1802,16 +1756,14 @@ describe("allowed hosts", () => { throw new Error("Validation didn't fail"); } - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should allow hosts in allowedHosts", async () => { + it("should allow hosts in allowedHosts", async (t) => { const tests = ["test.host", "test2.host", "test3.host"]; const options = { allowedHosts: tests, @@ -1844,16 +1796,14 @@ describe("allowed hosts", () => { } } - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should allow hosts that pass a wildcard in allowedHosts", async () => { + it("should allow hosts that pass a wildcard in allowedHosts", async (t) => { const options = { allowedHosts: [".example.com"], port: port1, @@ -1894,13 +1844,11 @@ describe("allowed hosts", () => { } } - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); }); diff --git a/test/e2e/api.test.js b/test/e2e/api.test.js index ee09842d04..f32094d8d0 100644 --- a/test/e2e/api.test.js +++ b/test/e2e/api.test.js @@ -1,6 +1,9 @@ "use strict"; const path = require("node:path"); +const { afterEach, beforeEach, describe, it, mock } = require("node:test"); +const { expect } = require("expect"); +const { fn } = require("jest-mock"); const webpack = require("webpack"); const Server = require("../../lib/Server"); const config = require("../fixtures/client-config/webpack.config"); @@ -18,12 +21,10 @@ describe("API", () => { let consoleMessages; beforeEach(async () => { - // this is important - it clears the cache - jest.resetModules(); - process.env = { ...OLD_ENV }; delete process.env.WEBPACK_SERVE; + delete require.cache[require.resolve("../../lib/Server")]; ({ page, browser } = await runBrowser()); @@ -37,7 +38,7 @@ describe("API", () => { process.env = OLD_ENV; }); - it("should be present", async () => { + it("should be present", async (t) => { expect(process.env.WEBPACK_SERVE).toBeUndefined(); page @@ -61,18 +62,16 @@ describe("API", () => { waitUntil: "networkidle0", }); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); describe("latest async API", () => { - it("should work with async API", async () => { + it("should work with async API", async (t) => { const compiler = webpack(config); const server = new Server({ port }, compiler); @@ -96,17 +95,15 @@ describe("API", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it("should work with callback API", async () => { + it("should work with callback API", async (t) => { const compiler = webpack(config); const server = new Server({ port }, compiler); @@ -134,10 +131,8 @@ describe("API", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await new Promise((resolve) => { @@ -171,7 +166,7 @@ describe("API", () => { }); }); - it("should work when using configured manually", async () => { + it("should work when using configured manually", async (t) => { const compiler = webpack({ ...config, entry: [ @@ -205,17 +200,15 @@ describe("API", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it("should work and allow to rerun dev server multiple times", async () => { + it("should work and allow to rerun dev server multiple times", async (t) => { const compiler = webpack(config); const server = new Server({ port }, compiler); @@ -239,10 +232,10 @@ describe("API", () => { waitUntil: "networkidle0", }); - expect( + t.assert.snapshot( firstConsoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(firstPageErrors).toMatchSnapshot("page errors"); + ); + t.assert.snapshot(firstPageErrors); } finally { await server.stop(); } @@ -267,10 +260,10 @@ describe("API", () => { waitUntil: "networkidle0", }); - expect( + t.assert.snapshot( secondConsoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(secondPageErrors).toMatchSnapshot("page errors"); + ); + t.assert.snapshot(secondPageErrors); } finally { await browser.close(); await server.stop(); @@ -312,8 +305,8 @@ describe("API", () => { await server.stop(); }); - it("should use the default `noop` callback when invalidate is called without any callback", async () => { - const callback = jest.fn(); + it("should use the default `noop` callback when invalidate is called without any callback", async (t) => { + const callback = fn(); server.invalidate(); server.middleware.context.callbacks[0] = callback; @@ -323,16 +316,14 @@ describe("API", () => { }); expect(callback).toHaveBeenCalledTimes(1); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); }); - it("should use the provided `callback` function", async () => { - const callback = jest.fn(); + it("should use the provided `callback` function", async (t) => { + const callback = fn(); server.invalidate(callback); @@ -341,13 +332,11 @@ describe("API", () => { }); expect(callback).toHaveBeenCalledTimes(1); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -429,7 +418,7 @@ describe("API", () => { expect(freePort).toBe(9082); }); - it("should return the port when the port is `null`", async () => { + it("should return the port when the port is `null`", async (t) => { const retryCount = 2; process.env.WEBPACK_DEV_SERVER_PORT_RETRY = retryCount; @@ -464,13 +453,11 @@ describe("API", () => { }, ); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); } catch (error) { if (error.code === "EACCES") { // Retry mechanism for EACCES errors @@ -504,7 +491,7 @@ describe("API", () => { } }); - it("should return the port when the port is undefined", async () => { + it("should return the port when the port is undefined", async (t) => { const retryCount = 3; process.env.WEBPACK_DEV_SERVER_PORT_RETRY = retryCount; @@ -540,13 +527,11 @@ describe("API", () => { }, ); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); } catch (error) { if (error.code === "EACCES") { // Retry mechanism for EACCES errors @@ -580,7 +565,7 @@ describe("API", () => { } }); - it("should retry finding the port for up to defaultPortRetry times (number)", async () => { + it("should retry finding the port for up to defaultPortRetry times (number)", async (t) => { const retryCount = 4; process.env.WEBPACK_DEV_SERVER_PORT_RETRY = retryCount; @@ -616,13 +601,11 @@ describe("API", () => { }, ); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); } catch (error) { if (error.code === "EACCES") { // Retry mechanism for EACCES errors @@ -657,7 +640,7 @@ describe("API", () => { } }); - it("should retry finding the port for up to defaultPortRetry times (string)", async () => { + it("should retry finding the port for up to defaultPortRetry times (string)", async (t) => { const retryCount = 5; process.env.WEBPACK_DEV_SERVER_PORT_RETRY = retryCount; @@ -693,13 +676,11 @@ describe("API", () => { }, ); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); } catch (error) { if (error.code === "EACCES") { // Retry mechanism for EACCES errors @@ -734,7 +715,7 @@ describe("API", () => { } }); - it("should retry finding the port when serial ports are busy", async () => { + it("should retry finding the port when serial ports are busy", async (t) => { const basePort = Number.parseInt( process.env.WEBPACK_DEV_SERVER_TEST_BASE_PORT || 30000, 10, @@ -772,13 +753,11 @@ describe("API", () => { }, ); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); } catch (error) { if (error.code === "EACCES") { // Retry mechanism for EACCES errors @@ -823,20 +802,21 @@ describe("API", () => { } }); - it("should throw the error when the port isn't found", async () => { + it("should throw the error when the port isn't found", async (t) => { expect.assertions(1); - jest.mock( - "../../lib/getPort", - () => () => Promise.reject(new Error("busy")), - ); + const getPortMock = mock.module("../../lib/getPort.js", { + defaultExport: () => Promise.reject(new Error("busy")), + }); process.env.WEBPACK_DEV_SERVER_PORT_RETRY = 1; try { await Server.getFreePort(); } catch (error) { - expect(error.message).toMatchSnapshot(); + t.assert.snapshot(error.message); + } finally { + getPortMock.restore(); } }); }); @@ -872,7 +852,7 @@ describe("API", () => { expect(isValidHost).toBe(true); }); - it('should allow URLs with scheme for checking origin when the "option.client.webSocketURL" is object', async () => { + it('should allow URLs with scheme for checking origin when the "option.client.webSocketURL" is object', async (t) => { const options = { port, client: { @@ -943,16 +923,15 @@ describe("API", () => { }, 100); }); - expect(webSocketRequests[0].url).toMatchSnapshot("web socket URL"); + t.assert.snapshot(webSocketRequests[0].url); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect( - // net::ERR_NAME_NOT_RESOLVED can be multiple times + t.assert.snapshot( consoleMessages.map((message) => message.text()).slice(0, 7), - ).toMatchSnapshot("console messages"); + ); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); } catch (error) { if (error.code === "EACCES") { // Retry mechanism for EACCES errors diff --git a/test/e2e/app.test.js b/test/e2e/app.test.js index b98b9f65e9..19d9b09b8f 100644 --- a/test/e2e/app.test.js +++ b/test/e2e/app.test.js @@ -2,6 +2,8 @@ const fs = require("node:fs"); const path = require("node:path"); +const { afterEach, beforeEach, describe, it } = require("node:test"); +const { expect } = require("expect"); const webpack = require("webpack"); const wdm = require("webpack-dev-middleware"); const Server = require("../../lib/Server"); diff --git a/test/e2e/bonjour.test.js b/test/e2e/bonjour.test.js index 5f2bc90aab..5b2711e23b 100644 --- a/test/e2e/bonjour.test.js +++ b/test/e2e/bonjour.test.js @@ -1,6 +1,9 @@ "use strict"; const os = require("node:os"); +const { afterEach, beforeEach, describe, it, mock } = require("node:test"); +const { expect } = require("expect"); +const { fn } = require("jest-mock"); const webpack = require("webpack"); const Server = require("../../lib/Server"); const config = require("../fixtures/simple-config/webpack.config"); @@ -13,11 +16,11 @@ describe("bonjour option", () => { let mockDestroy; beforeEach(() => { - mockPublish = jest.fn(); - mockUnpublishAll = jest.fn((callback) => { + mockPublish = fn(); + mockUnpublishAll = fn((callback) => { callback(); }); - mockDestroy = jest.fn(); + mockDestroy = fn(); }); describe("as true", () => { @@ -27,15 +30,18 @@ describe("bonjour option", () => { let browser; let pageErrors; let consoleMessages; + let bonjourMock; beforeEach(async () => { - jest.mock("bonjour-service", () => ({ - Bonjour: jest.fn().mockImplementation(() => ({ - publish: mockPublish, - unpublishAll: mockUnpublishAll, - destroy: mockDestroy, - })), - })); + bonjourMock = mock.module("bonjour-service", { + namedExports: { + Bonjour: fn().mockImplementation(() => ({ + publish: mockPublish, + unpublishAll: mockUnpublishAll, + destroy: mockDestroy, + })), + }, + }); compiler = webpack(config); @@ -56,9 +62,10 @@ describe("bonjour option", () => { mockPublish.mockReset(); mockUnpublishAll.mockReset(); mockDestroy.mockReset(); + bonjourMock.restore(); }); - it("should call bonjour with correct params", async () => { + it("should call bonjour with correct params", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -83,13 +90,11 @@ describe("bonjour option", () => { expect(mockUnpublishAll).toHaveBeenCalledTimes(0); expect(mockDestroy).toHaveBeenCalledTimes(0); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -100,15 +105,18 @@ describe("bonjour option", () => { let browser; let pageErrors; let consoleMessages; + let bonjourMock; beforeEach(async () => { - jest.mock("bonjour-service", () => ({ - Bonjour: jest.fn().mockImplementation(() => ({ - publish: mockPublish, - unpublishAll: mockUnpublishAll, - destroy: mockDestroy, - })), - })); + bonjourMock = mock.module("bonjour-service", { + namedExports: { + Bonjour: fn().mockImplementation(() => ({ + publish: mockPublish, + unpublishAll: mockUnpublishAll, + destroy: mockDestroy, + })), + }, + }); compiler = webpack(config); @@ -125,9 +133,10 @@ describe("bonjour option", () => { afterEach(async () => { await browser.close(); await server.stop(); + bonjourMock.restore(); }); - it("should call bonjour with 'https' type", async () => { + it("should call bonjour with 'https' type", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -152,13 +161,11 @@ describe("bonjour option", () => { expect(mockUnpublishAll).toHaveBeenCalledTimes(0); expect(mockDestroy).toHaveBeenCalledTimes(0); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -169,15 +176,18 @@ describe("bonjour option", () => { let browser; let pageErrors; let consoleMessages; + let bonjourMock; beforeEach(async () => { - jest.mock("bonjour-service", () => ({ - Bonjour: jest.fn().mockImplementation(() => ({ - publish: mockPublish, - unpublishAll: mockUnpublishAll, - destroy: mockDestroy, - })), - })); + bonjourMock = mock.module("bonjour-service", { + namedExports: { + Bonjour: fn().mockImplementation(() => ({ + publish: mockPublish, + unpublishAll: mockUnpublishAll, + destroy: mockDestroy, + })), + }, + }); compiler = webpack(config); @@ -203,9 +213,10 @@ describe("bonjour option", () => { afterEach(async () => { await browser.close(); await server.stop(); + bonjourMock.restore(); }); - it("should apply bonjour options", async () => { + it("should apply bonjour options", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -231,13 +242,11 @@ describe("bonjour option", () => { expect(mockUnpublishAll).toHaveBeenCalledTimes(0); expect(mockDestroy).toHaveBeenCalledTimes(0); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -248,15 +257,18 @@ describe("bonjour option", () => { let browser; let pageErrors; let consoleMessages; + let bonjourMock; beforeEach(async () => { - jest.mock("bonjour-service", () => ({ - Bonjour: jest.fn().mockImplementation(() => ({ - publish: mockPublish, - unpublishAll: mockUnpublishAll, - destroy: mockDestroy, - })), - })); + bonjourMock = mock.module("bonjour-service", { + namedExports: { + Bonjour: fn().mockImplementation(() => ({ + publish: mockPublish, + unpublishAll: mockUnpublishAll, + destroy: mockDestroy, + })), + }, + }); compiler = webpack(config); @@ -285,9 +297,10 @@ describe("bonjour option", () => { afterEach(async () => { await browser.close(); await server.stop(); + bonjourMock.restore(); }); - it("should apply bonjour options", async () => { + it("should apply bonjour options", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -313,13 +326,11 @@ describe("bonjour option", () => { expect(mockUnpublishAll).toHaveBeenCalledTimes(0); expect(mockDestroy).toHaveBeenCalledTimes(0); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); }); diff --git a/test/e2e/built-in-routes.test.js b/test/e2e/built-in-routes.test.js index a0af821a2a..85f5825e97 100644 --- a/test/e2e/built-in-routes.test.js +++ b/test/e2e/built-in-routes.test.js @@ -1,5 +1,7 @@ "use strict"; +const { afterEach, beforeEach, describe, it } = require("node:test"); +const { expect } = require("expect"); const webpack = require("webpack"); const Server = require("../../lib/Server"); const config = require("../fixtures/client-config/webpack.config"); @@ -33,7 +35,7 @@ describe("Built in routes", () => { await server.stop(); }); - it("should handle GET request to invalidate endpoint", async () => { + it("should handle GET request to invalidate endpoint", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -51,16 +53,14 @@ describe("Built in routes", () => { expect(response.headers()["content-type"]).not.toBe("text/html"); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should handle GET request to directory index and list all middleware directories", async () => { + it("should handle GET request to directory index and list all middleware directories", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -76,22 +76,18 @@ describe("Built in routes", () => { }, ); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("directory list"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should handle HEAD request to directory index", async () => { + it("should handle HEAD request to directory index", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -112,22 +108,18 @@ describe("Built in routes", () => { }, ); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("directory list"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should handle GET request to magic async chunk", async () => { + it("should handle GET request to magic async chunk", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -140,18 +132,14 @@ describe("Built in routes", () => { waitUntil: "networkidle0", }); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); }); - it("should handle HEAD request to magic async chunk", async () => { + it("should handle HEAD request to magic async chunk", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -169,15 +157,11 @@ describe("Built in routes", () => { waitUntil: "networkidle0", }); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); }); }); @@ -206,7 +190,7 @@ describe("Built in routes", () => { await server.stop(); }); - it("should handle GET request to directory index and list all middleware directories", async () => { + it("should handle GET request to directory index and list all middleware directories", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -222,19 +206,15 @@ describe("Built in routes", () => { }, ); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("directory list"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); }); diff --git a/test/e2e/client-reconnect.test.js b/test/e2e/client-reconnect.test.js index eff831783d..e39a482df1 100644 --- a/test/e2e/client-reconnect.test.js +++ b/test/e2e/client-reconnect.test.js @@ -1,5 +1,7 @@ "use strict"; +const { afterEach, beforeEach, describe, it } = require("node:test"); + const webpack = require("webpack"); const Server = require("../../lib/Server"); const config = require("../fixtures/simple-config/webpack.config"); @@ -32,7 +34,7 @@ describe("client.reconnect option", () => { await browser.close(); }); - it("should try to reconnect unlimited times", async () => { + it("should try to reconnect unlimited times", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -46,7 +48,7 @@ describe("client.reconnect option", () => { }); try { - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); } finally { await server.stop(); } @@ -67,7 +69,7 @@ describe("client.reconnect option", () => { }, 1000); }); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -96,7 +98,7 @@ describe("client.reconnect option", () => { await browser.close(); }); - it("should not try to reconnect", async () => { + it("should not try to reconnect", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -110,7 +112,7 @@ describe("client.reconnect option", () => { }); try { - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); } finally { await server.stop(); } @@ -125,11 +127,9 @@ describe("client.reconnect option", () => { ); }); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -158,7 +158,7 @@ describe("client.reconnect option", () => { await browser.close(); }); - it("should try to reconnect 2 times", async () => { + it("should try to reconnect 2 times", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -172,7 +172,7 @@ describe("client.reconnect option", () => { }); try { - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); } finally { await server.stop(); } @@ -187,11 +187,9 @@ describe("client.reconnect option", () => { ); }); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); }); diff --git a/test/e2e/client.test.js b/test/e2e/client.test.js index 5c779a2cbd..eab2ce7051 100644 --- a/test/e2e/client.test.js +++ b/test/e2e/client.test.js @@ -1,5 +1,7 @@ "use strict"; +const { afterEach, beforeEach, describe, it } = require("node:test"); +const { expect } = require("expect"); const webpack = require("webpack"); const Server = require("../../lib/Server"); const config = require("../fixtures/client-config/webpack.config"); @@ -43,7 +45,7 @@ describe("client option", () => { await server.stop(); }); - it("responds with a 200 status code for / path", async () => { + it("responds with a 200 status code for / path", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -74,17 +76,13 @@ describe("client option", () => { // overlay should be true by default expect(server.options.client.overlay).toBe(true); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(webSocketRequests.map((request) => request.url)).toMatchSnapshot( - "webSockets", - ); + t.assert.snapshot(webSocketRequests.map((request) => request.url)); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -132,7 +130,7 @@ describe("client option", () => { await server.stop(); }); - it("responds with a websocket with the /foo/test/bar path", async () => { + it("responds with a websocket with the /foo/test/bar path", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -160,15 +158,11 @@ describe("client option", () => { waitUntil: "networkidle0", }); - expect(webSocketRequests.map((request) => request.url)).toMatchSnapshot( - "webSockets", - ); + t.assert.snapshot(webSocketRequests.map((request) => request.url)); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -204,7 +198,7 @@ describe("client option", () => { await server.stop(); }); - it("should disable client entry", async () => { + it("should disable client entry", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -232,17 +226,15 @@ describe("client option", () => { waitUntil: "networkidle0", }); - expect(webSocketRequests).toMatchSnapshot("webSockets"); + t.assert.snapshot(webSocketRequests); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); expect(await response.text()).not.toMatch(/client\/index\.js/); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -286,12 +278,12 @@ describe("client option", () => { await server.stop(); }); - it("should disable client entry", async () => { + it("should disable client entry", async (t) => { const response = await page.goto(`http://localhost:${port}/main.js`, { waitUntil: "networkidle0", }); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); const content = await response.text(); expect(content).toContain("CustomClientEntry.js"); diff --git a/test/e2e/compress.test.js b/test/e2e/compress.test.js index 4436292e8f..d938eb88db 100644 --- a/test/e2e/compress.test.js +++ b/test/e2e/compress.test.js @@ -1,5 +1,7 @@ "use strict"; +const { afterEach, beforeEach, describe, it } = require("node:test"); + const webpack = require("webpack"); const Server = require("../../lib/Server"); const config = require("../fixtures/simple-config-other/webpack.config"); @@ -33,7 +35,7 @@ describe("compress option", () => { await server.stop(); }); - it("should handle GET request to bundle file", async () => { + it("should handle GET request to bundle file", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -46,17 +48,13 @@ describe("compress option", () => { waitUntil: "networkidle0", }); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(response.headers()["content-encoding"]).toMatchSnapshot( - "response headers content-encoding", - ); + t.assert.snapshot(response.headers()["content-encoding"]); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -92,7 +90,7 @@ describe("compress option", () => { await server.stop(); }); - it("should handle GET request to bundle file", async () => { + it("should handle GET request to bundle file", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -105,17 +103,13 @@ describe("compress option", () => { waitUntil: "networkidle0", }); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(response.headers()["content-encoding"]).toMatchSnapshot( - "response headers content-encoding", - ); + t.assert.snapshot(response.headers()["content-encoding"]); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -151,7 +145,7 @@ describe("compress option", () => { await server.stop(); }); - it("should handle GET request to bundle file", async () => { + it("should handle GET request to bundle file", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -164,17 +158,13 @@ describe("compress option", () => { waitUntil: "networkidle0", }); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(response.headers()["content-encoding"]).toMatchSnapshot( - "response headers content-encoding", - ); + t.assert.snapshot(response.headers()["content-encoding"]); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); }); diff --git a/test/e2e/cross-origin-request.test.js b/test/e2e/cross-origin-request.test.js index d003024928..76bb7ed71c 100644 --- a/test/e2e/cross-origin-request.test.js +++ b/test/e2e/cross-origin-request.test.js @@ -1,5 +1,7 @@ "use strict"; +const { describe, it } = require("node:test"); +const { expect } = require("expect"); const webpack = require("webpack"); const Server = require("../../lib/Server"); const config = require("../fixtures/client-config/webpack.config"); diff --git a/test/e2e/entry.test.js b/test/e2e/entry.test.js index 311d87c333..b7d9fa673f 100644 --- a/test/e2e/entry.test.js +++ b/test/e2e/entry.test.js @@ -1,6 +1,8 @@ "use strict"; const path = require("node:path"); +const { describe, it } = require("node:test"); + const webpack = require("webpack"); const Server = require("../../lib/Server"); const config = require("../fixtures/client-config/webpack.config"); @@ -32,7 +34,7 @@ describe("entry", () => { "../fixtures/client-config/bar.js", ); - it("should work with single entry", async () => { + it("should work with single entry", async (t) => { const compiler = webpack({ ...config, entry: entryFirst }); const devServerOptions = { port, @@ -59,17 +61,15 @@ describe("entry", () => { waitUntil: "networkidle0", }); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it("should work with single array entry", async () => { + it("should work with single array entry", async (t) => { const compiler = webpack({ ...config, entry: [entryFirst, entrySecond] }); const devServerOptions = { port, @@ -96,17 +96,15 @@ describe("entry", () => { waitUntil: "networkidle0", }); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it("should work with object entry", async () => { + it("should work with object entry", async (t) => { const compiler = webpack({ ...config, entry: { @@ -138,17 +136,15 @@ describe("entry", () => { waitUntil: "networkidle0", }); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it("should work with dynamic entry", async () => { + it("should work with dynamic entry", async (t) => { const compiler = webpack({ ...config, entry: () => entryFirst }); const devServerOptions = { port, @@ -175,17 +171,15 @@ describe("entry", () => { waitUntil: "networkidle0", }); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it("should work with dynamic async entry", async () => { + it("should work with dynamic async entry", async (t) => { const compiler = webpack({ ...config, entry: () => @@ -218,17 +212,15 @@ describe("entry", () => { waitUntil: "networkidle0", }); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it("should work with multiple entries", async () => { + it("should work with multiple entries", async (t) => { const compiler = webpack({ ...config, entry: { @@ -269,15 +261,15 @@ describe("entry", () => { await page.addScriptTag({ url: `http://localhost:${port}/foo.js` }); await waitForConsoleLogFinished(consoleMessages); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it("should work with multiple entries #2", async () => { + it("should work with multiple entries #2", async (t) => { const compiler = webpack({ ...config, entry: { @@ -318,15 +310,15 @@ describe("entry", () => { await page.addScriptTag({ url: `http://localhost:${port}/bar.js` }); await waitForConsoleLogFinished(consoleMessages); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it('should work with multiple entries and "dependOn"', async () => { + it('should work with multiple entries and "dependOn"', async (t) => { const compiler = webpack({ ...config, entry: { @@ -365,15 +357,15 @@ describe("entry", () => { await page.addScriptTag({ url: `http://localhost:${port}/foo.js` }); await waitForConsoleLogFinished(consoleMessages); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it("should work with empty", async () => { + it("should work with empty", async (t) => { const compiler = webpack({ ...config, entry: {}, @@ -408,10 +400,8 @@ describe("entry", () => { waitUntil: "networkidle0", }); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); diff --git a/test/e2e/headers.test.js b/test/e2e/headers.test.js index efaddab452..bbd195fa26 100644 --- a/test/e2e/headers.test.js +++ b/test/e2e/headers.test.js @@ -1,5 +1,7 @@ "use strict"; +const { afterEach, beforeEach, describe, it } = require("node:test"); +const { expect } = require("expect"); const request = require("supertest"); const webpack = require("webpack"); const Server = require("../../lib/Server"); @@ -40,7 +42,7 @@ describe("headers option", () => { await server.stop(); }); - it("should handle GET request with headers", async () => { + it("should handle GET request with headers", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -53,17 +55,13 @@ describe("headers option", () => { waitUntil: "networkidle0", }); - expect(response.headers()["x-foo"]).toMatchSnapshot( - "response headers x-foo", - ); + t.assert.snapshot(response.headers()["x-foo"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -108,7 +106,7 @@ describe("headers option", () => { await server.stop(); }); - it("should handle GET request with headers", async () => { + it("should handle GET request with headers", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -121,21 +119,15 @@ describe("headers option", () => { waitUntil: "networkidle0", }); - expect(response.headers()["x-foo"]).toMatchSnapshot( - "response headers x-foo", - ); + t.assert.snapshot(response.headers()["x-foo"]); - expect(response.headers()["x-bar"]).toMatchSnapshot( - "response headers x-bar", - ); + t.assert.snapshot(response.headers()["x-bar"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -171,7 +163,7 @@ describe("headers option", () => { await server.stop(); }); - it("should handle GET request with headers as an array", async () => { + it("should handle GET request with headers as an array", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -184,17 +176,13 @@ describe("headers option", () => { waitUntil: "networkidle0", }); - expect(response.headers()["x-bar"]).toMatchSnapshot( - "response headers x-bar", - ); + t.assert.snapshot(response.headers()["x-bar"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -230,7 +218,7 @@ describe("headers option", () => { await server.stop(); }); - it("should handle GET request with headers as a function", async () => { + it("should handle GET request with headers as a function", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -243,17 +231,13 @@ describe("headers option", () => { waitUntil: "networkidle0", }); - expect(response.headers()["x-bar"]).toMatchSnapshot( - "response headers x-bar", - ); + t.assert.snapshot(response.headers()["x-bar"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -298,7 +282,7 @@ describe("headers option", () => { await server.stop(); }); - it("should handle GET request with headers", async () => { + it("should handle GET request with headers", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -311,21 +295,15 @@ describe("headers option", () => { waitUntil: "networkidle0", }); - expect(response.headers()["x-foo"]).toMatchSnapshot( - "response headers x-foo", - ); + t.assert.snapshot(response.headers()["x-foo"]); - expect(response.headers()["x-bar"]).toMatchSnapshot( - "response headers x-bar", - ); + t.assert.snapshot(response.headers()["x-bar"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -364,7 +342,7 @@ describe("headers option", () => { await server.stop(); }); - it("should handle GET request with headers as a function", async () => { + it("should handle GET request with headers as a function", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -377,17 +355,13 @@ describe("headers option", () => { waitUntil: "networkidle0", }); - expect(response.headers()["x-foo"]).toMatchSnapshot( - "response headers x-foo", - ); + t.assert.snapshot(response.headers()["x-foo"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -426,7 +400,7 @@ describe("headers option", () => { await server.stop(); }); - it("should handle HEAD request with headers", async () => { + it("should handle HEAD request with headers", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -439,14 +413,10 @@ describe("headers option", () => { waitUntil: "networkidle0", }); - expect(response.headers()["x-foo"]).toMatchSnapshot( - "response headers x-foo", - ); - expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(response.headers()["x-foo"]); + t.assert.snapshot(response.status()); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); const responseForHead = await req.get("/"); diff --git a/test/e2e/history-api-fallback.test.js b/test/e2e/history-api-fallback.test.js index b6506e85af..9c992e70dd 100644 --- a/test/e2e/history-api-fallback.test.js +++ b/test/e2e/history-api-fallback.test.js @@ -1,6 +1,9 @@ "use strict"; const path = require("node:path"); +const { afterEach, beforeEach, describe, it } = require("node:test"); +const { expect } = require("expect"); +const { spyOn } = require("jest-mock"); const webpack = require("webpack"); const Server = require("../../lib/Server"); const config2 = require("../fixtures/historyapifallback-2-config/webpack.config"); @@ -42,7 +45,7 @@ describe("historyApiFallback option", () => { await server.stop(); }); - it("should handle GET request to directory", async () => { + it("should handle GET request to directory", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -55,19 +58,15 @@ describe("historyApiFallback option", () => { waitUntil: "networkidle0", }); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -105,7 +104,7 @@ describe("historyApiFallback option", () => { await server.stop(); }); - it("should handle GET request to directory", async () => { + it("should handle GET request to directory", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -118,19 +117,15 @@ describe("historyApiFallback option", () => { waitUntil: "networkidle0", }); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -172,7 +167,7 @@ describe("historyApiFallback option", () => { await server.stop(); }); - it("should handle GET request to directory", async () => { + it("should handle GET request to directory", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -185,22 +180,18 @@ describe("historyApiFallback option", () => { waitUntil: "networkidle0", }); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should prefer static file over historyApiFallback", async () => { + it("should prefer static file over historyApiFallback", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -216,19 +207,15 @@ describe("historyApiFallback option", () => { }, ); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -267,7 +254,7 @@ describe("historyApiFallback option", () => { await server.stop(); }); - it("historyApiFallback should work and ignore static content", async () => { + it("historyApiFallback should work and ignore static content", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -280,19 +267,15 @@ describe("historyApiFallback option", () => { waitUntil: "networkidle0", }); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -343,7 +326,7 @@ describe("historyApiFallback option", () => { await server.stop(); }); - it("historyApiFallback respect rewrites for index", async () => { + it("historyApiFallback respect rewrites for index", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -356,22 +339,18 @@ describe("historyApiFallback option", () => { waitUntil: "networkidle0", }); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("historyApiFallback respect rewrites and shows index for unknown urls", async () => { + it("historyApiFallback respect rewrites and shows index for unknown urls", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -384,22 +363,18 @@ describe("historyApiFallback option", () => { waitUntil: "networkidle0", }); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("historyApiFallback respect any other specified rewrites", async () => { + it("historyApiFallback respect any other specified rewrites", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -412,19 +387,15 @@ describe("historyApiFallback option", () => { waitUntil: "networkidle0", }); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -438,7 +409,7 @@ describe("historyApiFallback option", () => { let consoleSpy; beforeEach(async () => { - consoleSpy = jest.spyOn(globalThis.console, "log"); + consoleSpy = spyOn(globalThis.console, "log"); compiler = webpack(config); @@ -467,7 +438,7 @@ describe("historyApiFallback option", () => { await server.stop(); }); - it("request to directory and log", async () => { + it("request to directory and log", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -480,13 +451,11 @@ describe("historyApiFallback option", () => { waitUntil: "networkidle0", }); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); expect(consoleSpy).toHaveBeenCalledWith( "Rewriting", @@ -496,11 +465,9 @@ describe("historyApiFallback option", () => { "/bar.html", ); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -514,7 +481,7 @@ describe("historyApiFallback option", () => { let consoleSpy; beforeEach(async () => { - consoleSpy = jest.spyOn(globalThis.console, "log"); + consoleSpy = spyOn(globalThis.console, "log"); compiler = webpack(config); @@ -543,7 +510,7 @@ describe("historyApiFallback option", () => { await server.stop(); }); - it("request to directory and log", async () => { + it("request to directory and log", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -556,13 +523,11 @@ describe("historyApiFallback option", () => { waitUntil: "networkidle0", }); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); expect(consoleSpy).toHaveBeenCalledWith( "Rewriting", @@ -572,11 +537,9 @@ describe("historyApiFallback option", () => { "/bar.html", ); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -616,7 +579,7 @@ describe("historyApiFallback option", () => { await server.stop(); }); - it("should take precedence over static files", async () => { + it("should take precedence over static files", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -629,22 +592,18 @@ describe("historyApiFallback option", () => { waitUntil: "networkidle0", }); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should perform HEAD request in same way as GET", async () => { + it("should perform HEAD request in same way as GET", async (t) => { await page.goto(`http://localhost:${port}/foo`, { waitUntil: "networkidle0", }); @@ -659,13 +618,11 @@ describe("historyApiFallback option", () => { }; }); - expect(responseGet.contentType).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(responseGet.contentType); - expect(responseGet.statusText).toMatchSnapshot("response status"); + t.assert.snapshot(responseGet.statusText); - expect(responseGet.text).toMatchSnapshot("response text"); + t.assert.snapshot(responseGet.text); const responseHead = await page.evaluate(async () => { const response = await fetch("/foo", { method: "HEAD" }); diff --git a/test/e2e/host.test.js b/test/e2e/host.test.js index fe79392ca4..d7a875a75e 100644 --- a/test/e2e/host.test.js +++ b/test/e2e/host.test.js @@ -1,6 +1,8 @@ "use strict"; const http = require("node:http"); +const { describe, it } = require("node:test"); +const { expect } = require("expect"); const webpack = require("webpack"); const Server = require("../../lib/Server"); const config = require("../fixtures/client-config/webpack.config"); @@ -71,7 +73,7 @@ describe("host", () => { ]; for (const host of hosts) { - it(`should work using "${host}" host and port as number`, async () => { + it(`should work using "${host}" host and port as number`, async (t) => { const compiler = webpack(config); const devServerOptions = { port }; @@ -134,18 +136,16 @@ describe("host", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it(`should work using "${host}" host and port as string`, async () => { + it(`should work using "${host}" host and port as string`, async (t) => { const compiler = webpack(config); const devServerOptions = { port: `${port}` }; @@ -208,18 +208,16 @@ describe("host", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it(`should work using "${host}" host and "auto" port`, async () => { + it(`should work using "${host}" host and "auto" port`, async (t) => { const compiler = webpack(config); process.env.WEBPACK_DEV_SERVER_BASE_PORT = port; @@ -286,11 +284,9 @@ describe("host", () => { waitUntil: "networkidle0", }); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); } finally { delete process.env.WEBPACK_DEV_SERVER_BASE_PORT; @@ -301,7 +297,6 @@ describe("host", () => { } // TODO need test on error - // eslint-disable-next-line jest/no-commented-out-tests // it(`should throw an error on invalid host`, async () => { // const compiler = webpack(config); // const server = new Server({ port, host: "unknown.unknown" }, compiler); diff --git a/test/e2e/hot-and-live-reload.test.js b/test/e2e/hot-and-live-reload.test.js index 9778b2cd5f..7b56ea840b 100644 --- a/test/e2e/hot-and-live-reload.test.js +++ b/test/e2e/hot-and-live-reload.test.js @@ -1,11 +1,10 @@ -/** - * @jest-environment node - */ - "use strict"; const path = require("node:path"); +const { afterEach, beforeEach, describe, it } = require("node:test"); +const { expect } = require("expect"); const fs = require("graceful-fs"); +const { fn, spyOn } = require("jest-mock"); const webpack = require("webpack"); const WebSocket = require("ws"); const Server = require("../../lib/Server"); @@ -267,7 +266,7 @@ describe("hot and live reload", () => { : "default"; // eslint-disable-next-line no-loop-func - it(`${mode.title} (${webSocketServerTitle})`, async () => { + it(`${mode.title} (${webSocketServerTitle})`, async (t) => { const webpackOptions = { ...reloadConfig, ...mode.webpackOptions }; const compiler = webpack(webpackOptions); const testDevServerOptions = mode.options || {}; @@ -452,8 +451,8 @@ describe("hot and live reload", () => { expect(backgroundColorAfter).toBe("rgb(255, 0, 0)"); } - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); }); } }); @@ -483,7 +482,7 @@ describe("simple hot config HMR plugin", () => { await server.stop(); }); - it("should register the HMR plugin before compilation is complete", async () => { + it("should register the HMR plugin before compilation is complete", async (t) => { let pluginFound = false; compiler.hooks.compilation.intercept({ @@ -514,13 +513,11 @@ describe("simple hot config HMR plugin", () => { waitUntil: "networkidle0", }); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -549,7 +546,7 @@ describe("simple hot config HMR plugin with already added HMR plugin", () => { await server.stop(); }); - it("should register the HMR plugin before compilation is complete", async () => { + it("should register the HMR plugin before compilation is complete", async (t) => { let pluginFound = false; compiler.hooks.compilation.intercept({ @@ -581,13 +578,11 @@ describe("simple hot config HMR plugin with already added HMR plugin", () => { waitUntil: "networkidle0", }); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -604,15 +599,16 @@ describe("simple config with already added HMR plugin", () => { plugins: [...config.plugins, new webpack.HotModuleReplacementPlugin()], }); - loggerWarnSpy = jest.fn(); + loggerWarnSpy = fn(); - getInfrastructureLoggerSpy = jest - .spyOn(compiler, "getInfrastructureLogger") - .mockImplementation(() => ({ - warn: loggerWarnSpy, - info: () => {}, - log: () => {}, - })); + getInfrastructureLoggerSpy = spyOn( + compiler, + "getInfrastructureLogger", + ).mockImplementation(() => ({ + warn: loggerWarnSpy, + info: () => {}, + log: () => {}, + })); }); afterEach(() => { @@ -679,7 +675,7 @@ describe("multi compiler hot config HMR plugin", () => { await server.stop(); }); - it("should register the HMR plugin before compilation is complete", async () => { + it("should register the HMR plugin before compilation is complete", async (t) => { let pluginFound = false; compiler.compilers[0].hooks.compilation.intercept({ @@ -710,13 +706,11 @@ describe("multi compiler hot config HMR plugin", () => { waitUntil: "networkidle0", }); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -742,7 +736,7 @@ describe("hot disabled HMR plugin", () => { await server.stop(); }); - it("should NOT register the HMR plugin before compilation is complete", async () => { + it("should NOT register the HMR plugin before compilation is complete", async (t) => { let pluginFound = false; compiler.hooks.compilation.intercept({ @@ -773,12 +767,10 @@ describe("hot disabled HMR plugin", () => { waitUntil: "networkidle0", }); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); diff --git a/test/e2e/ipc.test.js b/test/e2e/ipc.test.js index 519c9e1ea4..cf82afa22a 100644 --- a/test/e2e/ipc.test.js +++ b/test/e2e/ipc.test.js @@ -4,6 +4,8 @@ const http = require("node:http"); const net = require("node:net"); const os = require("node:os"); const path = require("node:path"); +const { describe, it } = require("node:test"); +const { expect } = require("expect"); const httpProxy = require("http-proxy"); const webpack = require("webpack"); const Server = require("../../lib/Server"); @@ -18,7 +20,7 @@ describe("web socket server URL", () => { for (const webSocketServer of webSocketServers) { const websocketURLProtocol = webSocketServer; - it(`should work with the "ipc" option using "true" value ("${webSocketServer}")`, async () => { + it(`should work with the "ipc" option using "true" value ("${webSocketServer}")`, async (t) => { const devServerHost = "localhost"; const proxyHost = devServerHost; const proxyPort = port1; @@ -95,10 +97,8 @@ describe("web socket server URL", () => { expect(webSocketRequest.url).toContain( `${websocketURLProtocol}://${devServerHost}:${proxyPort}/ws`, ); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -107,7 +107,7 @@ describe("web socket server URL", () => { } }); - it(`should work with the "ipc" option using "string" value ("${webSocketServer}")`, async () => { + it(`should work with the "ipc" option using "string" value ("${webSocketServer}")`, async (t) => { const isWindows = process.platform === "win32"; const pipePrefix = isWindows ? "\\\\.\\pipe\\" : os.tmpdir(); const pipeName = `webpack-dev-server.${process.pid}-1.sock`; @@ -189,10 +189,8 @@ describe("web socket server URL", () => { expect(webSocketRequest.url).toContain( `${websocketURLProtocol}://${devServerHost}:${proxyPort}/ws`, ); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); @@ -202,8 +200,8 @@ describe("web socket server URL", () => { }); // TODO un skip after implement new API - // eslint-disable-next-line jest/no-disabled-tests - it.skip(`should work with the "ipc" option using "string" value and remove old ("${webSocketServer}")`, async () => { + + it.skip(`should work with the "ipc" option using "string" value and remove old ("${webSocketServer}")`, async (t) => { const isWindows = process.platform === "win32"; const localRelative = path.relative(process.cwd(), `${os.tmpdir()}/`); const pipePrefix = isWindows ? "\\\\.\\pipe\\" : localRelative; @@ -301,10 +299,8 @@ describe("web socket server URL", () => { expect(webSocketRequest.url).toContain( `${websocketURLProtocol}://${devServerHost}:${proxyPort}/ws`, ); - expect( - consoleMessages.map((message) => message.text()), - ).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages.map((message) => message.text())); + t.assert.snapshot(pageErrors); } finally { proxy.close(); diff --git a/test/e2e/lazy-compilation.test.js b/test/e2e/lazy-compilation.test.js index 8bb5390fa5..c0a4c89b63 100644 --- a/test/e2e/lazy-compilation.test.js +++ b/test/e2e/lazy-compilation.test.js @@ -1,5 +1,7 @@ "use strict"; +const { describe, it } = require("node:test"); + const webpack = require("webpack"); const Server = require("../../lib/Server"); const lazyCompilationMultipleEntriesConfig = require("../fixtures/lazy-compilation-multiple-entries/webpack.config"); @@ -7,10 +9,9 @@ const lazyCompilationSingleEntryConfig = require("../fixtures/lazy-compilation-s const runBrowser = require("../helpers/run-browser"); const port = require("../ports-map")["lazy-compilation"]; -/* eslint-disable jest/no-disabled-tests */ describe("lazy compilation", () => { - // TODO jest freeze due webpack do not close `eventsource`, we should uncomment this after fix it on webpack side - it.skip("should work with single entry", async () => { + // TODO freezes because webpack doesn't close `eventsource`, uncomment once fixed upstream + it.skip("should work with single entry", async (t) => { const compiler = webpack(lazyCompilationSingleEntryConfig); const server = new Server({ port }, compiler); @@ -43,15 +44,15 @@ describe("lazy compilation", () => { }, 100); }); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it.skip("should work with multiple entries", async () => { + it.skip("should work with multiple entries", async (t) => { const compiler = webpack(lazyCompilationMultipleEntriesConfig); const server = new Server({ port }, compiler); @@ -99,8 +100,8 @@ describe("lazy compilation", () => { }, 100); }); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); diff --git a/test/e2e/logging.test.js b/test/e2e/logging.test.js index 9ba530ba3d..c97ee8395a 100644 --- a/test/e2e/logging.test.js +++ b/test/e2e/logging.test.js @@ -1,6 +1,8 @@ "use strict"; const path = require("node:path"); +const { describe, it } = require("node:test"); + const fs = require("graceful-fs"); const webpack = require("webpack"); const Server = require("../../lib/Server"); @@ -189,7 +191,7 @@ describe("logging", () => { for (const testCase of cases) { it(`${testCase.title} (${ webSocketServer.webSocketServer || "default" - })`, async () => { + })`, async (t) => { const compiler = webpack({ ...config, ...testCase.webpackOptions }); const devServerOptions = { port, @@ -223,7 +225,7 @@ describe("logging", () => { }); } - expect( + t.assert.snapshot( consoleMessages.map((message) => message .text() @@ -233,7 +235,7 @@ describe("logging", () => { "", ), ), - ).toMatchSnapshot(); + ); } finally { await browser.close(); await server.stop(); diff --git a/test/e2e/mime-types.test.js b/test/e2e/mime-types.test.js index ee71894d70..5dfe513fbc 100644 --- a/test/e2e/mime-types.test.js +++ b/test/e2e/mime-types.test.js @@ -1,5 +1,7 @@ "use strict"; +const { afterEach, beforeEach, describe, it } = require("node:test"); + const webpack = require("webpack"); const Server = require("../../lib/Server"); const config = require("../fixtures/mime-types-config/webpack.config"); @@ -43,7 +45,7 @@ describe("mimeTypes option", () => { await server.stop(); }); - it("should request file with different js mime type", async () => { + it("should request file with different js mime type", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -56,17 +58,13 @@ describe("mimeTypes option", () => { waitUntil: "networkidle0", }); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -106,7 +104,7 @@ describe("mimeTypes option", () => { await server.stop(); }); - it("should request file with different js mime type", async () => { + it("should request file with different js mime type", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -119,17 +117,13 @@ describe("mimeTypes option", () => { waitUntil: "networkidle0", }); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); }); diff --git a/test/e2e/module-federation.test.js b/test/e2e/module-federation.test.js index f1fa63144f..73ed96ef7b 100644 --- a/test/e2e/module-federation.test.js +++ b/test/e2e/module-federation.test.js @@ -1,5 +1,7 @@ "use strict"; +const { afterEach, beforeEach, describe, it } = require("node:test"); +const { expect } = require("expect"); const requireFromString = require("require-from-string"); const webpack = require("webpack"); const Server = require("../../lib/Server"); @@ -36,7 +38,7 @@ describe("Module federation", () => { await server.stop(); }); - it("should use the last entry export", async () => { + it("should use the last entry export", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -61,11 +63,9 @@ describe("Module federation", () => { expect(exports).toBe("entry2"); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -94,7 +94,7 @@ describe("Module federation", () => { await server.stop(); }); - it("should use the last entry export", async () => { + it("should use the last entry export", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -119,14 +119,12 @@ describe("Module federation", () => { expect(exports).toBe("entry2"); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should support the named entry export", async () => { + it("should support the named entry export", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -151,11 +149,9 @@ describe("Module federation", () => { expect(exports).toBe("entry1"); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -184,7 +180,7 @@ describe("Module federation", () => { await server.stop(); }); - it("should use the last entry export", async () => { + it("should use the last entry export", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -209,11 +205,9 @@ describe("Module federation", () => { expect(exports).toBe("entry2"); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); @@ -242,7 +236,7 @@ describe("Module federation", () => { await server.stop(); }); - it("should contain hot script in remoteEntry.js", async () => { + it("should contain hot script in remoteEntry.js", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -262,14 +256,12 @@ describe("Module federation", () => { expect(remoteEntryTextContent).toMatch(/webpack\/hot\/dev-server\.js/); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should contain hot script in main.js", async () => { + it("should contain hot script in main.js", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -286,11 +278,9 @@ describe("Module federation", () => { expect(mainEntryTextContent).toMatch(/webpack\/hot\/dev-server\.js/); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); }); diff --git a/test/e2e/multi-compiler.test.js b/test/e2e/multi-compiler.test.js index 73879d5323..a5f5d893c8 100644 --- a/test/e2e/multi-compiler.test.js +++ b/test/e2e/multi-compiler.test.js @@ -1,6 +1,8 @@ "use strict"; const path = require("node:path"); +const { describe, it } = require("node:test"); +const { expect } = require("expect"); const fs = require("graceful-fs"); const webpack = require("webpack"); const Server = require("../../lib/Server"); @@ -11,7 +13,7 @@ const runBrowser = require("../helpers/run-browser"); const port = require("../ports-map")["multi-compiler"]; describe("multi compiler", () => { - it("should work with one web target configuration and do nothing", async () => { + it("should work with one web target configuration and do nothing", async (t) => { const compiler = webpack(oneWebTargetConfiguration); const devServerOptions = { port, @@ -38,15 +40,15 @@ describe("multi compiler", () => { waitUntil: "networkidle0", }); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it("should work with web target configurations and do nothing", async () => { + it("should work with web target configurations and do nothing", async (t) => { const compiler = webpack(twoWebTargetConfiguration); const devServerOptions = { port, @@ -74,8 +76,8 @@ describe("multi compiler", () => { waitUntil: "networkidle0", }); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); pageErrors = []; consoleMessages = []; @@ -84,15 +86,15 @@ describe("multi compiler", () => { waitUntil: "networkidle0", }); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); } }); - it("should work with web target configurations when hot and live reloads are enabled, and do hot reload by default when changing own entries", async () => { + it("should work with web target configurations when hot and live reloads are enabled, and do hot reload by default when changing own entries", async (t) => { const compiler = webpack(twoWebTargetConfiguration); const devServerOptions = { port, @@ -144,8 +146,8 @@ describe("multi compiler", () => { await page.waitForNavigation({ waitUntil: "networkidle0" }); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); pageErrors = []; consoleMessages = []; @@ -158,8 +160,8 @@ describe("multi compiler", () => { await page.waitForNavigation({ waitUntil: "networkidle0" }); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); @@ -169,7 +171,7 @@ describe("multi compiler", () => { } }); - it("should work with web target configurations when only hot reload is enabled, and do hot reload when changing own entries", async () => { + it("should work with web target configurations when only hot reload is enabled, and do hot reload when changing own entries", async (t) => { const compiler = webpack(twoWebTargetConfiguration); const devServerOptions = { port, @@ -221,8 +223,8 @@ describe("multi compiler", () => { await page.waitForNavigation({ waitUntil: "networkidle0" }); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); pageErrors = []; consoleMessages = []; @@ -235,8 +237,8 @@ describe("multi compiler", () => { await page.waitForNavigation({ waitUntil: "networkidle0" }); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); @@ -246,7 +248,7 @@ describe("multi compiler", () => { } }); - it("should work with web target configurations when only live reload is enabled, and do live reload when changing own entries", async () => { + it("should work with web target configurations when only live reload is enabled, and do live reload when changing own entries", async (t) => { const compiler = webpack(twoWebTargetConfiguration); const devServerOptions = { port, @@ -290,8 +292,8 @@ describe("multi compiler", () => { await page.waitForNavigation({ waitUntil: "networkidle0" }); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); pageErrors = []; consoleMessages = []; @@ -304,8 +306,8 @@ describe("multi compiler", () => { await page.waitForNavigation({ waitUntil: "networkidle0" }); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); @@ -315,7 +317,7 @@ describe("multi compiler", () => { } }); - it("should work with web target configurations when only live reload is enabled and do live reload when changing other entries", async () => { + it("should work with web target configurations when only live reload is enabled and do live reload when changing other entries", async (t) => { const compiler = webpack(twoWebTargetConfiguration); const devServerOptions = { port, @@ -359,8 +361,8 @@ describe("multi compiler", () => { await page.waitForNavigation({ waitUntil: "networkidle0" }); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); pageErrors = []; consoleMessages = []; @@ -373,8 +375,8 @@ describe("multi compiler", () => { await page.waitForNavigation({ waitUntil: "networkidle0" }); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); @@ -384,7 +386,7 @@ describe("multi compiler", () => { } }); - it("should work with universal configuration and do nothing", async () => { + it("should work with universal configuration and do nothing", async (t) => { const compiler = webpack(universalConfiguration); const devServerOptions = { port, @@ -426,11 +428,11 @@ describe("multi compiler", () => { await server.stop(); } - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); }); - it("should work with universal configuration when hot and live reloads are enabled, and do hot reload for browser compiler by default when browser entry changed", async () => { + it("should work with universal configuration when hot and live reloads are enabled, and do hot reload for browser compiler by default when browser entry changed", async (t) => { const compiler = webpack(universalConfiguration); const devServerOptions = { port, @@ -497,8 +499,8 @@ describe("multi compiler", () => { await page.waitForNavigation({ waitUntil: "networkidle0" }); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); @@ -508,7 +510,7 @@ describe("multi compiler", () => { } }); - it("should work with universal configuration when only hot reload is enabled, and do hot reload for browser compiler when browser entry changed", async () => { + it("should work with universal configuration when only hot reload is enabled, and do hot reload for browser compiler when browser entry changed", async (t) => { const compiler = webpack(universalConfiguration); const devServerOptions = { port, @@ -570,8 +572,8 @@ describe("multi compiler", () => { await page.waitForNavigation({ waitUntil: "networkidle0" }); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); @@ -580,7 +582,7 @@ describe("multi compiler", () => { } }); - it("should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing browser and server entries", async () => { + it("should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing browser and server entries", async (t) => { const compiler = webpack(universalConfiguration); const devServerOptions = { port, @@ -639,8 +641,8 @@ describe("multi compiler", () => { await page.waitForNavigation({ waitUntil: "networkidle0" }); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); pageErrors = []; consoleMessages = []; @@ -656,8 +658,8 @@ describe("multi compiler", () => { await page.waitForNavigation({ waitUntil: "networkidle0" }); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); @@ -667,7 +669,7 @@ describe("multi compiler", () => { } }); - it("should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing server and browser entries", async () => { + it("should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing server and browser entries", async (t) => { const compiler = webpack(universalConfiguration); const devServerOptions = { port, @@ -726,8 +728,8 @@ describe("multi compiler", () => { await page.waitForNavigation({ waitUntil: "networkidle0" }); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); pageErrors = []; consoleMessages = []; @@ -743,8 +745,8 @@ describe("multi compiler", () => { await page.waitForNavigation({ waitUntil: "networkidle0" }); - expect(consoleMessages).toMatchSnapshot("console messages"); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(consoleMessages); + t.assert.snapshot(pageErrors); } finally { await browser.close(); await server.stop(); diff --git a/test/e2e/on-listening.test.js b/test/e2e/on-listening.test.js index 1e2be08a9d..14c5ac231a 100644 --- a/test/e2e/on-listening.test.js +++ b/test/e2e/on-listening.test.js @@ -1,5 +1,7 @@ "use strict"; +const { afterEach, beforeEach, describe, it } = require("node:test"); +const { expect } = require("expect"); const webpack = require("webpack"); const Server = require("../../lib/Server"); const config = require("../fixtures/client-config/webpack.config"); @@ -58,7 +60,7 @@ describe("onListening option", () => { await server.stop(); }); - it("should handle GET request to /listening/some/path route", async () => { + it("should handle GET request to /listening/some/path route", async (t) => { page .on("console", (message) => { consoleMessages.push(message); @@ -76,22 +78,18 @@ describe("onListening option", () => { expect(onListeningIsRunning).toBe(true); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); - it("should handle POST request to /listening/some/path route", async () => { + it("should handle POST request to /listening/some/path route", async (t) => { await page.setRequestInterception(true); page @@ -116,18 +114,14 @@ describe("onListening option", () => { expect(onListeningIsRunning).toBe(true); - expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type", - ); + t.assert.snapshot(response.headers()["content-type"]); - expect(response.status()).toMatchSnapshot("response status"); + t.assert.snapshot(response.status()); - expect(await response.text()).toMatchSnapshot("response text"); + t.assert.snapshot(await response.text()); - expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( - "console messages", - ); + t.assert.snapshot(consoleMessages.map((message) => message.text())); - expect(pageErrors).toMatchSnapshot("page errors"); + t.assert.snapshot(pageErrors); }); }); diff --git a/test/e2e/options-middleware.test.js b/test/e2e/options-middleware.test.js index 1bc05cd64b..064fa44032 100644 --- a/test/e2e/options-middleware.test.js +++ b/test/e2e/options-middleware.test.js @@ -1,5 +1,7 @@ "use strict"; +const { describe, it } = require("node:test"); +const { expect } = require("expect"); const Express = require("express"); const webpack = require("webpack"); const Server = require("../../lib/Server"); diff --git a/test/e2e/overlay.test.js b/test/e2e/overlay.test.js index 5ccb678bdd..f7bdbbba72 100644 --- a/test/e2e/overlay.test.js +++ b/test/e2e/overlay.test.js @@ -1,7 +1,10 @@ "use strict"; const path = require("node:path"); +const { describe, it, mock } = require("node:test"); +const { expect } = require("expect"); const fs = require("graceful-fs"); +const { fn } = require("jest-mock"); const prettier = require("prettier"); const waitForExpect = require("wait-for-expect"); const webpack = require("webpack"); @@ -70,7 +73,7 @@ const delay = (ms) => }); describe("overlay", () => { - it("should show a warning for initial compilation", async () => { + it("should show a warning for initial compilation", async (t) => { const compiler = webpack(config); new WarningPlugin().apply(compiler); @@ -99,23 +102,23 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( + t.assert.snapshot( await prettier.format(pageHtml, { parser: "html", }), - ).toMatchSnapshot("page html"); - expect( + ); + t.assert.snapshot( await prettier.format(overlayHtml, { parser: "html", }), - ).toMatchSnapshot("overlay html"); + ); } finally { await browser.close(); await server.stop(); } }); - it("should show an error for initial compilation", async () => { + it("should show an error for initial compilation", async (t) => { const compiler = webpack(config); new ErrorPlugin().apply(compiler); @@ -144,23 +147,23 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( + t.assert.snapshot( await prettier.format(pageHtml, { parser: "html", }), - ).toMatchSnapshot("page html"); - expect( + ); + t.assert.snapshot( await prettier.format(overlayHtml, { parser: "html", }), - ).toMatchSnapshot("overlay html"); + ); } finally { await browser.close(); await server.stop(); } }); - it("should show a warning and error for initial compilation", async () => { + it("should show a warning and error for initial compilation", async (t) => { const compiler = webpack(config); new WarningPlugin().apply(compiler); @@ -193,23 +196,23 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( + t.assert.snapshot( await prettier.format(pageHtml, { parser: "html", }), - ).toMatchSnapshot("page html"); - expect( + ); + t.assert.snapshot( await prettier.format(overlayHtml, { parser: "html", }), - ).toMatchSnapshot("overlay html"); + ); } finally { await browser.close(); await server.stop(); } }); - it("should show an ansi formatted error for initial compilation", async () => { + it("should show an ansi formatted error for initial compilation", async (t) => { const compiler = webpack(config); new ErrorPlugin( @@ -240,23 +243,23 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( + t.assert.snapshot( await prettier.format(pageHtml, { parser: "html", }), - ).toMatchSnapshot("page html"); - expect( + ); + t.assert.snapshot( await prettier.format(overlayHtml, { parser: "html", }), - ).toMatchSnapshot("overlay html"); + ); } finally { await browser.close(); await server.stop(); } }); - it("should show a warning and error for initial compilation and protects against xss", async () => { + it("should show a warning and error for initial compilation and protects against xss", async (t) => { const compiler = webpack(config); new WarningPlugin("strong").apply(compiler); @@ -286,23 +289,23 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( + t.assert.snapshot( await prettier.format(pageHtml, { parser: "html", }), - ).toMatchSnapshot("page html"); - expect( + ); + t.assert.snapshot( await prettier.format(overlayHtml, { parser: "html", }), - ).toMatchSnapshot("overlay html"); + ); } finally { await browser.close(); await server.stop(); } }); - it("should not show initially, then show on an error, then hide on fix", async () => { + it("should not show initially, then show on an error, then hide on fix", async (t) => { const compiler = webpack(config); const devServerOptions = { port, @@ -322,11 +325,11 @@ describe("overlay", () => { let overlayHandle = await page.$("#webpack-dev-server-client-overlay"); expect(overlayHandle).toBeNull(); - expect( + t.assert.snapshot( await prettier.format(pageHtml, { parser: "html", }), - ).toMatchSnapshot("page html initial"); + ); const pathToFile = path.resolve( __dirname, @@ -346,16 +349,16 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( + t.assert.snapshot( await prettier.format(pageHtml, { parser: "html", }), - ).toMatchSnapshot("page html with error"); - expect( + ); + t.assert.snapshot( await prettier.format(overlayHtml, { parser: "html", }), - ).toMatchSnapshot("overlay html"); + ); fs.writeFileSync(pathToFile, originalCode); @@ -367,18 +370,18 @@ describe("overlay", () => { overlayHandle = await page.$("#webpack-dev-server-client-overlay"); expect(overlayHandle).toBeNull(); - expect( + t.assert.snapshot( await prettier.format(pageHtml, { parser: "html", }), - ).toMatchSnapshot("page html after fix error"); + ); } finally { await browser.close(); await server.stop(); } }); - it("should not show initially, then show on an error, then show other error, then hide on fix", async () => { + it("should not show initially, then show on an error, then show other error, then hide on fix", async (t) => { const compiler = webpack(config); const devServerOptions = { port, @@ -398,11 +401,11 @@ describe("overlay", () => { let overlayHandle = await page.$("#webpack-dev-server-client-overlay"); expect(overlayHandle).toBeNull(); - expect( + t.assert.snapshot( await prettier.format(pageHtml, { parser: "html", }), - ).toMatchSnapshot("page html initial"); + ); const pathToFile = path.resolve( __dirname, @@ -422,16 +425,16 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( + t.assert.snapshot( await prettier.format(pageHtml, { parser: "html", }), - ).toMatchSnapshot("page html with error"); - expect( + ); + t.assert.snapshot( await prettier.format(overlayHtml, { parser: "html", }), - ).toMatchSnapshot("overlay html"); + ); fs.writeFileSync(pathToFile, "`;a"); @@ -446,16 +449,16 @@ describe("overlay", () => { overlayFrame = await overlayHandle.contentFrame(); overlayHtml = await overlayFrame.evaluate(() => document.body.outerHTML); - expect( + t.assert.snapshot( await prettier.format(pageHtml, { parser: "html", }), - ).toMatchSnapshot("page html with other error"); - expect( + ); + t.assert.snapshot( await prettier.format(overlayHtml, { parser: "html", }), - ).toMatchSnapshot("overlay html"); + ); fs.writeFileSync(pathToFile, originalCode); @@ -467,18 +470,18 @@ describe("overlay", () => { overlayHandle = await page.$("#webpack-dev-server-client-overlay"); expect(overlayHandle).toBeNull(); - expect( + t.assert.snapshot( await prettier.format(pageHtml, { parser: "html", }), - ).toMatchSnapshot("page html after fix error"); + ); } finally { await browser.close(); await server.stop(); } }); - it("should not show initially, then show on an error and allow to close", async () => { + it("should not show initially, then show on an error and allow to close", async (t) => { const compiler = webpack(config); const devServerOptions = { port, @@ -498,11 +501,11 @@ describe("overlay", () => { let overlayHandle = await page.$("#webpack-dev-server-client-overlay"); expect(overlayHandle).toBeNull(); - expect( + t.assert.snapshot( await prettier.format(pageHtml, { parser: "html", }), - ).toMatchSnapshot("page html initial"); + ); const pathToFile = path.resolve( __dirname, @@ -522,16 +525,16 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( + t.assert.snapshot( await prettier.format(pageHtml, { parser: "html", }), - ).toMatchSnapshot("page html with error"); - expect( + ); + t.assert.snapshot( await prettier.format(overlayHtml, { parser: "html", }), - ).toMatchSnapshot("overlay html"); + ); const frame = await page .frames() @@ -549,11 +552,11 @@ describe("overlay", () => { overlayHandle = await page.$("#webpack-dev-server-client-overlay"); expect(overlayHandle).toBeNull(); - expect( + t.assert.snapshot( await prettier.format(pageHtml, { parser: "html", }), - ).toMatchSnapshot("page html after close"); + ); fs.writeFileSync(pathToFile, originalCode); } finally { @@ -563,8 +566,10 @@ describe("overlay", () => { }); it("should open editor when error with file info is clicked", async () => { - const mockLaunchEditorCb = jest.fn(); - jest.mock("launch-editor", () => mockLaunchEditorCb); + const mockLaunchEditorCb = fn(); + const launchEditorMock = mock.module("launch-editor", { + defaultExport: mockLaunchEditorCb, + }); const compiler = webpack(config); const devServerOptions = { @@ -607,10 +612,11 @@ describe("overlay", () => { } finally { await browser.close(); await server.stop(); + launchEditorMock.restore(); } }); - it('should not show a warning when "client.overlay" is "false"', async () => { + it('should not show a warning when "client.overlay" is "false"', async (t) => { const compiler = webpack(config); new WarningPlugin().apply(compiler); @@ -639,18 +645,18 @@ describe("overlay", () => { const overlayHandle = await page.$("#webpack-dev-server-client-overlay"); expect(overlayHandle).toBeNull(); - expect( + t.assert.snapshot( await prettier.format(pageHtml, { parser: "html", }), - ).toMatchSnapshot("page html"); + ); } finally { await browser.close(); await server.stop(); } }); - it('should not show a warning when "client.overlay.warnings" is "false"', async () => { + it('should not show a warning when "client.overlay.warnings" is "false"', async (t) => { const compiler = webpack(config); new WarningPlugin().apply(compiler); @@ -681,11 +687,11 @@ describe("overlay", () => { const overlayHandle = await page.$("#webpack-dev-server-client-overlay"); expect(overlayHandle).toBeNull(); - expect( + t.assert.snapshot( await prettier.format(pageHtml, { parser: "html", }), - ).toMatchSnapshot("page html"); + ); } finally { await browser.close(); await server.stop(); @@ -734,7 +740,7 @@ describe("overlay", () => { } }); - it("should show warning when it is not filtered", async () => { + it("should show warning when it is not filtered", async (t) => { const compiler = webpack(config); new WarningPlugin("Unfiltered warning").apply(compiler); @@ -770,23 +776,23 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( + t.assert.snapshot( await prettier.format(pageHtml, { parser: "html", }), - ).toMatchSnapshot("page html"); - expect( + ); + t.assert.snapshot( await prettier.format(overlayHtml, { parser: "html", }), - ).toMatchSnapshot("overlay html"); + ); } finally { await browser.close(); await server.stop(); } }); - it('should show a warning when "client.overlay" is "true"', async () => { + it('should show a warning when "client.overlay" is "true"', async (t) => { const compiler = webpack(config); new WarningPlugin().apply(compiler); @@ -818,23 +824,23 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( + t.assert.snapshot( await prettier.format(pageHtml, { parser: "html", }), - ).toMatchSnapshot("page html"); - expect( + ); + t.assert.snapshot( await prettier.format(overlayHtml, { parser: "html", }), - ).toMatchSnapshot("overlay html"); + ); } finally { await browser.close(); await server.stop(); } }); - it('should show a warning when "client.overlay.warnings" is "true"', async () => { + it('should show a warning when "client.overlay.warnings" is "true"', async (t) => { const compiler = webpack(config); new WarningPlugin().apply(compiler); @@ -868,23 +874,23 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( + t.assert.snapshot( await prettier.format(pageHtml, { parser: "html", }), - ).toMatchSnapshot("page html"); - expect( + ); + t.assert.snapshot( await prettier.format(overlayHtml, { parser: "html", }), - ).toMatchSnapshot("overlay html"); + ); } finally { await browser.close(); await server.stop(); } }); - it('should show a warning when "client.overlay.errors" is "true"', async () => { + it('should show a warning when "client.overlay.errors" is "true"', async (t) => { const compiler = webpack(config); new WarningPlugin().apply(compiler); @@ -918,23 +924,23 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( + t.assert.snapshot( await prettier.format(pageHtml, { parser: "html", }), - ).toMatchSnapshot("page html"); - expect( + ); + t.assert.snapshot( await prettier.format(overlayHtml, { parser: "html", }), - ).toMatchSnapshot("overlay html"); + ); } finally { await browser.close(); await server.stop(); } }); - it('should not show an error when "client.overlay" is "false"', async () => { + it('should not show an error when "client.overlay" is "false"', async (t) => { const compiler = webpack(config); new ErrorPlugin().apply(compiler); @@ -963,18 +969,18 @@ describe("overlay", () => { const overlayHandle = await page.$("#webpack-dev-server-client-overlay"); expect(overlayHandle).toBeNull(); - expect( + t.assert.snapshot( await prettier.format(pageHtml, { parser: "html", }), - ).toMatchSnapshot("page html"); + ); } finally { await browser.close(); await server.stop(); } }); - it('should not show an error when "client.overlay.errors" is "false"', async () => { + it('should not show an error when "client.overlay.errors" is "false"', async (t) => { const compiler = webpack(config); new ErrorPlugin().apply(compiler); @@ -1005,11 +1011,11 @@ describe("overlay", () => { const overlayHandle = await page.$("#webpack-dev-server-client-overlay"); expect(overlayHandle).toBeNull(); - expect( + t.assert.snapshot( await prettier.format(pageHtml, { parser: "html", }), - ).toMatchSnapshot("page html"); + ); } finally { await browser.close(); await server.stop(); @@ -1059,7 +1065,7 @@ describe("overlay", () => { } }); - it("should show error when it is not filtered", async () => { + it("should show error when it is not filtered", async (t) => { const compiler = webpack(config); new ErrorPlugin("Unfiltered error").apply(compiler); @@ -1095,23 +1101,23 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( + t.assert.snapshot( await prettier.format(pageHtml, { parser: "html", }), - ).toMatchSnapshot("page html"); - expect( + ); + t.assert.snapshot( await prettier.format(overlayHtml, { parser: "html", }), - ).toMatchSnapshot("overlay html"); + ); } finally { await browser.close(); await server.stop(); } }); - it('should show an error when "client.overlay" is "true"', async () => { + it('should show an error when "client.overlay" is "true"', async (t) => { const compiler = webpack(config); new ErrorPlugin().apply(compiler); @@ -1143,23 +1149,23 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( + t.assert.snapshot( await prettier.format(pageHtml, { parser: "html", }), - ).toMatchSnapshot("page html"); - expect( + ); + t.assert.snapshot( await prettier.format(overlayHtml, { parser: "html", }), - ).toMatchSnapshot("overlay html"); + ); } finally { await browser.close(); await server.stop(); } }); - it("should show overlay when Trusted Types are enabled", async () => { + it("should show overlay when Trusted Types are enabled", async (t) => { const compiler = webpack(trustedTypesConfig); new ErrorPlugin().apply(compiler); @@ -1204,23 +1210,23 @@ describe("overlay", () => { /requires 'TrustedHTML' assignment/.test(item), ), ).toHaveLength(0); - expect( + t.assert.snapshot( await prettier.format(pageHtml, { parser: "html", }), - ).toMatchSnapshot("page html"); - expect( + ); + t.assert.snapshot( await prettier.format(overlayHtml, { parser: "html", }), - ).toMatchSnapshot("overlay html"); + ); } finally { await browser.close(); await server.stop(); } }); - it("should show overlay when Trusted Types are enabled and the \"require-trusted-types-for 'script'\" header was used", async () => { + it("should show overlay when Trusted Types are enabled and the \"require-trusted-types-for 'script'\" header was used", async (t) => { const compiler = webpack(trustedTypesConfig); new ErrorPlugin().apply(compiler); @@ -1275,23 +1281,23 @@ describe("overlay", () => { /requires 'TrustedHTML' assignment/.test(item), ), ).toHaveLength(0); - expect( + t.assert.snapshot( await prettier.format(pageHtml, { parser: "html", }), - ).toMatchSnapshot("page html"); - expect( + ); + t.assert.snapshot( await prettier.format(overlayHtml, { parser: "html", }), - ).toMatchSnapshot("overlay html"); + ); } finally { await browser.close(); await server.stop(); } }); - it("should not show overlay when Trusted Types are enabled, but policy is not allowed", async () => { + it("should not show overlay when Trusted Types are enabled, but policy is not allowed", async (t) => { const compiler = webpack(trustedTypesConfig); new ErrorPlugin().apply(compiler); @@ -1321,18 +1327,18 @@ describe("overlay", () => { const pageHtml = await page.evaluate(() => document.body.outerHTML); const overlayHandle = await page.$("#webpack-dev-server-client-overlay"); expect(overlayHandle).toBeNull(); - expect( + t.assert.snapshot( await prettier.format(pageHtml, { parser: "html", }), - ).toMatchSnapshot("page html"); + ); } finally { await browser.close(); await server.stop(); } }); - it('should show an error when "client.overlay.errors" is "true"', async () => { + it('should show an error when "client.overlay.errors" is "true"', async (t) => { const compiler = webpack(config); new ErrorPlugin().apply(compiler); @@ -1366,23 +1372,23 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( + t.assert.snapshot( await prettier.format(pageHtml, { parser: "html", }), - ).toMatchSnapshot("page html"); - expect( + ); + t.assert.snapshot( await prettier.format(overlayHtml, { parser: "html", }), - ).toMatchSnapshot("overlay html"); + ); } finally { await browser.close(); await server.stop(); } }); - it('should show an error when "client.overlay.warnings" is "true"', async () => { + it('should show an error when "client.overlay.warnings" is "true"', async (t) => { const compiler = webpack(config); new WarningPlugin().apply(compiler); @@ -1416,23 +1422,23 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( + t.assert.snapshot( await prettier.format(pageHtml, { parser: "html", }), - ).toMatchSnapshot("page html"); - expect( + ); + t.assert.snapshot( await prettier.format(overlayHtml, { parser: "html", }), - ).toMatchSnapshot("overlay html"); + ); } finally { await browser.close(); await server.stop(); } }); - it("should show a warning and hide them after closing connection", async () => { + it("should show a warning and hide them after closing connection", async (t) => { const compiler = webpack(config); new WarningPlugin().apply(compiler); @@ -1465,16 +1471,16 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( + t.assert.snapshot( await prettier.format(pageHtml, { parser: "html", }), - ).toMatchSnapshot("page html"); - expect( + ); + t.assert.snapshot( await prettier.format(overlayHtml, { parser: "html", }), - ).toMatchSnapshot("overlay html"); + ); await server.stop(); @@ -1492,17 +1498,18 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( + t.assert.snapshot( await prettier.format(pageHtmlAfterClose, { parser: "html", }), - ).toMatchSnapshot("page html"); + ); } finally { await browser.close(); + await server.stop(); } }); - it("should show an error after invalidation", async () => { + it("should show an error after invalidation", async (t) => { const compiler = webpack(config); new ErrorPlugin("Error from compilation", 1).apply(compiler); @@ -1545,23 +1552,23 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( + t.assert.snapshot( await prettier.format(pageHtml, { parser: "html", }), - ).toMatchSnapshot("page html"); - expect( + ); + t.assert.snapshot( await prettier.format(overlayHtml, { parser: "html", }), - ).toMatchSnapshot("overlay html"); + ); } finally { await browser.close(); await server.stop(); } }); - it("should show a warning after invalidation", async () => { + it("should show a warning after invalidation", async (t) => { const compiler = webpack(config); new WarningPlugin("Warning from compilation", 1).apply(compiler); @@ -1604,23 +1611,23 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( + t.assert.snapshot( await prettier.format(pageHtml, { parser: "html", }), - ).toMatchSnapshot("page html"); - expect( + ); + t.assert.snapshot( await prettier.format(overlayHtml, { parser: "html", }), - ).toMatchSnapshot("overlay html"); + ); } finally { await browser.close(); await server.stop(); } }); - it("should show error for uncaught runtime error", async () => { + it("should show error for uncaught runtime error", async (t) => { const compiler = webpack(config); const server = new Server( @@ -1654,11 +1661,11 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( + t.assert.snapshot( await prettier.format(overlayHtml, { parser: "html", }), - ).toMatchSnapshot("overlay html"); + ); } finally { await browser.close(); await server.stop(); @@ -1707,7 +1714,7 @@ describe("overlay", () => { } }); - it("should show error for uncaught promise rejection", async () => { + it("should show error for uncaught promise rejection", async (t) => { const compiler = webpack(config); const server = new Server( @@ -1743,11 +1750,11 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( + t.assert.snapshot( await prettier.format(overlayHtml, { parser: "html", }), - ).toMatchSnapshot("overlay html"); + ); } finally { await browser.close(); await server.stop(); @@ -1843,7 +1850,7 @@ describe("overlay", () => { } }); - it('should show overlay when "Content-Security-Policy" is "default-src \'self\'" was used', async () => { + it('should show overlay when "Content-Security-Policy" is "default-src \'self\'" was used', async (t) => { const compiler = webpack({ ...config, devtool: false }); new ErrorPlugin().apply(compiler); @@ -1884,12 +1891,12 @@ describe("overlay", () => { () => document.body.outerHTML, ); - expect( + t.assert.snapshot( await prettier.format(pageHtml, { parser: "html", }), - ).toMatchSnapshot("page html"); - expect( + ); + t.assert.snapshot( await prettier.format( overlayHtml.replace( /", diff --git a/test/e2e/port.test.js b/test/e2e/port.test.js index c179eea6df..4930453eca 100644 --- a/test/e2e/port.test.js +++ b/test/e2e/port.test.js @@ -1,12 +1,12 @@ -"use strict"; - -const { describe, it } = require("node:test"); -const { expect } = require("expect"); -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/client-config/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const { port } = require("../ports-map"); +import { describe, it } from "node:test"; +import { expect } from "expect"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/client-config/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; + +const { port } = portsMap; describe("port", () => { const ports = [ diff --git a/test/e2e/progress.test.js b/test/e2e/progress.test.js index d5e378acb3..c6d7d4dfa3 100644 --- a/test/e2e/progress.test.js +++ b/test/e2e/progress.test.js @@ -1,14 +1,16 @@ -"use strict"; - -const path = require("node:path"); -const { describe, it } = require("node:test"); -const { expect } = require("expect"); -const fs = require("graceful-fs"); -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const reloadConfig = require("../fixtures/reload-config-2/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const port = require("../ports-map").progress; +import path from "node:path"; +import { describe, it } from "node:test"; +import { fileURLToPath } from "node:url"; +import { expect } from "expect"; +import fs from "graceful-fs"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import reloadConfig from "../fixtures/reload-config-2/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const port = portsMap.progress; const cssFilePath = path.resolve( __dirname, diff --git a/test/e2e/range-header.test.js b/test/e2e/range-header.test.js index c33ebc8e5e..45722b7372 100644 --- a/test/e2e/range-header.test.js +++ b/test/e2e/range-header.test.js @@ -1,12 +1,12 @@ -"use strict"; - -const { after, before, describe, it } = require("node:test"); -const { expect } = require("expect"); -const request = require("supertest"); -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/static-config/webpack.config"); -const port = require("../ports-map")["range-header"]; +import { after, before, describe, it } from "node:test"; +import { expect } from "expect"; +import request from "supertest"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/static-config/webpack.config.js"; +import portsMap from "../ports-map.js"; + +const port = portsMap["range-header"]; describe("'Range' header", () => { let compiler; diff --git a/test/e2e/server-and-client-transport.test.js b/test/e2e/server-and-client-transport.test.js index 5403dbfe90..5e7f1e7542 100644 --- a/test/e2e/server-and-client-transport.test.js +++ b/test/e2e/server-and-client-transport.test.js @@ -1,14 +1,15 @@ -"use strict"; - -const { describe, it } = require("node:test"); -const { expect } = require("expect"); -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const WebsocketServer = require("../../lib/servers/WebsocketServer"); -const defaultConfig = require("../fixtures/provide-plugin-default/webpack.config"); -const wsConfig = require("../fixtures/provide-plugin-ws-config/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const port = require("../ports-map")["server-and-client-transport"]; +import { describe, it } from "node:test"; +import { fileURLToPath } from "node:url"; +import { expect } from "expect"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import WebsocketServer from "../../lib/servers/WebsocketServer.js"; +import defaultConfig from "../fixtures/provide-plugin-default/webpack.config.js"; +import wsConfig from "../fixtures/provide-plugin-ws-config/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; + +const port = portsMap["server-and-client-transport"]; describe("server and client transport", () => { it('should use default web socket server ("ws")', async (t) => { @@ -202,7 +203,9 @@ describe("server and client transport", () => { client: { webSocketTransport: "ws", }, - webSocketServer: require.resolve("../../lib/servers/WebsocketServer"), + webSocketServer: fileURLToPath( + import.meta.resolve("../../lib/servers/WebsocketServer.js"), + ), }; const server = new Server(devServerOptions, compiler); @@ -241,7 +244,9 @@ describe("server and client transport", () => { webSocketTransport: "ws", }, webSocketServer: { - type: require.resolve("../../lib/servers/WebsocketServer"), + type: fileURLToPath( + import.meta.resolve("../../lib/servers/WebsocketServer.js"), + ), }, }; const server = new Server(devServerOptions, compiler); diff --git a/test/e2e/server.test.js b/test/e2e/server.test.js index bee4ca3b2a..a2df835d8a 100644 --- a/test/e2e/server.test.js +++ b/test/e2e/server.test.js @@ -1,20 +1,22 @@ -"use strict"; - -const https = require("node:https"); -const path = require("node:path"); -const { afterEach, beforeEach, describe, it } = require("node:test"); -const { expect } = require("expect"); -const fs = require("graceful-fs"); -const { spyOn } = require("jest-mock"); -const request = require("supertest"); -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/static-config/webpack.config"); -const { skipTestOnWindows } = require("../helpers/conditional-test"); -const customHTTP = require("../helpers/custom-http"); -const normalizeOptions = require("../helpers/normalize-options"); -const runBrowser = require("../helpers/run-browser"); -const port = require("../ports-map")["server-option"]; +import https from "node:https"; +import path from "node:path"; +import { afterEach, beforeEach, describe, it } from "node:test"; +import { fileURLToPath } from "node:url"; +import { expect } from "expect"; +import fs from "graceful-fs"; +import { spyOn } from "jest-mock"; +import request from "supertest"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/static-config/webpack.config.js"; +import { skipTestOnWindows } from "../helpers/conditional-test.js"; +import customHTTP from "../helpers/custom-http.js"; +import normalizeOptions from "../helpers/normalize-options.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const port = portsMap["server-option"]; const httpsCertificateDirectory = path.resolve( __dirname, diff --git a/test/e2e/setup-exit-signals.test.js b/test/e2e/setup-exit-signals.test.js index a4cd43509a..6fbad84f4f 100644 --- a/test/e2e/setup-exit-signals.test.js +++ b/test/e2e/setup-exit-signals.test.js @@ -1,13 +1,13 @@ -"use strict"; - -const { afterEach, beforeEach, describe, it } = require("node:test"); -const { expect } = require("expect"); -const { spyOn } = require("jest-mock"); -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/simple-config/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const port = require("../ports-map")["setup-exit-signals-option"]; +import { afterEach, beforeEach, describe, it } from "node:test"; +import { expect } from "expect"; +import { spyOn } from "jest-mock"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/simple-config/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; + +const port = portsMap["setup-exit-signals-option"]; describe("setupExitSignals option", () => { describe("should handle 'SIGINT' and 'SIGTERM' signals", () => { diff --git a/test/e2e/setup-middlewares.test.js b/test/e2e/setup-middlewares.test.js index 6b0426711f..e41e5ab676 100644 --- a/test/e2e/setup-middlewares.test.js +++ b/test/e2e/setup-middlewares.test.js @@ -1,12 +1,12 @@ -"use strict"; +import { afterEach, beforeEach, describe, it } from "node:test"; -const { afterEach, beforeEach, describe, it } = require("node:test"); +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/client-config/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/client-config/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const port = require("../ports-map")["setup-middlewares-option"]; +const port = portsMap["setup-middlewares-option"]; describe("setupMiddlewares option", () => { let compiler; diff --git a/test/e2e/static-directory.test.js b/test/e2e/static-directory.test.js index 480cb2a85a..a970cc2231 100644 --- a/test/e2e/static-directory.test.js +++ b/test/e2e/static-directory.test.js @@ -1,16 +1,18 @@ -"use strict"; - -const path = require("node:path"); -const { afterEach, beforeEach, describe, it } = require("node:test"); -const { expect } = require("expect"); -const fs = require("graceful-fs"); -const { spyOn } = require("jest-mock"); -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/static-config/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const testServer = require("../helpers/test-server"); -const port = require("../ports-map")["static-directory-option"]; +import path from "node:path"; +import { afterEach, beforeEach, describe, it } from "node:test"; +import { fileURLToPath } from "node:url"; +import { expect } from "expect"; +import fs from "graceful-fs"; +import { spyOn } from "jest-mock"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/static-config/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import * as testServer from "../helpers/test-server.js"; +import portsMap from "../ports-map.js"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const port = portsMap["static-directory-option"]; const staticDirectory = path.resolve(__dirname, "../fixtures/static-config"); const publicDirectory = path.resolve(staticDirectory, "public"); diff --git a/test/e2e/static-public-path.test.js b/test/e2e/static-public-path.test.js index c080d880e6..e472a0f0b7 100644 --- a/test/e2e/static-public-path.test.js +++ b/test/e2e/static-public-path.test.js @@ -1,14 +1,16 @@ -"use strict"; - -const path = require("node:path"); -const { afterEach, beforeEach, describe, it } = require("node:test"); -const { expect } = require("expect"); -const { spyOn } = require("jest-mock"); -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/static-config/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const port = require("../ports-map")["static-public-path-option"]; +import path from "node:path"; +import { afterEach, beforeEach, describe, it } from "node:test"; +import { fileURLToPath } from "node:url"; +import { expect } from "expect"; +import { spyOn } from "jest-mock"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/static-config/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const port = portsMap["static-public-path-option"]; const staticDirectory = path.resolve(__dirname, "../fixtures/static-config"); const publicDirectory = path.resolve(staticDirectory, "public"); diff --git a/test/e2e/stats.test.js b/test/e2e/stats.test.js index fa42603a27..caf9514524 100644 --- a/test/e2e/stats.test.js +++ b/test/e2e/stats.test.js @@ -1,14 +1,14 @@ -"use strict"; +import { describe, test } from "node:test"; -const { describe, test } = require("node:test"); +import { spyOn } from "jest-mock"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/client-config/webpack.config.js"; +import HTMLGeneratorPlugin from "../helpers/html-generator-plugin.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; -const { spyOn } = require("jest-mock"); -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/client-config/webpack.config"); -const HTMLGeneratorPlugin = require("../helpers/html-generator-plugin"); -const runBrowser = require("../helpers/run-browser"); -const port = require("../ports-map").stats; +const port = portsMap.stats; spyOn(globalThis.console, "log").mockImplementation(); diff --git a/test/e2e/target.test.js b/test/e2e/target.test.js index 1b902a591b..f182fed7fb 100644 --- a/test/e2e/target.test.js +++ b/test/e2e/target.test.js @@ -1,22 +1,24 @@ -"use strict"; - -const path = require("node:path"); -const { describe, it } = require("node:test"); -const { expect } = require("expect"); -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/client-config/webpack.config"); +import path from "node:path"; +import { describe, it } from "node:test"; +import { fileURLToPath } from "node:url"; +import { expect } from "expect"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/client-config/webpack.config.js"; // Set up jsdom before loading fixtures that use browser APIs like Worker -require("../helpers/jsdom-setup"); +import "../helpers/jsdom-setup.js"; + +import workerConfig from "../fixtures/worker-config/webpack.config.js"; +import workerConfigDevServerFalse from "../fixtures/worker-config-dev-server-false/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; -const workerConfig = require("../fixtures/worker-config/webpack.config"); -const workerConfigDevServerFalse = require("../fixtures/worker-config-dev-server-false/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const port = require("../ports-map").target; +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const port = portsMap.target; const sortByTerm = (data, term) => - data.sort((a, b) => (a.indexOf(term) < b.indexOf(term) ? -1 : 1)); + data.toSorted((a, b) => (a.indexOf(term) < b.indexOf(term) ? -1 : 1)); describe("target", () => { const targets = [ diff --git a/test/e2e/watch-files.test.js b/test/e2e/watch-files.test.js index c95170139c..7eb8f799c0 100644 --- a/test/e2e/watch-files.test.js +++ b/test/e2e/watch-files.test.js @@ -1,14 +1,16 @@ -"use strict"; - -const path = require("node:path"); -const { afterEach, beforeEach, describe, it } = require("node:test"); -const { expect } = require("expect"); -const fs = require("graceful-fs"); -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/watch-files-config/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const port = require("../ports-map")["watch-files-option"]; +import path from "node:path"; +import { afterEach, beforeEach, describe, it } from "node:test"; +import { fileURLToPath } from "node:url"; +import { expect } from "expect"; +import fs from "graceful-fs"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/watch-files-config/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const port = portsMap["watch-files-option"]; const watchDir = path.resolve( __dirname, diff --git a/test/e2e/web-socket-communication.test.js b/test/e2e/web-socket-communication.test.js index 43adb64875..3154838789 100644 --- a/test/e2e/web-socket-communication.test.js +++ b/test/e2e/web-socket-communication.test.js @@ -1,14 +1,14 @@ -"use strict"; - -const { describe, it } = require("node:test"); -const { expect } = require("expect"); -const webpack = require("webpack"); -const WebSocket = require("ws"); -const Server = require("../../lib/Server"); -const WebsocketServer = require("../../lib/servers/WebsocketServer"); -const config = require("../fixtures/client-config/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const port = require("../ports-map")["web-socket-communication"]; +import { describe, it } from "node:test"; +import { expect } from "expect"; +import webpack from "webpack"; +import WebSocket from "ws"; +import Server from "../../lib/Server.js"; +import WebsocketServer from "../../lib/servers/WebsocketServer.js"; +import config from "../fixtures/client-config/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import portsMap from "../ports-map.js"; + +const port = portsMap["web-socket-communication"]; describe("web socket communication", () => { const webSocketServers = ["ws"]; diff --git a/test/e2e/web-socket-server-url.test.js b/test/e2e/web-socket-server-url.test.js index fe399668c3..e2adc837ff 100644 --- a/test/e2e/web-socket-server-url.test.js +++ b/test/e2e/web-socket-server-url.test.js @@ -1,15 +1,15 @@ -"use strict"; - -const { describe, it } = require("node:test"); -const { expect } = require("expect"); -const express = require("express"); -const { createProxyMiddleware } = require("http-proxy-middleware"); -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/client-config/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const sessionSubscribe = require("../helpers/session-subscribe"); -const [port1, port2] = require("../ports-map")["web-socket-server-url"]; +import { describe, it } from "node:test"; +import { expect } from "expect"; +import express from "express"; +import { createProxyMiddleware } from "http-proxy-middleware"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/client-config/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import sessionSubscribe from "../helpers/session-subscribe.js"; +import portsMap from "../ports-map.js"; + +const [port1, port2] = portsMap["web-socket-server-url"]; const webSocketServers = ["ws"]; diff --git a/test/e2e/web-socket-server.test.js b/test/e2e/web-socket-server.test.js index 80cbbeb34d..1a0856b5e9 100644 --- a/test/e2e/web-socket-server.test.js +++ b/test/e2e/web-socket-server.test.js @@ -1,13 +1,13 @@ -"use strict"; +import { describe, it } from "node:test"; +import { expect } from "expect"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/client-config/webpack.config.js"; +import runBrowser from "../helpers/run-browser.js"; +import sessionSubscribe from "../helpers/session-subscribe.js"; +import portsMap from "../ports-map.js"; -const { describe, it } = require("node:test"); -const { expect } = require("expect"); -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/client-config/webpack.config"); -const runBrowser = require("../helpers/run-browser"); -const sessionSubscribe = require("../helpers/session-subscribe"); -const port = require("../ports-map")["web-socket-server-test"]; +const port = portsMap["web-socket-server-test"]; describe("web socket server", () => { it("should work allow to disable", async (t) => { diff --git a/test/fixtures/cli-colors-default-stats/webpack.config.js b/test/fixtures/cli-colors-default-stats/webpack.config.js index 856a6d18a2..dc3b9cff4e 100644 --- a/test/fixtures/cli-colors-default-stats/webpack.config.js +++ b/test/fixtures/cli-colors-default-stats/webpack.config.js @@ -1,6 +1,9 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -module.exports = { +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default { mode: "development", context: __dirname, entry: "./foo.js", diff --git a/test/fixtures/cli-colors-disabled/webpack.config.js b/test/fixtures/cli-colors-disabled/webpack.config.js index e0c751cb9e..630461f4f0 100644 --- a/test/fixtures/cli-colors-disabled/webpack.config.js +++ b/test/fixtures/cli-colors-disabled/webpack.config.js @@ -1,6 +1,9 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -module.exports = { +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default { mode: "development", stats: { colors: false, diff --git a/test/fixtures/cli-colors-enabled/webpack.config.js b/test/fixtures/cli-colors-enabled/webpack.config.js index 9cdfeb4a69..e8b0a7d80a 100644 --- a/test/fixtures/cli-colors-enabled/webpack.config.js +++ b/test/fixtures/cli-colors-enabled/webpack.config.js @@ -1,6 +1,9 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -module.exports = { +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default { mode: "development", stats: { colors: true, diff --git a/test/fixtures/cli-empty-entry/webpack.config.js b/test/fixtures/cli-empty-entry/webpack.config.js index 82d77e536f..f6d4be0bf0 100644 --- a/test/fixtures/cli-empty-entry/webpack.config.js +++ b/test/fixtures/cli-empty-entry/webpack.config.js @@ -1,6 +1,4 @@ -"use strict"; - -module.exports = { +export default { mode: "development", stats: { orphanModules: true, preset: "detailed" }, entry: {}, diff --git a/test/fixtures/cli-entry-as-descriptor/webpack.config.js b/test/fixtures/cli-entry-as-descriptor/webpack.config.js index d7649d4b3c..300ccf9f97 100644 --- a/test/fixtures/cli-entry-as-descriptor/webpack.config.js +++ b/test/fixtures/cli-entry-as-descriptor/webpack.config.js @@ -1,6 +1,9 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -module.exports = { +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default { mode: "development", context: __dirname, entry: { diff --git a/test/fixtures/cli-multi-entry/webpack.config.js b/test/fixtures/cli-multi-entry/webpack.config.js index c171eb78c8..62ac3132cb 100644 --- a/test/fixtures/cli-multi-entry/webpack.config.js +++ b/test/fixtures/cli-multi-entry/webpack.config.js @@ -1,8 +1,9 @@ -"use strict"; +import path, { resolve } from "node:path"; +import { fileURLToPath } from "node:url"; -const { resolve } = require("path"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = { +export default { mode: "development", stats: "detailed", context: __dirname, diff --git a/test/fixtures/cli-promise-config/webpack.config.js b/test/fixtures/cli-promise-config/webpack.config.js index a75b90a920..d75b468886 100644 --- a/test/fixtures/cli-promise-config/webpack.config.js +++ b/test/fixtures/cli-promise-config/webpack.config.js @@ -1,8 +1,9 @@ -"use strict"; +import path, { join } from "node:path"; +import { fileURLToPath } from "node:url"; -const { join } = require("path"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = () => +export default () => new Promise((resolve) => { resolve({ mode: "development", diff --git a/test/fixtures/cli-single-entry/webpack.config.js b/test/fixtures/cli-single-entry/webpack.config.js index 2106279701..1a9dc8b050 100644 --- a/test/fixtures/cli-single-entry/webpack.config.js +++ b/test/fixtures/cli-single-entry/webpack.config.js @@ -1,8 +1,9 @@ -"use strict"; +import path, { resolve } from "node:path"; +import { fileURLToPath } from "node:url"; -const { resolve } = require("path"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = { +export default { mode: "development", stats: "detailed", entry: resolve(__dirname, "./foo.js"), diff --git a/test/fixtures/cli-target-config/webpack.config.js b/test/fixtures/cli-target-config/webpack.config.js index 6b6380e474..bfc85ffa88 100644 --- a/test/fixtures/cli-target-config/webpack.config.js +++ b/test/fixtures/cli-target-config/webpack.config.js @@ -1,8 +1,9 @@ -"use strict"; +import path, { resolve } from "node:path"; +import { fileURLToPath } from "node:url"; -const { resolve } = require("path"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = { +export default { mode: "development", stats: "detailed", entry: resolve(__dirname, "./foo.js"), diff --git a/test/fixtures/cli-universal-compiler-config/webpack.config.js b/test/fixtures/cli-universal-compiler-config/webpack.config.js index 7562d54206..cbb08cbd60 100644 --- a/test/fixtures/cli-universal-compiler-config/webpack.config.js +++ b/test/fixtures/cli-universal-compiler-config/webpack.config.js @@ -1,6 +1,9 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -module.exports = [ +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default [ { name: "client", mode: "development", diff --git a/test/fixtures/cli/webpack.config.js b/test/fixtures/cli/webpack.config.js index 20a13bb93d..c671dbb513 100644 --- a/test/fixtures/cli/webpack.config.js +++ b/test/fixtures/cli/webpack.config.js @@ -1,6 +1,9 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -module.exports = { +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default { mode: "development", stats: "detailed", context: __dirname, diff --git a/test/fixtures/client-config/webpack.config.js b/test/fixtures/client-config/webpack.config.js index 41cfbc5928..3a44fbfc82 100644 --- a/test/fixtures/client-config/webpack.config.js +++ b/test/fixtures/client-config/webpack.config.js @@ -1,8 +1,10 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import HTMLGeneratorPlugin from "../../helpers/html-generator-plugin.js"; -const HTMLGeneratorPlugin = require("../../helpers/html-generator-plugin"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = { +export default { devtool: false, mode: "development", context: __dirname, diff --git a/test/fixtures/custom-client/CustomWebSocketClient.js b/test/fixtures/custom-client/CustomWebSocketClient.js index 58ec6c2136..94490700f0 100644 --- a/test/fixtures/custom-client/CustomWebSocketClient.js +++ b/test/fixtures/custom-client/CustomWebSocketClient.js @@ -1,6 +1,4 @@ -"use strict"; - -module.exports = class WebSocketClient { +export default class WebSocketClient { constructor(url) { this.client = new WebSocket(url); this.client.onerror = (error) => { @@ -30,4 +28,4 @@ module.exports = class WebSocketClient { f(e.data); }; } -}; +} diff --git a/test/fixtures/dev-public-path/webpack.config.js b/test/fixtures/dev-public-path/webpack.config.js index 2faa9805d1..55dd346ec2 100644 --- a/test/fixtures/dev-public-path/webpack.config.js +++ b/test/fixtures/dev-public-path/webpack.config.js @@ -1,8 +1,9 @@ -"use strict"; +import path, { join } from "node:path"; +import { fileURLToPath } from "node:url"; -const { join } = require("path"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = { +export default { mode: "development", entry: join(__dirname, "foo.js"), devServer: { diff --git a/test/fixtures/dev-server/client-custom-path-config.js b/test/fixtures/dev-server/client-custom-path-config.js index 8c9d377854..487644c33b 100644 --- a/test/fixtures/dev-server/client-custom-path-config.js +++ b/test/fixtures/dev-server/client-custom-path-config.js @@ -1,8 +1,9 @@ -"use strict"; +import path, { resolve } from "node:path"; +import { fileURLToPath } from "node:url"; -const { resolve } = require("path"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = { +export default { mode: "development", stats: "detailed", entry: resolve(__dirname, "./foo.js"), diff --git a/test/fixtures/dev-server/client-default-path-config.js b/test/fixtures/dev-server/client-default-path-config.js index f208a49af4..25355ea55c 100644 --- a/test/fixtures/dev-server/client-default-path-config.js +++ b/test/fixtures/dev-server/client-default-path-config.js @@ -1,8 +1,9 @@ -"use strict"; +import path, { resolve } from "node:path"; +import { fileURLToPath } from "node:url"; -const { resolve } = require("path"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = { +export default { mode: "development", stats: "detailed", entry: resolve(__dirname, "./foo.js"), diff --git a/test/fixtures/entry-as-function/webpack.config.js b/test/fixtures/entry-as-function/webpack.config.js index cf48f0b924..b0add3e0ff 100644 --- a/test/fixtures/entry-as-function/webpack.config.js +++ b/test/fixtures/entry-as-function/webpack.config.js @@ -1,6 +1,9 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -module.exports = { +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default { mode: "development", context: __dirname, entry: () => "./foo.js", diff --git a/test/fixtures/historyapifallback-2-config/webpack.config.js b/test/fixtures/historyapifallback-2-config/webpack.config.js index f03898aa61..49b0c25f95 100644 --- a/test/fixtures/historyapifallback-2-config/webpack.config.js +++ b/test/fixtures/historyapifallback-2-config/webpack.config.js @@ -1,6 +1,9 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -module.exports = { +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default { mode: "development", context: __dirname, stats: "none", diff --git a/test/fixtures/historyapifallback-3-config/foo.js b/test/fixtures/historyapifallback-3-config/foo.js index aae7eee3a7..ff0128eab4 100644 --- a/test/fixtures/historyapifallback-3-config/foo.js +++ b/test/fixtures/historyapifallback-3-config/foo.js @@ -1,5 +1,3 @@ -"use strict"; - -require("./bar.html"); +import "./bar.html"; console.log("Hey."); diff --git a/test/fixtures/historyapifallback-3-config/webpack.config.js b/test/fixtures/historyapifallback-3-config/webpack.config.js index 792be36f9c..62cc3f85e0 100644 --- a/test/fixtures/historyapifallback-3-config/webpack.config.js +++ b/test/fixtures/historyapifallback-3-config/webpack.config.js @@ -1,5 +1,7 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +const __dirname = path.dirname(fileURLToPath(import.meta.url)); const moduleRuleForHTML = { test: /\.html$/, type: "asset/resource", @@ -8,7 +10,7 @@ const moduleRuleForHTML = { }, }; -module.exports = { +export default { mode: "development", context: __dirname, stats: "none", diff --git a/test/fixtures/historyapifallback-config/foo.js b/test/fixtures/historyapifallback-config/foo.js index fa06808d30..49d08468b9 100644 --- a/test/fixtures/historyapifallback-config/foo.js +++ b/test/fixtures/historyapifallback-config/foo.js @@ -1,6 +1,4 @@ -"use strict"; - -require("./index.html"); -require("./bar.html"); +import "./index.html"; +import "./bar.html"; console.log("Hey."); diff --git a/test/fixtures/historyapifallback-config/webpack.config.js b/test/fixtures/historyapifallback-config/webpack.config.js index bf2a52ba91..40e845bb1d 100644 --- a/test/fixtures/historyapifallback-config/webpack.config.js +++ b/test/fixtures/historyapifallback-config/webpack.config.js @@ -1,5 +1,7 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +const __dirname = path.dirname(fileURLToPath(import.meta.url)); const moduleRuleForHTML = { test: /\.html$/, type: "asset/resource", @@ -8,7 +10,7 @@ const moduleRuleForHTML = { }, }; -module.exports = { +export default { mode: "development", context: __dirname, stats: "none", diff --git a/test/fixtures/lazy-compilation-multiple-entries/webpack.config.js b/test/fixtures/lazy-compilation-multiple-entries/webpack.config.js index 74f65f722b..7c699a32b0 100644 --- a/test/fixtures/lazy-compilation-multiple-entries/webpack.config.js +++ b/test/fixtures/lazy-compilation-multiple-entries/webpack.config.js @@ -1,5 +1,7 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +const __dirname = path.dirname(fileURLToPath(import.meta.url)); const oneHTMLContent = ` @@ -23,7 +25,7 @@ const twoHTMLContent = ` `; -module.exports = { +export default { devtool: false, mode: "development", context: __dirname, diff --git a/test/fixtures/lazy-compilation-single-entry/webpack.config.js b/test/fixtures/lazy-compilation-single-entry/webpack.config.js index c3223f029a..9bbbe3c7f4 100644 --- a/test/fixtures/lazy-compilation-single-entry/webpack.config.js +++ b/test/fixtures/lazy-compilation-single-entry/webpack.config.js @@ -1,5 +1,7 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +const __dirname = path.dirname(fileURLToPath(import.meta.url)); const HTMLContent = ` @@ -12,7 +14,7 @@ const HTMLContent = ` `; -module.exports = { +export default { devtool: false, mode: "development", context: __dirname, diff --git a/test/fixtures/mime-types-config/foo.js b/test/fixtures/mime-types-config/foo.js index 739d9bd638..af7b2d3f91 100644 --- a/test/fixtures/mime-types-config/foo.js +++ b/test/fixtures/mime-types-config/foo.js @@ -1,5 +1,3 @@ -"use strict"; - -require("./file.custom"); +import "./file.custom"; console.log("Hey."); diff --git a/test/fixtures/mime-types-config/webpack.config.js b/test/fixtures/mime-types-config/webpack.config.js index 5e59b2d444..c1ef4a1520 100644 --- a/test/fixtures/mime-types-config/webpack.config.js +++ b/test/fixtures/mime-types-config/webpack.config.js @@ -1,5 +1,7 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +const __dirname = path.dirname(fileURLToPath(import.meta.url)); const moduleRuleForCustom = { test: /\.custom$/, type: "asset/resource", @@ -8,7 +10,7 @@ const moduleRuleForCustom = { }, }; -module.exports = { +export default { mode: "development", context: __dirname, stats: "none", diff --git a/test/fixtures/module-federation-config/entry1.js b/test/fixtures/module-federation-config/entry1.js index dbd0f49a83..ae45df7780 100644 --- a/test/fixtures/module-federation-config/entry1.js +++ b/test/fixtures/module-federation-config/entry1.js @@ -1,3 +1 @@ -"use strict"; - -module.exports = "entry1"; +export default "entry1"; diff --git a/test/fixtures/module-federation-config/entry2.js b/test/fixtures/module-federation-config/entry2.js index 74f9bc577f..bbfcd5c63c 100644 --- a/test/fixtures/module-federation-config/entry2.js +++ b/test/fixtures/module-federation-config/entry2.js @@ -1,3 +1 @@ -"use strict"; - -module.exports = "entry2"; +export default "entry2"; diff --git a/test/fixtures/module-federation-config/webpack.config.js b/test/fixtures/module-federation-config/webpack.config.js index 269e4cab41..0c5fd8e97c 100644 --- a/test/fixtures/module-federation-config/webpack.config.js +++ b/test/fixtures/module-federation-config/webpack.config.js @@ -1,6 +1,9 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -module.exports = { +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default { mode: "development", target: "node", stats: "none", diff --git a/test/fixtures/module-federation-config/webpack.multi.config.js b/test/fixtures/module-federation-config/webpack.multi.config.js index 5863c8e14a..5397b3232d 100644 --- a/test/fixtures/module-federation-config/webpack.multi.config.js +++ b/test/fixtures/module-federation-config/webpack.multi.config.js @@ -1,6 +1,9 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -module.exports = [ +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default [ { mode: "development", target: "node", diff --git a/test/fixtures/module-federation-config/webpack.object-entry.config.js b/test/fixtures/module-federation-config/webpack.object-entry.config.js index 43c47a4183..b80b2539b5 100644 --- a/test/fixtures/module-federation-config/webpack.object-entry.config.js +++ b/test/fixtures/module-federation-config/webpack.object-entry.config.js @@ -1,6 +1,9 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -module.exports = { +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default { mode: "development", target: "node", stats: "none", diff --git a/test/fixtures/module-federation-config/webpack.plugin.js b/test/fixtures/module-federation-config/webpack.plugin.js index 9178e3c600..c7f28bc20f 100644 --- a/test/fixtures/module-federation-config/webpack.plugin.js +++ b/test/fixtures/module-federation-config/webpack.plugin.js @@ -1,9 +1,12 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import webpack from "webpack"; -const ModuleFederationPlugin = - require("webpack").container.ModuleFederationPlugin; +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = { +const { ModuleFederationPlugin } = webpack.container; + +export default { mode: "development", target: "node", stats: "none", diff --git a/test/fixtures/multi-compiler-one-configuration/webpack.config.js b/test/fixtures/multi-compiler-one-configuration/webpack.config.js index d00d2b4c86..7ac41529dd 100644 --- a/test/fixtures/multi-compiler-one-configuration/webpack.config.js +++ b/test/fixtures/multi-compiler-one-configuration/webpack.config.js @@ -1,8 +1,10 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import HTMLGeneratorPlugin from "../../helpers/html-generator-plugin.js"; -const HTMLGeneratorPlugin = require("../../helpers/html-generator-plugin"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = [ +export default [ { target: "web", mode: "development", diff --git a/test/fixtures/multi-compiler-two-configurations/webpack.config.js b/test/fixtures/multi-compiler-two-configurations/webpack.config.js index eaeba3006d..8ee150acf6 100644 --- a/test/fixtures/multi-compiler-two-configurations/webpack.config.js +++ b/test/fixtures/multi-compiler-two-configurations/webpack.config.js @@ -1,8 +1,10 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import HTMLGeneratorPlugin from "../../helpers/html-generator-plugin.js"; -const HTMLGeneratorPlugin = require("../../helpers/html-generator-plugin"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = [ +export default [ { target: "web", name: "one", diff --git a/test/fixtures/multi-public-path-config/foo.js b/test/fixtures/multi-public-path-config/foo.js index d2f0aa53dd..287ee67d45 100644 --- a/test/fixtures/multi-public-path-config/foo.js +++ b/test/fixtures/multi-public-path-config/foo.js @@ -1,3 +1 @@ -"use strict"; - -require("./test.html"); +import "./test.html"; diff --git a/test/fixtures/multi-public-path-config/webpack.config.js b/test/fixtures/multi-public-path-config/webpack.config.js index 71e82d2309..7807cb6a56 100644 --- a/test/fixtures/multi-public-path-config/webpack.config.js +++ b/test/fixtures/multi-public-path-config/webpack.config.js @@ -1,6 +1,7 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -const path = require("path"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); const moduleRuleForHTML = { test: /\.html$/, @@ -10,7 +11,7 @@ const moduleRuleForHTML = { }, }; -module.exports = [ +export default [ { mode: "development", context: __dirname, diff --git a/test/fixtures/overlay-config/trusted-types.webpack.config.js b/test/fixtures/overlay-config/trusted-types.webpack.config.js index 94c2921269..4839c71b2c 100644 --- a/test/fixtures/overlay-config/trusted-types.webpack.config.js +++ b/test/fixtures/overlay-config/trusted-types.webpack.config.js @@ -1,8 +1,10 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import HTMLGeneratorPlugin from "../../helpers/trusted-types-html-generator-plugin.js"; -const HTMLGeneratorPlugin = require("../../helpers/trusted-types-html-generator-plugin"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = { +export default { mode: "development", context: __dirname, stats: "none", diff --git a/test/fixtures/overlay-config/webpack.config.js b/test/fixtures/overlay-config/webpack.config.js index c1e0b481b1..94e2cc00c3 100644 --- a/test/fixtures/overlay-config/webpack.config.js +++ b/test/fixtures/overlay-config/webpack.config.js @@ -1,8 +1,10 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import HTMLGeneratorPlugin from "../../helpers/html-generator-plugin.js"; -const HTMLGeneratorPlugin = require("../../helpers/html-generator-plugin"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = { +export default { mode: "development", context: __dirname, stats: "none", diff --git a/test/fixtures/provide-plugin-custom/foo.js b/test/fixtures/provide-plugin-custom/foo.js index c1faff1c20..81525bac58 100644 --- a/test/fixtures/provide-plugin-custom/foo.js +++ b/test/fixtures/provide-plugin-custom/foo.js @@ -1,7 +1,5 @@ -"use strict"; - // 'npm run prepare' must be run for this to work during testing -const CustomClient = require("../custom-client/CustomWebSocketClient"); +import CustomClient from "../custom-client/CustomWebSocketClient.js"; window.expectedClient = CustomClient; // eslint-disable-next-line camelcase, no-undef diff --git a/test/fixtures/provide-plugin-custom/webpack.config.js b/test/fixtures/provide-plugin-custom/webpack.config.js index 6006074030..3ca91f1f3f 100644 --- a/test/fixtures/provide-plugin-custom/webpack.config.js +++ b/test/fixtures/provide-plugin-custom/webpack.config.js @@ -1,8 +1,10 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import HTMLGeneratorPlugin from "../../helpers/html-generator-plugin.js"; -const HTMLGeneratorPlugin = require("../../helpers/html-generator-plugin"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = { +export default { mode: "development", context: __dirname, stats: "none", diff --git a/test/fixtures/provide-plugin-default/foo.js b/test/fixtures/provide-plugin-default/foo.js index bd4904444f..a1e1f87ff3 100644 --- a/test/fixtures/provide-plugin-default/foo.js +++ b/test/fixtures/provide-plugin-default/foo.js @@ -1,8 +1,5 @@ -"use strict"; - // 'npm run prepare' must be run for this to work during testing -const WebsocketClient = - require("../../../client/clients/WebSocketClient").default; +import WebsocketClient from "../../../client/clients/WebSocketClient.js"; window.expectedClient = WebsocketClient; // eslint-disable-next-line camelcase, no-undef diff --git a/test/fixtures/provide-plugin-default/webpack.config.js b/test/fixtures/provide-plugin-default/webpack.config.js index 6006074030..3ca91f1f3f 100644 --- a/test/fixtures/provide-plugin-default/webpack.config.js +++ b/test/fixtures/provide-plugin-default/webpack.config.js @@ -1,8 +1,10 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import HTMLGeneratorPlugin from "../../helpers/html-generator-plugin.js"; -const HTMLGeneratorPlugin = require("../../helpers/html-generator-plugin"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = { +export default { mode: "development", context: __dirname, stats: "none", diff --git a/test/fixtures/provide-plugin-ws-config/foo.js b/test/fixtures/provide-plugin-ws-config/foo.js index bd4904444f..a1e1f87ff3 100644 --- a/test/fixtures/provide-plugin-ws-config/foo.js +++ b/test/fixtures/provide-plugin-ws-config/foo.js @@ -1,8 +1,5 @@ -"use strict"; - // 'npm run prepare' must be run for this to work during testing -const WebsocketClient = - require("../../../client/clients/WebSocketClient").default; +import WebsocketClient from "../../../client/clients/WebSocketClient.js"; window.expectedClient = WebsocketClient; // eslint-disable-next-line camelcase, no-undef diff --git a/test/fixtures/provide-plugin-ws-config/webpack.config.js b/test/fixtures/provide-plugin-ws-config/webpack.config.js index 6006074030..3ca91f1f3f 100644 --- a/test/fixtures/provide-plugin-ws-config/webpack.config.js +++ b/test/fixtures/provide-plugin-ws-config/webpack.config.js @@ -1,8 +1,10 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import HTMLGeneratorPlugin from "../../helpers/html-generator-plugin.js"; -const HTMLGeneratorPlugin = require("../../helpers/html-generator-plugin"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = { +export default { mode: "development", context: __dirname, stats: "none", diff --git a/test/fixtures/proxy-config/webpack.config.js b/test/fixtures/proxy-config/webpack.config.js index f03898aa61..49b0c25f95 100644 --- a/test/fixtures/proxy-config/webpack.config.js +++ b/test/fixtures/proxy-config/webpack.config.js @@ -1,6 +1,9 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -module.exports = { +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default { mode: "development", context: __dirname, stats: "none", diff --git a/test/fixtures/reload-config-2/foo.js b/test/fixtures/reload-config-2/foo.js index 37887d2535..361bfb33ae 100644 --- a/test/fixtures/reload-config-2/foo.js +++ b/test/fixtures/reload-config-2/foo.js @@ -1,4 +1,2 @@ -"use strict"; - // eslint-disable-next-line import/no-unresolved -require("./main.css"); +import "./main.css"; diff --git a/test/fixtures/reload-config-2/webpack.config.js b/test/fixtures/reload-config-2/webpack.config.js index b8d11148bb..272c1adba8 100644 --- a/test/fixtures/reload-config-2/webpack.config.js +++ b/test/fixtures/reload-config-2/webpack.config.js @@ -1,8 +1,10 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import HTMLGeneratorPlugin from "../../helpers/html-generator-plugin.js"; -const HTMLGeneratorPlugin = require("../../helpers/html-generator-plugin"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = { +export default { mode: "development", context: __dirname, stats: "none", diff --git a/test/fixtures/reload-config/foo.js b/test/fixtures/reload-config/foo.js index 68ad7bddf6..1bebc0ca7a 100644 --- a/test/fixtures/reload-config/foo.js +++ b/test/fixtures/reload-config/foo.js @@ -1,3 +1 @@ -"use strict"; - -require("./main.css"); +import "./main.css"; diff --git a/test/fixtures/reload-config/webpack.config.js b/test/fixtures/reload-config/webpack.config.js index 9801ab7ac2..0d36f857a8 100644 --- a/test/fixtures/reload-config/webpack.config.js +++ b/test/fixtures/reload-config/webpack.config.js @@ -1,8 +1,10 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import HTMLGeneratorPlugin from "../../helpers/html-generator-plugin.js"; -const HTMLGeneratorPlugin = require("../../helpers/html-generator-plugin"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = { +export default { mode: "development", context: __dirname, entry: "./foo.js", diff --git a/test/fixtures/schema/webpack.config.simple.js b/test/fixtures/schema/webpack.config.simple.js index ad290af1fb..49649d403d 100644 --- a/test/fixtures/schema/webpack.config.simple.js +++ b/test/fixtures/schema/webpack.config.simple.js @@ -1,6 +1,9 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -module.exports = { +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default { mode: "development", context: __dirname, entry: "./foo.js", diff --git a/test/fixtures/simple-config-other/webpack.config.js b/test/fixtures/simple-config-other/webpack.config.js index 624dc8a648..15f143f25a 100644 --- a/test/fixtures/simple-config-other/webpack.config.js +++ b/test/fixtures/simple-config-other/webpack.config.js @@ -1,6 +1,9 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -module.exports = { +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default { mode: "development", context: __dirname, stats: "none", diff --git a/test/fixtures/simple-config/webpack.config.js b/test/fixtures/simple-config/webpack.config.js index 6006074030..3ca91f1f3f 100644 --- a/test/fixtures/simple-config/webpack.config.js +++ b/test/fixtures/simple-config/webpack.config.js @@ -1,8 +1,10 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import HTMLGeneratorPlugin from "../../helpers/html-generator-plugin.js"; -const HTMLGeneratorPlugin = require("../../helpers/html-generator-plugin"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = { +export default { mode: "development", context: __dirname, stats: "none", diff --git a/test/fixtures/static-config/webpack.config.js b/test/fixtures/static-config/webpack.config.js index e0a2dfdbd5..32509ce43c 100644 --- a/test/fixtures/static-config/webpack.config.js +++ b/test/fixtures/static-config/webpack.config.js @@ -1,6 +1,9 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -module.exports = { +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default { mode: "development", context: __dirname, stats: "none", diff --git a/test/fixtures/static/webpack.config.js b/test/fixtures/static/webpack.config.js index a710816d46..fbaf1ed462 100644 --- a/test/fixtures/static/webpack.config.js +++ b/test/fixtures/static/webpack.config.js @@ -1,8 +1,9 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; -const path = require("path"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = { +export default { mode: "development", entry: path.resolve(__dirname, "foo.js"), devServer: { diff --git a/test/fixtures/universal-compiler-config/webpack.config.js b/test/fixtures/universal-compiler-config/webpack.config.js index 368e5606f4..d8c6a07af5 100644 --- a/test/fixtures/universal-compiler-config/webpack.config.js +++ b/test/fixtures/universal-compiler-config/webpack.config.js @@ -1,8 +1,10 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import HTMLGeneratorPlugin from "../../helpers/html-generator-plugin.js"; -const HTMLGeneratorPlugin = require("../../helpers/html-generator-plugin"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = [ +export default [ { name: "browser", mode: "development", diff --git a/test/fixtures/watch-files-config/webpack.config.js b/test/fixtures/watch-files-config/webpack.config.js index 2f64765a90..64a75adf88 100644 --- a/test/fixtures/watch-files-config/webpack.config.js +++ b/test/fixtures/watch-files-config/webpack.config.js @@ -1,8 +1,10 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import HTMLGeneratorPlugin from "../../helpers/html-generator-plugin.js"; -const HTMLGeneratorPlugin = require("../../helpers/html-generator-plugin"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = { +export default { mode: "development", devtool: false, context: __dirname, diff --git a/test/fixtures/worker-config-dev-server-false/webpack.config.js b/test/fixtures/worker-config-dev-server-false/webpack.config.js index a53fe51d31..5a8079216c 100644 --- a/test/fixtures/worker-config-dev-server-false/webpack.config.js +++ b/test/fixtures/worker-config-dev-server-false/webpack.config.js @@ -1,9 +1,10 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import HTMLGeneratorPlugin from "../../helpers/html-generator-plugin.js"; -const path = require("path"); -const HTMLGeneratorPlugin = require("../../helpers/html-generator-plugin"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = [ +export default [ { name: "app", // dependencies: ["worker"], diff --git a/test/fixtures/worker-config/webpack.config.js b/test/fixtures/worker-config/webpack.config.js index a4b8cc5940..bf3e51136e 100644 --- a/test/fixtures/worker-config/webpack.config.js +++ b/test/fixtures/worker-config/webpack.config.js @@ -1,8 +1,10 @@ -"use strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import HTMLGeneratorPlugin from "../../helpers/html-generator-plugin.js"; -const HTMLGeneratorPlugin = require("../../helpers/html-generator-plugin"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); -module.exports = [ +export default [ { name: "app", dependencies: ["worker"], diff --git a/test/helpers/ExitOnDonePlugin.js b/test/helpers/ExitOnDonePlugin.js index 656b58579a..334e9bf9be 100644 --- a/test/helpers/ExitOnDonePlugin.js +++ b/test/helpers/ExitOnDonePlugin.js @@ -1,6 +1,4 @@ -"use strict"; - -module.exports = class ExitOnDonePlugin { +export default class ExitOnDonePlugin { apply(compiler) { compiler.hooks.afterDone.tap("webpack-dev-server", (stats) => { let exitCode = 0; @@ -15,4 +13,4 @@ module.exports = class ExitOnDonePlugin { }); }); } -}; +} diff --git a/test/helpers/conditional-test.js b/test/helpers/conditional-test.js index 7e82106e31..cafa92cb67 100644 --- a/test/helpers/conditional-test.js +++ b/test/helpers/conditional-test.js @@ -1,6 +1,4 @@ -"use strict"; - -const { test } = require("node:test"); +import { test } from "node:test"; const isWindows = process.platform === "win32"; @@ -8,12 +6,10 @@ const isWindows = process.platform === "win32"; * @param {string} reason reason * @returns {boolean} true when it is windows, otherwise false */ -function skipTestOnWindows(reason) { +export function skipTestOnWindows(reason) { if (isWindows) { test.skip(reason, () => {}); } return isWindows; } - -module.exports.skipTestOnWindows = skipTestOnWindows; diff --git a/test/helpers/custom-http.js b/test/helpers/custom-http.js index 29046c9bc3..9b4866f1b2 100644 --- a/test/helpers/custom-http.js +++ b/test/helpers/custom-http.js @@ -1,5 +1 @@ -"use strict"; - -const customHTTP = require("node:http"); - -module.exports = customHTTP; +export { default } from "node:http"; diff --git a/test/helpers/html-generator-plugin.js b/test/helpers/html-generator-plugin.js index 261d16e592..6b469ea12c 100644 --- a/test/helpers/html-generator-plugin.js +++ b/test/helpers/html-generator-plugin.js @@ -1,5 +1,3 @@ -"use strict"; - const HTMLContentForIndex = ` @@ -41,7 +39,7 @@ const HTMLContentForTest = ` `; -module.exports = class HTMLGeneratorPlugin { +export default class HTMLGeneratorPlugin { apply(compiler) { const pluginName = "html-generator-plugin"; @@ -79,4 +77,4 @@ module.exports = class HTMLGeneratorPlugin { ); }); } -}; +} diff --git a/test/helpers/jsdom-setup.js b/test/helpers/jsdom-setup.js index 5098e4dcea..919aae51b4 100644 --- a/test/helpers/jsdom-setup.js +++ b/test/helpers/jsdom-setup.js @@ -1,6 +1,4 @@ -"use strict"; - -const { JSDOM } = require("jsdom"); +import { JSDOM } from "jsdom"; const dom = new JSDOM("", { url: "http://localhost/", diff --git a/test/helpers/normalize-options.js b/test/helpers/normalize-options.js index 923b8146e1..fa34ec779e 100644 --- a/test/helpers/normalize-options.js +++ b/test/helpers/normalize-options.js @@ -1,5 +1,3 @@ -"use strict"; - /** * @param {import("https").ServerOptions} options server options * @returns {Record} normalized server options @@ -38,4 +36,4 @@ function normalizeOptions(options) { return normalizedOptions; } -module.exports = normalizeOptions; +export default normalizeOptions; diff --git a/test/helpers/puppeteer-constants.js b/test/helpers/puppeteer-constants.js index 23bce93c45..346298d823 100644 --- a/test/helpers/puppeteer-constants.js +++ b/test/helpers/puppeteer-constants.js @@ -1,53 +1,49 @@ -"use strict"; - -module.exports = { - reloadReadyDelay: 5000, - completeReloadDelay: 10000, - initConsoleDelay: 3000, - awaitServerCloseDelay: 1000, - beforeBrowserCloseDelay: 3000, - puppeteerArgs: [ - "--disable-background-timer-throttling", - "--disable-breakpad", - "--disable-client-side-phishing-detection", - "--disable-cloud-import", - "--disable-default-apps", - "--disable-dev-shm-usage", - "--disable-extensions", - "--disable-gesture-typing", - "--disable-hang-monitor", - "--disable-infobars", - "--disable-notifications", - "--disable-offer-store-unmasked-wallet-cards", - "--disable-offer-upload-credit-cards", - "--disable-popup-blocking", - "--disable-print-preview", - "--disable-prompt-on-repost", - "--disable-setuid-sandbox", - "--disable-speech-api", - "--disable-sync", - "--disable-tab-for-desktop-share", - "--disable-translate", - "--disable-voice-input", - "--disable-wake-on-wifi", - "--enable-async-dns", - "--enable-simple-cache-backend", - "--enable-tcp-fast-open", - "--enable-webgl", - "--hide-scrollbars", - "--ignore-gpu-blacklist", - "--media-cache-size=33554432", - "--metrics-recording-only", - "--mute-audio", - "--no-default-browser-check", - "--no-first-run", - "--no-pings", - "--no-sandbox", - "--no-zygote", - "--password-store=basic", - "--prerender-from-omnibox=disabled", - "--use-gl=swiftshader", - "--use-mock-keychain", - "--disable-field-trial-config", - ], -}; +export const reloadReadyDelay = 5000; +export const completeReloadDelay = 10000; +export const initConsoleDelay = 3000; +export const awaitServerCloseDelay = 1000; +export const beforeBrowserCloseDelay = 3000; +export const puppeteerArgs = [ + "--disable-background-timer-throttling", + "--disable-breakpad", + "--disable-client-side-phishing-detection", + "--disable-cloud-import", + "--disable-default-apps", + "--disable-dev-shm-usage", + "--disable-extensions", + "--disable-gesture-typing", + "--disable-hang-monitor", + "--disable-infobars", + "--disable-notifications", + "--disable-offer-store-unmasked-wallet-cards", + "--disable-offer-upload-credit-cards", + "--disable-popup-blocking", + "--disable-print-preview", + "--disable-prompt-on-repost", + "--disable-setuid-sandbox", + "--disable-speech-api", + "--disable-sync", + "--disable-tab-for-desktop-share", + "--disable-translate", + "--disable-voice-input", + "--disable-wake-on-wifi", + "--enable-async-dns", + "--enable-simple-cache-backend", + "--enable-tcp-fast-open", + "--enable-webgl", + "--hide-scrollbars", + "--ignore-gpu-blacklist", + "--media-cache-size=33554432", + "--metrics-recording-only", + "--mute-audio", + "--no-default-browser-check", + "--no-first-run", + "--no-pings", + "--no-sandbox", + "--no-zygote", + "--password-store=basic", + "--prerender-from-omnibox=disabled", + "--use-gl=swiftshader", + "--use-mock-keychain", + "--disable-field-trial-config", +]; diff --git a/test/helpers/run-browser.js b/test/helpers/run-browser.js index e4d00b9ba9..a4010d8496 100644 --- a/test/helpers/run-browser.js +++ b/test/helpers/run-browser.js @@ -1,11 +1,9 @@ -"use strict"; +import { launch } from "puppeteer"; +import { puppeteerArgs } from "./puppeteer-constants.js"; -const puppeteer = require("puppeteer"); -const { puppeteerArgs } = require("./puppeteer-constants"); - -/** @typedef {import('puppeteer').Browser} Browser */ -/** @typedef {import('puppeteer').Page} Page */ -/** @typedef {import('puppeteer').Device} Device */ +/** @typedef {import("puppeteer").Browser} Browser */ +/** @typedef {import("puppeteer").Page} Page */ +/** @typedef {import("puppeteer").Device} Device */ /** * @typedef {object} RunBrowserResult @@ -18,7 +16,7 @@ const { puppeteerArgs } = require("./puppeteer-constants"); * @param {Device} device config * @returns {Promise} page */ -function runPage(browser, device) { +export function runPage(browser, device) { /** * @type {Page} */ @@ -69,22 +67,21 @@ function runPage(browser, device) { function runBrowser(device) { return new Promise((resolve, reject) => { /** - * @type {import('puppeteer').Page} + * @type {import("puppeteer").Page} */ let page; /** - * @type {import('puppeteer').Browser} + * @type {import("puppeteer").Browser} */ let browser; - puppeteer - .launch({ - headless: "new", - // because of invalid localhost certificate - acceptInsecureCerts: true, - // args come from: https://github.com/alixaxel/chrome-aws-lambda/blob/master/source/index.js - args: puppeteerArgs, - }) + launch({ + headless: "new", + // because of invalid localhost certificate + acceptInsecureCerts: true, + // args come from: https://github.com/alixaxel/chrome-aws-lambda/blob/master/source/index.js + args: puppeteerArgs, + }) .then((launchedBrowser) => { browser = launchedBrowser; @@ -99,5 +96,4 @@ function runBrowser(device) { }); } -module.exports = runBrowser; -module.exports.runPage = runPage; +export default runBrowser; diff --git a/test/helpers/session-subscribe.js b/test/helpers/session-subscribe.js index 9287e2646a..7a1fdb9795 100644 --- a/test/helpers/session-subscribe.js +++ b/test/helpers/session-subscribe.js @@ -1,9 +1,7 @@ -"use strict"; - -module.exports = async function sessionSubscribe(session) { +export default async function sessionSubscribe(session) { session.on("sessionattached", (attachedSession) => { sessionSubscribe(attachedSession); }); await session.send("Network.enable"); await session.send("Runtime.runIfWaitingForDebugger"); -}; +} diff --git a/test/helpers/snapshotResolver.js b/test/helpers/snapshotResolver.js deleted file mode 100644 index cd4aa21bc0..0000000000 --- a/test/helpers/snapshotResolver.js +++ /dev/null @@ -1,25 +0,0 @@ -"use strict"; - -const path = require("node:path"); -const webpack = require("webpack"); - -const [webpackVersion] = webpack.version; -const snapshotExtension = `.snap.webpack${webpackVersion}`; - -module.exports = { - resolveSnapshotPath: (testPath) => - path.join( - path.dirname(testPath), - "__snapshots__", - `${path.basename(testPath)}${snapshotExtension}`, - ), - resolveTestPath: (snapshotPath) => - snapshotPath - .replace(`${path.sep}__snapshots__`, "") - .slice(0, -snapshotExtension.length), - testPathForConsistencyCheck: path.join( - "consistency_check", - "__tests__", - "example.test.js", - ), -}; diff --git a/test/helpers/test-bin.js b/test/helpers/test-bin.js index ecec46868b..cdc1eb64be 100644 --- a/test/helpers/test-bin.js +++ b/test/helpers/test-bin.js @@ -1,10 +1,11 @@ -"use strict"; +import os from "node:os"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import util from "node:util"; +import execa from "execa"; +import { Writable } from "readable-stream"; -const os = require("node:os"); -const path = require("node:path"); -const util = require("node:util"); -const execa = require("execa"); -const { Writable } = require("readable-stream"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); const webpackDevServerPath = path.resolve( __dirname, @@ -27,7 +28,7 @@ const processKill = (process) => { // } }; -const testBin = (testArgs = [], options = {}) => { +export const testBin = (testArgs = [], options = {}) => { const cwd = process.cwd(); const env = { WEBPACK_CLI_HELP_WIDTH: 2048, @@ -127,7 +128,7 @@ const ipV6 = ` .replaceAll("\n", "") .trim(); -const normalizeStderr = (stderr, options = {}) => { +export const normalizeStderr = (stderr, options = {}) => { let normalizedStderr = util.stripVTControlCharacters(stderr); normalizedStderr = normalizedStderr @@ -207,5 +208,3 @@ const normalizeStderr = (stderr, options = {}) => { return normalizedStderr; }; - -module.exports = { normalizeStderr, testBin }; diff --git a/test/helpers/test-server.js b/test/helpers/test-server.js index 9333c64601..e6ba6a4790 100644 --- a/test/helpers/test-server.js +++ b/test/helpers/test-server.js @@ -1,7 +1,5 @@ -"use strict"; - -const webpack = require("webpack"); -const Server = require("../../lib/Server"); +import webpack from "webpack"; +import Server from "../../lib/Server.js"; /** @typedef {import("webpack").Configuration} Configuration */ /** @typedef {import("../../lib/Server").Configuration} DevServerConfiguration */ @@ -54,7 +52,7 @@ function startFullSetup(config, devServerConfig, done) { * @param {(err?: Error) => void=} done done callback * @returns {Server} server */ -function start(config, devServerConfig, done) { +export function start(config, devServerConfig, done) { let readyCount = 0; const ready = (error) => { @@ -85,7 +83,7 @@ function start(config, devServerConfig, done) { /** * @param {() => void} done done callback */ -function close(done) { +export function close(done) { if (server) { server.stopCallback(() => { server = null; @@ -95,8 +93,3 @@ function close(done) { done(); } } - -module.exports = { - close, - start, -}; diff --git a/test/helpers/trusted-types-html-generator-plugin.js b/test/helpers/trusted-types-html-generator-plugin.js index 6d023305db..1daf0ed870 100644 --- a/test/helpers/trusted-types-html-generator-plugin.js +++ b/test/helpers/trusted-types-html-generator-plugin.js @@ -1,5 +1,3 @@ -"use strict"; - const HTMLContentForIndex = ` @@ -35,7 +33,7 @@ const HTMLContentForTest = ` `; -module.exports = class HTMLGeneratorPlugin { +export default class HTMLGeneratorPlugin { apply(compiler) { const pluginName = "html-generator-plugin"; @@ -78,4 +76,4 @@ module.exports = class HTMLGeneratorPlugin { } }); } -}; +} diff --git a/test/normalize-options.test.js b/test/normalize-options.test.js index a5515e8abb..a5591ab139 100644 --- a/test/normalize-options.test.js +++ b/test/normalize-options.test.js @@ -1,11 +1,13 @@ -"use strict"; +import { describe, it } from "node:test"; +import { expect } from "expect"; +import { klona } from "klona/full"; +import webpack from "webpack"; +import Server from "../lib/Server.js"; +import multiCompilerConfig from "./fixtures/multi-compiler-one-configuration/webpack.config.js"; +import simpleConfig from "./fixtures/simple-config/webpack.config.js"; +import portsMap from "./ports-map.js"; -const { describe, it } = require("node:test"); -const { expect } = require("expect"); -const { klona } = require("klona/full"); -const webpack = require("webpack"); -const Server = require("../lib/Server"); -const port = require("./ports-map")["normalize-option"]; +const port = portsMap["normalize-option"]; describe("normalize options", () => { const cases = [ @@ -577,7 +579,7 @@ describe("normalize options", () => { let webpackConfig; if (item.multiCompiler) { - webpackConfig = require("./fixtures/multi-compiler-one-configuration/webpack.config"); + webpackConfig = multiCompilerConfig; if (Array.isArray(item.webpackConfig)) { webpackConfig = item.webpackConfig.map((config, index) => ({ @@ -586,7 +588,7 @@ describe("normalize options", () => { })); } } else { - webpackConfig = require("./fixtures/simple-config/webpack.config"); + webpackConfig = simpleConfig; if (item.webpackConfig) { webpackConfig = { diff --git a/test/ports-map.js b/test/ports-map.js index d898970fdf..e980495bc9 100644 --- a/test/ports-map.js +++ b/test/ports-map.js @@ -1,5 +1,3 @@ -"use strict"; - // important: new port mappings must be added to the bottom of this list const listOfTests = { // CLI tests @@ -98,7 +96,7 @@ for (const key of Object.keys(listOfTests)) { const busy = {}; -module.exports = new Proxy(ports, { +export default new Proxy(ports, { get(target, name) { if (!target[name]) { throw new Error( diff --git a/test/server/open-option.test.js b/test/server/open-option.test.js index 7a973b70b6..e8379918c9 100644 --- a/test/server/open-option.test.js +++ b/test/server/open-option.test.js @@ -1,12 +1,12 @@ -"use strict"; - -const { afterEach, beforeEach, describe, it, mock } = require("node:test"); -const { expect } = require("expect"); -const { fn, spyOn } = require("jest-mock"); -const webpack = require("webpack"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/simple-config/webpack.config"); -const port = require("../ports-map")["open-option"]; +import { afterEach, beforeEach, describe, it, mock } from "node:test"; +import { expect } from "expect"; +import { fn, spyOn } from "jest-mock"; +import webpack from "webpack"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/simple-config/webpack.config.js"; +import portsMap from "../ports-map.js"; + +const port = portsMap["open-option"]; const internalIPv4 = Server.findIp("v4", false); diff --git a/test/server/proxy-option.test.js b/test/server/proxy-option.test.js index 81cb0bd49c..e5c1e6b5d7 100644 --- a/test/server/proxy-option.test.js +++ b/test/server/proxy-option.test.js @@ -1,18 +1,20 @@ -"use strict"; - -const path = require("node:path"); -const { after, before, beforeEach, describe, it } = require("node:test"); -const { expect } = require("expect"); -const express = require("express"); -const { spyOn } = require("jest-mock"); -const request = require("supertest"); -const webpack = require("webpack"); -const WebSocket = require("ws"); -const Server = require("../../lib/Server"); -const config = require("../fixtures/proxy-config/webpack.config"); -const [port1, port2, port3, port4] = require("../ports-map")["proxy-option"]; - -const WebSocketServer = WebSocket.Server; +import path from "node:path"; +import { after, before, beforeEach, describe, it } from "node:test"; +import { fileURLToPath } from "node:url"; +import { expect } from "expect"; +import express from "express"; +import { spyOn } from "jest-mock"; +import request from "supertest"; +import webpack from "webpack"; +import WebSocket, { WebSocketServer } from "ws"; +import Server from "../../lib/Server.js"; +import config from "../fixtures/proxy-config/webpack.config.js"; +import portsMap from "../ports-map.js"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +const [port1, port2, port3, port4] = portsMap["proxy-option"]; + const staticDirectory = path.resolve(__dirname, "../fixtures/proxy-config"); const proxyOptionPathsAsProperties = [ diff --git a/test/validate-options.test.js b/test/validate-options.test.js index 8936e3662e..4fe34a9bf6 100644 --- a/test/validate-options.test.js +++ b/test/validate-options.test.js @@ -1,15 +1,17 @@ -"use strict"; +import os from "node:os"; +import path from "node:path"; +import { after, before, describe, it } from "node:test"; +import { fileURLToPath } from "node:url"; +import connect from "connect"; +import { expect } from "expect"; +import fs from "graceful-fs"; +import { spyOn } from "jest-mock"; +import { Volume, createFsFromVolume } from "memfs"; +import webpack from "webpack"; +import Server from "../lib/Server.js"; +import config from "./fixtures/simple-config/webpack.config.js"; -const os = require("node:os"); -const path = require("node:path"); -const { after, before, describe, it } = require("node:test"); -const { expect } = require("expect"); -const { readFileSync } = require("graceful-fs"); -const { spyOn } = require("jest-mock"); -const { Volume, createFsFromVolume } = require("memfs"); -const webpack = require("webpack"); -const Server = require("../lib/Server"); -const config = require("./fixtures/simple-config/webpack.config"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); const httpsCertificateDirectory = path.join( __dirname, @@ -272,18 +274,18 @@ const tests = { { type: "https", options: { - ca: readFileSync( - path.join(httpsCertificateDirectory, "ca.pem"), - ).toString(), - pfx: readFileSync( - path.join(httpsCertificateDirectory, "server.pfx"), - ).toString(), - key: readFileSync( - path.join(httpsCertificateDirectory, "server.key"), - ).toString(), - cert: readFileSync( - path.join(httpsCertificateDirectory, "server.crt"), - ).toString(), + ca: fs + .readFileSync(path.join(httpsCertificateDirectory, "ca.pem")) + .toString(), + pfx: fs + .readFileSync(path.join(httpsCertificateDirectory, "server.pfx")) + .toString(), + key: fs + .readFileSync(path.join(httpsCertificateDirectory, "server.key")) + .toString(), + cert: fs + .readFileSync(path.join(httpsCertificateDirectory, "server.crt")) + .toString(), passphrase: "webpack-dev-server", }, }, @@ -291,24 +293,24 @@ const tests = { type: "https", options: { ca: [ - readFileSync( - path.join(httpsCertificateDirectory, "ca.pem"), - ).toString(), + fs + .readFileSync(path.join(httpsCertificateDirectory, "ca.pem")) + .toString(), ], pfx: [ - readFileSync( - path.join(httpsCertificateDirectory, "server.pfx"), - ).toString(), + fs + .readFileSync(path.join(httpsCertificateDirectory, "server.pfx")) + .toString(), ], key: [ - readFileSync( - path.join(httpsCertificateDirectory, "server.key"), - ).toString(), + fs + .readFileSync(path.join(httpsCertificateDirectory, "server.key")) + .toString(), ], cert: [ - readFileSync( - path.join(httpsCertificateDirectory, "server.crt"), - ).toString(), + fs + .readFileSync(path.join(httpsCertificateDirectory, "server.crt")) + .toString(), ], passphrase: "webpack-dev-server", }, @@ -316,10 +318,14 @@ const tests = { { type: "https", options: { - ca: readFileSync(path.join(httpsCertificateDirectory, "ca.pem")), - pfx: readFileSync(path.join(httpsCertificateDirectory, "server.pfx")), - key: readFileSync(path.join(httpsCertificateDirectory, "server.key")), - cert: readFileSync( + ca: fs.readFileSync(path.join(httpsCertificateDirectory, "ca.pem")), + pfx: fs.readFileSync( + path.join(httpsCertificateDirectory, "server.pfx"), + ), + key: fs.readFileSync( + path.join(httpsCertificateDirectory, "server.key"), + ), + cert: fs.readFileSync( path.join(httpsCertificateDirectory, "server.crt"), ), passphrase: "webpack-dev-server", @@ -328,15 +334,15 @@ const tests = { { type: "https", options: { - ca: [readFileSync(path.join(httpsCertificateDirectory, "ca.pem"))], + ca: [fs.readFileSync(path.join(httpsCertificateDirectory, "ca.pem"))], pfx: [ - readFileSync(path.join(httpsCertificateDirectory, "server.pfx")), + fs.readFileSync(path.join(httpsCertificateDirectory, "server.pfx")), ], key: [ - readFileSync(path.join(httpsCertificateDirectory, "server.key")), + fs.readFileSync(path.join(httpsCertificateDirectory, "server.key")), ], cert: [ - readFileSync(path.join(httpsCertificateDirectory, "server.crt")), + fs.readFileSync(path.join(httpsCertificateDirectory, "server.crt")), ], passphrase: "webpack-dev-server", }, @@ -356,10 +362,14 @@ const tests = { type: "https", options: { minVersion: "TLSv1.1", - ca: readFileSync(path.join(httpsCertificateDirectory, "ca.pem")), - pfx: readFileSync(path.join(httpsCertificateDirectory, "server.pfx")), - key: readFileSync(path.join(httpsCertificateDirectory, "server.key")), - cert: readFileSync( + ca: fs.readFileSync(path.join(httpsCertificateDirectory, "ca.pem")), + pfx: fs.readFileSync( + path.join(httpsCertificateDirectory, "server.pfx"), + ), + key: fs.readFileSync( + path.join(httpsCertificateDirectory, "server.key"), + ), + cert: fs.readFileSync( path.join(httpsCertificateDirectory, "server.crt"), ), passphrase: "webpack-dev-server", @@ -368,22 +378,22 @@ const tests = { { type: "https", options: { - ca: readFileSync(path.join(httpsCertificateDirectory, "ca.pem")), + ca: fs.readFileSync(path.join(httpsCertificateDirectory, "ca.pem")), pfx: [ { - buf: readFileSync( + buf: fs.readFileSync( path.join(httpsCertificateDirectory, "server.pfx"), ), }, ], key: [ { - pem: readFileSync( + pem: fs.readFileSync( path.join(httpsCertificateDirectory, "server.key"), ), }, ], - cert: readFileSync( + cert: fs.readFileSync( path.join(httpsCertificateDirectory, "server.crt"), ), passphrase: "webpack-dev-server", @@ -435,10 +445,10 @@ const tests = { }, app: { success: [ - () => require("connect")(), + () => connect(), async () => new Promise((resolve) => { - resolve(require("connect")()); + resolve(connect()); }), ], failure: ["test", false], diff --git a/tsconfig.json b/tsconfig.json index a28baacbf5..8e5e60299a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,14 +1,15 @@ { "compilerOptions": { - "target": "ES2017", - "module": "commonjs", - "lib": ["es2017", "dom"], + "target": "ES2024", + "module": "nodenext", + "moduleResolution": "nodenext", + "lib": ["es2024", "dom"], "allowJs": true, "checkJs": true, "strict": true, "types": ["node"], "resolveJsonModule": true, - "allowSyntheticDefaultImports": true + "esModuleInterop": true }, "include": ["./bin/**/*", "./lib/**/*"] } diff --git a/types/lib/Server.d.ts b/types/lib/Server.d.ts index 80a7fbe2df..3cbce6cdc2 100644 --- a/types/lib/Server.d.ts +++ b/types/lib/Server.d.ts @@ -1,4 +1,340 @@ -export = Server; +export default Server; +export type Schema = import("schema-utils").Schema; +export type Compiler = import("webpack").Compiler; +export type MultiCompiler = import("webpack").MultiCompiler; +export type WebpackConfiguration = import("webpack").Configuration; +export type StatsOptions = import("webpack").StatsOptions; +export type StatsCompilation = import("webpack").StatsCompilation; +export type Stats = import("webpack").Stats; +export type MultiStats = import("webpack").MultiStats; +export type NetworkInterfaceInfo = import("os").NetworkInterfaceInfo; +export type WatchOptions = import("chokidar").ChokidarOptions; +export type FSWatcher = import("chokidar").FSWatcher; +export type ConnectHistoryApiFallbackOptions = + import("connect-history-api-fallback").Options; +export type Bonjour = import("bonjour-service").Bonjour; +export type BonjourOptions = import("bonjour-service").Service; +export type RequestHandler = import("http-proxy-middleware").RequestHandler; +export type HttpProxyMiddlewareOptions = + import("http-proxy-middleware").Options; +export type HttpProxyMiddlewareOptionsFilter = + import("http-proxy-middleware").Filter; +export type ServeIndexOptions = import("serve-index").Options; +export type ServeStaticOptions = import("serve-static").ServeStaticOptions; +export type IPv4 = import("ipaddr.js").IPv4; +export type IPv6 = import("ipaddr.js").IPv6; +export type Socket = import("net").Socket; +export type HTTPServer = import("http").Server; +export type IncomingMessage = import("http").IncomingMessage; +export type ServerResponse = import("http").ServerResponse; +export type OpenOptions = import("open").Options; +export type ExpressApplication = import("express").Application; +export type ExpressRequestHandler = import("express").RequestHandler; +export type ExpressErrorRequestHandler = import("express").ErrorRequestHandler; +export type ExpressRequest = import("express").Request; +export type ExpressResponse = import("express").Response; +export type EXPECTED_ANY = any; +export type NextFunction = (err?: EXPECTED_ANY) => void; +export type SimpleHandleFunction = ( + req: IncomingMessage, + res: ServerResponse, +) => void; +export type NextHandleFunction = ( + req: IncomingMessage, + res: ServerResponse, + next: NextFunction, +) => void; +export type ErrorHandleFunction = ( + err: EXPECTED_ANY, + req: IncomingMessage, + res: ServerResponse, + next: NextFunction, +) => void; +export type HandleFunction = + | SimpleHandleFunction + | NextHandleFunction + | ErrorHandleFunction; +export type ServerOptions = import("https").ServerOptions; +export type Request< + T extends BasicApplication = import("express").Application, +> = T extends ExpressApplication ? ExpressRequest : IncomingMessage; +export type Response< + T extends BasicApplication = import("express").Application, +> = T extends ExpressApplication ? ExpressResponse : ServerResponse; +export type DevMiddlewareOptions< + T extends Request, + U extends Response, +> = import("webpack-dev-middleware").Options; +export type DevMiddlewareContext< + T extends Request, + U extends Response, +> = import("webpack-dev-middleware").Context; +export type Host = "local-ip" | "local-ipv4" | "local-ipv6" | string; +export type Port = number | string | "auto"; +export type WatchFiles = { + /** + * paths + */ + paths: string | string[]; + /** + * options + */ + options?: + | (WatchOptions & { + aggregateTimeout?: number; + ignored?: WatchOptions["ignored"]; + poll?: number | boolean; + }) + | undefined; +}; +export type Static = { + /** + * directory + */ + directory?: string | undefined; + /** + * public path + */ + publicPath?: (string | string[]) | undefined; + /** + * serve index + */ + serveIndex?: (boolean | ServeIndexOptions) | undefined; + /** + * static options + */ + staticOptions?: ServeStaticOptions | undefined; + /** + * watch and watch options + */ + watch?: + | ( + | boolean + | (WatchOptions & { + aggregateTimeout?: number; + ignored?: WatchOptions["ignored"]; + poll?: number | boolean; + }) + ) + | undefined; +}; +export type NormalizedStatic = { + directory: string; + publicPath: string[]; + serveIndex: false | ServeIndexOptions; + staticOptions: ServeStaticOptions; + watch: false | WatchOptions; +}; +export type ServerType< + A extends BasicApplication = import("express").Application, + S extends BasicServer = import("http").Server< + typeof import("http").IncomingMessage, + typeof import("http").ServerResponse + >, +> = + | "http" + | "https" + | "http2" + | string + | ((serverOptions: ServerOptions, application: A) => S); +export type ServerConfiguration< + A extends BasicApplication = import("express").Application, + S extends BasicServer = import("http").Server< + typeof import("http").IncomingMessage, + typeof import("http").ServerResponse + >, +> = { + /** + * type + */ + type?: ServerType | undefined; + /** + * options + */ + options?: ServerOptions | undefined; +}; +export type WebSocketServerConfiguration = { + /** + * type + */ + type?: ("ws" | string | (() => WebSocketServerConfiguration)) | undefined; + /** + * options + */ + options?: Record | undefined; +}; +export type ClientConnection = (import("ws").WebSocket & { + send: import("ws").WebSocket["send"]; + terminate: import("ws").WebSocket["terminate"]; + ping: import("ws").WebSocket["ping"]; +}) & { + isAlive?: boolean; +}; +export type WebSocketServer = import("ws").WebSocketServer & { + close: import("ws").WebSocketServer["close"]; +}; +export type WebSocketServerImplementation = { + implementation: WebSocketServer; + clients: ClientConnection[]; +}; +export type ProxyConfigArrayItem = { + path?: HttpProxyMiddlewareOptionsFilter | undefined; + context?: HttpProxyMiddlewareOptionsFilter | undefined; +} & HttpProxyMiddlewareOptions; +export type ProxyConfigArray = ( + | ProxyConfigArrayItem + | (( + req?: Request | undefined, + res?: Response | undefined, + next?: NextFunction | undefined, + ) => ProxyConfigArrayItem) +)[]; +export type OpenApp = { + name?: string | undefined; + arguments?: string[] | undefined; +}; +export type Open = { + app?: (string | string[] | OpenApp) | undefined; + /** + * target + */ + target?: (string | string[]) | undefined; +}; +export type NormalizedOpen = { + target: string; + options: import("open").Options; +}; +export type WebSocketURL = { + /** + * hostname + */ + hostname?: string | undefined; + /** + * password + */ + password?: string | undefined; + /** + * pathname + */ + pathname?: string | undefined; + /** + * port + */ + port?: (number | string) | undefined; + /** + * protocol + */ + protocol?: string | undefined; + /** + * username + */ + username?: string | undefined; +}; +export type OverlayMessageOptions = boolean | ((error: Error) => void); +export type ClientConfiguration = { + /** + * logging + */ + logging?: + | ("log" | "info" | "warn" | "error" | "none" | "verbose") + | undefined; + /** + * overlay + */ + overlay?: + | ( + | boolean + | { + warnings?: OverlayMessageOptions; + errors?: OverlayMessageOptions; + runtimeErrors?: OverlayMessageOptions; + } + ) + | undefined; + /** + * progress + */ + progress?: boolean | undefined; + /** + * reconnect + */ + reconnect?: (boolean | number) | undefined; + /** + * web socket transport + */ + webSocketTransport?: ("ws" | string) | undefined; + /** + * web socket URL + */ + webSocketURL?: (string | WebSocketURL) | undefined; +}; +export type Headers = + | { + key: string; + value: string; + }[] + | Record; +export type MiddlewareHandler< + T extends BasicApplication = import("express").Application, +> = T extends ExpressApplication + ? ExpressRequestHandler | ExpressErrorRequestHandler + : HandleFunction; +export type MiddlewareObject = { + name?: string; + path?: string; + middleware: MiddlewareHandler; +}; +export type Middleware = MiddlewareObject | MiddlewareHandler; +export type BasicServer = import("net").Server | import("tls").Server; +export type Configuration< + A extends BasicApplication = import("express").Application, + S extends BasicServer = import("http").Server< + typeof import("http").IncomingMessage, + typeof import("http").ServerResponse + >, +> = { + ipc?: (boolean | string) | undefined; + host?: Host | undefined; + port?: Port | undefined; + hot?: (boolean | "only") | undefined; + liveReload?: boolean | undefined; + devMiddleware?: DevMiddlewareOptions | undefined; + compress?: boolean | undefined; + allowedHosts?: ("auto" | "all" | string | string[]) | undefined; + historyApiFallback?: (boolean | ConnectHistoryApiFallbackOptions) | undefined; + bonjour?: (boolean | Record | BonjourOptions) | undefined; + watchFiles?: + | (string | string[] | WatchFiles | (string | WatchFiles)[]) + | undefined; + static?: (boolean | string | Static | (string | Static)[]) | undefined; + server?: (ServerType | ServerConfiguration) | undefined; + app?: (() => Promise) | undefined; + webSocketServer?: + | (boolean | "ws" | string | WebSocketServerConfiguration) + | undefined; + proxy?: ProxyConfigArray | undefined; + open?: (boolean | string | Open | (string | Open)[]) | undefined; + setupExitSignals?: boolean | undefined; + client?: (boolean | ClientConfiguration) | undefined; + headers?: + | ( + | Headers + | (( + req: Request, + res: Response, + context: DevMiddlewareContext | undefined, + ) => Headers) + ) + | undefined; + onListening?: ((devServer: Server) => void) | undefined; + setupMiddlewares?: + | ((middlewares: Middleware[], devServer: Server) => Middleware[]) + | undefined; +}; +export type FunctionReturning = () => T; +export type BasicApplication = { + use: typeof useFn; +}; /** * @typedef {object} BasicApplication * @property {typeof useFn} use @@ -1179,7 +1515,7 @@ declare class Server< staticWatchers: FSWatcher[]; /** * @private - * @type {{ name: string | symbol, listener: (...args: EXPECTED_ANY[]) => void}[] }} + * @type {{ name: string | symbol, listener: (...args: EXPECTED_ANY[]) => void }[]} } */ private listeners; /** @@ -1199,6 +1535,7 @@ declare class Server< /** * @private * @param {Compiler} compiler compiler + * @returns {Promise} */ private addAdditionalEntries; /** @@ -1219,7 +1556,7 @@ declare class Server< /** * @template T * @private - * @returns {T} server transport + * @returns {Promise} server transport */ private getServerTransport; /** @@ -1265,17 +1602,17 @@ declare class Server< private stats; /** * @private - * @returns {void} + * @returns {Promise} */ private setupWatchStaticFiles; /** * @private - * @returns {void} + * @returns {Promise} */ private setupWatchFiles; /** * @private - * @returns {void} + * @returns {Promise} */ private setupMiddlewares; /** @type {import("webpack-dev-middleware").API} */ @@ -1285,534 +1622,133 @@ declare class Server< import("express-serve-static-core").ParamsDictionary, any, any, - qs.ParsedQs, - Record - >, - import("express").Response> - > - | undefined; - /** - * @private - * @returns {Promise} - */ - private createServer; - /** @type {S | undefined} */ - server: S | undefined; - isTlsServer: boolean | undefined; - /** - * @private - * @returns {void} - */ - private createWebSocketServer; - /** @type {WebSocketServerImplementation | undefined | null} */ - webSocketServer: WebSocketServerImplementation | undefined | null; - /** - * @private - * @param {string} defaultOpenTarget default open target - * @returns {Promise} - */ - private openBrowser; - /** - * @private - * @returns {void} - */ - private runBonjour; - /** - * @private - * @type {Bonjour | undefined} - */ - private bonjour; - /** - * @private - * @param {() => void} callback callback - * @returns {void} - */ - private stopBonjour; - /** - * @private - * @returns {Promise} - */ - private logStatus; - /** - * @private - * @param {Request} req request - * @param {Response} res response - * @param {NextFunction} next next function - */ - private setHeaders; - /** - * @private - * @param {string} value value - * @returns {boolean} true when host allowed, otherwise false - */ - private isHostAllowed; - /** - * @private - * @param {{ [key: string]: string | undefined }} headers headers - * @param {string} headerToCheck header to check - * @param {boolean} validateHost need to validate host - * @returns {boolean} true when host is valid, otherwise false - */ - private isValidHost; - /** - * @private - * @param {{ [key: string]: string | undefined }} headers headers - * @returns {boolean} true when is same origin, otherwise false - */ - private isSameOrigin; - /** - * @param {ClientConnection[]} clients clients - * @param {string} type type - * @param {EXPECTED_ANY=} data data - * @param {EXPECTED_ANY=} params params - */ - sendMessage( - clients: ClientConnection[], - type: string, - data?: EXPECTED_ANY | undefined, - params?: EXPECTED_ANY | undefined, - ): void; - /** - * @private - * @param {ClientConnection[]} clients clients - * @param {StatsCompilation} stats stats - * @param {boolean=} force force - */ - private sendStats; - /** - * @param {string | string[]} watchPath watch path - * @param {WatchOptions=} watchOptions watch options - */ - watchFiles( - watchPath: string | string[], - watchOptions?: WatchOptions | undefined, - ): void; - /** - * @param {import("webpack-dev-middleware").Callback=} callback callback - */ - invalidate( - callback?: import("webpack-dev-middleware").Callback | undefined, - ): void; - /** - * @returns {Promise} - */ - start(): Promise; - /** - * @param {((err?: Error) => void)=} callback callback - */ - startCallback(callback?: ((err?: Error) => void) | undefined): void; - /** - * @returns {Promise} - */ - stop(): Promise; - /** - * @param {((err?: Error) => void)=} callback callback - */ - stopCallback(callback?: ((err?: Error) => void) | undefined): void; - #private; -} -declare namespace Server { - export { - Schema, - Compiler, - MultiCompiler, - WebpackConfiguration, - StatsOptions, - StatsCompilation, - Stats, - MultiStats, - NetworkInterfaceInfo, - WatchOptions, - FSWatcher, - ConnectHistoryApiFallbackOptions, - Bonjour, - BonjourOptions, - RequestHandler, - HttpProxyMiddlewareOptions, - HttpProxyMiddlewareOptionsFilter, - ServeIndexOptions, - ServeStaticOptions, - IPv4, - IPv6, - Socket, - HTTPServer, - IncomingMessage, - ServerResponse, - OpenOptions, - ExpressApplication, - ExpressRequestHandler, - ExpressErrorRequestHandler, - ExpressRequest, - ExpressResponse, - EXPECTED_ANY, - NextFunction, - SimpleHandleFunction, - NextHandleFunction, - ErrorHandleFunction, - HandleFunction, - ServerOptions, - Request, - Response, - DevMiddlewareOptions, - DevMiddlewareContext, - Host, - Port, - WatchFiles, - Static, - NormalizedStatic, - ServerType, - ServerConfiguration, - WebSocketServerConfiguration, - ClientConnection, - WebSocketServer, - WebSocketServerImplementation, - ProxyConfigArrayItem, - ProxyConfigArray, - OpenApp, - Open, - NormalizedOpen, - WebSocketURL, - OverlayMessageOptions, - ClientConfiguration, - Headers, - MiddlewareHandler, - MiddlewareObject, - Middleware, - BasicServer, - Configuration, - FunctionReturning, - BasicApplication, - }; -} -type Schema = import("schema-utils/declarations/validate").Schema; -type Compiler = import("webpack").Compiler; -type MultiCompiler = import("webpack").MultiCompiler; -type WebpackConfiguration = import("webpack").Configuration; -type StatsOptions = import("webpack").StatsOptions; -type StatsCompilation = import("webpack").StatsCompilation; -type Stats = import("webpack").Stats; -type MultiStats = import("webpack").MultiStats; -type NetworkInterfaceInfo = import("os").NetworkInterfaceInfo; -type WatchOptions = import("chokidar").ChokidarOptions; -type FSWatcher = import("chokidar").FSWatcher; -type ConnectHistoryApiFallbackOptions = - import("connect-history-api-fallback").Options; -type Bonjour = import("bonjour-service").Bonjour; -type BonjourOptions = import("bonjour-service").Service; -type RequestHandler = import("http-proxy-middleware").RequestHandler; -type HttpProxyMiddlewareOptions = import("http-proxy-middleware").Options; -type HttpProxyMiddlewareOptionsFilter = import("http-proxy-middleware").Filter; -type ServeIndexOptions = import("serve-index").Options; -type ServeStaticOptions = import("serve-static").ServeStaticOptions; -type IPv4 = import("ipaddr.js").IPv4; -type IPv6 = import("ipaddr.js").IPv6; -type Socket = import("net").Socket; -type HTTPServer = import("http").Server; -type IncomingMessage = import("http").IncomingMessage; -type ServerResponse = import("http").ServerResponse; -type OpenOptions = import("open").Options; -type ExpressApplication = import("express").Application; -type ExpressRequestHandler = import("express").RequestHandler; -type ExpressErrorRequestHandler = import("express").ErrorRequestHandler; -type ExpressRequest = import("express").Request; -type ExpressResponse = import("express").Response; -type EXPECTED_ANY = any; -type NextFunction = (err?: EXPECTED_ANY) => void; -type SimpleHandleFunction = (req: IncomingMessage, res: ServerResponse) => void; -type NextHandleFunction = ( - req: IncomingMessage, - res: ServerResponse, - next: NextFunction, -) => void; -type ErrorHandleFunction = ( - err: EXPECTED_ANY, - req: IncomingMessage, - res: ServerResponse, - next: NextFunction, -) => void; -type HandleFunction = - | SimpleHandleFunction - | NextHandleFunction - | ErrorHandleFunction; -type ServerOptions = import("https").ServerOptions; -type Request = - T extends ExpressApplication ? ExpressRequest : IncomingMessage; -type Response = - T extends ExpressApplication ? ExpressResponse : ServerResponse; -type DevMiddlewareOptions< - T extends Request, - U extends Response, -> = import("webpack-dev-middleware").Options; -type DevMiddlewareContext< - T extends Request, - U extends Response, -> = import("webpack-dev-middleware").Context; -type Host = "local-ip" | "local-ipv4" | "local-ipv6" | string; -type Port = number | string | "auto"; -type WatchFiles = { - /** - * paths - */ - paths: string | string[]; - /** - * options - */ - options?: - | (WatchOptions & { - aggregateTimeout?: number; - ignored?: WatchOptions["ignored"]; - poll?: number | boolean; - }) - | undefined; -}; -type Static = { - /** - * directory - */ - directory?: string | undefined; - /** - * public path - */ - publicPath?: (string | string[]) | undefined; - /** - * serve index - */ - serveIndex?: (boolean | ServeIndexOptions) | undefined; + import("qs").ParsedQs, + Record + >, + import("express").Response> + > + | undefined; /** - * static options + * @private + * @returns {Promise} */ - staticOptions?: ServeStaticOptions | undefined; + private createServer; + /** @type {S | undefined} */ + server: S | undefined; + isTlsServer: boolean | undefined; /** - * watch and watch options + * @private + * @returns {Promise} */ - watch?: - | ( - | boolean - | (WatchOptions & { - aggregateTimeout?: number; - ignored?: WatchOptions["ignored"]; - poll?: number | boolean; - }) - ) - | undefined; -}; -type NormalizedStatic = { - directory: string; - publicPath: string[]; - serveIndex: false | ServeIndexOptions; - staticOptions: ServeStaticOptions; - watch: false | WatchOptions; -}; -type ServerType< - A extends BasicApplication = import("express").Application, - S extends BasicServer = import("http").Server< - typeof import("http").IncomingMessage, - typeof import("http").ServerResponse - >, -> = - | "http" - | "https" - | "http2" - | string - | ((serverOptions: ServerOptions, application: A) => S); -type ServerConfiguration< - A extends BasicApplication = import("express").Application, - S extends BasicServer = import("http").Server< - typeof import("http").IncomingMessage, - typeof import("http").ServerResponse - >, -> = { + private createWebSocketServer; + /** @type {WebSocketServerImplementation | undefined | null} */ + webSocketServer: WebSocketServerImplementation | undefined | null; /** - * type + * @private + * @param {string} defaultOpenTarget default open target + * @returns {Promise} */ - type?: ServerType | undefined; + private openBrowser; /** - * options + * @private + * @returns {Promise} */ - options?: ServerOptions | undefined; -}; -type WebSocketServerConfiguration = { + private runBonjour; /** - * type + * @private + * @type {Bonjour | undefined} */ - type?: ("ws" | string | (() => WebSocketServerConfiguration)) | undefined; + private bonjour; /** - * options + * @private + * @param {() => void} callback callback + * @returns {void} */ - options?: Record | undefined; -}; -type ClientConnection = (import("ws").WebSocket & { - send: import("ws").WebSocket["send"]; - terminate: import("ws").WebSocket["terminate"]; - ping: import("ws").WebSocket["ping"]; -}) & { - isAlive?: boolean; -}; -type WebSocketServer = import("ws").WebSocketServer & { - close: import("ws").WebSocketServer["close"]; -}; -type WebSocketServerImplementation = { - implementation: WebSocketServer; - clients: ClientConnection[]; -}; -type ProxyConfigArrayItem = { - path?: HttpProxyMiddlewareOptionsFilter | undefined; - context?: HttpProxyMiddlewareOptionsFilter | undefined; -} & HttpProxyMiddlewareOptions; -type ProxyConfigArray = ( - | ProxyConfigArrayItem - | (( - req?: Request | undefined, - res?: Response | undefined, - next?: NextFunction | undefined, - ) => ProxyConfigArrayItem) -)[]; -type OpenApp = { - name?: string | undefined; - arguments?: string[] | undefined; -}; -type Open = { - app?: (string | string[] | OpenApp) | undefined; + private stopBonjour; /** - * target + * @private + * @returns {Promise} */ - target?: (string | string[]) | undefined; -}; -type NormalizedOpen = { - target: string; - options: import("open").Options; -}; -type WebSocketURL = { + private logStatus; /** - * hostname + * @private + * @param {Request} req request + * @param {Response} res response + * @param {NextFunction} next next function */ - hostname?: string | undefined; + private setHeaders; /** - * password + * @private + * @param {string} value value + * @returns {boolean} true when host allowed, otherwise false */ - password?: string | undefined; + private isHostAllowed; /** - * pathname + * @private + * @param {{ [key: string]: string | undefined }} headers headers + * @param {string} headerToCheck header to check + * @param {boolean} validateHost need to validate host + * @returns {boolean} true when host is valid, otherwise false */ - pathname?: string | undefined; + private isValidHost; /** - * port + * @private + * @param {{ [key: string]: string | undefined }} headers headers + * @returns {boolean} true when is same origin, otherwise false */ - port?: (number | string) | undefined; + private isSameOrigin; /** - * protocol + * @param {ClientConnection[]} clients clients + * @param {string} type type + * @param {EXPECTED_ANY=} data data + * @param {EXPECTED_ANY=} params params */ - protocol?: string | undefined; + sendMessage( + clients: ClientConnection[], + type: string, + data?: EXPECTED_ANY | undefined, + params?: EXPECTED_ANY | undefined, + ): void; /** - * username + * @private + * @param {ClientConnection[]} clients clients + * @param {StatsCompilation} stats stats + * @param {boolean=} force force */ - username?: string | undefined; -}; -type OverlayMessageOptions = boolean | ((error: Error) => void); -type ClientConfiguration = { + private sendStats; /** - * logging + * @param {string | string[]} watchPath watch path + * @param {WatchOptions=} watchOptions watch options + * @returns {Promise} */ - logging?: - | ("log" | "info" | "warn" | "error" | "none" | "verbose") - | undefined; + watchFiles( + watchPath: string | string[], + watchOptions?: WatchOptions | undefined, + ): Promise; /** - * overlay + * @param {import("webpack-dev-middleware").Callback=} callback callback */ - overlay?: - | ( - | boolean - | { - warnings?: OverlayMessageOptions; - errors?: OverlayMessageOptions; - runtimeErrors?: OverlayMessageOptions; - } - ) - | undefined; + invalidate( + callback?: import("webpack-dev-middleware").Callback | undefined, + ): void; /** - * progress + * @returns {Promise} */ - progress?: boolean | undefined; + start(): Promise; /** - * reconnect + * @param {((err?: Error) => void)=} callback callback */ - reconnect?: (boolean | number) | undefined; + startCallback(callback?: ((err?: Error) => void) | undefined): void; /** - * web socket transport + * @returns {Promise} */ - webSocketTransport?: ("ws" | string) | undefined; + stop(): Promise; /** - * web socket URL + * @param {((err?: Error) => void)=} callback callback */ - webSocketURL?: (string | WebSocketURL) | undefined; -}; -type Headers = - | Array<{ - key: string; - value: string; - }> - | Record; -type MiddlewareHandler< - T extends BasicApplication = import("express").Application, -> = T extends ExpressApplication - ? ExpressRequestHandler | ExpressErrorRequestHandler - : HandleFunction; -type MiddlewareObject = { - name?: string; - path?: string; - middleware: MiddlewareHandler; -}; -type Middleware = MiddlewareObject | MiddlewareHandler; -type BasicServer = import("net").Server | import("tls").Server; -type Configuration< - A extends BasicApplication = import("express").Application, - S extends BasicServer = import("http").Server< - typeof import("http").IncomingMessage, - typeof import("http").ServerResponse - >, -> = { - ipc?: (boolean | string) | undefined; - host?: Host | undefined; - port?: Port | undefined; - hot?: (boolean | "only") | undefined; - liveReload?: boolean | undefined; - devMiddleware?: DevMiddlewareOptions | undefined; - compress?: boolean | undefined; - allowedHosts?: ("auto" | "all" | string | string[]) | undefined; - historyApiFallback?: (boolean | ConnectHistoryApiFallbackOptions) | undefined; - bonjour?: (boolean | Record | BonjourOptions) | undefined; - watchFiles?: - | (string | string[] | WatchFiles | Array) - | undefined; - static?: (boolean | string | Static | Array) | undefined; - server?: (ServerType | ServerConfiguration) | undefined; - app?: (() => Promise) | undefined; - webSocketServer?: - | (boolean | "ws" | string | WebSocketServerConfiguration) - | undefined; - proxy?: ProxyConfigArray | undefined; - open?: (boolean | string | Open | Array) | undefined; - setupExitSignals?: boolean | undefined; - client?: (boolean | ClientConfiguration) | undefined; - headers?: - | ( - | Headers - | (( - req: Request, - res: Response, - context: DevMiddlewareContext | undefined, - ) => Headers) - ) - | undefined; - onListening?: ((devServer: Server) => void) | undefined; - setupMiddlewares?: - | ((middlewares: Middleware[], devServer: Server) => Middleware[]) - | undefined; -}; -type FunctionReturning = () => T; -type BasicApplication = { - use: typeof useFn; -}; + stopCallback(callback?: ((err?: Error) => void) | undefined): void; + #private; +} /** * @overload * @param {NextHandleFunction} fn function diff --git a/types/lib/getPort.d.ts b/types/lib/getPort.d.ts index 677eb97671..d6eec701a3 100644 --- a/types/lib/getPort.d.ts +++ b/types/lib/getPort.d.ts @@ -1,4 +1,4 @@ -export = getPorts; +export default getPorts; /** * @param {number} basePort base port * @param {string=} host host diff --git a/types/lib/servers/BaseServer.d.ts b/types/lib/servers/BaseServer.d.ts index 07d29fb4b5..4094129b1a 100644 --- a/types/lib/servers/BaseServer.d.ts +++ b/types/lib/servers/BaseServer.d.ts @@ -1,15 +1,12 @@ -export = BaseServer; -declare class BaseServer { +/** @typedef {import("../Server.js").ClientConnection} ClientConnection */ +export default class BaseServer { /** - * @param {import("../Server")} server server + * @param {import("../Server.js").default} server server */ - constructor(server: import("../Server")); - /** @type {import("../Server")} */ - server: import("../Server"); + constructor(server: import("../Server.js").default); + /** @type {import("../Server.js").default} */ + server: import("../Server.js").default; /** @type {ClientConnection[]} */ clients: ClientConnection[]; } -declare namespace BaseServer { - export { ClientConnection }; -} -type ClientConnection = import("../Server").ClientConnection; +export type ClientConnection = import("../Server.js").ClientConnection; diff --git a/types/lib/servers/WebsocketServer.d.ts b/types/lib/servers/WebsocketServer.d.ts index ce8c693789..19e7acbcd8 100644 --- a/types/lib/servers/WebsocketServer.d.ts +++ b/types/lib/servers/WebsocketServer.d.ts @@ -1,16 +1,13 @@ -export = WebsocketServer; -declare class WebsocketServer extends BaseServer { +/** @typedef {import("../Server.js").WebSocketServerConfiguration} WebSocketServerConfiguration */ +/** @typedef {import("../Server.js").ClientConnection} ClientConnection */ +export default class WebsocketServer extends BaseServer { static heartbeatInterval: number; - implementation: WebSocket.Server< - typeof WebSocket, + implementation: import("ws").Server< + typeof import("ws").default, typeof import("http").IncomingMessage >; } -declare namespace WebsocketServer { - export { WebSocketServerConfiguration, ClientConnection }; -} -import BaseServer = require("./BaseServer"); -import WebSocket = require("ws"); -type WebSocketServerConfiguration = - import("../Server").WebSocketServerConfiguration; -type ClientConnection = import("../Server").ClientConnection; +export type WebSocketServerConfiguration = + import("../Server.js").WebSocketServerConfiguration; +export type ClientConnection = import("../Server.js").ClientConnection; +import BaseServer from "./BaseServer.js";

Compilation: unnamed[0]

  • foo.js
  • @@ -14,15 +18,23 @@ exports[`Built in routes with multi config should handle GET request to director