Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/strange-icons-camp.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@opennextjs/cloudflare": patch
---

fix: npm failing to pass args to wrangler
38 changes: 33 additions & 5 deletions packages/cloudflare/src/cli/utils/run-wrangler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,45 @@ type WranglerOptions = {
logging?: "all" | "error";
};

/**
* Prepends CLI flags with `--` so that certain package managers can pass args through to wrangler
* properly.
*
* npm and yarn require `--` to be used, while pnpm and bun require that it is not used.
*
* @param options Build options.
* @param args CLI args.
* @returns Arguments with a passthrough flag injected when needed.
*/
function injectPassthroughFlagForArgs(options: BuildOptions, args: string[]) {
if (options.packager !== "npm" && options.packager !== "yarn") {
return args;
}

const flagInArgsIndex = args.findIndex((v) => v.startsWith("--"));
if (flagInArgsIndex !== -1) {
return [...args.slice(0, flagInArgsIndex), "--", ...args.slice(flagInArgsIndex)];
}

return args;
}

export function runWrangler(options: BuildOptions, args: string[], wranglerOpts: WranglerOptions = {}) {
const result = spawnSync(
options.packager,
[
options.packager === "bun" ? "x" : "exec",
"wrangler",
...args,
wranglerOpts.environment && `--env ${wranglerOpts.environment}`,
wranglerOpts.target === "remote" && !wranglerOpts.excludeRemoteFlag && "--remote",
wranglerOpts.target === "local" && "--local",
].filter((v): v is string => !!v),
...injectPassthroughFlagForArgs(
options,
[
...args,
wranglerOpts.environment && `--env ${wranglerOpts.environment}`,
wranglerOpts.target === "remote" && !wranglerOpts.excludeRemoteFlag && "--remote",
wranglerOpts.target === "local" && "--local",
].filter((v): v is string => !!v)
),
],
{
shell: true,
stdio: wranglerOpts.logging === "error" ? ["ignore", "ignore", "inherit"] : "inherit",
Expand Down