@timber-js/app 0.2.0-alpha.17 → 0.2.0-alpha.170
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.
- package/LICENSE +8 -0
- package/agent-skill.md +344 -0
- package/dist/_chunks/actions-O_LsyCE4.js +317 -0
- package/dist/_chunks/actions-O_LsyCE4.js.map +1 -0
- package/dist/_chunks/build-output-helper-DF5uScqS.js +158 -0
- package/dist/_chunks/build-output-helper-DF5uScqS.js.map +1 -0
- package/dist/_chunks/cache-api-B-lhk9p4.js +1202 -0
- package/dist/_chunks/cache-api-B-lhk9p4.js.map +1 -0
- package/dist/_chunks/canonicalize-Du3o_ptW.js +247 -0
- package/dist/_chunks/canonicalize-Du3o_ptW.js.map +1 -0
- package/dist/_chunks/cli-schema-sync-B5FDplGI.js +688 -0
- package/dist/_chunks/cli-schema-sync-B5FDplGI.js.map +1 -0
- package/dist/_chunks/cloudflare-AHoWYTYr.js +1188 -0
- package/dist/_chunks/cloudflare-AHoWYTYr.js.map +1 -0
- package/dist/_chunks/codec-registry-oOUxugz3.js +21 -0
- package/dist/_chunks/codec-registry-oOUxugz3.js.map +1 -0
- package/dist/_chunks/define-COtkxMRT.js +191 -0
- package/dist/_chunks/define-COtkxMRT.js.map +1 -0
- package/dist/_chunks/define-c4au4I9R.js +82 -0
- package/dist/_chunks/define-c4au4I9R.js.map +1 -0
- package/dist/_chunks/dist-BA3u1z3W.js +423 -0
- package/dist/_chunks/dist-BA3u1z3W.js.map +1 -0
- package/dist/_chunks/fast-hash-D6hIVt1Y.js +36 -0
- package/dist/_chunks/fast-hash-D6hIVt1Y.js.map +1 -0
- package/dist/_chunks/format-CfwjgPz9.js +14 -0
- package/dist/_chunks/format-CfwjgPz9.js.map +1 -0
- package/dist/_chunks/href-validation-CMc5JRls.js +141 -0
- package/dist/_chunks/href-validation-CMc5JRls.js.map +1 -0
- package/dist/_chunks/json-lossy-check-ClNvBM_3.js +63 -0
- package/dist/_chunks/json-lossy-check-ClNvBM_3.js.map +1 -0
- package/dist/_chunks/logger-AWfuX-KJ.js +1468 -0
- package/dist/_chunks/logger-AWfuX-KJ.js.map +1 -0
- package/dist/_chunks/navigation-root-bUDZLw74.js +124 -0
- package/dist/_chunks/navigation-root-bUDZLw74.js.map +1 -0
- package/dist/_chunks/plugin-context---kTF5v8.js +315 -0
- package/dist/_chunks/plugin-context---kTF5v8.js.map +1 -0
- package/dist/_chunks/registry-DbJPKoBp.js +20 -0
- package/dist/_chunks/registry-DbJPKoBp.js.map +1 -0
- package/dist/_chunks/resolve-schema-Dz3fcFUo.js +50 -0
- package/dist/_chunks/resolve-schema-Dz3fcFUo.js.map +1 -0
- package/dist/_chunks/router-ref-CtmF-aPv.js +28 -0
- package/dist/_chunks/router-ref-CtmF-aPv.js.map +1 -0
- package/dist/_chunks/schema-bridge-DT_Tn0Xf.js +119 -0
- package/dist/_chunks/schema-bridge-DT_Tn0Xf.js.map +1 -0
- package/dist/_chunks/segment-classify-Byy425ng.js +176 -0
- package/dist/_chunks/segment-classify-Byy425ng.js.map +1 -0
- package/dist/_chunks/segment-context-ZDnXDkbz.js +34 -0
- package/dist/_chunks/segment-context-ZDnXDkbz.js.map +1 -0
- package/dist/_chunks/sizeof-lXffQ1Vr.js +35 -0
- package/dist/_chunks/sizeof-lXffQ1Vr.js.map +1 -0
- package/dist/_chunks/{ssr-data-MjmprTmO.js → ssr-data-BOWsq18U.js} +1 -1
- package/dist/_chunks/ssr-data-BOWsq18U.js.map +1 -0
- package/dist/_chunks/{use-query-states-D5KaffOK.js → use-query-states-DFvWd-EA.js} +71 -26
- package/dist/_chunks/use-query-states-DFvWd-EA.js.map +1 -0
- package/dist/_chunks/use-segment-params-D1CzlgBo.js +151 -0
- package/dist/_chunks/use-segment-params-D1CzlgBo.js.map +1 -0
- package/dist/_chunks/walkers-DCoE-LJf.js +1002 -0
- package/dist/_chunks/walkers-DCoE-LJf.js.map +1 -0
- package/dist/adapters/build-output-helper.d.ts +29 -0
- package/dist/adapters/build-output-helper.d.ts.map +1 -0
- package/dist/adapters/cloudflare-dev.d.ts +109 -0
- package/dist/adapters/cloudflare-dev.d.ts.map +1 -0
- package/dist/adapters/cloudflare-dev.js +73 -0
- package/dist/adapters/cloudflare-dev.js.map +1 -0
- package/dist/adapters/cloudflare-kv-cache.d.ts +65 -0
- package/dist/adapters/cloudflare-kv-cache.d.ts.map +1 -0
- package/dist/adapters/cloudflare-kv-cache.js +124 -0
- package/dist/adapters/cloudflare-kv-cache.js.map +1 -0
- package/dist/adapters/cloudflare.d.ts +189 -21
- package/dist/adapters/cloudflare.d.ts.map +1 -1
- package/dist/adapters/cloudflare.js +2 -188
- package/dist/adapters/compress-module.d.ts +5 -4
- package/dist/adapters/compress-module.d.ts.map +1 -1
- package/dist/adapters/nitro.d.ts +41 -3
- package/dist/adapters/nitro.d.ts.map +1 -1
- package/dist/adapters/nitro.js +224 -172
- package/dist/adapters/nitro.js.map +1 -1
- package/dist/adapters/shared.d.ts +6 -0
- package/dist/adapters/shared.d.ts.map +1 -0
- package/dist/adapters/types.d.ts +2 -6
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/cache/cache-api.d.ts +48 -0
- package/dist/cache/cache-api.d.ts.map +1 -0
- package/dist/cache/handler-store.d.ts +33 -0
- package/dist/cache/handler-store.d.ts.map +1 -0
- package/dist/cache/index.d.ts +31 -8
- package/dist/cache/index.d.ts.map +1 -1
- package/dist/cache/index.js +3 -326
- package/dist/cache/invalidation-epoch.d.ts +43 -0
- package/dist/cache/invalidation-epoch.d.ts.map +1 -0
- package/dist/cache/json-lossy-check.d.ts +11 -0
- package/dist/cache/json-lossy-check.d.ts.map +1 -0
- package/dist/cache/redis-handler.d.ts +140 -8
- package/dist/cache/redis-handler.d.ts.map +1 -1
- package/dist/cache/singleflight.d.ts +19 -2
- package/dist/cache/singleflight.d.ts.map +1 -1
- package/dist/cache/sizeof.d.ts +22 -0
- package/dist/cache/sizeof.d.ts.map +1 -0
- package/dist/cache/stable-stringify.d.ts +9 -0
- package/dist/cache/stable-stringify.d.ts.map +1 -1
- package/dist/cache/store.d.ts +53 -0
- package/dist/cache/store.d.ts.map +1 -0
- package/dist/cache/stores/cloudflare-kv.d.ts +38 -0
- package/dist/cache/stores/cloudflare-kv.d.ts.map +1 -0
- package/dist/cache/stores/cloudflare-kv.js +29 -0
- package/dist/cache/stores/cloudflare-kv.js.map +1 -0
- package/dist/cache/stores/memory.d.ts +42 -0
- package/dist/cache/stores/memory.d.ts.map +1 -0
- package/dist/cache/stores/memory.js +90 -0
- package/dist/cache/stores/memory.js.map +1 -0
- package/dist/cache/stores/redis.d.ts +69 -0
- package/dist/cache/stores/redis.d.ts.map +1 -0
- package/dist/cache/stores/redis.js +35 -0
- package/dist/cache/stores/redis.js.map +1 -0
- package/dist/cache/stores/vercel.d.ts +36 -0
- package/dist/cache/stores/vercel.d.ts.map +1 -0
- package/dist/cache/stores/vercel.js +33 -0
- package/dist/cache/stores/vercel.js.map +1 -0
- package/dist/cache/tag-aware-handler.d.ts +52 -0
- package/dist/cache/tag-aware-handler.d.ts.map +1 -0
- package/dist/cache/timber-cache.d.ts +20 -10
- package/dist/cache/timber-cache.d.ts.map +1 -1
- package/dist/cdn/cloudflare-purge.d.ts +23 -0
- package/dist/cdn/cloudflare-purge.d.ts.map +1 -0
- package/dist/cdn/fastly-purge.d.ts +25 -0
- package/dist/cdn/fastly-purge.d.ts.map +1 -0
- package/dist/cdn/headers.d.ts +97 -0
- package/dist/cdn/headers.d.ts.map +1 -0
- package/dist/cdn/index.d.ts +5 -0
- package/dist/cdn/index.d.ts.map +1 -0
- package/dist/cdn/purge-store.d.ts +23 -0
- package/dist/cdn/purge-store.d.ts.map +1 -0
- package/dist/cdn/workers-cache-purge.d.ts +16 -0
- package/dist/cdn/workers-cache-purge.d.ts.map +1 -0
- package/dist/cli-schema-sync.d.ts +59 -0
- package/dist/cli-schema-sync.d.ts.map +1 -0
- package/dist/cli.d.ts +34 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +109 -34
- package/dist/cli.js.map +1 -1
- package/dist/client/browser-dev.d.ts +37 -1
- package/dist/client/browser-dev.d.ts.map +1 -1
- package/dist/client/browser-entry/action-dispatch.d.ts +17 -0
- package/dist/client/browser-entry/action-dispatch.d.ts.map +1 -0
- package/dist/client/browser-entry/hmr.d.ts +21 -0
- package/dist/client/browser-entry/hmr.d.ts.map +1 -0
- package/dist/client/browser-entry/hydrate.d.ts +46 -0
- package/dist/client/browser-entry/hydrate.d.ts.map +1 -0
- package/dist/client/browser-entry/index.d.ts +29 -0
- package/dist/client/browser-entry/index.d.ts.map +1 -0
- package/dist/client/browser-entry/post-hydration.d.ts +26 -0
- package/dist/client/browser-entry/post-hydration.d.ts.map +1 -0
- package/dist/client/browser-entry/router-init.d.ts +27 -0
- package/dist/client/browser-entry/router-init.d.ts.map +1 -0
- package/dist/client/browser-entry/rsc-stream.d.ts +24 -0
- package/dist/client/browser-entry/rsc-stream.d.ts.map +1 -0
- package/dist/client/browser-entry/scroll.d.ts +28 -0
- package/dist/client/browser-entry/scroll.d.ts.map +1 -0
- package/dist/client/child-segment-context.d.ts +22 -0
- package/dist/client/child-segment-context.d.ts.map +1 -0
- package/dist/client/child-segment-outlet.d.ts +18 -0
- package/dist/client/child-segment-outlet.d.ts.map +1 -0
- package/dist/client/child-segment-provider.d.ts +21 -0
- package/dist/client/child-segment-provider.d.ts.map +1 -0
- package/dist/client/error-boundary.d.ts +12 -5
- package/dist/client/error-boundary.d.ts.map +1 -1
- package/dist/client/error-boundary.js +47 -10
- package/dist/client/error-boundary.js.map +1 -1
- package/dist/client/error-reconstituter.d.ts +61 -0
- package/dist/client/error-reconstituter.d.ts.map +1 -0
- package/dist/client/form.d.ts +16 -27
- package/dist/client/form.d.ts.map +1 -1
- package/dist/client/history.d.ts +21 -6
- package/dist/client/history.d.ts.map +1 -1
- package/dist/client/index.d.ts +10 -24
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +185 -1134
- package/dist/client/index.js.map +1 -1
- package/dist/client/internal.d.ts +19 -0
- package/dist/client/internal.d.ts.map +1 -0
- package/dist/client/internal.js +849 -0
- package/dist/client/internal.js.map +1 -0
- package/dist/client/link.d.ts +69 -60
- package/dist/client/link.d.ts.map +1 -1
- package/dist/client/navigation-api.d.ts +120 -0
- package/dist/client/navigation-api.d.ts.map +1 -0
- package/dist/client/navigation-context.d.ts +3 -2
- package/dist/client/navigation-context.d.ts.map +1 -1
- package/dist/client/navigation-root.d.ts +119 -0
- package/dist/client/navigation-root.d.ts.map +1 -0
- package/dist/client/nuqs-adapter.d.ts +1 -1
- package/dist/client/nuqs-adapter.d.ts.map +1 -1
- package/dist/client/router-ref.d.ts +1 -1
- package/dist/client/router.d.ts +93 -14
- package/dist/client/router.d.ts.map +1 -1
- package/dist/client/rsc-fetch.d.ts +47 -14
- package/dist/client/rsc-fetch.d.ts.map +1 -1
- package/dist/client/segment-cache.d.ts +4 -4
- package/dist/client/segment-cache.d.ts.map +1 -1
- package/dist/client/segment-outlet.d.ts +49 -0
- package/dist/client/segment-outlet.d.ts.map +1 -0
- package/dist/client/segment-update-context.d.ts +21 -0
- package/dist/client/segment-update-context.d.ts.map +1 -0
- package/dist/client/shallow-url.d.ts +10 -0
- package/dist/client/shallow-url.d.ts.map +1 -0
- package/dist/client/slot-context.d.ts +29 -0
- package/dist/client/slot-context.d.ts.map +1 -0
- package/dist/client/slot-outlet.d.ts +16 -0
- package/dist/client/slot-outlet.d.ts.map +1 -0
- package/dist/client/slot-provider.d.ts +20 -0
- package/dist/client/slot-provider.d.ts.map +1 -0
- package/dist/client/ssr-data.d.ts +13 -4
- package/dist/client/ssr-data.d.ts.map +1 -1
- package/dist/client/state.d.ts +1 -1
- package/dist/client/top-loader.d.ts +5 -5
- package/dist/client/top-loader.d.ts.map +1 -1
- package/dist/client/use-cookie.d.ts +12 -0
- package/dist/client/use-cookie.d.ts.map +1 -1
- package/dist/client/use-link-status.d.ts +5 -5
- package/dist/client/use-link-status.d.ts.map +1 -1
- package/dist/client/use-pathname.d.ts.map +1 -1
- package/dist/client/use-pending-navigation.d.ts +23 -0
- package/dist/client/use-pending-navigation.d.ts.map +1 -0
- package/dist/client/use-query-states.d.ts +1 -1
- package/dist/client/use-query-states.d.ts.map +1 -1
- package/dist/client/use-router.d.ts +1 -1
- package/dist/client/use-router.d.ts.map +1 -1
- package/dist/client/use-search-params.d.ts +12 -5
- package/dist/client/use-search-params.d.ts.map +1 -1
- package/dist/client/{use-params.d.ts → use-segment-params.d.ts} +8 -6
- package/dist/client/use-segment-params.d.ts.map +1 -0
- package/dist/codec.d.ts +69 -0
- package/dist/codec.d.ts.map +1 -0
- package/dist/codec.js +76 -0
- package/dist/codec.js.map +1 -0
- package/dist/config-types.d.ts +284 -0
- package/dist/config-types.d.ts.map +1 -0
- package/dist/config-validation.d.ts +51 -0
- package/dist/config-validation.d.ts.map +1 -0
- package/dist/content/index.d.ts +1 -10
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/index.js +0 -2
- package/dist/cookies/define-cookie.d.ts +58 -25
- package/dist/cookies/define-cookie.d.ts.map +1 -1
- package/dist/cookies/index.d.ts +2 -1
- package/dist/cookies/index.d.ts.map +1 -1
- package/dist/cookies/index.js +257 -36
- package/dist/cookies/index.js.map +1 -1
- package/dist/cookies/json-cookie.d.ts +64 -0
- package/dist/cookies/json-cookie.d.ts.map +1 -0
- package/dist/cookies/validation.d.ts +34 -0
- package/dist/cookies/validation.d.ts.map +1 -0
- package/dist/dev-tools/404-page.d.ts +50 -0
- package/dist/dev-tools/404-page.d.ts.map +1 -0
- package/dist/dev-tools/browser-logs.d.ts +40 -0
- package/dist/dev-tools/browser-logs.d.ts.map +1 -0
- package/dist/dev-tools/dev-page-shell.d.ts +78 -0
- package/dist/dev-tools/dev-page-shell.d.ts.map +1 -0
- package/dist/dev-tools/error-page.d.ts +32 -0
- package/dist/dev-tools/error-page.d.ts.map +1 -0
- package/dist/dev-tools/holding-server.d.ts +54 -0
- package/dist/dev-tools/holding-server.d.ts.map +1 -0
- package/dist/dev-tools/hydration-overlay.d.ts +11 -0
- package/dist/dev-tools/hydration-overlay.d.ts.map +1 -0
- package/dist/dev-tools/index.d.ts +31 -0
- package/dist/dev-tools/index.d.ts.map +1 -0
- package/dist/dev-tools/instrumentation.d.ts +59 -0
- package/dist/dev-tools/instrumentation.d.ts.map +1 -0
- package/dist/{server/dev-logger.d.ts → dev-tools/logger.d.ts} +1 -1
- package/dist/dev-tools/logger.d.ts.map +1 -0
- package/dist/{plugins/dev-logs.d.ts → dev-tools/logs.d.ts} +17 -3
- package/dist/dev-tools/logs.d.ts.map +1 -0
- package/dist/dev-tools/overlay.d.ts +91 -0
- package/dist/dev-tools/overlay.d.ts.map +1 -0
- package/dist/dev-tools/stack-classifier.d.ts +34 -0
- package/dist/dev-tools/stack-classifier.d.ts.map +1 -0
- package/dist/dev-tools/terminal.d.ts +28 -0
- package/dist/dev-tools/terminal.d.ts.map +1 -0
- package/dist/fonts/ast-walk.d.ts +68 -0
- package/dist/fonts/ast-walk.d.ts.map +1 -0
- package/dist/fonts/ast.d.ts +110 -6
- package/dist/fonts/ast.d.ts.map +1 -1
- package/dist/fonts/bundle.d.ts +50 -0
- package/dist/fonts/bundle.d.ts.map +1 -0
- package/dist/fonts/dev-middleware.d.ts +22 -0
- package/dist/fonts/dev-middleware.d.ts.map +1 -0
- package/dist/fonts/fallbacks.d.ts +0 -7
- package/dist/fonts/fallbacks.d.ts.map +1 -1
- package/dist/fonts/google.d.ts +4 -2
- package/dist/fonts/google.d.ts.map +1 -1
- package/dist/fonts/local.d.ts +4 -4
- package/dist/fonts/local.d.ts.map +1 -1
- package/dist/fonts/paths.d.ts +43 -0
- package/dist/fonts/paths.d.ts.map +1 -0
- package/dist/fonts/pipeline.d.ts +177 -0
- package/dist/fonts/pipeline.d.ts.map +1 -0
- package/dist/fonts/transform.d.ts +82 -0
- package/dist/fonts/transform.d.ts.map +1 -0
- package/dist/fonts/types.d.ts +47 -1
- package/dist/fonts/types.d.ts.map +1 -1
- package/dist/fonts/virtual-modules.d.ts +77 -0
- package/dist/fonts/virtual-modules.d.ts.map +1 -0
- package/dist/index.d.ts +46 -180
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8506 -13599
- package/dist/index.js.map +1 -1
- package/dist/params/codec-registry.d.ts +26 -0
- package/dist/params/codec-registry.d.ts.map +1 -0
- package/dist/params/define-schema.d.ts +81 -0
- package/dist/params/define-schema.d.ts.map +1 -0
- package/dist/params/index.d.ts +5 -0
- package/dist/params/index.d.ts.map +1 -0
- package/dist/params/index.js +34 -0
- package/dist/params/index.js.map +1 -0
- package/dist/params/resolve-schema.d.ts +34 -0
- package/dist/params/resolve-schema.d.ts.map +1 -0
- package/dist/plugin-context.d.ts +217 -0
- package/dist/plugin-context.d.ts.map +1 -0
- package/dist/plugins/adapter-build.d.ts +21 -1
- package/dist/plugins/adapter-build.d.ts.map +1 -1
- package/dist/plugins/build-manifest.d.ts +7 -3
- package/dist/plugins/build-manifest.d.ts.map +1 -1
- package/dist/plugins/build-report.d.ts +43 -7
- package/dist/plugins/build-report.d.ts.map +1 -1
- package/dist/plugins/cache.d.ts +64 -0
- package/dist/plugins/cache.d.ts.map +1 -0
- package/dist/plugins/callsite-ast.d.ts +117 -0
- package/dist/plugins/callsite-ast.d.ts.map +1 -0
- package/dist/plugins/callsite-jsx.d.ts +35 -0
- package/dist/plugins/callsite-jsx.d.ts.map +1 -0
- package/dist/plugins/chunks.d.ts +11 -4
- package/dist/plugins/chunks.d.ts.map +1 -1
- package/dist/plugins/client-chunks.d.ts +40 -0
- package/dist/plugins/client-chunks.d.ts.map +1 -0
- package/dist/plugins/cloudflare-wasm.d.ts +21 -0
- package/dist/plugins/cloudflare-wasm.d.ts.map +1 -0
- package/dist/plugins/content.d.ts +1 -1
- package/dist/plugins/content.d.ts.map +1 -1
- package/dist/plugins/dev-server.d.ts +17 -1
- package/dist/plugins/dev-server.d.ts.map +1 -1
- package/dist/plugins/entries.d.ts +28 -4
- package/dist/plugins/entries.d.ts.map +1 -1
- package/dist/plugins/fonts.d.ts +16 -73
- package/dist/plugins/fonts.d.ts.map +1 -1
- package/dist/plugins/mdx.d.ts +1 -1
- package/dist/plugins/mdx.d.ts.map +1 -1
- package/dist/plugins/prebuilt-capture.d.ts +60 -0
- package/dist/plugins/prebuilt-capture.d.ts.map +1 -0
- package/dist/plugins/prebuilt-options-analysis.d.ts +40 -0
- package/dist/plugins/prebuilt-options-analysis.d.ts.map +1 -0
- package/dist/plugins/prebuilt.d.ts +82 -0
- package/dist/plugins/prebuilt.d.ts.map +1 -0
- package/dist/plugins/prerender-sugar.d.ts +42 -0
- package/dist/plugins/prerender-sugar.d.ts.map +1 -0
- package/dist/plugins/routing.d.ts +1 -1
- package/dist/plugins/routing.d.ts.map +1 -1
- package/dist/plugins/server-bundle.d.ts.map +1 -1
- package/dist/plugins/shims.d.ts +29 -5
- package/dist/plugins/shims.d.ts.map +1 -1
- package/dist/plugins/static-build.d.ts +5 -26
- package/dist/plugins/static-build.d.ts.map +1 -1
- package/dist/routing/codegen-shared.d.ts +67 -0
- package/dist/routing/codegen-shared.d.ts.map +1 -0
- package/dist/routing/codegen-types.d.ts +64 -0
- package/dist/routing/codegen-types.d.ts.map +1 -0
- package/dist/routing/codegen.d.ts +7 -2
- package/dist/routing/codegen.d.ts.map +1 -1
- package/dist/routing/convention-lint.d.ts +41 -0
- package/dist/routing/convention-lint.d.ts.map +1 -0
- package/dist/routing/export-detect.d.ts +56 -0
- package/dist/routing/export-detect.d.ts.map +1 -0
- package/dist/routing/file-cache.d.ts +8 -0
- package/dist/routing/file-cache.d.ts.map +1 -0
- package/dist/routing/index.d.ts +7 -1
- package/dist/routing/index.d.ts.map +1 -1
- package/dist/routing/index.js +4 -2
- package/dist/routing/interception.d.ts +0 -5
- package/dist/routing/interception.d.ts.map +1 -1
- package/dist/routing/link-codegen.d.ts +90 -0
- package/dist/routing/link-codegen.d.ts.map +1 -0
- package/dist/routing/manifest-codegen.d.ts +32 -0
- package/dist/routing/manifest-codegen.d.ts.map +1 -0
- package/dist/routing/scanner.d.ts +1 -10
- package/dist/routing/scanner.d.ts.map +1 -1
- package/dist/routing/schema-validation.d.ts +35 -0
- package/dist/routing/schema-validation.d.ts.map +1 -0
- package/dist/routing/segment-classify.d.ts +81 -0
- package/dist/routing/segment-classify.d.ts.map +1 -0
- package/dist/routing/segment-codegen.d.ts +38 -0
- package/dist/routing/segment-codegen.d.ts.map +1 -0
- package/dist/routing/types.d.ts +81 -25
- package/dist/routing/types.d.ts.map +1 -1
- package/dist/routing/walkers.d.ts +51 -0
- package/dist/routing/walkers.d.ts.map +1 -0
- package/dist/rsc-runtime/rsc.d.ts +1 -1
- package/dist/rsc-runtime/rsc.d.ts.map +1 -1
- package/dist/rsc-runtime/ssr.d.ts +12 -0
- package/dist/rsc-runtime/ssr.d.ts.map +1 -1
- package/dist/schema-bridge.d.ts +91 -0
- package/dist/schema-bridge.d.ts.map +1 -0
- package/dist/search-params/define.d.ts +188 -0
- package/dist/search-params/define.d.ts.map +1 -0
- package/dist/search-params/index.d.ts +4 -7
- package/dist/search-params/index.d.ts.map +1 -1
- package/dist/search-params/index.js +34 -441
- package/dist/search-params/index.js.map +1 -1
- package/dist/search-params/registry.d.ts +2 -2
- package/dist/search-params/registry.d.ts.map +1 -1
- package/dist/search-params/wrappers.d.ts +53 -0
- package/dist/search-params/wrappers.d.ts.map +1 -0
- package/dist/segment-params/define.d.ts +89 -0
- package/dist/segment-params/define.d.ts.map +1 -0
- package/dist/segment-params/index.d.ts +3 -0
- package/dist/segment-params/index.d.ts.map +1 -0
- package/dist/segment-params/index.js +2 -0
- package/dist/server/access-gate.d.ts +8 -3
- package/dist/server/access-gate.d.ts.map +1 -1
- package/dist/server/action-client.d.ts +42 -7
- package/dist/server/action-client.d.ts.map +1 -1
- package/dist/server/action-encryption.d.ts +76 -0
- package/dist/server/action-encryption.d.ts.map +1 -0
- package/dist/server/action-handler.d.ts +35 -1
- package/dist/server/action-handler.d.ts.map +1 -1
- package/dist/server/actions.d.ts +6 -30
- package/dist/server/actions.d.ts.map +1 -1
- package/dist/server/als-registry.d.ts +93 -11
- package/dist/server/als-registry.d.ts.map +1 -1
- package/dist/server/asset-headers.d.ts +8 -18
- package/dist/server/asset-headers.d.ts.map +1 -1
- package/dist/server/body-limits.d.ts.map +1 -1
- package/dist/server/build-manifest.d.ts +6 -29
- package/dist/server/build-manifest.d.ts.map +1 -1
- package/dist/server/canonicalize.d.ts +10 -0
- package/dist/server/canonicalize.d.ts.map +1 -1
- package/dist/server/coalesce-tick.d.ts +40 -0
- package/dist/server/coalesce-tick.d.ts.map +1 -0
- package/dist/server/cookie-context.d.ts +170 -0
- package/dist/server/cookie-context.d.ts.map +1 -0
- package/dist/server/cookie-parsing.d.ts +65 -0
- package/dist/server/cookie-parsing.d.ts.map +1 -0
- package/dist/server/csrf.d.ts +3 -2
- package/dist/server/csrf.d.ts.map +1 -1
- package/dist/server/default-logger.d.ts +22 -0
- package/dist/server/default-logger.d.ts.map +1 -0
- package/dist/server/deny-boundary.d.ts +117 -0
- package/dist/server/deny-boundary.d.ts.map +1 -0
- package/dist/server/deny-renderer.d.ts +2 -2
- package/dist/server/deny-renderer.d.ts.map +1 -1
- package/dist/server/dev-source-map.d.ts +22 -0
- package/dist/server/dev-source-map.d.ts.map +1 -0
- package/dist/server/early-hints-sender.d.ts.map +1 -1
- package/dist/server/early-hints.d.ts +13 -11
- package/dist/server/early-hints.d.ts.map +1 -1
- package/dist/server/error-boundary-wrapper.d.ts +7 -1
- package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
- package/dist/server/fallback-error.d.ts +12 -7
- package/dist/server/fallback-error.d.ts.map +1 -1
- package/dist/server/flight-injection-state.d.ts +66 -0
- package/dist/server/flight-injection-state.d.ts.map +1 -0
- package/dist/server/flight-scripts.d.ts +42 -0
- package/dist/server/flight-scripts.d.ts.map +1 -0
- package/dist/server/form-data.d.ts +41 -0
- package/dist/server/form-data.d.ts.map +1 -1
- package/dist/server/html-injector-core.d.ts +242 -0
- package/dist/server/html-injector-core.d.ts.map +1 -0
- package/dist/server/html-injectors.d.ts +82 -41
- package/dist/server/html-injectors.d.ts.map +1 -1
- package/dist/server/index.d.ts +11 -47
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +182 -2906
- package/dist/server/index.js.map +1 -1
- package/dist/server/internal.d.ts +49 -0
- package/dist/server/internal.d.ts.map +1 -0
- package/dist/server/internal.js +3945 -0
- package/dist/server/internal.js.map +1 -0
- package/dist/server/logger.d.ts +39 -7
- package/dist/server/logger.d.ts.map +1 -1
- package/dist/server/metadata-routes.d.ts +47 -11
- package/dist/server/metadata-routes.d.ts.map +1 -1
- package/dist/server/middleware-runner.d.ts +19 -4
- package/dist/server/middleware-runner.d.ts.map +1 -1
- package/dist/server/node-stream-transforms.d.ts +119 -0
- package/dist/server/node-stream-transforms.d.ts.map +1 -0
- package/dist/server/param-coercion.d.ts +54 -0
- package/dist/server/param-coercion.d.ts.map +1 -0
- package/dist/server/pipeline-helpers.d.ts +95 -0
- package/dist/server/pipeline-helpers.d.ts.map +1 -0
- package/dist/server/pipeline-interception.d.ts +1 -1
- package/dist/server/pipeline-interception.d.ts.map +1 -1
- package/dist/server/pipeline-metadata.d.ts +6 -0
- package/dist/server/pipeline-metadata.d.ts.map +1 -1
- package/dist/server/pipeline-outcome.d.ts +49 -0
- package/dist/server/pipeline-outcome.d.ts.map +1 -0
- package/dist/server/pipeline-phases.d.ts +59 -0
- package/dist/server/pipeline-phases.d.ts.map +1 -0
- package/dist/server/pipeline.d.ts +140 -19
- package/dist/server/pipeline.d.ts.map +1 -1
- package/dist/server/port-resolution.d.ts +117 -0
- package/dist/server/port-resolution.d.ts.map +1 -0
- package/dist/server/prebuilt/cache-key.d.ts +62 -0
- package/dist/server/prebuilt/cache-key.d.ts.map +1 -0
- package/dist/server/prebuilt/capture-state.d.ts +57 -0
- package/dist/server/prebuilt/capture-state.d.ts.map +1 -0
- package/dist/server/prebuilt/key-discipline.d.ts +23 -0
- package/dist/server/prebuilt/key-discipline.d.ts.map +1 -0
- package/dist/server/prebuilt/manifest-tag-index.d.ts +27 -0
- package/dist/server/prebuilt/manifest-tag-index.d.ts.map +1 -0
- package/dist/server/prebuilt/overlay.d.ts +100 -0
- package/dist/server/prebuilt/overlay.d.ts.map +1 -0
- package/dist/server/prebuilt/payload-source.d.ts +78 -0
- package/dist/server/prebuilt/payload-source.d.ts.map +1 -0
- package/dist/server/prebuilt/slots.d.ts +74 -0
- package/dist/server/prebuilt/slots.d.ts.map +1 -0
- package/dist/server/prebuilt/synthetic-store.d.ts +66 -0
- package/dist/server/prebuilt/synthetic-store.d.ts.map +1 -0
- package/dist/server/prebuilt-builder.d.ts +120 -0
- package/dist/server/prebuilt-builder.d.ts.map +1 -0
- package/dist/server/prebuilt-runtime.d.ts +111 -0
- package/dist/server/prebuilt-runtime.d.ts.map +1 -0
- package/dist/server/primitives.d.ts +88 -43
- package/dist/server/primitives.d.ts.map +1 -1
- package/dist/server/render-timeout.d.ts +51 -0
- package/dist/server/render-timeout.d.ts.map +1 -0
- package/dist/server/render-utils.d.ts +25 -0
- package/dist/server/render-utils.d.ts.map +1 -0
- package/dist/server/request-context.d.ts +62 -107
- package/dist/server/request-context.d.ts.map +1 -1
- package/dist/server/route-element-builder.d.ts +55 -25
- package/dist/server/route-element-builder.d.ts.map +1 -1
- package/dist/server/route-handler.d.ts.map +1 -1
- package/dist/server/route-matcher.d.ts +25 -36
- package/dist/server/route-matcher.d.ts.map +1 -1
- package/dist/server/rsc-entry/action-middleware-runner.d.ts +66 -0
- package/dist/server/rsc-entry/action-middleware-runner.d.ts.map +1 -0
- package/dist/server/rsc-entry/api-handler.d.ts +12 -3
- package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
- package/dist/server/rsc-entry/deny-fallback.d.ts +29 -0
- package/dist/server/rsc-entry/deny-fallback.d.ts.map +1 -0
- package/dist/server/rsc-entry/error-renderer.d.ts +26 -13
- package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -1
- package/dist/server/rsc-entry/helpers.d.ts +51 -28
- package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
- package/dist/server/rsc-entry/index.d.ts +28 -6
- package/dist/server/rsc-entry/index.d.ts.map +1 -1
- package/dist/server/rsc-entry/render-route.d.ts +51 -0
- package/dist/server/rsc-entry/render-route.d.ts.map +1 -0
- package/dist/server/rsc-entry/revalidate-renderer.d.ts +108 -0
- package/dist/server/rsc-entry/revalidate-renderer.d.ts.map +1 -0
- package/dist/server/rsc-entry/rsc-payload.d.ts +5 -6
- package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
- package/dist/server/rsc-entry/rsc-stream.d.ts +25 -1
- package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
- package/dist/server/rsc-entry/ssr-bridge.d.ts +5 -1
- package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -1
- package/dist/server/rsc-entry/ssr-renderer.d.ts +34 -4
- package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
- package/dist/server/rsc-entry/wrap-action-dispatch.d.ts +89 -0
- package/dist/server/rsc-entry/wrap-action-dispatch.d.ts.map +1 -0
- package/dist/server/safe-load.d.ts +46 -0
- package/dist/server/safe-load.d.ts.map +1 -0
- package/dist/server/sensitive-fields.d.ts +74 -0
- package/dist/server/sensitive-fields.d.ts.map +1 -0
- package/dist/server/sitemap-generator.d.ts +129 -0
- package/dist/server/sitemap-generator.d.ts.map +1 -0
- package/dist/server/sitemap-handler.d.ts +22 -0
- package/dist/server/sitemap-handler.d.ts.map +1 -0
- package/dist/server/slot-resolver.d.ts +7 -5
- package/dist/server/slot-resolver.d.ts.map +1 -1
- package/dist/server/ssr-bridge-types.d.ts +121 -0
- package/dist/server/ssr-bridge-types.d.ts.map +1 -0
- package/dist/server/ssr-entry.d.ts +2 -43
- package/dist/server/ssr-entry.d.ts.map +1 -1
- package/dist/server/ssr-render.d.ts +64 -21
- package/dist/server/ssr-render.d.ts.map +1 -1
- package/dist/server/ssr-wrappers.d.ts +50 -0
- package/dist/server/ssr-wrappers.d.ts.map +1 -0
- package/dist/server/state-tree-diff.d.ts +36 -6
- package/dist/server/state-tree-diff.d.ts.map +1 -1
- package/dist/server/status-code-resolver.d.ts +22 -11
- package/dist/server/status-code-resolver.d.ts.map +1 -1
- package/dist/server/stream-utils.d.ts +47 -0
- package/dist/server/stream-utils.d.ts.map +1 -0
- package/dist/server/tracing.d.ts +44 -9
- package/dist/server/tracing.d.ts.map +1 -1
- package/dist/server/tree-builder.d.ts +62 -30
- package/dist/server/tree-builder.d.ts.map +1 -1
- package/dist/server/tree-match.d.ts +49 -0
- package/dist/server/tree-match.d.ts.map +1 -0
- package/dist/server/types.d.ts +71 -6
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/utils/escape-html.d.ts +14 -0
- package/dist/server/utils/escape-html.d.ts.map +1 -0
- package/dist/server/utils/mdx-file.d.ts +15 -0
- package/dist/server/utils/mdx-file.d.ts.map +1 -0
- package/dist/server/version-skew.d.ts +61 -0
- package/dist/server/version-skew.d.ts.map +1 -0
- package/dist/server/workers-cache-bridge.d.ts +26 -0
- package/dist/server/workers-cache-bridge.d.ts.map +1 -0
- package/dist/shared/href-validation.d.ts +49 -0
- package/dist/shared/href-validation.d.ts.map +1 -0
- package/dist/shared/merge-search-params.d.ts +22 -0
- package/dist/shared/merge-search-params.d.ts.map +1 -0
- package/dist/shared/redirect-type.d.ts +17 -0
- package/dist/shared/redirect-type.d.ts.map +1 -0
- package/dist/shims/font-google.d.ts +1 -1
- package/dist/shims/font-google.d.ts.map +1 -1
- package/dist/shims/font-google.js +42 -0
- package/dist/shims/font-google.js.map +1 -0
- package/dist/shims/font-local.d.ts +26 -0
- package/dist/shims/font-local.d.ts.map +1 -0
- package/dist/shims/font-local.js +20 -0
- package/dist/shims/font-local.js.map +1 -0
- package/dist/shims/headers.d.ts +53 -1
- package/dist/shims/headers.d.ts.map +1 -1
- package/dist/shims/image.d.ts +120 -120
- package/dist/shims/image.d.ts.map +1 -1
- package/dist/shims/navigation-client.d.ts +35 -11
- package/dist/shims/navigation-client.d.ts.map +1 -1
- package/dist/shims/navigation.d.ts +11 -5
- package/dist/shims/navigation.d.ts.map +1 -1
- package/dist/utils/state-machine.d.ts +80 -0
- package/dist/utils/state-machine.d.ts.map +1 -0
- package/docs/api/30-api-server.mdx +233 -0
- package/docs/api/31-api-client.mdx +161 -0
- package/docs/api/32-api-cache.mdx +311 -0
- package/docs/api/33-api-search-params.mdx +154 -0
- package/docs/api/34-api-config.mdx +325 -0
- package/docs/api/35-api-typescript.mdx +170 -0
- package/docs/api/36-cli.mdx +143 -0
- package/docs/learn/00-introduction.mdx +109 -0
- package/docs/learn/01-quick-start.mdx +94 -0
- package/docs/learn/02-pages-and-layouts.mdx +147 -0
- package/docs/learn/03-fetching-data.mdx +211 -0
- package/docs/learn/03b-access-control.mdx +130 -0
- package/docs/learn/04-loading-states.mdx +67 -0
- package/docs/learn/04b-the-flush-point.mdx +115 -0
- package/docs/learn/05-typed-params.mdx +275 -0
- package/docs/learn/06-forms-and-actions.mdx +146 -0
- package/docs/learn/07-typed-routes.mdx +127 -0
- package/docs/learn/08-streaming.mdx +146 -0
- package/docs/learn/09-caching.mdx +252 -0
- package/docs/learn/10-middleware.mdx +157 -0
- package/docs/learn/11-error-handling.mdx +156 -0
- package/docs/learn/12-client-navigation.mdx +176 -0
- package/docs/learn/13-configuration.mdx +162 -0
- package/docs/learn/14-deploying.mdx +264 -0
- package/docs/more/01-advanced-routing.mdx +173 -0
- package/docs/more/02-advanced-forms.mdx +137 -0
- package/docs/more/03-coming-from-nextjs.mdx +186 -0
- package/docs/more/04-metadata-and-fonts.mdx +193 -0
- package/docs/more/04b-mdx.mdx +209 -0
- package/docs/more/05-content-collections.mdx +90 -0
- package/docs/more/06-instrumentation.mdx +214 -0
- package/docs/more/07-security.mdx +129 -0
- package/docs/more/08-developer-experience.mdx +134 -0
- package/docs/more/40-why-timber.mdx +50 -0
- package/docs/more/41-timber-vs-nextjs.mdx +81 -0
- package/docs/more/42-timber-vs-others.mdx +68 -0
- package/docs/more/50-ai-agent-instructions.mdx +169 -0
- package/llms.txt +55 -0
- package/package.json +105 -26
- package/src/adapters/build-output-helper.ts +199 -0
- package/src/adapters/cloudflare-dev.ts +177 -0
- package/src/adapters/cloudflare-kv-cache.ts +204 -0
- package/src/adapters/cloudflare.ts +620 -129
- package/src/adapters/compress-module.ts +27 -92
- package/src/adapters/nitro.ts +266 -122
- package/src/adapters/raw-imports.d.ts +5 -0
- package/src/adapters/shared.ts +68 -0
- package/src/adapters/types.ts +2 -7
- package/src/adapters/wrangler.d.ts +7 -0
- package/src/cache/cache-api.ts +107 -0
- package/src/cache/handler-store.ts +76 -0
- package/src/cache/index.ts +114 -21
- package/src/cache/invalidation-epoch.ts +93 -0
- package/src/cache/json-lossy-check.ts +75 -0
- package/src/cache/redis-handler.ts +197 -19
- package/src/cache/singleflight.ts +64 -6
- package/src/cache/sizeof.ts +33 -0
- package/src/cache/stable-stringify.ts +65 -2
- package/src/cache/store.ts +71 -0
- package/src/cache/stores/cloudflare-kv.ts +52 -0
- package/src/cache/stores/memory.ts +125 -0
- package/src/cache/stores/redis.ts +97 -0
- package/src/cache/stores/vercel.ts +59 -0
- package/src/cache/tag-aware-handler.ts +237 -0
- package/src/cache/timber-cache.ts +161 -36
- package/src/cdn/cloudflare-purge.ts +50 -0
- package/src/cdn/fastly-purge.ts +63 -0
- package/src/cdn/headers.ts +153 -0
- package/src/cdn/index.ts +17 -0
- package/src/cdn/purge-store.ts +34 -0
- package/src/cdn/workers-cache-purge.ts +30 -0
- package/src/cli-schema-sync.ts +401 -0
- package/src/cli.ts +157 -34
- package/src/client/browser-dev.ts +156 -1
- package/src/client/browser-entry/action-dispatch.ts +124 -0
- package/src/client/browser-entry/hmr.ts +70 -0
- package/src/client/browser-entry/hydrate.ts +187 -0
- package/src/client/browser-entry/index.ts +113 -0
- package/src/client/browser-entry/post-hydration.ts +110 -0
- package/src/client/browser-entry/router-init.ts +289 -0
- package/src/client/browser-entry/rsc-stream.ts +157 -0
- package/src/client/browser-entry/scroll.ts +50 -0
- package/src/client/child-segment-context.ts +40 -0
- package/src/client/child-segment-outlet.tsx +25 -0
- package/src/client/child-segment-provider.tsx +27 -0
- package/src/client/error-boundary.tsx +127 -22
- package/src/client/error-reconstituter.tsx +79 -0
- package/src/client/form.tsx +31 -32
- package/src/client/history.ts +21 -6
- package/src/client/index.ts +67 -45
- package/src/client/internal.ts +58 -0
- package/src/client/link.tsx +349 -150
- package/src/client/navigation-api.ts +341 -0
- package/src/client/navigation-context.ts +15 -7
- package/src/client/navigation-root.tsx +355 -0
- package/src/client/nuqs-adapter.tsx +16 -3
- package/src/client/router-ref.ts +1 -1
- package/src/client/router.ts +538 -206
- package/src/client/rsc-fetch.ts +214 -33
- package/src/client/segment-cache.ts +11 -12
- package/src/client/segment-outlet.tsx +77 -0
- package/src/client/segment-update-context.ts +42 -0
- package/src/client/shallow-url.ts +22 -0
- package/src/client/slot-context.ts +48 -0
- package/src/client/slot-outlet.tsx +22 -0
- package/src/client/slot-provider.tsx +25 -0
- package/src/client/ssr-data.ts +13 -5
- package/src/client/state.ts +2 -2
- package/src/client/top-loader.tsx +11 -9
- package/src/client/use-cookie.ts +60 -15
- package/src/client/use-link-status.ts +7 -7
- package/src/client/use-pathname.ts +1 -0
- package/src/client/use-pending-navigation.ts +40 -0
- package/src/client/use-query-states.ts +108 -10
- package/src/client/use-router.ts +4 -1
- package/src/client/use-search-params.ts +31 -44
- package/src/client/{use-params.ts → use-segment-params.ts} +9 -6
- package/src/codec.ts +149 -0
- package/src/config-types.ts +282 -0
- package/src/config-validation.ts +330 -0
- package/src/content/index.ts +5 -13
- package/src/cookies/define-cookie.ts +217 -53
- package/src/cookies/index.ts +12 -1
- package/src/cookies/json-cookie.ts +105 -0
- package/src/cookies/validation.ts +192 -0
- package/src/dev-tools/404-page.ts +286 -0
- package/src/dev-tools/browser-logs.ts +55 -0
- package/src/dev-tools/dev-page-shell.ts +260 -0
- package/src/dev-tools/error-page.ts +331 -0
- package/src/dev-tools/holding-server.ts +187 -0
- package/src/dev-tools/hydration-overlay.ts +158 -0
- package/src/dev-tools/index.ts +83 -0
- package/src/dev-tools/instrumentation.ts +213 -0
- package/src/{server/dev-logger.ts → dev-tools/logger.ts} +33 -51
- package/src/{plugins/dev-logs.ts → dev-tools/logs.ts} +122 -26
- package/src/dev-tools/overlay.ts +469 -0
- package/src/dev-tools/stack-classifier.ts +75 -0
- package/src/dev-tools/terminal.ts +182 -0
- package/src/fonts/ast-walk.ts +235 -0
- package/src/fonts/ast.ts +477 -126
- package/src/fonts/bundle.ts +138 -0
- package/src/fonts/dev-middleware.ts +85 -0
- package/src/fonts/fallbacks.ts +0 -23
- package/src/fonts/google.ts +63 -8
- package/src/fonts/local.ts +9 -8
- package/src/fonts/paths.ts +58 -0
- package/src/fonts/pipeline.ts +348 -0
- package/src/fonts/transform.ts +311 -0
- package/src/fonts/types.ts +52 -1
- package/src/fonts/virtual-modules.ts +179 -0
- package/src/index.ts +444 -352
- package/src/params/codec-registry.ts +34 -0
- package/src/params/define-schema.ts +115 -0
- package/src/params/index.ts +17 -0
- package/src/params/resolve-schema.ts +84 -0
- package/src/plugin-context.ts +432 -0
- package/src/plugins/adapter-build.ts +220 -7
- package/src/plugins/build-manifest.ts +168 -23
- package/src/plugins/build-report.ts +253 -35
- package/src/plugins/cache.ts +243 -0
- package/src/plugins/callsite-ast.ts +472 -0
- package/src/plugins/callsite-jsx.ts +243 -0
- package/src/plugins/chunks.ts +74 -5
- package/src/plugins/client-chunks.ts +185 -0
- package/src/plugins/cloudflare-wasm.ts +141 -0
- package/src/plugins/content.ts +1 -1
- package/src/plugins/dev-server.ts +284 -94
- package/src/plugins/entries.ts +134 -16
- package/src/plugins/fonts.ts +225 -660
- package/src/plugins/mdx.ts +47 -10
- package/src/plugins/prebuilt-capture.ts +217 -0
- package/src/plugins/prebuilt-options-analysis.ts +175 -0
- package/src/plugins/prebuilt.ts +655 -0
- package/src/plugins/prerender-sugar.ts +328 -0
- package/src/plugins/routing.ts +237 -241
- package/src/plugins/server-bundle.ts +89 -12
- package/src/plugins/shims.ts +241 -64
- package/src/plugins/static-build.ts +15 -90
- package/src/routing/codegen-shared.ts +115 -0
- package/src/routing/codegen-types.ts +65 -0
- package/src/routing/codegen.ts +372 -178
- package/src/routing/convention-lint.ts +394 -0
- package/src/routing/export-detect.ts +304 -0
- package/src/routing/file-cache.ts +23 -0
- package/src/routing/index.ts +10 -1
- package/src/routing/interception.ts +3 -22
- package/src/routing/link-codegen.ts +313 -0
- package/src/routing/manifest-codegen.ts +287 -0
- package/src/routing/scanner.ts +338 -189
- package/src/routing/schema-validation.ts +155 -0
- package/src/routing/segment-classify.ts +223 -0
- package/src/routing/segment-codegen.ts +98 -0
- package/src/routing/types.ts +82 -25
- package/src/routing/walkers.ts +90 -0
- package/src/rsc-runtime/rsc.ts +9 -0
- package/src/rsc-runtime/ssr.ts +50 -0
- package/src/rsc-runtime/vendor-types.d.ts +7 -0
- package/src/schema-bridge.ts +253 -0
- package/src/search-params/define.ts +576 -0
- package/src/search-params/index.ts +14 -20
- package/src/search-params/registry.ts +2 -2
- package/src/search-params/wrappers.ts +101 -0
- package/src/segment-params/define.ts +249 -0
- package/src/segment-params/index.ts +9 -0
- package/src/server/access-gate.tsx +84 -34
- package/src/server/action-client.ts +120 -29
- package/src/server/action-encryption.ts +144 -0
- package/src/server/action-handler.ts +123 -33
- package/src/server/actions.ts +48 -54
- package/src/server/als-registry.ts +137 -20
- package/src/server/asset-headers.ts +15 -37
- package/src/server/body-limits.ts +10 -2
- package/src/server/build-manifest.ts +13 -56
- package/src/server/canonicalize.ts +6 -3
- package/src/server/coalesce-tick.ts +75 -0
- package/src/server/compress.ts +34 -7
- package/src/server/cookie-context.ts +484 -0
- package/src/server/cookie-parsing.ts +163 -0
- package/src/server/csrf.ts +39 -6
- package/src/server/default-logger.ts +99 -0
- package/src/server/deny-boundary.ts +314 -0
- package/src/server/deny-renderer.ts +85 -77
- package/src/server/dev-source-map.ts +31 -0
- package/src/server/early-hints-sender.ts +3 -2
- package/src/server/early-hints.ts +37 -27
- package/src/server/error-boundary-wrapper.ts +61 -22
- package/src/server/fallback-error.ts +79 -102
- package/src/server/flight-injection-state.ts +113 -0
- package/src/server/flight-scripts.ts +62 -0
- package/src/server/form-data.ts +124 -12
- package/src/server/html-injector-core.ts +495 -0
- package/src/server/html-injectors.ts +271 -254
- package/src/server/index.ts +31 -185
- package/src/server/internal.ts +181 -0
- package/src/server/logger.ts +72 -36
- package/src/server/metadata-routes.ts +110 -24
- package/src/server/middleware-runner.ts +31 -4
- package/src/server/node-stream-transforms.ts +336 -0
- package/src/server/param-coercion.ts +207 -0
- package/src/server/pipeline-helpers.ts +204 -0
- package/src/server/pipeline-interception.ts +45 -18
- package/src/server/pipeline-metadata.ts +14 -0
- package/src/server/pipeline-outcome.ts +197 -0
- package/src/server/pipeline-phases.ts +545 -0
- package/src/server/pipeline.ts +274 -382
- package/src/server/port-resolution.ts +215 -0
- package/src/server/prebuilt/cache-key.ts +298 -0
- package/src/server/prebuilt/capture-state.ts +89 -0
- package/src/server/prebuilt/key-discipline.ts +53 -0
- package/src/server/prebuilt/manifest-tag-index.ts +46 -0
- package/src/server/prebuilt/overlay.ts +256 -0
- package/src/server/prebuilt/payload-source.ts +201 -0
- package/src/server/prebuilt/slots.ts +167 -0
- package/src/server/prebuilt/synthetic-store.ts +121 -0
- package/src/server/prebuilt-builder.ts +808 -0
- package/src/server/prebuilt-runtime.ts +815 -0
- package/src/server/primitives.ts +160 -83
- package/src/server/render-timeout.ts +108 -0
- package/src/server/render-utils.ts +31 -0
- package/src/server/request-context.ts +168 -337
- package/src/server/route-element-builder.ts +661 -278
- package/src/server/route-handler.ts +31 -4
- package/src/server/route-matcher.ts +158 -277
- package/src/server/rsc-entry/action-middleware-runner.ts +167 -0
- package/src/server/rsc-entry/api-handler.ts +69 -32
- package/src/server/rsc-entry/deny-fallback.ts +92 -0
- package/src/server/rsc-entry/error-renderer.ts +306 -89
- package/src/server/rsc-entry/helpers.ts +165 -79
- package/src/server/rsc-entry/index.ts +332 -341
- package/src/server/rsc-entry/render-route.ts +292 -0
- package/src/server/rsc-entry/revalidate-renderer.ts +349 -0
- package/src/server/rsc-entry/rsc-payload.ts +95 -39
- package/src/server/rsc-entry/rsc-stream.ts +93 -13
- package/src/server/rsc-entry/ssr-bridge.ts +18 -5
- package/src/server/rsc-entry/ssr-renderer.ts +273 -43
- package/src/server/rsc-entry/wrap-action-dispatch.ts +186 -0
- package/src/server/safe-load.ts +60 -0
- package/src/server/sensitive-fields.ts +230 -0
- package/src/server/server-only-guard-noop.js +3 -0
- package/src/server/sitemap-generator.ts +345 -0
- package/src/server/sitemap-handler.ts +157 -0
- package/src/server/slot-resolver.ts +264 -257
- package/src/server/ssr-bridge-types.ts +124 -0
- package/src/server/ssr-entry.ts +206 -78
- package/src/server/ssr-render.ts +345 -82
- package/src/server/ssr-wrappers.tsx +141 -0
- package/src/server/state-tree-diff.ts +76 -24
- package/src/server/status-code-resolver.ts +115 -130
- package/src/server/stream-utils.ts +288 -0
- package/src/server/tracing.ts +126 -14
- package/src/server/tree-builder.ts +204 -90
- package/src/server/tree-match.ts +262 -0
- package/src/server/types.ts +78 -9
- package/src/server/utils/escape-html.ts +20 -0
- package/src/server/utils/mdx-file.ts +22 -0
- package/src/server/version-skew.ts +104 -0
- package/src/server/workers-cache-bridge.ts +33 -0
- package/src/shared/href-validation.ts +159 -0
- package/src/shared/merge-search-params.ts +55 -0
- package/src/shared/redirect-type.ts +17 -0
- package/src/shims/font-google.ts +1 -1
- package/src/shims/font-local.ts +34 -0
- package/src/shims/headers.ts +122 -1
- package/src/shims/navigation-client.ts +51 -29
- package/src/shims/navigation.ts +14 -7
- package/src/utils/state-machine.ts +111 -0
- package/dist/_chunks/als-registry-B7DbZ2hS.js +0 -41
- package/dist/_chunks/als-registry-B7DbZ2hS.js.map +0 -1
- package/dist/_chunks/debug-B3Gypr3D.js +0 -108
- package/dist/_chunks/debug-B3Gypr3D.js.map +0 -1
- package/dist/_chunks/format-RyoGQL74.js +0 -164
- package/dist/_chunks/format-RyoGQL74.js.map +0 -1
- package/dist/_chunks/interception-BOoWmLUA.js +0 -676
- package/dist/_chunks/interception-BOoWmLUA.js.map +0 -1
- package/dist/_chunks/metadata-routes-Cjmvi3rQ.js +0 -153
- package/dist/_chunks/metadata-routes-Cjmvi3rQ.js.map +0 -1
- package/dist/_chunks/request-context-BQUC8PHn.js +0 -330
- package/dist/_chunks/request-context-BQUC8PHn.js.map +0 -1
- package/dist/_chunks/ssr-data-MjmprTmO.js.map +0 -1
- package/dist/_chunks/tracing-CemImE6h.js +0 -187
- package/dist/_chunks/tracing-CemImE6h.js.map +0 -1
- package/dist/_chunks/use-cookie-DX-l1_5E.js +0 -91
- package/dist/_chunks/use-cookie-DX-l1_5E.js.map +0 -1
- package/dist/_chunks/use-query-states-D5KaffOK.js.map +0 -1
- package/dist/adapters/cloudflare.js.map +0 -1
- package/dist/cache/index.js.map +0 -1
- package/dist/cache/register-cached-function.d.ts +0 -17
- package/dist/cache/register-cached-function.d.ts.map +0 -1
- package/dist/client/browser-entry.d.ts +0 -21
- package/dist/client/browser-entry.d.ts.map +0 -1
- package/dist/client/head.d.ts +0 -16
- package/dist/client/head.d.ts.map +0 -1
- package/dist/client/link-status-provider.d.ts +0 -11
- package/dist/client/link-status-provider.d.ts.map +0 -1
- package/dist/client/segment-merger.d.ts +0 -119
- package/dist/client/segment-merger.d.ts.map +0 -1
- package/dist/client/stale-reload.d.ts +0 -44
- package/dist/client/stale-reload.d.ts.map +0 -1
- package/dist/client/transition-root.d.ts +0 -74
- package/dist/client/transition-root.d.ts.map +0 -1
- package/dist/client/use-navigation-pending.d.ts +0 -26
- package/dist/client/use-navigation-pending.d.ts.map +0 -1
- package/dist/client/use-params.d.ts.map +0 -1
- package/dist/plugins/cache-transform.d.ts +0 -36
- package/dist/plugins/cache-transform.d.ts.map +0 -1
- package/dist/plugins/dev-error-overlay.d.ts +0 -60
- package/dist/plugins/dev-error-overlay.d.ts.map +0 -1
- package/dist/plugins/dev-logs.d.ts.map +0 -1
- package/dist/plugins/dynamic-transform.d.ts +0 -72
- package/dist/plugins/dynamic-transform.d.ts.map +0 -1
- package/dist/plugins/server-action-exports.d.ts +0 -26
- package/dist/plugins/server-action-exports.d.ts.map +0 -1
- package/dist/routing/status-file-lint.d.ts +0 -33
- package/dist/routing/status-file-lint.d.ts.map +0 -1
- package/dist/search-params/analyze.d.ts +0 -54
- package/dist/search-params/analyze.d.ts.map +0 -1
- package/dist/search-params/builtin-codecs.d.ts +0 -105
- package/dist/search-params/builtin-codecs.d.ts.map +0 -1
- package/dist/search-params/codecs.d.ts +0 -53
- package/dist/search-params/codecs.d.ts.map +0 -1
- package/dist/search-params/create.d.ts +0 -106
- package/dist/search-params/create.d.ts.map +0 -1
- package/dist/server/client-module-map.d.ts +0 -47
- package/dist/server/client-module-map.d.ts.map +0 -1
- package/dist/server/dev-fetch-instrumentation.d.ts +0 -22
- package/dist/server/dev-fetch-instrumentation.d.ts.map +0 -1
- package/dist/server/dev-logger.d.ts.map +0 -1
- package/dist/server/dev-span-processor.d.ts +0 -29
- package/dist/server/dev-span-processor.d.ts.map +0 -1
- package/dist/server/dev-warnings.d.ts +0 -129
- package/dist/server/dev-warnings.d.ts.map +0 -1
- package/dist/server/flush.d.ts +0 -74
- package/dist/server/flush.d.ts.map +0 -1
- package/dist/server/manifest-status-resolver.d.ts +0 -58
- package/dist/server/manifest-status-resolver.d.ts.map +0 -1
- package/dist/server/prerender.d.ts +0 -77
- package/dist/server/prerender.d.ts.map +0 -1
- package/dist/utils/directive-parser.d.ts +0 -70
- package/dist/utils/directive-parser.d.ts.map +0 -1
- package/src/cache/register-cached-function.ts +0 -103
- package/src/client/browser-entry.ts +0 -678
- package/src/client/head.ts +0 -61
- package/src/client/link-status-provider.tsx +0 -30
- package/src/client/segment-merger.ts +0 -339
- package/src/client/stale-reload.ts +0 -87
- package/src/client/transition-root.tsx +0 -166
- package/src/client/use-navigation-pending.ts +0 -38
- package/src/plugins/cache-transform.ts +0 -199
- package/src/plugins/dev-error-overlay.ts +0 -230
- package/src/plugins/dynamic-transform.ts +0 -161
- package/src/plugins/server-action-exports.ts +0 -220
- package/src/routing/status-file-lint.ts +0 -112
- package/src/search-params/analyze.ts +0 -192
- package/src/search-params/builtin-codecs.ts +0 -228
- package/src/search-params/codecs.ts +0 -153
- package/src/search-params/create.ts +0 -321
- package/src/server/client-module-map.ts +0 -58
- package/src/server/dev-fetch-instrumentation.ts +0 -96
- package/src/server/dev-span-processor.ts +0 -78
- package/src/server/dev-warnings.ts +0 -283
- package/src/server/flush.ts +0 -182
- package/src/server/manifest-status-resolver.ts +0 -215
- package/src/server/prerender.ts +0 -139
- package/src/utils/directive-parser.ts +0 -529
|
@@ -29,7 +29,6 @@ export type MetadataRouteType =
|
|
|
29
29
|
| 'favicon'
|
|
30
30
|
| 'icon'
|
|
31
31
|
| 'opengraph-image'
|
|
32
|
-
| 'twitter-image'
|
|
33
32
|
| 'apple-icon';
|
|
34
33
|
|
|
35
34
|
// ─── Convention Table ────────────────────────────────────────────────────────
|
|
@@ -51,8 +50,18 @@ export const METADATA_ROUTE_CONVENTIONS: Record<
|
|
|
51
50
|
nestable: boolean;
|
|
52
51
|
staticExtensions: string[];
|
|
53
52
|
dynamicExtensions: string[];
|
|
54
|
-
/**
|
|
53
|
+
/**
|
|
54
|
+
* The URL path basename this file serves at (relative to segment).
|
|
55
|
+
* For image routes, the full serve path includes an extension via
|
|
56
|
+
* `resolveServePathForFile()`.
|
|
57
|
+
*/
|
|
55
58
|
servePath: string;
|
|
59
|
+
/**
|
|
60
|
+
* When set, image routes append `.{serveExtension}` to the serve path.
|
|
61
|
+
* Dynamic handlers (`.ts`/`.tsx`) use this as the default. Static files
|
|
62
|
+
* use their own extension instead. Non-image routes leave this undefined.
|
|
63
|
+
*/
|
|
64
|
+
serveExtension?: string;
|
|
56
65
|
}
|
|
57
66
|
> = {
|
|
58
67
|
'sitemap': {
|
|
@@ -84,7 +93,7 @@ export const METADATA_ROUTE_CONVENTIONS: Record<
|
|
|
84
93
|
contentType: 'image/x-icon',
|
|
85
94
|
nestable: false,
|
|
86
95
|
staticExtensions: ['ico'],
|
|
87
|
-
dynamicExtensions: [],
|
|
96
|
+
dynamicExtensions: ['ts', 'tsx'],
|
|
88
97
|
servePath: 'favicon.ico',
|
|
89
98
|
},
|
|
90
99
|
'icon': {
|
|
@@ -94,6 +103,7 @@ export const METADATA_ROUTE_CONVENTIONS: Record<
|
|
|
94
103
|
staticExtensions: ['png', 'jpg', 'svg'],
|
|
95
104
|
dynamicExtensions: ['ts', 'tsx'],
|
|
96
105
|
servePath: 'icon',
|
|
106
|
+
serveExtension: 'png',
|
|
97
107
|
},
|
|
98
108
|
'opengraph-image': {
|
|
99
109
|
type: 'opengraph-image',
|
|
@@ -102,15 +112,9 @@ export const METADATA_ROUTE_CONVENTIONS: Record<
|
|
|
102
112
|
staticExtensions: ['png', 'jpg'],
|
|
103
113
|
dynamicExtensions: ['ts', 'tsx'],
|
|
104
114
|
servePath: 'opengraph-image',
|
|
115
|
+
serveExtension: 'png',
|
|
105
116
|
},
|
|
106
|
-
|
|
107
|
-
type: 'twitter-image',
|
|
108
|
-
contentType: 'image/*',
|
|
109
|
-
nestable: true,
|
|
110
|
-
staticExtensions: ['png', 'jpg'],
|
|
111
|
-
dynamicExtensions: ['ts', 'tsx'],
|
|
112
|
-
servePath: 'twitter-image',
|
|
113
|
-
},
|
|
117
|
+
|
|
114
118
|
'apple-icon': {
|
|
115
119
|
type: 'apple-icon',
|
|
116
120
|
contentType: 'image/*',
|
|
@@ -118,6 +122,7 @@ export const METADATA_ROUTE_CONVENTIONS: Record<
|
|
|
118
122
|
staticExtensions: ['png'],
|
|
119
123
|
dynamicExtensions: ['ts', 'tsx'],
|
|
120
124
|
servePath: 'apple-icon',
|
|
125
|
+
serveExtension: 'png',
|
|
121
126
|
},
|
|
122
127
|
};
|
|
123
128
|
|
|
@@ -213,38 +218,119 @@ export function classifyMetadataRoute(fileName: string): MetadataRouteInfo | nul
|
|
|
213
218
|
}
|
|
214
219
|
|
|
215
220
|
/**
|
|
216
|
-
*
|
|
221
|
+
* Resolve the serve path for a metadata route file.
|
|
217
222
|
*
|
|
218
|
-
*
|
|
219
|
-
*
|
|
223
|
+
* For image routes (icon, opengraph-image, apple-icon), the serve path includes
|
|
224
|
+
* a file extension so CDNs cache correctly:
|
|
225
|
+
* - Dynamic handlers (.ts/.tsx) use the convention's `serveExtension` (default: .png)
|
|
226
|
+
* - Static files use their own extension (e.g., icon.svg → icon.svg)
|
|
227
|
+
*
|
|
228
|
+
* Non-image routes return the convention's `servePath` as-is (already includes
|
|
229
|
+
* extension: sitemap.xml, robots.txt, etc.).
|
|
230
|
+
*/
|
|
231
|
+
export function resolveServePathForFile(baseName: string, filePath: string): string {
|
|
232
|
+
const convention = METADATA_ROUTE_CONVENTIONS[baseName];
|
|
233
|
+
if (!convention) return baseName;
|
|
234
|
+
|
|
235
|
+
if (!convention.serveExtension) return convention.servePath;
|
|
236
|
+
|
|
237
|
+
const ext = filePath.slice(filePath.lastIndexOf('.') + 1);
|
|
238
|
+
if (convention.staticExtensions.includes(ext)) {
|
|
239
|
+
return `${convention.servePath}.${ext}`;
|
|
240
|
+
}
|
|
241
|
+
return `${convention.servePath}.${convention.serveExtension}`;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Get the default serve path for a metadata route type (using default extension
|
|
246
|
+
* for image routes). Used for auto-link generation when only the type is known.
|
|
220
247
|
*/
|
|
221
248
|
export function getMetadataRouteServePath(type: MetadataRouteType): string {
|
|
222
249
|
for (const convention of Object.values(METADATA_ROUTE_CONVENTIONS)) {
|
|
223
|
-
if (convention.type === type)
|
|
250
|
+
if (convention.type === type) {
|
|
251
|
+
if (convention.serveExtension) {
|
|
252
|
+
return `${convention.servePath}.${convention.serveExtension}`;
|
|
253
|
+
}
|
|
254
|
+
return convention.servePath;
|
|
255
|
+
}
|
|
224
256
|
}
|
|
225
257
|
throw new Error(`[timber] Unknown metadata route type: ${type}`);
|
|
226
258
|
}
|
|
227
259
|
|
|
260
|
+
/**
|
|
261
|
+
* All possible serve path segments for metadata routes (includes extension
|
|
262
|
+
* variants for image routes).
|
|
263
|
+
*/
|
|
264
|
+
const METADATA_SERVE_PATHS = new Set<string>();
|
|
265
|
+
for (const convention of Object.values(METADATA_ROUTE_CONVENTIONS)) {
|
|
266
|
+
if (convention.serveExtension) {
|
|
267
|
+
for (const ext of [...convention.staticExtensions, convention.serveExtension]) {
|
|
268
|
+
METADATA_SERVE_PATHS.add(`${convention.servePath}.${ext}`);
|
|
269
|
+
}
|
|
270
|
+
} else {
|
|
271
|
+
METADATA_SERVE_PATHS.add(convention.servePath);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
export function isMetadataRouteServePath(pathname: string): boolean {
|
|
276
|
+
let lastSegment = pathname.slice(pathname.lastIndexOf('/') + 1);
|
|
277
|
+
const qIdx = lastSegment.indexOf('?');
|
|
278
|
+
let query = '';
|
|
279
|
+
if (qIdx !== -1) {
|
|
280
|
+
query = lastSegment.slice(qIdx + 1);
|
|
281
|
+
lastSegment = lastSegment.slice(0, qIdx);
|
|
282
|
+
}
|
|
283
|
+
if (!METADATA_SERVE_PATHS.has(lastSegment)) return false;
|
|
284
|
+
// Vite module requests (e.g., /src/icon.svg?import) use special query params.
|
|
285
|
+
// These are source assets, not metadata routes.
|
|
286
|
+
if (/(?:^|&)(?:import|url|raw|worker|inline)(?:&|$)/.test(query)) return false;
|
|
287
|
+
return true;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/** A <link> auto-link tag. */
|
|
291
|
+
export interface AutoLinkLink {
|
|
292
|
+
tag: 'link';
|
|
293
|
+
rel: string;
|
|
294
|
+
href: string;
|
|
295
|
+
type?: string;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
/** A <meta> auto-link tag. */
|
|
299
|
+
export interface AutoLinkMeta {
|
|
300
|
+
tag: 'meta';
|
|
301
|
+
property?: string;
|
|
302
|
+
name?: string;
|
|
303
|
+
content: string;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
export type AutoLinkTag = AutoLinkLink | AutoLinkMeta;
|
|
307
|
+
|
|
228
308
|
/**
|
|
229
309
|
* Get the auto-link tags to inject into <head> for metadata route files
|
|
230
310
|
* discovered in a segment.
|
|
231
311
|
*
|
|
312
|
+
* Returns link tags for icon/apple-icon/manifest, and meta tags for
|
|
313
|
+
* opengraph-image (emits both og:image and twitter:image). Returns null
|
|
314
|
+
* for types that don't auto-link (favicon, sitemap, robots).
|
|
315
|
+
*
|
|
232
316
|
* @param type - The metadata route type
|
|
233
317
|
* @param href - The resolved URL path to the metadata route
|
|
234
|
-
* @returns
|
|
318
|
+
* @returns Tag descriptor(s) for the <head>, or null if no auto-link
|
|
235
319
|
*/
|
|
236
|
-
export function getMetadataRouteAutoLink(
|
|
237
|
-
type: MetadataRouteType,
|
|
238
|
-
href: string
|
|
239
|
-
): { rel: string; href: string; type?: string } | null {
|
|
320
|
+
export function getMetadataRouteAutoLink(type: MetadataRouteType, href: string): AutoLinkTag[] {
|
|
240
321
|
switch (type) {
|
|
241
322
|
case 'icon':
|
|
242
|
-
return { rel: 'icon', href };
|
|
323
|
+
return [{ tag: 'link', rel: 'icon', href }];
|
|
243
324
|
case 'apple-icon':
|
|
244
|
-
return { rel: 'apple-touch-icon', href };
|
|
325
|
+
return [{ tag: 'link', rel: 'apple-touch-icon', href }];
|
|
245
326
|
case 'manifest':
|
|
246
|
-
return { rel: 'manifest', href };
|
|
327
|
+
return [{ tag: 'link', rel: 'manifest', href }];
|
|
328
|
+
case 'opengraph-image':
|
|
329
|
+
return [
|
|
330
|
+
{ tag: 'meta', property: 'og:image', content: href },
|
|
331
|
+
{ tag: 'meta', name: 'twitter:image', content: href },
|
|
332
|
+
];
|
|
247
333
|
default:
|
|
248
|
-
return
|
|
334
|
+
return [];
|
|
249
335
|
}
|
|
250
336
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Middleware runner — executes a route's middleware.ts before rendering.
|
|
2
|
+
* Middleware runner — executes a route's middleware.ts chain before rendering.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* All middleware.ts files in the segment chain run, root to leaf (top-down).
|
|
5
|
+
* The first middleware that returns a Response short-circuits the chain.
|
|
6
|
+
* There is no next() — each middleware is independent.
|
|
7
7
|
*
|
|
8
8
|
* See design/07-routing.md §"middleware.ts"
|
|
9
9
|
*/
|
|
@@ -30,3 +30,30 @@ export async function runMiddleware(
|
|
|
30
30
|
}
|
|
31
31
|
return undefined;
|
|
32
32
|
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Run all middleware functions in the segment chain, root to leaf.
|
|
36
|
+
*
|
|
37
|
+
* Execution is top-down: root middleware runs first, leaf middleware runs last.
|
|
38
|
+
* All middleware share the same MiddlewareContext — a parent that sets
|
|
39
|
+
* ctx.requestHeaders makes it visible to child middleware and downstream components.
|
|
40
|
+
*
|
|
41
|
+
* Short-circuits on the first middleware that returns a Response.
|
|
42
|
+
* Remaining middleware in the chain do not execute.
|
|
43
|
+
*
|
|
44
|
+
* @param chain - Middleware functions ordered root-to-leaf
|
|
45
|
+
* @param ctx - Shared middleware context
|
|
46
|
+
* @returns A Response if any middleware short-circuited, or undefined to continue
|
|
47
|
+
*/
|
|
48
|
+
export async function runMiddlewareChain(
|
|
49
|
+
chain: MiddlewareFn[],
|
|
50
|
+
ctx: MiddlewareContext
|
|
51
|
+
): Promise<Response | undefined> {
|
|
52
|
+
for (const fn of chain) {
|
|
53
|
+
const result = await fn(ctx);
|
|
54
|
+
if (result instanceof Response) {
|
|
55
|
+
return result;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node.js native stream transforms for SSR HTML post-processing.
|
|
3
|
+
*
|
|
4
|
+
* Node.js `Transform` wrappers around the pure helpers in
|
|
5
|
+
* `html-injector-core.ts`. Used on Node.js / Bun where C++-backed
|
|
6
|
+
* native streams are significantly faster than the JS-implemented
|
|
7
|
+
* Web Streams. The Web `TransformStream` equivalents live in
|
|
8
|
+
* `html-injectors.ts` and wrap the same core — keep the two files
|
|
9
|
+
* byte-for-byte equivalent in behavior. If you fix a streaming bug
|
|
10
|
+
* here, it almost certainly belongs in the core (`html-injector-core.ts`),
|
|
11
|
+
* not in this wrapper.
|
|
12
|
+
*
|
|
13
|
+
* Architecture:
|
|
14
|
+
* renderToPipeableStream → pipe(errorHandler) → pipe(headInjector)
|
|
15
|
+
* → pipe(flightInjector) → Readable.toWeb() → Response
|
|
16
|
+
*
|
|
17
|
+
* All chunks stay in C++ Node.js stream buffers until the final
|
|
18
|
+
* Readable.toWeb() conversion for the Response body.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
import { PassThrough, Transform, type Readable } from 'node:stream';
|
|
22
|
+
import { pipeline } from 'node:stream/promises';
|
|
23
|
+
|
|
24
|
+
import {
|
|
25
|
+
BufferAggregator,
|
|
26
|
+
FlightInjectorCore,
|
|
27
|
+
SUFFIX_BYTES,
|
|
28
|
+
createInjectorState,
|
|
29
|
+
createSuffixState,
|
|
30
|
+
injectorFlush,
|
|
31
|
+
processInjectorChunk,
|
|
32
|
+
processSuffixChunk,
|
|
33
|
+
suffixFlush,
|
|
34
|
+
} from './html-injector-core.js';
|
|
35
|
+
import { logStreamingError } from './logger.js';
|
|
36
|
+
import { createTickCoalescer } from './coalesce-tick.js';
|
|
37
|
+
import { isAbortError, NOINDEX_SCRIPT } from './render-utils.js';
|
|
38
|
+
|
|
39
|
+
// ─── Buffered Transform ──────────────────────────────────────────────────────
|
|
40
|
+
|
|
41
|
+
export interface NodeBufferedTransformOptions {
|
|
42
|
+
/**
|
|
43
|
+
* Flush synchronously once the buffer reaches this many bytes.
|
|
44
|
+
* Prevents unbounded memory growth for very large Fizz flushes.
|
|
45
|
+
* Default: Infinity (no byte limit — flush only on tick boundary).
|
|
46
|
+
*/
|
|
47
|
+
readonly maxBufferByteLength?: number;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Node.js `Transform` that buffers incoming chunks and coalesces them
|
|
52
|
+
* within a single event loop tick.
|
|
53
|
+
*
|
|
54
|
+
* Equivalent to `createBufferedTransformStream` in `html-injectors.ts` —
|
|
55
|
+
* the actual buffer math lives in `BufferAggregator`. This wrapper only
|
|
56
|
+
* owns the `setImmediate` scheduling and the push to the Node `Transform`.
|
|
57
|
+
*
|
|
58
|
+
* **Not a polling loop.** Single-shot `setImmediate` per flush cycle —
|
|
59
|
+
* no recursive scheduling. See design/02 §"No Polling".
|
|
60
|
+
*/
|
|
61
|
+
export function createNodeBufferedTransform(options: NodeBufferedTransformOptions = {}): Transform {
|
|
62
|
+
const buffer = new BufferAggregator(options.maxBufferByteLength ?? Infinity);
|
|
63
|
+
|
|
64
|
+
const flushBuffer = () => {
|
|
65
|
+
const merged = buffer.drain();
|
|
66
|
+
if (merged) transform.push(merged);
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
const coalescer = createTickCoalescer(flushBuffer);
|
|
70
|
+
|
|
71
|
+
const transform = new Transform({
|
|
72
|
+
transform(chunk: Buffer, _encoding, callback) {
|
|
73
|
+
const overCap = buffer.append(chunk);
|
|
74
|
+
if (overCap) {
|
|
75
|
+
flushBuffer();
|
|
76
|
+
} else {
|
|
77
|
+
coalescer.schedule();
|
|
78
|
+
}
|
|
79
|
+
callback();
|
|
80
|
+
},
|
|
81
|
+
flush(callback) {
|
|
82
|
+
coalescer.flushSync();
|
|
83
|
+
callback();
|
|
84
|
+
},
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
return transform;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// ─── Move Suffix Transform ───────────────────────────────────────────────────
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Node.js `Transform` that moves `</body></html>` to the end of the stream.
|
|
94
|
+
*
|
|
95
|
+
* Equivalent to `createMoveSuffixStream` in `html-injectors.ts`. Strips
|
|
96
|
+
* the suffix on first sight and re-emits it from `flush()`. If the
|
|
97
|
+
* suffix never appeared in the input, it is appended anyway so output
|
|
98
|
+
* is well-formed.
|
|
99
|
+
*/
|
|
100
|
+
export function createNodeMoveSuffixTransform(): Transform {
|
|
101
|
+
const state = createSuffixState();
|
|
102
|
+
|
|
103
|
+
return new Transform({
|
|
104
|
+
transform(chunk: Buffer, _encoding, callback) {
|
|
105
|
+
const result = processSuffixChunk(state, chunk);
|
|
106
|
+
if (result.kind === 'passthrough') {
|
|
107
|
+
this.push(chunk);
|
|
108
|
+
callback();
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
if (result.kind === 'noSuffix') {
|
|
112
|
+
if (result.emitSafe) this.push(Buffer.from(result.emitSafe));
|
|
113
|
+
callback();
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
if (result.before) this.push(Buffer.from(result.before));
|
|
117
|
+
if (result.after) this.push(Buffer.from(result.after));
|
|
118
|
+
callback();
|
|
119
|
+
},
|
|
120
|
+
flush(callback) {
|
|
121
|
+
this.push(Buffer.from(suffixFlush(state)));
|
|
122
|
+
callback();
|
|
123
|
+
},
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Re-export for tests / consumers that need the suffix bytes constant.
|
|
128
|
+
export { SUFFIX_BYTES };
|
|
129
|
+
|
|
130
|
+
// ─── Head Injection ──────────────────────────────────────────────────────────
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Node.js `Transform` that injects HTML content before `</head>`.
|
|
134
|
+
*
|
|
135
|
+
* Equivalent to `injectHead` in `html-injectors.ts`. Streams chunks
|
|
136
|
+
* through immediately, keeping only a small trailing buffer to handle
|
|
137
|
+
* `</head>` split across chunk boundaries.
|
|
138
|
+
*/
|
|
139
|
+
export function createNodeHeadInjector(headHtml: string): Transform {
|
|
140
|
+
if (!headHtml) {
|
|
141
|
+
return new Transform({
|
|
142
|
+
transform(chunk, _enc, cb) {
|
|
143
|
+
cb(null, chunk);
|
|
144
|
+
},
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
const state = createInjectorState({ content: headHtml, targetTag: '</head>' });
|
|
149
|
+
|
|
150
|
+
return new Transform({
|
|
151
|
+
transform(chunk: Buffer, _encoding, callback) {
|
|
152
|
+
const result = processInjectorChunk(state, chunk);
|
|
153
|
+
if (result.kind === 'passthrough') {
|
|
154
|
+
callback(null, chunk);
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
if (result.bytes) this.push(Buffer.from(result.bytes));
|
|
158
|
+
callback();
|
|
159
|
+
},
|
|
160
|
+
flush(callback) {
|
|
161
|
+
const leftover = injectorFlush(state);
|
|
162
|
+
if (leftover) this.push(Buffer.from(leftover));
|
|
163
|
+
callback();
|
|
164
|
+
},
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// ─── RSC Flight Injection ────────────────────────────────────────────────────
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Options for the Node.js flight injector.
|
|
172
|
+
*/
|
|
173
|
+
export interface NodeFlightInjectorOptions {
|
|
174
|
+
/**
|
|
175
|
+
* Timeout in milliseconds for individual RSC stream reads. If a single
|
|
176
|
+
* `rscReader.read()` call does not resolve within this duration, the
|
|
177
|
+
* read is aborted and the stream errors with a `RenderTimeoutError`.
|
|
178
|
+
* Default: 30000 (30s).
|
|
179
|
+
*/
|
|
180
|
+
renderTimeoutMs?: number;
|
|
181
|
+
/** Signal that fires when an unhandled RSC error is detected. */
|
|
182
|
+
errorSignal?: AbortSignal;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Node.js `Transform` that merges RSC script tags into the HTML stream.
|
|
187
|
+
*
|
|
188
|
+
* Equivalent to `createFlightInjectionTransform` in `html-injectors.ts`.
|
|
189
|
+
* The state machine, pending queue, and pull loop all live in
|
|
190
|
+
* `FlightInjectorCore` — this wrapper only shuffles bytes between the
|
|
191
|
+
* core and the Node `Transform.push()` API.
|
|
192
|
+
*
|
|
193
|
+
* Suffix stripping (`</body></html>`) is handled upstream by
|
|
194
|
+
* `createNodeMoveSuffixTransform`. RSC scripts are buffered in
|
|
195
|
+
* `core.pending[]` and only drained from `transform()` (after a complete
|
|
196
|
+
* HTML chunk) or `flush()` — never mid-tag. See design/02
|
|
197
|
+
* §"Scripts at Chunk Boundaries Only".
|
|
198
|
+
*
|
|
199
|
+
* The RSC stream is a Web `ReadableStream` (from the tee'd RSC Flight
|
|
200
|
+
* stream). The core reads from it using the Web API — this is the one
|
|
201
|
+
* bridge point between Web Streams and Node.js streams in the pipeline.
|
|
202
|
+
*/
|
|
203
|
+
export function createNodeFlightInjector(
|
|
204
|
+
rscStream: ReadableStream<Uint8Array> | undefined,
|
|
205
|
+
options?: NodeFlightInjectorOptions
|
|
206
|
+
): Transform {
|
|
207
|
+
if (!rscStream) {
|
|
208
|
+
return new Transform({
|
|
209
|
+
transform(chunk, _enc, cb) {
|
|
210
|
+
cb(null, chunk);
|
|
211
|
+
},
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
const core = new FlightInjectorCore(rscStream, options?.renderTimeoutMs, options?.errorSignal);
|
|
216
|
+
|
|
217
|
+
const drain = (): void => {
|
|
218
|
+
while (core.pending.length > 0) transform.push(Buffer.from(core.pending.shift()!));
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
const transform = new Transform({
|
|
222
|
+
transform(chunk: Buffer, _encoding, callback) {
|
|
223
|
+
const wasInit = core.isInit;
|
|
224
|
+
if (wasInit) core.notifyFirstChunk();
|
|
225
|
+
|
|
226
|
+
// Emit the HTML chunk, then drain any buffered RSC scripts.
|
|
227
|
+
// Scripts always come AFTER a complete HTML chunk — never mid-tag.
|
|
228
|
+
// The buffered transform upstream (TIM-528) ensures coherent chunks.
|
|
229
|
+
// Suffix stripping is upstream via createNodeMoveSuffixTransform (TIM-530).
|
|
230
|
+
transform.push(chunk);
|
|
231
|
+
drain();
|
|
232
|
+
|
|
233
|
+
// Start the pull loop on the first HTML chunk.
|
|
234
|
+
if (wasInit) core.ensurePullLoop(drain);
|
|
235
|
+
callback();
|
|
236
|
+
},
|
|
237
|
+
destroy(err, callback) {
|
|
238
|
+
core.abort(err ?? 'pipeline destroyed');
|
|
239
|
+
callback(err);
|
|
240
|
+
},
|
|
241
|
+
flush(callback) {
|
|
242
|
+
// All HTML chunks have been emitted. Pull loop stops yielding.
|
|
243
|
+
core.notifyHtmlDone();
|
|
244
|
+
|
|
245
|
+
const finish = () => {
|
|
246
|
+
drain();
|
|
247
|
+
const err = core.terminalError;
|
|
248
|
+
if (err !== null) {
|
|
249
|
+
transform.destroy(err instanceof Error ? err : new Error(String(err)));
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
callback();
|
|
253
|
+
};
|
|
254
|
+
|
|
255
|
+
if (core.isPullDone) {
|
|
256
|
+
finish();
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
// Wait on the pull-loop promise instead of polling. Zero CPU cost
|
|
260
|
+
// while waiting. See design/02 §"No Polling".
|
|
261
|
+
core.ensurePullLoop(drain).then(finish, (err) => {
|
|
262
|
+
// ensurePullLoop's underlying loop catches its own errors and
|
|
263
|
+
// sends PULL_ERROR — this catch is defence-in-depth for any
|
|
264
|
+
// synchronous throws inside the .then() chain itself.
|
|
265
|
+
transform.destroy(err instanceof Error ? err : new Error(String(err)));
|
|
266
|
+
});
|
|
267
|
+
},
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
return transform;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
// ─── Error Handling ──────────────────────────────────────────────────────────
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* Run the Node SSR post-processing pipeline with post-shell error handling.
|
|
277
|
+
*
|
|
278
|
+
* Equivalent to wrapStreamWithErrorHandling() in ssr-render.ts: when the
|
|
279
|
+
* stream errors after the shell has flushed (deny/throw inside Suspense,
|
|
280
|
+
* an RSC read timeout in the flight injector, or an upstream Fizz error),
|
|
281
|
+
* the response closes cleanly with a trailing noindex script instead of
|
|
282
|
+
* aborting the connection mid-body. Abort errors (client disconnect,
|
|
283
|
+
* render-timeout abort) close the output silently — no noindex, no log.
|
|
284
|
+
*
|
|
285
|
+
* Why this is a pump function and not a Transform stage (TIM-1019):
|
|
286
|
+
* stream.promises.pipeline() destroys every stage in the chain when any
|
|
287
|
+
* stage errors, so a Transform *inside* the pipeline can never append
|
|
288
|
+
* bytes after a failure — by the time its 'error' listener fires, the
|
|
289
|
+
* transform and everything downstream are already destroyed and push()/
|
|
290
|
+
* end() are no-ops. The output PassThrough therefore lives OUTSIDE the
|
|
291
|
+
* pipeline() call: the last stage pipes into it (pipe() ends the output
|
|
292
|
+
* on upstream success but leaves it open on upstream error), and the
|
|
293
|
+
* pipeline's rejection handler appends the noindex script.
|
|
294
|
+
*
|
|
295
|
+
* Consumer cancellation (e.g. Readable.toWeb() cancel on client
|
|
296
|
+
* disconnect) is wired back into the pipeline via an AbortSignal so the
|
|
297
|
+
* source and all stages are torn down — the teardown that membership in
|
|
298
|
+
* pipeline() used to provide.
|
|
299
|
+
*/
|
|
300
|
+
export function runNodePipelineWithErrorHandling(
|
|
301
|
+
source: Readable,
|
|
302
|
+
transforms: readonly [Transform, ...Transform[]],
|
|
303
|
+
signal?: AbortSignal
|
|
304
|
+
): PassThrough {
|
|
305
|
+
const output = new PassThrough();
|
|
306
|
+
const last = transforms[transforms.length - 1]!;
|
|
307
|
+
last.pipe(output);
|
|
308
|
+
|
|
309
|
+
// If the consumer destroys the output (client disconnect), abort the
|
|
310
|
+
// pipeline so the Fizz source and flight injector release their
|
|
311
|
+
// resources. On normal completion the pipeline has already settled and
|
|
312
|
+
// the abort is a no-op.
|
|
313
|
+
const consumerGone = new AbortController();
|
|
314
|
+
output.once('close', () => consumerGone.abort());
|
|
315
|
+
|
|
316
|
+
// The cast satisfies pipeline()'s [source, ...transforms, destination]
|
|
317
|
+
// tuple overload — TS can't prove the shape across a spread, but the
|
|
318
|
+
// signature above guarantees a non-empty transform list at compile time.
|
|
319
|
+
const stages = [source, ...transforms] as unknown as readonly [
|
|
320
|
+
Readable,
|
|
321
|
+
...Transform[],
|
|
322
|
+
Transform,
|
|
323
|
+
];
|
|
324
|
+
|
|
325
|
+
pipeline(stages, { signal: consumerGone.signal }).catch((error: unknown) => {
|
|
326
|
+
if (output.writableEnded || output.destroyed) return;
|
|
327
|
+
if (isAbortError(error) || signal?.aborted || consumerGone.signal.aborted) {
|
|
328
|
+
output.end();
|
|
329
|
+
return;
|
|
330
|
+
}
|
|
331
|
+
logStreamingError({ error });
|
|
332
|
+
output.end(Buffer.from(NOINDEX_SCRIPT, 'utf-8'));
|
|
333
|
+
});
|
|
334
|
+
|
|
335
|
+
return output;
|
|
336
|
+
}
|