diff --git a/.vscode/extensions.json b/.vscode/extensions.json index ed91718..593120a 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,8 +1,8 @@ { - "recommendations": [ - "streetsidesoftware.code-spell-checker", - "tamasfe.even-better-toml", - "rust-lang.rust-analyzer", - "fabiospampinato.vscode-debug-launcher" - ] + "recommendations": [ + "streetsidesoftware.code-spell-checker", + "tamasfe.even-better-toml", + "rust-lang.rust-analyzer", + "fabiospampinato.vscode-debug-launcher" + ] } diff --git a/.vscode/settings.json b/.vscode/settings.json index 07e2d5c..4c3dfeb 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,18 +1,18 @@ { - "search.useIgnoreFiles": true, - "[json]": { - "editor.defaultFormatter": "biomejs.biome" - }, - "[typescript]": { - "editor.defaultFormatter": "biomejs.biome" - }, - "[javascript]": { - "editor.defaultFormatter": "biomejs.biome" - }, - "[javascriptreact]": { - "editor.defaultFormatter": "biomejs.biome" - }, - "[css]": { - "editor.defaultFormatter": "biomejs.biome" - } -} \ No newline at end of file + "search.useIgnoreFiles": true, + "[json]": { + "editor.defaultFormatter": "biomejs.biome" + }, + "[typescript]": { + "editor.defaultFormatter": "biomejs.biome" + }, + "[javascript]": { + "editor.defaultFormatter": "biomejs.biome" + }, + "[javascriptreact]": { + "editor.defaultFormatter": "biomejs.biome" + }, + "[css]": { + "editor.defaultFormatter": "biomejs.biome" + } +} diff --git a/biome.jsonc b/biome.jsonc index bf03ed3..f798737 100644 --- a/biome.jsonc +++ b/biome.jsonc @@ -1,8 +1,11 @@ { - "$schema": "https://biomejs.dev/schemas/1.8.0/schema.json", - "linter": { - "ignore": [ - "client-src/**/*.js" - ] - } -} \ No newline at end of file + "$schema": "https://biomejs.dev/schemas/1.8.0/schema.json", + "files": { + "ignore": [ + "client-src/**/*", + "client/**/*.js", + "dist/**/*", + "tests/fixtures/**/*" + ] + } +} diff --git a/client-src/index.js b/client-src/index.js index c415d7b..567eace 100644 --- a/client-src/index.js +++ b/client-src/index.js @@ -1,5 +1,6 @@ // @ts-nocheck +import hotEmitter from "@rspack/core/hot/emitter.js"; /* global __resourceQuery, __webpack_hash__ */ /* Rspack dev server runtime client */ /// @@ -9,16 +10,13 @@ import { formatProblem, } from "webpack-dev-server/client/overlay.js"; import socket from "webpack-dev-server/client/socket.js"; -import createSocketURL from "webpack-dev-server/client/utils/createSocketURL.js"; import { - log, - logEnabledFeatures, - setLogLevel, -} from "webpack-dev-server/client/utils/log.js"; -import parseURL from "webpack-dev-server/client/utils/parseURL.js"; + defineProgressElement, + isProgressSupported, +} from "webpack-dev-server/client/progress.js"; +import socket from "webpack-dev-server/client/socket.js"; +import { log, setLogLevel } from "webpack-dev-server/client/utils/log.js"; import sendMessage from "webpack-dev-server/client/utils/sendMessage.js"; -import stripAnsi from "webpack-dev-server/client/utils/stripAnsi.js"; -import reloadApp from "./utils/reloadApp.js"; /** * @typedef {Object} OverlayOptions @@ -57,18 +55,57 @@ const decodeOverlayOptions = (overlayOptions) => { ); // eslint-disable-next-line no-new-func - const overlayFilterFunction = new Function( + overlayOptions[property] = new Function( "message", `var callback = ${overlayFilterFunctionString} return callback(message)`, ); - - overlayOptions[property] = overlayFilterFunction; } }); } }; +/** + * @param {string} resourceQuery + * @returns {{ [key: string]: string | boolean }} + */ +const parseURL = (resourceQuery) => { + /** @type {{ [key: string]: string }} */ + let result = {}; + + if (typeof resourceQuery === "string" && resourceQuery !== "") { + const searchParams = resourceQuery.slice(1).split("&"); + + for (let i = 0; i < searchParams.length; i++) { + const pair = searchParams[i].split("="); + + result[pair[0]] = decodeURIComponent(pair[1]); + } + } else { + // Else, get the url from the + + +" +`; + +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 "http2" 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 "http2" server should handle GET request to index route (/): page errors 1`] = `[]`; + +exports[`app option should work using "connect" application and "http2" server should handle GET request to index route (/): response status 1`] = `200`; + +exports[`app option should work using "connect" application and "http2" 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...

+ + + +" +`; + +exports[`app option should work using "hono" application and "[object Object]" 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 "hono" application and "[object Object]" server should handle GET request to index route (/): page errors 1`] = `[]`; + +exports[`app option should work using "hono" application and "[object Object]" server should handle GET request to index route (/): response status 1`] = `200`; + +exports[`app option should work using "hono" application and "[object Object]" 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 "hono" application and "custom server" 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 "hono" application and "custom server" server should handle GET request to index route (/): console messages 2`] = ` +[ + "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", + "[HMR] Waiting for update signal from WDS...", + "Hey.", +] +`; + +exports[`app option should work using "hono" application and "custom server" server should handle GET request to index route (/): page errors 1`] = `[]`; + +exports[`app option should work using "hono" application and "custom server" server should handle GET request to index route (/): page errors 2`] = `[]`; + +exports[`app option should work using "hono" application and "custom server" server should handle GET request to index route (/): response status 1`] = `200`; + +exports[`app option should work using "hono" application and "custom server" server should handle GET request to index route (/): response status 2`] = `200`; + +exports[`app option should work using "hono" application and "custom server" 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 "hono" application and "custom server" server should handle GET request to index route (/): response text 2`] = ` +" + + + + + webpack-dev-server + + +

webpack-dev-server is running...

