diff --git a/.changeset/chilly-kings-retire.md b/.changeset/chilly-kings-retire.md new file mode 100644 index 000000000000..4bc17b51f8b5 --- /dev/null +++ b/.changeset/chilly-kings-retire.md @@ -0,0 +1,9 @@ +--- +"create-cloudflare": patch +--- + +Fix regression in C3's `next` template + +[#7676](https://github.com/cloudflare/workers-sdk/pull/7676) switched C3 templates to default to `wrangler.json` instead of `wrangler.toml`. Unfortunately, this unintendedly broke the `next` template, which was still attempting to read `wrangler.toml` specifically. This commit fixes the regression. + +Fixes #7770 diff --git a/packages/create-cloudflare/templates/next/README.md b/packages/create-cloudflare/templates/next/README.md index e5ee722e50c3..dde930666b5e 100644 --- a/packages/create-cloudflare/templates/next/README.md +++ b/packages/create-cloudflare/templates/next/README.md @@ -47,10 +47,10 @@ In order to enable the example: // KV Example: ``` and uncomment the commented lines below it (also uncomment the relevant imports). -- Do the same in the `wrangler.toml` file, where +- Do the same in the `wrangler.json` file, where the comment is: ``` - # KV Example: + // KV Example: ``` - If you're using TypeScript run the `cf-typegen` script to update the `env.d.ts` file: ```bash diff --git a/packages/create-cloudflare/templates/next/c3.ts b/packages/create-cloudflare/templates/next/c3.ts index 71cb7b480c68..9646ee68677c 100644 --- a/packages/create-cloudflare/templates/next/c3.ts +++ b/packages/create-cloudflare/templates/next/c3.ts @@ -26,27 +26,27 @@ const generate = async (ctx: C3Context) => { await runFrameworkGenerator(ctx, [projectName]); - const wranglerToml = readFile(join(getTemplatePath(ctx), "wrangler.toml")); + const wranglerConfig = readFile(join(getTemplatePath(ctx), "wrangler.json")); - // Note: here we add `# KV Example:` to the toml file for the KV example, we don't actually - // include the comment in the template wrangler.toml file just so to keep it identical + // Note: here we add `// KV Example:` to the config file for the KV example, we don't actually + // include the comment in the template wrangler.json file just so to keep it identical // and consistent with that of all the other frameworks // (instead of making it a special case which needs extra care) - const newTomlContent = wranglerToml.replace( - /#\s+\[\[kv_namespaces\]\]\n#\s+binding\s+=\s+"MY_KV_NAMESPACE"\n#\s+id\s+=\s+"[a-zA-Z0-9]+?"/, - ($1) => `# KV Example:\n${$1}`, + const newWranglerConfigContent = wranglerConfig.replace( + /\/\/\s+"kv_namespaces":\s+{\n\/\/\s+"binding":\s+"MY_KV_NAMESPACE",\n\/\/\s+"id":\s+"[a-zA-Z0-9]+?"\n\/\/\s+}/, + ($1) => `// KV Example:\n${$1}`, ); - if (!/# KV Example/.test(newTomlContent)) { + if (!/\/\/ KV Example/.test(newWranglerConfigContent)) { // This should never happen to users, it is a check mostly so that - // if the toml file is changed in a way that breaks the "KV Example" addition + // if the config file is changed in a way that breaks the "KV Example" addition // the C3 Next.js e2e runs will fail with this - throw new Error("Failed to properly generate the wrangler.toml file"); + throw new Error("Failed to properly generate the wrangler.json file"); } - writeFile(join(ctx.project.path, "wrangler.toml"), newTomlContent); + writeFile(join(ctx.project.path, "wrangler.json"), newWranglerConfigContent); - updateStatus("Created wrangler.toml file"); + updateStatus("Created wrangler.json file"); }; const updateNextConfig = (usesTs: boolean) => { diff --git a/packages/create-cloudflare/templates/next/wrangler.json b/packages/create-cloudflare/templates/next/wrangler.json index b89e79ec3a18..08439263a73f 100644 --- a/packages/create-cloudflare/templates/next/wrangler.json +++ b/packages/create-cloudflare/templates/next/wrangler.json @@ -5,4 +5,12 @@ "nodejs_compat" ], "pages_build_output_dir": ".vercel/output/static" + + // Bind a KV Namespace. Use KV as persistent storage for small key-value pairs. + // Docs: https://developers.cloudflare.com/pages/functions/bindings/#kv-namespaces + // + // "kv_namespaces": { + // "binding": "MY_KV_NAMESPACE", + // "id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + // } }