Skip to content

Commit e88a6b8

Browse files
Update Cloudflare template (#109)
Co-authored-by: Mark Dalgleish <[email protected]>
1 parent 516deec commit e88a6b8

File tree

7 files changed

+243
-101
lines changed

7 files changed

+243
-101
lines changed

.tests/test.cloudflare.ts

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,30 +15,32 @@ test("dev", async ({ page, $ }) => {
1515

1616
const url = await matchLine(dev.stdout, urlRegex.viteDev);
1717
await workflow({ page, url });
18-
expect(dev.buffer.stderr).toBe("");
18+
const ignoredLines = [
19+
/Default inspector port \d{4} not available, using \d{4} instead/,
20+
];
21+
const filteredStderr = dev.buffer.stderr
22+
.split("\n")
23+
.filter(line => line && !ignoredLines.some(ignoredLine => ignoredLine.test(line)))
24+
.join("\n");
25+
expect(filteredStderr).toBe("");
1926
});
2027

21-
test("build + start", async ({ page, $ }) => {
22-
await $(`pnpm build`);
23-
28+
test("preview", async ({ page, $ }) => {
2429
const port1 = await getPort();
25-
const port2 = await getPort();
26-
const start = $(`pnpm start --port ${port1} --inspector-port ${port2}`);
30+
const preview = $(`pnpm preview --port ${port1}`);
2731

28-
const url = await matchLine(start.stdout, urlRegex.wrangler);
32+
const url = await matchLine(preview.stdout, urlRegex.viteDev);
2933
await workflow({ page, url });
3034

3135
const ignoredLines = [
32-
"The version of Wrangler you are using is now out-of-date",
33-
"Please update to the latest version to prevent critical errors",
34-
"Run `npm install --save-dev wrangler@4` to update to the latest version",
35-
"After installation, run Wrangler with `npx wrangler`"
36+
/The build was canceled/,
37+
/Error running vite-plugin-cloudflare:nodejs-compat on Tailwind CSS output\. Skipping\./,
38+
/Default inspector port \d{4} not available, using \d{4} instead/,
3639
];
37-
const filteredStderr = start.buffer.stderr
40+
const filteredStderr = preview.buffer.stderr
3841
.split("\n")
39-
.filter(line => !ignoredLines.some(ignoredLine => line.includes(ignoredLine)))
40-
.join("\n")
41-
.trim();
42+
.filter(line => line && !ignoredLines.some(ignoredLine => ignoredLine.test(line)))
43+
.join("\n");
4244
expect(filteredStderr).toBe("");
4345
});
4446

cloudflare/app/app.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
@import "tailwindcss";
1+
@import "tailwindcss" source(".");
22

33
@theme {
44
--font-sans: "Inter", ui-sans-serif, system-ui, sans-serif,

cloudflare/package.json

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,23 @@
22
"private": true,
33
"type": "module",
44
"scripts": {
5-
"build": "react-router build",
65
"dev": "react-router dev",
7-
"preview": "vite preview",
8-
"start": "wrangler dev",
6+
"build": "react-router build",
7+
"preview": "npm run build && vite preview",
98
"deploy": "npm run build && wrangler deploy",
10-
"typecheck": "wrangler types && react-router typegen && tsc -b"
9+
"cf-typegen": "wrangler types",
10+
"typecheck": "npm run cf-typegen && react-router typegen && tsc -b"
1111
},
1212
"dependencies": {
1313
"isbot": "^5.1.17",
1414
"react": "^19.0.0",
1515
"react-dom": "^19.0.0",
16-
"react-router": "^7.3.0"
16+
"react-router": "^7.5.0"
1717
},
1818
"devDependencies": {
19-
"@cloudflare/vite-plugin": "^0.1.11",
19+
"@cloudflare/vite-plugin": "^1.0.0",
2020
"@cloudflare/workers-types": "^4.20250303.0",
21-
"@react-router/dev": "^7.3.0",
21+
"@react-router/dev": "^7.5.0",
2222
"@tailwindcss/vite": "^4.0.0",
2323
"@types/node": "^20",
2424
"@types/react": "^19.0.1",
@@ -27,6 +27,6 @@
2727
"typescript": "^5.7.2",
2828
"vite": "^6.2.1",
2929
"vite-tsconfig-paths": "^5.1.4",
30-
"wrangler": "^3.114.1"
30+
"wrangler": "^4.7.2"
3131
}
3232
}
Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1-
// Generated by Wrangler by running `wrangler types`
2-
3-
interface Env {
4-
VALUE_FROM_CLOUDFLARE: "Hello from Cloudflare";
1+
// Generated by Wrangler
2+
// After adding bindings to `wrangler.jsonc`, regenerate this interface via `npm run cf-typegen`
3+
declare namespace Cloudflare {
4+
interface Env {
5+
VALUE_FROM_CLOUDFLARE: "Hello from Cloudflare";
6+
}
57
}
8+
interface Env extends Cloudflare.Env {}

cloudflare/workers/app.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,15 @@
11
import { createRequestHandler } from "react-router";
22

3-
declare global {
4-
interface CloudflareEnvironment extends Env {}
5-
}
6-
73
declare module "react-router" {
84
export interface AppLoadContext {
95
cloudflare: {
10-
env: CloudflareEnvironment;
6+
env: Env;
117
ctx: ExecutionContext;
128
};
139
}
1410
}
1511

1612
const requestHandler = createRequestHandler(
17-
// @ts-expect-error - virtual module provided by React Router
1813
() => import("virtual:react-router/server-build"),
1914
import.meta.env.MODE
2015
);
@@ -25,4 +20,4 @@ export default {
2520
cloudflare: { env, ctx },
2621
});
2722
},
28-
} satisfies ExportedHandler<CloudflareEnvironment>;
23+
} satisfies ExportedHandler<Env>;

cloudflare/wrangler.jsonc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
{
22
"$schema": "node_modules/wrangler/config-schema.json",
33
"name": "react-router-app",
4-
"compatibility_date": "2025-02-24",
4+
"compatibility_date": "2025-04-04",
55
"main": "./workers/app.ts",
6-
"assets": {},
76
"vars": {
87
"VALUE_FROM_CLOUDFLARE": "Hello from Cloudflare"
98
}

0 commit comments

Comments
 (0)