Skip to content

Commit b31faab

Browse files
authored
fix: await client buildStart on top level buildStart (#19624)
1 parent dc5395a commit b31faab

File tree

2 files changed

+70
-7
lines changed

2 files changed

+70
-7
lines changed

packages/vite/src/node/server/pluginContainer.ts

+6-7
Original file line numberDiff line numberDiff line change
@@ -1084,19 +1084,18 @@ class PluginContainer {
10841084
// buildStart is called per environment for a plugin with the perEnvironmentStartEndDuring dev flag
10851085

10861086
async buildStart(_options?: InputOptions): Promise<void> {
1087-
;(this.environments.client as DevEnvironment).pluginContainer.buildStart(
1088-
_options,
1089-
)
1087+
return (
1088+
this.environments.client as DevEnvironment
1089+
).pluginContainer.buildStart(_options)
10901090
}
10911091

10921092
async watchChange(
10931093
id: string,
10941094
change: { event: 'create' | 'update' | 'delete' },
10951095
): Promise<void> {
1096-
;(this.environments.client as DevEnvironment).pluginContainer.watchChange(
1097-
id,
1098-
change,
1099-
)
1096+
return (
1097+
this.environments.client as DevEnvironment
1098+
).pluginContainer.watchChange(id, change)
11001099
}
11011100

11021101
async resolveId(

packages/vite/src/node/ssr/__tests__/ssrLoadModule.spec.ts

+64
Original file line numberDiff line numberDiff line change
@@ -315,3 +315,67 @@ test('named exports overwrite export all', async () => {
315315
}
316316
`)
317317
})
318+
319+
test('buildStart before transform', async () => {
320+
const fn = vi.fn()
321+
const server = await createServer({
322+
configFile: false,
323+
root,
324+
logLevel: 'error',
325+
plugins: [
326+
{
327+
name: 'test-plugin',
328+
async buildStart() {
329+
fn('buildStart:in')
330+
await new Promise((r) => setTimeout(r, 200))
331+
fn('buildStart:out')
332+
},
333+
resolveId(source) {
334+
if (source === 'virtual:test') {
335+
fn('resolveId')
336+
return '\0' + source
337+
}
338+
},
339+
load(id) {
340+
if (id === '\0virtual:test') {
341+
fn('load')
342+
return `export default 'ok'`
343+
}
344+
},
345+
transform(code, id) {
346+
if (id === '\0virtual:test') {
347+
fn('transform')
348+
return code
349+
}
350+
},
351+
},
352+
],
353+
})
354+
onTestFinished(() => server.close())
355+
await server.pluginContainer.buildStart({})
356+
357+
const mod = await server.ssrLoadModule('virtual:test')
358+
expect(mod.default).toBe('ok')
359+
expect(fn.mock.calls).toMatchInlineSnapshot(`
360+
[
361+
[
362+
"buildStart:in",
363+
],
364+
[
365+
"buildStart:out",
366+
],
367+
[
368+
"resolveId",
369+
],
370+
[
371+
"resolveId",
372+
],
373+
[
374+
"load",
375+
],
376+
[
377+
"transform",
378+
],
379+
]
380+
`)
381+
})

0 commit comments

Comments
 (0)