From 01b1c55c828f36e08fc5cfa8a05ac60ffa5b93fb Mon Sep 17 00:00:00 2001 From: Bjorn Lu Date: Mon, 16 Oct 2023 15:20:41 +0800 Subject: [PATCH] feat(vite-node): support import.meta.hot.off for vite 5 (#4315) --- packages/vite-node/src/hmr/hmr.ts | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/packages/vite-node/src/hmr/hmr.ts b/packages/vite-node/src/hmr/hmr.ts index e6c77677b3d2..999fc73a55cb 100644 --- a/packages/vite-node/src/hmr/hmr.ts +++ b/packages/vite-node/src/hmr/hmr.ts @@ -288,6 +288,28 @@ export function createHotContext( addToMap(newListeners) }, + // eslint-disable-next-line @typescript-eslint/prefer-ts-expect-error + // @ts-ignore added in vite 5 + off( + event: T, + cb: (payload: InferCustomEventPayload) => void, + ) { + const removeFromMap = (map: Map) => { + const existing = map.get(event) + if (existing === undefined) + return + + const pruned = existing.filter(l => l !== cb) + if (pruned.length === 0) { + map.delete(event) + return + } + map.set(event, pruned) + } + removeFromMap(maps.customListenersMap) + removeFromMap(newListeners) + }, + send(event: T, data?: InferCustomEventPayload): void { maps.messageBuffer.push(JSON.stringify({ type: 'custom', event, data })) sendMessageBuffer(runner, emitter)