Skip to content

Commit e162b62

Browse files
committed
Restart dev server when Worker exports change
1 parent 26fb4af commit e162b62

File tree

2 files changed

+39
-1
lines changed

2 files changed

+39
-1
lines changed

packages/vite-plugin-cloudflare/src/plugins/dev.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import {
1313
import { getDockerPath } from "../containers";
1414
import { assertIsNotPreview } from "../context";
1515
import {
16+
compareExportTypes,
1617
compareWorkerNameToExportTypesMap,
1718
getCurrentWorkerNameToExportTypesMap,
1819
} from "../export-types";
@@ -91,6 +92,39 @@ export const devPlugin = createPlugin("dev", (ctx) => {
9192
);
9293
}
9394

95+
for (const environmentName of ctx.resolvedPluginConfig.environmentNameToWorkerMap.keys()) {
96+
const environment = viteDevServer.environments[environmentName];
97+
assert(
98+
environment,
99+
`Expected environment "${environmentName}" to be defined`
100+
);
101+
environment.hot.on(
102+
"vite-plugin-cloudflare:worker-export-types",
103+
async (newExportTypes) => {
104+
const workerConfig = ctx.getWorkerConfig(environmentName);
105+
assert(
106+
workerConfig,
107+
`Expected workerConfig for environment "${environmentName}" to be defined`
108+
);
109+
const oldExportTypes = ctx.workerNameToExportTypesMap.get(
110+
workerConfig.name
111+
);
112+
assert(
113+
oldExportTypes,
114+
`Expected export types for Worker "${workerConfig.name}" to be defined`
115+
);
116+
const hasChanged = compareExportTypes(
117+
oldExportTypes,
118+
newExportTypes
119+
);
120+
121+
if (hasChanged) {
122+
await viteDevServer.restart();
123+
}
124+
}
125+
);
126+
}
127+
94128
const entryWorkerConfig = ctx.entryWorkerConfig;
95129
assert(entryWorkerConfig, `No entry Worker config`);
96130

packages/vite-plugin-cloudflare/src/plugins/virtual-modules.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,15 @@ export const virtualModulesPlugin = createPlugin("virtual-modules", (ctx) => {
3535

3636
return `
3737
${nodeJsCompat ? nodeJsCompat.injectGlobalCode() : ""}
38+
import { getExportTypes } from "${VIRTUAL_EXPORT_TYPES}";
3839
import * as mod from "${VIRTUAL_USER_ENTRY}";
3940
export * from "${VIRTUAL_USER_ENTRY}";
4041
export default mod.default ?? {};
4142
if (import.meta.hot) {
42-
import.meta.hot.accept();
43+
import.meta.hot.accept((module) => {
44+
const exportTypes = getExportTypes(module);
45+
import.meta.hot.send("vite-plugin-cloudflare:worker-export-types", exportTypes);
46+
});
4347
}
4448
`;
4549
}

0 commit comments

Comments
 (0)