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)