@timber-js/app 0.2.0-alpha.15 → 0.2.0-alpha.150
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/dist/_chunks/actions-a0RczDnB.js +1106 -0
- package/dist/_chunks/actions-a0RczDnB.js.map +1 -0
- package/dist/_chunks/build-output-helper-B20ZuTSA.js +102 -0
- package/dist/_chunks/build-output-helper-B20ZuTSA.js.map +1 -0
- package/dist/_chunks/cache-api-Co-yI-gP.js +424 -0
- package/dist/_chunks/cache-api-Co-yI-gP.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-DJDdyEae.js +629 -0
- package/dist/_chunks/cli-schema-sync-DJDdyEae.js.map +1 -0
- package/dist/_chunks/cli-schema-sync-D_IhHEUW.js +2 -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/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-FiA_rToW.js +141 -0
- package/dist/_chunks/href-validation-FiA_rToW.js.map +1 -0
- package/dist/_chunks/logger-CM0clugc.js +645 -0
- package/dist/_chunks/logger-CM0clugc.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-DurqFBuY.js +2 -0
- package/dist/_chunks/plugin-context-GfDWsdd2.js +268 -0
- package/dist/_chunks/plugin-context-GfDWsdd2.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/{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/validation-taUkvA4Q.js +113 -0
- package/dist/_chunks/validation-taUkvA4Q.js.map +1 -0
- package/dist/_chunks/walkers-DvWDj453.js +790 -0
- package/dist/_chunks/walkers-DvWDj453.js.map +1 -0
- package/dist/adapters/build-output-helper.d.ts +28 -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 +142 -20
- package/dist/adapters/cloudflare.d.ts.map +1 -1
- package/dist/adapters/cloudflare.js +150 -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 +17 -3
- package/dist/adapters/nitro.d.ts.map +1 -1
- package/dist/adapters/nitro.js +146 -147
- package/dist/adapters/nitro.js.map +1 -1
- package/dist/adapters/shared.d.ts +16 -0
- package/dist/adapters/shared.d.ts.map +1 -0
- package/dist/cache/cache-api.d.ts +24 -0
- package/dist/cache/cache-api.d.ts.map +1 -0
- package/dist/cache/handler-store.d.ts +31 -0
- package/dist/cache/handler-store.d.ts.map +1 -0
- package/dist/cache/index.d.ts +25 -7
- package/dist/cache/index.d.ts.map +1 -1
- package/dist/cache/index.js +100 -240
- package/dist/cache/index.js.map +1 -1
- 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 +85 -8
- package/dist/cache/redis-handler.d.ts.map +1 -1
- package/dist/cache/singleflight.d.ts +18 -1
- 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/timber-cache.d.ts +20 -10
- package/dist/cache/timber-cache.d.ts.map +1 -1
- package/dist/cli-schema-sync.d.ts +59 -0
- package/dist/cli-schema-sync.d.ts.map +1 -0
- package/dist/cli.d.ts +26 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +70 -33
- package/dist/cli.js.map +1 -1
- package/dist/client/browser-dev.d.ts +34 -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/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 -3
- 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 +183 -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 +900 -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-types.d.ts +90 -0
- package/dist/client/navigation-api-types.d.ts.map +1 -0
- package/dist/client/navigation-api.d.ts +122 -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 +86 -10
- package/dist/client/router.d.ts.map +1 -1
- package/dist/client/rsc-fetch.d.ts +46 -3
- package/dist/client/rsc-fetch.d.ts.map +1 -1
- package/dist/client/segment-cache.d.ts +3 -1
- 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 +294 -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 +249 -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 +84 -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 +78 -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 +6432 -13423
- 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 +137 -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 +9 -7
- package/dist/plugins/build-report.d.ts.map +1 -1
- package/dist/plugins/cache.d.ts +73 -0
- package/dist/plugins/cache.d.ts.map +1 -0
- package/dist/plugins/client-chunks.d.ts +39 -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/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/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 +9 -30
- package/dist/server/actions.d.ts.map +1 -1
- package/dist/server/als-registry.d.ts +70 -11
- package/dist/server/als-registry.d.ts.map +1 -1
- package/dist/server/asset-headers.d.ts +1 -15
- 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 +51 -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 +29 -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 +81 -41
- package/dist/server/html-injectors.d.ts.map +1 -1
- package/dist/server/index.d.ts +10 -46
- 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 +44 -0
- package/dist/server/internal.d.ts.map +1 -0
- package/dist/server/internal.js +3015 -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/primitives.d.ts +75 -31
- 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 +30 -18
- 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 -23
- package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
- package/dist/server/rsc-entry/index.d.ts +19 -8
- 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 +3 -3
- 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 +36 -0
- package/dist/server/stream-utils.d.ts.map +1 -0
- package/dist/server/tracing.d.ts +7 -6
- 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/shared/head-header.d.ts +54 -0
- package/dist/shared/head-header.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/package.json +63 -24
- package/src/adapters/build-output-helper.ts +139 -0
- package/src/adapters/cloudflare-dev.ts +177 -0
- package/src/adapters/cloudflare-kv-cache.ts +179 -0
- package/src/adapters/cloudflare.ts +356 -116
- package/src/adapters/compress-module.ts +27 -92
- package/src/adapters/nitro.ts +155 -99
- package/src/adapters/raw-imports.d.ts +5 -0
- package/src/adapters/shared.ts +40 -0
- package/src/adapters/wrangler.d.ts +7 -0
- package/src/cache/cache-api.ts +47 -0
- package/src/cache/handler-store.ts +68 -0
- package/src/cache/index.ts +84 -18
- package/src/cache/invalidation-epoch.ts +93 -0
- package/src/cache/redis-handler.ts +110 -15
- package/src/cache/singleflight.ts +62 -4
- package/src/cache/sizeof.ts +33 -0
- package/src/cache/stable-stringify.ts +65 -2
- package/src/cache/timber-cache.ts +132 -36
- package/src/cli-schema-sync.ts +388 -0
- package/src/cli.ts +98 -34
- package/src/client/browser-dev.ts +153 -1
- package/src/client/browser-entry/action-dispatch.ts +119 -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 +104 -0
- package/src/client/browser-entry/router-init.ts +292 -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 +11 -3
- 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-types.ts +112 -0
- package/src/client/navigation-api.ts +347 -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 +490 -140
- package/src/client/rsc-fetch.ts +220 -17
- package/src/client/segment-cache.ts +6 -3
- 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 +31 -2
- 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 +292 -0
- package/src/config-validation.ts +311 -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 +291 -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/{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 +183 -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 +7 -3
- 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 +344 -0
- package/src/fonts/types.ts +52 -1
- package/src/fonts/virtual-modules.ts +179 -0
- package/src/index.ts +417 -346
- 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 +325 -0
- package/src/plugins/adapter-build.ts +98 -4
- package/src/plugins/build-manifest.ts +168 -23
- package/src/plugins/build-report.ts +16 -25
- package/src/plugins/cache.ts +285 -0
- package/src/plugins/client-chunks.ts +113 -0
- package/src/plugins/cloudflare-wasm.ts +141 -0
- package/src/plugins/content.ts +1 -1
- package/src/plugins/dev-server.ts +264 -46
- package/src/plugins/entries.ts +110 -8
- package/src/plugins/fonts.ts +170 -663
- package/src/plugins/mdx.ts +47 -10
- package/src/plugins/routing.ts +237 -241
- package/src/plugins/server-bundle.ts +85 -12
- package/src/plugins/shims.ts +207 -64
- package/src/plugins/static-build.ts +15 -89
- package/src/routing/codegen-shared.ts +115 -0
- package/src/routing/codegen-types.ts +65 -0
- package/src/routing/codegen.ts +380 -178
- package/src/routing/convention-lint.ts +358 -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 +290 -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 +2 -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 +122 -16
- package/src/server/actions.ts +39 -53
- package/src/server/als-registry.ts +108 -20
- package/src/server/asset-headers.ts +8 -34
- 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 +147 -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 +80 -64
- 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 +101 -5
- package/src/server/html-injector-core.ts +437 -0
- package/src/server/html-injectors.ts +256 -251
- package/src/server/index.ts +29 -183
- package/src/server/internal.ts +165 -0
- package/src/server/logger.ts +67 -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 +13 -0
- package/src/server/pipeline-outcome.ts +197 -0
- package/src/server/pipeline-phases.ts +527 -0
- package/src/server/pipeline.ts +213 -382
- package/src/server/port-resolution.ts +215 -0
- package/src/server/primitives.ts +126 -63
- 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 +481 -222
- 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 -59
- package/src/server/rsc-entry/index.ts +299 -329
- package/src/server/rsc-entry/render-route.ts +311 -0
- package/src/server/rsc-entry/revalidate-renderer.ts +344 -0
- package/src/server/rsc-entry/rsc-payload.ts +71 -26
- 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/sitemap-generator.ts +338 -0
- package/src/server/sitemap-handler.ts +148 -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 +213 -0
- package/src/server/tracing.ts +38 -11
- 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/shared/head-header.ts +69 -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/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/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/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/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/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
- /package/src/{server/dev-logger.ts → dev-tools/logger.ts} +0 -0
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed `<Link>` codegen — interface augmentation generation.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from `codegen.ts` to keep that file under the project's
|
|
5
|
+
* 500-line cap. This module owns everything that emits the
|
|
6
|
+
* `interface LinkFunction { ... }` augmentation blocks in the generated
|
|
7
|
+
* `.timber/timber-routes.d.ts`.
|
|
8
|
+
*
|
|
9
|
+
* Two augmentation blocks are emitted:
|
|
10
|
+
*
|
|
11
|
+
* 1. **Per-route discriminated union** (`formatTypedLinkOverloads`) —
|
|
12
|
+
* one call signature whose props is a union keyed on `href`. TS
|
|
13
|
+
* narrows by literal href and reports prop errors against the
|
|
14
|
+
* matched variant. See TIM-835 and `design/09-typescript.md`.
|
|
15
|
+
*
|
|
16
|
+
* 2. **Catch-all overloads** (`formatLinkCatchAllOverloads`) — external
|
|
17
|
+
* href literals (`http://`, `mailto:`, etc.) and a computed-string
|
|
18
|
+
* `<H extends string>` signature for runtime-computed paths.
|
|
19
|
+
*
|
|
20
|
+
* Block ordering is critical for error UX: per-route is emitted FIRST
|
|
21
|
+
* so that, after TS's "later overload set ordered first" merge rule,
|
|
22
|
+
* the discriminated union ends up LAST in resolution order — the
|
|
23
|
+
* overload TS reports against on failure.
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
import type { ParamEntry, RouteEntry } from './codegen-types.js';
|
|
27
|
+
import {
|
|
28
|
+
buildCodecChainType,
|
|
29
|
+
buildSchemaParamType,
|
|
30
|
+
formatSearchParamsType,
|
|
31
|
+
} from './codegen-shared.js';
|
|
32
|
+
|
|
33
|
+
/** Shared Link base-props type literal used in every emitted call signature. */
|
|
34
|
+
export const LINK_BASE_PROPS_TYPE =
|
|
35
|
+
"Omit<import('react').AnchorHTMLAttributes<HTMLAnchorElement>, 'href'> & { prefetch?: boolean; scroll?: boolean; preserveSearchParams?: true | string[]; onNavigate?: import('./client/link.js').OnNavigateHandler; children?: import('react').ReactNode }";
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Build a TypeScript template literal pattern for a dynamic route.
|
|
39
|
+
* e.g. '/products/[id]' → '/products/${string}'
|
|
40
|
+
* '/blog/[...slug]' → '/blog/${string}'
|
|
41
|
+
* '/docs/[[...path]]' → '/docs/${string}' (also matches /docs)
|
|
42
|
+
* '/[org]/[repo]' → '/${string}/${string}'
|
|
43
|
+
*/
|
|
44
|
+
export function buildResolvedPattern(route: RouteEntry): string | null {
|
|
45
|
+
const parts = route.urlPath.split('/');
|
|
46
|
+
const templateParts = parts.map((part) => {
|
|
47
|
+
if (part.startsWith('[[...') && part.endsWith(']]')) {
|
|
48
|
+
// eslint-disable-next-line no-template-curly-in-string -- codegen output
|
|
49
|
+
return '${string}';
|
|
50
|
+
}
|
|
51
|
+
if (part.startsWith('[...') && part.endsWith(']')) {
|
|
52
|
+
// eslint-disable-next-line no-template-curly-in-string -- codegen output
|
|
53
|
+
return '${string}';
|
|
54
|
+
}
|
|
55
|
+
if (part.startsWith('[') && part.endsWith(']')) {
|
|
56
|
+
// eslint-disable-next-line no-template-curly-in-string -- codegen output
|
|
57
|
+
return '${string}';
|
|
58
|
+
}
|
|
59
|
+
return part;
|
|
60
|
+
});
|
|
61
|
+
return templateParts.join('/');
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Format the segmentParams type for Link overloads.
|
|
66
|
+
*
|
|
67
|
+
* Link params accept `string | number` for single dynamic segments
|
|
68
|
+
* (convenience — values are stringified at runtime). Catch-all and
|
|
69
|
+
* optional catch-all remain `string[]` / `string[] | undefined`.
|
|
70
|
+
*
|
|
71
|
+
* When the segment's params chain (TIM-834) declares a typed codec, the
|
|
72
|
+
* inferred type from the codec wins via a nested conditional.
|
|
73
|
+
*/
|
|
74
|
+
export function formatLinkParamsType(
|
|
75
|
+
params: ParamEntry[],
|
|
76
|
+
importBase?: string,
|
|
77
|
+
hasSchema?: boolean
|
|
78
|
+
): string {
|
|
79
|
+
if (params.length === 0) {
|
|
80
|
+
return '{}';
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const fields = params.map((p) => {
|
|
84
|
+
const fallback = p.type === 'string' ? 'string | number' : p.type;
|
|
85
|
+
const codecType = hasSchema
|
|
86
|
+
? buildSchemaParamType(p, fallback)
|
|
87
|
+
: buildCodecChainType(p, importBase, fallback);
|
|
88
|
+
return `${p.name}: ${codecType}`;
|
|
89
|
+
});
|
|
90
|
+
return `{ ${fields.join('; ')} }`;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Catch-all call signatures for `<Link>` — external hrefs and computed
|
|
95
|
+
* `string` variables. Emitted from codegen in a SEPARATE
|
|
96
|
+
* `declare module` block (declared AFTER the per-route block) so the TS
|
|
97
|
+
* "later overload set ordered first" rule places these catch-all
|
|
98
|
+
* signatures ahead of per-route in resolution order, leaving per-route
|
|
99
|
+
* as the final overload whose error message is reported on failure.
|
|
100
|
+
*
|
|
101
|
+
* The conditional `string extends H ? ... : never` protection preserves
|
|
102
|
+
* TIM-624's guarantee that unknown internal path literals don't match
|
|
103
|
+
* the catch-all — typos like `<Link href="/typo" />` still error.
|
|
104
|
+
*/
|
|
105
|
+
export function formatLinkCatchAllOverloads(): string[] {
|
|
106
|
+
const lines: string[] = [];
|
|
107
|
+
const baseProps = LINK_BASE_PROPS_TYPE;
|
|
108
|
+
|
|
109
|
+
// TIM-830: the catch-all signatures accept EITHER the legacy
|
|
110
|
+
// `{ definition, values }` wrapper OR a flat `Record<string, unknown>`
|
|
111
|
+
// values object. External/computed hrefs can't be looked up in the
|
|
112
|
+
// runtime registry, so the wrapped form is still the reliable path;
|
|
113
|
+
// the flat form is kept permissive for callers migrating from typed-
|
|
114
|
+
// route hrefs to computed strings. `resolveHref` discriminates at
|
|
115
|
+
// runtime via the presence of a `definition` key.
|
|
116
|
+
const catchAllSearchParams =
|
|
117
|
+
'{ definition: SearchParamsDefinition<Record<string, unknown>>; values: Record<string, unknown> } | Record<string, unknown>';
|
|
118
|
+
|
|
119
|
+
// ExternalHref inlined here rather than referenced as an exported
|
|
120
|
+
// alias so the generated .d.ts stands alone without source imports.
|
|
121
|
+
/* eslint-disable no-template-curly-in-string -- codegen output */
|
|
122
|
+
const externalHref =
|
|
123
|
+
'`http://${string}` | `https://${string}` | `mailto:${string}` | `tel:${string}` | `ftp://${string}` | `//${string}` | `#${string}` | `?${string}`';
|
|
124
|
+
/* eslint-enable no-template-curly-in-string */
|
|
125
|
+
|
|
126
|
+
lines.push(' // Typed Link overloads — catch-all (block 2 / emitted second)');
|
|
127
|
+
lines.push(' interface LinkFunction {');
|
|
128
|
+
|
|
129
|
+
// (1) External/literal-protocol hrefs.
|
|
130
|
+
//
|
|
131
|
+
// TIM-833: `segmentParams` is permissively typed as
|
|
132
|
+
// `Record<string, unknown>` (not `never`) so generic wrappers that
|
|
133
|
+
// forward a `LinkProps`-shaped object can compile when the wrapper
|
|
134
|
+
// happens to bottom out at an external href. There are no dynamic
|
|
135
|
+
// segments to interpolate for an external href, so this prop is
|
|
136
|
+
// ignored at runtime — accepting an open-shape object instead of
|
|
137
|
+
// forbidding it removes a footgun without changing behavior.
|
|
138
|
+
lines.push(` (props: ${baseProps} & {`);
|
|
139
|
+
lines.push(` href: ${externalHref}`);
|
|
140
|
+
lines.push(` segmentParams?: Record<string, unknown>`);
|
|
141
|
+
lines.push(` searchParams?: ${catchAllSearchParams}`);
|
|
142
|
+
lines.push(` }): import('react').JSX.Element`);
|
|
143
|
+
|
|
144
|
+
// (2) Computed/variable href — non-literal `string` only.
|
|
145
|
+
//
|
|
146
|
+
// `string extends H` is true only when H is the wide `string` type,
|
|
147
|
+
// not a specific literal. For literal hrefs, this overload must NOT
|
|
148
|
+
// be selectable so the per-route discriminated union (block 1) is
|
|
149
|
+
// the resolution target.
|
|
150
|
+
//
|
|
151
|
+
// TIM-833 follow-up: the previous shape used `string extends H ? {...} : never`
|
|
152
|
+
// on the WHOLE props type. For literal H, that collapsed `props` to
|
|
153
|
+
// `never`, and JSX type inference then read `(never).children` as
|
|
154
|
+
// `never` — producing the misleading
|
|
155
|
+
// `'children' prop expects type 'never' which requires multiple
|
|
156
|
+
// children, but only a single child was provided` (TS2745) error,
|
|
157
|
+
// which buried the actual prop-mismatch message under a noise diagnostic.
|
|
158
|
+
//
|
|
159
|
+
// Fix: move the `: never` from the whole props onto just the `href`
|
|
160
|
+
// field. The overload remains uncallable for literal H (since `"/x"`
|
|
161
|
+
// is not assignable to `never`), but `children` retains its real
|
|
162
|
+
// `ReactNode` type so JSX inference no longer collapses to never.
|
|
163
|
+
// The diagnostic surface becomes: TS reports the per-route block's
|
|
164
|
+
// error chain (the helpful "Type 'number' is not assignable to type
|
|
165
|
+
// 'string'" message) WITHOUT a leading TS2745 noise line.
|
|
166
|
+
lines.push(` <H extends string>(`);
|
|
167
|
+
lines.push(` props: ${baseProps} & {`);
|
|
168
|
+
lines.push(` href: string extends H ? H : never`);
|
|
169
|
+
lines.push(` segmentParams?: Record<string, string | number | string[]>`);
|
|
170
|
+
lines.push(` searchParams?: ${catchAllSearchParams}`);
|
|
171
|
+
lines.push(` }`);
|
|
172
|
+
lines.push(` ): import('react').JSX.Element`);
|
|
173
|
+
|
|
174
|
+
lines.push(' }');
|
|
175
|
+
return lines;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Generate typed per-route Link call signatures via LinkFunction
|
|
180
|
+
* interface merging.
|
|
181
|
+
*
|
|
182
|
+
* TIM-835: This emits a SINGLE call signature whose props is a
|
|
183
|
+
* discriminated union keyed on `href`. TypeScript narrows the union by
|
|
184
|
+
* the literal `href` at the call site, then checks the rest of the
|
|
185
|
+
* props against the matched variant. When `segmentParams` or
|
|
186
|
+
* `searchParams` is wrong, TS reports the error against the matched
|
|
187
|
+
* variant — naming the user's actual `href` and the offending field.
|
|
188
|
+
*
|
|
189
|
+
* Before TIM-835, this function emitted N separate per-route overloads
|
|
190
|
+
* (one per route, sometimes two for dynamic routes). When ALL overloads
|
|
191
|
+
* failed, TS would pick an arbitrary failed overload (heuristically the
|
|
192
|
+
* "last tried") to render the diagnostic, often pointing at a route
|
|
193
|
+
* completely unrelated to the one the user wrote. The discriminated
|
|
194
|
+
* union sidesteps overload-resolution heuristics entirely.
|
|
195
|
+
*
|
|
196
|
+
* Open property shapes (`Record<string, unknown>` instead of `never`)
|
|
197
|
+
* for `segmentParams` on routes that don't declare them keep generic
|
|
198
|
+
* `LinkProps`-spreading wrappers compiling. (Aligned with TIM-833.)
|
|
199
|
+
*
|
|
200
|
+
* TIM-832: this function still emits the per-route block FIRST and the
|
|
201
|
+
* catch-all block follows, so per-route remains the LAST overload set in
|
|
202
|
+
* resolution order — the one TS reports against on failure. With a
|
|
203
|
+
* discriminated union there is only one call signature in this block,
|
|
204
|
+
* so the resolved-template-vs-pattern ordering reduces to placing the
|
|
205
|
+
* pattern variant before the resolved-template variant inside the union.
|
|
206
|
+
*/
|
|
207
|
+
export function formatTypedLinkOverloads(
|
|
208
|
+
routes: RouteEntry[],
|
|
209
|
+
importBase?: string,
|
|
210
|
+
hasSchema?: boolean
|
|
211
|
+
): string[] {
|
|
212
|
+
const lines: string[] = [];
|
|
213
|
+
const baseProps = LINK_BASE_PROPS_TYPE;
|
|
214
|
+
|
|
215
|
+
// Build the union variants. Each route contributes one variant for the
|
|
216
|
+
// pattern href (e.g. '/products/[id]') and, for dynamic routes, an
|
|
217
|
+
// additional variant for the resolved-template href (e.g.
|
|
218
|
+
// `/products/${string}`).
|
|
219
|
+
//
|
|
220
|
+
// The PATTERN variant must be listed BEFORE the resolved-template
|
|
221
|
+
// variant for the same route so that when the user writes the literal
|
|
222
|
+
// pattern href (`<Link href="/products/[id]" />`), TS narrows to the
|
|
223
|
+
// pattern variant (which carries the typed `segmentParams` shape)
|
|
224
|
+
// rather than the looser resolved-template variant. Without this
|
|
225
|
+
// ordering, TS would silently match the resolved-template variant
|
|
226
|
+
// first — swallowing typed-segmentParams type errors.
|
|
227
|
+
const variants: string[] = [];
|
|
228
|
+
for (const route of routes) {
|
|
229
|
+
const hasDynamicParams = route.params.length > 0;
|
|
230
|
+
// For routes with no dynamic params, accept an absent OR open-shape
|
|
231
|
+
// segmentParams. `Record<string, unknown>` keeps generic spreads
|
|
232
|
+
// compiling and gives a readable error if a non-object is passed.
|
|
233
|
+
const paramsProp = hasDynamicParams
|
|
234
|
+
? `segmentParams: ${formatLinkParamsType(route.params, importBase, hasSchema)}`
|
|
235
|
+
: 'segmentParams?: Record<string, unknown>';
|
|
236
|
+
|
|
237
|
+
const searchParamsType = route.hasSearchParams
|
|
238
|
+
? formatSearchParamsType(route, importBase)
|
|
239
|
+
: null;
|
|
240
|
+
// TIM-830: pattern href uses the FLAT `Partial<T>` shape — the
|
|
241
|
+
// runtime registry is keyed by the un-interpolated pattern.
|
|
242
|
+
//
|
|
243
|
+
// TIM-833: when the route has NO searchParams definition, use
|
|
244
|
+
// `Record<string, unknown>` (open shape) instead of
|
|
245
|
+
// `Record<string, never>` so generic `LinkProps`-spreading wrappers
|
|
246
|
+
// compile. The trade-off vs the original TIM-835 strict shape is
|
|
247
|
+
// that excess searchParams keys on a no-def route no longer raise
|
|
248
|
+
// a type error — but those keys are runtime no-ops anyway, and
|
|
249
|
+
// wrapper compatibility is the more common pain point. Routes WITH
|
|
250
|
+
// a searchParams definition still get strict `Partial<T>` typing.
|
|
251
|
+
const patternSearchParamsProp = searchParamsType
|
|
252
|
+
? `searchParams?: Partial<${searchParamsType}>`
|
|
253
|
+
: 'searchParams?: Record<string, unknown>';
|
|
254
|
+
|
|
255
|
+
// Pattern variant FIRST (more specific).
|
|
256
|
+
variants.push(
|
|
257
|
+
`${baseProps} & { href: '${route.urlPath}'; ${paramsProp}; ${patternSearchParamsProp} }`
|
|
258
|
+
);
|
|
259
|
+
|
|
260
|
+
// Resolved-template variant SECOND (looser, matches interpolated hrefs).
|
|
261
|
+
if (hasDynamicParams) {
|
|
262
|
+
const templatePattern = buildResolvedPattern(route);
|
|
263
|
+
if (templatePattern) {
|
|
264
|
+
// TIM-830: resolved-template href keeps the WRAPPED
|
|
265
|
+
// `{ definition, values }` shape — the registry can't be looked
|
|
266
|
+
// up by an already-interpolated href.
|
|
267
|
+
//
|
|
268
|
+
// TIM-833: searchParams falls back to `Record<string, unknown>`
|
|
269
|
+
// (was `Record<string, never>`) when the route has no
|
|
270
|
+
// definition, mirroring the pattern-variant change above. The
|
|
271
|
+
// resolved-template `segmentParams` is intentionally KEPT as
|
|
272
|
+
// `Record<string, never>` below to preserve TIM-835's
|
|
273
|
+
// pattern-variant typo detection: loosening segmentParams here
|
|
274
|
+
// would let the resolved-template variant shadow the pattern
|
|
275
|
+
// variant on literal pattern hrefs and silently swallow keyed
|
|
276
|
+
// typos like `<Link href="/[id]" segmentParams={{ idz: 1 }} />`.
|
|
277
|
+
const resolvedSearchParamsProp = searchParamsType
|
|
278
|
+
? `searchParams?: { definition: SearchParamsDefinition<${searchParamsType}>; values: Partial<${searchParamsType}> }`
|
|
279
|
+
: 'searchParams?: Record<string, unknown>';
|
|
280
|
+
// TIM-835: `Record<string, never>` for segmentParams forbids ANY
|
|
281
|
+
// provided keys on the resolved-template variant. Without this,
|
|
282
|
+
// the resolved-template would shadow the pattern variant for
|
|
283
|
+
// literal pattern hrefs (`<Link href="/products/[id]" segmentParams={...} />`)
|
|
284
|
+
// because both variants accept the literal `'/products/[id]'`
|
|
285
|
+
// and the looser variant would silently swallow segmentParams
|
|
286
|
+
// type errors.
|
|
287
|
+
variants.push(
|
|
288
|
+
`${baseProps} & { href: \`${templatePattern}\`; segmentParams?: Record<string, never>; ${resolvedSearchParamsProp} }`
|
|
289
|
+
);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
lines.push(' interface LinkFunction {');
|
|
295
|
+
if (variants.length === 0) {
|
|
296
|
+
// No page routes — emit nothing. The catch-all block in the second
|
|
297
|
+
// augmentation still provides external/computed-string signatures.
|
|
298
|
+
lines.push(' }');
|
|
299
|
+
return lines;
|
|
300
|
+
}
|
|
301
|
+
lines.push(' (');
|
|
302
|
+
lines.push(' props:');
|
|
303
|
+
for (const variant of variants) {
|
|
304
|
+
lines.push(` | (${variant})`);
|
|
305
|
+
}
|
|
306
|
+
lines.push(` ): import('react').JSX.Element`);
|
|
307
|
+
lines.push(' }');
|
|
308
|
+
|
|
309
|
+
return lines;
|
|
310
|
+
}
|
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Route manifest codegen — generates virtual module source for the route
|
|
3
|
+
* manifest, search-params registry, and global schema.
|
|
4
|
+
*
|
|
5
|
+
* Extracted from plugins/routing.ts to keep it under the 500-line budget.
|
|
6
|
+
* See design/18-build-system.md §"Virtual Modules".
|
|
7
|
+
*
|
|
8
|
+
* Task: TIM-1071 item 8
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { existsSync } from 'node:fs';
|
|
12
|
+
import { join } from 'node:path';
|
|
13
|
+
import { collectInterceptionRewrites } from './interception.js';
|
|
14
|
+
import type { RouteTree, SegmentNode, RouteFile } from './types.js';
|
|
15
|
+
import { readFileCached } from './file-cache.js';
|
|
16
|
+
|
|
17
|
+
// ── Single-file conventions ─────────────────────────────────────────────
|
|
18
|
+
// Each entry maps to a node property that holds a single RouteFile.
|
|
19
|
+
// Order matches the original serializeNode output for byte-identical diffs.
|
|
20
|
+
const SINGLE_FILE_KEYS = [
|
|
21
|
+
'page',
|
|
22
|
+
'layout',
|
|
23
|
+
'middleware',
|
|
24
|
+
'access',
|
|
25
|
+
'route',
|
|
26
|
+
'error',
|
|
27
|
+
'default',
|
|
28
|
+
'denied',
|
|
29
|
+
'params',
|
|
30
|
+
] as const;
|
|
31
|
+
|
|
32
|
+
// ── Record-shaped conventions ───────────────────────────────────────────
|
|
33
|
+
// Each entry maps to a node property that holds Record<string, RouteFile>.
|
|
34
|
+
const RECORD_FILE_KEYS = [
|
|
35
|
+
'statusFiles',
|
|
36
|
+
'jsonStatusFiles',
|
|
37
|
+
'legacyStatusFiles',
|
|
38
|
+
'metadataRoutes',
|
|
39
|
+
] as const;
|
|
40
|
+
|
|
41
|
+
const SCHEMA_EXTENSIONS = ['.ts', '.tsx', '.js', '.jsx'];
|
|
42
|
+
|
|
43
|
+
// ── Manifest generation ─────────────────────────────────────────────────
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Generate the virtual module source for the route manifest.
|
|
47
|
+
*
|
|
48
|
+
* The output is a default-exported object containing the serialized route tree.
|
|
49
|
+
* All file references use absolute paths (required for virtual modules).
|
|
50
|
+
*/
|
|
51
|
+
export function generateManifestModule(tree: RouteTree, viteRoot: string): string {
|
|
52
|
+
const imports: string[] = [];
|
|
53
|
+
let importIndex = 0;
|
|
54
|
+
|
|
55
|
+
function addImport(file: RouteFile): string {
|
|
56
|
+
const varName = `_route${importIndex++}`;
|
|
57
|
+
imports.push(`const ${varName} = () => import("${file.filePath}");`);
|
|
58
|
+
return varName;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function serializeRouteFile(key: string, file: RouteFile, indent: string): string {
|
|
62
|
+
const v = addImport(file);
|
|
63
|
+
return `${indent}${key}: { load: ${v}, filePath: ${JSON.stringify(file.filePath)} },`;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function serializeRouteFileRecord(
|
|
67
|
+
key: string,
|
|
68
|
+
record: Record<string, RouteFile>,
|
|
69
|
+
indent: string
|
|
70
|
+
): string | null {
|
|
71
|
+
const entries = Object.entries(record);
|
|
72
|
+
if (entries.length === 0) return null;
|
|
73
|
+
const inner = entries.map(([name, file]) => {
|
|
74
|
+
const v = addImport(file);
|
|
75
|
+
return `${indent} ${JSON.stringify(name)}: { load: ${v}, filePath: ${JSON.stringify(file.filePath)} }`;
|
|
76
|
+
});
|
|
77
|
+
return `${indent}${key}: {\n${inner.join(',\n')}\n${indent}},`;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function serializeNode(node: SegmentNode, indent: string): string {
|
|
81
|
+
const nextIndent = indent + ' ';
|
|
82
|
+
const parts: string[] = [];
|
|
83
|
+
|
|
84
|
+
parts.push(`${nextIndent}segmentName: ${JSON.stringify(node.segmentName)},`);
|
|
85
|
+
parts.push(`${nextIndent}segmentType: ${JSON.stringify(node.segmentType)},`);
|
|
86
|
+
parts.push(`${nextIndent}urlPath: ${JSON.stringify(node.urlPath)},`);
|
|
87
|
+
|
|
88
|
+
if (node.paramName) {
|
|
89
|
+
parts.push(`${nextIndent}paramName: ${JSON.stringify(node.paramName)},`);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
if (node.interceptionMarker) {
|
|
93
|
+
parts.push(`${nextIndent}interceptionMarker: ${JSON.stringify(node.interceptionMarker)},`);
|
|
94
|
+
}
|
|
95
|
+
if (node.interceptedSegmentName) {
|
|
96
|
+
parts.push(
|
|
97
|
+
`${nextIndent}interceptedSegmentName: ${JSON.stringify(node.interceptedSegmentName)},`
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// Single-file conventions — table-driven to avoid copy-paste drift
|
|
102
|
+
for (const key of SINGLE_FILE_KEYS) {
|
|
103
|
+
const file = node[key];
|
|
104
|
+
if (file) {
|
|
105
|
+
parts.push(serializeRouteFile(key, file, nextIndent));
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// searchParams is now a named export from page.tsx, not a separate file.
|
|
110
|
+
// The page module's searchParams export is loaded via the page's lazy import.
|
|
111
|
+
// Runtime registration happens in the route loader using the page module.
|
|
112
|
+
|
|
113
|
+
// Record-shaped conventions — table-driven
|
|
114
|
+
for (const key of RECORD_FILE_KEYS) {
|
|
115
|
+
const record = node[key];
|
|
116
|
+
if (record) {
|
|
117
|
+
const line = serializeRouteFileRecord(key, record, nextIndent);
|
|
118
|
+
if (line) parts.push(line);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// Children
|
|
123
|
+
if (node.children.length > 0) {
|
|
124
|
+
const childNodes = node.children.map((c) => serializeNode(c, nextIndent));
|
|
125
|
+
parts.push(`${nextIndent}children: [\n${childNodes.join(',\n')}\n${nextIndent}],`);
|
|
126
|
+
} else {
|
|
127
|
+
parts.push(`${nextIndent}children: [],`);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// Parallel slots
|
|
131
|
+
const slotKeys = Object.keys(node.slots);
|
|
132
|
+
if (slotKeys.length > 0) {
|
|
133
|
+
const slotEntries: string[] = [];
|
|
134
|
+
for (const slotName of slotKeys) {
|
|
135
|
+
const slotNode = node.slots[slotName]!;
|
|
136
|
+
slotEntries.push(
|
|
137
|
+
`${nextIndent} ${JSON.stringify(slotName)}: ${serializeNode(slotNode, nextIndent + ' ')}`
|
|
138
|
+
);
|
|
139
|
+
}
|
|
140
|
+
parts.push(`${nextIndent}slots: {\n${slotEntries.join(',\n')}\n${nextIndent}},`);
|
|
141
|
+
} else {
|
|
142
|
+
parts.push(`${nextIndent}slots: {},`);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
return `${indent}{\n${parts.join('\n')}\n${indent}}`;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
const rootSerialized = serializeNode(tree.root, ' ');
|
|
149
|
+
|
|
150
|
+
let proxyLine = '';
|
|
151
|
+
if (tree.proxy) {
|
|
152
|
+
const v = addImport(tree.proxy);
|
|
153
|
+
proxyLine = ` proxy: { load: ${v}, filePath: ${JSON.stringify(tree.proxy.filePath)} },`;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
let globalErrorLine = '';
|
|
157
|
+
if (tree.globalError) {
|
|
158
|
+
const v = addImport(tree.globalError);
|
|
159
|
+
globalErrorLine = ` globalError: { load: ${v}, filePath: ${JSON.stringify(tree.globalError.filePath)} },`;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
const rewrites = collectInterceptionRewrites(tree.root);
|
|
163
|
+
const rewritesLine =
|
|
164
|
+
rewrites.length > 0
|
|
165
|
+
? ` interceptionRewrites: ${JSON.stringify(rewrites.map((r) => ({ interceptedPattern: r.interceptedPattern, interceptingPrefix: r.interceptingPrefix })))},`
|
|
166
|
+
: '';
|
|
167
|
+
|
|
168
|
+
const code = [
|
|
169
|
+
'// Auto-generated route manifest — do not edit.',
|
|
170
|
+
'// Generated by timber-routing plugin.',
|
|
171
|
+
'',
|
|
172
|
+
...imports,
|
|
173
|
+
'',
|
|
174
|
+
'const manifest = {',
|
|
175
|
+
` viteRoot: ${JSON.stringify(viteRoot)},`,
|
|
176
|
+
proxyLine,
|
|
177
|
+
globalErrorLine,
|
|
178
|
+
rewritesLine,
|
|
179
|
+
` root: ${rootSerialized},`,
|
|
180
|
+
'};',
|
|
181
|
+
'',
|
|
182
|
+
'export default manifest;',
|
|
183
|
+
]
|
|
184
|
+
.filter((line) => line !== undefined && line !== '')
|
|
185
|
+
.join('\n');
|
|
186
|
+
|
|
187
|
+
return code;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// ── Search-params registry ──────────────────────────────────────────────
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Walk the route tree and collect every page that exports a
|
|
194
|
+
* `searchParams` definition, then emit a module that statically imports
|
|
195
|
+
* each export and registers it into the shared search-params registry.
|
|
196
|
+
*/
|
|
197
|
+
export function generateSearchParamsRegistryModule(tree: RouteTree): string {
|
|
198
|
+
const entries: Array<{ urlPath: string; filePath: string }> = [];
|
|
199
|
+
|
|
200
|
+
function walk(node: SegmentNode): void {
|
|
201
|
+
if (node.page) {
|
|
202
|
+
if (node.params && fileHasSearchParamsExport(node.params.filePath)) {
|
|
203
|
+
entries.push({ urlPath: node.urlPath, filePath: node.params.filePath });
|
|
204
|
+
} else if (fileHasSearchParamsExport(node.page.filePath)) {
|
|
205
|
+
entries.push({ urlPath: node.urlPath, filePath: node.page.filePath });
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
for (const child of node.children) walk(child);
|
|
209
|
+
for (const slot of Object.values(node.slots)) walk(slot);
|
|
210
|
+
}
|
|
211
|
+
walk(tree.root);
|
|
212
|
+
|
|
213
|
+
entries.sort((a, b) => a.urlPath.localeCompare(b.urlPath));
|
|
214
|
+
|
|
215
|
+
const lines: string[] = [];
|
|
216
|
+
lines.push('// Auto-generated search-params registry — do not edit.');
|
|
217
|
+
lines.push('// Generated by timber-routing plugin (TIM-830).');
|
|
218
|
+
lines.push('');
|
|
219
|
+
lines.push("import { registerSearchParams } from '@timber-js/app/search-params';");
|
|
220
|
+
lines.push('');
|
|
221
|
+
|
|
222
|
+
entries.forEach((entry, i) => {
|
|
223
|
+
lines.push(`import { searchParams as r${i} } from ${JSON.stringify(entry.filePath)};`);
|
|
224
|
+
});
|
|
225
|
+
lines.push('');
|
|
226
|
+
|
|
227
|
+
entries.forEach((entry, i) => {
|
|
228
|
+
lines.push(`registerSearchParams(${JSON.stringify(entry.urlPath)}, r${i});`);
|
|
229
|
+
});
|
|
230
|
+
lines.push('');
|
|
231
|
+
|
|
232
|
+
lines.push('export {};');
|
|
233
|
+
lines.push('');
|
|
234
|
+
|
|
235
|
+
return lines.join('\n');
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
function fileHasSearchParamsExport(filePath: string): boolean {
|
|
239
|
+
try {
|
|
240
|
+
if (!existsSync(filePath)) return false;
|
|
241
|
+
const content = readFileCached(filePath);
|
|
242
|
+
return (
|
|
243
|
+
/export\s+(const|let|var)\s+searchParams\b/.test(content) ||
|
|
244
|
+
/export\s*\{[^}]*\bsearchParams\b[^}]*\}/.test(content)
|
|
245
|
+
);
|
|
246
|
+
} catch {
|
|
247
|
+
return false;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// ── Schema module ───────────────────────────────────────────────────────
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Generate the virtual:timber-schema module.
|
|
255
|
+
*
|
|
256
|
+
* When app/schema.{ts,tsx,js,jsx} exists, generates a module that
|
|
257
|
+
* imports the schema and resolves its segmentParams codecs into a
|
|
258
|
+
* bare-name codec map for runtime coercion.
|
|
259
|
+
*/
|
|
260
|
+
export function generateSchemaModule(appDir: string): string {
|
|
261
|
+
let schemaPath: string | null = null;
|
|
262
|
+
for (const ext of SCHEMA_EXTENSIONS) {
|
|
263
|
+
const candidate = join(appDir, `schema${ext}`);
|
|
264
|
+
if (existsSync(candidate)) {
|
|
265
|
+
schemaPath = candidate;
|
|
266
|
+
break;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
if (!schemaPath) {
|
|
271
|
+
return [
|
|
272
|
+
'// Auto-generated schema loader — no app/schema.ts found.',
|
|
273
|
+
'export default null;',
|
|
274
|
+
].join('\n');
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
return [
|
|
278
|
+
'// Auto-generated schema loader — do not edit.',
|
|
279
|
+
'// Generated by timber-routing plugin (TIM-931).',
|
|
280
|
+
'',
|
|
281
|
+
`import schema from ${JSON.stringify(schemaPath)};`,
|
|
282
|
+
`import { resolveSchemaCodecs } from '@timber-js/app/params';`,
|
|
283
|
+
'',
|
|
284
|
+
'const globalCodecs = schema?.segmentParams',
|
|
285
|
+
' ? resolveSchemaCodecs(schema.segmentParams)',
|
|
286
|
+
' : null;',
|
|
287
|
+
'',
|
|
288
|
+
'export default globalCodecs;',
|
|
289
|
+
].join('\n');
|
|
290
|
+
}
|