@timber-js/app 0.2.0-alpha.15 → 0.2.0-alpha.151
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 +6452 -13421
- 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 +293 -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
package/src/plugins/mdx.ts
CHANGED
|
@@ -11,7 +11,9 @@
|
|
|
11
11
|
import type { Plugin } from 'vite';
|
|
12
12
|
import { existsSync } from 'node:fs';
|
|
13
13
|
import { join } from 'node:path';
|
|
14
|
-
import
|
|
14
|
+
import { createRequire } from 'node:module';
|
|
15
|
+
import { pathToFileURL } from 'node:url';
|
|
16
|
+
import type { PluginContext } from '../plugin-context.js';
|
|
15
17
|
|
|
16
18
|
const MDX_EXTENSIONS = ['mdx', 'md'];
|
|
17
19
|
|
|
@@ -54,15 +56,49 @@ function shouldActivate(ctx: PluginContext): boolean {
|
|
|
54
56
|
}
|
|
55
57
|
|
|
56
58
|
/**
|
|
57
|
-
* Try to dynamically import a module by name
|
|
58
|
-
*
|
|
59
|
+
* Try to dynamically import a module by name, resolving from the user's
|
|
60
|
+
* project root rather than from `@timber-js/app`'s own location.
|
|
61
|
+
*
|
|
62
|
+
* Why this matters: pnpm only hoists declared (peer) dependencies into a
|
|
63
|
+
* package's resolution scope. The MDX integration's optional companions
|
|
64
|
+
* — `remark-frontmatter`, `remark-mdx-frontmatter`, `@mdx-js/rollup` — are
|
|
65
|
+
* installed as direct deps of the consumer (e.g. `packages/website`), not
|
|
66
|
+
* `@timber-js/app`. A bare `import('remark-frontmatter')` from inside this
|
|
67
|
+
* file resolves against `packages/timber-app/node_modules` and silently
|
|
68
|
+
* fails with `ERR_MODULE_NOT_FOUND`, which made `tryImport` return
|
|
69
|
+
* `undefined` and skipped frontmatter parsing entirely — leaving MDX to
|
|
70
|
+
* choke on YAML as JS expressions (TIM-840).
|
|
71
|
+
*
|
|
72
|
+
* Resolving relative to `projectRoot` (via `createRequire`) makes the
|
|
73
|
+
* lookup walk the consumer's `node_modules` tree first, which is where
|
|
74
|
+
* pnpm puts the user's deps.
|
|
75
|
+
*
|
|
76
|
+
* Returns the default export, the module itself, or undefined if the
|
|
77
|
+
* module is not installed.
|
|
59
78
|
*/
|
|
60
|
-
async function tryImport(name: string): Promise<unknown | undefined> {
|
|
79
|
+
async function tryImport(name: string, projectRoot: string): Promise<unknown | undefined> {
|
|
61
80
|
try {
|
|
62
|
-
|
|
81
|
+
// Anchor resolution at the consumer's package.json so we walk their
|
|
82
|
+
// node_modules tree, not @timber-js/app's. createRequire().resolve()
|
|
83
|
+
// returns an absolute file path that ESM dynamic import accepts when
|
|
84
|
+
// wrapped as a file:// URL.
|
|
85
|
+
const require = createRequire(join(projectRoot, 'package.json'));
|
|
86
|
+
const resolved = require.resolve(name);
|
|
87
|
+
const mod = await import(pathToFileURL(resolved).href);
|
|
63
88
|
return mod.default ?? mod;
|
|
64
89
|
} catch {
|
|
65
|
-
|
|
90
|
+
// Fall back to a bare import — covers the rare case where the package
|
|
91
|
+
// lives next to @timber-js/app (e.g. monorepo with hoisted deps).
|
|
92
|
+
try {
|
|
93
|
+
const mod = await import(name);
|
|
94
|
+
return mod.default ?? mod;
|
|
95
|
+
} catch (e) {
|
|
96
|
+
console.debug(
|
|
97
|
+
`[timber] optional MDX dependency '${name}' not available:`,
|
|
98
|
+
e instanceof Error ? e.message : e
|
|
99
|
+
);
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
66
102
|
}
|
|
67
103
|
}
|
|
68
104
|
|
|
@@ -80,7 +116,7 @@ export function timberMdx(ctx: PluginContext): Plugin {
|
|
|
80
116
|
async function activate(): Promise<void> {
|
|
81
117
|
if (innerPlugin !== null || !shouldActivate(ctx)) return;
|
|
82
118
|
|
|
83
|
-
const createMdxPlugin = (await tryImport('@mdx-js/rollup')) as
|
|
119
|
+
const createMdxPlugin = (await tryImport('@mdx-js/rollup', ctx.root)) as
|
|
84
120
|
| ((options?: Record<string, unknown>) => Plugin)
|
|
85
121
|
| undefined;
|
|
86
122
|
|
|
@@ -99,10 +135,11 @@ export function timberMdx(ctx: PluginContext): Plugin {
|
|
|
99
135
|
|
|
100
136
|
const mdxConfig = ctx.config.mdx ?? {};
|
|
101
137
|
|
|
102
|
-
// Auto-register frontmatter plugins
|
|
138
|
+
// Auto-register frontmatter plugins. Resolve from the consumer's root
|
|
139
|
+
// so pnpm finds packages declared in the user's package.json (TIM-840).
|
|
103
140
|
const remarkPlugins: unknown[] = [];
|
|
104
|
-
const remarkFrontmatter = await tryImport('remark-frontmatter');
|
|
105
|
-
const remarkMdxFrontmatter = await tryImport('remark-mdx-frontmatter');
|
|
141
|
+
const remarkFrontmatter = await tryImport('remark-frontmatter', ctx.root);
|
|
142
|
+
const remarkMdxFrontmatter = await tryImport('remark-mdx-frontmatter', ctx.root);
|
|
106
143
|
if (remarkFrontmatter) remarkPlugins.push(remarkFrontmatter);
|
|
107
144
|
if (remarkMdxFrontmatter) remarkPlugins.push(remarkMdxFrontmatter);
|
|
108
145
|
|
package/src/plugins/routing.ts
CHANGED
|
@@ -11,24 +11,65 @@
|
|
|
11
11
|
import type { Plugin, ViteDevServer } from 'vite';
|
|
12
12
|
import { writeFile, mkdir } from 'node:fs/promises';
|
|
13
13
|
import { join } from 'node:path';
|
|
14
|
-
import { scanRoutes } from '
|
|
15
|
-
import { generateRouteMap } from '
|
|
16
|
-
import { collectInterceptionRewrites } from '#/routing/interception.js';
|
|
14
|
+
import { scanRoutes } from '../routing/scanner.js';
|
|
15
|
+
import { generateRouteMap } from '../routing/codegen.js';
|
|
17
16
|
import {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
import
|
|
17
|
+
buildDirToRouteMap,
|
|
18
|
+
writeSegmentTypes,
|
|
19
|
+
type SegmentInfo,
|
|
20
|
+
} from '../routing/segment-codegen.js';
|
|
21
|
+
import { validateSchemaAgainstRoutes } from '../routing/schema-validation.js';
|
|
22
|
+
import {
|
|
23
|
+
generateManifestModule,
|
|
24
|
+
generateSearchParamsRegistryModule,
|
|
25
|
+
generateSchemaModule,
|
|
26
|
+
} from '../routing/manifest-codegen.js';
|
|
27
|
+
import {
|
|
28
|
+
lintConventions,
|
|
29
|
+
checkAppDirExists,
|
|
30
|
+
formatConventionWarnings,
|
|
31
|
+
} from '../routing/convention-lint.js';
|
|
32
|
+
import type { PluginContext } from '../plugin-context.js';
|
|
23
33
|
|
|
24
34
|
const VIRTUAL_MODULE_ID = 'virtual:timber-route-manifest';
|
|
25
35
|
const RESOLVED_VIRTUAL_ID = `\0${VIRTUAL_MODULE_ID}`;
|
|
26
36
|
|
|
37
|
+
// TIM-830: Search-params registry virtual module.
|
|
38
|
+
//
|
|
39
|
+
// Statically imports the `searchParams` named export from every page
|
|
40
|
+
// that exports one, and registers each definition into the shared
|
|
41
|
+
// search-params registry keyed by the un-interpolated route pattern
|
|
42
|
+
// (e.g. '/products/[id]'). This lets `<Link>` serialize flat
|
|
43
|
+
// `Partial<T>` values at runtime without callers importing the
|
|
44
|
+
// definition at the call site.
|
|
45
|
+
//
|
|
46
|
+
// The imports are STATIC (`import { searchParams as r0 } from '...'`)
|
|
47
|
+
// so Vite/Rolldown tree-shakes each page's component body out of the
|
|
48
|
+
// registry chunk — only the `searchParams` named export is pulled in.
|
|
49
|
+
const SEARCH_PARAMS_REGISTRY_ID = 'virtual:timber-search-params-registry';
|
|
50
|
+
const RESOLVED_SEARCH_PARAMS_REGISTRY_ID = `\0${SEARCH_PARAMS_REGISTRY_ID}`;
|
|
51
|
+
|
|
52
|
+
// TIM-931: Schema virtual module.
|
|
53
|
+
//
|
|
54
|
+
// When app/schema.ts exists, this module imports it and resolves the
|
|
55
|
+
// bracket-keyed segmentParams codecs into a bare-name codec map for
|
|
56
|
+
// runtime coercion. When no schema exists, exports null.
|
|
57
|
+
const SCHEMA_ID = 'virtual:timber-schema';
|
|
58
|
+
const RESOLVED_SCHEMA_ID = `\0${SCHEMA_ID}`;
|
|
59
|
+
|
|
60
|
+
// TIM-935: $segment virtual module prefix.
|
|
61
|
+
// Resolved ID encodes segment info as JSON after the prefix.
|
|
62
|
+
//
|
|
63
|
+
// Each route directory gets a virtual module that exports the route
|
|
64
|
+
// and segmentPath. `import { route, segmentPath } from './$segment'`
|
|
65
|
+
// resolves to `\0$segment:<json>`.
|
|
66
|
+
const SEGMENT_PREFIX = '\0$segment:';
|
|
67
|
+
|
|
27
68
|
/**
|
|
28
69
|
* File convention names we track for changes that require manifest regeneration.
|
|
29
70
|
*/
|
|
30
71
|
const ROUTE_FILE_PATTERNS =
|
|
31
|
-
/\/(page|layout|middleware|access|route|error|default|denied|
|
|
72
|
+
/\/(page|layout|middleware|access|route|error|global-error|default|denied|params|schema|\d{3}|[45]xx|not-found|forbidden|unauthorized|sitemap|robots|manifest|favicon|icon|opengraph-image|apple-icon)\./;
|
|
32
73
|
|
|
33
74
|
/**
|
|
34
75
|
* Create the timber-routing Vite plugin.
|
|
@@ -44,12 +85,25 @@ const CODEGEN_OUTPUT = '.timber/timber-routes.d.ts';
|
|
|
44
85
|
* Uses a triple-slash reference so TypeScript auto-discovers the generated
|
|
45
86
|
* route map without the user needing to edit tsconfig.json — same pattern
|
|
46
87
|
* as Next.js's next-env.d.ts.
|
|
88
|
+
*
|
|
89
|
+
* Also references `vite/client` so side-effect imports like
|
|
90
|
+
* `import './globals.css'` type-check without ts(2882), and so
|
|
91
|
+
* `import.meta.env`, `import.meta.hot`, `import.meta.glob`, asset
|
|
92
|
+
* imports (`*.png`, `*.svg`, …), CSS modules, and `?url`/`?raw`/
|
|
93
|
+
* `?inline` query variants all resolve without the user editing
|
|
94
|
+
* tsconfig.json themselves. Next.js's next-env.d.ts plays the same
|
|
95
|
+
* role via `next/types/global`.
|
|
96
|
+
*
|
|
97
|
+
* `vite` is a peer dep of `@timber-js/app`, so the reference always
|
|
98
|
+
* resolves in a correctly-installed project.
|
|
47
99
|
*/
|
|
48
100
|
const TIMBER_ENV_DTS = [
|
|
49
101
|
'// This file is auto-generated by timber.js. Do not edit.',
|
|
50
|
-
'// It ensures TypeScript picks up the generated route types
|
|
51
|
-
'//
|
|
102
|
+
'// It ensures TypeScript picks up the generated route types and',
|
|
103
|
+
'// Vite-provided ambient types (CSS, assets, import.meta.env, HMR).',
|
|
104
|
+
'/* eslint-disable @typescript-eslint/triple-slash-reference */',
|
|
52
105
|
'/// <reference path=".timber/timber-routes.d.ts" />',
|
|
106
|
+
'/// <reference types="vite/client" />',
|
|
53
107
|
'',
|
|
54
108
|
].join('\n');
|
|
55
109
|
|
|
@@ -70,6 +124,7 @@ function writeCodegen(ctx: PluginContext): void {
|
|
|
70
124
|
Promise.all([
|
|
71
125
|
writeFile(routesPath, content, 'utf-8'),
|
|
72
126
|
writeFile(envPath, TIMBER_ENV_DTS, 'utf-8'),
|
|
127
|
+
writeSegmentTypes(ctx.routeTree!, ctx.appDir, ctx.root),
|
|
73
128
|
])
|
|
74
129
|
)
|
|
75
130
|
.catch((err) => {
|
|
@@ -82,20 +137,48 @@ export function timberRouting(ctx: PluginContext): Plugin {
|
|
|
82
137
|
/** Track warned files to avoid repeating warnings on rescan. */
|
|
83
138
|
const warnedFiles = new Set<string>();
|
|
84
139
|
|
|
140
|
+
/** Maps absolute filesystem directory → segment info for $segment resolution. */
|
|
141
|
+
let dirToRoute: Map<string, SegmentInfo> = new Map();
|
|
142
|
+
|
|
85
143
|
function rescan(): void {
|
|
144
|
+
// Check app/ directory exists before scanning
|
|
145
|
+
const appDirWarning = checkAppDirExists(ctx.appDir);
|
|
146
|
+
if (appDirWarning) {
|
|
147
|
+
const formatted = formatConventionWarnings([appDirWarning]);
|
|
148
|
+
if (formatted) process.stderr.write(`${formatted}\n`);
|
|
149
|
+
// Still create an empty tree so the rest of the pipeline doesn't crash
|
|
150
|
+
ctx.routeTree = {
|
|
151
|
+
root: {
|
|
152
|
+
segmentName: '',
|
|
153
|
+
segmentType: 'static',
|
|
154
|
+
urlPath: '/',
|
|
155
|
+
children: [],
|
|
156
|
+
slots: {},
|
|
157
|
+
},
|
|
158
|
+
};
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
|
|
86
162
|
ctx.timer.start('route-scan');
|
|
87
163
|
ctx.routeTree = scanRoutes(ctx.appDir, {
|
|
88
164
|
pageExtensions: ctx.config.pageExtensions,
|
|
89
165
|
});
|
|
90
166
|
ctx.timer.end('route-scan');
|
|
167
|
+
dirToRoute = buildDirToRouteMap(ctx.routeTree, ctx.appDir);
|
|
91
168
|
writeCodegen(ctx);
|
|
92
169
|
|
|
93
|
-
//
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
170
|
+
// Validate schema keys against filesystem segments.
|
|
171
|
+
// Warns on stale keys, bracket form mismatches, and missing keys.
|
|
172
|
+
// See design/41-global-params.md §Auto-Scaffolding
|
|
173
|
+
warnSchemaValidation(ctx);
|
|
174
|
+
|
|
175
|
+
// Lint conventions (empty app, missing methods, missing root layout)
|
|
176
|
+
const conventionWarnings = lintConventions(ctx.routeTree, ctx.appDir);
|
|
177
|
+
const newConventionWarnings = conventionWarnings.filter((w) => !warnedFiles.has(w.id));
|
|
178
|
+
if (newConventionWarnings.length > 0) {
|
|
179
|
+
for (const w of newConventionWarnings) warnedFiles.add(w.id);
|
|
180
|
+
const formatted = formatConventionWarnings(newConventionWarnings);
|
|
181
|
+
if (formatted) process.stderr.write(`${formatted}\n`);
|
|
99
182
|
}
|
|
100
183
|
}
|
|
101
184
|
|
|
@@ -110,7 +193,7 @@ export function timberRouting(ctx: PluginContext): Plugin {
|
|
|
110
193
|
* - <root>/virtual:timber-route-manifest (Vite SSR build root prefix)
|
|
111
194
|
* - \0virtual:timber-route-manifest (RSC plugin re-imports)
|
|
112
195
|
*/
|
|
113
|
-
resolveId(id: string) {
|
|
196
|
+
resolveId(id: string, importer?: string) {
|
|
114
197
|
// Strip \0 prefix if present (RSC plugin generates these)
|
|
115
198
|
const cleanId = id.startsWith('\0') ? id.slice(1) : id;
|
|
116
199
|
|
|
@@ -123,6 +206,35 @@ export function timberRouting(ctx: PluginContext): Plugin {
|
|
|
123
206
|
return RESOLVED_VIRTUAL_ID;
|
|
124
207
|
}
|
|
125
208
|
|
|
209
|
+
// TIM-830: Search-params registry virtual module
|
|
210
|
+
if (
|
|
211
|
+
cleanId === SEARCH_PARAMS_REGISTRY_ID ||
|
|
212
|
+
cleanId.endsWith(`/${SEARCH_PARAMS_REGISTRY_ID}`)
|
|
213
|
+
) {
|
|
214
|
+
return RESOLVED_SEARCH_PARAMS_REGISTRY_ID;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// TIM-931: Schema virtual module
|
|
218
|
+
if (cleanId === SCHEMA_ID || cleanId.endsWith(`/${SCHEMA_ID}`)) {
|
|
219
|
+
return RESOLVED_SCHEMA_ID;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// TIM-935: $segment virtual module.
|
|
223
|
+
// Resolves `import { route } from './$segment'` based on the
|
|
224
|
+
// importing file's directory in the app/ tree.
|
|
225
|
+
if (
|
|
226
|
+
importer &&
|
|
227
|
+
(cleanId === './$segment' || cleanId === './$segment.js' || cleanId === './$segment.ts')
|
|
228
|
+
) {
|
|
229
|
+
// Strip \0 prefix from importer if present
|
|
230
|
+
const cleanImporter = importer.startsWith('\0') ? importer.slice(1) : importer;
|
|
231
|
+
const importerDir = cleanImporter.substring(0, cleanImporter.lastIndexOf('/'));
|
|
232
|
+
const segmentInfo = dirToRoute.get(importerDir);
|
|
233
|
+
if (segmentInfo !== undefined) {
|
|
234
|
+
return `${SEGMENT_PREFIX}${JSON.stringify(segmentInfo)}`;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
|
|
126
238
|
return null;
|
|
127
239
|
},
|
|
128
240
|
|
|
@@ -133,14 +245,36 @@ export function timberRouting(ctx: PluginContext): Plugin {
|
|
|
133
245
|
* with absolute import paths for all file references.
|
|
134
246
|
*/
|
|
135
247
|
load(id: string) {
|
|
136
|
-
if (id
|
|
248
|
+
if (id === RESOLVED_VIRTUAL_ID) {
|
|
249
|
+
// If routeTree hasn't been built yet (shouldn't happen), scan now
|
|
250
|
+
if (!ctx.routeTree) {
|
|
251
|
+
rescan();
|
|
252
|
+
}
|
|
253
|
+
return generateManifestModule(ctx.routeTree!, ctx.root);
|
|
254
|
+
}
|
|
137
255
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
256
|
+
if (id === RESOLVED_SEARCH_PARAMS_REGISTRY_ID) {
|
|
257
|
+
if (!ctx.routeTree) {
|
|
258
|
+
rescan();
|
|
259
|
+
}
|
|
260
|
+
return generateSearchParamsRegistryModule(ctx.routeTree!);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
if (id === RESOLVED_SCHEMA_ID) {
|
|
264
|
+
return generateSchemaModule(ctx.appDir);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
// TIM-935: $segment virtual module — exports route and segmentPath.
|
|
268
|
+
if (id.startsWith(SEGMENT_PREFIX)) {
|
|
269
|
+
const info: SegmentInfo = JSON.parse(id.slice(SEGMENT_PREFIX.length));
|
|
270
|
+
return [
|
|
271
|
+
`export const ROUTE = ${JSON.stringify(info.route)};`,
|
|
272
|
+
`export const SEGMENT_PATH = ${JSON.stringify(info.segmentPath)};`,
|
|
273
|
+
'',
|
|
274
|
+
].join('\n');
|
|
141
275
|
}
|
|
142
276
|
|
|
143
|
-
return
|
|
277
|
+
return null;
|
|
144
278
|
},
|
|
145
279
|
|
|
146
280
|
/**
|
|
@@ -168,20 +302,49 @@ export function timberRouting(ctx: PluginContext): Plugin {
|
|
|
168
302
|
// Watch the app directory
|
|
169
303
|
devServer.watcher.add(ctx.appDir);
|
|
170
304
|
|
|
171
|
-
|
|
172
|
-
|
|
305
|
+
/** Snapshot of the last generated manifest, used to detect structural changes. */
|
|
306
|
+
let lastManifest = ctx.routeTree ? generateManifestModule(ctx.routeTree, ctx.root) : '';
|
|
307
|
+
|
|
308
|
+
/**
|
|
309
|
+
* Handle a route-significant file being added or removed.
|
|
310
|
+
* Always triggers a full-reload since the route tree structure changed.
|
|
311
|
+
*/
|
|
312
|
+
const handleStructuralChange = (filePath: string) => {
|
|
173
313
|
if (!filePath.startsWith(ctx.appDir)) return;
|
|
174
314
|
if (!ROUTE_FILE_PATTERNS.test(filePath)) return;
|
|
175
315
|
|
|
176
|
-
// Rescan the route tree
|
|
177
316
|
rescan();
|
|
178
|
-
|
|
179
|
-
// Invalidate the virtual module in all environments
|
|
317
|
+
lastManifest = ctx.routeTree ? generateManifestModule(ctx.routeTree, ctx.root) : '';
|
|
180
318
|
invalidateManifest(devServer);
|
|
181
319
|
};
|
|
182
320
|
|
|
183
|
-
|
|
184
|
-
|
|
321
|
+
/**
|
|
322
|
+
* Handle a route file's content changing.
|
|
323
|
+
*
|
|
324
|
+
* Most content edits (JSX changes, fixing typos) don't affect route
|
|
325
|
+
* metadata — Vite's React Fast Refresh handles those via normal HMR.
|
|
326
|
+
* Only rescan and full-reload when route metadata actually changed
|
|
327
|
+
* (e.g., searchParams export added/removed, metadata export changed).
|
|
328
|
+
*/
|
|
329
|
+
const handleContentChange = (filePath: string) => {
|
|
330
|
+
if (!filePath.startsWith(ctx.appDir)) return;
|
|
331
|
+
if (!ROUTE_FILE_PATTERNS.test(filePath)) return;
|
|
332
|
+
|
|
333
|
+
rescan();
|
|
334
|
+
const newManifest = ctx.routeTree ? generateManifestModule(ctx.routeTree, ctx.root) : '';
|
|
335
|
+
if (newManifest !== lastManifest) {
|
|
336
|
+
lastManifest = newManifest;
|
|
337
|
+
invalidateManifest(devServer);
|
|
338
|
+
}
|
|
339
|
+
// Otherwise: content edit didn't change route metadata — let Vite HMR handle it
|
|
340
|
+
};
|
|
341
|
+
|
|
342
|
+
devServer.watcher.on('add', handleStructuralChange);
|
|
343
|
+
devServer.watcher.on('unlink', handleStructuralChange);
|
|
344
|
+
// Watch content changes to page files — searchParams detection depends
|
|
345
|
+
// on file contents (export const searchParams), not just file presence.
|
|
346
|
+
// But only full-reload when route metadata actually changes.
|
|
347
|
+
devServer.watcher.on('change', handleContentChange);
|
|
185
348
|
// Also watch renames (which are add+unlink) — handled by the above
|
|
186
349
|
},
|
|
187
350
|
};
|
|
@@ -193,228 +356,61 @@ export function timberRouting(ctx: PluginContext): Plugin {
|
|
|
193
356
|
* When the route tree changes, any environment that has imported the manifest
|
|
194
357
|
* needs to be invalidated so the next request/transform picks up the new tree.
|
|
195
358
|
*/
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
const env = server.environments[envName];
|
|
199
|
-
if (!env?.moduleGraph) continue;
|
|
200
|
-
|
|
201
|
-
const mod = env.moduleGraph.getModuleById(RESOLVED_VIRTUAL_ID);
|
|
202
|
-
if (mod) {
|
|
203
|
-
env.moduleGraph.invalidateModule(mod);
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
// Trigger HMR full reload — route changes are structural
|
|
208
|
-
server.hot.send({ type: 'full-reload' });
|
|
209
|
-
}
|
|
359
|
+
/** Set of warning keys we've already emitted — avoid repeating on every rescan. */
|
|
360
|
+
const _warnedKeys = new Set<string>();
|
|
210
361
|
|
|
211
362
|
/**
|
|
212
|
-
*
|
|
213
|
-
*
|
|
214
|
-
*
|
|
215
|
-
* All file references use absolute paths (required for virtual modules).
|
|
363
|
+
* Validate schema keys against the filesystem route tree.
|
|
364
|
+
* Warns on stale keys, bracket form mismatches, and missing keys.
|
|
365
|
+
* Uses the already-scanned route tree instead of re-scanning.
|
|
216
366
|
*/
|
|
217
|
-
function
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
const parts: string[] = [];
|
|
237
|
-
|
|
238
|
-
parts.push(`${nextIndent}segmentName: ${JSON.stringify(node.segmentName)},`);
|
|
239
|
-
parts.push(`${nextIndent}segmentType: ${JSON.stringify(node.segmentType)},`);
|
|
240
|
-
parts.push(`${nextIndent}urlPath: ${JSON.stringify(node.urlPath)},`);
|
|
241
|
-
|
|
242
|
-
if (node.paramName) {
|
|
243
|
-
parts.push(`${nextIndent}paramName: ${JSON.stringify(node.paramName)},`);
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
if (node.interceptionMarker) {
|
|
247
|
-
parts.push(`${nextIndent}interceptionMarker: ${JSON.stringify(node.interceptionMarker)},`);
|
|
248
|
-
}
|
|
249
|
-
if (node.interceptedSegmentName) {
|
|
250
|
-
parts.push(
|
|
251
|
-
`${nextIndent}interceptedSegmentName: ${JSON.stringify(node.interceptedSegmentName)},`
|
|
252
|
-
);
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
// File conventions — absolute paths as lazy imports
|
|
256
|
-
if (node.page) {
|
|
257
|
-
const v = addImport(node.page);
|
|
258
|
-
parts.push(
|
|
259
|
-
`${nextIndent}page: { load: ${v}, filePath: ${JSON.stringify(node.page.filePath)} },`
|
|
260
|
-
);
|
|
261
|
-
}
|
|
262
|
-
if (node.layout) {
|
|
263
|
-
const v = addImport(node.layout);
|
|
264
|
-
parts.push(
|
|
265
|
-
`${nextIndent}layout: { load: ${v}, filePath: ${JSON.stringify(node.layout.filePath)} },`
|
|
266
|
-
);
|
|
267
|
-
}
|
|
268
|
-
if (node.middleware) {
|
|
269
|
-
const v = addImport(node.middleware);
|
|
270
|
-
parts.push(
|
|
271
|
-
`${nextIndent}middleware: { load: ${v}, filePath: ${JSON.stringify(node.middleware.filePath)} },`
|
|
272
|
-
);
|
|
273
|
-
}
|
|
274
|
-
if (node.access) {
|
|
275
|
-
const v = addImport(node.access);
|
|
276
|
-
parts.push(
|
|
277
|
-
`${nextIndent}access: { load: ${v}, filePath: ${JSON.stringify(node.access.filePath)} },`
|
|
278
|
-
);
|
|
279
|
-
}
|
|
280
|
-
if (node.route) {
|
|
281
|
-
const v = addImport(node.route);
|
|
282
|
-
parts.push(
|
|
283
|
-
`${nextIndent}route: { load: ${v}, filePath: ${JSON.stringify(node.route.filePath)} },`
|
|
284
|
-
);
|
|
285
|
-
}
|
|
286
|
-
if (node.error) {
|
|
287
|
-
const v = addImport(node.error);
|
|
288
|
-
parts.push(
|
|
289
|
-
`${nextIndent}error: { load: ${v}, filePath: ${JSON.stringify(node.error.filePath)} },`
|
|
290
|
-
);
|
|
291
|
-
}
|
|
292
|
-
if (node.default) {
|
|
293
|
-
const v = addImport(node.default);
|
|
294
|
-
parts.push(
|
|
295
|
-
`${nextIndent}default: { load: ${v}, filePath: ${JSON.stringify(node.default.filePath)} },`
|
|
296
|
-
);
|
|
297
|
-
}
|
|
298
|
-
if (node.denied) {
|
|
299
|
-
const v = addImport(node.denied);
|
|
300
|
-
parts.push(
|
|
301
|
-
`${nextIndent}denied: { load: ${v}, filePath: ${JSON.stringify(node.denied.filePath)} },`
|
|
302
|
-
);
|
|
303
|
-
}
|
|
304
|
-
if (node.searchParams) {
|
|
305
|
-
const v = addImport(node.searchParams);
|
|
306
|
-
parts.push(
|
|
307
|
-
`${nextIndent}searchParams: { load: ${v}, filePath: ${JSON.stringify(node.searchParams.filePath)} },`
|
|
308
|
-
);
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
// Status-code files
|
|
312
|
-
if (node.statusFiles && node.statusFiles.size > 0) {
|
|
313
|
-
const statusEntries: string[] = [];
|
|
314
|
-
for (const [code, file] of node.statusFiles) {
|
|
315
|
-
const v = addImport(file);
|
|
316
|
-
statusEntries.push(
|
|
317
|
-
`${nextIndent} ${JSON.stringify(code)}: { load: ${v}, filePath: ${JSON.stringify(file.filePath)} }`
|
|
318
|
-
);
|
|
319
|
-
}
|
|
320
|
-
parts.push(`${nextIndent}statusFiles: {\n${statusEntries.join(',\n')}\n${nextIndent}},`);
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
// JSON status-code files
|
|
324
|
-
if (node.jsonStatusFiles && node.jsonStatusFiles.size > 0) {
|
|
325
|
-
const jsonEntries: string[] = [];
|
|
326
|
-
for (const [code, file] of node.jsonStatusFiles) {
|
|
327
|
-
const v = addImport(file);
|
|
328
|
-
jsonEntries.push(
|
|
329
|
-
`${nextIndent} ${JSON.stringify(code)}: { load: ${v}, filePath: ${JSON.stringify(file.filePath)} }`
|
|
330
|
-
);
|
|
331
|
-
}
|
|
332
|
-
parts.push(`${nextIndent}jsonStatusFiles: {\n${jsonEntries.join(',\n')}\n${nextIndent}},`);
|
|
367
|
+
function warnSchemaValidation(ctx: PluginContext): void {
|
|
368
|
+
if (!ctx.routeTree) return;
|
|
369
|
+
const warnings = validateSchemaAgainstRoutes(ctx.routeTree, ctx.appDir);
|
|
370
|
+
|
|
371
|
+
for (const w of warnings) {
|
|
372
|
+
const warnKey = `${w.type}:${w.key}`;
|
|
373
|
+
if (_warnedKeys.has(warnKey)) continue;
|
|
374
|
+
_warnedKeys.add(warnKey);
|
|
375
|
+
|
|
376
|
+
switch (w.type) {
|
|
377
|
+
case 'stale-key':
|
|
378
|
+
console.warn(`[timber] ${w.message}`);
|
|
379
|
+
break;
|
|
380
|
+
case 'bracket-mismatch':
|
|
381
|
+
console.warn(`[timber] ${w.message}`);
|
|
382
|
+
break;
|
|
383
|
+
case 'missing-key':
|
|
384
|
+
console.warn(`[timber] ${w.message}`);
|
|
385
|
+
break;
|
|
333
386
|
}
|
|
387
|
+
}
|
|
388
|
+
}
|
|
334
389
|
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
const v = addImport(file);
|
|
340
|
-
legacyEntries.push(
|
|
341
|
-
`${nextIndent} ${JSON.stringify(name)}: { load: ${v}, filePath: ${JSON.stringify(file.filePath)} }`
|
|
342
|
-
);
|
|
343
|
-
}
|
|
344
|
-
parts.push(
|
|
345
|
-
`${nextIndent}legacyStatusFiles: {\n${legacyEntries.join(',\n')}\n${nextIndent}},`
|
|
346
|
-
);
|
|
347
|
-
}
|
|
390
|
+
function invalidateManifest(server: ViteDevServer): void {
|
|
391
|
+
for (const envName of Object.keys(server.environments)) {
|
|
392
|
+
const env = server.environments[envName];
|
|
393
|
+
if (!env?.moduleGraph) continue;
|
|
348
394
|
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
);
|
|
395
|
+
for (const virtualId of [
|
|
396
|
+
RESOLVED_VIRTUAL_ID,
|
|
397
|
+
RESOLVED_SEARCH_PARAMS_REGISTRY_ID,
|
|
398
|
+
RESOLVED_SCHEMA_ID,
|
|
399
|
+
]) {
|
|
400
|
+
const mod = env.moduleGraph.getModuleById(virtualId);
|
|
401
|
+
if (mod) {
|
|
402
|
+
env.moduleGraph.invalidateModule(mod);
|
|
357
403
|
}
|
|
358
|
-
parts.push(`${nextIndent}metadataRoutes: {\n${metaEntries.join(',\n')}\n${nextIndent}},`);
|
|
359
404
|
}
|
|
360
405
|
|
|
361
|
-
//
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
} else {
|
|
366
|
-
parts.push(`${nextIndent}children: [],`);
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
// Parallel slots
|
|
370
|
-
if (node.slots.size > 0) {
|
|
371
|
-
const slotEntries: string[] = [];
|
|
372
|
-
for (const [slotName, slotNode] of node.slots) {
|
|
373
|
-
slotEntries.push(
|
|
374
|
-
`${nextIndent} ${JSON.stringify(slotName)}: ${serializeNode(slotNode, nextIndent + ' ')}`
|
|
375
|
-
);
|
|
406
|
+
// TIM-935: Invalidate all $segment virtual modules (prefixed \0$segment:)
|
|
407
|
+
for (const mod of env.moduleGraph.idToModuleMap.values()) {
|
|
408
|
+
if (mod.id?.startsWith(SEGMENT_PREFIX)) {
|
|
409
|
+
env.moduleGraph.invalidateModule(mod);
|
|
376
410
|
}
|
|
377
|
-
parts.push(`${nextIndent}slots: {\n${slotEntries.join(',\n')}\n${nextIndent}},`);
|
|
378
|
-
} else {
|
|
379
|
-
parts.push(`${nextIndent}slots: {},`);
|
|
380
411
|
}
|
|
381
|
-
|
|
382
|
-
return `${indent}{\n${parts.join('\n')}\n${indent}}`;
|
|
383
412
|
}
|
|
384
413
|
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
// Proxy file
|
|
388
|
-
let proxyLine = '';
|
|
389
|
-
if (tree.proxy) {
|
|
390
|
-
const v = addImport(tree.proxy);
|
|
391
|
-
proxyLine = ` proxy: { load: ${v}, filePath: ${JSON.stringify(tree.proxy.filePath)} },`;
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
// Interception rewrites — computed at build time from the route tree.
|
|
395
|
-
// Only interceptedPattern and interceptingPrefix are needed at runtime.
|
|
396
|
-
const rewrites = collectInterceptionRewrites(tree.root);
|
|
397
|
-
const rewritesLine =
|
|
398
|
-
rewrites.length > 0
|
|
399
|
-
? ` interceptionRewrites: ${JSON.stringify(rewrites.map((r) => ({ interceptedPattern: r.interceptedPattern, interceptingPrefix: r.interceptingPrefix })))},`
|
|
400
|
-
: '';
|
|
401
|
-
|
|
402
|
-
const code = [
|
|
403
|
-
'// Auto-generated route manifest — do not edit.',
|
|
404
|
-
'// Generated by timber-routing plugin.',
|
|
405
|
-
'',
|
|
406
|
-
...imports,
|
|
407
|
-
'',
|
|
408
|
-
'const manifest = {',
|
|
409
|
-
proxyLine,
|
|
410
|
-
rewritesLine,
|
|
411
|
-
` root: ${rootSerialized},`,
|
|
412
|
-
'};',
|
|
413
|
-
'',
|
|
414
|
-
'export default manifest;',
|
|
415
|
-
]
|
|
416
|
-
.filter((line) => line !== undefined && line !== '')
|
|
417
|
-
.join('\n');
|
|
418
|
-
|
|
419
|
-
return code;
|
|
414
|
+
// Trigger HMR full reload — route changes are structural
|
|
415
|
+
server.hot.send({ type: 'full-reload' });
|
|
420
416
|
}
|