Skip to content

Commit fd76077

Browse files
fix(void): strip resolve.external from worker environment in Vite plugin
1 parent 8e76767 commit fd76077

2 files changed

Lines changed: 49 additions & 0 deletions

File tree

‎packages/void/src/index.ts‎

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -396,6 +396,22 @@ function createDefaultWorkerEnvironmentPlugin(): Plugin {
396396
};
397397
}
398398

399+
function createWorkerEnvironmentSanitizerPlugin(): Plugin {
400+
return {
401+
name: 'void:worker-environment-sanitizer',
402+
enforce: 'pre',
403+
configResolved(config) {
404+
const resolve = config.environments[DEFAULT_WORKER_ENVIRONMENT_NAME]?.resolve;
405+
if (resolve && 'external' in resolve) {
406+
// Test runners may seed Node externals into every Vite environment.
407+
// Cloudflare Worker environments cannot externalize dependencies, but
408+
// Cloudflare's validator expects the normalized array shape to remain.
409+
resolve.external = [];
410+
}
411+
},
412+
};
413+
}
414+
399415
function createSandboxSdkResolvePlugin(): Plugin {
400416
let resolved: string | undefined;
401417

@@ -1488,6 +1504,7 @@ export function voidPlugin(options?: {
14881504
return [
14891505
createCloudflareBuiltinsExternalPlugin(),
14901506
createDefaultWorkerEnvironmentPlugin(),
1507+
createWorkerEnvironmentSanitizerPlugin(),
14911508
createWranglerCompatPersistPlugin(root, config),
14921509
restartPlugin(),
14931510
bindingWatchPlugin,

‎packages/void/test/unit/plugin-vite-environment.test.ts‎

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,4 +79,36 @@ describe('voidPlugin Vite environments', () => {
7979
},
8080
});
8181
});
82+
83+
it('clears resolve.external from the worker environment configured by test runners', async () => {
84+
const root = createProjectRoot();
85+
vi.spyOn(process, 'cwd').mockReturnValue(root);
86+
87+
const config = await resolveConfig(
88+
{
89+
root,
90+
plugins: [voidPlugin()],
91+
environments: {
92+
void_worker: {
93+
resolve: {
94+
external: ['node:fs'],
95+
conditions: ['workerd'],
96+
},
97+
build: {
98+
emptyOutDir: false,
99+
},
100+
},
101+
},
102+
},
103+
'serve',
104+
'test',
105+
);
106+
107+
expect(config.environments.void_worker.resolve.external).toEqual([]);
108+
expect(config.environments.void_worker.resolve.conditions).toContain('workerd');
109+
expect(config.environments.void_worker.build).toMatchObject({
110+
emptyOutDir: false,
111+
outDir: 'dist/ssr',
112+
});
113+
});
82114
});

0 commit comments

Comments
 (0)