File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff 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+
399415function 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 ,
Original file line number Diff line number Diff 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} ) ;
You can’t perform that action at this time.
0 commit comments