Skip to content

Commit af18b48

Browse files
C3: add TanStack Start framework template (#10842)
* C3: add TanStack Start framework template * adapt c3 tanstack template to latest tanstack CLI * bump `@tanstack/create-start` * Apply suggestions from code review Co-authored-by: James Opstad <[email protected]> * rename tanstack directory to tanstack-start * update snapshot * add windows as unsupported os in c3 e2es --------- Co-authored-by: James Opstad <[email protected]>
1 parent 0372e86 commit af18b48

File tree

7 files changed

+67
-3
lines changed

7 files changed

+67
-3
lines changed

.changeset/busy-horses-kick.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"create-cloudflare": minor
3+
---
4+
5+
add TanStack Start framework template

packages/create-cloudflare/e2e/helpers/framework-helpers.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -286,11 +286,11 @@ export async function verifyPreviewScript(
286286
// so wait up to 5 mins for the dev-server to be ready.
287287
await retry(
288288
{ times: 300, sleepMs: 5000 },
289-
async () => await fetch(`http://127.0.0.1:${port}${verifyPreview.route}`),
289+
async () => await fetch(`http://localhost:${port}${verifyPreview.route}`),
290290
);
291291

292292
// Make a request to the specified test route
293-
const res = await fetch(`http://127.0.0.1:${port}${verifyPreview.route}`);
293+
const res = await fetch(`http://localhost:${port}${verifyPreview.route}`);
294294
expect(await res.text()).toContain(verifyPreview.expectedText);
295295
} finally {
296296
// Kill the process gracefully so ports can be cleaned up

packages/create-cloudflare/e2e/tests/cli/cli.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -587,7 +587,7 @@ describe("Create Cloudflare CLI", () => {
587587
npm create cloudflare -- --framework next -- --ts
588588
pnpm create cloudflare --framework next -- --ts
589589
Allowed Values:
590-
analog, angular, astro, docusaurus, gatsby, hono, next, nuxt, qwik, react, react-router, solid, svelte, vue, waku
590+
analog, angular, astro, docusaurus, gatsby, hono, next, nuxt, qwik, react, react-router, solid, svelte, tanstack-start, vue, waku
591591
--platform=<value>
592592
Whether the application should be deployed to Pages or Workers. This is only applicable for Frameworks templates that support both Pages and Workers.
593593
Allowed Values:

packages/create-cloudflare/e2e/tests/frameworks/test-config.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -593,6 +593,21 @@ function getFrameworkTestConfig(pm: string): NamedFrameworkTestConfig[] {
593593
},
594594
nodeCompat: false,
595595
},
596+
{
597+
name: "tanstack-start",
598+
testCommitMessage: true,
599+
timeout: LONG_TIMEOUT,
600+
unsupportedOSs: ["win32"],
601+
verifyDeploy: {
602+
route: "/",
603+
expectedText: "TanStack Start Starter",
604+
},
605+
verifyPreview: {
606+
route: "/",
607+
expectedText: "TanStack Start Starter",
608+
},
609+
nodeCompat: true,
610+
},
596611
];
597612
}
598613

packages/create-cloudflare/src/frameworks/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
"create-solid": "0.6.11",
1818
"create-vue": "3.18.1",
1919
"create-waku": "0.12.5-0.26.1-0",
20+
"@tanstack/create-start": "0.34.2",
2021
"gatsby": "5.15.0",
2122
"sv": "0.9.8",
2223
"nuxi": "3.29.3"

packages/create-cloudflare/src/templates.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ import reactTemplate from "templates/react/c3";
4242
import scheduledTemplate from "templates/scheduled/c3";
4343
import solidTemplate from "templates/solid/c3";
4444
import svelteTemplate from "templates/svelte/c3";
45+
import tanStackStartTemplate from "templates/tanstack-start/c3";
4546
import vueTemplate from "templates/vue/c3";
4647
import wakuTemplate from "templates/waku/c3";
4748
import { isInsideGitRepo } from "./git";
@@ -204,6 +205,7 @@ export function getFrameworkMap({ experimental = false }): TemplateMap {
204205
"react-router": reactRouterTemplate,
205206
solid: solidTemplate,
206207
svelte: svelteTemplate,
208+
"tanstack-start": tanStackStartTemplate,
207209
vue: vueTemplate,
208210
waku: wakuTemplate,
209211
};
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import { logRaw } from "@cloudflare/cli";
2+
import { runFrameworkGenerator } from "frameworks/index";
3+
import { detectPackageManager } from "helpers/packageManagers";
4+
import type { TemplateConfig } from "../../src/templates";
5+
import type { C3Context } from "types";
6+
7+
const { npm } = detectPackageManager();
8+
9+
const generate = async (ctx: C3Context) => {
10+
await runFrameworkGenerator(ctx, [
11+
ctx.project.name,
12+
"--host",
13+
"cloudflare",
14+
"--framework",
15+
"react",
16+
// to prevent asking about git twice, just let c3 do it
17+
"--no-git",
18+
]);
19+
20+
logRaw(""); // newline
21+
};
22+
23+
const config: TemplateConfig = {
24+
configVersion: 1,
25+
id: "tanstack-start",
26+
platform: "workers",
27+
frameworkCli: "@tanstack/create-start",
28+
displayName: "TanStack Start",
29+
generate,
30+
transformPackageJson: async () => ({
31+
scripts: {
32+
deploy: `${npm} run build && wrangler deploy`,
33+
preview: `${npm} run build && vite preview`,
34+
"cf-typegen": `wrangler types`,
35+
},
36+
}),
37+
devScript: "dev",
38+
deployScript: "deploy",
39+
previewScript: "preview",
40+
};
41+
export default config;

0 commit comments

Comments
 (0)