diff --git a/.changeset/four-shirts-know.md b/.changeset/four-shirts-know.md new file mode 100644 index 000000000000..9abf6e9b07e3 --- /dev/null +++ b/.changeset/four-shirts-know.md @@ -0,0 +1,8 @@ +--- +"create-cloudflare": patch +--- + +Graduate Hono + Workers assets template from experimental. + +You will no longer need to include the --experimental flag to access this template. +Also creates a hono template that uses the cloudflare-pages adapter. diff --git a/packages/create-cloudflare/e2e-tests/frameworks/framework-test-config-experimental.ts b/packages/create-cloudflare/e2e-tests/frameworks/framework-test-config-experimental.ts index 62623287dde5..28cc1ef70e5f 100644 --- a/packages/create-cloudflare/e2e-tests/frameworks/framework-test-config-experimental.ts +++ b/packages/create-cloudflare/e2e-tests/frameworks/framework-test-config-experimental.ts @@ -2,24 +2,6 @@ import { keys, LONG_TIMEOUT } from "../helpers"; export default function getFrameworkTestConfigExperimental() { return { - hono: { - testCommitMessage: true, - unsupportedOSs: ["win32"], - verifyDeploy: { - route: "/message", - expectedText: "Hello Hono!", - }, - verifyPreview: { - route: "/message", - expectedText: "Hello Hono!", - }, - promptHandlers: [ - { - matcher: /Do you want to install project dependencies\?/, - input: [keys.enter], - }, - ], - }, qwik: { promptHandlers: [ { diff --git a/packages/create-cloudflare/e2e-tests/frameworks/framework-test-config.ts b/packages/create-cloudflare/e2e-tests/frameworks/framework-test-config.ts index 395ebb842dbc..ddcf08973829 100644 --- a/packages/create-cloudflare/e2e-tests/frameworks/framework-test-config.ts +++ b/packages/create-cloudflare/e2e-tests/frameworks/framework-test-config.ts @@ -207,15 +207,36 @@ export default function getFrameworkTestConfig(pm: string) { expectedText: "Gatsby!", }, }, - hono: { + "hono:pages": { + argv: ["--platform", "pages"], testCommitMessage: true, unsupportedOSs: ["win32"], verifyDeploy: { route: "/", - expectedText: "Hello Hono!", + expectedText: "Hello!", }, verifyPreview: { route: "/", + expectedText: "Hello!", + previewArgs: ["--host=127.0.0.1"], + }, + promptHandlers: [ + { + matcher: /Do you want to install project dependencies\?/, + input: [keys.enter], + }, + ], + }, + "hono:workers": { + argv: ["--platform", "workers"], + testCommitMessage: true, + unsupportedOSs: ["win32"], + verifyDeploy: { + route: "/message", + expectedText: "Hello Hono!", + }, + verifyPreview: { + route: "/message", expectedText: "Hello Hono!", }, promptHandlers: [ diff --git a/packages/create-cloudflare/src/templates.ts b/packages/create-cloudflare/src/templates.ts index c5168381e439..42803f1ef6a9 100644 --- a/packages/create-cloudflare/src/templates.ts +++ b/packages/create-cloudflare/src/templates.ts @@ -18,7 +18,6 @@ import { writeFile, writeJSON, } from "helpers/files"; -import honoTemplateExperimental from "templates-experimental/hono/c3"; import nextTemplateExperimental from "templates-experimental/next/c3"; import qwikTemplateExperimental from "templates-experimental/qwik/c3"; import solidTemplateExperimental from "templates-experimental/solid/c3"; @@ -174,7 +173,6 @@ export type TemplateMap = Record< export function getFrameworkMap({ experimental = false }): TemplateMap { if (experimental) { return { - hono: honoTemplateExperimental, next: nextTemplateExperimental, qwik: qwikTemplateExperimental, solid: solidTemplateExperimental, diff --git a/packages/create-cloudflare/templates/hono/c3.ts b/packages/create-cloudflare/templates/hono/c3.ts index c67513106b34..d17e7a1a960e 100644 --- a/packages/create-cloudflare/templates/hono/c3.ts +++ b/packages/create-cloudflare/templates/hono/c3.ts @@ -1,70 +1,9 @@ -import { logRaw } from "@cloudflare/cli"; -import { brandColor, dim } from "@cloudflare/cli/colors"; -import { spinner } from "@cloudflare/cli/interactive"; -import { runFrameworkGenerator } from "frameworks/index"; -import { loadTemplateSnippets, transformFile } from "helpers/codemod"; -import { detectPackageManager } from "helpers/packageManagers"; -import type { TemplateConfig } from "../../src/templates"; -import type * as recast from "recast"; -import type { C3Context } from "types"; +import pages from "./pages/c3"; +import workers from "./workers/c3"; +import type { MultiPlatformTemplateConfig } from "../../src/templates"; -const generate = async (ctx: C3Context) => { - const { name: pm } = detectPackageManager(); - - await runFrameworkGenerator(ctx, [ - ctx.project.name, - "--template", - "cloudflare-workers", - "--install", - "--pm", - pm, - ]); - - logRaw(""); // newline -}; - -const configure = async (ctx: C3Context) => { - const indexFile = "src/index.ts"; - - const s = spinner(); - s.start(`Updating \`${indexFile}\``); - - const snippets = loadTemplateSnippets(ctx); - - transformFile(indexFile, { - visitVariableDeclarator(n) { - if (n.node.id.type === "Identifier" && n.node.id.name === "app") { - n.node.init = snippets - .appDeclarationTs[0] as recast.types.namedTypes.NewExpression; - - return false; - } - }, - }); - - s.stop(`${brandColor("updated")} \`${dim(indexFile)}\``); -}; - -const config: TemplateConfig = { - configVersion: 1, - id: "hono", - frameworkCli: "create-hono", +const config: MultiPlatformTemplateConfig = { displayName: "Hono", - copyFiles: { - path: "./templates", - }, - platform: "workers", - generate, - configure, - transformPackageJson: async () => ({ - scripts: { - dev: "wrangler dev", - deploy: "wrangler deploy --minify", - "cf-typegen": "wrangler types --env-interface CloudflareBindings", - }, - }), - devScript: "dev", - deployScript: "deploy", - previewScript: "dev", + platformVariants: { pages, workers }, }; export default config; diff --git a/packages/create-cloudflare/templates/hono/pages/c3.ts b/packages/create-cloudflare/templates/hono/pages/c3.ts new file mode 100644 index 000000000000..2e8cb2f7e22d --- /dev/null +++ b/packages/create-cloudflare/templates/hono/pages/c3.ts @@ -0,0 +1,42 @@ +import { logRaw } from "@cloudflare/cli"; +import { runFrameworkGenerator } from "frameworks/index"; +import { detectPackageManager } from "helpers/packageManagers"; +import type { TemplateConfig } from "../../../src/templates"; +import type { C3Context } from "types"; + +const generate = async (ctx: C3Context) => { + const { name: pm } = detectPackageManager(); + + await runFrameworkGenerator(ctx, [ + ctx.project.name, + "--template", + "cloudflare-pages", + "--install", + "--pm", + pm, + ]); + + logRaw(""); // newline +}; + +const config: TemplateConfig = { + configVersion: 1, + id: "hono", + frameworkCli: "create-hono", + displayName: "Hono", + copyFiles: { + path: "./templates", + }, + path: "templates/hono/pages", + platform: "pages", + generate, + transformPackageJson: async () => ({ + scripts: { + "cf-typegen": "wrangler types --env-interface CloudflareBindings", + }, + }), + devScript: "dev", + deployScript: "deploy", + previewScript: "dev", +}; +export default config; diff --git a/packages/create-cloudflare/templates/hono/pages/templates/src/index.tsx b/packages/create-cloudflare/templates/hono/pages/templates/src/index.tsx new file mode 100644 index 000000000000..5b3f28b43ded --- /dev/null +++ b/packages/create-cloudflare/templates/hono/pages/templates/src/index.tsx @@ -0,0 +1,12 @@ +import { Hono } from 'hono' +import { renderer } from './renderer' + +const app = new Hono<{ Bindings: CloudflareBindings }>(); + +app.use(renderer) + +app.get('/', (c) => { + return c.render(

Hello!

) +}) + +export default app diff --git a/packages/create-cloudflare/templates-experimental/hono/templates/worker-configuration.d.ts b/packages/create-cloudflare/templates/hono/pages/templates/worker-configuration.d.ts similarity index 100% rename from packages/create-cloudflare/templates-experimental/hono/templates/worker-configuration.d.ts rename to packages/create-cloudflare/templates/hono/pages/templates/worker-configuration.d.ts diff --git a/packages/create-cloudflare/templates/hono/templates/wrangler.jsonc b/packages/create-cloudflare/templates/hono/pages/templates/wrangler.jsonc similarity index 76% rename from packages/create-cloudflare/templates/hono/templates/wrangler.jsonc rename to packages/create-cloudflare/templates/hono/pages/templates/wrangler.jsonc index 0d4b76dc198a..183ab33d282c 100644 --- a/packages/create-cloudflare/templates/hono/templates/wrangler.jsonc +++ b/packages/create-cloudflare/templates/hono/pages/templates/wrangler.jsonc @@ -2,7 +2,8 @@ "name": "", "main": "src/index.ts", "compatibility_date": "", + "pages_build_output_dir": "./dist", "observability": { "enabled": true } -} +} \ No newline at end of file diff --git a/packages/create-cloudflare/templates/hono/snippets/appDeclaration.ts b/packages/create-cloudflare/templates/hono/snippets/appDeclaration.ts deleted file mode 100644 index bf193b295e6a..000000000000 --- a/packages/create-cloudflare/templates/hono/snippets/appDeclaration.ts +++ /dev/null @@ -1 +0,0 @@ -new Hono<{ Bindings: CloudflareBindings }>() diff --git a/packages/create-cloudflare/templates-experimental/hono/c3.ts b/packages/create-cloudflare/templates/hono/workers/c3.ts similarity index 84% rename from packages/create-cloudflare/templates-experimental/hono/c3.ts rename to packages/create-cloudflare/templates/hono/workers/c3.ts index 82614cdebb46..2b544aa3717e 100644 --- a/packages/create-cloudflare/templates-experimental/hono/c3.ts +++ b/packages/create-cloudflare/templates/hono/workers/c3.ts @@ -1,7 +1,7 @@ import { logRaw } from "@cloudflare/cli"; import { runFrameworkGenerator } from "frameworks/index"; import { detectPackageManager } from "helpers/packageManagers"; -import type { TemplateConfig } from "../../src/templates"; +import type { TemplateConfig } from "../../../src/templates"; import type { C3Context } from "types"; const generate = async (ctx: C3Context) => { @@ -28,12 +28,10 @@ const config: TemplateConfig = { path: "./templates", }, platform: "workers", - path: "templates-experimental/hono", + path: "templates/hono/workers", generate, transformPackageJson: async () => ({ scripts: { - dev: "wrangler dev", - deploy: "wrangler deploy --minify", "cf-typegen": "wrangler types --env-interface CloudflareBindings", }, }), diff --git a/packages/create-cloudflare/templates-experimental/hono/templates/public/index.html b/packages/create-cloudflare/templates/hono/workers/templates/public/index.html similarity index 100% rename from packages/create-cloudflare/templates-experimental/hono/templates/public/index.html rename to packages/create-cloudflare/templates/hono/workers/templates/public/index.html diff --git a/packages/create-cloudflare/templates-experimental/hono/templates/src/index.ts b/packages/create-cloudflare/templates/hono/workers/templates/src/index.ts similarity index 100% rename from packages/create-cloudflare/templates-experimental/hono/templates/src/index.ts rename to packages/create-cloudflare/templates/hono/workers/templates/src/index.ts diff --git a/packages/create-cloudflare/templates/hono/templates/worker-configuration.d.ts b/packages/create-cloudflare/templates/hono/workers/templates/worker-configuration.d.ts similarity index 100% rename from packages/create-cloudflare/templates/hono/templates/worker-configuration.d.ts rename to packages/create-cloudflare/templates/hono/workers/templates/worker-configuration.d.ts diff --git a/packages/create-cloudflare/templates-experimental/hono/templates/wrangler.jsonc b/packages/create-cloudflare/templates/hono/workers/templates/wrangler.jsonc similarity index 100% rename from packages/create-cloudflare/templates-experimental/hono/templates/wrangler.jsonc rename to packages/create-cloudflare/templates/hono/workers/templates/wrangler.jsonc