+ + + +" +`; diff --git a/tests/e2e/__snapshots__/built-in-routes.test.js.snap.webpack5 b/tests/e2e/__snapshots__/built-in-routes.test.js.snap.webpack5 index 769c716..9fa4d94 100644 --- a/tests/e2e/__snapshots__/built-in-routes.test.js.snap.webpack5 +++ b/tests/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/tests/e2e/__snapshots__/client.test.js.snap.webpack5 b/tests/e2e/__snapshots__/client.test.js.snap.webpack5 index b74d2a0..819b0ec 100644 --- a/tests/e2e/__snapshots__/client.test.js.snap.webpack5 +++ b/tests/e2e/__snapshots__/client.test.js.snap.webpack5 @@ -18,6 +18,8 @@ exports[`client option default behaviour responds with a 200 status code for /ws exports[`client option default behaviour responds with a 200 status code for /ws path: response status 1`] = `200`; +exports[`client option override client entry should disable client entry: response status 1`] = `200`; + exports[`client option should respect path option responds with a 200 status code for /foo/test/bar path: console messages 1`] = `[]`; exports[`client option should respect path option responds with a 200 status code for /foo/test/bar path: page errors 1`] = `[]`; diff --git a/tests/e2e/__snapshots__/target.test.js.snap.webpack5 b/tests/e2e/__snapshots__/target.test.js.snap.webpack5 index 877b6a1..a5d2240 100644 --- a/tests/e2e/__snapshots__/target.test.js.snap.webpack5 +++ b/tests/e2e/__snapshots__/target.test.js.snap.webpack5 @@ -92,3 +92,27 @@ exports[`target should work using "webworker" target: console messages 1`] = ` "Hey.", ] `; + +exports[`target should work using multi compiler mode with \`web\` and \`webworker\` targets with \`devServer: false\`: 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...", + "Worker said: I'm working before postMessage", + "Worker said: Message sent: message", +] +`; + +exports[`target should work using multi compiler mode with \`web\` and \`webworker\` targets with \`devServer: false\`: page errors 1`] = `[]`; + +exports[`target should work using multi compiler mode with \`web\` and \`webworker\` targets: console messages 1`] = ` +[ + "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", + "[HMR] Waiting for update signal from WDS...", + "[webpack-dev-server] Server started: Hot Module Replacement enabled, Live Reloading enabled, Progress disabled, Overlay enabled.", + "[HMR] Waiting for update signal from WDS...", + "Worker said: I'm working before postMessage", + "Worker said: Message sent: message", +] +`; + +exports[`target should work using multi compiler mode with \`web\` and \`webworker\` targets: page errors 1`] = `[]`; diff --git a/tests/e2e/allowed-hosts.test.js b/tests/e2e/allowed-hosts.test.js index e31c2b5..47a3bc2 100644 --- a/tests/e2e/allowed-hosts.test.js +++ b/tests/e2e/allowed-hosts.test.js @@ -1,5 +1,3 @@ -"use strict"; - const express = require("express"); const webpack = require("@rspack/core"); const { createProxyMiddleware } = require("http-proxy-middleware"); @@ -11,1521 +9,1491 @@ const [port1, port2] = require("../helpers/ports-map")["allowed-hosts"]; const webSocketServers = ["ws", "sockjs"]; describe("allowed hosts", () => { - for (const webSocketServer of webSocketServers) { - it(`should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "host" header ("${webSocketServer}")`, async () => { - 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); - }); - }); - - const { page, browser } = await runBrowser(); - - 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(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); - expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; - } finally { - proxy.close(); - - await browser.close(); - await server.stop(); - } - }); - - it(`should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "host" header when "server: 'https'" is enabled ("${webSocketServer}")`, async () => { - 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); - }); - }); - - const { page, browser } = await runBrowser(); - - 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(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); - expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; - } finally { - proxy.close(); - - await browser.close(); - await server.stop(); - } - }); - - it(`should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "origin" header ("${webSocketServer}")`, async () => { - 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); - }); - }); - - const { page, browser } = await runBrowser(); - - 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(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); - expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; - } finally { - proxy.close(); - - await browser.close(); - await server.stop(); - } - }); - - it(`should connect web socket client using localhost to web socket server with the "auto" value ("${webSocketServer}")`, async () => { - 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); - }); - }); - - const { page, browser } = await runBrowser(); - 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(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); - expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; - } finally { - proxy.close(); - - await browser.close(); - await server.stop(); - } - }); - - it(`should connect web socket client using "127.0.0.1" host to web socket server with the "auto" value ("${webSocketServer}")`, async () => { - 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); - }); - }); - - const { page, browser } = await runBrowser(); - - 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(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); - expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; - } finally { - proxy.close(); - - await browser.close(); - await server.stop(); - } - }); - - it(`should connect web socket client using "[::1] host to web socket server with the "auto" value ("${webSocketServer}")`, async () => { - 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); - }); - }); - - const { page, browser } = await runBrowser(); - - 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(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); - expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; - } finally { - proxy.close(); - - await browser.close(); - await server.stop(); - } - }); - - it(`should connect web socket client using "file:" protocol to web socket server with the "auto" value ("${webSocketServer}")`, async () => { - 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); - }); - }); - - const { page, browser } = await runBrowser(); - - 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(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); - expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; - } finally { - proxy.close(); - - await browser.close(); - await server.stop(); - } - }); - - it(`should connect web socket client using "chrome-extension:" protocol to web socket server with the "auto" value ("${webSocketServer}")`, async () => { - 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); - }); - }); - - const { page, browser } = await runBrowser(); - - 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(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); - expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; - } finally { - proxy.close(); - - await browser.close(); - await server.stop(); - } - }); - - it(`should connect web socket client using custom hostname to web socket server with the "all" value ("${webSocketServer}")`, async () => { - 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); - }); - }); - - const { page, browser } = await runBrowser(); - - 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(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); - expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; - } finally { - proxy.close(); - - await browser.close(); - await server.stop(); - } - }); - - it(`should connect web socket client using custom hostname to web socket server with the "all" value in array ("${webSocketServer}")`, async () => { - 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); - }); - }); - - const { page, browser } = await runBrowser(); - - 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(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); - expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; - } finally { - proxy.close(); - - await browser.close(); - await server.stop(); - } - }); - - it(`should connect web socket client using custom hostname to web socket server with the custom hostname value ("${webSocketServer}")`, async () => { - 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); - }); - }); - - const { page, browser } = await runBrowser(); - - 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(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); - expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; - } finally { - proxy.close(); - - await browser.close(); - await server.stop(); - } - }); - - it(`should connect web socket client using custom hostname to web socket server with the custom hostname value starting with dot ("${webSocketServer}")`, async () => { - 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); - }); - }); - - const { page, browser } = await runBrowser(); - - 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(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); - expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; - } finally { - proxy.close(); - - await browser.close(); - await server.stop(); - } - }); - - it(`should connect web socket client using custom sub hostname to web socket server with the custom hostname value ("${webSocketServer}")`, async () => { - 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); - }); - }); - - const { page, browser } = await runBrowser(); - - 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(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); - expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; - } finally { - proxy.close(); - - await browser.close(); - await server.stop(); - } - }); - - it(`should connect web socket client using custom hostname to web socket server with the multiple custom hostname values ("${webSocketServer}")`, async () => { - 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); - }); - }); - - const { page, browser } = await runBrowser(); - - 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(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); - expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; - } finally { - proxy.close(); - - await browser.close(); - await server.stop(); - } - }); - - it(`should disconnect web client using localhost to web socket server with the "auto" value ("${webSocketServer}")`, async () => { - 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); - }); - }); - - const { page, browser } = await runBrowser(); - - 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(html).toMatchSnapshot("html"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); - expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; - } finally { - proxy.close(); - - await browser.close(); - await server.stop(); - } - }); - } - - describe("check host headers", () => { - let compiler; - let server; - let page; - let browser; - let pageErrors; - let consoleMessages; - - beforeEach(() => { - compiler = webpack(config); - pageErrors = []; - consoleMessages = []; - }); - - afterEach(async () => { - await browser.close(); - await server.stop(); - }); - - it("should always allow `localhost` if options.allowedHosts is auto", async () => { - const options = { - allowedHosts: "auto", - port: port1 - }; - - const headers = { - host: "localhost" - }; - - server = new Server(options, compiler); - - await server.start(); - - ({ page, browser } = await runBrowser()); - - 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(response.status()).toMatchSnapshot("response status"); - - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); - - expect(pageErrors).toMatchSnapshot("page errors"); - }); - - it("should always allow `localhost` subdomain if options.allowedHosts is auto", async () => { - const options = { - allowedHosts: "auto", - port: port1 - }; - - const headers = { - host: "app.localhost" - }; - - server = new Server(options, compiler); - - await server.start(); - - ({ page, browser } = await runBrowser()); - - 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(response.status()).toMatchSnapshot("response status"); - - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); - - expect(pageErrors).toMatchSnapshot("page errors"); - }); + for (const webSocketServer of webSocketServers) { + it(`should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "host" header ("${webSocketServer}")`, async () => { + 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); + }); + }); + + const { page, browser } = await runBrowser(); + + 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( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); + expect(pageErrors).toMatchSnapshot("page errors"); + } finally { + proxy.close(); + + await browser.close(); + await server.stop(); + } + }); + + it(`should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "host" header when "server: 'https'" is enabled ("${webSocketServer}")`, async () => { + 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); + }); + }); + + const { page, browser } = await runBrowser(); + + 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( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); + expect(pageErrors).toMatchSnapshot("page errors"); + } finally { + proxy.close(); + + await browser.close(); + await server.stop(); + } + }); + + it(`should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "origin" header ("${webSocketServer}")`, async () => { + 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); + }); + }); + + const { page, browser } = await runBrowser(); + + 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( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); + expect(pageErrors).toMatchSnapshot("page errors"); + } finally { + proxy.close(); + + await browser.close(); + await server.stop(); + } + }); + + it(`should connect web socket client using localhost to web socket server with the "auto" value ("${webSocketServer}")`, async () => { + 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); + }); + }); + + const { page, browser } = await runBrowser(); + 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( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); + expect(pageErrors).toMatchSnapshot("page errors"); + } finally { + proxy.close(); + + await browser.close(); + await server.stop(); + } + }); + + it(`should connect web socket client using "127.0.0.1" host to web socket server with the "auto" value ("${webSocketServer}")`, async () => { + 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); + }); + }); + + const { page, browser } = await runBrowser(); + + 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( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); + expect(pageErrors).toMatchSnapshot("page errors"); + } finally { + proxy.close(); + + await browser.close(); + await server.stop(); + } + }); + + it(`should connect web socket client using "[::1] host to web socket server with the "auto" value ("${webSocketServer}")`, async () => { + 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); + }); + }); + + const { page, browser } = await runBrowser(); + + 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( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); + expect(pageErrors).toMatchSnapshot("page errors"); + } finally { + proxy.close(); + + await browser.close(); + await server.stop(); + } + }); + + it(`should connect web socket client using "file:" protocol to web socket server with the "auto" value ("${webSocketServer}")`, async () => { + 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); + }); + }); + + const { page, browser } = await runBrowser(); + + 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( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); + expect(pageErrors).toMatchSnapshot("page errors"); + } finally { + proxy.close(); + + await browser.close(); + await server.stop(); + } + }); + + it(`should connect web socket client using "chrome-extension:" protocol to web socket server with the "auto" value ("${webSocketServer}")`, async () => { + 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); + }); + }); + + const { page, browser } = await runBrowser(); + + 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( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); + expect(pageErrors).toMatchSnapshot("page errors"); + } finally { + proxy.close(); + + await browser.close(); + await server.stop(); + } + }); + + it(`should connect web socket client using custom hostname to web socket server with the "all" value ("${webSocketServer}")`, async () => { + 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); + }); + }); + + const { page, browser } = await runBrowser(); + + 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( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); + expect(pageErrors).toMatchSnapshot("page errors"); + } finally { + proxy.close(); + + await browser.close(); + await server.stop(); + } + }); + + it(`should connect web socket client using custom hostname to web socket server with the "all" value in array ("${webSocketServer}")`, async () => { + 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); + }); + }); + + const { page, browser } = await runBrowser(); + + 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( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); + expect(pageErrors).toMatchSnapshot("page errors"); + } finally { + proxy.close(); + + await browser.close(); + await server.stop(); + } + }); + + it(`should connect web socket client using custom hostname to web socket server with the custom hostname value ("${webSocketServer}")`, async () => { + 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); + }); + }); + + const { page, browser } = await runBrowser(); + + 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( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); + expect(pageErrors).toMatchSnapshot("page errors"); + } finally { + proxy.close(); + + await browser.close(); + await server.stop(); + } + }); + + it(`should connect web socket client using custom hostname to web socket server with the custom hostname value starting with dot ("${webSocketServer}")`, async () => { + 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); + }); + }); + + const { page, browser } = await runBrowser(); + + 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( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); + expect(pageErrors).toMatchSnapshot("page errors"); + } finally { + proxy.close(); + + await browser.close(); + await server.stop(); + } + }); + + it(`should connect web socket client using custom sub hostname to web socket server with the custom hostname value ("${webSocketServer}")`, async () => { + 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); + }); + }); + + const { page, browser } = await runBrowser(); + + 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( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); + expect(pageErrors).toMatchSnapshot("page errors"); + } finally { + proxy.close(); + + await browser.close(); + await server.stop(); + } + }); + + it(`should connect web socket client using custom hostname to web socket server with the multiple custom hostname values ("${webSocketServer}")`, async () => { + 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); + }); + }); + + const { page, browser } = await runBrowser(); + + 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( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); + expect(pageErrors).toMatchSnapshot("page errors"); + } finally { + proxy.close(); + + await browser.close(); + await server.stop(); + } + }); + + it(`should disconnect web client using localhost to web socket server with the "auto" value ("${webSocketServer}")`, async () => { + 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); + }); + }); + + const { page, browser } = await runBrowser(); + + 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(html).toMatchSnapshot("html"); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); + expect(pageErrors).toMatchSnapshot("page errors"); + } finally { + proxy.close(); + + await browser.close(); + await server.stop(); + } + }); + } + + describe("check host headers", () => { + let compiler; + let server; + let page; + let browser; + let pageErrors; + let consoleMessages; + + beforeEach(() => { + compiler = webpack(config); + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + await browser.close(); + await server.stop(); + }); + + it("should always allow `localhost` if options.allowedHosts is auto", async () => { + const options = { + allowedHosts: "auto", + port: port1, + }; + + const headers = { + host: "localhost", + }; + + server = new Server(options, compiler); + + await server.start(); + + ({ page, browser } = await runBrowser()); + + 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(response.status()).toMatchSnapshot("response status"); + + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", + ); + + expect(pageErrors).toMatchSnapshot("page errors"); + }); + + it("should always allow `localhost` subdomain if options.allowedHosts is auto", async () => { + const options = { + allowedHosts: "auto", + port: port1, + }; + + const headers = { + host: "app.localhost", + }; + + server = new Server(options, compiler); + + await server.start(); + + ({ page, browser } = await runBrowser()); + + 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(response.status()).toMatchSnapshot("response status"); + + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", + ); + + expect(pageErrors).toMatchSnapshot("page errors"); + }); - it("should always allow value from the `host` options if options.allowedHosts is auto", async () => { - const networkIP = Server.internalIPSync("v4"); - const options = { - host: networkIP, - allowedHosts: "auto", - port: port1 - }; + it("should always allow value from the `host` options if options.allowedHosts is auto", async () => { + const networkIP = Server.internalIPSync("v4"); + const options = { + host: networkIP, + allowedHosts: "auto", + port: port1, + }; - const headers = { - host: networkIP - }; + const headers = { + host: networkIP, + }; - server = new Server(options, compiler); + server = new Server(options, compiler); - await server.start(); + await server.start(); - ({ page, browser } = await runBrowser()); + ({ page, browser } = await runBrowser()); - page - .on("console", message => { - consoleMessages.push(message); - }) - .on("pageerror", error => { - pageErrors.push(error); - }); + 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" - }); + const response = await page.goto(`http://${networkIP}:${port1}/main.js`, { + waitUntil: "networkidle0", + }); - if (!server.checkHeader(headers, "host")) { - throw new Error("Validation didn't fail"); - } + if (!server.checkHeader(headers, "host")) { + throw new Error("Validation didn't fail"); + } - expect(response.status()).toMatchSnapshot("response status"); + expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", + ); - expect(pageErrors).toMatchSnapshot("page errors"); - }); + expect(pageErrors).toMatchSnapshot("page errors"); + }); - it("should always allow value of the `host` option from the `client.webSocketURL` option if options.allowedHosts is auto", async () => { - const options = { - allowedHosts: "auto", - port: port1, - client: { - webSocketURL: "ws://test.host:80" - } - }; + it("should always allow value of the `host` option from the `client.webSocketURL` option if options.allowedHosts is auto", async () => { + const options = { + allowedHosts: "auto", + port: port1, + client: { + webSocketURL: "ws://test.host:80", + }, + }; - const headers = { - host: "test.host" - }; + const headers = { + host: "test.host", + }; - server = new Server(options, compiler); + server = new Server(options, compiler); - await server.start(); + await server.start(); - ({ page, browser } = await runBrowser()); + ({ page, browser } = await runBrowser()); - page - .on("console", message => { - consoleMessages.push(message); - }) - .on("pageerror", error => { - pageErrors.push(error); - }); + 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 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"); - } + if (!server.checkHeader(headers, "host")) { + throw new Error("Validation didn't fail"); + } - expect(response.status()).toMatchSnapshot("response status"); + expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", + ); - expect(pageErrors).toMatchSnapshot("page errors"); - }); + expect(pageErrors).toMatchSnapshot("page errors"); + }); - it("should always allow any host if options.allowedHosts is all", async () => { - const options = { - allowedHosts: "all", - port: port1 - }; - const headers = { - host: "bad.host" - }; + it("should always allow any host if options.allowedHosts is all", async () => { + const options = { + allowedHosts: "all", + port: port1, + }; + const headers = { + host: "bad.host", + }; - server = new Server(options, compiler); + server = new Server(options, compiler); - await server.start(); + await server.start(); - ({ page, browser } = await runBrowser()); + ({ page, browser } = await runBrowser()); - page - .on("console", message => { - consoleMessages.push(message); - }) - .on("pageerror", error => { - pageErrors.push(error); - }); + 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 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"); - } + if (!server.checkHeader(headers, "host")) { + throw new Error("Validation didn't fail"); + } - expect(response.status()).toMatchSnapshot("response status"); - - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); + expect(response.status()).toMatchSnapshot("response status"); + + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", + ); - expect(pageErrors).toMatchSnapshot("page errors"); - }); + expect(pageErrors).toMatchSnapshot("page errors"); + }); - it("should allow hosts in allowedHosts", async () => { - const tests = ["test.host", "test2.host", "test3.host"]; - const options = { - allowedHosts: tests, - port: port1 - }; + it("should allow hosts in allowedHosts", async () => { + const tests = ["test.host", "test2.host", "test3.host"]; + const options = { + allowedHosts: tests, + port: port1, + }; - server = new Server(options, compiler); + server = new Server(options, compiler); - await server.start(); + await server.start(); - ({ page, browser } = await runBrowser()); + ({ page, browser } = await runBrowser()); - page - .on("console", message => { - consoleMessages.push(message); - }) - .on("pageerror", error => { - pageErrors.push(error); - }); + 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 response = await page.goto(`http://127.0.0.1:${port1}/main.js`, { + waitUntil: "networkidle0", + }); - tests.forEach(test => { - const headers = { host: test }; + for (const test of tests) { + const headers = { host: test }; - if (!server.checkHeader(headers, "host")) { - throw new Error("Validation didn't fail"); - } - }); + if (!server.checkHeader(headers, "host")) { + throw new Error("Validation didn't fail"); + } + } - expect(response.status()).toMatchSnapshot("response status"); + expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", + ); - expect(pageErrors).toMatchSnapshot("page errors"); - }); + expect(pageErrors).toMatchSnapshot("page errors"); + }); - it("should allow hosts that pass a wildcard in allowedHosts", async () => { - const options = { - allowedHosts: [".example.com"], - port: port1 - }; + it("should allow hosts that pass a wildcard in allowedHosts", async () => { + const options = { + allowedHosts: [".example.com"], + port: port1, + }; - server = new Server(options, compiler); + server = new Server(options, compiler); - await server.start(); + await server.start(); - ({ page, browser } = await runBrowser()); + ({ page, browser } = await runBrowser()); - page - .on("console", message => { - consoleMessages.push(message); - }) - .on("pageerror", error => { - pageErrors.push(error); - }); + 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 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" - ]; + 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 }; + for (const test of tests) { + const headers = { host: test }; - if (!server.checkHeader(headers, "host")) { - throw new Error("Validation didn't fail"); - } - }); + if (!server.checkHeader(headers, "host")) { + throw new Error("Validation didn't fail"); + } + } - expect(response.status()).toMatchSnapshot("response status"); + expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", + ); - expect(pageErrors).toMatchSnapshot("page errors"); - }); - }); + expect(pageErrors).toMatchSnapshot("page errors"); + }); + }); }); diff --git a/tests/e2e/api.test.js b/tests/e2e/api.test.js index 730224e..2a2c441 100644 --- a/tests/e2e/api.test.js +++ b/tests/e2e/api.test.js @@ -1,6 +1,4 @@ -"use strict"; - -const path = require("path"); +const path = require("node:path"); const webpack = require("@rspack/core"); const { RspackDevServer: Server } = require("@rspack/dev-server"); const config = require("../fixtures/client-config/webpack.config"); @@ -23,7 +21,7 @@ describe("API", () => { process.env = { ...OLD_ENV }; - delete process.env.WEBPACK_SERVE; + process.env.WEBPACK_SERVE = undefined; ({ page, browser } = await runBrowser()); @@ -41,15 +39,15 @@ describe("API", () => { expect(process.env.WEBPACK_SERVE).toBeUndefined(); page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const { - RspackDevServer: WebpackDevServer + RspackDevServer: WebpackDevServer, } = require("@rspack/dev-server"); const compiler = webpack(config); @@ -60,13 +58,13 @@ describe("API", () => { expect(process.env.WEBPACK_SERVE).toBe("true"); const response = await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -74,7 +72,7 @@ describe("API", () => { }); describe("latest async API", () => { - it(`should work with async API`, async () => { + it("should work with async API", async () => { const compiler = webpack(config); const server = new Server({ port }, compiler); @@ -87,34 +85,32 @@ describe("API", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); } }); - it(`should work with callback API`, async () => { + it("should work with callback API", async () => { const compiler = webpack(config); const server = new Server({ port }, compiler); - await new Promise(resolve => { + await new Promise((resolve) => { server.startCallback(() => { resolve(); }); @@ -127,26 +123,24 @@ describe("API", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); - await new Promise(resolve => { + await new Promise((resolve) => { server.stopCallback(() => { resolve(); }); @@ -154,38 +148,38 @@ describe("API", () => { } }); - it(`should catch errors within startCallback`, async () => { + it("should catch errors within startCallback", async () => { const compiler = webpack(config); const server = new Server( { port, static: "https://absolute-url.com/somewhere" }, - compiler + compiler, ); - await new Promise(resolve => { - server.startCallback(err => { + await new Promise((resolve) => { + server.startCallback((err) => { expect(err.message).toEqual( - "Using a URL as static.directory is not supported" + "Using a URL as static.directory is not supported", ); resolve(); }); }); - await new Promise(resolve => { + await new Promise((resolve) => { server.stopCallback(() => { resolve(); }); }); }); - it(`should work when using configured manually`, async () => { + it("should work when using configured manually", async () => { const compiler = webpack({ ...config, entry: [ "@rspack/core/hot/dev-server.js", `@rspack/dev-server/client/index.js?hot=true&live-reload=true"`, - path.resolve(__dirname, "../fixtures/client-config/foo.js") + path.resolve(__dirname, "../fixtures/client-config/foo.js"), ], - plugins: [...config.plugins, new webpack.HotModuleReplacementPlugin()] + plugins: [...config.plugins, new webpack.HotModuleReplacementPlugin()], }); const server = new Server({ port, hot: false, client: false }, compiler); @@ -197,30 +191,28 @@ describe("API", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); } }); - it(`should work and allow to rerun dev server multiple times`, async () => { + it("should work and allow to rerun dev server multiple times", async () => { const compiler = webpack(config); const server = new Server({ port }, compiler); @@ -233,23 +225,21 @@ describe("API", () => { const firstConsoleMessages = []; firstPage - .on("console", message => { + .on("console", (message) => { firstConsoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { firstPageErrors.push(error); }); await firstPage.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect( - firstConsoleMessages.map(message => message.text()) + firstConsoleMessages.map((message) => message.text()), ).toMatchSnapshot("console messages"); expect(firstPageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await server.stop(); } @@ -275,8 +265,6 @@ describe("API", () => { // secondConsoleMessages.map((message) => message.text()), // ).toMatchSnapshot("console messages"); // expect(secondPageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -301,10 +289,10 @@ describe("API", () => { consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); @@ -325,14 +313,14 @@ describe("API", () => { server.middleware.context.callbacks[0] = callback; const response = await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(callback).toHaveBeenCalledTimes(1); expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); }); @@ -343,14 +331,14 @@ describe("API", () => { server.invalidate(callback); const response = await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(callback).toHaveBeenCalledTimes(1); expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -362,21 +350,21 @@ describe("API", () => { let devServerPort; afterEach(() => { - delete process.env.WEBPACK_DEV_SERVER_BASE_PORT; - delete process.env.WEBPACK_DEV_SERVER_PORT_RETRY; + process.env.WEBPACK_DEV_SERVER_BASE_PORT = undefined; + process.env.WEBPACK_DEV_SERVER_PORT_RETRY = undefined; return dummyServers .reduce( (p, server) => p.then( () => - new Promise(resolve => { + new Promise((resolve) => { server.stopCallback(() => { resolve(); }); - }) + }), ), - Promise.resolve() + Promise.resolve(), ) .then(() => { dummyServers = []; @@ -390,12 +378,12 @@ describe("API", () => { (p, _, i) => p.then( () => - new Promise(resolve => { + new Promise((resolve) => { devServerPort = 60000 + i; const compiler = webpack(config); const server = new Server( { port: devServerPort, host: "0.0.0.0" }, - compiler + compiler, ); dummyServers.push(server); @@ -403,9 +391,9 @@ describe("API", () => { server.startCallback(() => { resolve(); }); - }) + }), ), - Promise.resolve() + Promise.resolve(), ); } @@ -436,21 +424,21 @@ describe("API", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${devServerPort}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -476,21 +464,21 @@ describe("API", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${devServerPort}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -515,21 +503,21 @@ describe("API", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${devServerPort}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -554,21 +542,21 @@ describe("API", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${devServerPort}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -594,26 +582,24 @@ describe("API", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${devServerPort}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); } @@ -624,7 +610,7 @@ describe("API", () => { jest.mock( "webpack-dev-server/lib/getPort", - () => () => Promise.reject(new Error("busy")) + () => () => Promise.reject(new Error("busy")), ); process.env.WEBPACK_DEV_SERVER_PORT_RETRY = 1; @@ -647,19 +633,19 @@ describe("API", () => { "[::1]", "[::1]:8080", "[ad42::1de2:54c2:c2fa:1234]", - "[ad42::1de2:54c2:c2fa:1234]:8080" + "[ad42::1de2:54c2:c2fa:1234]:8080", ]; const compiler = webpack(config); const server = new Server(options, compiler); - tests.forEach(test => { + for (const test of tests) { const headers = { host: test }; if (!server.checkHeader(headers, "host")) { throw new Error("Validation didn't pass"); } - }); + } }); it('should allow URLs with scheme for checking origin when the "option.client.webSocketURL" is object', async () => { @@ -668,13 +654,13 @@ describe("API", () => { client: { reconnect: false, webSocketURL: { - hostname: "test.host" - } + hostname: "test.host", + }, }, - webSocketServer: "ws" + webSocketServer: "ws", }; const headers = { - origin: "https://test.host" + origin: "https://test.host", }; const compiler = webpack(config); @@ -689,40 +675,40 @@ describe("API", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const webSocketRequests = []; const session = await page.target().createCDPSession(); - session.on("Network.webSocketCreated", test => { + session.on("Network.webSocketCreated", (test) => { webSocketRequests.push(test); }); await session.send("Target.setAutoAttach", { autoAttach: true, flatten: true, - waitForDebuggerOnStart: true + waitForDebuggerOnStart: true, }); sessionSubscribe(session); const response = await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); if (!server.checkHeader(headers, "origin")) { throw new Error("Validation didn't fail"); } - await new Promise(resolve => { + await new Promise((resolve) => { const interval = setInterval(() => { - const needFinish = consoleMessages.filter(message => - /Trying to reconnect/.test(message.text()) + const needFinish = consoleMessages.filter((message) => + /Trying to reconnect/.test(message.text()), ); if (needFinish.length > 0) { @@ -743,8 +729,6 @@ describe("API", () => { // ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); diff --git a/tests/e2e/app.test.js b/tests/e2e/app.test.js new file mode 100644 index 0000000..ddeb7f4 --- /dev/null +++ b/tests/e2e/app.test.js @@ -0,0 +1,179 @@ +const fs = require("node:fs"); +const path = require("node:path"); +const webpack = require("@rspack/core"); +const wdm = require("webpack-dev-middleware"); +const { RspackDevServer: Server } = require("@rspack/dev-server"); +const config = require("../fixtures/client-config/webpack.config"); +const runBrowser = require("../helpers/run-browser"); +const port = require("../helpers/ports-map").app; + +const staticDirectory = path.resolve( + __dirname, + "../fixtures/static-config/public", +); + +const apps = [ + ["express", () => require("express")(), "http"], + ["express", () => require("express")(), "https"], + ["express", () => require("express")(), "spdy"], + ["connect", () => require("connect")(), "http"], + ["connect", () => require("connect")(), "https"], + ["connect", () => require("connect")(), "spdy"], + ["connect", () => require("connect")(), "http2"], + ["connect (async)", () => require("connect")(), "http"], + [ + "hono", + () => new (require("hono").Hono)(), + (options, app) => + require("@hono/node-server").createAdaptorServer({ + fetch: app.fetch, + }), + (_, devServer) => [ + { + name: "webpack-dev-middleware", + middleware: wdm.honoWrapper(devServer.compiler), + }, + ], + ], + [ + "hono", + () => new (require("hono").Hono)(), + (_, app) => + require("@hono/node-server").createAdaptorServer({ + fetch: app.fetch, + createServer: require("node:https").createServer, + serverOptions: { + key: fs.readFileSync( + path.resolve(__dirname, "../fixtures/ssl/localhost-privkey.pem"), + ), + cert: fs.readFileSync( + path.resolve(__dirname, "../fixtures/ssl/localhost-cert.pem"), + ), + }, + }), + (_, devServer) => [ + { + name: "webpack-dev-middleware", + middleware: wdm.honoWrapper(devServer.compiler), + }, + ], + ], + [ + "hono", + () => new (require("hono").Hono)(), + { + type: (options, app) => + require("@hono/node-server").createAdaptorServer({ + fetch: app.fetch, + createServer: require("node:http2").createSecureServer, + serverOptions: options, + }), + options: { + allowHTTP1: true, + key: fs.readFileSync( + path.resolve(__dirname, "../fixtures/ssl/localhost-privkey.pem"), + ), + cert: fs.readFileSync( + path.resolve(__dirname, "../fixtures/ssl/localhost-cert.pem"), + ), + }, + }, + (_, devServer) => [ + { + name: "webpack-dev-middleware", + middleware: wdm.honoWrapper(devServer.compiler), + }, + ], + ], +]; + +describe("app option", () => { + for (const [appName, app, server, setupMiddlewares] of apps) { + let compiler; + let devServer; + let page; + let browser; + let pageErrors; + let consoleMessages; + + describe(`should work using "${appName}" application and "${typeof server === "function" ? "custom server" : server}" server`, () => { + beforeEach(async () => { + compiler = webpack(config); + + devServer = new Server( + { + static: { + directory: staticDirectory, + watch: false, + }, + app, + server, + port, + setupMiddlewares: + typeof setupMiddlewares !== "undefined" + ? setupMiddlewares + : // eslint-disable-next-line no-undefined + undefined, + }, + compiler, + ); + + await devServer.start(); + + ({ page, browser } = await runBrowser()); + + pageErrors = []; + consoleMessages = []; + }); + + afterEach(async () => { + await browser.close(); + await devServer.stop(); + await new Promise((resolve) => { + compiler.close(() => { + resolve(); + }); + }); + }); + + it("should handle GET request to index route (/)", async () => { + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + const pageUrl = devServer.isTlsServer + ? `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, + ); + + if ( + server === "spdy" || + server === "http2" || + server.options?.allowHTTP1 + ) { + 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/tests/e2e/bonjour.test.js b/tests/e2e/bonjour.test.js index 7e4ea9b..61d84a8 100644 --- a/tests/e2e/bonjour.test.js +++ b/tests/e2e/bonjour.test.js @@ -1,6 +1,4 @@ -"use strict"; - -const os = require("os"); +const os = require("node:os"); const webpack = require("@rspack/core"); const { RspackDevServer: Server } = require("@rspack/dev-server"); const config = require("../fixtures/simple-config/webpack.config"); @@ -14,7 +12,7 @@ describe("bonjour option", () => { beforeEach(() => { mockPublish = jest.fn(); - mockUnpublishAll = jest.fn(callback => { + mockUnpublishAll = jest.fn((callback) => { callback(); }); mockDestroy = jest.fn(); @@ -35,9 +33,9 @@ describe("bonjour option", () => { return { publish: mockPublish, unpublishAll: mockUnpublishAll, - destroy: mockDestroy + destroy: mockDestroy, }; - }) + }), }; }); @@ -64,15 +62,15 @@ describe("bonjour option", () => { it("should call bonjour with correct params", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(mockPublish).toHaveBeenCalledTimes(1); @@ -81,7 +79,7 @@ describe("bonjour option", () => { name: `Webpack Dev Server ${os.hostname()}:${port}`, port, type: "http", - subtypes: ["webpack"] + subtypes: ["webpack"], }); expect(mockUnpublishAll).toHaveBeenCalledTimes(0); @@ -89,8 +87,8 @@ describe("bonjour option", () => { expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -112,9 +110,9 @@ describe("bonjour option", () => { return { publish: mockPublish, unpublishAll: mockUnpublishAll, - destroy: mockDestroy + destroy: mockDestroy, }; - }) + }), }; }); @@ -137,15 +135,15 @@ describe("bonjour option", () => { it("should call bonjour with 'https' type", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`https://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(mockPublish).toHaveBeenCalledTimes(1); @@ -154,7 +152,7 @@ describe("bonjour option", () => { name: `Webpack Dev Server ${os.hostname()}:${port}`, port, type: "https", - subtypes: ["webpack"] + subtypes: ["webpack"], }); expect(mockUnpublishAll).toHaveBeenCalledTimes(0); @@ -162,8 +160,8 @@ describe("bonjour option", () => { expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -185,9 +183,9 @@ describe("bonjour option", () => { return { publish: mockPublish, unpublishAll: mockUnpublishAll, - destroy: mockDestroy + destroy: mockDestroy, }; - }) + }), }; }); @@ -198,10 +196,10 @@ describe("bonjour option", () => { port, bonjour: { type: "https", - protocol: "udp" - } + protocol: "udp", + }, }, - compiler + compiler, ); await server.start(); @@ -219,15 +217,15 @@ describe("bonjour option", () => { it("should apply bonjour options", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(mockPublish).toHaveBeenCalledTimes(1); @@ -237,7 +235,7 @@ describe("bonjour option", () => { port, type: "https", protocol: "udp", - subtypes: ["webpack"] + subtypes: ["webpack"], }); expect(mockUnpublishAll).toHaveBeenCalledTimes(0); @@ -245,8 +243,8 @@ describe("bonjour option", () => { expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -268,9 +266,9 @@ describe("bonjour option", () => { return { publish: mockPublish, unpublishAll: mockUnpublishAll, - destroy: mockDestroy + destroy: mockDestroy, }; - }) + }), }; }); @@ -281,13 +279,13 @@ describe("bonjour option", () => { port, bonjour: { type: "http", - protocol: "udp" + protocol: "udp", }, server: { - type: "https" - } + type: "https", + }, }, - compiler + compiler, ); await server.start(); @@ -305,15 +303,15 @@ describe("bonjour option", () => { it("should apply bonjour options", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`https://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(mockPublish).toHaveBeenCalledTimes(1); @@ -323,7 +321,7 @@ describe("bonjour option", () => { port, type: "http", protocol: "udp", - subtypes: ["webpack"] + subtypes: ["webpack"], }); expect(mockUnpublishAll).toHaveBeenCalledTimes(0); @@ -331,8 +329,8 @@ describe("bonjour option", () => { expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); diff --git a/tests/e2e/built-in-routes.test.js b/tests/e2e/built-in-routes.test.js index fc17959..b37e111 100644 --- a/tests/e2e/built-in-routes.test.js +++ b/tests/e2e/built-in-routes.test.js @@ -1,5 +1,3 @@ -"use strict"; - const webpack = require("@rspack/core"); const { RspackDevServer: Server } = require("@rspack/dev-server"); const config = require("../fixtures/client-config/webpack.config"); @@ -35,28 +33,28 @@ describe("Built in routes", () => { it("should handles GET request to sockjs bundle", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto( `http://127.0.0.1:${port}/__webpack_dev_server__/sockjs.bundle.js`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type" + "response headers content-type", ); expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -64,13 +62,13 @@ describe("Built in routes", () => { it("should handles HEAD request to sockjs bundle", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }) - .on("request", interceptedRequest => { + .on("request", (interceptedRequest) => { if (interceptedRequest.isInterceptResolutionHandled()) return; interceptedRequest.continue({ method: "HEAD" }, 10); @@ -79,18 +77,18 @@ describe("Built in routes", () => { const response = await page.goto( `http://127.0.0.1:${port}/__webpack_dev_server__/sockjs.bundle.js`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type" + "response headers content-type", ); expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -98,26 +96,26 @@ describe("Built in routes", () => { it("should handle GET request to invalidate endpoint", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto( `http://127.0.0.1:${port}/webpack-dev-server/invalidate`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); expect(response.headers()["content-type"]).not.toEqual("text/html"); expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -125,30 +123,30 @@ describe("Built in routes", () => { it("should handle GET request to directory index and list all middleware directories", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto( `http://127.0.0.1:${port}/webpack-dev-server/`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type" + "response headers content-type", ); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("directory list"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -156,13 +154,13 @@ describe("Built in routes", () => { it("should handle HEAD request to directory index", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }) - .on("request", interceptedRequest => { + .on("request", (interceptedRequest) => { if (interceptedRequest.isInterceptResolutionHandled()) return; interceptedRequest.continue({ method: "HEAD" }); @@ -171,20 +169,20 @@ describe("Built in routes", () => { const response = await page.goto( `http://127.0.0.1:${port}/webpack-dev-server/`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type" + "response headers content-type", ); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("directory list"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -192,54 +190,54 @@ describe("Built in routes", () => { it("should handle GET request to magic async chunk", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/main.js`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type" + "response headers content-type", ); expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); }); it("should handle HEAD request to magic async chunk", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }) - .on("request", interceptedRequest => { + .on("request", (interceptedRequest) => { if (interceptedRequest.isInterceptResolutionHandled()) return; interceptedRequest.continue({ method: "HEAD" }); }); const response = await page.goto(`http://127.0.0.1:${port}/main.js`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type" + "response headers content-type", ); expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); }); }); @@ -271,30 +269,30 @@ describe("Built in routes", () => { it("should handle GET request to directory index and list all middleware directories", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto( `http://127.0.0.1:${port}/webpack-dev-server/`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type" + "response headers content-type", ); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("directory list"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); diff --git a/tests/e2e/client-reconnect.test.js b/tests/e2e/client-reconnect.test.js index 8e458fe..fa96a1c 100644 --- a/tests/e2e/client-reconnect.test.js +++ b/tests/e2e/client-reconnect.test.js @@ -1,5 +1,3 @@ -"use strict"; - const webpack = require("@rspack/core"); const { RspackDevServer: Server } = require("@rspack/dev-server"); const config = require("../fixtures/simple-config/webpack.config"); @@ -34,31 +32,29 @@ describe("client.reconnect option", () => { it("should try to reconnect unlimited times", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); try { expect(response.status()).toMatchSnapshot("response status"); - } catch (error) { - throw error; } finally { await server.stop(); } let interval; - await new Promise(resolve => { + await new Promise((resolve) => { interval = setInterval(() => { - const retryingMessages = consoleMessages.filter(message => - message.text().includes("Trying to reconnect...") + const retryingMessages = consoleMessages.filter((message) => + message.text().includes("Trying to reconnect..."), ); if (retryingMessages.length >= 5) { @@ -100,38 +96,36 @@ describe("client.reconnect option", () => { it("should not try to reconnect", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); try { expect(response.status()).toMatchSnapshot("response status"); - } 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 => + await new Promise((resolve) => setTimeout( () => { resolve(); }, // eslint-disable-next-line no-restricted-properties - 1000 * Math.pow(2, 3) - ) + 1000 * 2 ** 3, + ), ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -165,38 +159,36 @@ describe("client.reconnect option", () => { it("should try to reconnect 2 times", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); try { expect(response.status()).toMatchSnapshot("response status"); - } 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 => + await new Promise((resolve) => setTimeout( () => { resolve(); }, // eslint-disable-next-line no-restricted-properties - 1000 * Math.pow(2, 3) - ) + 1000 * 2 ** 3, + ), ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); diff --git a/tests/e2e/client.test.js b/tests/e2e/client.test.js index f06c15c..7c5abe4 100644 --- a/tests/e2e/client.test.js +++ b/tests/e2e/client.test.js @@ -1,5 +1,3 @@ -"use strict"; - const webpack = require("@rspack/core"); const { RspackDevServer: Server } = require("@rspack/dev-server"); const config = require("../fixtures/simple-config-other/webpack.config"); @@ -21,12 +19,12 @@ describe("client option", () => { server = new Server( { client: { - webSocketTransport: "sockjs" + webSocketTransport: "sockjs", }, webSocketServer: "sockjs", - port + port, }, - compiler + compiler, ); await server.start(); @@ -44,15 +42,15 @@ describe("client option", () => { it("responds with a 200 status code for /ws path", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/ws`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); // overlay should be true by default @@ -60,8 +58,8 @@ describe("client option", () => { expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -82,19 +80,19 @@ describe("client option", () => { server = new Server( { client: { - webSocketTransport: "sockjs" + webSocketTransport: "sockjs", }, webSocketServer: { type: "sockjs", options: { host: "localhost", port, - path: "/foo/test/bar" - } + path: "/foo/test/bar", + }, }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -112,24 +110,24 @@ describe("client option", () => { it("responds with a 200 status code for /foo/test/bar path", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto( `http://127.0.0.1:${port}/foo/test/bar`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -150,9 +148,9 @@ describe("client option", () => { server = new Server( { client: false, - port + port, }, - compiler + compiler, ); await server.start(); @@ -170,23 +168,23 @@ describe("client option", () => { it("should disable client entry", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/main.js`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).not.toMatch(/client\/index\.js/); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -204,14 +202,14 @@ describe("client option", () => { beforeEach(async () => { compiler = webpack({ ...config, - devtool: false + devtool: false, }); server = new Server( { - port + port, }, - compiler + compiler, ); await server.start(); @@ -229,88 +227,143 @@ describe("client option", () => { it("should redirect client entry to rspack", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/main.js`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); - expect(await response.text()).toContain("/* Rspack dev server runtime client */") + expect(await response.text()).toContain( + "/* Rspack dev server runtime client */", + ); expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); }); }); + describe("override client entry", () => { + let compiler; + let server; + let page; + let browser; + + class OverrideServer extends Server { + // eslint-disable-next-line class-methods-use-this + getClientEntry() { + return require.resolve( + "../fixtures/custom-client/CustomClientEntry.js", + ); + } + // eslint-disable-next-line class-methods-use-this + getClientHotEntry() { + return require.resolve( + "../fixtures/custom-client/CustomClientHotEntry.js", + ); + } + } + + beforeEach(async () => { + compiler = webpack(config); + + server = new OverrideServer( + { + port, + }, + compiler, + ); + + await server.start(); + + ({ page, browser } = await runBrowser()); + }); + + afterEach(async () => { + await browser.close(); + await server.stop(); + }); + + it("should disable client entry", async () => { + const response = await page.goto(`http://127.0.0.1:${port}/main.js`, { + waitUntil: "networkidle0", + }); + + expect(response.status()).toMatchSnapshot("response status"); + + const content = await response.text(); + expect(content).toContain("CustomClientEntry.js"); + expect(content).toContain("CustomClientHotEntry.js"); + }); + }); describe("webSocketTransport", () => { const clientModes = [ { title: 'as a string ("sockjs")', client: { - webSocketTransport: "sockjs" + webSocketTransport: "sockjs", }, webSocketServer: "sockjs", - shouldThrow: false + shouldThrow: false, }, { title: 'as a string ("ws")', client: { - webSocketTransport: "ws" + webSocketTransport: "ws", }, webSocketServer: "ws", - shouldThrow: false + shouldThrow: false, }, { title: 'as a path ("sockjs")', client: { webSocketTransport: require.resolve( - "webpack-dev-server/client/clients/SockJSClient" - ) + "webpack-dev-server/client/clients/SockJSClient", + ), }, webSocketServer: "sockjs", - shouldThrow: false + shouldThrow: false, }, { title: 'as a path ("ws")', client: { webSocketTransport: require.resolve( - "webpack-dev-server/client/clients/WebSocketClient" - ) + "webpack-dev-server/client/clients/WebSocketClient", + ), }, webSocketServer: "ws", - shouldThrow: false + shouldThrow: false, }, { title: "as a nonexistent path (sockjs)", client: { - webSocketTransport: "/bad/path/to/implementation" + webSocketTransport: "/bad/path/to/implementation", }, webSocketServer: "sockjs", - shouldThrow: true + shouldThrow: true, }, { title: "as a nonexistent path (ws)", client: { - webSocketTransport: "/bad/path/to/implementation" + webSocketTransport: "/bad/path/to/implementation", }, webSocketServer: "ws", - shouldThrow: true - } + shouldThrow: true, + }, ]; describe("passed to server", () => { - clientModes.forEach(data => { + for (const data of clientModes) { it(`${data.title} ${ data.shouldThrow ? "should throw" : "should not throw" }`, async () => { @@ -319,9 +372,9 @@ describe("client option", () => { const server = new Server( { client: data.client, - port + port, }, - compiler + compiler, ); let thrownError; @@ -334,13 +387,13 @@ describe("client option", () => { if (data.shouldThrow) { expect(thrownError.message).toMatch( - /client\.webSocketTransport must be a string/ + /client\.webSocketTransport must be a string/, ); } await server.stop(); }); - }); + } }); }); }); diff --git a/tests/e2e/compress.test.js b/tests/e2e/compress.test.js index 8cc81c3..54539b4 100644 --- a/tests/e2e/compress.test.js +++ b/tests/e2e/compress.test.js @@ -1,5 +1,3 @@ -"use strict"; - const webpack = require("@rspack/core"); const { RspackDevServer: Server } = require("@rspack/dev-server"); const config = require("../fixtures/simple-config-other/webpack.config"); @@ -35,25 +33,25 @@ describe("compress option", () => { it("should handle GET request to bundle file", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/main.js`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.status()).toMatchSnapshot("response status"); expect(response.headers()["content-encoding"]).toMatchSnapshot( - "response headers content-encoding" + "response headers content-encoding", ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -74,9 +72,9 @@ describe("compress option", () => { server = new Server( { compress: true, - port + port, }, - compiler + compiler, ); await server.start(); @@ -94,25 +92,25 @@ describe("compress option", () => { it("should handle GET request to bundle file", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/main.js`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.status()).toMatchSnapshot("response status"); expect(response.headers()["content-encoding"]).toMatchSnapshot( - "response headers content-encoding" + "response headers content-encoding", ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -133,9 +131,9 @@ describe("compress option", () => { server = new Server( { compress: false, - port + port, }, - compiler + compiler, ); await server.start(); @@ -153,25 +151,25 @@ describe("compress option", () => { it("should handle GET request to bundle file", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/main.js`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.status()).toMatchSnapshot("response status"); expect(response.headers()["content-encoding"]).toMatchSnapshot( - "response headers content-encoding" + "response headers content-encoding", ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); diff --git a/tests/e2e/entry.test.js b/tests/e2e/entry.test.js index cf0bca0..4d3b4c4 100644 --- a/tests/e2e/entry.test.js +++ b/tests/e2e/entry.test.js @@ -1,6 +1,4 @@ -"use strict"; - -const path = require("path"); +const path = require("node:path"); const webpack = require("@rspack/core"); const { RspackDevServer: Server } = require("@rspack/dev-server"); const config = require("../fixtures/client-config/webpack.config"); @@ -10,8 +8,8 @@ const port = require("../helpers/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 waitForConsoleLogFinished = async (consoleLogs) => { + await new Promise((resolve) => { const interval = setInterval(() => { if (consoleLogs.includes(HOT_ENABLED_MESSAGE)) { clearInterval(interval); @@ -25,17 +23,17 @@ const waitForConsoleLogFinished = async consoleLogs => { describe("entry", () => { const entryFirst = path.resolve( __dirname, - "../fixtures/client-config/foo.js" + "../fixtures/client-config/foo.js", ); const entrySecond = path.resolve( __dirname, - "../fixtures/client-config/bar.js" + "../fixtures/client-config/bar.js", ); it("should work with single entry", async () => { const compiler = webpack({ ...config, entry: entryFirst }); const devServerOptions = { - port + port, }; const server = new Server(devServerOptions, compiler); @@ -48,23 +46,21 @@ describe("entry", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -74,7 +70,7 @@ describe("entry", () => { it("should work with single array entry", async () => { const compiler = webpack({ ...config, entry: [entryFirst, entrySecond] }); const devServerOptions = { - port + port, }; const server = new Server(devServerOptions, compiler); @@ -87,23 +83,21 @@ describe("entry", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -114,11 +108,11 @@ describe("entry", () => { const compiler = webpack({ ...config, entry: { - main: { import: entryFirst } - } + main: { import: entryFirst }, + }, }); const devServerOptions = { - port + port, }; const server = new Server(devServerOptions, compiler); @@ -131,23 +125,21 @@ describe("entry", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -157,7 +149,7 @@ describe("entry", () => { it("should work with dynamic entry", async () => { const compiler = webpack({ ...config, entry: () => entryFirst }); const devServerOptions = { - port + port, }; const server = new Server(devServerOptions, compiler); @@ -170,23 +162,21 @@ describe("entry", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -196,10 +186,10 @@ describe("entry", () => { it("should work with dynamic async entry", async () => { const compiler = webpack({ ...config, - entry: () => new Promise(resolve => resolve([entryFirst])) + entry: () => new Promise((resolve) => resolve([entryFirst])), }); const devServerOptions = { - port + port, }; const server = new Server(devServerOptions, compiler); @@ -212,23 +202,21 @@ describe("entry", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -240,16 +228,16 @@ describe("entry", () => { ...config, entry: { foo: entryFirst, - bar: entrySecond + bar: entrySecond, }, optimization: { runtimeChunk: { - name: "runtime" - } - } + name: "runtime", + }, + }, }); const devServerOptions = { - port + port, }; const server = new Server(devServerOptions, compiler); @@ -262,15 +250,15 @@ describe("entry", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message.text()); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); await page.goto(`http://127.0.0.1:${port}/test.html`, { - waitUntil: "networkidle0" + 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` }); @@ -278,8 +266,6 @@ describe("entry", () => { expect(consoleMessages).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -291,16 +277,16 @@ describe("entry", () => { ...config, entry: { foo: entryFirst, - bar: entrySecond + bar: entrySecond, }, optimization: { runtimeChunk: { - name: "runtime" - } - } + name: "runtime", + }, + }, }); const devServerOptions = { - port + port, }; const server = new Server(devServerOptions, compiler); @@ -313,15 +299,15 @@ describe("entry", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message.text()); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); await page.goto(`http://127.0.0.1:${port}/test.html`, { - waitUntil: "networkidle0" + 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` }); @@ -329,8 +315,6 @@ describe("entry", () => { expect(consoleMessages).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -343,13 +327,13 @@ describe("entry", () => { entry: { foo: { import: entryFirst, - dependOn: "bar" + dependOn: "bar", }, - bar: entrySecond - } + bar: entrySecond, + }, }); const devServerOptions = { - port + port, }; const server = new Server(devServerOptions, compiler); @@ -362,15 +346,15 @@ describe("entry", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message.text()); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); await page.goto(`http://127.0.0.1:${port}/test.html`, { - waitUntil: "networkidle0" + 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` }); @@ -378,8 +362,6 @@ describe("entry", () => { expect(consoleMessages).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -389,15 +371,15 @@ describe("entry", () => { it("should work with empty", async () => { const compiler = webpack({ ...config, - entry: {} + entry: {}, }); new webpack.EntryPlugin(compiler.context, entryFirst, { - name: "main" + name: "main", }).apply(compiler); const devServerOptions = { - port + port, }; const server = new Server(devServerOptions, compiler); @@ -410,23 +392,21 @@ describe("entry", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); diff --git a/tests/e2e/headers.test.js b/tests/e2e/headers.test.js index aaea931..5816280 100644 --- a/tests/e2e/headers.test.js +++ b/tests/e2e/headers.test.js @@ -1,5 +1,3 @@ -"use strict"; - const request = require("supertest"); const webpack = require("@rspack/core"); const { RspackDevServer: Server } = require("@rspack/dev-server"); @@ -22,9 +20,9 @@ describe("headers option", () => { server = new Server( { headers: { "X-Foo": "dev-server headers" }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -42,25 +40,25 @@ describe("headers option", () => { it("should handle GET request with headers", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.headers()["x-foo"]).toMatchSnapshot( - "response headers x-foo" + "response headers x-foo", ); expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -83,16 +81,16 @@ describe("headers option", () => { headers: [ { key: "X-Foo", - value: "value1" + value: "value1", }, { key: "X-Bar", - value: "value2" - } + value: "value2", + }, ], - port + port, }, - compiler + compiler, ); await server.start(); @@ -110,29 +108,29 @@ describe("headers option", () => { it("should handle GET request with headers", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.headers()["x-foo"]).toMatchSnapshot( - "response headers x-foo" + "response headers x-foo", ); expect(response.headers()["x-bar"]).toMatchSnapshot( - "response headers x-bar" + "response headers x-bar", ); expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -153,9 +151,9 @@ describe("headers option", () => { server = new Server( { headers: { "X-Bar": ["key1=value1", "key2=value2"] }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -173,25 +171,25 @@ describe("headers option", () => { it("should handle GET request with headers as an array", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.headers()["x-bar"]).toMatchSnapshot( - "response headers x-bar" + "response headers x-bar", ); expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -214,9 +212,9 @@ describe("headers option", () => { headers: () => { return { "X-Bar": ["key1=value1", "key2=value2"] }; }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -234,25 +232,25 @@ describe("headers option", () => { it("should handle GET request with headers as a function", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.headers()["x-bar"]).toMatchSnapshot( - "response headers x-bar" + "response headers x-bar", ); expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -275,16 +273,16 @@ describe("headers option", () => { headers: () => [ { key: "X-Foo", - value: "value1" + value: "value1", }, { key: "X-Bar", - value: "value2" - } + value: "value2", + }, ], - port + port, }, - compiler + compiler, ); await server.start(); @@ -302,29 +300,29 @@ describe("headers option", () => { it("should handle GET request with headers", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.headers()["x-foo"]).toMatchSnapshot( - "response headers x-foo" + "response headers x-foo", ); expect(response.headers()["x-bar"]).toMatchSnapshot( - "response headers x-bar" + "response headers x-bar", ); expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -346,11 +344,11 @@ describe("headers option", () => { { headers: { "X-Foo": "dev-server-headers" }, devMiddleware: { - headers: { "X-Foo": "dev-middleware-headers" } + headers: { "X-Foo": "dev-middleware-headers" }, }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -368,25 +366,25 @@ describe("headers option", () => { it("should handle GET request with headers as a function", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.headers()["x-foo"]).toMatchSnapshot( - "response headers x-foo" + "response headers x-foo", ); expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -408,9 +406,9 @@ describe("headers option", () => { server = new Server( { headers: { "X-Foo": "dev-server headers" }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -430,27 +428,27 @@ describe("headers option", () => { it("should handle HEAD request with headers", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.headers()["x-foo"]).toMatchSnapshot( - "response headers x-foo" + "response headers x-foo", ); expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); - const responseForHead = await req.get(`/`); + const responseForHead = await req.get("/"); expect(responseForHead.headers["x-foo"]).toBe("dev-server headers"); }); diff --git a/tests/e2e/history-api-fallback.test.js b/tests/e2e/history-api-fallback.test.js index 6cf5e7b..f7a5011 100644 --- a/tests/e2e/history-api-fallback.test.js +++ b/tests/e2e/history-api-fallback.test.js @@ -1,6 +1,4 @@ -"use strict"; - -const path = require("path"); +const path = require("node:path"); const webpack = require("@rspack/core"); const { RspackDevServer: Server } = require("@rspack/dev-server"); const config = require("../fixtures/historyapifallback-config/webpack.config"); @@ -24,9 +22,9 @@ describe("historyApiFallback option", () => { server = new Server( { historyApiFallback: true, - port + port, }, - compiler + compiler, ); await server.start(); @@ -44,27 +42,27 @@ describe("historyApiFallback option", () => { it("should handle GET request to directory", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/foo`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type" + "response headers content-type", ); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -85,11 +83,11 @@ describe("historyApiFallback option", () => { server = new Server( { historyApiFallback: { - index: "/bar.html" + index: "/bar.html", }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -107,27 +105,27 @@ describe("historyApiFallback option", () => { it("should handle GET request to directory", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/foo`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type" + "response headers content-type", ); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -149,14 +147,14 @@ describe("historyApiFallback option", () => { { static: path.resolve( __dirname, - "../fixtures/historyapifallback-2-config" + "../fixtures/historyapifallback-2-config", ), historyApiFallback: { - index: "/bar.html" + index: "/bar.html", }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -174,27 +172,27 @@ describe("historyApiFallback option", () => { it("should handle GET request to directory", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/foo`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type" + "response headers content-type", ); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -202,30 +200,30 @@ describe("historyApiFallback option", () => { it("should prefer static file over historyApiFallback", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto( `http://127.0.0.1:${port}/random-file.txt`, { - waitUntil: "networkidle2" - } + waitUntil: "networkidle2", + }, ); expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type" + "response headers content-type", ); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -247,11 +245,11 @@ describe("historyApiFallback option", () => { { static: false, historyApiFallback: { - index: "/bar.html" + index: "/bar.html", }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -269,27 +267,27 @@ describe("historyApiFallback option", () => { it("historyApiFallback should work and ignore static content", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/index.html`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type" + "response headers content-type", ); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -312,22 +310,22 @@ describe("historyApiFallback option", () => { port, static: path.resolve( __dirname, - "../fixtures/historyapifallback-2-config" + "../fixtures/historyapifallback-2-config", ), historyApiFallback: { rewrites: [ { from: /other/, - to: "/other.html" + to: "/other.html", }, { from: /.*/, - to: "/bar.html" - } - ] - } + to: "/bar.html", + }, + ], + }, }, - compiler + compiler, ); await server.start(); @@ -345,27 +343,27 @@ describe("historyApiFallback option", () => { it("historyApiFallback respect rewrites for index", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type" + "response headers content-type", ); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -373,27 +371,27 @@ describe("historyApiFallback option", () => { it("historyApiFallback respect rewrites and shows index for unknown urls", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/acme`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type" + "response headers content-type", ); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -401,27 +399,27 @@ describe("historyApiFallback option", () => { it("historyApiFallback respect any other specified rewrites", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/other`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type" + "response headers content-type", ); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -446,11 +444,11 @@ describe("historyApiFallback option", () => { { historyApiFallback: { index: "/bar.html", - verbose: true + verbose: true, }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -469,19 +467,19 @@ describe("historyApiFallback option", () => { it("request to directory and log", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/foo`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type" + "response headers content-type", ); expect(response.status()).toMatchSnapshot("response status"); @@ -493,11 +491,11 @@ describe("historyApiFallback option", () => { "GET", "/foo", "to", - "/bar.html" + "/bar.html", ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -522,11 +520,11 @@ describe("historyApiFallback option", () => { { historyApiFallback: { index: "/bar.html", - logger: consoleSpy + logger: consoleSpy, }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -545,19 +543,19 @@ describe("historyApiFallback option", () => { it("request to directory and log", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/foo`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type" + "response headers content-type", ); expect(response.status()).toMatchSnapshot("response status"); @@ -569,11 +567,11 @@ describe("historyApiFallback option", () => { "GET", "/foo", "to", - "/bar.html" + "/bar.html", ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -595,12 +593,12 @@ describe("historyApiFallback option", () => { { static: path.resolve( __dirname, - "../fixtures/historyapifallback-3-config" + "../fixtures/historyapifallback-3-config", ), historyApiFallback: true, - port + port, }, - compiler + compiler, ); await server.start(); @@ -618,27 +616,27 @@ describe("historyApiFallback option", () => { it("should take precedence over static files", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/foo`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type" + "response headers content-type", ); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -646,7 +644,7 @@ describe("historyApiFallback option", () => { it("should perform HEAD request in same way as GET", async () => { await page.goto(`http://127.0.0.1:${port}/foo`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const responseGet = await page.evaluate(async () => { @@ -655,12 +653,12 @@ describe("historyApiFallback option", () => { return { contentType: response.headers.get("content-type"), statusText: response.statusText, - text: await response.text() + text: await response.text(), }; }); expect(responseGet.contentType).toMatchSnapshot( - "response headers content-type" + "response headers content-type", ); expect(responseGet.statusText).toMatchSnapshot("response status"); @@ -673,14 +671,14 @@ describe("historyApiFallback option", () => { return { contentType: response.headers.get("content-type"), statusText: response.statusText, - text: await response.text() + text: await response.text(), }; }); expect(responseHead).toMatchObject({ ...responseGet, // HEAD response has an empty body - text: "" + text: "", }); }); }); diff --git a/tests/e2e/host.test.js b/tests/e2e/host.test.js index 9adb122..58168e2 100644 --- a/tests/e2e/host.test.js +++ b/tests/e2e/host.test.js @@ -1,28 +1,51 @@ -"use strict"; - +const http = require("node:http"); const webpack = require("@rspack/core"); const { RspackDevServer: Server } = require("@rspack/dev-server"); const config = require("../fixtures/client-config/webpack.config"); const runBrowser = require("../helpers/run-browser"); const port = require("../helpers/ports-map").host; -const ipv4 = Server.internalIPSync("v4"); -const ipv6 = Server.internalIPSync("v6"); -// macos requires root for using ip v6 -const isMacOS = process.platform === "darwin"; +const ipv4 = Server.findIp("v4", false); +const ipv6 = Server.findIp("v6", false); -function getAddress(host, hostname) { +async function getAddress(host, hostname) { let address; if ( typeof host === "undefined" || - (typeof host === "string" && host === "") + (typeof host === "string" && (host === "" || host === "::")) ) { address = "::"; - } else if (typeof host === "string" && host === "0.0.0.0") { + } else if (host === "0.0.0.0") { address = "0.0.0.0"; - } else if (typeof host === "string" && host === "localhost") { - address = parseFloat(process.versions.node) >= 18 ? "::1" : "127.0.0.1"; + } else if (host === "::1") { + address = "::1"; + } else if (host === "localhost") { + // It can be `127.0.0.1` or `::1` on different OS + const server = http.createServer((req, res) => { + res.statusCode = 200; + res.setHeader("Content-Type", "text/plain"); + res.end("Hello World\n"); + }); + + await new Promise((resolve) => { + server.listen({ host: "localhost", port: 23100 }, resolve); + }); + + address = server.address().address; + + await new Promise((resolve, reject) => { + server.close((err) => { + if (err) { + reject(err); + return; + } + + resolve(); + }); + }); + } else if (host === "local-ipv6") { + address = "::"; } else { address = hostname; } @@ -37,28 +60,17 @@ describe("host", () => { undefined, "0.0.0.0", "::", - "localhost", "::1", + "localhost", "127.0.0.1", "local-ip", "local-ipv4", - "local-ipv6" + "local-ipv6", ]; - for (let host of hosts) { + for (const host of hosts) { it(`should work using "${host}" host and port as number`, async () => { const compiler = webpack(config); - - if (!ipv6 || isMacOS) { - if (host === "::") { - host = "127.0.0.1"; - } else if (host === "::1") { - host = "127.0.0.1"; - } else if (host === "local-ipv6") { - host = "127.0.0.1"; - } - } - const devServerOptions = { port }; if (host !== "") { @@ -69,24 +81,28 @@ describe("host", () => { let hostname = host; - if (hostname === "0.0.0.0") { - hostname = "127.0.0.1"; - } else if ( - hostname === "" || - typeof hostname === "undefined" || - hostname === "::" || - hostname === "::1" - ) { + if (hostname === "" || typeof hostname === "undefined") { + // If host is omitted, the server will accept connections on the unspecified IPv6 address (::) when IPv6 is available, or the unspecified IPv4 address (0.0.0.0) otherwise. + hostname = ipv6 ? `[${ipv6}]` : ipv4; + } else if (hostname === "0.0.0.0") { + hostname = ipv4; + } else if (hostname === "::") { + // In most operating systems, listening to the unspecified IPv6 address (::) may cause the net.Server to also listen on the unspecified IPv4 address (0.0.0.0). + hostname = ipv6 ? `[${ipv6}]` : ipv4; + } else if (hostname === "::1") { hostname = "[::1]"; } else if (hostname === "local-ip" || hostname === "local-ipv4") { hostname = ipv4; } else if (hostname === "local-ipv6") { - hostname = `[${ipv6}]`; + // For test env where network ipv6 doesn't work + hostname = ipv6 ? `[${ipv6}]` : "[::1]"; } await server.start(); - expect(server.server.address()).toMatchObject(getAddress(host, hostname)); + expect(server.server.address()).toMatchObject( + await getAddress(host, hostname), + ); const { page, browser } = await runBrowser(); @@ -95,24 +111,22 @@ describe("host", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); await page.goto(`http://${hostname}:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -121,17 +135,6 @@ describe("host", () => { it(`should work using "${host}" host and port as string`, async () => { const compiler = webpack(config); - - if (!ipv6 || isMacOS) { - if (host === "::") { - host = "127.0.0.1"; - } else if (host === "::1") { - host = "127.0.0.1"; - } else if (host === "local-ipv6") { - host = "127.0.0.1"; - } - } - const devServerOptions = { port: `${port}` }; if (host !== "") { @@ -142,24 +145,28 @@ describe("host", () => { let hostname = host; - if (hostname === "0.0.0.0") { - hostname = "127.0.0.1"; - } else if ( - hostname === "" || - typeof hostname === "undefined" || - hostname === "::" || - hostname === "::1" - ) { + if (hostname === "" || typeof hostname === "undefined") { + // If host is omitted, the server will accept connections on the unspecified IPv6 address (::) when IPv6 is available, or the unspecified IPv4 address (0.0.0.0) otherwise. + hostname = ipv6 ? `[${ipv6}]` : ipv4; + } else if (hostname === "0.0.0.0") { + hostname = ipv4; + } else if (hostname === "::") { + // In most operating systems, listening to the unspecified IPv6 address (::) may cause the net.Server to also listen on the unspecified IPv4 address (0.0.0.0). + hostname = ipv6 ? `[${ipv6}]` : ipv4; + } else if (hostname === "::1") { hostname = "[::1]"; } else if (hostname === "local-ip" || hostname === "local-ipv4") { hostname = ipv4; } else if (hostname === "local-ipv6") { - hostname = `[${ipv6}]`; + // For test env where network ipv6 doesn't work + hostname = ipv6 ? `[${ipv6}]` : "[::1]"; } await server.start(); - expect(server.server.address()).toMatchObject(getAddress(host, hostname)); + expect(server.server.address()).toMatchObject( + await getAddress(host, hostname), + ); const { page, browser } = await runBrowser(); @@ -168,24 +175,22 @@ describe("host", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); await page.goto(`http://${hostname}:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -197,16 +202,6 @@ describe("host", () => { process.env.WEBPACK_DEV_SERVER_BASE_PORT = port; - if (!ipv6 || isMacOS) { - if (host === "::") { - host = "127.0.0.1"; - } else if (host === "::1") { - host = "127.0.0.1"; - } else if (host === "local-ipv6") { - host = "127.0.0.1"; - } - } - const devServerOptions = { port: "auto" }; if (host !== "") { @@ -217,24 +212,28 @@ describe("host", () => { let hostname = host; - if (hostname === "0.0.0.0") { - hostname = "127.0.0.1"; - } else if ( - hostname === "" || - typeof hostname === "undefined" || - hostname === "::" || - hostname === "::1" - ) { + if (hostname === "" || typeof hostname === "undefined") { + // If host is omitted, the server will accept connections on the unspecified IPv6 address (::) when IPv6 is available, or the unspecified IPv4 address (0.0.0.0) otherwise. + hostname = ipv6 ? `[${ipv6}]` : ipv4; + } else if (hostname === "0.0.0.0") { + hostname = ipv4; + } else if (hostname === "::") { + // In most operating systems, listening to the unspecified IPv6 address (::) may cause the net.Server to also listen on the unspecified IPv4 address (0.0.0.0). + hostname = ipv6 ? `[${ipv6}]` : ipv4; + } else if (hostname === "::1") { hostname = "[::1]"; } else if (hostname === "local-ip" || hostname === "local-ipv4") { hostname = ipv4; } else if (hostname === "local-ipv6") { - hostname = `[${ipv6}]`; + // For test env where network ipv6 doesn't work + hostname = ipv6 ? `[${ipv6}]` : "[::1]"; } await server.start(); - expect(server.server.address()).toMatchObject(getAddress(host, hostname)); + expect(server.server.address()).toMatchObject( + await getAddress(host, hostname), + ); const address = server.server.address(); const { page, browser } = await runBrowser(); @@ -244,26 +243,24 @@ describe("host", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); await page.goto(`http://${hostname}:${address.port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { - delete process.env.WEBPACK_DEV_SERVER_BASE_PORT; + process.env.WEBPACK_DEV_SERVER_BASE_PORT = undefined; await browser.close(); await server.stop(); diff --git a/tests/e2e/hot-and-live-reload.test.js b/tests/e2e/hot-and-live-reload.test.js index 8630ba0..567aa5a 100644 --- a/tests/e2e/hot-and-live-reload.test.js +++ b/tests/e2e/hot-and-live-reload.test.js @@ -1,10 +1,4 @@ -/** - * @jest-environment node - */ - -"use strict"; - -const path = require("path"); +const path = require("node:path"); const WebSocket = require("ws"); const SockJS = require("sockjs-client"); const webpack = require("@rspack/core"); @@ -20,7 +14,7 @@ require("../helpers/normalize"); const cssFilePath = path.resolve( __dirname, - "../fixtures/reload-config/main.css" + "../fixtures/reload-config/main.css", ); const INVALID_MESSAGE = "[webpack-dev-server] App updated. Recompiling..."; @@ -29,58 +23,58 @@ 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 refresh content using hot module replacement", }, { title: "should work and do nothing when web socket server disabled", options: { - webSocketServer: false - } + webSocketServer: false, + }, }, // Default web socket serve ("ws") { title: "should work and refresh content using hot module replacement when hot enabled", options: { - hot: true - } + hot: true, + }, }, { title: "should work and refresh content using hot module replacement when live reload enabled", options: { - liveReload: true - } + liveReload: true, + }, }, { title: "should not refresh content when hot and no live reload disabled", options: { hot: false, - liveReload: 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 - } + hot: true, + }, }, { title: "should work and refresh content using live reload", options: { liveReload: true, - hot: false - } + hot: false, + }, }, { title: "should work and refresh content using hot module replacement when live reload enabled and hot disabled", options: { liveReload: true, - hot: true - } + hot: true, + }, }, // "ws" web socket serve { @@ -88,24 +82,24 @@ describe("hot and live reload", () => { "should work and refresh content using hot module replacement when hot enabled", options: { webSocketServer: "ws", - hot: true - } + hot: true, + }, }, { title: "should work and refresh content using hot module replacement when live reload enabled", options: { webSocketServer: "ws", - liveReload: true - } + liveReload: true, + }, }, { title: "should not refresh content when hot and no live reload disabled", options: { webSocketServer: "ws", hot: false, - liveReload: false - } + liveReload: false, + }, }, { title: @@ -113,8 +107,8 @@ describe("hot and live reload", () => { options: { webSocketServer: "ws", liveReload: false, - hot: true - } + hot: true, + }, }, { title: @@ -122,8 +116,8 @@ describe("hot and live reload", () => { options: { webSocketServer: "ws", liveReload: true, - hot: false - } + hot: false, + }, }, { title: @@ -131,8 +125,8 @@ describe("hot and live reload", () => { options: { webSocketServer: "ws", liveReload: true, - hot: true - } + hot: true, + }, }, // "sockjs" web socket serve { @@ -142,8 +136,8 @@ describe("hot and live reload", () => { allowedHosts: "all", webSocketServer: "sockjs", - hot: true - } + hot: true, + }, }, { title: @@ -152,8 +146,8 @@ describe("hot and live reload", () => { allowedHosts: "all", webSocketServer: "sockjs", - liveReload: true - } + liveReload: true, + }, }, { title: "should not refresh content when hot and no live reload disabled", @@ -162,8 +156,8 @@ describe("hot and live reload", () => { webSocketServer: "sockjs", hot: false, - liveReload: false - } + liveReload: false, + }, }, { title: @@ -173,8 +167,8 @@ describe("hot and live reload", () => { webSocketServer: "sockjs", liveReload: false, - hot: true - } + hot: true, + }, }, { title: @@ -184,8 +178,8 @@ describe("hot and live reload", () => { webSocketServer: "sockjs", liveReload: true, - hot: false - } + hot: false, + }, }, { title: @@ -195,8 +189,8 @@ describe("hot and live reload", () => { webSocketServer: "sockjs", liveReload: true, - hot: true - } + hot: true, + }, }, { title: @@ -204,8 +198,8 @@ describe("hot and live reload", () => { query: "?webpack-dev-server-hot=false", options: { liveReload: true, - hot: true - } + hot: true, + }, }, { title: @@ -213,8 +207,8 @@ describe("hot and live reload", () => { query: "?webpack-dev-server-live-reload=false", options: { liveReload: true, - hot: false - } + hot: false, + }, }, { title: @@ -223,22 +217,22 @@ describe("hot and live reload", () => { "?webpack-dev-server-hot=false&webpack-dev-server-live-reload=false", options: { liveReload: true, - hot: true - } + hot: true, + }, }, { title: "should work with manual client setup", webpackOptions: { entry: [ require.resolve("@rspack/dev-server/client/index.js"), - require.resolve("../fixtures/reload-config/foo.js") - ] + require.resolve("../fixtures/reload-config/foo.js"), + ], }, options: { client: false, liveReload: true, - hot: true - } + hot: true, + }, }, // TODO we still output logs from webpack, need to improve this { @@ -248,18 +242,18 @@ describe("hot and live reload", () => { entry: [ "@rspack/core/hot/dev-server", `${require.resolve("@rspack/dev-server/client/index.js")}?hot=true`, - require.resolve("../fixtures/reload-config/foo.js") + require.resolve("../fixtures/reload-config/foo.js"), ], plugins: [ new webpack.HotModuleReplacementPlugin(), - new HTMLGeneratorPlugin() - ] + new HTMLGeneratorPlugin(), + ], }, options: { client: false, liveReload: false, - hot: false - } + hot: false, + }, }, { title: @@ -267,14 +261,14 @@ describe("hot and live reload", () => { webpackOptions: { entry: [ `${require.resolve("@rspack/dev-server/client/index.js")}?hot=false`, - require.resolve("../fixtures/reload-config/foo.js") - ] + require.resolve("../fixtures/reload-config/foo.js"), + ], }, options: { client: false, liveReload: true, - hot: true - } + hot: true, + }, }, { title: @@ -282,14 +276,14 @@ describe("hot and live reload", () => { webpackOptions: { entry: [ `${require.resolve("@rspack/dev-server/client/index.js")}?live-reload=true`, - require.resolve("../fixtures/reload-config/foo.js") - ] + require.resolve("../fixtures/reload-config/foo.js"), + ], }, options: { client: false, liveReload: false, - hot: false - } + hot: false, + }, }, { title: @@ -297,15 +291,15 @@ describe("hot and live reload", () => { webpackOptions: { entry: [ `${require.resolve("@rspack/dev-server/client/index.js")}?live-reload=false`, - require.resolve("../fixtures/reload-config/foo.js") - ] + require.resolve("../fixtures/reload-config/foo.js"), + ], }, options: { client: false, liveReload: true, - hot: false - } - } + hot: false, + }, + }, ]; let browser; @@ -327,11 +321,10 @@ describe("hot and live reload", () => { fs.unlinkSync(cssFilePath); }); - modes.forEach(mode => { - const webSocketServerTitle = - mode.options && mode.options.webSocketServer - ? mode.options.webSocketServer - : "default"; + for (const mode of modes) { + const webSocketServerTitle = mode.options?.webSocketServer + ? mode.options.webSocketServer + : "default"; it(`${mode.title} (${webSocketServerTitle})`, async () => { const webpackOptions = { ...reloadConfig, ...mode.webpackOptions }; @@ -346,7 +339,7 @@ describe("hot and live reload", () => { const webSocketServerLaunched = testDevServerOptions.webSocketServer !== false; - await new Promise(resolve => { + await new Promise((resolve) => { const webSocketTransport = typeof testDevServerOptions.webSocketServer !== "undefined" && testDevServerOptions.webSocketServer !== false @@ -359,16 +352,16 @@ describe("hot and live reload", () => { { headers: { host: `127.0.0.1:${devServerOptions.port}`, - origin: `http://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 => { + ws.on("error", (error) => { if (!webSocketServerLaunched && /404/.test(error)) { errored = true; } else { @@ -382,7 +375,7 @@ describe("hot and live reload", () => { opened = true; }); - ws.on("message", data => { + ws.on("message", (data) => { const message = JSON.parse(data.toString()); if (message.type === "ok") { @@ -401,7 +394,7 @@ describe("hot and live reload", () => { }); } else { const sockjs = new SockJS( - `http://127.0.0.1:${devServerOptions.port}/ws` + `http://127.0.0.1:${devServerOptions.port}/ws`, ); let opened = false; @@ -426,7 +419,7 @@ describe("hot and live reload", () => { } }; - sockjs.onclose = event => { + sockjs.onclose = (event) => { if (opened && received && !errored) { resolve(); } else if (event && event.reason === "Cannot connect to server") { @@ -449,7 +442,7 @@ describe("hot and live reload", () => { let hasDisconnectedMessage = false; page - .on("console", message => { + .on("console", (message) => { if (!hasDisconnectedMessage) { const text = message.text(); @@ -457,17 +450,17 @@ describe("hot and live reload", () => { consoleMessages.push(text); } }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }) - .on("request", requestObj => { + .on("request", (requestObj) => { if (/\.hot-update\.json$/.test(requestObj.url())) { doneHotUpdate = true; } }); await page.goto(`http://localhost:${port}/${mode.query || ""}`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const backgroundColorBefore = await page.evaluate(() => { @@ -480,7 +473,7 @@ describe("hot and live reload", () => { fs.writeFileSync( cssFilePath, - "body { background-color: rgb(255, 0, 0); }" + "body { background-color: rgb(255, 0, 0); }", ); let waitHot = @@ -498,10 +491,10 @@ describe("hot and live reload", () => { } if (Array.isArray(webpackOptions.entry)) { - if (webpackOptions.entry.some(item => item.includes("hot=true"))) { + if (webpackOptions.entry.some((item) => item.includes("hot=true"))) { waitHot = true; } else if ( - webpackOptions.entry.some(item => item.includes("hot=false")) + webpackOptions.entry.some((item) => item.includes("hot=false")) ) { waitHot = false; } @@ -509,11 +502,13 @@ describe("hot and live reload", () => { if (Array.isArray(webpackOptions.entry)) { if ( - webpackOptions.entry.some(item => item.includes("live-reload=true")) + webpackOptions.entry.some((item) => item.includes("live-reload=true")) ) { waitLiveReload = true; } else if ( - webpackOptions.entry.some(item => item.includes("live-reload=false")) + webpackOptions.entry.some((item) => + item.includes("live-reload=false"), + ) ) { waitLiveReload = false; } @@ -533,16 +528,16 @@ describe("hot and live reload", () => { await page.waitForFunction( () => getComputedStyle(document.body)["background-color"] === - "rgb(255, 0, 0)" + "rgb(255, 0, 0)", ); expect(doneHotUpdate).toBe(true); } else if (waitLiveReload) { await page.waitForNavigation({ - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); } else if (webSocketServerLaunched) { - await new Promise(resolve => { + await new Promise((resolve) => { const interval = setInterval(() => { if (consoleMessages.includes(INVALID_MESSAGE)) { clearInterval(interval); @@ -568,7 +563,7 @@ describe("hot and live reload", () => { expect(consoleMessages).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); }); - }); + } }); // the following cases check to make sure that the HMR diff --git a/tests/e2e/ipc.test.js b/tests/e2e/ipc.test.js index 0098b5e..fe98b32 100644 --- a/tests/e2e/ipc.test.js +++ b/tests/e2e/ipc.test.js @@ -1,9 +1,7 @@ -"use strict"; - -const os = require("os"); -const net = require("net"); -const path = require("path"); -const http = require("http"); +const os = require("node:os"); +const net = require("node:net"); +const path = require("node:path"); +const http = require("node:http"); const webpack = require("@rspack/core"); const httpProxy = require("http-proxy"); const { RspackDevServer: Server } = require("@rspack/dev-server"); @@ -26,7 +24,7 @@ describe("web socket server URL", () => { const compiler = webpack(config); const devServerOptions = { webSocketServer, - ipc: true + ipc: true, }; const server = new Server(devServerOptions, compiler); @@ -34,7 +32,7 @@ describe("web socket server URL", () => { function startProxy(callback) { const proxy = httpProxy.createProxyServer({ - target: { socketPath: server.options.ipc } + target: { socketPath: server.options.ipc }, }); const proxyServer = http.createServer((request, response) => { @@ -50,7 +48,7 @@ describe("web socket server URL", () => { return proxyServer.listen(proxyPort, proxyHost, callback); } - const proxy = await new Promise(resolve => { + const proxy = await new Promise((resolve) => { const proxyCreated = startProxy(() => { resolve(proxyCreated); }); @@ -63,10 +61,10 @@ describe("web socket server URL", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); @@ -75,19 +73,19 @@ describe("web socket server URL", () => { if (webSocketServer === "ws") { const session = await page.target().createCDPSession(); - session.on("Network.webSocketCreated", test => { + session.on("Network.webSocketCreated", (test) => { webSocketRequests.push(test); }); await session.send("Target.setAutoAttach", { autoAttach: true, flatten: true, - waitForDebuggerOnStart: true + waitForDebuggerOnStart: true, }); sessionSubscribe(session); } else { - page.on("request", request => { + page.on("request", (request) => { if (/\/ws\//.test(request.url())) { webSocketRequests.push({ url: request.url() }); } @@ -95,20 +93,18 @@ describe("web socket server URL", () => { } await page.goto(`http://${proxyHost}:${proxyPort}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const webSocketRequest = webSocketRequests[0]; expect(webSocketRequest.url).toContain( - `${websocketURLProtocol}://${devServerHost}:${proxyPort}/ws` - ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + `${websocketURLProtocol}://${devServerHost}:${proxyPort}/ws`, ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { proxy.close(); @@ -130,7 +126,7 @@ describe("web socket server URL", () => { const compiler = webpack(config); const devServerOptions = { webSocketServer, - ipc + ipc, }; const server = new Server(devServerOptions, compiler); @@ -138,7 +134,7 @@ describe("web socket server URL", () => { function startProxy(callback) { const proxy = httpProxy.createProxyServer({ - target: { socketPath: ipc } + target: { socketPath: ipc }, }); const proxyServer = http.createServer((request, response) => { @@ -154,7 +150,7 @@ describe("web socket server URL", () => { return proxyServer.listen(proxyPort, proxyHost, callback); } - const proxy = await new Promise(resolve => { + const proxy = await new Promise((resolve) => { const proxyCreated = startProxy(() => { resolve(proxyCreated); }); @@ -167,10 +163,10 @@ describe("web socket server URL", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); @@ -179,19 +175,19 @@ describe("web socket server URL", () => { if (webSocketServer === "ws") { const session = await page.target().createCDPSession(); - session.on("Network.webSocketCreated", test => { + session.on("Network.webSocketCreated", (test) => { webSocketRequests.push(test); }); await session.send("Target.setAutoAttach", { autoAttach: true, flatten: true, - waitForDebuggerOnStart: true + waitForDebuggerOnStart: true, }); sessionSubscribe(session); } else { - page.on("request", request => { + page.on("request", (request) => { if (/\/ws\//.test(request.url())) { webSocketRequests.push({ url: request.url() }); } @@ -199,20 +195,18 @@ describe("web socket server URL", () => { } await page.goto(`http://${proxyHost}:${proxyPort}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const webSocketRequest = webSocketRequests[0]; expect(webSocketRequest.url).toContain( - `${websocketURLProtocol}://${devServerHost}:${proxyPort}/ws` - ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + `${websocketURLProtocol}://${devServerHost}:${proxyPort}/ws`, ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { proxy.close(); @@ -232,7 +226,7 @@ describe("web socket server URL", () => { const ipcServer = await new Promise((resolve, reject) => { const server = net.Server(); - server.on("error", error => { + server.on("error", (error) => { reject(error); }); @@ -249,7 +243,7 @@ describe("web socket server URL", () => { const devServerOptions = { webSocketServer, host: devServerHost, - ipc + ipc, }; const server = new Server(devServerOptions, compiler); @@ -257,7 +251,7 @@ describe("web socket server URL", () => { function startProxy(callback) { const proxy = httpProxy.createProxyServer({ - target: { socketPath: ipc } + target: { socketPath: ipc }, }); const proxyServer = http.createServer((request, response) => { @@ -273,7 +267,7 @@ describe("web socket server URL", () => { return proxyServer.listen(proxyPort, proxyHost, callback); } - const proxy = await new Promise(resolve => { + const proxy = await new Promise((resolve) => { const proxyCreated = startProxy(() => { resolve(proxyCreated); }); @@ -286,10 +280,10 @@ describe("web socket server URL", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); @@ -298,19 +292,19 @@ describe("web socket server URL", () => { if (webSocketServer === "ws") { const session = await page.target().createCDPSession(); - session.on("Network.webSocketCreated", test => { + session.on("Network.webSocketCreated", (test) => { webSocketRequests.push(test); }); await session.send("Target.setAutoAttach", { autoAttach: true, flatten: true, - waitForDebuggerOnStart: true + waitForDebuggerOnStart: true, }); sessionSubscribe(session); } else { - page.on("request", request => { + page.on("request", (request) => { if (/\/ws\//.test(request.url())) { webSocketRequests.push({ url: request.url() }); } @@ -318,25 +312,23 @@ describe("web socket server URL", () => { } await page.goto(`http://${proxyHost}:${proxyPort}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const webSocketRequest = webSocketRequests[0]; expect(webSocketRequest.url).toContain( - `${websocketURLProtocol}://${devServerHost}:${proxyPort}/ws` - ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + `${websocketURLProtocol}://${devServerHost}:${proxyPort}/ws`, ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { proxy.close(); await new Promise((resolve, reject) => { - ipcServer.close(error => { + ipcServer.close((error) => { if (error) { reject(error); diff --git a/tests/e2e/lazy-compilation.test.js b/tests/e2e/lazy-compilation.test.js index cb51ef0..11c2fac 100644 --- a/tests/e2e/lazy-compilation.test.js +++ b/tests/e2e/lazy-compilation.test.js @@ -1,5 +1,3 @@ -"use strict"; - const webpack = require("@rspack/core"); const { RspackDevServer: Server } = require("@rspack/dev-server"); const lazyCompilationSingleEntryConfig = require("../fixtures/lazy-compilation-single-entry/webpack.config"); @@ -9,7 +7,7 @@ const port = require("../helpers/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 - it.skip(`should work with single entry`, async () => { + it.skip("should work with single entry", async () => { const compiler = webpack(lazyCompilationSingleEntryConfig); const server = new Server({ port }, compiler); @@ -22,17 +20,17 @@ describe("lazy compilation", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message.text()); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); await page.goto(`http://127.0.0.1:${port}/test.html`, { - waitUntil: "domcontentloaded" + waitUntil: "domcontentloaded", }); - await new Promise(resolve => { + await new Promise((resolve) => { const interval = setInterval(() => { if (consoleMessages.includes("Hey.")) { clearInterval(interval); @@ -44,15 +42,13 @@ describe("lazy compilation", () => { expect(consoleMessages).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); } }); - it.skip(`should work with multiple entries`, async () => { + it.skip("should work with multiple entries", async () => { const compiler = webpack(lazyCompilationMultipleEntriesConfig); const server = new Server({ port }, compiler); @@ -65,17 +61,17 @@ describe("lazy compilation", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message.text()); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); await page.goto(`http://127.0.0.1:${port}/test-one.html`, { - waitUntil: "domcontentloaded" + waitUntil: "domcontentloaded", }); - await new Promise(resolve => { + await new Promise((resolve) => { const interval = setInterval(() => { console.log(consoleMessages); if (consoleMessages.includes("One.")) { @@ -87,9 +83,9 @@ describe("lazy compilation", () => { }); await page.goto(`http://127.0.0.1:${port}/test-two.html`, { - waitUntil: "domcontentloaded" + waitUntil: "domcontentloaded", }); - await new Promise(resolve => { + await new Promise((resolve) => { const interval = setInterval(() => { console.log(consoleMessages); if (consoleMessages.includes("Two.")) { @@ -102,8 +98,6 @@ describe("lazy compilation", () => { expect(consoleMessages).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); diff --git a/tests/e2e/logging.test.js b/tests/e2e/logging.test.js index cefbc0f..030b5cd 100644 --- a/tests/e2e/logging.test.js +++ b/tests/e2e/logging.test.js @@ -1,6 +1,4 @@ -"use strict"; - -const path = require("path"); +const path = require("node:path"); const fs = require("graceful-fs"); const webpack = require("@rspack/core"); const { RspackDevServer: Server } = require("@rspack/dev-server"); @@ -13,51 +11,51 @@ require("../helpers/normalize"); describe("logging", () => { const webSocketServers = [ { webSocketServer: "ws" }, - { webSocketServer: "sockjs" } + { webSocketServer: "sockjs" }, ]; const cases = [ { title: "should work and log message about live reloading is enabled", devServerOptions: { - hot: false - } + hot: false, + }, }, { title: "should work and log messages about hot and live reloading is enabled", devServerOptions: { - hot: true - } + hot: true, + }, }, { title: "should work and log messages about hot is enabled", devServerOptions: { - liveReload: false - } + liveReload: false, + }, }, { title: "should work and log messages about hot and live reloading is enabled", devServerOptions: { - liveReload: true - } + liveReload: true, + }, }, { title: "should work and do not log messages about hot and live reloading is enabled", devServerOptions: { liveReload: false, - hot: false - } + hot: false, + }, }, { title: "should work and log messages about hot and live reloading is enabled", devServerOptions: { liveReload: true, - hot: true - } + hot: true, + }, }, { title: "should work and log warnings by default", @@ -67,17 +65,17 @@ describe("logging", () => { apply(compiler) { compiler.hooks.thisCompilation.tap( "warnings-webpack-plugin", - compilation => { + (compilation) => { compilation.warnings.push( - new Error("Warning from compilation") + new Error("Warning from compilation"), ); - } + }, ); - } + }, }, - new HTMLGeneratorPlugin() - ] - } + new HTMLGeneratorPlugin(), + ], + }, }, { title: "should work and log errors by default", @@ -87,47 +85,47 @@ describe("logging", () => { apply(compiler) { compiler.hooks.thisCompilation.tap( "warnings-webpack-plugin", - compilation => { + (compilation) => { compilation.errors.push(new Error("Error from compilation")); - } + }, ); - } + }, }, - new HTMLGeneratorPlugin() - ] - } + new HTMLGeneratorPlugin(), + ], + }, }, { title: 'should work when the "client.logging" is "info"', devServerOptions: { client: { - logging: "info" - } - } + logging: "info", + }, + }, }, { title: 'should work when the "client.logging" is "log"', devServerOptions: { client: { - logging: "log" - } - } + logging: "log", + }, + }, }, { title: 'should work when the "client.logging" is "verbose"', devServerOptions: { client: { - logging: "verbose" - } - } + logging: "verbose", + }, + }, }, { title: 'should work when the "client.logging" is "none"', devServerOptions: { client: { - logging: "none" - } - } + logging: "none", + }, + }, }, { title: "should work and log only error", @@ -137,23 +135,23 @@ describe("logging", () => { apply(compiler) { compiler.hooks.thisCompilation.tap( "warnings-webpack-plugin", - compilation => { + (compilation) => { compilation.warnings.push( - new Error("Warning from compilation") + new Error("Warning from compilation"), ); compilation.errors.push(new Error("Error from compilation")); - } + }, ); - } + }, }, - new HTMLGeneratorPlugin() - ] + new HTMLGeneratorPlugin(), + ], }, devServerOptions: { client: { - logging: "error" - } - } + logging: "error", + }, + }, }, { title: "should work and log warning and errors", @@ -163,41 +161,41 @@ describe("logging", () => { apply(compiler) { compiler.hooks.thisCompilation.tap( "warnings-webpack-plugin", - compilation => { + (compilation) => { compilation.warnings.push( - new Error("Warning from compilation") + new Error("Warning from compilation"), ); compilation.errors.push(new Error("Error from compilation")); - } + }, ); - } + }, }, - new HTMLGeneratorPlugin() - ] + new HTMLGeneratorPlugin(), + ], }, devServerOptions: { client: { - logging: "warn" - } - } + logging: "warn", + }, + }, }, { title: "should work and log static changes", devServerOptions: { - static: path.resolve(__dirname, "../fixtures/client-config/static") - } - } + static: path.resolve(__dirname, "../fixtures/client-config/static"), + }, + }, ]; - webSocketServers.forEach(webSocketServer => { - cases.forEach(testCase => { + for (const webSocketServer of webSocketServers) { + for (const testCase of cases) { it(`${testCase.title} (${ webSocketServer.webSocketServer || "default" })`, async () => { const compiler = webpack({ ...config, ...testCase.webpackOptions }); const devServerOptions = { port, - ...testCase.devServerOptions + ...testCase.devServerOptions, }; const server = new Server(devServerOptions, compiler); @@ -208,35 +206,35 @@ describe("logging", () => { try { const consoleMessages = []; - page.on("console", message => { + page.on("console", (message) => { consoleMessages.push(message); }); await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); - if (testCase.devServerOptions && testCase.devServerOptions.static) { + if (testCase.devServerOptions?.static) { fs.writeFileSync( path.join(testCase.devServerOptions.static, "./foo.txt"), - "Text" + "Text", ); await page.waitForNavigation({ - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); } expect( - consoleMessages.map(message => message.text().replace(/\\/g, "/")) + consoleMessages.map((message) => + message.text().replace(/\\/g, "/"), + ), ).toMatchSnapshot(); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); } }); - }); - }); + } + } }); diff --git a/tests/e2e/mime-types.test.js b/tests/e2e/mime-types.test.js index 8000591..0973ddc 100644 --- a/tests/e2e/mime-types.test.js +++ b/tests/e2e/mime-types.test.js @@ -1,5 +1,3 @@ -"use strict"; - const webpack = require("@rspack/core"); const { RspackDevServer: Server } = require("@rspack/dev-server"); const config = require("../fixtures/mime-types-config/webpack.config"); @@ -22,12 +20,12 @@ describe("mimeTypes option", () => { { devMiddleware: { mimeTypes: { - js: "text/plain" - } + js: "text/plain", + }, }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -45,25 +43,25 @@ describe("mimeTypes option", () => { it("should request file with different js mime type", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/main.js`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.status()).toMatchSnapshot("response status"); expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type" + "response headers content-type", ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -85,12 +83,12 @@ describe("mimeTypes option", () => { { devMiddleware: { mimeTypes: { - custom: "text/html" - } + custom: "text/html", + }, }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -108,25 +106,25 @@ describe("mimeTypes option", () => { it("should request file with different js mime type", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/file.custom`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.status()).toMatchSnapshot("response status"); expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type" + "response headers content-type", ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); diff --git a/tests/e2e/module-federation.test.js b/tests/e2e/module-federation.test.js index c8a2e0a..847802e 100644 --- a/tests/e2e/module-federation.test.js +++ b/tests/e2e/module-federation.test.js @@ -1,5 +1,3 @@ -"use strict"; - const requireFromString = require("require-from-string"); const webpack = require("@rspack/core"); const { RspackDevServer: Server } = require("@rspack/dev-server"); @@ -38,15 +36,15 @@ describe("Module federation", () => { it("should use the last entry export", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/main.js`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const textContent = await response.text(); @@ -61,8 +59,8 @@ describe("Module federation", () => { expect(exports).toEqual("entry2"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -96,15 +94,15 @@ describe("Module federation", () => { it("should use the last entry export", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/main.js`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const textContent = await response.text(); @@ -119,8 +117,8 @@ describe("Module federation", () => { expect(exports).toEqual("entry2"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -128,15 +126,15 @@ describe("Module federation", () => { it("should support the named entry export", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/foo.js`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const textContent = await response.text(); @@ -151,8 +149,8 @@ describe("Module federation", () => { expect(exports).toEqual("entry1"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -186,15 +184,15 @@ describe("Module federation", () => { it("should use the last entry export", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/main.js`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const textContent = await response.text(); @@ -209,8 +207,8 @@ describe("Module federation", () => { expect(exports).toEqual("entry2"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -244,26 +242,28 @@ describe("Module federation", () => { it("should contain hot script in remoteEntry.js", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto( `http://127.0.0.1:${port}/remoteEntry.js`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); const remoteEntryTextContent = await response.text(); - expect(remoteEntryTextContent).toMatch(/@rspack\/core(-canary)?\/hot\/dev-server\.js/); + expect(remoteEntryTextContent).toMatch( + /@rspack\/core(-canary)?\/hot\/dev-server\.js/, + ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -271,23 +271,25 @@ describe("Module federation", () => { it("should contain hot script in main.js", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/main.js`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const mainEntryTextContent = await response.text(); - expect(mainEntryTextContent).toMatch(/@rspack\/core(-canary)?\/hot\/dev-server\.js/); + expect(mainEntryTextContent).toMatch( + /@rspack\/core(-canary)?\/hot\/dev-server\.js/, + ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); diff --git a/tests/e2e/multi-compiler.test.js b/tests/e2e/multi-compiler.test.js index 3857565..e9933f3 100644 --- a/tests/e2e/multi-compiler.test.js +++ b/tests/e2e/multi-compiler.test.js @@ -1,6 +1,4 @@ -"use strict"; - -const path = require("path"); +const path = require("node:path"); const fs = require("graceful-fs"); const webpack = require("@rspack/core"); const { RspackDevServer: Server } = require("@rspack/dev-server"); @@ -11,10 +9,10 @@ const runBrowser = require("../helpers/run-browser"); const port = require("../helpers/ports-map")["multi-compiler"]; describe("multi compiler", () => { - it(`should work with one web target configuration and do nothing`, async () => { + it("should work with one web target configuration and do nothing", async () => { const compiler = webpack(oneWebTargetConfiguration); const devServerOptions = { - port + port, }; const server = new Server(devServerOptions, compiler); @@ -27,31 +25,29 @@ describe("multi compiler", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message.text()); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(consoleMessages).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); } }); - it(`should work with web target configurations and do nothing`, async () => { + it("should work with web target configurations and do nothing", async () => { const compiler = webpack(twoWebTargetConfiguration); const devServerOptions = { - port + port, }; const server = new Server(devServerOptions, compiler); @@ -65,15 +61,15 @@ describe("multi compiler", () => { let consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message.text()); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); await page.goto(`http://127.0.0.1:${port}/one-main.html`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(consoleMessages).toMatchSnapshot("console messages"); @@ -83,34 +79,32 @@ describe("multi compiler", () => { consoleMessages = []; await page.goto(`http://127.0.0.1:${port}/two-main.html`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(consoleMessages).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); } }); - it(`should work with web target configurations when hot and live reloads are enabled, and do hot reload by default when changing own entries`, async () => { + it("should work with web target configurations when hot and live reloads are enabled, and do hot reload by default when changing own entries", async () => { const compiler = webpack(twoWebTargetConfiguration); const devServerOptions = { port, hot: true, - liveReload: true + liveReload: true, }; const pathToOneEntry = path.resolve( __dirname, - "../fixtures/multi-compiler-two-configurations/one.js" + "../fixtures/multi-compiler-two-configurations/one.js", ); const originalOneEntryContent = fs.readFileSync(pathToOneEntry); const pathToTwoEntry = path.resolve( __dirname, - "../fixtures/multi-compiler-two-configurations/two.js" + "../fixtures/multi-compiler-two-configurations/two.js", ); const originalTwoEntryContent = fs.readFileSync(pathToTwoEntry); @@ -125,7 +119,7 @@ describe("multi compiler", () => { let consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { let text = message.text(); if (/Error: Aborted because/.test(text)) { @@ -136,12 +130,12 @@ describe("multi compiler", () => { consoleMessages.push(text); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); await page.goto(`http://127.0.0.1:${port}/one-main.html`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); fs.writeFileSync(pathToOneEntry, `${originalOneEntryContent}// comment`); @@ -155,7 +149,7 @@ describe("multi compiler", () => { consoleMessages = []; await page.goto(`http://127.0.0.1:${port}/two-main.html`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); fs.writeFileSync(pathToTwoEntry, `${originalTwoEntryContent}// comment`); @@ -164,8 +158,6 @@ describe("multi compiler", () => { expect(consoleMessages).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -175,21 +167,21 @@ describe("multi compiler", () => { } }); - it(`should work with web target configurations when only hot reload is enabled, and do hot reload when changing own entries`, async () => { + it("should work with web target configurations when only hot reload is enabled, and do hot reload when changing own entries", async () => { const compiler = webpack(twoWebTargetConfiguration); const devServerOptions = { port, hot: true, - liveReload: false + liveReload: false, }; const pathToOneEntry = path.resolve( __dirname, - "../fixtures/multi-compiler-two-configurations/one.js" + "../fixtures/multi-compiler-two-configurations/one.js", ); const originalOneEntryContent = fs.readFileSync(pathToOneEntry); const pathToTwoEntry = path.resolve( __dirname, - "../fixtures/multi-compiler-two-configurations/two.js" + "../fixtures/multi-compiler-two-configurations/two.js", ); const originalTwoEntryContent = fs.readFileSync(pathToTwoEntry); @@ -204,7 +196,7 @@ describe("multi compiler", () => { let consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { let text = message.text(); if (/Error: Aborted because/.test(text)) { @@ -215,12 +207,12 @@ describe("multi compiler", () => { consoleMessages.push(text); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); await page.goto(`http://127.0.0.1:${port}/one-main.html`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); fs.writeFileSync(pathToOneEntry, `${originalOneEntryContent}// comment`); @@ -234,7 +226,7 @@ describe("multi compiler", () => { consoleMessages = []; await page.goto(`http://127.0.0.1:${port}/two-main.html`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); fs.writeFileSync(pathToTwoEntry, `${originalTwoEntryContent}// comment`); @@ -243,8 +235,6 @@ describe("multi compiler", () => { expect(consoleMessages).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -254,21 +244,21 @@ describe("multi compiler", () => { } }); - it(`should work with web target configurations when only live reload is enabled, and do live reload when changing own entries`, async () => { + it("should work with web target configurations when only live reload is enabled, and do live reload when changing own entries", async () => { const compiler = webpack(twoWebTargetConfiguration); const devServerOptions = { port, hot: false, - liveReload: true + liveReload: true, }; const pathToOneEntry = path.resolve( __dirname, - "../fixtures/multi-compiler-two-configurations/one.js" + "../fixtures/multi-compiler-two-configurations/one.js", ); const originalOneEntryContent = fs.readFileSync(pathToOneEntry); const pathToTwoEntry = path.resolve( __dirname, - "../fixtures/multi-compiler-two-configurations/two.js" + "../fixtures/multi-compiler-two-configurations/two.js", ); const originalTwoEntryContent = fs.readFileSync(pathToTwoEntry); @@ -283,15 +273,15 @@ describe("multi compiler", () => { let consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message.text()); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); await page.goto(`http://127.0.0.1:${port}/one-main.html`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); fs.writeFileSync(pathToOneEntry, `${originalOneEntryContent}// comment`); @@ -305,7 +295,7 @@ describe("multi compiler", () => { consoleMessages = []; await page.goto(`http://127.0.0.1:${port}/two-main.html`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); fs.writeFileSync(pathToTwoEntry, `${originalTwoEntryContent}// comment`); @@ -314,8 +304,6 @@ describe("multi compiler", () => { expect(consoleMessages).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -325,21 +313,21 @@ describe("multi compiler", () => { } }); - it(`should work with web target configurations when only live reload is enabled and do live reload when changing other entries`, async () => { + it("should work with web target configurations when only live reload is enabled and do live reload when changing other entries", async () => { const compiler = webpack(twoWebTargetConfiguration); const devServerOptions = { port, hot: false, - liveReload: true + liveReload: true, }; const pathToOneEntry = path.resolve( __dirname, - "../fixtures/multi-compiler-two-configurations/one.js" + "../fixtures/multi-compiler-two-configurations/one.js", ); const originalOneEntryContent = fs.readFileSync(pathToOneEntry); const pathToTwoEntry = path.resolve( __dirname, - "../fixtures/multi-compiler-two-configurations/two.js" + "../fixtures/multi-compiler-two-configurations/two.js", ); const originalTwoEntryContent = fs.readFileSync(pathToTwoEntry); @@ -354,15 +342,15 @@ describe("multi compiler", () => { let consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message.text()); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); await page.goto(`http://127.0.0.1:${port}/one-main.html`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); fs.writeFileSync(pathToTwoEntry, `${originalTwoEntryContent}// comment`); @@ -376,7 +364,7 @@ describe("multi compiler", () => { consoleMessages = []; await page.goto(`http://127.0.0.1:${port}/two-main.html`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); fs.writeFileSync(pathToOneEntry, `${originalOneEntryContent}// comment`); @@ -385,8 +373,6 @@ describe("multi compiler", () => { expect(consoleMessages).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -399,7 +385,7 @@ describe("multi compiler", () => { it("should work with universal configuration and do nothing", async () => { const compiler = webpack(universalConfiguration); const devServerOptions = { - port + port, }; const server = new Server(devServerOptions, compiler); @@ -413,8 +399,8 @@ describe("multi compiler", () => { const serverResponse = await page.goto( `http://127.0.0.1:${port}/server.js`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); const serverResponseText = await serverResponse.text(); @@ -423,18 +409,16 @@ describe("multi compiler", () => { expect(serverResponseText).not.toContain("WebsocketServer"); page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message.text()); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); await page.goto(`http://127.0.0.1:${port}/browser.html`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -444,21 +428,21 @@ describe("multi compiler", () => { expect(pageErrors).toMatchSnapshot("page errors"); }); - it(`should work with universal configuration when hot and live reloads are enabled, and do hot reload for browser compiler by default when browser entry changed`, async () => { + it("should work with universal configuration when hot and live reloads are enabled, and do hot reload for browser compiler by default when browser entry changed", async () => { const compiler = webpack(universalConfiguration); const devServerOptions = { port, hot: true, - liveReload: true + liveReload: true, }; const pathToBrowserEntry = path.resolve( __dirname, - "../fixtures/universal-compiler-config/browser.js" + "../fixtures/universal-compiler-config/browser.js", ); const originalBrowserEntryContent = fs.readFileSync(pathToBrowserEntry); const pathToServerEntry = path.resolve( __dirname, - "../fixtures/universal-compiler-config/server.js" + "../fixtures/universal-compiler-config/server.js", ); const originalServerEntryContent = fs.readFileSync(pathToServerEntry); @@ -472,8 +456,8 @@ describe("multi compiler", () => { const serverResponse = await page.goto( `http://127.0.0.1:${port}/server.js`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); const serverResponseText = await serverResponse.text(); @@ -485,7 +469,7 @@ describe("multi compiler", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { let text = message.text(); if (/Error: Aborted because/.test(text)) { @@ -496,25 +480,23 @@ describe("multi compiler", () => { consoleMessages.push(text); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); await page.goto(`http://127.0.0.1:${port}/browser.html`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); fs.writeFileSync( pathToBrowserEntry, - `${originalBrowserEntryContent}// comment` + `${originalBrowserEntryContent}// comment`, ); await page.waitForNavigation({ waitUntil: "networkidle0" }); expect(consoleMessages).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -524,16 +506,16 @@ describe("multi compiler", () => { } }); - it(`should work with universal configuration when only hot reload is enabled, and do hot reload for browser compiler when browser entry changed`, async () => { + it("should work with universal configuration when only hot reload is enabled, and do hot reload for browser compiler when browser entry changed", async () => { const compiler = webpack(universalConfiguration); const devServerOptions = { port, hot: true, - liveReload: false + liveReload: false, }; const pathToBrowserEntry = path.resolve( __dirname, - "../fixtures/universal-compiler-config/browser.js" + "../fixtures/universal-compiler-config/browser.js", ); const originalBrowserEntryContent = fs.readFileSync(pathToBrowserEntry); @@ -547,8 +529,8 @@ describe("multi compiler", () => { const serverResponse = await page.goto( `http://127.0.0.1:${port}/server.js`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); const serverResponseText = await serverResponse.text(); @@ -560,7 +542,7 @@ describe("multi compiler", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { let text = message.text(); if (/Error: Aborted because/.test(text)) { @@ -571,25 +553,23 @@ describe("multi compiler", () => { consoleMessages.push(text); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); await page.goto(`http://127.0.0.1:${port}/browser.html`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); fs.writeFileSync( pathToBrowserEntry, - `${originalBrowserEntryContent}// comment` + `${originalBrowserEntryContent}// comment`, ); await page.waitForNavigation({ waitUntil: "networkidle0" }); expect(consoleMessages).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -598,21 +578,21 @@ describe("multi compiler", () => { } }); - it(`should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing browser and server entries`, async () => { + it("should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing browser and server entries", async () => { const compiler = webpack(universalConfiguration); const devServerOptions = { port, hot: false, - liveReload: true + liveReload: true, }; const pathToBrowserEntry = path.resolve( __dirname, - "../fixtures/universal-compiler-config/browser.js" + "../fixtures/universal-compiler-config/browser.js", ); const originalBrowserEntryContent = fs.readFileSync(pathToBrowserEntry); const pathToServerEntry = path.resolve( __dirname, - "../fixtures/universal-compiler-config/server.js" + "../fixtures/universal-compiler-config/server.js", ); const originalServerEntryContent = fs.readFileSync(pathToServerEntry); @@ -626,8 +606,8 @@ describe("multi compiler", () => { const serverResponse = await page.goto( `http://127.0.0.1:${port}/server.js`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); const serverResponseText = await serverResponse.text(); @@ -639,20 +619,20 @@ describe("multi compiler", () => { let consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message.text()); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); await page.goto(`http://127.0.0.1:${port}/browser.html`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); fs.writeFileSync( pathToBrowserEntry, - `${originalBrowserEntryContent}// comment` + `${originalBrowserEntryContent}// comment`, ); await page.waitForNavigation({ waitUntil: "networkidle0" }); @@ -664,20 +644,18 @@ describe("multi compiler", () => { consoleMessages = []; await page.goto(`http://127.0.0.1:${port}/browser.html`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); fs.writeFileSync( pathToServerEntry, - `${originalServerEntryContent}// comment` + `${originalServerEntryContent}// comment`, ); await page.waitForNavigation({ waitUntil: "networkidle0" }); expect(consoleMessages).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -687,21 +665,21 @@ describe("multi compiler", () => { } }); - it(`should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing server and browser entries`, async () => { + it("should work with universal configuration when only live reload is enabled, and do live reload for browser compiler when changing server and browser entries", async () => { const compiler = webpack(universalConfiguration); const devServerOptions = { port, hot: false, - liveReload: true + liveReload: true, }; const pathToBrowserEntry = path.resolve( __dirname, - "../fixtures/universal-compiler-config/browser.js" + "../fixtures/universal-compiler-config/browser.js", ); const originalBrowserEntryContent = fs.readFileSync(pathToBrowserEntry); const pathToServerEntry = path.resolve( __dirname, - "../fixtures/universal-compiler-config/server.js" + "../fixtures/universal-compiler-config/server.js", ); const originalServerEntryContent = fs.readFileSync(pathToServerEntry); @@ -715,8 +693,8 @@ describe("multi compiler", () => { const serverResponse = await page.goto( `http://127.0.0.1:${port}/server.js`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); const serverResponseText = await serverResponse.text(); @@ -728,20 +706,20 @@ describe("multi compiler", () => { let consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message.text()); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); await page.goto(`http://127.0.0.1:${port}/browser.html`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); fs.writeFileSync( pathToServerEntry, - `${originalServerEntryContent}// comment` + `${originalServerEntryContent}// comment`, ); await page.waitForNavigation({ waitUntil: "networkidle0" }); @@ -753,20 +731,18 @@ describe("multi compiler", () => { consoleMessages = []; await page.goto(`http://127.0.0.1:${port}/browser.html`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); fs.writeFileSync( pathToBrowserEntry, - `${originalBrowserEntryContent}// comment` + `${originalBrowserEntryContent}// comment`, ); await page.waitForNavigation({ waitUntil: "networkidle0" }); expect(consoleMessages).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); diff --git a/tests/e2e/on-listening.test.js b/tests/e2e/on-listening.test.js index 66aa909..8ad8ac3 100644 --- a/tests/e2e/on-listening.test.js +++ b/tests/e2e/on-listening.test.js @@ -1,5 +1,3 @@ -"use strict"; - const webpack = require("@rspack/core"); const { RspackDevServer: Server } = require("@rspack/dev-server"); const config = require("../fixtures/client-config/webpack.config"); @@ -19,7 +17,7 @@ describe("onListening option", () => { compiler = webpack(config); server = new Server( { - onListening: devServer => { + onListening: (devServer) => { if (!devServer) { throw new Error("webpack-dev-server is not defined"); } @@ -34,9 +32,9 @@ describe("onListening option", () => { response.send("listening POST"); }); }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -54,32 +52,32 @@ describe("onListening option", () => { it("should handle GET request to /listening/some/path route", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto( `http://127.0.0.1:${port}/listening/some/path`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); expect(onListeningIsRunning).toBe(true); expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type" + "response headers content-type", ); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -89,13 +87,13 @@ describe("onListening option", () => { await page.setRequestInterception(true); page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }) - .on("request", interceptedRequest => { + .on("request", (interceptedRequest) => { if (interceptedRequest.isInterceptResolutionHandled()) return; interceptedRequest.continue({ method: "POST" }); @@ -104,22 +102,22 @@ describe("onListening option", () => { const response = await page.goto( `http://127.0.0.1:${port}/listening/some/path`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); expect(onListeningIsRunning).toBe(true); expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type" + "response headers content-type", ); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); diff --git a/tests/e2e/overlay.test.js b/tests/e2e/overlay.test.js index c503f1e..b329b6e 100644 --- a/tests/e2e/overlay.test.js +++ b/tests/e2e/overlay.test.js @@ -1,6 +1,4 @@ -"use strict"; - -const path = require("path"); +const path = require("node:path"); const fs = require("graceful-fs"); const webpack = require("@rspack/core"); const { RspackDevServer: Server } = require("@rspack/dev-server"); @@ -20,18 +18,21 @@ class ErrorPlugin { } apply(compiler) { - compiler.hooks.thisCompilation.tap("errors-webpack-plugin", compilation => { - if ( - typeof this.skipCounter !== "undefined" && - this.counter !== this.skipCounter - ) { - this.counter += 1; - - return; - } - - compilation.errors.push(new Error(this.message)); - }); + compiler.hooks.thisCompilation.tap( + "errors-webpack-plugin", + (compilation) => { + if ( + typeof this.skipCounter !== "undefined" && + this.counter !== this.skipCounter + ) { + this.counter += 1; + + return; + } + + compilation.errors.push(new Error(this.message)); + }, + ); } } @@ -45,7 +46,7 @@ class WarningPlugin { apply(compiler) { compiler.hooks.thisCompilation.tap( "warnings-webpack-plugin", - compilation => { + (compilation) => { if ( typeof this.skipCounter !== "undefined" && this.counter !== this.skipCounter @@ -56,12 +57,12 @@ class WarningPlugin { } compilation.warnings.push(new Error(this.message)); - } + }, ); } } -const delay = ms => new Promise(resolve => setTimeout(resolve, ms)); +const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); let prettier; let prettierHTML; @@ -82,7 +83,7 @@ describe("overlay", () => { new WarningPlugin().apply(compiler); const devServerOptions = { - port + port, }; const server = new Server(devServerOptions, compiler); @@ -92,7 +93,7 @@ describe("overlay", () => { try { await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); // Delay for the overlay to appear @@ -102,23 +103,21 @@ describe("overlay", () => { const overlayHandle = await page.$("#webpack-dev-server-client-overlay"); const overlayFrame = await overlayHandle.contentFrame(); const overlayHtml = await overlayFrame.evaluate( - () => document.body.outerHTML + () => document.body.outerHTML, ); expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("page html"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("overlay html"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -131,7 +130,7 @@ describe("overlay", () => { new ErrorPlugin().apply(compiler); const devServerOptions = { - port + port, }; const server = new Server(devServerOptions, compiler); @@ -141,7 +140,7 @@ describe("overlay", () => { try { await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); // Delay for the overlay to appear @@ -151,23 +150,21 @@ describe("overlay", () => { const overlayHandle = await page.$("#webpack-dev-server-client-overlay"); const overlayFrame = await overlayHandle.contentFrame(); const overlayHtml = await overlayFrame.evaluate( - () => document.body.outerHTML + () => document.body.outerHTML, ); expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("page html"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("overlay html"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -184,7 +181,7 @@ describe("overlay", () => { new ErrorPlugin().apply(compiler); const devServerOptions = { - port + port, }; const server = new Server(devServerOptions, compiler); @@ -194,7 +191,7 @@ describe("overlay", () => { try { await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); // Delay for the overlay to appear @@ -204,23 +201,21 @@ describe("overlay", () => { const overlayHandle = await page.$("#webpack-dev-server-client-overlay"); const overlayFrame = await overlayHandle.contentFrame(); const overlayHtml = await overlayFrame.evaluate( - () => document.body.outerHTML + () => document.body.outerHTML, ); expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("page html"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("overlay html"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -231,11 +226,11 @@ describe("overlay", () => { const compiler = webpack(config); new ErrorPlugin( - "  18 | Render ansi formatted text" + "  18 | Render ansi formatted text", ).apply(compiler); const devServerOptions = { - port + port, }; const server = new Server(devServerOptions, compiler); @@ -245,7 +240,7 @@ describe("overlay", () => { try { await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); // Delay for the overlay to appear @@ -255,23 +250,21 @@ describe("overlay", () => { const overlayHandle = await page.$("#webpack-dev-server-client-overlay"); const overlayFrame = await overlayHandle.contentFrame(); const overlayHtml = await overlayFrame.evaluate( - () => document.body.outerHTML + () => document.body.outerHTML, ); expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("page html"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("overlay html"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -285,7 +278,7 @@ describe("overlay", () => { new ErrorPlugin("strong").apply(compiler); const devServerOptions = { - port + port, }; const server = new Server(devServerOptions, compiler); @@ -295,7 +288,7 @@ describe("overlay", () => { try { await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); // Delay for the overlay to appear @@ -305,23 +298,21 @@ describe("overlay", () => { const overlayHandle = await page.$("#webpack-dev-server-client-overlay"); const overlayFrame = await overlayHandle.contentFrame(); const overlayHtml = await overlayFrame.evaluate( - () => document.body.outerHTML + () => document.body.outerHTML, ); expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("page html"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("overlay html"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -331,7 +322,7 @@ describe("overlay", () => { it("should not show initially, then show on an error, then hide on fix", async () => { const compiler = webpack(config); const devServerOptions = { - port + port, }; const server = new Server(devServerOptions, compiler); @@ -341,7 +332,7 @@ describe("overlay", () => { try { await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); let pageHtml = await page.evaluate(() => document.body.outerHTML); @@ -351,13 +342,13 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("page html initial"); const pathToFile = path.resolve( __dirname, - "../fixtures/overlay-config/foo.js" + "../fixtures/overlay-config/foo.js", ); const originalCode = fs.readFileSync(pathToFile); @@ -370,26 +361,26 @@ describe("overlay", () => { const overlayFrame = await overlayHandle.contentFrame(); const overlayHtml = await overlayFrame.evaluate( - () => document.body.outerHTML + () => document.body.outerHTML, ); expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("page html with error"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("overlay html"); fs.writeFileSync(pathToFile, originalCode); await page.waitForSelector("#webpack-dev-server-client-overlay", { - hidden: true + hidden: true, }); pageHtml = await page.evaluate(() => document.body.outerHTML); @@ -399,11 +390,9 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("page html after fix error"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -413,7 +402,7 @@ describe("overlay", () => { it("should not show initially, then show on an error, then show other error, then hide on fix", async () => { const compiler = webpack(config); const devServerOptions = { - port + port, }; const server = new Server(devServerOptions, compiler); @@ -423,7 +412,7 @@ describe("overlay", () => { try { await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); let pageHtml = await page.evaluate(() => document.body.outerHTML); @@ -433,13 +422,13 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("page html initial"); const pathToFile = path.resolve( __dirname, - "../fixtures/overlay-config/foo.js" + "../fixtures/overlay-config/foo.js", ); const originalCode = fs.readFileSync(pathToFile); @@ -452,26 +441,26 @@ describe("overlay", () => { let overlayFrame = await overlayHandle.contentFrame(); let overlayHtml = await overlayFrame.evaluate( - () => document.body.outerHTML + () => document.body.outerHTML, ); expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("page html with error"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("overlay html"); fs.writeFileSync(pathToFile, "`;a"); await page.waitForSelector("#webpack-dev-server-client-overlay", { - hidden: true + hidden: true, }); await page.waitForSelector("#webpack-dev-server-client-overlay"); @@ -484,20 +473,20 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("page html with other error"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("overlay html"); fs.writeFileSync(pathToFile, originalCode); await page.waitForSelector("#webpack-dev-server-client-overlay", { - hidden: true + hidden: true, }); pageHtml = await page.evaluate(() => document.body.outerHTML); @@ -507,11 +496,9 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("page html after fix error"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -521,7 +508,7 @@ describe("overlay", () => { it("should not show initially, then show on an error and allow to close", async () => { const compiler = webpack(config); const devServerOptions = { - port + port, }; const server = new Server(devServerOptions, compiler); @@ -531,7 +518,7 @@ describe("overlay", () => { try { await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); let pageHtml = await page.evaluate(() => document.body.outerHTML); @@ -541,13 +528,13 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("page html initial"); const pathToFile = path.resolve( __dirname, - "../fixtures/overlay-config/foo.js" + "../fixtures/overlay-config/foo.js", ); const originalCode = fs.readFileSync(pathToFile); @@ -560,32 +547,32 @@ describe("overlay", () => { const overlayFrame = await overlayHandle.contentFrame(); const overlayHtml = await overlayFrame.evaluate( - () => document.body.outerHTML + () => document.body.outerHTML, ); expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("page html with error"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("overlay html"); const frame = await page .frames() - .find(item => item.name() === "webpack-dev-server-client-overlay"); + .find((item) => item.name() === "webpack-dev-server-client-overlay"); const buttonHandle = await frame.$("button"); await buttonHandle.click(); await page.waitForSelector("#webpack-dev-server-client-overlay", { - hidden: true + hidden: true, }); pageHtml = await page.evaluate(() => document.body.outerHTML); @@ -595,13 +582,11 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("page html after close"); fs.writeFileSync(pathToFile, originalCode); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -614,7 +599,7 @@ describe("overlay", () => { const compiler = webpack(config); const devServerOptions = { - port + port, }; const server = new Server(devServerOptions, compiler); @@ -624,12 +609,12 @@ describe("overlay", () => { try { await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const pathToFile = path.resolve( __dirname, - "../fixtures/overlay-config/foo.js" + "../fixtures/overlay-config/foo.js", ); const originalCode = fs.readFileSync(pathToFile); @@ -639,7 +624,7 @@ describe("overlay", () => { const frame = page .frames() - .find(item => item.name() === "webpack-dev-server-client-overlay"); + .find((item) => item.name() === "webpack-dev-server-client-overlay"); const errorHandle = await frame.$("[data-can-open]"); @@ -650,8 +635,6 @@ describe("overlay", () => { }); fs.writeFileSync(pathToFile, originalCode); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -666,8 +649,8 @@ describe("overlay", () => { const devServerOptions = { port, client: { - overlay: false - } + overlay: false, + }, }; const server = new Server(devServerOptions, compiler); @@ -677,7 +660,7 @@ describe("overlay", () => { try { await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); // Delay for the overlay to appear @@ -690,11 +673,9 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("page html"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -710,9 +691,9 @@ describe("overlay", () => { port, client: { overlay: { - warnings: false - } - } + warnings: false, + }, + }, }; const server = new Server(devServerOptions, compiler); @@ -722,7 +703,7 @@ describe("overlay", () => { try { await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); // Delay for the overlay to appear @@ -735,11 +716,9 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("page html"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -756,15 +735,15 @@ describe("overlay", () => { port, client: { overlay: { - warnings: error => { + warnings: (error) => { // error is string in webpack 4 const message = typeof error === "string" ? error : error.message; return !message.includes("My special warning"); - } - } - } + }, + }, + }, }, - compiler + compiler, ); await server.start(); @@ -773,7 +752,7 @@ describe("overlay", () => { try { await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); // Delay for the overlay to appear @@ -782,8 +761,6 @@ describe("overlay", () => { const overlayHandle = await page.$("#webpack-dev-server-client-overlay"); expect(overlayHandle).toBe(null); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -800,11 +777,11 @@ describe("overlay", () => { port, client: { overlay: { - warnings: () => true - } - } + warnings: () => true, + }, + }, }, - compiler + compiler, ); await server.start(); @@ -813,7 +790,7 @@ describe("overlay", () => { try { await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); // Delay for the overlay to appear @@ -823,23 +800,21 @@ describe("overlay", () => { const overlayHandle = await page.$("#webpack-dev-server-client-overlay"); const overlayFrame = await overlayHandle.contentFrame(); const overlayHtml = await overlayFrame.evaluate( - () => document.body.outerHTML + () => document.body.outerHTML, ); expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("page html"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("overlay html"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -854,8 +829,8 @@ describe("overlay", () => { const devServerOptions = { port, client: { - overlay: true - } + overlay: true, + }, }; const server = new Server(devServerOptions, compiler); @@ -865,7 +840,7 @@ describe("overlay", () => { try { await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); // Delay for the overlay to appear @@ -875,23 +850,21 @@ describe("overlay", () => { const overlayHandle = await page.$("#webpack-dev-server-client-overlay"); const overlayFrame = await overlayHandle.contentFrame(); const overlayHtml = await overlayFrame.evaluate( - () => document.body.outerHTML + () => document.body.outerHTML, ); expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("page html"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("overlay html"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -907,9 +880,9 @@ describe("overlay", () => { port, client: { overlay: { - warnings: true - } - } + warnings: true, + }, + }, }; const server = new Server(devServerOptions, compiler); @@ -919,7 +892,7 @@ describe("overlay", () => { try { await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); // Delay for the overlay to appear @@ -929,23 +902,21 @@ describe("overlay", () => { const overlayHandle = await page.$("#webpack-dev-server-client-overlay"); const overlayFrame = await overlayHandle.contentFrame(); const overlayHtml = await overlayFrame.evaluate( - () => document.body.outerHTML + () => document.body.outerHTML, ); expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("page html"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("overlay html"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -961,9 +932,9 @@ describe("overlay", () => { port, client: { overlay: { - errors: true - } - } + errors: true, + }, + }, }; const server = new Server(devServerOptions, compiler); @@ -973,7 +944,7 @@ describe("overlay", () => { try { await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); // Delay for the overlay to appear @@ -983,23 +954,21 @@ describe("overlay", () => { const overlayHandle = await page.$("#webpack-dev-server-client-overlay"); const overlayFrame = await overlayHandle.contentFrame(); const overlayHtml = await overlayFrame.evaluate( - () => document.body.outerHTML + () => document.body.outerHTML, ); expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("page html"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("overlay html"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -1014,8 +983,8 @@ describe("overlay", () => { const devServerOptions = { port, client: { - overlay: false - } + overlay: false, + }, }; const server = new Server(devServerOptions, compiler); @@ -1025,7 +994,7 @@ describe("overlay", () => { try { await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); // Delay for the overlay to appear @@ -1038,11 +1007,9 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("page html"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -1058,9 +1025,9 @@ describe("overlay", () => { port, client: { overlay: { - errors: false - } - } + errors: false, + }, + }, }; const server = new Server(devServerOptions, compiler); @@ -1070,7 +1037,7 @@ describe("overlay", () => { try { await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); // Delay for the overlay to appear @@ -1083,11 +1050,9 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("page html"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -1104,16 +1069,16 @@ describe("overlay", () => { port, client: { overlay: { - errors: error => { + errors: (error) => { // error is string in webpack 4 const message = typeof error === "string" ? error : error.message; return !message.includes("My special error"); - } - } - } + }, + }, + }, }, - compiler + compiler, ); await server.start(); @@ -1122,7 +1087,7 @@ describe("overlay", () => { try { await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); // Delay for the overlay to appear @@ -1131,8 +1096,6 @@ describe("overlay", () => { const overlayHandle = await page.$("#webpack-dev-server-client-overlay"); expect(overlayHandle).toBe(null); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -1149,11 +1112,11 @@ describe("overlay", () => { port, client: { overlay: { - errors: () => true - } - } + errors: () => true, + }, + }, }, - compiler + compiler, ); await server.start(); @@ -1162,7 +1125,7 @@ describe("overlay", () => { try { await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); // Delay for the overlay to appear @@ -1172,23 +1135,21 @@ describe("overlay", () => { const overlayHandle = await page.$("#webpack-dev-server-client-overlay"); const overlayFrame = await overlayHandle.contentFrame(); const overlayHtml = await overlayFrame.evaluate( - () => document.body.outerHTML + () => document.body.outerHTML, ); expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("page html"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("overlay html"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -1203,8 +1164,8 @@ describe("overlay", () => { const devServerOptions = { port, client: { - overlay: true - } + overlay: true, + }, }; const server = new Server(devServerOptions, compiler); @@ -1214,7 +1175,7 @@ describe("overlay", () => { try { await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); // Delay for the overlay to appear @@ -1224,23 +1185,21 @@ describe("overlay", () => { const overlayHandle = await page.$("#webpack-dev-server-client-overlay"); const overlayFrame = await overlayHandle.contentFrame(); const overlayHtml = await overlayFrame.evaluate( - () => document.body.outerHTML + () => document.body.outerHTML, ); expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("page html"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("overlay html"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -1256,9 +1215,9 @@ describe("overlay", () => { port, client: { overlay: { - trustedTypesPolicyName: "webpack#dev-overlay" - } - } + trustedTypesPolicyName: "webpack#dev-overlay", + }, + }, }; const server = new Server(devServerOptions, compiler); @@ -1269,12 +1228,12 @@ describe("overlay", () => { try { const consoleMessages = []; - page.on("console", message => { + page.on("console", (message) => { consoleMessages.push(message.text()); }); await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); // Delay for the overlay to appear @@ -1284,28 +1243,26 @@ describe("overlay", () => { const overlayHandle = await page.$("#webpack-dev-server-client-overlay"); const overlayFrame = await overlayHandle.contentFrame(); const overlayHtml = await overlayFrame.evaluate( - () => document.body.outerHTML + () => document.body.outerHTML, ); expect( - consoleMessages.filter(item => - /requires 'TrustedHTML' assignment/.test(item) - ) + consoleMessages.filter((item) => + /requires 'TrustedHTML' assignment/.test(item), + ), ).toHaveLength(0); expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("page html"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("overlay html"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -1322,14 +1279,14 @@ describe("overlay", () => { headers: [ { key: "Content-Security-Policy", - value: "require-trusted-types-for 'script'" - } + value: "require-trusted-types-for 'script'", + }, ], client: { overlay: { - trustedTypesPolicyName: "webpack#dev-overlay" - } - } + trustedTypesPolicyName: "webpack#dev-overlay", + }, + }, }; const server = new Server(devServerOptions, compiler); @@ -1340,12 +1297,12 @@ describe("overlay", () => { try { const consoleMessages = []; - page.on("console", message => { + page.on("console", (message) => { consoleMessages.push(message.text()); }); await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); // Delay for the overlay to appear @@ -1355,32 +1312,30 @@ describe("overlay", () => { const overlayHandle = await page.$("#webpack-dev-server-client-overlay"); const overlayFrame = await overlayHandle.contentFrame(); const overlayHtml = await overlayFrame.evaluate( - () => document.body.outerHTML + () => document.body.outerHTML, ); await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect( - consoleMessages.filter(item => - /requires 'TrustedHTML' assignment/.test(item) - ) + consoleMessages.filter((item) => + /requires 'TrustedHTML' assignment/.test(item), + ), ).toHaveLength(0); expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("page html"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("overlay html"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -1396,9 +1351,9 @@ describe("overlay", () => { port, client: { overlay: { - trustedTypesPolicyName: "disallowed-policy" - } - } + trustedTypesPolicyName: "disallowed-policy", + }, + }, }; const server = new Server(devServerOptions, compiler); @@ -1408,7 +1363,7 @@ describe("overlay", () => { try { await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); // Delay for the overlay to appear @@ -1420,11 +1375,9 @@ describe("overlay", () => { expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("page html"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -1440,9 +1393,9 @@ describe("overlay", () => { port, client: { overlay: { - errors: true - } - } + errors: true, + }, + }, }; const server = new Server(devServerOptions, compiler); @@ -1452,7 +1405,7 @@ describe("overlay", () => { try { await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); // Delay for the overlay to appear @@ -1462,23 +1415,21 @@ describe("overlay", () => { const overlayHandle = await page.$("#webpack-dev-server-client-overlay"); const overlayFrame = await overlayHandle.contentFrame(); const overlayHtml = await overlayFrame.evaluate( - () => document.body.outerHTML + () => document.body.outerHTML, ); expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("page html"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("overlay html"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -1494,9 +1445,9 @@ describe("overlay", () => { port, client: { overlay: { - warnings: true - } - } + warnings: true, + }, + }, }; const server = new Server(devServerOptions, compiler); @@ -1506,7 +1457,7 @@ describe("overlay", () => { try { await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); // Delay for the overlay to appear @@ -1516,23 +1467,21 @@ describe("overlay", () => { const overlayHandle = await page.$("#webpack-dev-server-client-overlay"); const overlayFrame = await overlayHandle.contentFrame(); const overlayHtml = await overlayFrame.evaluate( - () => document.body.outerHTML + () => document.body.outerHTML, ); expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("page html"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("overlay html"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -1554,12 +1503,12 @@ describe("overlay", () => { try { const consoleMessages = []; - page.on("console", message => { + page.on("console", (message) => { consoleMessages.push(message.text()); }); await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); // Delay for the overlay to appear @@ -1569,25 +1518,25 @@ describe("overlay", () => { const overlayHandle = await page.$("#webpack-dev-server-client-overlay"); const overlayFrame = await overlayHandle.contentFrame(); const overlayHtml = await overlayFrame.evaluate( - () => document.body.outerHTML + () => document.body.outerHTML, ); expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("page html"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("overlay html"); await server.stop(); - await new Promise(resolve => { + await new Promise((resolve) => { const interval = setInterval(() => { if (consoleMessages.includes("[webpack-dev-server] Disconnected!")) { clearInterval(interval); @@ -1598,17 +1547,15 @@ describe("overlay", () => { }); const pageHtmlAfterClose = await page.evaluate( - () => document.body.outerHTML + () => document.body.outerHTML, ); expect( await prettier.format(pageHtmlAfterClose, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("page html"); - } catch (error) { - throw error; } finally { await browser.close(); } @@ -1620,7 +1567,7 @@ describe("overlay", () => { new ErrorPlugin("Error from compilation", 1).apply(compiler); const devServerOptions = { - port + port, }; const server = new Server(devServerOptions, compiler); @@ -1630,16 +1577,16 @@ describe("overlay", () => { try { await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); - await new Promise(resolve => { + await new Promise((resolve) => { server.middleware.invalidate(() => { resolve(); }); }); - await new Promise(resolve => { + await new Promise((resolve) => { server.middleware.waitUntilValid(() => { resolve(); }); @@ -1654,23 +1601,21 @@ describe("overlay", () => { const overlayHandle = await page.$("#webpack-dev-server-client-overlay"); const overlayFrame = await overlayHandle.contentFrame(); const overlayHtml = await overlayFrame.evaluate( - () => document.body.outerHTML + () => document.body.outerHTML, ); expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("page html"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("overlay html"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -1683,7 +1628,7 @@ describe("overlay", () => { new WarningPlugin("Warning from compilation", 1).apply(compiler); const devServerOptions = { - port + port, }; const server = new Server(devServerOptions, compiler); @@ -1693,16 +1638,16 @@ describe("overlay", () => { try { await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); - await new Promise(resolve => { + await new Promise((resolve) => { server.middleware.invalidate(() => { resolve(); }); }); - await new Promise(resolve => { + await new Promise((resolve) => { server.middleware.waitUntilValid(() => { resolve(); }); @@ -1717,23 +1662,21 @@ describe("overlay", () => { const overlayHandle = await page.$("#webpack-dev-server-client-overlay"); const overlayFrame = await overlayHandle.contentFrame(); const overlayHtml = await overlayFrame.evaluate( - () => document.body.outerHTML + () => document.body.outerHTML, ); expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("page html"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("overlay html"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -1745,9 +1688,9 @@ describe("overlay", () => { const server = new Server( { - port + port, }, - compiler + compiler, ); await server.start(); @@ -1756,13 +1699,13 @@ describe("overlay", () => { try { await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); await page.addScriptTag({ content: `(function throwError() { throw new Error('Injected error'); - })();` + })();`, }); // Delay for the overlay to appear @@ -1771,17 +1714,15 @@ describe("overlay", () => { const overlayHandle = await page.$("#webpack-dev-server-client-overlay"); const overlayFrame = await overlayHandle.contentFrame(); const overlayHtml = await overlayFrame.evaluate( - () => document.body.outerHTML + () => document.body.outerHTML, ); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("overlay html"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -1796,11 +1737,11 @@ describe("overlay", () => { port, client: { overlay: { - runtimeErrors: error => error && !/Injected/.test(error.message) - } - } + runtimeErrors: (error) => error && !/Injected/.test(error.message), + }, + }, }, - compiler + compiler, ); await server.start(); @@ -1809,13 +1750,13 @@ describe("overlay", () => { try { await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); await page.addScriptTag({ content: `(function throwError() { throw new Error('Injected error'); - })();` + })();`, }); // Delay for the overlay to appear @@ -1824,8 +1765,6 @@ describe("overlay", () => { const overlayHandle = await page.$("#webpack-dev-server-client-overlay"); expect(overlayHandle).toBe(null); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -1837,9 +1776,9 @@ describe("overlay", () => { const server = new Server( { - port + port, }, - compiler + compiler, ); await server.start(); @@ -1848,7 +1787,7 @@ describe("overlay", () => { try { await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); await page.addScriptTag({ @@ -1856,7 +1795,7 @@ describe("overlay", () => { setTimeout(function () { Promise.reject(new Error('Async error')); }, 0); - })();` + })();`, }); // Delay for the overlay to appear @@ -1865,17 +1804,15 @@ describe("overlay", () => { const overlayHandle = await page.$("#webpack-dev-server-client-overlay"); const overlayFrame = await overlayHandle.contentFrame(); const overlayHtml = await overlayFrame.evaluate( - () => document.body.outerHTML + () => document.body.outerHTML, ); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("overlay html"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -1890,11 +1827,11 @@ describe("overlay", () => { port, client: { overlay: { - runtimeErrors: error => !/Injected/.test(error.message) - } - } + runtimeErrors: (error) => !/Injected/.test(error.message), + }, + }, }, - compiler + compiler, ); await server.start(); @@ -1903,7 +1840,7 @@ describe("overlay", () => { try { await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); await page.addScriptTag({ @@ -1911,7 +1848,7 @@ describe("overlay", () => { setTimeout(function () { Promise.reject(new Error('Injected async error')); }, 0); - })();` + })();`, }); // Delay for the overlay to appear @@ -1920,8 +1857,6 @@ describe("overlay", () => { const overlayHandle = await page.$("#webpack-dev-server-client-overlay"); expect(overlayHandle).toBe(null); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -1938,9 +1873,9 @@ describe("overlay", () => { headers: [ { key: "Content-Security-Policy", - value: "default-src 'self'" - } - ] + value: "default-src 'self'", + }, + ], }; const server = new Server(devServerOptions, compiler); @@ -1951,12 +1886,12 @@ describe("overlay", () => { try { const consoleMessages = []; - page.on("console", message => { + page.on("console", (message) => { consoleMessages.push(message.text()); }); await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); // Delay for the overlay to appear @@ -1966,23 +1901,21 @@ describe("overlay", () => { const overlayHandle = await page.$("#webpack-dev-server-client-overlay"); const overlayFrame = await overlayHandle.contentFrame(); const overlayHtml = await overlayFrame.evaluate( - () => document.body.outerHTML + () => document.body.outerHTML, ); expect( await prettier.format(pageHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("page html"); expect( await prettier.format(overlayHtml, { parser: "html", - plugins: [prettierHTML, prettierCSS] - }) + plugins: [prettierHTML, prettierCSS], + }), ).toMatchSnapshot("overlay html"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); diff --git a/tests/e2e/port.test.js b/tests/e2e/port.test.js index bebc3c8..8228c59 100644 --- a/tests/e2e/port.test.js +++ b/tests/e2e/port.test.js @@ -1,5 +1,3 @@ -"use strict"; - const webpack = require("@rspack/core"); const { RspackDevServer: Server } = require("@rspack/dev-server"); const config = require("../fixtures/client-config/webpack.config"); @@ -16,7 +14,7 @@ describe("port", () => { `${port}`, 0, "-1", - "99999" + "99999", ]; for (const testedPort of ports) { @@ -52,14 +50,10 @@ describe("port", () => { } if (testedPort === "-1" || testedPort === "99999") { - const errorMessageRegExp = new RegExp( - `options.port should be >= 0 and < 65536` - ); + const errorMessageRegExp = /options.port should be >= 0 and < 65536/; try { expect(errored.message).toMatch(errorMessageRegExp); - } catch (error) { - throw error; } finally { await server.stop(); } @@ -82,23 +76,21 @@ describe("port", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); await page.goto(`http://127.0.0.1:${address.port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -108,7 +100,7 @@ describe("port", () => { testedPort === "" || typeof testedPort === "undefined" ) { - delete process.env.WEBPACK_DEV_SERVER_BASE_PORT; + process.env.WEBPACK_DEV_SERVER_BASE_PORT = undefined; } }); } diff --git a/tests/e2e/progress.test.js b/tests/e2e/progress.test.js index 87017a5..45b2195 100644 --- a/tests/e2e/progress.test.js +++ b/tests/e2e/progress.test.js @@ -1,6 +1,4 @@ -"use strict"; - -const path = require("path"); +const path = require("node:path"); const fs = require("graceful-fs"); const webpack = require("@rspack/core"); const { RspackDevServer: Server } = require("@rspack/dev-server"); @@ -10,7 +8,7 @@ const port = require("../helpers/ports-map").progress; const cssFilePath = path.resolve( __dirname, - "../fixtures/reload-config-2/main.css" + "../fixtures/reload-config-2/main.css", ); describe("progress", () => { @@ -21,8 +19,8 @@ describe("progress", () => { const devServerOptions = { port, client: { - progress: true - } + progress: true, + }, }; const server = new Server(devServerOptions, compiler); @@ -37,10 +35,10 @@ describe("progress", () => { let doHotUpdate = false; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("request", interceptedRequest => { + .on("request", (interceptedRequest) => { if (interceptedRequest.isInterceptResolutionHandled()) return; if (/\.hot-update\.(json|js)$/.test(interceptedRequest.url())) { @@ -49,15 +47,15 @@ describe("progress", () => { }); await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); fs.writeFileSync( cssFilePath, - "body { background-color: rgb(255, 0, 0); }" + "body { background-color: rgb(255, 0, 0); }", ); - await new Promise(resolve => { + await new Promise((resolve) => { const timer = setInterval(() => { if (doHotUpdate) { clearInterval(timer); @@ -66,21 +64,17 @@ describe("progress", () => { } }, 100); }); - } catch (error) { - throw error; } finally { await browser.close(); } - const progressConsoleMessage = consoleMessages.filter(message => + const progressConsoleMessage = consoleMessages.filter((message) => /^\[webpack-dev-server\] (\[[a-zA-Z]+\] )?[0-9]{1,3}% - /.test( - message.text() - ) + message.text(), + ), ); expect(progressConsoleMessage.length > 0).toBe(true); - } catch (error) { - throw error; } finally { fs.unlinkSync(cssFilePath); diff --git a/tests/e2e/range-header.test.js b/tests/e2e/range-header.test.js index 7679cec..ee9eaf1 100644 --- a/tests/e2e/range-header.test.js +++ b/tests/e2e/range-header.test.js @@ -1,5 +1,3 @@ -"use strict"; - const request = require("supertest"); const webpack = require("@rspack/core"); const { RspackDevServer: Server } = require("@rspack/dev-server"); @@ -27,7 +25,7 @@ describe("'Range' header", () => { expect(response.status).toBe(200); expect(response.headers["content-type"]).toBe( - "application/javascript; charset=utf-8" + "application/javascript; charset=utf-8", ); expect(response.headers["accept-ranges"]).toBe("bytes"); @@ -38,7 +36,7 @@ describe("'Range' header", () => { expect(responseRange.status).toBe(206); expect(responseRange.headers["content-type"]).toBe( - "application/javascript; charset=utf-8" + "application/javascript; charset=utf-8", ); expect(responseRange.headers["content-length"]).toBe("500"); expect(responseRange.headers["content-range"]).toMatch(/^bytes 0-499\//); @@ -51,7 +49,7 @@ describe("'Range' header", () => { expect(response.status).toBe(200); expect(response.headers["content-type"]).toBe( - "application/javascript; charset=utf-8" + "application/javascript; charset=utf-8", ); expect(response.headers["accept-ranges"]).toBe("bytes"); @@ -61,7 +59,7 @@ describe("'Range' header", () => { expect(responseRange.status).toBe(206); expect(responseRange.headers["content-type"]).toBe( - "application/javascript; charset=utf-8" + "application/javascript; charset=utf-8", ); expect(responseRange.headers["content-length"]).toBe("500"); expect(responseRange.headers["content-range"]).toMatch(/^bytes 0-499\//); @@ -72,7 +70,7 @@ describe("'Range' header", () => { expect(response.status).toBe(200); expect(response.headers["content-type"]).toBe( - "application/javascript; charset=utf-8" + "application/javascript; charset=utf-8", ); expect(response.headers["accept-ranges"]).toBe("bytes"); @@ -82,7 +80,7 @@ describe("'Range' header", () => { expect(responseRange.status).toBe(416); expect(responseRange.headers["content-type"]).toBe( - "text/html; charset=utf-8" + "text/html; charset=utf-8", ); expect(responseRange.headers["content-range"]).toMatch(/^bytes \*\//); }); @@ -92,7 +90,7 @@ describe("'Range' header", () => { expect(response.status).toBe(200); expect(response.headers["content-type"]).toBe( - "application/javascript; charset=utf-8" + "application/javascript; charset=utf-8", ); expect(response.headers["accept-ranges"]).toBe("bytes"); @@ -103,7 +101,7 @@ describe("'Range' header", () => { expect(responseRange.status).toBe(200); expect(responseRange.headers["content-type"]).toBe( - "application/javascript; charset=utf-8" + "application/javascript; charset=utf-8", ); expect(responseRange.text).toBe(responseContent); expect(responseRange.text.length).toBe(responseContent.length); diff --git a/tests/e2e/server-and-client-transport.test.js b/tests/e2e/server-and-client-transport.test.js index 25dde36..dc8790a 100644 --- a/tests/e2e/server-and-client-transport.test.js +++ b/tests/e2e/server-and-client-transport.test.js @@ -1,5 +1,3 @@ -"use strict"; - const webpack = require("@rspack/core"); const { RspackDevServer: Server } = require("@rspack/dev-server"); const WebsocketServer = require("webpack-dev-server/lib/servers/WebsocketServer"); @@ -14,7 +12,7 @@ describe("server and client transport", () => { it('should use default web socket server ("ws")', async () => { const compiler = webpack(defaultConfig); const devServerOptions = { - port + port, }; const server = new Server(devServerOptions, compiler); @@ -25,22 +23,22 @@ describe("server and client transport", () => { try { const consoleMessages = []; - page.on("console", message => { + page.on("console", (message) => { consoleMessages.push(message); }); await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const isCorrectTransport = await page.evaluate( - () => window.injectedClient === window.expectedClient + () => window.injectedClient === window.expectedClient, ); expect(isCorrectTransport).toBe(true); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot(); - } catch (error) { - throw error; + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot(); } finally { await browser.close(); await server.stop(); @@ -51,7 +49,7 @@ describe("server and client transport", () => { const compiler = webpack(defaultConfig); const devServerOptions = { port, - webSocketServer: "ws" + webSocketServer: "ws", }; const server = new Server(devServerOptions, compiler); @@ -62,22 +60,22 @@ describe("server and client transport", () => { try { const consoleMessages = []; - page.on("console", message => { + page.on("console", (message) => { consoleMessages.push(message); }); await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const isCorrectTransport = await page.evaluate( - () => window.injectedClient === window.expectedClient + () => window.injectedClient === window.expectedClient, ); expect(isCorrectTransport).toBe(true); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot(); - } catch (error) { - throw error; + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot(); } finally { await browser.close(); await server.stop(); @@ -89,8 +87,8 @@ describe("server and client transport", () => { const devServerOptions = { port, webSocketServer: { - type: "ws" - } + type: "ws", + }, }; const server = new Server(devServerOptions, compiler); @@ -101,22 +99,22 @@ describe("server and client transport", () => { try { const consoleMessages = []; - page.on("console", message => { + page.on("console", (message) => { consoleMessages.push(message); }); await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const isCorrectTransport = await page.evaluate( - () => window.injectedClient === window.expectedClient + () => window.injectedClient === window.expectedClient, ); expect(isCorrectTransport).toBe(true); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot(); - } catch (error) { - throw error; + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot(); } finally { await browser.close(); await server.stop(); @@ -127,7 +125,7 @@ describe("server and client transport", () => { const compiler = webpack(sockjsConfig); const devServerOptions = { port, - webSocketServer: "sockjs" + webSocketServer: "sockjs", }; const server = new Server(devServerOptions, compiler); @@ -138,22 +136,22 @@ describe("server and client transport", () => { try { const consoleMessages = []; - page.on("console", message => { + page.on("console", (message) => { consoleMessages.push(message); }); await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const isCorrectTransport = await page.evaluate( - () => window.injectedClient === window.expectedClient + () => window.injectedClient === window.expectedClient, ); expect(isCorrectTransport).toBe(true); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot(); - } catch (error) { - throw error; + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot(); } finally { await browser.close(); await server.stop(); @@ -165,8 +163,8 @@ describe("server and client transport", () => { const devServerOptions = { port, webSocketServer: { - type: "sockjs" - } + type: "sockjs", + }, }; const server = new Server(devServerOptions, compiler); @@ -177,22 +175,22 @@ describe("server and client transport", () => { try { const consoleMessages = []; - page.on("console", message => { + page.on("console", (message) => { consoleMessages.push(message); }); await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const isCorrectTransport = await page.evaluate( - () => window.injectedClient === window.expectedClient + () => window.injectedClient === window.expectedClient, ); expect(isCorrectTransport).toBe(true); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot(); - } catch (error) { - throw error; + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot(); } finally { await browser.close(); await server.stop(); @@ -204,9 +202,9 @@ describe("server and client transport", () => { const devServerOptions = { port, client: { - webSocketTransport: "ws" + webSocketTransport: "ws", }, - webSocketServer: WebsocketServer + webSocketServer: WebsocketServer, }; const server = new Server(devServerOptions, compiler); @@ -217,22 +215,22 @@ describe("server and client transport", () => { try { const consoleMessages = []; - page.on("console", message => { + page.on("console", (message) => { consoleMessages.push(message); }); await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const isCorrectTransport = await page.evaluate( - () => window.injectedClient === window.expectedClient + () => window.injectedClient === window.expectedClient, ); expect(isCorrectTransport).toBe(true); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot(); - } catch (error) { - throw error; + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot(); } finally { await browser.close(); await server.stop(); @@ -244,11 +242,11 @@ describe("server and client transport", () => { const devServerOptions = { port, client: { - webSocketTransport: "ws" + webSocketTransport: "ws", }, webSocketServer: { - type: WebsocketServer - } + type: WebsocketServer, + }, }; const server = new Server(devServerOptions, compiler); @@ -259,22 +257,22 @@ describe("server and client transport", () => { try { const consoleMessages = []; - page.on("console", message => { + page.on("console", (message) => { consoleMessages.push(message); }); await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const isCorrectTransport = await page.evaluate( - () => window.injectedClient === window.expectedClient + () => window.injectedClient === window.expectedClient, ); expect(isCorrectTransport).toBe(true); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot(); - } catch (error) { - throw error; + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot(); } finally { await browser.close(); await server.stop(); @@ -286,11 +284,11 @@ describe("server and client transport", () => { const devServerOptions = { port, client: { - webSocketTransport: "ws" + webSocketTransport: "ws", }, webSocketServer: require.resolve( - "webpack-dev-server/lib/servers/WebsocketServer" - ) + "webpack-dev-server/lib/servers/WebsocketServer", + ), }; const server = new Server(devServerOptions, compiler); @@ -301,22 +299,22 @@ describe("server and client transport", () => { try { const consoleMessages = []; - page.on("console", message => { + page.on("console", (message) => { consoleMessages.push(message); }); await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const isCorrectTransport = await page.evaluate( - () => window.injectedClient === window.expectedClient + () => window.injectedClient === window.expectedClient, ); expect(isCorrectTransport).toBe(true); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot(); - } catch (error) { - throw error; + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot(); } finally { await browser.close(); await server.stop(); @@ -328,11 +326,11 @@ describe("server and client transport", () => { const devServerOptions = { port, client: { - webSocketTransport: "ws" + webSocketTransport: "ws", }, webSocketServer: { - type: require.resolve("webpack-dev-server/lib/servers/WebsocketServer") - } + type: require.resolve("webpack-dev-server/lib/servers/WebsocketServer"), + }, }; const server = new Server(devServerOptions, compiler); @@ -343,22 +341,22 @@ describe("server and client transport", () => { try { const consoleMessages = []; - page.on("console", message => { + page.on("console", (message) => { consoleMessages.push(message); }); await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const isCorrectTransport = await page.evaluate( - () => window.injectedClient === window.expectedClient + () => window.injectedClient === window.expectedClient, ); expect(isCorrectTransport).toBe(true); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot(); - } catch (error) { - throw error; + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot(); } finally { await browser.close(); await server.stop(); @@ -372,8 +370,8 @@ describe("server and client transport", () => { const devServerOptions = { port, webSocketServer: { - type: "/bad/path/to/implementation" - } + type: "/bad/path/to/implementation", + }, }; const server = new Server(devServerOptions, compiler); @@ -391,8 +389,8 @@ describe("server and client transport", () => { const devServerOptions = { port, client: { - webSocketTransport: "sockjs" - } + webSocketTransport: "sockjs", + }, }; const server = new Server(devServerOptions, compiler); @@ -403,22 +401,22 @@ describe("server and client transport", () => { try { const consoleMessages = []; - page.on("console", message => { + page.on("console", (message) => { consoleMessages.push(message); }); await page.goto(`http://localhost:${port}/main.js`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const isCorrectTransport = await page.evaluate( - () => window.injectedClient === window.expectedClient + () => window.injectedClient === window.expectedClient, ); expect(isCorrectTransport).toBe(true); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot(); - } catch (error) { - throw error; + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot(); } finally { await browser.close(); await server.stop(); @@ -430,8 +428,8 @@ describe("server and client transport", () => { const devServerOptions = { port, client: { - webSocketTransport: "ws" - } + webSocketTransport: "ws", + }, }; const server = new Server(devServerOptions, compiler); @@ -442,22 +440,22 @@ describe("server and client transport", () => { try { const consoleMessages = []; - page.on("console", message => { + page.on("console", (message) => { consoleMessages.push(message); }); await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const isCorrectTransport = await page.evaluate( - () => window.injectedClient === window.expectedClient + () => window.injectedClient === window.expectedClient, ); expect(isCorrectTransport).toBe(true); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot(); - } catch (error) { - throw error; + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot(); } finally { await browser.close(); await server.stop(); @@ -469,9 +467,9 @@ describe("server and client transport", () => { const devServerOptions = { port, client: { - webSocketTransport: "sockjs" + webSocketTransport: "sockjs", }, - webSocketServer: "sockjs" + webSocketServer: "sockjs", }; const server = new Server(devServerOptions, compiler); @@ -482,22 +480,22 @@ describe("server and client transport", () => { try { const consoleMessages = []; - page.on("console", message => { + page.on("console", (message) => { consoleMessages.push(message); }); await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const isCorrectTransport = await page.evaluate( - () => window.injectedClient === window.expectedClient + () => window.injectedClient === window.expectedClient, ); expect(isCorrectTransport).toBe(true); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot(); - } catch (error) { - throw error; + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot(); } finally { await browser.close(); await server.stop(); @@ -509,9 +507,9 @@ describe("server and client transport", () => { const devServerOptions = { port, client: { - webSocketTransport: "ws" + webSocketTransport: "ws", }, - webSocketServer: "ws" + webSocketServer: "ws", }; const server = new Server(devServerOptions, compiler); @@ -522,22 +520,22 @@ describe("server and client transport", () => { try { const consoleMessages = []; - page.on("console", message => { + page.on("console", (message) => { consoleMessages.push(message); }); await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const isCorrectTransport = await page.evaluate( - () => window.injectedClient === window.expectedClient + () => window.injectedClient === window.expectedClient, ); expect(isCorrectTransport).toBe(true); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot(); - } catch (error) { - throw error; + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot(); } finally { await browser.close(); await server.stop(); @@ -550,10 +548,10 @@ describe("server and client transport", () => { port, client: { webSocketTransport: require.resolve( - "../fixtures/custom-client/CustomSockJSClient" - ) + "../fixtures/custom-client/CustomSockJSClient", + ), }, - webSocketServer: "sockjs" + webSocketServer: "sockjs", }; const server = new Server(devServerOptions, compiler); @@ -564,22 +562,22 @@ describe("server and client transport", () => { try { const consoleMessages = []; - page.on("console", message => { + page.on("console", (message) => { consoleMessages.push(message); }); await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const isCorrectTransport = await page.evaluate( - () => window.injectedClient === window.expectedClient + () => window.injectedClient === window.expectedClient, ); expect(isCorrectTransport).toBe(true); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot(); - } catch (error) { - throw error; + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot(); } finally { await browser.close(); await server.stop(); @@ -591,8 +589,8 @@ describe("server and client transport", () => { const devServerOptions = { port, webSocketServer: { - type: "invalid/path" - } + type: "invalid/path", + }, }; const server = new Server(devServerOptions, compiler); await expect(async () => { @@ -607,8 +605,8 @@ describe("server and client transport", () => { const devServerOptions = { port, client: { - webSocketTransport: "invalid/path" - } + webSocketTransport: "invalid/path", + }, }; const server = new Server(devServerOptions, compiler); await expect(async () => { diff --git a/tests/e2e/server.test.js b/tests/e2e/server.test.js index ed6ef65..bf161fc 100644 --- a/tests/e2e/server.test.js +++ b/tests/e2e/server.test.js @@ -1,7 +1,5 @@ -"use strict"; - -const https = require("https"); -const path = require("path"); +const https = require("node:https"); +const path = require("node:path"); const fs = require("graceful-fs"); const request = require("supertest"); const spdy = require("spdy"); @@ -16,12 +14,12 @@ const port = require("../helpers/ports-map")["server-option"]; const httpsCertificateDirectory = path.resolve( __dirname, - "../fixtures/https-certificate" + "../fixtures/https-certificate", ); const staticDirectory = path.resolve( __dirname, - "../fixtures/static-config/public" + "../fixtures/static-config/public", ); describe("server option", () => { @@ -41,12 +39,12 @@ describe("server option", () => { { static: { directory: staticDirectory, - watch: false + watch: false, }, server: "http", - port + port, }, - compiler + compiler, ); await server.start(); @@ -64,19 +62,19 @@ describe("server option", () => { it("should handle GET request to index route (/)", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const HTTPVersion = await page.evaluate( - () => performance.getEntries()[0].nextHopProtocol + () => performance.getEntries()[0].nextHopProtocol, ); expect(HTTPVersion).not.toEqual("h2"); @@ -85,9 +83,9 @@ describe("server option", () => { expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); }); @@ -101,12 +99,12 @@ describe("server option", () => { { static: { directory: staticDirectory, - watch: false + watch: false, }, server: path.resolve(__dirname, "../helpers/custom-http.js"), - port + port, }, - compiler + compiler, ); await server.start(); @@ -124,19 +122,19 @@ describe("server option", () => { it("should handle GET request to index route (/)", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const HTTPVersion = await page.evaluate( - () => performance.getEntries()[0].nextHopProtocol + () => performance.getEntries()[0].nextHopProtocol, ); expect(HTTPVersion).not.toEqual("h2"); @@ -145,9 +143,9 @@ describe("server option", () => { expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); }); @@ -161,12 +159,12 @@ describe("server option", () => { { static: { directory: staticDirectory, - watch: false + watch: false, }, server: "https", - port + port, }, - compiler + compiler, ); await server.start(); @@ -184,19 +182,19 @@ describe("server option", () => { it("should handle GET request to index route (/)", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`https://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const HTTPVersion = await page.evaluate( - () => performance.getEntries()[0].nextHopProtocol + () => performance.getEntries()[0].nextHopProtocol, ); expect(HTTPVersion).not.toEqual("h2"); @@ -205,9 +203,9 @@ describe("server option", () => { expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); }); @@ -221,12 +219,12 @@ describe("server option", () => { { static: { directory: staticDirectory, - watch: false + watch: false, }, server: "spdy", - port + port, }, - compiler + compiler, ); await server.start(); @@ -244,19 +242,19 @@ describe("server option", () => { it("should handle GET request to index route (/)", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`https://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const HTTPVersion = await page.evaluate( - () => performance.getEntries()[0].nextHopProtocol + () => performance.getEntries()[0].nextHopProtocol, ); expect(HTTPVersion).toEqual("h2"); @@ -265,9 +263,9 @@ describe("server option", () => { expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); }); @@ -293,29 +291,29 @@ describe("server option", () => { { static: { directory: staticDirectory, - watch: false + watch: false, }, server: { type: "https", options: { ca: fs.readFileSync( - path.join(httpsCertificateDirectory, "ca.pem") + path.join(httpsCertificateDirectory, "ca.pem"), ), pfx: fs.readFileSync( - path.join(httpsCertificateDirectory, "server.pfx") + path.join(httpsCertificateDirectory, "server.pfx"), ), key: fs.readFileSync( - path.join(httpsCertificateDirectory, "server.key") + path.join(httpsCertificateDirectory, "server.key"), ), cert: fs.readFileSync( - path.join(httpsCertificateDirectory, "server.crt") + path.join(httpsCertificateDirectory, "server.crt"), ), - passphrase: "webpack-dev-server" - } + passphrase: "webpack-dev-server", + }, }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -335,25 +333,25 @@ describe("server option", () => { it("should handle GET request to index route (/)", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`https://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect( - normalizeOptions(createServerSpy.mock.calls[0][0]) + normalizeOptions(createServerSpy.mock.calls[0][0]), ).toMatchSnapshot("https options"); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); }); }); @@ -376,37 +374,37 @@ describe("server option", () => { { static: { directory: staticDirectory, - watch: false + watch: false, }, server: { type: "https", options: { ca: [ fs.readFileSync( - path.join(httpsCertificateDirectory, "ca.pem") - ) + path.join(httpsCertificateDirectory, "ca.pem"), + ), ], pfx: [ fs.readFileSync( - path.join(httpsCertificateDirectory, "server.pfx") - ) + path.join(httpsCertificateDirectory, "server.pfx"), + ), ], key: [ fs.readFileSync( - path.join(httpsCertificateDirectory, "server.key") - ) + path.join(httpsCertificateDirectory, "server.key"), + ), ], cert: [ fs.readFileSync( - path.join(httpsCertificateDirectory, "server.crt") - ) + path.join(httpsCertificateDirectory, "server.crt"), + ), ], - passphrase: "webpack-dev-server" - } + passphrase: "webpack-dev-server", + }, }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -426,25 +424,25 @@ describe("server option", () => { it("should handle GET request to index route (/)", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`https://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect( - normalizeOptions(createServerSpy.mock.calls[0][0]) + normalizeOptions(createServerSpy.mock.calls[0][0]), ).toMatchSnapshot("https options"); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); }); }); @@ -467,7 +465,7 @@ describe("server option", () => { { static: { directory: staticDirectory, - watch: false + watch: false, }, server: { type: "https", @@ -478,24 +476,24 @@ describe("server option", () => { // TODO // pfx can't be string because it is binary format pfx: fs.readFileSync( - path.join(httpsCertificateDirectory, "server.pfx") + path.join(httpsCertificateDirectory, "server.pfx"), ), key: fs .readFileSync( - path.join(httpsCertificateDirectory, "server.key") + path.join(httpsCertificateDirectory, "server.key"), ) .toString(), cert: fs .readFileSync( - path.join(httpsCertificateDirectory, "server.crt") + path.join(httpsCertificateDirectory, "server.crt"), ) .toString(), - passphrase: "webpack-dev-server" - } + passphrase: "webpack-dev-server", + }, }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -515,25 +513,25 @@ describe("server option", () => { it("should handle GET request to index route (/)", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`https://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect( - normalizeOptions(createServerSpy.mock.calls[0][0]) + normalizeOptions(createServerSpy.mock.calls[0][0]), ).toMatchSnapshot("https options"); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); }); }); @@ -556,7 +554,7 @@ describe("server option", () => { { static: { directory: staticDirectory, - watch: false + watch: false, }, server: { type: "https", @@ -564,36 +562,36 @@ describe("server option", () => { ca: [ fs .readFileSync( - path.join(httpsCertificateDirectory, "ca.pem") + path.join(httpsCertificateDirectory, "ca.pem"), ) - .toString() + .toString(), ], // pfx can't be string because it is binary format pfx: [ fs.readFileSync( - path.join(httpsCertificateDirectory, "server.pfx") - ) + path.join(httpsCertificateDirectory, "server.pfx"), + ), ], key: [ fs .readFileSync( - path.join(httpsCertificateDirectory, "server.key") + path.join(httpsCertificateDirectory, "server.key"), ) - .toString() + .toString(), ], cert: [ fs .readFileSync( - path.join(httpsCertificateDirectory, "server.crt") + path.join(httpsCertificateDirectory, "server.crt"), ) - .toString() + .toString(), ], - passphrase: "webpack-dev-server" - } + passphrase: "webpack-dev-server", + }, }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -613,25 +611,25 @@ describe("server option", () => { it("should handle GET request to index route (/)", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`https://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect( - normalizeOptions(createServerSpy.mock.calls[0][0]) + normalizeOptions(createServerSpy.mock.calls[0][0]), ).toMatchSnapshot("https options"); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); }); }); @@ -654,7 +652,7 @@ describe("server option", () => { { static: { directory: staticDirectory, - watch: false + watch: false, }, server: { type: "https", @@ -663,12 +661,12 @@ describe("server option", () => { pfx: path.join(httpsCertificateDirectory, "server.pfx"), key: path.join(httpsCertificateDirectory, "server.key"), cert: path.join(httpsCertificateDirectory, "server.crt"), - passphrase: "webpack-dev-server" - } + passphrase: "webpack-dev-server", + }, }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -688,25 +686,25 @@ describe("server option", () => { it("should handle GET request to index route (/)", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`https://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect( - normalizeOptions(createServerSpy.mock.calls[0][0]) + normalizeOptions(createServerSpy.mock.calls[0][0]), ).toMatchSnapshot("https options"); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); }); }); @@ -729,7 +727,7 @@ describe("server option", () => { { static: { directory: staticDirectory, - watch: false + watch: false, }, server: { type: "https", @@ -738,12 +736,12 @@ describe("server option", () => { pfx: [path.join(httpsCertificateDirectory, "server.pfx")], key: [path.join(httpsCertificateDirectory, "server.key")], cert: [path.join(httpsCertificateDirectory, "server.crt")], - passphrase: "webpack-dev-server" - } + passphrase: "webpack-dev-server", + }, }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -763,25 +761,25 @@ describe("server option", () => { it("should handle GET request to index route (/)", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`https://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect( - normalizeOptions(createServerSpy.mock.calls[0][0]) + normalizeOptions(createServerSpy.mock.calls[0][0]), ).toMatchSnapshot("https options"); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); }); }); @@ -808,7 +806,7 @@ describe("server option", () => { { static: { directory: staticDirectory, - watch: false + watch: false, }, server: { type: "https", @@ -818,14 +816,14 @@ describe("server option", () => { key: path.join(httpsCertificateDirectory, "server-symlink.key"), cert: path.join( httpsCertificateDirectory, - "server-symlink.crt" + "server-symlink.crt", ), - passphrase: "webpack-dev-server" - } + passphrase: "webpack-dev-server", + }, }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -845,20 +843,20 @@ describe("server option", () => { it("should handle GET request to index route (/)", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`https://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.status()).toEqual(200); expect(await response.text()).toContain("Heyo"); - expect(consoleMessages.map(message => message.text())).toEqual([]); + expect(consoleMessages.map((message) => message.text())).toEqual([]); expect(pageErrors).toEqual([]); }); }); @@ -881,29 +879,29 @@ describe("server option", () => { { static: { directory: staticDirectory, - watch: false + watch: false, }, server: { type: "https", options: { ca: fs.readFileSync( - path.join(httpsCertificateDirectory, "ca.pem") + path.join(httpsCertificateDirectory, "ca.pem"), ), pfx: fs.readFileSync( - path.join(httpsCertificateDirectory, "server.pfx") + path.join(httpsCertificateDirectory, "server.pfx"), ), key: fs.readFileSync( - path.join(httpsCertificateDirectory, "server.key") + path.join(httpsCertificateDirectory, "server.key"), ), cert: fs.readFileSync( - path.join(httpsCertificateDirectory, "server.crt") + path.join(httpsCertificateDirectory, "server.crt"), ), - passphrase: "webpack-dev-server" - } + passphrase: "webpack-dev-server", + }, }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -923,25 +921,25 @@ describe("server option", () => { it("should handle GET request to index route (/)", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`https://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect( - normalizeOptions(createServerSpy.mock.calls[0][0]) + normalizeOptions(createServerSpy.mock.calls[0][0]), ).toMatchSnapshot("https options"); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); }); }); @@ -964,37 +962,37 @@ describe("server option", () => { { static: { directory: staticDirectory, - watch: false + watch: false, }, server: { type: "https", options: { ca: fs.readFileSync( - path.join(httpsCertificateDirectory, "ca.pem") + path.join(httpsCertificateDirectory, "ca.pem"), ), pfx: [ { buf: fs.readFileSync( - path.join(httpsCertificateDirectory, "server.pfx") - ) - } + path.join(httpsCertificateDirectory, "server.pfx"), + ), + }, ], key: [ { pem: fs.readFileSync( - path.join(httpsCertificateDirectory, "server.key") - ) - } + path.join(httpsCertificateDirectory, "server.key"), + ), + }, ], cert: fs.readFileSync( - path.join(httpsCertificateDirectory, "server.crt") + path.join(httpsCertificateDirectory, "server.crt"), ), - passphrase: "webpack-dev-server" - } + passphrase: "webpack-dev-server", + }, }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -1014,25 +1012,25 @@ describe("server option", () => { it("should handle GET request to index route (/)", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`https://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect( - normalizeOptions(createServerSpy.mock.calls[0][0]) + normalizeOptions(createServerSpy.mock.calls[0][0]), ).toMatchSnapshot("https options"); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); }); }); @@ -1055,7 +1053,7 @@ describe("server option", () => { { static: { directory: staticDirectory, - watch: false + watch: false, }, server: { type: "https", @@ -1067,30 +1065,30 @@ describe("server option", () => { { // pfx can't be string because it is binary format buf: fs.readFileSync( - path.join(httpsCertificateDirectory, "server.pfx") - ) - } + path.join(httpsCertificateDirectory, "server.pfx"), + ), + }, ], key: [ { pem: fs .readFileSync( - path.join(httpsCertificateDirectory, "server.key") + path.join(httpsCertificateDirectory, "server.key"), ) - .toString() - } + .toString(), + }, ], cert: fs .readFileSync( - path.join(httpsCertificateDirectory, "server.crt") + path.join(httpsCertificateDirectory, "server.crt"), ) .toString(), - passphrase: "webpack-dev-server" - } + passphrase: "webpack-dev-server", + }, }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -1110,25 +1108,25 @@ describe("server option", () => { it("should handle GET request to index route (/)", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`https://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect( - normalizeOptions(createServerSpy.mock.calls[0][0]) + normalizeOptions(createServerSpy.mock.calls[0][0]), ).toMatchSnapshot("https options"); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); }); }); @@ -1151,30 +1149,30 @@ describe("server option", () => { { static: { directory: staticDirectory, - watch: false + watch: false, }, server: { type: "https", options: { minVersion: "TLSv1.1", ca: fs.readFileSync( - path.join(httpsCertificateDirectory, "ca.pem") + path.join(httpsCertificateDirectory, "ca.pem"), ), pfx: fs.readFileSync( - path.join(httpsCertificateDirectory, "server.pfx") + path.join(httpsCertificateDirectory, "server.pfx"), ), key: fs.readFileSync( - path.join(httpsCertificateDirectory, "server.key") + path.join(httpsCertificateDirectory, "server.key"), ), cert: fs.readFileSync( - path.join(httpsCertificateDirectory, "server.crt") + path.join(httpsCertificateDirectory, "server.crt"), ), - passphrase: "webpack-dev-server" - } + passphrase: "webpack-dev-server", + }, }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -1194,25 +1192,25 @@ describe("server option", () => { it("should handle GET request to index route (/)", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`https://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect( - normalizeOptions(createServerSpy.mock.calls[0][0]) + normalizeOptions(createServerSpy.mock.calls[0][0]), ).toMatchSnapshot("https options"); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); }); }); @@ -1233,27 +1231,27 @@ describe("server option", () => { { static: { directory: staticDirectory, - watch: false + watch: false, }, server: { type: "https", options: { requestCert: true, pfx: fs.readFileSync( - path.join(httpsCertificateDirectory, "server.pfx") + path.join(httpsCertificateDirectory, "server.pfx"), ), key: fs.readFileSync( - path.join(httpsCertificateDirectory, "server.key") + path.join(httpsCertificateDirectory, "server.key"), ), cert: fs.readFileSync( - path.join(httpsCertificateDirectory, "server.crt") + path.join(httpsCertificateDirectory, "server.crt"), ), - passphrase: "webpack-dev-server" - } + passphrase: "webpack-dev-server", + }, }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -1269,7 +1267,7 @@ describe("server option", () => { it("should pass options to the 'https.createServer' method", async () => { expect( - normalizeOptions(createServerSpy.mock.calls[0][0]) + normalizeOptions(createServerSpy.mock.calls[0][0]), ).toMatchSnapshot("https options"); }); @@ -1299,7 +1297,7 @@ describe("server option", () => { { static: { directory: staticDirectory, - watch: false + watch: false, }, server: { type: "spdy", @@ -1309,12 +1307,12 @@ describe("server option", () => { pfx: [path.join(httpsCertificateDirectory, "server.pfx")], key: [path.join(httpsCertificateDirectory, "server.key")], cert: [path.join(httpsCertificateDirectory, "server.crt")], - passphrase: "webpack-dev-server" - } + passphrase: "webpack-dev-server", + }, }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -1334,30 +1332,30 @@ describe("server option", () => { it("should handle GET request to index route (/)", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`https://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const HTTPVersion = await page.evaluate( - () => performance.getEntries()[0].nextHopProtocol + () => performance.getEntries()[0].nextHopProtocol, ); expect(HTTPVersion).toEqual("h2"); expect( - normalizeOptions(createServerSpy.mock.calls[0][0]) + normalizeOptions(createServerSpy.mock.calls[0][0]), ).toMatchSnapshot("https options"); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); }); }); @@ -1380,17 +1378,17 @@ describe("server option", () => { { static: { directory: staticDirectory, - watch: false + watch: false, }, server: { type: path.join(__dirname, "../helpers/custom-http.js"), options: { - maxHeaderSize: 16384 - } + maxHeaderSize: 16384, + }, }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -1410,30 +1408,30 @@ describe("server option", () => { it("should handle GET request to index route (/)", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const HTTPVersion = await page.evaluate( - () => performance.getEntries()[0].nextHopProtocol + () => performance.getEntries()[0].nextHopProtocol, ); expect(HTTPVersion).toEqual("http/1.1"); expect( - normalizeOptions(createServerSpy.mock.calls[0][0]) + normalizeOptions(createServerSpy.mock.calls[0][0]), ).toMatchSnapshot("http options"); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); }); }); diff --git a/tests/e2e/setup-exit-signals.test.js b/tests/e2e/setup-exit-signals.test.js index fa4420e..0be3437 100644 --- a/tests/e2e/setup-exit-signals.test.js +++ b/tests/e2e/setup-exit-signals.test.js @@ -1,5 +1,3 @@ -"use strict"; - const webpack = require("@rspack/core"); const { RspackDevServer: Server } = require("@rspack/dev-server"); const config = require("../fixtures/simple-config/webpack.config"); @@ -28,9 +26,9 @@ describe("setupExitSignals option", () => { server = new Server( { setupExitSignals: true, - port + port, }, - compiler + compiler, ); await server.start(); @@ -59,32 +57,32 @@ describe("setupExitSignals option", () => { afterEach(async () => { exitSpy.mockReset(); stdinResumeSpy.mockReset(); - signals.forEach(signal => { + for (const signal of signals) { process.removeAllListeners(signal); - }); + } process.stdin.removeAllListeners("end"); await browser.close(); await server.stop(); }); - it.each(signals)("should close and exit on %s", async signal => { + it.each(signals)("should close and exit on %s", async (signal) => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.status()).toMatchSnapshot("response status"); process.emit(signal); - await new Promise(resolve => { + await new Promise((resolve) => { const interval = setInterval(() => { if (doExit) { expect(stopCallbackSpy.mock.calls.length).toEqual(1); @@ -101,15 +99,15 @@ describe("setupExitSignals option", () => { }); consoleMessages = consoleMessages.filter( - message => + (message) => !( message.text().includes("Trying to reconnect...") || message.text().includes("Disconnected") - ) + ), ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); diff --git a/tests/e2e/setup-middlewares.test.js b/tests/e2e/setup-middlewares.test.js index 2d49c54..4710f44 100644 --- a/tests/e2e/setup-middlewares.test.js +++ b/tests/e2e/setup-middlewares.test.js @@ -1,5 +1,3 @@ -"use strict"; - const webpack = require("@rspack/core"); const { RspackDevServer: Server } = require("@rspack/dev-server"); const config = require("../fixtures/client-config/webpack.config"); @@ -23,42 +21,52 @@ 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.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; + } + if (req.method === "POST") { + res.setHeader("Content-Type", "text/html; charset=utf-8"); + res.end("setup-middlewares option POST"); + return; + } - devServer.app.post("/setup-middleware/some/path", (_, response) => { - response.send("setup-middlewares option POST"); + 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; }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -76,42 +84,42 @@ describe("setupMiddlewares option", () => { it("should handle GET request to /setup-middleware/some/path route", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto( `http://127.0.0.1:${port}/setup-middleware/some/path`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type" + "response headers content-type", ); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); const response1 = await page.goto(`http://127.0.0.1:${port}/foo/bar`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response1.headers()["content-type"]).toMatchSnapshot( - "response headers content-type" + "response headers content-type", ); expect(response1.status()).toMatchSnapshot("response status"); expect(await response1.text()).toMatchSnapshot("response text"); const response2 = await page.goto(`http://127.0.0.1:${port}/foo/bar/baz`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response2.headers()["content-type"]).toMatchSnapshot( - "response headers content-type" + "response headers content-type", ); expect(response2.status()).toMatchSnapshot("response status"); expect(await response2.text()).toMatchSnapshot("response text"); @@ -119,18 +127,18 @@ describe("setupMiddlewares option", () => { const response3 = await page.goto( `http://127.0.0.1:${port}/setup-middleware/unknown`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); expect(response3.headers()["content-type"]).toMatchSnapshot( - "response headers content-type" + "response headers content-type", ); expect(response3.status()).toMatchSnapshot("response status"); expect(await response3.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); }); @@ -139,13 +147,13 @@ describe("setupMiddlewares option", () => { await page.setRequestInterception(true); page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }) - .on("request", interceptedRequest => { + .on("request", (interceptedRequest) => { if (interceptedRequest.isInterceptResolutionHandled()) return; interceptedRequest.continue({ method: "POST" }); @@ -154,17 +162,17 @@ describe("setupMiddlewares option", () => { const response = await page.goto( `http://127.0.0.1:${port}/setup-middleware/some/path`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); expect(response.headers()["content-type"]).toMatchSnapshot( - "response headers content-type" + "response headers content-type", ); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); }); diff --git a/tests/e2e/static-directory.test.js b/tests/e2e/static-directory.test.js index 551c7c7..98b4862 100644 --- a/tests/e2e/static-directory.test.js +++ b/tests/e2e/static-directory.test.js @@ -1,6 +1,4 @@ -"use strict"; - -const path = require("path"); +const path = require("node:path"); const fs = require("graceful-fs"); const webpack = require("@rspack/core"); const { RspackDevServer: Server } = require("@rspack/dev-server"); @@ -31,11 +29,11 @@ describe("static.directory option", () => { { static: { directory: publicDirectory, - watch: true + watch: true, }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -54,23 +52,23 @@ describe("static.directory option", () => { it("should handle request to index route", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -78,29 +76,29 @@ describe("static.directory option", () => { it("should handle request to other file", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/other.html`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); }); - it("Watches folder recursively", done => { + it("Watches folder recursively", (done) => { // chokidar emitted a change, // meaning it watched the file correctly server.staticWatchers[0].on("change", () => { @@ -113,7 +111,7 @@ describe("static.directory option", () => { }, 1000); }); - it("Watches node_modules", done => { + it("Watches node_modules", (done) => { const filePath = path.join(publicDirectory, "node_modules", "index.html"); fs.writeFileSync(filePath, "foo", "utf8"); @@ -149,11 +147,11 @@ describe("static.directory option", () => { static: { directory: publicDirectory, watch: true, - serveIndex: false + serveIndex: false, }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -171,23 +169,23 @@ describe("static.directory option", () => { it("should not list the files inside the assets folder (404)", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/assets`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -195,23 +193,23 @@ describe("static.directory option", () => { it("should show Heyo. because bar has index.html inside it (200)", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/bar`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -234,11 +232,11 @@ describe("static.directory option", () => { static: { directory: publicDirectory, watch: true, - serveIndex: true + serveIndex: true, }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -256,15 +254,15 @@ describe("static.directory option", () => { it("should list the files inside the assets folder (200)", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/assets/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const text = await response.text(); @@ -274,8 +272,8 @@ describe("static.directory option", () => { expect(text).toContain("example.txt"); expect(text).toContain("other.txt"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -283,23 +281,23 @@ describe("static.directory option", () => { it("should show Heyo. because bar has index.html inside it (200)", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/bar/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -321,11 +319,11 @@ describe("static.directory option", () => { { static: { directory: publicDirectory, - watch: true + watch: true, }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -343,15 +341,15 @@ describe("static.directory option", () => { it("should list the files inside the assets folder (200)", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/assets`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const text = await response.text(); @@ -361,8 +359,8 @@ describe("static.directory option", () => { expect(text).toContain("example.txt"); expect(text).toContain("other.txt"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -370,23 +368,23 @@ describe("static.directory option", () => { it("should show Heyo. because bar has index.html inside it (200)", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/bar`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -407,9 +405,9 @@ describe("static.directory option", () => { server = new Server( { static: [publicDirectory, otherPublicDirectory], - port + port, }, - compiler + compiler, ); await server.start(); @@ -427,23 +425,23 @@ describe("static.directory option", () => { it("should handle request first directory", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -451,23 +449,23 @@ describe("static.directory option", () => { it("should handle request to second directory", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/foo.html`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -477,31 +475,31 @@ describe("static.directory option", () => { describe("testing single & multiple external paths", () => { let server; - afterEach(done => { + afterEach((done) => { testServer.close(() => { done(); }); }); - it("Should throw exception (external url)", done => { + it("Should throw exception (external url)", (done) => { expect.assertions(1); server = testServer.start( config, { - static: "https://example.com/" + static: "https://example.com/", }, - error => { + (error) => { expect(error.message).toBe( - "Using a URL as static.directory is not supported" + "Using a URL as static.directory is not supported", ); server.stopCallback(done); - } + }, ); }); - it("Should not throw exception (local path with lower case first character)", done => { + it("Should not throw exception (local path with lower case first character)", (done) => { testServer.start( config, { @@ -509,55 +507,55 @@ describe("static.directory option", () => { directory: publicDirectory.charAt(0).toLowerCase() + publicDirectory.substring(1), - watch: true + watch: true, }, - port + port, }, - done + done, ); }); - it("Should not throw exception (local path with lower case first character & has '-')", done => { + it("Should not throw exception (local path with lower case first character & has '-')", (done) => { testServer.start( config, { static: { directory: "c:\\absolute\\path\\to\\content-base", - watch: true + watch: true, }, - port + port, }, - done + done, ); }); - it("Should not throw exception (local path with upper case first character & has '-')", done => { + it("Should not throw exception (local path with upper case first character & has '-')", (done) => { testServer.start( config, { static: { directory: "C:\\absolute\\path\\to\\content-base", - watch: true + watch: true, }, - port + port, }, - done + done, ); }); - it("Should throw exception (array with absolute url)", done => { + it("Should throw exception (array with absolute url)", (done) => { server = testServer.start( config, { - static: [publicDirectory, "https://example.com/"] + static: [publicDirectory, "https://example.com/"], }, - error => { + (error) => { expect(error.message).toBe( - "Using a URL as static.directory is not supported" + "Using a URL as static.directory is not supported", ); server.stopCallback(done); - } + }, ); }); }); @@ -580,9 +578,9 @@ describe("static.directory option", () => { { // eslint-disable-next-line no-undefined static: undefined, - port + port, }, - compiler + compiler, ); await server.start(); @@ -600,23 +598,23 @@ describe("static.directory option", () => { it("should handle request to /index.html", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/index.html`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -641,9 +639,9 @@ describe("static.directory option", () => { server = new Server( { static: false, - port + port, }, - compiler + compiler, ); await server.start(); @@ -661,23 +659,23 @@ describe("static.directory option", () => { it("should not handle request to /other.html (404)", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/index.html`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); diff --git a/tests/e2e/static-public-path.test.js b/tests/e2e/static-public-path.test.js index 38e27f5..94e820c 100644 --- a/tests/e2e/static-public-path.test.js +++ b/tests/e2e/static-public-path.test.js @@ -1,6 +1,4 @@ -"use strict"; - -const path = require("path"); +const path = require("node:path"); const webpack = require("@rspack/core"); const { RspackDevServer: Server } = require("@rspack/dev-server"); const config = require("../fixtures/static-config/webpack.config"); @@ -30,11 +28,11 @@ describe("static.publicPath option", () => { static: { directory: publicDirectory, publicPath: staticPublicPath, - watch: true + watch: true, }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -52,26 +50,26 @@ describe("static.publicPath option", () => { it("should handle request to index", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto( `http://127.0.0.1:${port}${staticPublicPath}/`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -79,26 +77,26 @@ describe("static.publicPath option", () => { it("should handle request to other file", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto( `http://127.0.0.1:${port}${staticPublicPath}/other.html`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -122,11 +120,11 @@ describe("static.publicPath option", () => { directory: publicDirectory, publicPath: staticPublicPath, watch: true, - serveIndex: false + serveIndex: false, }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -144,26 +142,26 @@ describe("static.publicPath option", () => { it("shouldn't list the files inside the assets folder (404)", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto( `http://127.0.0.1:${port}${staticPublicPath}/assets`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -171,26 +169,26 @@ describe("static.publicPath option", () => { it("should show Heyo. because bar has index.html inside it (200)", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto( `http://127.0.0.1:${port}${staticPublicPath}/bar`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -214,11 +212,11 @@ describe("static.publicPath option", () => { directory: publicDirectory, publicPath: staticPublicPath, watch: true, - serveIndex: true + serveIndex: true, }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -236,26 +234,26 @@ describe("static.publicPath option", () => { it("should list the files inside the assets folder (200)", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto( `http://127.0.0.1:${port}${staticPublicPath}/assets`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toContain("other.txt"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -263,26 +261,26 @@ describe("static.publicPath option", () => { it("should show Heyo. because bar has index.html inside it (200)", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto( `http://127.0.0.1:${port}${staticPublicPath}/bar`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -306,11 +304,11 @@ describe("static.publicPath option", () => { directory: publicDirectory, publicPath: staticPublicPath, watch: true, - serveIndex: true + serveIndex: true, }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -328,26 +326,26 @@ describe("static.publicPath option", () => { it("should list the files inside the assets folder (200)", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto( `http://127.0.0.1:${port}${staticPublicPath}/assets`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toContain("other.txt"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -355,26 +353,26 @@ describe("static.publicPath option", () => { it("should show Heyo. because bar has index.html inside it (200)", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto( `http://127.0.0.1:${port}${staticPublicPath}/bar`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -397,16 +395,16 @@ describe("static.publicPath option", () => { static: [ { directory: publicDirectory, - publicPath: staticPublicPath + publicPath: staticPublicPath, }, { directory: otherPublicDirectory, - publicPath: staticPublicPath - } + publicPath: staticPublicPath, + }, ], - port + port, }, - compiler + compiler, ); await server.start(); @@ -424,26 +422,26 @@ describe("static.publicPath option", () => { it("should handle request to first directory", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto( `http://127.0.0.1:${port}${staticPublicPath}/`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -451,26 +449,26 @@ describe("static.publicPath option", () => { it("should handle request to second directory", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto( `http://127.0.0.1:${port}${staticPublicPath}/foo.html`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -496,11 +494,11 @@ describe("static.publicPath option", () => { server = new Server( { static: { - publicPath: staticPublicPath + publicPath: staticPublicPath, }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -520,26 +518,26 @@ describe("static.publicPath option", () => { it("should handle request to page", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto( `http://127.0.0.1:${port}${staticPublicPath}/index.html`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -561,11 +559,11 @@ describe("static.publicPath option", () => { { static: { directory: publicDirectory, - publicPath: staticPublicPath + publicPath: staticPublicPath, }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -583,28 +581,28 @@ describe("static.publicPath option", () => { it("should handle request to example.txt", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto( `http://127.0.0.1:${port}${staticPublicPath}/assets/example.txt`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); expect(response.status()).toMatchSnapshot("response status"); expect(response.headers()["content-type"]).toMatchSnapshot( - "response header content-type" + "response header content-type", ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -626,11 +624,11 @@ describe("static.publicPath option", () => { { static: { directory: publicDirectory, - publicPath: staticPublicPath + publicPath: staticPublicPath, }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -648,24 +646,24 @@ describe("static.publicPath option", () => { it("should handle GET request", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto( `http://127.0.0.1:${port}${staticPublicPath}/`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -673,13 +671,13 @@ describe("static.publicPath option", () => { it("should handle HEAD request", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }) - .on("request", interceptedRequest => { + .on("request", (interceptedRequest) => { if (interceptedRequest.isInterceptResolutionHandled()) return; interceptedRequest.continue({ method: "HEAD" }); @@ -688,14 +686,14 @@ describe("static.publicPath option", () => { const response = await page.goto( `http://127.0.0.1:${port}${staticPublicPath}/`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -705,27 +703,27 @@ describe("static.publicPath option", () => { await page.setRequestInterception(true); page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }) - .on("request", interceptedRequest => { + .on("request", (interceptedRequest) => { interceptedRequest.continue({ method: "POST" }); }); const response = await page.goto( `http://127.0.0.1:${port}${staticPublicPath}/`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -735,27 +733,27 @@ describe("static.publicPath option", () => { await page.setRequestInterception(true); page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }) - .on("request", interceptedRequest => { + .on("request", (interceptedRequest) => { interceptedRequest.continue({ method: "PUT" }); }); const response = await page.goto( `http://127.0.0.1:${port}${staticPublicPath}/`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -765,27 +763,27 @@ describe("static.publicPath option", () => { await page.setRequestInterception(true); page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }) - .on("request", interceptedRequest => { + .on("request", (interceptedRequest) => { interceptedRequest.continue({ method: "DELETE" }); }); const response = await page.goto( `http://127.0.0.1:${port}${staticPublicPath}/`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -795,27 +793,27 @@ describe("static.publicPath option", () => { await page.setRequestInterception(true); page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }) - .on("request", interceptedRequest => { + .on("request", (interceptedRequest) => { interceptedRequest.continue({ method: "PATCH" }); }); const response = await page.goto( `http://127.0.0.1:${port}${staticPublicPath}/`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -839,17 +837,17 @@ describe("static.publicPath option", () => { { directory: publicDirectory, publicPath: staticPublicPath, - watch: true + watch: true, }, { directory: otherPublicDirectory, publicPath: otherStaticPublicPath, - watch: true - } + watch: true, + }, ], - port + port, }, - compiler + compiler, ); await server.start(); @@ -867,26 +865,26 @@ describe("static.publicPath option", () => { it("should handle request to the index of first path", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto( `http://127.0.0.1:${port}${staticPublicPath}/`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -894,26 +892,26 @@ describe("static.publicPath option", () => { it("should handle request to the other file of first path", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto( `http://127.0.0.1:${port}${staticPublicPath}/other.html`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -921,26 +919,26 @@ describe("static.publicPath option", () => { it("should handle request to the /foo route of second path", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto( `http://127.0.0.1:${port}${otherStaticPublicPath}/foo.html`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -964,17 +962,17 @@ describe("static.publicPath option", () => { { directory: publicDirectory, publicPath: staticPublicPath, - watch: true + watch: true, }, { directory: otherPublicDirectory, publicPath: [staticPublicPath, otherStaticPublicPath], - watch: true - } + watch: true, + }, ], - port + port, }, - compiler + compiler, ); await server.start(); @@ -992,26 +990,26 @@ describe("static.publicPath option", () => { it("should handle request to the index of first path", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto( `http://127.0.0.1:${port}${staticPublicPath}/`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -1019,26 +1017,26 @@ describe("static.publicPath option", () => { it("should handle request to the other file of first path", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto( `http://127.0.0.1:${port}${staticPublicPath}/other.html`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -1046,26 +1044,26 @@ describe("static.publicPath option", () => { it("should handle request to the /foo route of first path", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto( `http://127.0.0.1:${port}${staticPublicPath}/foo.html`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -1073,26 +1071,26 @@ describe("static.publicPath option", () => { it("should handle request to the /foo route of second path", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto( `http://127.0.0.1:${port}${otherStaticPublicPath}/foo.html`, { - waitUntil: "networkidle0" - } + waitUntil: "networkidle0", + }, ); expect(response.status()).toMatchSnapshot("response status"); expect(await response.text()).toMatchSnapshot("response text"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); diff --git a/tests/e2e/stats.test.js b/tests/e2e/stats.test.js index 2ce8260..0ce4e10 100644 --- a/tests/e2e/stats.test.js +++ b/tests/e2e/stats.test.js @@ -1,5 +1,3 @@ -"use strict"; - const webpack = require("@rspack/core"); const { RspackDevServer: Server } = require("@rspack/dev-server"); const config = require("../fixtures/client-config/webpack.config"); @@ -13,42 +11,42 @@ describe("stats", () => { const cases = [ { title: 'should work when "stats" is not specified', - webpackOptions: {} + webpackOptions: {}, }, { title: 'should work using "{}" value for the "stats" option', webpackOptions: { - stats: {} - } + stats: {}, + }, }, { title: 'should work using "undefined" value for the "stats" option', webpackOptions: { // eslint-disable-next-line no-undefined - stats: undefined - } + stats: undefined, + }, }, { title: 'should work using "false" value for the "stats" option', webpackOptions: { - stats: false - } + stats: false, + }, }, { title: 'should work using "errors-only" value for the "stats" option', webpackOptions: { - stats: "errors-only" - } + stats: "errors-only", + }, }, { title: 'should work using "{ assets: false }" value for the "stats" option', webpackOptions: { stats: { - assets: false - } - } - } + assets: false, + }, + }, + }, // TODO: support object `config.stats.colors` // { // title: @@ -95,26 +93,26 @@ describe("stats", () => { apply(compiler) { compiler.hooks.thisCompilation.tap( "warnings-webpack-plugin", - compilation => { + (compilation) => { compilation.warnings.push( - new Error("Warning from compilation") + new Error("Warning from compilation"), ); - } + }, ); - } + }, }, - new HTMLGeneratorPlugin() + new HTMLGeneratorPlugin(), ], - ignoreWarnings: [/Warning from compilation/] - } + ignoreWarnings: [/Warning from compilation/], + }, }); } - cases.forEach(testCase => { + for (const testCase of cases) { it(testCase.title, async () => { const compiler = webpack({ ...config, ...testCase.webpackOptions }); const devServerOptions = { - port + port, }; const server = new Server(devServerOptions, compiler); @@ -125,23 +123,21 @@ describe("stats", () => { try { const consoleMessages = []; - page.on("console", message => { + page.on("console", (message) => { consoleMessages.push(message); }); await page.goto(`http://localhost:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect( - consoleMessages.map(message => message.text()) + consoleMessages.map((message) => message.text()), ).toMatchSnapshot(); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); } }); - }); + } }); diff --git a/tests/e2e/target.test.js b/tests/e2e/target.test.js index 0bc4738..ae1cf7e 100644 --- a/tests/e2e/target.test.js +++ b/tests/e2e/target.test.js @@ -1,10 +1,14 @@ -"use strict"; - +const path = require("node:path"); const webpack = require("@rspack/core"); const { RspackDevServer: Server } = require("@rspack/dev-server"); const config = require("../fixtures/client-config/webpack.config"); const runBrowser = require("../helpers/run-browser"); const port = require("../helpers/ports-map").target; +const workerConfig = require("../fixtures/worker-config/webpack.config"); +const workerConfigDevServerFalse = require("../fixtures/worker-config-dev-server-false/webpack.config"); + +const sortByTerm = (data, term) => + data.sort((a, b) => (a.indexOf(term) < b.indexOf(term) ? -1 : 1)); describe("target", () => { const targets = [ @@ -20,7 +24,7 @@ describe("target", () => { "nwjs", "node-webkit", "es5", - ["web", "es5"] + ["web", "es5"], ]; for (const target of targets) { @@ -30,14 +34,11 @@ describe("target", () => { target, ...(target === false || target === "es5" ? { - output: { chunkFormat: "array-push", path: "/" } + output: { chunkFormat: "array-push", path: "/" }, } - : {}) + : {}), }); - const devServerOptions = { - port - }; - const server = new Server(devServerOptions, compiler); + const server = new Server({ port }, compiler); await server.start(); @@ -48,20 +49,20 @@ describe("target", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); // TODO: check why require is defined in theses target // if ( @@ -83,12 +84,97 @@ describe("target", () => { // } else { // expect(pageErrors).toMatchSnapshot("page errors"); // } - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); } }); } + + it("should work using multi compiler mode with `web` and `webworker` targets", async () => { + const compiler = webpack(workerConfig); + const server = new Server({ port }, compiler); + + await server.start(); + + const { page, browser } = await runBrowser(); + + try { + const pageErrors = []; + const consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://127.0.0.1:${port}/`, { + waitUntil: "networkidle0", + }); + + expect( + sortByTerm( + consoleMessages.map((message) => message.text()), + "Worker said:", + ), + ).toMatchSnapshot("console messages"); + + expect(pageErrors).toMatchSnapshot("page errors"); + } finally { + await browser.close(); + await server.stop(); + } + }); + + it("should work using multi compiler mode with `web` and `webworker` targets with `devServer: false`", async () => { + const compiler = webpack(workerConfigDevServerFalse); + const server = new Server( + { + port, + static: { + directory: path.resolve( + __dirname, + "../fixtures/worker-config-dev-server-false/public/", + ), + }, + }, + compiler, + ); + + await server.start(); + + const { page, browser } = await runBrowser(); + + try { + const pageErrors = []; + const consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://127.0.0.1:${port}/`, { + waitUntil: "networkidle0", + }); + + expect( + sortByTerm( + consoleMessages.map((message) => message.text()), + "Worker said:", + ), + ).toMatchSnapshot("console messages"); + + expect(pageErrors).toMatchSnapshot("page errors"); + } finally { + await browser.close(); + await server.stop(); + } + }); }); diff --git a/tests/e2e/watch-files.test.js b/tests/e2e/watch-files.test.js index 0e77d84..9ff53fe 100644 --- a/tests/e2e/watch-files.test.js +++ b/tests/e2e/watch-files.test.js @@ -1,6 +1,4 @@ -"use strict"; - -const path = require("path"); +const path = require("node:path"); const chokidar = require("chokidar"); const fs = require("graceful-fs"); const webpack = require("@rspack/core"); @@ -11,7 +9,7 @@ const port = require("../helpers/ports-map")["watch-files-option"]; const watchDir = path.resolve( __dirname, - "../fixtures/watch-files-config/public" + "../fixtures/watch-files-config/public", ); describe("watchFiles option", () => { @@ -30,9 +28,9 @@ describe("watchFiles option", () => { server = new Server( { watchFiles: file, - port + port, }, - compiler + compiler, ); await server.start(); @@ -51,21 +49,21 @@ describe("watchFiles option", () => { it("should reload when file content is changed", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -73,8 +71,8 @@ describe("watchFiles option", () => { // change file content fs.writeFileSync(file, "Kurosaki Ichigo", "utf8"); - await new Promise(resolve => { - server.staticWatchers[0].on("change", async changedPath => { + await new Promise((resolve) => { + server.staticWatchers[0].on("change", async (changedPath) => { // page reload await page.waitForNavigation({ waitUntil: "networkidle0" }); @@ -101,9 +99,9 @@ describe("watchFiles option", () => { server = new Server( { watchFiles: watchDir, - port + port, }, - compiler + compiler, ); await server.start(); @@ -122,21 +120,21 @@ describe("watchFiles option", () => { it("should reload when file content is changed", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -144,8 +142,8 @@ describe("watchFiles option", () => { // change file content fs.writeFileSync(file, "Kurosaki Ichigo", "utf8"); - await new Promise(resolve => { - server.staticWatchers[0].on("change", async changedPath => { + await new Promise((resolve) => { + server.staticWatchers[0].on("change", async (changedPath) => { // page reload await page.waitForNavigation({ waitUntil: "networkidle0" }); @@ -172,9 +170,9 @@ describe("watchFiles option", () => { server = new Server( { watchFiles: `${watchDir}/**/*`, - port + port, }, - compiler + compiler, ); await server.start(); @@ -193,21 +191,21 @@ describe("watchFiles option", () => { it("should reload when file content is changed", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -215,8 +213,8 @@ describe("watchFiles option", () => { // change file content fs.writeFileSync(file, "Kurosaki Ichigo", "utf8"); - await new Promise(resolve => { - server.staticWatchers[0].on("change", async changedPath => { + await new Promise((resolve) => { + server.staticWatchers[0].on("change", async (changedPath) => { // page reload await page.waitForNavigation({ waitUntil: "networkidle0" }); @@ -249,9 +247,9 @@ describe("watchFiles option", () => { server = new Server( { watchFiles: nonExistFile, - port + port, }, - compiler + compiler, ); await server.start(); @@ -269,27 +267,27 @@ describe("watchFiles option", () => { it("should reload when file content is changed", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); - await new Promise(resolve => { - server.staticWatchers[0].on("change", async changedPath => { + await new Promise((resolve) => { + server.staticWatchers[0].on("change", async (changedPath) => { // page reload await page.waitForNavigation({ waitUntil: "networkidle0" }); @@ -324,9 +322,9 @@ describe("watchFiles option", () => { server = new Server( { watchFiles: { paths: file }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -345,21 +343,21 @@ describe("watchFiles option", () => { it("should reload when file content is changed", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -367,8 +365,8 @@ describe("watchFiles option", () => { // change file content fs.writeFileSync(file, "Kurosaki Ichigo", "utf8"); - await new Promise(resolve => { - server.staticWatchers[0].on("change", async changedPath => { + await new Promise((resolve) => { + server.staticWatchers[0].on("change", async (changedPath) => { // page reload await page.waitForNavigation({ waitUntil: "networkidle0" }); @@ -396,9 +394,9 @@ describe("watchFiles option", () => { server = new Server( { watchFiles: { paths: [file, other] }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -418,21 +416,21 @@ describe("watchFiles option", () => { it("should reload when file content is changed", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -441,11 +439,11 @@ describe("watchFiles option", () => { fs.writeFileSync(file, "foo", "utf8"); fs.writeFileSync(other, "bar", "utf8"); - await new Promise(resolve => { + await new Promise((resolve) => { const expected = [file, other]; let changed = 0; - server.staticWatchers[0].on("change", async changedPath => { + server.staticWatchers[0].on("change", async (changedPath) => { // page reload await page.waitForNavigation({ waitUntil: "networkidle0" }); @@ -477,9 +475,9 @@ describe("watchFiles option", () => { server = new Server( { watchFiles: [{ paths: [file] }, other], - port + port, }, - compiler + compiler, ); await server.start(); @@ -499,21 +497,21 @@ describe("watchFiles option", () => { it("should reload when file content is changed", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(response.status()).toMatchSnapshot("response status"); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); @@ -522,10 +520,10 @@ describe("watchFiles option", () => { fs.writeFileSync(file, "foo", "utf8"); fs.writeFileSync(other, "bar", "utf8"); - await new Promise(resolve => { + await new Promise((resolve) => { let changed = 0; - server.staticWatchers[0].on("change", async changedPath => { + server.staticWatchers[0].on("change", async (changedPath) => { // page reload await page.waitForNavigation({ waitUntil: "networkidle0" }); @@ -537,7 +535,7 @@ describe("watchFiles option", () => { resolve(); } }); - server.staticWatchers[1].on("change", async changedPath => { + server.staticWatchers[1].on("change", async (changedPath) => { // page reload await page.waitForNavigation({ waitUntil: "networkidle0" }); @@ -560,46 +558,46 @@ describe("watchFiles option", () => { const optionCases = [ { - poll: true + poll: true, }, { - poll: 200 + poll: 200, }, { - usePolling: true + usePolling: true, }, { usePolling: true, - poll: 200 + poll: 200, }, { - usePolling: false + usePolling: false, }, { usePolling: false, - poll: 200 + poll: 200, }, { usePolling: false, - poll: true + poll: true, }, { interval: 400, - poll: 200 + poll: 200, }, { usePolling: true, interval: 200, - poll: 400 + poll: 400, }, { usePolling: false, interval: 200, - poll: 400 - } + poll: 400, + }, ]; - optionCases.forEach(optionCase => { + for (const optionCase of optionCases) { describe(JSON.stringify(optionCase), () => { let compiler; let server; @@ -617,11 +615,11 @@ describe("watchFiles option", () => { { watchFiles: { paths: file, - options: optionCase + options: optionCase, }, - port + port, }, - compiler + compiler, ); await server.start(); @@ -640,15 +638,15 @@ describe("watchFiles option", () => { it("should reload when file content is changed", async () => { page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const response = await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); // should pass correct options to chokidar config @@ -657,7 +655,7 @@ describe("watchFiles option", () => { expect(response.status()).toMatchSnapshot("response status"); expect( - consoleMessages.map(message => message.text()) + consoleMessages.map((message) => message.text()), ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); @@ -665,8 +663,8 @@ describe("watchFiles option", () => { // change file content fs.writeFileSync(file, "Kurosaki Ichigo", "utf8"); - await new Promise(resolve => { - server.staticWatchers[0].on("change", async changedPath => { + await new Promise((resolve) => { + server.staticWatchers[0].on("change", async (changedPath) => { // page reload await page.waitForNavigation({ waitUntil: "networkidle0" }); @@ -677,6 +675,6 @@ describe("watchFiles option", () => { }); }); }); - }); + } }); }); diff --git a/tests/e2e/web-socket-communication.test.js b/tests/e2e/web-socket-communication.test.js index e78eafa..1cbfe3f 100644 --- a/tests/e2e/web-socket-communication.test.js +++ b/tests/e2e/web-socket-communication.test.js @@ -1,5 +1,3 @@ -"use strict"; - const WebSocket = require("ws"); const webpack = require("@rspack/core"); const { RspackDevServer: Server } = require("@rspack/dev-server"); @@ -13,14 +11,14 @@ jest.setTimeout(60000); describe("web socket communication", () => { const webSocketServers = ["ws", "sockjs"]; - webSocketServers.forEach(websocketServer => { + for (const websocketServer of webSocketServers) { it(`should work and close web socket client connection when web socket server closed ("${websocketServer}")`, async () => { WebsocketServer.heartbeatInterval = 100; const compiler = webpack(config); const devServerOptions = { port, - webSocketServer: websocketServer + webSocketServer: websocketServer, }; const server = new Server(devServerOptions, compiler); @@ -33,19 +31,19 @@ describe("web socket communication", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message.text()); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); await server.stop(); - await new Promise(resolve => { + await new Promise((resolve) => { const interval = setInterval(() => { if ( consoleMessages.includes("[webpack-dev-server] Disconnected!") @@ -59,8 +57,6 @@ describe("web socket communication", () => { expect(consoleMessages).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); } @@ -72,7 +68,7 @@ describe("web socket communication", () => { const compiler = webpack(config); const devServerOptions = { port, - webSocketServer: websocketServer + webSocketServer: websocketServer, }; const server = new Server(devServerOptions, compiler); @@ -85,32 +81,30 @@ describe("web socket communication", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); await browser.close(); // Wait heartbeat - await new Promise(resolve => { + await new Promise((resolve) => { setTimeout(() => { resolve(); }, 200); }); expect(server.webSocketServer.clients.length).toBe(0); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await server.stop(); } @@ -122,7 +116,7 @@ describe("web socket communication", () => { const compiler = webpack(config); const devServerOptions = { port, - webSocketServer: websocketServer + webSocketServer: websocketServer, }; const server = new Server(devServerOptions, compiler); @@ -135,36 +129,34 @@ describe("web socket communication", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); await server.stop(); await server.start(); await page.waitForNavigation({ - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); } }); - }); + } it(`should work and do heartbeat using ("ws" web socket server)`, async () => { WebsocketServer.heartbeatInterval = 100; @@ -172,7 +164,7 @@ describe("web socket communication", () => { const compiler = webpack(config); const devServerOptions = { port, - webSocketServer: "ws" + webSocketServer: "ws", }; const server = new Server(devServerOptions, compiler); @@ -184,8 +176,8 @@ describe("web socket communication", () => { 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}` - } + origin: `http://127.0.0.1:${devServerOptions.port}`, + }, }); let opened = false; @@ -195,7 +187,7 @@ describe("web socket communication", () => { opened = true; }); - ws.on("error", error => { + ws.on("error", (error) => { reject(error); }); @@ -205,7 +197,7 @@ describe("web socket communication", () => { } }); - ws.on("message", data => { + ws.on("message", (data) => { const message = JSON.parse(data); if (message.type === "ok") { diff --git a/tests/e2e/web-socket-server-url.test.js b/tests/e2e/web-socket-server-url.test.js index c537b38..f85cd53 100644 --- a/tests/e2e/web-socket-server-url.test.js +++ b/tests/e2e/web-socket-server-url.test.js @@ -1,5 +1,3 @@ -"use strict"; - const express = require("express"); const webpack = require("@rspack/core"); const { createProxyMiddleware } = require("http-proxy-middleware"); @@ -26,7 +24,7 @@ describe("web socket server URL", () => { webSocketServer, port: devServerPort, host: devServerHost, - allowedHosts: "all" + allowedHosts: "all", }; const server = new Server(devServerOptions, compiler); @@ -40,14 +38,14 @@ describe("web socket server URL", () => { target: `http://${devServerHost}:${devServerPort}`, ws: true, changeOrigin: true, - logLevel: "warn" - }) + logLevel: "warn", + }), ); return app.listen(proxyPort, proxyHost, callback); } - const proxy = await new Promise(resolve => { + const proxy = await new Promise((resolve) => { const proxyCreated = startProxy(() => { resolve(proxyCreated); }); @@ -60,10 +58,10 @@ describe("web socket server URL", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); @@ -72,19 +70,19 @@ describe("web socket server URL", () => { if (webSocketServer === "ws") { const session = await page.target().createCDPSession(); - session.on("Network.webSocketCreated", test => { + session.on("Network.webSocketCreated", (test) => { webSocketRequests.push(test); }); await session.send("Target.setAutoAttach", { autoAttach: true, flatten: true, - waitForDebuggerOnStart: true + waitForDebuggerOnStart: true, }); sessionSubscribe(session); } else { - page.on("request", request => { + page.on("request", (request) => { if (/\/ws\//.test(request.url())) { webSocketRequests.push({ url: request.url() }); } @@ -92,19 +90,17 @@ describe("web socket server URL", () => { } await page.goto(`http://${proxyHost}:${proxyPort}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const webSocketRequest = webSocketRequests[0]; expect(webSocketRequest.url).toContain( - `${websocketURLProtocol}://${devServerHost}:${devServerPort}/ws` - ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + `${websocketURLProtocol}://${devServerHost}:${devServerPort}/ws`, ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { proxy.close(); await browser.close(); @@ -123,7 +119,7 @@ describe("web socket server URL", () => { webSocketServer, port: devServerPort, host: devServerHost, - allowedHosts: "all" + allowedHosts: "all", }; const server = new Server(devServerOptions, compiler); @@ -137,14 +133,14 @@ describe("web socket server URL", () => { target: `http://${devServerHost}:${devServerPort}`, ws: true, changeOrigin: true, - logLevel: "warn" - }) + logLevel: "warn", + }), ); return app.listen(proxyPort, proxyHost, callback); } - const proxy = await new Promise(resolve => { + const proxy = await new Promise((resolve) => { const proxyCreated = startProxy(() => { resolve(proxyCreated); }); @@ -157,10 +153,10 @@ describe("web socket server URL", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); @@ -169,19 +165,19 @@ describe("web socket server URL", () => { if (webSocketServer === "ws") { const session = await page.target().createCDPSession(); - session.on("Network.webSocketCreated", test => { + session.on("Network.webSocketCreated", (test) => { webSocketRequests.push(test); }); await session.send("Target.setAutoAttach", { autoAttach: true, flatten: true, - waitForDebuggerOnStart: true + waitForDebuggerOnStart: true, }); sessionSubscribe(session); } else { - page.on("request", request => { + page.on("request", (request) => { if (/\/ws\//.test(request.url())) { webSocketRequests.push({ url: request.url() }); } @@ -189,20 +185,18 @@ describe("web socket server URL", () => { } await page.goto(`http://${proxyHost}:${proxyPort}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const webSocketRequest = webSocketRequests[0]; expect(webSocketRequest.url).toContain( - `${websocketURLProtocol}://${devServerHost}:${devServerPort}/ws` - ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + `${websocketURLProtocol}://${devServerHost}:${devServerPort}/ws`, ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { proxy.close(); await browser.close(); @@ -220,13 +214,13 @@ describe("web socket server URL", () => { const devServerOptions = { client: { webSocketURL: { - hostname: devServerHost - } + hostname: devServerHost, + }, }, webSocketServer, port: devServerPort, host: devServerHost, - allowedHosts: "all" + allowedHosts: "all", }; const server = new Server(devServerOptions, compiler); @@ -240,14 +234,14 @@ describe("web socket server URL", () => { target: `http://${devServerHost}:${devServerPort}`, ws: true, changeOrigin: true, - logLevel: "warn" - }) + logLevel: "warn", + }), ); return app.listen(proxyPort, proxyHost, callback); } - const proxy = await new Promise(resolve => { + const proxy = await new Promise((resolve) => { const proxyCreated = startProxy(() => { resolve(proxyCreated); }); @@ -260,10 +254,10 @@ describe("web socket server URL", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); @@ -272,39 +266,37 @@ describe("web socket server URL", () => { if (webSocketServer === "ws") { const session = await page.target().createCDPSession(); - session.on("Network.webSocketCreated", test => { + session.on("Network.webSocketCreated", (test) => { webSocketRequests.push(test); }); await session.send("Target.setAutoAttach", { autoAttach: true, flatten: true, - waitForDebuggerOnStart: true + waitForDebuggerOnStart: true, }); sessionSubscribe(session); } else { - page.on("request", request => { + page.on("request", (request) => { if (/\/ws\//.test(request.url())) { webSocketRequests.push({ url: request.url() }); } }); } await page.goto(`http://${proxyHost}:${proxyPort}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const webSocketRequest = webSocketRequests[0]; expect(webSocketRequest.url).toContain( - `${websocketURLProtocol}://${devServerHost}:${devServerPort}/ws` - ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + `${websocketURLProtocol}://${devServerHost}:${devServerPort}/ws`, ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { proxy.close(); @@ -324,7 +316,7 @@ describe("web socket server URL", () => { webSocketServer, port: "auto", host: "local-ip", - allowedHosts: "all" + allowedHosts: "all", }; const server = new Server(devServerOptions, compiler); @@ -342,14 +334,14 @@ describe("web socket server URL", () => { target: `http://${resolvedHost}:${resolvedPort}`, ws: true, changeOrigin: true, - logLevel: "warn" - }) + logLevel: "warn", + }), ); return app.listen(proxyPort, proxyHost, callback); } - const proxy = await new Promise(resolve => { + const proxy = await new Promise((resolve) => { const proxyCreated = startProxy(() => { resolve(proxyCreated); }); @@ -362,10 +354,10 @@ describe("web socket server URL", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); @@ -374,19 +366,19 @@ describe("web socket server URL", () => { if (webSocketServer === "ws") { const session = await page.target().createCDPSession(); - session.on("Network.webSocketCreated", test => { + session.on("Network.webSocketCreated", (test) => { webSocketRequests.push(test); }); await session.send("Target.setAutoAttach", { autoAttach: true, flatten: true, - waitForDebuggerOnStart: true + waitForDebuggerOnStart: true, }); sessionSubscribe(session); } else { - page.on("request", request => { + page.on("request", (request) => { if (/\/ws\//.test(request.url())) { webSocketRequests.push({ url: request.url() }); } @@ -394,27 +386,25 @@ describe("web socket server URL", () => { } await page.goto(`http://${proxyHost}:${proxyPort}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const webSocketRequest = webSocketRequests[0]; expect(webSocketRequest.url).toContain( - `${websocketURLProtocol}://${resolvedHost}:${resolvedPort}/ws` - ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + `${websocketURLProtocol}://${resolvedHost}:${resolvedPort}/ws`, ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { proxy.close(); await browser.close(); await server.stop(); - delete process.env.WEBPACK_DEV_SERVER_BASE_PORT; + process.env.WEBPACK_DEV_SERVER_BASE_PORT = undefined; } }); @@ -423,13 +413,13 @@ describe("web socket server URL", () => { const devServerOptions = { client: { webSocketURL: { - protocol: "ws:" - } + protocol: "ws:", + }, }, webSocketServer, port: port1, host: "0.0.0.0", - allowedHosts: "all" + allowedHosts: "all", }; const server = new Server(devServerOptions, compiler); @@ -442,10 +432,10 @@ describe("web socket server URL", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); @@ -454,19 +444,19 @@ describe("web socket server URL", () => { if (webSocketServer === "ws") { const session = await page.target().createCDPSession(); - session.on("Network.webSocketCreated", test => { + session.on("Network.webSocketCreated", (test) => { webSocketRequests.push(test); }); await session.send("Target.setAutoAttach", { autoAttach: true, flatten: true, - waitForDebuggerOnStart: true + waitForDebuggerOnStart: true, }); sessionSubscribe(session); } else { - page.on("request", request => { + page.on("request", (request) => { if (/\/ws\//.test(request.url())) { webSocketRequests.push({ url: request.url() }); } @@ -474,20 +464,18 @@ describe("web socket server URL", () => { } await page.goto(`http://localhost:${port1}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const webSocketRequest = webSocketRequests[0]; expect(webSocketRequest.url).toContain( - `${websocketURLProtocol}://localhost:${port1}/ws` - ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + `${websocketURLProtocol}://localhost:${port1}/ws`, ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -499,13 +487,13 @@ describe("web socket server URL", () => { const devServerOptions = { client: { webSocketURL: { - protocol: "auto:" - } + protocol: "auto:", + }, }, webSocketServer, port: port1, host: "0.0.0.0", - allowedHosts: "all" + allowedHosts: "all", }; const server = new Server(devServerOptions, compiler); @@ -518,10 +506,10 @@ describe("web socket server URL", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); @@ -530,19 +518,19 @@ describe("web socket server URL", () => { if (webSocketServer === "ws") { const session = await page.target().createCDPSession(); - session.on("Network.webSocketCreated", test => { + session.on("Network.webSocketCreated", (test) => { webSocketRequests.push(test); }); await session.send("Target.setAutoAttach", { autoAttach: true, flatten: true, - waitForDebuggerOnStart: true + waitForDebuggerOnStart: true, }); sessionSubscribe(session); } else { - page.on("request", request => { + page.on("request", (request) => { if (/\/ws\//.test(request.url())) { webSocketRequests.push({ url: request.url() }); } @@ -550,20 +538,18 @@ describe("web socket server URL", () => { } await page.goto(`http://localhost:${port1}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const webSocketRequest = webSocketRequests[0]; expect(webSocketRequest.url).toContain( - `${websocketURLProtocol}://localhost:${port1}/ws` - ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + `${websocketURLProtocol}://localhost:${port1}/ws`, ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -575,13 +561,13 @@ describe("web socket server URL", () => { const devServerOptions = { client: { webSocketURL: { - protocol: "http:" - } + protocol: "http:", + }, }, webSocketServer, port: port1, host: "0.0.0.0", - allowedHosts: "all" + allowedHosts: "all", }; const server = new Server(devServerOptions, compiler); @@ -594,10 +580,10 @@ describe("web socket server URL", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); @@ -606,19 +592,19 @@ describe("web socket server URL", () => { if (webSocketServer === "ws") { const session = await page.target().createCDPSession(); - session.on("Network.webSocketCreated", test => { + session.on("Network.webSocketCreated", (test) => { webSocketRequests.push(test); }); await session.send("Target.setAutoAttach", { autoAttach: true, flatten: true, - waitForDebuggerOnStart: true + waitForDebuggerOnStart: true, }); sessionSubscribe(session); } else { - page.on("request", request => { + page.on("request", (request) => { if (/\/ws\//.test(request.url())) { webSocketRequests.push({ url: request.url() }); } @@ -626,20 +612,18 @@ describe("web socket server URL", () => { } await page.goto(`http://localhost:${port1}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const webSocketRequest = webSocketRequests[0]; expect(webSocketRequest.url).toContain( - `${websocketURLProtocol}://localhost:${port1}/ws` - ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + `${websocketURLProtocol}://localhost:${port1}/ws`, ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -651,13 +635,13 @@ describe("web socket server URL", () => { const devServerOptions = { client: { webSocketURL: { - hostname: "127.0.0.1" - } + hostname: "127.0.0.1", + }, }, webSocketServer, port: port1, host: "0.0.0.0", - allowedHosts: "all" + allowedHosts: "all", }; const server = new Server(devServerOptions, compiler); @@ -670,10 +654,10 @@ describe("web socket server URL", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); @@ -682,19 +666,19 @@ describe("web socket server URL", () => { if (webSocketServer === "ws") { const session = await page.target().createCDPSession(); - session.on("Network.webSocketCreated", test => { + session.on("Network.webSocketCreated", (test) => { webSocketRequests.push(test); }); await session.send("Target.setAutoAttach", { autoAttach: true, flatten: true, - waitForDebuggerOnStart: true + waitForDebuggerOnStart: true, }); sessionSubscribe(session); } else { - page.on("request", request => { + page.on("request", (request) => { if (/\/ws\//.test(request.url())) { webSocketRequests.push({ url: request.url() }); } @@ -702,20 +686,18 @@ describe("web socket server URL", () => { } await page.goto(`http://127.0.0.1:${port1}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const webSocketRequest = webSocketRequests[0]; expect(webSocketRequest.url).toContain( - `${websocketURLProtocol}://127.0.0.1:${port1}/ws` - ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + `${websocketURLProtocol}://127.0.0.1:${port1}/ws`, ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -727,13 +709,13 @@ describe("web socket server URL", () => { const devServerOptions = { client: { webSocketURL: { - hostname: "0.0.0.0" - } + hostname: "0.0.0.0", + }, }, webSocketServer, port: port1, host: "0.0.0.0", - allowedHosts: "all" + allowedHosts: "all", }; const server = new Server(devServerOptions, compiler); @@ -746,10 +728,10 @@ describe("web socket server URL", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); @@ -758,39 +740,37 @@ describe("web socket server URL", () => { if (webSocketServer === "ws") { const session = await page.target().createCDPSession(); - session.on("Network.webSocketCreated", test => { + session.on("Network.webSocketCreated", (test) => { webSocketRequests.push(test); }); await session.send("Target.setAutoAttach", { autoAttach: true, flatten: true, - waitForDebuggerOnStart: true + waitForDebuggerOnStart: true, }); sessionSubscribe(session); } else { - page.on("request", request => { + page.on("request", (request) => { if (/\/ws\//.test(request.url())) { webSocketRequests.push({ url: request.url() }); } }); } await page.goto(`http://127.0.0.1:${port1}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const webSocketRequest = webSocketRequests[0]; expect(webSocketRequest.url).toContain( - `${websocketURLProtocol}://127.0.0.1:${port1}/ws` - ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + `${websocketURLProtocol}://127.0.0.1:${port1}/ws`, ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -802,13 +782,13 @@ describe("web socket server URL", () => { const devServerOptions = { client: { webSocketURL: { - port: port1 - } + port: port1, + }, }, webSocketServer, port: port1, host: "0.0.0.0", - allowedHosts: "all" + allowedHosts: "all", }; const server = new Server(devServerOptions, compiler); @@ -821,10 +801,10 @@ describe("web socket server URL", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); @@ -833,19 +813,19 @@ describe("web socket server URL", () => { if (webSocketServer === "ws") { const session = await page.target().createCDPSession(); - session.on("Network.webSocketCreated", test => { + session.on("Network.webSocketCreated", (test) => { webSocketRequests.push(test); }); await session.send("Target.setAutoAttach", { autoAttach: true, flatten: true, - waitForDebuggerOnStart: true + waitForDebuggerOnStart: true, }); sessionSubscribe(session); } else { - page.on("request", request => { + page.on("request", (request) => { if (/\/ws\//.test(request.url())) { webSocketRequests.push({ url: request.url() }); } @@ -853,20 +833,18 @@ describe("web socket server URL", () => { } await page.goto(`http://127.0.0.1:${port1}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const webSocketRequest = webSocketRequests[0]; expect(webSocketRequest.url).toContain( - `${websocketURLProtocol}://127.0.0.1:${port1}/ws` - ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + `${websocketURLProtocol}://127.0.0.1:${port1}/ws`, ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -878,13 +856,13 @@ describe("web socket server URL", () => { const devServerOptions = { client: { webSocketURL: { - port: `${port1}` - } + port: `${port1}`, + }, }, webSocketServer, port: port1, host: "0.0.0.0", - allowedHosts: "all" + allowedHosts: "all", }; const server = new Server(devServerOptions, compiler); @@ -897,10 +875,10 @@ describe("web socket server URL", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); @@ -909,19 +887,19 @@ describe("web socket server URL", () => { if (webSocketServer === "ws") { const session = await page.target().createCDPSession(); - session.on("Network.webSocketCreated", test => { + session.on("Network.webSocketCreated", (test) => { webSocketRequests.push(test); }); await session.send("Target.setAutoAttach", { autoAttach: true, flatten: true, - waitForDebuggerOnStart: true + waitForDebuggerOnStart: true, }); sessionSubscribe(session); } else { - page.on("request", request => { + page.on("request", (request) => { if (/\/ws\//.test(request.url())) { webSocketRequests.push({ url: request.url() }); } @@ -929,20 +907,18 @@ describe("web socket server URL", () => { } await page.goto(`http://127.0.0.1:${port1}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const webSocketRequest = webSocketRequests[0]; expect(webSocketRequest.url).toContain( - `${websocketURLProtocol}://127.0.0.1:${port1}/ws` - ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + `${websocketURLProtocol}://127.0.0.1:${port1}/ws`, ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -957,17 +933,17 @@ describe("web socket server URL", () => { options: { host: "0.0.0.0", // "sockjs" doesn't support external server - port: webSocketServer === "sockjs" ? `${port1}` : `${port2}` - } + port: webSocketServer === "sockjs" ? `${port1}` : `${port2}`, + }, }, port: port1, host: "0.0.0.0", client: { webSocketURL: { - port: webSocketServer === "sockjs" ? `${port1}` : `${port2}` - } + port: webSocketServer === "sockjs" ? `${port1}` : `${port2}`, + }, }, - allowedHosts: "all" + allowedHosts: "all", }; const server = new Server(devServerOptions, compiler); @@ -980,10 +956,10 @@ describe("web socket server URL", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); @@ -992,19 +968,19 @@ describe("web socket server URL", () => { if (webSocketServer === "ws") { const session = await page.target().createCDPSession(); - session.on("Network.webSocketCreated", test => { + session.on("Network.webSocketCreated", (test) => { webSocketRequests.push(test); }); await session.send("Target.setAutoAttach", { autoAttach: true, flatten: true, - waitForDebuggerOnStart: true + waitForDebuggerOnStart: true, }); sessionSubscribe(session); } else { - page.on("request", request => { + page.on("request", (request) => { if (/\/ws\//.test(request.url())) { webSocketRequests.push({ url: request.url() }); } @@ -1012,7 +988,7 @@ describe("web socket server URL", () => { } await page.goto(`http://127.0.0.1:${port1}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const webSocketRequest = webSocketRequests[0]; @@ -1020,14 +996,12 @@ describe("web socket server URL", () => { expect(webSocketRequest.url).toContain( webSocketServer === "sockjs" ? `${websocketURLProtocol}://127.0.0.1:${port1}/ws` - : `${websocketURLProtocol}://127.0.0.1:${port2}/ws` - ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + : `${websocketURLProtocol}://127.0.0.1:${port2}/ws`, ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -1039,13 +1013,13 @@ describe("web socket server URL", () => { const devServerOptions = { client: { webSocketURL: { - port: 0 - } + port: 0, + }, }, webSocketServer, port: port1, host: "0.0.0.0", - allowedHosts: "all" + allowedHosts: "all", }; const server = new Server(devServerOptions, compiler); @@ -1058,10 +1032,10 @@ describe("web socket server URL", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); @@ -1070,39 +1044,37 @@ describe("web socket server URL", () => { if (webSocketServer === "ws") { const session = await page.target().createCDPSession(); - session.on("Network.webSocketCreated", test => { + session.on("Network.webSocketCreated", (test) => { webSocketRequests.push(test); }); await session.send("Target.setAutoAttach", { autoAttach: true, flatten: true, - waitForDebuggerOnStart: true + waitForDebuggerOnStart: true, }); sessionSubscribe(session); } else { - page.on("request", request => { + page.on("request", (request) => { if (/\/ws\//.test(request.url())) { webSocketRequests.push({ url: request.url() }); } }); } await page.goto(`http://127.0.0.1:${port1}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const webSocketRequest = webSocketRequests[0]; expect(webSocketRequest.url).toContain( - `${websocketURLProtocol}://127.0.0.1:${port1}/ws` - ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + `${websocketURLProtocol}://127.0.0.1:${port1}/ws`, ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -1114,13 +1086,13 @@ describe("web socket server URL", () => { const devServerOptions = { client: { webSocketURL: { - pathname: "/ws" - } + pathname: "/ws", + }, }, webSocketServer, port: port1, host: "0.0.0.0", - allowedHosts: "all" + allowedHosts: "all", }; const server = new Server(devServerOptions, compiler); @@ -1133,10 +1105,10 @@ describe("web socket server URL", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); @@ -1145,19 +1117,19 @@ describe("web socket server URL", () => { if (webSocketServer === "ws") { const session = await page.target().createCDPSession(); - session.on("Network.webSocketCreated", test => { + session.on("Network.webSocketCreated", (test) => { webSocketRequests.push(test); }); await session.send("Target.setAutoAttach", { autoAttach: true, flatten: true, - waitForDebuggerOnStart: true + waitForDebuggerOnStart: true, }); sessionSubscribe(session); } else { - page.on("request", request => { + page.on("request", (request) => { if (/\/ws\//.test(request.url())) { webSocketRequests.push({ url: request.url() }); } @@ -1165,20 +1137,18 @@ describe("web socket server URL", () => { } await page.goto(`http://127.0.0.1:${port1}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const webSocketRequest = webSocketRequests[0]; expect(webSocketRequest.url).toContain( - `${websocketURLProtocol}://127.0.0.1:${port1}/ws` - ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + `${websocketURLProtocol}://127.0.0.1:${port1}/ws`, ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -1191,7 +1161,7 @@ describe("web socket server URL", () => { webSocketServer, port: port1, host: "0.0.0.0", - allowedHosts: "all" + allowedHosts: "all", }; const server = new Server(devServerOptions, compiler); @@ -1204,10 +1174,10 @@ describe("web socket server URL", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); @@ -1216,19 +1186,19 @@ describe("web socket server URL", () => { if (webSocketServer === "ws") { const session = await page.target().createCDPSession(); - session.on("Network.webSocketCreated", test => { + session.on("Network.webSocketCreated", (test) => { webSocketRequests.push(test); }); await session.send("Target.setAutoAttach", { autoAttach: true, flatten: true, - waitForDebuggerOnStart: true + waitForDebuggerOnStart: true, }); sessionSubscribe(session); } else { - page.on("request", request => { + page.on("request", (request) => { if (/\/ws\//.test(request.url())) { webSocketRequests.push({ url: request.url() }); } @@ -1236,20 +1206,18 @@ describe("web socket server URL", () => { } await page.goto(`http://127.0.0.1:${port1}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const webSocketRequest = webSocketRequests[0]; expect(webSocketRequest.url).toContain( - `${websocketURLProtocol}://127.0.0.1:${port1}/ws` - ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + `${websocketURLProtocol}://127.0.0.1:${port1}/ws`, ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -1261,13 +1229,13 @@ describe("web socket server URL", () => { const devServerOptions = { client: { webSocketURL: { - username: "zenitsu" - } + username: "zenitsu", + }, }, webSocketServer, port: port1, host: "0.0.0.0", - allowedHosts: "all" + allowedHosts: "all", }; const server = new Server(devServerOptions, compiler); @@ -1280,10 +1248,10 @@ describe("web socket server URL", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); @@ -1292,39 +1260,37 @@ describe("web socket server URL", () => { if (webSocketServer === "ws") { const session = await page.target().createCDPSession(); - session.on("Network.webSocketCreated", test => { + session.on("Network.webSocketCreated", (test) => { webSocketRequests.push(test); }); await session.send("Target.setAutoAttach", { autoAttach: true, flatten: true, - waitForDebuggerOnStart: true + waitForDebuggerOnStart: true, }); sessionSubscribe(session); } else { - page.on("request", request => { + page.on("request", (request) => { if (/\/ws\//.test(request.url())) { webSocketRequests.push({ url: request.url() }); } }); } await page.goto(`http://127.0.0.1:${port1}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const webSocketRequest = webSocketRequests[0]; expect(webSocketRequest.url).toContain( - `${websocketURLProtocol}://zenitsu@127.0.0.1:${port1}/ws` - ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + `${websocketURLProtocol}://zenitsu@127.0.0.1:${port1}/ws`, ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -1339,14 +1305,14 @@ describe("web socket server URL", () => { webSocketServer === "ws" ? { username: "foo", - password: "chuntaro" + password: "chuntaro", } - : {} + : {}, }, webSocketServer, port: port1, host: "0.0.0.0", - allowedHosts: "all" + allowedHosts: "all", }; const server = new Server(devServerOptions, compiler); @@ -1359,10 +1325,10 @@ describe("web socket server URL", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); @@ -1371,26 +1337,26 @@ describe("web socket server URL", () => { if (webSocketServer === "ws") { const session = await page.target().createCDPSession(); - session.on("Network.webSocketCreated", test => { + session.on("Network.webSocketCreated", (test) => { webSocketRequests.push(test); }); await session.send("Target.setAutoAttach", { autoAttach: true, flatten: true, - waitForDebuggerOnStart: true + waitForDebuggerOnStart: true, }); sessionSubscribe(session); } else { - page.on("request", request => { + page.on("request", (request) => { if (/\/ws\//.test(request.url())) { webSocketRequests.push({ url: request.url() }); } }); } await page.goto(`http://127.0.0.1:${port1}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const webSocketRequest = webSocketRequests[0]; @@ -1399,14 +1365,12 @@ describe("web socket server URL", () => { // "sockjs" has bug with parsing URL webSocketServer === "ws" ? `${websocketURLProtocol}://foo:chuntaro@127.0.0.1:${port1}/ws` - : `${websocketURLProtocol}://127.0.0.1:${port1}/ws` - ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + : `${websocketURLProtocol}://127.0.0.1:${port1}/ws`, ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -1419,13 +1383,13 @@ describe("web socket server URL", () => { client: { webSocketURL: { username: "zenitsu", - password: "chuntaro" - } + password: "chuntaro", + }, }, webSocketServer, port: port1, host: "0.0.0.0", - allowedHosts: "all" + allowedHosts: "all", }; const server = new Server(devServerOptions, compiler); @@ -1438,10 +1402,10 @@ describe("web socket server URL", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); @@ -1450,19 +1414,19 @@ describe("web socket server URL", () => { if (webSocketServer === "ws") { const session = await page.target().createCDPSession(); - session.on("Network.webSocketCreated", test => { + session.on("Network.webSocketCreated", (test) => { webSocketRequests.push(test); }); await session.send("Target.setAutoAttach", { autoAttach: true, flatten: true, - waitForDebuggerOnStart: true + waitForDebuggerOnStart: true, }); sessionSubscribe(session); } else { - page.on("request", request => { + page.on("request", (request) => { if (/\/ws\//.test(request.url())) { webSocketRequests.push({ url: request.url() }); } @@ -1470,20 +1434,18 @@ describe("web socket server URL", () => { } await page.goto(`http://127.0.0.1:${port1}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const webSocketRequest = webSocketRequests[0]; expect(webSocketRequest.url).toContain( - `${websocketURLProtocol}://zenitsu:chuntaro@127.0.0.1:${port1}/ws` - ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + `${websocketURLProtocol}://zenitsu:chuntaro@127.0.0.1:${port1}/ws`, ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -1496,12 +1458,12 @@ describe("web socket server URL", () => { webSocketServer: { type: webSocketServer, options: { - path: "/custom-ws/foo/bar" - } + path: "/custom-ws/foo/bar", + }, }, port: port1, host: "0.0.0.0", - allowedHosts: "all" + allowedHosts: "all", }; const server = new Server(devServerOptions, compiler); @@ -1514,10 +1476,10 @@ describe("web socket server URL", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); @@ -1526,19 +1488,19 @@ describe("web socket server URL", () => { if (webSocketServer === "ws") { const session = await page.target().createCDPSession(); - session.on("Network.webSocketCreated", test => { + session.on("Network.webSocketCreated", (test) => { webSocketRequests.push(test); }); await session.send("Target.setAutoAttach", { autoAttach: true, flatten: true, - waitForDebuggerOnStart: true + waitForDebuggerOnStart: true, }); sessionSubscribe(session); } else { - page.on("request", request => { + page.on("request", (request) => { if (/\/custom-ws\/foo\/bar/.test(request.url())) { webSocketRequests.push({ url: request.url() }); } @@ -1546,20 +1508,18 @@ describe("web socket server URL", () => { } await page.goto(`http://127.0.0.1:${port1}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const webSocketRequest = webSocketRequests[0]; expect(webSocketRequest.url).toContain( - `${websocketURLProtocol}://127.0.0.1:${port1}/custom-ws/foo/bar` - ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + `${websocketURLProtocol}://127.0.0.1:${port1}/custom-ws/foo/bar`, ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -1573,12 +1533,12 @@ describe("web socket server URL", () => { webSocketServer: { type: webSocketServer, options: { - path: webSocketServer === "ws" ? "" : "/custom-ws" - } + path: webSocketServer === "ws" ? "" : "/custom-ws", + }, }, port: port1, host: "0.0.0.0", - allowedHosts: "all" + allowedHosts: "all", }; const server = new Server(devServerOptions, compiler); @@ -1591,10 +1551,10 @@ describe("web socket server URL", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); @@ -1603,19 +1563,19 @@ describe("web socket server URL", () => { if (webSocketServer === "ws") { const session = await page.target().createCDPSession(); - session.on("Network.webSocketCreated", test => { + session.on("Network.webSocketCreated", (test) => { webSocketRequests.push(test); }); await session.send("Target.setAutoAttach", { autoAttach: true, flatten: true, - waitForDebuggerOnStart: true + waitForDebuggerOnStart: true, }); sessionSubscribe(session); } else { - page.on("request", request => { + page.on("request", (request) => { if (/\/custom-ws\//.test(request.url())) { webSocketRequests.push({ url: request.url() }); } @@ -1623,7 +1583,7 @@ describe("web socket server URL", () => { } await page.goto(`http://127.0.0.1:${port1}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const webSocketRequest = webSocketRequests[0]; @@ -1631,14 +1591,12 @@ describe("web socket server URL", () => { expect(webSocketRequest.url).toContain( webSocketServer === "ws" ? `${websocketURLProtocol}://127.0.0.1:${port1}` - : `${websocketURLProtocol}://127.0.0.1:${port1}/custom-ws` - ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + : `${websocketURLProtocol}://127.0.0.1:${port1}/custom-ws`, ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -1650,18 +1608,18 @@ describe("web socket server URL", () => { const devServerOptions = { client: { webSocketURL: { - pathname: "/custom-ws/foo/bar" - } + pathname: "/custom-ws/foo/bar", + }, }, webSocketServer: { type: webSocketServer, options: { - path: "/custom-ws/foo/bar" - } + path: "/custom-ws/foo/bar", + }, }, port: port1, host: "0.0.0.0", - allowedHosts: "all" + allowedHosts: "all", }; const server = new Server(devServerOptions, compiler); @@ -1674,10 +1632,10 @@ describe("web socket server URL", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); @@ -1686,19 +1644,19 @@ describe("web socket server URL", () => { if (webSocketServer === "ws") { const session = await page.target().createCDPSession(); - session.on("Network.webSocketCreated", test => { + session.on("Network.webSocketCreated", (test) => { webSocketRequests.push(test); }); await session.send("Target.setAutoAttach", { autoAttach: true, flatten: true, - waitForDebuggerOnStart: true + waitForDebuggerOnStart: true, }); sessionSubscribe(session); } else { - page.on("request", request => { + page.on("request", (request) => { if (/\/custom-ws\/foo\/bar/.test(request.url())) { webSocketRequests.push({ url: request.url() }); } @@ -1706,20 +1664,18 @@ describe("web socket server URL", () => { } await page.goto(`http://127.0.0.1:${port1}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const webSocketRequest = webSocketRequests[0]; expect(webSocketRequest.url).toContain( - `${websocketURLProtocol}://127.0.0.1:${port1}/custom-ws/foo/bar` - ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + `${websocketURLProtocol}://127.0.0.1:${port1}/custom-ws/foo/bar`, ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -1731,18 +1687,18 @@ describe("web socket server URL", () => { const devServerOptions = { client: { webSocketURL: { - pathname: "/custom-ws" - } + pathname: "/custom-ws", + }, }, webSocketServer: { type: webSocketServer, options: { - path: "/custom-ws" - } + path: "/custom-ws", + }, }, port: port1, host: "0.0.0.0", - allowedHosts: "all" + allowedHosts: "all", }; const server = new Server(devServerOptions, compiler); @@ -1755,10 +1711,10 @@ describe("web socket server URL", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); @@ -1767,19 +1723,19 @@ describe("web socket server URL", () => { if (webSocketServer === "ws") { const session = await page.target().createCDPSession(); - session.on("Network.webSocketCreated", test => { + session.on("Network.webSocketCreated", (test) => { webSocketRequests.push(test); }); await session.send("Target.setAutoAttach", { autoAttach: true, flatten: true, - waitForDebuggerOnStart: true + waitForDebuggerOnStart: true, }); sessionSubscribe(session); } else { - page.on("request", request => { + page.on("request", (request) => { if (/\/custom-ws\//.test(request.url())) { webSocketRequests.push({ url: request.url() }); } @@ -1787,20 +1743,18 @@ describe("web socket server URL", () => { } await page.goto(`http://127.0.0.1:${port1}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const webSocketRequest = webSocketRequests[0]; expect(webSocketRequest.url).toContain( - `${websocketURLProtocol}://127.0.0.1:${port1}/custom-ws` - ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + `${websocketURLProtocol}://127.0.0.1:${port1}/custom-ws`, ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -1813,18 +1767,18 @@ describe("web socket server URL", () => { const devServerOptions = { client: { webSocketURL: { - pathname: webSocketServer === "ws" ? "/custom-ws/" : "/custom-ws" - } + pathname: webSocketServer === "ws" ? "/custom-ws/" : "/custom-ws", + }, }, webSocketServer: { type: webSocketServer, options: { - path: webSocketServer === "ws" ? "/custom-ws/" : "/custom-ws" - } + path: webSocketServer === "ws" ? "/custom-ws/" : "/custom-ws", + }, }, port: port1, host: "0.0.0.0", - allowedHosts: "all" + allowedHosts: "all", }; const server = new Server(devServerOptions, compiler); @@ -1837,10 +1791,10 @@ describe("web socket server URL", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); @@ -1849,39 +1803,37 @@ describe("web socket server URL", () => { if (webSocketServer === "ws") { const session = await page.target().createCDPSession(); - session.on("Network.webSocketCreated", test => { + session.on("Network.webSocketCreated", (test) => { webSocketRequests.push(test); }); await session.send("Target.setAutoAttach", { autoAttach: true, flatten: true, - waitForDebuggerOnStart: true + waitForDebuggerOnStart: true, }); sessionSubscribe(session); } else { - page.on("request", request => { + page.on("request", (request) => { if (/\/custom-ws\//.test(request.url())) { webSocketRequests.push({ url: request.url() }); } }); } await page.goto(`http://127.0.0.1:${port1}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const webSocketRequest = webSocketRequests[0]; expect(webSocketRequest.url).toContain( - `${websocketURLProtocol}://127.0.0.1:${port1}/custom-ws/` - ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + `${websocketURLProtocol}://127.0.0.1:${port1}/custom-ws/`, ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -1894,18 +1846,18 @@ describe("web socket server URL", () => { const devServerOptions = { client: { webSocketURL: { - pathname: webSocketServer === "ws" ? "" : "/custom-ws" - } + pathname: webSocketServer === "ws" ? "" : "/custom-ws", + }, }, webSocketServer: { type: webSocketServer, options: { - path: webSocketServer === "ws" ? "" : "/custom-ws" - } + path: webSocketServer === "ws" ? "" : "/custom-ws", + }, }, port: port1, host: "0.0.0.0", - allowedHosts: "all" + allowedHosts: "all", }; const server = new Server(devServerOptions, compiler); @@ -1918,10 +1870,10 @@ describe("web socket server URL", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); @@ -1930,19 +1882,19 @@ describe("web socket server URL", () => { if (webSocketServer === "ws") { const session = await page.target().createCDPSession(); - session.on("Network.webSocketCreated", test => { + session.on("Network.webSocketCreated", (test) => { webSocketRequests.push(test); }); await session.send("Target.setAutoAttach", { autoAttach: true, flatten: true, - waitForDebuggerOnStart: true + waitForDebuggerOnStart: true, }); sessionSubscribe(session); } else { - page.on("request", request => { + page.on("request", (request) => { if (/\/custom-ws\//.test(request.url())) { webSocketRequests.push({ url: request.url() }); } @@ -1950,7 +1902,7 @@ describe("web socket server URL", () => { } await page.goto(`http://127.0.0.1:${port1}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const webSocketRequest = webSocketRequests[0]; @@ -1958,14 +1910,12 @@ describe("web socket server URL", () => { expect(webSocketRequest.url).toContain( webSocketServer === "ws" ? `${websocketURLProtocol}://127.0.0.1:${port1}` - : `${websocketURLProtocol}://127.0.0.1:${port1}/custom-ws` - ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + : `${websocketURLProtocol}://127.0.0.1:${port1}/custom-ws`, ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -1978,19 +1928,19 @@ describe("web socket server URL", () => { const devServerOptions = { client: { webSocketURL: { - pathname: "/custom-ws" - } + pathname: "/custom-ws", + }, }, webSocketServer: { type: webSocketServer, options: webSocketServer === "ws" ? { path: "/custom-ws" } - : { prefix: "/custom-ws" } + : { prefix: "/custom-ws" }, }, port: port1, host: "0.0.0.0", - allowedHosts: "all" + allowedHosts: "all", }; const server = new Server(devServerOptions, compiler); @@ -2003,10 +1953,10 @@ describe("web socket server URL", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); @@ -2015,19 +1965,19 @@ describe("web socket server URL", () => { if (webSocketServer === "ws") { const session = await page.target().createCDPSession(); - session.on("Network.webSocketCreated", test => { + session.on("Network.webSocketCreated", (test) => { webSocketRequests.push(test); }); await session.send("Target.setAutoAttach", { autoAttach: true, flatten: true, - waitForDebuggerOnStart: true + waitForDebuggerOnStart: true, }); sessionSubscribe(session); } else { - page.on("request", request => { + page.on("request", (request) => { if (/\/custom-ws/.test(request.url())) { webSocketRequests.push({ url: request.url() }); } @@ -2035,20 +1985,18 @@ describe("web socket server URL", () => { } await page.goto(`http://127.0.0.1:${port1}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const webSocketRequest = webSocketRequests[0]; expect(webSocketRequest.url).toContain( - `${websocketURLProtocol}://127.0.0.1:${port1}/custom-ws` - ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + `${websocketURLProtocol}://127.0.0.1:${port1}/custom-ws`, ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -2061,7 +2009,7 @@ describe("web socket server URL", () => { const devServerOptions = { webSocketServer, port: port1, - host: hostname + host: hostname, }; const server = new Server(devServerOptions, compiler); @@ -2074,10 +2022,10 @@ describe("web socket server URL", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); @@ -2086,39 +2034,37 @@ describe("web socket server URL", () => { if (webSocketServer === "ws") { const session = await page.target().createCDPSession(); - session.on("Network.webSocketCreated", test => { + session.on("Network.webSocketCreated", (test) => { webSocketRequests.push(test); }); await session.send("Target.setAutoAttach", { autoAttach: true, flatten: true, - waitForDebuggerOnStart: true + waitForDebuggerOnStart: true, }); sessionSubscribe(session); } else { - page.on("request", request => { + page.on("request", (request) => { if (/\/ws\//.test(request.url())) { webSocketRequests.push({ url: request.url() }); } }); } await page.goto(`http://${hostname}:${port1}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const webSocketRequest = webSocketRequests[0]; expect(webSocketRequest.url).toContain( - `${websocketURLProtocol}://${hostname}:${port1}/ws` - ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + `${websocketURLProtocol}://${hostname}:${port1}/ws`, ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -2131,7 +2077,7 @@ describe("web socket server URL", () => { const devServerOptions = { webSocketServer, port: port1, - host: "local-ip" + host: "local-ip", }; const server = new Server(devServerOptions, compiler); @@ -2144,10 +2090,10 @@ describe("web socket server URL", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); @@ -2156,19 +2102,19 @@ describe("web socket server URL", () => { if (webSocketServer === "ws") { const session = await page.target().createCDPSession(); - session.on("Network.webSocketCreated", test => { + session.on("Network.webSocketCreated", (test) => { webSocketRequests.push(test); }); await session.send("Target.setAutoAttach", { autoAttach: true, flatten: true, - waitForDebuggerOnStart: true + waitForDebuggerOnStart: true, }); sessionSubscribe(session); } else { - page.on("request", request => { + page.on("request", (request) => { if (/\/ws\//.test(request.url())) { webSocketRequests.push({ url: request.url() }); } @@ -2176,20 +2122,18 @@ describe("web socket server URL", () => { } await page.goto(`http://${hostname}:${port1}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const webSocketRequest = webSocketRequests[0]; expect(webSocketRequest.url).toContain( - `${websocketURLProtocol}://${hostname}:${port1}/ws` - ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + `${websocketURLProtocol}://${hostname}:${port1}/ws`, ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -2202,7 +2146,7 @@ describe("web socket server URL", () => { const devServerOptions = { webSocketServer, port: port1, - host: "local-ipv4" + host: "local-ipv4", }; const server = new Server(devServerOptions, compiler); @@ -2215,10 +2159,10 @@ describe("web socket server URL", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); @@ -2227,39 +2171,37 @@ describe("web socket server URL", () => { if (webSocketServer === "ws") { const session = await page.target().createCDPSession(); - session.on("Network.webSocketCreated", test => { + session.on("Network.webSocketCreated", (test) => { webSocketRequests.push(test); }); await session.send("Target.setAutoAttach", { autoAttach: true, flatten: true, - waitForDebuggerOnStart: true + waitForDebuggerOnStart: true, }); sessionSubscribe(session); } else { - page.on("request", request => { + page.on("request", (request) => { if (/\/ws\//.test(request.url())) { webSocketRequests.push({ url: request.url() }); } }); } await page.goto(`http://${hostname}:${port1}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const webSocketRequest = webSocketRequests[0]; expect(webSocketRequest.url).toContain( - `${websocketURLProtocol}://${hostname}:${port1}/ws` - ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + `${websocketURLProtocol}://${hostname}:${port1}/ws`, ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -2272,7 +2214,7 @@ describe("web socket server URL", () => { const devServerOptions = { webSocketServer, port: port1, - server: "https" + server: "https", }; const server = new Server(devServerOptions, compiler); @@ -2285,10 +2227,10 @@ describe("web socket server URL", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); @@ -2297,19 +2239,19 @@ describe("web socket server URL", () => { if (webSocketServer === "ws") { const session = await page.target().createCDPSession(); - session.on("Network.webSocketCreated", test => { + session.on("Network.webSocketCreated", (test) => { webSocketRequests.push(test); }); await session.send("Target.setAutoAttach", { autoAttach: true, flatten: true, - waitForDebuggerOnStart: true + waitForDebuggerOnStart: true, }); sessionSubscribe(session); } else { - page.on("request", request => { + page.on("request", (request) => { if (/\/ws\//.test(request.url())) { webSocketRequests.push({ url: request.url() }); } @@ -2317,27 +2259,25 @@ describe("web socket server URL", () => { } await page.goto(`https://${hostname}:${port1}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const webSocketRequest = webSocketRequests[0]; if (webSocketServer === "ws") { expect(webSocketRequest.url).toContain( - `wss://${hostname}:${port1}/ws` + `wss://${hostname}:${port1}/ws`, ); } else { expect(webSocketRequest.url).toContain( - `https://${hostname}:${port1}/ws` + `https://${hostname}:${port1}/ws`, ); } - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -2350,7 +2290,7 @@ describe("web socket server URL", () => { const devServerOptions = { webSocketServer, port: port1, - server: "spdy" + server: "spdy", }; const server = new Server(devServerOptions, compiler); @@ -2363,10 +2303,10 @@ describe("web socket server URL", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); @@ -2375,19 +2315,19 @@ describe("web socket server URL", () => { if (webSocketServer === "ws") { const session = await page.target().createCDPSession(); - session.on("Network.webSocketCreated", test => { + session.on("Network.webSocketCreated", (test) => { webSocketRequests.push(test); }); await session.send("Target.setAutoAttach", { autoAttach: true, flatten: true, - waitForDebuggerOnStart: true + waitForDebuggerOnStart: true, }); sessionSubscribe(session); } else { - page.on("request", request => { + page.on("request", (request) => { if (/\/ws\//.test(request.url())) { webSocketRequests.push({ url: request.url() }); } @@ -2395,27 +2335,25 @@ describe("web socket server URL", () => { } await page.goto(`https://${hostname}:${port1}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const webSocketRequest = webSocketRequests[0]; if (webSocketServer === "ws") { expect(webSocketRequest.url).toContain( - `wss://${hostname}:${port1}/ws` + `wss://${hostname}:${port1}/ws`, ); } else { expect(webSocketRequest.url).toContain( - `https://${hostname}:${port1}/ws` + `https://${hostname}:${port1}/ws`, ); } - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -2429,7 +2367,7 @@ describe("web socket server URL", () => { const devServerOptions = { webSocketServer, port: "auto", - host: "0.0.0.0" + host: "0.0.0.0", }; const server = new Server(devServerOptions, compiler); @@ -2444,10 +2382,10 @@ describe("web socket server URL", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); @@ -2456,19 +2394,19 @@ describe("web socket server URL", () => { if (webSocketServer === "ws") { const session = await page.target().createCDPSession(); - session.on("Network.webSocketCreated", test => { + session.on("Network.webSocketCreated", (test) => { webSocketRequests.push(test); }); await session.send("Target.setAutoAttach", { autoAttach: true, flatten: true, - waitForDebuggerOnStart: true + waitForDebuggerOnStart: true, }); sessionSubscribe(session); } else { - page.on("request", request => { + page.on("request", (request) => { if (/\/ws\//.test(request.url())) { webSocketRequests.push({ url: request.url() }); } @@ -2476,25 +2414,23 @@ describe("web socket server URL", () => { } await page.goto(`http://127.0.0.1:${resolvedFreePort}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const webSocketRequest = webSocketRequests[0]; expect(webSocketRequest.url).toContain( - `${websocketURLProtocol}://127.0.0.1:${resolvedFreePort}/ws` - ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + `${websocketURLProtocol}://127.0.0.1:${resolvedFreePort}/ws`, ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); - delete process.env.WEBPACK_DEV_SERVER_BASE_PORT; + process.env.WEBPACK_DEV_SERVER_BASE_PORT = undefined; } }); @@ -2506,13 +2442,13 @@ describe("web socket server URL", () => { protocol: "ws:", hostname: "127.0.0.1", port: port1, - pathname: "/ws" - } + pathname: "/ws", + }, }, webSocketServer, port: port1, host: "0.0.0.0", - allowedHosts: "all" + allowedHosts: "all", }; const server = new Server(devServerOptions, compiler); @@ -2525,10 +2461,10 @@ describe("web socket server URL", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); @@ -2537,19 +2473,19 @@ describe("web socket server URL", () => { if (webSocketServer === "ws") { const session = await page.target().createCDPSession(); - session.on("Network.webSocketCreated", test => { + session.on("Network.webSocketCreated", (test) => { webSocketRequests.push(test); }); await session.send("Target.setAutoAttach", { autoAttach: true, flatten: true, - waitForDebuggerOnStart: true + waitForDebuggerOnStart: true, }); sessionSubscribe(session); } else { - page.on("request", request => { + page.on("request", (request) => { if (/\/ws\//.test(request.url())) { webSocketRequests.push({ url: request.url() }); } @@ -2557,20 +2493,18 @@ describe("web socket server URL", () => { } await page.goto(`http://127.0.0.1:${port1}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const webSocketRequest = webSocketRequests[0]; expect(webSocketRequest.url).toContain( - `${websocketURLProtocol}://127.0.0.1:${port1}/ws` - ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + `${websocketURLProtocol}://127.0.0.1:${port1}/ws`, ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -2581,12 +2515,12 @@ describe("web socket server URL", () => { const compiler = webpack(config); const devServerOptions = { client: { - webSocketURL: `ws://127.0.0.1:${port1}/ws` + webSocketURL: `ws://127.0.0.1:${port1}/ws`, }, webSocketServer, port: port1, host: "0.0.0.0", - allowedHosts: "all" + allowedHosts: "all", }; const server = new Server(devServerOptions, compiler); @@ -2599,10 +2533,10 @@ describe("web socket server URL", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); @@ -2611,19 +2545,19 @@ describe("web socket server URL", () => { if (webSocketServer === "ws") { const session = await page.target().createCDPSession(); - session.on("Network.webSocketCreated", test => { + session.on("Network.webSocketCreated", (test) => { webSocketRequests.push(test); }); await session.send("Target.setAutoAttach", { autoAttach: true, flatten: true, - waitForDebuggerOnStart: true + waitForDebuggerOnStart: true, }); sessionSubscribe(session); } else { - page.on("request", request => { + page.on("request", (request) => { if (/\/ws\//.test(request.url())) { webSocketRequests.push({ url: request.url() }); } @@ -2631,20 +2565,18 @@ describe("web socket server URL", () => { } await page.goto(`http://127.0.0.1:${port1}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); const webSocketRequest = webSocketRequests[0]; expect(webSocketRequest.url).toContain( - `${websocketURLProtocol}://127.0.0.1:${port1}/ws` - ); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + `${websocketURLProtocol}://127.0.0.1:${port1}/ws`, ); + expect( + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -2655,12 +2587,12 @@ describe("web socket server URL", () => { const compiler = webpack(config); const devServerOptions = { client: { - webSocketURL: "unknown://unknown.unknown/unknown" + webSocketURL: "unknown://unknown.unknown/unknown", }, webSocketServer, port: port1, host: "0.0.0.0", - allowedHosts: "all" + allowedHosts: "all", }; const server = new Server(devServerOptions, compiler); @@ -2673,25 +2605,25 @@ describe("web socket server URL", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); await page.goto(`http://localhost:${port1}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" - ); expect( - pageErrors.map(pageError => pageError.message.split("\n")[0]) + consoleMessages.map((message) => message.text()), + ).toMatchSnapshot("console messages"); + expect( + pageErrors.map((pageError) => + pageError.message.split("\n")[0].replace("SyntaxError: ", ""), + ), ).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); @@ -2702,12 +2634,12 @@ describe("web socket server URL", () => { const compiler = webpack(config); const devServerOptions = { client: { - webSocketURL: "ws://unknown.unknown/unknown" + webSocketURL: "ws://unknown.unknown/unknown", }, webSocketServer, port: port1, host: "0.0.0.0", - allowedHosts: "all" + allowedHosts: "all", }; const server = new Server(devServerOptions, compiler); @@ -2722,7 +2654,7 @@ describe("web socket server URL", () => { let isDisconnected = false; page - .on("console", message => { + .on("console", (message) => { const text = message.text(); if (!isDisconnected) { @@ -2730,15 +2662,15 @@ describe("web socket server URL", () => { consoleMessages.push(text.replace(/:[\d]+/g, ":")); } }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); await page.goto(`http://localhost:${port1}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); - await new Promise(resolve => { + await new Promise((resolve) => { const interval = setInterval(() => { if ( consoleMessages.includes("[webpack-dev-server] Disconnected!") @@ -2753,10 +2685,8 @@ describe("web socket server URL", () => { // TODO: not stable on lynx linux ci // expect(consoleMessages).toMatchSnapshot("console messages"); expect( - pageErrors.map(pageError => pageError.message.split("\n")[0]) + pageErrors.map((pageError) => pageError.message.split("\n")[0]), ).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); diff --git a/tests/e2e/web-socket-server.test.js b/tests/e2e/web-socket-server.test.js index 44ba6ac..b1ee475 100644 --- a/tests/e2e/web-socket-server.test.js +++ b/tests/e2e/web-socket-server.test.js @@ -1,5 +1,3 @@ -"use strict"; - const webpack = require("@rspack/core"); const { RspackDevServer: Server } = require("@rspack/dev-server"); const config = require("../fixtures/client-config/webpack.config"); @@ -14,7 +12,7 @@ describe("web socket server", () => { const compiler = webpack(config); const devServerOptions = { webSocketServer: false, - port: devServerPort + port: devServerPort, }; const server = new Server(devServerOptions, compiler); @@ -27,39 +25,37 @@ describe("web socket server", () => { const consoleMessages = []; page - .on("console", message => { + .on("console", (message) => { consoleMessages.push(message); }) - .on("pageerror", error => { + .on("pageerror", (error) => { pageErrors.push(error); }); const webSocketRequests = []; const session = await page.target().createCDPSession(); - session.on("Network.webSocketCreated", test => { + session.on("Network.webSocketCreated", (test) => { webSocketRequests.push(test); }); await session.send("Target.setAutoAttach", { autoAttach: true, flatten: true, - waitForDebuggerOnStart: true + waitForDebuggerOnStart: true, }); sessionSubscribe(session); await page.goto(`http://127.0.0.1:${port}/`, { - waitUntil: "networkidle0" + waitUntil: "networkidle0", }); expect(webSocketRequests).toHaveLength(0); - expect(consoleMessages.map(message => message.text())).toMatchSnapshot( - "console messages" + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages", ); expect(pageErrors).toMatchSnapshot("page errors"); - } catch (error) { - throw error; } finally { await browser.close(); await server.stop(); diff --git a/tests/fixtures/custom-client/CustomClientEntry.js b/tests/fixtures/custom-client/CustomClientEntry.js new file mode 100644 index 0000000..daf1cff --- /dev/null +++ b/tests/fixtures/custom-client/CustomClientEntry.js @@ -0,0 +1 @@ +console.log("custom client entry"); diff --git a/tests/fixtures/custom-client/CustomClientHotEntry.js b/tests/fixtures/custom-client/CustomClientHotEntry.js new file mode 100644 index 0000000..4432633 --- /dev/null +++ b/tests/fixtures/custom-client/CustomClientHotEntry.js @@ -0,0 +1 @@ +console.log("custom client hot entry"); diff --git a/tests/fixtures/ssl/localhost-cert.pem b/tests/fixtures/ssl/localhost-cert.pem new file mode 100644 index 0000000..c845304 --- /dev/null +++ b/tests/fixtures/ssl/localhost-cert.pem @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDCTCCAfGgAwIBAgIUevWiuCfenWuq9KyC8aQ/tc1Io14wDQYJKoZIhvcNAQEL +BQAwFDESMBAGA1UEAwwJbG9jYWxob3N0MB4XDTI0MDQyNDE2MDYyMloXDTI0MDUy +NDE2MDYyMlowFDESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEA1v/lb9u9WkqkF7zjIKe2R+b4S0sQnWIfBFZ0ggtaOL0a +ntud/EuaGQgLtJgSwO2M2xIqKx+yoLhoM+273EJe0KmfJMxYNAkhwP9h6vrKnaQJ +mpAhoalfEGyCrnHHMKISAAn4Rlc8NXnULoFhHzNm8bdqvP33rCmsJ+tNYC5kwzyt +HvRNFyg9BOUfACiPW17opFH0rao3IfZrQ6yRbknef1pX1x2pbDAH14rCT/vXaTs6 +VGuqLE/wRsSt+7nMHy/PmXxMyb4G4/UflYtnKfmXpDRw+TDEGzvTZedtoOz+rrJC +e989R9qYGrlPfyfZbI+O348FV66I+jcD+/EUQs+HkwIDAQABo1MwUTAdBgNVHQ4E +FgQU6bk4LSwtVQEt7V/ev+Zj270zdAkwHwYDVR0jBBgwFoAU6bk4LSwtVQEt7V/e +v+Zj270zdAkwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAUBgo +E3CZrrc/MaadFg1meNk+eKACmTsIa5cT6zi7MsvoKakXEd4bGd+iLifUzlAa1ygj +dQppfprb5t68I7oO9/lkh2DfKrXxW/RpdhB05KslUd8q/3XY5kyao5quzeiVoMHR +u+XYjoy2mTwdUC2uzFy6rkHsAkJy2vJJoDdlNsrKn6AZmh+voHHKrAtOL4gnanQV +wR1u8eBVfk2MKIl2pNSCA4bD16uZyp3+oqq097BEoVa1pR+l8nwbsh/YfALifq/d +P3yiN5+EqgiOIF9b8PZORe+Ry1O7uvPnU2ZRkVWPJ1S17Ms0lnr7IY3qjSBTuK66 +5uYi7ojrb5Vf0UL5oQ== +-----END CERTIFICATE----- diff --git a/tests/fixtures/ssl/localhost-privkey.pem b/tests/fixtures/ssl/localhost-privkey.pem new file mode 100644 index 0000000..c260882 --- /dev/null +++ b/tests/fixtures/ssl/localhost-privkey.pem @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEugIBADANBgkqhkiG9w0BAQEFAASCBKQwggSgAgEAAoIBAQDW/+Vv271aSqQX +vOMgp7ZH5vhLSxCdYh8EVnSCC1o4vRqe2538S5oZCAu0mBLA7YzbEiorH7KguGgz +7bvcQl7QqZ8kzFg0CSHA/2Hq+sqdpAmakCGhqV8QbIKucccwohIACfhGVzw1edQu +gWEfM2bxt2q8/fesKawn601gLmTDPK0e9E0XKD0E5R8AKI9bXuikUfStqjch9mtD +rJFuSd5/WlfXHalsMAfXisJP+9dpOzpUa6osT/BGxK37ucwfL8+ZfEzJvgbj9R+V +i2cp+ZekNHD5MMQbO9Nl522g7P6uskJ73z1H2pgauU9/J9lsj47fjwVXroj6NwP7 +8RRCz4eTAgMBAAECggEAA+zbFv43iEj5kvdfXC7DrK9iVBmUPZNXhqA/c0paxNNr +A4B182+76f4UHKF0IjKUEkHUJEJpY/bJ7DzIY76QdZXLMoRKjfSmuZvQAVa/0T33 +8Or1ujpZ4nZgsmegX9ptorOL5VjdYAqP3aN+DvBEzl/vYnDujyWZn4bzvDBMpaXS +39qW1MkcZ8UiP1fRad76+S57WnieBV+NRHYEAiDdMFKXLuw/igX/xOSZgq5Jh3I2 +hLS49S41dN1P9l9H2bPMw0CthNvMPPaemwKHz+84hSS+P4VJOWJzlGnXEdIFuqBR +GFBESQzcemfS9DDB22Yt06YujBCbwTVVAxj73lnKkQKBgQDvYXK36J9y/NphDAWi +Cwti5oE3eSfV0YazQwm+rRwC64wbpBFAm9ujwjUmaYBg75lBLF5nOOe8s1n95g5I +tLfFb+zuZh8NNLjhfNE9/SNmRnnMvbcaDHeIE2RMAz+PuLN/gFLmsVIwK2X1LRC2 +0vHjw9Yzh6JLiOajAchzhZiCEQKBgQDl7R6Wfggo8myETA8Uv5tWot3IcquRkEl/ +TRCyao2/79rAGexS7piwD7FPdSDOk1zfZFYUOMzyMjj60sGcPRPqRX6D0usEODLQ +TwsTJSCNgPnIOkqKkccwtqlTimbRIrPUSQfFPj56RzKKWdrJ/P3LPRjzkK7i3vLV +EGlAENaLYwKBgHKSOnzpWr+HY+IFBgErthRs7LWnSDifYxATauuXIQwIvvNP0G4S +6snzHss2vZonszstSDWxV8DKOq052eZUkIxv6H+l4wDIFiDeQ6uep73Ax3UF7EgM +ZX18gombGGXqagcBXSxK/GJPsynomtJWHi38Ql5BcZ0jdffY157q9zZxAoGAPZtD +Tt+GIDKUkP4wLEcKwDPzaPoQrngSuWFUz/ls8bi6zC4l/DKiBsqtn7Sqja8+ezzP +M6vkfiCm084UwmA7LdJhC8E/52mHc/k55m9UQZYFV3kG8AoPbSYESLYUxoSd2ouW +4WrEIs9g42EgFm8LMaG1Rc3GjlNejWhQSzI3yjECf3v7VoAcUwVfuVkwbm9W24vR +neFTF8QBl//fxIdxZwoj5SrSgMOjmZ3pXA/ZbFJ0pB4Rh5dmKTYqdpfXsOTiBuwB +XlqPVpN8UZEl3edpufLDyPldNej/9kEAkK5FS3YVyIQEg75739bCTlfzzCX1HdMx +q98XYm/n5LWYFezsAt0= +-----END PRIVATE KEY----- diff --git a/tests/fixtures/worker-config-dev-server-false/index.js b/tests/fixtures/worker-config-dev-server-false/index.js new file mode 100644 index 0000000..f78ab4a --- /dev/null +++ b/tests/fixtures/worker-config-dev-server-false/index.js @@ -0,0 +1,7 @@ +const myWorker = new Worker("./worker-bundle.js"); + +myWorker.onmessage = (event) => { + console.log(`Worker said: ${event.data}`); +}; + +myWorker.postMessage("message"); diff --git a/tests/fixtures/worker-config-dev-server-false/public/worker-bundle.js b/tests/fixtures/worker-config-dev-server-false/public/worker-bundle.js new file mode 100644 index 0000000..fb4eecb --- /dev/null +++ b/tests/fixtures/worker-config-dev-server-false/public/worker-bundle.js @@ -0,0 +1,48 @@ +(() => { // webpackBootstrap +var __webpack_modules__ = ({}); +/************************************************************************/ +// The module cache +var __webpack_module_cache__ = {}; + +// The require function +function __webpack_require__(moduleId) { + +// Check if module is in cache +var cachedModule = __webpack_module_cache__[moduleId]; +if (cachedModule !== undefined) { +return cachedModule.exports; +} +// Create a new module (and put it into the cache) +var module = (__webpack_module_cache__[moduleId] = { +exports: {} +}); +// Execute the module function +__webpack_modules__[moduleId](module, module.exports, __webpack_require__); + +// Return the exports of the module +return module.exports; + +} + +/************************************************************************/ +// webpack/runtime/rspack_version +(() => { +__webpack_require__.rv = function () { + return "1.0.11"; +}; + +})(); +// webpack/runtime/rspack_unique_id +(() => { +__webpack_require__.ruid = "bundler=rspack@1.0.11"; + +})(); +/************************************************************************/ +postMessage("I'm working before postMessage"); + +onmessage = (event) => { + postMessage(`Message sent: ${event.data}`); +}; + +})() +; \ No newline at end of file diff --git a/tests/fixtures/worker-config-dev-server-false/webpack.config.js b/tests/fixtures/worker-config-dev-server-false/webpack.config.js new file mode 100644 index 0000000..c057c41 --- /dev/null +++ b/tests/fixtures/worker-config-dev-server-false/webpack.config.js @@ -0,0 +1,45 @@ +const path = require("node:path"); +const HTMLGeneratorPlugin = require("../../helpers/html-generator-plugin"); + +module.exports = [ + { + name: "app", + // dependencies: ["worker"], + devtool: false, + target: "web", + entry: "./index.js", + mode: "development", + context: __dirname, + stats: "none", + output: { + path: path.resolve(__dirname, "./dist/"), + }, + infrastructureLogging: { + level: "info", + stream: { + write: () => {}, + }, + }, + plugins: [new HTMLGeneratorPlugin()], + }, + { + name: "worker", + devtool: false, + target: "webworker", + entry: "./worker.js", + mode: "development", + context: __dirname, + stats: "none", + output: { + path: path.resolve(__dirname, "public"), + filename: "worker-bundle.js", + }, + infrastructureLogging: { + level: "info", + stream: { + write: () => {}, + }, + }, + devServer: false, + }, +]; diff --git a/tests/fixtures/worker-config-dev-server-false/worker.js b/tests/fixtures/worker-config-dev-server-false/worker.js new file mode 100644 index 0000000..ae6802f --- /dev/null +++ b/tests/fixtures/worker-config-dev-server-false/worker.js @@ -0,0 +1,5 @@ +postMessage("I'm working before postMessage"); + +onmessage = (event) => { + postMessage(`Message sent: ${event.data}`); +}; diff --git a/tests/fixtures/worker-config/index.js b/tests/fixtures/worker-config/index.js new file mode 100644 index 0000000..0008271 --- /dev/null +++ b/tests/fixtures/worker-config/index.js @@ -0,0 +1,7 @@ +const myWorker = new Worker("./worker.js"); + +myWorker.onmessage = (event) => { + console.log(`Worker said: ${event.data}`); +}; + +myWorker.postMessage("message"); diff --git a/tests/fixtures/worker-config/webpack.config.js b/tests/fixtures/worker-config/webpack.config.js new file mode 100644 index 0000000..7377b8f --- /dev/null +++ b/tests/fixtures/worker-config/webpack.config.js @@ -0,0 +1,43 @@ +const HTMLGeneratorPlugin = require("../../helpers/html-generator-plugin"); + +module.exports = [ + { + name: "app", + dependencies: ["worker"], + devtool: false, + target: "web", + entry: "./index.js", + mode: "development", + context: __dirname, + stats: "none", + output: { + path: "/", + }, + infrastructureLogging: { + level: "info", + stream: { + write: () => {}, + }, + }, + plugins: [new HTMLGeneratorPlugin()], + }, + { + name: "worker", + devtool: false, + target: "webworker", + entry: "./worker.js", + mode: "development", + context: __dirname, + stats: "none", + output: { + path: "/", + filename: "worker.js", + }, + infrastructureLogging: { + level: "info", + stream: { + write: () => {}, + }, + }, + }, +]; diff --git a/tests/fixtures/worker-config/worker.js b/tests/fixtures/worker-config/worker.js new file mode 100644 index 0000000..ae6802f --- /dev/null +++ b/tests/fixtures/worker-config/worker.js @@ -0,0 +1,5 @@ +postMessage("I'm working before postMessage"); + +onmessage = (event) => { + postMessage(`Message sent: ${event.data}`); +}; diff --git a/tests/helpers/conditional-test.js b/tests/helpers/conditional-test.js index 5d0ba71..0677dd4 100644 --- a/tests/helpers/conditional-test.js +++ b/tests/helpers/conditional-test.js @@ -1,5 +1,3 @@ -"use strict"; - const isWindows = process.platform === "win32"; function skipTestOnWindows(reason) { diff --git a/tests/helpers/custom-http.js b/tests/helpers/custom-http.js index 0678c55..f24c3ed 100644 --- a/tests/helpers/custom-http.js +++ b/tests/helpers/custom-http.js @@ -1,5 +1,3 @@ -"use strict"; - -const customHTTP = require("http"); +const customHTTP = require("node:http"); module.exports = customHTTP; diff --git a/tests/helpers/get-port.js b/tests/helpers/get-port.js index 05898a7..c08ac91 100644 --- a/tests/helpers/get-port.js +++ b/tests/helpers/get-port.js @@ -1,13 +1,11 @@ -"use strict"; - /* * Based on the packages get-port https://www.npmjs.com/package/get-port * and portfinder https://www.npmjs.com/package/portfinder * The code structure is similar to get-port, but it searches * ports deterministically like portfinder */ -const net = require("net"); -const os = require("os"); +const net = require("node:net"); +const os = require("node:os"); const minPort = 1024; const maxPort = 65_535; @@ -75,7 +73,7 @@ const getAvailablePort = async (port, hosts) => { /* We throw an error only if the interface exists */ if ( !nonExistentInterfaceErrors.has( - /** @type {NodeJS.ErrnoException} */ (error).code + /** @type {NodeJS.ErrnoException} */ (error).code, ) ) { throw error; @@ -118,7 +116,7 @@ async function getPorts(basePort, host) { /* Try next port if port is busy; throw for any other error */ if ( !portUnavailableErrors.has( - /** @type {NodeJS.ErrnoException} */ (error).code + /** @type {NodeJS.ErrnoException} */ (error).code, ) ) { throw error; diff --git a/tests/helpers/global-setup-test.js b/tests/helpers/global-setup-test.js index 744d26d..e814874 100644 --- a/tests/helpers/global-setup-test.js +++ b/tests/helpers/global-setup-test.js @@ -1,5 +1,3 @@ -"use strict"; - // eslint-disable-next-line import/no-extraneous-dependencies const tcpPortUsed = require("tcp-port-used"); const { webpackVersion } = require("@rspack/core/package.json"); @@ -11,20 +9,20 @@ console.log(`\n Running tests for webpack @${webpackVersion} \n`); async function validatePorts() { const samples = []; - Object.keys(ports).forEach(key => { + for (const key of Object.keys(ports)) { const value = ports[key]; const arr = Array.isArray(value) ? value : [value]; - arr.forEach(port => { - const check = tcpPortUsed.check(port, "localhost").then(inUse => { + for (const port of arr) { + const check = tcpPortUsed.check(port, "localhost").then((inUse) => { if (inUse) { throw new Error(`${port} has already used. [${key}]`); } }); samples.push(check); - }); - }); + } + } try { await Promise.all(samples); diff --git a/tests/helpers/html-generator-plugin.js b/tests/helpers/html-generator-plugin.js index e8da3b9..9614db2 100644 --- a/tests/helpers/html-generator-plugin.js +++ b/tests/helpers/html-generator-plugin.js @@ -1,5 +1,3 @@ -"use strict"; - const HTMLContentForIndex = ` @@ -14,7 +12,7 @@ const HTMLContentForIndex = ` `; -const HTMLContentForAssets = assetName => ` +const HTMLContentForAssets = (assetName) => ` @@ -46,13 +44,13 @@ module.exports = class HTMLGeneratorPlugin { apply(compiler) { const pluginName = "html-generator-plugin"; - compiler.hooks.thisCompilation.tap(pluginName, compilation => { + compiler.hooks.thisCompilation.tap(pluginName, (compilation) => { const { RawSource } = compiler.webpack.sources; compilation.hooks.processAssets.tap( { name: pluginName, - stage: compiler.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL + stage: compiler.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL, }, () => { const indexSource = new RawSource(HTMLContentForIndex); @@ -67,15 +65,15 @@ module.exports = class HTMLGeneratorPlugin { if (assetName !== "main.js" && assetName.endsWith(".js")) { const assetSource = new RawSource( - HTMLContentForAssets(assetName) + HTMLContentForAssets(assetName), ); compilation.emitAsset( assetName.replace(".js", ".html"), - assetSource + assetSource, ); } } - } + }, ); }); } diff --git a/tests/helpers/normalize-options.js b/tests/helpers/normalize-options.js index 46e5872..1b370f6 100644 --- a/tests/helpers/normalize-options.js +++ b/tests/helpers/normalize-options.js @@ -1,5 +1,3 @@ -"use strict"; - function normalizeOptions(options) { const normalizedOptions = {}; @@ -8,13 +6,11 @@ function normalizeOptions(options) { let value = options[propertyName]; if (Array.isArray(value)) { - value = value.map(item => { + value = value.map((item) => { if (Buffer.isBuffer(item)) { return ""; - } else if ( - typeof item.pem !== "undefined" && - Buffer.isBuffer(item.pem) - ) { + } + if (typeof item.pem !== "undefined" && Buffer.isBuffer(item.pem)) { item.pem = ""; } else if ( typeof item.buf !== "undefined" && diff --git a/tests/helpers/normalize.js b/tests/helpers/normalize.js index 6610922..469e119 100644 --- a/tests/helpers/normalize.js +++ b/tests/helpers/normalize.js @@ -1,51 +1,58 @@ -const path = require("path"); +const path = require("node:path"); const CURRENT_CWD = process.cwd(); const ROOT = path.resolve(__dirname, "../../"); const CSS_LOADER = path.dirname(require.resolve("css-loader")); -const RELATIVE_CSS_LOADER = path.relative(path.dirname(path.resolve(__dirname, "../fixtures/reload-config/webpack.config")), CSS_LOADER); +const RELATIVE_CSS_LOADER = path.relative( + path.dirname( + path.resolve(__dirname, "../fixtures/reload-config/webpack.config"), + ), + CSS_LOADER, +); const RSPACK = path.dirname(require.resolve("@rspack/core/package.json")); const rspack = require("@rspack/core"); const RSPACK_MODULE = require.cache[require.resolve("@rspack/core")]; -const TAPABLE = path.dirname(RSPACK_MODULE.require.resolve("@rspack/lite-tapable")); +const TAPABLE = path.dirname( + RSPACK_MODULE.require.resolve("@rspack/lite-tapable"), +); -const normalize = str => { +const normalize = (str) => { let normalizedStr = str.replace(/(\\)+/g, "/"); - - normalizedStr = normalizedStr.split( - RSPACK.replace(/(\\)+/g, "/") - ).join(""); - normalizedStr = normalizedStr.split( - CSS_LOADER.replace(/(\\)+/g, "/") - ).join(""); + normalizedStr = normalizedStr + .split(RSPACK.replace(/(\\)+/g, "/")) + .join(""); - normalizedStr = normalizedStr.split( - RELATIVE_CSS_LOADER.replace(/(\\)+/g, "/") - ).join(""); + normalizedStr = normalizedStr + .split(CSS_LOADER.replace(/(\\)+/g, "/")) + .join(""); - normalizedStr = normalizedStr.split( - RELATIVE_CSS_LOADER.replace(/(\\)+/g, "/") - ).join(""); + normalizedStr = normalizedStr + .split(RELATIVE_CSS_LOADER.replace(/(\\)+/g, "/")) + .join(""); - normalizedStr = normalizedStr.split( - TAPABLE.replace(/(\\)+/g, "/") - ).join(""); + normalizedStr = normalizedStr + .split(RELATIVE_CSS_LOADER.replace(/(\\)+/g, "/")) + .join(""); - normalizedStr = normalizedStr.split( - ROOT.replace(/(\\)+/g, "/") - ).join(""); + normalizedStr = normalizedStr + .split(TAPABLE.replace(/(\\)+/g, "/")) + .join(""); - normalizedStr = normalizedStr.split( - CURRENT_CWD.replace(/(\\)+/g, "/") - ).join(""); + normalizedStr = normalizedStr + .split(ROOT.replace(/(\\)+/g, "/")) + .join(""); + + normalizedStr = normalizedStr + .split(CURRENT_CWD.replace(/(\\)+/g, "/")) + .join(""); normalizedStr = normalizedStr.replace(/:\d+:\d+/g, "::"); normalizedStr = normalizedStr.replace( /@@ -\d+,\d+ \+\d+,\d+ @@/g, - "@@ ... @@" + "@@ ... @@", ); return normalizedStr; }; @@ -56,5 +63,5 @@ expect.addSnapshotSerializer({ }, print(received) { return normalize(received); - } + }, }); diff --git a/tests/helpers/ports-map.js b/tests/helpers/ports-map.js index 9303e57..07cf4e2 100644 --- a/tests/helpers/ports-map.js +++ b/tests/helpers/ports-map.js @@ -1,5 +1,3 @@ -"use strict"; - // important: new port mappings must be added to the bottom of this list const listOfTests = { // CLI tests @@ -80,21 +78,23 @@ const listOfTests = { "normalize-option": 1, "setup-middlewares-option": 1, "options-request-response": 2, - app: 1 + app: 1, }; let startPort = 8089; const ports = {}; -Object.keys(listOfTests).forEach(key => { +for (const key of Object.keys(listOfTests)) { const value = listOfTests[key]; ports[key] = value === 1 - ? (startPort += 1) - : [...new Array(value)].map(() => (startPort += 1)); -}); + ? // biome-ignore lint/suspicious/noAssignInExpressions: _ + (startPort += 1) + : // biome-ignore lint/suspicious/noAssignInExpressions: _ + [...new Array(value)].map(() => (startPort += 1)); +} const busy = {}; @@ -102,18 +102,18 @@ module.exports = new Proxy(ports, { get(target, name) { if (!target[name]) { throw new Error( - `Requested "${name}" port(s) for tests not found, please update "test/ports-map.js".` + `Requested "${name}" port(s) for tests not found, please update "test/ports-map.js".`, ); } if (busy[name]) { throw new Error( - `The "${name}" port is already in use in another test, please add a new one.` + `The "${name}" port is already in use in another test, please add a new one.`, ); } busy[name] = true; return target[name]; - } + }, }); diff --git a/tests/helpers/puppeteer-constants.js b/tests/helpers/puppeteer-constants.js index 4c8f3d8..5446d43 100644 --- a/tests/helpers/puppeteer-constants.js +++ b/tests/helpers/puppeteer-constants.js @@ -1,5 +1,3 @@ -"use strict"; - module.exports = { reloadReadyDelay: 5000, completeReloadDelay: 10000, @@ -48,6 +46,6 @@ module.exports = { "--prerender-from-omnibox=disabled", "--use-gl=swiftshader", "--use-mock-keychain", - "--disable-field-trial-config" - ] + "--disable-field-trial-config", + ], }; diff --git a/tests/helpers/run-browser.js b/tests/helpers/run-browser.js index 91948e0..b483a00 100644 --- a/tests/helpers/run-browser.js +++ b/tests/helpers/run-browser.js @@ -1,5 +1,3 @@ -"use strict"; - const puppeteer = require("puppeteer"); const { puppeteerArgs } = require("./puppeteer-constants"); @@ -30,14 +28,14 @@ function runBrowser(config) { // because of invalid localhost certificate acceptInsecureCerts: true, // args come from: https://github.com/alixaxel/chrome-aws-lambda/blob/master/source/index.js - args: puppeteerArgs + args: puppeteerArgs, }) - .then(launchedBrowser => { + .then((launchedBrowser) => { browser = launchedBrowser; return runPage(launchedBrowser, config); }) - .then(newPage => { + .then((newPage) => { page = newPage; resolve({ page, browser }); @@ -55,33 +53,33 @@ function runPage(browser, config) { const options = { viewport: { width: 500, - height: 500 + height: 500, }, userAgent: "", - ...config + ...config, }; return Promise.resolve() .then(() => browser.newPage()) - .then(newPage => { + .then((newPage) => { page = newPage; page.emulate(options); return page.setRequestInterception(true); }) .then(() => { - page.on("request", interceptedRequest => { + page.on("request", (interceptedRequest) => { if (interceptedRequest.isInterceptResolutionHandled()) return; if (interceptedRequest.url().includes("favicon.ico")) { interceptedRequest.respond({ status: 200, contentType: "image/png", - body: "Empty" + body: "Empty", }); } else { interceptedRequest.continue( interceptedRequest.continueRequestOverrides(), - 10 + 10, ); } }); diff --git a/tests/helpers/session-subscribe.js b/tests/helpers/session-subscribe.js index 5d079a0..01be197 100644 --- a/tests/helpers/session-subscribe.js +++ b/tests/helpers/session-subscribe.js @@ -1,7 +1,5 @@ -"use strict"; - module.exports = async function sessionSubscribe(session) { - session.on("sessionattached", s => { + session.on("sessionattached", (s) => { sessionSubscribe(s); }); session.send("Network.enable"); diff --git a/tests/helpers/setup-test.js b/tests/helpers/setup-test.js index 99a74a5..b3897d0 100644 --- a/tests/helpers/setup-test.js +++ b/tests/helpers/setup-test.js @@ -1,5 +1,3 @@ -"use strict"; - process.env.CHOKIDAR_USEPOLLING = true; jest.setTimeout(400000); diff --git a/tests/helpers/snapshot-resolver.js b/tests/helpers/snapshot-resolver.js index 0a17d51..bec30e6 100644 --- a/tests/helpers/snapshot-resolver.js +++ b/tests/helpers/snapshot-resolver.js @@ -1,25 +1,23 @@ -"use strict"; - -const path = require("path"); -const webpack = require("webpack"); +const path = require("node:path"); +const webpack = require("@rspack/core"); const [webpackVersion] = webpack.version; const snapshotExtension = `.snap.webpack${webpackVersion}`; module.exports = { - resolveSnapshotPath: testPath => + resolveSnapshotPath: (testPath) => path.join( path.dirname(testPath), "__snapshots__", - `${path.basename(testPath)}${snapshotExtension}` + `${path.basename(testPath)}${snapshotExtension}`, ), - resolveTestPath: snapshotPath => + resolveTestPath: (snapshotPath) => snapshotPath .replace(`${path.sep}__snapshots__`, "") .slice(0, -snapshotExtension.length), testPathForConsistencyCheck: path.join( "consistency_check", "__tests__", - "example.test.js" - ) + "example.test.js", + ), }; diff --git a/tests/helpers/test-server.js b/tests/helpers/test-server.js index 027acd7..d1663cc 100644 --- a/tests/helpers/test-server.js +++ b/tests/helpers/test-server.js @@ -1,6 +1,4 @@ -"use strict"; - -const webpack = require("webpack"); +const webpack = require("@rspack/core"); const { RspackDevServer: Server } = require("@rspack/dev-server"); let server; @@ -13,14 +11,14 @@ function startFullSetup(config, options, done) { options.static = false; } else if (options.static === null) { // this provides a way of using the default static value - delete options.static; + options.static = undefined; } const compiler = webpack(config); server = new Server(options, compiler); - server.startCallback(error => { + server.startCallback((error) => { if (error && done) { return done(error); } @@ -32,14 +30,14 @@ function startFullSetup(config, options, done) { return { server, - compiler + compiler, }; } function startAwaitingCompilationFullSetup(config, options, done) { let readyCount = 0; - const ready = error => { + const ready = (error) => { if (error && done) { done(error); @@ -91,5 +89,5 @@ function close(done) { module.exports = { start, - close + close, }; diff --git a/tests/helpers/trusted-types-html-generator-plugin.js b/tests/helpers/trusted-types-html-generator-plugin.js index ee647d3..9e5b019 100644 --- a/tests/helpers/trusted-types-html-generator-plugin.js +++ b/tests/helpers/trusted-types-html-generator-plugin.js @@ -1,5 +1,3 @@ -"use strict"; - const HTMLContentForIndex = ` @@ -40,14 +38,14 @@ module.exports = class HTMLGeneratorPlugin { apply(compiler) { const pluginName = "html-generator-plugin"; - compiler.hooks.thisCompilation.tap(pluginName, compilation => { + compiler.hooks.thisCompilation.tap(pluginName, (compilation) => { if (compiler.webpack) { const { RawSource } = compiler.webpack.sources; compilation.hooks.processAssets.tap( { name: pluginName, - stage: compiler.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL + stage: compiler.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL, }, () => { const indexSource = new RawSource(HTMLContentForIndex); @@ -55,7 +53,7 @@ module.exports = class HTMLGeneratorPlugin { compilation.emitAsset("index.html", indexSource); compilation.emitAsset("test.html", testSource); - } + }, ); } else { compilation.hooks.additionalAssets.tap(pluginName, () => { @@ -65,7 +63,7 @@ module.exports = class HTMLGeneratorPlugin { }, size() { return HTMLContentForIndex.length; - } + }, }); compilation.emitAsset("test.html", { source() { @@ -73,7 +71,7 @@ module.exports = class HTMLGeneratorPlugin { }, size() { return HTMLContentForTest.length; - } + }, }); }); } diff --git a/tests/normalizeOptions.test.ts b/tests/normalizeOptions.test.ts index 412e0e6..ee8edd6 100644 --- a/tests/normalizeOptions.test.ts +++ b/tests/normalizeOptions.test.ts @@ -1,5 +1,5 @@ -import { RspackOptions, rspack } from "@rspack/core"; -import { Configuration, RspackDevServer } from "@rspack/dev-server"; +import { type RspackOptions, rspack } from "@rspack/core"; +import { type Configuration, RspackDevServer } from "@rspack/dev-server"; import ReactRefreshPlugin from "@rspack/plugin-react-refresh"; // @ts-expect-error import serializer from "jest-serializer-path"; @@ -22,14 +22,14 @@ describe.skip("normalize options snapshot", () => { it("port string", async () => { await match({ devServer: { - port: "9000" - } + port: "9000", + }, }); }); it("additional entires should added", async () => { expect( - await getAdditionEntries({}, { entry: ["something"] }) + await getAdditionEntries({}, { entry: ["something"] }), ).toMatchSnapshot(); }); @@ -40,48 +40,48 @@ describe.skip("normalize options snapshot", () => { {}, { mode: "production", - entry: ["something"] - } + entry: ["something"], + }, ); - expect(entries1["undefined"]).not.toContain(reactRefreshEntry); + expect(entries1.undefined).not.toContain(reactRefreshEntry); const entries2 = await getAdditionEntries( {}, { mode: "production", entry: ["something"], - plugins: [new ReactRefreshPlugin({ forceEnable: true })] - } + plugins: [new ReactRefreshPlugin({ forceEnable: true })], + }, ); - expect(entries2["undefined"]).toContain(reactRefreshEntry); + expect(entries2.undefined).toContain(reactRefreshEntry); const entries3 = await getAdditionEntries( {}, { mode: "development", entry: ["something"], - plugins: [new ReactRefreshPlugin()] - } + plugins: [new ReactRefreshPlugin()], + }, ); - expect(entries3["undefined"]).toContain(reactRefreshEntry); + expect(entries3.undefined).toContain(reactRefreshEntry); const entries4 = await getAdditionEntries( {}, { mode: "production", entry: ["something"], - plugins: [new ReactRefreshPlugin()] - } + plugins: [new ReactRefreshPlugin()], + }, ); - expect(entries4["undefined"]).not.toContain(reactRefreshEntry); + expect(entries4.undefined).not.toContain(reactRefreshEntry); }); it("should apply HMR plugin by default", async () => { const compiler = rspack({ entry: ENTRY, - stats: "none" + stats: "none", }); const server = new RspackDevServer({}, compiler); await server.start(); const hmrPlugins = compiler.__internal__builtinPlugins.filter( - p => p.name === "HotModuleReplacementPlugin" + (p) => p.name === "HotModuleReplacementPlugin", ); expect(hmrPlugins.length).toBe(1); expect(server.options.hot).toBe(true); @@ -92,12 +92,12 @@ describe.skip("normalize options snapshot", () => { const compiler = rspack([ { entry: ENTRY, - stats: "none" + stats: "none", }, { entry: ENTRY1, - stats: "none" - } + stats: "none", + }, ]); const server = new RspackDevServer({}, compiler); await server.start(); @@ -109,10 +109,10 @@ describe.skip("normalize options snapshot", () => { const devServerOptions = { client: { webSocketTransport: require.resolve( - "./fixtures/custom-client/CustomSockJSClient" - ) + "./fixtures/custom-client/CustomSockJSClient", + ), }, - webSocketServer: "sockjs" + webSocketServer: "sockjs", }; const server = new RspackDevServer(devServerOptions, compiler); await server.start(); @@ -124,36 +124,37 @@ async function match(config: RspackOptions) { const compiler = rspack({ ...config, entry: ENTRY, - stats: "none" + stats: "none", }); const server = new RspackDevServer( compiler.options.devServer ?? {}, - compiler + compiler, ); await server.start(); // it will break ci //@ts-ignore - delete server.options.port; + server.options.port = undefined; expect(server.options).toMatchSnapshot(); await server.stop(); } async function getAdditionEntries( serverConfig: Configuration, - config: RspackOptions + config: RspackOptions, ) { const compiler = rspack({ ...config, stats: "none", - entry: ENTRY + entry: ENTRY, }); const server = new RspackDevServer(serverConfig, compiler); await server.start(); const entries = compiler.__internal__builtinPlugins - .filter(p => p.name === "EntryPlugin") - .map(p => p.options) - .reduce((acc: any, cur: any) => { + .filter((p) => p.name === "EntryPlugin") + .map((p) => p.options) + // biome-ignore lint/suspicious/noExplicitAny: _ + .reduce>((acc: any, cur: any) => { const name = cur.options.name; const request = cur.entry; if (acc[name]) { @@ -167,15 +168,15 @@ async function getAdditionEntries( const value = Object.fromEntries( Object.entries(entries).map(([key, item]) => { // @ts-expect-error - const replaced = item.import?.map(entry => { + const replaced = item.import?.map((entry) => { const array = entry .replace(/\\/g, "/") .replace(/port=\d+/g, "") .split("/"); - return "" + "/" + array.slice(-3).join("/"); + return `/${array.slice(-3).join("/")}`; }); return [key, replaced]; - }) + }), ); await server.stop(); return value; diff --git a/tests/tsconfig.json b/tests/tsconfig.json index 09037e0..c4e73fb 100644 --- a/tests/tsconfig.json +++ b/tests/tsconfig.json @@ -1,10 +1,10 @@ { - "extends": "../tsconfig.json", - "compilerOptions": { - "allowJs": true, - "checkJs": false, - "rootDir": "../" - }, - "include": ["../src", "../tests", "../client-src"], - "references": [] + "extends": "../tsconfig.json", + "compilerOptions": { + "allowJs": true, + "checkJs": false, + "rootDir": "../" + }, + "include": ["../src", "../tests", "../client-src"], + "references": [] } diff --git a/tsconfig.build.json b/tsconfig.build.json index 7973b10..73db71e 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -1,7 +1,7 @@ { - "extends": "./tsconfig.json", - "compilerOptions": { - "sourceMap": false, - "declarationMap": false - } + "extends": "./tsconfig.json", + "compilerOptions": { + "sourceMap": false, + "declarationMap": false + } } diff --git a/tsconfig.client.json b/tsconfig.client.json index 48a2109..54d2e8b 100644 --- a/tsconfig.client.json +++ b/tsconfig.client.json @@ -1,14 +1,14 @@ { - "extends": "./tsconfig.json", - "compilerOptions": { - "module": "ES2020", - "target": "ES5", - "outDir": "client", - "rootDir": "client-src", - "composite": false, - "sourceMap": false, - "declarationMap": false, - "declaration": false - }, - "include": ["client-src"] + "extends": "./tsconfig.json", + "compilerOptions": { + "module": "ES2020", + "target": "ES5", + "outDir": "client", + "rootDir": "client-src", + "composite": false, + "sourceMap": false, + "declarationMap": false, + "declaration": false + }, + "include": ["client-src"] } diff --git a/tsconfig.json b/tsconfig.json index e0e61d1..0568d2f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,25 +1,25 @@ { - "compilerOptions": { - "module": "NodeNext", - "moduleResolution": "NodeNext", - "target": "ES2021", - "esModuleInterop": true, - "declaration": true, - "isolatedModules": true, - "sourceMap": true, - "declarationMap": true, - "composite": true, - "forceConsistentCasingInFileNames": true, - "allowJs": true, - "checkJs": true, - "strict": true, - "skipLibCheck": true, - "noUnusedLocals": true, - "outDir": "dist", - "rootDir": "src" - }, - "ts-node": { - "transpileOnly": true - }, - "include": ["src"] + "compilerOptions": { + "module": "NodeNext", + "moduleResolution": "NodeNext", + "target": "ES2021", + "esModuleInterop": true, + "declaration": true, + "isolatedModules": true, + "sourceMap": true, + "declarationMap": true, + "composite": true, + "forceConsistentCasingInFileNames": true, + "allowJs": true, + "checkJs": true, + "strict": true, + "skipLibCheck": true, + "noUnusedLocals": true, + "outDir": "dist", + "rootDir": "src" + }, + "ts-node": { + "transpileOnly": true + }, + "include": ["src"] }