From b60cf80b487c8358d69ec47167b36ab21b4102d9 Mon Sep 17 00:00:00 2001 From: neverland Date: Mon, 13 Apr 2026 14:19:58 +0800 Subject: [PATCH 1/2] chore: fix lint issues --- client-src/index.ts | 6 ++---- client-src/modules/logger/Logger.ts | 8 +------- client-src/modules/logger/index.ts | 24 +++++++++++------------- client-src/rspack-hot.d.ts | 11 +++++++++++ client-src/utils/ansiHTML.ts | 3 +-- src/server.ts | 2 +- tests/normalizeOptions.test.ts | 4 +--- 7 files changed, 28 insertions(+), 30 deletions(-) create mode 100644 client-src/rspack-hot.d.ts diff --git a/client-src/index.ts b/client-src/index.ts index 2ea5d53..9ba73d5 100644 --- a/client-src/index.ts +++ b/client-src/index.ts @@ -8,10 +8,8 @@ * https://github.com/webpack/webpack-dev-server/blob/main/LICENSE */ -// @ts-expect-error: No type definitions available for '@rspack/core/hot/emitter.js' import { emitter as hotEmitter } from '@rspack/core/hot/emitter.js'; -// @ts-expect-error: No type definitions available for '@rspack/core/hot/log.js' -import { log as webpackHotLog } from '@rspack/core/hot/log.js'; +import { log as rspackHotLog } from '@rspack/core/hot/log.js'; import { createOverlay, formatProblem } from './overlay.js'; import socket from './socket.js'; import { defineProgressElement, isProgressSupported } from './progress.js'; @@ -191,7 +189,7 @@ if (typeof parsedResourceQuery.reconnect !== 'undefined') { const setAllLogLevel = (level: LogLevel): void => { // This is needed because the HMR logger operate separately from dev server logger - webpackHotLog.setLogLevel( + rspackHotLog.setLogLevel( level === 'verbose' || level === 'log' ? 'info' : (level as LogLevel), ); setLogLevel(level); diff --git a/client-src/modules/logger/Logger.ts b/client-src/modules/logger/Logger.ts index 3870928..8a7ba3d 100644 --- a/client-src/modules/logger/Logger.ts +++ b/client-src/modules/logger/Logger.ts @@ -24,15 +24,9 @@ class WebpackLogger { private [LOG_SYMBOL]: (type: LogTypeEnum, args?: Args) => void; private [TIMERS_SYMBOL]: TimersMap = new Map(); private [TIMERS_AGGREGATES_SYMBOL]: TimersMap = new Map(); - // @ts-ignore - private getChildLogger: (name: string | (() => string)) => WebpackLogger; - constructor( - log: (type: LogTypeEnum, args?: Args) => void, - getChildLogger: (name: string | (() => string)) => WebpackLogger, - ) { + constructor(log: (type: LogTypeEnum, args?: Args) => void) { this[LOG_SYMBOL] = log; - this.getChildLogger = getChildLogger; } error(...args: Args) { diff --git a/client-src/modules/logger/index.ts b/client-src/modules/logger/index.ts index 5ca71ae..e898cc7 100644 --- a/client-src/modules/logger/index.ts +++ b/client-src/modules/logger/index.ts @@ -15,10 +15,12 @@ import type { LoggerOptions } from '../types.js'; /** * Client stub for tapable SyncBailHook */ -function SyncBailHook() { - return { - call() {}, - }; +class SyncBailHook { + constructor(_args?: string[]) {} + + call(_origin?: string, _type?: string, _args?: unknown) { + return undefined; + } } const currentDefaultLoggerOptions = { @@ -35,17 +37,13 @@ const configureDefaultLogger = (options: LoggerOptions): void => { }; const getLogger = (name: string): Logger => - new Logger( - (type, args) => { - if (hooks.log.call(name, type, args) === undefined) { - currentDefaultLogger(name, type, args); - } - }, - (childName) => getLogger(`${name}/${childName}`), - ); + new Logger((type, args) => { + if (hooks.log.call(name, type, args) === undefined) { + currentDefaultLogger(name, type, args); + } + }); const hooks = { - // @ts-ignore log: new SyncBailHook(['origin', 'type', 'args']), }; diff --git a/client-src/rspack-hot.d.ts b/client-src/rspack-hot.d.ts new file mode 100644 index 0000000..2224d2c --- /dev/null +++ b/client-src/rspack-hot.d.ts @@ -0,0 +1,11 @@ +declare module '@rspack/core/hot/emitter.js' { + export const emitter: { + emit(eventName: string, ...args: unknown[]): void; + }; +} + +declare module '@rspack/core/hot/log.js' { + export const log: { + setLogLevel(level: string | boolean): void; + }; +} diff --git a/client-src/utils/ansiHTML.ts b/client-src/utils/ansiHTML.ts index 93d546e..c18bc0d 100644 --- a/client-src/utils/ansiHTML.ts +++ b/client-src/utils/ansiHTML.ts @@ -138,8 +138,7 @@ export default function ansiHTML(text: string) { const ansiCodes: string[] = []; // Replace with markup. let ret = text.replace( - //@ts-ignore TS1487 error - /\033\[(?:[0-9]{1,3})?(?:(?:;[0-9]{0,3})*)?m/g, + /\x1b\[(?:[0-9]{1,3})?(?:(?:;[0-9]{0,3})*)?m/g, (m) => { const match = m.match(/(;?\d+)/g)?.map(normalizeSeq) as unknown as Match; Object.defineProperty(match, 'advance', { diff --git a/src/server.ts b/src/server.ts index 36e4acb..b7d4bf1 100644 --- a/src/server.ts +++ b/src/server.ts @@ -1183,7 +1183,7 @@ class Server< #getClientTransport() { let clientImplementation: string | undefined; let clientImplementationFound = true; - let clientTransport = + const clientTransport = typeof this.options.client === 'object' && this.options.client !== null && typeof this.options.client.webSocketTransport !== 'undefined' diff --git a/tests/normalizeOptions.test.ts b/tests/normalizeOptions.test.ts index b112730..530156a 100644 --- a/tests/normalizeOptions.test.ts +++ b/tests/normalizeOptions.test.ts @@ -112,7 +112,6 @@ async function match(config: RspackOptions) { ); await server.start(); // it will break ci - //@ts-ignore server.options.port = undefined; expect(server.options).toMatchSnapshot(); await server.stop(); @@ -146,8 +145,7 @@ async function getAdditionEntries( // some hack for snapshot const value = Object.fromEntries( Object.entries(entries).map(([key, item]) => { - // @ts-expect-error - const replaced = item.import?.map((entry) => { + const replaced = (item as { import?: string[] }).import?.map((entry) => { const array = entry .replace(/\\/g, '/') .replace(/port=\d+/g, '') From e62569e5ea7f5dadc24abc54fc3faa31a37c2d16 Mon Sep 17 00:00:00 2001 From: neverland Date: Mon, 13 Apr 2026 14:23:58 +0800 Subject: [PATCH 2/2] fix: rename --- client-src/modules/logger/Logger.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/client-src/modules/logger/Logger.ts b/client-src/modules/logger/Logger.ts index 8a7ba3d..f75e502 100644 --- a/client-src/modules/logger/Logger.ts +++ b/client-src/modules/logger/Logger.ts @@ -16,11 +16,11 @@ import { type TimersMap, } from '../types.js'; -const LOG_SYMBOL = Symbol('webpack logger raw log method'); -const TIMERS_SYMBOL = Symbol('webpack logger times'); -const TIMERS_AGGREGATES_SYMBOL = Symbol('webpack logger aggregated times'); +const LOG_SYMBOL = Symbol('rspack logger raw log method'); +const TIMERS_SYMBOL = Symbol('rspack logger times'); +const TIMERS_AGGREGATES_SYMBOL = Symbol('rspack logger aggregated times'); -class WebpackLogger { +class RspackLogger { private [LOG_SYMBOL]: (type: LogTypeEnum, args?: Args) => void; private [TIMERS_SYMBOL]: TimersMap = new Map(); private [TIMERS_AGGREGATES_SYMBOL]: TimersMap = new Map(); @@ -95,7 +95,7 @@ class WebpackLogger { timeLog(label?: string) { const prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label); if (!prev) { - throw new Error(`No such label '${label}' for WebpackLogger.timeLog()`); + throw new Error(`No such label '${label}' for RspackLogger.timeLog()`); } const time = process.hrtime(prev); this[LOG_SYMBOL](LogType.time, [label, ...time]); @@ -104,7 +104,7 @@ class WebpackLogger { timeEnd(label?: string) { const prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label); if (!prev) { - throw new Error(`No such label '${label}' for WebpackLogger.timeEnd()`); + throw new Error(`No such label '${label}' for RspackLogger.timeEnd()`); } const time = process.hrtime(prev); /** @type {TimersMap} */ @@ -116,7 +116,7 @@ class WebpackLogger { const prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label); if (!prev) { throw new Error( - `No such label '${label}' for WebpackLogger.timeAggregate()`, + `No such label '${label}' for RspackLogger.timeAggregate()`, ); } const time = process.hrtime(prev); @@ -145,4 +145,4 @@ class WebpackLogger { } } -export { WebpackLogger as Logger }; +export { RspackLogger as Logger };