From 61b2132ad09a0ed168a20483fd035b335d405c6c Mon Sep 17 00:00:00 2001 From: Tobias Koppers Date: Thu, 14 Sep 2023 09:11:36 +0000 Subject: [PATCH] reenable deduplication for some hmr events aggregate turbopack events --- .../next/src/server/dev/hot-reloader-types.ts | 2 +- .../src/server/lib/router-utils/setup-dev.ts | 40 ++++++++++++------- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/packages/next/src/server/dev/hot-reloader-types.ts b/packages/next/src/server/dev/hot-reloader-types.ts index 120cfc5e248cc..7428e426001ee 100644 --- a/packages/next/src/server/dev/hot-reloader-types.ts +++ b/packages/next/src/server/dev/hot-reloader-types.ts @@ -30,7 +30,7 @@ interface ServerErrorAction { interface TurboPackMessageAction { type: HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_MESSAGE - data: TurbopackUpdate + data: TurbopackUpdate | TurbopackUpdate[] } interface BuildingAction { diff --git a/packages/next/src/server/lib/router-utils/setup-dev.ts b/packages/next/src/server/lib/router-utils/setup-dev.ts index 60e8f4a465466..796e2a0c2d76e 100644 --- a/packages/next/src/server/lib/router-utils/setup-dev.ts +++ b/packages/next/src/server/lib/router-utils/setup-dev.ts @@ -102,6 +102,7 @@ import { ReloadPageAction, TurboPackConnectedAction, } from '../../dev/hot-reloader-types' +import type { Update as TurbopackUpdate } from '../../../build/swc' import { debounce } from '../../utils' import { deleteAppClientCache, @@ -227,7 +228,8 @@ async function startWatcher(opts: SetupOpts) { let currentEntriesHandling = new Promise( (resolve) => (currentEntriesHandlingResolve = resolve) ) - const hmrPayloads = new Map() + const hmrPayloads = new Map() + const turbopackUpdates: TurbopackUpdate[] = [] let hmrBuilding = false const issues = new Map>() @@ -362,12 +364,17 @@ async function startWatcher(opts: SetupOpts) { hmrBuilding = false if (errors.size === 0) { - for (const payloads of hmrPayloads.values()) { - for (const payload of payloads) { - hotReloader.send(payload) - } + for (const payload of hmrPayloads.values()) { + hotReloader.send(payload) } hmrPayloads.clear() + if (turbopackUpdates.length > 0) { + hotReloader.send({ + type: HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_MESSAGE, + data: turbopackUpdates, + }) + turbopackUpdates.length = 0 + } } }, 2) @@ -379,13 +386,19 @@ async function startWatcher(opts: SetupOpts) { hotReloader.send({ action: HMR_ACTIONS_SENT_TO_BROWSER.BUILDING }) hmrBuilding = true } - let k = `${key}:${id}` - let list = hmrPayloads.get(k) - if (!list) { - list = [] - hmrPayloads.set(k, list) + hmrPayloads.set(`${key}:${id}`, payload) + sendHmrDebounce() + } + + function sendTurbopackMessage(payload: TurbopackUpdate) { + // We've detected a change in some part of the graph. If nothing has + // been inserted into building yet, then this is the first change + // emitted, but their may be many more coming. + if (!hmrBuilding) { + hotReloader.send({ action: HMR_ACTIONS_SENT_TO_BROWSER.BUILDING }) + hmrBuilding = true } - list.push(payload) + turbopackUpdates.push(payload) sendHmrDebounce() } @@ -845,10 +858,7 @@ async function startWatcher(opts: SetupOpts) { for await (const data of subscription) { processIssues(id, data) - sendHmr('hmr-event', id, { - type: HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_MESSAGE, - data, - }) + sendTurbopackMessage(data) } }