diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 9642a61189..bac3c2e10b 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, 21.x] + node-version: [18.x, 20.x, 22.x] shard: ["1/4", "2/4", "3/4", "4/4"] webpack-version: [latest] @@ -120,6 +120,6 @@ jobs: if: matrix.node-version != '18.x' - name: Submit coverage data to codecov - uses: codecov/codecov-action@v3 + uses: codecov/codecov-action@v4 with: token: ${{ secrets.CODECOV_TOKEN }} diff --git a/.gitignore b/.gitignore index 389040450b..ff638ee560 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,7 @@ test/fixtures/watch-files-config/public/assets/non-exist.txt test/fixtures/reload-config/main.css test/fixtures/reload-config-2/main.css !/test/fixtures/static-config/public/node_modules +/test-results/ +/playwright-report/ +/blob-report/ +/playwright/.cache/ diff --git a/CHANGELOG.md b/CHANGELOG.md index 10a463f17f..9b8c907652 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,20 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [5.0.4](https://github.com/webpack/webpack-dev-server/compare/v5.0.3...v5.0.4) (2024-03-19) + + +### Bug Fixes + +* **security:** bump webpack-dev-middleware ([#5112](https://github.com/webpack/webpack-dev-server/issues/5112)) ([aab576a](https://github.com/webpack/webpack-dev-server/commit/aab576a9e4930a1731e8b0380c859552fc9a6e11)) + +### [5.0.3](https://github.com/webpack/webpack-dev-server/compare/v5.0.2...v5.0.3) (2024-03-12) + + +### Bug Fixes + +* **types:** proxy ([#5101](https://github.com/webpack/webpack-dev-server/issues/5101)) ([6e1aed3](https://github.com/webpack/webpack-dev-server/commit/6e1aed30ffd6456935b4fe22851cd560b0eae176)) + ### [5.0.2](https://github.com/webpack/webpack-dev-server/compare/v5.0.1...v5.0.2) (2024-02-16) diff --git a/examples/general/config-array/webpack.config.js b/examples/general/config-array/webpack.config.js index 9880fdf366..3c15ca173b 100644 --- a/examples/general/config-array/webpack.config.js +++ b/examples/general/config-array/webpack.config.js @@ -34,6 +34,7 @@ module.exports = [ output: { filename: "bundle2.js", }, + mode: "development", module: { rules: [ { diff --git a/lib/Server.js b/lib/Server.js index 032ef9a953..05c3c0ba82 100644 --- a/lib/Server.js +++ b/lib/Server.js @@ -18,9 +18,6 @@ const schema = require("./options.json"); /** @typedef {import("webpack").Stats} Stats */ /** @typedef {import("webpack").MultiStats} MultiStats */ /** @typedef {import("os").NetworkInterfaceInfo} NetworkInterfaceInfo */ -/** @typedef {import("express").NextFunction} NextFunction */ -/** @typedef {import("express").RequestHandler} ExpressRequestHandler */ -/** @typedef {import("express").ErrorRequestHandler} ExpressErrorRequestHandler */ /** @typedef {import("chokidar").WatchOptions} WatchOptions */ /** @typedef {import("chokidar").FSWatcher} FSWatcher */ /** @typedef {import("connect-history-api-fallback").Options} ConnectHistoryApiFallbackOptions */ @@ -37,11 +34,28 @@ const schema = require("./options.json"); /** @typedef {import("http").IncomingMessage} IncomingMessage */ /** @typedef {import("http").ServerResponse} ServerResponse */ /** @typedef {import("open").Options} OpenOptions */ +/** @typedef {import("express").Application} ExpressApplication */ +/** @typedef {import("express").RequestHandler} ExpressRequestHandler */ +/** @typedef {import("express").ErrorRequestHandler} ExpressErrorRequestHandler */ +/** @typedef {import("express").Request} ExpressRequest */ +/** @typedef {import("express").Response} ExpressResponse */ + +/** @typedef {(err?: any) => void} NextFunction */ +/** @typedef {(req: IncomingMessage, res: ServerResponse) => void} SimpleHandleFunction */ +/** @typedef {(req: IncomingMessage, res: ServerResponse, next: NextFunction) => void} NextHandleFunction */ +/** @typedef {(err: any, req: IncomingMessage, res: ServerResponse, next: NextFunction) => 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("express").Request} Request */ -/** @typedef {import("express").Response} Response */ +/** + * @template {BasicApplication} [T=ExpressApplication] + * @typedef {T extends ExpressApplication ? ExpressRequest : IncomingMessage} Request + */ +/** + * @template {BasicApplication} [T=ExpressApplication] + * @typedef {T extends ExpressApplication ? ExpressResponse : ServerResponse} Response + */ /** * @template {Request} T @@ -126,10 +140,6 @@ const schema = require("./options.json"); * @typedef {(ProxyConfigArrayItem | ((req?: Request | undefined, res?: Response | undefined, next?: NextFunction | undefined) => ProxyConfigArrayItem))[]} ProxyConfigArray */ -/** - * @typedef {{ [url: string]: string | ProxyConfigArrayItem }} ProxyConfigMap - */ - /** * @typedef {Object} OpenApp * @property {string} [name] @@ -177,10 +187,16 @@ const schema = require("./options.json"); */ /** - * @typedef {{ name?: string, path?: string, middleware: ExpressRequestHandler | ExpressErrorRequestHandler } | ExpressRequestHandler | ExpressErrorRequestHandler} Middleware + * @template {BasicApplication} [T=ExpressApplication] + * @typedef {T extends ExpressApplication ? ExpressRequestHandler | ExpressErrorRequestHandler : HandleFunction} MiddlewareHandler */ /** + * @typedef {{ name?: string, path?: string, middleware: MiddlewareHandler } | MiddlewareHandler } Middleware + */ + +/** + * @template {BasicApplication} [T=ExpressApplication] * @typedef {Object} Configuration * @property {boolean | string} [ipc] * @property {Host} [host] @@ -195,16 +211,16 @@ const schema = require("./options.json"); * @property {string | string[] | WatchFiles | Array} [watchFiles] * @property {boolean | string | Static | Array} [static] * @property {boolean | ServerOptions} [https] - * @property {boolean} [http2] * @property {"http" | "https" | "spdy" | string | ServerConfiguration} [server] + * @property {() => Promise} [app] * @property {boolean | "sockjs" | "ws" | string | WebSocketServerConfiguration} [webSocketServer] - * @property {ProxyConfigMap | ProxyConfigArrayItem | ProxyConfigArray} [proxy] + * @property {ProxyConfigArray} [proxy] * @property {boolean | string | Open | Array} [open] * @property {boolean} [setupExitSignals] * @property {boolean | ClientConfiguration} [client] * @property {Headers | ((req: Request, res: Response, context: DevMiddlewareContext) => Headers)} [headers] - * @property {(devServer: Server) => void} [onListening] - * @property {(middlewares: Middleware[], devServer: Server) => Middleware[]} [setupMiddlewares] + * @property {(devServer: Server) => void} [onListening] + * @property {(middlewares: Middleware[], devServer: Server) => Middleware[]} [setupMiddlewares] */ if (!process.env.WEBPACK_SERVE) { @@ -249,10 +265,45 @@ const encodeOverlaySettings = (setting) => ? encodeURIComponent(setting.toString()) : setting; +// Working for overload, because typescript doesn't support this yes +/** + * @overload + * @param {NextHandleFunction} fn + * @returns {BasicApplication} + */ +/** + * @overload + * @param {HandleFunction} fn + * @returns {BasicApplication} + */ +/** + * @overload + * @param {string} route + * @param {NextHandleFunction} fn + * @returns {BasicApplication} + */ +/** + * @param {string} route + * @param {HandleFunction} fn + * @returns {BasicApplication} + */ +// eslint-disable-next-line no-unused-vars +function useFn(route, fn) { + return /** @type {BasicApplication} */ ({}); +} + +/** + * @typedef {Object} BasicApplication + * @property {typeof useFn} use + */ + +/** + * @template {BasicApplication} [T=ExpressApplication] + */ class Server { /** - * @param {Configuration | Compiler | MultiCompiler} options - * @param {Compiler | MultiCompiler | Configuration} compiler + * @param {Configuration} options + * @param {Compiler | MultiCompiler} compiler */ constructor(options = {}, compiler) { validate(/** @type {Schema} */ (schema), options, { @@ -260,12 +311,12 @@ class Server { baseDataPath: "options", }); - this.compiler = /** @type {Compiler | MultiCompiler} */ (compiler); + this.compiler = compiler; /** * @type {ReturnType} * */ this.logger = this.compiler.getInfrastructureLogger("webpack-dev-server"); - this.options = /** @type {Configuration} */ (options); + this.options = options; /** * @type {FSWatcher[]} */ @@ -1120,13 +1171,11 @@ class Server { // cert is more than 30 days old, kill it with fire if ((now - Number(certificateStat.ctime)) / certificateTtl > 30) { - const { rimraf } = require("rimraf"); - this.logger.info( "SSL certificate is more than 30 days old. Removing...", ); - await rimraf(certificatePath); + await fs.promises.rm(certificatePath, { recursive: true }); certificateExists = false; } @@ -1317,48 +1366,45 @@ class Server { * } */ if (typeof options.proxy !== "undefined") { - /** @type {ProxyConfigArray} */ - (options.proxy) = - /** @type {ProxyConfigArray} */ - (options.proxy).map((item) => { - if (typeof item === "function") { - return item; - } + options.proxy = options.proxy.map((item) => { + if (typeof item === "function") { + return item; + } - /** - * @param {"info" | "warn" | "error" | "debug" | "silent" | undefined | "none" | "log" | "verbose"} level - * @returns {"info" | "warn" | "error" | "debug" | "silent" | undefined} - */ - const getLogLevelForProxy = (level) => { - if (level === "none") { - return "silent"; - } + /** + * @param {"info" | "warn" | "error" | "debug" | "silent" | undefined | "none" | "log" | "verbose"} level + * @returns {"info" | "warn" | "error" | "debug" | "silent" | undefined} + */ + const getLogLevelForProxy = (level) => { + if (level === "none") { + return "silent"; + } - if (level === "log") { - return "info"; - } + if (level === "log") { + return "info"; + } - if (level === "verbose") { - return "debug"; - } + if (level === "verbose") { + return "debug"; + } - return level; - }; + return level; + }; - if (typeof item.logLevel === "undefined") { - item.logLevel = getLogLevelForProxy( - compilerOptions.infrastructureLogging - ? compilerOptions.infrastructureLogging.level - : "info", - ); - } + 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.logProvider === "undefined") { + item.logProvider = () => this.logger; + } - return item; - }); + return item; + }); } if (typeof options.setupExitSignals === "undefined") { @@ -1679,7 +1725,7 @@ class Server { } this.setupHooks(); - this.setupApp(); + await this.setupApp(); this.setupHostHeaderCheck(); this.setupDevMiddleware(); // Should be after `webpack-dev-middleware`, otherwise other middlewares might rewrite response @@ -1738,11 +1784,14 @@ class Server { /** * @private - * @returns {void} + * @returns {Promise} */ - setupApp() { - /** @type {import("express").Application | undefined}*/ - this.app = new /** @type {any} */ (getExpress())(); + async setupApp() { + /** @type {T | undefined}*/ + this.app = + typeof this.options.app === "function" + ? await this.options.app() + : getExpress()(); } /** @@ -1797,29 +1846,22 @@ class Server { * @returns {void} */ setupHostHeaderCheck() { - /** @type {import("express").Application} */ - (this.app).all( - "*", - /** - * @param {Request} req - * @param {Response} res - * @param {NextFunction} next - * @returns {void} - */ - (req, res, next) => { - if ( - this.checkHeader( - /** @type {{ [key: string]: string | undefined }} */ - (req.headers), - "host", - ) - ) { - return next(); - } + /** @type {T} */ + (this.app).use((req, res, next) => { + if ( + this.checkHeader( + /** @type {{ [key: string]: string | undefined }} */ + (req.headers), + "host", + ) + ) { + next(); + return; + } - res.send("Invalid Host header"); - }, - ); + res.statusCode = 403; + res.end("Invalid Host header"); + }); } /** @@ -1843,45 +1885,103 @@ class Server { setupBuiltInRoutes() { const { app, middleware } = this; - /** @type {import("express").Application} */ - (app).get("/__webpack_dev_server__/sockjs.bundle.js", (req, res) => { - res.setHeader("Content-Type", "application/javascript"); + /** @type {T} */ + (app).use("/__webpack_dev_server__/sockjs.bundle.js", (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 + // @ts-ignore + if (typeof res.sendFile === "function") { + // @ts-ignore + res.sendFile(clientPath); + return; + } - const clientPath = path.join(__dirname, "..", "client"); + let stats; - res.sendFile(path.join(clientPath, "modules/sockjs-client/index.js")); + try { + // TODO implement `inputFileSystem.createReadStream` in webpack + stats = fs.statSync(clientPath); + } catch (err) { + 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); }); - /** @type {import("express").Application} */ - (app).get("/webpack-dev-server/invalidate", (_req, res) => { + /** @type {T} */ + (app).use("/webpack-dev-server/invalidate", (req, res, next) => { + if (req.method !== "GET" && req.method !== "HEAD") { + next(); + return; + } + this.invalidate(); res.end(); }); - /** @type {import("express").Application} */ - (app).get("/webpack-dev-server/open-editor", (req, res) => { - const fileName = req.query.fileName; + /** @type {T} */ + (app).use("/webpack-dev-server/open-editor", (req, res, next) => { + if (req.method !== "GET" && req.method !== "HEAD") { + next(); + return; + } + + if (!req.url) { + next(); + return; + } + + const resolveUrl = new URL(req.url, `http://${req.headers.host}`); + const params = new URLSearchParams(resolveUrl.search); + const fileName = params.get("fileName"); if (typeof fileName === "string") { // @ts-ignore const launchEditor = require("launch-editor"); + launchEditor(fileName); } res.end(); }); - /** @type {import("express").Application} */ - (app).get("/webpack-dev-server", (req, res) => { + /** @type {T} */ + (app).use("/webpack-dev-server", (req, res, next) => { + if (req.method !== "GET" && req.method !== "HEAD") { + next(); + return; + } + /** @type {import("webpack-dev-middleware").API}*/ (middleware).waitUntilValid((stats) => { - res.setHeader("Content-Type", "text/html"); + res.setHeader("Content-Type", "text/html; charset=utf-8"); + // HEAD requests should not return body content if (req.method === "HEAD") { res.end(); return; } + res.write( '', ); @@ -1984,7 +2084,6 @@ class Server { if (typeof this.options.headers !== "undefined") { middlewares.push({ name: "set-headers", - path: "*", middleware: this.setHeaders.bind(this), }); } @@ -2045,8 +2144,7 @@ class Server { * } * ] */ - /** @type {ProxyConfigArray} */ - (this.options.proxy).forEach((proxyConfigOrCallback) => { + this.options.proxy.forEach((proxyConfigOrCallback) => { /** * @type {RequestHandler} */ @@ -2114,8 +2212,8 @@ class Server { if (typeof bypassUrl === "boolean") { // skip the proxy - // @ts-ignore - req.url = null; + res.statusCode = 404; + req.url = ""; next(); } else if (typeof bypassUrl === "string") { // byPass to that url @@ -2265,7 +2363,6 @@ class Server { // fallback when no other middleware responses. middlewares.push({ name: "options-middleware", - path: "*", /** * @param {Request} req * @param {Response} res @@ -2289,14 +2386,24 @@ class Server { middlewares.forEach((middleware) => { if (typeof middleware === "function") { - /** @type {import("express").Application} */ - (this.app).use(middleware); + /** @type {T} */ + (this.app).use( + /** @type {NextHandleFunction | HandleFunction} */ + (middleware), + ); } else if (typeof middleware.path !== "undefined") { - /** @type {import("express").Application} */ - (this.app).use(middleware.path, middleware.middleware); + /** @type {T} */ + (this.app).use( + middleware.path, + /** @type {SimpleHandleFunction | NextHandleFunction} */ + (middleware.middleware), + ); } else { - /** @type {import("express").Application} */ - (this.app).use(middleware.middleware); + /** @type {T} */ + (this.app).use( + /** @type {NextHandleFunction | HandleFunction} */ + (middleware.middleware), + ); } }); } @@ -2804,7 +2911,7 @@ class Server { headers = headers( req, res, - /** @type {import("webpack-dev-middleware").API}*/ + /** @type {import("webpack-dev-middleware").API}*/ (this.middleware).context, ); } @@ -2896,6 +3003,7 @@ class Server { // allow if hostname is in allowedHosts if (Array.isArray(allowedHosts) && allowedHosts.length > 0) { for (let hostIdx = 0; hostIdx < allowedHosts.length; hostIdx++) { + /** @type {string} */ const allowedHost = allowedHosts[hostIdx]; if (allowedHost === hostname) { diff --git a/lib/options.json b/lib/options.json index 567245ce4c..0951aefbcf 100644 --- a/lib/options.json +++ b/lib/options.json @@ -2,6 +2,11 @@ "title": "Dev Server options", "type": "object", "definitions": { + "App": { + "instanceof": "Function", + "description": "Allows to use custom applications (i.e. 'connect', 'fastify' and etc).", + "link": " https://webpack.js.org/configuration/dev-server/#devserverapp" + }, "AllowedHosts": { "anyOf": [ { @@ -997,6 +1002,9 @@ "server": { "$ref": "#/definitions/Server" }, + "app": { + "$ref": "#/definitions/App" + }, "setupExitSignals": { "$ref": "#/definitions/SetupExitSignals" }, diff --git a/migration-v5.md b/migration-v5.md index 5fe9d853e5..50f2e1f2d4 100644 --- a/migration-v5.md +++ b/migration-v5.md @@ -6,7 +6,7 @@ This document serves as a migration guide for `webpack-dev-server@5.0.0`. - Minimum supported `Node.js` version is `18.12.0`. - Minimum supported `webpack` version is `5.0.0`. -- Minimum compatible `webpack-cli` version is `4.7.0` but we recommend using the latest version. +- Minimum compatible `webpack-cli` version is `5.0.0` but we recommend using the latest version. - The `http2` and `https` options were removed in favor of [the `server` option](https://webpack.js.org/configuration/dev-server/#devserverserver). v4: diff --git a/package-lock.json b/package-lock.json index 39358bdc11..c1c0016bbc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "webpack-dev-server", - "version": "5.0.2", + "version": "5.0.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "webpack-dev-server", - "version": "5.0.2", + "version": "5.0.4", "license": "MIT", "dependencies": { "@types/bonjour": "^3.5.13", @@ -23,7 +23,7 @@ "compression": "^1.7.4", "connect-history-api-fallback": "^2.0.0", "default-gateway": "^6.0.3", - "express": "^4.17.3", + "express": "^4.19.2", "graceful-fs": "^4.2.6", "html-entities": "^2.4.0", "http-proxy-middleware": "^2.0.3", @@ -31,13 +31,12 @@ "launch-editor": "^2.6.1", "open": "^10.0.3", "p-retry": "^6.2.0", - "rimraf": "^5.0.5", "schema-utils": "^4.2.0", "selfsigned": "^2.4.1", "serve-index": "^1.9.1", "sockjs": "^0.3.24", "spdy": "^4.0.2", - "webpack-dev-middleware": "^7.0.0", + "webpack-dev-middleware": "^7.1.0", "ws": "^8.16.0" }, "bin": { @@ -51,8 +50,9 @@ "@babel/plugin-transform-runtime": "^7.22.5", "@babel/preset-env": "^7.22.5", "@babel/runtime": "^7.22.5", - "@commitlint/cli": "^18.5.0", - "@commitlint/config-conventional": "^18.5.0", + "@commitlint/cli": "^19.0.3", + "@commitlint/config-conventional": "^19.0.3", + "@playwright/test": "^1.44.0", "@types/compression": "^1.7.2", "@types/default-gateway": "^3.0.1", "@types/node": "^20.11.16", @@ -63,9 +63,10 @@ "babel-jest": "^29.5.0", "babel-loader": "^9.1.0", "body-parser": "^1.19.2", + "connect": "^3.7.0", "core-js": "^3.31.0", "cspell": "^8.3.2", - "css-loader": "^6.8.1", + "css-loader": "^7.1.1", "eslint": "^8.43.0", "eslint-config-prettier": "^9.1.0", "eslint-config-webpack": "^1.2.5", @@ -84,18 +85,19 @@ "memfs": "^4.6.0", "npm-run-all": "^4.1.5", "prettier": "^3.2.4", - "puppeteer": "^22.1.0", + "puppeteer": "^22.6.5", "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", "strip-ansi-v6": "npm:strip-ansi@^6.0.0", - "style-loader": "^3.3.1", + "style-loader": "^4.0.0", "supertest": "^6.1.3", "tcp-port-used": "^1.0.2", "typescript": "^5.3.3", "wait-for-expect": "^3.0.2", - "webpack": "^5.89.0", + "webpack": "^5.91.0", "webpack-cli": "^5.0.1", "webpack-merge": "^5.9.0" }, @@ -128,25 +130,25 @@ } }, "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@babel/cli": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.23.9.tgz", - "integrity": "sha512-vB1UXmGDNEhcf1jNAHKT9IlYk1R+hehVTLFlCLHBi8gfuHQGP6uRjgXVYU0EVlI/qwAWpstqkBdf2aez3/z/5Q==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.24.1.tgz", + "integrity": "sha512-HbmrtxyFUr34LwAlV9jS+sSIjUp4FpdtIMGwgufY3AsxrIfsh/HxlMTywsONAZsU0RMYbZtbZFpUCrSGs7o0EA==", "dev": true, "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", + "@jridgewell/trace-mapping": "^0.3.25", "commander": "^4.0.1", "convert-source-map": "^2.0.0", "fs-readdir-recursive": "^1.1.0", @@ -170,42 +172,42 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", "dev": true, "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", - "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", + "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.0.tgz", - "integrity": "sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.4.tgz", + "integrity": "sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.4", "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.24.0", - "@babel/parser": "^7.24.0", + "@babel/helpers": "^7.24.4", + "@babel/parser": "^7.24.4", "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.0", + "@babel/traverse": "^7.24.1", "@babel/types": "^7.24.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -222,9 +224,9 @@ } }, "node_modules/@babel/eslint-parser": { - "version": "7.23.10", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.23.10.tgz", - "integrity": "sha512-3wSYDPZVnhseRnxRJH6ZVTNknBz76AEnyC+AYYhasjP3Yy23qz0ERR7Fcd2SHmYuSFJ2kY9gaaDd3vyqU09eSw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.24.1.tgz", + "integrity": "sha512-d5guuzMlPeDfZIbpQ8+g1NaCNuAGBBGNECh0HVqz1sjOeVLh2CEaifuOysCH18URW6R7pqXINvf5PaR/dC6jLQ==", "dev": true, "dependencies": { "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", @@ -240,14 +242,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", - "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.4.tgz", + "integrity": "sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==", "dev": true, "dependencies": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.24.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" }, "engines": { @@ -295,9 +297,9 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.23.10", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.10.tgz", - "integrity": "sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.4.tgz", + "integrity": "sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", @@ -305,7 +307,7 @@ "@babel/helper-function-name": "^7.23.0", "@babel/helper-member-expression-to-functions": "^7.23.0", "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-replace-supers": "^7.24.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", "semver": "^6.3.1" @@ -335,9 +337,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", - "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", + "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", @@ -397,12 +399,12 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", + "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", "dev": true, "dependencies": { - "@babel/types": "^7.22.15" + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -466,13 +468,13 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", - "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz", + "integrity": "sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-member-expression-to-functions": "^7.23.0", "@babel/helper-optimise-call-expression": "^7.22.5" }, "engines": { @@ -519,9 +521,9 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", "dev": true, "engines": { "node": ">=6.9.0" @@ -560,13 +562,13 @@ } }, "node_modules/@babel/helpers": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.0.tgz", - "integrity": "sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.4.tgz", + "integrity": "sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==", "dev": true, "dependencies": { "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.0", + "@babel/traverse": "^7.24.1", "@babel/types": "^7.24.0" }, "engines": { @@ -574,23 +576,24 @@ } }, "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", + "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.0.tgz", - "integrity": "sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.4.tgz", + "integrity": "sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -599,13 +602,29 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.4.tgz", + "integrity": "sha512-qpl6vOOEEzTLLcsuqYYo8yDtrTocmu2xkGvgNebvPjT9DTtfFYGmgDqY+rBYXNlqL4s9qLDn6xkrJv4RxAPiTA==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz", - "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz", + "integrity": "sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -615,14 +634,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz", - "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz", + "integrity": "sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.23.3" + "@babel/plugin-transform-optional-chaining": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -632,13 +651,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz", - "integrity": "sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz", + "integrity": "sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -735,12 +754,12 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", - "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz", + "integrity": "sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -750,12 +769,12 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz", - "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz", + "integrity": "sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -789,12 +808,12 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", - "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz", + "integrity": "sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -906,12 +925,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", - "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz", + "integrity": "sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -937,12 +956,12 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", - "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz", + "integrity": "sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -952,13 +971,13 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz", - "integrity": "sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==", + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz", + "integrity": "sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-remap-async-to-generator": "^7.22.20", "@babel/plugin-syntax-async-generators": "^7.8.4" }, @@ -970,13 +989,13 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", - "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz", + "integrity": "sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-module-imports": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-remap-async-to-generator": "^7.22.20" }, "engines": { @@ -987,12 +1006,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", - "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz", + "integrity": "sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1002,12 +1021,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", - "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.4.tgz", + "integrity": "sha512-nIFUZIpGKDf9O9ttyRXpHFpKC+X3Y5mtshZONuEUYBomAKoM4y029Jr+uB1bHGPhNmK8YXHevDtKDOLmtRrp6g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1017,13 +1036,13 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz", - "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz", + "integrity": "sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1033,13 +1052,13 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz", - "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz", + "integrity": "sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.24.4", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { @@ -1050,17 +1069,17 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.23.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz", - "integrity": "sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz", + "integrity": "sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-replace-supers": "^7.24.1", "@babel/helper-split-export-declaration": "^7.22.6", "globals": "^11.1.0" }, @@ -1072,13 +1091,13 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", - "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz", + "integrity": "sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.15" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/template": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1088,12 +1107,12 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", - "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz", + "integrity": "sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1103,13 +1122,13 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz", - "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz", + "integrity": "sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==", "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1119,12 +1138,12 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz", - "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz", + "integrity": "sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1134,12 +1153,12 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz", - "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz", + "integrity": "sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { @@ -1150,13 +1169,13 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz", - "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz", + "integrity": "sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==", "dev": true, "dependencies": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1166,12 +1185,12 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz", - "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz", + "integrity": "sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { @@ -1182,12 +1201,12 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz", - "integrity": "sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz", + "integrity": "sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" }, "engines": { @@ -1198,14 +1217,14 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", - "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz", + "integrity": "sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==", "dev": true, "dependencies": { - "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1215,12 +1234,12 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz", - "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz", + "integrity": "sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { @@ -1231,12 +1250,12 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", - "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz", + "integrity": "sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1246,12 +1265,12 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz", - "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz", + "integrity": "sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { @@ -1262,12 +1281,12 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", - "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz", + "integrity": "sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1277,13 +1296,13 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz", - "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz", + "integrity": "sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==", "dev": true, "dependencies": { "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1293,13 +1312,13 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", - "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz", + "integrity": "sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==", "dev": true, "dependencies": { "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-simple-access": "^7.22.5" }, "engines": { @@ -1310,14 +1329,14 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz", - "integrity": "sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz", + "integrity": "sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==", "dev": true, "dependencies": { "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { @@ -1328,13 +1347,13 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz", - "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz", + "integrity": "sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==", "dev": true, "dependencies": { "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1360,12 +1379,12 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz", - "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz", + "integrity": "sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1375,12 +1394,12 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz", - "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz", + "integrity": "sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { @@ -1391,12 +1410,12 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz", - "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz", + "integrity": "sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { @@ -1407,12 +1426,12 @@ } }, "node_modules/@babel/plugin-transform-object-assign": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.23.3.tgz", - "integrity": "sha512-TPJ6O7gVC2rlQH2hvQGRH273G1xdoloCj9Pc07Q7JbIZYDi+Sv5gaE2fu+r5E7qK4zyt6vj0FbZaZTRU5C3OMA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.24.1.tgz", + "integrity": "sha512-I1kctor9iKtupb7jv7FyjApHCuKLBKCblVAeHVK9PB6FW7GI0ac6RtobC3MwwJy8CZ1JxuhQmnbrsqI5G8hAIg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1422,16 +1441,15 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz", - "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz", + "integrity": "sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.23.3", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.23.3" + "@babel/plugin-transform-parameters": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -1441,13 +1459,13 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", - "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz", + "integrity": "sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-replace-supers": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -1457,12 +1475,12 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz", - "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz", + "integrity": "sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, "engines": { @@ -1473,12 +1491,12 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", - "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz", + "integrity": "sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, @@ -1490,12 +1508,12 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", - "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz", + "integrity": "sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1505,13 +1523,13 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", - "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz", + "integrity": "sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1521,14 +1539,14 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz", - "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz", + "integrity": "sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { @@ -1539,12 +1557,12 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", - "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz", + "integrity": "sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1554,12 +1572,12 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz", - "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz", + "integrity": "sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "regenerator-transform": "^0.15.2" }, "engines": { @@ -1570,12 +1588,12 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz", - "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz", + "integrity": "sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1585,16 +1603,16 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.0.tgz", - "integrity": "sha512-zc0GA5IitLKJrSfXlXmp8KDqLrnGECK7YRfQBmEKg1NmBOQ7e+KuclBEKJgzifQeUYLdNiAw4B4bjyvzWVLiSA==", + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.3.tgz", + "integrity": "sha512-J0BuRPNlNqlMTRJ72eVptpt9VcInbxO6iP3jaxr+1NPhC0UkKL+6oeX6VXMEYdADnuqmMmsBspt4d5w8Y/TCbQ==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-module-imports": "^7.24.3", "@babel/helper-plugin-utils": "^7.24.0", - "babel-plugin-polyfill-corejs2": "^0.4.8", - "babel-plugin-polyfill-corejs3": "^0.9.0", - "babel-plugin-polyfill-regenerator": "^0.5.5", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.1", + "babel-plugin-polyfill-regenerator": "^0.6.1", "semver": "^6.3.1" }, "engines": { @@ -1605,12 +1623,12 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", - "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz", + "integrity": "sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1620,12 +1638,12 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", - "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz", + "integrity": "sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" }, "engines": { @@ -1636,12 +1654,12 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz", - "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz", + "integrity": "sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1651,12 +1669,12 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", - "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz", + "integrity": "sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1666,12 +1684,12 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz", - "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz", + "integrity": "sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1681,12 +1699,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz", - "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz", + "integrity": "sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1696,13 +1714,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz", - "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz", + "integrity": "sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==", "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1712,13 +1730,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz", - "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz", + "integrity": "sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==", "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1728,13 +1746,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz", - "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz", + "integrity": "sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==", "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1744,26 +1762,27 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.9.tgz", - "integrity": "sha512-3kBGTNBBk9DQiPoXYS0g0BYlwTQYUTifqgKTjxUwEUkduRT2QOa0FPGBJ+NROQhGyYO5BuTJwGvBnqKDykac6A==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.4.tgz", + "integrity": "sha512-7Kl6cSmYkak0FK/FXjSEnLJ1N9T/WA2RkMhu17gZ/dsxKJUuTYNIylahPTzqpLyJN4WhDif8X0XK1R8Wsguo/A==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.23.5", + "@babel/compat-data": "^7.24.4", "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-validator-option": "^7.23.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.4", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.1", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.23.3", - "@babel/plugin-syntax-import-attributes": "^7.23.3", + "@babel/plugin-syntax-import-assertions": "^7.24.1", + "@babel/plugin-syntax-import-attributes": "^7.24.1", "@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", @@ -1775,58 +1794,58 @@ "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.23.3", - "@babel/plugin-transform-async-generator-functions": "^7.23.9", - "@babel/plugin-transform-async-to-generator": "^7.23.3", - "@babel/plugin-transform-block-scoped-functions": "^7.23.3", - "@babel/plugin-transform-block-scoping": "^7.23.4", - "@babel/plugin-transform-class-properties": "^7.23.3", - "@babel/plugin-transform-class-static-block": "^7.23.4", - "@babel/plugin-transform-classes": "^7.23.8", - "@babel/plugin-transform-computed-properties": "^7.23.3", - "@babel/plugin-transform-destructuring": "^7.23.3", - "@babel/plugin-transform-dotall-regex": "^7.23.3", - "@babel/plugin-transform-duplicate-keys": "^7.23.3", - "@babel/plugin-transform-dynamic-import": "^7.23.4", - "@babel/plugin-transform-exponentiation-operator": "^7.23.3", - "@babel/plugin-transform-export-namespace-from": "^7.23.4", - "@babel/plugin-transform-for-of": "^7.23.6", - "@babel/plugin-transform-function-name": "^7.23.3", - "@babel/plugin-transform-json-strings": "^7.23.4", - "@babel/plugin-transform-literals": "^7.23.3", - "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", - "@babel/plugin-transform-member-expression-literals": "^7.23.3", - "@babel/plugin-transform-modules-amd": "^7.23.3", - "@babel/plugin-transform-modules-commonjs": "^7.23.3", - "@babel/plugin-transform-modules-systemjs": "^7.23.9", - "@babel/plugin-transform-modules-umd": "^7.23.3", + "@babel/plugin-transform-arrow-functions": "^7.24.1", + "@babel/plugin-transform-async-generator-functions": "^7.24.3", + "@babel/plugin-transform-async-to-generator": "^7.24.1", + "@babel/plugin-transform-block-scoped-functions": "^7.24.1", + "@babel/plugin-transform-block-scoping": "^7.24.4", + "@babel/plugin-transform-class-properties": "^7.24.1", + "@babel/plugin-transform-class-static-block": "^7.24.4", + "@babel/plugin-transform-classes": "^7.24.1", + "@babel/plugin-transform-computed-properties": "^7.24.1", + "@babel/plugin-transform-destructuring": "^7.24.1", + "@babel/plugin-transform-dotall-regex": "^7.24.1", + "@babel/plugin-transform-duplicate-keys": "^7.24.1", + "@babel/plugin-transform-dynamic-import": "^7.24.1", + "@babel/plugin-transform-exponentiation-operator": "^7.24.1", + "@babel/plugin-transform-export-namespace-from": "^7.24.1", + "@babel/plugin-transform-for-of": "^7.24.1", + "@babel/plugin-transform-function-name": "^7.24.1", + "@babel/plugin-transform-json-strings": "^7.24.1", + "@babel/plugin-transform-literals": "^7.24.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.1", + "@babel/plugin-transform-member-expression-literals": "^7.24.1", + "@babel/plugin-transform-modules-amd": "^7.24.1", + "@babel/plugin-transform-modules-commonjs": "^7.24.1", + "@babel/plugin-transform-modules-systemjs": "^7.24.1", + "@babel/plugin-transform-modules-umd": "^7.24.1", "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.23.3", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", - "@babel/plugin-transform-numeric-separator": "^7.23.4", - "@babel/plugin-transform-object-rest-spread": "^7.23.4", - "@babel/plugin-transform-object-super": "^7.23.3", - "@babel/plugin-transform-optional-catch-binding": "^7.23.4", - "@babel/plugin-transform-optional-chaining": "^7.23.4", - "@babel/plugin-transform-parameters": "^7.23.3", - "@babel/plugin-transform-private-methods": "^7.23.3", - "@babel/plugin-transform-private-property-in-object": "^7.23.4", - "@babel/plugin-transform-property-literals": "^7.23.3", - "@babel/plugin-transform-regenerator": "^7.23.3", - "@babel/plugin-transform-reserved-words": "^7.23.3", - "@babel/plugin-transform-shorthand-properties": "^7.23.3", - "@babel/plugin-transform-spread": "^7.23.3", - "@babel/plugin-transform-sticky-regex": "^7.23.3", - "@babel/plugin-transform-template-literals": "^7.23.3", - "@babel/plugin-transform-typeof-symbol": "^7.23.3", - "@babel/plugin-transform-unicode-escapes": "^7.23.3", - "@babel/plugin-transform-unicode-property-regex": "^7.23.3", - "@babel/plugin-transform-unicode-regex": "^7.23.3", - "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", + "@babel/plugin-transform-new-target": "^7.24.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.1", + "@babel/plugin-transform-numeric-separator": "^7.24.1", + "@babel/plugin-transform-object-rest-spread": "^7.24.1", + "@babel/plugin-transform-object-super": "^7.24.1", + "@babel/plugin-transform-optional-catch-binding": "^7.24.1", + "@babel/plugin-transform-optional-chaining": "^7.24.1", + "@babel/plugin-transform-parameters": "^7.24.1", + "@babel/plugin-transform-private-methods": "^7.24.1", + "@babel/plugin-transform-private-property-in-object": "^7.24.1", + "@babel/plugin-transform-property-literals": "^7.24.1", + "@babel/plugin-transform-regenerator": "^7.24.1", + "@babel/plugin-transform-reserved-words": "^7.24.1", + "@babel/plugin-transform-shorthand-properties": "^7.24.1", + "@babel/plugin-transform-spread": "^7.24.1", + "@babel/plugin-transform-sticky-regex": "^7.24.1", + "@babel/plugin-transform-template-literals": "^7.24.1", + "@babel/plugin-transform-typeof-symbol": "^7.24.1", + "@babel/plugin-transform-unicode-escapes": "^7.24.1", + "@babel/plugin-transform-unicode-property-regex": "^7.24.1", + "@babel/plugin-transform-unicode-regex": "^7.24.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.24.1", "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.8", - "babel-plugin-polyfill-corejs3": "^0.9.0", - "babel-plugin-polyfill-regenerator": "^0.5.5", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.4", + "babel-plugin-polyfill-regenerator": "^0.6.1", "core-js-compat": "^3.31.0", "semver": "^6.3.1" }, @@ -1858,9 +1877,9 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.0.tgz", - "integrity": "sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.4.tgz", + "integrity": "sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==", "dev": true, "dependencies": { "regenerator-runtime": "^0.14.0" @@ -1884,18 +1903,18 @@ } }, "node_modules/@babel/traverse": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.0.tgz", - "integrity": "sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", + "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", + "@babel/code-frame": "^7.24.1", + "@babel/generator": "^7.24.1", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.24.0", + "@babel/parser": "^7.24.1", "@babel/types": "^7.24.0", "debug": "^4.3.1", "globals": "^11.1.0" @@ -1925,20 +1944,17 @@ "dev": true }, "node_modules/@commitlint/cli": { - "version": "18.6.1", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-18.6.1.tgz", - "integrity": "sha512-5IDE0a+lWGdkOvKH892HHAZgbAjcj1mT5QrfA/SVbLJV/BbBMGyKN0W5mhgjekPJJwEQdVNvhl9PwUacY58Usw==", + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-19.3.0.tgz", + "integrity": "sha512-LgYWOwuDR7BSTQ9OLZ12m7F/qhNY+NpAyPBgo4YNMkACE7lGuUnuQq1yi9hz1KA4+3VqpOYl8H1rY/LYK43v7g==", "dev": true, "dependencies": { - "@commitlint/format": "^18.6.1", - "@commitlint/lint": "^18.6.1", - "@commitlint/load": "^18.6.1", - "@commitlint/read": "^18.6.1", - "@commitlint/types": "^18.6.1", - "execa": "^5.0.0", - "lodash.isfunction": "^3.0.9", - "resolve-from": "5.0.0", - "resolve-global": "1.0.0", + "@commitlint/format": "^19.3.0", + "@commitlint/lint": "^19.2.2", + "@commitlint/load": "^19.2.0", + "@commitlint/read": "^19.2.1", + "@commitlint/types": "^19.0.3", + "execa": "^8.0.1", "yargs": "^17.0.0" }, "bin": { @@ -1948,149 +1964,225 @@ "node": ">=v18" } }, - "node_modules/@commitlint/config-conventional": { - "version": "18.6.2", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-18.6.2.tgz", - "integrity": "sha512-PcgSYg1AKGQIwDQKbaHtJsfqYy4uJTC7crLVZ83lfjcPaec4Pry2vLeaWej7ao2KsT20l9dWoMPpEGg8LWdUuA==", + "node_modules/@commitlint/cli/node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, "dependencies": { - "@commitlint/types": "^18.6.1", - "conventional-changelog-conventionalcommits": "^7.0.2" + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" }, "engines": { - "node": ">=v18" + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/@commitlint/config-validator": { - "version": "18.6.1", - "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-18.6.1.tgz", - "integrity": "sha512-05uiToBVfPhepcQWE1ZQBR/Io3+tb3gEotZjnI4tTzzPk16NffN6YABgwFQCLmzZefbDcmwWqJWc2XT47q7Znw==", + "node_modules/@commitlint/cli/node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "dev": true, - "dependencies": { - "@commitlint/types": "^18.6.1", - "ajv": "^8.11.0" - }, "engines": { - "node": ">=v18" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@commitlint/ensure": { - "version": "18.6.1", - "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-18.6.1.tgz", - "integrity": "sha512-BPm6+SspyxQ7ZTsZwXc7TRQL5kh5YWt3euKmEIBZnocMFkJevqs3fbLRb8+8I/cfbVcAo4mxRlpTPfz8zX7SnQ==", + "node_modules/@commitlint/cli/node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, - "dependencies": { - "@commitlint/types": "^18.6.1", - "lodash.camelcase": "^4.3.0", - "lodash.kebabcase": "^4.1.1", - "lodash.snakecase": "^4.1.1", - "lodash.startcase": "^4.4.0", - "lodash.upperfirst": "^4.3.1" - }, "engines": { - "node": ">=v18" + "node": ">=16.17.0" } }, - "node_modules/@commitlint/execute-rule": { - "version": "18.6.1", - "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-18.6.1.tgz", - "integrity": "sha512-7s37a+iWyJiGUeMFF6qBlyZciUkF8odSAnHijbD36YDctLhGKoYltdvuJ/AFfRm6cBLRtRk9cCVPdsEFtt/2rg==", + "node_modules/@commitlint/cli/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, "engines": { - "node": ">=v18" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@commitlint/format": { - "version": "18.6.1", - "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-18.6.1.tgz", - "integrity": "sha512-K8mNcfU/JEFCharj2xVjxGSF+My+FbUHoqR+4GqPGrHNqXOGNio47ziiR4HQUPKtiNs05o8/WyLBoIpMVOP7wg==", + "node_modules/@commitlint/cli/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true, - "dependencies": { - "@commitlint/types": "^18.6.1", - "chalk": "^4.1.0" - }, "engines": { - "node": ">=v18" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@commitlint/format/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/@commitlint/cli/node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "path-key": "^4.0.0" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@commitlint/format/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/@commitlint/cli/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "mimic-fn": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@commitlint/format/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, - "dependencies": { - "color-name": "~1.1.4" + "node_modules/@commitlint/cli/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/cli/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, "engines": { - "node": ">=7.0.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@commitlint/format/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/@commitlint/cli/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/@commitlint/format/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==", + "node_modules/@commitlint/config-conventional": { + "version": "19.2.2", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-19.2.2.tgz", + "integrity": "sha512-mLXjsxUVLYEGgzbxbxicGPggDuyWNkf25Ht23owXIH+zV2pv1eJuzLK3t1gDY5Gp6pxdE60jZnWUY5cvgL3ufw==", "dev": true, + "dependencies": { + "@commitlint/types": "^19.0.3", + "conventional-changelog-conventionalcommits": "^7.0.2" + }, "engines": { - "node": ">=8" + "node": ">=v18" } }, - "node_modules/@commitlint/format/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@commitlint/config-validator": { + "version": "19.0.3", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-19.0.3.tgz", + "integrity": "sha512-2D3r4PKjoo59zBc2auodrSCaUnCSALCx54yveOFwwP/i2kfEAQrygwOleFWswLqK0UL/F9r07MFi5ev2ohyM4Q==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "@commitlint/types": "^19.0.3", + "ajv": "^8.11.0" }, "engines": { - "node": ">=8" + "node": ">=v18" + } + }, + "node_modules/@commitlint/ensure": { + "version": "19.0.3", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-19.0.3.tgz", + "integrity": "sha512-SZEpa/VvBLoT+EFZVb91YWbmaZ/9rPH3ESrINOl0HD2kMYsjvl0tF7nMHh0EpTcv4+gTtZBAe1y/SS6/OhfZzQ==", + "dev": true, + "dependencies": { + "@commitlint/types": "^19.0.3", + "lodash.camelcase": "^4.3.0", + "lodash.kebabcase": "^4.1.1", + "lodash.snakecase": "^4.1.1", + "lodash.startcase": "^4.4.0", + "lodash.upperfirst": "^4.3.1" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/execute-rule": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-19.0.0.tgz", + "integrity": "sha512-mtsdpY1qyWgAO/iOK0L6gSGeR7GFcdW7tIjcNFxcWkfLDF5qVbPHKuGATFqRMsxcO8OUKNj0+3WOHB7EHm4Jdw==", + "dev": true, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/format": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-19.3.0.tgz", + "integrity": "sha512-luguk5/aF68HiF4H23ACAfk8qS8AHxl4LLN5oxPc24H+2+JRPsNr1OS3Gaea0CrH7PKhArBMKBz5RX9sA5NtTg==", + "dev": true, + "dependencies": { + "@commitlint/types": "^19.0.3", + "chalk": "^5.3.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/format/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/@commitlint/is-ignored": { - "version": "18.6.1", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-18.6.1.tgz", - "integrity": "sha512-MOfJjkEJj/wOaPBw5jFjTtfnx72RGwqYIROABudOtJKW7isVjFe9j0t8xhceA02QebtYf4P/zea4HIwnXg8rvA==", + "version": "19.2.2", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-19.2.2.tgz", + "integrity": "sha512-eNX54oXMVxncORywF4ZPFtJoBm3Tvp111tg1xf4zWXGfhBPKpfKG6R+G3G4v5CPlRROXpAOpQ3HMhA9n1Tck1g==", "dev": true, "dependencies": { - "@commitlint/types": "^18.6.1", - "semver": "7.6.0" + "@commitlint/types": "^19.0.3", + "semver": "^7.6.0" }, "engines": { "node": ">=v18" @@ -2130,290 +2222,443 @@ "dev": true }, "node_modules/@commitlint/lint": { - "version": "18.6.1", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-18.6.1.tgz", - "integrity": "sha512-8WwIFo3jAuU+h1PkYe5SfnIOzp+TtBHpFr4S8oJWhu44IWKuVx6GOPux3+9H1iHOan/rGBaiacicZkMZuluhfQ==", + "version": "19.2.2", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-19.2.2.tgz", + "integrity": "sha512-xrzMmz4JqwGyKQKTpFzlN0dx0TAiT7Ran1fqEBgEmEj+PU98crOFtysJgY+QdeSagx6EDRigQIXJVnfrI0ratA==", "dev": true, "dependencies": { - "@commitlint/is-ignored": "^18.6.1", - "@commitlint/parse": "^18.6.1", - "@commitlint/rules": "^18.6.1", - "@commitlint/types": "^18.6.1" + "@commitlint/is-ignored": "^19.2.2", + "@commitlint/parse": "^19.0.3", + "@commitlint/rules": "^19.0.3", + "@commitlint/types": "^19.0.3" }, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/load": { - "version": "18.6.1", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-18.6.1.tgz", - "integrity": "sha512-p26x8734tSXUHoAw0ERIiHyW4RaI4Bj99D8YgUlVV9SedLf8hlWAfyIFhHRIhfPngLlCe0QYOdRKYFt8gy56TA==", + "version": "19.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-19.2.0.tgz", + "integrity": "sha512-XvxxLJTKqZojCxaBQ7u92qQLFMMZc4+p9qrIq/9kJDy8DOrEa7P1yx7Tjdc2u2JxIalqT4KOGraVgCE7eCYJyQ==", "dev": true, "dependencies": { - "@commitlint/config-validator": "^18.6.1", - "@commitlint/execute-rule": "^18.6.1", - "@commitlint/resolve-extends": "^18.6.1", - "@commitlint/types": "^18.6.1", - "chalk": "^4.1.0", - "cosmiconfig": "^8.3.6", + "@commitlint/config-validator": "^19.0.3", + "@commitlint/execute-rule": "^19.0.0", + "@commitlint/resolve-extends": "^19.1.0", + "@commitlint/types": "^19.0.3", + "chalk": "^5.3.0", + "cosmiconfig": "^9.0.0", "cosmiconfig-typescript-loader": "^5.0.0", "lodash.isplainobject": "^4.0.6", "lodash.merge": "^4.6.2", - "lodash.uniq": "^4.5.0", - "resolve-from": "^5.0.0" + "lodash.uniq": "^4.5.0" }, "engines": { "node": ">=v18" } }, - "node_modules/@commitlint/load/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/@commitlint/load/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@commitlint/message": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-19.0.0.tgz", + "integrity": "sha512-c9czf6lU+9oF9gVVa2lmKaOARJvt4soRsVmbR7Njwp9FpbBgste5i7l/2l5o8MmbwGh4yE1snfnsy2qyA2r/Fw==", + "dev": true, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/parse": { + "version": "19.0.3", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-19.0.3.tgz", + "integrity": "sha512-Il+tNyOb8VDxN3P6XoBBwWJtKKGzHlitEuXA5BP6ir/3loWlsSqDr5aecl6hZcC/spjq4pHqNh0qPlfeWu38QA==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "@commitlint/types": "^19.0.3", + "conventional-changelog-angular": "^7.0.0", + "conventional-commits-parser": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=v18" + } + }, + "node_modules/@commitlint/read": { + "version": "19.2.1", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-19.2.1.tgz", + "integrity": "sha512-qETc4+PL0EUv7Q36lJbPG+NJiBOGg7SSC7B5BsPWOmei+Dyif80ErfWQ0qXoW9oCh7GTpTNRoaVhiI8RbhuaNw==", + "dev": true, + "dependencies": { + "@commitlint/top-level": "^19.0.0", + "@commitlint/types": "^19.0.3", + "execa": "^8.0.1", + "git-raw-commits": "^4.0.0", + "minimist": "^1.2.8" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "engines": { + "node": ">=v18" } }, - "node_modules/@commitlint/load/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/@commitlint/read/node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" }, "engines": { - "node": ">=10" + "node": ">=16.17" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/@commitlint/load/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/@commitlint/read/node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "dev": true, - "dependencies": { - "color-name": "~1.1.4" + "engines": { + "node": ">=16" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/read/node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true, "engines": { - "node": ">=7.0.0" + "node": ">=16.17.0" } }, - "node_modules/@commitlint/load/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/@commitlint/read/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/@commitlint/load/node_modules/has-flag": { + "node_modules/@commitlint/read/node_modules/mimic-fn": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@commitlint/load/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@commitlint/read/node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "path-key": "^4.0.0" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@commitlint/message": { - "version": "18.6.1", - "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-18.6.1.tgz", - "integrity": "sha512-VKC10UTMLcpVjMIaHHsY1KwhuTQtdIKPkIdVEwWV+YuzKkzhlI3aNy6oo1eAN6b/D2LTtZkJe2enHmX0corYRw==", + "node_modules/@commitlint/read/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, "engines": { - "node": ">=v18" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@commitlint/parse": { - "version": "18.6.1", - "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-18.6.1.tgz", - "integrity": "sha512-eS/3GREtvVJqGZrwAGRwR9Gdno3YcZ6Xvuaa+vUF8j++wsmxrA2En3n0ccfVO2qVOLJC41ni7jSZhQiJpMPGOQ==", + "node_modules/@commitlint/read/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/read/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, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@commitlint/read/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/resolve-extends": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-19.1.0.tgz", + "integrity": "sha512-z2riI+8G3CET5CPgXJPlzftH+RiWYLMYv4C9tSLdLXdr6pBNimSKukYP9MS27ejmscqCTVA4almdLh0ODD2KYg==", "dev": true, "dependencies": { - "@commitlint/types": "^18.6.1", - "conventional-changelog-angular": "^7.0.0", - "conventional-commits-parser": "^5.0.0" + "@commitlint/config-validator": "^19.0.3", + "@commitlint/types": "^19.0.3", + "global-directory": "^4.0.1", + "import-meta-resolve": "^4.0.0", + "lodash.mergewith": "^4.6.2", + "resolve-from": "^5.0.0" }, "engines": { "node": ">=v18" } }, - "node_modules/@commitlint/read": { - "version": "18.6.1", - "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-18.6.1.tgz", - "integrity": "sha512-ia6ODaQFzXrVul07ffSgbZGFajpe8xhnDeLIprLeyfz3ivQU1dIoHp7yz0QIorZ6yuf4nlzg4ZUkluDrGN/J/w==", + "node_modules/@commitlint/rules": { + "version": "19.0.3", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-19.0.3.tgz", + "integrity": "sha512-TspKb9VB6svklxNCKKwxhELn7qhtY1rFF8ls58DcFd0F97XoG07xugPjjbVnLqmMkRjZDbDIwBKt9bddOfLaPw==", "dev": true, "dependencies": { - "@commitlint/top-level": "^18.6.1", - "@commitlint/types": "^18.6.1", - "git-raw-commits": "^2.0.11", - "minimist": "^1.2.6" + "@commitlint/ensure": "^19.0.3", + "@commitlint/message": "^19.0.0", + "@commitlint/to-lines": "^19.0.0", + "@commitlint/types": "^19.0.3", + "execa": "^8.0.1" }, "engines": { "node": ">=v18" } }, - "node_modules/@commitlint/resolve-extends": { - "version": "18.6.1", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-18.6.1.tgz", - "integrity": "sha512-ifRAQtHwK+Gj3Bxj/5chhc4L2LIc3s30lpsyW67yyjsETR6ctHAHRu1FSpt0KqahK5xESqoJ92v6XxoDRtjwEQ==", + "node_modules/@commitlint/rules/node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, "dependencies": { - "@commitlint/config-validator": "^18.6.1", - "@commitlint/types": "^18.6.1", - "import-fresh": "^3.0.0", - "lodash.mergewith": "^4.6.2", - "resolve-from": "^5.0.0", - "resolve-global": "^1.0.0" + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" }, "engines": { - "node": ">=v18" + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/@commitlint/rules": { - "version": "18.6.1", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-18.6.1.tgz", - "integrity": "sha512-kguM6HxZDtz60v/zQYOe0voAtTdGybWXefA1iidjWYmyUUspO1zBPQEmJZ05/plIAqCVyNUTAiRPWIBKLCrGew==", + "node_modules/@commitlint/rules/node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/rules/node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true, + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/@commitlint/rules/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/rules/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/rules/node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/rules/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/rules/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/rules/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, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@commitlint/rules/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, - "dependencies": { - "@commitlint/ensure": "^18.6.1", - "@commitlint/message": "^18.6.1", - "@commitlint/to-lines": "^18.6.1", - "@commitlint/types": "^18.6.1", - "execa": "^5.0.0" - }, "engines": { - "node": ">=v18" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@commitlint/to-lines": { - "version": "18.6.1", - "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-18.6.1.tgz", - "integrity": "sha512-Gl+orGBxYSNphx1+83GYeNy5N0dQsHBQ9PJMriaLQDB51UQHCVLBT/HBdOx5VaYksivSf5Os55TLePbRLlW50Q==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-19.0.0.tgz", + "integrity": "sha512-vkxWo+VQU5wFhiP9Ub9Sre0FYe019JxFikrALVoD5UGa8/t3yOJEpEhxC5xKiENKKhUkTpEItMTRAjHw2SCpZw==", "dev": true, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/top-level": { - "version": "18.6.1", - "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-18.6.1.tgz", - "integrity": "sha512-HyiHQZUTf0+r0goTCDs/bbVv/LiiQ7AVtz6KIar+8ZrseB9+YJAIo8HQ2IC2QT1y3N1lbW6OqVEsTHjbT6hGSw==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-19.0.0.tgz", + "integrity": "sha512-KKjShd6u1aMGNkCkaX4aG1jOGdn7f8ZI8TR1VEuNqUOjWTOdcDSsmglinglJ18JTjuBX5I1PtjrhQCRcixRVFQ==", "dev": true, "dependencies": { - "find-up": "^5.0.0" + "find-up": "^7.0.0" }, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/types": { - "version": "18.6.1", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-18.6.1.tgz", - "integrity": "sha512-gwRLBLra/Dozj2OywopeuHj2ac26gjGkz2cZ+86cTJOdtWfiRRr4+e77ZDAGc6MDWxaWheI+mAV5TLWWRwqrFg==", + "version": "19.0.3", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-19.0.3.tgz", + "integrity": "sha512-tpyc+7i6bPG9mvaBbtKUeghfyZSDgWquIDfMgqYtTbmZ9Y9VzEm2je9EYcQ0aoz5o7NvGS+rcDec93yO08MHYA==", "dev": true, "dependencies": { - "chalk": "^4.1.0" + "@types/conventional-commits-parser": "^5.0.0", + "chalk": "^5.3.0" }, "engines": { "node": ">=v18" } }, - "node_modules/@commitlint/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==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/@commitlint/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==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@commitlint/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==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@commitlint/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 - }, - "node_modules/@commitlint/types/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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@commitlint/types/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@cspell/cspell-bundled-dicts": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-8.4.1.tgz", - "integrity": "sha512-rOMupwDktbAAFfc6X/VCNl0nNFL7kH/G2KuZF3VCpXR6YR8FsQjbl1WLmEd0zVVeO+JWM99JcZS2OO/HAR3www==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-8.7.0.tgz", + "integrity": "sha512-B5YQI7Dd9m0JHTmHgs7PiyP4BWXzl8ixpK+HGOwhxzh7GyfFt1Eo/gxMxBDX/9SaewEzeb2OjRpRKEFtEsto3A==", "dev": true, "dependencies": { "@cspell/dict-ada": "^4.0.2", @@ -2429,7 +2674,7 @@ "@cspell/dict-docker": "^1.1.7", "@cspell/dict-dotnet": "^5.0.0", "@cspell/dict-elixir": "^4.0.3", - "@cspell/dict-en_us": "^4.3.16", + "@cspell/dict-en_us": "^4.3.17", "@cspell/dict-en-common-misspellings": "^2.0.0", "@cspell/dict-en-gb": "1.1.33", "@cspell/dict-filetypes": "^3.0.3", @@ -2443,16 +2688,18 @@ "@cspell/dict-html": "^4.0.5", "@cspell/dict-html-symbol-entities": "^4.0.0", "@cspell/dict-java": "^5.0.6", + "@cspell/dict-julia": "^1.0.1", "@cspell/dict-k8s": "^1.0.2", "@cspell/dict-latex": "^4.0.0", "@cspell/dict-lorem-ipsum": "^4.0.0", "@cspell/dict-lua": "^4.0.3", "@cspell/dict-makefile": "^1.0.0", + "@cspell/dict-monkeyc": "^1.0.6", "@cspell/dict-node": "^4.0.3", "@cspell/dict-npm": "^5.0.15", "@cspell/dict-php": "^4.0.6", "@cspell/dict-powershell": "^5.0.3", - "@cspell/dict-public-licenses": "^2.0.5", + "@cspell/dict-public-licenses": "^2.0.6", "@cspell/dict-python": "^4.1.11", "@cspell/dict-r": "^2.0.1", "@cspell/dict-ruby": "^5.0.2", @@ -2462,6 +2709,7 @@ "@cspell/dict-sql": "^2.1.3", "@cspell/dict-svelte": "^1.0.2", "@cspell/dict-swift": "^2.0.1", + "@cspell/dict-terraform": "^1.0.0", "@cspell/dict-typescript": "^3.1.2", "@cspell/dict-vue": "^3.0.0" }, @@ -2470,30 +2718,30 @@ } }, "node_modules/@cspell/cspell-json-reporter": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/@cspell/cspell-json-reporter/-/cspell-json-reporter-8.4.1.tgz", - "integrity": "sha512-/IrWJeOBiGz4JvrYUan2zmmVACRCb0Nw9kM31QH4CkhVZ3vF2MeZ81gNaO9rPxNsm742EeJ2FYHmDhy/0T80Gg==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@cspell/cspell-json-reporter/-/cspell-json-reporter-8.7.0.tgz", + "integrity": "sha512-LTQPEvXvCqnc+ok9WXpSISZyt4/nGse9fVEM430g0BpGzKpt3RMx49B8uasvvnanzCuikaW9+wFLmwgvraERhA==", "dev": true, "dependencies": { - "@cspell/cspell-types": "8.4.1" + "@cspell/cspell-types": "8.7.0" }, "engines": { "node": ">=18" } }, "node_modules/@cspell/cspell-pipe": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/@cspell/cspell-pipe/-/cspell-pipe-8.4.1.tgz", - "integrity": "sha512-xlIcZpqZni4eznazDIs1sJB38r0jH5nnbsLu0Y1LeRXmznyRv5xma6J/4jkQmVAsF2DmVWOqJeKwQqpVB5lHzw==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@cspell/cspell-pipe/-/cspell-pipe-8.7.0.tgz", + "integrity": "sha512-ePqddIQ4arqPQgOkC146SkZxvZb9/jL7xIM5Igy2n3tiWTC5ijrX/mbHpPZ1VGcFck+1M0cJUuyhuJk+vMj3rg==", "dev": true, "engines": { "node": ">=18" } }, "node_modules/@cspell/cspell-resolver": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/@cspell/cspell-resolver/-/cspell-resolver-8.4.1.tgz", - "integrity": "sha512-rerJ013neN4NMw5EeJNmAiPdkHimwLndoEGhzQi9Yz7oCV78oq9wxK6H6UNZt8oveJG3Utj7hTYRzUyswKneNg==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@cspell/cspell-resolver/-/cspell-resolver-8.7.0.tgz", + "integrity": "sha512-grZwDFYqcBYQDaz4AkUtdyqc4UUH2J3/7yWVkBbYDPE+FQHa9ofFXzXxyjs56GJlPfi9ULpe5/Wz6uVLg8rQkQ==", "dev": true, "dependencies": { "global-directory": "^4.0.1" @@ -2503,18 +2751,18 @@ } }, "node_modules/@cspell/cspell-service-bus": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/@cspell/cspell-service-bus/-/cspell-service-bus-8.4.1.tgz", - "integrity": "sha512-pr5bd5bM46vmD4UN/l1rS7VGCkgPTwrwBB+4IWYAztnDtOOoTzPtzIVBKbamaEru7Wabwna/lICntVlmiBNbhQ==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@cspell/cspell-service-bus/-/cspell-service-bus-8.7.0.tgz", + "integrity": "sha512-KW48iu0nTDzbedixc7iB7K7mlAZQ7QeMLuM/akxigOlvtOdVJrRa9Pfn44lwejts1ANb/IXil3GH8YylkVi76Q==", "dev": true, "engines": { "node": ">=18" } }, "node_modules/@cspell/cspell-types": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-8.4.1.tgz", - "integrity": "sha512-z/bU98oLtii2xGKO5zYhpElAUUh6x6PmKPIulDfPu+3MItjLWdNxzD5OWNSg9iv0sZbWQCQ3lOMNX2EF+8QyUA==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-8.7.0.tgz", + "integrity": "sha512-Rb+LCE5I9JEb/LE8nSViVSF8z1CWv/z4mPBIG37VMa7aUx2gAQa6gJekNfpY9YZiMzx4Tv3gDujN80ytks4pGA==", "dev": true, "engines": { "node": ">=18" @@ -2605,9 +2853,9 @@ "dev": true }, "node_modules/@cspell/dict-en_us": { - "version": "4.3.17", - "resolved": "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-4.3.17.tgz", - "integrity": "sha512-CS0Tb2f2YwQZ4VZ6+WLAO5uOzb0iO/iYSRl34kX4enq6quXxLYzwdfGAwv85wSYHPdga8tGiZFP+p8GPsi2JEg==", + "version": "4.3.19", + "resolved": "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-4.3.19.tgz", + "integrity": "sha512-tHcXdkmm0t9LlRct1vgu3+h0KW/wlXCInkTiR4D/rl730q1zu2qVEgiy1saMiTUSNmdu7Hiy+Mhb+1braVqnZQ==", "dev": true }, "node_modules/@cspell/dict-en-common-misspellings": { @@ -2688,6 +2936,12 @@ "integrity": "sha512-kdE4AHHHrixyZ5p6zyms1SLoYpaJarPxrz8Tveo6gddszBVVwIUZ+JkQE1bWNLK740GWzIXdkznpUfw1hP9nXw==", "dev": true }, + "node_modules/@cspell/dict-julia": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-julia/-/dict-julia-1.0.1.tgz", + "integrity": "sha512-4JsCLCRhhLMLiaHpmR7zHFjj1qOauzDI5ZzCNQS31TUMfsOo26jAKDfo0jljFAKgw5M2fEG7sKr8IlPpQAYrmQ==", + "dev": true + }, "node_modules/@cspell/dict-k8s": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@cspell/dict-k8s/-/dict-k8s-1.0.2.tgz", @@ -2718,6 +2972,12 @@ "integrity": "sha512-3W9tHPcSbJa6s0bcqWo6VisEDTSN5zOtDbnPabF7rbyjRpNo0uHXHRJQF8gAbFzoTzBBhgkTmrfSiuyQm7vBUQ==", "dev": true }, + "node_modules/@cspell/dict-monkeyc": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-monkeyc/-/dict-monkeyc-1.0.6.tgz", + "integrity": "sha512-oO8ZDu/FtZ55aq9Mb67HtaCnsLn59xvhO/t2mLLTHAp667hJFxpp7bCtr2zOrR1NELzFXmKln/2lw/PvxMSvrA==", + "dev": true + }, "node_modules/@cspell/dict-node": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/@cspell/dict-node/-/dict-node-4.0.3.tgz", @@ -2782,9 +3042,9 @@ "dev": true }, "node_modules/@cspell/dict-software-terms": { - "version": "3.3.18", - "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-3.3.18.tgz", - "integrity": "sha512-LJZGGMGqS8KzgXJrSMs3T+6GoqHG9z8Bc+rqLzLzbtoR3FbsMasE9U8oP2PmS3q7jJLFjQkzmg508DrcuZuo2g==", + "version": "3.3.20", + "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-3.3.20.tgz", + "integrity": "sha512-KmPwCxYWEu7SGyT/0m/n6i6R4ZgxbmN3XcerzA6Z629Wm5iZTVfJaMWqDK2RKAyBawS7OMfxGz0W/wYU4FhJlA==", "dev": true }, "node_modules/@cspell/dict-sql": { @@ -2805,10 +3065,16 @@ "integrity": "sha512-gxrCMUOndOk7xZFmXNtkCEeroZRnS2VbeaIPiymGRHj5H+qfTAzAKxtv7jJbVA3YYvEzWcVE2oKDP4wcbhIERw==", "dev": true }, + "node_modules/@cspell/dict-terraform": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-terraform/-/dict-terraform-1.0.0.tgz", + "integrity": "sha512-Ak+vy4HP/bOgzf06BAMC30+ZvL9mzv21xLM2XtfnBLTDJGdxlk/nK0U6QT8VfFLqJ0ZZSpyOxGsUebWDCTr/zQ==", + "dev": true + }, "node_modules/@cspell/dict-typescript": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-typescript/-/dict-typescript-3.1.2.tgz", - "integrity": "sha512-lcNOYWjLUvDZdLa0UMNd/LwfVdxhE9rKA+agZBGjL3lTA3uNvH7IUqSJM/IXhJoBpLLMVEOk8v1N9xi+vDuCdA==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@cspell/dict-typescript/-/dict-typescript-3.1.4.tgz", + "integrity": "sha512-jUcPa0rsPca5ur1+G56DXnSc5hbbJkzvPHHvyQtkbPXBQd3CXPMNfrTVCgzex/7cY/7FONcpFCUwgwfni9Jqbw==", "dev": true }, "node_modules/@cspell/dict-vue": { @@ -2818,9 +3084,9 @@ "dev": true }, "node_modules/@cspell/dynamic-import": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/@cspell/dynamic-import/-/dynamic-import-8.4.1.tgz", - "integrity": "sha512-H+zZ7MpoiJyZ9zMdifsF/uBWOsovwWr40MBW+f1Tgpu2H6e3A1knRvxRy52fEK8eVhANrGVPVVZix4lI1XtBsw==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@cspell/dynamic-import/-/dynamic-import-8.7.0.tgz", + "integrity": "sha512-xlEPdiHVDu+4xYkvwjL9MgklxOi9XB+Pr1H9s3Ww9WEq+q6BA3xOHxLIU/k8mhqFTMZGFZRCsdy/EwMu6SyRhQ==", "dev": true, "dependencies": { "import-meta-resolve": "^4.0.0" @@ -2830,9 +3096,9 @@ } }, "node_modules/@cspell/strong-weak-map": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/@cspell/strong-weak-map/-/strong-weak-map-8.4.1.tgz", - "integrity": "sha512-TWIA9SrtQTvpT+RN1RJUA2OWH1qNbjsjby8EmHteHjrueFr4a9nRxl4etQ1EoiGaBwt2w1w1iatnfpRY0U15Zg==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@cspell/strong-weak-map/-/strong-weak-map-8.7.0.tgz", + "integrity": "sha512-0bo0WwDr2lzGoCP7vbpWbDpPyuOrHKK+218txnUpx6Pn1EDBLfcDQsiZED5B6zlpwgbGi6y3vc0rWtJbjKvwzg==", "dev": true, "engines": { "node": ">=18" @@ -3010,9 +3276,9 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "dev": true }, "node_modules/@hutson/parse-repository-url": { @@ -3028,6 +3294,7 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -3044,6 +3311,7 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, "engines": { "node": ">=12" }, @@ -3054,12 +3322,14 @@ "node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -3076,6 +3346,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -3156,6 +3427,15 @@ "node": ">=8" } }, + "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, + "engines": { + "node": ">=8" + } + }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", @@ -3591,14 +3871,14 @@ } }, "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", - "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz", + "integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==", "dev": true, "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", + "@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" }, @@ -3930,14 +4210,14 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "devOptional": true, "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -3953,22 +4233,22 @@ } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "devOptional": true, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "devOptional": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, "node_modules/@jridgewell/sourcemap-codec": { @@ -3978,9 +4258,9 @@ "devOptional": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", - "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "devOptional": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -3988,9 +4268,9 @@ } }, "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==" }, "node_modules/@nicolo-ribaudo/chokidar-2": { "version": "2.1.8-no-fsevents.3", @@ -4047,15 +4327,31 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, "optional": true, "engines": { "node": ">=14" } }, + "node_modules/@playwright/test": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.44.0.tgz", + "integrity": "sha512-rNX5lbNidamSUorBhB4XZ9SQTjAqfe5M+p37Z8ic0jPFBMo5iCtQz1kRWkEMg+rYOKSlVycpQmpqjSFq7LXOfg==", + "dev": true, + "dependencies": { + "playwright": "1.44.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/@puppeteer/browsers": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.1.0.tgz", - "integrity": "sha512-xloWvocjvryHdUjDam/ZuGMh7zn4Sn3ZAaV4Ah2e2EwEt90N3XphZlSsU3n0VDc1F7kggCjMuH0UuxfPQ5mD9w==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.2.2.tgz", + "integrity": "sha512-hZ/JhxPIceWaGSEzUZp83/8M49CoxlkuThfTR7t4AoCu5+ZvJ3vktLm60Otww2TXeROB5igiZ8D9oPQh6ckBVg==", "dev": true, "dependencies": { "debug": "4.3.4", @@ -4230,6 +4526,15 @@ "@types/node": "*" } }, + "node_modules/@types/conventional-commits-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", + "integrity": "sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/default-gateway": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/default-gateway/-/default-gateway-3.0.1.tgz", @@ -4237,9 +4542,9 @@ "dev": true }, "node_modules/@types/eslint": { - "version": "8.56.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.2.tgz", - "integrity": "sha512-uQDwm1wFHmbBbCZCqAlq6Do9LYwByNZHWzXppSnay9SuwJ+VRbjkbLABer54kcPnMSlG6Fdiy2yaFXm/z9Z5gw==", + "version": "8.56.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", + "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", "devOptional": true, "dependencies": { "@types/estree": "*", @@ -4274,9 +4579,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.43", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz", - "integrity": "sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==", + "version": "4.19.0", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.0.tgz", + "integrity": "sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -4370,9 +4675,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.11.22", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.22.tgz", - "integrity": "sha512-/G+IxWxma6V3E+pqK1tSl2Fo1kl41pK1yeCyDsgkF9WlVAme4j5ISYM2zR11bgLFJGLN5sVK40T4RJNuiZbEjA==", + "version": "20.12.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", + "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", "dependencies": { "undici-types": "~5.26.4" } @@ -4392,9 +4697,9 @@ "dev": true }, "node_modules/@types/qs": { - "version": "6.9.11", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", - "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==" + "version": "6.9.15", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", + "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==" }, "node_modules/@types/range-parser": { "version": "1.2.7", @@ -4424,13 +4729,13 @@ } }, "node_modules/@types/serve-static": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", - "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", "dependencies": { "@types/http-errors": "*", - "@types/mime": "*", - "@types/node": "*" + "@types/node": "*", + "@types/send": "*" } }, "node_modules/@types/sockjs": { @@ -4505,9 +4810,9 @@ "dev": true }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", "devOptional": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.11.6", @@ -4527,9 +4832,9 @@ "devOptional": true }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", "devOptional": true }, "node_modules/@webassemblyjs/helper-numbers": { @@ -4550,15 +4855,15 @@ "devOptional": true }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", "devOptional": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" + "@webassemblyjs/wasm-gen": "1.12.1" } }, "node_modules/@webassemblyjs/ieee754": { @@ -4586,28 +4891,28 @@ "devOptional": true }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", "devOptional": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", "devOptional": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", "@webassemblyjs/leb128": "1.11.6", @@ -4615,24 +4920,24 @@ } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", "devOptional": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", "devOptional": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-api-error": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", @@ -4641,12 +4946,12 @@ } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", "devOptional": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" } }, @@ -4876,6 +5181,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, "engines": { "node": ">=12" }, @@ -4944,15 +5250,16 @@ "dev": true }, "node_modules/array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" }, "engines": { @@ -4968,35 +5275,17 @@ "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", "dev": true }, - "node_modules/array.prototype.filter": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz", - "integrity": "sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/array.prototype.findlastindex": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz", - "integrity": "sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", + "es-abstract": "^1.23.2", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "es-shim-unscopables": "^1.0.2" }, "engines": { @@ -5098,10 +5387,13 @@ "dev": true }, "node_modules/available-typed-arrays": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz", - "integrity": "sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==", + "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, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -5264,13 +5556,13 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz", - "integrity": "sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==", + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", + "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", "dev": true, "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.5.0", + "@babel/helper-define-polyfill-provider": "^0.6.2", "semver": "^6.3.1" }, "peerDependencies": { @@ -5278,25 +5570,25 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz", - "integrity": "sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==", + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", + "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.5.0", - "core-js-compat": "^3.34.0" + "@babel/helper-define-polyfill-provider": "^0.6.1", + "core-js-compat": "^3.36.1" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz", - "integrity": "sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", + "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.5.0" + "@babel/helper-define-polyfill-provider": "^0.6.2" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -5344,45 +5636,55 @@ "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==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/bare-events": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.0.tgz", - "integrity": "sha512-Yyyqff4PIFfSuthCZqLlPISTWHmnQxoPuAvkmgzsJEmG3CesdIv6Xweayl0JkCZJSB2yYIdJyEz97tpxNhgjbg==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.2.tgz", + "integrity": "sha512-h7z00dWdG0PYOQEvChhOSWvOfkIKsdZGkWr083FgN/HyoQuebSew/cgirYqh9SCuy/hRvxc5Vy6Fw8xAmYHLkQ==", "dev": true, "optional": true }, "node_modules/bare-fs": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.2.0.tgz", - "integrity": "sha512-+VhW202E9eTVGkX7p+TNXtZC4RTzj9JfJW7PtfIbZ7mIQ/QT9uOafQTx7lx2n9ERmWsXvLHF4hStAFn4gl2mQw==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.0.tgz", + "integrity": "sha512-TNFqa1B4N99pds2a5NYHR15o0ZpdNKbAeKTE/+G6ED/UeOavv8RY3dr/Fu99HW3zU3pXpo2kDNO8Sjsm2esfOw==", "dev": true, "optional": true, "dependencies": { "bare-events": "^2.0.0", - "bare-os": "^2.0.0", "bare-path": "^2.0.0", - "streamx": "^2.13.0" + "bare-stream": "^1.0.0" } }, "node_modules/bare-os": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.2.0.tgz", - "integrity": "sha512-hD0rOPfYWOMpVirTACt4/nK8mC55La12K5fY1ij8HAdfQakD62M+H4o4tpfKzVGLgRDTuk3vjA4GqGXXCeFbag==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.3.0.tgz", + "integrity": "sha512-oPb8oMM1xZbhRQBngTgpcQ5gXw6kjOaRsSWsIeNyRxGed2w/ARyP7ScBYpWR1qfX2E5rS3gBw6OWcSQo+s+kUg==", "dev": true, "optional": true }, "node_modules/bare-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.0.tgz", - "integrity": "sha512-DIIg7ts8bdRKwJRJrUMy/PICEaQZaPGZ26lsSx9MJSwIhSrcdHn7/C8W+XmnG/rKi6BaRcz+JO00CjZteybDtw==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.1.tgz", + "integrity": "sha512-OHM+iwRDRMDBsSW7kl3dO62JyHdBKO3B25FB9vNQBPcGHMo4+eA8Yj41Lfbk3pS/seDY+siNge0LdRTulAau/A==", "dev": true, "optional": true, "dependencies": { "bare-os": "^2.1.0" } }, + "node_modules/bare-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-1.0.0.tgz", + "integrity": "sha512-KhNUoDL40iP4gFaLSsoGE479t0jHijfYdIcxRn/XtezA2BaUD0NRf/JGRpsMq6dMNM+SrCrB0YSSo/5wBY4rOQ==", + "dev": true, + "optional": true, + "dependencies": { + "streamx": "^2.16.1" + } + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -5404,9 +5706,9 @@ ] }, "node_modules/basic-ftp": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.4.tgz", - "integrity": "sha512-8PzkB0arJFV4jJWSGOYR+OEic6aeKMu/osRhBULN6RY0ykby6LKhbmuQ5ublvaas5BOwboah5D87nrHyuh8PPA==", + "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==", "dev": true, "engines": { "node": ">=10.0.0" @@ -5418,18 +5720,20 @@ "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" }, "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/body-parser": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", - "dev": true, "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.5", @@ -5453,7 +5757,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "dependencies": { "ms": "2.0.0" } @@ -5461,8 +5764,7 @@ "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==", - "dev": true + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/bonjour-service": { "version": "1.2.1", @@ -5666,9 +5968,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001588", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001588.tgz", - "integrity": "sha512-+hVY9jE44uKLkH0SrUTqxjxqNTOWHsbnQDIKjwkZ3lNTzUUVdBLBGXtj/q5Mp5u98r3droaZAewQuEDzjQdZlQ==", + "version": "1.0.30001612", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001612.tgz", + "integrity": "sha512-lFgnZ07UhaCcsSZgWW0K5j4e69dK1u/ltrL9lTUiFOwNHs12S3UMIEYgBV0Z6C6hRDev7iRnMzzYmKabYdXF9g==", "devOptional": true, "funding": [ { @@ -5768,13 +6070,14 @@ } }, "node_modules/chromium-bidi": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.5.10.tgz", - "integrity": "sha512-4hsPE1VaLLM/sgNK/SlLbI24Ra7ZOuWAjA3rhw1lVCZ8ZiUgccS6cL5L/iqo4hjRcl5vwgYJ8xTtbXdulA9b6Q==", + "version": "0.5.17", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.5.17.tgz", + "integrity": "sha512-BqOuIWUgTPj8ayuBFJUYCCuwIcwjBsb3/614P7tt1bEPJ4i1M0kCdIl0Wi9xhtswBXnfO2bTpTMkHD71H8rJMg==", "dev": true, "dependencies": { "mitt": "3.0.1", - "urlpattern-polyfill": "10.0.0" + "urlpattern-polyfill": "10.0.0", + "zod": "3.22.4" }, "peerDependencies": { "devtools-protocol": "*" @@ -6216,6 +6519,21 @@ "typedarray-to-buffer": "^3.1.5" } }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, "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", @@ -6224,6 +6542,21 @@ "node": ">=0.8" } }, + "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, + "dependencies": { + "ms": "2.0.0" + } + }, + "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 + }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -6383,6 +6716,15 @@ "node": ">=10" } }, + "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, + "engines": { + "node": ">=8" + } + }, "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", @@ -6396,6 +6738,25 @@ "node": ">=8" } }, + "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, + "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" + }, + "engines": { + "node": ">=10" + } + }, "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", @@ -6588,6 +6949,15 @@ "node": ">=8" } }, + "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, + "engines": { + "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", @@ -6886,6 +7256,15 @@ "node": ">=8" } }, + "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, + "engines": { + "node": ">=8" + } + }, "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", @@ -7090,6 +7469,15 @@ "node": ">=10" } }, + "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, + "engines": { + "node": ">=8" + } + }, "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", @@ -7103,6 +7491,25 @@ "node": ">=8" } }, + "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, + "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" + }, + "engines": { + "node": ">=10" + } + }, "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", @@ -7218,6 +7625,15 @@ "node": ">=8" } }, + "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, + "engines": { + "node": ">=8" + } + }, "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", @@ -7376,9 +7792,9 @@ "dev": true }, "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "engines": { "node": ">= 0.6" } @@ -7407,9 +7823,9 @@ } }, "node_modules/core-js": { - "version": "3.36.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.36.0.tgz", - "integrity": "sha512-mt7+TUBbTFg5+GngsAxeKBTl5/VS0guFeJacYge9OmHb+m058UwwIm41SE9T4Den7ClatV57B6TYTuJ0CX1MAw==", + "version": "3.37.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.0.tgz", + "integrity": "sha512-fu5vHevQ8ZG4og+LXug8ulUtVxjOcEYvifJr7L5Bfq9GOztVqsKd9/59hUk2ZSbCrS3BqUr3EpaYGIYzq7g3Ug==", "dev": true, "hasInstallScript": true, "funding": { @@ -7418,12 +7834,12 @@ } }, "node_modules/core-js-compat": { - "version": "3.36.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.0.tgz", - "integrity": "sha512-iV9Pd/PsgjNWBXeq8XRtWVSgz2tKAfhfvBs7qxYty+RlRd+OCksaWmOnc4JKrTc1cToXL1N0s3l/vwlxPtdElw==", + "version": "3.37.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.0.tgz", + "integrity": "sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA==", "dev": true, "dependencies": { - "browserslist": "^4.22.3" + "browserslist": "^4.23.0" }, "funding": { "type": "opencollective", @@ -7436,15 +7852,15 @@ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, "dependencies": { + "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" + "parse-json": "^5.2.0" }, "engines": { "node": ">=14" @@ -7587,15 +8003,6 @@ "node": ">=8" } }, - "node_modules/cross-fetch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", - "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", - "dev": true, - "dependencies": { - "node-fetch": "^2.6.12" - } - }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -7637,22 +8044,22 @@ } }, "node_modules/cspell": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/cspell/-/cspell-8.4.1.tgz", - "integrity": "sha512-QoyUroQiMXak4bfVq1oM5PK78rO1R2/BbZMtZl4ZIFxWh2VapkYhK6tiG2wvK/wSD2jXe+n3UflD6CD8663dIw==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/cspell/-/cspell-8.7.0.tgz", + "integrity": "sha512-77nRPgLl240C6FK8RKVKo34lP15Lzp/6bk+SKYJFwUKKXlcgWXDis+Lw4JolA741/JgHtuxmhW1C8P7dCKjJ3w==", "dev": true, "dependencies": { - "@cspell/cspell-json-reporter": "8.4.1", - "@cspell/cspell-pipe": "8.4.1", - "@cspell/cspell-types": "8.4.1", - "@cspell/dynamic-import": "8.4.1", + "@cspell/cspell-json-reporter": "8.7.0", + "@cspell/cspell-pipe": "8.7.0", + "@cspell/cspell-types": "8.7.0", + "@cspell/dynamic-import": "8.7.0", "chalk": "^5.3.0", "chalk-template": "^1.1.0", "commander": "^12.0.0", - "cspell-gitignore": "8.4.1", - "cspell-glob": "8.4.1", - "cspell-io": "8.4.1", - "cspell-lib": "8.4.1", + "cspell-gitignore": "8.7.0", + "cspell-glob": "8.7.0", + "cspell-io": "8.7.0", + "cspell-lib": "8.7.0", "fast-glob": "^3.3.2", "fast-json-stable-stringify": "^2.1.0", "file-entry-cache": "^8.0.0", @@ -7673,42 +8080,42 @@ } }, "node_modules/cspell-config-lib": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/cspell-config-lib/-/cspell-config-lib-8.4.1.tgz", - "integrity": "sha512-Z1Krm0LBp+qe7jewRH6nxHzoeFgDCqlkihGDh09Q37JIlBzxzIv3FIG/RFZ9qw9B4waU00G+dCvWmec8j1y08Q==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/cspell-config-lib/-/cspell-config-lib-8.7.0.tgz", + "integrity": "sha512-depsd01GbLBo71/tfRrL5iECWQLS4CjCxA9C01dVkFAJqVB0s+K9KLKjTlq5aHOhcvo9Z3dHV+bGQCf5/Q7bfw==", "dev": true, "dependencies": { - "@cspell/cspell-types": "8.4.1", + "@cspell/cspell-types": "8.7.0", "comment-json": "^4.2.3", - "yaml": "^2.3.4" + "yaml": "^2.4.1" }, "engines": { "node": ">=18" } }, "node_modules/cspell-dictionary": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-8.4.1.tgz", - "integrity": "sha512-aN3Ei7MHQrG+EaAfBM3Y+w+KRuWTKxKsc2OYTEtgfLh6htxxdCzk/voA3OEHS8e+NXw2HMwrKmCPGGsKY9QkmA==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-8.7.0.tgz", + "integrity": "sha512-S6IpZSzIMxlOO/33NgCOuP0TPH2mZbw8d5CP44z5jajflloq8l74MeJLkeDzYfCRcm0Rtk0A5drBeMg+Ai34OA==", "dev": true, "dependencies": { - "@cspell/cspell-pipe": "8.4.1", - "@cspell/cspell-types": "8.4.1", - "cspell-trie-lib": "8.4.1", + "@cspell/cspell-pipe": "8.7.0", + "@cspell/cspell-types": "8.7.0", + "cspell-trie-lib": "8.7.0", "fast-equals": "^5.0.1", - "gensequence": "^6.0.0" + "gensequence": "^7.0.0" }, "engines": { "node": ">=18" } }, "node_modules/cspell-gitignore": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-8.4.1.tgz", - "integrity": "sha512-yVt1zHKp6XctEK8TgwYkgkpiAQQdiBlpG3PNGtyn2MDwsZkRMzVMhvugcLd6jeLGKl8S6rWA2CK7egmOQITwig==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-8.7.0.tgz", + "integrity": "sha512-yvUZ86qyopUpDgn+YXP1qTpUe/lp65ZFvpMtw21lWHTFlg1OWKntr349EQU/5ben/K6koxk1FiElCBV7Lr4uFg==", "dev": true, "dependencies": { - "cspell-glob": "8.4.1", + "cspell-glob": "8.7.0", "find-up-simple": "^1.0.0" }, "bin": { @@ -7719,9 +8126,9 @@ } }, "node_modules/cspell-glob": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-8.4.1.tgz", - "integrity": "sha512-W3kJPFpWO0L5XPMlJAiey0XfzdIG/bQFcQo2LgPX0ViGned2piH09F5aXpwSCfw2clGo4SWw0WYVOnTxMF89hg==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-8.7.0.tgz", + "integrity": "sha512-AMdfx0gvROA/aIL8t8b5Y5NtMgscGZELFj6WhCSZiQSuWRxXUKiLGGLUFjx2y0hgXN9LUYOo6aBjvhnxI/v71g==", "dev": true, "dependencies": { "micromatch": "^4.0.5" @@ -7731,13 +8138,13 @@ } }, "node_modules/cspell-grammar": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-8.4.1.tgz", - "integrity": "sha512-JRbCuKWY5Ja39zmPUQPHM7WnnX4ODQo4kBNk4NJGnrADvHyor6Z60YPqy45IRnt/Z7B4U7J+T8M6bHlLFk3f2w==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-8.7.0.tgz", + "integrity": "sha512-SGcXc7322wU2WNRi7vtpToWDXTqZHhxqvR+aIXHT2kkxlMSWp3Rvfpshd0ckgY54nZtgw7R/JtKND2jeACRpwQ==", "dev": true, "dependencies": { - "@cspell/cspell-pipe": "8.4.1", - "@cspell/cspell-types": "8.4.1" + "@cspell/cspell-pipe": "8.7.0", + "@cspell/cspell-types": "8.7.0" }, "bin": { "cspell-grammar": "bin.mjs" @@ -7747,40 +8154,40 @@ } }, "node_modules/cspell-io": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-8.4.1.tgz", - "integrity": "sha512-FVOhg+rQP7YvX06t5to9oj83/COFnowW9J6ShY5Cp64s6yoQCTiPpTcKbHMiE4rwXpp5/FRAs86mr4jrR/zNUQ==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-8.7.0.tgz", + "integrity": "sha512-o7OltyyvVkRG1gQrIqGpN5pUkHNnv6rvihb7Qu6cJ8jITinLGuWJuEQpgt0eF5yIr624jDbFwSzAxsFox8riQg==", "dev": true, "dependencies": { - "@cspell/cspell-service-bus": "8.4.1" + "@cspell/cspell-service-bus": "8.7.0" }, "engines": { "node": ">=18" } }, "node_modules/cspell-lib": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-8.4.1.tgz", - "integrity": "sha512-R86NdkgyT4vCpBuNGd47WO9tNS2GQW8pGQZGdtqHcgf5gIl8U5tj4T0q0cQvR6WEsNTo+ElMf0GZ2TK3hXaZDg==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-8.7.0.tgz", + "integrity": "sha512-qDSHZGekwiDmouYRECTQokE+hgAuPqREm+Hb+G3DoIo3ZK5H47TtEUo8fNCw22XsKefcF8X28LiyoZwiYHVpSg==", "dev": true, "dependencies": { - "@cspell/cspell-bundled-dicts": "8.4.1", - "@cspell/cspell-pipe": "8.4.1", - "@cspell/cspell-resolver": "8.4.1", - "@cspell/cspell-types": "8.4.1", - "@cspell/dynamic-import": "8.4.1", - "@cspell/strong-weak-map": "8.4.1", + "@cspell/cspell-bundled-dicts": "8.7.0", + "@cspell/cspell-pipe": "8.7.0", + "@cspell/cspell-resolver": "8.7.0", + "@cspell/cspell-types": "8.7.0", + "@cspell/dynamic-import": "8.7.0", + "@cspell/strong-weak-map": "8.7.0", "clear-module": "^4.1.2", "comment-json": "^4.2.3", "configstore": "^6.0.0", - "cspell-config-lib": "8.4.1", - "cspell-dictionary": "8.4.1", - "cspell-glob": "8.4.1", - "cspell-grammar": "8.4.1", - "cspell-io": "8.4.1", - "cspell-trie-lib": "8.4.1", + "cspell-config-lib": "8.7.0", + "cspell-dictionary": "8.7.0", + "cspell-glob": "8.7.0", + "cspell-grammar": "8.7.0", + "cspell-io": "8.7.0", + "cspell-trie-lib": "8.7.0", "fast-equals": "^5.0.1", - "gensequence": "^6.0.0", + "gensequence": "^7.0.0", "import-fresh": "^3.3.0", "resolve-from": "^5.0.0", "vscode-languageserver-textdocument": "^1.0.11", @@ -7791,14 +8198,14 @@ } }, "node_modules/cspell-trie-lib": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-8.4.1.tgz", - "integrity": "sha512-qKPfHWsZlH1aZYMhScbWpdBn1xccQO++UZ4YgYikyNOJNyPS7SAgGvVgT8wE3f++dGfM77QKUwgLLfe6/udbHA==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-8.7.0.tgz", + "integrity": "sha512-W3Nh2cO7gMV91r+hLqyTMgKlvRl4W5diKs5YiyOxjZumRkMBy42IzcNYtgIIacOxghklv96F5Bd1Vx/zY6ylGA==", "dev": true, "dependencies": { - "@cspell/cspell-pipe": "8.4.1", - "@cspell/cspell-types": "8.4.1", - "gensequence": "^6.0.0" + "@cspell/cspell-pipe": "8.7.0", + "@cspell/cspell-types": "8.7.0", + "gensequence": "^7.0.0" }, "engines": { "node": ">=18" @@ -7859,22 +8266,22 @@ "dev": true }, "node_modules/css-loader": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.10.0.tgz", - "integrity": "sha512-LTSA/jWbwdMlk+rhmElbDR2vbtQoTBPr7fkJE+mxrHj+7ru0hUmHafDRzWIjIHTwpitWVaqY2/UWGRca3yUgRw==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.1.tgz", + "integrity": "sha512-OxIR5P2mjO1PSXk44bWuQ8XtMK4dpEqpIyERCx3ewOo3I8EmbcxMPUc5ScLtQfgXtOojoMv57So4V/C02HQLsw==", "dev": true, "dependencies": { "icss-utils": "^5.1.0", "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.4", - "postcss-modules-scope": "^3.1.1", + "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": ">= 12.13.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", @@ -7882,7 +8289,7 @@ }, "peerDependencies": { "@rspack/core": "0.x || 1.x", - "webpack": "^5.0.0" + "webpack": "^5.27.0" }, "peerDependenciesMeta": { "@rspack/core": { @@ -7991,12 +8398,15 @@ "dev": true }, "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==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-8.1.0.tgz", + "integrity": "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==", "dev": true, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/data-uri-to-buffer": { @@ -8022,6 +8432,57 @@ "node": ">=12" } }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/dateformat": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", @@ -8088,9 +8549,9 @@ "dev": true }, "node_modules/dedent": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", - "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", "dev": true, "peerDependencies": { "babel-plugin-macros": "^3.1.0" @@ -8261,9 +8722,9 @@ "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" }, "node_modules/devtools-protocol": { - "version": "0.0.1249869", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1249869.tgz", - "integrity": "sha512-Ctp4hInA0BEavlUoRy9mhGq0i+JSo/AwVyX2EFgZmV1kYB+Zq+EMBAn52QWu6FbRr10hRb6pBl420upbp4++vg==", + "version": "0.0.1273771", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1273771.tgz", + "integrity": "sha512-QDbb27xcTVReQQW/GHJsdQqGKwYBE7re7gxehj467kKP2DKuYBUj6i2k5LRiAC66J1yZG/9gsxooz/s9pcm0Og==", "dev": true }, "node_modules/dezalgo": { @@ -8493,7 +8954,8 @@ "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true }, "node_modules/ee-first": { "version": "1.1.1", @@ -8501,9 +8963,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.673", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.673.tgz", - "integrity": "sha512-zjqzx4N7xGdl5468G+vcgzDhaHkaYgVcf9MqgexcTqsl2UHSCmOj/Bi3HAprg4BZCpC7HyD8a6nZl6QAZf72gw==", + "version": "1.4.747", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.747.tgz", + "integrity": "sha512-+FnSWZIAvFHbsNVmUxhEqWiaOiPMcfum1GQzlWCg/wLigVtshOsjXHyEFfmt6cFK6+HkS3QOJBv6/3OPumbBfw==", "devOptional": true }, "node_modules/emittery": { @@ -8542,9 +9004,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", + "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==", "devOptional": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -8576,9 +9038,9 @@ } }, "node_modules/envinfo": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.1.tgz", - "integrity": "sha512-8PiZgZNIB4q/Lw4AhOvAfB/ityHAd2bli3lESSWmWSzSsl5dKpy5N1d1Rfkd2teq/g9xN90lc6o98DOjMeYHpg==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.12.0.tgz", + "integrity": "sha512-Iw9rQJBGpJRd3rwXm9ft/JiGoAZmLxxJZELYDQoPRZ4USVhkKtIcNBPw6U+/K2mBpaqM25JSV6Yl4Az9vO2wJg==", "dev": true, "bin": { "envinfo": "dist/cli.js" @@ -8610,18 +9072,22 @@ } }, "node_modules/es-abstract": { - "version": "1.22.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.4.tgz", - "integrity": "sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg==", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.1", "arraybuffer.prototype.slice": "^1.0.3", - "available-typed-arrays": "^1.0.6", + "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", "es-define-property": "^1.0.0", "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.2", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", "get-intrinsic": "^1.2.4", @@ -8629,15 +9095,16 @@ "globalthis": "^1.0.3", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.1", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "hasown": "^2.0.1", + "hasown": "^2.0.2", "internal-slot": "^1.0.7", "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", @@ -8645,17 +9112,17 @@ "object-keys": "^1.1.1", "object.assign": "^4.1.5", "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.0", + "safe-array-concat": "^1.1.2", "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.1", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.14" + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -8664,12 +9131,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true - }, "node_modules/es-define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", @@ -8690,20 +9151,32 @@ } }, "node_modules/es-module-lexer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", - "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.0.tgz", + "integrity": "sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==", "devOptional": true }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-set-tostringtag": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", - "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2", - "has-tostringtag": "^1.0.0", - "hasown": "^2.0.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -8888,9 +9361,9 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", "dev": true, "dependencies": { "debug": "^3.2.7" @@ -9128,6 +9601,22 @@ "node": "^10.12.0 || >=12.0.0" } }, + "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, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/eslint/node_modules/flat-cache": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", @@ -9196,6 +9685,45 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, + "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, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/eslint/node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -9437,16 +9965,16 @@ } }, "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.1", + "body-parser": "1.20.2", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -9477,29 +10005,6 @@ "node": ">= 0.10.0" } }, - "node_modules/express/node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, "node_modules/express/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -9508,25 +10013,28 @@ "ms": "2.0.0" } }, - "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==" - }, - "node_modules/express/node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "node_modules/express/node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8" } }, + "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==" + }, "node_modules/express/node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -9721,16 +10229,17 @@ } }, "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "on-finished": "2.4.1", + "on-finished": "~2.3.0", "parseurl": "~1.3.3", - "statuses": "2.0.1", + "statuses": "~1.5.0", "unpipe": "~1.0.0" }, "engines": { @@ -9741,6 +10250,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "dependencies": { "ms": "2.0.0" } @@ -9748,7 +10258,29 @@ "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==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "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, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "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, + "engines": { + "node": ">= 0.6" + } }, "node_modules/find-cache-dir": { "version": "4.0.0", @@ -9767,16 +10299,17 @@ } }, "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==", + "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, "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "locate-path": "^7.2.0", + "path-exists": "^5.0.0", + "unicorn-magic": "^0.1.0" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -9804,29 +10337,28 @@ } }, "node_modules/flat-cache": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.0.tgz", - "integrity": "sha512-EryKbCE/wxpxKniQlyas6PY1I9vwtF3uCBweX+N8KYTCn3Y12RTGtQAJ/bd5pl7kxUAc8v/R3Ake/N17OZiFqA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.4", - "rimraf": "^5.0.5" + "keyv": "^4.5.4" }, "engines": { "node": ">=16" } }, "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, "node_modules/follow-redirects": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "funding": [ { "type": "individual", @@ -9855,6 +10387,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -9870,6 +10403,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, "engines": { "node": ">=14" }, @@ -9997,12 +10531,12 @@ } }, "node_modules/gensequence": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gensequence/-/gensequence-6.0.0.tgz", - "integrity": "sha512-8WwuywE9pokJRAcg2QFR/plk3cVPebSUqRPzpGQh3WQ0wIiHAw+HyOQj5IuHyUTQBHpBKFoB2JUMu9zT3vJ16Q==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/gensequence/-/gensequence-7.0.0.tgz", + "integrity": "sha512-47Frx13aZh01afHJTB3zTtKIlFI6vWY+MYCN9Qpew6i52rfKjnhCF/l1YlC8UmEMvvntZZ6z4PiCcmyuedR2aQ==", "dev": true, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/gensync": { @@ -10344,280 +10878,20 @@ } }, "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, - "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" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/git-raw-commits/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, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/git-raw-commits/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, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/git-raw-commits/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, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/git-raw-commits/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, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/git-raw-commits/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, - "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": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/git-raw-commits/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, - "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/git-raw-commits/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, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/git-raw-commits/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, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/git-raw-commits/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, - "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/git-raw-commits/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, - "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_modules/git-raw-commits/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, - "engines": { - "node": ">=8" - } - }, - "node_modules/git-raw-commits/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 - }, - "node_modules/git-raw-commits/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, - "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/git-raw-commits/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, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/git-raw-commits/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, - "engines": { - "node": ">=8" - } - }, - "node_modules/git-raw-commits/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, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/git-raw-commits/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "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, "dependencies": { - "lru-cache": "^6.0.0" + "dargs": "^8.0.0", + "meow": "^12.0.1", + "split2": "^4.0.0" }, "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/git-raw-commits/node_modules/split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "dev": true, - "dependencies": { - "readable-stream": "^3.0.0" - } - }, - "node_modules/git-raw-commits/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, - "engines": { - "node": ">=10" + "git-raw-commits": "cli.mjs" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/git-raw-commits/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 - }, - "node_modules/git-raw-commits/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, "engines": { - "node": ">=10" + "node": ">=16" } }, "node_modules/git-remote-origin-url": { @@ -10789,6 +11063,15 @@ "node": ">=8" } }, + "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, + "engines": { + "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", @@ -10960,24 +11243,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==", - "dev": true, - "dependencies": { - "ini": "^1.3.4" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/global-dirs/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 - }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -11098,9 +11363,9 @@ } }, "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "engines": { "node": ">= 0.4" }, @@ -11135,9 +11400,9 @@ } }, "node_modules/hasown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", - "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dependencies": { "function-bind": "^1.1.2" }, @@ -11220,9 +11485,9 @@ } }, "node_modules/html-entities": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", - "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", "funding": [ { "type": "github", @@ -11614,6 +11879,15 @@ "node": ">=8" } }, + "node_modules/import-local/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, + "engines": { + "node": ">=8" + } + }, "node_modules/import-local/node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -11730,9 +12004,9 @@ } }, "node_modules/ipaddr.js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", - "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", "engines": { "node": ">= 10" } @@ -11822,6 +12096,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -11909,9 +12198,9 @@ } }, "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, "engines": { "node": ">= 0.4" @@ -11921,9 +12210,9 @@ } }, "node_modules/is-network-error": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.0.1.tgz", - "integrity": "sha512-OwQXkwBJeESyhFw+OumbJVD58BFBJJI5OM5S1+eyrDKlgDZPX2XNT5gXS56GSD3NPbbwUuMlR1Q71SRp5SobuQ==", + "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==", "engines": { "node": ">=16" }, @@ -12018,12 +12307,15 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -12298,9 +12590,9 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, "dependencies": { "html-escaper": "^2.0.0", @@ -12314,6 +12606,7 @@ "version": "2.3.6", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -14402,9 +14695,9 @@ } }, "node_modules/lint-staged/node_modules/npm-run-path": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.2.0.tgz", - "integrity": "sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, "dependencies": { "path-key": "^4.0.0" @@ -14467,6 +14760,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lint-staged/node_modules/yaml": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, "node_modules/listr2": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.0.1.tgz", @@ -14546,15 +14848,15 @@ } }, "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==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", "dev": true, "dependencies": { - "p-locate": "^5.0.0" + "p-locate": "^6.0.0" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -14578,12 +14880,6 @@ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true }, - "node_modules/lodash.isfunction": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", - "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", - "dev": true - }, "node_modules/lodash.ismatch": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", @@ -14658,13 +14954,10 @@ } }, "node_modules/log-update/node_modules/ansi-escapes": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz", - "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", + "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==", "dev": true, - "dependencies": { - "type-fest": "^3.0.0" - }, "engines": { "node": ">=14.16" }, @@ -14715,18 +15008,6 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/log-update/node_modules/type-fest": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", - "dev": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/lower-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", @@ -14789,9 +15070,9 @@ } }, "node_modules/marked": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-12.0.0.tgz", - "integrity": "sha512-Vkwtq9rLqXryZnWaQc86+FHLC6tr/fycMfYAhiOIXkrNmeGAyhSxjqu0Rs1i0bBqw5u0S7+lV9fdH2ZSVaoa0w==", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/marked/-/marked-12.0.2.tgz", + "integrity": "sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==", "dev": true, "bin": { "marked": "bin/marked.js" @@ -14809,9 +15090,9 @@ } }, "node_modules/memfs": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.7.7.tgz", - "integrity": "sha512-x9qc6k88J/VVwnfTkJV8pRRswJ2156Rc4w5rciRqKceFDZ0y1MqsNL9pkg5sE0GOcDzZYbonreALhaHzg1siFw==", + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.8.2.tgz", + "integrity": "sha512-j4WKth315edViMBGkHW6NTF0QBjsTrcRDmYNcGsPq+ozMEyCCCIlX2d2mJ5wuh6iHvJ3FevUrr48v58YRqVdYg==", "dependencies": { "tslib": "^2.0.0" }, @@ -14983,6 +15264,7 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, "engines": { "node": ">=16 || 14 >=14.17" } @@ -15112,48 +15394,6 @@ "tslib": "^2.0.3" } }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true - }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/node-forge": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", @@ -15331,9 +15571,9 @@ } }, "node_modules/nwsapi": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", - "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.9.tgz", + "integrity": "sha512-2f3F0SEEer8bBu0dsNCFF50N0cTThV1nWFYcEYFZttdW0lDAoybv9cQoK7X7/68Z89S7FoRrVjP1LPX4XRf9vg==", "dev": true }, "node_modules/object-inspect": { @@ -15372,14 +15612,15 @@ } }, "node_modules/object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -15389,27 +15630,28 @@ } }, "node_modules/object.groupby": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.2.tgz", - "integrity": "sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, "dependencies": { - "array.prototype.filter": "^1.0.3", - "call-bind": "^1.0.5", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.0.0" + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -15466,9 +15708,9 @@ } }, "node_modules/open": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/open/-/open-10.0.4.tgz", - "integrity": "sha512-oujJ/FFr7ra6/7gJuQ4ZJJ8Gf2VHM0J3J/W7IvH++zaqEzacWVxzK++NiVY5NLHTTj7u/jNH5H3Ei9biL31Lng==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", + "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", "dependencies": { "default-browser": "^5.2.1", "define-lazy-prop": "^3.0.0", @@ -15515,15 +15757,42 @@ } }, "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==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", "dev": true, "dependencies": { - "p-limit": "^3.0.2" + "p-limit": "^4.0.0" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, + "engines": { + "node": ">=12.20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -15574,9 +15843,9 @@ } }, "node_modules/pac-proxy-agent/node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "dev": true, "dependencies": { "debug": "^4.3.4" @@ -15704,12 +15973,12 @@ } }, "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==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/path-is-absolute": { @@ -15736,11 +16005,12 @@ "dev": true }, "node_modules/path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", + "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", + "dev": true, "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", + "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { @@ -15754,6 +16024,7 @@ "version": "10.2.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "dev": true, "engines": { "node": "14 || >=16.14" } @@ -15764,12 +16035,24 @@ "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-type/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/pend": { @@ -15855,76 +16138,63 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "node_modules/playwright": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.44.0.tgz", + "integrity": "sha512-F9b3GUCLQ3Nffrfb6dunPOkE5Mh68tR7zN32L4jCk4FjQamgesGay7/dAAe1WaMEGV04DkdJfcJzjoCKygUaRQ==", "dev": true, "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "playwright-core": "1.44.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^1.0.0" + "bin": { + "playwright": "cli.js" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=16" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "fsevents": "2.3.2" } }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "node_modules/playwright-core": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.44.0.tgz", + "integrity": "sha512-ZTbkNpFfYcGWohvTTl+xewITm7EOuqIqex0c7dNZ+aXsbrLj0qI8XlGKfPpipjm0Wny/4Lt4CJsWJk1stVS5qQ==", "dev": true, - "dependencies": { - "p-limit": "^4.0.0" + "bin": { + "playwright-core": "cli.js" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=16" } }, - "node_modules/pkg-dir/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "node_modules/playwright/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/pkg-dir/node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "dev": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" } }, "node_modules/postcss": { - "version": "8.4.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", - "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "dev": true, "funding": [ { @@ -15943,16 +16213,16 @@ "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" } }, "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", "dev": true, "engines": { "node": "^10 || ^12 || >= 14" @@ -15962,9 +16232,9 @@ } }, "node_modules/postcss-modules-local-by-default": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.4.tgz", - "integrity": "sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", + "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", "dev": true, "dependencies": { "icss-utils": "^5.0.0", @@ -15979,9 +16249,9 @@ } }, "node_modules/postcss-modules-scope": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.1.1.tgz", - "integrity": "sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", + "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", "dev": true, "dependencies": { "postcss-selector-parser": "^6.0.4" @@ -16009,9 +16279,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.15", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", - "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -16163,9 +16433,9 @@ } }, "node_modules/proxy-agent/node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "dev": true, "dependencies": { "debug": "^4.3.4" @@ -16247,15 +16517,16 @@ } }, "node_modules/puppeteer": { - "version": "22.3.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-22.3.0.tgz", - "integrity": "sha512-GC+tyjzYKjaNjhlDAuqRgDM+IOsqOG75Da4L28G4eULNLLxKDt+79x2OOSQ47HheJBgGq7ATSExNE6gayxP6cg==", + "version": "22.7.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-22.7.0.tgz", + "integrity": "sha512-s1ulKFZKW3lwWCtNu0VrRLfRaanFHxIv7F8UFYpLo8dPTZcI4wB4EAOD0sKT3SKP+1Rsjodb9WFsK78yKQ6i9Q==", "dev": true, "hasInstallScript": true, "dependencies": { - "@puppeteer/browsers": "2.1.0", + "@puppeteer/browsers": "2.2.2", "cosmiconfig": "9.0.0", - "puppeteer-core": "22.3.0" + "devtools-protocol": "0.0.1273771", + "puppeteer-core": "22.7.0" }, "bin": { "puppeteer": "lib/esm/puppeteer/node/cli.js" @@ -16265,70 +16536,25 @@ } }, "node_modules/puppeteer-core": { - "version": "22.3.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-22.3.0.tgz", - "integrity": "sha512-Ho5Vdpdro05ZyCx/l5Hkc5vHiibKTaY37fIAD9NF9Gi/vDxkVTeX40U/mFnEmeoxyuYALvWCJfi7JTT82R6Tuw==", + "version": "22.7.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-22.7.0.tgz", + "integrity": "sha512-9Q+L3VD7cfhXnxv6AqwTHsVb/+/uXENByhPrgvwQ49wvzQwtf1d6b7v6gpoG3tpRdwYjxoV1eHTD8tFahww09g==", "dev": true, "dependencies": { - "@puppeteer/browsers": "2.1.0", - "chromium-bidi": "0.5.10", - "cross-fetch": "4.0.0", + "@puppeteer/browsers": "2.2.2", + "chromium-bidi": "0.5.17", "debug": "4.3.4", - "devtools-protocol": "0.0.1249869", + "devtools-protocol": "0.0.1273771", "ws": "8.16.0" }, "engines": { "node": ">=18" } }, - "node_modules/puppeteer/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 - }, - "node_modules/puppeteer/node_modules/cosmiconfig": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", - "dev": true, - "dependencies": { - "env-paths": "^2.2.1", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/puppeteer/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, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/pure-rand": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", - "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", "dev": true, "funding": [ { @@ -16427,7 +16653,6 @@ "version": "2.5.2", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dev": true, "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -16538,27 +16763,6 @@ "node": ">=4" } }, - "node_modules/read-pkg/node_modules/path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/readable-stream": { "version": "4.5.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", @@ -16812,18 +17016,6 @@ "node": ">=8" } }, - "node_modules/resolve-global": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", - "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", - "dev": true, - "dependencies": { - "global-dirs": "^0.1.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/resolve.exports": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", @@ -16877,6 +17069,7 @@ "version": "5.0.5", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.5.tgz", "integrity": "sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==", + "dev": true, "dependencies": { "glob": "^10.3.7" }, @@ -16894,20 +17087,22 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/rimraf/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "dev": true, "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", + "jackspeak": "^2.3.6", "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" }, "bin": { "glob": "dist/esm/bin.mjs" @@ -16920,9 +17115,10 @@ } }, "node_modules/rimraf/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -16968,13 +17164,13 @@ } }, "node_modules/safe-array-concat": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", - "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, "dependencies": { - "call-bind": "^1.0.5", - "get-intrinsic": "^1.2.2", + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -17210,30 +17406,31 @@ } }, "node_modules/set-function-length": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", - "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dependencies": { - "define-data-property": "^1.1.2", + "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.3", + "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "dependencies": { - "define-data-property": "^1.0.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -17284,11 +17481,11 @@ } }, "node_modules/side-channel": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", - "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.7", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4", "object-inspect": "^1.13.1" @@ -17397,9 +17594,9 @@ } }, "node_modules/socks": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.1.tgz", - "integrity": "sha512-B6w7tkwNid7ToxjZ08rQMT8M9BJAf8DKx8Ft4NivzH0zBUfd6jldGcisJn/RLgxcX3FPNDdNQCUEMMT79b+oCQ==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", "dev": true, "dependencies": { "ip-address": "^9.0.5", @@ -17411,12 +17608,12 @@ } }, "node_modules/socks-proxy-agent": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", - "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.3.tgz", + "integrity": "sha512-VNegTZKhuGq5vSD6XNKlbqWhyt/40CgoEw8XxD6dhnm8Jq9IEa3nIa4HwnM8XOqU0CdB0BwWVXusqiFXfHB3+A==", "dev": true, "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.1", "debug": "^4.3.4", "socks": "^2.7.1" }, @@ -17425,9 +17622,9 @@ } }, "node_modules/socks-proxy-agent/node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "dev": true, "dependencies": { "debug": "^4.3.4" @@ -17446,9 +17643,9 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -17686,6 +17883,22 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "node_modules/standard-version/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, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/standard-version/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", @@ -17695,6 +17908,21 @@ "node": ">=8" } }, + "node_modules/standard-version/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, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/standard-version/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -17707,6 +17935,30 @@ "node": ">=10" } }, + "node_modules/standard-version/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, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/standard-version/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, + "engines": { + "node": ">=8" + } + }, "node_modules/standard-version/node_modules/semver": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", @@ -17911,6 +18163,7 @@ "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, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -17924,6 +18177,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { "node": ">=8" } @@ -17931,12 +18185,14 @@ "node_modules/string-width-cjs/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==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/string-width-cjs/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, "engines": { "node": ">=8" } @@ -17945,6 +18201,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -17953,14 +18210,15 @@ } }, "node_modules/string.prototype.padend": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.5.tgz", - "integrity": "sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz", + "integrity": "sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -17970,14 +18228,15 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -17987,28 +18246,31 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -18025,6 +18287,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, "dependencies": { "ansi-regex": "^6.0.1" }, @@ -18040,6 +18303,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -18051,6 +18315,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { "node": ">=8" } @@ -18119,25 +18384,26 @@ } }, "node_modules/style-loader": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.4.tgz", - "integrity": "sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-4.0.0.tgz", + "integrity": "sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA==", "dev": true, "engines": { - "node": ">= 12.13.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^5.0.0" + "webpack": "^5.27.0" } }, "node_modules/superagent": { "version": "8.1.2", "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz", "integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==", + "deprecated": "Please upgrade to v9.0.0+ as we have fixed a public vulnerability with formidable dependency. Note that v9.0.0+ requires Node.js v14.18.0+. See https://github.com/ladjs/superagent/pull/1800 for insight. This project is supported and maintained by the team at Forward Email @ https://forwardemail.net", "dev": true, "dependencies": { "component-emitter": "^1.3.0", @@ -18305,9 +18571,9 @@ } }, "node_modules/terser": { - "version": "5.27.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.27.2.tgz", - "integrity": "sha512-sHXmLSkImesJ4p5apTeT63DsV4Obe1s37qT8qvwHRmVxKTBH7Rv9Wr26VcAMmLbmk9UliiwK8z+657NyJHHy/w==", + "version": "5.30.4", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.30.4.tgz", + "integrity": "sha512-xRdd0v64a8mFK9bnsKVdoNP9GQIKUAaJPTaqEQDL4w/J8WaW4sWXXoMZ+6SimPkfT5bElreXf8m9HnmPc3E1BQ==", "devOptional": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -18688,12 +18954,12 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.1.tgz", - "integrity": "sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.7", "es-errors": "^1.3.0", "is-typed-array": "^1.1.13" }, @@ -18702,15 +18968,16 @@ } }, "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -18720,16 +18987,16 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.1.tgz", - "integrity": "sha512-tcqKMrTRXjqvHN9S3553NPCaGL0VPgFI92lXszmrE8DMhiDPLBYLlvo8Uu4WZAAX/aGqp/T1sbA4ph8EWjDF9Q==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.6", + "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-proto": "^1.0.1", + "has-proto": "^1.0.3", "is-typed-array": "^1.1.13" }, "engines": { @@ -18740,14 +19007,20 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -18769,9 +19042,9 @@ } }, "node_modules/typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -18888,6 +19161,18 @@ "node": ">=4" } }, + "node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/unique-string": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", @@ -19073,9 +19358,9 @@ } }, "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", "devOptional": true, "dependencies": { "glob-to-regexp": "^0.4.1", @@ -19103,26 +19388,26 @@ } }, "node_modules/webpack": { - "version": "5.90.3", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.3.tgz", - "integrity": "sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==", + "version": "5.91.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz", + "integrity": "sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==", "devOptional": true, "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", "acorn": "^8.7.1", "acorn-import-assertions": "^1.9.0", "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", + "enhanced-resolve": "^5.16.0", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", @@ -19130,7 +19415,7 @@ "schema-utils": "^3.2.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.0", + "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, "bin": { @@ -19204,13 +19489,14 @@ } }, "node_modules/webpack-dev-middleware": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.0.0.tgz", - "integrity": "sha512-tZ5hqsWwww/8DislmrzXE3x+4f+v10H1z57mA2dWFrILb4i3xX+dPhTkcdR0DLyQztrhF2AUmO5nN085UYjd/Q==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.2.1.tgz", + "integrity": "sha512-hRLz+jPQXo999Nx9fXVdKlg/aehsw1ajA9skAneGmT03xwmyuhvF93p6HUKKbWhXdcERtGTzUCtIQr+2IQegrA==", "dependencies": { "colorette": "^2.0.10", "memfs": "^4.6.0", "mime-types": "^2.1.31", + "on-finished": "^2.4.1", "range-parser": "^1.2.1", "schema-utils": "^4.0.0" }, @@ -19400,16 +19686,16 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz", - "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.6", - "call-bind": "^1.0.5", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.1" + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -19452,6 +19738,7 @@ "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, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -19468,6 +19755,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { "node": ">=8" } @@ -19476,6 +19764,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -19490,6 +19779,7 @@ "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, "dependencies": { "color-name": "~1.1.4" }, @@ -19500,17 +19790,20 @@ "node_modules/wrap-ansi-cjs/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==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/wrap-ansi-cjs/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==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/wrap-ansi-cjs/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, "engines": { "node": ">=8" } @@ -19519,6 +19812,7 @@ "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, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -19532,6 +19826,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -19642,10 +19937,13 @@ "dev": true }, "node_modules/yaml": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", - "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz", + "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==", "dev": true, + "bin": { + "yaml": "bin.mjs" + }, "engines": { "node": ">= 14" } @@ -19748,6 +20046,15 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zod": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", + "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } } } } diff --git a/package.json b/package.json index 9a9739cdb1..3080cc121c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "webpack-dev-server", - "version": "5.0.2", + "version": "5.0.4", "description": "Serves a webpack app. Updates the browser on changes.", "bin": "bin/webpack-dev-server.js", "main": "lib/Server.js", @@ -38,6 +38,7 @@ "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:e2e": "playwright test", "test:coverage": "npm run test:only -- --coverage", "test:watch": "npm run test:coverage --watch", "test": "npm run test:coverage", @@ -60,7 +61,7 @@ "compression": "^1.7.4", "connect-history-api-fallback": "^2.0.0", "default-gateway": "^6.0.3", - "express": "^4.17.3", + "express": "^4.19.2", "graceful-fs": "^4.2.6", "html-entities": "^2.4.0", "http-proxy-middleware": "^2.0.3", @@ -68,13 +69,12 @@ "launch-editor": "^2.6.1", "open": "^10.0.3", "p-retry": "^6.2.0", - "rimraf": "^5.0.5", "schema-utils": "^4.2.0", "selfsigned": "^2.4.1", "serve-index": "^1.9.1", "sockjs": "^0.3.24", "spdy": "^4.0.2", - "webpack-dev-middleware": "^7.0.0", + "webpack-dev-middleware": "^7.1.0", "ws": "^8.16.0" }, "devDependencies": { @@ -85,8 +85,9 @@ "@babel/plugin-transform-runtime": "^7.22.5", "@babel/preset-env": "^7.22.5", "@babel/runtime": "^7.22.5", - "@commitlint/cli": "^18.5.0", - "@commitlint/config-conventional": "^18.5.0", + "@commitlint/cli": "^19.0.3", + "@commitlint/config-conventional": "^19.0.3", + "@playwright/test": "^1.44.0", "@types/compression": "^1.7.2", "@types/default-gateway": "^3.0.1", "@types/node": "^20.11.16", @@ -97,9 +98,10 @@ "babel-jest": "^29.5.0", "babel-loader": "^9.1.0", "body-parser": "^1.19.2", + "connect": "^3.7.0", "core-js": "^3.31.0", "cspell": "^8.3.2", - "css-loader": "^6.8.1", + "css-loader": "^7.1.1", "eslint": "^8.43.0", "eslint-config-prettier": "^9.1.0", "eslint-config-webpack": "^1.2.5", @@ -118,18 +120,19 @@ "memfs": "^4.6.0", "npm-run-all": "^4.1.5", "prettier": "^3.2.4", - "puppeteer": "^22.1.0", + "puppeteer": "^22.6.5", "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", "strip-ansi-v6": "npm:strip-ansi@^6.0.0", - "style-loader": "^3.3.1", + "style-loader": "^4.0.0", "supertest": "^6.1.3", "tcp-port-used": "^1.0.2", "typescript": "^5.3.3", "wait-for-expect": "^3.0.2", - "webpack": "^5.89.0", + "webpack": "^5.91.0", "webpack-cli": "^5.0.1", "webpack-merge": "^5.9.0" }, diff --git a/playwright.config.js b/playwright.config.js new file mode 100644 index 0000000000..e5080c1d9f --- /dev/null +++ b/playwright.config.js @@ -0,0 +1,25 @@ +"use strict"; + +const CI = false; + +module.exports = { + testDir: "./test/e2e-playwright", + // however this can have benefits, in tests I couldn't start a server on multiple ports + // for tests "stats-refactored.test.js" the port is read from "ports-map.js" file somehow + // I should manage to handle it if I want to run the tests in parallel mode + fullyParallel: false, + forbidOnly: !!CI, + retries: CI ? 2 : 0, + // eslint-disable-next-line no-undefined + workers: CI ? 1 : undefined, + reporter: "html", + use: { + trace: "on-first-retry", + }, + projects: [ + { + name: "chromium", + use: { browserName: "chromium" }, + }, + ], +}; diff --git a/scripts/setupTest.js b/scripts/setupTest.js index f3dedf9551..99a74a59bf 100644 --- a/scripts/setupTest.js +++ b/scripts/setupTest.js @@ -2,4 +2,4 @@ process.env.CHOKIDAR_USEPOLLING = true; -jest.setTimeout(300000); +jest.setTimeout(400000); diff --git a/test/__snapshots__/validate-options.test.js.snap.webpack5 b/test/__snapshots__/validate-options.test.js.snap.webpack5 index 03cf17040e..60fa07786f 100644 --- a/test/__snapshots__/validate-options.test.js.snap.webpack5 +++ b/test/__snapshots__/validate-options.test.js.snap.webpack5 @@ -52,6 +52,20 @@ 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`] = ` +"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 (i.e. 'connect', 'fastify' and 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`] = ` +"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 (i.e. 'connect', 'fastify' and 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`] = ` "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: diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js b/test/e2e-playwright/allowed-hosts-refactored.test.js new file mode 100644 index 0000000000..7862fa4cd0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js @@ -0,0 +1,1515 @@ +"use strict"; + +const express = require("express"); +const webpack = require("webpack"); +const { test } = require("@playwright/test"); +const { describe } = require("@playwright/test"); +const { expect } = require("@playwright/test"); +const { beforeEach, afterEach } = require("@playwright/test"); +const { createProxyMiddleware } = require("http-proxy-middleware"); +const Server = require("../../lib/Server"); +const config = require("../fixtures/client-config/webpack.config"); +const [port1, port2] = require("../ports-map")["allowed-hosts"]; + +const webSocketServers = ["ws", "sockjs"]; + +describe("allowed hosts", () => { + for (const webSocketServer of webSocketServers) { + test(`should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "host" header ("${webSocketServer}")`, async ({ + page, + }) => { + const devServerHost = "127.0.0.1"; + const devServerPort = port1; + const proxyHost = devServerHost; + const proxyPort = port2; + + const compiler = webpack(config); + const devServerOptions = { + client: { + webSocketURL: { + port: port2, + }, + }, + webSocketServer, + port: devServerPort, + host: devServerHost, + allowedHosts: "auto", + }; + const server = new Server(devServerOptions, compiler); + + await server.start(); + + function startProxy(callback) { + const app = express(); + + app.use( + "/", + createProxyMiddleware({ + // Emulation + onProxyReqWs: (proxyReq) => { + proxyReq.setHeader("host", "my-test-host"); + }, + target: `http://${devServerHost}:${devServerPort}`, + ws: true, + changeOrigin: true, + logLevel: "warn", + }), + ); + + return app.listen(proxyPort, proxyHost, callback); + } + + const proxy = await new Promise((resolve) => { + const proxyCreated = startProxy(() => { + resolve(proxyCreated); + }); + }); + + try { + const pageErrors = []; + const consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://${proxyHost}:${proxyPort}/`, { + waitUntil: "networkidle0", + }); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + proxy.close(); + + await server.stop(); + } + }); + + test(`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 ({ + page, + }) => { + const devServerHost = "127.0.0.1"; + const devServerPort = port1; + const proxyHost = devServerHost; + const proxyPort = port2; + + const compiler = webpack(config); + const devServerOptions = { + client: { + webSocketURL: { + port: port2, + protocol: "ws", + }, + }, + webSocketServer, + port: devServerPort, + host: devServerHost, + allowedHosts: "auto", + server: "https", + }; + const server = new Server(devServerOptions, compiler); + + await server.start(); + + function startProxy(callback) { + const app = express(); + + app.use( + "/", + createProxyMiddleware({ + // Emulation + onProxyReqWs: (proxyReq) => { + proxyReq.setHeader("host", "my-test-host"); + }, + target: `https://${devServerHost}:${devServerPort}`, + secure: false, + ws: true, + changeOrigin: true, + logLevel: "warn", + }), + ); + + return app.listen(proxyPort, proxyHost, callback); + } + + const proxy = await new Promise((resolve) => { + const proxyCreated = startProxy(() => { + resolve(proxyCreated); + }); + }); + + try { + const pageErrors = []; + const consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://${proxyHost}:${proxyPort}/`, { + waitUntil: "networkidle0", + }); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + proxy.close(); + + await server.stop(); + } + }); + + test(`should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "origin" header ("${webSocketServer}")`, async ({ + page, + }) => { + const devServerHost = "127.0.0.1"; + const devServerPort = port1; + const proxyHost = devServerHost; + const proxyPort = port2; + + const compiler = webpack(config); + const devServerOptions = { + client: { + webSocketURL: { + port: port2, + }, + }, + webSocketServer, + port: devServerPort, + host: devServerHost, + allowedHosts: "auto", + }; + const server = new Server(devServerOptions, compiler); + + await server.start(); + + function startProxy(callback) { + const app = express(); + + app.use( + "/", + createProxyMiddleware({ + // Emulation + onProxyReqWs: (proxyReq) => { + proxyReq.setHeader("origin", "http://my-test-origin.com/"); + }, + target: `http://${devServerHost}:${devServerPort}`, + ws: true, + changeOrigin: true, + logLevel: "warn", + }), + ); + + return app.listen(proxyPort, proxyHost, callback); + } + + const proxy = await new Promise((resolve) => { + const proxyCreated = startProxy(() => { + resolve(proxyCreated); + }); + }); + + try { + const pageErrors = []; + const consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://${proxyHost}:${proxyPort}/`, { + waitUntil: "networkidle0", + }); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + proxy.close(); + + await server.stop(); + } + }); + + test(`should connect web socket client using localhost to web socket server with the "auto" value ("${webSocketServer}")`, async ({ + page, + }) => { + const devServerHost = "localhost"; + const devServerPort = port1; + const proxyHost = devServerHost; + const proxyPort = port2; + + const compiler = webpack(config); + const devServerOptions = { + client: { + webSocketURL: { + port: port2, + }, + }, + webSocketServer, + port: devServerPort, + host: devServerHost, + allowedHosts: "auto", + }; + const server = new Server(devServerOptions, compiler); + + await server.start(); + + function startProxy(callback) { + const app = express(); + + app.use( + "/", + createProxyMiddleware({ + target: `http://${devServerHost}:${devServerPort}`, + ws: true, + changeOrigin: true, + logLevel: "warn", + }), + ); + + return app.listen(proxyPort, proxyHost, callback); + } + + const proxy = await new Promise((resolve) => { + const proxyCreated = startProxy(() => { + resolve(proxyCreated); + }); + }); + + try { + const pageErrors = []; + const consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://${proxyHost}:${proxyPort}/`, { + waitUntil: "networkidle0", + }); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + proxy.close(); + + await server.stop(); + } + }); + + test(`should connect web socket client using "127.0.0.1" host to web socket server with the "auto" value ("${webSocketServer}")`, async ({ + page, + }) => { + const devServerHost = "127.0.0.1"; + const devServerPort = port1; + const proxyHost = devServerHost; + const proxyPort = port2; + + const compiler = webpack(config); + const devServerOptions = { + client: { + webSocketURL: { + port: port2, + }, + }, + webSocketServer, + port: devServerPort, + host: devServerHost, + allowedHosts: "auto", + }; + const server = new Server(devServerOptions, compiler); + + await server.start(); + + function startProxy(callback) { + const app = express(); + + app.use( + "/", + createProxyMiddleware({ + target: `http://${devServerHost}:${devServerPort}`, + ws: true, + changeOrigin: true, + logLevel: "warn", + }), + ); + + return app.listen(proxyPort, proxyHost, callback); + } + + const proxy = await new Promise((resolve) => { + const proxyCreated = startProxy(() => { + resolve(proxyCreated); + }); + }); + + try { + const pageErrors = []; + const consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://${proxyHost}:${proxyPort}/`, { + waitUntil: "networkidle0", + }); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + proxy.close(); + + await server.stop(); + } + }); + + test(`should connect web socket client using "[::1] host to web socket server with the "auto" value ("${webSocketServer}")`, async ({ + page, + }) => { + const devServerHost = "::1"; + const devServerPort = port1; + const proxyHost = devServerHost; + const proxyPort = port2; + + const compiler = webpack(config); + const devServerOptions = { + client: { + webSocketURL: { + port: port2, + }, + }, + webSocketServer, + port: devServerPort, + host: devServerHost, + allowedHosts: "auto", + }; + const server = new Server(devServerOptions, compiler); + + await server.start(); + + function startProxy(callback) { + const app = express(); + + app.use( + "/", + createProxyMiddleware({ + target: `http://[${devServerHost}]:${devServerPort}`, + ws: true, + changeOrigin: true, + logLevel: "warn", + }), + ); + + return app.listen(proxyPort, proxyHost, callback); + } + + const proxy = await new Promise((resolve) => { + const proxyCreated = startProxy(() => { + resolve(proxyCreated); + }); + }); + + try { + const pageErrors = []; + const consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://[${proxyHost}]:${proxyPort}/`, { + waitUntil: "networkidle0", + }); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + proxy.close(); + + await server.stop(); + } + }); + + test(`should connect web socket client using "file:" protocol to web socket server with the "auto" value ("${webSocketServer}")`, async ({ + page, + }) => { + const devServerHost = "127.0.0.1"; + const devServerPort = port1; + const proxyHost = devServerHost; + const proxyPort = port2; + + const compiler = webpack(config); + const devServerOptions = { + client: { + webSocketURL: { + port: port2, + }, + }, + webSocketServer, + port: devServerPort, + host: devServerHost, + allowedHosts: "auto", + }; + const server = new Server(devServerOptions, compiler); + + await server.start(); + + function startProxy(callback) { + const app = express(); + + app.use( + "/", + createProxyMiddleware({ + target: `http://${devServerHost}:${devServerPort}`, + onProxyReqWs: (proxyReq) => { + proxyReq.setHeader("origin", "file:///path/to/local/file.js"); + }, + ws: true, + changeOrigin: true, + logLevel: "warn", + }), + ); + + return app.listen(proxyPort, proxyHost, callback); + } + + const proxy = await new Promise((resolve) => { + const proxyCreated = startProxy(() => { + resolve(proxyCreated); + }); + }); + + try { + const pageErrors = []; + const consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://${proxyHost}:${proxyPort}/`, { + waitUntil: "networkidle0", + }); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + proxy.close(); + + await server.stop(); + } + }); + + test(`should connect web socket client using "chrome-extension:" protocol to web socket server with the "auto" value ("${webSocketServer}")`, async ({ + page, + }) => { + const devServerHost = "127.0.0.1"; + const devServerPort = port1; + const proxyHost = devServerHost; + const proxyPort = port2; + + const compiler = webpack(config); + const devServerOptions = { + client: { + webSocketURL: { + port: port2, + }, + }, + webSocketServer, + port: devServerPort, + host: devServerHost, + allowedHosts: "auto", + }; + const server = new Server(devServerOptions, compiler); + + await server.start(); + + function startProxy(callback) { + const app = express(); + + app.use( + "/", + createProxyMiddleware({ + target: `http://${devServerHost}:${devServerPort}`, + onProxyReqWs: (proxyReq) => { + proxyReq.setHeader("origin", "chrome-extension:///abcdef"); + }, + ws: true, + changeOrigin: true, + logLevel: "warn", + }), + ); + + return app.listen(proxyPort, proxyHost, callback); + } + + const proxy = await new Promise((resolve) => { + const proxyCreated = startProxy(() => { + resolve(proxyCreated); + }); + }); + + try { + const pageErrors = []; + const consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://${proxyHost}:${proxyPort}/`, { + waitUntil: "networkidle0", + }); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + proxy.close(); + + await server.stop(); + } + }); + + test(`should connect web socket client using custom hostname to web socket server with the "all" value ("${webSocketServer}")`, async ({ + page, + }) => { + const devServerHost = "127.0.0.1"; + const devServerPort = port1; + const proxyHost = devServerHost; + const proxyPort = port2; + + const compiler = webpack(config); + const devServerOptions = { + client: { + webSocketURL: { + port: port2, + }, + }, + webSocketServer, + port: devServerPort, + host: devServerHost, + allowedHosts: "all", + }; + const server = new Server(devServerOptions, compiler); + + await server.start(); + + function startProxy(callback) { + const app = express(); + + app.use( + "/", + createProxyMiddleware({ + // Emulation + onProxyReqWs: (proxyReq) => { + proxyReq.setHeader("origin", "http://my-test-origin.com/"); + }, + target: `http://${devServerHost}:${devServerPort}`, + ws: true, + changeOrigin: true, + logLevel: "warn", + }), + ); + + return app.listen(proxyPort, proxyHost, callback); + } + + const proxy = await new Promise((resolve) => { + const proxyCreated = startProxy(() => { + resolve(proxyCreated); + }); + }); + + try { + const pageErrors = []; + const consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://${proxyHost}:${proxyPort}/`, { + waitUntil: "networkidle0", + }); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + proxy.close(); + + await server.stop(); + } + }); + + test(`should connect web socket client using custom hostname to web socket server with the "all" value in array ("${webSocketServer}")`, async ({ + page, + }) => { + const devServerHost = "127.0.0.1"; + const devServerPort = port1; + const proxyHost = devServerHost; + const proxyPort = port2; + + const compiler = webpack(config); + const devServerOptions = { + client: { + webSocketURL: { + port: port2, + }, + }, + webSocketServer, + port: devServerPort, + host: devServerHost, + allowedHosts: ["all"], + }; + const server = new Server(devServerOptions, compiler); + + await server.start(); + + function startProxy(callback) { + const app = express(); + + app.use( + "/", + createProxyMiddleware({ + // Emulation + onProxyReqWs: (proxyReq) => { + proxyReq.setHeader("origin", "http://my-test-origin.com/"); + }, + target: `http://${devServerHost}:${devServerPort}`, + ws: true, + changeOrigin: true, + logLevel: "warn", + }), + ); + + return app.listen(proxyPort, proxyHost, callback); + } + + const proxy = await new Promise((resolve) => { + const proxyCreated = startProxy(() => { + resolve(proxyCreated); + }); + }); + + try { + const pageErrors = []; + const consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://${proxyHost}:${proxyPort}/`, { + waitUntil: "networkidle0", + }); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + proxy.close(); + + await server.stop(); + } + }); + + test(`should connect web socket client using custom hostname to web socket server with the custom hostname value ("${webSocketServer}")`, async ({ + page, + }) => { + const devServerHost = "127.0.0.1"; + const devServerPort = port1; + const proxyHost = devServerHost; + const proxyPort = port2; + + const compiler = webpack(config); + const devServerOptions = { + client: { + webSocketURL: { + port: port2, + }, + }, + webSocketServer, + port: devServerPort, + host: devServerHost, + allowedHosts: "my-test-origin.com", + }; + const server = new Server(devServerOptions, compiler); + + await server.start(); + + function startProxy(callback) { + const app = express(); + + app.use( + "/", + createProxyMiddleware({ + // Emulation + onProxyReqWs: (proxyReq) => { + proxyReq.setHeader("origin", "http://my-test-origin.com/"); + }, + target: `http://${devServerHost}:${devServerPort}`, + ws: true, + changeOrigin: true, + logLevel: "warn", + }), + ); + + return app.listen(proxyPort, proxyHost, callback); + } + + const proxy = await new Promise((resolve) => { + const proxyCreated = startProxy(() => { + resolve(proxyCreated); + }); + }); + + try { + const pageErrors = []; + const consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://${proxyHost}:${proxyPort}/`, { + waitUntil: "networkidle0", + }); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + proxy.close(); + + await server.stop(); + } + }); + + test(`should connect web socket client using custom hostname to web socket server with the custom hostname value starting with dot ("${webSocketServer}")`, async ({ + page, + }) => { + const devServerHost = "127.0.0.1"; + const devServerPort = port1; + const proxyHost = devServerHost; + const proxyPort = port2; + + const compiler = webpack(config); + const devServerOptions = { + client: { + webSocketURL: { + port: port2, + }, + }, + webSocketServer, + port: devServerPort, + host: devServerHost, + allowedHosts: ".my-test-origin.com", + }; + const server = new Server(devServerOptions, compiler); + + await server.start(); + + function startProxy(callback) { + const app = express(); + + app.use( + "/", + createProxyMiddleware({ + // Emulation + onProxyReqWs: (proxyReq) => { + proxyReq.setHeader("origin", "http://my-test-origin.com/"); + }, + target: `http://${devServerHost}:${devServerPort}`, + ws: true, + changeOrigin: true, + logLevel: "warn", + }), + ); + + return app.listen(proxyPort, proxyHost, callback); + } + + const proxy = await new Promise((resolve) => { + const proxyCreated = startProxy(() => { + resolve(proxyCreated); + }); + }); + + try { + const pageErrors = []; + const consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://${proxyHost}:${proxyPort}/`, { + waitUntil: "networkidle0", + }); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + proxy.close(); + + await server.stop(); + } + }); + + test(`should connect web socket client using custom sub hostname to web socket server with the custom hostname value ("${webSocketServer}")`, async ({ + page, + }) => { + const devServerHost = "127.0.0.1"; + const devServerPort = port1; + const proxyHost = devServerHost; + const proxyPort = port2; + + const compiler = webpack(config); + const devServerOptions = { + client: { + webSocketURL: { + port: port2, + }, + }, + webSocketServer, + port: devServerPort, + host: devServerHost, + allowedHosts: ".my-test-origin.com", + }; + const server = new Server(devServerOptions, compiler); + + await server.start(); + + function startProxy(callback) { + const app = express(); + + app.use( + "/", + createProxyMiddleware({ + // Emulation + onProxyReqWs: (proxyReq) => { + proxyReq.setHeader( + "origin", + "http://foo.bar.baz.my-test-origin.com/", + ); + }, + target: `http://${devServerHost}:${devServerPort}`, + ws: true, + changeOrigin: true, + logLevel: "warn", + }), + ); + + return app.listen(proxyPort, proxyHost, callback); + } + + const proxy = await new Promise((resolve) => { + const proxyCreated = startProxy(() => { + resolve(proxyCreated); + }); + }); + + try { + const pageErrors = []; + const consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://${proxyHost}:${proxyPort}/`, { + waitUntil: "networkidle0", + }); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + proxy.close(); + + await server.stop(); + } + }); + + test(`should connect web socket client using custom hostname to web socket server with the multiple custom hostname values ("${webSocketServer}")`, async ({ + page, + }) => { + const devServerHost = "127.0.0.1"; + const devServerPort = port1; + const proxyHost = devServerHost; + const proxyPort = port2; + + const compiler = webpack(config); + const devServerOptions = { + client: { + webSocketURL: { + port: port2, + }, + }, + webSocketServer, + port: devServerPort, + host: devServerHost, + allowedHosts: ["my-test-origin.com"], + }; + const server = new Server(devServerOptions, compiler); + + await server.start(); + + function startProxy(callback) { + const app = express(); + + app.use( + "/", + createProxyMiddleware({ + // Emulation + onProxyReqWs: (proxyReq) => { + proxyReq.setHeader("origin", "http://my-test-origin.com/"); + }, + target: `http://${devServerHost}:${devServerPort}`, + ws: true, + changeOrigin: true, + logLevel: "warn", + }), + ); + + return app.listen(proxyPort, proxyHost, callback); + } + + const proxy = await new Promise((resolve) => { + const proxyCreated = startProxy(() => { + resolve(proxyCreated); + }); + }); + + try { + const pageErrors = []; + const consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://${proxyHost}:${proxyPort}/`, { + waitUntil: "networkidle0", + }); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + proxy.close(); + + await server.stop(); + } + }); + + test(`should disconnect web client using localhost to web socket server with the "auto" value ("${webSocketServer}")`, async ({ + page, + }) => { + const devServerHost = "127.0.0.1"; + const devServerPort = port1; + const proxyHost = devServerHost; + const proxyPort = port2; + + const compiler = webpack(config); + const devServerOptions = { + client: { + webSocketURL: { + port: port2, + }, + }, + webSocketServer, + port: devServerPort, + host: devServerHost, + allowedHosts: "auto", + }; + const server = new Server(devServerOptions, compiler); + + await server.start(); + + function startProxy(callback) { + const app = express(); + + app.use( + "/", + createProxyMiddleware({ + // Emulation + onProxyReq: (proxyReq, req, res) => { + proxyReq.setHeader("host", "unknown"); + res.setHeader("host", devServerHost); + }, + target: `http://${devServerHost}:${devServerPort}`, + ws: true, + changeOrigin: true, + logLevel: "warn", + }), + ); + + return app.listen(proxyPort, proxyHost, callback); + } + + const proxy = await new Promise((resolve) => { + const proxyCreated = startProxy(() => { + resolve(proxyCreated); + }); + }); + + try { + const pageErrors = []; + const consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://${proxyHost}:${proxyPort}/`, { + waitUntil: "networkidle0", + }); + + const html = await page.content(); + + expect(JSON.stringify(html)).toMatchSnapshot(); + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + proxy.close(); + + await server.stop(); + } + }); + } + + describe("check host headers", () => { + let compiler; + let server; + let pageErrors; + let consoleMessages; + + beforeEach(() => { + compiler = webpack(config); + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + await server.stop(); + }); + + test("should always allow `localhost` if options.allowedHosts is auto", async ({ + page, + }) => { + const options = { + allowedHosts: "auto", + port: port1, + }; + + const headers = { + host: "localhost", + }; + + server = new Server(options, compiler); + + await server.start(); + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://127.0.0.1:${port1}/main.js`, { + waitUntil: "networkidle0", + }); + + if (!server.checkHeader(headers, "host")) { + throw new Error("Validation didn't fail"); + } + + expect(JSON.stringify(response.status())).toMatchSnapshot(); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + + test("should always allow `localhost` subdomain if options.allowedHosts is auto", async ({ + page, + }) => { + const options = { + allowedHosts: "auto", + port: port1, + }; + + const headers = { + host: "app.localhost", + }; + + server = new Server(options, compiler); + + await server.start(); + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://127.0.0.1:${port1}/main.js`, { + waitUntil: "networkidle0", + }); + + if (!server.checkHeader(headers, "host")) { + throw new Error("Validation didn't fail"); + } + + expect(JSON.stringify(response.status())).toMatchSnapshot(); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + + test("should always allow value from the `host` options if options.allowedHosts is auto", async ({ + page, + }) => { + const networkIP = Server.internalIPSync("v4"); + const options = { + host: networkIP, + allowedHosts: "auto", + port: port1, + }; + + const headers = { + host: networkIP, + }; + + server = new Server(options, compiler); + + await server.start(); + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://${networkIP}:${port1}/main.js`, { + waitUntil: "networkidle0", + }); + + if (!server.checkHeader(headers, "host")) { + throw new Error("Validation didn't fail"); + } + + expect(JSON.stringify(response.status())).toMatchSnapshot(); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + + test("should always allow value of the `host` option from the `client.webSocketURL` option if options.allowedHosts is auto", async ({ + page, + }) => { + const options = { + allowedHosts: "auto", + port: port1, + client: { + webSocketURL: "ws://test.host:80", + }, + }; + + const headers = { + host: "test.host", + }; + + server = new Server(options, compiler); + + await server.start(); + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://127.0.0.1:${port1}/main.js`, { + waitUntil: "networkidle0", + }); + + if (!server.checkHeader(headers, "host")) { + throw new Error("Validation didn't fail"); + } + + expect(JSON.stringify(response.status())).toMatchSnapshot(); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + + test("should always allow any host if options.allowedHosts is all", async ({ + page, + }) => { + const options = { + allowedHosts: "all", + port: port1, + }; + const headers = { + host: "bad.host", + }; + + server = new Server(options, compiler); + + await server.start(); + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://127.0.0.1:${port1}/main.js`, { + waitUntil: "networkidle0", + }); + + if (!server.checkHeader(headers, "host")) { + throw new Error("Validation didn't fail"); + } + + expect(JSON.stringify(response.status())).toMatchSnapshot(); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + + test("should allow hosts in allowedHosts", async ({ page }) => { + const tests = ["test.host", "test2.host", "test3.host"]; + const options = { + allowedHosts: tests, + port: port1, + }; + + server = new Server(options, compiler); + + await server.start(); + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://127.0.0.1:${port1}/main.js`, { + waitUntil: "networkidle0", + }); + + tests.forEach((test) => { + const headers = { host: test }; + + if (!server.checkHeader(headers, "host")) { + throw new Error("Validation didn't fail"); + } + }); + + expect(JSON.stringify(response.status())).toMatchSnapshot(); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + + test("should allow hosts that pass a wildcard in allowedHosts", async ({ + page, + }) => { + const options = { + allowedHosts: [".example.com"], + port: port1, + }; + + server = new Server(options, compiler); + + await server.start(); + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://127.0.0.1:${port1}/main.js`, { + waitUntil: "networkidle0", + }); + + const tests = [ + "www.example.com", + "subdomain.example.com", + "example.com", + "subsubcomain.subdomain.example.com", + "example.com:80", + "subdomain.example.com:80", + ]; + + tests.forEach((test) => { + const headers = { host: test }; + + if (!server.checkHeader(headers, "host")) { + throw new Error("Validation didn't fail"); + } + }); + + expect(JSON.stringify(response.status())).toMatchSnapshot(); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + }); +}); diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-allow-hosts-in-allowedHosts-1-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-allow-hosts-in-allowedHosts-1-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-allow-hosts-in-allowedHosts-1-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-allow-hosts-in-allowedHosts-2-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-allow-hosts-in-allowedHosts-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-allow-hosts-in-allowedHosts-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-allow-hosts-in-allowedHosts-3-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-allow-hosts-in-allowedHosts-3-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-allow-hosts-in-allowedHosts-3-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-allow-hosts-that-pass-a-wildcard-in-allowedHosts-1-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-allow-hosts-that-pass-a-wildcard-in-allowedHosts-1-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-allow-hosts-that-pass-a-wildcard-in-allowedHosts-1-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-allow-hosts-that-pass-a-wildcard-in-allowedHosts-2-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-allow-hosts-that-pass-a-wildcard-in-allowedHosts-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-allow-hosts-that-pass-a-wildcard-in-allowedHosts-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-allow-hosts-that-pass-a-wildcard-in-allowedHosts-3-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-allow-hosts-that-pass-a-wildcard-in-allowedHosts-3-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-allow-hosts-that-pass-a-wildcard-in-allowedHosts-3-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-always-2dcd2-st-subdomain-if-options-allowedHosts-is-auto-2-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-always-2dcd2-st-subdomain-if-options-allowedHosts-is-auto-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-always-2dcd2-st-subdomain-if-options-allowedHosts-is-auto-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-always-43f96-etURL-option-if-options-allowedHosts-is-auto-2-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-always-43f96-etURL-option-if-options-allowedHosts-is-auto-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-always-43f96-etURL-option-if-options-allowedHosts-is-auto-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-always-637f8-st-subdomain-if-options-allowedHosts-is-auto-1-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-always-637f8-st-subdomain-if-options-allowedHosts-is-auto-1-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-always-637f8-st-subdomain-if-options-allowedHosts-is-auto-1-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-always-7b4e4-etURL-option-if-options-allowedHosts-is-auto-1-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-always-7b4e4-etURL-option-if-options-allowedHosts-is-auto-1-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-always-7b4e4-etURL-option-if-options-allowedHosts-is-auto-1-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-always-allow-any-host-if-options-allowedHosts-is-all-1-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-always-allow-any-host-if-options-allowedHosts-is-all-1-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-always-allow-any-host-if-options-allowedHosts-is-all-1-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-always-allow-any-host-if-options-allowedHosts-is-all-2-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-always-allow-any-host-if-options-allowedHosts-is-all-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-always-allow-any-host-if-options-allowedHosts-is-all-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-always-allow-any-host-if-options-allowedHosts-is-all-3-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-always-allow-any-host-if-options-allowedHosts-is-all-3-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-always-allow-any-host-if-options-allowedHosts-is-all-3-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-always-allow-localhost-if-options-allowedHosts-is-auto-1-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-always-allow-localhost-if-options-allowedHosts-is-auto-1-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-always-allow-localhost-if-options-allowedHosts-is-auto-1-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-always-allow-localhost-if-options-allowedHosts-is-auto-2-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-always-allow-localhost-if-options-allowedHosts-is-auto-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-always-allow-localhost-if-options-allowedHosts-is-auto-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-always-allow-localhost-if-options-allowedHosts-is-auto-3-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-always-allow-localhost-if-options-allowedHosts-is-auto-3-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-always-allow-localhost-if-options-allowedHosts-is-auto-3-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-always-bdc68-etURL-option-if-options-allowedHosts-is-auto-3-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-always-bdc68-etURL-option-if-options-allowedHosts-is-auto-3-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-always-bdc68-etURL-option-if-options-allowedHosts-is-auto-3-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-always-d559b-st-subdomain-if-options-allowedHosts-is-auto-3-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-always-d559b-st-subdomain-if-options-allowedHosts-is-auto-3-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-check-host-headers-should-always-d559b-st-subdomain-if-options-allowedHosts-is-auto-3-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-006a0-eb-socket-server-with-the-auto-value-ws-2-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-006a0-eb-socket-server-with-the-auto-value-ws-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-006a0-eb-socket-server-with-the-auto-value-ws-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-08c88-eb-socket-server-with-the-auto-value-ws-2-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-08c88-eb-socket-server-with-the-auto-value-ws-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-08c88-eb-socket-server-with-the-auto-value-ws-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-0de78-ustom-hostname-value-starting-with-dot-ws-1-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-0de78-ustom-hostname-value-starting-with-dot-ws-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-0de78-ustom-hostname-value-starting-with-dot-ws-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-0df7a-ver-with-the-custom-hostname-value-sockjs-2-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-0df7a-ver-with-the-custom-hostname-value-sockjs-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-0df7a-ver-with-the-custom-hostname-value-sockjs-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-14ee2-web-socket-server-with-the-all-value-ws-2-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-14ee2-web-socket-server-with-the-all-value-ws-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-14ee2-web-socket-server-with-the-all-value-ws-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-1578c-ocket-server-with-the-auto-value-sockjs-1-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-1578c-ocket-server-with-the-auto-value-sockjs-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-1578c-ocket-server-with-the-auto-value-sockjs-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-359e3-eb-socket-server-with-the-auto-value-ws-2-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-359e3-eb-socket-server-with-the-auto-value-ws-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-359e3-eb-socket-server-with-the-auto-value-ws-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-3c702-he-multiple-custom-hostname-values-sockjs-1-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-3c702-he-multiple-custom-hostname-values-sockjs-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-3c702-he-multiple-custom-hostname-values-sockjs-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-40840-ocket-server-with-the-auto-value-sockjs-1-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-40840-ocket-server-with-the-auto-value-sockjs-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-40840-ocket-server-with-the-auto-value-sockjs-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-45696-web-socket-server-with-the-all-value-ws-1-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-45696-web-socket-server-with-the-all-value-ws-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-45696-web-socket-server-with-the-all-value-ws-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-4b9aa-ocket-server-with-the-auto-value-sockjs-2-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-4b9aa-ocket-server-with-the-auto-value-sockjs-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-4b9aa-ocket-server-with-the-auto-value-sockjs-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-4ea14-ocket-server-with-the-auto-value-sockjs-1-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-4ea14-ocket-server-with-the-auto-value-sockjs-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-4ea14-ocket-server-with-the-auto-value-sockjs-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-56d6e--server-with-the-custom-hostname-value-ws-1-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-56d6e--server-with-the-custom-hostname-value-ws-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-56d6e--server-with-the-custom-hostname-value-ws-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-5803c-socket-server-with-the-all-value-sockjs-2-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-5803c-socket-server-with-the-all-value-sockjs-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-5803c-socket-server-with-the-all-value-sockjs-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-68694-ocket-server-with-the-auto-value-sockjs-2-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-68694-ocket-server-with-the-auto-value-sockjs-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-68694-ocket-server-with-the-auto-value-sockjs-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-721c4-ocket-server-with-the-auto-value-sockjs-2-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-721c4-ocket-server-with-the-auto-value-sockjs-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-721c4-ocket-server-with-the-auto-value-sockjs-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-76440-ver-with-the-custom-hostname-value-sockjs-2-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-76440-ver-with-the-custom-hostname-value-sockjs-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-76440-ver-with-the-custom-hostname-value-sockjs-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-7768a--server-with-the-custom-hostname-value-ws-2-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-7768a--server-with-the-custom-hostname-value-ws-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-7768a--server-with-the-custom-hostname-value-ws-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-8098c-t-server-with-the-all-value-in-array-ws-2-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-8098c-t-server-with-the-all-value-in-array-ws-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-8098c-t-server-with-the-all-value-in-array-ws-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-8d5d2-ocket-server-with-the-auto-value-sockjs-2-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-8d5d2-ocket-server-with-the-auto-value-sockjs-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-8d5d2-ocket-server-with-the-auto-value-sockjs-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-8f112-m-hostname-value-starting-with-dot-sockjs-1-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-8f112-m-hostname-value-starting-with-dot-sockjs-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-8f112-m-hostname-value-starting-with-dot-sockjs-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-90f6e-ustom-hostname-value-starting-with-dot-ws-2-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-90f6e-ustom-hostname-value-starting-with-dot-ws-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-90f6e-ustom-hostname-value-starting-with-dot-ws-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-9285d-eb-socket-server-with-the-auto-value-ws-1-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-9285d-eb-socket-server-with-the-auto-value-ws-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-9285d-eb-socket-server-with-the-auto-value-ws-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-9f314-eb-socket-server-with-the-auto-value-ws-1-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-9f314-eb-socket-server-with-the-auto-value-ws-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-9f314-eb-socket-server-with-the-auto-value-ws-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-a0eb2-eb-socket-server-with-the-auto-value-ws-1-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-a0eb2-eb-socket-server-with-the-auto-value-ws-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-a0eb2-eb-socket-server-with-the-auto-value-ws-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-a90eb-th-the-multiple-custom-hostname-values-ws-1-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-a90eb-th-the-multiple-custom-hostname-values-ws-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-a90eb-th-the-multiple-custom-hostname-values-ws-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-b076c-eb-socket-server-with-the-auto-value-ws-1-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-b076c-eb-socket-server-with-the-auto-value-ws-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-b076c-eb-socket-server-with-the-auto-value-ws-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-b199f-he-multiple-custom-hostname-values-sockjs-2-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-b199f-he-multiple-custom-hostname-values-sockjs-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-b199f-he-multiple-custom-hostname-values-sockjs-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-b6368-th-the-multiple-custom-hostname-values-ws-2-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-b6368-th-the-multiple-custom-hostname-values-ws-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-b6368-th-the-multiple-custom-hostname-values-ws-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-b6642--server-with-the-custom-hostname-value-ws-2-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-b6642--server-with-the-custom-hostname-value-ws-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-b6642--server-with-the-custom-hostname-value-ws-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-bb8e7-t-server-with-the-all-value-in-array-ws-1-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-bb8e7-t-server-with-the-all-value-in-array-ws-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-bb8e7-t-server-with-the-all-value-in-array-ws-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-bd6b0-rver-with-the-all-value-in-array-sockjs-1-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-bd6b0-rver-with-the-all-value-in-array-sockjs-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-bd6b0-rver-with-the-all-value-in-array-sockjs-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-bf6b6-ocket-server-with-the-auto-value-sockjs-2-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-bf6b6-ocket-server-with-the-auto-value-sockjs-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-bf6b6-ocket-server-with-the-auto-value-sockjs-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-bfebe-ocket-server-with-the-auto-value-sockjs-1-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-bfebe-ocket-server-with-the-auto-value-sockjs-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-bfebe-ocket-server-with-the-auto-value-sockjs-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-cd7e2-m-hostname-value-starting-with-dot-sockjs-2-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-cd7e2-m-hostname-value-starting-with-dot-sockjs-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-cd7e2-m-hostname-value-starting-with-dot-sockjs-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-d625a-eb-socket-server-with-the-auto-value-ws-2-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-d625a-eb-socket-server-with-the-auto-value-ws-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-d625a-eb-socket-server-with-the-auto-value-ws-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-d94c1-ver-with-the-custom-hostname-value-sockjs-1-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-d94c1-ver-with-the-custom-hostname-value-sockjs-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-d94c1-ver-with-the-custom-hostname-value-sockjs-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-e12c9--server-with-the-custom-hostname-value-ws-1-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-e12c9--server-with-the-custom-hostname-value-ws-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-e12c9--server-with-the-custom-hostname-value-ws-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-e3231-eb-socket-server-with-the-auto-value-ws-2-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-e3231-eb-socket-server-with-the-auto-value-ws-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-e3231-eb-socket-server-with-the-auto-value-ws-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-e6c6a-eb-socket-server-with-the-auto-value-ws-1-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-e6c6a-eb-socket-server-with-the-auto-value-ws-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-e6c6a-eb-socket-server-with-the-auto-value-ws-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-f0250-ocket-server-with-the-auto-value-sockjs-1-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-f0250-ocket-server-with-the-auto-value-sockjs-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-f0250-ocket-server-with-the-auto-value-sockjs-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-f47ba-ver-with-the-custom-hostname-value-sockjs-1-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-f47ba-ver-with-the-custom-hostname-value-sockjs-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-f47ba-ver-with-the-custom-hostname-value-sockjs-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-f8e8c-rver-with-the-all-value-in-array-sockjs-2-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-f8e8c-rver-with-the-all-value-in-array-sockjs-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-f8e8c-rver-with-the-all-value-in-array-sockjs-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-ffcdd-socket-server-with-the-all-value-sockjs-1-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-ffcdd-socket-server-with-the-all-value-sockjs-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-connect-web-socket-client-ffcdd-socket-server-with-the-all-value-sockjs-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-client-usi-42e57-eb-socket-server-with-the-auto-value-ws-2-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-client-usi-42e57-eb-socket-server-with-the-auto-value-ws-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-client-usi-42e57-eb-socket-server-with-the-auto-value-ws-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-client-usi-6dee7-ocket-server-with-the-auto-value-sockjs-1-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-client-usi-6dee7-ocket-server-with-the-auto-value-sockjs-1-chromium-darwin.txt new file mode 100644 index 0000000000..1ca6ebc83b --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-client-usi-6dee7-ocket-server-with-the-auto-value-sockjs-1-chromium-darwin.txt @@ -0,0 +1 @@ +["Failed to load resource: the server responded with a status of 403 (Forbidden)"] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-client-usi-91d04-eb-socket-server-with-the-auto-value-ws-1-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-client-usi-91d04-eb-socket-server-with-the-auto-value-ws-1-chromium-darwin.txt new file mode 100644 index 0000000000..1ca6ebc83b --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-client-usi-91d04-eb-socket-server-with-the-auto-value-ws-1-chromium-darwin.txt @@ -0,0 +1 @@ +["Failed to load resource: the server responded with a status of 403 (Forbidden)"] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-client-usi-d0189-ocket-server-with-the-auto-value-sockjs-2-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-client-usi-d0189-ocket-server-with-the-auto-value-sockjs-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-client-usi-d0189-ocket-server-with-the-auto-value-sockjs-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-socket-cli-1f8c3-auto-value-based-on-the-host-header-ws-2-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-socket-cli-1f8c3-auto-value-based-on-the-host-header-ws-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-socket-cli-1f8c3-auto-value-based-on-the-host-header-ws-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-socket-cli-2d1ef-value-based-on-the-origin-header-sockjs-1-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-socket-cli-2d1ef-value-based-on-the-origin-header-sockjs-1-chromium-darwin.txt new file mode 100644 index 0000000000..0a0948b0be --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-socket-cli-2d1ef-value-based-on-the-origin-header-sockjs-1-chromium-darwin.txt @@ -0,0 +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..."] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-socket-cli-47955-value-based-on-the-origin-header-sockjs-2-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-socket-cli-47955-value-based-on-the-origin-header-sockjs-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-socket-cli-47955-value-based-on-the-origin-header-sockjs-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-socket-cli-5a915--value-based-on-the-host-header-sockjs-2-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-socket-cli-5a915--value-based-on-the-host-header-sockjs-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-socket-cli-5a915--value-based-on-the-host-header-sockjs-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-socket-cli-833a2--when-server-https-is-enabled-sockjs-2-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-socket-cli-833a2--when-server-https-is-enabled-sockjs-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-socket-cli-833a2--when-server-https-is-enabled-sockjs-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-socket-cli-99e8e-to-value-based-on-the-origin-header-ws-2-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-socket-cli-99e8e-to-value-based-on-the-origin-header-ws-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-socket-cli-99e8e-to-value-based-on-the-origin-header-ws-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-socket-cli-9d2a8--when-server-https-is-enabled-sockjs-1-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-socket-cli-9d2a8--when-server-https-is-enabled-sockjs-1-chromium-darwin.txt new file mode 100644 index 0000000000..0a0948b0be --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-socket-cli-9d2a8--when-server-https-is-enabled-sockjs-1-chromium-darwin.txt @@ -0,0 +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..."] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-socket-cli-b66cc-auto-value-based-on-the-host-header-ws-1-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-socket-cli-b66cc-auto-value-based-on-the-host-header-ws-1-chromium-darwin.txt new file mode 100644 index 0000000000..0a0948b0be --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-socket-cli-b66cc-auto-value-based-on-the-host-header-ws-1-chromium-darwin.txt @@ -0,0 +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..."] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-socket-cli-d126b-to-value-based-on-the-origin-header-ws-1-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-socket-cli-d126b-to-value-based-on-the-origin-header-ws-1-chromium-darwin.txt new file mode 100644 index 0000000000..0a0948b0be --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-socket-cli-d126b-to-value-based-on-the-origin-header-ws-1-chromium-darwin.txt @@ -0,0 +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..."] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-socket-cli-e1793-ader-when-server-https-is-enabled-ws-2-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-socket-cli-e1793-ader-when-server-https-is-enabled-ws-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-socket-cli-e1793-ader-when-server-https-is-enabled-ws-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-socket-cli-f0d55--value-based-on-the-host-header-sockjs-1-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-socket-cli-f0d55--value-based-on-the-host-header-sockjs-1-chromium-darwin.txt new file mode 100644 index 0000000000..0a0948b0be --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-socket-cli-f0d55--value-based-on-the-host-header-sockjs-1-chromium-darwin.txt @@ -0,0 +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..."] \ No newline at end of file diff --git a/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-socket-cli-f39d6-ader-when-server-https-is-enabled-ws-1-chromium-darwin.txt b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-socket-cli-f39d6-ader-when-server-https-is-enabled-ws-1-chromium-darwin.txt new file mode 100644 index 0000000000..0a0948b0be --- /dev/null +++ b/test/e2e-playwright/allowed-hosts-refactored.test.js-snapshots/allowed-hosts-should-disconnect-web-socket-cli-f39d6-ader-when-server-https-is-enabled-ws-1-chromium-darwin.txt @@ -0,0 +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..."] \ No newline at end of file diff --git a/test/e2e-playwright/app-refactored.test.js b/test/e2e-playwright/app-refactored.test.js new file mode 100644 index 0000000000..5e05944bbd --- /dev/null +++ b/test/e2e-playwright/app-refactored.test.js @@ -0,0 +1,109 @@ +"use strict"; + +const path = require("path"); +const webpack = require("webpack"); +const { test } = require("@playwright/test"); +const { expect } = require("@playwright/test"); +const { describe } = require("@playwright/test"); +const { afterEach } = require("@playwright/test"); +const { beforeEach } = require("@playwright/test"); +const Server = require("../../lib/Server"); +const config = require("../fixtures/client-config/webpack.config"); +const port = require("../ports-map").app; + +const staticDirectory = path.resolve( + __dirname, + "../fixtures/static-config/public", +); + +const apps = [ + ["express", () => require("express")()], + ["connect", () => require("connect")()], + ["connect (async)", async () => require("express")()], +]; + +const servers = ["http", "https", "spdy"]; + +describe("app option", () => { + for (const [appName, app] of apps) { + for (const server of servers) { + let compiler; + let devServer; + let pageErrors; + let consoleMessages; + + describe(`should work using "${appName}" application and "${server}" server`, () => { + beforeEach(async () => { + compiler = webpack(config); + + devServer = new Server( + { + static: { + directory: staticDirectory, + watch: false, + }, + app, + server, + port, + }, + compiler, + ); + + await devServer.start(); + + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + await devServer.stop(); + }); + + test("should handle GET request to index route (/)", async ({ + browser, + }) => { + const context = await browser.newContext({ + ignoreHTTPSErrors: true, + }); + const page = await context.newPage(); + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const pageUrl = + server === "https" || server === "spdy" || server === "http2" + ? `https://127.0.0.1:${port}/` + : `http://127.0.0.1:${port}/`; + + const response = await page.goto(pageUrl, { + waitUntil: "networkidle0", + }); + + const HTTPVersion = await page.evaluate( + () => performance.getEntries()[0].nextHopProtocol, + ); + + const isSpdy = server === "spdy"; + + if (isSpdy) { + expect(HTTPVersion).toEqual("h2"); + } else { + expect(HTTPVersion).toEqual("http/1.1"); + } + + expect(JSON.stringify(response.status())).toMatchSnapshot(); + expect(JSON.stringify(await response.text())).toMatchSnapshot(); + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + }); + } + } +}); diff --git a/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-applica-012de--should-handle-GET-request-to-index-route-2-chromium-darwin.txt b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-applica-012de--should-handle-GET-request-to-index-route-2-chromium-darwin.txt new file mode 100644 index 0000000000..ce7f2e5e03 --- /dev/null +++ b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-applica-012de--should-handle-GET-request-to-index-route-2-chromium-darwin.txt @@ -0,0 +1 @@ +"\n\n\n \n \n webpack-dev-server\n \n \n

webpack-dev-server is running...

\n \n \n\n" \ No newline at end of file diff --git a/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-applica-0d883--should-handle-GET-request-to-index-route-1-chromium-darwin.txt b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-applica-0d883--should-handle-GET-request-to-index-route-1-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-applica-0d883--should-handle-GET-request-to-index-route-1-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-applica-4f22c--should-handle-GET-request-to-index-route-3-chromium-darwin.txt b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-applica-4f22c--should-handle-GET-request-to-index-route-3-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-applica-4f22c--should-handle-GET-request-to-index-route-3-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-applica-6805c--should-handle-GET-request-to-index-route-4-chromium-darwin.txt b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-applica-6805c--should-handle-GET-request-to-index-route-4-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-applica-6805c--should-handle-GET-request-to-index-route-4-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-applica-79cda--should-handle-GET-request-to-index-route-4-chromium-darwin.txt b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-applica-79cda--should-handle-GET-request-to-index-route-4-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-applica-79cda--should-handle-GET-request-to-index-route-4-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-applica-8906f--should-handle-GET-request-to-index-route-3-chromium-darwin.txt b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-applica-8906f--should-handle-GET-request-to-index-route-3-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-applica-8906f--should-handle-GET-request-to-index-route-3-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-applica-a386a--should-handle-GET-request-to-index-route-4-chromium-darwin.txt b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-applica-a386a--should-handle-GET-request-to-index-route-4-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-applica-a386a--should-handle-GET-request-to-index-route-4-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-applica-c83f1--should-handle-GET-request-to-index-route-1-chromium-darwin.txt b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-applica-c83f1--should-handle-GET-request-to-index-route-1-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-applica-c83f1--should-handle-GET-request-to-index-route-1-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-applica-dcdcd--should-handle-GET-request-to-index-route-2-chromium-darwin.txt b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-applica-dcdcd--should-handle-GET-request-to-index-route-2-chromium-darwin.txt new file mode 100644 index 0000000000..ce7f2e5e03 --- /dev/null +++ b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-applica-dcdcd--should-handle-GET-request-to-index-route-2-chromium-darwin.txt @@ -0,0 +1 @@ +"\n\n\n \n \n webpack-dev-server\n \n \n

webpack-dev-server is running...

\n \n \n\n" \ No newline at end of file diff --git a/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-applica-dd3de--should-handle-GET-request-to-index-route-1-chromium-darwin.txt b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-applica-dd3de--should-handle-GET-request-to-index-route-1-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-applica-dd3de--should-handle-GET-request-to-index-route-1-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-applica-e634b--should-handle-GET-request-to-index-route-2-chromium-darwin.txt b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-applica-e634b--should-handle-GET-request-to-index-route-2-chromium-darwin.txt new file mode 100644 index 0000000000..ce7f2e5e03 --- /dev/null +++ b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-applica-e634b--should-handle-GET-request-to-index-route-2-chromium-darwin.txt @@ -0,0 +1 @@ +"\n\n\n \n \n webpack-dev-server\n \n \n

webpack-dev-server is running...

\n \n \n\n" \ No newline at end of file diff --git a/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-applica-f8cef--should-handle-GET-request-to-index-route-3-chromium-darwin.txt b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-applica-f8cef--should-handle-GET-request-to-index-route-3-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-applica-f8cef--should-handle-GET-request-to-index-route-3-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-async--36c06--should-handle-GET-request-to-index-route-1-chromium-darwin.txt b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-async--36c06--should-handle-GET-request-to-index-route-1-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-async--36c06--should-handle-GET-request-to-index-route-1-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-async--40ce3--should-handle-GET-request-to-index-route-4-chromium-darwin.txt b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-async--40ce3--should-handle-GET-request-to-index-route-4-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-async--40ce3--should-handle-GET-request-to-index-route-4-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-async--41db5--should-handle-GET-request-to-index-route-3-chromium-darwin.txt b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-async--41db5--should-handle-GET-request-to-index-route-3-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-async--41db5--should-handle-GET-request-to-index-route-3-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-async--50639--should-handle-GET-request-to-index-route-1-chromium-darwin.txt b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-async--50639--should-handle-GET-request-to-index-route-1-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-async--50639--should-handle-GET-request-to-index-route-1-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-async--7b41d--should-handle-GET-request-to-index-route-2-chromium-darwin.txt b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-async--7b41d--should-handle-GET-request-to-index-route-2-chromium-darwin.txt new file mode 100644 index 0000000000..ce7f2e5e03 --- /dev/null +++ b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-async--7b41d--should-handle-GET-request-to-index-route-2-chromium-darwin.txt @@ -0,0 +1 @@ +"\n\n\n \n \n webpack-dev-server\n \n \n

webpack-dev-server is running...

\n \n \n\n" \ No newline at end of file diff --git a/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-async--8507b--should-handle-GET-request-to-index-route-1-chromium-darwin.txt b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-async--8507b--should-handle-GET-request-to-index-route-1-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-async--8507b--should-handle-GET-request-to-index-route-1-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-async--94bbf--should-handle-GET-request-to-index-route-2-chromium-darwin.txt b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-async--94bbf--should-handle-GET-request-to-index-route-2-chromium-darwin.txt new file mode 100644 index 0000000000..ce7f2e5e03 --- /dev/null +++ b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-async--94bbf--should-handle-GET-request-to-index-route-2-chromium-darwin.txt @@ -0,0 +1 @@ +"\n\n\n \n \n webpack-dev-server\n \n \n

webpack-dev-server is running...

\n \n \n\n" \ No newline at end of file diff --git a/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-async--b945e--should-handle-GET-request-to-index-route-2-chromium-darwin.txt b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-async--b945e--should-handle-GET-request-to-index-route-2-chromium-darwin.txt new file mode 100644 index 0000000000..ce7f2e5e03 --- /dev/null +++ b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-async--b945e--should-handle-GET-request-to-index-route-2-chromium-darwin.txt @@ -0,0 +1 @@ +"\n\n\n \n \n webpack-dev-server\n \n \n

webpack-dev-server is running...

\n \n \n\n" \ No newline at end of file diff --git a/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-async--d971b--should-handle-GET-request-to-index-route-3-chromium-darwin.txt b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-async--d971b--should-handle-GET-request-to-index-route-3-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-async--d971b--should-handle-GET-request-to-index-route-3-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-async--e3abf--should-handle-GET-request-to-index-route-3-chromium-darwin.txt b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-async--e3abf--should-handle-GET-request-to-index-route-3-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-async--e3abf--should-handle-GET-request-to-index-route-3-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-async--f1e6a--should-handle-GET-request-to-index-route-4-chromium-darwin.txt b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-async--f1e6a--should-handle-GET-request-to-index-route-4-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-async--f1e6a--should-handle-GET-request-to-index-route-4-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-async--f9274--should-handle-GET-request-to-index-route-4-chromium-darwin.txt b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-async--f9274--should-handle-GET-request-to-index-route-4-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-connect-async--f9274--should-handle-GET-request-to-index-route-4-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-express-applica-15b9d--should-handle-GET-request-to-index-route-3-chromium-darwin.txt b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-express-applica-15b9d--should-handle-GET-request-to-index-route-3-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-express-applica-15b9d--should-handle-GET-request-to-index-route-3-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-express-applica-23b8f--should-handle-GET-request-to-index-route-4-chromium-darwin.txt b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-express-applica-23b8f--should-handle-GET-request-to-index-route-4-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-express-applica-23b8f--should-handle-GET-request-to-index-route-4-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-express-applica-29599--should-handle-GET-request-to-index-route-2-chromium-darwin.txt b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-express-applica-29599--should-handle-GET-request-to-index-route-2-chromium-darwin.txt new file mode 100644 index 0000000000..ce7f2e5e03 --- /dev/null +++ b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-express-applica-29599--should-handle-GET-request-to-index-route-2-chromium-darwin.txt @@ -0,0 +1 @@ +"\n\n\n \n \n webpack-dev-server\n \n \n

webpack-dev-server is running...

\n \n \n\n" \ No newline at end of file diff --git a/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-express-applica-32561--should-handle-GET-request-to-index-route-2-chromium-darwin.txt b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-express-applica-32561--should-handle-GET-request-to-index-route-2-chromium-darwin.txt new file mode 100644 index 0000000000..ce7f2e5e03 --- /dev/null +++ b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-express-applica-32561--should-handle-GET-request-to-index-route-2-chromium-darwin.txt @@ -0,0 +1 @@ +"\n\n\n \n \n webpack-dev-server\n \n \n

webpack-dev-server is running...

\n \n \n\n" \ No newline at end of file diff --git a/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-express-applica-3d358--should-handle-GET-request-to-index-route-4-chromium-darwin.txt b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-express-applica-3d358--should-handle-GET-request-to-index-route-4-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-express-applica-3d358--should-handle-GET-request-to-index-route-4-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-express-applica-41d0e--should-handle-GET-request-to-index-route-1-chromium-darwin.txt b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-express-applica-41d0e--should-handle-GET-request-to-index-route-1-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-express-applica-41d0e--should-handle-GET-request-to-index-route-1-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-express-applica-54fe4--should-handle-GET-request-to-index-route-3-chromium-darwin.txt b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-express-applica-54fe4--should-handle-GET-request-to-index-route-3-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-express-applica-54fe4--should-handle-GET-request-to-index-route-3-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-express-applica-55867--should-handle-GET-request-to-index-route-2-chromium-darwin.txt b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-express-applica-55867--should-handle-GET-request-to-index-route-2-chromium-darwin.txt new file mode 100644 index 0000000000..ce7f2e5e03 --- /dev/null +++ b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-express-applica-55867--should-handle-GET-request-to-index-route-2-chromium-darwin.txt @@ -0,0 +1 @@ +"\n\n\n \n \n webpack-dev-server\n \n \n

webpack-dev-server is running...

\n \n \n\n" \ No newline at end of file diff --git a/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-express-applica-5a6e8--should-handle-GET-request-to-index-route-4-chromium-darwin.txt b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-express-applica-5a6e8--should-handle-GET-request-to-index-route-4-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-express-applica-5a6e8--should-handle-GET-request-to-index-route-4-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-express-applica-6efea--should-handle-GET-request-to-index-route-1-chromium-darwin.txt b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-express-applica-6efea--should-handle-GET-request-to-index-route-1-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-express-applica-6efea--should-handle-GET-request-to-index-route-1-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-express-applica-a1fb3--should-handle-GET-request-to-index-route-1-chromium-darwin.txt b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-express-applica-a1fb3--should-handle-GET-request-to-index-route-1-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-express-applica-a1fb3--should-handle-GET-request-to-index-route-1-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-express-applica-e047c--should-handle-GET-request-to-index-route-3-chromium-darwin.txt b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-express-applica-e047c--should-handle-GET-request-to-index-route-3-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/app.test.js-snapshots/app-option-should-work-using-express-applica-e047c--should-handle-GET-request-to-index-route-3-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/client-reconnect.test.js b/test/e2e-playwright/client-reconnect.test.js new file mode 100644 index 0000000000..2386f922f3 --- /dev/null +++ b/test/e2e-playwright/client-reconnect.test.js @@ -0,0 +1,184 @@ +"use strict"; + +const webpack = require("webpack"); +const { test } = require("@playwright/test"); +const { expect } = require("@playwright/test"); +const { describe } = require("@playwright/test"); +const { beforeEach } = require("@playwright/test"); +const Server = require("../../lib/Server"); +const config = require("../fixtures/simple-config/webpack.config"); +const port = require("../ports-map")["client-reconnect-option"]; + +describe("client.reconnect option", () => { + describe("specified as true", () => { + let compiler; + let server; + let pageErrors; + let consoleMessages; + + beforeEach(async () => { + compiler = webpack(config); + + server = new Server({ port, client: { reconnect: true } }, compiler); + + await server.start(); + + pageErrors = []; + consoleMessages = []; + }); + + test("should try to reconnect unlimited times", async ({ page }) => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://127.0.0.1:${port}/`, { + waitUntil: "networkidle0", + }); + + try { + expect(JSON.stringify(response.status())).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + await server.stop(); + } + + let interval; + + await new Promise((resolve) => { + interval = setInterval(() => { + const retryingMessages = consoleMessages.filter((message) => + message.text().includes("Trying to reconnect..."), + ); + + if (retryingMessages.length >= 5) { + clearInterval(interval); + + resolve(); + } + }, 1000); + }); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + }); + + describe("specified as false", () => { + let compiler; + let server; + let pageErrors; + let consoleMessages; + + beforeEach(async () => { + compiler = webpack(config); + + server = new Server({ port, client: { reconnect: false } }, compiler); + + await server.start(); + + pageErrors = []; + consoleMessages = []; + }); + + test("should not try to reconnect", async ({ page }) => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://127.0.0.1:${port}/`, { + waitUntil: "networkidle0", + }); + + try { + expect(JSON.stringify(response.status())).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + await server.stop(); + } + + // Can't wait to check for unlimited times so wait only for couple retries + await new Promise((resolve) => + setTimeout( + () => { + resolve(); + }, + // eslint-disable-next-line no-restricted-properties + 1000 * Math.pow(2, 3), + ), + ); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + }); + + describe("specified as number", () => { + let compiler; + let server; + let pageErrors; + let consoleMessages; + + beforeEach(async () => { + compiler = webpack(config); + + server = new Server({ port, client: { reconnect: 2 } }, compiler); + + await server.start(); + + pageErrors = []; + consoleMessages = []; + }); + + test("should try to reconnect 2 times", async ({ page }) => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://127.0.0.1:${port}/`, { + waitUntil: "networkidle0", + }); + + try { + expect(JSON.stringify(response.status())).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + await server.stop(); + } + + // Can't wait to check for unlimited times so wait only for couple retries + await new Promise((resolve) => + setTimeout( + () => { + resolve(); + }, + // eslint-disable-next-line no-restricted-properties + 1000 * Math.pow(2, 3), + ), + ); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + }); +}); diff --git a/test/e2e-playwright/client-reconnect.test.js-snapshots/client-reconnect-option-specified-as-false-should-not-try-to-reconnect-1-chromium-darwin.txt b/test/e2e-playwright/client-reconnect.test.js-snapshots/client-reconnect-option-specified-as-false-should-not-try-to-reconnect-1-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/client-reconnect.test.js-snapshots/client-reconnect-option-specified-as-false-should-not-try-to-reconnect-1-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/client-reconnect.test.js-snapshots/client-reconnect-option-specified-as-false-should-not-try-to-reconnect-2-chromium-darwin.txt b/test/e2e-playwright/client-reconnect.test.js-snapshots/client-reconnect-option-specified-as-false-should-not-try-to-reconnect-2-chromium-darwin.txt new file mode 100644 index 0000000000..99a1f90580 --- /dev/null +++ b/test/e2e-playwright/client-reconnect.test.js-snapshots/client-reconnect-option-specified-as-false-should-not-try-to-reconnect-2-chromium-darwin.txt @@ -0,0 +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!"] \ No newline at end of file diff --git a/test/e2e-playwright/client-reconnect.test.js-snapshots/client-reconnect-option-specified-as-false-should-not-try-to-reconnect-3-chromium-darwin.txt b/test/e2e-playwright/client-reconnect.test.js-snapshots/client-reconnect-option-specified-as-false-should-not-try-to-reconnect-3-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/client-reconnect.test.js-snapshots/client-reconnect-option-specified-as-false-should-not-try-to-reconnect-3-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/client-reconnect.test.js-snapshots/client-reconnect-option-specified-as-number-should-try-to-reconnect-2-times-1-chromium-darwin.txt b/test/e2e-playwright/client-reconnect.test.js-snapshots/client-reconnect-option-specified-as-number-should-try-to-reconnect-2-times-1-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/client-reconnect.test.js-snapshots/client-reconnect-option-specified-as-number-should-try-to-reconnect-2-times-1-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/client-reconnect.test.js-snapshots/client-reconnect-option-specified-as-number-should-try-to-reconnect-2-times-2-chromium-darwin.txt b/test/e2e-playwright/client-reconnect.test.js-snapshots/client-reconnect-option-specified-as-number-should-try-to-reconnect-2-times-2-chromium-darwin.txt new file mode 100644 index 0000000000..bb4e2fb530 --- /dev/null +++ b/test/e2e-playwright/client-reconnect.test.js-snapshots/client-reconnect-option-specified-as-number-should-try-to-reconnect-2-times-2-chromium-darwin.txt @@ -0,0 +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...","WebSocket connection to 'ws://127.0.0.1:8163/ws' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED","[webpack-dev-server] Event","[webpack-dev-server] Trying to reconnect...","WebSocket connection to 'ws://127.0.0.1:8163/ws' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED","[webpack-dev-server] Event"] \ No newline at end of file diff --git a/test/e2e-playwright/client-reconnect.test.js-snapshots/client-reconnect-option-specified-as-number-should-try-to-reconnect-2-times-3-chromium-darwin.txt b/test/e2e-playwright/client-reconnect.test.js-snapshots/client-reconnect-option-specified-as-number-should-try-to-reconnect-2-times-3-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/client-reconnect.test.js-snapshots/client-reconnect-option-specified-as-number-should-try-to-reconnect-2-times-3-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/client-reconnect.test.js-snapshots/client-reconnect-option-specified-as-true-should-try-to-reconnect-unlimited-times-1-chromium-darwin.txt b/test/e2e-playwright/client-reconnect.test.js-snapshots/client-reconnect-option-specified-as-true-should-try-to-reconnect-unlimited-times-1-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/client-reconnect.test.js-snapshots/client-reconnect-option-specified-as-true-should-try-to-reconnect-unlimited-times-1-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/client-reconnect.test.js-snapshots/client-reconnect-option-specified-as-true-should-try-to-reconnect-unlimited-times-2-chromium-darwin.txt b/test/e2e-playwright/client-reconnect.test.js-snapshots/client-reconnect-option-specified-as-true-should-try-to-reconnect-unlimited-times-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/client-reconnect.test.js-snapshots/client-reconnect-option-specified-as-true-should-try-to-reconnect-unlimited-times-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/client-refactored.test.js b/test/e2e-playwright/client-refactored.test.js new file mode 100644 index 0000000000..cb717a4497 --- /dev/null +++ b/test/e2e-playwright/client-refactored.test.js @@ -0,0 +1,277 @@ +"use strict"; + +const webpack = require("webpack"); +const { test } = require("@playwright/test"); +const { expect } = require("@playwright/test"); +const { describe } = require("@playwright/test"); +const { afterEach } = require("@playwright/test"); +const { beforeEach } = require("@playwright/test"); +const Server = require("../../lib/Server"); +const config = require("../fixtures/simple-config-other/webpack.config"); +const port = require("../ports-map")["client-option"]; + +describe("client option", () => { + describe("default behaviour", () => { + let compiler; + let server; + let pageErrors; + let consoleMessages; + + beforeEach(async () => { + compiler = webpack(config); + + server = new Server( + { + client: { + webSocketTransport: "sockjs", + }, + webSocketServer: "sockjs", + port, + }, + compiler, + ); + + await server.start(); + + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + await server.stop(); + }); + + test("responds with a 200 status code for /ws path", async ({ page }) => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://127.0.0.1:${port}/ws`, { + waitUntil: "networkidle0", + }); + + // overlay should be true by default + expect(server.options.client.overlay).toBe(true); + + expect(JSON.stringify(response.status())).toMatchSnapshot(); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + }); + + describe("should respect path option", () => { + let compiler; + let server; + let pageErrors; + let consoleMessages; + + beforeEach(async () => { + compiler = webpack(config); + + server = new Server( + { + client: { + webSocketTransport: "sockjs", + }, + webSocketServer: { + type: "sockjs", + options: { + host: "localhost", + port, + path: "/foo/test/bar", + }, + }, + port, + }, + compiler, + ); + + await server.start(); + + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + await server.stop(); + }); + + test("responds with a 200 status code for /foo/test/bar path", async ({ + page, + }) => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto( + `http://127.0.0.1:${port}/foo/test/bar`, + { + waitUntil: "networkidle0", + }, + ); + + expect(JSON.stringify(response.status())).toMatchSnapshot(); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + }); + + describe("configure client entry", () => { + let compiler; + let server; + let pageErrors; + let consoleMessages; + + beforeEach(async () => { + compiler = webpack(config); + + server = new Server( + { + client: false, + port, + }, + compiler, + ); + + await server.start(); + + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + await server.stop(); + }); + + test("should disable client entry", async ({ page }) => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://127.0.0.1:${port}/main.js`, { + waitUntil: "networkidle0", + }); + + expect(JSON.stringify(response.status())).toMatchSnapshot(); + + expect(await response.text()).not.toMatch(/client\/index\.js/); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + }); + + describe("webSocketTransport", () => { + const clientModes = [ + { + title: 'as a string ("sockjs")', + client: { + webSocketTransport: "sockjs", + }, + webSocketServer: "sockjs", + shouldThrow: false, + }, + { + title: 'as a string ("ws")', + client: { + webSocketTransport: "ws", + }, + 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: { + webSocketTransport: require.resolve( + "../../client-src/clients/WebSocketClient", + ), + }, + 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: { + webSocketTransport: "/bad/path/to/implementation", + }, + webSocketServer: "ws", + shouldThrow: true, + }, + ]; + + describe("passed to server", () => { + clientModes.forEach((data) => { + test(`${data.title} ${ + data.shouldThrow ? "should throw" : "should not throw" + }`, async () => { + const compiler = webpack(config); + + const server = new Server( + { + client: data.client, + port, + }, + compiler, + ); + + let thrownError; + + try { + await server.start(); + } catch (error) { + thrownError = error; + } + + if (data.shouldThrow) { + expect(thrownError.message).toMatch( + /client\.webSocketTransport must be a string/, + ); + } + + await server.stop(); + }); + }); + }); + }); +}); diff --git a/test/e2e-playwright/client.test.js-snapshots/client-option-configure-client-entry-should-disable-client-entry-1-chromium-darwin.txt b/test/e2e-playwright/client.test.js-snapshots/client-option-configure-client-entry-should-disable-client-entry-1-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/client.test.js-snapshots/client-option-configure-client-entry-should-disable-client-entry-1-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/client.test.js-snapshots/client-option-configure-client-entry-should-disable-client-entry-2-chromium-darwin.txt b/test/e2e-playwright/client.test.js-snapshots/client-option-configure-client-entry-should-disable-client-entry-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/client.test.js-snapshots/client-option-configure-client-entry-should-disable-client-entry-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/client.test.js-snapshots/client-option-configure-client-entry-should-disable-client-entry-3-chromium-darwin.txt b/test/e2e-playwright/client.test.js-snapshots/client-option-configure-client-entry-should-disable-client-entry-3-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/client.test.js-snapshots/client-option-configure-client-entry-should-disable-client-entry-3-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/client.test.js-snapshots/client-option-default-behaviour-responds-with-a-200-status-code-for-ws-path-1-chromium-darwin.txt b/test/e2e-playwright/client.test.js-snapshots/client-option-default-behaviour-responds-with-a-200-status-code-for-ws-path-1-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/client.test.js-snapshots/client-option-default-behaviour-responds-with-a-200-status-code-for-ws-path-1-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/client.test.js-snapshots/client-option-default-behaviour-responds-with-a-200-status-code-for-ws-path-2-chromium-darwin.txt b/test/e2e-playwright/client.test.js-snapshots/client-option-default-behaviour-responds-with-a-200-status-code-for-ws-path-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/client.test.js-snapshots/client-option-default-behaviour-responds-with-a-200-status-code-for-ws-path-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/client.test.js-snapshots/client-option-default-behaviour-responds-with-a-200-status-code-for-ws-path-3-chromium-darwin.txt b/test/e2e-playwright/client.test.js-snapshots/client-option-default-behaviour-responds-with-a-200-status-code-for-ws-path-3-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/client.test.js-snapshots/client-option-default-behaviour-responds-with-a-200-status-code-for-ws-path-3-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/client.test.js-snapshots/client-option-should-respect-path-option-responds-with-a-200-status-code-for-foo-test-bar-path-1-chromium-darwin.txt b/test/e2e-playwright/client.test.js-snapshots/client-option-should-respect-path-option-responds-with-a-200-status-code-for-foo-test-bar-path-1-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/client.test.js-snapshots/client-option-should-respect-path-option-responds-with-a-200-status-code-for-foo-test-bar-path-1-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/client.test.js-snapshots/client-option-should-respect-path-option-responds-with-a-200-status-code-for-foo-test-bar-path-2-chromium-darwin.txt b/test/e2e-playwright/client.test.js-snapshots/client-option-should-respect-path-option-responds-with-a-200-status-code-for-foo-test-bar-path-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/client.test.js-snapshots/client-option-should-respect-path-option-responds-with-a-200-status-code-for-foo-test-bar-path-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/client.test.js-snapshots/client-option-should-respect-path-option-responds-with-a-200-status-code-for-foo-test-bar-path-3-chromium-darwin.txt b/test/e2e-playwright/client.test.js-snapshots/client-option-should-respect-path-option-responds-with-a-200-status-code-for-foo-test-bar-path-3-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/client.test.js-snapshots/client-option-should-respect-path-option-responds-with-a-200-status-code-for-foo-test-bar-path-3-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/entry.test.js b/test/e2e-playwright/entry.test.js new file mode 100644 index 0000000000..3181493d68 --- /dev/null +++ b/test/e2e-playwright/entry.test.js @@ -0,0 +1,410 @@ +"use strict"; + +const path = require("path"); +const webpack = require("webpack"); +const { test } = require("@playwright/test"); +const { expect } = require("@playwright/test"); +const { describe } = require("@playwright/test"); +const Server = require("../../lib/Server"); +const config = require("../fixtures/client-config/webpack.config"); +const port = require("../ports-map").entry; + +const HOT_ENABLED_MESSAGE = + "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled."; + +const waitForConsoleLogFinished = async (consoleLogs) => { + await new Promise((resolve) => { + const interval = setInterval(() => { + if (consoleLogs.includes(HOT_ENABLED_MESSAGE)) { + clearInterval(interval); + + resolve(); + } + }, 100); + }); +}; + +describe("entry", () => { + const entryFirst = path.resolve( + __dirname, + "../fixtures/client-config/foo.js", + ); + const entrySecond = path.resolve( + __dirname, + "../fixtures/client-config/bar.js", + ); + + test("should work with single entry", async ({ page }) => { + const compiler = webpack({ ...config, entry: entryFirst }); + const devServerOptions = { + port, + }; + const server = new Server(devServerOptions, compiler); + + await server.start(); + + try { + const pageErrors = []; + const consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://127.0.0.1:${port}/`, { + waitUntil: "networkidle0", + }); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + await server.stop(); + } + }); + + test("should work with single array entry", async ({ page }) => { + const compiler = webpack({ ...config, entry: [entryFirst, entrySecond] }); + const devServerOptions = { + port, + }; + const server = new Server(devServerOptions, compiler); + + await server.start(); + + try { + const pageErrors = []; + const consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://127.0.0.1:${port}/`, { + waitUntil: "networkidle0", + }); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + await server.stop(); + } + }); + + test("should work with object entry", async ({ page }) => { + const compiler = webpack({ + ...config, + entry: { + main: { import: entryFirst }, + }, + }); + const devServerOptions = { + port, + }; + const server = new Server(devServerOptions, compiler); + + await server.start(); + + try { + const pageErrors = []; + const consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://127.0.0.1:${port}/`, { + waitUntil: "networkidle0", + }); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + await server.stop(); + } + }); + + test("should work with dynamic entry", async ({ page }) => { + const compiler = webpack({ ...config, entry: () => entryFirst }); + const devServerOptions = { + port, + }; + const server = new Server(devServerOptions, compiler); + + await server.start(); + + try { + const pageErrors = []; + const consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://127.0.0.1:${port}/`, { + waitUntil: "networkidle0", + }); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + await server.stop(); + } + }); + + test("should work with dynamic async entry", async ({ page }) => { + const compiler = webpack({ + ...config, + entry: () => new Promise((resolve) => resolve([entryFirst])), + }); + const devServerOptions = { + port, + }; + const server = new Server(devServerOptions, compiler); + + await server.start(); + + try { + const pageErrors = []; + const consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://127.0.0.1:${port}/`, { + waitUntil: "networkidle0", + }); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + await server.stop(); + } + }); + + test("should work with multiple entries", async ({ page }) => { + const compiler = webpack({ + ...config, + entry: { + foo: entryFirst, + bar: entrySecond, + }, + optimization: { + runtimeChunk: { + name: "runtime", + }, + }, + }); + const devServerOptions = { + port, + }; + const server = new Server(devServerOptions, compiler); + + await server.start(); + + try { + const pageErrors = []; + const consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message.text()); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://127.0.0.1:${port}/test.html`, { + waitUntil: "networkidle0", + }); + await page.addScriptTag({ url: `http://127.0.0.1:${port}/runtime.js` }); + await page.addScriptTag({ url: `http://127.0.0.1:${port}/foo.js` }); + await waitForConsoleLogFinished(consoleMessages); + + expect(JSON.stringify(consoleMessages)).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + await server.stop(); + } + }); + + test("should work with multiple entries #2", async ({ page }) => { + const compiler = webpack({ + ...config, + entry: { + foo: entryFirst, + bar: entrySecond, + }, + optimization: { + runtimeChunk: { + name: "runtime", + }, + }, + }); + const devServerOptions = { + port, + }; + const server = new Server(devServerOptions, compiler); + + await server.start(); + + try { + const pageErrors = []; + const consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message.text()); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://127.0.0.1:${port}/test.html`, { + waitUntil: "networkidle0", + }); + await page.addScriptTag({ url: `http://127.0.0.1:${port}/runtime.js` }); + await page.addScriptTag({ url: `http://127.0.0.1:${port}/bar.js` }); + await waitForConsoleLogFinished(consoleMessages); + + expect(JSON.stringify(consoleMessages)).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + await server.stop(); + } + }); + + test('should work with multiple entries and "dependOn"', async ({ page }) => { + const compiler = webpack({ + ...config, + entry: { + foo: { + import: entryFirst, + dependOn: "bar", + }, + bar: entrySecond, + }, + }); + const devServerOptions = { + port, + }; + const server = new Server(devServerOptions, compiler); + + await server.start(); + + try { + const pageErrors = []; + const consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message.text()); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://127.0.0.1:${port}/test.html`, { + waitUntil: "networkidle0", + }); + await page.addScriptTag({ url: `http://127.0.0.1:${port}/bar.js` }); + await page.addScriptTag({ url: `http://127.0.0.1:${port}/foo.js` }); + await waitForConsoleLogFinished(consoleMessages); + + expect(JSON.stringify(consoleMessages)).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + await server.stop(); + } + }); + + test("should work with empty", async ({ page }) => { + const compiler = webpack({ + ...config, + entry: {}, + }); + + new webpack.EntryPlugin(compiler.context, entryFirst, { + name: "main", + }).apply(compiler); + + const devServerOptions = { + port, + }; + const server = new Server(devServerOptions, compiler); + + await server.start(); + + try { + const pageErrors = []; + const consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://127.0.0.1:${port}/`, { + waitUntil: "networkidle0", + }); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + await server.stop(); + } + }); +}); diff --git a/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-dynamic-async-entry-1-chromium-darwin.txt b/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-dynamic-async-entry-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-dynamic-async-entry-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-dynamic-async-entry-2-chromium-darwin.txt b/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-dynamic-async-entry-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-dynamic-async-entry-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-dynamic-entry-1-chromium-darwin.txt b/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-dynamic-entry-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-dynamic-entry-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-dynamic-entry-2-chromium-darwin.txt b/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-dynamic-entry-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-dynamic-entry-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-empty-1-chromium-darwin.txt b/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-empty-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-empty-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-empty-2-chromium-darwin.txt b/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-empty-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-empty-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-multiple-entries-1-chromium-darwin.txt b/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-multiple-entries-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-multiple-entries-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-multiple-entries-2-1-chromium-darwin.txt b/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-multiple-entries-2-1-chromium-darwin.txt new file mode 100644 index 0000000000..f0ba52db49 --- /dev/null +++ b/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-multiple-entries-2-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-multiple-entries-2-2-chromium-darwin.txt b/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-multiple-entries-2-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-multiple-entries-2-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-multiple-entries-2-chromium-darwin.txt b/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-multiple-entries-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-multiple-entries-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-multiple-entries-and-dependOn-1-chromium-darwin.txt b/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-multiple-entries-and-dependOn-1-chromium-darwin.txt new file mode 100644 index 0000000000..67438601ac --- /dev/null +++ b/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-multiple-entries-and-dependOn-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-multiple-entries-and-dependOn-2-chromium-darwin.txt b/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-multiple-entries-and-dependOn-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-multiple-entries-and-dependOn-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-object-entry-1-chromium-darwin.txt b/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-object-entry-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-object-entry-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-object-entry-2-chromium-darwin.txt b/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-object-entry-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-object-entry-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-single-array-entry-1-chromium-darwin.txt b/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-single-array-entry-1-chromium-darwin.txt new file mode 100644 index 0000000000..074f192903 --- /dev/null +++ b/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-single-array-entry-1-chromium-darwin.txt @@ -0,0 +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.","Bar."] \ No newline at end of file diff --git a/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-single-array-entry-2-chromium-darwin.txt b/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-single-array-entry-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-single-array-entry-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-single-entry-1-chromium-darwin.txt b/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-single-entry-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-single-entry-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-single-entry-2-chromium-darwin.txt b/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-single-entry-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/entry.test.js-snapshots/entry-should-work-with-single-entry-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/headers.test.js b/test/e2e-playwright/headers.test.js new file mode 100644 index 0000000000..dd78d58dcc --- /dev/null +++ b/test/e2e-playwright/headers.test.js @@ -0,0 +1,415 @@ +"use strict"; + +const webpack = require("webpack"); +const request = require("supertest"); +const { test } = require("@playwright/test"); +const { expect } = require("@playwright/test"); +const { describe } = require("@playwright/test"); +const { afterEach } = require("@playwright/test"); +const { beforeEach } = require("@playwright/test"); +const Server = require("../../lib/Server"); +const config = require("../fixtures/simple-config/webpack.config"); +const port = require("../ports-map")["headers-option"]; + +describe("headers option", () => { + describe("as a string", () => { + let compiler; + let server; + let pageErrors; + let consoleMessages; + + beforeEach(async () => { + compiler = webpack(config); + + server = new Server( + { + headers: { "X-Foo": "dev-server headers" }, + port, + }, + compiler, + ); + + await server.start(); + + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + await server.stop(); + }); + + test("should handle GET request with headers", async ({ page }) => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://127.0.0.1:${port}/`, { + waitUntil: "networkidle0", + }); + + expect(JSON.stringify(response.headers()["x-foo"])).toMatchSnapshot(); + + expect(JSON.stringify(response.status())).toMatchSnapshot(); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + }); + + describe("as an array of objects", () => { + let compiler; + let server; + let pageErrors; + let consoleMessages; + + beforeEach(async () => { + compiler = webpack(config); + + server = new Server( + { + headers: [ + { + key: "X-Foo", + value: "value1", + }, + { + key: "X-Bar", + value: "value2", + }, + ], + port, + }, + compiler, + ); + + await server.start(); + + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + await server.stop(); + }); + + test("should handle GET request with headers", async ({ page }) => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://127.0.0.1:${port}/`, { + waitUntil: "networkidle0", + }); + + expect(JSON.stringify(response.headers()["x-foo"])).toMatchSnapshot(); + + expect(JSON.stringify(response.headers()["x-bar"])).toMatchSnapshot(); + + expect(JSON.stringify(response.status())).toMatchSnapshot(); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + }); + + describe("as an array", () => { + let compiler; + let server; + let pageErrors; + let consoleMessages; + + beforeEach(async () => { + compiler = webpack(config); + + server = new Server( + { + headers: { "X-Bar": ["key1=value1", "key2=value2"] }, + port, + }, + compiler, + ); + + await server.start(); + + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + await server.stop(); + }); + + test("should handle GET request with headers as an array", async ({ + page, + }) => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://127.0.0.1:${port}/`, { + waitUntil: "networkidle0", + }); + + expect(JSON.stringify(response.headers()["x-bar"])).toMatchSnapshot(); + + expect(JSON.stringify(response.status())).toMatchSnapshot(); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + }); + + describe("as a function", () => { + let compiler; + let server; + let pageErrors; + let consoleMessages; + + beforeEach(async () => { + compiler = webpack(config); + + server = new Server( + { + headers: () => { + return { "X-Bar": ["key1=value1", "key2=value2"] }; + }, + port, + }, + compiler, + ); + + await server.start(); + + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + await server.stop(); + }); + + test("should handle GET request with headers as a function", async ({ + page, + }) => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://127.0.0.1:${port}/`, { + waitUntil: "networkidle0", + }); + + expect(JSON.stringify(response.headers()["x-bar"])).toMatchSnapshot(); + + expect(JSON.stringify(response.status())).toMatchSnapshot(); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + }); + + describe("as a function returning an array", () => { + let compiler; + let server; + let pageErrors; + let consoleMessages; + + beforeEach(async () => { + compiler = webpack(config); + + server = new Server( + { + headers: () => [ + { + key: "X-Foo", + value: "value1", + }, + { + key: "X-Bar", + value: "value2", + }, + ], + port, + }, + compiler, + ); + + await server.start(); + + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + await server.stop(); + }); + + test("should handle GET request with headers", async ({ page }) => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://127.0.0.1:${port}/`, { + waitUntil: "networkidle0", + }); + + expect(JSON.stringify(response.headers()["x-foo"])).toMatchSnapshot(); + + expect(JSON.stringify(response.headers()["x-bar"])).toMatchSnapshot(); + + expect(JSON.stringify(response.status())).toMatchSnapshot(); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + }); + + describe("dev middleware headers take precedence for dev middleware output files", () => { + let compiler; + let server; + let pageErrors; + let consoleMessages; + + beforeEach(async () => { + compiler = webpack(config); + + server = new Server( + { + headers: { "X-Foo": "dev-server-headers" }, + devMiddleware: { + headers: { "X-Foo": "dev-middleware-headers" }, + }, + port, + }, + compiler, + ); + + await server.start(); + + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + await server.stop(); + }); + + test("should handle GET request with headers as a function", async ({ + page, + }) => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://127.0.0.1:${port}/`, { + waitUntil: "networkidle0", + }); + + expect(JSON.stringify(response.headers()["x-foo"])).toMatchSnapshot(); + + expect(JSON.stringify(response.status())).toMatchSnapshot(); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + }); + + describe("as a string and support HEAD request", () => { + let compiler; + let server; + let pageErrors; + let consoleMessages; + let req; + + beforeEach(async () => { + compiler = webpack(config); + + server = new Server( + { + headers: { "X-Foo": "dev-server headers" }, + port, + }, + compiler, + ); + + await server.start(); + + req = request(server.app); + + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + await server.stop(); + }); + + test("should handle HEAD request with headers", async ({ page }) => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://127.0.0.1:${port}/`, { + waitUntil: "networkidle0", + }); + + expect(JSON.stringify(response.headers()["x-foo"])).toMatchSnapshot(); + expect(JSON.stringify(response.status())).toMatchSnapshot(); + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + + const responseForHead = await req.get(`/`); + + expect(responseForHead.headers["x-foo"]).toBe("dev-server headers"); + }); + }); +}); diff --git a/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-function-returning-an-array-should-handle-GET-request-with-headers-1-chromium-darwin.txt b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-function-returning-an-array-should-handle-GET-request-with-headers-1-chromium-darwin.txt new file mode 100644 index 0000000000..bb6d02503c --- /dev/null +++ b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-function-returning-an-array-should-handle-GET-request-with-headers-1-chromium-darwin.txt @@ -0,0 +1 @@ +"value1" \ No newline at end of file diff --git a/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-function-returning-an-array-should-handle-GET-request-with-headers-2-chromium-darwin.txt b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-function-returning-an-array-should-handle-GET-request-with-headers-2-chromium-darwin.txt new file mode 100644 index 0000000000..87e54a02ca --- /dev/null +++ b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-function-returning-an-array-should-handle-GET-request-with-headers-2-chromium-darwin.txt @@ -0,0 +1 @@ +"value2" \ No newline at end of file diff --git a/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-function-returning-an-array-should-handle-GET-request-with-headers-3-chromium-darwin.txt b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-function-returning-an-array-should-handle-GET-request-with-headers-3-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-function-returning-an-array-should-handle-GET-request-with-headers-3-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-function-returning-an-array-should-handle-GET-request-with-headers-4-chromium-darwin.txt b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-function-returning-an-array-should-handle-GET-request-with-headers-4-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-function-returning-an-array-should-handle-GET-request-with-headers-4-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-function-returning-an-array-should-handle-GET-request-with-headers-5-chromium-darwin.txt b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-function-returning-an-array-should-handle-GET-request-with-headers-5-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-function-returning-an-array-should-handle-GET-request-with-headers-5-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-function-should-handle-GET-request-with-headers-as-a-function-1-chromium-darwin.txt b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-function-should-handle-GET-request-with-headers-as-a-function-1-chromium-darwin.txt new file mode 100644 index 0000000000..be2c7c77c2 --- /dev/null +++ b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-function-should-handle-GET-request-with-headers-as-a-function-1-chromium-darwin.txt @@ -0,0 +1 @@ +"key1=value1\nkey2=value2" \ No newline at end of file diff --git a/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-function-should-handle-GET-request-with-headers-as-a-function-2-chromium-darwin.txt b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-function-should-handle-GET-request-with-headers-as-a-function-2-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-function-should-handle-GET-request-with-headers-as-a-function-2-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-function-should-handle-GET-request-with-headers-as-a-function-3-chromium-darwin.txt b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-function-should-handle-GET-request-with-headers-as-a-function-3-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-function-should-handle-GET-request-with-headers-as-a-function-3-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-function-should-handle-GET-request-with-headers-as-a-function-4-chromium-darwin.txt b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-function-should-handle-GET-request-with-headers-as-a-function-4-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-function-should-handle-GET-request-with-headers-as-a-function-4-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-string-and-support-HEAD-request-should-handle-HEAD-request-with-headers-1-chromium-darwin.txt b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-string-and-support-HEAD-request-should-handle-HEAD-request-with-headers-1-chromium-darwin.txt new file mode 100644 index 0000000000..0977e83f03 --- /dev/null +++ b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-string-and-support-HEAD-request-should-handle-HEAD-request-with-headers-1-chromium-darwin.txt @@ -0,0 +1 @@ +"dev-server headers" \ No newline at end of file diff --git a/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-string-and-support-HEAD-request-should-handle-HEAD-request-with-headers-2-chromium-darwin.txt b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-string-and-support-HEAD-request-should-handle-HEAD-request-with-headers-2-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-string-and-support-HEAD-request-should-handle-HEAD-request-with-headers-2-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-string-and-support-HEAD-request-should-handle-HEAD-request-with-headers-3-chromium-darwin.txt b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-string-and-support-HEAD-request-should-handle-HEAD-request-with-headers-3-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-string-and-support-HEAD-request-should-handle-HEAD-request-with-headers-3-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-string-and-support-HEAD-request-should-handle-HEAD-request-with-headers-4-chromium-darwin.txt b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-string-and-support-HEAD-request-should-handle-HEAD-request-with-headers-4-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-string-and-support-HEAD-request-should-handle-HEAD-request-with-headers-4-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-string-should-handle-GET-request-with-headers-1-chromium-darwin.txt b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-string-should-handle-GET-request-with-headers-1-chromium-darwin.txt new file mode 100644 index 0000000000..0977e83f03 --- /dev/null +++ b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-string-should-handle-GET-request-with-headers-1-chromium-darwin.txt @@ -0,0 +1 @@ +"dev-server headers" \ No newline at end of file diff --git a/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-string-should-handle-GET-request-with-headers-2-chromium-darwin.txt b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-string-should-handle-GET-request-with-headers-2-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-string-should-handle-GET-request-with-headers-2-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-string-should-handle-GET-request-with-headers-3-chromium-darwin.txt b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-string-should-handle-GET-request-with-headers-3-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-string-should-handle-GET-request-with-headers-3-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-string-should-handle-GET-request-with-headers-4-chromium-darwin.txt b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-string-should-handle-GET-request-with-headers-4-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-a-string-should-handle-GET-request-with-headers-4-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-an-array-of-objects-should-handle-GET-request-with-headers-1-chromium-darwin.txt b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-an-array-of-objects-should-handle-GET-request-with-headers-1-chromium-darwin.txt new file mode 100644 index 0000000000..bb6d02503c --- /dev/null +++ b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-an-array-of-objects-should-handle-GET-request-with-headers-1-chromium-darwin.txt @@ -0,0 +1 @@ +"value1" \ No newline at end of file diff --git a/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-an-array-of-objects-should-handle-GET-request-with-headers-2-chromium-darwin.txt b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-an-array-of-objects-should-handle-GET-request-with-headers-2-chromium-darwin.txt new file mode 100644 index 0000000000..87e54a02ca --- /dev/null +++ b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-an-array-of-objects-should-handle-GET-request-with-headers-2-chromium-darwin.txt @@ -0,0 +1 @@ +"value2" \ No newline at end of file diff --git a/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-an-array-of-objects-should-handle-GET-request-with-headers-3-chromium-darwin.txt b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-an-array-of-objects-should-handle-GET-request-with-headers-3-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-an-array-of-objects-should-handle-GET-request-with-headers-3-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-an-array-of-objects-should-handle-GET-request-with-headers-4-chromium-darwin.txt b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-an-array-of-objects-should-handle-GET-request-with-headers-4-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-an-array-of-objects-should-handle-GET-request-with-headers-4-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-an-array-of-objects-should-handle-GET-request-with-headers-5-chromium-darwin.txt b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-an-array-of-objects-should-handle-GET-request-with-headers-5-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-an-array-of-objects-should-handle-GET-request-with-headers-5-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-an-array-should-handle-GET-request-with-headers-as-an-array-1-chromium-darwin.txt b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-an-array-should-handle-GET-request-with-headers-as-an-array-1-chromium-darwin.txt new file mode 100644 index 0000000000..be2c7c77c2 --- /dev/null +++ b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-an-array-should-handle-GET-request-with-headers-as-an-array-1-chromium-darwin.txt @@ -0,0 +1 @@ +"key1=value1\nkey2=value2" \ No newline at end of file diff --git a/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-an-array-should-handle-GET-request-with-headers-as-an-array-2-chromium-darwin.txt b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-an-array-should-handle-GET-request-with-headers-as-an-array-2-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-an-array-should-handle-GET-request-with-headers-as-an-array-2-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-an-array-should-handle-GET-request-with-headers-as-an-array-3-chromium-darwin.txt b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-an-array-should-handle-GET-request-with-headers-as-an-array-3-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-an-array-should-handle-GET-request-with-headers-as-an-array-3-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-an-array-should-handle-GET-request-with-headers-as-an-array-4-chromium-darwin.txt b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-an-array-should-handle-GET-request-with-headers-as-an-array-4-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/headers.test.js-snapshots/headers-option-as-an-array-should-handle-GET-request-with-headers-as-an-array-4-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/headers.test.js-snapshots/headers-option-dev-middleware-headers-take-pre-4edb4-handle-GET-request-with-headers-as-a-function-3-chromium-darwin.txt b/test/e2e-playwright/headers.test.js-snapshots/headers-option-dev-middleware-headers-take-pre-4edb4-handle-GET-request-with-headers-as-a-function-3-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/headers.test.js-snapshots/headers-option-dev-middleware-headers-take-pre-4edb4-handle-GET-request-with-headers-as-a-function-3-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/headers.test.js-snapshots/headers-option-dev-middleware-headers-take-pre-73e65-handle-GET-request-with-headers-as-a-function-1-chromium-darwin.txt b/test/e2e-playwright/headers.test.js-snapshots/headers-option-dev-middleware-headers-take-pre-73e65-handle-GET-request-with-headers-as-a-function-1-chromium-darwin.txt new file mode 100644 index 0000000000..0a12d4751a --- /dev/null +++ b/test/e2e-playwright/headers.test.js-snapshots/headers-option-dev-middleware-headers-take-pre-73e65-handle-GET-request-with-headers-as-a-function-1-chromium-darwin.txt @@ -0,0 +1 @@ +"dev-middleware-headers" \ No newline at end of file diff --git a/test/e2e-playwright/headers.test.js-snapshots/headers-option-dev-middleware-headers-take-pre-a6a61-handle-GET-request-with-headers-as-a-function-4-chromium-darwin.txt b/test/e2e-playwright/headers.test.js-snapshots/headers-option-dev-middleware-headers-take-pre-a6a61-handle-GET-request-with-headers-as-a-function-4-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/headers.test.js-snapshots/headers-option-dev-middleware-headers-take-pre-a6a61-handle-GET-request-with-headers-as-a-function-4-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/headers.test.js-snapshots/headers-option-dev-middleware-headers-take-pre-d1916-handle-GET-request-with-headers-as-a-function-2-chromium-darwin.txt b/test/e2e-playwright/headers.test.js-snapshots/headers-option-dev-middleware-headers-take-pre-d1916-handle-GET-request-with-headers-as-a-function-2-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/headers.test.js-snapshots/headers-option-dev-middleware-headers-take-pre-d1916-handle-GET-request-with-headers-as-a-function-2-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js b/test/e2e-playwright/history-api-fallback.test.js new file mode 100644 index 0000000000..ed686f451a --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js @@ -0,0 +1,659 @@ +"use strict"; + +const path = require("path"); +const webpack = require("webpack"); +const { test } = require("@playwright/test"); +const { expect } = require("@playwright/test"); +const { describe } = require("@playwright/test"); +const { afterEach } = require("@playwright/test"); +const { beforeEach } = require("@playwright/test"); +const jestMock = require("jest-mock"); +const Server = require("../../lib/Server"); +const config = require("../fixtures/historyapifallback-config/webpack.config"); +const config2 = require("../fixtures/historyapifallback-2-config/webpack.config"); +const config3 = require("../fixtures/historyapifallback-3-config/webpack.config"); +const port = require("../ports-map")["history-api-fallback-option"]; + +describe("historyApiFallback option", () => { + describe("as boolean", () => { + let compiler; + let server; + let pageErrors; + let consoleMessages; + + beforeEach(async () => { + compiler = webpack(config); + + server = new Server( + { + historyApiFallback: true, + port, + }, + compiler, + ); + + await server.start(); + + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + await server.stop(); + }); + + test("should handle GET request to directory", async ({ page }) => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://127.0.0.1:${port}/foo`, { + waitUntil: "networkidle0", + }); + + expect( + JSON.stringify(response.headers()["content-type"]), + ).toMatchSnapshot(); + + expect(JSON.stringify(response.status())).toMatchSnapshot(); + + expect(JSON.stringify(await response.text())).toMatchSnapshot(); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + }); + + describe("as object", () => { + let compiler; + let server; + let pageErrors; + let consoleMessages; + + beforeEach(async () => { + compiler = webpack(config); + + server = new Server( + { + historyApiFallback: { + index: "/bar.html", + }, + port, + }, + compiler, + ); + + await server.start(); + + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + await server.stop(); + }); + + test("should handle GET request to directory", async ({ page }) => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://127.0.0.1:${port}/foo`, { + waitUntil: "networkidle0", + }); + + expect( + JSON.stringify(response.headers()["content-type"]), + ).toMatchSnapshot(); + + expect(JSON.stringify(response.status())).toMatchSnapshot(); + + expect(JSON.stringify(await response.text())).toMatchSnapshot(); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + }); + + describe("as object with static", () => { + let compiler; + let server; + let pageErrors; + let consoleMessages; + + beforeEach(async () => { + compiler = webpack(config2); + + server = new Server( + { + static: path.resolve( + __dirname, + "../fixtures/historyapifallback-2-config", + ), + historyApiFallback: { + index: "/bar.html", + }, + port, + }, + compiler, + ); + + await server.start(); + + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + await server.stop(); + }); + + test("should handle GET request to directory", async ({ page }) => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://127.0.0.1:${port}/foo`, { + waitUntil: "networkidle0", + }); + + expect( + JSON.stringify(response.headers()["content-type"]), + ).toMatchSnapshot(); + + expect(JSON.stringify(response.status())).toMatchSnapshot(); + + expect(JSON.stringify(await response.text())).toMatchSnapshot(); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + + test("should prefer static file over historyApiFallback", async ({ + page, + }) => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto( + `http://127.0.0.1:${port}/random-file.txt`, + { + // in Playwright, it has changed from networkidle2 to networkidle + waitUntil: "networkidle", + }, + ); + + expect( + JSON.stringify(response.headers()["content-type"]), + ).toMatchSnapshot(); + + expect(JSON.stringify(response.status())).toMatchSnapshot(); + + expect(JSON.stringify(await response.text())).toMatchSnapshot(); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + }); + + describe("as object with static set to false", () => { + let compiler; + let server; + let pageErrors; + let consoleMessages; + + beforeEach(async () => { + compiler = webpack(config3); + + server = new Server( + { + static: false, + historyApiFallback: { + index: "/bar.html", + }, + port, + }, + compiler, + ); + + await server.start(); + + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + await server.stop(); + }); + + test("historyApiFallback should work and ignore static content", async ({ + page, + }) => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://127.0.0.1:${port}/index.html`, { + waitUntil: "networkidle0", + }); + + expect( + JSON.stringify(response.headers()["content-type"]), + ).toMatchSnapshot(); + + expect(JSON.stringify(response.status())).toMatchSnapshot(); + + expect(JSON.stringify(await response.text())).toMatchSnapshot(); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + }); + + describe("as object with static and rewrites", () => { + let compiler; + let server; + let pageErrors; + let consoleMessages; + + beforeEach(async () => { + compiler = webpack(config2); + + server = new Server( + { + port, + static: path.resolve( + __dirname, + "../fixtures/historyapifallback-2-config", + ), + historyApiFallback: { + rewrites: [ + { + from: /other/, + to: "/other.html", + }, + { + from: /.*/, + to: "/bar.html", + }, + ], + }, + }, + compiler, + ); + + await server.start(); + + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + await server.stop(); + }); + + test("historyApiFallback respect rewrites for index", async ({ page }) => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://127.0.0.1:${port}/`, { + waitUntil: "networkidle0", + }); + + expect( + JSON.stringify(response.headers()["content-type"]), + ).toMatchSnapshot(); + + expect(JSON.stringify(response.status())).toMatchSnapshot(); + + expect(JSON.stringify(await response.text())).toMatchSnapshot(); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + + test("historyApiFallback respect rewrites and shows index for unknown urls", async ({ + page, + }) => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://127.0.0.1:${port}/acme`, { + waitUntil: "networkidle0", + }); + + expect( + JSON.stringify(response.headers()["content-type"]), + ).toMatchSnapshot(); + + expect(JSON.stringify(response.status())).toMatchSnapshot(); + + expect(JSON.stringify(await response.text())).toMatchSnapshot(); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + + test("historyApiFallback respect any other specified rewrites", async ({ + page, + }) => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://127.0.0.1:${port}/other`, { + waitUntil: "networkidle0", + }); + + expect( + JSON.stringify(response.headers()["content-type"]), + ).toMatchSnapshot(); + + expect(JSON.stringify(response.status())).toMatchSnapshot(); + + expect(JSON.stringify(await response.text())).toMatchSnapshot(); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + }); + + describe('as object with the "verbose" option', () => { + let compiler; + let server; + let pageErrors; + let consoleMessages; + let consoleSpy; + + beforeEach(async () => { + consoleSpy = jestMock.spyOn(global.console, "log"); + + compiler = webpack(config); + + server = new Server( + { + historyApiFallback: { + index: "/bar.html", + verbose: true, + }, + port, + }, + compiler, + ); + + await server.start(); + + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + consoleSpy.mockRestore(); + await server.stop(); + }); + + test("request to directory and log", async ({ page }) => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://127.0.0.1:${port}/foo`, { + waitUntil: "networkidle0", + }); + + expect( + JSON.stringify(response.headers()["content-type"]), + ).toMatchSnapshot(); + + expect(JSON.stringify(response.status())).toMatchSnapshot(); + + expect(JSON.stringify(await response.text())).toMatchSnapshot(); + + expect(consoleSpy).toHaveBeenCalledWith( + "Rewriting", + "GET", + "/foo", + "to", + "/bar.html", + ); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + }); + + describe('as object with the "logger" option', () => { + let compiler; + let server; + let pageErrors; + let consoleMessages; + let consoleSpy; + + beforeEach(async () => { + consoleSpy = jestMock.spyOn(global.console, "log"); + + compiler = webpack(config); + + server = new Server( + { + historyApiFallback: { + index: "/bar.html", + logger: consoleSpy, + }, + port, + }, + compiler, + ); + + await server.start(); + + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + consoleSpy.mockRestore(); + await server.stop(); + }); + + test("request to directory and log", async ({ page }) => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://127.0.0.1:${port}/foo`, { + waitUntil: "networkidle0", + }); + + expect( + JSON.stringify(response.headers()["content-type"]), + ).toMatchSnapshot(); + + expect(JSON.stringify(response.status())).toMatchSnapshot(); + + expect(JSON.stringify(await response.text())).toMatchSnapshot(); + + expect(consoleSpy).toHaveBeenCalledWith( + "Rewriting", + "GET", + "/foo", + "to", + "/bar.html", + ); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + }); + + describe("in-memory files", () => { + let compiler; + let server; + let pageErrors; + let consoleMessages; + + beforeEach(async () => { + compiler = webpack(config3); + + server = new Server( + { + static: path.resolve( + __dirname, + "../fixtures/historyapifallback-3-config", + ), + historyApiFallback: true, + port, + }, + compiler, + ); + + await server.start(); + + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + await server.stop(); + }); + + test("should take precedence over static files", async ({ page }) => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://127.0.0.1:${port}/foo`, { + waitUntil: "networkidle0", + }); + + expect( + JSON.stringify(response.headers()["content-type"]), + ).toMatchSnapshot(); + + expect(JSON.stringify(response.status())).toMatchSnapshot(); + + expect(JSON.stringify(await response.text())).toMatchSnapshot(); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + + test("should perform HEAD request in same way as GET", async ({ page }) => { + await page.goto(`http://127.0.0.1:${port}/foo`, { + waitUntil: "networkidle0", + }); + + const responseGet = await page.evaluate(async () => { + const response = await fetch("/foo", { method: "GET" }); + + return { + contentType: response.headers.get("content-type"), + statusText: response.statusText, + text: await response.text(), + }; + }); + + expect(JSON.stringify(responseGet.contentType)).toMatchSnapshot(); + + expect(JSON.stringify(responseGet.statusText)).toMatchSnapshot(); + + expect(JSON.stringify(responseGet.text)).toMatchSnapshot(); + + const responseHead = await page.evaluate(async () => { + const response = await fetch("/foo", { method: "HEAD" }); + + return { + contentType: response.headers.get("content-type"), + statusText: response.statusText, + text: await response.text(), + }; + }); + + expect(responseHead).toMatchObject({ + ...responseGet, + // HEAD response has an empty body + text: "", + }); + }); + }); +}); diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-boolean-should-handle-GET-request-to-directory-1-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-boolean-should-handle-GET-request-to-directory-1-chromium-darwin.txt new file mode 100644 index 0000000000..7818ef0b11 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-boolean-should-handle-GET-request-to-directory-1-chromium-darwin.txt @@ -0,0 +1 @@ +"text/html; charset=utf-8" \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-boolean-should-handle-GET-request-to-directory-2-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-boolean-should-handle-GET-request-to-directory-2-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-boolean-should-handle-GET-request-to-directory-2-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-boolean-should-handle-GET-request-to-directory-3-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-boolean-should-handle-GET-request-to-directory-3-chromium-darwin.txt new file mode 100644 index 0000000000..ea001f9404 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-boolean-should-handle-GET-request-to-directory-3-chromium-darwin.txt @@ -0,0 +1 @@ +"Heyyy\n" \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-boolean-should-handle-GET-request-to-directory-4-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-boolean-should-handle-GET-request-to-directory-4-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-boolean-should-handle-GET-request-to-directory-4-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-boolean-should-handle-GET-request-to-directory-5-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-boolean-should-handle-GET-request-to-directory-5-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-boolean-should-handle-GET-request-to-directory-5-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-should-handle-GET-request-to-directory-1-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-should-handle-GET-request-to-directory-1-chromium-darwin.txt new file mode 100644 index 0000000000..7818ef0b11 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-should-handle-GET-request-to-directory-1-chromium-darwin.txt @@ -0,0 +1 @@ +"text/html; charset=utf-8" \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-should-handle-GET-request-to-directory-2-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-should-handle-GET-request-to-directory-2-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-should-handle-GET-request-to-directory-2-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-should-handle-GET-request-to-directory-3-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-should-handle-GET-request-to-directory-3-chromium-darwin.txt new file mode 100644 index 0000000000..901cc711bc --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-should-handle-GET-request-to-directory-3-chromium-darwin.txt @@ -0,0 +1 @@ +"Foobar\n" \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-should-handle-GET-request-to-directory-4-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-should-handle-GET-request-to-directory-4-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-should-handle-GET-request-to-directory-4-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-should-handle-GET-request-to-directory-5-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-should-handle-GET-request-to-directory-5-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-should-handle-GET-request-to-directory-5-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-020e2-historyApiFallback-respect-rewrites-for-index-5-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-020e2-historyApiFallback-respect-rewrites-for-index-5-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-020e2-historyApiFallback-respect-rewrites-for-index-5-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-1d77c-Fallback-respect-any-other-specified-rewrites-1-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-1d77c-Fallback-respect-any-other-specified-rewrites-1-chromium-darwin.txt new file mode 100644 index 0000000000..12c6cc14c5 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-1d77c-Fallback-respect-any-other-specified-rewrites-1-chromium-darwin.txt @@ -0,0 +1 @@ +"text/html; charset=UTF-8" \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-2a14f-ect-rewrites-and-shows-index-for-unknown-urls-4-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-2a14f-ect-rewrites-and-shows-index-for-unknown-urls-4-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-2a14f-ect-rewrites-and-shows-index-for-unknown-urls-4-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-2a6f5-historyApiFallback-respect-rewrites-for-index-3-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-2a6f5-historyApiFallback-respect-rewrites-for-index-3-chromium-darwin.txt new file mode 100644 index 0000000000..901cc711bc --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-2a6f5-historyApiFallback-respect-rewrites-for-index-3-chromium-darwin.txt @@ -0,0 +1 @@ +"Foobar\n" \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-2ce18-allback-should-work-and-ignore-static-content-4-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-2ce18-allback-should-work-and-ignore-static-content-4-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-2ce18-allback-should-work-and-ignore-static-content-4-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-309e5-Fallback-respect-any-other-specified-rewrites-2-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-309e5-Fallback-respect-any-other-specified-rewrites-2-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-309e5-Fallback-respect-any-other-specified-rewrites-2-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-41adc-allback-should-work-and-ignore-static-content-2-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-41adc-allback-should-work-and-ignore-static-content-2-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-41adc-allback-should-work-and-ignore-static-content-2-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-75642-allback-should-work-and-ignore-static-content-1-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-75642-allback-should-work-and-ignore-static-content-1-chromium-darwin.txt new file mode 100644 index 0000000000..7818ef0b11 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-75642-allback-should-work-and-ignore-static-content-1-chromium-darwin.txt @@ -0,0 +1 @@ +"text/html; charset=utf-8" \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-995b8-allback-should-work-and-ignore-static-content-3-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-995b8-allback-should-work-and-ignore-static-content-3-chromium-darwin.txt new file mode 100644 index 0000000000..dd106d7e9a --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-995b8-allback-should-work-and-ignore-static-content-3-chromium-darwin.txt @@ -0,0 +1 @@ +"In-memory file\n" \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-a4ab4-historyApiFallback-respect-rewrites-for-index-1-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-a4ab4-historyApiFallback-respect-rewrites-for-index-1-chromium-darwin.txt new file mode 100644 index 0000000000..12c6cc14c5 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-a4ab4-historyApiFallback-respect-rewrites-for-index-1-chromium-darwin.txt @@ -0,0 +1 @@ +"text/html; charset=UTF-8" \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-b46db-historyApiFallback-respect-rewrites-for-index-4-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-b46db-historyApiFallback-respect-rewrites-for-index-4-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-b46db-historyApiFallback-respect-rewrites-for-index-4-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-b73c3-Fallback-respect-any-other-specified-rewrites-3-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-b73c3-Fallback-respect-any-other-specified-rewrites-3-chromium-darwin.txt new file mode 100644 index 0000000000..477691db90 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-b73c3-Fallback-respect-any-other-specified-rewrites-3-chromium-darwin.txt @@ -0,0 +1 @@ +"Other file\n" \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-bd052-Fallback-respect-any-other-specified-rewrites-5-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-bd052-Fallback-respect-any-other-specified-rewrites-5-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-bd052-Fallback-respect-any-other-specified-rewrites-5-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-cfeaa-ect-rewrites-and-shows-index-for-unknown-urls-3-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-cfeaa-ect-rewrites-and-shows-index-for-unknown-urls-3-chromium-darwin.txt new file mode 100644 index 0000000000..901cc711bc --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-cfeaa-ect-rewrites-and-shows-index-for-unknown-urls-3-chromium-darwin.txt @@ -0,0 +1 @@ +"Foobar\n" \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-d9000-ect-rewrites-and-shows-index-for-unknown-urls-2-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-d9000-ect-rewrites-and-shows-index-for-unknown-urls-2-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-d9000-ect-rewrites-and-shows-index-for-unknown-urls-2-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-e2181-ect-rewrites-and-shows-index-for-unknown-urls-5-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-e2181-ect-rewrites-and-shows-index-for-unknown-urls-5-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-e2181-ect-rewrites-and-shows-index-for-unknown-urls-5-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-eb7a2-allback-should-work-and-ignore-static-content-5-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-eb7a2-allback-should-work-and-ignore-static-content-5-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-eb7a2-allback-should-work-and-ignore-static-content-5-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-efa21-historyApiFallback-respect-rewrites-for-index-2-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-efa21-historyApiFallback-respect-rewrites-for-index-2-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-efa21-historyApiFallback-respect-rewrites-for-index-2-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-fbc41-ect-rewrites-and-shows-index-for-unknown-urls-1-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-fbc41-ect-rewrites-and-shows-index-for-unknown-urls-1-chromium-darwin.txt new file mode 100644 index 0000000000..12c6cc14c5 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-fbc41-ect-rewrites-and-shows-index-for-unknown-urls-1-chromium-darwin.txt @@ -0,0 +1 @@ +"text/html; charset=UTF-8" \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-fce30-Fallback-respect-any-other-specified-rewrites-4-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-fce30-Fallback-respect-any-other-specified-rewrites-4-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-stati-fce30-Fallback-respect-any-other-specified-rewrites-4-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-static-should-handle-GET-request-to-directory-1-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-static-should-handle-GET-request-to-directory-1-chromium-darwin.txt new file mode 100644 index 0000000000..12c6cc14c5 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-static-should-handle-GET-request-to-directory-1-chromium-darwin.txt @@ -0,0 +1 @@ +"text/html; charset=UTF-8" \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-static-should-handle-GET-request-to-directory-2-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-static-should-handle-GET-request-to-directory-2-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-static-should-handle-GET-request-to-directory-2-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-static-should-handle-GET-request-to-directory-3-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-static-should-handle-GET-request-to-directory-3-chromium-darwin.txt new file mode 100644 index 0000000000..901cc711bc --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-static-should-handle-GET-request-to-directory-3-chromium-darwin.txt @@ -0,0 +1 @@ +"Foobar\n" \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-static-should-handle-GET-request-to-directory-4-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-static-should-handle-GET-request-to-directory-4-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-static-should-handle-GET-request-to-directory-4-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-static-should-handle-GET-request-to-directory-5-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-static-should-handle-GET-request-to-directory-5-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-static-should-handle-GET-request-to-directory-5-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-static-should-prefer-static-file-over-historyApiFallback-1-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-static-should-prefer-static-file-over-historyApiFallback-1-chromium-darwin.txt new file mode 100644 index 0000000000..ee3b9dc44d --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-static-should-prefer-static-file-over-historyApiFallback-1-chromium-darwin.txt @@ -0,0 +1 @@ +"text/plain; charset=UTF-8" \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-static-should-prefer-static-file-over-historyApiFallback-2-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-static-should-prefer-static-file-over-historyApiFallback-2-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-static-should-prefer-static-file-over-historyApiFallback-2-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-static-should-prefer-static-file-over-historyApiFallback-3-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-static-should-prefer-static-file-over-historyApiFallback-3-chromium-darwin.txt new file mode 100644 index 0000000000..9fe535bffd --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-static-should-prefer-static-file-over-historyApiFallback-3-chromium-darwin.txt @@ -0,0 +1 @@ +"Random file\n" \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-static-should-prefer-static-file-over-historyApiFallback-4-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-static-should-prefer-static-file-over-historyApiFallback-4-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-static-should-prefer-static-file-over-historyApiFallback-4-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-static-should-prefer-static-file-over-historyApiFallback-5-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-static-should-prefer-static-file-over-historyApiFallback-5-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-static-should-prefer-static-file-over-historyApiFallback-5-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-the-logger-option-request-to-directory-and-log-1-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-the-logger-option-request-to-directory-and-log-1-chromium-darwin.txt new file mode 100644 index 0000000000..7818ef0b11 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-the-logger-option-request-to-directory-and-log-1-chromium-darwin.txt @@ -0,0 +1 @@ +"text/html; charset=utf-8" \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-the-logger-option-request-to-directory-and-log-2-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-the-logger-option-request-to-directory-and-log-2-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-the-logger-option-request-to-directory-and-log-2-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-the-logger-option-request-to-directory-and-log-3-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-the-logger-option-request-to-directory-and-log-3-chromium-darwin.txt new file mode 100644 index 0000000000..901cc711bc --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-the-logger-option-request-to-directory-and-log-3-chromium-darwin.txt @@ -0,0 +1 @@ +"Foobar\n" \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-the-logger-option-request-to-directory-and-log-4-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-the-logger-option-request-to-directory-and-log-4-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-the-logger-option-request-to-directory-and-log-4-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-the-logger-option-request-to-directory-and-log-5-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-the-logger-option-request-to-directory-and-log-5-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-the-logger-option-request-to-directory-and-log-5-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-the-verbose-option-request-to-directory-and-log-1-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-the-verbose-option-request-to-directory-and-log-1-chromium-darwin.txt new file mode 100644 index 0000000000..7818ef0b11 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-the-verbose-option-request-to-directory-and-log-1-chromium-darwin.txt @@ -0,0 +1 @@ +"text/html; charset=utf-8" \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-the-verbose-option-request-to-directory-and-log-2-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-the-verbose-option-request-to-directory-and-log-2-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-the-verbose-option-request-to-directory-and-log-2-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-the-verbose-option-request-to-directory-and-log-3-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-the-verbose-option-request-to-directory-and-log-3-chromium-darwin.txt new file mode 100644 index 0000000000..901cc711bc --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-the-verbose-option-request-to-directory-and-log-3-chromium-darwin.txt @@ -0,0 +1 @@ +"Foobar\n" \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-the-verbose-option-request-to-directory-and-log-4-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-the-verbose-option-request-to-directory-and-log-4-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-the-verbose-option-request-to-directory-and-log-4-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-the-verbose-option-request-to-directory-and-log-5-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-the-verbose-option-request-to-directory-and-log-5-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-as-object-with-the-verbose-option-request-to-directory-and-log-5-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-in-memory-files-should-perform-HEAD-request-in-same-way-as-GET-1-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-in-memory-files-should-perform-HEAD-request-in-same-way-as-GET-1-chromium-darwin.txt new file mode 100644 index 0000000000..7818ef0b11 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-in-memory-files-should-perform-HEAD-request-in-same-way-as-GET-1-chromium-darwin.txt @@ -0,0 +1 @@ +"text/html; charset=utf-8" \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-in-memory-files-should-perform-HEAD-request-in-same-way-as-GET-2-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-in-memory-files-should-perform-HEAD-request-in-same-way-as-GET-2-chromium-darwin.txt new file mode 100644 index 0000000000..45021e710b --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-in-memory-files-should-perform-HEAD-request-in-same-way-as-GET-2-chromium-darwin.txt @@ -0,0 +1 @@ +"OK" \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-in-memory-files-should-perform-HEAD-request-in-same-way-as-GET-3-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-in-memory-files-should-perform-HEAD-request-in-same-way-as-GET-3-chromium-darwin.txt new file mode 100644 index 0000000000..dd106d7e9a --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-in-memory-files-should-perform-HEAD-request-in-same-way-as-GET-3-chromium-darwin.txt @@ -0,0 +1 @@ +"In-memory file\n" \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-in-memory-files-should-take-precedence-over-static-files-1-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-in-memory-files-should-take-precedence-over-static-files-1-chromium-darwin.txt new file mode 100644 index 0000000000..7818ef0b11 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-in-memory-files-should-take-precedence-over-static-files-1-chromium-darwin.txt @@ -0,0 +1 @@ +"text/html; charset=utf-8" \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-in-memory-files-should-take-precedence-over-static-files-2-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-in-memory-files-should-take-precedence-over-static-files-2-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-in-memory-files-should-take-precedence-over-static-files-2-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-in-memory-files-should-take-precedence-over-static-files-3-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-in-memory-files-should-take-precedence-over-static-files-3-chromium-darwin.txt new file mode 100644 index 0000000000..dd106d7e9a --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-in-memory-files-should-take-precedence-over-static-files-3-chromium-darwin.txt @@ -0,0 +1 @@ +"In-memory file\n" \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-in-memory-files-should-take-precedence-over-static-files-4-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-in-memory-files-should-take-precedence-over-static-files-4-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-in-memory-files-should-take-precedence-over-static-files-4-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-in-memory-files-should-take-precedence-over-static-files-5-chromium-darwin.txt b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-in-memory-files-should-take-precedence-over-static-files-5-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/history-api-fallback.test.js-snapshots/historyApiFallback-option-in-memory-files-should-take-precedence-over-static-files-5-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js b/test/e2e-playwright/hot-and-live-reload.test.js new file mode 100644 index 0000000000..eab7513f50 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js @@ -0,0 +1,899 @@ +/** + * @jest-environment node + */ + +"use strict"; + +const path = require("path"); +const WebSocket = require("ws"); +const SockJS = require("sockjs-client"); +const webpack = require("webpack"); +const { test } = require("@playwright/test"); +const { expect } = require("@playwright/test"); +const { describe } = require("@playwright/test"); +const { afterEach } = require("@playwright/test"); +const { beforeEach } = require("@playwright/test"); +const jestMock = require("jest-mock"); +const fs = require("graceful-fs"); +const Server = require("../../lib/Server"); +const HTMLGeneratorPlugin = require("../helpers/html-generator-plugin"); +const reloadConfig = require("../fixtures/reload-config/webpack.config"); +const runBrowser = require("../helpers/run-browser"); +const port = require("../ports-map")["hot-and-live-reload"]; +const config = require("../fixtures/client-config/webpack.config"); +const multiCompilerConfig = require("../fixtures/multi-compiler-one-configuration/webpack.config"); + +const cssFilePath = path.resolve( + __dirname, + "../fixtures/reload-config/main.css", +); + +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", + }, + { + title: "should work and do nothing when web socket server disabled", + options: { + webSocketServer: false, + }, + }, + // Default web socket serve ("ws") + { + title: + "should work and refresh content using hot module replacement when hot enabled", + options: { + hot: true, + }, + }, + { + title: + "should work and refresh content using hot module replacement when live reload enabled", + options: { + liveReload: true, + }, + }, + { + title: "should not refresh content when hot and no live reload disabled", + options: { + hot: false, + liveReload: false, + }, + }, + { + title: + "should work and refresh content using hot module replacement when live reload disabled and hot enabled", + options: { + liveReload: false, + hot: true, + }, + }, + { + title: "should work and refresh content using live reload", + options: { + liveReload: true, + hot: false, + }, + }, + { + title: + "should work and refresh content using hot module replacement when live reload enabled and hot disabled", + options: { + liveReload: true, + hot: true, + }, + }, + // "ws" web socket serve + { + title: + "should work and refresh content using hot module replacement when hot enabled", + options: { + webSocketServer: "ws", + hot: true, + }, + }, + { + title: + "should work and refresh content using hot module replacement when live reload enabled", + options: { + webSocketServer: "ws", + liveReload: true, + }, + }, + { + title: "should not refresh content when hot and no live reload disabled", + options: { + webSocketServer: "ws", + hot: false, + liveReload: false, + }, + }, + { + title: + "should work and refresh content using hot module replacement when live reload disabled and hot enabled", + options: { + webSocketServer: "ws", + liveReload: false, + hot: true, + }, + }, + { + title: + "should work and refresh content using live reload when live reload enabled and hot disabled", + options: { + webSocketServer: "ws", + liveReload: true, + hot: false, + }, + }, + { + title: + "should work and refresh content using hot module replacement when live reload and hot enabled", + options: { + webSocketServer: "ws", + liveReload: true, + 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"', + query: "?webpack-dev-server-hot=false", + options: { + liveReload: true, + hot: true, + }, + }, + { + title: + 'should work and allow to disable live reload using the "webpack-dev-server-live-reload=false"', + query: "?webpack-dev-server-live-reload=false", + options: { + liveReload: true, + hot: false, + }, + }, + { + title: + '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"', + query: + "?webpack-dev-server-hot=false&webpack-dev-server-live-reload=false", + options: { + liveReload: true, + hot: true, + }, + }, + { + title: "should work with manual client setup", + webpackOptions: { + entry: [ + require.resolve("../../client-src/index.js"), + require.resolve("../fixtures/reload-config/foo.js"), + ], + }, + options: { + client: false, + liveReload: true, + hot: true, + }, + }, + // TODO we still output logs from webpack, need to improve this + { + title: + "should work with manual client setup and allow to enable hot module replacement", + webpackOptions: { + entry: [ + "webpack/hot/dev-server", + `${require.resolve("../../client-src/index.js")}?hot=true`, + require.resolve("../fixtures/reload-config/foo.js"), + ], + plugins: [ + new webpack.HotModuleReplacementPlugin(), + new HTMLGeneratorPlugin(), + ], + }, + options: { + client: false, + liveReload: false, + hot: false, + }, + }, + { + title: + "should work with manual client setup and allow to disable hot module replacement", + webpackOptions: { + entry: [ + `${require.resolve("../../client-src/index.js")}?hot=false`, + require.resolve("../fixtures/reload-config/foo.js"), + ], + }, + options: { + client: false, + liveReload: true, + hot: true, + }, + }, + { + title: + "should work with manual client setup and allow to enable live reload", + webpackOptions: { + entry: [ + `${require.resolve("../../client-src/index.js")}?live-reload=true`, + require.resolve("../fixtures/reload-config/foo.js"), + ], + }, + options: { + client: false, + liveReload: false, + hot: false, + }, + }, + { + title: + "should work with manual client setup and allow to disable live reload", + webpackOptions: { + entry: [ + `${require.resolve("../../client-src/index.js")}?live-reload=false`, + require.resolve("../fixtures/reload-config/foo.js"), + ], + }, + options: { + client: false, + liveReload: true, + hot: false, + }, + }, + ]; + + let browser; + let server; + + beforeEach(() => { + fs.writeFileSync(cssFilePath, "body { background-color: rgb(0, 0, 255); }"); + }); + + afterEach(async () => { + if (browser) { + await browser.close(); + } + + if (server) { + await server.stop(); + } + + fs.unlinkSync(cssFilePath); + }); + + modes.forEach((mode) => { + const webSocketServerTitle = + mode.options && mode.options.webSocketServer + ? mode.options.webSocketServer + : "default"; + + test(`${mode.title} (${webSocketServerTitle})`, async () => { + const webpackOptions = { ...reloadConfig, ...mode.webpackOptions }; + const compiler = webpack(webpackOptions); + const testDevServerOptions = mode.options || {}; + const devServerOptions = { port, ...testDevServerOptions }; + + server = new Server(devServerOptions, compiler); + + await server.start(); + + const webSocketServerLaunched = + 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://127.0.0.1:${devServerOptions.port}/ws`, + { + headers: { + host: `127.0.0.1:${devServerOptions.port}`, + origin: `http://127.0.0.1:${devServerOptions.port}`, + }, + }, + ); + + let opened = false; + let received = false; + let errored = false; + + ws.on("error", (error) => { + if (!webSocketServerLaunched && /404/.test(error)) { + errored = true; + } else { + errored = true; + } + + ws.close(); + }); + + ws.on("open", () => { + opened = true; + }); + + ws.on("message", (data) => { + const message = JSON.parse(data); + + if (message.type === "ok") { + received = true; + + ws.close(); + } + }); + + ws.on("close", () => { + if (opened && received && !errored) { + resolve(); + } else if (!webSocketServerLaunched && errored) { + resolve(); + } + }); + } else { + const sockjs = new SockJS( + `http://127.0.0.1:${devServerOptions.port}/ws`, + ); + + let opened = false; + let received = false; + let errored = false; + + sockjs.onerror = () => { + errored = true; + }; + + sockjs.onopen = () => { + opened = true; + }; + + sockjs.onmessage = ({ data }) => { + const message = JSON.parse(data); + + if (message.type === "ok") { + received = true; + + sockjs.close(); + } + }; + + sockjs.onclose = (event) => { + if (opened && received && !errored) { + resolve(); + } else if (event && event.reason === "Cannot connect to server") { + resolve(); + } + }; + } + }); + + const launched = await runBrowser(); + + ({ browser } = launched); + + const page = launched.page; + + const consoleMessages = []; + const pageErrors = []; + + let doneHotUpdate = false; + let hasDisconnectedMessage = false; + + page + .on("console", (message) => { + if (!hasDisconnectedMessage) { + const text = message.text(); + + hasDisconnectedMessage = /Disconnected!/.test(text); + consoleMessages.push(text); + } + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }) + .on("request", (requestObj) => { + if (/\.hot-update\.json$/.test(requestObj.url())) { + doneHotUpdate = true; + } + }); + + await page.goto(`http://localhost:${port}/${mode.query || ""}`, { + waitUntil: "networkidle0", + }); + + const backgroundColorBefore = await page.evaluate(() => { + // eslint-disable-next-line no-undef + const body = document.body; + + // eslint-disable-next-line no-undef + return getComputedStyle(body)["background-color"]; + }); + + expect(backgroundColorBefore).toEqual("rgb(0, 0, 255)"); + + fs.writeFileSync( + cssFilePath, + "body { background-color: rgb(255, 0, 0); }", + ); + + let waitHot = + typeof testDevServerOptions.hot !== "undefined" + ? testDevServerOptions.hot + : true; + let waitLiveReload = + typeof testDevServerOptions.liveReload !== "undefined" + ? testDevServerOptions.liveReload + : true; + + if (webSocketServerLaunched === false) { + waitHot = false; + waitLiveReload = false; + } + + if (Array.isArray(webpackOptions.entry)) { + if (webpackOptions.entry.some((item) => item.includes("hot=true"))) { + waitHot = true; + } else if ( + webpackOptions.entry.some((item) => item.includes("hot=false")) + ) { + waitHot = false; + } + } + + if (Array.isArray(webpackOptions.entry)) { + if ( + webpackOptions.entry.some((item) => item.includes("live-reload=true")) + ) { + waitLiveReload = true; + } else if ( + webpackOptions.entry.some((item) => + item.includes("live-reload=false"), + ) + ) { + waitLiveReload = false; + } + } + + const query = mode.query || ""; + + if (query.includes("webpack-dev-server-hot=false")) { + waitHot = false; + } + + if (query.includes("webpack-dev-server-live-reload=false")) { + waitLiveReload = false; + } + + if (waitHot) { + await page.waitForFunction( + () => + // eslint-disable-next-line no-undef + getComputedStyle(document.body)["background-color"] === + "rgb(255, 0, 0)", + ); + + expect(doneHotUpdate).toBe(true); + } else if (waitLiveReload) { + await page.waitForNavigation({ + waitUntil: "networkidle0", + }); + } else if (webSocketServerLaunched) { + await new Promise((resolve) => { + const interval = setInterval(() => { + if (consoleMessages.includes(INVALID_MESSAGE)) { + clearInterval(interval); + + resolve(); + } + }, 100); + }); + } + + const backgroundColorAfter = await page.evaluate(() => { + // eslint-disable-next-line no-undef + const body = document.body; + + // eslint-disable-next-line no-undef + return getComputedStyle(body)["background-color"]; + }); + + if (!waitHot && !waitLiveReload) { + expect(backgroundColorAfter).toEqual("rgb(0, 0, 255)"); + } else { + expect(backgroundColorAfter).toEqual("rgb(255, 0, 0)"); + } + + expect(JSON.stringify(consoleMessages)).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + }); +}); + +// the following cases check to make sure that the HMR +// plugin is actually added + +describe("simple hot config HMR plugin", () => { + let compiler; + let server; + let pageErrors; + let consoleMessages; + + beforeEach(async () => { + compiler = webpack(config); + + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + await server.stop(); + }); + + test("should register the HMR plugin before compilation is complete", async ({ + page, + }) => { + let pluginFound = false; + + compiler.hooks.compilation.intercept({ + register: (tapInfo) => { + if (tapInfo.name === "HotModuleReplacementPlugin") { + pluginFound = true; + } + + return tapInfo; + }, + }); + + server = new Server({ port }, compiler); + + await server.start(); + + expect(pluginFound).toBe(true); + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://127.0.0.1:${port}/`, { + waitUntil: "networkidle0", + }); + + expect(JSON.stringify(response.status())).toMatchSnapshot(); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); +}); + +describe("simple hot config HMR plugin with already added HMR plugin", () => { + let compiler; + let server; + let pageErrors; + let consoleMessages; + + beforeEach(async () => { + compiler = webpack({ + ...config, + plugins: [...config.plugins, new webpack.HotModuleReplacementPlugin()], + }); + + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + await server.stop(); + }); + + test("should register the HMR plugin before compilation is complete", async ({ + page, + }) => { + let pluginFound = false; + + compiler.hooks.compilation.intercept({ + register: (tapInfo) => { + if (tapInfo.name === "HotModuleReplacementPlugin") { + pluginFound = true; + } + + return tapInfo; + }, + }); + + server = new Server({ port }, compiler); + + await server.start(); + + expect(compiler.options.plugins).toHaveLength(2); + expect(pluginFound).toBe(true); + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://127.0.0.1:${port}/`, { + waitUntil: "networkidle0", + }); + + expect(JSON.stringify(response.status())).toMatchSnapshot(); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); +}); + +describe("simple config with already added HMR plugin", () => { + let loggerWarnSpy; + let getInfrastructureLoggerSpy; + let compiler; + let server; + + beforeEach(() => { + compiler = webpack({ + ...config, + devServer: { hot: false }, + plugins: [...config.plugins, new webpack.HotModuleReplacementPlugin()], + }); + + loggerWarnSpy = jestMock.fn(); + + getInfrastructureLoggerSpy = jestMock + .spyOn(compiler, "getInfrastructureLogger") + .mockImplementation(() => { + return { + warn: loggerWarnSpy, + info: () => {}, + log: () => {}, + }; + }); + }); + + afterEach(() => { + getInfrastructureLoggerSpy.mockRestore(); + loggerWarnSpy.mockRestore(); + }); + + test("should show warning with hot normalized as true", async () => { + server = new Server({ port }, compiler); + + await server.start(); + + expect(loggerWarnSpy).toHaveBeenCalledWith( + `"hot: true" automatically applies HMR plugin, you don't have to add it manually to your webpack configuration.`, + ); + + await server.stop(); + }); + + test(`should show warning with "hot: true"`, async () => { + server = new Server({ port, hot: true }, compiler); + + await server.start(); + + expect(loggerWarnSpy).toHaveBeenCalledWith( + `"hot: true" automatically applies HMR plugin, you don't have to add it manually to your webpack configuration.`, + ); + + await server.stop(); + }); + + test(`should not show warning with "hot: false"`, async () => { + server = new Server({ port, hot: false }, compiler); + + await server.start(); + + expect(loggerWarnSpy).not.toHaveBeenCalledWith( + `"hot: true" automatically applies HMR plugin, you don't have to add it manually to your webpack configuration.`, + ); + + await server.stop(); + }); +}); + +describe("multi compiler hot config HMR plugin", () => { + let compiler; + let server; + let pageErrors; + let consoleMessages; + + beforeEach(async () => { + compiler = webpack(multiCompilerConfig); + + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + await server.stop(); + }); + + test("should register the HMR plugin before compilation is complete", async ({ + page, + }) => { + let pluginFound = false; + + compiler.compilers[0].hooks.compilation.intercept({ + register: (tapInfo) => { + if (tapInfo.name === "HotModuleReplacementPlugin") { + pluginFound = true; + } + + return tapInfo; + }, + }); + + server = new Server({ port }, compiler); + + await server.start(); + + expect(pluginFound).toBe(true); + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://127.0.0.1:${port}/`, { + waitUntil: "networkidle0", + }); + + expect(JSON.stringify(response.status())).toMatchSnapshot(); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); +}); + +describe("hot disabled HMR plugin", () => { + let compiler; + let server; + let pageErrors; + let consoleMessages; + + beforeEach(async () => { + compiler = webpack(config); + + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + await server.stop(); + }); + + test("should NOT register the HMR plugin before compilation is complete", async ({ + page, + }) => { + let pluginFound = false; + + compiler.hooks.compilation.intercept({ + register: (tapInfo) => { + if (tapInfo.name === "HotModuleReplacementPlugin") { + pluginFound = true; + } + + return tapInfo; + }, + }); + + server = new Server({ port, hot: false }, compiler); + + await server.start(); + + expect(pluginFound).toBe(false); + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://127.0.0.1:${port}/`, { + waitUntil: "networkidle0", + }); + + expect(JSON.stringify(response.status())).toMatchSnapshot(); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); +}); diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-not-refresh-content-when-hot-and-no-live-reload-disabled-default-1-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-not-refresh-content-when-hot-and-no-live-reload-disabled-default-1-chromium-darwin.txt new file mode 100644 index 0000000000..5d21bbbffb --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-not-refresh-content-when-hot-and-no-live-reload-disabled-default-1-chromium-darwin.txt @@ -0,0 +1 @@ +["[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading disabled, Progress disabled, Overlay enabled.","[webpack-dev-server] App updated. Recompiling..."] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-not-refresh-content-when-hot-and-no-live-reload-disabled-default-2-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-not-refresh-content-when-hot-and-no-live-reload-disabled-default-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-not-refresh-content-when-hot-and-no-live-reload-disabled-default-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-not-refresh-content-when-hot-and-no-live-reload-disabled-sockjs-1-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-not-refresh-content-when-hot-and-no-live-reload-disabled-sockjs-1-chromium-darwin.txt new file mode 100644 index 0000000000..5d21bbbffb --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-not-refresh-content-when-hot-and-no-live-reload-disabled-sockjs-1-chromium-darwin.txt @@ -0,0 +1 @@ +["[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading disabled, Progress disabled, Overlay enabled.","[webpack-dev-server] App updated. Recompiling..."] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-not-refresh-content-when-hot-and-no-live-reload-disabled-sockjs-2-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-not-refresh-content-when-hot-and-no-live-reload-disabled-sockjs-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-not-refresh-content-when-hot-and-no-live-reload-disabled-sockjs-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-not-refresh-content-when-hot-and-no-live-reload-disabled-ws-1-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-not-refresh-content-when-hot-and-no-live-reload-disabled-ws-1-chromium-darwin.txt new file mode 100644 index 0000000000..5d21bbbffb --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-not-refresh-content-when-hot-and-no-live-reload-disabled-ws-1-chromium-darwin.txt @@ -0,0 +1 @@ +["[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading disabled, Progress disabled, Overlay enabled.","[webpack-dev-server] App updated. Recompiling..."] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-not-refresh-content-when-hot-and-no-live-reload-disabled-ws-2-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-not-refresh-content-when-hot-and-no-live-reload-disabled-ws-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-not-refresh-content-when-hot-and-no-live-reload-disabled-ws-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-allow-to-d-13c30--the-webpack-dev-server-hot-false-default-2-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-allow-to-d-13c30--the-webpack-dev-server-hot-false-default-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-allow-to-d-13c30--the-webpack-dev-server-hot-false-default-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-allow-to-d-25de1-bpack-dev-server-live-reload-false-default-1-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-allow-to-d-25de1-bpack-dev-server-live-reload-false-default-1-chromium-darwin.txt new file mode 100644 index 0000000000..4a0d525fc4 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-allow-to-d-25de1-bpack-dev-server-live-reload-false-default-1-chromium-darwin.txt @@ -0,0 +1 @@ +["[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.","[webpack-dev-server] App updated. Recompiling..."] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-allow-to-d-3e0ad--the-webpack-dev-server-hot-false-default-1-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-allow-to-d-3e0ad--the-webpack-dev-server-hot-false-default-1-chromium-darwin.txt new file mode 100644 index 0000000000..fdf2f4f77f --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-allow-to-d-3e0ad--the-webpack-dev-server-hot-false-default-1-chromium-darwin.txt @@ -0,0 +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 updated. Reloading...","[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.","[HMR] Waiting for update signal from WDS..."] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-allow-to-d-9a900-bpack-dev-server-live-reload-false-default-2-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-allow-to-d-9a900-bpack-dev-server-live-reload-false-default-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-allow-to-d-9a900-bpack-dev-server-live-reload-false-default-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-allow-to-d-d9184-bpack-dev-server-live-reload-false-default-2-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-allow-to-d-d9184-bpack-dev-server-live-reload-false-default-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-allow-to-d-d9184-bpack-dev-server-live-reload-false-default-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-allow-to-d-f3973-bpack-dev-server-live-reload-false-default-1-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-allow-to-d-f3973-bpack-dev-server-live-reload-false-default-1-chromium-darwin.txt new file mode 100644 index 0000000000..1c5bacce22 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-allow-to-d-f3973-bpack-dev-server-live-reload-false-default-1-chromium-darwin.txt @@ -0,0 +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..."] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-do-nothing-when-web-socket-server-disabled-default-1-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-do-nothing-when-web-socket-server-disabled-default-1-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-do-nothing-when-web-socket-server-disabled-default-1-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-do-nothing-when-web-socket-server-disabled-default-2-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-do-nothing-when-web-socket-server-disabled-default-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-do-nothing-when-web-socket-server-disabled-default-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-06912-ule-replacement-when-live-reload-enabled-ws-1-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-06912-ule-replacement-when-live-reload-enabled-ws-1-chromium-darwin.txt new file mode 100644 index 0000000000..bcbfeb9971 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-06912-ule-replacement-when-live-reload-enabled-ws-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-06b3f-acement-when-live-reload-and-hot-enabled-ws-2-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-06b3f-acement-when-live-reload-and-hot-enabled-ws-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-06b3f-acement-when-live-reload-and-hot-enabled-ws-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-0c71e-hen-live-reload-enabled-and-hot-disabled-ws-1-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-0c71e-hen-live-reload-enabled-and-hot-disabled-ws-1-chromium-darwin.txt new file mode 100644 index 0000000000..94bf882f6e --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-0c71e-hen-live-reload-enabled-and-hot-disabled-ws-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-10dad-hen-live-reload-enabled-and-hot-disabled-ws-2-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-10dad-hen-live-reload-enabled-and-hot-disabled-ws-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-10dad-hen-live-reload-enabled-and-hot-disabled-ws-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-1d796-acement-when-live-reload-and-hot-enabled-ws-1-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-1d796-acement-when-live-reload-and-hot-enabled-ws-1-chromium-darwin.txt new file mode 100644 index 0000000000..bcbfeb9971 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-1d796-acement-when-live-reload-and-hot-enabled-ws-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-268a6-replacement-when-live-reload-enabled-sockjs-2-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-268a6-replacement-when-live-reload-enabled-sockjs-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-268a6-replacement-when-live-reload-enabled-sockjs-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-2eec3-ive-reload-disabled-and-hot-enabled-default-1-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-2eec3-ive-reload-disabled-and-hot-enabled-default-1-chromium-darwin.txt new file mode 100644 index 0000000000..b6935b12de --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-2eec3-ive-reload-disabled-and-hot-enabled-default-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-3a0ad-ive-reload-enabled-and-hot-disabled-default-2-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-3a0ad-ive-reload-enabled-and-hot-disabled-default-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-3a0ad-ive-reload-enabled-and-hot-disabled-default-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-4c1e1-ent-when-live-reload-and-hot-enabled-sockjs-2-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-4c1e1-ent-when-live-reload-and-hot-enabled-sockjs-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-4c1e1-ent-when-live-reload-and-hot-enabled-sockjs-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-66895-live-reload-disabled-and-hot-enabled-sockjs-2-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-66895-live-reload-disabled-and-hot-enabled-sockjs-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-66895-live-reload-disabled-and-hot-enabled-sockjs-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-6aa7f-live-reload-disabled-and-hot-enabled-sockjs-1-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-6aa7f-live-reload-disabled-and-hot-enabled-sockjs-1-chromium-darwin.txt new file mode 100644 index 0000000000..94bf882f6e --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-6aa7f-live-reload-disabled-and-hot-enabled-sockjs-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-72163-replacement-when-live-reload-enabled-sockjs-1-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-72163-replacement-when-live-reload-enabled-sockjs-1-chromium-darwin.txt new file mode 100644 index 0000000000..bcbfeb9971 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-72163-replacement-when-live-reload-enabled-sockjs-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-77e66-live-reload-disabled-and-hot-enabled-sockjs-2-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-77e66-live-reload-disabled-and-hot-enabled-sockjs-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-77e66-live-reload-disabled-and-hot-enabled-sockjs-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-83608-ule-replacement-when-live-reload-enabled-ws-2-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-83608-ule-replacement-when-live-reload-enabled-ws-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-83608-ule-replacement-when-live-reload-enabled-ws-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-8a0ca-module-replacement-when-hot-enabled-default-1-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-8a0ca-module-replacement-when-hot-enabled-default-1-chromium-darwin.txt new file mode 100644 index 0000000000..bcbfeb9971 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-8a0ca-module-replacement-when-hot-enabled-default-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-90b57--module-replacement-when-hot-enabled-sockjs-1-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-90b57--module-replacement-when-hot-enabled-sockjs-1-chromium-darwin.txt new file mode 100644 index 0000000000..bcbfeb9971 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-90b57--module-replacement-when-hot-enabled-sockjs-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-9beef-live-reload-disabled-and-hot-enabled-sockjs-1-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-9beef-live-reload-disabled-and-hot-enabled-sockjs-1-chromium-darwin.txt new file mode 100644 index 0000000000..b6935b12de --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-9beef-live-reload-disabled-and-hot-enabled-sockjs-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-b877d-hen-live-reload-disabled-and-hot-enabled-ws-2-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-b877d-hen-live-reload-disabled-and-hot-enabled-ws-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-b877d-hen-live-reload-disabled-and-hot-enabled-ws-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-c4538-module-replacement-when-hot-enabled-default-2-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-c4538-module-replacement-when-hot-enabled-default-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-c4538-module-replacement-when-hot-enabled-default-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-ce6b0-hen-live-reload-disabled-and-hot-enabled-ws-1-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-ce6b0-hen-live-reload-disabled-and-hot-enabled-ws-1-chromium-darwin.txt new file mode 100644 index 0000000000..b6935b12de --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-ce6b0-hen-live-reload-disabled-and-hot-enabled-ws-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-d524d-ive-reload-disabled-and-hot-enabled-default-2-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-d524d-ive-reload-disabled-and-hot-enabled-default-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-d524d-ive-reload-disabled-and-hot-enabled-default-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-d7fc0-eplacement-when-live-reload-enabled-default-1-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-d7fc0-eplacement-when-live-reload-enabled-default-1-chromium-darwin.txt new file mode 100644 index 0000000000..bcbfeb9971 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-d7fc0-eplacement-when-live-reload-enabled-default-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-db22a-ent-when-live-reload-and-hot-enabled-sockjs-1-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-db22a-ent-when-live-reload-and-hot-enabled-sockjs-1-chromium-darwin.txt new file mode 100644 index 0000000000..bcbfeb9971 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-db22a-ent-when-live-reload-and-hot-enabled-sockjs-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-e349e--module-replacement-when-hot-enabled-sockjs-2-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-e349e--module-replacement-when-hot-enabled-sockjs-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-e349e--module-replacement-when-hot-enabled-sockjs-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-e4af0--hot-module-replacement-when-hot-enabled-ws-2-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-e4af0--hot-module-replacement-when-hot-enabled-ws-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-e4af0--hot-module-replacement-when-hot-enabled-ws-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-e7231-eplacement-when-live-reload-enabled-default-2-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-e7231-eplacement-when-live-reload-enabled-default-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-e7231-eplacement-when-live-reload-enabled-default-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-f851d--hot-module-replacement-when-hot-enabled-ws-1-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-f851d--hot-module-replacement-when-hot-enabled-ws-1-chromium-darwin.txt new file mode 100644 index 0000000000..bcbfeb9971 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-f851d--hot-module-replacement-when-hot-enabled-ws-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-f9262-ive-reload-enabled-and-hot-disabled-default-1-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-f9262-ive-reload-enabled-and-hot-disabled-default-1-chromium-darwin.txt new file mode 100644 index 0000000000..bcbfeb9971 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-co-f9262-ive-reload-enabled-and-hot-disabled-default-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-content-using-hot-module-replacement-default-1-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-content-using-hot-module-replacement-default-1-chromium-darwin.txt new file mode 100644 index 0000000000..bcbfeb9971 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-content-using-hot-module-replacement-default-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-content-using-hot-module-replacement-default-2-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-content-using-hot-module-replacement-default-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-content-using-hot-module-replacement-default-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-content-using-live-reload-default-1-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-content-using-live-reload-default-1-chromium-darwin.txt new file mode 100644 index 0000000000..94bf882f6e --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-content-using-live-reload-default-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-content-using-live-reload-default-2-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-content-using-live-reload-default-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-and-refresh-content-using-live-reload-default-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-with-manual-cl-23648-up-and-allow-to-disable-live-reload-default-1-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-with-manual-cl-23648-up-and-allow-to-disable-live-reload-default-1-chromium-darwin.txt new file mode 100644 index 0000000000..389a4eb241 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-with-manual-cl-23648-up-and-allow-to-disable-live-reload-default-1-chromium-darwin.txt @@ -0,0 +1 @@ +["[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading disabled, Progress disabled, Overlay disabled.","[webpack-dev-server] App updated. Recompiling..."] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-with-manual-cl-3afda-ow-to-enable-hot-module-replacement-default-1-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-with-manual-cl-3afda-ow-to-enable-hot-module-replacement-default-1-chromium-darwin.txt new file mode 100644 index 0000000000..605d99b6d2 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-with-manual-cl-3afda-ow-to-enable-hot-module-replacement-default-1-chromium-darwin.txt @@ -0,0 +1 @@ +["[HMR] Waiting for update signal from WDS...","[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading disabled, Progress disabled, Overlay disabled.","[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."] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-with-manual-cl-48c92-w-to-disable-hot-module-replacement-default-2-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-with-manual-cl-48c92-w-to-disable-hot-module-replacement-default-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-with-manual-cl-48c92-w-to-disable-hot-module-replacement-default-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-with-manual-cl-54327-up-and-allow-to-disable-live-reload-default-2-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-with-manual-cl-54327-up-and-allow-to-disable-live-reload-default-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-with-manual-cl-54327-up-and-allow-to-disable-live-reload-default-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-with-manual-cl-b34ce-w-to-disable-hot-module-replacement-default-1-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-with-manual-cl-b34ce-w-to-disable-hot-module-replacement-default-1-chromium-darwin.txt new file mode 100644 index 0000000000..d01e9707f0 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-with-manual-cl-b34ce-w-to-disable-hot-module-replacement-default-1-chromium-darwin.txt @@ -0,0 +1 @@ +["[HMR] Waiting for update signal from WDS...","[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading disabled, Progress disabled, Overlay disabled.","[webpack-dev-server] App updated. Recompiling...","[webpack-dev-server] App updated. Reloading...","[HMR] Waiting for update signal from WDS...","[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading disabled, Progress disabled, Overlay disabled."] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-with-manual-cl-b6399-ow-to-enable-hot-module-replacement-default-2-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-with-manual-cl-b6399-ow-to-enable-hot-module-replacement-default-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-with-manual-cl-b6399-ow-to-enable-hot-module-replacement-default-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-with-manual-client-setup-and-allow-to-enable-live-reload-default-1-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-with-manual-client-setup-and-allow-to-enable-live-reload-default-1-chromium-darwin.txt new file mode 100644 index 0000000000..f36c99f34c --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-with-manual-client-setup-and-allow-to-enable-live-reload-default-1-chromium-darwin.txt @@ -0,0 +1 @@ +["[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay disabled.","[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 disabled."] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-with-manual-client-setup-and-allow-to-enable-live-reload-default-2-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-with-manual-client-setup-and-allow-to-enable-live-reload-default-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-with-manual-client-setup-and-allow-to-enable-live-reload-default-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-with-manual-client-setup-default-1-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-with-manual-client-setup-default-1-chromium-darwin.txt new file mode 100644 index 0000000000..561a21f11e --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-with-manual-client-setup-default-1-chromium-darwin.txt @@ -0,0 +1 @@ +["[HMR] Waiting for update signal from WDS...","[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading disabled, Progress disabled, Overlay disabled.","[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."] \ No newline at end of file diff --git a/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-with-manual-client-setup-default-2-chromium-darwin.txt b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-with-manual-client-setup-default-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/hot-and-live-reload.test.js-snapshots/hot-and-live-reload-should-work-with-manual-client-setup-default-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/ipc.test.js b/test/e2e-playwright/ipc.test.js new file mode 100644 index 0000000000..f43056d4f8 --- /dev/null +++ b/test/e2e-playwright/ipc.test.js @@ -0,0 +1,353 @@ +"use strict"; + +const os = require("os"); +const net = require("net"); +const path = require("path"); +const http = require("http"); +const webpack = require("webpack"); +const { test } = require("@playwright/test"); +const { expect } = require("@playwright/test"); +const { describe } = require("@playwright/test"); +const httpProxy = require("http-proxy"); +const Server = require("../../lib/Server"); +const config = require("../fixtures/client-config/webpack.config"); +const sessionSubscribe = require("../helpers/session-subscribe"); +const port1 = require("../ports-map").ipc; + +const webSocketServers = ["ws", "sockjs"]; + +describe("web socket server URL", () => { + for (const webSocketServer of webSocketServers) { + const websocketURLProtocol = webSocketServer === "ws" ? "ws" : "http"; + + test(`should work with the "ipc" option using "true" value ("${webSocketServer}")`, async ({ + page, + }) => { + const devServerHost = "127.0.0.1"; + const proxyHost = devServerHost; + const proxyPort = port1; + + const compiler = webpack(config); + const devServerOptions = { + webSocketServer, + ipc: true, + }; + const server = new Server(devServerOptions, compiler); + + await server.start(); + + function startProxy(callback) { + const proxy = httpProxy.createProxyServer({ + target: { socketPath: server.options.ipc }, + }); + + const proxyServer = http.createServer((request, response) => { + // You can define here your custom logic to handle the request + // and then proxy the request. + proxy.web(request, response); + }); + + proxyServer.on("upgrade", (request, socket, head) => { + proxy.ws(request, socket, head); + }); + + return proxyServer.listen(proxyPort, proxyHost, callback); + } + + const proxy = await new Promise((resolve) => { + const proxyCreated = startProxy(() => { + resolve(proxyCreated); + }); + }); + + try { + const pageErrors = []; + const consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const webSocketRequests = []; + + if (webSocketServer === "ws") { + const session = await page.context().newCDPSession(page); + + session.on("Network.webSocketCreated", (payload) => { + webSocketRequests.push(payload); + }); + + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); + + sessionSubscribe(session); + } else { + page.on("request", (request) => { + if (/\/ws\//.test(request.url())) { + webSocketRequests.push({ url: request.url() }); + } + }); + } + + await page.goto(`http://${proxyHost}:${proxyPort}/`, { + waitUntil: "networkidle0", + }); + + const webSocketRequest = webSocketRequests[0]; + + expect(webSocketRequest.url).toContain( + `${websocketURLProtocol}://${devServerHost}:${proxyPort}/ws`, + ); + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + proxy.close(); + + await server.stop(); + } + }); + + test(`should work with the "ipc" option using "string" value ("${webSocketServer}")`, async ({ + page, + }) => { + const isWindows = process.platform === "win32"; + const pipePrefix = isWindows ? "\\\\.\\pipe\\" : os.tmpdir(); + const pipeName = `webpack-dev-server.${process.pid}-1.sock`; + const ipc = path.join(pipePrefix, pipeName); + + const devServerHost = "127.0.0.1"; + const proxyHost = devServerHost; + const proxyPort = port1; + + const compiler = webpack(config); + const devServerOptions = { + webSocketServer, + ipc, + }; + const server = new Server(devServerOptions, compiler); + + await server.start(); + + function startProxy(callback) { + const proxy = httpProxy.createProxyServer({ + target: { socketPath: ipc }, + }); + + const proxyServer = http.createServer((request, response) => { + // You can define here your custom logic to handle the request + // and then proxy the request. + proxy.web(request, response); + }); + + proxyServer.on("upgrade", (request, socket, head) => { + proxy.ws(request, socket, head); + }); + + return proxyServer.listen(proxyPort, proxyHost, callback); + } + + const proxy = await new Promise((resolve) => { + const proxyCreated = startProxy(() => { + resolve(proxyCreated); + }); + }); + + try { + const pageErrors = []; + const consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const webSocketRequests = []; + + if (webSocketServer === "ws") { + const session = await page.context().newCDPSession(page); + + session.on("Network.webSocketCreated", (payload) => { + webSocketRequests.push(payload); + }); + + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); + + sessionSubscribe(session); + } else { + page.on("request", (request) => { + if (/\/ws\//.test(request.url())) { + webSocketRequests.push({ url: request.url() }); + } + }); + } + + await page.goto(`http://${proxyHost}:${proxyPort}/`, { + waitUntil: "networkidle0", + }); + + const webSocketRequest = webSocketRequests[0]; + + expect(webSocketRequest.url).toContain( + `${websocketURLProtocol}://${devServerHost}:${proxyPort}/ws`, + ); + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + proxy.close(); + + await server.stop(); + } + }); + + // TODO un skip after implement new API + test.skip(`should work with the "ipc" option using "string" value and remove old ("${webSocketServer}")`, async ({ + page, + }) => { + const isWindows = process.platform === "win32"; + const localRelative = path.relative(process.cwd(), `${os.tmpdir()}/`); + const pipePrefix = isWindows ? "\\\\.\\pipe\\" : localRelative; + const pipeName = `webpack-dev-server.${process.pid}-2.sock`; + const ipc = path.join(pipePrefix, pipeName); + + const ipcServer = await new Promise((resolve, reject) => { + const server = net.Server(); + + server.on("error", (error) => { + reject(error); + }); + + return server.listen(ipc, () => { + resolve(); + }); + }); + + const devServerHost = "127.0.0.1"; + const proxyHost = devServerHost; + const proxyPort = port1; + + const compiler = webpack(config); + const devServerOptions = { + webSocketServer, + host: devServerHost, + ipc, + }; + const server = new Server(devServerOptions, compiler); + + await server.start(); + + function startProxy(callback) { + const proxy = httpProxy.createProxyServer({ + target: { socketPath: ipc }, + }); + + const proxyServer = http.createServer((request, response) => { + // You can define here your custom logic to handle the request + // and then proxy the request. + proxy.web(request, response); + }); + + proxyServer.on("upgrade", (request, socket, head) => { + proxy.ws(request, socket, head); + }); + + return proxyServer.listen(proxyPort, proxyHost, callback); + } + + const proxy = await new Promise((resolve) => { + const proxyCreated = startProxy(() => { + resolve(proxyCreated); + }); + }); + + try { + const pageErrors = []; + const consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const webSocketRequests = []; + + if (webSocketServer === "ws") { + const session = await page.target().createCDPSession(); + + session.on("Network.webSocketCreated", (payload) => { + webSocketRequests.push(payload); + }); + + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); + + sessionSubscribe(session); + } else { + page.on("request", (request) => { + if (/\/ws\//.test(request.url())) { + webSocketRequests.push({ url: request.url() }); + } + }); + } + + await page.goto(`http://${proxyHost}:${proxyPort}/`, { + waitUntil: "networkidle0", + }); + + const webSocketRequest = webSocketRequests[0]; + + expect(webSocketRequest.url).toContain( + `${websocketURLProtocol}://${devServerHost}:${proxyPort}/ws`, + ); + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + proxy.close(); + + await new Promise((resolve, reject) => { + ipcServer.close((error) => { + if (error) { + reject(error); + + return; + } + + resolve(); + }); + }); + await server.stop(); + } + }); + } +}); diff --git a/test/e2e-playwright/ipc.test.js-snapshots/web-socket-server-URL-should-work-with-the-ipc-option-using-string-value-sockjs-1-chromium-darwin.txt b/test/e2e-playwright/ipc.test.js-snapshots/web-socket-server-URL-should-work-with-the-ipc-option-using-string-value-sockjs-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/ipc.test.js-snapshots/web-socket-server-URL-should-work-with-the-ipc-option-using-string-value-sockjs-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/ipc.test.js-snapshots/web-socket-server-URL-should-work-with-the-ipc-option-using-string-value-sockjs-2-chromium-darwin.txt b/test/e2e-playwright/ipc.test.js-snapshots/web-socket-server-URL-should-work-with-the-ipc-option-using-string-value-sockjs-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/ipc.test.js-snapshots/web-socket-server-URL-should-work-with-the-ipc-option-using-string-value-sockjs-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/ipc.test.js-snapshots/web-socket-server-URL-should-work-with-the-ipc-option-using-string-value-ws-1-chromium-darwin.txt b/test/e2e-playwright/ipc.test.js-snapshots/web-socket-server-URL-should-work-with-the-ipc-option-using-string-value-ws-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/ipc.test.js-snapshots/web-socket-server-URL-should-work-with-the-ipc-option-using-string-value-ws-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/ipc.test.js-snapshots/web-socket-server-URL-should-work-with-the-ipc-option-using-string-value-ws-2-chromium-darwin.txt b/test/e2e-playwright/ipc.test.js-snapshots/web-socket-server-URL-should-work-with-the-ipc-option-using-string-value-ws-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/ipc.test.js-snapshots/web-socket-server-URL-should-work-with-the-ipc-option-using-string-value-ws-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/ipc.test.js-snapshots/web-socket-server-URL-should-work-with-the-ipc-option-using-true-value-sockjs-1-chromium-darwin.txt b/test/e2e-playwright/ipc.test.js-snapshots/web-socket-server-URL-should-work-with-the-ipc-option-using-true-value-sockjs-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/ipc.test.js-snapshots/web-socket-server-URL-should-work-with-the-ipc-option-using-true-value-sockjs-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/ipc.test.js-snapshots/web-socket-server-URL-should-work-with-the-ipc-option-using-true-value-sockjs-2-chromium-darwin.txt b/test/e2e-playwright/ipc.test.js-snapshots/web-socket-server-URL-should-work-with-the-ipc-option-using-true-value-sockjs-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/ipc.test.js-snapshots/web-socket-server-URL-should-work-with-the-ipc-option-using-true-value-sockjs-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/ipc.test.js-snapshots/web-socket-server-URL-should-work-with-the-ipc-option-using-true-value-ws-1-chromium-darwin.txt b/test/e2e-playwright/ipc.test.js-snapshots/web-socket-server-URL-should-work-with-the-ipc-option-using-true-value-ws-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/ipc.test.js-snapshots/web-socket-server-URL-should-work-with-the-ipc-option-using-true-value-ws-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/ipc.test.js-snapshots/web-socket-server-URL-should-work-with-the-ipc-option-using-true-value-ws-2-chromium-darwin.txt b/test/e2e-playwright/ipc.test.js-snapshots/web-socket-server-URL-should-work-with-the-ipc-option-using-true-value-ws-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/ipc.test.js-snapshots/web-socket-server-URL-should-work-with-the-ipc-option-using-true-value-ws-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/lazy-compilation.test.js b/test/e2e-playwright/lazy-compilation.test.js new file mode 100644 index 0000000000..9836261546 --- /dev/null +++ b/test/e2e-playwright/lazy-compilation.test.js @@ -0,0 +1,108 @@ +"use strict"; + +const webpack = require("webpack"); +const { test } = require("@playwright/test"); +const { expect } = require("@playwright/test"); +const { describe } = require("@playwright/test"); +const Server = require("../../lib/Server"); +const lazyCompilationSingleEntryConfig = require("../fixtures/lazy-compilation-single-entry/webpack.config"); +const lazyCompilationMultipleEntriesConfig = require("../fixtures/lazy-compilation-multiple-entries/webpack.config"); +const port = require("../ports-map")["lazy-compilation"]; + +describe("lazy compilation", () => { + // TODO jest freeze due webpack do not close `eventsource`, we should uncomment this after fix it on webpack side + test.skip(`should work with single entry`, async ({ page }) => { + const compiler = webpack(lazyCompilationSingleEntryConfig); + const server = new Server({ port }, compiler); + + await server.start(); + + try { + const pageErrors = []; + const consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message.text()); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://127.0.0.1:${port}/test.html`, { + waitUntil: "domcontentloaded", + }); + await new Promise((resolve) => { + const interval = setInterval(() => { + if (consoleMessages.includes("Hey.")) { + clearInterval(interval); + + resolve(); + } + }, 100); + }); + + expect(JSON.stringify(consoleMessages)).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + await server.stop(); + } + }); + + test.skip(`should work with multiple entries`, async ({ page }) => { + const compiler = webpack(lazyCompilationMultipleEntriesConfig); + const server = new Server({ port }, compiler); + + await server.start(); + + try { + const pageErrors = []; + const consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message.text()); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://127.0.0.1:${port}/test-one.html`, { + waitUntil: "domcontentloaded", + }); + await new Promise((resolve) => { + const interval = setInterval(() => { + console.log(consoleMessages); + if (consoleMessages.includes("One.")) { + clearInterval(interval); + + resolve(); + } + }, 100); + }); + + await page.goto(`http://127.0.0.1:${port}/test-two.html`, { + waitUntil: "domcontentloaded", + }); + await new Promise((resolve) => { + const interval = setInterval(() => { + console.log(consoleMessages); + if (consoleMessages.includes("Two.")) { + clearInterval(interval); + + resolve(); + } + }, 100); + }); + + expect(JSON.stringify(consoleMessages)).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + await server.stop(); + } + }); +}); diff --git a/test/e2e-playwright/logging.test.js b/test/e2e-playwright/logging.test.js new file mode 100644 index 0000000000..611fb9bf09 --- /dev/null +++ b/test/e2e-playwright/logging.test.js @@ -0,0 +1,242 @@ +"use strict"; + +const path = require("path"); +const fs = require("graceful-fs"); +const webpack = require("webpack"); +const { test } = require("@playwright/test"); +const { expect } = require("@playwright/test"); +const { describe } = require("@playwright/test"); +const Server = require("../../lib/Server"); +const HTMLGeneratorPlugin = require("../helpers/html-generator-plugin"); +const config = require("../fixtures/client-config/webpack.config"); +const port = require("../ports-map").logging; + +describe("logging", () => { + const webSocketServers = [ + { webSocketServer: "ws" }, + { webSocketServer: "sockjs" }, + ]; + + const cases = [ + { + title: "should work and log message about live reloading is enabled", + devServerOptions: { + hot: false, + }, + }, + { + title: "should work and log messages about hot", + devServerOptions: { + hot: true, + }, + }, + { + title: "should work and log messages about hot is enabled", + devServerOptions: { + liveReload: false, + }, + }, + { + title: + "should work and do not log messages about hot and live reloading is enabled", + devServerOptions: { + liveReload: false, + hot: false, + }, + }, + { + title: + "should work and log messages about hot and live reloading is enabled", + devServerOptions: { + liveReload: true, + hot: true, + }, + }, + { + title: "should work and log warnings by default", + webpackOptions: { + plugins: [ + { + apply(compiler) { + compiler.hooks.thisCompilation.tap( + "warnings-webpack-plugin", + (compilation) => { + compilation.warnings.push( + new Error("Warning from compilation"), + ); + }, + ); + }, + }, + new HTMLGeneratorPlugin(), + ], + }, + }, + { + title: "should work and log errors by default", + webpackOptions: { + plugins: [ + { + apply(compiler) { + compiler.hooks.thisCompilation.tap( + "warnings-webpack-plugin", + (compilation) => { + compilation.errors.push(new Error("Error from compilation")); + }, + ); + }, + }, + new HTMLGeneratorPlugin(), + ], + }, + }, + { + title: 'should work when the "client.logging" is "info"', + devServerOptions: { + client: { + logging: "info", + }, + }, + }, + { + title: 'should work when the "client.logging" is "log"', + devServerOptions: { + client: { + logging: "log", + }, + }, + }, + { + title: 'should work when the "client.logging" is "verbose"', + devServerOptions: { + client: { + logging: "verbose", + }, + }, + }, + { + title: 'should work when the "client.logging" is "none"', + devServerOptions: { + client: { + logging: "none", + }, + }, + }, + { + title: "should work and log only error", + webpackOptions: { + plugins: [ + { + apply(compiler) { + compiler.hooks.thisCompilation.tap( + "warnings-webpack-plugin", + (compilation) => { + compilation.warnings.push( + new Error("Warning from compilation"), + ); + compilation.errors.push(new Error("Error from compilation")); + }, + ); + }, + }, + new HTMLGeneratorPlugin(), + ], + }, + devServerOptions: { + client: { + logging: "error", + }, + }, + }, + { + title: "should work and log warning and errors", + webpackOptions: { + plugins: [ + { + apply(compiler) { + compiler.hooks.thisCompilation.tap( + "warnings-webpack-plugin", + (compilation) => { + compilation.warnings.push( + new Error("Warning from compilation"), + ); + compilation.errors.push(new Error("Error from compilation")); + }, + ); + }, + }, + new HTMLGeneratorPlugin(), + ], + }, + devServerOptions: { + client: { + logging: "warn", + }, + }, + }, + { + title: "should work and log static changes", + devServerOptions: { + static: path.resolve(__dirname, "../fixtures/client-config/static"), + }, + }, + ]; + + webSocketServers.forEach((webSocketServer) => { + cases.forEach((testCase) => { + test(`${testCase.title} (${ + webSocketServer.webSocketServer || "default" + })`, async ({ page }) => { + const compiler = webpack({ ...config, ...testCase.webpackOptions }); + const devServerOptions = { + port, + ...testCase.devServerOptions, + }; + const server = new Server(devServerOptions, compiler); + + await server.start(); + + try { + const consoleMessages = []; + + page.on("console", (message) => { + consoleMessages.push(message); + }); + + await page.goto(`http://localhost:${port}/`, { + waitUntil: "networkidle0", + }); + + if (testCase.devServerOptions && testCase.devServerOptions.static) { + fs.writeFileSync( + path.join(testCase.devServerOptions.static, "./foo.txt"), + "Text", + ); + + await page.waitForNavigation({ + waitUntil: "networkidle0", + }); + } + + expect( + JSON.stringify( + consoleMessages.map((message) => + message + .text() + .replace(/\\/g, "/") + .replace( + new RegExp(process.cwd().replace(/\\/g, "/"), "g"), + "", + ), + ), + ), + ).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + await server.stop(); + } + }); + }); + }); +}); diff --git a/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-do-not-log-messages-about-hot-and-live-reloading-is-enabled-sockjs-1-chromium-darwin.txt b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-do-not-log-messages-about-hot-and-live-reloading-is-enabled-sockjs-1-chromium-darwin.txt new file mode 100644 index 0000000000..58c2ecffb4 --- /dev/null +++ b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-do-not-log-messages-about-hot-and-live-reloading-is-enabled-sockjs-1-chromium-darwin.txt @@ -0,0 +1 @@ +["[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading disabled, Progress disabled, Overlay enabled.","Hey."] \ No newline at end of file diff --git a/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-do-not-log-messages-about-hot-and-live-reloading-is-enabled-ws-1-chromium-darwin.txt b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-do-not-log-messages-about-hot-and-live-reloading-is-enabled-ws-1-chromium-darwin.txt new file mode 100644 index 0000000000..58c2ecffb4 --- /dev/null +++ b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-do-not-log-messages-about-hot-and-live-reloading-is-enabled-ws-1-chromium-darwin.txt @@ -0,0 +1 @@ +["[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading disabled, Progress disabled, Overlay enabled.","Hey."] \ No newline at end of file diff --git a/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-errors-by-default-sockjs-1-chromium-darwin.txt b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-errors-by-default-sockjs-1-chromium-darwin.txt new file mode 100644 index 0000000000..fee2b77222 --- /dev/null +++ b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-errors-by-default-sockjs-1-chromium-darwin.txt @@ -0,0 +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\nError from compilation"] \ No newline at end of file diff --git a/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-errors-by-default-ws-1-chromium-darwin.txt b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-errors-by-default-ws-1-chromium-darwin.txt new file mode 100644 index 0000000000..fee2b77222 --- /dev/null +++ b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-errors-by-default-ws-1-chromium-darwin.txt @@ -0,0 +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\nError from compilation"] \ No newline at end of file diff --git a/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-message-about-live-reloading-is-enabled-sockjs-1-chromium-darwin.txt b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-message-about-live-reloading-is-enabled-sockjs-1-chromium-darwin.txt new file mode 100644 index 0000000000..d0917f1047 --- /dev/null +++ b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-message-about-live-reloading-is-enabled-sockjs-1-chromium-darwin.txt @@ -0,0 +1 @@ +["[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.","Hey."] \ No newline at end of file diff --git a/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-message-about-live-reloading-is-enabled-ws-1-chromium-darwin.txt b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-message-about-live-reloading-is-enabled-ws-1-chromium-darwin.txt new file mode 100644 index 0000000000..d0917f1047 --- /dev/null +++ b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-message-about-live-reloading-is-enabled-ws-1-chromium-darwin.txt @@ -0,0 +1 @@ +["[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.","Hey."] \ No newline at end of file diff --git a/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-messages-about-hot-and-live-reloading-is-enabled-sockjs-1-chromium-darwin.txt b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-messages-about-hot-and-live-reloading-is-enabled-sockjs-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-messages-about-hot-and-live-reloading-is-enabled-sockjs-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-messages-about-hot-and-live-reloading-is-enabled-ws-1-chromium-darwin.txt b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-messages-about-hot-and-live-reloading-is-enabled-ws-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-messages-about-hot-and-live-reloading-is-enabled-ws-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-messages-about-hot-is-enabled-sockjs-1-chromium-darwin.txt b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-messages-about-hot-is-enabled-sockjs-1-chromium-darwin.txt new file mode 100644 index 0000000000..6e17c50957 --- /dev/null +++ b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-messages-about-hot-is-enabled-sockjs-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-messages-about-hot-is-enabled-ws-1-chromium-darwin.txt b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-messages-about-hot-is-enabled-ws-1-chromium-darwin.txt new file mode 100644 index 0000000000..6e17c50957 --- /dev/null +++ b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-messages-about-hot-is-enabled-ws-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-messages-about-hot-sockjs-1-chromium-darwin.txt b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-messages-about-hot-sockjs-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-messages-about-hot-sockjs-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-messages-about-hot-ws-1-chromium-darwin.txt b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-messages-about-hot-ws-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-messages-about-hot-ws-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-only-error-sockjs-1-chromium-darwin.txt b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-only-error-sockjs-1-chromium-darwin.txt new file mode 100644 index 0000000000..b8699ddc52 --- /dev/null +++ b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-only-error-sockjs-1-chromium-darwin.txt @@ -0,0 +1 @@ +["Hey.","[webpack-dev-server] Errors while compiling. Reload prevented.","[webpack-dev-server] ERROR\nError from compilation"] \ No newline at end of file diff --git a/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-only-error-ws-1-chromium-darwin.txt b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-only-error-ws-1-chromium-darwin.txt new file mode 100644 index 0000000000..b8699ddc52 --- /dev/null +++ b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-only-error-ws-1-chromium-darwin.txt @@ -0,0 +1 @@ +["Hey.","[webpack-dev-server] Errors while compiling. Reload prevented.","[webpack-dev-server] ERROR\nError from compilation"] \ No newline at end of file diff --git a/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-static-changes-sockjs-1-chromium-darwin.txt b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-static-changes-sockjs-1-chromium-darwin.txt new file mode 100644 index 0000000000..4338f71ef7 --- /dev/null +++ b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-static-changes-sockjs-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-static-changes-ws-1-chromium-darwin.txt b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-static-changes-ws-1-chromium-darwin.txt new file mode 100644 index 0000000000..4338f71ef7 --- /dev/null +++ b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-static-changes-ws-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-warning-and-errors-sockjs-1-chromium-darwin.txt b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-warning-and-errors-sockjs-1-chromium-darwin.txt new file mode 100644 index 0000000000..2f936ff5ca --- /dev/null +++ b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-warning-and-errors-sockjs-1-chromium-darwin.txt @@ -0,0 +1 @@ +["Hey.","[webpack-dev-server] Warnings while compiling.","[webpack-dev-server] WARNING\nWarning from compilation","[webpack-dev-server] Errors while compiling. Reload prevented.","[webpack-dev-server] ERROR\nError from compilation"] \ No newline at end of file diff --git a/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-warning-and-errors-ws-1-chromium-darwin.txt b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-warning-and-errors-ws-1-chromium-darwin.txt new file mode 100644 index 0000000000..2f936ff5ca --- /dev/null +++ b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-warning-and-errors-ws-1-chromium-darwin.txt @@ -0,0 +1 @@ +["Hey.","[webpack-dev-server] Warnings while compiling.","[webpack-dev-server] WARNING\nWarning from compilation","[webpack-dev-server] Errors while compiling. Reload prevented.","[webpack-dev-server] ERROR\nError from compilation"] \ No newline at end of file diff --git a/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-warnings-by-default-sockjs-1-chromium-darwin.txt b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-warnings-by-default-sockjs-1-chromium-darwin.txt new file mode 100644 index 0000000000..e88bcaac49 --- /dev/null +++ b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-warnings-by-default-sockjs-1-chromium-darwin.txt @@ -0,0 +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\nWarning from compilation"] \ No newline at end of file diff --git a/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-warnings-by-default-ws-1-chromium-darwin.txt b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-warnings-by-default-ws-1-chromium-darwin.txt new file mode 100644 index 0000000000..e88bcaac49 --- /dev/null +++ b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-and-log-warnings-by-default-ws-1-chromium-darwin.txt @@ -0,0 +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\nWarning from compilation"] \ No newline at end of file diff --git a/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-when-the-client-logging-is-info-sockjs-1-chromium-darwin.txt b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-when-the-client-logging-is-info-sockjs-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-when-the-client-logging-is-info-sockjs-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-when-the-client-logging-is-info-ws-1-chromium-darwin.txt b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-when-the-client-logging-is-info-ws-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-when-the-client-logging-is-info-ws-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-when-the-client-logging-is-log-sockjs-1-chromium-darwin.txt b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-when-the-client-logging-is-log-sockjs-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-when-the-client-logging-is-log-sockjs-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-when-the-client-logging-is-log-ws-1-chromium-darwin.txt b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-when-the-client-logging-is-log-ws-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-when-the-client-logging-is-log-ws-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-when-the-client-logging-is-none-sockjs-1-chromium-darwin.txt b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-when-the-client-logging-is-none-sockjs-1-chromium-darwin.txt new file mode 100644 index 0000000000..fce753cf85 --- /dev/null +++ b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-when-the-client-logging-is-none-sockjs-1-chromium-darwin.txt @@ -0,0 +1 @@ +["Hey."] \ No newline at end of file diff --git a/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-when-the-client-logging-is-none-ws-1-chromium-darwin.txt b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-when-the-client-logging-is-none-ws-1-chromium-darwin.txt new file mode 100644 index 0000000000..fce753cf85 --- /dev/null +++ b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-when-the-client-logging-is-none-ws-1-chromium-darwin.txt @@ -0,0 +1 @@ +["Hey."] \ No newline at end of file diff --git a/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-when-the-client-logging-is-verbose-sockjs-1-chromium-darwin.txt b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-when-the-client-logging-is-verbose-sockjs-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-when-the-client-logging-is-verbose-sockjs-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-when-the-client-logging-is-verbose-ws-1-chromium-darwin.txt b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-when-the-client-logging-is-verbose-ws-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/logging.test.js-snapshots/logging-should-work-when-the-client-logging-is-verbose-ws-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/mime-types.test.js b/test/e2e-playwright/mime-types.test.js new file mode 100644 index 0000000000..02916a1327 --- /dev/null +++ b/test/e2e-playwright/mime-types.test.js @@ -0,0 +1,132 @@ +"use strict"; + +const webpack = require("webpack"); +const { test } = require("@playwright/test"); +const { describe } = require("@playwright/test"); +const { expect } = require("@playwright/test"); +const { beforeEach, afterEach } = require("@playwright/test"); +const Server = require("../../lib/Server"); +const config = require("../fixtures/mime-types-config/webpack.config"); +const port = require("../ports-map")["mime-types-option"]; + +describe("mimeTypes option", () => { + describe("as an object with a remapped type", () => { + let compiler; + let server; + let pageErrors; + let consoleMessages; + + beforeEach(async () => { + compiler = webpack(config); + + server = new Server( + { + devMiddleware: { + mimeTypes: { + js: "text/plain", + }, + }, + port, + }, + compiler, + ); + + await server.start(); + + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + await server.stop(); + }); + + test("should request file with different js mime type", async ({ + page, + }) => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://127.0.0.1:${port}/main.js`, { + waitUntil: "networkidle0", + }); + + expect(JSON.stringify(response.status())).toMatchSnapshot(); + + expect( + JSON.stringify(response.headers()["content-type"]), + ).toMatchSnapshot(); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + }); + + describe("as an object with a custom type", () => { + let compiler; + let server; + let pageErrors; + let consoleMessages; + + beforeEach(async () => { + compiler = webpack(config); + + server = new Server( + { + devMiddleware: { + mimeTypes: { + custom: "text/html", + }, + }, + port, + }, + compiler, + ); + + await server.start(); + + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + await server.stop(); + }); + + test("should request file with different js mime type", async ({ + page, + }) => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://127.0.0.1:${port}/file.custom`, { + waitUntil: "networkidle0", + }); + + expect(JSON.stringify(response.status())).toMatchSnapshot(); + + expect( + JSON.stringify(response.headers()["content-type"]), + ).toMatchSnapshot(); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + }); +}); diff --git a/test/e2e-playwright/mime-types.test.js-snapshots/mimeTypes-option-as-an-object-with-a-custom-type-should-request-file-with-different-js-mime-type-1-chromium-darwin.txt b/test/e2e-playwright/mime-types.test.js-snapshots/mimeTypes-option-as-an-object-with-a-custom-type-should-request-file-with-different-js-mime-type-1-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/mime-types.test.js-snapshots/mimeTypes-option-as-an-object-with-a-custom-type-should-request-file-with-different-js-mime-type-1-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/mime-types.test.js-snapshots/mimeTypes-option-as-an-object-with-a-custom-type-should-request-file-with-different-js-mime-type-2-chromium-darwin.txt b/test/e2e-playwright/mime-types.test.js-snapshots/mimeTypes-option-as-an-object-with-a-custom-type-should-request-file-with-different-js-mime-type-2-chromium-darwin.txt new file mode 100644 index 0000000000..7818ef0b11 --- /dev/null +++ b/test/e2e-playwright/mime-types.test.js-snapshots/mimeTypes-option-as-an-object-with-a-custom-type-should-request-file-with-different-js-mime-type-2-chromium-darwin.txt @@ -0,0 +1 @@ +"text/html; charset=utf-8" \ No newline at end of file diff --git a/test/e2e-playwright/mime-types.test.js-snapshots/mimeTypes-option-as-an-object-with-a-custom-type-should-request-file-with-different-js-mime-type-3-chromium-darwin.txt b/test/e2e-playwright/mime-types.test.js-snapshots/mimeTypes-option-as-an-object-with-a-custom-type-should-request-file-with-different-js-mime-type-3-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/mime-types.test.js-snapshots/mimeTypes-option-as-an-object-with-a-custom-type-should-request-file-with-different-js-mime-type-3-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/mime-types.test.js-snapshots/mimeTypes-option-as-an-object-with-a-custom-type-should-request-file-with-different-js-mime-type-4-chromium-darwin.txt b/test/e2e-playwright/mime-types.test.js-snapshots/mimeTypes-option-as-an-object-with-a-custom-type-should-request-file-with-different-js-mime-type-4-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/mime-types.test.js-snapshots/mimeTypes-option-as-an-object-with-a-custom-type-should-request-file-with-different-js-mime-type-4-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/mime-types.test.js-snapshots/mimeTypes-option-as-an-object-with-a-remapped-type-should-request-file-with-different-js-mime-type-1-chromium-darwin.txt b/test/e2e-playwright/mime-types.test.js-snapshots/mimeTypes-option-as-an-object-with-a-remapped-type-should-request-file-with-different-js-mime-type-1-chromium-darwin.txt new file mode 100644 index 0000000000..ae4ee13c08 --- /dev/null +++ b/test/e2e-playwright/mime-types.test.js-snapshots/mimeTypes-option-as-an-object-with-a-remapped-type-should-request-file-with-different-js-mime-type-1-chromium-darwin.txt @@ -0,0 +1 @@ +200 \ No newline at end of file diff --git a/test/e2e-playwright/mime-types.test.js-snapshots/mimeTypes-option-as-an-object-with-a-remapped-type-should-request-file-with-different-js-mime-type-2-chromium-darwin.txt b/test/e2e-playwright/mime-types.test.js-snapshots/mimeTypes-option-as-an-object-with-a-remapped-type-should-request-file-with-different-js-mime-type-2-chromium-darwin.txt new file mode 100644 index 0000000000..c97bba56aa --- /dev/null +++ b/test/e2e-playwright/mime-types.test.js-snapshots/mimeTypes-option-as-an-object-with-a-remapped-type-should-request-file-with-different-js-mime-type-2-chromium-darwin.txt @@ -0,0 +1 @@ +"text/plain; charset=utf-8" \ No newline at end of file diff --git a/test/e2e-playwright/mime-types.test.js-snapshots/mimeTypes-option-as-an-object-with-a-remapped-type-should-request-file-with-different-js-mime-type-3-chromium-darwin.txt b/test/e2e-playwright/mime-types.test.js-snapshots/mimeTypes-option-as-an-object-with-a-remapped-type-should-request-file-with-different-js-mime-type-3-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/mime-types.test.js-snapshots/mimeTypes-option-as-an-object-with-a-remapped-type-should-request-file-with-different-js-mime-type-3-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/mime-types.test.js-snapshots/mimeTypes-option-as-an-object-with-a-remapped-type-should-request-file-with-different-js-mime-type-4-chromium-darwin.txt b/test/e2e-playwright/mime-types.test.js-snapshots/mimeTypes-option-as-an-object-with-a-remapped-type-should-request-file-with-different-js-mime-type-4-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/mime-types.test.js-snapshots/mimeTypes-option-as-an-object-with-a-remapped-type-should-request-file-with-different-js-mime-type-4-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/module-federation.test.js b/test/e2e-playwright/module-federation.test.js new file mode 100644 index 0000000000..ad9da5f274 --- /dev/null +++ b/test/e2e-playwright/module-federation.test.js @@ -0,0 +1,279 @@ +"use strict"; + +const webpack = require("webpack"); +const requireFromString = require("require-from-string"); +const { test } = require("@playwright/test"); +const { describe } = require("@playwright/test"); +const { expect } = require("@playwright/test"); +const { beforeEach, afterEach } = require("@playwright/test"); +const Server = require("../../lib/Server"); +const simpleConfig = require("../fixtures/module-federation-config/webpack.config"); +const objectEntryConfig = require("../fixtures/module-federation-config/webpack.object-entry.config"); +const multiConfig = require("../fixtures/module-federation-config/webpack.multi.config"); +const port = require("../ports-map")["module-federation"]; +const pluginConfig = require("../fixtures/module-federation-config/webpack.plugin"); + +describe("Module federation", () => { + describe("should work with simple multi-entry config", () => { + let compiler; + let server; + let pageErrors; + let consoleMessages; + + beforeEach(async () => { + compiler = webpack(simpleConfig); + server = new Server({ port }, compiler); + + await server.start(); + + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + await server.stop(); + }); + + test("should use the last entry export", async ({ page }) => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://127.0.0.1:${port}/main.js`, { + waitUntil: "networkidle0", + }); + + const textContent = await response.text(); + + expect(textContent).toContain("entry1"); + + let exports; + + expect(() => { + exports = requireFromString(textContent); + }).not.toThrow(); + + expect(exports).toEqual("entry2"); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + }); + + describe("should work with object multi-entry config", () => { + let compiler; + let server; + let pageErrors; + let consoleMessages; + + beforeEach(async () => { + compiler = webpack(objectEntryConfig); + server = new Server({ port }, compiler); + + await server.start(); + + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + await server.stop(); + }); + + test("should use the last entry export", async ({ page }) => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://127.0.0.1:${port}/main.js`, { + waitUntil: "networkidle0", + }); + + const textContent = await response.text(); + + expect(textContent).toContain("entry1"); + + let exports; + + expect(() => { + exports = requireFromString(textContent); + }).not.toThrow(); + + expect(exports).toEqual("entry2"); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + + test("should support the named entry export", async ({ page }) => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://127.0.0.1:${port}/foo.js`, { + waitUntil: "networkidle0", + }); + + const textContent = await response.text(); + + expect(textContent).not.toContain("entry2"); + + let exports; + + expect(() => { + exports = requireFromString(textContent); + }).not.toThrow(); + + expect(exports).toEqual("entry1"); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + }); + + describe("should work with multi compiler config", () => { + let compiler; + let server; + let pageErrors; + let consoleMessages; + + beforeEach(async () => { + compiler = webpack(multiConfig); + server = new Server({ port }, compiler); + + await server.start(); + + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + await server.stop(); + }); + + test("should use the last entry export", async ({ page }) => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://127.0.0.1:${port}/main.js`, { + waitUntil: "networkidle0", + }); + + const textContent = await response.text(); + + expect(textContent).toContain("entry1"); + + let exports; + + expect(() => { + exports = requireFromString(textContent); + }).not.toThrow(); + + expect(exports).toEqual("entry2"); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + }); + + describe("should use plugin", () => { + let compiler; + let server; + let pageErrors; + let consoleMessages; + + beforeEach(async () => { + compiler = webpack(pluginConfig); + server = new Server({ port }, compiler); + + await server.start(); + + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + await server.stop(); + }); + + test("should contain hot script in remoteEntry.js", async ({ page }) => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto( + `http://127.0.0.1:${port}/remoteEntry.js`, + { + waitUntil: "networkidle0", + }, + ); + + const remoteEntryTextContent = await response.text(); + + expect(remoteEntryTextContent).toMatch(/webpack\/hot\/dev-server\.js/); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + + test("should contain hot script in main.js", async ({ page }) => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const response = await page.goto(`http://127.0.0.1:${port}/main.js`, { + waitUntil: "networkidle0", + }); + + const mainEntryTextContent = await response.text(); + + expect(mainEntryTextContent).toMatch(/webpack\/hot\/dev-server\.js/); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + }); +}); diff --git a/test/e2e-playwright/module-federation.test.js-snapshots/Module-federation-should-use-plugin-should-contain-hot-script-in-main-js-1-chromium-darwin.txt b/test/e2e-playwright/module-federation.test.js-snapshots/Module-federation-should-use-plugin-should-contain-hot-script-in-main-js-1-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/module-federation.test.js-snapshots/Module-federation-should-use-plugin-should-contain-hot-script-in-main-js-1-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/module-federation.test.js-snapshots/Module-federation-should-use-plugin-should-contain-hot-script-in-main-js-2-chromium-darwin.txt b/test/e2e-playwright/module-federation.test.js-snapshots/Module-federation-should-use-plugin-should-contain-hot-script-in-main-js-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/module-federation.test.js-snapshots/Module-federation-should-use-plugin-should-contain-hot-script-in-main-js-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/module-federation.test.js-snapshots/Module-federation-should-use-plugin-should-contain-hot-script-in-remoteEntry-js-1-chromium-darwin.txt b/test/e2e-playwright/module-federation.test.js-snapshots/Module-federation-should-use-plugin-should-contain-hot-script-in-remoteEntry-js-1-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/module-federation.test.js-snapshots/Module-federation-should-use-plugin-should-contain-hot-script-in-remoteEntry-js-1-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/module-federation.test.js-snapshots/Module-federation-should-use-plugin-should-contain-hot-script-in-remoteEntry-js-2-chromium-darwin.txt b/test/e2e-playwright/module-federation.test.js-snapshots/Module-federation-should-use-plugin-should-contain-hot-script-in-remoteEntry-js-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/module-federation.test.js-snapshots/Module-federation-should-use-plugin-should-contain-hot-script-in-remoteEntry-js-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/module-federation.test.js-snapshots/Module-federation-should-work-with-multi-compiler-config-should-use-the-last-entry-export-1-chromium-darwin.txt b/test/e2e-playwright/module-federation.test.js-snapshots/Module-federation-should-work-with-multi-compiler-config-should-use-the-last-entry-export-1-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/module-federation.test.js-snapshots/Module-federation-should-work-with-multi-compiler-config-should-use-the-last-entry-export-1-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/module-federation.test.js-snapshots/Module-federation-should-work-with-multi-compiler-config-should-use-the-last-entry-export-2-chromium-darwin.txt b/test/e2e-playwright/module-federation.test.js-snapshots/Module-federation-should-work-with-multi-compiler-config-should-use-the-last-entry-export-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/module-federation.test.js-snapshots/Module-federation-should-work-with-multi-compiler-config-should-use-the-last-entry-export-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/module-federation.test.js-snapshots/Module-federation-should-work-with-object-multi-entry-config-should-support-the-named-entry-export-1-chromium-darwin.txt b/test/e2e-playwright/module-federation.test.js-snapshots/Module-federation-should-work-with-object-multi-entry-config-should-support-the-named-entry-export-1-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/module-federation.test.js-snapshots/Module-federation-should-work-with-object-multi-entry-config-should-support-the-named-entry-export-1-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/module-federation.test.js-snapshots/Module-federation-should-work-with-object-multi-entry-config-should-support-the-named-entry-export-2-chromium-darwin.txt b/test/e2e-playwright/module-federation.test.js-snapshots/Module-federation-should-work-with-object-multi-entry-config-should-support-the-named-entry-export-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/module-federation.test.js-snapshots/Module-federation-should-work-with-object-multi-entry-config-should-support-the-named-entry-export-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/module-federation.test.js-snapshots/Module-federation-should-work-with-object-multi-entry-config-should-use-the-last-entry-export-1-chromium-darwin.txt b/test/e2e-playwright/module-federation.test.js-snapshots/Module-federation-should-work-with-object-multi-entry-config-should-use-the-last-entry-export-1-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/module-federation.test.js-snapshots/Module-federation-should-work-with-object-multi-entry-config-should-use-the-last-entry-export-1-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/module-federation.test.js-snapshots/Module-federation-should-work-with-object-multi-entry-config-should-use-the-last-entry-export-2-chromium-darwin.txt b/test/e2e-playwright/module-federation.test.js-snapshots/Module-federation-should-work-with-object-multi-entry-config-should-use-the-last-entry-export-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/module-federation.test.js-snapshots/Module-federation-should-work-with-object-multi-entry-config-should-use-the-last-entry-export-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/module-federation.test.js-snapshots/Module-federation-should-work-with-simple-multi-entry-config-should-use-the-last-entry-export-1-chromium-darwin.txt b/test/e2e-playwright/module-federation.test.js-snapshots/Module-federation-should-work-with-simple-multi-entry-config-should-use-the-last-entry-export-1-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/module-federation.test.js-snapshots/Module-federation-should-work-with-simple-multi-entry-config-should-use-the-last-entry-export-1-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/module-federation.test.js-snapshots/Module-federation-should-work-with-simple-multi-entry-config-should-use-the-last-entry-export-2-chromium-darwin.txt b/test/e2e-playwright/module-federation.test.js-snapshots/Module-federation-should-work-with-simple-multi-entry-config-should-use-the-last-entry-export-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/module-federation.test.js-snapshots/Module-federation-should-work-with-simple-multi-entry-config-should-use-the-last-entry-export-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/multi-compiler.test.js b/test/e2e-playwright/multi-compiler.test.js new file mode 100644 index 0000000000..e3686c1e19 --- /dev/null +++ b/test/e2e-playwright/multi-compiler.test.js @@ -0,0 +1,769 @@ +"use strict"; + +const path = require("path"); +const fs = require("graceful-fs"); +const webpack = require("webpack"); +const { test } = require("@playwright/test"); +const { describe } = require("@playwright/test"); +const { expect } = require("@playwright/test"); +const Server = require("../../lib/Server"); +const oneWebTargetConfiguration = require("../fixtures/multi-compiler-one-configuration/webpack.config"); +const twoWebTargetConfiguration = require("../fixtures/multi-compiler-two-configurations/webpack.config"); +const universalConfiguration = require("../fixtures/universal-compiler-config/webpack.config"); +const port = require("../ports-map")["multi-compiler"]; + +describe("multi compiler", () => { + test(`should work with one web target configuration and do nothing`, async ({ + page, + }) => { + const compiler = webpack(oneWebTargetConfiguration); + const devServerOptions = { + port, + }; + const server = new Server(devServerOptions, compiler); + + await server.start(); + + try { + const pageErrors = []; + const consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message.text()); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://127.0.0.1:${port}/`, { + waitUntil: "networkidle0", + }); + + expect(JSON.stringify(consoleMessages)).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + await server.stop(); + } + }); + + test(`should work with web target configurations and do nothing`, async ({ + page, + }) => { + const compiler = webpack(twoWebTargetConfiguration); + const devServerOptions = { + port, + }; + + const server = new Server(devServerOptions, compiler); + + await server.start(); + + try { + let pageErrors = []; + let consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message.text()); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://127.0.0.1:${port}/one-main.html`, { + waitUntil: "networkidle0", + }); + + expect(JSON.stringify(consoleMessages)).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + + pageErrors = []; + consoleMessages = []; + + await page.goto(`http://127.0.0.1:${port}/two-main.html`, { + waitUntil: "networkidle0", + }); + + expect(JSON.stringify(consoleMessages)).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + await server.stop(); + } + }); + + test(`should work with web target configurations when hot and live reloads are enabled, and do hot reload by default when changing own entries`, async ({ + page, + }) => { + const compiler = webpack(twoWebTargetConfiguration); + const devServerOptions = { + port, + hot: true, + liveReload: true, + }; + const pathToOneEntry = path.resolve( + __dirname, + "../fixtures/multi-compiler-two-configurations/one.js", + ); + const originalOneEntryContent = fs.readFileSync(pathToOneEntry); + const pathToTwoEntry = path.resolve( + __dirname, + "../fixtures/multi-compiler-two-configurations/two.js", + ); + const originalTwoEntryContent = fs.readFileSync(pathToTwoEntry); + + const server = new Server(devServerOptions, compiler); + + await server.start(); + + try { + let pageErrors = []; + let consoleMessages = []; + + page + .on("console", (message) => { + let text = message.text(); + + if (/Error: Aborted because/.test(text)) { + const splittedText = text.split("\n"); + + text = `${splittedText[0]}\n${splittedText[1]}\n `; + } + + consoleMessages.push(text); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://127.0.0.1:${port}/one-main.html`, { + waitUntil: "networkidle0", + }); + + fs.writeFileSync(pathToOneEntry, `${originalOneEntryContent}// comment`); + + await page.waitForNavigation({ waitUntil: "networkidle0" }); + + expect(JSON.stringify(consoleMessages)).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + + pageErrors = []; + consoleMessages = []; + + await page.goto(`http://127.0.0.1:${port}/two-main.html`, { + waitUntil: "networkidle0", + }); + + fs.writeFileSync(pathToTwoEntry, `${originalTwoEntryContent}// comment`); + + await page.waitForNavigation({ waitUntil: "networkidle0" }); + + expect(JSON.stringify(consoleMessages)).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + await server.stop(); + + fs.writeFileSync(pathToOneEntry, originalOneEntryContent); + fs.writeFileSync(pathToTwoEntry, originalTwoEntryContent); + } + }); + + test(`should work with web target configurations when only hot reload is enabled, and do hot reload when changing own entries`, async ({ + page, + }) => { + const compiler = webpack(twoWebTargetConfiguration); + const devServerOptions = { + port, + hot: true, + liveReload: false, + }; + const pathToOneEntry = path.resolve( + __dirname, + "../fixtures/multi-compiler-two-configurations/one.js", + ); + const originalOneEntryContent = fs.readFileSync(pathToOneEntry); + const pathToTwoEntry = path.resolve( + __dirname, + "../fixtures/multi-compiler-two-configurations/two.js", + ); + const originalTwoEntryContent = fs.readFileSync(pathToTwoEntry); + + const server = new Server(devServerOptions, compiler); + + await server.start(); + + try { + let pageErrors = []; + let consoleMessages = []; + + page + .on("console", (message) => { + let text = message.text(); + + if (/Error: Aborted because/.test(text)) { + const splittedText = text.split("\n"); + + text = `${splittedText[0]}\n${splittedText[1]}\n `; + } + + consoleMessages.push(text); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://127.0.0.1:${port}/one-main.html`, { + waitUntil: "networkidle0", + }); + + fs.writeFileSync(pathToOneEntry, `${originalOneEntryContent}// comment`); + + await page.waitForNavigation({ waitUntil: "networkidle0" }); + + expect(JSON.stringify(consoleMessages)).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + + pageErrors = []; + consoleMessages = []; + + await page.goto(`http://127.0.0.1:${port}/two-main.html`, { + waitUntil: "networkidle0", + }); + + fs.writeFileSync(pathToTwoEntry, `${originalTwoEntryContent}// comment`); + + await page.waitForNavigation({ waitUntil: "networkidle0" }); + + expect(JSON.stringify(consoleMessages)).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + await server.stop(); + + fs.writeFileSync(pathToOneEntry, originalOneEntryContent); + fs.writeFileSync(pathToTwoEntry, originalTwoEntryContent); + } + }); + + test(`should work with web target configurations when only live reload is enabled, and do live reload when changing own entries`, async ({ + page, + }) => { + const compiler = webpack(twoWebTargetConfiguration); + const devServerOptions = { + port, + hot: false, + liveReload: true, + }; + const pathToOneEntry = path.resolve( + __dirname, + "../fixtures/multi-compiler-two-configurations/one.js", + ); + const originalOneEntryContent = fs.readFileSync(pathToOneEntry); + const pathToTwoEntry = path.resolve( + __dirname, + "../fixtures/multi-compiler-two-configurations/two.js", + ); + const originalTwoEntryContent = fs.readFileSync(pathToTwoEntry); + + const server = new Server(devServerOptions, compiler); + + await server.start(); + + try { + let pageErrors = []; + let consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message.text()); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://127.0.0.1:${port}/one-main.html`, { + waitUntil: "networkidle0", + }); + + fs.writeFileSync(pathToOneEntry, `${originalOneEntryContent}// comment`); + + await page.waitForNavigation({ waitUntil: "networkidle0" }); + + expect(JSON.stringify(consoleMessages)).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + + pageErrors = []; + consoleMessages = []; + + await page.goto(`http://127.0.0.1:${port}/two-main.html`, { + waitUntil: "networkidle0", + }); + + fs.writeFileSync(pathToTwoEntry, `${originalTwoEntryContent}// comment`); + + await page.waitForNavigation({ waitUntil: "networkidle0" }); + + expect(JSON.stringify(consoleMessages)).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + await server.stop(); + + fs.writeFileSync(pathToOneEntry, originalOneEntryContent); + fs.writeFileSync(pathToTwoEntry, originalTwoEntryContent); + } + }); + + test(`should work with web target configurations when only live reload is enabled and do live reload when changing other entries`, async ({ + page, + }) => { + const compiler = webpack(twoWebTargetConfiguration); + const devServerOptions = { + port, + hot: false, + liveReload: true, + }; + const pathToOneEntry = path.resolve( + __dirname, + "../fixtures/multi-compiler-two-configurations/one.js", + ); + const originalOneEntryContent = fs.readFileSync(pathToOneEntry); + const pathToTwoEntry = path.resolve( + __dirname, + "../fixtures/multi-compiler-two-configurations/two.js", + ); + const originalTwoEntryContent = fs.readFileSync(pathToTwoEntry); + + const server = new Server(devServerOptions, compiler); + + await server.start(); + + try { + let pageErrors = []; + let consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message.text()); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://127.0.0.1:${port}/one-main.html`, { + waitUntil: "networkidle0", + }); + + fs.writeFileSync(pathToTwoEntry, `${originalTwoEntryContent}// comment`); + + await page.waitForNavigation({ waitUntil: "networkidle0" }); + + expect(JSON.stringify(consoleMessages)).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + + pageErrors = []; + consoleMessages = []; + + await page.goto(`http://127.0.0.1:${port}/two-main.html`, { + waitUntil: "networkidle0", + }); + + fs.writeFileSync(pathToOneEntry, `${originalOneEntryContent}// comment`); + + await page.waitForNavigation({ waitUntil: "networkidle0" }); + + expect(JSON.stringify(consoleMessages)).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + await server.stop(); + + fs.writeFileSync(pathToOneEntry, originalOneEntryContent); + fs.writeFileSync(pathToTwoEntry, originalTwoEntryContent); + } + }); + + test("should work with universal configuration and do nothing", async ({ + page, + }) => { + const compiler = webpack(universalConfiguration); + const devServerOptions = { + port, + }; + const server = new Server(devServerOptions, compiler); + + await server.start(); + + const pageErrors = []; + const consoleMessages = []; + try { + const serverResponse = await page.goto( + `http://127.0.0.1:${port}/server.js`, + { + waitUntil: "networkidle0", + }, + ); + + const serverResponseText = await serverResponse.text(); + + expect(serverResponseText).toContain("Hello from the server"); + expect(serverResponseText).not.toContain("WebsocketServer"); + + page + .on("console", (message) => { + consoleMessages.push(message.text()); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://127.0.0.1:${port}/browser.html`, { + waitUntil: "networkidle0", + }); + } catch (error) { + throw error; + } finally { + await server.stop(); + } + + expect(JSON.stringify(consoleMessages)).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + }); + + test(`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 ({ + page, + }) => { + const compiler = webpack(universalConfiguration); + const devServerOptions = { + port, + hot: true, + liveReload: true, + }; + const pathToBrowserEntry = path.resolve( + __dirname, + "../fixtures/universal-compiler-config/browser.js", + ); + const originalBrowserEntryContent = fs.readFileSync(pathToBrowserEntry); + const pathToServerEntry = path.resolve( + __dirname, + "../fixtures/universal-compiler-config/server.js", + ); + const originalServerEntryContent = fs.readFileSync(pathToServerEntry); + + const server = new Server(devServerOptions, compiler); + + await server.start(); + + try { + const serverResponse = await page.goto( + `http://127.0.0.1:${port}/server.js`, + { + waitUntil: "networkidle0", + }, + ); + + const serverResponseText = await serverResponse.text(); + + expect(serverResponseText).toContain("Hello from the server"); + expect(serverResponseText).not.toContain("WebsocketServer"); + + const pageErrors = []; + const consoleMessages = []; + + page + .on("console", (message) => { + let text = message.text(); + + if (/Error: Aborted because/.test(text)) { + const splittedText = text.split("\n"); + + text = `${splittedText[0]}\n${splittedText[1]}\n `; + } + + consoleMessages.push(text); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://127.0.0.1:${port}/browser.html`, { + waitUntil: "networkidle0", + }); + + fs.writeFileSync( + pathToBrowserEntry, + `${originalBrowserEntryContent}// comment`, + ); + + await page.waitForNavigation({ waitUntil: "networkidle0" }); + + expect(JSON.stringify(consoleMessages)).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + await server.stop(); + + fs.writeFileSync(pathToBrowserEntry, originalBrowserEntryContent); + fs.writeFileSync(pathToServerEntry, originalServerEntryContent); + } + }); + + test(`should work with universal configuration when only hot reload is enabled, and do hot reload for browser compiler when browser entry changed`, async ({ + page, + }) => { + const compiler = webpack(universalConfiguration); + const devServerOptions = { + port, + hot: true, + liveReload: false, + }; + const pathToBrowserEntry = path.resolve( + __dirname, + "../fixtures/universal-compiler-config/browser.js", + ); + const originalBrowserEntryContent = fs.readFileSync(pathToBrowserEntry); + + const server = new Server(devServerOptions, compiler); + + await server.start(); + + try { + const serverResponse = await page.goto( + `http://127.0.0.1:${port}/server.js`, + { + waitUntil: "networkidle0", + }, + ); + + const serverResponseText = await serverResponse.text(); + + expect(serverResponseText).toContain("Hello from the server"); + expect(serverResponseText).not.toContain("WebsocketServer"); + + const pageErrors = []; + const consoleMessages = []; + + page + .on("console", (message) => { + let text = message.text(); + + if (/Error: Aborted because/.test(text)) { + const splittedText = text.split("\n"); + + text = `${splittedText[0]}\n${splittedText[1]}\n `; + } + + consoleMessages.push(text); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://127.0.0.1:${port}/browser.html`, { + waitUntil: "networkidle0", + }); + + fs.writeFileSync( + pathToBrowserEntry, + `${originalBrowserEntryContent}// comment`, + ); + + await page.waitForNavigation({ waitUntil: "networkidle0" }); + + expect(JSON.stringify(consoleMessages)).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + await server.stop(); + + fs.writeFileSync(pathToBrowserEntry, originalBrowserEntryContent); + } + }); + + test(`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 ({ + page, + }) => { + const compiler = webpack(universalConfiguration); + const devServerOptions = { + port, + hot: false, + liveReload: true, + }; + const pathToBrowserEntry = path.resolve( + __dirname, + "../fixtures/universal-compiler-config/browser.js", + ); + const originalBrowserEntryContent = fs.readFileSync(pathToBrowserEntry); + const pathToServerEntry = path.resolve( + __dirname, + "../fixtures/universal-compiler-config/server.js", + ); + const originalServerEntryContent = fs.readFileSync(pathToServerEntry); + + const server = new Server(devServerOptions, compiler); + + await server.start(); + + try { + const serverResponse = await page.goto( + `http://127.0.0.1:${port}/server.js`, + { + waitUntil: "networkidle0", + }, + ); + + const serverResponseText = await serverResponse.text(); + + expect(serverResponseText).toContain("Hello from the server"); + expect(serverResponseText).not.toContain("WebsocketServer"); + + let pageErrors = []; + let consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message.text()); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://127.0.0.1:${port}/browser.html`, { + waitUntil: "networkidle0", + }); + + fs.writeFileSync( + pathToBrowserEntry, + `${originalBrowserEntryContent}// comment`, + ); + + await page.waitForNavigation({ waitUntil: "networkidle0" }); + + expect(JSON.stringify(consoleMessages)).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + + pageErrors = []; + consoleMessages = []; + + await page.goto(`http://127.0.0.1:${port}/browser.html`, { + waitUntil: "networkidle0", + }); + + fs.writeFileSync( + pathToServerEntry, + `${originalServerEntryContent}// comment`, + ); + + await page.waitForNavigation({ waitUntil: "networkidle0" }); + + expect(JSON.stringify(consoleMessages)).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + await server.stop(); + + fs.writeFileSync(pathToBrowserEntry, originalBrowserEntryContent); + fs.writeFileSync(pathToServerEntry, originalServerEntryContent); + } + }); + + test(`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 ({ + page, + }) => { + const compiler = webpack(universalConfiguration); + const devServerOptions = { + port, + hot: false, + liveReload: true, + }; + const pathToBrowserEntry = path.resolve( + __dirname, + "../fixtures/universal-compiler-config/browser.js", + ); + const originalBrowserEntryContent = fs.readFileSync(pathToBrowserEntry); + const pathToServerEntry = path.resolve( + __dirname, + "../fixtures/universal-compiler-config/server.js", + ); + const originalServerEntryContent = fs.readFileSync(pathToServerEntry); + + const server = new Server(devServerOptions, compiler); + + await server.start(); + + try { + const serverResponse = await page.goto( + `http://127.0.0.1:${port}/server.js`, + { + waitUntil: "networkidle0", + }, + ); + + const serverResponseText = await serverResponse.text(); + + expect(serverResponseText).toContain("Hello from the server"); + expect(serverResponseText).not.toContain("WebsocketServer"); + + let pageErrors = []; + let consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message.text()); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://127.0.0.1:${port}/browser.html`, { + waitUntil: "networkidle0", + }); + + fs.writeFileSync( + pathToServerEntry, + `${originalServerEntryContent}// comment`, + ); + + await page.waitForNavigation({ waitUntil: "networkidle0" }); + + expect(JSON.stringify(consoleMessages)).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + + pageErrors = []; + consoleMessages = []; + + await page.goto(`http://127.0.0.1:${port}/browser.html`, { + waitUntil: "networkidle0", + }); + + fs.writeFileSync( + pathToBrowserEntry, + `${originalBrowserEntryContent}// comment`, + ); + + await page.waitForNavigation({ waitUntil: "networkidle0" }); + + expect(JSON.stringify(consoleMessages)).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + await server.stop(); + + fs.writeFileSync(pathToBrowserEntry, originalBrowserEntryContent); + fs.writeFileSync(pathToServerEntry, originalServerEntryContent); + } + }); +}); diff --git a/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-one-web-target-configuration-and-do-nothing-1-chromium-darwin.txt b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-one-web-target-configuration-and-do-nothing-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-one-web-target-configuration-and-do-nothing-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-one-web-target-configuration-and-do-nothing-2-chromium-darwin.txt b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-one-web-target-configuration-and-do-nothing-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-one-web-target-configuration-and-do-nothing-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-conf-2a901-iler-when-changing-server-and-browser-entries-3-chromium-darwin.txt b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-conf-2a901-iler-when-changing-server-and-browser-entries-3-chromium-darwin.txt new file mode 100644 index 0000000000..33739f87f2 --- /dev/null +++ b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-conf-2a901-iler-when-changing-server-and-browser-entries-3-chromium-darwin.txt @@ -0,0 +1 @@ +["[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.","Hello from the browser","[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.","Hello from the browser"] \ No newline at end of file diff --git a/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-conf-3e000-iler-when-changing-browser-and-server-entries-4-chromium-darwin.txt b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-conf-3e000-iler-when-changing-browser-and-server-entries-4-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-conf-3e000-iler-when-changing-browser-and-server-entries-4-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-conf-40d3e-r-browser-compiler-when-browser-entry-changed-1-chromium-darwin.txt b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-conf-40d3e-r-browser-compiler-when-browser-entry-changed-1-chromium-darwin.txt new file mode 100644 index 0000000000..0cb55e68f8 --- /dev/null +++ b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-conf-40d3e-r-browser-compiler-when-browser-entry-changed-1-chromium-darwin.txt @@ -0,0 +1 @@ +["[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading disabled, Progress disabled, Overlay enabled.","[HMR] Waiting for update signal from WDS...","Hello from the browser","[webpack-dev-server] App updated. Recompiling...","[webpack-dev-server] App hot update...","[HMR] Checking for updates on the server...","[HMR] Cannot apply update. Need to do a full reload!","[HMR] Error: Aborted because ./browser.js is not accepted\nUpdate propagation: ./browser.js\n ","[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading disabled, Progress disabled, Overlay enabled.","[HMR] Waiting for update signal from WDS...","Hello from the browser"] \ No newline at end of file diff --git a/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-conf-4663e-iler-when-changing-server-and-browser-entries-1-chromium-darwin.txt b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-conf-4663e-iler-when-changing-server-and-browser-entries-1-chromium-darwin.txt new file mode 100644 index 0000000000..33739f87f2 --- /dev/null +++ b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-conf-4663e-iler-when-changing-server-and-browser-entries-1-chromium-darwin.txt @@ -0,0 +1 @@ +["[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.","Hello from the browser","[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.","Hello from the browser"] \ No newline at end of file diff --git a/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-conf-5786e-iler-when-changing-browser-and-server-entries-2-chromium-darwin.txt b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-conf-5786e-iler-when-changing-browser-and-server-entries-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-conf-5786e-iler-when-changing-browser-and-server-entries-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-conf-922e7-iler-when-changing-browser-and-server-entries-1-chromium-darwin.txt b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-conf-922e7-iler-when-changing-browser-and-server-entries-1-chromium-darwin.txt new file mode 100644 index 0000000000..33739f87f2 --- /dev/null +++ b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-conf-922e7-iler-when-changing-browser-and-server-entries-1-chromium-darwin.txt @@ -0,0 +1 @@ +["[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.","Hello from the browser","[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.","Hello from the browser"] \ No newline at end of file diff --git a/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-conf-9410f-iler-when-changing-server-and-browser-entries-4-chromium-darwin.txt b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-conf-9410f-iler-when-changing-server-and-browser-entries-4-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-conf-9410f-iler-when-changing-server-and-browser-entries-4-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-conf-9d363-ompiler-by-default-when-browser-entry-changed-2-chromium-darwin.txt b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-conf-9d363-ompiler-by-default-when-browser-entry-changed-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-conf-9d363-ompiler-by-default-when-browser-entry-changed-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-conf-a918f-ompiler-by-default-when-browser-entry-changed-1-chromium-darwin.txt b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-conf-a918f-ompiler-by-default-when-browser-entry-changed-1-chromium-darwin.txt new file mode 100644 index 0000000000..c42c621f1a --- /dev/null +++ b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-conf-a918f-ompiler-by-default-when-browser-entry-changed-1-chromium-darwin.txt @@ -0,0 +1 @@ +["[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.","[HMR] Waiting for update signal from WDS...","Hello from the browser","[webpack-dev-server] App updated. Recompiling...","[webpack-dev-server] App hot update...","[HMR] Checking for updates on the server...","[HMR] Cannot apply update. Need to do a full reload!","[HMR] Error: Aborted because ./browser.js is not accepted\nUpdate propagation: ./browser.js\n ","[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.","[HMR] Waiting for update signal from WDS...","Hello from the browser"] \ No newline at end of file diff --git a/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-conf-c0518-r-browser-compiler-when-browser-entry-changed-2-chromium-darwin.txt b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-conf-c0518-r-browser-compiler-when-browser-entry-changed-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-conf-c0518-r-browser-compiler-when-browser-entry-changed-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-conf-d44d3-iler-when-changing-server-and-browser-entries-2-chromium-darwin.txt b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-conf-d44d3-iler-when-changing-server-and-browser-entries-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-conf-d44d3-iler-when-changing-server-and-browser-entries-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-conf-f365f-iler-when-changing-browser-and-server-entries-3-chromium-darwin.txt b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-conf-f365f-iler-when-changing-browser-and-server-entries-3-chromium-darwin.txt new file mode 100644 index 0000000000..33739f87f2 --- /dev/null +++ b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-conf-f365f-iler-when-changing-browser-and-server-entries-3-chromium-darwin.txt @@ -0,0 +1 @@ +["[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.","Hello from the browser","[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.","Hello from the browser"] \ No newline at end of file diff --git a/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-configuration-and-do-nothing-1-chromium-darwin.txt b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-configuration-and-do-nothing-1-chromium-darwin.txt new file mode 100644 index 0000000000..646ad8f3b9 --- /dev/null +++ b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-configuration-and-do-nothing-1-chromium-darwin.txt @@ -0,0 +1 @@ +["[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.","[HMR] Waiting for update signal from WDS...","Hello from the browser"] \ No newline at end of file diff --git a/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-configuration-and-do-nothing-2-chromium-darwin.txt b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-configuration-and-do-nothing-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-universal-configuration-and-do-nothing-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-02616--and-do-live-reload-when-changing-own-entries-1-chromium-darwin.txt b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-02616--and-do-live-reload-when-changing-own-entries-1-chromium-darwin.txt new file mode 100644 index 0000000000..330dec4a5c --- /dev/null +++ b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-02616--and-do-live-reload-when-changing-own-entries-1-chromium-darwin.txt @@ -0,0 +1 @@ +["[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.","one","[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.","one"] \ No newline at end of file diff --git a/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-2882d--and-do-hot-reload-when-changing-own-entries-1-chromium-darwin.txt b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-2882d--and-do-hot-reload-when-changing-own-entries-1-chromium-darwin.txt new file mode 100644 index 0000000000..36d014361b --- /dev/null +++ b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-2882d--and-do-hot-reload-when-changing-own-entries-1-chromium-darwin.txt @@ -0,0 +1 @@ +["[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading disabled, Progress disabled, Overlay enabled.","[HMR] Waiting for update signal from WDS...","one","[webpack-dev-server] App updated. Recompiling...","[webpack-dev-server] App hot update...","[HMR] Checking for updates on the server...","[HMR] Cannot apply update. Need to do a full reload!","[HMR] Error: Aborted because ./one.js is not accepted\nUpdate propagation: ./one.js\n ","[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading disabled, Progress disabled, Overlay enabled.","[HMR] Waiting for update signal from WDS...","one"] \ No newline at end of file diff --git a/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-5fabc--and-do-hot-reload-when-changing-own-entries-3-chromium-darwin.txt b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-5fabc--and-do-hot-reload-when-changing-own-entries-3-chromium-darwin.txt new file mode 100644 index 0000000000..147cc33896 --- /dev/null +++ b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-5fabc--and-do-hot-reload-when-changing-own-entries-3-chromium-darwin.txt @@ -0,0 +1 @@ +["[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading disabled, Progress disabled, Overlay enabled.","[HMR] Waiting for update signal from WDS...","two","[webpack-dev-server] App updated. Recompiling...","[webpack-dev-server] App hot update...","[HMR] Checking for updates on the server...","[HMR] Cannot apply update. Need to do a full reload!","[HMR] Error: Aborted because ./two.js is not accepted\nUpdate propagation: ./two.js\n ","[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading disabled, Progress disabled, Overlay enabled.","[HMR] Waiting for update signal from WDS...","two"] \ No newline at end of file diff --git a/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-74f3b-t-reload-by-default-when-changing-own-entries-1-chromium-darwin.txt b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-74f3b-t-reload-by-default-when-changing-own-entries-1-chromium-darwin.txt new file mode 100644 index 0000000000..a1c29d6025 --- /dev/null +++ b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-74f3b-t-reload-by-default-when-changing-own-entries-1-chromium-darwin.txt @@ -0,0 +1 @@ +["[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.","[HMR] Waiting for update signal from WDS...","one","[webpack-dev-server] App updated. Recompiling...","[webpack-dev-server] App hot update...","[HMR] Checking for updates on the server...","[HMR] Cannot apply update. Need to do a full reload!","[HMR] Error: Aborted because ./one.js is not accepted\nUpdate propagation: ./one.js\n ","[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.","[HMR] Waiting for update signal from WDS...","one"] \ No newline at end of file diff --git a/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-75bd6--and-do-live-reload-when-changing-own-entries-4-chromium-darwin.txt b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-75bd6--and-do-live-reload-when-changing-own-entries-4-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-75bd6--and-do-live-reload-when-changing-own-entries-4-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-8e6b2-t-reload-by-default-when-changing-own-entries-2-chromium-darwin.txt b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-8e6b2-t-reload-by-default-when-changing-own-entries-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-8e6b2-t-reload-by-default-when-changing-own-entries-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-984de--and-do-live-reload-when-changing-own-entries-2-chromium-darwin.txt b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-984de--and-do-live-reload-when-changing-own-entries-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-984de--and-do-live-reload-when-changing-own-entries-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-a3bfc--and-do-live-reload-when-changing-own-entries-3-chromium-darwin.txt b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-a3bfc--and-do-live-reload-when-changing-own-entries-3-chromium-darwin.txt new file mode 100644 index 0000000000..3b27f7cbfc --- /dev/null +++ b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-a3bfc--and-do-live-reload-when-changing-own-entries-3-chromium-darwin.txt @@ -0,0 +1 @@ +["[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.","two","[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.","two"] \ No newline at end of file diff --git a/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-a682a-nd-do-live-reload-when-changing-other-entries-4-chromium-darwin.txt b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-a682a-nd-do-live-reload-when-changing-other-entries-4-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-a682a-nd-do-live-reload-when-changing-other-entries-4-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-b9900-t-reload-by-default-when-changing-own-entries-3-chromium-darwin.txt b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-b9900-t-reload-by-default-when-changing-own-entries-3-chromium-darwin.txt new file mode 100644 index 0000000000..7808570b99 --- /dev/null +++ b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-b9900-t-reload-by-default-when-changing-own-entries-3-chromium-darwin.txt @@ -0,0 +1 @@ +["[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.","[HMR] Waiting for update signal from WDS...","two","[webpack-dev-server] App updated. Recompiling...","[webpack-dev-server] App hot update...","[HMR] Checking for updates on the server...","[HMR] Cannot apply update. Need to do a full reload!","[HMR] Error: Aborted because ./two.js is not accepted\nUpdate propagation: ./two.js\n ","[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.","[HMR] Waiting for update signal from WDS...","two"] \ No newline at end of file diff --git a/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-d2439-nd-do-live-reload-when-changing-other-entries-1-chromium-darwin.txt b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-d2439-nd-do-live-reload-when-changing-other-entries-1-chromium-darwin.txt new file mode 100644 index 0000000000..330dec4a5c --- /dev/null +++ b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-d2439-nd-do-live-reload-when-changing-other-entries-1-chromium-darwin.txt @@ -0,0 +1 @@ +["[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.","one","[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.","one"] \ No newline at end of file diff --git a/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-e2618--and-do-hot-reload-when-changing-own-entries-2-chromium-darwin.txt b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-e2618--and-do-hot-reload-when-changing-own-entries-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-e2618--and-do-hot-reload-when-changing-own-entries-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-e94da-nd-do-live-reload-when-changing-other-entries-3-chromium-darwin.txt b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-e94da-nd-do-live-reload-when-changing-other-entries-3-chromium-darwin.txt new file mode 100644 index 0000000000..3b27f7cbfc --- /dev/null +++ b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-e94da-nd-do-live-reload-when-changing-other-entries-3-chromium-darwin.txt @@ -0,0 +1 @@ +["[webpack-dev-server] Server started: Hot Module Replacement disabled, Live Reloading enabled, Progress disabled, Overlay enabled.","two","[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.","two"] \ No newline at end of file diff --git a/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-ecb85--and-do-hot-reload-when-changing-own-entries-4-chromium-darwin.txt b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-ecb85--and-do-hot-reload-when-changing-own-entries-4-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-ecb85--and-do-hot-reload-when-changing-own-entries-4-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-eccbf-nd-do-live-reload-when-changing-other-entries-2-chromium-darwin.txt b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-eccbf-nd-do-live-reload-when-changing-other-entries-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-eccbf-nd-do-live-reload-when-changing-other-entries-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-fbe64-t-reload-by-default-when-changing-own-entries-4-chromium-darwin.txt b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-fbe64-t-reload-by-default-when-changing-own-entries-4-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-con-fbe64-t-reload-by-default-when-changing-own-entries-4-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-configurations-and-do-nothing-1-chromium-darwin.txt b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-configurations-and-do-nothing-1-chromium-darwin.txt new file mode 100644 index 0000000000..37e6ef978b --- /dev/null +++ b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-configurations-and-do-nothing-1-chromium-darwin.txt @@ -0,0 +1 @@ +["[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.","[HMR] Waiting for update signal from WDS...","one"] \ No newline at end of file diff --git a/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-configurations-and-do-nothing-2-chromium-darwin.txt b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-configurations-and-do-nothing-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-configurations-and-do-nothing-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-configurations-and-do-nothing-3-chromium-darwin.txt b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-configurations-and-do-nothing-3-chromium-darwin.txt new file mode 100644 index 0000000000..4f3ea4620e --- /dev/null +++ b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-configurations-and-do-nothing-3-chromium-darwin.txt @@ -0,0 +1 @@ +["[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.","[HMR] Waiting for update signal from WDS...","two"] \ No newline at end of file diff --git a/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-configurations-and-do-nothing-4-chromium-darwin.txt b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-configurations-and-do-nothing-4-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/multi-compiler.test.js-snapshots/multi-compiler-should-work-with-web-target-configurations-and-do-nothing-4-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/progress-refactored.test.js b/test/e2e-playwright/progress-refactored.test.js new file mode 100644 index 0000000000..9c4b6dda05 --- /dev/null +++ b/test/e2e-playwright/progress-refactored.test.js @@ -0,0 +1,93 @@ +"use strict"; + +const path = require("path"); +const { test } = require("@playwright/test"); +const { describe } = require("@playwright/test"); +const { expect } = require("@playwright/test"); +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; + +const cssFilePath = path.resolve( + __dirname, + "../fixtures/reload-config-2/main.css", +); + +describe("progress", () => { + test("should work and log progress in a browser console", async () => { + fs.writeFileSync(cssFilePath, "body { background-color: rgb(0, 0, 255); }"); + + const compiler = webpack(reloadConfig); + const devServerOptions = { + port, + client: { + progress: true, + }, + }; + const server = new Server(devServerOptions, compiler); + + await server.start(); + + try { + const { page, browser } = await runBrowser(); + + const consoleMessages = []; + + try { + let doHotUpdate = false; + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("request", (interceptedRequest) => { + if (interceptedRequest.isInterceptResolutionHandled()) return; + + if (/\.hot-update\.(json|js)$/.test(interceptedRequest.url())) { + doHotUpdate = true; + } + }); + + await page.goto(`http://localhost:${port}/`, { + waitUntil: "networkidle0", + }); + + fs.writeFileSync( + cssFilePath, + "body { background-color: rgb(255, 0, 0); }", + ); + + await new Promise((resolve) => { + const timer = setInterval(() => { + if (doHotUpdate) { + clearInterval(timer); + + resolve(); + } + }, 100); + }); + } catch (error) { + throw error; + } finally { + await browser.close(); + } + + const progressConsoleMessage = consoleMessages.filter((message) => + /^\[webpack-dev-server\] (\[[a-zA-Z]+\] )?[0-9]{1,3}% - /.test( + message.text(), + ), + ); + + expect(progressConsoleMessage.length > 0).toBe(true); + } catch (error) { + throw error; + } finally { + fs.unlinkSync(cssFilePath); + + await server.stop(); + } + }); +}); diff --git a/test/e2e-playwright/range-header.test.js b/test/e2e-playwright/range-header.test.js new file mode 100644 index 0000000000..df71274986 --- /dev/null +++ b/test/e2e-playwright/range-header.test.js @@ -0,0 +1,115 @@ +"use strict"; + +const request = require("supertest"); +const webpack = require("webpack"); +const { test } = require("@playwright/test"); +const { describe } = require("@playwright/test"); +const { expect } = require("@playwright/test"); +const { beforeAll, afterAll } = require("@playwright/test"); +const Server = require("../../lib/Server"); +const config = require("../fixtures/static-config/webpack.config"); +const port = require("../ports-map")["range-header"]; + +describe("'Range' header", () => { + let compiler; + let server; + + beforeAll(async () => { + compiler = webpack(config); + + server = new Server({ port }, compiler); + + await server.start(); + }); + + afterAll(async () => { + await server.stop(); + }); + + test('should work with "Range" header using "GET" method', async () => { + const response = await request(server.app).get("/main.js"); + + expect(response.status).toBe(200); + expect(response.headers["content-type"]).toBe( + "application/javascript; charset=utf-8", + ); + expect(response.headers["accept-ranges"]).toBe("bytes"); + + const responseContent = response.text; + const responseRange = await request(server.app) + .get("/main.js") + .set("Range", "bytes=0-499"); + + expect(responseRange.status).toBe(206); + expect(responseRange.headers["content-type"]).toBe( + "application/javascript; charset=utf-8", + ); + expect(responseRange.headers["content-length"]).toBe("500"); + expect(responseRange.headers["content-range"]).toMatch(/^bytes 0-499\//); + expect(responseRange.text).toBe(responseContent.slice(0, 500)); + expect(responseRange.text.length).toBe(500); + }); + + test('should work with "Range" header using "HEAD" method', async () => { + const response = await request(server.app).head("/main.js"); + + expect(response.status).toBe(200); + expect(response.headers["content-type"]).toBe( + "application/javascript; charset=utf-8", + ); + expect(response.headers["accept-ranges"]).toBe("bytes"); + + const responseRange = await request(server.app) + .head("/main.js") + .set("Range", "bytes=0-499"); + + expect(responseRange.status).toBe(206); + expect(responseRange.headers["content-type"]).toBe( + "application/javascript; charset=utf-8", + ); + expect(responseRange.headers["content-length"]).toBe("500"); + expect(responseRange.headers["content-range"]).toMatch(/^bytes 0-499\//); + }); + + test('should work with unsatisfiable "Range" header using "GET" method', async () => { + const response = await request(server.app).get("/main.js"); + + expect(response.status).toBe(200); + expect(response.headers["content-type"]).toBe( + "application/javascript; charset=utf-8", + ); + expect(response.headers["accept-ranges"]).toBe("bytes"); + + const responseRange = await request(server.app) + .get("/main.js") + .set("Range", "bytes=99999999999-"); + + expect(responseRange.status).toBe(416); + expect(responseRange.headers["content-type"]).toBe( + "text/html; charset=utf-8", + ); + expect(responseRange.headers["content-range"]).toMatch(/^bytes \*\//); + }); + + test('should work with malformed "Range" header using "GET" method', async () => { + const response = await request(server.app).get("/main.js"); + + expect(response.status).toBe(200); + expect(response.headers["content-type"]).toBe( + "application/javascript; charset=utf-8", + ); + expect(response.headers["accept-ranges"]).toBe("bytes"); + + const responseContent = response.text; + const responseRange = await request(server.app) + .get("/main.js") + .set("Range", "bytes"); + + expect(responseRange.status).toBe(200); + expect(responseRange.headers["content-type"]).toBe( + "application/javascript; charset=utf-8", + ); + expect(responseRange.text).toBe(responseContent); + expect(responseRange.text.length).toBe(responseContent.length); + }); +}); diff --git a/test/e2e-playwright/stats-refactored.test.js b/test/e2e-playwright/stats-refactored.test.js new file mode 100644 index 0000000000..29d7083a47 --- /dev/null +++ b/test/e2e-playwright/stats-refactored.test.js @@ -0,0 +1,142 @@ +"use strict"; + +const webpack = require("webpack"); +const { test } = require("@playwright/test"); +const { describe } = require("@playwright/test"); +const { expect } = require("@playwright/test"); +const Server = require("../../lib/Server"); +const config = require("../fixtures/client-config/webpack.config"); +const HTMLGeneratorPlugin = require("../helpers/html-generator-plugin"); +const port = require("../ports-map").stats; + +describe("stats", () => { + const cases = [ + { + title: 'should work when "stats" is not specified', + webpackOptions: {}, + }, + { + title: 'should work using "{}" value for the "stats" option', + webpackOptions: { + stats: {}, + }, + }, + { + title: 'should work using "undefined" value for the "stats" option', + webpackOptions: { + // eslint-disable-next-line no-undefined + stats: undefined, + }, + }, + { + title: 'should work using "false" value for the "stats" option', + webpackOptions: { + stats: false, + }, + }, + { + title: 'should work using "errors-only" value for the "stats" option', + webpackOptions: { + stats: "errors-only", + }, + }, + { + title: + 'should work using "{ assets: false }" value for the "stats" option', + webpackOptions: { + stats: { + assets: false, + }, + }, + }, + { + title: + 'should work using "{ colors: { green: "\u001b[32m" }}" value for the "stats" option', + webpackOptions: { + stats: { + colors: { + green: "\u001b[32m", + }, + }, + }, + }, + { + title: + 'should work using "{ warningsFilter: \'test\' }" value for the "stats" option', + webpackOptions: { + plugins: [ + { + apply(compiler) { + compiler.hooks.thisCompilation.tap( + "warnings-webpack-plugin", + (compilation) => { + compilation.warnings.push( + new Error("Warning from compilation"), + ); + }, + ); + }, + }, + new HTMLGeneratorPlugin(), + ], + stats: { warningsFilter: /Warning from compilation/ }, + }, + }, + ]; + + if (webpack.version.startsWith("5")) { + cases.push({ + title: 'should work and respect the "ignoreWarnings" option', + webpackOptions: { + plugins: [ + { + apply(compiler) { + compiler.hooks.thisCompilation.tap( + "warnings-webpack-plugin", + (compilation) => { + compilation.warnings.push( + new Error("Warning from compilation"), + ); + }, + ); + }, + }, + new HTMLGeneratorPlugin(), + ], + ignoreWarnings: [/Warning from compilation/], + }, + }); + } + + cases.forEach((testCase) => { + test(testCase.title, async ({ page }) => { + const compiler = webpack({ ...config, ...testCase.webpackOptions }); + const devServerOptions = { + port, + }; + const server = new Server(devServerOptions, compiler); + + await server.start(); + + try { + const consoleMessages = []; + + page.on("console", (message) => { + consoleMessages.push(message); + }); + + await page.goto(`http://localhost:${port}/`, { + waitUntil: "networkidle0", + }); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + await server.stop(); + } + }); + }); +}); diff --git a/test/e2e-playwright/stats-refactored.test.js-snapshots/stats-should-work-and-respect-the-ignoreWarnings-option-1-chromium-darwin.txt b/test/e2e-playwright/stats-refactored.test.js-snapshots/stats-should-work-and-respect-the-ignoreWarnings-option-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/stats-refactored.test.js-snapshots/stats-should-work-and-respect-the-ignoreWarnings-option-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/stats-refactored.test.js-snapshots/stats-should-work-using-assets-false-value-for-the-stats-option-1-chromium-darwin.txt b/test/e2e-playwright/stats-refactored.test.js-snapshots/stats-should-work-using-assets-false-value-for-the-stats-option-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/stats-refactored.test.js-snapshots/stats-should-work-using-assets-false-value-for-the-stats-option-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/stats-refactored.test.js-snapshots/stats-should-work-using-colors-green-32m-value-for-the-stats-option-1-chromium-darwin.txt b/test/e2e-playwright/stats-refactored.test.js-snapshots/stats-should-work-using-colors-green-32m-value-for-the-stats-option-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/stats-refactored.test.js-snapshots/stats-should-work-using-colors-green-32m-value-for-the-stats-option-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/stats-refactored.test.js-snapshots/stats-should-work-using-errors-only-value-for-the-stats-option-1-chromium-darwin.txt b/test/e2e-playwright/stats-refactored.test.js-snapshots/stats-should-work-using-errors-only-value-for-the-stats-option-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/stats-refactored.test.js-snapshots/stats-should-work-using-errors-only-value-for-the-stats-option-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/stats-refactored.test.js-snapshots/stats-should-work-using-false-value-for-the-stats-option-1-chromium-darwin.txt b/test/e2e-playwright/stats-refactored.test.js-snapshots/stats-should-work-using-false-value-for-the-stats-option-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/stats-refactored.test.js-snapshots/stats-should-work-using-false-value-for-the-stats-option-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/stats-refactored.test.js-snapshots/stats-should-work-using-undefined-value-for-the-stats-option-1-chromium-darwin.txt b/test/e2e-playwright/stats-refactored.test.js-snapshots/stats-should-work-using-undefined-value-for-the-stats-option-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/stats-refactored.test.js-snapshots/stats-should-work-using-undefined-value-for-the-stats-option-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/stats-refactored.test.js-snapshots/stats-should-work-using-value-for-the-stats-option-1-chromium-darwin.txt b/test/e2e-playwright/stats-refactored.test.js-snapshots/stats-should-work-using-value-for-the-stats-option-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/stats-refactored.test.js-snapshots/stats-should-work-using-value-for-the-stats-option-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/stats-refactored.test.js-snapshots/stats-should-work-using-warningsFilter-test-value-for-the-stats-option-1-chromium-darwin.txt b/test/e2e-playwright/stats-refactored.test.js-snapshots/stats-should-work-using-warningsFilter-test-value-for-the-stats-option-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/stats-refactored.test.js-snapshots/stats-should-work-using-warningsFilter-test-value-for-the-stats-option-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/stats-refactored.test.js-snapshots/stats-should-work-when-stats-is-not-specified-1-chromium-darwin.txt b/test/e2e-playwright/stats-refactored.test.js-snapshots/stats-should-work-when-stats-is-not-specified-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/stats-refactored.test.js-snapshots/stats-should-work-when-stats-is-not-specified-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/target-refactored.test.js b/test/e2e-playwright/target-refactored.test.js new file mode 100644 index 0000000000..6e2b881896 --- /dev/null +++ b/test/e2e-playwright/target-refactored.test.js @@ -0,0 +1,91 @@ +"use strict"; + +const { test } = require("@playwright/test"); +const { describe } = require("@playwright/test"); +const { expect } = require("@playwright/test"); +const webpack = require("webpack"); +const Server = require("../../lib/Server"); +const config = require("../fixtures/client-config/webpack.config"); +const port = require("../ports-map").target; + +describe("target", () => { + const targets = [ + false, + "browserslist:defaults", + "web", + "webworker", + "node", + "async-node", + "electron-main", + "electron-preload", + "electron-renderer", + "nwjs", + "node-webkit", + "es5", + ["web", "es5"], + ]; + + for (const target of targets) { + test(`should work using "${target}" target`, async ({ page }) => { + const compiler = webpack({ + ...config, + target, + ...(target === false || target === "es5" + ? { + output: { chunkFormat: "array-push", path: "/" }, + } + : {}), + }); + const devServerOptions = { + port, + }; + const server = new Server(devServerOptions, compiler); + + await server.start(); + + try { + const pageErrors = []; + const consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://127.0.0.1:${port}/`, { + waitUntil: "networkidle0", + }); + + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + + if ( + target === "node" || + target === "async-node" || + target === "electron-main" || + target === "electron-preload" || + target === "electron-renderer" || + target === "nwjs" || + target === "node-webkit" + ) { + const hasRequireOrGlobalError = + pageErrors.filter((pageError) => + /require is not defined|global is not defined/.test(pageError), + ).length === 1; + + expect(hasRequireOrGlobalError).toBe(true); + } else { + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } + } catch (error) { + throw error; + } finally { + await server.stop(); + } + }); + } +}); diff --git a/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-async-node-target-1-chromium-darwin.txt b/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-async-node-target-1-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-async-node-target-1-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-browserslist-defaults-target-1-chromium-darwin.txt b/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-browserslist-defaults-target-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-browserslist-defaults-target-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-browserslist-defaults-target-2-chromium-darwin.txt b/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-browserslist-defaults-target-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-browserslist-defaults-target-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-electron-main-target-1-chromium-darwin.txt b/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-electron-main-target-1-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-electron-main-target-1-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-electron-preload-target-1-chromium-darwin.txt b/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-electron-preload-target-1-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-electron-preload-target-1-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-electron-renderer-target-1-chromium-darwin.txt b/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-electron-renderer-target-1-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-electron-renderer-target-1-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-es5-target-1-chromium-darwin.txt b/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-es5-target-1-chromium-darwin.txt new file mode 100644 index 0000000000..53017db669 --- /dev/null +++ b/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-es5-target-1-chromium-darwin.txt @@ -0,0 +1 @@ +["[HMR] Waiting for update signal from WDS...","Hey."] \ No newline at end of file diff --git a/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-es5-target-2-chromium-darwin.txt b/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-es5-target-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-es5-target-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-false-target-1-chromium-darwin.txt b/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-false-target-1-chromium-darwin.txt new file mode 100644 index 0000000000..53017db669 --- /dev/null +++ b/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-false-target-1-chromium-darwin.txt @@ -0,0 +1 @@ +["[HMR] Waiting for update signal from WDS...","Hey."] \ No newline at end of file diff --git a/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-false-target-2-chromium-darwin.txt b/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-false-target-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-false-target-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-node-target-1-chromium-darwin.txt b/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-node-target-1-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-node-target-1-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-node-webkit-target-1-chromium-darwin.txt b/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-node-webkit-target-1-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-node-webkit-target-1-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-nwjs-target-1-chromium-darwin.txt b/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-nwjs-target-1-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-nwjs-target-1-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-web-es5-target-1-chromium-darwin.txt b/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-web-es5-target-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-web-es5-target-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-web-es5-target-2-chromium-darwin.txt b/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-web-es5-target-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-web-es5-target-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-web-target-1-chromium-darwin.txt b/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-web-target-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-web-target-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-web-target-2-chromium-darwin.txt b/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-web-target-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-web-target-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-webworker-target-1-chromium-darwin.txt b/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-webworker-target-1-chromium-darwin.txt new file mode 100644 index 0000000000..eb2ebfc5ea --- /dev/null +++ b/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-webworker-target-1-chromium-darwin.txt @@ -0,0 +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."] \ No newline at end of file diff --git a/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-webworker-target-2-chromium-darwin.txt b/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-webworker-target-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/target-refactored.test.js-snapshots/target-should-work-using-webworker-target-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e-playwright/web-socket-server.test.js b/test/e2e-playwright/web-socket-server.test.js new file mode 100644 index 0000000000..2063456747 --- /dev/null +++ b/test/e2e-playwright/web-socket-server.test.js @@ -0,0 +1,67 @@ +"use strict"; + +const webpack = require("webpack"); +const { test } = require("@playwright/test"); +const { describe } = require("@playwright/test"); +const { expect } = require("@playwright/test"); +const Server = require("../../lib/Server"); +const config = require("../fixtures/client-config/webpack.config"); +const sessionSubscribe = require("../helpers/session-subscribe"); +const port = require("../ports-map")["web-socket-server-test"]; + +describe("web socket server", () => { + test("should work allow to disable", async ({ page }) => { + const devServerPort = port; + + const compiler = webpack(config); + const devServerOptions = { + webSocketServer: false, + port: devServerPort, + }; + const server = new Server(devServerOptions, compiler); + + await server.start(); + + try { + const pageErrors = []; + const consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const webSocketRequests = []; + const session = await page.context().newCDPSession(page); + + session.on("Network.webSocketCreated", (payload) => { + webSocketRequests.push(payload); + }); + + await session.send("Target.setAutoAttach", { + autoAttach: true, + flatten: true, + waitForDebuggerOnStart: true, + }); + + sessionSubscribe(session); + + await page.goto(`http://127.0.0.1:${port}/`, { + waitUntil: "networkidle0", + }); + + expect(webSocketRequests).toHaveLength(0); + expect( + JSON.stringify(consoleMessages.map((message) => message.text())), + ).toMatchSnapshot(); + expect(JSON.stringify(pageErrors)).toMatchSnapshot(); + } catch (error) { + throw error; + } finally { + await server.stop(); + } + }); +}); diff --git a/test/e2e-playwright/web-socket-server.test.js-snapshots/web-socket-server-should-work-allow-to-disable-1-chromium-darwin.txt b/test/e2e-playwright/web-socket-server.test.js-snapshots/web-socket-server-should-work-allow-to-disable-1-chromium-darwin.txt new file mode 100644 index 0000000000..fce753cf85 --- /dev/null +++ b/test/e2e-playwright/web-socket-server.test.js-snapshots/web-socket-server-should-work-allow-to-disable-1-chromium-darwin.txt @@ -0,0 +1 @@ +["Hey."] \ No newline at end of file diff --git a/test/e2e-playwright/web-socket-server.test.js-snapshots/web-socket-server-should-work-allow-to-disable-2-chromium-darwin.txt b/test/e2e-playwright/web-socket-server.test.js-snapshots/web-socket-server-should-work-allow-to-disable-2-chromium-darwin.txt new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/e2e-playwright/web-socket-server.test.js-snapshots/web-socket-server-should-work-allow-to-disable-2-chromium-darwin.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/e2e/__snapshots__/allowed-hosts.test.js.snap.webpack5 b/test/e2e/__snapshots__/allowed-hosts.test.js.snap.webpack5 index 84b2498b57..5ab1e22dec 100644 --- a/test/e2e/__snapshots__/allowed-hosts.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/allowed-hosts.test.js.snap.webpack5 @@ -262,15 +262,23 @@ 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 disconnect web client using localhost to web socket server with the "auto" value ("sockjs"): console messages 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"): 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`] = `[]`; +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)", +] +`; -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"): 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`] = `[]`; diff --git a/test/e2e/__snapshots__/app.test.js.snap.webpack5 b/test/e2e/__snapshots__/app.test.js.snap.webpack5 new file mode 100644 index 0000000000..9ac3495c9b --- /dev/null +++ b/test/e2e/__snapshots__/app.test.js.snap.webpack5 @@ -0,0 +1,253 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`app option should work using "connect (async)" application and "http" server should handle GET request to index route (/): 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[`app option should work using "connect (async)" application and "http" server should handle GET request to index route (/): page errors 1`] = `[]`; + +exports[`app option should work using "connect (async)" application and "http" server should handle GET request to index route (/): response status 1`] = `200`; + +exports[`app option should work using "connect (async)" application and "http" server should handle GET request to index route (/): response text 1`] = ` +" + + + + + webpack-dev-server + + +

webpack-dev-server is running...

+ + + +" +`; + +exports[`app option should work using "connect (async)" application and "https" server should handle GET request to index route (/): 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[`app option should work using "connect (async)" application and "https" server should handle GET request to index route (/): page errors 1`] = `[]`; + +exports[`app option should work using "connect (async)" application and "https" server should handle GET request to index route (/): response status 1`] = `200`; + +exports[`app option should work using "connect (async)" application and "https" server should handle GET request to index route (/): response text 1`] = ` +" + + + + + webpack-dev-server + + +

webpack-dev-server is running...

+ + + +" +`; + +exports[`app option should work using "connect (async)" application and "spdy" server should handle GET request to index route (/): 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[`app option should work using "connect (async)" application and "spdy" server should handle GET request to index route (/): page errors 1`] = `[]`; + +exports[`app option should work using "connect (async)" application and "spdy" server should handle GET request to index route (/): response status 1`] = `200`; + +exports[`app option should work using "connect (async)" application and "spdy" server should handle GET request to index route (/): response text 1`] = ` +" + + + + + webpack-dev-server + + +

webpack-dev-server is running...

+ + + +" +`; + +exports[`app option should work using "connect" application and "http" server should handle GET request to index route (/): 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[`app option should work using "connect" application and "http" server should handle GET request to index route (/): page errors 1`] = `[]`; + +exports[`app option should work using "connect" application and "http" server should handle GET request to index route (/): response status 1`] = `200`; + +exports[`app option should work using "connect" application and "http" server should handle GET request to index route (/): response text 1`] = ` +" + + + + + webpack-dev-server + + +

webpack-dev-server is running...

+ + + +" +`; + +exports[`app option should work using "connect" application and "https" server should handle GET request to index route (/): 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[`app option should work using "connect" application and "https" server should handle GET request to index route (/): page errors 1`] = `[]`; + +exports[`app option should work using "connect" application and "https" server should handle GET request to index route (/): response status 1`] = `200`; + +exports[`app option should work using "connect" application and "https" server should handle GET request to index route (/): response text 1`] = ` +" + + + + + webpack-dev-server + + +

webpack-dev-server is running...

+ + + +" +`; + +exports[`app option should work using "connect" application and "spdy" server should handle GET request to index route (/): 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[`app option should work using "connect" application and "spdy" server should handle GET request to index route (/): page errors 1`] = `[]`; + +exports[`app option should work using "connect" application and "spdy" server should handle GET request to index route (/): response status 1`] = `200`; + +exports[`app option should work using "connect" application and "spdy" server should handle GET request to index route (/): response text 1`] = ` +" + + + + + webpack-dev-server + + +

webpack-dev-server is running...

+ + + +" +`; + +exports[`app option should work using "express" application and "http" server should handle GET request to index route (/): 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[`app option should work using "express" application and "http" server should handle GET request to index route (/): page errors 1`] = `[]`; + +exports[`app option should work using "express" application and "http" server should handle GET request to index route (/): response status 1`] = `200`; + +exports[`app option should work using "express" application and "http" server should handle GET request to index route (/): response text 1`] = ` +" + + + + + webpack-dev-server + + +

webpack-dev-server is running...

+ + + +" +`; + +exports[`app option should work using "express" application and "https" server should handle GET request to index route (/): 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[`app option should work using "express" application and "https" server should handle GET request to index route (/): page errors 1`] = `[]`; + +exports[`app option should work using "express" application and "https" server should handle GET request to index route (/): response status 1`] = `200`; + +exports[`app option should work using "express" application and "https" server should handle GET request to index route (/): response text 1`] = ` +" + + + + + webpack-dev-server + + +

webpack-dev-server is running...

+ + + +" +`; + +exports[`app option should work using "express" application and "spdy" server should handle GET request to index route (/): 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[`app option should work using "express" application and "spdy" server should handle GET request to index route (/): page errors 1`] = `[]`; + +exports[`app option should work using "express" application and "spdy" server should handle GET request to index route (/): response status 1`] = `200`; + +exports[`app option should work using "express" application and "spdy" server should handle GET request to index route (/): response text 1`] = ` +" + + + + + webpack-dev-server + + +

webpack-dev-server is running...

+ + + +" +`; 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 769c716c67..9fa4d94d12 100644 --- a/test/e2e/__snapshots__/built-in-routes.test.js.snap.webpack5 +++ b/test/e2e/__snapshots__/built-in-routes.test.js.snap.webpack5 @@ -16,7 +16,7 @@ exports[`Built in routes with multi config should handle GET request to director 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: response headers content-type 1`] = `"text/html"`; +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: response status 1`] = `200`; @@ -34,7 +34,7 @@ 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"`; +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: response status 1`] = `200`; @@ -56,7 +56,7 @@ exports[`Built in routes with simple config should handle HEAD request to direct 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: response headers content-type 1`] = `"text/html"`; +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: response status 1`] = `200`; @@ -70,7 +70,7 @@ exports[`Built in routes with simple config should handles GET request to sockjs 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"`; +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`; @@ -78,6 +78,6 @@ exports[`Built in routes with simple config should handles HEAD request to sockj 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"`; +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/app.test.js b/test/e2e/app.test.js new file mode 100644 index 0000000000..05e6c23a79 --- /dev/null +++ b/test/e2e/app.test.js @@ -0,0 +1,103 @@ +"use strict"; + +const path = require("path"); +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").app; + +const staticDirectory = path.resolve( + __dirname, + "../fixtures/static-config/public", +); + +const apps = [ + ["express", () => require("express")()], + ["connect", () => require("connect")()], + ["connect (async)", async () => require("express")()], +]; + +const servers = ["http", "https", "spdy"]; + +describe("app option", () => { + for (const [appName, app] of apps) { + for (const server of servers) { + let compiler; + let devServer; + let page; + let browser; + let pageErrors; + let consoleMessages; + + describe(`should work using "${appName}" application and "${server}" server`, () => { + beforeEach(async () => { + compiler = webpack(config); + + devServer = new Server( + { + static: { + directory: staticDirectory, + watch: false, + }, + app, + server, + port, + }, + compiler, + ); + + await devServer.start(); + + ({ page, browser } = await runBrowser()); + + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + await browser.close(); + await devServer.stop(); + }); + + it("should handle GET request to index route (/)", async () => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const pageUrl = + server === "https" || server === "spdy" || server === "http2" + ? `https://127.0.0.1:${port}/` + : `http://127.0.0.1:${port}/`; + + const response = await page.goto(pageUrl, { + waitUntil: "networkidle0", + }); + + const HTTPVersion = await page.evaluate( + () => performance.getEntries()[0].nextHopProtocol, + ); + + const isSpdy = server === "spdy"; + + if (isSpdy) { + expect(HTTPVersion).toEqual("h2"); + } else { + expect(HTTPVersion).toEqual("http/1.1"); + } + + expect(response.status()).toMatchSnapshot("response status"); + expect(await response.text()).toMatchSnapshot("response text"); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); + expect(pageErrors).toMatchSnapshot("page errors"); + }); + }); + } + } +}); diff --git a/test/e2e/on-listening.test.js b/test/e2e/on-listening.test.js index 6e97561b14..4a88d908e7 100644 --- a/test/e2e/on-listening.test.js +++ b/test/e2e/on-listening.test.js @@ -26,12 +26,18 @@ describe("onListening option", () => { onListeningIsRunning = true; - devServer.app.get("/listening/some/path", (_, response) => { - response.send("listening"); - }); - - devServer.app.post("/listening/some/path", (_, response) => { - response.send("listening POST"); + devServer.app.use("/listening/some/path", (req, res, next) => { + if (req.method === "GET") { + res.setHeader("Content-Type", "text/html; charset=utf-8"); + res.end("listening"); + return; + } else if (req.method === "POST") { + res.setHeader("Content-Type", "text/html; charset=utf-8"); + res.end("listening POST"); + return; + } + + return next(); }); }, port, diff --git a/test/e2e/setup-middlewares.test.js b/test/e2e/setup-middlewares.test.js index 5ed6fece62..5187aaa8a7 100644 --- a/test/e2e/setup-middlewares.test.js +++ b/test/e2e/setup-middlewares.test.js @@ -23,35 +23,43 @@ describe("setupMiddlewares option", () => { throw new Error("webpack-dev-server is not defined"); } - devServer.app.get("/setup-middleware/some/path", (_, response) => { - response.send("setup-middlewares option GET"); - }); - - devServer.app.post("/setup-middleware/some/path", (_, response) => { - response.send("setup-middlewares option POST"); + devServer.app.use("/setup-middleware/some/path", (req, res, next) => { + if (req.method === "GET") { + res.setHeader("Content-Type", "text/html; charset=utf-8"); + res.end("setup-middlewares option GET"); + return; + } else if (req.method === "POST") { + res.setHeader("Content-Type", "text/html; charset=utf-8"); + res.end("setup-middlewares option POST"); + return; + } + + return next(); }); middlewares.push({ name: "hello-world-test-two", middleware: (req, res, next) => { - if (req.path !== "/foo/bar/baz") { + if (req.url !== "/foo/bar/baz") { next(); - return; } - res.send("Hello World without path!"); + res.setHeader("Content-Type", "text/html; charset=utf-8"); + res.end("Hello World without path!"); }, }); middlewares.push({ name: "hello-world-test-one", path: "/foo/bar", middleware: (req, res) => { - res.send("Hello World with path!"); + res.setHeader("Content-Type", "text/html; charset=utf-8"); + res.end("Hello World with path!"); }, }); middlewares.push((req, res) => { - res.send("Hello World as function!"); + res.setHeader("Content-Type", "text/html; charset=utf-8"); + res.end("Hello World as function!"); }); return middlewares; diff --git a/test/ports-map.js b/test/ports-map.js index c43004298c..00eb84a7dd 100644 --- a/test/ports-map.js +++ b/test/ports-map.js @@ -80,6 +80,7 @@ const listOfTests = { "normalize-option": 1, "setup-middlewares-option": 1, "options-request-response": 2, + app: 1, }; let startPort = 8089; diff --git a/test/server/proxy-option.test.js b/test/server/proxy-option.test.js index d894fdae08..e77824a371 100644 --- a/test/server/proxy-option.test.js +++ b/test/server/proxy-option.test.js @@ -27,7 +27,7 @@ const proxyOptionPathsAsProperties = [ { context: "/foo", bypass(req) { - if (/\.html$/.test(req.path)) { + if (/\.html$/.test(req.path || req.url)) { return "/index.html"; } @@ -37,7 +37,7 @@ const proxyOptionPathsAsProperties = [ { context: "proxyfalse", bypass(req) { - if (/\/proxyfalse$/.test(req.path)) { + if (/\/proxyfalse$/.test(req.path || req.url)) { return false; } }, @@ -45,7 +45,7 @@ const proxyOptionPathsAsProperties = [ { context: "/proxy/async", bypass(req, res) { - if (/\/proxy\/async$/.test(req.path)) { + if (/\/proxy\/async$/.test(req.path || req.url)) { return new Promise((resolve) => { setTimeout(() => { res.end("proxy async response"); @@ -61,7 +61,7 @@ const proxyOptionPathsAsProperties = [ changeOrigin: true, secure: false, bypass(req) { - if (/\.(html)$/i.test(req.url)) { + if (/\.(html)$/i.test(req.path || req.url)) { return req.url; } }, @@ -95,10 +95,16 @@ const proxyOptionOfArray = [ target: `http://localhost:${port2}`, pathRewrite: { "^/api": "" }, bypass: () => { - if (req && req.query.foo) { - res.end(`foo+${next.name}+${typeof next}`); + if (req) { + const resolveUrl = new URL(req.url, `http://${req.headers.host}`); + const params = new URLSearchParams(resolveUrl.search); + const foo = params.get("foo"); - return false; + if (foo) { + res.end(`foo+${next.name}+${typeof next}`); + + return false; + } } }, }; diff --git a/test/validate-options.test.js b/test/validate-options.test.js index 72bf4c933e..bc170f3dc3 100644 --- a/test/validate-options.test.js +++ b/test/validate-options.test.js @@ -437,6 +437,16 @@ const tests = { }, ], }, + app: { + success: [ + () => require("connect")(), + async () => + new Promise((resolve) => { + resolve(require("connect")()); + }), + ], + failure: ["test", false], + }, static: { success: [ "path", diff --git a/types/lib/Server.d.ts b/types/lib/Server.d.ts index 4351ba4041..5742ee0b33 100644 --- a/types/lib/Server.d.ts +++ b/types/lib/Server.d.ts @@ -1,90 +1,71 @@ /// export = Server; -declare class Server { +/** + * @typedef {Object} BasicApplication + * @property {typeof useFn} use + */ +/** + * @template {BasicApplication} [T=ExpressApplication] + */ +declare class Server< + T extends BasicApplication = import("express").Application, +> { static get schema(): { title: string; type: string; definitions: { - AllowedHosts: { - anyOf: ( - | { - type: string; - minItems: number; - items: { - $ref: string; - }; - enum?: undefined; - $ref?: undefined; - } - | { - enum: string[]; - type?: undefined; - minItems?: undefined; - items?: undefined; - $ref?: undefined; - } - | { - $ref: string; - type?: undefined; - minItems?: undefined; - items?: undefined; - enum?: undefined; - } - )[]; + App: { + instanceof: string; description: string; link: string; }; - AllowedHostsItem: { - type: string; - minLength: number; - }; - Bonjour: { + AllowedHosts: { anyOf: ( | { type: string; - cli: { - negatedDescription: string; - }; - description?: undefined; - link?: undefined; - } - | { - type: string /** @typedef {import("express").ErrorRequestHandler} ExpressErrorRequestHandler */; - description: string; - link: string; - cli?: undefined; - } - )[]; - description: string; - link: string; - }; - Client: { - description: string; - link: string; - anyOf: ( - | { - enum: boolean[]; - cli: { - negatedDescription: string; - }; - type?: undefined; - additionalProperties?: undefined; - properties?: undefined; - } - | { - type: string; - additionalProperties: boolean; - properties: { - logging: { - $ref: string; - }; + minItems: number; + items: { + /** @typedef {import("webpack").Configuration} WebpackConfiguration */ + /** @typedef {import("webpack").StatsOptions} StatsOptions */ + /** @typedef {import("webpack").StatsCompilation} StatsCompilation */ + /** @typedef {import("webpack").Stats} Stats */ + /** @typedef {import("webpack").MultiStats} MultiStats */ + /** @typedef {import("os").NetworkInterfaceInfo} NetworkInterfaceInfo */ + /** @typedef {import("chokidar").WatchOptions} WatchOptions */ + /** @typedef {import("chokidar").FSWatcher} FSWatcher */ + /** @typedef {import("connect-history-api-fallback").Options} ConnectHistoryApiFallbackOptions */ + /** @typedef {import("bonjour-service").Bonjour} Bonjour */ + /** @typedef {import("bonjour-service").Service} BonjourOptions */ + /** @typedef {import("http-proxy-middleware").RequestHandler} RequestHandler */ + /** @typedef {import("http-proxy-middleware").Options} HttpProxyMiddlewareOptions */ + /** @typedef {import("http-proxy-middleware").Filter} HttpProxyMiddlewareOptionsFilter */ + /** @typedef {import("serve-index").Options} ServeIndexOptions */ + /** @typedef {import("serve-static").ServeStaticOptions} ServeStaticOptions */ + /** @typedef {import("ipaddr.js").IPv4} IPv4 */ + /** @typedef {import("ipaddr.js").IPv6} IPv6 */ /** @typedef {import("net").Socket} Socket */ /** @typedef {import("http").IncomingMessage} IncomingMessage */ /** @typedef {import("http").ServerResponse} ServerResponse */ /** @typedef {import("open").Options} OpenOptions */ + /** @typedef {import("express").Application} ExpressApplication */ + /** @typedef {import("express").RequestHandler} ExpressRequestHandler */ + /** @typedef {import("express").ErrorRequestHandler} ExpressErrorRequestHandler */ + /** @typedef {import("express").Request} ExpressRequest */ + /** @typedef {import("express").Response} ExpressResponse */ + /** @typedef {(err?: any) => void} NextFunction */ + /** @typedef {(req: IncomingMessage, res: ServerResponse) => void} SimpleHandleFunction */ + /** @typedef {(req: IncomingMessage, res: ServerResponse, next: NextFunction) => void} NextHandleFunction */ + /** @typedef {(err: any, req: IncomingMessage, res: ServerResponse, next: NextFunction) => 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("express").Request} Request */ - /** @typedef {import("express").Response} Response */ + /** + * @template {BasicApplication} [T=ExpressApplication] + * @typedef {T extends ExpressApplication ? ExpressRequest : IncomingMessage} Request + */ + /** + * @template {BasicApplication} [T=ExpressApplication] + * @typedef {T extends ExpressApplication ? ExpressResponse : ServerResponse} Response + */ /** * @template {Request} T * @template {Response} U @@ -153,9 +134,6 @@ declare class Server { /** * @typedef {(ProxyConfigArrayItem | ((req?: Request | undefined, res?: Response | undefined, next?: NextFunction | undefined) => ProxyConfigArrayItem))[]} ProxyConfigArray */ - /** - * @typedef {{ [url: string]: string | ProxyConfigArrayItem }} ProxyConfigMap - */ /** * @typedef {Object} OpenApp * @property {string} [name] @@ -196,9 +174,14 @@ declare class Server { * @typedef {Array<{ key: string; value: string }> | Record} Headers */ /** - * @typedef {{ name?: string, path?: string, middleware: ExpressRequestHandler | ExpressErrorRequestHandler } | ExpressRequestHandler | ExpressErrorRequestHandler} Middleware + * @template {BasicApplication} [T=ExpressApplication] + * @typedef {T extends ExpressApplication ? ExpressRequestHandler | ExpressErrorRequestHandler : HandleFunction} MiddlewareHandler + */ + /** + * @typedef {{ name?: string, path?: string, middleware: MiddlewareHandler } | MiddlewareHandler } Middleware */ /** + * @template {BasicApplication} [T=ExpressApplication] * @typedef {Object} Configuration * @property {boolean | string} [ipc] * @property {Host} [host] @@ -213,17 +196,84 @@ declare class Server { * @property {string | string[] | WatchFiles | Array} [watchFiles] * @property {boolean | string | Static | Array} [static] * @property {boolean | ServerOptions} [https] - * @property {boolean} [http2] * @property {"http" | "https" | "spdy" | string | ServerConfiguration} [server] + * @property {() => Promise} [app] * @property {boolean | "sockjs" | "ws" | string | WebSocketServerConfiguration} [webSocketServer] - * @property {ProxyConfigMap | ProxyConfigArrayItem | ProxyConfigArray} [proxy] + * @property {ProxyConfigArray} [proxy] * @property {boolean | string | Open | Array} [open] * @property {boolean} [setupExitSignals] * @property {boolean | ClientConfiguration} [client] * @property {Headers | ((req: Request, res: Response, context: DevMiddlewareContext) => Headers)} [headers] - * @property {(devServer: Server) => void} [onListening] - * @property {(middlewares: Middleware[], devServer: Server) => Middleware[]} [setupMiddlewares] + * @property {(devServer: Server) => void} [onListening] + * @property {(middlewares: Middleware[], devServer: Server) => Middleware[]} [setupMiddlewares] */ + $ref: string; + }; + enum?: undefined; + $ref?: undefined; + } + | { + enum: string[]; + type?: undefined; + minItems?: undefined; + items?: undefined; + $ref?: undefined; + } + | { + $ref: string; + type?: undefined; + minItems?: undefined; + items?: undefined; + enum?: undefined; + } + )[]; + description: string; + link: string; + }; + AllowedHostsItem: { + type: string; + minLength: number; + }; + Bonjour: { + anyOf: ( + | { + type: string; + cli: { + negatedDescription: string; + }; + description?: undefined; + link?: undefined; + } + | { + type: string; + description: string; + link: string; + cli?: undefined; + } + )[]; + description: string; + link: string; + }; + Client: { + description: string; + link: string; + anyOf: ( + | { + enum: boolean[]; + cli: { + negatedDescription: string; + }; + type?: undefined; + additionalProperties?: undefined; + properties?: undefined; + } + | { + type: string; + additionalProperties: boolean; + properties: { + logging: { + $ref: string; + }; overlay: { $ref: string; }; @@ -237,6 +287,157 @@ declare class Server { $ref: string; }; webSocketURL: { + /** @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 */ + /** + * @template {BasicApplication} [T=ExpressApplication] + * @typedef {T extends ExpressApplication ? ExpressRequest : IncomingMessage} Request + */ + /** + * @template {BasicApplication} [T=ExpressApplication] + * @typedef {T extends ExpressApplication ? ExpressResponse : ServerResponse} Response + */ + /** + * @template {Request} T + * @template {Response} U + * @typedef {import("webpack-dev-middleware").Options} DevMiddlewareOptions + */ + /** + * @template {Request} T + * @template {Response} U + * @typedef {import("webpack-dev-middleware").Context} DevMiddlewareContext + */ + /** + * @typedef {"local-ip" | "local-ipv4" | "local-ipv6" | string} Host + */ + /** + * @typedef {number | string | "auto"} Port + */ + /** + * @typedef {Object} WatchFiles + * @property {string | string[]} paths + * @property {WatchOptions & { aggregateTimeout?: number, ignored?: WatchOptions["ignored"], poll?: number | boolean }} [options] + */ + /** + * @typedef {Object} Static + * @property {string} [directory] + * @property {string | string[]} [publicPath] + * @property {boolean | ServeIndexOptions} [serveIndex] + * @property {ServeStaticOptions} [staticOptions] + * @property {boolean | WatchOptions & { aggregateTimeout?: number, ignored?: WatchOptions["ignored"], poll?: number | boolean }} [watch] + */ + /** + * @typedef {Object} NormalizedStatic + * @property {string} directory + * @property {string[]} publicPath + * @property {false | ServeIndexOptions} serveIndex + * @property {ServeStaticOptions} staticOptions + * @property {false | WatchOptions} watch + */ + /** + * @typedef {Object} ServerConfiguration + * @property {"http" | "https" | "spdy" | string} [type] + * @property {ServerOptions} [options] + */ + /** + * @typedef {Object} WebSocketServerConfiguration + * @property {"sockjs" | "ws" | string | Function} [type] + * @property {Record} [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").WebSocketServer | import("sockjs").Server & { close: import("ws").WebSocketServer["close"] }} WebSocketServer + */ + /** + * @typedef {{ implementation: WebSocketServer, clients: ClientConnection[] }} WebSocketServerImplementation + */ + /** + * @callback ByPass + * @param {Request} req + * @param {Response} res + * @param {ProxyConfigArrayItem} proxyConfig + */ + /** + * @typedef {{ path?: HttpProxyMiddlewareOptionsFilter | undefined, context?: HttpProxyMiddlewareOptionsFilter | undefined } & { bypass?: ByPass } & HttpProxyMiddlewareOptions } ProxyConfigArrayItem + */ + /** + * @typedef {(ProxyConfigArrayItem | ((req?: Request | undefined, res?: Response | undefined, next?: NextFunction | undefined) => ProxyConfigArrayItem))[]} ProxyConfigArray + */ + /** + * @typedef {Object} OpenApp + * @property {string} [name] + * @property {string[]} [arguments] + */ + /** + * @typedef {Object} Open + * @property {string | string[] | OpenApp} [app] + * @property {string | string[]} [target] + */ + /** + * @typedef {Object} NormalizedOpen + * @property {string} target + * @property {import("open").Options} options + */ + /** + * @typedef {Object} WebSocketURL + * @property {string} [hostname] + * @property {string} [password] + * @property {string} [pathname] + * @property {number | string} [port] + * @property {string} [protocol] + * @property {string} [username] + */ + /** + * @typedef {boolean | ((error: Error) => void)} OverlayMessageOptions + */ + /** + * @typedef {Object} ClientConfiguration + * @property {"log" | "info" | "warn" | "error" | "none" | "verbose"} [logging] + * @property {boolean | { warnings?: OverlayMessageOptions, errors?: OverlayMessageOptions, runtimeErrors?: OverlayMessageOptions }} [overlay] + * @property {boolean} [progress] + * @property {boolean | number} [reconnect] + * @property {"ws" | "sockjs" | string} [webSocketTransport] + * @property {string | WebSocketURL} [webSocketURL] + */ + /** + * @typedef {Array<{ key: string; value: string }> | Record} Headers + */ + /** + * @template {BasicApplication} [T=ExpressApplication] + * @typedef {T extends ExpressApplication ? ExpressRequestHandler | ExpressErrorRequestHandler : HandleFunction} MiddlewareHandler + */ + /** + * @typedef {{ name?: string, path?: string, middleware: MiddlewareHandler } | MiddlewareHandler } Middleware + */ + /** + * @template {BasicApplication} [T=ExpressApplication] + * @typedef {Object} Configuration + * @property {boolean | string} [ipc] + * @property {Host} [host] + * @property {Port} [port] + * @property {boolean | "only"} [hot] + * @property {boolean} [liveReload] + * @property {DevMiddlewareOptions} [devMiddleware] + * @property {boolean} [compress] + * @property {"auto" | "all" | string | string[]} [allowedHosts] + * @property {boolean | ConnectHistoryApiFallbackOptions} [historyApiFallback] + * @property {boolean | Record | BonjourOptions} [bonjour] + * @property {string | string[] | WatchFiles | Array} [watchFiles] + * @property {boolean | string | Static | Array} [static] + * @property {boolean | ServerOptions} [https] + * @property {"http" | "https" | "spdy" | string | ServerConfiguration} [server] + * @property {() => Promise} [app] + * @property {boolean | "sockjs" | "ws" | string | WebSocketServerConfiguration} [webSocketServer] + * @property {ProxyConfigArray} [proxy] + * @property {boolean | string | Open | Array} [open] + * @property {boolean} [setupExitSignals] + * @property {boolean | ClientConfiguration} [client] + * @property {Headers | ((req: Request, res: Response, context: DevMiddlewareContext) => Headers)} [headers] + * @property {(devServer: Server) => void} [onListening] + * @property {(middlewares: Middleware[], devServer: Server) => Middleware[]} [setupMiddlewares] + */ $ref: string; }; }; @@ -289,15 +490,125 @@ declare class Server { | { description: string; type: string; + /** + * @typedef {Object} NormalizedStatic + * @property {string} directory + * @property {string[]} publicPath + * @property {false | ServeIndexOptions} serveIndex + * @property {ServeStaticOptions} staticOptions + * @property {false | WatchOptions} watch + */ + /** + * @typedef {Object} ServerConfiguration + * @property {"http" | "https" | "spdy" | string} [type] + * @property {ServerOptions} [options] + */ + /** + * @typedef {Object} WebSocketServerConfiguration + * @property {"sockjs" | "ws" | string | Function} [type] + * @property {Record} [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").WebSocketServer | import("sockjs").Server & { close: import("ws").WebSocketServer["close"] }} WebSocketServer + */ + /** + * @typedef {{ implementation: WebSocketServer, clients: ClientConnection[] }} WebSocketServerImplementation + */ + /** + * @callback ByPass + * @param {Request} req + * @param {Response} res + * @param {ProxyConfigArrayItem} proxyConfig + */ + /** + * @typedef {{ path?: HttpProxyMiddlewareOptionsFilter | undefined, context?: HttpProxyMiddlewareOptionsFilter | undefined } & { bypass?: ByPass } & HttpProxyMiddlewareOptions } ProxyConfigArrayItem + */ + /** + * @typedef {(ProxyConfigArrayItem | ((req?: Request | undefined, res?: Response | undefined, next?: NextFunction | undefined) => ProxyConfigArrayItem))[]} ProxyConfigArray + */ + /** + * @typedef {Object} OpenApp + * @property {string} [name] + * @property {string[]} [arguments] + */ + /** + * @typedef {Object} Open + * @property {string | string[] | OpenApp} [app] + * @property {string | string[]} [target] + */ + /** + * @typedef {Object} NormalizedOpen + * @property {string} target + * @property {import("open").Options} options + */ + /** + * @typedef {Object} WebSocketURL + * @property {string} [hostname] + * @property {string} [password] + * @property {string} [pathname] + * @property {number | string} [port] + * @property {string} [protocol] + * @property {string} [username] + */ + /** + * @typedef {boolean | ((error: Error) => void)} OverlayMessageOptions + */ + /** + * @typedef {Object} ClientConfiguration + * @property {"log" | "info" | "warn" | "error" | "none" | "verbose"} [logging] + * @property {boolean | { warnings?: OverlayMessageOptions, errors?: OverlayMessageOptions, runtimeErrors?: OverlayMessageOptions }} [overlay] + * @property {boolean} [progress] + * @property {boolean | number} [reconnect] + * @property {"ws" | "sockjs" | string} [webSocketTransport] + * @property {string | WebSocketURL} [webSocketURL] + */ + /** + * @typedef {Array<{ key: string; value: string }> | Record} Headers + */ + /** + * @template {BasicApplication} [T=ExpressApplication] + * @typedef {T extends ExpressApplication ? ExpressRequestHandler | ExpressErrorRequestHandler : HandleFunction} MiddlewareHandler + */ + /** + * @typedef {{ name?: string, path?: string, middleware: MiddlewareHandler } | MiddlewareHandler } Middleware + */ + /** + * @template {BasicApplication} [T=ExpressApplication] + * @typedef {Object} Configuration + * @property {boolean | string} [ipc] + * @property {Host} [host] + * @property {Port} [port] + * @property {boolean | "only"} [hot] + * @property {boolean} [liveReload] + * @property {DevMiddlewareOptions} [devMiddleware] + * @property {boolean} [compress] + * @property {"auto" | "all" | string | string[]} [allowedHosts] + * @property {boolean | ConnectHistoryApiFallbackOptions} [historyApiFallback] + * @property {boolean | Record | BonjourOptions} [bonjour] + * @property {string | string[] | WatchFiles | Array} [watchFiles] + * @property {boolean | string | Static | Array} [static] + * @property {boolean | ServerOptions} [https] + * @property {"http" | "https" | "spdy" | string | ServerConfiguration} [server] + * @property {() => Promise} [app] + * @property {boolean | "sockjs" | "ws" | string | WebSocketServerConfiguration} [webSocketServer] + * @property {ProxyConfigArray} [proxy] + * @property {boolean | string | Open | Array} [open] + * @property {boolean} [setupExitSignals] + * @property {boolean | ClientConfiguration} [client] + * @property {Headers | ((req: Request, res: Response, context: DevMiddlewareContext) => Headers)} [headers] + * @property {(devServer: Server) => void} [onListening] + * @property {(middlewares: Middleware[], devServer: Server) => Middleware[]} [setupMiddlewares] + */ cli: { negatedDescription: string; }; instanceof?: undefined; } | { - instanceof: string /** - * @typedef {import("ws").WebSocketServer | import("sockjs").Server & { close: import("ws").WebSocketServer["close"] }} WebSocketServer - */; + instanceof: string; description: string; type?: undefined; cli?: undefined; @@ -322,70 +633,92 @@ declare class Server { } )[]; }; + /** + * @callback ByPass + * @param {Request} req + * @param {Response} res + * @param {ProxyConfigArrayItem} proxyConfig + */ + /** + * @typedef {{ path?: HttpProxyMiddlewareOptionsFilter | undefined, context?: HttpProxyMiddlewareOptionsFilter | undefined } & { bypass?: ByPass } & HttpProxyMiddlewareOptions } ProxyConfigArrayItem + */ + /** + * @typedef {(ProxyConfigArrayItem | ((req?: Request | undefined, res?: Response | undefined, next?: NextFunction | undefined) => ProxyConfigArrayItem))[]} ProxyConfigArray + */ + /** + * @typedef {Object} OpenApp + * @property {string} [name] + * @property {string[]} [arguments] + */ + /** + * @typedef {Object} Open + * @property {string | string[] | OpenApp} [app] + * @property {string | string[]} [target] + */ + /** + * @typedef {Object} NormalizedOpen + * @property {string} target + * @property {import("open").Options} options + */ + /** + * @typedef {Object} WebSocketURL + * @property {string} [hostname] + * @property {string} [password] + * @property {string} [pathname] + * @property {number | string} [port] + * @property {string} [protocol] + * @property {string} [username] + */ + /** + * @typedef {boolean | ((error: Error) => void)} OverlayMessageOptions + */ + /** + * @typedef {Object} ClientConfiguration + * @property {"log" | "info" | "warn" | "error" | "none" | "verbose"} [logging] + * @property {boolean | { warnings?: OverlayMessageOptions, errors?: OverlayMessageOptions, runtimeErrors?: OverlayMessageOptions }} [overlay] + * @property {boolean} [progress] + * @property {boolean | number} [reconnect] + * @property {"ws" | "sockjs" | string} [webSocketTransport] + * @property {string | WebSocketURL} [webSocketURL] + */ + /** + * @typedef {Array<{ key: string; value: string }> | Record} Headers + */ + /** + * @template {BasicApplication} [T=ExpressApplication] + * @typedef {T extends ExpressApplication ? ExpressRequestHandler | ExpressErrorRequestHandler : HandleFunction} MiddlewareHandler + */ + /** + * @typedef {{ name?: string, path?: string, middleware: MiddlewareHandler } | MiddlewareHandler } Middleware + */ + /** + * @template {BasicApplication} [T=ExpressApplication] + * @typedef {Object} Configuration + * @property {boolean | string} [ipc] + * @property {Host} [host] + * @property {Port} [port] + * @property {boolean | "only"} [hot] + * @property {boolean} [liveReload] + * @property {DevMiddlewareOptions} [devMiddleware] + * @property {boolean} [compress] + * @property {"auto" | "all" | string | string[]} [allowedHosts] + * @property {boolean | ConnectHistoryApiFallbackOptions} [historyApiFallback] + * @property {boolean | Record | BonjourOptions} [bonjour] + * @property {string | string[] | WatchFiles | Array} [watchFiles] + * @property {boolean | string | Static | Array} [static] + * @property {boolean | ServerOptions} [https] + * @property {"http" | "https" | "spdy" | string | ServerConfiguration} [server] + * @property {() => Promise} [app] + * @property {boolean | "sockjs" | "ws" | string | WebSocketServerConfiguration} [webSocketServer] + * @property {ProxyConfigArray} [proxy] + * @property {boolean | string | Open | Array} [open] + * @property {boolean} [setupExitSignals] + * @property {boolean | ClientConfiguration} [client] + * @property {Headers | ((req: Request, res: Response, context: DevMiddlewareContext) => Headers)} [headers] + * @property {(devServer: Server) => void} [onListening] + * @property {(middlewares: Middleware[], devServer: Server) => Middleware[]} [setupMiddlewares] + */ trustedTypesPolicyName: { - /** - * @typedef {Object} Open - * @property {string | string[] | OpenApp} [app] - * @property {string | string[]} [target] - */ - /** - * @typedef {Object} NormalizedOpen - * @property {string} target - * @property {import("open").Options} options - */ - /** - * @typedef {Object} WebSocketURL - * @property {string} [hostname] - * @property {string} [password] - * @property {string} [pathname] - * @property {number | string} [port] - * @property {string} [protocol] - * @property {string} [username] - */ - /** - * @typedef {boolean | ((error: Error) => void)} OverlayMessageOptions - */ - /** - * @typedef {Object} ClientConfiguration - * @property {"log" | "info" | "warn" | "error" | "none" | "verbose"} [logging] - * @property {boolean | { warnings?: OverlayMessageOptions, errors?: OverlayMessageOptions, runtimeErrors?: OverlayMessageOptions }} [overlay] - * @property {boolean} [progress] - * @property {boolean | number} [reconnect] - * @property {"ws" | "sockjs" | string} [webSocketTransport] - * @property {string | WebSocketURL} [webSocketURL] - */ - /** - * @typedef {Array<{ key: string; value: string }> | Record} Headers - */ - /** - * @typedef {{ name?: string, path?: string, middleware: ExpressRequestHandler | ExpressErrorRequestHandler } | ExpressRequestHandler | ExpressErrorRequestHandler} Middleware - */ - /** - * @typedef {Object} Configuration - * @property {boolean | string} [ipc] - * @property {Host} [host] - * @property {Port} [port] - * @property {boolean | "only"} [hot] - * @property {boolean} [liveReload] - * @property {DevMiddlewareOptions} [devMiddleware] - * @property {boolean} [compress] - * @property {"auto" | "all" | string | string[]} [allowedHosts] - * @property {boolean | ConnectHistoryApiFallbackOptions} [historyApiFallback] - * @property {boolean | Record | BonjourOptions} [bonjour] - * @property {string | string[] | WatchFiles | Array} [watchFiles] - * @property {boolean | string | Static | Array} [static] - * @property {boolean | ServerOptions} [https] - * @property {boolean} [http2] - * @property {"http" | "https" | "spdy" | string | ServerConfiguration} [server] - * @property {boolean | "sockjs" | "ws" | string | WebSocketServerConfiguration} [webSocketServer] - * @property {ProxyConfigMap | ProxyConfigArrayItem | ProxyConfigArray} [proxy] - * @property {boolean | string | Open | Array} [open] - * @property {boolean} [setupExitSignals] - * @property {boolean | ClientConfiguration} [client] - * @property {Headers | ((req: Request, res: Response, context: DevMiddlewareContext) => Headers)} [headers] - * @property {(devServer: Server) => void} [onListening] - * @property {(middlewares: Middleware[], devServer: Server) => Middleware[]} [setupMiddlewares] - */ description: string; type: string; }; @@ -502,10 +835,15 @@ declare class Server { }; Compress: { type: string; + /** + * @template T + * @param fn {(function(): any) | undefined} + * @returns {function(): T} + */ description: string; link: string; cli: { - negatedDescription: string; + negatedDescription: string /** @type {function(): any} */; }; }; DevMiddleware: { @@ -539,9 +877,6 @@ declare class Server { $ref: string; }; minItems: number; - /** - * @type {Socket[]} - */ instanceof?: undefined; } | { @@ -582,10 +917,17 @@ declare class Server { }; Host: { description: string; + /** + * @private + * @type {RequestHandler[]} + */ link: string; anyOf: ( | { enum: string[]; + /** + * @type {Socket[]} + */ type?: undefined; minLength?: undefined; } @@ -641,11 +983,6 @@ declare class Server { OnListening: { instanceof: string; description: string; - /** - * @param {Port} port - * @param {string} host - * @returns {Promise} - */ link: string; }; Open: { @@ -781,11 +1118,11 @@ declare class Server { anyOf: ( | { type: string; - /** @type {WebSocketURL} */ instanceof?: undefined; + instanceof?: undefined; } | { instanceof: string; - /** @type {ClientConfiguration} */ type?: undefined; + type?: undefined; } )[]; }; @@ -800,7 +1137,10 @@ declare class Server { description: string; }; ServerType: { - enum: string[]; + enum: string[] /** + * @private + * @param {Compiler} compiler + */; }; ServerEnum: { enum: string[]; @@ -824,7 +1164,7 @@ declare class Server { }[]; }; options: { - $ref: string; + $ref: string /** @type {{ type: WebSocketServerConfiguration["type"], options: NonNullable }} */; }; }; additionalProperties: boolean; @@ -835,13 +1175,14 @@ declare class Server { properties: { passphrase: { type: string; + /** @type {string} */ description: string; }; requestCert: { type: string; description: string; cli: { - negatedDescription: string; + negatedDescription: string /** @type {ServerConfiguration} */; }; }; ca: { @@ -1144,7 +1485,7 @@ declare class Server { $ref: string; }[]; }; - $ref?: undefined; + /** @type {MultiCompiler} */ $ref?: undefined; } | { $ref: string; @@ -1190,7 +1531,7 @@ declare class Server { }; WatchFilesString: { type: string; - /** @type {NormalizedStatic} */ minLength: number; + minLength: number; }; WebSocketServer: { anyOf: { @@ -1299,6 +1640,9 @@ declare class Server { server: { $ref: string; }; + app: { + $ref: string; + }; setupExitSignals: { $ref: string; }; @@ -1358,23 +1702,19 @@ declare class Server { */ private static isWebTarget; /** - * @param {Configuration | Compiler | MultiCompiler} options - * @param {Compiler | MultiCompiler | Configuration} compiler + * @param {Configuration} options + * @param {Compiler | MultiCompiler} compiler */ constructor( - options: - | import("webpack").Compiler - | import("webpack").MultiCompiler - | Configuration - | undefined, - compiler: Compiler | MultiCompiler | Configuration, + options: Configuration | undefined, + compiler: Compiler | MultiCompiler, ); compiler: import("webpack").Compiler | import("webpack").MultiCompiler; /** * @type {ReturnType} * */ logger: ReturnType; - options: Configuration; + options: Configuration; /** * @type {FSWatcher[]} */ @@ -1435,11 +1775,11 @@ declare class Server { private initialize; /** * @private - * @returns {void} + * @returns {Promise} */ private setupApp; - /** @type {import("express").Application | undefined}*/ - app: import("express").Application | undefined; + /** @type {T | undefined}*/ + app: T | undefined; /** * @private * @param {Stats | MultiStats} statsObj @@ -1615,9 +1955,6 @@ declare namespace Server { Stats, MultiStats, NetworkInterfaceInfo, - NextFunction, - ExpressRequestHandler, - ExpressErrorRequestHandler, WatchOptions, FSWatcher, ConnectHistoryApiFallbackOptions, @@ -1634,6 +1971,16 @@ declare namespace Server { IncomingMessage, ServerResponse, OpenOptions, + ExpressApplication, + ExpressRequestHandler, + ExpressErrorRequestHandler, + ExpressRequest, + ExpressResponse, + NextFunction, + SimpleHandleFunction, + NextHandleFunction, + ErrorHandleFunction, + HandleFunction, ServerOptions, Request, Response, @@ -1652,7 +1999,6 @@ declare namespace Server { ByPass, ProxyConfigArrayItem, ProxyConfigArray, - ProxyConfigMap, OpenApp, Open, NormalizedOpen, @@ -1660,8 +2006,10 @@ declare namespace Server { OverlayMessageOptions, ClientConfiguration, Headers, + MiddlewareHandler, Middleware, Configuration, + BasicApplication, }; } type Compiler = import("webpack").Compiler; @@ -1682,9 +2030,6 @@ type StatsCompilation = import("webpack").StatsCompilation; type Stats = import("webpack").Stats; type MultiStats = import("webpack").MultiStats; type NetworkInterfaceInfo = import("os").NetworkInterfaceInfo; -type NextFunction = import("express").NextFunction; -type ExpressRequestHandler = import("express").RequestHandler; -type ExpressErrorRequestHandler = import("express").ErrorRequestHandler; type WatchOptions = import("chokidar").WatchOptions; type ConnectHistoryApiFallbackOptions = import("connect-history-api-fallback").Options; @@ -1700,6 +2045,28 @@ type IPv6 = import("ipaddr.js").IPv6; 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 NextFunction = (err?: any) => void; +type SimpleHandleFunction = (req: IncomingMessage, res: ServerResponse) => void; +type NextHandleFunction = ( + req: IncomingMessage, + res: ServerResponse, + next: NextFunction, +) => void; +type ErrorHandleFunction = ( + err: any, + req: IncomingMessage, + res: ServerResponse, + next: NextFunction, +) => void; +type HandleFunction = + | SimpleHandleFunction + | NextHandleFunction + | ErrorHandleFunction; type ServerOptions = import("https").ServerOptions & { spdy?: { plain?: boolean | undefined; @@ -1709,8 +2076,10 @@ type ServerOptions = import("https").ServerOptions & { protocols?: string[] | undefined; }; }; -type Request = import("express").Request; -type Response = import("express").Response; +type Request = + T extends ExpressApplication ? ExpressRequest : IncomingMessage; +type Response = + T extends ExpressApplication ? ExpressResponse : ServerResponse; type DevMiddlewareOptions< T extends import("express").Request< import("express-serve-static-core").ParamsDictionary, @@ -1810,9 +2179,6 @@ type ProxyConfigArray = ( next?: NextFunction | undefined, ) => ProxyConfigArrayItem) )[]; -type ProxyConfigMap = { - [url: string]: string | ProxyConfigArrayItem; -}; type OpenApp = { name?: string | undefined; arguments?: string[] | undefined; @@ -1855,72 +2221,102 @@ type Headers = value: string; }> | Record; +type MiddlewareHandler< + T extends BasicApplication = import("express").Application, +> = T extends ExpressApplication + ? ExpressRequestHandler | ExpressErrorRequestHandler + : HandleFunction; type Middleware = | { name?: string; path?: string; - middleware: ExpressRequestHandler | ExpressErrorRequestHandler; + middleware: MiddlewareHandler; } - | ExpressRequestHandler - | ExpressErrorRequestHandler; -type Configuration = { - ipc?: string | boolean | undefined; - host?: string | undefined; - port?: Port | undefined; - hot?: boolean | "only" | undefined; - liveReload?: boolean | undefined; - devMiddleware?: - | DevMiddlewareOptions< - import("express").Request< - import("express-serve-static-core").ParamsDictionary, - any, - any, - qs.ParsedQs, - Record - >, - import("express").Response> - > - | undefined; - compress?: boolean | undefined; - allowedHosts?: string | string[] | undefined; - historyApiFallback?: - | boolean - | import("connect-history-api-fallback").Options - | undefined; - bonjour?: - | boolean - | Record - | import("bonjour-service").Service - | undefined; - watchFiles?: - | string - | string[] - | WatchFiles - | (string | WatchFiles)[] - | undefined; - static?: string | boolean | Static | (string | Static)[] | undefined; - https?: boolean | ServerOptions | undefined; - http2?: boolean | undefined; - server?: string | ServerConfiguration | undefined; - webSocketServer?: string | boolean | WebSocketServerConfiguration | undefined; - proxy?: ProxyConfigArrayItem | ProxyConfigMap | ProxyConfigArray | undefined; - open?: string | boolean | Open | (string | Open)[] | undefined; - setupExitSignals?: boolean | undefined; - client?: boolean | ClientConfiguration | undefined; - headers?: - | Headers - | (( - req: Request, - res: Response, - context: DevMiddlewareContext, - ) => Headers) - | undefined; - onListening?: ((devServer: Server) => void) | undefined; - setupMiddlewares?: - | ((middlewares: Middleware[], devServer: Server) => Middleware[]) - | undefined; + | MiddlewareHandler; +type Configuration = + { + ipc?: string | boolean | undefined; + host?: string | undefined; + port?: Port | undefined; + hot?: boolean | "only" | undefined; + liveReload?: boolean | undefined; + devMiddleware?: + | DevMiddlewareOptions< + import("express").Request< + import("express-serve-static-core").ParamsDictionary, + any, + any, + qs.ParsedQs, + Record + >, + import("express").Response> + > + | undefined; + compress?: boolean | undefined; + allowedHosts?: string | string[] | undefined; + historyApiFallback?: + | boolean + | import("connect-history-api-fallback").Options + | undefined; + bonjour?: + | boolean + | Record + | import("bonjour-service").Service + | undefined; + watchFiles?: + | string + | string[] + | WatchFiles + | (string | WatchFiles)[] + | undefined; + static?: string | boolean | Static | (string | Static)[] | undefined; + https?: boolean | ServerOptions | undefined; + server?: string | ServerConfiguration | undefined; + app?: (() => Promise) | undefined; + webSocketServer?: + | string + | boolean + | WebSocketServerConfiguration + | undefined; + proxy?: ProxyConfigArray | undefined; + open?: string | boolean | Open | (string | Open)[] | undefined; + setupExitSignals?: boolean | undefined; + client?: boolean | ClientConfiguration | undefined; + headers?: + | Headers + | (( + req: Request, + res: Response, + context: DevMiddlewareContext, + ) => Headers) + | undefined; + onListening?: ((devServer: Server) => void) | undefined; + setupMiddlewares?: + | ((middlewares: Middleware[], devServer: Server) => Middleware[]) + | undefined; + }; +type BasicApplication = { + use: typeof useFn; }; -import path = require("path"); +/** + * @overload + * @param {NextHandleFunction} fn + * @returns {BasicApplication} + */ +declare function useFn(fn: NextHandleFunction): BasicApplication; +/** + * @overload + * @param {HandleFunction} fn + * @returns {BasicApplication} + */ +declare function useFn(fn: HandleFunction): BasicApplication; +/** + * @overload + * @param {string} route + * @param {NextHandleFunction} fn + * @returns {BasicApplication} + */ +declare function useFn(route: string, fn: NextHandleFunction): BasicApplication; // DO NOT REMOVE THIS! type DevServerConfiguration = Configuration;