From 1cc94674a429aa0aa351bb5b876e8bb87f500dfe Mon Sep 17 00:00:00 2001 From: wxiaoyun Date: Wed, 31 Jul 2024 16:04:04 +0800 Subject: [PATCH 1/3] refactor(typescript): packages/rspack/src/util/StatsFactory --- packages/rspack/src/stats/StatsFactory.ts | 10 ++-------- packages/rspack/src/util/comparators.ts | 7 ++++--- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/packages/rspack/src/stats/StatsFactory.ts b/packages/rspack/src/stats/StatsFactory.ts index 1d8bf3f2cc7..22513082b8e 100644 --- a/packages/rspack/src/stats/StatsFactory.ts +++ b/packages/rspack/src/stats/StatsFactory.ts @@ -285,10 +285,7 @@ export class StatsFactory { h.call(comparators, context) ); if (comparators.length > 0) { - items.sort( - // @ts-expect-error number of arguments is correct - concatComparators(...comparators) - ); + items.sort(concatComparators(...comparators)); } // run filter on sorted items @@ -344,10 +341,7 @@ export class StatsFactory { h => h.call(comparators2, context) ); if (comparators2.length > 0) { - resultItems.sort( - // @ts-expect-error number of arguments is correct - concatComparators(...comparators2) - ); + resultItems.sort(concatComparators(...comparators2)); } // group result items diff --git a/packages/rspack/src/util/comparators.ts b/packages/rspack/src/util/comparators.ts index 4e5cbb9ecda..62e19ab4dc0 100644 --- a/packages/rspack/src/util/comparators.ts +++ b/packages/rspack/src/util/comparators.ts @@ -46,11 +46,12 @@ const concatComparatorsCache: TwoKeyWeakMap< Comparator > = new TwoKeyWeakMap(); -export const concatComparators = ( +export function concatComparators(...comparators: Comparator[]): Comparator; +export function concatComparators( c1: Comparator, c2: Comparator, ...cRest: Comparator[] -): Comparator => { +): Comparator { if (cRest.length > 0) { const [c3, ...cRest2] = cRest; return concatComparators(c1, concatComparators(c2, c3, ...cRest2)); @@ -70,7 +71,7 @@ export const concatComparators = ( }; concatComparatorsCache.set(c1, c2, result); return result; -}; +} export const compareIds = ( a: string | number, From d5aec16ccaf0c74d22fb66983bf8fd8e68780bc2 Mon Sep 17 00:00:00 2001 From: wxiaoyun Date: Wed, 31 Jul 2024 16:25:15 +0800 Subject: [PATCH 2/3] fix: update typing --- packages/rspack/src/stats/StatsFactory.ts | 14 +++++++++++--- packages/rspack/src/util/comparators.ts | 15 ++++++++------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/packages/rspack/src/stats/StatsFactory.ts b/packages/rspack/src/stats/StatsFactory.ts index 22513082b8e..97aab8d7091 100644 --- a/packages/rspack/src/stats/StatsFactory.ts +++ b/packages/rspack/src/stats/StatsFactory.ts @@ -11,7 +11,11 @@ import type { JsStats, JsStatsError, JsStatsWarning } from "@rspack/binding"; import { HookMap, SyncBailHook, SyncWaterfallHook } from "@rspack/lite-tapable"; import type { Compilation } from "../Compilation"; -import { type Comparator, concatComparators } from "../util/comparators"; +import { + type AtLeastTwo, + type Comparator, + concatComparators +} from "../util/comparators"; import { type GroupConfig, smartGrouping } from "../util/smartGrouping"; export type KnownStatsFactoryContext = { @@ -285,7 +289,9 @@ export class StatsFactory { h.call(comparators, context) ); if (comparators.length > 0) { - items.sort(concatComparators(...comparators)); + items.sort( + concatComparators(...(comparators as AtLeastTwo)) + ); } // run filter on sorted items @@ -341,7 +347,9 @@ export class StatsFactory { h => h.call(comparators2, context) ); if (comparators2.length > 0) { - resultItems.sort(concatComparators(...comparators2)); + resultItems.sort( + concatComparators(...(comparators2 as AtLeastTwo)) + ); } // group result items diff --git a/packages/rspack/src/util/comparators.ts b/packages/rspack/src/util/comparators.ts index 62e19ab4dc0..69bb9190e77 100644 --- a/packages/rspack/src/util/comparators.ts +++ b/packages/rspack/src/util/comparators.ts @@ -46,12 +46,13 @@ const concatComparatorsCache: TwoKeyWeakMap< Comparator > = new TwoKeyWeakMap(); -export function concatComparators(...comparators: Comparator[]): Comparator; -export function concatComparators( - c1: Comparator, - c2: Comparator, - ...cRest: Comparator[] -): Comparator { +export type AtLeastTwo = [T, T, ...T[]]; + +export const concatComparators = ( + ...comps: AtLeastTwo +): Comparator => { + const [c1, c2, ...cRest] = comps; + if (cRest.length > 0) { const [c3, ...cRest2] = cRest; return concatComparators(c1, concatComparators(c2, c3, ...cRest2)); @@ -71,7 +72,7 @@ export function concatComparators( }; concatComparatorsCache.set(c1, c2, result); return result; -} +}; export const compareIds = ( a: string | number, From 22912e3adf21ef596c884f83c762858bc8b6891b Mon Sep 17 00:00:00 2001 From: wxiaoyun Date: Wed, 31 Jul 2024 16:45:20 +0800 Subject: [PATCH 3/3] fix: remove unnecessary typing --- packages/rspack/src/stats/StatsFactory.ts | 14 +++----------- packages/rspack/src/util/comparators.ts | 14 +++++--------- 2 files changed, 8 insertions(+), 20 deletions(-) diff --git a/packages/rspack/src/stats/StatsFactory.ts b/packages/rspack/src/stats/StatsFactory.ts index 97aab8d7091..22513082b8e 100644 --- a/packages/rspack/src/stats/StatsFactory.ts +++ b/packages/rspack/src/stats/StatsFactory.ts @@ -11,11 +11,7 @@ import type { JsStats, JsStatsError, JsStatsWarning } from "@rspack/binding"; import { HookMap, SyncBailHook, SyncWaterfallHook } from "@rspack/lite-tapable"; import type { Compilation } from "../Compilation"; -import { - type AtLeastTwo, - type Comparator, - concatComparators -} from "../util/comparators"; +import { type Comparator, concatComparators } from "../util/comparators"; import { type GroupConfig, smartGrouping } from "../util/smartGrouping"; export type KnownStatsFactoryContext = { @@ -289,9 +285,7 @@ export class StatsFactory { h.call(comparators, context) ); if (comparators.length > 0) { - items.sort( - concatComparators(...(comparators as AtLeastTwo)) - ); + items.sort(concatComparators(...comparators)); } // run filter on sorted items @@ -347,9 +341,7 @@ export class StatsFactory { h => h.call(comparators2, context) ); if (comparators2.length > 0) { - resultItems.sort( - concatComparators(...(comparators2 as AtLeastTwo)) - ); + resultItems.sort(concatComparators(...comparators2)); } // group result items diff --git a/packages/rspack/src/util/comparators.ts b/packages/rspack/src/util/comparators.ts index 69bb9190e77..8832cb73f2a 100644 --- a/packages/rspack/src/util/comparators.ts +++ b/packages/rspack/src/util/comparators.ts @@ -46,22 +46,18 @@ const concatComparatorsCache: TwoKeyWeakMap< Comparator > = new TwoKeyWeakMap(); -export type AtLeastTwo = [T, T, ...T[]]; - -export const concatComparators = ( - ...comps: AtLeastTwo -): Comparator => { +export const concatComparators = (...comps: Array): Comparator => { const [c1, c2, ...cRest] = comps; + if (c2 === undefined) { + return c1; + } + if (cRest.length > 0) { const [c3, ...cRest2] = cRest; return concatComparators(c1, concatComparators(c2, c3, ...cRest2)); } - if (c2 === undefined) { - return c1; - } - const cacheEntry = concatComparatorsCache.get(c1, c2); if (cacheEntry !== undefined) return cacheEntry;