diff --git a/.changeset/brave-lights-run.md b/.changeset/brave-lights-run.md new file mode 100644 index 000000000000..e3a3a46237a3 --- /dev/null +++ b/.changeset/brave-lights-run.md @@ -0,0 +1,10 @@ +--- +"create-cloudflare": minor +--- + +Add placeholder substitution in wrangler config files. + +When c3 updates the config file: + +- The value `""` is replaced with the worker name. +- The value `""` is replaced with the latest worked compatibility date. diff --git a/packages/create-cloudflare/src/deploy.ts b/packages/create-cloudflare/src/deploy.ts index c27dc7fb80f4..7221dc2b0e17 100644 --- a/packages/create-cloudflare/src/deploy.ts +++ b/packages/create-cloudflare/src/deploy.ts @@ -13,9 +13,9 @@ import TOML from "smol-toml"; import { isInsideGitRepo } from "./git"; import { chooseAccount, wranglerLogin } from "./wrangler/accounts"; import { - readWranglerJson, + readWranglerJsonOrJsonc, readWranglerToml, - wranglerJsonExists, + wranglerJsonOrJsoncExists, } from "./wrangler/config"; import type { C3Context } from "types"; @@ -81,8 +81,8 @@ const isDeployable = async (ctx: C3Context) => { }; const readWranglerConfig = (ctx: C3Context) => { - if (wranglerJsonExists(ctx)) { - return readWranglerJson(ctx); + if (wranglerJsonOrJsoncExists(ctx)) { + return readWranglerJsonOrJsonc(ctx); } const wranglerTomlStr = readWranglerToml(ctx); return TOML.parse(wranglerTomlStr.replace(/\r\n/g, "\n")); diff --git a/packages/create-cloudflare/src/helpers/__tests__/json.test.ts b/packages/create-cloudflare/src/helpers/__tests__/json.test.ts index fa27ca985421..41e4b0bd48f5 100644 --- a/packages/create-cloudflare/src/helpers/__tests__/json.test.ts +++ b/packages/create-cloudflare/src/helpers/__tests__/json.test.ts @@ -30,6 +30,35 @@ describe("json helpers", () => { expect(mockReadFile).toHaveBeenCalledWith("/path/to/file.json"); expect(result).toEqual({ name: "test" }); }); + + test("using a reviver function", () => { + mockReadFile.mockReturnValue( + JSON.stringify({ + name: "test", + rootValue: "", + keep: "", + nested: { + value: "", + list: [[""], ""], + }, + }), + ); + + const result = readJSONWithComments( + "/path/to/file.json", + (_key, value) => (value === "" ? "REPLACED" : value), + ); + expect(mockReadFile).toHaveBeenCalledWith("/path/to/file.json"); + expect(result).toEqual({ + name: "test", + rootValue: "REPLACED", + keep: "", + nested: { + value: "REPLACED", + list: [["REPLACED"], ""], + }, + }); + }); }); describe("writeJSONWithComments", () => { diff --git a/packages/create-cloudflare/src/helpers/json.ts b/packages/create-cloudflare/src/helpers/json.ts index d5485b1bca19..77c0d2c61e53 100644 --- a/packages/create-cloudflare/src/helpers/json.ts +++ b/packages/create-cloudflare/src/helpers/json.ts @@ -5,16 +5,21 @@ import type { CommentObject, CommentSymbol, CommentToken, + Reviver, } from "comment-json"; /** * Reads a JSON file and preserves comments. * @param jsonFilePath - The path to the JSON file. + * @param reviver A function that transforms the results. This function is called for each member of the object. * @returns The parsed JSON object with comments. */ -export function readJSONWithComments(jsonFilePath: string): CommentObject { +export function readJSONWithComments( + jsonFilePath: string, + reviver?: Reviver, +): CommentObject { const jsonString = readFile(jsonFilePath); - const jsonObject = parse(jsonString) as unknown as CommentObject; + const jsonObject = parse(jsonString, reviver) as unknown as CommentObject; return jsonObject; } diff --git a/packages/create-cloudflare/src/workers.ts b/packages/create-cloudflare/src/workers.ts index 9e0e389e8937..a09cc5ae593d 100644 --- a/packages/create-cloudflare/src/workers.ts +++ b/packages/create-cloudflare/src/workers.ts @@ -10,9 +10,9 @@ import { installPackages } from "helpers/packages"; import * as jsonc from "jsonc-parser"; import TOML from "smol-toml"; import { - readWranglerJson, + readWranglerJsonOrJsonc, readWranglerToml, - wranglerJsonExists, + wranglerJsonOrJsoncExists, wranglerTomlExists, } from "./wrangler/config"; import type { C3Context, PackageJson } from "types"; @@ -62,8 +62,8 @@ async function generateWorkersTypes(ctx: C3Context, npm: string) { const maybeInstallNodeTypes = async (ctx: C3Context, npm: string) => { let parsedConfig: Record = {}; - if (wranglerJsonExists(ctx)) { - parsedConfig = readWranglerJson(ctx); + if (wranglerJsonOrJsoncExists(ctx)) { + parsedConfig = readWranglerJsonOrJsonc(ctx); } else if (wranglerTomlExists(ctx)) { const wranglerTomlStr = readWranglerToml(ctx); parsedConfig = TOML.parse(wranglerTomlStr); diff --git a/packages/create-cloudflare/src/wrangler/__tests__/config.test.ts b/packages/create-cloudflare/src/wrangler/__tests__/config.test.ts index 6ae00bbe8949..94fea2067a54 100644 --- a/packages/create-cloudflare/src/wrangler/__tests__/config.test.ts +++ b/packages/create-cloudflare/src/wrangler/__tests__/config.test.ts @@ -30,11 +30,14 @@ describe("update wrangler config", () => { ); }); - test("placeholder replacement", async () => { + test("placeholder replacement ``", async () => { const toml = [ `name = ""`, `main = "src/index.ts"`, `compatibility_date = ""`, + `[[services]]`, + `binding = "SELF_SERVICE"`, + `service = ""`, ].join("\n"); vi.mocked(readFile).mockReturnValue(toml); @@ -49,6 +52,10 @@ describe("update wrangler config", () => { main = "src/index.ts" compatibility_date = "2024-01-17" + [[services]] + binding = "SELF_SERVICE" + service = "test" + [observability] enabled = true @@ -87,7 +94,71 @@ describe("update wrangler config", () => { `); }); - test("placeholder replacement (json)", async () => { + test("placeholder replacement", async () => { + const toml = [ + `name = ""`, + `main = "src/index.ts"`, + `compatibility_date = ""`, + `[[services]]`, + `binding = "SELF_SERVICE"`, + `service = ""`, + ].join("\n"); + vi.mocked(readFile).mockReturnValue(toml); + + await updateWranglerConfig(ctx); + + const newToml = vi.mocked(writeFile).mock.calls[0][1]; + expect(newToml).toMatchInlineSnapshot(` + "#:schema node_modules/wrangler/config-schema.json + # For more details on how to configure Wrangler, refer to: + # https://developers.cloudflare.com/workers/wrangler/configuration/ + name = "test" + main = "src/index.ts" + compatibility_date = "2024-01-17" + + [[services]] + binding = "SELF_SERVICE" + service = "test" + + [observability] + enabled = true + + # Smart Placement + # Docs: https://developers.cloudflare.com/workers/configuration/smart-placement/#smart-placement + # [placement] + # mode = "smart" + + ### + # Bindings + # Bindings allow your Worker to interact with resources on the Cloudflare Developer Platform, including + # databases, object storage, AI inference, real-time communication and more. + # https://developers.cloudflare.com/workers/runtime-apis/bindings/ + ### + + # Environment Variables + # https://developers.cloudflare.com/workers/wrangler/configuration/#environment-variables + # [vars] + # MY_VARIABLE = "production_value" + + # Note: Use secrets to store sensitive data. + # https://developers.cloudflare.com/workers/configuration/secrets/ + + # Static Assets + # https://developers.cloudflare.com/workers/static-assets/binding/ + # [assets] + # directory = "./public/" + # binding = "ASSETS" + + # Service Bindings (communicate between multiple Workers) + # https://developers.cloudflare.com/workers/wrangler/configuration/#service-bindings + # [[services]] + # binding = "MY_SERVICE" + # service = "my-service" + " + `); + }); + + test("placeholder replacement `` (json)", async () => { vi.mocked(existsSync).mockImplementationOnce((f) => (f as string).endsWith(".json"), ); @@ -95,6 +166,85 @@ describe("update wrangler config", () => { name: "", main: "src/index.ts", compatibility_date: "", + services: [ + { + binding: "SELF_SERVICE", + service: "", + }, + ], + }); + vi.mocked(readFile).mockReturnValueOnce(json); + + await updateWranglerConfig(ctx); + + const newConfig = vi.mocked(writeFile).mock.calls[0][1]; + expect(newConfig).toMatchInlineSnapshot(` + "/** + * For more details on how to configure Wrangler, refer to: + * https://developers.cloudflare.com/workers/wrangler/configuration/ + */ + { + "$schema": "node_modules/wrangler/config-schema.json", + "name": "test", + "main": "src/index.ts", + "compatibility_date": "2024-01-17", + "services": [ + { + "binding": "SELF_SERVICE", + "service": "test" + } + ], + "observability": { + "enabled": true + } + /** + * Smart Placement + * Docs: https://developers.cloudflare.com/workers/configuration/smart-placement/#smart-placement + */ + // "placement": { "mode": "smart" } + /** + * Bindings + * Bindings allow your Worker to interact with resources on the Cloudflare Developer Platform, including + * databases, object storage, AI inference, real-time communication and more. + * https://developers.cloudflare.com/workers/runtime-apis/bindings/ + */ + /** + * Environment Variables + * https://developers.cloudflare.com/workers/wrangler/configuration/#environment-variables + */ + // "vars": { "MY_VARIABLE": "production_value" } + /** + * Note: Use secrets to store sensitive data. + * https://developers.cloudflare.com/workers/configuration/secrets/ + */ + /** + * Static Assets + * https://developers.cloudflare.com/workers/static-assets/binding/ + */ + // "assets": { "directory": "./public/", "binding": "ASSETS" } + /** + * Service Bindings (communicate between multiple Workers) + * https://developers.cloudflare.com/workers/wrangler/configuration/#service-bindings + */ + // "services": [{ "binding": "MY_SERVICE", "service": "my-service" }] + }" + `); + }); + + test("placeholder replacement (json)", async () => { + vi.mocked(existsSync).mockImplementationOnce((f) => + (f as string).endsWith(".json"), + ); + const json = JSON.stringify({ + name: "", + main: "src/index.ts", + compatibility_date: "", + services: [ + { + binding: "SELF_SERVICE", + service: "", + }, + ], }); vi.mocked(readFile).mockReturnValueOnce(json); @@ -111,6 +261,12 @@ describe("update wrangler config", () => { "name": "test", "main": "src/index.ts", "compatibility_date": "2024-01-17", + "services": [ + { + "binding": "SELF_SERVICE", + "service": "test" + } + ], "observability": { "enabled": true } diff --git a/packages/create-cloudflare/src/wrangler/config.ts b/packages/create-cloudflare/src/wrangler/config.ts index 02855639265f..c44bcbb5868d 100644 --- a/packages/create-cloudflare/src/wrangler/config.ts +++ b/packages/create-cloudflare/src/wrangler/config.ts @@ -10,16 +10,36 @@ import { writeJSONWithComments, } from "helpers/json"; import TOML from "smol-toml"; -import type { CommentObject } from "comment-json"; +import type { CommentObject, Reviver } from "comment-json"; import type { C3Context } from "types"; /** - * Update the `wrangler.(toml|json|jsonc)` file for this project by setting the name - * to the selected project name and adding the latest compatibility date. + * Update the `wrangler.(toml|json|jsonc)` file for this project by: + * + * - setting the `name` to the passed project name + * - adding the latest compatibility date when no valid one is present + * - enabling observability + * - adding comments with links to documentation for common configuration options + * - substituting placeholders with actual values + * - `` with the project name + * - `` with the max compatibility date of the installed worked + * + * If both `wrangler.toml` and `wrangler.json`/`wrangler.jsonc` are present, only + * the `wrangler.json`/`wrangler.jsonc` file will be updated. */ export const updateWranglerConfig = async (ctx: C3Context) => { - if (wranglerJsonExists(ctx)) { - let wranglerJson = readWranglerJson(ctx); + // Placeholders to replace in the wrangler config files + const substitutions: Record = { + "": ctx.project.name, + "": await getWorkerdCompatibilityDate(), + }; + + if (wranglerJsonOrJsoncExists(ctx)) { + let wranglerJson = readWranglerJsonOrJsonc(ctx, (_key, value) => + typeof value === "string" && value in substitutions + ? substitutions[value] + : value, + ); // Put the schema at the top of the file wranglerJson = insertJSONProperty( @@ -32,7 +52,7 @@ export const updateWranglerConfig = async (ctx: C3Context) => { wranglerJson = appendJSONProperty( wranglerJson, "compatibility_date", - await getCompatibilityDate(wranglerJson), + await getCompatibilityDate(wranglerJson.compatibility_date), ); wranglerJson = appendJSONProperty(wranglerJson, "observability", { enabled: true, @@ -70,23 +90,27 @@ export const updateWranglerConfig = async (ctx: C3Context) => { }, ]); - writeWranglerJson(ctx, wranglerJson); + writeWranglerJsonOrJsonc(ctx, wranglerJson); addVscodeConfig(ctx); } else if (wranglerTomlExists(ctx)) { - const wranglerTomlStr = readWranglerToml(ctx); - const parsed = TOML.parse(wranglerTomlStr); - parsed.name = ctx.project.name; - parsed["compatibility_date"] = await getCompatibilityDate(parsed); - parsed["observability"] ??= { enabled: true }; + let strToml = readWranglerToml(ctx); - const comment = `#:schema node_modules/wrangler/config-schema.json\n# For more details on how to configure Wrangler, refer to:\n# https://developers.cloudflare.com/workers/wrangler/configuration/\n`; + for (const [key, value] of Object.entries(substitutions)) { + strToml = strToml.replaceAll(key, value); + } - const stringified = comment + TOML.stringify(parsed); + const wranglerToml = TOML.parse(strToml); + wranglerToml.name = ctx.project.name; + wranglerToml.compatibility_date = await getCompatibilityDate( + wranglerToml.compatibility_date, + ); + wranglerToml.observability ??= { enabled: true }; writeWranglerToml( ctx, - stringified + - ` + `#:schema node_modules/wrangler/config-schema.json +# For more details on how to configure Wrangler, refer to:\n# https://developers.cloudflare.com/workers/wrangler/configuration/ +${TOML.stringify(wranglerToml)} # Smart Placement # Docs: https://developers.cloudflare.com/workers/configuration/smart-placement/#smart-placement # [placement] @@ -140,8 +164,8 @@ export const wranglerTomlExists = (ctx: C3Context) => { return existsSync(wranglerTomlPath); }; -/** Checks for wrangler.json and wrangler.jsonc */ -export const wranglerJsonExists = (ctx: C3Context) => { +/** Checks for an existing `wrangler.json` or `wrangler.jsonc` */ +export const wranglerJsonOrJsoncExists = (ctx: C3Context) => { const wranglerJsonPath = getWranglerJsonPath(ctx); const wranglerJsoncPath = getWranglerJsoncPath(ctx); return existsSync(wranglerJsonPath) || existsSync(wranglerJsoncPath); @@ -152,13 +176,25 @@ export const readWranglerToml = (ctx: C3Context) => { return readFile(wranglerTomlPath); }; -export const readWranglerJson = (ctx: C3Context) => { +/** + * Reads the JSON configuration file for this project. + * + * If both `wrangler.json` and `wrangler.jsonc` are present, `wrangler.json` will be read. + * + * @param ctx The C3 context. + * @param reviver A function that transforms the results. This function is called for each member of the object. + * @returns The parsed JSON object with comments. + */ +export const readWranglerJsonOrJsonc = ( + ctx: C3Context, + reviver?: Reviver, +): CommentObject => { const wranglerJsonPath = getWranglerJsonPath(ctx); if (existsSync(wranglerJsonPath)) { - return readJSONWithComments(wranglerJsonPath); + return readJSONWithComments(wranglerJsonPath, reviver); } const wranglerJsoncPath = getWranglerJsoncPath(ctx); - return readJSONWithComments(wranglerJsoncPath); + return readJSONWithComments(wranglerJsoncPath, reviver); }; export const writeWranglerToml = (ctx: C3Context, contents: string) => { @@ -166,7 +202,16 @@ export const writeWranglerToml = (ctx: C3Context, contents: string) => { return writeFile(wranglerTomlPath, contents); }; -export const writeWranglerJson = (ctx: C3Context, config: CommentObject) => { +/** + * Writes the passed JSON object as the configuration file for this project. + * + * If there is an existing `wrangler.json` file, it will be overwritten. + * If not, `wrangler.jsonc` will be created/overwritten. + * + * @param ctx The C3 context. + * @param config The JSON object (with comment properties) to write. + */ +const writeWranglerJsonOrJsonc = (ctx: C3Context, config: CommentObject) => { const wranglerJsonPath = getWranglerJsonPath(ctx); if (existsSync(wranglerJsonPath)) { return writeJSONWithComments(wranglerJsonPath, config); @@ -193,16 +238,24 @@ export const addVscodeConfig = (ctx: C3Context) => { }); }; -async function getCompatibilityDate>( - config: T, -) { +/** + * Gets the compatibility date to use. + * + * If the tentative date is valid, it is returned. Otherwise the latest workerd date is used. + * + * @param tentativeDate A tentative compatibility date, usually from wrangler config. + * @returns The compatibility date to use in the form "YYYY-MM-DD" + */ +async function getCompatibilityDate(tentativeDate: unknown): Promise { const validCompatDateRe = /^\d{4}-\d{2}-\d{2}$/m; if ( - typeof config["compatibility_date"] === "string" && - config["compatibility_date"].match(validCompatDateRe) + typeof tentativeDate === "string" && + tentativeDate.match(validCompatDateRe) ) { - // If the compat date is already a valid one, leave it since it may be there for a specific compat reason - return config["compatibility_date"]; + // Use the tentative date when it is valid. + // It may be there for a specific compat reason + return tentativeDate; } + // Fallback to the latest workerd date return await getWorkerdCompatibilityDate(); } diff --git a/packages/create-cloudflare/templates/analog/templates/wrangler.jsonc b/packages/create-cloudflare/templates/analog/templates/wrangler.jsonc index 5e096c4f0c0a..a572f1252473 100644 --- a/packages/create-cloudflare/templates/analog/templates/wrangler.jsonc +++ b/packages/create-cloudflare/templates/analog/templates/wrangler.jsonc @@ -1,6 +1,6 @@ { - "name": "", - "compatibility_date": "", + "name": "", + "compatibility_date": "", "main": "dist/analog/server/index.mjs", "assets": { "binding": "ASSETS", diff --git a/packages/create-cloudflare/templates/angular/pages/templates/wrangler.jsonc b/packages/create-cloudflare/templates/angular/pages/templates/wrangler.jsonc index 61c73b85f831..0c4c1f831912 100644 --- a/packages/create-cloudflare/templates/angular/pages/templates/wrangler.jsonc +++ b/packages/create-cloudflare/templates/angular/pages/templates/wrangler.jsonc @@ -1,5 +1,5 @@ { - "name": "", - "compatibility_date": "", + "name": "", + "compatibility_date": "", "pages_build_output_dir": "./dist/cloudflare" } diff --git a/packages/create-cloudflare/templates/angular/workers/templates/wrangler.jsonc b/packages/create-cloudflare/templates/angular/workers/templates/wrangler.jsonc index 7d63ed5c8727..6e0be53c5eb5 100644 --- a/packages/create-cloudflare/templates/angular/workers/templates/wrangler.jsonc +++ b/packages/create-cloudflare/templates/angular/workers/templates/wrangler.jsonc @@ -1,7 +1,7 @@ { - "name": "", + "name": "", "main": "./dist/server/server.mjs", - "compatibility_date": "", + "compatibility_date": "", "assets": { "binding": "ASSETS", "directory": "./dist/browser" diff --git a/packages/create-cloudflare/templates/astro/pages/templates/js/wrangler.jsonc b/packages/create-cloudflare/templates/astro/pages/templates/js/wrangler.jsonc index f1dde41a1b26..a41c367db016 100644 --- a/packages/create-cloudflare/templates/astro/pages/templates/js/wrangler.jsonc +++ b/packages/create-cloudflare/templates/astro/pages/templates/js/wrangler.jsonc @@ -1,6 +1,6 @@ { - "name": "", - "compatibility_date": "", + "name": "", + "compatibility_date": "", "compatibility_flags": [ "nodejs_compat" ], diff --git a/packages/create-cloudflare/templates/astro/pages/templates/ts/wrangler.jsonc b/packages/create-cloudflare/templates/astro/pages/templates/ts/wrangler.jsonc index f1dde41a1b26..a41c367db016 100644 --- a/packages/create-cloudflare/templates/astro/pages/templates/ts/wrangler.jsonc +++ b/packages/create-cloudflare/templates/astro/pages/templates/ts/wrangler.jsonc @@ -1,6 +1,6 @@ { - "name": "", - "compatibility_date": "", + "name": "", + "compatibility_date": "", "compatibility_flags": [ "nodejs_compat" ], diff --git a/packages/create-cloudflare/templates/astro/workers/templates/js/wrangler.jsonc b/packages/create-cloudflare/templates/astro/workers/templates/js/wrangler.jsonc index 06d7824a5d42..dc0adf3e4b7f 100644 --- a/packages/create-cloudflare/templates/astro/workers/templates/js/wrangler.jsonc +++ b/packages/create-cloudflare/templates/astro/workers/templates/js/wrangler.jsonc @@ -1,7 +1,7 @@ { - "name": "", + "name": "", "main": "./dist/_worker.js/index.js", - "compatibility_date": "", + "compatibility_date": "", "compatibility_flags": [ "nodejs_compat", "global_fetch_strictly_public" diff --git a/packages/create-cloudflare/templates/astro/workers/templates/ts/wrangler.jsonc b/packages/create-cloudflare/templates/astro/workers/templates/ts/wrangler.jsonc index fbb8908177aa..3915689a19b6 100644 --- a/packages/create-cloudflare/templates/astro/workers/templates/ts/wrangler.jsonc +++ b/packages/create-cloudflare/templates/astro/workers/templates/ts/wrangler.jsonc @@ -1,7 +1,7 @@ { - "name": "", + "name": "", "main": "./dist/_worker.js/index.js", - "compatibility_date": "", + "compatibility_date": "", "compatibility_flags": [ "nodejs_compat", "global_fetch_strictly_public" diff --git a/packages/create-cloudflare/templates/common/js/wrangler.jsonc b/packages/create-cloudflare/templates/common/js/wrangler.jsonc index 183546064027..8d5311a8e790 100644 --- a/packages/create-cloudflare/templates/common/js/wrangler.jsonc +++ b/packages/create-cloudflare/templates/common/js/wrangler.jsonc @@ -1,7 +1,7 @@ { - "name": "", + "name": "", "main": "src/index.js", - "compatibility_date": "", + "compatibility_date": "", "observability": { "enabled": true } diff --git a/packages/create-cloudflare/templates/common/ts/wrangler.jsonc b/packages/create-cloudflare/templates/common/ts/wrangler.jsonc index 0d4b76dc198a..d2e9d43fba62 100644 --- a/packages/create-cloudflare/templates/common/ts/wrangler.jsonc +++ b/packages/create-cloudflare/templates/common/ts/wrangler.jsonc @@ -1,7 +1,7 @@ { - "name": "", + "name": "", "main": "src/index.ts", - "compatibility_date": "", + "compatibility_date": "", "observability": { "enabled": true } diff --git a/packages/create-cloudflare/templates/docusaurus/workers/templates/wrangler.jsonc b/packages/create-cloudflare/templates/docusaurus/workers/templates/wrangler.jsonc index ed60402d8ea5..6a0c4df252f2 100644 --- a/packages/create-cloudflare/templates/docusaurus/workers/templates/wrangler.jsonc +++ b/packages/create-cloudflare/templates/docusaurus/workers/templates/wrangler.jsonc @@ -1,6 +1,6 @@ { - "name": "", - "compatibility_date": "", + "name": "", + "compatibility_date": "", "assets": { "directory": "./build" }, diff --git a/packages/create-cloudflare/templates/gatsby/workers/templates/wrangler.jsonc b/packages/create-cloudflare/templates/gatsby/workers/templates/wrangler.jsonc index 9a612e6a142b..0cb11da5cc72 100644 --- a/packages/create-cloudflare/templates/gatsby/workers/templates/wrangler.jsonc +++ b/packages/create-cloudflare/templates/gatsby/workers/templates/wrangler.jsonc @@ -1,6 +1,6 @@ { - "name": "", - "compatibility_date": "", + "name": "", + "compatibility_date": "", "assets": { "directory": "./public" }, diff --git a/packages/create-cloudflare/templates/hello-world-assets-only/templates/wrangler.jsonc b/packages/create-cloudflare/templates/hello-world-assets-only/templates/wrangler.jsonc index e00d6246e7c1..423c71ae3c31 100644 --- a/packages/create-cloudflare/templates/hello-world-assets-only/templates/wrangler.jsonc +++ b/packages/create-cloudflare/templates/hello-world-assets-only/templates/wrangler.jsonc @@ -1,6 +1,6 @@ { - "name": "", - "compatibility_date": "", + "name": "", + "compatibility_date": "", "assets": { // The path to the directory containing the `index.html` file to be served at `/` "directory": "./public" diff --git a/packages/create-cloudflare/templates/hello-world-durable-object-with-assets/js/wrangler.jsonc b/packages/create-cloudflare/templates/hello-world-durable-object-with-assets/js/wrangler.jsonc index 04156ad845be..d6d8539ce401 100644 --- a/packages/create-cloudflare/templates/hello-world-durable-object-with-assets/js/wrangler.jsonc +++ b/packages/create-cloudflare/templates/hello-world-durable-object-with-assets/js/wrangler.jsonc @@ -1,7 +1,7 @@ { - "name": "", + "name": "", "main": "src/index.js", - "compatibility_date": "", + "compatibility_date": "", "assets": { // The path to the directory containing the `index.html` file to be served at `/` "directory": "./public" diff --git a/packages/create-cloudflare/templates/hello-world-durable-object-with-assets/py/wrangler.jsonc b/packages/create-cloudflare/templates/hello-world-durable-object-with-assets/py/wrangler.jsonc index 2ae422d70d23..baf11b798da4 100644 --- a/packages/create-cloudflare/templates/hello-world-durable-object-with-assets/py/wrangler.jsonc +++ b/packages/create-cloudflare/templates/hello-world-durable-object-with-assets/py/wrangler.jsonc @@ -1,7 +1,7 @@ { - "name": "", + "name": "", "main": "src/entry.py", - "compatibility_date": "", + "compatibility_date": "", "compatibility_flags": [ "python_workers" ], diff --git a/packages/create-cloudflare/templates/hello-world-durable-object-with-assets/ts/wrangler.jsonc b/packages/create-cloudflare/templates/hello-world-durable-object-with-assets/ts/wrangler.jsonc index fb9a4786beed..cab52ece6401 100644 --- a/packages/create-cloudflare/templates/hello-world-durable-object-with-assets/ts/wrangler.jsonc +++ b/packages/create-cloudflare/templates/hello-world-durable-object-with-assets/ts/wrangler.jsonc @@ -1,7 +1,7 @@ { - "name": "", + "name": "", "main": "src/index.ts", - "compatibility_date": "", + "compatibility_date": "", "migrations": [ { "new_sqlite_classes": [ diff --git a/packages/create-cloudflare/templates/hello-world-durable-object/js/wrangler.jsonc b/packages/create-cloudflare/templates/hello-world-durable-object/js/wrangler.jsonc index 28cc9da904e6..983fd66d8abe 100644 --- a/packages/create-cloudflare/templates/hello-world-durable-object/js/wrangler.jsonc +++ b/packages/create-cloudflare/templates/hello-world-durable-object/js/wrangler.jsonc @@ -1,7 +1,7 @@ { - "name": "", + "name": "", "main": "src/index.js", - "compatibility_date": "", + "compatibility_date": "", "migrations": [ { "new_sqlite_classes": [ diff --git a/packages/create-cloudflare/templates/hello-world-durable-object/py/wrangler.jsonc b/packages/create-cloudflare/templates/hello-world-durable-object/py/wrangler.jsonc index cfbc48817ae1..0d01e7035d7c 100644 --- a/packages/create-cloudflare/templates/hello-world-durable-object/py/wrangler.jsonc +++ b/packages/create-cloudflare/templates/hello-world-durable-object/py/wrangler.jsonc @@ -1,7 +1,7 @@ { - "name": "", + "name": "", "main": "src/entry.py", - "compatibility_date": "", + "compatibility_date": "", "compatibility_flags": [ "python_workers" ], diff --git a/packages/create-cloudflare/templates/hello-world-durable-object/ts/wrangler.jsonc b/packages/create-cloudflare/templates/hello-world-durable-object/ts/wrangler.jsonc index 22cb802e730e..6761d1c39b9c 100644 --- a/packages/create-cloudflare/templates/hello-world-durable-object/ts/wrangler.jsonc +++ b/packages/create-cloudflare/templates/hello-world-durable-object/ts/wrangler.jsonc @@ -1,7 +1,7 @@ { - "name": "", + "name": "", "main": "src/index.ts", - "compatibility_date": "", + "compatibility_date": "", "migrations": [ { "new_sqlite_classes": [ diff --git a/packages/create-cloudflare/templates/hello-world-with-assets/js/wrangler.jsonc b/packages/create-cloudflare/templates/hello-world-with-assets/js/wrangler.jsonc index b30e31fa55e8..8d0de66af317 100644 --- a/packages/create-cloudflare/templates/hello-world-with-assets/js/wrangler.jsonc +++ b/packages/create-cloudflare/templates/hello-world-with-assets/js/wrangler.jsonc @@ -1,7 +1,7 @@ { - "name": "", + "name": "", "main": "src/index.js", - "compatibility_date": "", + "compatibility_date": "", "compatibility_flags": [ "nodejs_compat", "global_fetch_strictly_public" diff --git a/packages/create-cloudflare/templates/hello-world-with-assets/py/wrangler.jsonc b/packages/create-cloudflare/templates/hello-world-with-assets/py/wrangler.jsonc index 3d2766834492..d4940a8daef7 100644 --- a/packages/create-cloudflare/templates/hello-world-with-assets/py/wrangler.jsonc +++ b/packages/create-cloudflare/templates/hello-world-with-assets/py/wrangler.jsonc @@ -1,7 +1,7 @@ { - "name": "", + "name": "", "main": "src/entry.py", - "compatibility_date": "", + "compatibility_date": "", "compatibility_flags": [ "python_workers" ], diff --git a/packages/create-cloudflare/templates/hello-world-with-assets/ts/wrangler.jsonc b/packages/create-cloudflare/templates/hello-world-with-assets/ts/wrangler.jsonc index 1d200d2c20c8..fffb13d42a37 100644 --- a/packages/create-cloudflare/templates/hello-world-with-assets/ts/wrangler.jsonc +++ b/packages/create-cloudflare/templates/hello-world-with-assets/ts/wrangler.jsonc @@ -1,7 +1,7 @@ { - "name": "", + "name": "", "main": "src/index.ts", - "compatibility_date": "", + "compatibility_date": "", "compatibility_flags": [ "global_fetch_strictly_public" ], diff --git a/packages/create-cloudflare/templates/hello-world-workflows/js/wrangler.jsonc b/packages/create-cloudflare/templates/hello-world-workflows/js/wrangler.jsonc index 95b33f114eef..5157d9cae44a 100644 --- a/packages/create-cloudflare/templates/hello-world-workflows/js/wrangler.jsonc +++ b/packages/create-cloudflare/templates/hello-world-workflows/js/wrangler.jsonc @@ -1,7 +1,7 @@ { - "name": "", + "name": "", "main": "src/index.js", - "compatibility_date": "", + "compatibility_date": "", "observability": { "enabled": true, diff --git a/packages/create-cloudflare/templates/hello-world-workflows/ts/wrangler.jsonc b/packages/create-cloudflare/templates/hello-world-workflows/ts/wrangler.jsonc index 0c56e6ca9314..97eefc1c489e 100644 --- a/packages/create-cloudflare/templates/hello-world-workflows/ts/wrangler.jsonc +++ b/packages/create-cloudflare/templates/hello-world-workflows/ts/wrangler.jsonc @@ -1,7 +1,7 @@ { - "name": "", + "name": "", "main": "src/index.ts", - "compatibility_date": "", + "compatibility_date": "", "observability": { "enabled": true, diff --git a/packages/create-cloudflare/templates/hello-world/js/wrangler.jsonc b/packages/create-cloudflare/templates/hello-world/js/wrangler.jsonc index 168bc0dd9a0a..b6ea3641c7ae 100644 --- a/packages/create-cloudflare/templates/hello-world/js/wrangler.jsonc +++ b/packages/create-cloudflare/templates/hello-world/js/wrangler.jsonc @@ -1,7 +1,7 @@ { - "name": "", + "name": "", "main": "src/index.js", - "compatibility_date": "", + "compatibility_date": "", "observability": { "enabled": true, }, diff --git a/packages/create-cloudflare/templates/hello-world/py/wrangler.jsonc b/packages/create-cloudflare/templates/hello-world/py/wrangler.jsonc index 3ca3e9bcafa1..0d817bdd31d8 100644 --- a/packages/create-cloudflare/templates/hello-world/py/wrangler.jsonc +++ b/packages/create-cloudflare/templates/hello-world/py/wrangler.jsonc @@ -1,7 +1,7 @@ { - "name": "", + "name": "", "main": "src/entry.py", - "compatibility_date": "", + "compatibility_date": "", "compatibility_flags": ["python_workers"], "observability": { "enabled": true, diff --git a/packages/create-cloudflare/templates/hello-world/ts/wrangler.jsonc b/packages/create-cloudflare/templates/hello-world/ts/wrangler.jsonc index 435aed249941..54163bc5895d 100644 --- a/packages/create-cloudflare/templates/hello-world/ts/wrangler.jsonc +++ b/packages/create-cloudflare/templates/hello-world/ts/wrangler.jsonc @@ -1,7 +1,7 @@ { - "name": "", + "name": "", "main": "src/index.ts", - "compatibility_date": "", + "compatibility_date": "", "observability": { "enabled": true, }, diff --git a/packages/create-cloudflare/templates/hono/pages/templates/wrangler.jsonc b/packages/create-cloudflare/templates/hono/pages/templates/wrangler.jsonc index 212954346581..3b246f52ae71 100644 --- a/packages/create-cloudflare/templates/hono/pages/templates/wrangler.jsonc +++ b/packages/create-cloudflare/templates/hono/pages/templates/wrangler.jsonc @@ -1,6 +1,6 @@ { - "name": "", - "compatibility_date": "", + "name": "", + "compatibility_date": "", "pages_build_output_dir": "./dist", "observability": { "enabled": true diff --git a/packages/create-cloudflare/templates/hono/workers/templates/wrangler.jsonc b/packages/create-cloudflare/templates/hono/workers/templates/wrangler.jsonc index 5b93fb6f101b..87d62453bc8b 100644 --- a/packages/create-cloudflare/templates/hono/workers/templates/wrangler.jsonc +++ b/packages/create-cloudflare/templates/hono/workers/templates/wrangler.jsonc @@ -1,7 +1,7 @@ { - "name": "", + "name": "", "main": "src/index.ts", - "compatibility_date": "", + "compatibility_date": "", "assets": { "binding": "ASSETS", "directory": "./public" diff --git a/packages/create-cloudflare/templates/nuxt/pages/templates/wrangler.jsonc b/packages/create-cloudflare/templates/nuxt/pages/templates/wrangler.jsonc index 9c8bf46d4248..4cb3914366cf 100644 --- a/packages/create-cloudflare/templates/nuxt/pages/templates/wrangler.jsonc +++ b/packages/create-cloudflare/templates/nuxt/pages/templates/wrangler.jsonc @@ -1,5 +1,5 @@ { - "name": "", - "compatibility_date": "", + "name": "", + "compatibility_date": "", "pages_build_output_dir": "./dist" } diff --git a/packages/create-cloudflare/templates/nuxt/workers/templates/wrangler.jsonc b/packages/create-cloudflare/templates/nuxt/workers/templates/wrangler.jsonc index 58d5befda8b1..0de58ae0e526 100644 --- a/packages/create-cloudflare/templates/nuxt/workers/templates/wrangler.jsonc +++ b/packages/create-cloudflare/templates/nuxt/workers/templates/wrangler.jsonc @@ -1,7 +1,7 @@ { - "name": "", + "name": "", "main": "./.output/server/index.mjs", - "compatibility_date": "", + "compatibility_date": "", "assets": { "binding": "ASSETS", "directory": "./.output/public/" diff --git a/packages/create-cloudflare/templates/openapi/ts/wrangler.jsonc b/packages/create-cloudflare/templates/openapi/ts/wrangler.jsonc index 0d4b76dc198a..d2e9d43fba62 100644 --- a/packages/create-cloudflare/templates/openapi/ts/wrangler.jsonc +++ b/packages/create-cloudflare/templates/openapi/ts/wrangler.jsonc @@ -1,7 +1,7 @@ { - "name": "", + "name": "", "main": "src/index.ts", - "compatibility_date": "", + "compatibility_date": "", "observability": { "enabled": true } diff --git a/packages/create-cloudflare/templates/queues/js/wrangler.jsonc b/packages/create-cloudflare/templates/queues/js/wrangler.jsonc index d58eba397a9d..c4575ff26ef5 100644 --- a/packages/create-cloudflare/templates/queues/js/wrangler.jsonc +++ b/packages/create-cloudflare/templates/queues/js/wrangler.jsonc @@ -1,7 +1,7 @@ { - "name": "", + "name": "", "main": "src/index.js", - "compatibility_date": "", + "compatibility_date": "", "observability": { "enabled": true }, diff --git a/packages/create-cloudflare/templates/queues/ts/wrangler.jsonc b/packages/create-cloudflare/templates/queues/ts/wrangler.jsonc index 04e682d14c83..5316d99cc586 100644 --- a/packages/create-cloudflare/templates/queues/ts/wrangler.jsonc +++ b/packages/create-cloudflare/templates/queues/ts/wrangler.jsonc @@ -1,7 +1,7 @@ { - "name": "", + "name": "", "main": "src/index.ts", - "compatibility_date": "", + "compatibility_date": "", "observability": { "enabled": true }, diff --git a/packages/create-cloudflare/templates/qwik/pages/templates/wrangler.jsonc b/packages/create-cloudflare/templates/qwik/pages/templates/wrangler.jsonc index f1dde41a1b26..a41c367db016 100644 --- a/packages/create-cloudflare/templates/qwik/pages/templates/wrangler.jsonc +++ b/packages/create-cloudflare/templates/qwik/pages/templates/wrangler.jsonc @@ -1,6 +1,6 @@ { - "name": "", - "compatibility_date": "", + "name": "", + "compatibility_date": "", "compatibility_flags": [ "nodejs_compat" ], diff --git a/packages/create-cloudflare/templates/qwik/workers/templates/wrangler.jsonc b/packages/create-cloudflare/templates/qwik/workers/templates/wrangler.jsonc index 3db4f915b7f8..2f84fe858c66 100644 --- a/packages/create-cloudflare/templates/qwik/workers/templates/wrangler.jsonc +++ b/packages/create-cloudflare/templates/qwik/workers/templates/wrangler.jsonc @@ -1,7 +1,7 @@ { - "name": "", + "name": "", "main": "./dist/_worker.js", - "compatibility_date": "", + "compatibility_date": "", "compatibility_flags": [ "nodejs_compat", "global_fetch_strictly_public" diff --git a/packages/create-cloudflare/templates/react/pages/templates/wrangler.jsonc b/packages/create-cloudflare/templates/react/pages/templates/wrangler.jsonc index 9fb9c7262e8b..76834d0a9929 100644 --- a/packages/create-cloudflare/templates/react/pages/templates/wrangler.jsonc +++ b/packages/create-cloudflare/templates/react/pages/templates/wrangler.jsonc @@ -1,5 +1,5 @@ { - "name": "", - "compatibility_date": "", + "name": "", + "compatibility_date": "", "pages_build_output_dir": "./dist" } diff --git a/packages/create-cloudflare/templates/react/workers/js/wrangler.jsonc b/packages/create-cloudflare/templates/react/workers/js/wrangler.jsonc index fca2a5d866e7..c8e58db8259d 100644 --- a/packages/create-cloudflare/templates/react/workers/js/wrangler.jsonc +++ b/packages/create-cloudflare/templates/react/workers/js/wrangler.jsonc @@ -1,7 +1,7 @@ { - "name": "", + "name": "", "main": "worker/index.js", - "compatibility_date": "", + "compatibility_date": "", "assets": { "not_found_handling": "single-page-application" }, "observability": { "enabled": true diff --git a/packages/create-cloudflare/templates/react/workers/ts/wrangler.jsonc b/packages/create-cloudflare/templates/react/workers/ts/wrangler.jsonc index f3758be5594e..63adfcffd026 100644 --- a/packages/create-cloudflare/templates/react/workers/ts/wrangler.jsonc +++ b/packages/create-cloudflare/templates/react/workers/ts/wrangler.jsonc @@ -1,7 +1,7 @@ { - "name": "", + "name": "", "main": "worker/index.ts", - "compatibility_date": "", + "compatibility_date": "", "assets": { "not_found_handling": "single-page-application" }, "observability": { "enabled": true diff --git a/packages/create-cloudflare/templates/scheduled/js/wrangler.jsonc b/packages/create-cloudflare/templates/scheduled/js/wrangler.jsonc index 246b0a6e9ad6..589cd5d69625 100644 --- a/packages/create-cloudflare/templates/scheduled/js/wrangler.jsonc +++ b/packages/create-cloudflare/templates/scheduled/js/wrangler.jsonc @@ -1,7 +1,7 @@ { - "name": "", + "name": "", "main": "src/index.js", - "compatibility_date": "", + "compatibility_date": "", "observability": { "enabled": true }, diff --git a/packages/create-cloudflare/templates/scheduled/ts/wrangler.jsonc b/packages/create-cloudflare/templates/scheduled/ts/wrangler.jsonc index f551a128e046..01cb2f28b2a4 100644 --- a/packages/create-cloudflare/templates/scheduled/ts/wrangler.jsonc +++ b/packages/create-cloudflare/templates/scheduled/ts/wrangler.jsonc @@ -1,7 +1,7 @@ { - "name": "", + "name": "", "main": "src/index.ts", - "compatibility_date": "", + "compatibility_date": "", "observability": { "enabled": true }, diff --git a/packages/create-cloudflare/templates/solid/templates/wrangler.jsonc b/packages/create-cloudflare/templates/solid/templates/wrangler.jsonc index df0acc35cd27..43ba70955a16 100644 --- a/packages/create-cloudflare/templates/solid/templates/wrangler.jsonc +++ b/packages/create-cloudflare/templates/solid/templates/wrangler.jsonc @@ -1,7 +1,7 @@ { - "name": "", + "name": "", "main": "./.output/server/index.mjs", - "compatibility_date": "", + "compatibility_date": "", "compatibility_flags": [ "nodejs_compat" ], diff --git a/packages/create-cloudflare/templates/svelte/pages/templates/wrangler.jsonc b/packages/create-cloudflare/templates/svelte/pages/templates/wrangler.jsonc index 71712eb4ae99..916e26cbe02c 100644 --- a/packages/create-cloudflare/templates/svelte/pages/templates/wrangler.jsonc +++ b/packages/create-cloudflare/templates/svelte/pages/templates/wrangler.jsonc @@ -1,6 +1,6 @@ { - "name": "", - "compatibility_date": "", + "name": "", + "compatibility_date": "", "compatibility_flags": ["nodejs_als"], "pages_build_output_dir": ".svelte-kit/cloudflare" } diff --git a/packages/create-cloudflare/templates/svelte/workers/templates/wrangler.jsonc b/packages/create-cloudflare/templates/svelte/workers/templates/wrangler.jsonc index f406a65b0cf7..e7dec61662c2 100644 --- a/packages/create-cloudflare/templates/svelte/workers/templates/wrangler.jsonc +++ b/packages/create-cloudflare/templates/svelte/workers/templates/wrangler.jsonc @@ -1,7 +1,7 @@ { - "name": "", + "name": "", "main": ".svelte-kit/cloudflare/_worker.js", - "compatibility_date": "", + "compatibility_date": "", "compatibility_flags": ["nodejs_als"], "assets": { "binding": "ASSETS", diff --git a/packages/create-cloudflare/templates/vue/pages/templates/wrangler.jsonc b/packages/create-cloudflare/templates/vue/pages/templates/wrangler.jsonc index 9fb9c7262e8b..76834d0a9929 100644 --- a/packages/create-cloudflare/templates/vue/pages/templates/wrangler.jsonc +++ b/packages/create-cloudflare/templates/vue/pages/templates/wrangler.jsonc @@ -1,5 +1,5 @@ { - "name": "", - "compatibility_date": "", + "name": "", + "compatibility_date": "", "pages_build_output_dir": "./dist" } diff --git a/packages/create-cloudflare/templates/vue/workers/js/wrangler.jsonc b/packages/create-cloudflare/templates/vue/workers/js/wrangler.jsonc index 7d8cbd29bbc5..c4c1c3aef739 100644 --- a/packages/create-cloudflare/templates/vue/workers/js/wrangler.jsonc +++ b/packages/create-cloudflare/templates/vue/workers/js/wrangler.jsonc @@ -1,6 +1,6 @@ { - "name": "", - "compatibility_date": "", + "name": "", + "compatibility_date": "", "main": "server/index.js", "assets": { "not_found_handling": "single-page-application", diff --git a/packages/create-cloudflare/templates/vue/workers/ts/wrangler.jsonc b/packages/create-cloudflare/templates/vue/workers/ts/wrangler.jsonc index 2d6f58e49895..a6841d2cc4a8 100644 --- a/packages/create-cloudflare/templates/vue/workers/ts/wrangler.jsonc +++ b/packages/create-cloudflare/templates/vue/workers/ts/wrangler.jsonc @@ -1,6 +1,6 @@ { - "name": "", - "compatibility_date": "", + "name": "", + "compatibility_date": "", "main": "server/index.ts", "assets": { "not_found_handling": "single-page-application", diff --git a/packages/create-cloudflare/templates/waku/wrangler.jsonc b/packages/create-cloudflare/templates/waku/wrangler.jsonc index 9337caf0497a..7db66f48f522 100644 --- a/packages/create-cloudflare/templates/waku/wrangler.jsonc +++ b/packages/create-cloudflare/templates/waku/wrangler.jsonc @@ -1,8 +1,8 @@ { - "name": "", + "name": "", "main": "./dist/worker/serve-cloudflare.js", // https://developers.cloudflare.com/workers/platform/compatibility-dates - "compatibility_date": "", + "compatibility_date": "", // nodejs_als is required for Waku server-side request context // It can be removed if only building static pages "compatibility_flags": ["nodejs_als"],