Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/nodejs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ jobs:
cp -R tmp-client client
- name: Run tests for webpack version ${{ matrix.webpack-version }}
run: npm run test:coverage -- --ci --shard=${{ matrix.shard }}
run: npm run test:coverage -- --test-shard=${{ matrix.shard }}

- name: Submit coverage data to codecov
uses: codecov/codecov-action@v5
Expand Down
16 changes: 11 additions & 5 deletions client-src/socket.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,13 @@ import { log } from "./utils/log.js";
/** @typedef {import("./index.js").EXPECTED_ANY} EXPECTED_ANY */
/** @typedef {WebSocketClient} */

// this WebsocketClient is here as a default fallback, in case the client is not injected
/** @type {CommunicationClientConstructor} */
const Client =
typeof __webpack_dev_server_client__ !== "undefined"
/**
* Resolves the client constructor at call time so callers (and tests) can
* override the global without relying on module-load ordering.
* @returns {CommunicationClientConstructor} client constructor
*/
function resolveClient() {
return typeof __webpack_dev_server_client__ !== "undefined"
? typeof (
/** @type {{ default: CommunicationClientConstructor }} */
(__webpack_dev_server_client__).default
Expand All @@ -20,6 +23,7 @@ const Client =
__webpack_dev_server_client__
)
: WebSocketClient;
}

let retries = 0;
let maxRetries = 10;
Expand All @@ -37,8 +41,10 @@ let timeout;
* @param {string} url url
* @param {{ [handler: string]: (data?: EXPECTED_ANY, params?: EXPECTED_ANY) => EXPECTED_ANY }} handlers handlers
* @param {number=} reconnect count of reconnections
* @param {CommunicationClientConstructor} Client internal-only override
* or tests; defaults to the runtime-resolved client constructor
*/
function socket(url, handlers, reconnect) {
function socket(url, handlers, reconnect, Client = resolveClient()) {
client = new Client(url);

client.onOpen(() => {
Expand Down
8 changes: 5 additions & 3 deletions client-src/utils/log.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import logger from "../modules/logger/index.js";
import defaultLogger from "../modules/logger/index.js";

const name = "webpack-dev-server";
// default level is set on the client side, so it does not need
Expand All @@ -8,14 +8,16 @@ const defaultLevel = "info";
// options new options, merge with old options
/**
* @param {false | true | "none" | "error" | "warn" | "info" | "log" | "verbose"} level level
* @param {object} logger internal-only override for tests; defaults to the
* real webpack runtime logger
* @returns {void}
*/
function setLogLevel(level) {
function setLogLevel(level, logger = defaultLogger) {
logger.configureDefaultLogger({ level });
}

setLogLevel(defaultLevel);

const log = logger.getLogger(name);
const log = defaultLogger.getLogger(name);

export { log, setLogLevel };
18 changes: 18 additions & 0 deletions eslint.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,23 @@ export default defineConfig([
{
files: ["test/**/*"],
extends: [configs["universal-recommended"]],
rules: {
// Tests use experimental node:test APIs intentionally
// (mock.module, mock.timers, snapshot.*). The package's engines field
// is wider than where these are stable, so silence the linter here.
"n/no-unsupported-features/node-builtins": "off",
// Test callbacks (it/test/subtest arrow functions) don't need JSDoc.
"jsdoc/require-jsdoc": "off",
// Tests legitimately log diagnostics (retry attempts, etc.).
"no-console": "off",
// Closure params in reduce/map (`(p, server) => ...`) are conventional.
"id-length": "off",
},
},
{
files: ["scripts/node-test-setup.mjs"],
rules: {
"n/no-unsupported-features/node-builtins": "off",
},
},
]);
30 changes: 0 additions & 30 deletions jest.config.js

This file was deleted.

Loading
Loading