@timber-js/app 0.2.0-alpha.18 → 0.2.0-alpha.180
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-DQHyFClh.js +248 -0
- package/dist/_chunks/canonicalize-DQHyFClh.js.map +1 -0
- package/dist/_chunks/cli-schema-sync-D3naS3eH.js +688 -0
- package/dist/_chunks/cli-schema-sync-D3naS3eH.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-BtTlKviE.js +1002 -0
- package/dist/_chunks/walkers-BtTlKviE.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 +35 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +113 -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/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 +887 -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 +121 -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 +99 -14
- package/dist/client/router.d.ts.map +1 -1
- package/dist/client/rsc-fetch.d.ts +48 -15
- package/dist/client/rsc-fetch.d.ts.map +1 -1
- package/dist/client/segment-cache.d.ts +26 -7
- package/dist/client/segment-cache.d.ts.map +1 -1
- package/dist/client/segment-outlet.d.ts +57 -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 +31 -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 +25 -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 +9243 -14093
- 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/request-dep.d.ts +21 -0
- package/dist/plugins/request-dep.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 +12 -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 +3892 -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 +60 -11
- package/dist/server/metadata-routes.d.ts.map +1 -1
- package/dist/server/metadata.d.ts +8 -0
- package/dist/server/metadata.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 +99 -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/request-dep.d.ts +15 -0
- package/dist/server/request-dep.d.ts.map +1 -0
- package/dist/server/route-element-builder.d.ts +53 -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 +69 -37
- 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 +6 -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 +36 -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 +66 -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 +72 -9
- 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 +69 -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 +167 -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 +286 -0
- package/src/client/browser-entry/rsc-stream.ts +157 -0
- package/src/client/browser-entry/scroll.ts +50 -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 +345 -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 +565 -212
- package/src/client/rsc-fetch.ts +215 -34
- package/src/client/segment-cache.ts +91 -17
- package/src/client/segment-outlet.tsx +141 -0
- package/src/client/segment-update-context.ts +42 -0
- package/src/client/shallow-url.ts +22 -0
- package/src/client/slot-context.ts +50 -0
- package/src/client/slot-outlet.tsx +22 -0
- package/src/client/slot-provider.tsx +32 -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 +100 -18
- 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 +446 -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 +177 -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/request-dep.ts +458 -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 +111 -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 +19 -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 +205 -24
- package/src/server/metadata.ts +21 -0
- 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 +190 -0
- package/src/server/prebuilt/synthetic-store.ts +121 -0
- package/src/server/prebuilt-builder.ts +809 -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 +170 -337
- package/src/server/request-dep.ts +37 -0
- package/src/server/route-element-builder.ts +699 -295
- 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 +210 -85
- package/src/server/rsc-entry/index.ts +332 -332
- package/src/server/rsc-entry/render-route.ts +300 -0
- package/src/server/rsc-entry/revalidate-renderer.ts +349 -0
- package/src/server/rsc-entry/rsc-payload.ts +102 -42
- 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 +275 -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 +574 -250
- package/src/server/ssr-bridge-types.ts +124 -0
- package/src/server/ssr-entry.ts +206 -86
- package/src/server/ssr-render.ts +345 -86
- package/src/server/ssr-wrappers.tsx +141 -0
- package/src/server/state-tree-diff.ts +177 -30
- 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 +214 -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
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: 'AI Agent Instructions'
|
|
3
|
+
description: 'Structured reference for AI coding agents working with timber.js — key differences from Next.js, import paths, common mistakes, and reading order.'
|
|
4
|
+
slug: 'ai-agent-instructions'
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# AI Agent Instructions
|
|
8
|
+
|
|
9
|
+
This page is for AI coding agents (Claude Code, Cursor, Copilot, Codex, etc.) and developers who paste context into agent prompts. It is concise and structured for machine consumption — but useful as a quick reference for humans too.
|
|
10
|
+
|
|
11
|
+
## Fetching These Docs as Markdown
|
|
12
|
+
|
|
13
|
+
Any timber.js documentation page can be fetched as plain markdown by sending an `Accept: text/markdown` header:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
curl -H 'Accept: text/markdown' https://timberjs.com/docs/ai-agent-instructions
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
This returns the page content as `text/markdown` with a `203` status code, suitable for piping into agent context or saving to a file.
|
|
20
|
+
|
|
21
|
+
## How timber.js Docs Are Organized
|
|
22
|
+
|
|
23
|
+
| Location | Purpose | Audience |
|
|
24
|
+
| --- | --- | --- |
|
|
25
|
+
| `packages/website/content/docs/` | User-facing guides, tutorials, API reference | Developers building with timber |
|
|
26
|
+
| `design/` | Design decisions, architecture, internal specs | Contributors and agents implementing features |
|
|
27
|
+
| `CLAUDE.md` | Contributor workflow, commands, code style | Agents working on timber itself |
|
|
28
|
+
|
|
29
|
+
**Read the user-facing docs for building apps.** Read the design docs only when you need to understand _why_ something works the way it does or when contributing to timber itself.
|
|
30
|
+
|
|
31
|
+
## Reading Order by Task
|
|
32
|
+
|
|
33
|
+
**Starting a new project:**
|
|
34
|
+
1. [Introduction](/docs/introduction) — what timber is and its philosophy
|
|
35
|
+
2. [Quick Start](/docs/quick-start) — project setup
|
|
36
|
+
3. [Pages and Layouts](/docs/pages-and-layouts) — routing basics
|
|
37
|
+
4. [Configuration](/docs/configuration) — `timber.config.ts`
|
|
38
|
+
|
|
39
|
+
**Adding a feature:**
|
|
40
|
+
1. [API: @timber-js/app/server](/docs/api-server) — server exports
|
|
41
|
+
2. [API: @timber-js/app/client](/docs/api-client) — client exports
|
|
42
|
+
3. The relevant guide (caching, forms, middleware, etc.)
|
|
43
|
+
|
|
44
|
+
**Debugging:**
|
|
45
|
+
1. [Coming from Next.js](/docs/coming-from-nextjs) — if the code assumes Next.js patterns
|
|
46
|
+
2. [The Flush Point](/docs/the-flush-point) — if status codes or headers are wrong
|
|
47
|
+
3. [Error Handling](/docs/error-handling) — deny, error boundaries, status files
|
|
48
|
+
|
|
49
|
+
## Key Differences from Next.js
|
|
50
|
+
|
|
51
|
+
These are the things you will get wrong if you assume Next.js behavior.
|
|
52
|
+
|
|
53
|
+
| Concept | Next.js | timber.js |
|
|
54
|
+
| --- | --- | --- |
|
|
55
|
+
| Default component type | Client components need `'use client'` | **All components are server components** by default. Only add `'use client'` when you need browser APIs or hooks. |
|
|
56
|
+
| Fetch caching | `fetch()` is patched with implicit caching | `fetch()` is **never patched**. Use `cache.data()` from `@timber-js/app/cache` explicitly. |
|
|
57
|
+
| ISR | `revalidate` option | **Does not exist.** Use `cache.data()` with TTL and tags. |
|
|
58
|
+
| `loading.tsx` | Convention for auto-Suspense | **Does not exist.** Use `<Suspense>` explicitly. |
|
|
59
|
+
| Middleware | Single global `middleware.ts` with matchers | Per-segment `middleware.ts` files + global `proxy.ts`. One-arg signature: `middleware(ctx)`. |
|
|
60
|
+
| `notFound()` | `notFound()` from `next/navigation` | `deny(404)` from `@timber-js/app/server`. Sends a real HTTP 404. |
|
|
61
|
+
| `redirect()` | `redirect()` from `next/navigation` | `redirect()` from `@timber-js/app/server`. Same concept, different import. |
|
|
62
|
+
| Search params | Untyped `useSearchParams()` | Typed `defineSearchParams()` with Zod schemas in `params.ts`. |
|
|
63
|
+
| Auth pattern | In middleware or components | `access.ts` per segment with slot degradation. |
|
|
64
|
+
| Forms | `useFormState` / `useFormStatus` | `createActionClient` + `useActionState` returns a 4-tuple. Forms work without JS. |
|
|
65
|
+
|
|
66
|
+
## Import Map
|
|
67
|
+
|
|
68
|
+
| What you need | Import from |
|
|
69
|
+
| --- | --- |
|
|
70
|
+
| `deny`, `redirect`, `getHeaders`, `getCookieJar`, `createActionClient` | `@timber-js/app/server` |
|
|
71
|
+
| `Link`, `useRouter`, `usePathname`, `useActionState` | `@timber-js/app/client` |
|
|
72
|
+
| `cache`, `CacheHandler` | `@timber-js/app/cache` |
|
|
73
|
+
| `defineSearchParams` | `@timber-js/app/search-params` |
|
|
74
|
+
| `defineSchema`, `defineSegmentParams` | `@timber-js/app/params` |
|
|
75
|
+
| Content collection data | `content-collections` |
|
|
76
|
+
| `Metadata` type | `@timber-js/app/server` |
|
|
77
|
+
|
|
78
|
+
There is **no** `@timber-js/app` default import. Always use the subpath exports above.
|
|
79
|
+
|
|
80
|
+
## Project Structure
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
app/ # Route tree — file-system routing
|
|
84
|
+
proxy.ts # Global request handler (like global middleware)
|
|
85
|
+
layout.tsx # Root layout
|
|
86
|
+
page.tsx # Home page
|
|
87
|
+
[segment]/
|
|
88
|
+
page.tsx # Dynamic route
|
|
89
|
+
middleware.ts # Per-segment middleware
|
|
90
|
+
access.ts # Per-segment authorization
|
|
91
|
+
denied.tsx # Rendered when access.ts denies
|
|
92
|
+
error.tsx # Error boundary for this segment
|
|
93
|
+
params.ts # Search param definitions
|
|
94
|
+
schema.ts # Segment param schemas (from @timber-js/app/params)
|
|
95
|
+
content/ # Content collections (outside route tree)
|
|
96
|
+
timber.config.ts # Framework configuration
|
|
97
|
+
mdx-components.tsx # Custom MDX component mappings (optional)
|
|
98
|
+
content-collections.ts # Collection definitions (optional)
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Common Mistakes
|
|
102
|
+
|
|
103
|
+
1. **Importing from `next/*`** — there is no `next` package. Use `@timber-js/app/server` and `@timber-js/app/client`. Exception: `next/navigation`'s `redirect()` and `notFound()` are shimmed for compatibility.
|
|
104
|
+
|
|
105
|
+
2. **Adding `'use client'` to everything** — components are server components by default. Only add `'use client'` when you need browser APIs, event handlers, or React hooks like `useState`/`useEffect`.
|
|
106
|
+
|
|
107
|
+
3. **Using `fetch()` and expecting caching** — timber never patches `fetch`. Wrap data-fetching functions in `cache.data()` from `@timber-js/app/cache` when you want caching.
|
|
108
|
+
|
|
109
|
+
4. **Creating `loading.tsx` files** — this convention does not exist. Use `<Suspense>` with an explicit fallback where you want streaming.
|
|
110
|
+
|
|
111
|
+
5. **Using ISR patterns** (`revalidate`, `unstable_cache`) — ISR does not exist. Use `cache.data()` with `{ ttl: seconds, tags: ['tag'] }`.
|
|
112
|
+
|
|
113
|
+
6. **Calling `notFound()`** — use `deny(404)` from `@timber-js/app/server` instead. It sends a real HTTP 404 status code.
|
|
114
|
+
|
|
115
|
+
7. **Putting all middleware in one file** — middleware is per-segment. Place `middleware.ts` at the route level that matches the concern. Use `proxy.ts` for global concerns.
|
|
116
|
+
|
|
117
|
+
8. **Assuming `useSearchParams()` exists** — use `defineSearchParams()` in a `params.ts` file with Zod schemas, then access via `.get()` (server) or `.useQueryStates()` (client).
|
|
118
|
+
|
|
119
|
+
## Quick Patterns
|
|
120
|
+
|
|
121
|
+
### Data fetching with caching
|
|
122
|
+
|
|
123
|
+
```tsx
|
|
124
|
+
import { cache } from '@timber-js/app/cache';
|
|
125
|
+
|
|
126
|
+
const getProducts = cache.data(
|
|
127
|
+
async () => db.products.findMany(),
|
|
128
|
+
{ ttl: 300, tags: ['products'] }
|
|
129
|
+
);
|
|
130
|
+
|
|
131
|
+
export default async function Page() {
|
|
132
|
+
const products = await getProducts();
|
|
133
|
+
return <ProductList products={products} />;
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### 404 handling
|
|
138
|
+
|
|
139
|
+
```tsx
|
|
140
|
+
import { deny } from '@timber-js/app/server';
|
|
141
|
+
|
|
142
|
+
export default async function Page({ params }: { params: Promise<{ id: string }> }) {
|
|
143
|
+
const { id } = await params;
|
|
144
|
+
const item = await getItem(id);
|
|
145
|
+
if (!item) deny(404);
|
|
146
|
+
return <Item item={item} />;
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Per-segment middleware
|
|
151
|
+
|
|
152
|
+
```ts title="app/dashboard/middleware.ts"
|
|
153
|
+
import type { MiddlewareContext } from '@timber-js/app/server';
|
|
154
|
+
|
|
155
|
+
export default async function middleware(ctx: MiddlewareContext) {
|
|
156
|
+
ctx.headers.set('X-Dashboard', 'true');
|
|
157
|
+
}
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### Access control
|
|
161
|
+
|
|
162
|
+
```ts title="app/(auth)/access.ts"
|
|
163
|
+
import { redirect, getCookieJar } from '@timber-js/app/server';
|
|
164
|
+
|
|
165
|
+
export default async function access() {
|
|
166
|
+
const session = getSession(getCookieJar());
|
|
167
|
+
if (!session) redirect('/login');
|
|
168
|
+
}
|
|
169
|
+
```
|
package/llms.txt
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# @timber-js/app
|
|
2
|
+
|
|
3
|
+
> Vite-native React Server Components framework built for Servers and Serverless Platforms — correct HTTP semantics, real status codes, pages that work without JavaScript.
|
|
4
|
+
|
|
5
|
+
timber.js is a React framework built on Vite and React Server Components. It uses file-system routing (app/ directory), server components by default, and produces real HTTP status codes. It deploys to Cloudflare Workers, Node.js, Vercel, Netlify, and more via adapters.
|
|
6
|
+
|
|
7
|
+
It is inspired by, but _not_ next.js. Do not assume next.js features work in timber, though the routing is similar, much of the rest diverges.
|
|
8
|
+
|
|
9
|
+
## Docs
|
|
10
|
+
|
|
11
|
+
Documentation ships with this package in the `docs/` directory. All files are MDX.
|
|
12
|
+
|
|
13
|
+
### Learn (core concepts, read in order)
|
|
14
|
+
|
|
15
|
+
- [Introduction](docs/learn/00-introduction.mdx)
|
|
16
|
+
- [Quick Start](docs/learn/01-quick-start.mdx)
|
|
17
|
+
- [Pages and Layouts](docs/learn/02-pages-and-layouts.mdx)
|
|
18
|
+
- [Fetching Data](docs/learn/03-fetching-data.mdx)
|
|
19
|
+
- [Access Control](docs/learn/03b-access-control.mdx)
|
|
20
|
+
- [Loading States](docs/learn/04-loading-states.mdx)
|
|
21
|
+
- [The Flush Point](docs/learn/04b-the-flush-point.mdx)
|
|
22
|
+
- [Typed Params](docs/learn/05-typed-params.mdx)
|
|
23
|
+
- [Forms and Actions](docs/learn/06-forms-and-actions.mdx)
|
|
24
|
+
- [Streaming](docs/learn/08-streaming.mdx)
|
|
25
|
+
- [Caching](docs/learn/09-caching.mdx)
|
|
26
|
+
- [Middleware](docs/learn/10-middleware.mdx)
|
|
27
|
+
- [Error Handling](docs/learn/11-error-handling.mdx)
|
|
28
|
+
- [Client Navigation](docs/learn/12-client-navigation.mdx)
|
|
29
|
+
- [Configuration](docs/learn/13-configuration.mdx)
|
|
30
|
+
- [Deploying](docs/learn/14-deploying.mdx)
|
|
31
|
+
|
|
32
|
+
### More (advanced topics)
|
|
33
|
+
|
|
34
|
+
- [Advanced Routing](docs/more/01-advanced-routing.mdx)
|
|
35
|
+
- [Advanced Forms](docs/more/02-advanced-forms.mdx)
|
|
36
|
+
- [Coming from Next.js](docs/more/03-coming-from-nextjs.mdx)
|
|
37
|
+
- [Metadata and Fonts](docs/more/04-metadata-and-fonts.mdx)
|
|
38
|
+
- [MDX](docs/more/04b-mdx.mdx)
|
|
39
|
+
- [Content Collections](docs/more/05-content-collections.mdx)
|
|
40
|
+
- [Instrumentation & Tracing](docs/more/06-instrumentation.mdx)
|
|
41
|
+
- [Security](docs/more/07-security.mdx)
|
|
42
|
+
|
|
43
|
+
### API Reference
|
|
44
|
+
|
|
45
|
+
- [@timber-js/app/server](docs/api/30-api-server.mdx)
|
|
46
|
+
- [@timber-js/app/client](docs/api/31-api-client.mdx)
|
|
47
|
+
- [@timber-js/app/cache](docs/api/32-api-cache.mdx)
|
|
48
|
+
- [Search & Segment Params](docs/api/33-api-search-params.mdx)
|
|
49
|
+
- [timber.config.ts](docs/api/34-api-config.mdx)
|
|
50
|
+
- [TypeScript](docs/api/35-api-typescript.mdx)
|
|
51
|
+
- [CLI](docs/api/36-cli.mdx)
|
|
52
|
+
|
|
53
|
+
## AI Agent Skill
|
|
54
|
+
|
|
55
|
+
A Claude Code skill is included at `agent-skill.md`. Load it for guidance on building timber.js applications.
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@timber-js/app",
|
|
3
|
-
"version": "0.2.0-alpha.
|
|
4
|
-
"description": "Vite-native React framework for
|
|
3
|
+
"version": "0.2.0-alpha.180",
|
|
4
|
+
"description": "Vite-native React framework built for Servers and Serverless Platforms — correct HTTP semantics, real status codes, pages that work without JavaScript",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cloudflare-workers",
|
|
7
7
|
"framework",
|
|
@@ -26,12 +26,27 @@
|
|
|
26
26
|
"dist",
|
|
27
27
|
"src",
|
|
28
28
|
"bin",
|
|
29
|
+
"docs",
|
|
30
|
+
"agent-skill.md",
|
|
31
|
+
"llms.txt",
|
|
29
32
|
"README.md",
|
|
30
33
|
"LICENSE"
|
|
31
34
|
],
|
|
32
35
|
"type": "module",
|
|
33
36
|
"imports": {
|
|
34
|
-
"
|
|
37
|
+
"#server-internal": {
|
|
38
|
+
"types": "./dist/server/internal.d.ts",
|
|
39
|
+
"default": "./dist/server/internal.js"
|
|
40
|
+
},
|
|
41
|
+
"#client-internal": {
|
|
42
|
+
"types": "./dist/client/internal.d.ts",
|
|
43
|
+
"default": "./dist/client/internal.js"
|
|
44
|
+
},
|
|
45
|
+
"#routing": {
|
|
46
|
+
"types": "./dist/routing/index.d.ts",
|
|
47
|
+
"default": "./dist/routing/index.js"
|
|
48
|
+
},
|
|
49
|
+
"#server-only-guard": "./src/server/server-only-guard-noop.js"
|
|
35
50
|
},
|
|
36
51
|
"exports": {
|
|
37
52
|
".": {
|
|
@@ -46,13 +61,49 @@
|
|
|
46
61
|
"types": "./dist/client/index.d.ts",
|
|
47
62
|
"import": "./dist/client/index.js"
|
|
48
63
|
},
|
|
64
|
+
"./client/internal": {
|
|
65
|
+
"types": "./dist/client/internal.d.ts",
|
|
66
|
+
"import": "./dist/client/internal.js"
|
|
67
|
+
},
|
|
49
68
|
"./cache": {
|
|
50
69
|
"types": "./dist/cache/index.d.ts",
|
|
51
70
|
"import": "./dist/cache/index.js"
|
|
52
71
|
},
|
|
53
|
-
"./
|
|
54
|
-
"types": "./dist/
|
|
55
|
-
"import": "./dist/
|
|
72
|
+
"./cache/stores/memory": {
|
|
73
|
+
"types": "./dist/cache/stores/memory.d.ts",
|
|
74
|
+
"import": "./dist/cache/stores/memory.js"
|
|
75
|
+
},
|
|
76
|
+
"./cache/stores/redis": {
|
|
77
|
+
"types": "./dist/cache/stores/redis.d.ts",
|
|
78
|
+
"import": "./dist/cache/stores/redis.js"
|
|
79
|
+
},
|
|
80
|
+
"./cache/stores/cloudflare-kv": {
|
|
81
|
+
"types": "./dist/cache/stores/cloudflare-kv.d.ts",
|
|
82
|
+
"import": "./dist/cache/stores/cloudflare-kv.js"
|
|
83
|
+
},
|
|
84
|
+
"./cache/stores/vercel": {
|
|
85
|
+
"types": "./dist/cache/stores/vercel.d.ts",
|
|
86
|
+
"import": "./dist/cache/stores/vercel.js"
|
|
87
|
+
},
|
|
88
|
+
"./cdn": {
|
|
89
|
+
"types": "./dist/cdn/index.d.ts",
|
|
90
|
+
"import": "./dist/cdn/index.js"
|
|
91
|
+
},
|
|
92
|
+
"./cdn/cloudflare": {
|
|
93
|
+
"types": "./dist/cdn/cloudflare-purge.d.ts",
|
|
94
|
+
"import": "./dist/cdn/cloudflare-purge.js"
|
|
95
|
+
},
|
|
96
|
+
"./cdn/cloudflare-workers": {
|
|
97
|
+
"types": "./dist/cdn/workers-cache-purge.d.ts",
|
|
98
|
+
"import": "./dist/cdn/workers-cache-purge.js"
|
|
99
|
+
},
|
|
100
|
+
"./cdn/fastly": {
|
|
101
|
+
"types": "./dist/cdn/fastly-purge.d.ts",
|
|
102
|
+
"import": "./dist/cdn/fastly-purge.js"
|
|
103
|
+
},
|
|
104
|
+
"./codec": {
|
|
105
|
+
"types": "./dist/codec.d.ts",
|
|
106
|
+
"import": "./dist/codec.js"
|
|
56
107
|
},
|
|
57
108
|
"./cookies": {
|
|
58
109
|
"types": "./dist/cookies/index.d.ts",
|
|
@@ -62,45 +113,65 @@
|
|
|
62
113
|
"types": "./dist/search-params/index.d.ts",
|
|
63
114
|
"import": "./dist/search-params/index.js"
|
|
64
115
|
},
|
|
65
|
-
"./
|
|
66
|
-
"types": "./dist/
|
|
67
|
-
"import": "./dist/
|
|
116
|
+
"./segment-params": {
|
|
117
|
+
"types": "./dist/segment-params/index.d.ts",
|
|
118
|
+
"import": "./dist/segment-params/index.js"
|
|
119
|
+
},
|
|
120
|
+
"./params": {
|
|
121
|
+
"types": "./dist/params/index.d.ts",
|
|
122
|
+
"import": "./dist/params/index.js"
|
|
68
123
|
},
|
|
69
124
|
"./adapters/cloudflare": {
|
|
70
125
|
"types": "./dist/adapters/cloudflare.d.ts",
|
|
71
126
|
"import": "./dist/adapters/cloudflare.js"
|
|
72
127
|
},
|
|
128
|
+
"./adapters/cloudflare/cache": {
|
|
129
|
+
"types": "./dist/adapters/cloudflare-kv-cache.d.ts",
|
|
130
|
+
"import": "./dist/adapters/cloudflare-kv-cache.js"
|
|
131
|
+
},
|
|
132
|
+
"./adapters/cloudflare/dev": {
|
|
133
|
+
"types": "./dist/adapters/cloudflare-dev.d.ts",
|
|
134
|
+
"import": "./dist/adapters/cloudflare-dev.js"
|
|
135
|
+
},
|
|
73
136
|
"./adapters/nitro": {
|
|
74
137
|
"types": "./dist/adapters/nitro.d.ts",
|
|
75
138
|
"import": "./dist/adapters/nitro.js"
|
|
76
139
|
},
|
|
140
|
+
"./fonts/google": {
|
|
141
|
+
"types": "./dist/shims/font-google.d.ts",
|
|
142
|
+
"import": "./dist/shims/font-google.js"
|
|
143
|
+
},
|
|
144
|
+
"./fonts/local": {
|
|
145
|
+
"types": "./dist/shims/font-local.d.ts",
|
|
146
|
+
"import": "./dist/shims/font-local.js"
|
|
147
|
+
},
|
|
77
148
|
"./package.json": "./package.json"
|
|
78
149
|
},
|
|
79
150
|
"publishConfig": {
|
|
80
151
|
"access": "public"
|
|
81
152
|
},
|
|
82
|
-
"scripts": {
|
|
83
|
-
"build": "vite build --config vite.lib.config.ts && tsc --emitDeclarationOnly --project tsconfig.json --outDir dist",
|
|
84
|
-
"typecheck": "tsgo --noEmit",
|
|
85
|
-
"prepublishOnly": "pnpm run build"
|
|
86
|
-
},
|
|
87
153
|
"dependencies": {
|
|
88
|
-
"@opentelemetry/api": "^1.9.
|
|
89
|
-
"@opentelemetry/context-async-hooks": "^2.
|
|
90
|
-
"@opentelemetry/sdk-trace-base": "^2.
|
|
91
|
-
"
|
|
154
|
+
"@opentelemetry/api": "^1.9.1",
|
|
155
|
+
"@opentelemetry/context-async-hooks": "^2.9.0",
|
|
156
|
+
"@opentelemetry/sdk-trace-base": "^2.9.0",
|
|
157
|
+
"cookie": "^1.1.1",
|
|
158
|
+
"jsonc-parser": "^3.3.1",
|
|
159
|
+
"magic-string": "^0.30.21",
|
|
160
|
+
"nitro": "3.0.260610-beta",
|
|
161
|
+
"srvx": "^0.11.22"
|
|
92
162
|
},
|
|
93
163
|
"peerDependencies": {
|
|
94
|
-
"@content-collections/core": "^0.14.0",
|
|
164
|
+
"@content-collections/core": "^0.14.0 || ^0.15.0",
|
|
95
165
|
"@content-collections/mdx": "^0.2.0",
|
|
96
|
-
"@content-collections/vite": "^0.2.0",
|
|
166
|
+
"@content-collections/vite": "^0.2.0 || ^0.3.0",
|
|
97
167
|
"@mdx-js/rollup": "^3.0.0",
|
|
98
168
|
"@vitejs/plugin-react": "^6.0.0",
|
|
99
|
-
"@vitejs/plugin-rsc": ">=0.5.
|
|
169
|
+
"@vitejs/plugin-rsc": ">=0.5.27",
|
|
100
170
|
"nuqs": "^2.0.0",
|
|
101
|
-
"react": "
|
|
102
|
-
"react-dom": "
|
|
103
|
-
"vite": "^8.0
|
|
171
|
+
"react": "19.2.7",
|
|
172
|
+
"react-dom": "19.2.7",
|
|
173
|
+
"vite": "^8.1.0",
|
|
174
|
+
"wrangler": "^4.0.0",
|
|
104
175
|
"zod": "^3.22.0 || ^4.0.0"
|
|
105
176
|
},
|
|
106
177
|
"peerDependenciesMeta": {
|
|
@@ -116,11 +187,19 @@
|
|
|
116
187
|
"@mdx-js/rollup": {
|
|
117
188
|
"optional": true
|
|
118
189
|
},
|
|
190
|
+
"wrangler": {
|
|
191
|
+
"optional": true
|
|
192
|
+
},
|
|
119
193
|
"zod": {
|
|
120
194
|
"optional": true
|
|
121
195
|
}
|
|
122
196
|
},
|
|
123
197
|
"engines": {
|
|
124
|
-
"node": ">=
|
|
198
|
+
"node": ">=22.18.0"
|
|
199
|
+
},
|
|
200
|
+
"scripts": {
|
|
201
|
+
"copy-docs": "node scripts/copy-docs.js",
|
|
202
|
+
"build": "vite build --config vite.lib.config.ts && tsc --emitDeclarationOnly --project tsconfig.json --outDir dist && pnpm run copy-docs",
|
|
203
|
+
"typecheck": "tsgo --noEmit"
|
|
125
204
|
}
|
|
126
|
-
}
|
|
205
|
+
}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
// Shared build-output helper for adapter buildOutput() methods.
|
|
2
|
+
//
|
|
3
|
+
// Steps 1–5 of every adapter's buildOutput are platform-agnostic:
|
|
4
|
+
// 1. Copy client assets to the public/static directory
|
|
5
|
+
// 2. Write _headers file for static asset cache control
|
|
6
|
+
// 3. Copy RSC + SSR server bundles
|
|
7
|
+
// 4. Write manifest-init module (if present)
|
|
8
|
+
//
|
|
9
|
+
// Only the final steps (entry codegen, platform config) vary per adapter.
|
|
10
|
+
//
|
|
11
|
+
// IMPORTANT: This module must remain a leaf — no imports from ../server/,
|
|
12
|
+
// ../client/, or Vite-dependent code. See adapters/shared.ts header.
|
|
13
|
+
|
|
14
|
+
import { writeFile, mkdir, cp, readdir, readFile } from 'node:fs/promises';
|
|
15
|
+
import { join, basename, relative } from 'node:path';
|
|
16
|
+
import { generateHeadersFile } from './shared.js';
|
|
17
|
+
import type { TimberConfig } from './types';
|
|
18
|
+
|
|
19
|
+
/** Options for the shared build output steps. */
|
|
20
|
+
export interface BuildOutputBaseOptions {
|
|
21
|
+
/** Resolved timber config. */
|
|
22
|
+
config: TimberConfig;
|
|
23
|
+
/** Root build directory (e.g. `.timber/build`). */
|
|
24
|
+
buildDir: string;
|
|
25
|
+
/** Adapter-specific output directory (e.g. `.timber/build/nitro`). */
|
|
26
|
+
outDir: string;
|
|
27
|
+
/**
|
|
28
|
+
* Name of the public/static directory within outDir.
|
|
29
|
+
* Nitro uses 'public', Cloudflare uses 'static'.
|
|
30
|
+
*/
|
|
31
|
+
publicDirName: string;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Run the platform-agnostic build output steps shared by all adapters:
|
|
36
|
+
*
|
|
37
|
+
* 1. Create the output directory
|
|
38
|
+
* 2. Copy client assets to the public/static directory
|
|
39
|
+
* 3. Write the `_headers` file for static asset cache control
|
|
40
|
+
* 4. Copy RSC and SSR server bundles into the output directory
|
|
41
|
+
* 5. Write the manifest-init module if present
|
|
42
|
+
*
|
|
43
|
+
* Returns the resolved public directory path for further adapter-specific use.
|
|
44
|
+
*/
|
|
45
|
+
export async function runSharedBuildSteps(opts: BuildOutputBaseOptions): Promise<string> {
|
|
46
|
+
const { config, buildDir, outDir, publicDirName } = opts;
|
|
47
|
+
|
|
48
|
+
// 1. Create the output directory.
|
|
49
|
+
await mkdir(outDir, { recursive: true });
|
|
50
|
+
|
|
51
|
+
// 2. Copy client assets to public/static directory.
|
|
52
|
+
// When client JavaScript is disabled, skip .js files — only CSS,
|
|
53
|
+
// fonts, images, and other static assets are needed.
|
|
54
|
+
const clientDir = join(buildDir, 'client');
|
|
55
|
+
const publicDir = join(outDir, publicDirName);
|
|
56
|
+
await mkdir(publicDir, { recursive: true });
|
|
57
|
+
// Find WASM files that are referenced by client JS (legitimate client WASM)
|
|
58
|
+
// vs orphaned server-only WASM (e.g. @takumi-rs for OG image generation).
|
|
59
|
+
// Only strip orphaned WASM to avoid breaking client-side WASM usage.
|
|
60
|
+
const referencedWasm = await findReferencedWasm(clientDir);
|
|
61
|
+
|
|
62
|
+
await cp(clientDir, publicDir, {
|
|
63
|
+
recursive: true,
|
|
64
|
+
filter: (src: string) => {
|
|
65
|
+
if (src.endsWith('.wasm') && !referencedWasm.has(basename(src))) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
if (config.clientJavascriptDisabled && src.endsWith('.js')) return false;
|
|
69
|
+
return true;
|
|
70
|
+
},
|
|
71
|
+
}).catch((e: NodeJS.ErrnoException) => {
|
|
72
|
+
// Client dir may not exist when client JavaScript is disabled
|
|
73
|
+
if (e.code !== 'ENOENT') throw e;
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
// 3. Write _headers file for static asset cache control.
|
|
77
|
+
// Scan for unhashed files so they get per-file Cache-Control rules in the
|
|
78
|
+
// _headers file. On platforms like Cloudflare Workers Static Assets, the
|
|
79
|
+
// worker never sees static file requests — _headers is the only mechanism.
|
|
80
|
+
const unhashedPaths = await findUnhashedStaticFiles(publicDir);
|
|
81
|
+
await writeFile(join(publicDir, '_headers'), generateHeadersFile(unhashedPaths));
|
|
82
|
+
|
|
83
|
+
// 4. Copy RSC + SSR server bundles into the output directory.
|
|
84
|
+
await cp(join(buildDir, 'rsc'), join(outDir, 'rsc'), { recursive: true });
|
|
85
|
+
await cp(join(buildDir, 'ssr'), join(outDir, 'ssr'), { recursive: true }).catch(
|
|
86
|
+
(e: NodeJS.ErrnoException) => {
|
|
87
|
+
// SSR dir may not exist for static-only builds
|
|
88
|
+
if (e.code !== 'ENOENT') throw e;
|
|
89
|
+
}
|
|
90
|
+
);
|
|
91
|
+
|
|
92
|
+
// 4b. Copy prebuilt/ flight payloads if present (cache.component artifacts).
|
|
93
|
+
// These are produced by the post-build capture pass (design/44) and read
|
|
94
|
+
// at request time via the adapter's PrebuiltPayloadSource.
|
|
95
|
+
await cp(join(buildDir, 'prebuilt'), join(outDir, 'prebuilt'), { recursive: true }).catch(
|
|
96
|
+
(e: NodeJS.ErrnoException) => {
|
|
97
|
+
// No prebuilt dir when the app has no cache.component calls
|
|
98
|
+
if (e.code !== 'ENOENT') throw e;
|
|
99
|
+
}
|
|
100
|
+
);
|
|
101
|
+
|
|
102
|
+
// 5. Write manifest-init module if present.
|
|
103
|
+
if (config.manifestInit) {
|
|
104
|
+
await writeFile(join(outDir, '_timber-manifest-init.js'), config.manifestInit);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
return publicDir;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Find unhashed static files in the public directory that need per-file
|
|
112
|
+
* Cache-Control rules in the `_headers` file.
|
|
113
|
+
*
|
|
114
|
+
* Excludes:
|
|
115
|
+
* - Files under `assets/` and `_timber/` (covered by wildcard rules)
|
|
116
|
+
* - Underscore-prefixed files (`_headers`, `_worker.js`, etc.)
|
|
117
|
+
*
|
|
118
|
+
* @internal Exported for testing.
|
|
119
|
+
*/
|
|
120
|
+
// Well-known metadata files that should be prioritized when capping
|
|
121
|
+
// _headers rules, so they're never dropped in favor of less important files.
|
|
122
|
+
const PRIORITY_FILES = new Set([
|
|
123
|
+
'/favicon.ico',
|
|
124
|
+
'/robots.txt',
|
|
125
|
+
'/sitemap.xml',
|
|
126
|
+
'/manifest.json',
|
|
127
|
+
'/manifest.webmanifest',
|
|
128
|
+
'/apple-touch-icon.png',
|
|
129
|
+
]);
|
|
130
|
+
|
|
131
|
+
export async function findUnhashedStaticFiles(publicDir: string): Promise<string[]> {
|
|
132
|
+
let files: string[];
|
|
133
|
+
try {
|
|
134
|
+
files = await collectFiles(publicDir);
|
|
135
|
+
} catch {
|
|
136
|
+
return [];
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
const priority: string[] = [];
|
|
140
|
+
const rest: string[] = [];
|
|
141
|
+
for (const file of files) {
|
|
142
|
+
const rel = relative(publicDir, file).replace(/\\/g, '/');
|
|
143
|
+
if (rel.startsWith('assets/') || rel.startsWith('_timber/')) continue;
|
|
144
|
+
if (basename(rel).startsWith('_')) continue;
|
|
145
|
+
const urlPath = '/' + rel;
|
|
146
|
+
if (PRIORITY_FILES.has(urlPath)) {
|
|
147
|
+
priority.push(urlPath);
|
|
148
|
+
} else {
|
|
149
|
+
rest.push(urlPath);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
return [...priority.sort(), ...rest.sort()];
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Scan client JS files for references to .wasm filenames.
|
|
158
|
+
* Returns the set of WASM basenames that are actually imported/referenced
|
|
159
|
+
* by client code and must be preserved in the static output.
|
|
160
|
+
*/
|
|
161
|
+
async function findReferencedWasm(clientDir: string): Promise<Set<string>> {
|
|
162
|
+
const referenced = new Set<string>();
|
|
163
|
+
|
|
164
|
+
let files: string[];
|
|
165
|
+
try {
|
|
166
|
+
files = await collectFiles(clientDir);
|
|
167
|
+
} catch {
|
|
168
|
+
return referenced;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
const jsFiles = files.filter((f) => f.endsWith('.js'));
|
|
172
|
+
const wasmFiles = files.filter((f) => f.endsWith('.wasm')).map((f) => basename(f));
|
|
173
|
+
if (wasmFiles.length === 0) return referenced;
|
|
174
|
+
|
|
175
|
+
for (const jsFile of jsFiles) {
|
|
176
|
+
const content = await readFile(jsFile, 'utf-8');
|
|
177
|
+
for (const wasmName of wasmFiles) {
|
|
178
|
+
if (content.includes(wasmName)) {
|
|
179
|
+
referenced.add(wasmName);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
return referenced;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
async function collectFiles(dir: string): Promise<string[]> {
|
|
188
|
+
const result: string[] = [];
|
|
189
|
+
const entries = await readdir(dir, { withFileTypes: true });
|
|
190
|
+
for (const entry of entries) {
|
|
191
|
+
const fullPath = join(dir, entry.name);
|
|
192
|
+
if (entry.isDirectory()) {
|
|
193
|
+
result.push(...(await collectFiles(fullPath)));
|
|
194
|
+
} else {
|
|
195
|
+
result.push(fullPath);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return result;
|
|
199
|
+
}
|