spiceflow 1.19.0 → 1.20.0-rsc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/README.md +199 -49
  2. package/dist/any-spiceflow-types.test.js +16 -8
  3. package/dist/any-spiceflow-types.test.js.map +1 -1
  4. package/dist/context.d.ts +13 -7
  5. package/dist/context.d.ts.map +1 -1
  6. package/dist/federation.default.d.ts +1 -0
  7. package/dist/federation.default.d.ts.map +1 -1
  8. package/dist/federation.default.js +1 -0
  9. package/dist/federation.default.js.map +1 -1
  10. package/dist/federation.rsc.d.ts +2 -0
  11. package/dist/federation.rsc.d.ts.map +1 -1
  12. package/dist/federation.rsc.js +10 -0
  13. package/dist/federation.rsc.js.map +1 -1
  14. package/dist/react/context.d.ts +2 -1
  15. package/dist/react/context.d.ts.map +1 -1
  16. package/dist/react/context.js +4 -4
  17. package/dist/react/context.js.map +1 -1
  18. package/dist/react/entry.client.js +17 -8
  19. package/dist/react/entry.client.js.map +1 -1
  20. package/dist/react/entry.ssr.d.ts +1 -1
  21. package/dist/react/entry.ssr.d.ts.map +1 -1
  22. package/dist/react/entry.ssr.js +11 -9
  23. package/dist/react/entry.ssr.js.map +1 -1
  24. package/dist/react/errors.d.ts +1 -13
  25. package/dist/react/errors.d.ts.map +1 -1
  26. package/dist/react/errors.js.map +1 -1
  27. package/dist/react/flight-data-context.d.ts +6 -1
  28. package/dist/react/flight-data-context.d.ts.map +1 -1
  29. package/dist/react/flight-data-context.js.map +1 -1
  30. package/dist/react/flight-data-context.rsc.d.ts +6 -1
  31. package/dist/react/flight-data-context.rsc.d.ts.map +1 -1
  32. package/dist/react/flight-data-context.rsc.js.map +1 -1
  33. package/dist/react/link.d.ts +2 -2
  34. package/dist/react/link.d.ts.map +1 -1
  35. package/dist/react/router-ssr.test.js +17 -2
  36. package/dist/react/router-ssr.test.js.map +1 -1
  37. package/dist/react/router.d.ts +1 -1
  38. package/dist/react/router.d.ts.map +1 -1
  39. package/dist/react/router.js +10 -4
  40. package/dist/react/router.js.map +1 -1
  41. package/dist/react/router.rsc.d.ts +1 -1
  42. package/dist/react/router.rsc.d.ts.map +1 -1
  43. package/dist/react/router.rsc.js +3 -1
  44. package/dist/react/router.rsc.js.map +1 -1
  45. package/dist/router-context-conditions.test.d.ts +2 -0
  46. package/dist/router-context-conditions.test.d.ts.map +1 -0
  47. package/dist/router-context-conditions.test.js +20 -0
  48. package/dist/router-context-conditions.test.js.map +1 -0
  49. package/dist/router-context.d.ts +2 -7
  50. package/dist/router-context.d.ts.map +1 -1
  51. package/dist/router-context.js.map +1 -1
  52. package/dist/spiceflow.d.ts +9 -9
  53. package/dist/spiceflow.d.ts.map +1 -1
  54. package/dist/spiceflow.js.map +1 -1
  55. package/dist/type-repros/loader-data-context.test.d.ts +2 -0
  56. package/dist/type-repros/loader-data-context.test.d.ts.map +1 -0
  57. package/dist/type-repros/loader-data-context.test.js +86 -0
  58. package/dist/type-repros/loader-data-context.test.js.map +1 -0
  59. package/dist/type-repros/registered-app-circular.test.d.ts +2 -0
  60. package/dist/type-repros/registered-app-circular.test.d.ts.map +1 -0
  61. package/dist/type-repros/registered-app-circular.test.js +82 -0
  62. package/dist/type-repros/registered-app-circular.test.js.map +1 -0
  63. package/dist/types.d.ts +7 -3
  64. package/dist/types.d.ts.map +1 -1
  65. package/dist/vite.d.ts.map +1 -1
  66. package/dist/vite.js +0 -16
  67. package/dist/vite.js.map +1 -1
  68. package/package.json +4 -4
  69. package/src/any-spiceflow-types.test.ts +16 -8
  70. package/src/context.ts +38 -11
  71. package/src/federation.default.ts +1 -0
  72. package/src/federation.rsc.ts +20 -0
  73. package/src/react/context.tsx +9 -7
  74. package/src/react/entry.client.tsx +26 -8
  75. package/src/react/entry.ssr.tsx +14 -20
  76. package/src/react/errors.tsx +2 -50
  77. package/src/react/flight-data-context.rsc.ts +9 -3
  78. package/src/react/flight-data-context.tsx +7 -1
  79. package/src/react/link.tsx +2 -2
  80. package/src/react/router-ssr.test.tsx +29 -5
  81. package/src/react/router.rsc.ts +5 -3
  82. package/src/react/router.tsx +13 -10
  83. package/src/router-context-conditions.test.ts +23 -0
  84. package/src/router-context.ts +2 -7
  85. package/src/spiceflow.tsx +47 -9
  86. package/src/type-repros/loader-data-context.test.ts +98 -0
  87. package/src/type-repros/registered-app-circular.test.ts +101 -0
  88. package/src/types.ts +9 -4
  89. package/src/vite.tsx +0 -16
