@timber-js/app 0.2.0-alpha.185 → 0.2.0-alpha.187
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/dist/_chunks/{actions-O_LsyCE4.js → actions-35jnMdeJ.js} +4 -3
- package/dist/_chunks/{actions-O_LsyCE4.js.map → actions-35jnMdeJ.js.map} +1 -1
- package/dist/_chunks/als-registry-C6kcfprT.js +41 -0
- package/dist/_chunks/als-registry-C6kcfprT.js.map +1 -0
- package/dist/_chunks/als-slots-BEEIPKYm.js +26 -0
- package/dist/_chunks/als-slots-BEEIPKYm.js.map +1 -0
- package/dist/_chunks/base-path-DaQrzbez.js +80 -0
- package/dist/_chunks/base-path-DaQrzbez.js.map +1 -0
- package/dist/_chunks/build-manifest-DWppEdLB.js +86 -0
- package/dist/_chunks/build-manifest-DWppEdLB.js.map +1 -0
- package/dist/_chunks/build-output-helper-C3DrfzZR.js +369 -0
- package/dist/_chunks/build-output-helper-C3DrfzZR.js.map +1 -0
- package/dist/_chunks/{cache-api-B-lhk9p4.js → cache-api-DjNrIWRR.js} +8 -14
- package/dist/_chunks/cache-api-DjNrIWRR.js.map +1 -0
- package/dist/_chunks/cli-check-CpmN7Nh-.js +256 -0
- package/dist/_chunks/cli-check-CpmN7Nh-.js.map +1 -0
- package/dist/_chunks/cli-schema-sync-CGMp_Psg.js +298 -0
- package/dist/_chunks/cli-schema-sync-CGMp_Psg.js.map +1 -0
- package/dist/_chunks/{cloudflare-CnT5Lr7U.js → cloudflare-CGP6BZKO.js} +92 -14
- package/dist/_chunks/{cloudflare-CnT5Lr7U.js.map → cloudflare-CGP6BZKO.js.map} +1 -1
- package/dist/_chunks/convention-lint-kXsgc_-7.js +784 -0
- package/dist/_chunks/convention-lint-kXsgc_-7.js.map +1 -0
- package/dist/_chunks/error-boundary-D-ODYX41.js +353 -0
- package/dist/_chunks/error-boundary-D-ODYX41.js.map +1 -0
- package/dist/_chunks/{fast-hash-D6hIVt1Y.js → fast-hash-C-tVYrLb.js} +6 -1
- package/dist/_chunks/fast-hash-C-tVYrLb.js.map +1 -0
- package/dist/_chunks/file-cache-DmX7OqZP.js +454 -0
- package/dist/_chunks/file-cache-DmX7OqZP.js.map +1 -0
- package/dist/_chunks/fs-identity-D7vb6GdI.js +208 -0
- package/dist/_chunks/fs-identity-D7vb6GdI.js.map +1 -0
- package/dist/_chunks/{logger-AWfuX-KJ.js → logger-D8xJZXIN.js} +34 -51
- package/dist/_chunks/logger-D8xJZXIN.js.map +1 -0
- package/dist/_chunks/mdx-file-C005ay-P.js +25 -0
- package/dist/_chunks/mdx-file-C005ay-P.js.map +1 -0
- package/dist/_chunks/{plugin-context---kTF5v8.js → plugin-context-rCinWLiE.js} +8 -2
- package/dist/_chunks/plugin-context-rCinWLiE.js.map +1 -0
- package/dist/_chunks/purge-store-Byr8XOjU.js +14 -0
- package/dist/_chunks/purge-store-Byr8XOjU.js.map +1 -0
- package/dist/_chunks/{resolve-schema-Dz3fcFUo.js → resolve-schema-5ma5pp1b.js} +2 -2
- package/dist/_chunks/{resolve-schema-Dz3fcFUo.js.map → resolve-schema-5ma5pp1b.js.map} +1 -1
- package/dist/_chunks/{router-ref-CtmF-aPv.js → router-ref-DuYuV_0Q.js} +2 -2
- package/dist/_chunks/router-ref-DuYuV_0Q.js.map +1 -0
- package/dist/_chunks/rsc-cache-key-DD0fl_-s.js +243 -0
- package/dist/_chunks/rsc-cache-key-DD0fl_-s.js.map +1 -0
- package/dist/_chunks/rsc-error-envelope-tT5PJs4q.js +40 -0
- package/dist/_chunks/rsc-error-envelope-tT5PJs4q.js.map +1 -0
- package/dist/_chunks/rsc-media-type-DRqE_lD_.js +46 -0
- package/dist/_chunks/rsc-media-type-DRqE_lD_.js.map +1 -0
- package/dist/_chunks/rsc-payload-path-B_LBodc2.js +48 -0
- package/dist/_chunks/rsc-payload-path-B_LBodc2.js.map +1 -0
- package/dist/_chunks/scanner-C8b0Gcw3.js +1564 -0
- package/dist/_chunks/scanner-C8b0Gcw3.js.map +1 -0
- package/dist/_chunks/schema-bridge-Cc2Gngu1.js +199 -0
- package/dist/_chunks/schema-bridge-Cc2Gngu1.js.map +1 -0
- package/dist/_chunks/{segment-classify-Byy425ng.js → segment-classify-C539Pa2O.js} +23 -2
- package/dist/_chunks/segment-classify-C539Pa2O.js.map +1 -0
- package/dist/_chunks/segment-context-CjOlyB8Y.js +97 -0
- package/dist/_chunks/segment-context-CjOlyB8Y.js.map +1 -0
- package/dist/_chunks/{canonicalize-DQHyFClh.js → segment-keys-BawYuNFO.js} +61 -2
- package/dist/_chunks/segment-keys-BawYuNFO.js.map +1 -0
- package/dist/_chunks/slot-params-BCTmZkQB.js +76 -0
- package/dist/_chunks/slot-params-BCTmZkQB.js.map +1 -0
- package/dist/_chunks/{ssr-data-BOWsq18U.js → ssr-data-14MXm7Pj.js} +17 -2
- package/dist/_chunks/ssr-data-14MXm7Pj.js.map +1 -0
- package/dist/_chunks/{use-query-states-DFvWd-EA.js → use-query-states-BbU5Ge1V.js} +74 -26
- package/dist/_chunks/use-query-states-BbU5Ge1V.js.map +1 -0
- package/dist/_chunks/use-segment-params-C4r4BD9T.js +398 -0
- package/dist/_chunks/use-segment-params-C4r4BD9T.js.map +1 -0
- package/dist/_chunks/walkers-RzN6AFjr.js +141 -0
- package/dist/_chunks/walkers-RzN6AFjr.js.map +1 -0
- package/dist/adapters/build-output-helper.d.ts +37 -0
- package/dist/adapters/build-output-helper.d.ts.map +1 -1
- package/dist/adapters/cloudflare-dev.js +1 -1
- package/dist/adapters/cloudflare-kv-cache.js +1 -1
- package/dist/adapters/cloudflare.d.ts.map +1 -1
- package/dist/adapters/cloudflare.js +1 -1
- package/dist/adapters/compress-module.d.ts +12 -0
- package/dist/adapters/compress-module.d.ts.map +1 -1
- package/dist/adapters/fs-identity.d.ts +64 -0
- package/dist/adapters/fs-identity.d.ts.map +1 -0
- package/dist/adapters/nitro.d.ts.map +1 -1
- package/dist/adapters/nitro.js +56 -5
- package/dist/adapters/nitro.js.map +1 -1
- package/dist/adapters/shared.d.ts +57 -1
- package/dist/adapters/shared.d.ts.map +1 -1
- package/dist/adapters/types.d.ts +13 -1
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/cache/fast-hash.d.ts +5 -0
- package/dist/cache/fast-hash.d.ts.map +1 -1
- package/dist/cache/index.js +1 -1
- package/dist/cdn/cloudflare-purge.js +30 -0
- package/dist/cdn/cloudflare-purge.js.map +1 -0
- package/dist/cdn/fastly-purge.js +33 -0
- package/dist/cdn/fastly-purge.js.map +1 -0
- package/dist/cdn/index.js +94 -0
- package/dist/cdn/index.js.map +1 -0
- package/dist/cdn/workers-cache-purge.js +35 -0
- package/dist/cdn/workers-cache-purge.js.map +1 -0
- package/dist/cli-check.d.ts +153 -0
- package/dist/cli-check.d.ts.map +1 -0
- package/dist/cli.d.ts +34 -8
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +46 -21
- package/dist/cli.js.map +1 -1
- package/dist/client/browser-entry/action-dispatch.d.ts.map +1 -1
- package/dist/client/browser-entry/hydrate.d.ts +20 -9
- package/dist/client/browser-entry/hydrate.d.ts.map +1 -1
- package/dist/client/browser-entry/index.d.ts +1 -1
- package/dist/client/browser-entry/index.d.ts.map +1 -1
- package/dist/client/browser-entry/post-hydration.d.ts +4 -1
- package/dist/client/browser-entry/post-hydration.d.ts.map +1 -1
- package/dist/client/browser-entry/router-init.d.ts +3 -0
- package/dist/client/browser-entry/router-init.d.ts.map +1 -1
- package/dist/client/browser-entry/rsc-stream.d.ts +8 -0
- package/dist/client/browser-entry/rsc-stream.d.ts.map +1 -1
- package/dist/client/error-boundary.d.ts +7 -0
- package/dist/client/error-boundary.d.ts.map +1 -1
- package/dist/client/error-boundary.js +1 -162
- package/dist/client/history.d.ts +13 -6
- package/dist/client/history.d.ts.map +1 -1
- package/dist/client/index.d.ts +1 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +42 -41
- package/dist/client/index.js.map +1 -1
- package/dist/client/internal.d.ts +4 -3
- package/dist/client/internal.d.ts.map +1 -1
- package/dist/client/internal.js +877 -311
- package/dist/client/internal.js.map +1 -1
- package/dist/client/link.d.ts +1 -7
- package/dist/client/link.d.ts.map +1 -1
- package/dist/client/navigation-api.d.ts +2 -2
- package/dist/client/navigation-commit.d.ts +87 -0
- package/dist/client/navigation-commit.d.ts.map +1 -0
- package/dist/client/navigation-context.d.ts +37 -20
- package/dist/client/navigation-context.d.ts.map +1 -1
- package/dist/client/navigation-root.d.ts +63 -23
- package/dist/client/navigation-root.d.ts.map +1 -1
- package/dist/client/params-context.d.ts +81 -0
- package/dist/client/params-context.d.ts.map +1 -0
- package/dist/client/router-effects.d.ts +129 -0
- package/dist/client/router-effects.d.ts.map +1 -0
- package/dist/client/router-lifecycle.d.ts +55 -0
- package/dist/client/router-lifecycle.d.ts.map +1 -0
- package/dist/client/router-pipeline.d.ts +84 -0
- package/dist/client/router-pipeline.d.ts.map +1 -0
- package/dist/client/router-ref.d.ts +1 -1
- package/dist/client/router-ref.d.ts.map +1 -1
- package/dist/client/router-skew.d.ts +21 -0
- package/dist/client/router-skew.d.ts.map +1 -0
- package/dist/client/router-types.d.ts +207 -0
- package/dist/client/router-types.d.ts.map +1 -0
- package/dist/client/router.d.ts +1 -182
- package/dist/client/router.d.ts.map +1 -1
- package/dist/client/rsc-fetch.d.ts +47 -26
- package/dist/client/rsc-fetch.d.ts.map +1 -1
- package/dist/client/segment-cache.d.ts +87 -34
- package/dist/client/segment-cache.d.ts.map +1 -1
- package/dist/client/ssr-data.d.ts +6 -0
- package/dist/client/ssr-data.d.ts.map +1 -1
- package/dist/client/stale-client.d.ts +69 -0
- package/dist/client/stale-client.d.ts.map +1 -0
- package/dist/client/state.d.ts +10 -1
- package/dist/client/state.d.ts.map +1 -1
- package/dist/client/top-loader.d.ts +2 -1
- package/dist/client/top-loader.d.ts.map +1 -1
- package/dist/client/unload-guard.d.ts +5 -0
- package/dist/client/unload-guard.d.ts.map +1 -1
- package/dist/client/use-cookie.d.ts.map +1 -1
- package/dist/client/use-query-states.d.ts +9 -3
- package/dist/client/use-query-states.d.ts.map +1 -1
- package/dist/client/use-router.d.ts +1 -1
- package/dist/client/use-segment-params.d.ts +18 -8
- package/dist/client/use-segment-params.d.ts.map +1 -1
- package/dist/codec.js +1 -1
- package/dist/cookies/define-cookie.d.ts.map +1 -1
- package/dist/cookies/index.js +5 -5
- package/dist/cookies/index.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1009 -759
- package/dist/index.js.map +1 -1
- package/dist/params/index.js +1 -1
- package/dist/plugin-context.d.ts +46 -0
- package/dist/plugin-context.d.ts.map +1 -1
- package/dist/plugins/adapter-build.d.ts.map +1 -1
- package/dist/plugins/build-manifest.d.ts +1 -1
- package/dist/plugins/build-manifest.d.ts.map +1 -1
- package/dist/plugins/entries.d.ts.map +1 -1
- package/dist/plugins/fonts.d.ts.map +1 -1
- package/dist/plugins/request-dep/analysis.d.ts +106 -0
- package/dist/plugins/request-dep/analysis.d.ts.map +1 -0
- package/dist/plugins/request-dep/index.d.ts +75 -0
- package/dist/plugins/request-dep/index.d.ts.map +1 -0
- package/dist/plugins/request-dep/origin.d.ts +61 -0
- package/dist/plugins/request-dep/origin.d.ts.map +1 -0
- package/dist/plugins/routing.d.ts.map +1 -1
- package/dist/plugins/shims.d.ts.map +1 -1
- package/dist/plugins/static-build.d.ts +160 -8
- package/dist/plugins/static-build.d.ts.map +1 -1
- package/dist/routing/codegen-shared.d.ts +3 -44
- package/dist/routing/codegen-shared.d.ts.map +1 -1
- package/dist/routing/codegen-types.d.ts +28 -31
- package/dist/routing/codegen-types.d.ts.map +1 -1
- package/dist/routing/codegen-write.d.ts +51 -0
- package/dist/routing/codegen-write.d.ts.map +1 -0
- package/dist/routing/codegen.d.ts.map +1 -1
- package/dist/routing/collision-probe.d.ts +104 -0
- package/dist/routing/collision-probe.d.ts.map +1 -0
- package/dist/routing/collision-spaces.d.ts +26 -0
- package/dist/routing/collision-spaces.d.ts.map +1 -0
- package/dist/routing/convention-lint.d.ts +18 -4
- package/dist/routing/convention-lint.d.ts.map +1 -1
- package/dist/routing/export-detect.d.ts +16 -0
- package/dist/routing/export-detect.d.ts.map +1 -1
- package/dist/routing/index.js +4 -3
- package/dist/routing/interception.d.ts +235 -6
- package/dist/routing/interception.d.ts.map +1 -1
- package/dist/routing/link-codegen.d.ts +19 -4
- package/dist/routing/link-codegen.d.ts.map +1 -1
- package/dist/routing/manifest-codegen.d.ts +1 -7
- package/dist/routing/manifest-codegen.d.ts.map +1 -1
- package/dist/routing/scanner.d.ts.map +1 -1
- package/dist/routing/segment-classify.d.ts +33 -0
- package/dist/routing/segment-classify.d.ts.map +1 -1
- package/dist/routing/segment-keys.d.ts +95 -0
- package/dist/routing/segment-keys.d.ts.map +1 -0
- package/dist/routing/slot-placement.d.ts +48 -0
- package/dist/routing/slot-placement.d.ts.map +1 -0
- package/dist/routing/types.d.ts +0 -6
- package/dist/routing/types.d.ts.map +1 -1
- package/dist/routing/walkers.d.ts +6 -0
- package/dist/routing/walkers.d.ts.map +1 -1
- package/dist/schema-bridge.d.ts +60 -9
- package/dist/schema-bridge.d.ts.map +1 -1
- package/dist/search-params/define.d.ts +62 -14
- package/dist/search-params/define.d.ts.map +1 -1
- package/dist/search-params/index.d.ts +0 -1
- package/dist/search-params/index.d.ts.map +1 -1
- package/dist/search-params/index.js +221 -10
- package/dist/search-params/index.js.map +1 -1
- package/dist/search-params/parse-total.d.ts +70 -0
- package/dist/search-params/parse-total.d.ts.map +1 -0
- package/dist/search-params/wrappers.d.ts +26 -3
- package/dist/search-params/wrappers.d.ts.map +1 -1
- package/dist/server/access-gate.d.ts +19 -8
- package/dist/server/access-gate.d.ts.map +1 -1
- package/dist/server/action-handler.d.ts.map +1 -1
- package/dist/server/actions.d.ts +6 -3
- package/dist/server/actions.d.ts.map +1 -1
- package/dist/server/als-registry.d.ts +18 -1
- package/dist/server/als-registry.d.ts.map +1 -1
- package/dist/server/build-manifest.d.ts +13 -1
- package/dist/server/build-manifest.d.ts.map +1 -1
- package/dist/server/chain-url-parts.d.ts +82 -0
- package/dist/server/chain-url-parts.d.ts.map +1 -0
- package/dist/server/children-interception.d.ts +49 -0
- package/dist/server/children-interception.d.ts.map +1 -0
- package/dist/server/compress.d.ts.map +1 -1
- package/dist/server/default-status-page.d.ts +45 -0
- package/dist/server/default-status-page.d.ts.map +1 -0
- package/dist/server/deny-boundary.d.ts +148 -15
- package/dist/server/deny-boundary.d.ts.map +1 -1
- package/dist/server/deny-renderer.d.ts +15 -4
- package/dist/server/deny-renderer.d.ts.map +1 -1
- package/dist/server/error-boundary-wrapper.d.ts +85 -15
- package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
- package/dist/server/head-response.d.ts +35 -0
- package/dist/server/head-response.d.ts.map +1 -0
- package/dist/server/index.d.ts +0 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +3 -2
- package/dist/server/index.js.map +1 -1
- package/dist/server/internal.d.ts +3 -1
- package/dist/server/internal.d.ts.map +1 -1
- package/dist/server/internal.js +712 -418
- package/dist/server/internal.js.map +1 -1
- package/dist/server/metadata-collector.d.ts +52 -0
- package/dist/server/metadata-collector.d.ts.map +1 -0
- package/dist/server/param-coercion.d.ts +22 -6
- package/dist/server/param-coercion.d.ts.map +1 -1
- package/dist/server/pipeline-helpers.d.ts +0 -18
- package/dist/server/pipeline-helpers.d.ts.map +1 -1
- package/dist/server/pipeline-interception.d.ts +59 -9
- package/dist/server/pipeline-interception.d.ts.map +1 -1
- package/dist/server/pipeline-outcome.d.ts.map +1 -1
- package/dist/server/pipeline-phases.d.ts.map +1 -1
- package/dist/server/pipeline.d.ts +11 -0
- package/dist/server/pipeline.d.ts.map +1 -1
- package/dist/server/primitives.d.ts +23 -0
- package/dist/server/primitives.d.ts.map +1 -1
- package/dist/server/publish-params.d.ts +33 -0
- package/dist/server/publish-params.d.ts.map +1 -0
- package/dist/server/request-context.d.ts +48 -0
- package/dist/server/request-context.d.ts.map +1 -1
- package/dist/server/route-element-builder.d.ts +22 -3
- 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 +13 -0
- package/dist/server/route-matcher.d.ts.map +1 -1
- package/dist/server/rsc-cache-key-guard.d.ts +78 -0
- package/dist/server/rsc-cache-key-guard.d.ts.map +1 -0
- package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
- package/dist/server/rsc-entry/deny-fallback.d.ts.map +1 -1
- package/dist/server/rsc-entry/error-renderer.d.ts +15 -3
- package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -1
- package/dist/server/rsc-entry/helpers.d.ts +2 -17
- package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
- package/dist/server/rsc-entry/index.d.ts +0 -1
- package/dist/server/rsc-entry/index.d.ts.map +1 -1
- package/dist/server/rsc-entry/render-route.d.ts.map +1 -1
- package/dist/server/rsc-entry/revalidate-renderer.d.ts.map +1 -1
- package/dist/server/rsc-entry/rsc-payload.d.ts +1 -2
- package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
- package/dist/server/rsc-entry/rsc-stream.d.ts +15 -2
- package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
- package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
- package/dist/server/skippable-prefix.d.ts +23 -0
- package/dist/server/skippable-prefix.d.ts.map +1 -0
- package/dist/server/slot-interception.d.ts +80 -0
- package/dist/server/slot-interception.d.ts.map +1 -0
- package/dist/server/slot-resolver.d.ts +70 -8
- package/dist/server/slot-resolver.d.ts.map +1 -1
- package/dist/server/ssr-bridge-types.d.ts +17 -0
- package/dist/server/ssr-bridge-types.d.ts.map +1 -1
- package/dist/server/ssr-entry.d.ts +0 -1
- package/dist/server/ssr-entry.d.ts.map +1 -1
- package/dist/server/ssr-wrappers.d.ts +24 -13
- package/dist/server/ssr-wrappers.d.ts.map +1 -1
- package/dist/server/state-tree-diff.d.ts +6 -27
- package/dist/server/state-tree-diff.d.ts.map +1 -1
- package/dist/server/static-generator.d.ts +6 -0
- package/dist/server/static-generator.d.ts.map +1 -1
- package/dist/server/static-not-found.d.ts +52 -0
- package/dist/server/static-not-found.d.ts.map +1 -0
- package/dist/server/status-code-resolver.d.ts +8 -1
- package/dist/server/status-code-resolver.d.ts.map +1 -1
- package/dist/server/tree-builder.d.ts +28 -36
- package/dist/server/tree-builder.d.ts.map +1 -1
- package/dist/server/types.d.ts +12 -7
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/utils/element-type.d.ts +40 -0
- package/dist/server/utils/element-type.d.ts.map +1 -0
- package/dist/shared/als-slots.d.ts +41 -0
- package/dist/shared/als-slots.d.ts.map +1 -0
- package/dist/shared/base-path.d.ts +56 -0
- package/dist/shared/base-path.d.ts.map +1 -0
- package/dist/shared/param-value.d.ts +80 -0
- package/dist/shared/param-value.d.ts.map +1 -0
- package/dist/shared/payload-root.d.ts +108 -0
- package/dist/shared/payload-root.d.ts.map +1 -0
- package/dist/shared/rsc-cache-key.d.ts +163 -0
- package/dist/shared/rsc-cache-key.d.ts.map +1 -0
- package/dist/shared/rsc-error-envelope.d.ts +25 -0
- package/dist/shared/rsc-error-envelope.d.ts.map +1 -0
- package/dist/shared/rsc-manifest.d.ts +28 -0
- package/dist/shared/rsc-manifest.d.ts.map +1 -0
- package/dist/shared/rsc-media-type.d.ts +40 -0
- package/dist/shared/rsc-media-type.d.ts.map +1 -0
- package/dist/shared/rsc-payload-path.d.ts +42 -0
- package/dist/shared/rsc-payload-path.d.ts.map +1 -0
- package/dist/shared/segment-info.d.ts +59 -0
- package/dist/shared/segment-info.d.ts.map +1 -0
- package/dist/shared/slot-params.d.ts +51 -0
- package/dist/shared/slot-params.d.ts.map +1 -0
- package/dist/shared/static-platform-files.d.ts +71 -0
- package/dist/shared/static-platform-files.d.ts.map +1 -0
- package/docs/api/30-api-server.mdx +1 -1
- package/docs/api/31-api-client.mdx +4 -2
- package/docs/api/33-api-search-params.mdx +38 -16
- package/docs/api/35-api-typescript.mdx +3 -3
- package/docs/api/36-cli.mdx +34 -7
- package/docs/learn/00-introduction.mdx +1 -1
- package/docs/learn/02-pages-and-layouts.mdx +2 -2
- package/docs/learn/05-typed-params.mdx +8 -8
- package/docs/learn/07-typed-routes.mdx +12 -7
- package/docs/learn/11-error-handling.mdx +18 -0
- package/docs/learn/12-client-navigation.mdx +2 -2
- package/docs/learn/14-deploying.mdx +23 -0
- package/docs/more/01-advanced-routing.mdx +173 -3
- package/docs/more/03-coming-from-nextjs.mdx +2 -2
- package/docs/more/04-metadata-and-fonts.mdx +1 -1
- package/docs/more/50-ai-agent-instructions.mdx +6 -4
- package/package.json +9 -6
- package/src/adapters/build-output-helper.ts +116 -3
- package/src/adapters/cloudflare.ts +90 -12
- package/src/adapters/compress-module.ts +79 -1
- package/src/adapters/fs-identity.ts +156 -0
- package/src/adapters/nitro.ts +6 -6
- package/src/adapters/shared.ts +196 -21
- package/src/adapters/types.ts +13 -1
- package/src/cache/fast-hash.ts +5 -0
- package/src/cli-check.ts +458 -0
- package/src/cli.ts +59 -24
- package/src/client/browser-entry/action-dispatch.ts +11 -5
- package/src/client/browser-entry/hydrate.ts +40 -29
- package/src/client/browser-entry/index.ts +15 -6
- package/src/client/browser-entry/post-hydration.ts +10 -9
- package/src/client/browser-entry/router-init.ts +104 -48
- package/src/client/browser-entry/rsc-stream.ts +11 -2
- package/src/client/error-boundary.tsx +85 -16
- package/src/client/history.ts +13 -6
- package/src/client/index.ts +14 -3
- package/src/client/internal.ts +4 -3
- package/src/client/link.tsx +120 -72
- package/src/client/navigation-api.ts +3 -3
- package/src/client/navigation-commit.ts +197 -0
- package/src/client/navigation-context.ts +40 -67
- package/src/client/navigation-root.tsx +326 -101
- package/src/client/params-context.ts +192 -0
- package/src/client/router-effects.ts +231 -0
- package/src/client/router-lifecycle.ts +288 -0
- package/src/client/router-pipeline.ts +393 -0
- package/src/client/router-ref.ts +1 -1
- package/src/client/router-skew.ts +30 -0
- package/src/client/router-types.ts +230 -0
- package/src/client/router.ts +243 -707
- package/src/client/rsc-fetch.ts +183 -106
- package/src/client/segment-cache.ts +129 -44
- package/src/client/ssr-data.ts +6 -0
- package/src/client/stale-client.ts +191 -0
- package/src/client/state.ts +14 -1
- package/src/client/top-loader.tsx +2 -1
- package/src/client/unload-guard.ts +34 -2
- package/src/client/use-cookie.ts +9 -2
- package/src/client/use-query-states.ts +102 -39
- package/src/client/use-router.ts +1 -1
- package/src/client/use-segment-params.ts +41 -18
- package/src/cookies/define-cookie.ts +6 -1
- package/src/index.ts +25 -4
- package/src/plugin-context.ts +58 -0
- package/src/plugins/adapter-build.ts +4 -0
- package/src/plugins/build-manifest.ts +34 -13
- package/src/plugins/entries.ts +4 -0
- package/src/plugins/fonts.ts +11 -8
- package/src/plugins/request-dep/analysis.ts +447 -0
- package/src/plugins/request-dep/index.ts +376 -0
- package/src/plugins/request-dep/origin.ts +310 -0
- package/src/plugins/routing.ts +97 -102
- package/src/plugins/shims.ts +0 -1
- package/src/plugins/static-build.ts +391 -95
- package/src/routing/codegen-shared.ts +3 -79
- package/src/routing/codegen-types.ts +28 -31
- package/src/routing/codegen-write.ts +139 -0
- package/src/routing/codegen.ts +86 -172
- package/src/routing/collision-probe.ts +438 -0
- package/src/routing/collision-spaces.ts +281 -0
- package/src/routing/convention-lint.ts +139 -40
- package/src/routing/export-detect.ts +151 -7
- package/src/routing/interception.ts +896 -50
- package/src/routing/link-codegen.ts +32 -65
- package/src/routing/manifest-codegen.ts +6 -62
- package/src/routing/scanner.ts +117 -92
- package/src/routing/segment-classify.ts +57 -0
- package/src/routing/segment-keys.ts +146 -0
- package/src/routing/slot-placement.ts +97 -0
- package/src/routing/types.ts +0 -6
- package/src/routing/walkers.ts +8 -0
- package/src/schema-bridge.ts +180 -58
- package/src/search-params/define.ts +108 -66
- package/src/search-params/index.ts +0 -1
- package/src/search-params/parse-total.ts +78 -0
- package/src/search-params/wrappers.ts +60 -11
- package/src/server/access-gate.tsx +60 -40
- package/src/server/action-handler.ts +4 -5
- package/src/server/actions.ts +6 -3
- package/src/server/als-registry.ts +18 -1
- package/src/server/build-manifest.ts +14 -1
- package/src/server/chain-url-parts.ts +163 -0
- package/src/server/children-interception.ts +115 -0
- package/src/server/compress.ts +9 -1
- package/src/server/default-status-page.ts +127 -0
- package/src/server/deny-boundary.ts +269 -41
- package/src/server/deny-renderer.ts +111 -39
- package/src/server/error-boundary-wrapper.ts +166 -79
- package/src/server/head-response.ts +54 -0
- package/src/server/index.ts +1 -3
- package/src/server/internal.ts +2 -2
- package/src/server/metadata-collector.ts +115 -0
- package/src/server/param-coercion.ts +51 -69
- package/src/server/pipeline-helpers.ts +2 -47
- package/src/server/pipeline-interception.ts +81 -32
- package/src/server/pipeline-outcome.ts +4 -5
- package/src/server/pipeline-phases.ts +77 -25
- package/src/server/pipeline.ts +57 -10
- package/src/server/prebuilt-runtime.ts +4 -4
- package/src/server/primitives.ts +25 -0
- package/src/server/publish-params.ts +42 -0
- package/src/server/request-context.ts +97 -18
- package/src/server/route-element-builder.ts +241 -253
- package/src/server/route-handler.ts +8 -8
- package/src/server/route-matcher.ts +21 -9
- package/src/server/rsc-cache-key-guard.ts +164 -0
- package/src/server/rsc-entry/api-handler.ts +6 -8
- package/src/server/rsc-entry/deny-fallback.ts +3 -2
- package/src/server/rsc-entry/error-renderer.ts +94 -35
- package/src/server/rsc-entry/helpers.ts +33 -28
- package/src/server/rsc-entry/index.ts +36 -33
- package/src/server/rsc-entry/render-route.ts +18 -10
- package/src/server/rsc-entry/revalidate-renderer.ts +3 -2
- package/src/server/rsc-entry/rsc-payload.ts +113 -40
- package/src/server/rsc-entry/rsc-stream.ts +29 -5
- package/src/server/rsc-entry/ssr-renderer.ts +38 -22
- package/src/server/skippable-prefix.ts +92 -0
- package/src/server/slot-interception.ts +168 -0
- package/src/server/slot-resolver.ts +263 -158
- package/src/server/ssr-bridge-types.ts +18 -0
- package/src/server/ssr-entry.ts +20 -10
- package/src/server/ssr-wrappers.tsx +33 -32
- package/src/server/state-tree-diff.ts +14 -55
- package/src/server/static-generator.ts +68 -29
- package/src/server/static-not-found.ts +134 -0
- package/src/server/status-code-resolver.ts +28 -11
- package/src/server/tree-builder.ts +35 -218
- package/src/server/types.ts +12 -7
- package/src/server/utils/element-type.ts +72 -0
- package/src/shared/als-slots.ts +72 -0
- package/src/shared/base-path.ts +80 -0
- package/src/shared/param-value.ts +244 -0
- package/src/shared/payload-root.ts +151 -0
- package/src/shared/rsc-cache-key.ts +269 -0
- package/src/shared/rsc-error-envelope.ts +31 -0
- package/src/shared/rsc-manifest.ts +29 -0
- package/src/shared/rsc-media-type.ts +43 -0
- package/src/shared/rsc-payload-path.ts +45 -0
- package/src/shared/segment-info.ts +60 -0
- package/src/shared/slot-params.ts +111 -0
- package/src/shared/static-platform-files.ts +75 -0
- package/dist/_chunks/build-output-helper-DOGYFb_X.js +0 -196
- package/dist/_chunks/build-output-helper-DOGYFb_X.js.map +0 -1
- package/dist/_chunks/cache-api-B-lhk9p4.js.map +0 -1
- package/dist/_chunks/canonicalize-DQHyFClh.js.map +0 -1
- package/dist/_chunks/cli-schema-sync-BTWEKJXo.js +0 -668
- package/dist/_chunks/cli-schema-sync-BTWEKJXo.js.map +0 -1
- package/dist/_chunks/define-COtkxMRT.js +0 -191
- package/dist/_chunks/define-COtkxMRT.js.map +0 -1
- package/dist/_chunks/define-c4au4I9R.js +0 -82
- package/dist/_chunks/define-c4au4I9R.js.map +0 -1
- package/dist/_chunks/fast-hash-D6hIVt1Y.js.map +0 -1
- package/dist/_chunks/logger-AWfuX-KJ.js.map +0 -1
- package/dist/_chunks/navigation-root-bUDZLw74.js +0 -124
- package/dist/_chunks/navigation-root-bUDZLw74.js.map +0 -1
- package/dist/_chunks/plugin-context---kTF5v8.js.map +0 -1
- package/dist/_chunks/registry-DbJPKoBp.js +0 -20
- package/dist/_chunks/registry-DbJPKoBp.js.map +0 -1
- package/dist/_chunks/router-ref-CtmF-aPv.js.map +0 -1
- package/dist/_chunks/schema-bridge-DT_Tn0Xf.js +0 -119
- package/dist/_chunks/schema-bridge-DT_Tn0Xf.js.map +0 -1
- package/dist/_chunks/segment-classify-Byy425ng.js.map +0 -1
- package/dist/_chunks/segment-context-ZDnXDkbz.js +0 -34
- package/dist/_chunks/segment-context-ZDnXDkbz.js.map +0 -1
- package/dist/_chunks/ssr-data-BOWsq18U.js.map +0 -1
- package/dist/_chunks/use-query-states-DFvWd-EA.js.map +0 -1
- package/dist/_chunks/use-segment-params-D1CzlgBo.js +0 -151
- package/dist/_chunks/use-segment-params-D1CzlgBo.js.map +0 -1
- package/dist/_chunks/walkers-_6zKFlch.js +0 -1002
- package/dist/_chunks/walkers-_6zKFlch.js.map +0 -1
- package/dist/client/error-boundary.js.map +0 -1
- package/dist/plugins/request-dep.d.ts +0 -32
- package/dist/plugins/request-dep.d.ts.map +0 -1
- package/dist/search-params/registry.d.ts +0 -20
- package/dist/search-params/registry.d.ts.map +0 -1
- package/dist/segment-params/define.d.ts +0 -89
- package/dist/segment-params/define.d.ts.map +0 -1
- package/dist/segment-params/index.d.ts +0 -3
- package/dist/segment-params/index.d.ts.map +0 -1
- package/dist/segment-params/index.js +0 -2
- package/src/plugins/request-dep.ts +0 -499
- package/src/search-params/registry.ts +0 -31
- package/src/segment-params/define.ts +0 -249
- package/src/segment-params/index.ts +0 -9
package/src/plugins/routing.ts
CHANGED
|
@@ -9,21 +9,12 @@
|
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
import type { Plugin, ViteDevServer } from 'vite';
|
|
12
|
-
import { writeFile, mkdir } from 'node:fs/promises';
|
|
13
12
|
import { join } from 'node:path';
|
|
14
13
|
import { scanRoutes } from '../routing/scanner.js';
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
buildDirToRouteMap,
|
|
18
|
-
writeSegmentTypes,
|
|
19
|
-
type SegmentInfo,
|
|
20
|
-
} from '../routing/segment-codegen.js';
|
|
14
|
+
import { buildDirToRouteMap, type SegmentInfo } from '../routing/segment-codegen.js';
|
|
15
|
+
import { writeRouteCodegen, flushCodegenWrites } from '../routing/codegen-write.js';
|
|
21
16
|
import { validateSchemaAgainstRoutes } from '../routing/schema-validation.js';
|
|
22
|
-
import {
|
|
23
|
-
generateManifestModule,
|
|
24
|
-
generateSearchParamsRegistryModule,
|
|
25
|
-
generateSchemaModule,
|
|
26
|
-
} from '../routing/manifest-codegen.js';
|
|
17
|
+
import { generateManifestModule, generateSchemaModule } from '../routing/manifest-codegen.js';
|
|
27
18
|
import {
|
|
28
19
|
lintConventions,
|
|
29
20
|
checkAppDirExists,
|
|
@@ -34,21 +25,6 @@ import type { PluginContext } from '../plugin-context.js';
|
|
|
34
25
|
const VIRTUAL_MODULE_ID = 'virtual:timber-route-manifest';
|
|
35
26
|
const RESOLVED_VIRTUAL_ID = `\0${VIRTUAL_MODULE_ID}`;
|
|
36
27
|
|
|
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
28
|
// TIM-931: Schema virtual module.
|
|
53
29
|
//
|
|
54
30
|
// When app/schema.ts exists, this module imports it and resolves the
|
|
@@ -69,68 +45,26 @@ const SEGMENT_PREFIX = '\0$segment:';
|
|
|
69
45
|
* File convention names we track for changes that require manifest regeneration.
|
|
70
46
|
*/
|
|
71
47
|
const ROUTE_FILE_PATTERNS =
|
|
72
|
-
/\/(page|layout|middleware|access|route|error|global-error|default|denied|
|
|
48
|
+
/\/(page|layout|middleware|access|route|error|global-error|default|denied|schema|\d{3}|[45]xx|sitemap|robots|manifest|favicon|icon|opengraph-image|apple-icon)\./;
|
|
73
49
|
|
|
74
50
|
/**
|
|
75
51
|
* Create the timber-routing Vite plugin.
|
|
76
52
|
*
|
|
77
53
|
* Hooks: resolveId, load, buildStart, configureServer
|
|
78
54
|
*/
|
|
79
|
-
/** Absolute path to the generated route map declaration file. */
|
|
80
|
-
const CODEGEN_OUTPUT = '.timber/timber-routes.d.ts';
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* Content of the timber-env.d.ts file written to the project root.
|
|
84
|
-
*
|
|
85
|
-
* Uses a triple-slash reference so TypeScript auto-discovers the generated
|
|
86
|
-
* route map without the user needing to edit tsconfig.json — same pattern
|
|
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.
|
|
99
|
-
*/
|
|
100
|
-
const TIMBER_ENV_DTS = [
|
|
101
|
-
'// This file is auto-generated by timber.js. Do not edit.',
|
|
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 */',
|
|
105
|
-
'/// <reference path=".timber/timber-routes.d.ts" />',
|
|
106
|
-
'/// <reference types="vite/client" />',
|
|
107
|
-
'',
|
|
108
|
-
].join('\n');
|
|
109
|
-
|
|
110
55
|
/**
|
|
111
56
|
* Write the generated route map and the timber-env.d.ts reference file.
|
|
112
57
|
*
|
|
113
|
-
*
|
|
114
|
-
*
|
|
58
|
+
* Not awaited, to avoid blocking the hot path — use `flushCodegenWrites()` to
|
|
59
|
+
* wait for the writes to land. Failures are logged, not thrown: a missing .d.ts
|
|
60
|
+
* is a developer UX issue in dev/build, not a runtime failure. (`timber check`
|
|
61
|
+
* calls `writeRouteCodegen` directly and does treat a failure as fatal.)
|
|
115
62
|
*/
|
|
116
63
|
function writeCodegen(ctx: PluginContext): void {
|
|
117
64
|
if (!ctx.routeTree) return;
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
const envPath = join(ctx.root, 'timber-env.d.ts');
|
|
122
|
-
mkdir(timberDir, { recursive: true })
|
|
123
|
-
.then(() =>
|
|
124
|
-
Promise.all([
|
|
125
|
-
writeFile(routesPath, content, 'utf-8'),
|
|
126
|
-
writeFile(envPath, TIMBER_ENV_DTS, 'utf-8'),
|
|
127
|
-
writeSegmentTypes(ctx.routeTree!, ctx.appDir, ctx.root),
|
|
128
|
-
])
|
|
129
|
-
)
|
|
130
|
-
.catch((err) => {
|
|
131
|
-
// Non-fatal — types are a dev convenience, but log so issues are visible
|
|
132
|
-
console.warn('[timber] Failed to write codegen output:', err);
|
|
133
|
-
});
|
|
65
|
+
void writeRouteCodegen(ctx.routeTree, ctx.appDir, ctx.root).catch((err) => {
|
|
66
|
+
console.warn('[timber] Failed to write codegen output:', err);
|
|
67
|
+
});
|
|
134
68
|
}
|
|
135
69
|
|
|
136
70
|
export function timberRouting(ctx: PluginContext): Plugin {
|
|
@@ -160,10 +94,26 @@ export function timberRouting(ctx: PluginContext): Plugin {
|
|
|
160
94
|
}
|
|
161
95
|
|
|
162
96
|
ctx.timer.start('route-scan');
|
|
163
|
-
|
|
97
|
+
const tree = scanRoutes(ctx.appDir, {
|
|
164
98
|
pageExtensions: ctx.config.pageExtensions,
|
|
165
99
|
});
|
|
166
100
|
ctx.timer.end('route-scan');
|
|
101
|
+
|
|
102
|
+
// Lint conventions (empty app, missing methods, missing root layout).
|
|
103
|
+
// Runs on the scanned tree *before* it is published: error-level findings
|
|
104
|
+
// are proven-fatal misconfigurations — the app cannot render at all — so
|
|
105
|
+
// the tree must not reach codegen, the manifest, or a live dev server's
|
|
106
|
+
// module graph. Fail loudly rather than let the developer discover it as
|
|
107
|
+
// an unattributed React error on an unrelated page (TIM-1329). Never
|
|
108
|
+
// deduplicated against `warnedFiles`: an error must not be downgraded to
|
|
109
|
+
// silence by an earlier scan in the same process.
|
|
110
|
+
const conventionWarnings = lintConventions(tree, ctx.appDir);
|
|
111
|
+
const fatal = conventionWarnings.filter((w) => w.level === 'error');
|
|
112
|
+
if (fatal.length > 0) {
|
|
113
|
+
throw new Error(formatConventionWarnings(fatal, { color: false }));
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
ctx.routeTree = tree;
|
|
167
117
|
dirToRoute = buildDirToRouteMap(ctx.routeTree, ctx.appDir);
|
|
168
118
|
writeCodegen(ctx);
|
|
169
119
|
|
|
@@ -172,8 +122,6 @@ export function timberRouting(ctx: PluginContext): Plugin {
|
|
|
172
122
|
// See design/41-global-params.md §Auto-Scaffolding
|
|
173
123
|
warnSchemaValidation(ctx);
|
|
174
124
|
|
|
175
|
-
// Lint conventions (empty app, missing methods, missing root layout)
|
|
176
|
-
const conventionWarnings = lintConventions(ctx.routeTree, ctx.appDir);
|
|
177
125
|
const newConventionWarnings = conventionWarnings.filter((w) => !warnedFiles.has(w.id));
|
|
178
126
|
if (newConventionWarnings.length > 0) {
|
|
179
127
|
for (const w of newConventionWarnings) warnedFiles.add(w.id);
|
|
@@ -206,14 +154,6 @@ export function timberRouting(ctx: PluginContext): Plugin {
|
|
|
206
154
|
return RESOLVED_VIRTUAL_ID;
|
|
207
155
|
}
|
|
208
156
|
|
|
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
157
|
// TIM-931: Schema virtual module
|
|
218
158
|
if (cleanId === SCHEMA_ID || cleanId.endsWith(`/${SCHEMA_ID}`)) {
|
|
219
159
|
return RESOLVED_SCHEMA_ID;
|
|
@@ -253,13 +193,6 @@ export function timberRouting(ctx: PluginContext): Plugin {
|
|
|
253
193
|
return generateManifestModule(ctx.routeTree!, ctx.root);
|
|
254
194
|
}
|
|
255
195
|
|
|
256
|
-
if (id === RESOLVED_SEARCH_PARAMS_REGISTRY_ID) {
|
|
257
|
-
if (!ctx.routeTree) {
|
|
258
|
-
rescan();
|
|
259
|
-
}
|
|
260
|
-
return generateSearchParamsRegistryModule(ctx.routeTree!);
|
|
261
|
-
}
|
|
262
|
-
|
|
263
196
|
if (id === RESOLVED_SCHEMA_ID) {
|
|
264
197
|
return generateSchemaModule(ctx.appDir);
|
|
265
198
|
}
|
|
@@ -288,6 +221,19 @@ export function timberRouting(ctx: PluginContext): Plugin {
|
|
|
288
221
|
rescan();
|
|
289
222
|
},
|
|
290
223
|
|
|
224
|
+
/**
|
|
225
|
+
* Wait for the codegen writes started by `buildStart` before the build
|
|
226
|
+
* reports done.
|
|
227
|
+
*
|
|
228
|
+
* `writeCodegen` runs unawaited so route scanning never blocks on disk.
|
|
229
|
+
* Without this the build can finish — and the CLI can exit — while the
|
|
230
|
+
* generated `.d.ts` files are still being written, leaving a project root
|
|
231
|
+
* with no route types after an apparently successful build.
|
|
232
|
+
*/
|
|
233
|
+
closeBundle() {
|
|
234
|
+
return flushCodegenWrites();
|
|
235
|
+
},
|
|
236
|
+
|
|
291
237
|
/**
|
|
292
238
|
* Set up file watcher in dev mode.
|
|
293
239
|
*
|
|
@@ -305,6 +251,59 @@ export function timberRouting(ctx: PluginContext): Plugin {
|
|
|
305
251
|
/** Snapshot of the last generated manifest, used to detect structural changes. */
|
|
306
252
|
let lastManifest = ctx.routeTree ? generateManifestModule(ctx.routeTree, ctx.root) : '';
|
|
307
253
|
|
|
254
|
+
/**
|
|
255
|
+
* Rescan without letting a rejected route tree kill the dev server.
|
|
256
|
+
*
|
|
257
|
+
* `rescan()` throws on hard misconfigurations — duplicate conventions,
|
|
258
|
+
* route collisions, a status file that is not a client component. Those
|
|
259
|
+
* throws are correct at startup and in `vite build`, but here they run
|
|
260
|
+
* inside a chokidar listener, where an exception is an unhandled
|
|
261
|
+
* rejection that takes the process down mid-edit. Report and keep the
|
|
262
|
+
* last good tree so the server stays up and the fix is one save away.
|
|
263
|
+
*
|
|
264
|
+
* Returns false when the scan failed, so callers skip the manifest
|
|
265
|
+
* regeneration that would otherwise publish a stale tree as fresh.
|
|
266
|
+
*/
|
|
267
|
+
/**
|
|
268
|
+
* True while the last rescan is still failing.
|
|
269
|
+
*
|
|
270
|
+
* Recovery has to force a reload even when the manifest is byte-identical.
|
|
271
|
+
* Adding a missing `'use client'` back to a status file changes no route
|
|
272
|
+
* metadata, so the content-change path would send nothing and leave the
|
|
273
|
+
* error overlay on screen over a page that is now fine.
|
|
274
|
+
*/
|
|
275
|
+
let scanFailed = false;
|
|
276
|
+
|
|
277
|
+
const rescanSafely = (): boolean => {
|
|
278
|
+
try {
|
|
279
|
+
rescan();
|
|
280
|
+
if (scanFailed) {
|
|
281
|
+
scanFailed = false;
|
|
282
|
+
// Force the reload: see `scanFailed`.
|
|
283
|
+
lastManifest = ctx.routeTree ? generateManifestModule(ctx.routeTree, ctx.root) : '';
|
|
284
|
+
invalidateManifest(devServer);
|
|
285
|
+
}
|
|
286
|
+
return true;
|
|
287
|
+
} catch (err) {
|
|
288
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
289
|
+
process.stderr.write(
|
|
290
|
+
`[timber] Route scan failed — keeping previous routes.\n${message}\n`
|
|
291
|
+
);
|
|
292
|
+
scanFailed = true;
|
|
293
|
+
|
|
294
|
+
// The terminal is not the only surface that needs this. Keeping the
|
|
295
|
+
// previous tree keeps the *server* alive, but it does not un-edit the
|
|
296
|
+
// file: Vite still re-transforms it, so the very next render hits the
|
|
297
|
+
// failure this scan just diagnosed — and the browser's version of it
|
|
298
|
+
// names nothing. Put the diagnosis where the developer is looking.
|
|
299
|
+
devServer.hot.send({
|
|
300
|
+
type: 'error',
|
|
301
|
+
err: { message, stack: '', plugin: 'timber-routing' },
|
|
302
|
+
});
|
|
303
|
+
return false;
|
|
304
|
+
}
|
|
305
|
+
};
|
|
306
|
+
|
|
308
307
|
/**
|
|
309
308
|
* Handle a route-significant file being added or removed.
|
|
310
309
|
* Always triggers a full-reload since the route tree structure changed.
|
|
@@ -313,7 +312,7 @@ export function timberRouting(ctx: PluginContext): Plugin {
|
|
|
313
312
|
if (!filePath.startsWith(ctx.appDir)) return;
|
|
314
313
|
if (!ROUTE_FILE_PATTERNS.test(filePath)) return;
|
|
315
314
|
|
|
316
|
-
|
|
315
|
+
if (!rescanSafely()) return;
|
|
317
316
|
lastManifest = ctx.routeTree ? generateManifestModule(ctx.routeTree, ctx.root) : '';
|
|
318
317
|
invalidateManifest(devServer);
|
|
319
318
|
};
|
|
@@ -330,7 +329,7 @@ export function timberRouting(ctx: PluginContext): Plugin {
|
|
|
330
329
|
if (!filePath.startsWith(ctx.appDir)) return;
|
|
331
330
|
if (!ROUTE_FILE_PATTERNS.test(filePath)) return;
|
|
332
331
|
|
|
333
|
-
|
|
332
|
+
if (!rescanSafely()) return;
|
|
334
333
|
const newManifest = ctx.routeTree ? generateManifestModule(ctx.routeTree, ctx.root) : '';
|
|
335
334
|
if (newManifest !== lastManifest) {
|
|
336
335
|
lastManifest = newManifest;
|
|
@@ -392,11 +391,7 @@ function invalidateManifest(server: ViteDevServer): void {
|
|
|
392
391
|
const env = server.environments[envName];
|
|
393
392
|
if (!env?.moduleGraph) continue;
|
|
394
393
|
|
|
395
|
-
for (const virtualId of [
|
|
396
|
-
RESOLVED_VIRTUAL_ID,
|
|
397
|
-
RESOLVED_SEARCH_PARAMS_REGISTRY_ID,
|
|
398
|
-
RESOLVED_SCHEMA_ID,
|
|
399
|
-
]) {
|
|
394
|
+
for (const virtualId of [RESOLVED_VIRTUAL_ID, RESOLVED_SCHEMA_ID]) {
|
|
400
395
|
const mod = env.moduleGraph.getModuleById(virtualId);
|
|
401
396
|
if (mod) {
|
|
402
397
|
env.moduleGraph.invalidateModule(mod);
|
package/src/plugins/shims.ts
CHANGED
|
@@ -55,7 +55,6 @@ export const SUBPATH_SRC_MAP: Record<string, string> = {
|
|
|
55
55
|
'cookies': 'cookies/index.ts',
|
|
56
56
|
'params': 'params/index.ts',
|
|
57
57
|
'search-params': 'search-params/index.ts',
|
|
58
|
-
'segment-params': 'segment-params/index.ts',
|
|
59
58
|
|
|
60
59
|
'cache/stores/memory': 'cache/stores/memory.ts',
|
|
61
60
|
'cache/stores/redis': 'cache/stores/redis.ts',
|