@@ -12,17 +12,45 @@ type WranglerOptions = {
1212 logging ?: "all" | "error" ;
1313} ;
1414
15+ /**
16+ * Prepends CLI flags with `--` so that certain package managers can pass args through to wrangler
17+ * properly.
18+ *
19+ * npm and yarn require `--` to be used, while pnpm and bun require that it is not used.
20+ *
21+ * @param options Build options.
22+ * @param args CLI args.
23+ * @returns Arguments with a passthrough flag injected when needed.
24+ */
25+ function injectPassthroughFlagForArgs ( options : BuildOptions , args : string [ ] ) {
26+ if ( options . packager !== "npm" && options . packager !== "yarn" ) {
27+ return args ;
28+ }
29+
30+ const flagInArgsIndex = args . findIndex ( ( v ) => v . startsWith ( "--" ) ) ;
31+ if ( flagInArgsIndex !== - 1 ) {
32+ args . splice ( flagInArgsIndex , 0 , "--" ) ;
33+ }
34+
35+ return args ;
36+ }
37+
1538export function runWrangler ( options : BuildOptions , args : string [ ] , wranglerOpts : WranglerOptions = { } ) {
1639 const result = spawnSync (
1740 options . packager ,
1841 [
1942 options . packager === "bun" ? "x" : "exec" ,
2043 "wrangler" ,
21- ...args ,
22- wranglerOpts . environment && `--env ${ wranglerOpts . environment } ` ,
23- wranglerOpts . target === "remote" && ! wranglerOpts . excludeRemoteFlag && "--remote" ,
24- wranglerOpts . target === "local" && "--local" ,
25- ] . filter ( ( v ) : v is string => ! ! v ) ,
44+ ...injectPassthroughFlagForArgs (
45+ options ,
46+ [
47+ ...args ,
48+ wranglerOpts . environment && `--env ${ wranglerOpts . environment } ` ,
49+ wranglerOpts . target === "remote" && ! wranglerOpts . excludeRemoteFlag && "--remote" ,
50+ wranglerOpts . target === "local" && "--local" ,
51+ ] . filter ( ( v ) : v is string => ! ! v )
52+ ) ,
53+ ] ,
2654 {
2755 shell : true ,
2856 stdio : wranglerOpts . logging === "error" ? [ "ignore" , "ignore" , "inherit" ] : "inherit" ,
0 commit comments