Skip to content

Commit 01061c9

Browse files
committed
ensure hotUpdate returns non-svelte modules, cleanup
1 parent 94ac814 commit 01061c9

File tree

2 files changed

+41
-36
lines changed

2 files changed

+41
-36
lines changed

packages/vite-plugin-svelte/src/plugins/compile.js

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,7 @@ export function compile(api) {
2727
},
2828
transform: {
2929
async handler(code, id) {
30-
// TODO: hack work around access restriction to meta in vite dev
31-
const svelteMeta = Object.entries(this.getModuleInfo(id)?.meta ?? {}).find(
32-
([key]) => key === 'svelte'
33-
)?.[1];
30+
const svelteMeta = this.getModuleInfo(id)?.meta?.svelte;
3431
const cache = api.getEnvironmentCache(this);
3532
const ssr = this.environment.config.consumer === 'server';
3633
const svelteRequest = api.idParser(id, ssr);

packages/vite-plugin-svelte/src/plugins/hot-update.js

Lines changed: 40 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -75,38 +75,49 @@ export function hotUpdate(api) {
7575
transformResultCache.set(id, code);
7676
}
7777
},
78+
hotUpdate: {
79+
order: 'post',
80+
async handler(ctx) {
81+
const svelteRequest = idParser(ctx.file, false, ctx.timestamp);
82+
if (svelteRequest) {
83+
const { modules } = ctx;
84+
const svelteModules = [];
85+
const nonSvelteModules = [];
86+
for (const mod of modules) {
87+
if (transformResultCache.has(mod.id)) {
88+
svelteModules.push(mod);
89+
} else {
90+
nonSvelteModules.push(mod);
91+
}
92+
}
7893

79-
async hotUpdate(ctx) {
80-
const svelteRequest = idParser(ctx.file, false, ctx.timestamp);
81-
if (svelteRequest) {
82-
const { modules } = ctx;
83-
const svelteModules = modules.filter((m) => transformResultCache.has(m.id));
84-
if (svelteModules.length === 0) {
85-
return; // nothing to do for us, unlikely to happen
86-
}
87-
const affectedModules = [];
88-
const prevResults = svelteModules.map((m) => transformResultCache.get(m.id));
89-
for (let i = 0; i < svelteModules.length; i++) {
90-
const mod = svelteModules[i];
91-
const prev = prevResults[i];
92-
await this.environment.transformRequest(mod.url);
93-
const next = transformResultCache.get(mod.id);
94-
if (!hasCodeChanged(prev, next, mod.id)) {
95-
log.debug(
96-
`skipping hot update for ${mod.id} because result is unchanged`,
97-
undefined,
98-
'hmr'
99-
);
100-
continue;
94+
if (svelteModules.length === 0) {
95+
return; // nothing to do for us
10196
}
102-
affectedModules.push(mod);
97+
const affectedModules = [];
98+
const prevResults = svelteModules.map((m) => transformResultCache.get(m.id));
99+
for (let i = 0; i < svelteModules.length; i++) {
100+
const mod = svelteModules[i];
101+
const prev = prevResults[i];
102+
await this.environment.transformRequest(mod.url);
103+
const next = transformResultCache.get(mod.id);
104+
if (hasCodeChanged(prev, next, mod.id)) {
105+
affectedModules.push(mod);
106+
} else {
107+
log.debug(
108+
`skipping hot update for ${mod.id} because result is unchanged`,
109+
undefined,
110+
'hmr'
111+
);
112+
}
113+
}
114+
log.debug(
115+
`hotUpdate for ${svelteRequest.id} result: [${affectedModules.map((m) => m.id).join(', ')}]`,
116+
undefined,
117+
'hmr'
118+
);
119+
return [...affectedModules, ...nonSvelteModules];
103120
}
104-
log.debug(
105-
`hotUpdate for ${svelteRequest.id} result: [${affectedModules.map((m) => m.id).join(', ')}]`,
106-
undefined,
107-
'hmr'
108-
);
109-
return affectedModules;
110121
}
111122
}
112123
};
@@ -123,13 +134,10 @@ export function hotUpdate(api) {
123134
function hasCodeChanged(prev, next, id) {
124135
const isStrictEqual = nullSafeEqual(prev, next);
125136
if (isStrictEqual) {
126-
//console.log('strict equal ',{id,prev,next})
127137
return false;
128138
}
129-
////console.log({normalizedNext,normalizedPrev})
130139
const isLooseEqual = nullSafeEqual(normalize(prev), normalize(next));
131140
if (!isStrictEqual && isLooseEqual) {
132-
////console.log('loose equal ',{filename,prev,next})
133141
log.debug(
134142
`ignoring compiler output change for ${id} as it is equal to previous output after normalization`,
135143
undefined,

0 commit comments

Comments
 (0)