Skip to content

Commit 6b35914

Browse files
committed
fix(dev-server-rollup): await buildStart in serverStart
1 parent 627696e commit 6b35914

File tree

4 files changed

+46
-3
lines changed

4 files changed

+46
-3
lines changed

.changeset/red-tigers-brush.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@web/dev-server-rollup': patch
3+
---
4+
5+
fix: await buildStart in serverStart

packages/dev-server-core/src/test-helpers.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,8 @@ export async function createTestServer(
5555
return { server, port, host: `http://localhost:${port}` };
5656
}
5757

58-
export const timeout = (ms = 0) => new Promise(resolve => setTimeout(resolve, ms));
58+
export const timeout = <T>(ms = 0, value?: T): Promise<T> =>
59+
new Promise(resolve => setTimeout(value ? () => resolve(value) : resolve, ms));
5960

6061
export async function fetchText(url: string, init?: RequestInit) {
6162
const response = await fetch(url, init);

packages/dev-server-rollup/src/rollupAdapter.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ export function rollupAdapter(
106106
transformedOptions = rollupInputOptions;
107107
}
108108
if (typeof rollupPlugin.buildStart === 'function') {
109-
rollupPlugin.buildStart?.call(
109+
await rollupPlugin.buildStart?.call(
110110
rollupPluginContexts.pluginContext,
111111
rollupPluginContexts.normalizedInputOptions,
112112
);

packages/dev-server-rollup/test/node/unit.test.ts

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,47 @@ import { Plugin as RollupPlugin, AcornNode } from 'rollup';
22
import { expect } from 'chai';
33
import path from 'path';
44

5-
import { createTestServer, fetchText, expectIncludes } from './test-helpers';
5+
import { createTestServer, fetchText, expectIncludes, timeout } from './test-helpers';
66
import { fromRollup } from '../../src/index';
77

88
describe('@web/dev-server-rollup', () => {
9+
describe('buildStart', () => {
10+
it('awaits buildStart when starting a server', async () => {
11+
let resolveBuildStartCalled: undefined | ((value: void) => void);
12+
const buildStartCalledPromise = new Promise(resolve => (resolveBuildStartCalled = resolve));
13+
14+
let resolveBuildStart: undefined | ((value: void) => void);
15+
const plugin: RollupPlugin = {
16+
name: 'my-plugin',
17+
buildStart() {
18+
if (resolveBuildStartCalled) {
19+
resolveBuildStartCalled();
20+
}
21+
return new Promise(resolve => (resolveBuildStart = resolve));
22+
},
23+
};
24+
25+
const serverPromise = createTestServer({
26+
plugins: [fromRollup(() => plugin)()],
27+
});
28+
29+
await buildStartCalledPromise;
30+
31+
try {
32+
const res = await Promise.race([serverPromise, timeout(0, 'timeout')]);
33+
expect(res).to.equal('timeout');
34+
if (resolveBuildStart) {
35+
resolveBuildStart();
36+
}
37+
const res2 = await Promise.race([serverPromise, timeout(0, 'timeout')]);
38+
expect(res2).not.to.equal('timeout');
39+
} finally {
40+
const { server } = await serverPromise;
41+
server.stop();
42+
}
43+
});
44+
});
45+
946
describe('resolveId', () => {
1047
it('can resolve imports, returning a string', async () => {
1148
const plugin: RollupPlugin = {

0 commit comments

Comments
 (0)