@timber-js/app 0.2.0-alpha.16 → 0.2.0-alpha.161
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-cjklt63G.js +317 -0
- package/dist/_chunks/actions-cjklt63G.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-CzYUlgXA.js +1125 -0
- package/dist/_chunks/cache-api-CzYUlgXA.js.map +1 -0
- package/dist/_chunks/{metadata-routes-Cjmvi3rQ.js → canonicalize-P41GR6tY.js} +94 -18
- package/dist/_chunks/canonicalize-P41GR6tY.js.map +1 -0
- package/dist/_chunks/cli-schema-sync-NfLbLnDw.js +638 -0
- package/dist/_chunks/cli-schema-sync-NfLbLnDw.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-Bssfp6ot.js +82 -0
- package/dist/_chunks/define-Bssfp6ot.js.map +1 -0
- package/dist/_chunks/define-CFmvb4Bt.js +203 -0
- package/dist/_chunks/define-CFmvb4Bt.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/logger-B_O6-mdJ.js +1485 -0
- package/dist/_chunks/logger-B_O6-mdJ.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-DeAxFRMq.js +280 -0
- package/dist/_chunks/plugin-context-DeAxFRMq.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-3iUvBV5T.js +50 -0
- package/dist/_chunks/resolve-schema-3iUvBV5T.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-BY3QLBL7.js +119 -0
- package/dist/_chunks/schema-bridge-BY3QLBL7.js.map +1 -0
- package/dist/_chunks/segment-classify-CDDRVKs7.js +137 -0
- package/dist/_chunks/segment-classify-CDDRVKs7.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/tree-match-D2l830j2.js +102 -0
- package/dist/_chunks/tree-match-D2l830j2.js.map +1 -0
- package/dist/_chunks/{use-query-states-D5KaffOK.js → use-query-states-CbeQmext.js} +7 -20
- package/dist/_chunks/use-query-states-CbeQmext.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-9mz9T7mb.js +988 -0
- package/dist/_chunks/walkers-9mz9T7mb.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 +64 -0
- package/dist/adapters/cloudflare-kv-cache.d.ts.map +1 -0
- package/dist/adapters/cloudflare-kv-cache.js +117 -0
- package/dist/adapters/cloudflare-kv-cache.js.map +1 -0
- package/dist/adapters/cloudflare.d.ts +177 -20
- package/dist/adapters/cloudflare.d.ts.map +1 -1
- package/dist/adapters/cloudflare.js +337 -64
- package/dist/adapters/cloudflare.js.map +1 -1
- 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 +1 -3
- package/dist/adapters/nitro.d.ts.map +1 -1
- package/dist/adapters/nitro.js +144 -152
- 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 +0 -6
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/cache/cache-api.d.ts +26 -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 +27 -7
- 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/redis-handler.d.ts +97 -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 +51 -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 +107 -33
- 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 +26 -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 +11 -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 +182 -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 +825 -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 +87 -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/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 +75 -0
- package/dist/codec.js.map +1 -0
- package/dist/config-types.d.ts +304 -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} +2 -2
- 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 +158 -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 +8471 -14108
- 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 +190 -0
- package/dist/plugin-context.d.ts.map +1 -0
- package/dist/plugins/adapter-build.d.ts +20 -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 +1 -1
- 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.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 +75 -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 +77 -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 +157 -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 +37 -440
- 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 +41 -6
- 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 +86 -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 +115 -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 +221 -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 +170 -2911
- 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 +3652 -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 +23 -7
- package/dist/server/metadata-routes.d.ts.map +1 -1
- package/dist/server/middleware-runner.d.ts +36 -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 +56 -0
- package/dist/server/pipeline-phases.d.ts.map +1 -0
- package/dist/server/pipeline.d.ts +122 -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 +58 -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/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/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 +101 -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 +46 -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/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 +50 -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 +17 -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 +119 -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 +12 -5
- 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 +16 -16
- 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 +199 -0
- package/docs/api/33-api-search-params.mdx +141 -0
- package/docs/api/34-api-config.mdx +189 -0
- package/docs/api/35-api-typescript.mdx +170 -0
- package/docs/api/36-cli.mdx +143 -0
- package/docs/learn/00-introduction.mdx +76 -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 +136 -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 +168 -0
- package/docs/learn/13-configuration.mdx +145 -0
- package/docs/learn/14-deploying.mdx +264 -0
- package/docs/more/01-advanced-routing.mdx +139 -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 +103 -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 +179 -0
- package/src/adapters/cloudflare.ts +571 -118
- package/src/adapters/compress-module.ts +27 -92
- package/src/adapters/nitro.ts +131 -107
- package/src/adapters/raw-imports.d.ts +5 -0
- package/src/adapters/shared.ts +68 -0
- package/src/adapters/types.ts +0 -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 +88 -18
- package/src/cache/invalidation-epoch.ts +93 -0
- package/src/cache/redis-handler.ts +122 -15
- 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 +233 -0
- package/src/cache/timber-cache.ts +142 -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 +388 -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 +111 -0
- package/src/client/browser-entry/post-hydration.ts +103 -0
- package/src/client/browser-entry/router-init.ts +287 -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 +11 -7
- package/src/client/index.ts +67 -45
- package/src/client/internal.ts +58 -0
- package/src/client/link.tsx +346 -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 +482 -166
- package/src/client/rsc-fetch.ts +214 -33
- package/src/client/segment-cache.ts +7 -7
- 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/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 +9 -3
- 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 +147 -0
- package/src/config-types.ts +302 -0
- package/src/config-validation.ts +328 -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} +9 -5
- 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 +316 -0
- package/src/fonts/transform.ts +305 -0
- package/src/fonts/types.ts +52 -1
- package/src/fonts/virtual-modules.ts +179 -0
- package/src/index.ts +431 -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 +378 -0
- package/src/plugins/adapter-build.ts +98 -4
- package/src/plugins/build-manifest.ts +168 -23
- package/src/plugins/build-report.ts +253 -35
- package/src/plugins/cache.ts +229 -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 +144 -0
- package/src/plugins/cloudflare-wasm.ts +141 -0
- package/src/plugins/content.ts +1 -1
- package/src/plugins/dev-server.ts +293 -46
- package/src/plugins/entries.ts +129 -8
- package/src/plugins/fonts.ts +199 -664
- package/src/plugins/mdx.ts +47 -10
- package/src/plugins/prebuilt-capture.ts +217 -0
- package/src/plugins/prebuilt.ts +700 -0
- package/src/plugins/prerender-sugar.ts +329 -0
- package/src/plugins/routing.ts +237 -241
- package/src/plugins/server-bundle.ts +97 -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 +360 -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 +310 -0
- package/src/routing/manifest-codegen.ts +281 -0
- package/src/routing/scanner.ts +248 -188
- package/src/routing/schema-validation.ts +149 -0
- package/src/routing/segment-classify.ts +188 -0
- package/src/routing/segment-codegen.ts +98 -0
- package/src/routing/types.ts +78 -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 +252 -0
- package/src/search-params/define.ts +570 -0
- package/src/search-params/index.ts +14 -20
- package/src/search-params/registry.ts +2 -2
- package/src/search-params/wrappers.ts +110 -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 +119 -28
- 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 +130 -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 +311 -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 +437 -0
- package/src/server/html-injectors.ts +267 -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 +44 -19
- package/src/server/middleware-runner.ts +75 -4
- package/src/server/node-stream-transforms.ts +331 -0
- package/src/server/param-coercion.ts +206 -0
- package/src/server/pipeline-helpers.ts +204 -0
- package/src/server/pipeline-interception.ts +32 -18
- package/src/server/pipeline-metadata.ts +14 -0
- package/src/server/pipeline-outcome.ts +197 -0
- package/src/server/pipeline-phases.ts +538 -0
- package/src/server/pipeline.ts +226 -382
- package/src/server/port-resolution.ts +215 -0
- package/src/server/prebuilt/cache-key.ts +224 -0
- package/src/server/prebuilt/capture-state.ts +89 -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/synthetic-store.ts +121 -0
- package/src/server/prebuilt-builder.ts +774 -0
- package/src/server/prebuilt-runtime.ts +731 -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 +548 -233
- package/src/server/route-handler.ts +31 -4
- package/src/server/route-matcher.ts +144 -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/error-renderer.ts +306 -89
- package/src/server/rsc-entry/helpers.ts +160 -76
- package/src/server/rsc-entry/index.ts +394 -330
- package/src/server/rsc-entry/render-route.ts +288 -0
- package/src/server/rsc-entry/revalidate-renderer.ts +349 -0
- package/src/server/rsc-entry/rsc-payload.ts +74 -35
- package/src/server/rsc-entry/rsc-stream.ts +85 -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 +449 -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 +344 -0
- package/src/server/sitemap-handler.ts +157 -0
- package/src/server/slot-resolver.ts +258 -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 +30 -23
- package/src/server/status-code-resolver.ts +115 -130
- package/src/server/stream-utils.ts +286 -0
- package/src/server/tracing.ts +126 -14
- package/src/server/tree-builder.ts +204 -90
- package/src/server/tree-match.ts +220 -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.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/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
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: 'API: @timber-js/app/cache'
|
|
3
|
+
description: 'Cache exports — cache, CacheHandler, MemoryCacheHandler, and invalidation.'
|
|
4
|
+
slug: 'api-cache'
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# @timber-js/app/cache
|
|
8
|
+
|
|
9
|
+
Caching primitives and cache handler interface. Import from `@timber-js/app/cache`.
|
|
10
|
+
|
|
11
|
+
## `cache(fn, options)`
|
|
12
|
+
|
|
13
|
+
Wrap an async function with cross-request caching.
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
import { cache } from '@timber-js/app/cache';
|
|
17
|
+
|
|
18
|
+
declare const db: { users: { findUnique(opts: { where: { id: string } }): Promise<{ id: string; name: string }> } };
|
|
19
|
+
|
|
20
|
+
const getUser = cache(
|
|
21
|
+
async (userId: string) => {
|
|
22
|
+
return db.users.findUnique({ where: { id: userId } });
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
ttl: 60,
|
|
26
|
+
key: (userId) => `user:${userId}`,
|
|
27
|
+
staleWhileRevalidate: true,
|
|
28
|
+
tags: (userId) => [`user:${userId}`],
|
|
29
|
+
}
|
|
30
|
+
);
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### `CacheOptions<Fn>`
|
|
34
|
+
|
|
35
|
+
| Option | Type | Description |
|
|
36
|
+
| ---------------------- | ----------------------------------- | ------------------------------------------ |
|
|
37
|
+
| `ttl` | `number` | Time-to-live in seconds |
|
|
38
|
+
| `key` | `(...args) => string` | Custom cache key function (optional) |
|
|
39
|
+
| `staleWhileRevalidate` | `boolean` | Serve stale while refetching in background |
|
|
40
|
+
| `tags` | `string[] \| (...args) => string[]` | Tags for invalidation |
|
|
41
|
+
|
|
42
|
+
Default key: FNV-1a hash of function identity + deterministic JSON serialization of arguments.
|
|
43
|
+
|
|
44
|
+
The function identity is derived at build time from the source text of the `cache(...)` call, so it is stable across restarts, instances, and deploys. With a persistent shared handler (Redis/KV), cached entries survive deploys as long as the call itself is unchanged — reordering calls or editing unrelated code preserves the cache, while editing the wrapped function or its options gives the call a fresh identity (old entries simply expire via TTL). Renaming or moving the file also resets identity for every call in it.
|
|
45
|
+
|
|
46
|
+
Build-time identity covers calls the bundler can see statically: named imports (including aliases like `import { cache as c }`) and namespace imports (`import * as timber` + `timber.cache(fn, opts)`). Calls it can't trace — a local alias like `const c = cache`, or `cache` re-exported through your own wrapper module — fall back to a hash of the function's source text at runtime. The fallback is still deterministic across instances of the same build, but it resets across deploys, and byte-identical closures produced by a factory can collide — pass an explicit `key` in those cases (timber logs a warning when the fallback is used).
|
|
47
|
+
|
|
48
|
+
### `cache.invalidate(options)`
|
|
49
|
+
|
|
50
|
+
Invalidate cache entries by tag or key:
|
|
51
|
+
|
|
52
|
+
```ts
|
|
53
|
+
import { cache } from '@timber-js/app/cache';
|
|
54
|
+
|
|
55
|
+
cache.invalidate({ tag: 'products' });
|
|
56
|
+
cache.invalidate({ key: 'user:abc' });
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## `CacheHandler` Interface
|
|
60
|
+
|
|
61
|
+
Implement this to plug in a custom cache backend.
|
|
62
|
+
|
|
63
|
+
```ts
|
|
64
|
+
interface CacheHandler {
|
|
65
|
+
get(key: string): Promise<{ value: unknown; tags: string[] } | null>;
|
|
66
|
+
set(key: string, value: unknown, options: { ttl: number; tags: string[] }): Promise<void>;
|
|
67
|
+
invalidate(options: { tag: string }): Promise<void>;
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## `MemoryCacheHandler`
|
|
72
|
+
|
|
73
|
+
In-memory cache with LRU eviction. The default handler.
|
|
74
|
+
|
|
75
|
+
```ts
|
|
76
|
+
import { MemoryCacheHandler } from '@timber-js/app/cache';
|
|
77
|
+
|
|
78
|
+
const handler = new MemoryCacheHandler({ maxSize: 1000 });
|
|
79
|
+
handler.size; // Current number of entries
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Options
|
|
83
|
+
|
|
84
|
+
| Option | Type | Default | Description |
|
|
85
|
+
| --------- | -------- | ------- | ----------------------------------- |
|
|
86
|
+
| `maxSize` | `number` | `1000` | Maximum entries before LRU eviction |
|
|
87
|
+
|
|
88
|
+
## `RedisCacheHandler`
|
|
89
|
+
|
|
90
|
+
Redis-backed cache handler. Takes a client wrapped to timber's `RedisClient` contract — TTL is a required positional argument, so an adapter can't silently drop the expiry:
|
|
91
|
+
|
|
92
|
+
```ts
|
|
93
|
+
interface RedisClient {
|
|
94
|
+
get(key: string): Promise<string | null>;
|
|
95
|
+
set(key: string, value: string, ttlSeconds: number): Promise<unknown>;
|
|
96
|
+
expireNX(key: string, seconds: number): Promise<unknown>;
|
|
97
|
+
expireGT(key: string, seconds: number): Promise<unknown>;
|
|
98
|
+
del(key: string): Promise<unknown>; // single key
|
|
99
|
+
sadd(key: string, ...members: string[]): Promise<unknown>;
|
|
100
|
+
srem(key: string, ...members: string[]): Promise<unknown>;
|
|
101
|
+
smembers(key: string): Promise<string[]>;
|
|
102
|
+
ttl(key: string): Promise<number>;
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
`expireNX` and `expireGT` map to Redis 7.0's `EXPIRE key seconds NX|GT` subcommands. `NX` sets the TTL only if none exists, `GT` extends only if greater. Both are used internally for atomic tag set TTL management. Separate methods ensure adapters cannot silently drop the mode. Requires **Redis 7.0+**.
|
|
107
|
+
|
|
108
|
+
This is deliberately not the native shape of any client library — ioredis, node-redis, and @upstash/redis disagree on TTL argument shapes and method casing, and a contract that pattern-matches one client lets another silently write keys with no expiry. Wrap your client with one of these adapters:
|
|
109
|
+
|
|
110
|
+
```ts title="ioredis"
|
|
111
|
+
import { RedisCacheHandler } from '@timber-js/app/cache';
|
|
112
|
+
import Redis from 'ioredis';
|
|
113
|
+
|
|
114
|
+
const redis = new Redis(process.env.REDIS_URL!);
|
|
115
|
+
const handler = new RedisCacheHandler({
|
|
116
|
+
get: (k) => redis.get(k),
|
|
117
|
+
set: (k, v, ttl) => redis.set(k, v, 'EX', ttl),
|
|
118
|
+
expireNX: (k, s) => redis.expire(k, s, 'NX'),
|
|
119
|
+
expireGT: (k, s) => redis.expire(k, s, 'GT'),
|
|
120
|
+
del: (k) => redis.del(k),
|
|
121
|
+
sadd: (k, ...m) => redis.sadd(k, ...m),
|
|
122
|
+
srem: (k, ...m) => redis.srem(k, ...m),
|
|
123
|
+
smembers: (k) => redis.smembers(k),
|
|
124
|
+
ttl: (k) => redis.ttl(k),
|
|
125
|
+
});
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
```ts title="node-redis"
|
|
129
|
+
import { RedisCacheHandler } from '@timber-js/app/cache';
|
|
130
|
+
import { createClient } from 'redis';
|
|
131
|
+
|
|
132
|
+
const redis = createClient({ url: process.env.REDIS_URL });
|
|
133
|
+
await redis.connect();
|
|
134
|
+
const handler = new RedisCacheHandler({
|
|
135
|
+
get: (k) => redis.get(k),
|
|
136
|
+
set: (k, v, ttl) => redis.set(k, v, { EX: ttl }),
|
|
137
|
+
expireNX: (k, s) => redis.expire(k, s, 'NX'),
|
|
138
|
+
expireGT: (k, s) => redis.expire(k, s, 'GT'),
|
|
139
|
+
del: (k) => redis.del(k),
|
|
140
|
+
sadd: (k, ...m) => redis.sAdd(k, m),
|
|
141
|
+
srem: (k, ...m) => redis.sRem(k, m),
|
|
142
|
+
smembers: (k) => redis.sMembers(k),
|
|
143
|
+
ttl: (k) => redis.ttl(k),
|
|
144
|
+
});
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
```ts title="@upstash/redis"
|
|
148
|
+
import { RedisCacheHandler } from '@timber-js/app/cache';
|
|
149
|
+
import { Redis } from '@upstash/redis';
|
|
150
|
+
|
|
151
|
+
// automaticDeserialization must be off: the handler stores JSON strings
|
|
152
|
+
// and parses them itself.
|
|
153
|
+
const redis = new Redis({
|
|
154
|
+
url: process.env.UPSTASH_REDIS_REST_URL!,
|
|
155
|
+
token: process.env.UPSTASH_REDIS_REST_TOKEN!,
|
|
156
|
+
automaticDeserialization: false,
|
|
157
|
+
});
|
|
158
|
+
const handler = new RedisCacheHandler({
|
|
159
|
+
get: (k) => redis.get(k),
|
|
160
|
+
set: (k, v, ttl) => redis.set(k, v, { ex: ttl }),
|
|
161
|
+
expireNX: (k, s) => redis.expire(k, s, 'NX'),
|
|
162
|
+
expireGT: (k, s) => redis.expire(k, s, 'GT'),
|
|
163
|
+
del: (k) => redis.del(k),
|
|
164
|
+
sadd: (k, ...m) => redis.sadd(k, m[0], ...m.slice(1)),
|
|
165
|
+
srem: (k, ...m) => redis.srem(k, m[0], ...m.slice(1)),
|
|
166
|
+
smembers: (k) => redis.smembers(k),
|
|
167
|
+
ttl: (k) => redis.ttl(k),
|
|
168
|
+
});
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## `CloudflareKVCacheHandler`
|
|
172
|
+
|
|
173
|
+
Cloudflare Workers KV–backed cache handler. Resolves the KV binding per-request via `getCloudflareBindings()`. Uses tag index keys for tag-based invalidation. Eventually consistent — TTL is the primary expiry mechanism.
|
|
174
|
+
|
|
175
|
+
```ts
|
|
176
|
+
import { CloudflareKVCacheHandler } from '@timber-js/app/adapters/cloudflare/cache';
|
|
177
|
+
|
|
178
|
+
const handler = new CloudflareKVCacheHandler({
|
|
179
|
+
bindingName: 'TIMBER_CACHE',
|
|
180
|
+
prefix: 'tc:', // optional, default 'tc:'
|
|
181
|
+
});
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
## Invalidation
|
|
185
|
+
|
|
186
|
+
### `revalidateTag(tag)`
|
|
187
|
+
|
|
188
|
+
Invalidate all cache entries with the given tag. Re-exported from `@timber-js/app/server` for convenience.
|
|
189
|
+
|
|
190
|
+
```ts
|
|
191
|
+
import { revalidateTag } from '@timber-js/app/server';
|
|
192
|
+
|
|
193
|
+
revalidateTag('products');
|
|
194
|
+
revalidateTag(`user:${userId}`);
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
## Singleflight
|
|
198
|
+
|
|
199
|
+
Request coalescing is built into `cache()` automatically — when multiple concurrent calls miss the cache for the same key, only one executes the underlying function. The singleflight and stable-stringify utilities are internal implementation details and not part of the public API.
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: 'API: @timber-js/app/search-params & Segment Params'
|
|
3
|
+
description: 'Params exports — defineSchema, getSegmentParams, defineSearchParams, codecs, and utilities.'
|
|
4
|
+
slug: 'api-params'
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# @timber-js/app/search-params
|
|
8
|
+
|
|
9
|
+
Typed search parameter definitions.
|
|
10
|
+
|
|
11
|
+
## `defineSearchParams(codecs)`
|
|
12
|
+
|
|
13
|
+
Create a typed search params definition for a route.
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
import { defineSearchParams } from '@timber-js/app/search-params';
|
|
17
|
+
import { z } from 'zod/v4';
|
|
18
|
+
|
|
19
|
+
export const searchParams = defineSearchParams({
|
|
20
|
+
page: z.coerce.number().default(1),
|
|
21
|
+
sort: z.enum(['price', 'name', 'date']).default('date'),
|
|
22
|
+
q: z.string().optional(),
|
|
23
|
+
});
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Returns: `SearchParamsDefinition<T>`
|
|
27
|
+
|
|
28
|
+
| Method / Property | Description |
|
|
29
|
+
| ------------------------- | ------------------------------------------------------ |
|
|
30
|
+
| `.get()` | Read from ALS and parse (server-only) |
|
|
31
|
+
| `.parse(searchParams)` | Parse and validate from `URLSearchParams` or `Promise` |
|
|
32
|
+
| `.useQueryStates(opts?)` | Client hook — read and update typed search params |
|
|
33
|
+
| `.extend(codecs)` | Add additional params |
|
|
34
|
+
| `.pick(...keys)` | Create a subset |
|
|
35
|
+
| `.serialize(values)` | Convert typed values to URL search string |
|
|
36
|
+
| `.href(base, values)` | Build a full URL with params |
|
|
37
|
+
| `.toSearchParams(values)` | Convert to `URLSearchParams` |
|
|
38
|
+
| `.codecs` | Read-only codec map |
|
|
39
|
+
| `.urlKeys` | Read-only URL key alias map |
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
# Segment Params
|
|
44
|
+
|
|
45
|
+
Segment params are defined globally in `app/schema.ts` via `defineSchema`. Access them with `getSegmentParams()` from `@timber-js/app/server` or `useSegmentParams()` from `@timber-js/app/client`.
|
|
46
|
+
|
|
47
|
+
## `defineSchema(config)`
|
|
48
|
+
|
|
49
|
+
Define segment param codecs in a single file. Exported from `@timber-js/app`.
|
|
50
|
+
|
|
51
|
+
```ts
|
|
52
|
+
import { defineSchema } from '@timber-js/app/params';
|
|
53
|
+
import { codec } from '@timber-js/app/codec';
|
|
54
|
+
import { z } from 'zod/v4';
|
|
55
|
+
|
|
56
|
+
export default defineSchema({
|
|
57
|
+
segmentParams: {
|
|
58
|
+
'[id]': z.coerce.number().int().positive(),
|
|
59
|
+
'[artistSlug]': codec.string,
|
|
60
|
+
'[year]': codec.integer,
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Each key uses the bracket syntax from the filesystem. Parse failure → 404.
|
|
66
|
+
|
|
67
|
+
## `getSegmentParams(segmentPath?)`
|
|
68
|
+
|
|
69
|
+
Read segment params on the server. ALS-backed. Exported from `@timber-js/app/server`.
|
|
70
|
+
|
|
71
|
+
```ts
|
|
72
|
+
import { SEGMENT_PATH } from './$segment';
|
|
73
|
+
import { getSegmentParams } from '@timber-js/app/server';
|
|
74
|
+
|
|
75
|
+
const { id } = getSegmentParams(SEGMENT_PATH); // Exact types from schema
|
|
76
|
+
const params = getSegmentParams(); // Partial<AllSegmentParams>
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## `useSegmentParams(segmentPath?)`
|
|
80
|
+
|
|
81
|
+
Read segment params on the client. Context-backed. Exported from `@timber-js/app/client`.
|
|
82
|
+
|
|
83
|
+
```tsx
|
|
84
|
+
import { SEGMENT_PATH } from './$segment';
|
|
85
|
+
import { useSegmentParams } from '@timber-js/app/client';
|
|
86
|
+
|
|
87
|
+
const { id } = useSegmentParams(SEGMENT_PATH); // Exact types from schema
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
See [Typed Params](/docs/typed-params) for the full guide.
|
|
91
|
+
|
|
92
|
+
## `SearchParamCodec<T>`
|
|
93
|
+
|
|
94
|
+
The codec protocol shared across search params, segment params, and cookies. See [Codecs](/docs/typed-params) for the full guide.
|
|
95
|
+
|
|
96
|
+
```ts
|
|
97
|
+
interface SearchParamCodec<T> {
|
|
98
|
+
parse(value: string | string[] | undefined): T;
|
|
99
|
+
serialize(value: T): string | null;
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Compatible codecs:
|
|
104
|
+
|
|
105
|
+
- **Zod/Valibot/ArkType schemas** — auto-detected via Standard Schema
|
|
106
|
+
- **nuqs parsers** — `parseAsInteger`, `parseAsString`, `parseAsBoolean`
|
|
107
|
+
- **Custom** — any object implementing the interface
|
|
108
|
+
|
|
109
|
+
## Built-in Codecs
|
|
110
|
+
|
|
111
|
+
| Export | Description |
|
|
112
|
+
| ------------------------------ | --------------------------- |
|
|
113
|
+
| `parseAsString` | `string \| null` |
|
|
114
|
+
| `parseAsInteger` | `number \| null` |
|
|
115
|
+
| `parseAsFloat` | `number \| null` |
|
|
116
|
+
| `parseAsBoolean` | `boolean \| null` |
|
|
117
|
+
| `parseAsStringEnum(values)` | Enum `T \| null` |
|
|
118
|
+
| `parseAsStringLiteral(values)` | Literal `T[number] \| null` |
|
|
119
|
+
|
|
120
|
+
## Codec Wrappers
|
|
121
|
+
|
|
122
|
+
### `withDefault(codec, value)`
|
|
123
|
+
|
|
124
|
+
Wrap a codec to replace `null` with a default value.
|
|
125
|
+
|
|
126
|
+
```ts
|
|
127
|
+
import { withDefault } from '@timber-js/app/search-params';
|
|
128
|
+
import { parseAsInteger } from 'nuqs';
|
|
129
|
+
const page = withDefault(parseAsInteger, 1); // number (never null)
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### `withUrlKey(codec, key)`
|
|
133
|
+
|
|
134
|
+
Attach a URL key alias to a codec.
|
|
135
|
+
|
|
136
|
+
```ts
|
|
137
|
+
import { withUrlKey } from '@timber-js/app/search-params';
|
|
138
|
+
import { parseAsString } from 'nuqs';
|
|
139
|
+
const query = withUrlKey(parseAsString, 'q');
|
|
140
|
+
// ?q=shoes → { query: 'shoes' }
|
|
141
|
+
```
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: 'API: timber.config.ts'
|
|
3
|
+
description: 'All configuration options for timber.config.ts.'
|
|
4
|
+
slug: 'api-config'
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# timber.config.ts
|
|
8
|
+
|
|
9
|
+
Project-wide configuration. Export a default object from `timber.config.ts` at the project root.
|
|
10
|
+
|
|
11
|
+
## Full Type
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
interface TimberUserConfig {
|
|
15
|
+
output?: 'server' | 'static';
|
|
16
|
+
buildDir?: string;
|
|
17
|
+
clientJavascript?: boolean | ClientJavascriptConfig;
|
|
18
|
+
adapter?: TimberPlatformAdapter;
|
|
19
|
+
cacheHandler?: CacheHandler;
|
|
20
|
+
serverTiming?: 'detailed' | 'total' | false;
|
|
21
|
+
allowedOrigins?: string[];
|
|
22
|
+
csrf?: boolean;
|
|
23
|
+
limits?: {
|
|
24
|
+
actionBodySize?: string;
|
|
25
|
+
uploadBodySize?: string;
|
|
26
|
+
maxFields?: number;
|
|
27
|
+
};
|
|
28
|
+
actions?: {
|
|
29
|
+
runMiddleware?: boolean;
|
|
30
|
+
};
|
|
31
|
+
forms?: {
|
|
32
|
+
stripSensitiveFields?: boolean | string[];
|
|
33
|
+
};
|
|
34
|
+
pageExtensions?: string[];
|
|
35
|
+
dev?: {
|
|
36
|
+
slowPhaseMs?: number;
|
|
37
|
+
};
|
|
38
|
+
mdx?: {
|
|
39
|
+
remarkPlugins?: any[];
|
|
40
|
+
rehypePlugins?: any[];
|
|
41
|
+
recmaPlugins?: any[];
|
|
42
|
+
remarkRehypeOptions?: any;
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Options
|
|
48
|
+
|
|
49
|
+
### `output`
|
|
50
|
+
|
|
51
|
+
- **Type:** `'server' | 'static'`
|
|
52
|
+
- **Default:** `'server'`
|
|
53
|
+
|
|
54
|
+
Server mode runs on every request. Static mode pre-renders at build time.
|
|
55
|
+
|
|
56
|
+
### `buildDir`
|
|
57
|
+
|
|
58
|
+
- **Type:** `string`
|
|
59
|
+
- **Default:** `'.timber/dist'`
|
|
60
|
+
|
|
61
|
+
Override the build output directory. Relative to the project root. Timber config takes precedence over Vite's `build.outDir`. If neither is set, defaults to `.timber/dist`.
|
|
62
|
+
|
|
63
|
+
```ts
|
|
64
|
+
buildDir: 'build'; // outputs to <root>/build/
|
|
65
|
+
buildDir: '.output'; // outputs to <root>/.output/
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### `clientJavascript`
|
|
69
|
+
|
|
70
|
+
- **Type:** `boolean | { disabled: boolean; enableHMRInDev?: boolean }`
|
|
71
|
+
- **Default:** `true`
|
|
72
|
+
|
|
73
|
+
Control client-side JavaScript output. Set to `false` to disable all client JS. Use the object form to disable client JS in production while keeping HMR in development:
|
|
74
|
+
|
|
75
|
+
```ts
|
|
76
|
+
clientJavascript: { disabled: true, enableHMRInDev: true }
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### `adapter`
|
|
80
|
+
|
|
81
|
+
- **Type:** `TimberPlatformAdapter`
|
|
82
|
+
- **Default:** none
|
|
83
|
+
|
|
84
|
+
Deployment adapter. See [Deployment](/docs/deploying).
|
|
85
|
+
|
|
86
|
+
```ts
|
|
87
|
+
import { cloudflare } from '@timber-js/app/adapters/cloudflare';
|
|
88
|
+
import { nitro } from '@timber-js/app/adapters/nitro';
|
|
89
|
+
|
|
90
|
+
adapter: cloudflare();
|
|
91
|
+
adapter: nitro({ preset: 'node-server' });
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### `cacheHandler`
|
|
95
|
+
|
|
96
|
+
- **Type:** `CacheHandler`
|
|
97
|
+
- **Default:** `MemoryCacheHandler`
|
|
98
|
+
|
|
99
|
+
Cache backend for `timber.cache()`. See [Cache API](/docs/api-cache).
|
|
100
|
+
|
|
101
|
+
### `serverTiming`
|
|
102
|
+
|
|
103
|
+
- **Type:** `'detailed' | 'total' | false`
|
|
104
|
+
- **Default:** `'detailed'` in dev, `'total'` in production
|
|
105
|
+
|
|
106
|
+
Controls the `Server-Timing` response header. See [Instrumentation & Tracing](/docs/instrumentation).
|
|
107
|
+
|
|
108
|
+
### `allowedOrigins`
|
|
109
|
+
|
|
110
|
+
- **Type:** `string[]`
|
|
111
|
+
- **Default:** none
|
|
112
|
+
|
|
113
|
+
Origins allowed for CORS and CSRF validation.
|
|
114
|
+
|
|
115
|
+
### `csrf`
|
|
116
|
+
|
|
117
|
+
- **Type:** `boolean`
|
|
118
|
+
- **Default:** `true` (in server mode)
|
|
119
|
+
|
|
120
|
+
Enable CSRF protection for server actions and form submissions.
|
|
121
|
+
|
|
122
|
+
### `limits`
|
|
123
|
+
|
|
124
|
+
Control request body size limits:
|
|
125
|
+
|
|
126
|
+
```ts
|
|
127
|
+
limits: {
|
|
128
|
+
actionBodySize: '1mb', // Server action body limit
|
|
129
|
+
uploadBodySize: '10mb', // File upload body limit
|
|
130
|
+
maxFields: 1000, // Maximum FormData fields
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### `actions.runMiddleware`
|
|
135
|
+
|
|
136
|
+
- **Type:** `boolean`
|
|
137
|
+
- **Default:** `true`
|
|
138
|
+
|
|
139
|
+
Run `middleware.ts` on server action requests before dispatching. Keeps authentication, rate limiting, and other cross-cutting checks applied uniformly to page renders, route handlers, and server actions. Set to `false` only if your middleware would corrupt action submissions (e.g. it rewrites POST bodies) — you then own placing those checks inside every action.
|
|
140
|
+
|
|
141
|
+
### `forms.stripSensitiveFields`
|
|
142
|
+
|
|
143
|
+
- **Type:** `boolean | string[]`
|
|
144
|
+
- **Default:** `true`
|
|
145
|
+
|
|
146
|
+
Strip sensitive fields (passwords, tokens, CVV, SSN, etc.) from the `submittedValues` echoed back on validation failure. `true` uses the built-in deny-list; an array adds extra field names to the built-in list; `false` disables stripping (never do this in production). See [Forms & Server Actions](/docs/forms-and-actions) for the full pattern list.
|
|
147
|
+
|
|
148
|
+
### `pageExtensions`
|
|
149
|
+
|
|
150
|
+
- **Type:** `string[]`
|
|
151
|
+
- **Default:** `['tsx', 'ts', 'jsx', 'js']`
|
|
152
|
+
|
|
153
|
+
File extensions recognized for rendering conventions (`page.*`, `layout.*`, `error.*`, `default.*`, `denied.*`, status files). Add `'mdx'` for MDX pages.
|
|
154
|
+
|
|
155
|
+
Code-only conventions (`middleware.*`, `access.*`, `route.*`, `params.*`) always use `.ts`/`.tsx`/`.js`/`.jsx` regardless of this setting. `.mts`/`.cts`/`.mjs`/`.cjs` are not recognized for any convention.
|
|
156
|
+
|
|
157
|
+
Two files claiming the same convention in one directory (e.g. `page.tsx` + `page.jsx`) are a build error — filesystem order is platform-dependent, so timber refuses to pick one silently.
|
|
158
|
+
|
|
159
|
+
### `dev.slowPhaseMs`
|
|
160
|
+
|
|
161
|
+
- **Type:** `number`
|
|
162
|
+
- **Default:** framework default
|
|
163
|
+
|
|
164
|
+
Threshold in milliseconds for slow-phase warnings in dev mode.
|
|
165
|
+
|
|
166
|
+
### `mdx`
|
|
167
|
+
|
|
168
|
+
MDX compilation options — remark, rehype, and recma plugins:
|
|
169
|
+
|
|
170
|
+
```ts
|
|
171
|
+
mdx: {
|
|
172
|
+
remarkPlugins: [remarkGfm],
|
|
173
|
+
rehypePlugins: [rehypePrism],
|
|
174
|
+
}
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
## `TimberPlatformAdapter`
|
|
178
|
+
|
|
179
|
+
The adapter interface for community adapters:
|
|
180
|
+
|
|
181
|
+
```ts
|
|
182
|
+
interface TimberPlatformAdapter {
|
|
183
|
+
name: string;
|
|
184
|
+
buildOutput(config: TimberConfig, buildDir: string): Promise<void>;
|
|
185
|
+
preview?(config: TimberConfig, buildDir: string): Promise<void>;
|
|
186
|
+
waitUntil?(promise: Promise<unknown>): void;
|
|
187
|
+
sendEarlyHints?(links: string[]): void;
|
|
188
|
+
}
|
|
189
|
+
```
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: 'API: TypeScript'
|
|
3
|
+
description: 'Generated route types, $segment modules, typed Link, typed params, and the Routes interface.'
|
|
4
|
+
slug: 'api-typescript'
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# TypeScript
|
|
8
|
+
|
|
9
|
+
timber.js generates route types at build time. Links, params, and search params are type-checked against the actual route tree.
|
|
10
|
+
|
|
11
|
+
## Generated Route Map
|
|
12
|
+
|
|
13
|
+
The build system scans your `app/` directory and generates `.timber/routes.d.ts`:
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
// .timber/routes.d.ts (generated, gitignored)
|
|
17
|
+
import type schema from '../app/schema';
|
|
18
|
+
import type { InferCodecType } from '@timber-js/app/params';
|
|
19
|
+
|
|
20
|
+
export type TimberRoute = keyof TimberSegmentParams;
|
|
21
|
+
|
|
22
|
+
export interface TimberSegmentParams {
|
|
23
|
+
'/': {};
|
|
24
|
+
'/products/[id]': {
|
|
25
|
+
id: InferCodecType<typeof schema.segmentParams['[id]']>;
|
|
26
|
+
};
|
|
27
|
+
'/blog/[...slug]': { slug: string[] };
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export type AllSegmentParams = { /* union of all route params */ };
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Types reference your `app/schema.ts` codecs directly, so they stay in sync automatically.
|
|
34
|
+
|
|
35
|
+
## `$segment` — Per-Route Type Narrowing
|
|
36
|
+
|
|
37
|
+
Each route directory gets a generated `$segment` module (via TypeScript's `rootDirs`). Import `SEGMENT_PATH` for type-safe param access:
|
|
38
|
+
|
|
39
|
+
```tsx
|
|
40
|
+
// app/products/[id]/page.tsx
|
|
41
|
+
import { SEGMENT_PATH } from './$segment';
|
|
42
|
+
import { getSegmentParams } from '@timber-js/app/server';
|
|
43
|
+
|
|
44
|
+
export default async function ProductPage() {
|
|
45
|
+
const { id } = getSegmentParams(SEGMENT_PATH);
|
|
46
|
+
// id is typed from your schema codec (e.g., number for codec.integer)
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Exports
|
|
51
|
+
|
|
52
|
+
| Export | Type | Description |
|
|
53
|
+
| -------------- | ------------------- | ------------------------------------------------------------- |
|
|
54
|
+
| `ROUTE` | String literal | URL route pattern, groups stripped (e.g., `'/products/[id]'`) |
|
|
55
|
+
| `SEGMENT_PATH` | String literal | Full tree path including groups and slots |
|
|
56
|
+
|
|
57
|
+
### tsconfig.json
|
|
58
|
+
|
|
59
|
+
Add `rootDirs` so TypeScript can resolve `$segment` imports:
|
|
60
|
+
|
|
61
|
+
```jsonc
|
|
62
|
+
{
|
|
63
|
+
"compilerOptions": {
|
|
64
|
+
"rootDirs": [".", ".timber/types"]
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Typed `<Link>`
|
|
70
|
+
|
|
71
|
+
`<Link>` validates `href` against the route map:
|
|
72
|
+
|
|
73
|
+
```tsx
|
|
74
|
+
import { Link } from '@timber-js/app/client';
|
|
75
|
+
|
|
76
|
+
<Link href="/about">About</Link> // ✓
|
|
77
|
+
<Link href="/nonexistent">Bad</Link> // ✗ TypeScript error
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
For dynamic routes, pass `segmentParams`:
|
|
81
|
+
|
|
82
|
+
```tsx
|
|
83
|
+
import { Link } from '@timber-js/app/client';
|
|
84
|
+
|
|
85
|
+
<Link href="/products/[id]" segmentParams={{ id: 42 }}>
|
|
86
|
+
Product
|
|
87
|
+
</Link>
|
|
88
|
+
// → <a href="/products/42">Product</a>
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Typed Segment Params
|
|
92
|
+
|
|
93
|
+
With `SEGMENT_PATH` from `$segment`, param types are narrowed from your `app/schema.ts` codecs:
|
|
94
|
+
|
|
95
|
+
```tsx
|
|
96
|
+
// app/products/[id]/page.tsx
|
|
97
|
+
import { SEGMENT_PATH } from './$segment';
|
|
98
|
+
import { getSegmentParams } from '@timber-js/app/server';
|
|
99
|
+
|
|
100
|
+
export default async function ProductPage() {
|
|
101
|
+
const { id } = getSegmentParams(SEGMENT_PATH);
|
|
102
|
+
// id: number (from z.coerce.number().int().positive() in schema.ts)
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Without `SEGMENT_PATH`, params are `Partial<AllSegmentParams>` — all optional.
|
|
107
|
+
|
|
108
|
+
## Typed Search Params
|
|
109
|
+
|
|
110
|
+
When a `params.ts` file exports `searchParams`, search params are fully typed:
|
|
111
|
+
|
|
112
|
+
```ts
|
|
113
|
+
// app/products/params.ts
|
|
114
|
+
import { defineSearchParams } from '@timber-js/app/search-params';
|
|
115
|
+
import { z } from 'zod/v4';
|
|
116
|
+
|
|
117
|
+
export const searchParams = defineSearchParams({
|
|
118
|
+
page: z.coerce.number().default(1),
|
|
119
|
+
sort: z.enum(['price', 'name']).default('price'),
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
// In page.tsx — searchParams.get() returns { page: number; sort: 'price' | 'name' }
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## Context Types
|
|
126
|
+
|
|
127
|
+
### `RouteContext`
|
|
128
|
+
|
|
129
|
+
Passed to API route handlers (`route.ts`):
|
|
130
|
+
|
|
131
|
+
```ts
|
|
132
|
+
export async function GET(ctx: RouteContext) {
|
|
133
|
+
ctx.req; // Request
|
|
134
|
+
ctx.headers; // Headers (response, writable)
|
|
135
|
+
}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Segment params and query params are read via `segmentParams.get()` / `searchParams.get()` from the colocated `params.ts` / `search-params.ts` — the same accessors pages use. For the raw query string, use `new URL(ctx.req.url).searchParams`.
|
|
139
|
+
|
|
140
|
+
### `MiddlewareContext`
|
|
141
|
+
|
|
142
|
+
Passed to `middleware.ts`:
|
|
143
|
+
|
|
144
|
+
```ts
|
|
145
|
+
export default async function middleware(ctx: MiddlewareContext) {
|
|
146
|
+
ctx.req; // Request
|
|
147
|
+
ctx.segmentParams; // Record<string, string | string[]>
|
|
148
|
+
ctx.headers; // Headers (response, writable)
|
|
149
|
+
ctx.requestHeaders; // Headers (request, injectable)
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### `AccessContext`
|
|
154
|
+
|
|
155
|
+
Empty interface — `access.ts` takes no arguments. Use ALS-backed imports:
|
|
156
|
+
|
|
157
|
+
```ts
|
|
158
|
+
import { SEGMENT_PATH } from './$segment';
|
|
159
|
+
import { getSegmentParams } from '@timber-js/app/server';
|
|
160
|
+
|
|
161
|
+
export default async function access() {
|
|
162
|
+
const params = getSegmentParams(SEGMENT_PATH);
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
## Augmenting Routes
|
|
167
|
+
|
|
168
|
+
The `Routes` interface is generated by the build system and written to `.timber/routes.d.ts`. It's module-augmented onto `@timber-js/app` — you don't need to import it manually.
|
|
169
|
+
|
|
170
|
+
Run `timber build` or `timber dev` to regenerate types after adding or renaming routes.
|