From f7b4e508f481e90a24c64c8320d97c9c8e856749 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Barr=C3=A9?= Date: Sun, 20 Nov 2022 23:10:29 +0100 Subject: [PATCH 1/5] chore: Drop local variable --- packages/vite/src/client/client.ts | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/vite/src/client/client.ts b/packages/vite/src/client/client.ts index bfa0c44231cada..e5e160ac78c180 100644 --- a/packages/vite/src/client/client.ts +++ b/packages/vite/src/client/client.ts @@ -423,10 +423,9 @@ async function fetchUpdate({ ) if (isSelfUpdate || qualifiedCallbacks.length > 0) { - const dep = acceptedPath - const disposer = disposeMap.get(dep) - if (disposer) await disposer(dataMap.get(dep)) - const [path, query] = dep.split(`?`) + const disposer = disposeMap.get(acceptedPath) + if (disposer) await disposer(dataMap.get(acceptedPath)) + const [path, query] = acceptedPath.split(`?`) try { const newMod: ModuleNamespace = await import( /* @vite-ignore */ @@ -436,9 +435,9 @@ async function fetchUpdate({ query ? `&${query}` : '' }` ) - moduleMap.set(dep, newMod) + moduleMap.set(acceptedPath, newMod) } catch (e) { - warnFailedFetch(e, dep) + warnFailedFetch(e, acceptedPath) } } From ede64a46f98073a817857835b7190ef447bbb38d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Barr=C3=A9?= Date: Sun, 20 Nov 2022 23:11:24 +0100 Subject: [PATCH 2/5] Rename to avoid path shadow --- packages/vite/src/client/client.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/vite/src/client/client.ts b/packages/vite/src/client/client.ts index e5e160ac78c180..6a78f867eda6ea 100644 --- a/packages/vite/src/client/client.ts +++ b/packages/vite/src/client/client.ts @@ -425,12 +425,12 @@ async function fetchUpdate({ if (isSelfUpdate || qualifiedCallbacks.length > 0) { const disposer = disposeMap.get(acceptedPath) if (disposer) await disposer(dataMap.get(acceptedPath)) - const [path, query] = acceptedPath.split(`?`) + const [acceptedPathWithoutQuery, query] = acceptedPath.split(`?`) try { const newMod: ModuleNamespace = await import( /* @vite-ignore */ base + - path.slice(1) + + acceptedPathWithoutQuery.slice(1) + `?${explicitImportRequired ? 'import&' : ''}t=${timestamp}${ query ? `&${query}` : '' }` From 85ba0e4a1c1fa8f9700633d824d2ade3bc4fc29e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Barr=C3=A9?= Date: Sun, 20 Nov 2022 23:13:17 +0100 Subject: [PATCH 3/5] Replace single entry map by let --- docs/guide/api-hmr.md | 3 ++- packages/vite/src/client/client.ts | 7 +++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/guide/api-hmr.md b/docs/guide/api-hmr.md index 0704b0cc1cfa71..cfca9780e61d61 100644 --- a/docs/guide/api-hmr.md +++ b/docs/guide/api-hmr.md @@ -94,7 +94,8 @@ if (import.meta.hot) { import.meta.hot.accept( ['./foo.js', './bar.js'], ([newFooModule, newBarModule]) => { - // the callback receives the updated modules in an Array + // The callback receives an array where only the updated module is non null + // If the update was not succeful (syntax error for ex.), the array is empty } ) } diff --git a/packages/vite/src/client/client.ts b/packages/vite/src/client/client.ts index 6a78f867eda6ea..61c98e28799b6e 100644 --- a/packages/vite/src/client/client.ts +++ b/packages/vite/src/client/client.ts @@ -414,7 +414,7 @@ async function fetchUpdate({ return } - const moduleMap = new Map() + let fetchedModule: ModuleNamespace | undefined const isSelfUpdate = path === acceptedPath // determine the qualified callbacks before we re-import the modules @@ -427,7 +427,7 @@ async function fetchUpdate({ if (disposer) await disposer(dataMap.get(acceptedPath)) const [acceptedPathWithoutQuery, query] = acceptedPath.split(`?`) try { - const newMod: ModuleNamespace = await import( + fetchedModule = await import( /* @vite-ignore */ base + acceptedPathWithoutQuery.slice(1) + @@ -435,7 +435,6 @@ async function fetchUpdate({ query ? `&${query}` : '' }` ) - moduleMap.set(acceptedPath, newMod) } catch (e) { warnFailedFetch(e, acceptedPath) } @@ -443,7 +442,7 @@ async function fetchUpdate({ return () => { for (const { deps, fn } of qualifiedCallbacks) { - fn(deps.map((dep) => moduleMap.get(dep))) + fn(deps.map((dep) => (dep === acceptedPath ? fetchedModule : undefined))) } const loggedPath = isSelfUpdate ? path : `${acceptedPath} via ${path}` console.debug(`[vite] hot updated: ${loggedPath}`) From ffef7c6f44f5df2109eea3496cef909b301cbbdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Barr=C3=A9?= Date: Sun, 20 Nov 2022 23:15:52 +0100 Subject: [PATCH 4/5] Merge acceptExports declarations --- packages/vite/types/hot.d.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/vite/types/hot.d.ts b/packages/vite/types/hot.d.ts index 1a67a9087a6e68..76d054c3125651 100644 --- a/packages/vite/types/hot.d.ts +++ b/packages/vite/types/hot.d.ts @@ -15,10 +15,9 @@ export interface ViteHotContext { cb: (mods: Array) => void ): void - acceptExports(exportNames: string | readonly string[]): void acceptExports( exportNames: string | readonly string[], - cb: (mod: ModuleNamespace | undefined) => void + cb?: (mod: ModuleNamespace | undefined) => void ): void dispose(cb: (data: any) => void): void From 57f60d409debdfe8834d5c02aea3feb6cedb2ec1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Barr=C3=A9?= Date: Mon, 21 Nov 2022 00:09:05 +0100 Subject: [PATCH 5/5] acceptDeps consistent callback usage --- packages/vite/src/client/client.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/vite/src/client/client.ts b/packages/vite/src/client/client.ts index 61c98e28799b6e..18ee738f36d4e1 100644 --- a/packages/vite/src/client/client.ts +++ b/packages/vite/src/client/client.ts @@ -525,10 +525,10 @@ export function createHotContext(ownerPath: string): ViteHotContext { accept(deps?: any, callback?: any) { if (typeof deps === 'function' || !deps) { // self-accept: hot.accept(() => {}) - acceptDeps([ownerPath], ([mod]) => deps && deps(mod)) + acceptDeps([ownerPath], ([mod]) => deps?.(mod)) } else if (typeof deps === 'string') { // explicit deps - acceptDeps([deps], ([mod]) => callback && callback(mod)) + acceptDeps([deps], ([mod]) => callback?.(mod)) } else if (Array.isArray(deps)) { acceptDeps(deps, callback) } else { @@ -538,8 +538,8 @@ export function createHotContext(ownerPath: string): ViteHotContext { // export names (first arg) are irrelevant on the client side, they're // extracted in the server for propagation - acceptExports(_: string | readonly string[], callback?: any) { - acceptDeps([ownerPath], callback && (([mod]) => callback(mod))) + acceptExports(_, callback) { + acceptDeps([ownerPath], ([mod]) => callback?.(mod)) }, dispose(cb) {