package/README.md CHANGED
@@ -851,6 +851,88 @@ The `preventProcessExitIfBusy` middleware prevents platforms like Fly.io from ki
851
851
 
852
852
  Spiceflow has built-in OpenTelemetry tracing. Pass a `tracer` to the constructor and every request gets automatic spans for middleware, handlers, loaders, layouts, pages, and RSC serialization. Set `serverTiming: true` too if you want those spans exposed as a `Server-Timing` response header in Chrome DevTools, with nested descriptions like `handler - /users/:id > db.query`. Zero overhead when disabled. Handlers can also read `traceId` and `spanId` from `span.spanContext?.()` when the tracer supports it. See [Tracing docs](docs/tracing.md) for setup, span trees, custom spans, and examples.
853
853
 
854
+ ## Observability with Strada
855
+
856
+ [Strada](https://strada.sh) is an OpenTelemetry backend with error tracking, logs, traces, metrics, analytics, and a SQL CLI. Use `@strada.sh/sdk` to configure OTel once, pass its tracer to Spiceflow, then use the same SDK for logs and handled exceptions.
857
+
858
+ Create a project first, or list existing projects to find the project ID:
859
+
860
+ ```bash
861
+ strada database create
862
+ strada projects create my-api
863
+
864
+ # Later, find the project ID and ingest endpoint again
865
+ strada projects list
866
+ ```
867
+
868
+ Install Strada in your Spiceflow app:
869
+
870
+ ```bash
871
+ npm install @strada.sh/sdk
872
+ ```
873
+
874
+ Then initialize Strada before creating the Spiceflow app:
875
+
876
+ ```ts
877
+ import { Spiceflow } from 'spiceflow'
878
+ import {
879
+ SpanStatusCode,
880
+ captureException,
881
+ getLogger,
882
+ initStrada,
883
+ trace,
884
+ } from '@strada.sh/sdk'
885
+
886
+ initStrada({
887
+ projectId: process.env.STRADA_PROJECT_ID!,
888
+ service: 'api',
889
+ environment: process.env.NODE_ENV ?? 'development',
890
+ enabled: !import.meta.hot,
891
+ })
892
+
893
+ // enabled: false keeps OTel APIs local but sends nothing to ingest.
894
+ // In Vite/RSC dev servers, import.meta.hot is truthy during HMR.
895
+
896
+ const tracer = trace.getTracer('api')
897
+ const logger = getLogger('api')
898
+
899
+ export const app = new Spiceflow({ tracer, serverTiming: true })
900
+ .get('/api/users/:id', async ({ params, span, tracer }) => {
901
+ span.setAttribute('user.id', params.id)
902
+ logger.info({ message: 'loading user', userId: params.id })
903
+
904
+ return tracer.startActiveSpan('db.find-user', async (dbSpan) => {
905
+ try {
906
+ dbSpan.setAttribute('db.operation', 'SELECT')
907
+ return { id: params.id, name: 'Alice' }
908
+ } finally {
909
+ dbSpan.end()
910
+ }
911
+ })
912
+ })
913
+ .onError(({ error, path, span }) => {
914
+ captureException(error, { tags: { path } })
915
+ span.recordException(error)
916
+ span.setStatus({ code: SpanStatusCode.ERROR })
917
+
918
+ logger.error({
919
+ message: 'request failed',
920
+ path,
921
+ error: error instanceof Error ? error.message : String(error),
922
+ })
923
+
924
+ return new Response('An error occurred', { status: 500 })
925
+ })
926
+ ```
927
+
928
+ The Spiceflow request spans, custom child spans, logs, and `captureException()` calls all flow to the same Strada project. Use the CLI to inspect them:
929
+
930
+ ```bash
931
+ strada issues list -p my-api --since 24h
932
+ strada logs -p my-api --since 1h
933
+ strada query "SELECT count() FROM otel_traces" -p my-api
934
+ ```
935
+
854
936
  ## React Framework (RSC)
855
937
 
856
938
  Spiceflow includes a full-stack React framework built on React Server Components (RSC). It uses Vite with `@vitejs/plugin-rsc` under the hood. Server components run on the server by default, and you use `"use client"` to mark interactive components that need to run in the browser.
@@ -1261,12 +1343,15 @@ export function Counter() {
1261
1343
 
1262
1344
  Loaders run on the server before page and layout handlers. They solve a common problem: when you need the same data in both server components and client components, or in both a layout and a page, without prop drilling or React context.
1263
1345
 
1346
+ Prefer putting route data in loaders when that data is shared by more than one part of the route tree. This keeps fetching in one place, avoids fetching the same data once in a layout and again in a page, and lets React components read the current route data directly instead of receiving long prop chains.
1347
+
1264
1348
  Loaders only run for requests that also match a `.page()` or `.layout()`. They are not standalone endpoints. If you want to serve content without rendering a page or layout, use `.get()`, `.route()`, or another API handler instead.
1265
1349
 
1266
1350
  ```tsx
1267
1351
  export const app = new Spiceflow()
1268
- // Auth loader for all routes — wildcard pattern matches everything
1269
- .loader('/*', async ({ request }) => {
1352
+ .page('/login', async () => <Login />)
1353
+ // Auth loader for the dashboard route
1354
+ .loader('/dashboard', async ({ request, redirect }) => {
1270
1355
  const user = await getUser(request.headers.get('cookie'))
1271
1356
  if (!user) throw redirect('/login')
1272
1357
  return { user }
@@ -1276,8 +1361,8 @@ export const app = new Spiceflow()
1276
1361
  const stats = await getStats()
1277
1362
  return { stats }
1278
1363
  })
1279
- .layout('/*', async ({ loaderData, children }) => {
1280
- // loaderData.user is available here from the wildcard loader
1364
+ .layout('/dashboard', async ({ loaderData, children }) => {
1365
+ // loaderData.user is available here from the dashboard loader
1281
1366
  return (
1282
1367
  <html>
1283
1368
  <body>
@@ -1288,14 +1373,57 @@ export const app = new Spiceflow()
1288
1373
  )
1289
1374
  })
1290
1375
  .page('/dashboard', async ({ loaderData }) => {
1291
- // Both loaders matched data is merged by specificity
1376
+ // Both loaders matched, data is merged by specificity
1292
1377
  // loaderData = { user: ..., stats: ... }
1293
1378
  return <Dashboard user={loaderData.user} stats={loaderData.stats} />
1294
1379
  })
1295
1380
  ```
1296
1381
 
1382
+ A Remix-style dashboard can put shared shell data in a parent loader, then page data in loaders placed next to each page. The layout, page, and client components all read from the same request-scoped loader data:
1383
+
1384
+ ```tsx
1385
+ export const app = new Spiceflow()
1386
+ .loader('/dashboard/*', async ({ request }) => {
1387
+ const user = await getUser(request)
1388
+ const projects = await getProjects(user.id)
1389
+ return { user, projects }
1390
+ })
1391
+ .layout('/dashboard/*', async ({ children, loaderData }) => {
1392
+ return <DashboardShell user={loaderData.user}>{children}</DashboardShell>
1393
+ })
1394
+ .loader('/dashboard/projects/:id', async ({ params }) => {
1395
+ const project = await getProject(params.id)
1396
+ return { project }
1397
+ })
1398
+ .page('/dashboard/projects/:id', async () => {
1399
+ return <ProjectPage />
1400
+ })
1401
+
1402
+ declare module 'spiceflow/react' {
1403
+ interface SpiceflowRegister { app: typeof app }
1404
+ }
1405
+ ```
1406
+
1407
+ ```tsx
1408
+ 'use client'
1409
+
1410
+ import { useLoaderData } from 'spiceflow/react'
1411
+
1412
+ export function ProjectSwitcher() {
1413
+ const { projects } = useLoaderData('/dashboard/*')
1414
+ return projects.map((project) => <a href={project.href}>{project.name}</a>)
1415
+ }
1416
+
1417
+ export function ProjectHeader() {
1418
+ const { user, project } = useLoaderData('/dashboard/projects/:id')
1419
+ return <h1>{project.name} for {user.name}</h1>
1420
+ }
1421
+ ```
1422
+
1297
1423
  When multiple loaders match a route (e.g. `/*` and `/dashboard` both match `/dashboard`), their return values are merged into a single flat object. More specific loaders override less specific ones on key conflicts.
1298
1424
 
1425
+ Loader data is type safe when the app is registered globally with `SpiceflowRegister`. `useLoaderData('/dashboard/projects/:id')` and `router.getLoaderData('/dashboard/projects/:id')` infer the merged object returned by every matching loader, so renaming a loader field or removing it becomes a TypeScript error in every component that reads it.
1426
+
1299
1427
  **Serialization**: loader return values are serialized through the React RSC flight format, not JSON. You can return JSX (including server components and client component elements with their props), `Promise`, async iterators, `Map`, `Set`, `Date`, `BigInt`, typed arrays, and any client component reference — all deserialized faithfully on the client. This means a loader can return a fully rendered `<Sidebar user={user} />` element and another component can receive it as `loaderData.sidebar` and drop it into the tree.
1300
1428
 
1301
1429
  **Reading loader data in client components** uses the `useLoaderData` hook from `spiceflow/react`:
@@ -1364,11 +1492,33 @@ Spiceflow already parallelizes at the framework level — all matched loaders ru
1364
1492
 
1365
1493
  Forms use React 19's `<form action>` with server functions marked `"use server"`. They work before JavaScript loads (progressive enhancement).
1366
1494
 
1495
+ Forms also support normal browser submissions when `action` is a string URL. This is standard HTML behavior in Spiceflow: the browser submits the form to the URL and performs a full document navigation.
1496
+
1497
+ ```tsx
1498
+ .page('/search', async () => {
1499
+ return (
1500
+ <form method="get" action="/results">
1501
+ <input name="q" />
1502
+ <button type="submit">Search</button>
1503
+ </form>
1504
+ )
1505
+ })
1506
+ ```
1507
+
1508
+ Prefer a server or client action when the form should feel app-like. Passing a function to `action` lets React handle submission in a transition instead of doing a full browser reload. A server action can mutate data, then automatically re-render the current page with fresh server data or throw the handler context `redirect` to navigate. A client action can update local state, call APIs, or schedule a client navigation with `router.push()` / `router.replace()`.
1509
+
1510
+ ```tsx
1511
+ <form action={saveSettings}>
1512
+ <input name="name" />
1513
+ <Button type="submit">Save</Button>
1514
+ </form>
1515
+ ```
1516
+
1367
1517
  **Every server action call automatically re-renders the current page with fresh server data.** This applies to forms, client wrapper functions, and direct imported server action calls. The re-render happens via React reconciliation, so client component state is preserved. No manual `router.refresh()` needed after a server action.
1368
1518
 
1369
1519
  Every submit button should show a loading state while its form action is in progress. Use `useFormStatus` from `react-dom` in your Button component to auto-detect pending forms — the button shows a spinner automatically when it's inside a `<form>` with a pending action:
1370
1520
 
1371
- Prefer file-level `"use server"` (a dedicated file like `src/actions.tsx`) over inline `"use server"` inside function bodies. Inline is fine for simple form actions defined directly in a server component page, but if you find yourself passing actions as props to client components, import them from a `"use server"` file instead — it keeps action logic centralized and reusable. The inline examples below are kept short for readability.
1521
+ Prefer file-level `"use server"` (a dedicated file like `src/actions.tsx`) over inline `"use server"` inside function bodies. Inline is fine for simple form actions defined directly in a server component page, or when the action needs the handler context `redirect`. If you find yourself passing actions as props to client components, import them from a `"use server"` file instead — it keeps action logic centralized and reusable.
1372
1522
 
1373
1523
  ```tsx
1374
1524
  // src/app/button.tsx
@@ -1390,13 +1540,14 @@ Then use it in forms — no manual loading state needed. Use `parseFormData` to
1390
1540
 
1391
1541
  ```tsx
1392
1542
  import { z } from 'zod'
1393
- import { redirect, parseFormData } from 'spiceflow'
1543
+ import { parseFormData } from 'spiceflow'
1394
1544
  import { Button } from './app/button'
1395
1545
 
1396
1546
  const subscribeSchema = z.object({ email: z.string().email() })
1397
1547
  const fields = subscribeSchema.keyof().enum
1398
1548
 
1399
- .page('/subscribe', async () => {
1549
+ .page('/thank-you', async () => <ThankYou />)
1550
+ .page('/subscribe', async ({ redirect }) => {
1400
1551
  async function subscribe(formData: FormData) {
1401
1552
  'use server'
1402
1553
  const { email } = parseFormData(subscribeSchema, formData)
@@ -1640,43 +1791,37 @@ function DeleteButton({ id }: { id: string }) {
1640
1791
 
1641
1792
  ### Redirecting After Actions
1642
1793
 
1643
- When a server action needs to navigate to a different page (e.g. after creating a resource), use `throw redirect()` inside the action instead of `router.push()` on the client. Since every server action triggers a page re-render, calling `router.push()` after the action would briefly flash the re-rendered current page before navigating away.
1794
+ When a server action needs to navigate to a different page (e.g. after creating a resource), use the handler context `redirect` inside the action instead of `router.push()` on the client. Since every server action triggers a page re-render, calling `router.push()` after the action would briefly flash the re-rendered current page before navigating away.
1644
1795
 
1645
1796
  ```tsx
1646
- // src/actions.ts
1647
- 'use server'
1648
-
1797
+ import { Spiceflow, parseFormData } from 'spiceflow'
1649
1798
  import { z } from 'zod'
1650
- import { redirect, parseFormData } from 'spiceflow'
1651
-
1652
- export const projectSchema = z.object({ name: z.string().min(1) })
1653
-
1654
- export async function createProject(orgId: string, formData: FormData) {
1655
- const { name } = parseFormData(projectSchema, formData)
1656
- const project = await db.projects.create({ name, orgId })
1657
- throw redirect(`/orgs/${orgId}/projects/${project.id}`)
1658
- }
1659
- ```
1660
-
1661
- ```tsx
1662
- // src/app/create-project.tsx
1663
- 'use client'
1664
-
1665
- import { ErrorBoundary } from 'spiceflow/react'
1666
- import { createProject, projectSchema } from '../actions'
1667
1799
 
1800
+ const projectSchema = z.object({ name: z.string().min(1) })
1668
1801
  const fields = projectSchema.keyof().enum
1669
1802
 
1670
- export function CreateProjectForm({ orgId }: { orgId: string }) {
1671
- return (
1672
- <ErrorBoundary fallback={<ErrorBoundary.ErrorMessage />}>
1673
- <form action={createProject.bind(null, orgId)}>
1803
+ export const app = new Spiceflow()
1804
+ .page('/orgs/:orgId/projects/:projectId', async ({ params }) => {
1805
+ const project = await db.projects.find(params.projectId)
1806
+ return <ProjectPage project={project} />
1807
+ })
1808
+ .page('/orgs/:orgId/projects/new', async ({ params, redirect }) => {
1809
+ async function createProject(formData: FormData) {
1810
+ 'use server'
1811
+ const { name } = parseFormData(projectSchema, formData)
1812
+ const project = await db.projects.create({ name, orgId: params.orgId })
1813
+ throw redirect('/orgs/:orgId/projects/:projectId', {
1814
+ params: { orgId: params.orgId, projectId: project.id },
1815
+ })
1816
+ }
1817
+
1818
+ return (
1819
+ <form action={createProject}>
1674
1820
  <input name={fields.name} required />
1675
1821
  <button type="submit">Create</button>
1676
1822
  </form>
1677
- </ErrorBoundary>
1678
- )
1679
- }
1823
+ )
1824
+ })
1680
1825
  ```
1681
1826
 
1682
1827
  `router.push()`, `router.replace()`, `router.back()`, `router.forward()`, and `router.go()` are still the right choice for pure client-side navigation that doesn't involve a server action (e.g. tab switches, select dropdowns, back buttons). These APIs are all fire-and-forget — do not build awaitable wrappers around navigation commits and then call them inside a React client form action.
@@ -1872,7 +2017,7 @@ declare module 'spiceflow/react' {
1872
2017
  }
1873
2018
  ```
1874
2019
 
1875
- After this, **all typed APIs** are fully typed everywhere no generics needed:
2020
+ After this, **all typed APIs** are fully typed everywhere, no generics needed:
1876
2021
 
1877
2022
  ```tsx
1878
2023
  // spiceflow/react exports
@@ -2023,12 +2168,13 @@ Each yielded element — whether a text paragraph, a weather card, or a stock ch
2023
2168
 
2024
2169
  ### Redirects and Not Found
2025
2170
 
2026
- Use `redirect()` and `response.status` inside `.page()`, `.layout()`, and server action handlers to control navigation and HTTP status codes:
2171
+ Use the handler context `redirect` and `response.status` inside `.page()` and `.layout()` handlers to control navigation and HTTP status codes:
2027
2172
 
2028
2173
  ```tsx
2029
- import { Spiceflow, redirect } from 'spiceflow'
2174
+ import { Spiceflow } from 'spiceflow'
2030
2175
 
2031
2176
  export const app = new Spiceflow()
2177
+ .page('/login', async () => <Login />)
2032
2178
  .layout('/*', async ({ children, request }) => {
2033
2179
  // When no page matches, children is null — render a custom 404
2034
2180
  return (
@@ -2037,7 +2183,7 @@ export const app = new Spiceflow()
2037
2183
  </AppLayout>
2038
2184
  )
2039
2185
  })
2040
- .page('/dashboard', async ({ request }) => {
2186
+ .page('/dashboard', async ({ request, redirect }) => {
2041
2187
  const user = await getUser(request)
2042
2188
  if (!user) {
2043
2189
  throw redirect('/login')
@@ -2054,7 +2200,7 @@ export const app = new Spiceflow()
2054
2200
  })
2055
2201
  // Layouts can throw redirect — useful for auth guards that protect
2056
2202
  // an entire section of your app
2057
- .layout('/admin/*', async ({ children, request }) => {
2203
+ .layout('/admin/*', async ({ children, request, redirect }) => {
2058
2204
  const user = await getUser(request)
2059
2205
  if (!user?.isAdmin) {
2060
2206
  throw redirect('/login')
@@ -2065,15 +2211,19 @@ export const app = new Spiceflow()
2065
2211
  export type App = typeof app
2066
2212
  ```
2067
2213
 
2068
- `redirect()` accepts an optional second argument for custom status codes and headers:
2214
+ Context `redirect()` accepts an optional second argument for custom status codes and headers:
2069
2215
 
2070
2216
  ```tsx
2071
2217
  // 301 permanent redirect
2072
- throw redirect('/new-url', { status: 301 })
2218
+ .page('/old-login', async ({ redirect }) => {
2219
+ throw redirect('/login', { status: 301 })
2220
+ })
2073
2221
 
2074
2222
  // Redirect with custom headers
2075
- throw redirect('/login', {
2076
- headers: { 'set-cookie': 'session=; Max-Age=0' },
2223
+ .page('/logout', async ({ redirect }) => {
2224
+ throw redirect('/login', {
2225
+ headers: { 'set-cookie': 'session=; Max-Age=0' },
2226
+ })
2077
2227
  })
2078
2228
  ```
2079
2229
 
@@ -2084,25 +2234,25 @@ throw redirect('/login', {
2084
2234
 
2085
2235
  **Correct HTTP status codes.** Unlike Next.js, where redirects always return a 200 status with client-side handling, Spiceflow returns the actual HTTP status code in the response — `307` for redirects (with a `Location` header) and whatever you set via `response.status` for pages. This works even when the throw happens after an `await`, because the SSR layer intercepts the error from the RSC stream before flushing the HTML response. Search engines see correct status codes, and `fetch()` calls with `redirect: "manual"` get the real `307` response.
2086
2236
 
2087
- **Client-side navigation.** When a user clicks a `<Link>` that navigates to a page throwing `redirect()`, the router performs the redirect client-side without a full page reload.
2237
+ **Client-side navigation.** When a user clicks a `<Link>` that navigates to a page throwing context `redirect()`, the router performs the redirect client-side without a full page reload.
2088
2238
 
2089
2239
  </details>
2090
2240
 
2091
2241
  <details>
2092
2242
  <summary>Authentication: pages vs API routes</summary>
2093
2243
 
2094
- Pages and layouts should always `throw redirect('/login')` when the user is not authenticated. API routes (`.get()`, `.post()`, etc.) should return a JSON error with a 401 status instead. This keeps the experience clean: users visiting a protected page get redirected to login instead of seeing a raw JSON blob, while API consumers get a proper typed error response they can handle programmatically.
2244
+ Pages and layouts should always `throw redirect('/login')` from handler context when the user is not authenticated. API routes (`.get()`, `.post()`, etc.) should return a JSON error with a 401 status instead. This keeps the experience clean: users visiting a protected page get redirected to login instead of seeing a raw JSON blob, while API consumers get a proper typed error response they can handle programmatically.
2095
2245
 
2096
2246
  ```tsx
2097
2247
  // Page — redirect to login
2098
- .page('/dashboard', async ({ request }) => {
2248
+ .page('/dashboard', async ({ request, redirect }) => {
2099
2249
  const user = await getUser(request)
2100
2250
  if (!user) throw redirect('/login')
2101
2251
  return <Dashboard user={user} />
2102
2252
  })
2103
2253
 
2104
2254
  // Layout — redirect to login (protects all nested pages)
2105
- .layout('/app/*', async ({ children, request }) => {
2255
+ .layout('/app/*', async ({ children, request, redirect }) => {
2106
2256
  const user = await getUser(request)
2107
2257
  if (!user) throw redirect('/login')
2108
2258
  return <AppLayout>{children}</AppLayout>
@@ -353,14 +353,28 @@ test('Link: typed app validates href paths and requires params', () => {
353
353
  // @ts-expect-error - wrong param key rejected
354
354
  expectLink({ href: '/users/:id', params: { slug: '1' } });
355
355
  });
356
- test('redirect is typed through SpiceflowRegister', () => {
356
+ test('exported redirect accepts plain strings while context redirect is typed', () => {
357
357
  const diagnostics = getDiagnosticsForSnippet(`
358
358
  import { Spiceflow } from './spiceflow.tsx'
359
359
  import { redirect } from './react/index.ts'
360
360
 
361
361
  const app = new Spiceflow()
362
362
  .page('/login', async () => 'login')
363
- .page('/users/:id', async () => 'user')
363
+ .page('/users/:id', async ({ redirect: routeRedirect }) => {
364
+ routeRedirect('/login')
365
+ routeRedirect('/users/:id', { params: { id: '42' } })
366
+
367
+ // @ts-expect-error missing params
368
+ routeRedirect('/users/:id')
369
+
370
+ // @ts-expect-error wrong param key
371
+ routeRedirect('/users/:id', { params: { slug: '1' } })
372
+
373
+ // @ts-expect-error invalid literal path
374
+ routeRedirect('/missing')
375
+
376
+ return 'user'
377
+ })
364
378
 
365
379
  declare module './react/router.js' {
366
380
  interface SpiceflowRegister {
@@ -373,14 +387,8 @@ redirect('/users/:id', { params: { id: '42' } })
373
387
  const id = '42'
374
388
  redirect(\`/users/\${id}\`)
375
389
  redirect('https://example.com')
376
-
377
- // @ts-expect-error missing params
378
390
  redirect('/users/:id')
379
-
380
- // @ts-expect-error wrong param key
381
391
  redirect('/users/:id', { params: { slug: '1' } })
382
-
383
- // @ts-expect-error invalid path
384
392
  redirect('/missing')
385
393
  `);
386
394
  expect(diagnostics).toEqual([]);
@@ -1 +1 @@
1
- {"version":3,"file":"any-spiceflow-types.test.js","sourceRoot":"","sources":["../src/any-spiceflow-types.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"any-spiceflow-types.test.js","sourceRoot":"","sources":["../src/any-spiceflow-types.test.ts"],"names":[],"mappings":"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"}
package/dist/context.d.ts CHANGED
@@ -1,11 +1,17 @@
1
- import type { RouteSchema, Prettify, ResolvePath, SingletonBase, GetRequestSchema } from './types.js';
1
+ import type { RouteSchema, Prettify, ResolvePath, SingletonBase, GetRequestSchema, AllHrefPaths, ExtractParamsFromPath, PathParamsProp } from './types.js';
2
2
  import { SpiceflowRequest, WaitUntil } from './spiceflow.js';
3
3
  import type { SpiceflowSpan, SpiceflowTracer } from './instrumentation.js';
4
- type Redirect = (location: string, options?: {
4
+ type RedirectOptions = {
5
5
  status?: number;
6
6
  headers?: Record<string, string>;
7
+ };
8
+ type RedirectArgs<Path extends string> = [ExtractParamsFromPath<Path>] extends [undefined] ? [options?: RedirectOptions & PathParamsProp<Path>] : [options: RedirectOptions & PathParamsProp<Path>];
9
+ type RedirectAnyOptions = RedirectOptions & {
7
10
  params?: Record<string, string | number | boolean>;
8
- }) => Response;
11
+ };
12
+ type ExternalRedirectLocation = `${string}://${string}` | `//${string}` | `?${string}` | `#${string}`;
13
+ type DynamicStringRedirect = <Location extends string>(location: string extends Location ? Location : never, options?: RedirectAnyOptions) => Response;
14
+ type Redirect<Paths extends string = string> = string extends Paths ? (location: string, options?: RedirectAnyOptions) => Response : (<Location extends AllHrefPaths<Paths>>(location: Location, ...rest: RedirectArgs<Location>) => Response) & ((location: ExternalRedirectLocation, options?: RedirectOptions) => Response) & DynamicStringRedirect;
9
15
  export interface ContextResponse {
10
16
  headers: Headers;
11
17
  status: number;
@@ -14,12 +20,12 @@ export type ErrorContext<Path extends string = '', in out Route extends RouteSch
14
20
  state: {};
15
21
  derive: {};
16
22
  resolve: {};
17
- }> = Prettify<{
23
+ }, RedirectPaths extends string = string> = Prettify<{
18
24
  query: undefined extends Route['query'] ? Record<string, string> : Route['query'];
19
25
  params: undefined extends Route['params'] ? Path extends `${string}/${':' | '*'}${string}` ? ResolvePath<Path> : {
20
26
  [key in string]: string;
21
27
  } : Route['params'];
22
- redirect: Redirect;
28
+ redirect: Redirect<RedirectPaths>;
23
29
  /**
24
30
  * Path extracted from incoming URL
25
31
  *
@@ -45,10 +51,10 @@ export type SpiceflowContext<Path extends string = '', in out Route extends Rout
45
51
  state: {};
46
52
  derive: {};
47
53
  resolve: {};
48
- }, LoaderData = {}> = Prettify<{
54
+ }, LoaderData = {}, RedirectPaths extends string = string> = Prettify<{
49
55
  query: undefined extends Route['query'] ? Record<string, string> : Route['query'];
50
56
  params: undefined extends Route['params'] ? Path extends `${string}/${':' | '*'}${string}` ? ResolvePath<Path> : never : Route['params'];
51
- redirect: Redirect;
57
+ redirect: Redirect<RedirectPaths>;
52
58
  path: string;
53
59
  request: SpiceflowRequest<GetRequestSchema<Route>>;
54
60
  state: Singleton['state'];
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  export declare const renderToReadableStream: any;
2
+ export declare const renderToStaticMarkup: (...args: any[]) => Promise<string>;
2
3
  export declare const encodeFederationPayload: (...args: any[]) => Promise<Response>;
3
4
  export declare const renderFlightPayload: (...args: any[]) => Promise<Response>;
4
5
  export declare const renderComponentPayload: (...args: any[]) => Promise<Response>;
@@ -1 +1 @@
1
- {"version":3,"file":"federation.default.d.ts","sourceRoot":"","sources":["../src/federation.default.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,sBAAsB,EAAE,GAAiB,CAAA;AACtD,eAAO,MAAM,uBAAuB,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,QAAQ,CAAe,CAAA;AACzF,eAAO,MAAM,mBAAmB,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,QAAQ,CAAe,CAAA;AACrF,eAAO,MAAM,sBAAsB,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,QAAQ,CAAe,CAAA"}
1
+ {"version":3,"file":"federation.default.d.ts","sourceRoot":"","sources":["../src/federation.default.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,sBAAsB,EAAE,GAAiB,CAAA;AACtD,eAAO,MAAM,oBAAoB,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,MAAM,CAAe,CAAA;AACpF,eAAO,MAAM,uBAAuB,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,QAAQ,CAAe,CAAA;AACzF,eAAO,MAAM,mBAAmB,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,QAAQ,CAAe,CAAA;AACrF,eAAO,MAAM,sBAAsB,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,QAAQ,CAAe,CAAA"}
@@ -5,6 +5,7 @@ function unavailable() {
5
5
  'encodeFederationPayload must be called from a spiceflow route handler inside a Vite RSC build.');
6
6
  }
7
7
  export const renderToReadableStream = unavailable;
8
+ export const renderToStaticMarkup = unavailable;
8
9
  export const encodeFederationPayload = unavailable;
9
10
  export const renderFlightPayload = unavailable;
10
11
  export const renderComponentPayload = unavailable;
@@ -1 +1 @@
1
- {"version":3,"file":"federation.default.js","sourceRoot":"","sources":["../src/federation.default.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,gCAAgC;AAEhC,SAAS,WAAW;IAClB,MAAM,IAAI,KAAK,CACb,kFAAkF;QAChF,gGAAgG,CACnG,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAQ,WAAW,CAAA;AACtD,MAAM,CAAC,MAAM,uBAAuB,GAA0C,WAAW,CAAA;AACzF,MAAM,CAAC,MAAM,mBAAmB,GAA0C,WAAW,CAAA;AACrF,MAAM,CAAC,MAAM,sBAAsB,GAA0C,WAAW,CAAA"}
1
+ {"version":3,"file":"federation.default.js","sourceRoot":"","sources":["../src/federation.default.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,gCAAgC;AAEhC,SAAS,WAAW;IAClB,MAAM,IAAI,KAAK,CACb,kFAAkF;QAChF,gGAAgG,CACnG,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAQ,WAAW,CAAA;AACtD,MAAM,CAAC,MAAM,oBAAoB,GAAwC,WAAW,CAAA;AACpF,MAAM,CAAC,MAAM,uBAAuB,GAA0C,WAAW,CAAA;AACzF,MAAM,CAAC,MAAM,mBAAmB,GAA0C,WAAW,CAAA;AACrF,MAAM,CAAC,MAAM,sBAAsB,GAA0C,WAAW,CAAA"}
@@ -1,5 +1,7 @@
1
+ import React from 'react';
1
2
  import { renderToReadableStream } from '#rsc-runtime';
2
3
  export { renderToReadableStream };
4
+ export declare function renderToStaticMarkup(value: React.ReactNode): Promise<string>;
3
5
  /**
4
6
  * Renders any Flight-serializable value to a federation Response in SSE format.
5
7
  *
@@ -1 +1 @@
1
- {"version":3,"file":"federation.rsc.d.ts","sourceRoot":"","sources":["../src/federation.rsc.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAA;AAIrD,OAAO,EAAE,sBAAsB,EAAE,CAAA;AAqMjC;;;;;;;;;;;GAWG;AACH,wBAAsB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAiE/E;AAED,eAAO,MAAM,mBAAmB,gCAA0B,CAAA;AAC1D,eAAO,MAAM,sBAAsB,gCAA0B,CAAA"}
1
+ {"version":3,"file":"federation.rsc.d.ts","sourceRoot":"","sources":["../src/federation.rsc.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAA;AAIrD,OAAO,EAAE,sBAAsB,EAAE,CAAA;AA2CjC,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,mBAIhE;AA0KD;;;;;;;;;;;GAWG;AACH,wBAAsB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAiE/E;AAED,eAAO,MAAM,mBAAmB,gCAA0B,CAAA;AAC1D,eAAO,MAAM,sBAAsB,gCAA0B,CAAA"}
@@ -28,6 +28,16 @@ async function streamToString({ stream, signal, }) {
28
28
  reader.releaseLock();
29
29
  }
30
30
  }
31
+ async function renderFlightStreamToHtml({ stream, signal, }) {
32
+ const flightPayload = await streamToString({ stream, signal });
33
+ const ssrModule = await import.meta.viteRsc.loadModule('ssr', 'index');
34
+ return await ssrModule.renderFlightToHtml(flightPayload);
35
+ }
36
+ export async function renderToStaticMarkup(value) {
37
+ return await renderFlightStreamToHtml({
38
+ stream: renderToReadableStream(value),
39
+ });
40
+ }
31
41
  function formatSSEEvent(event, data) {
32
42
  return `event: ${event}\ndata: ${data}\n\n`;
33
43
  }