From 557bf2dc886fcb9941e06db4ef5152b10d55255a Mon Sep 17 00:00:00 2001 From: Manuel Schiller Date: Sat, 7 Feb 2026 00:22:28 +0100 Subject: [PATCH 1/5] feat: add transformAssetUrls --- docs/start/config.json | 4 + .../framework/react/guide/cdn-asset-urls.md | 196 ++++++++++++ .../transform-asset-urls/.gitignore | 18 ++ .../transform-asset-urls/.prettierignore | 4 + .../transform-asset-urls/package.json | 54 ++++ .../transform-asset-urls/playwright.config.ts | 63 ++++ .../transform-asset-urls/src/routeTree.gen.ts | 86 ++++++ .../transform-asset-urls/src/router.tsx | 12 + .../src/routes/__root.tsx | 40 +++ .../src/routes/about.module.css | 14 + .../transform-asset-urls/src/routes/about.tsx | 19 ++ .../transform-asset-urls/src/routes/index.tsx | 19 ++ .../transform-asset-urls/src/server.ts | 56 ++++ .../transform-asset-urls/src/styles/app.css | 11 + .../transform-asset-urls/tests/cdn-server.mjs | 28 ++ .../tests/transform-asset-urls.spec.ts | 195 ++++++++++++ .../transform-asset-urls/tsconfig.json | 22 ++ .../transform-asset-urls/vite.config.ts | 17 ++ .../src/createStartHandler.ts | 232 +++++++++++++- packages/start-server-core/src/index.tsx | 9 + .../start-server-core/src/router-manifest.ts | 34 +-- .../src/transformAssetUrls.ts | 284 ++++++++++++++++++ pnpm-lock.yaml | 79 ++++- 23 files changed, 1456 insertions(+), 40 deletions(-) create mode 100644 docs/start/framework/react/guide/cdn-asset-urls.md create mode 100644 e2e/react-start/transform-asset-urls/.gitignore create mode 100644 e2e/react-start/transform-asset-urls/.prettierignore create mode 100644 e2e/react-start/transform-asset-urls/package.json create mode 100644 e2e/react-start/transform-asset-urls/playwright.config.ts create mode 100644 e2e/react-start/transform-asset-urls/src/routeTree.gen.ts create mode 100644 e2e/react-start/transform-asset-urls/src/router.tsx create mode 100644 e2e/react-start/transform-asset-urls/src/routes/__root.tsx create mode 100644 e2e/react-start/transform-asset-urls/src/routes/about.module.css create mode 100644 e2e/react-start/transform-asset-urls/src/routes/about.tsx create mode 100644 e2e/react-start/transform-asset-urls/src/routes/index.tsx create mode 100644 e2e/react-start/transform-asset-urls/src/server.ts create mode 100644 e2e/react-start/transform-asset-urls/src/styles/app.css create mode 100644 e2e/react-start/transform-asset-urls/tests/cdn-server.mjs create mode 100644 e2e/react-start/transform-asset-urls/tests/transform-asset-urls.spec.ts create mode 100644 e2e/react-start/transform-asset-urls/tsconfig.json create mode 100644 e2e/react-start/transform-asset-urls/vite.config.ts create mode 100644 packages/start-server-core/src/transformAssetUrls.ts diff --git a/docs/start/config.json b/docs/start/config.json index 396b1be4af..63604bea87 100644 --- a/docs/start/config.json +++ b/docs/start/config.json @@ -137,6 +137,10 @@ "label": "Server Entry Point", "to": "framework/react/guide/server-entry-point" }, + { + "label": "CDN Asset URLs", + "to": "framework/react/guide/cdn-asset-urls" + }, { "label": "Client Entry Point", "to": "framework/react/guide/client-entry-point" diff --git a/docs/start/framework/react/guide/cdn-asset-urls.md b/docs/start/framework/react/guide/cdn-asset-urls.md new file mode 100644 index 0000000000..0c5671acdb --- /dev/null +++ b/docs/start/framework/react/guide/cdn-asset-urls.md @@ -0,0 +1,196 @@ +--- +id: cdn-asset-urls +title: CDN Asset URLs +--- + +# CDN Asset URLs + +> **Experimental:** `transformAssetUrls` is experimental and subject to change. + +When deploying to production, you may want to serve your static assets (JavaScript, CSS) from a CDN. The `transformAssetUrls` option on `createStartHandler` lets you rewrite asset URLs at runtime — for example, prepending a CDN origin that is only known when the server starts. + +## Why Runtime URL Rewriting? + +Vite's `base` config is evaluated at build time. If your CDN URL is determined at deploy time (via environment variables, dynamic configuration, etc.), you need a way to rewrite URLs at runtime. `transformAssetUrls` solves this for the URLs that TanStack Start manages in its manifest: + +- `` tags (JS preloads) +- `` tags (CSS) +- The client entry `