@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
|
@@ -6,13 +6,17 @@
|
|
|
6
6
|
* 2. No RSC payload: deferred root creation via installDeferredNavigation
|
|
7
7
|
*
|
|
8
8
|
* Pre-hydration ordering contract (MUST execute in this order):
|
|
9
|
-
* 1. initRouter()
|
|
10
|
-
*
|
|
11
|
-
* 2.
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
9
|
+
* 1. initRouter() — creates the global router so useRouter()
|
|
10
|
+
* works during render
|
|
11
|
+
* 2. setNavigationState() — populates pathname/search so usePathname()
|
|
12
|
+
* returns correct values during hydration
|
|
13
|
+
* 3. hydrateRoot() — synchronously executes component render
|
|
14
|
+
* functions that depend on steps 1-2
|
|
15
|
+
*
|
|
16
|
+
* Params are not part of this sequence. They arrive on the payload root and
|
|
17
|
+
* are published by `PayloadRoot` at the top of the tree, so
|
|
18
|
+
* `useSegmentParams()` is correct during hydration without anything having to
|
|
19
|
+
* run before it (TIM-1294, TIM-1297).
|
|
16
20
|
*
|
|
17
21
|
* See design/19-client-navigation.md §"NavigationContext"
|
|
18
22
|
*/
|
|
@@ -27,8 +31,15 @@ interface HydrateOptions {
|
|
|
27
31
|
};
|
|
28
32
|
}
|
|
29
33
|
/**
|
|
30
|
-
* Run the pre-hydration sequence:
|
|
31
|
-
*
|
|
34
|
+
* Run the pre-hydration sequence: set navigation state from the address bar.
|
|
35
|
+
* Must be called AFTER initRouter().
|
|
36
|
+
*
|
|
37
|
+
* Params are no longer seeded here. They used to arrive on two inline scripts
|
|
38
|
+
* that had to execute before `hydrateRoot()`, because hydration synchronously
|
|
39
|
+
* renders components that read them. They now ride the payload root, and the
|
|
40
|
+
* provider that publishes them renders before its own descendants — so the
|
|
41
|
+
* ordering the step existed to guarantee is now a property of the tree rather
|
|
42
|
+
* than of the bootstrap sequence (TIM-1294, TIM-1297).
|
|
32
43
|
*/
|
|
33
44
|
export declare function runPreHydration(): void;
|
|
34
45
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hydrate.d.ts","sourceRoot":"","sources":["../../../src/client/browser-entry/hydrate.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"hydrate.d.ts","sourceRoot":"","sources":["../../../src/client/browser-entry/hydrate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAeH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAwCvD,UAAU,cAAc;IACtB,qDAAqD;IACrD,SAAS,EAAE,eAAe,GAAG,IAAI,CAAC;IAClC,gDAAgD;IAChD,MAAM,EAAE;QAAE,SAAS,CAAC,EAAE,eAAe,CAAA;KAAE,CAAC;CACzC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAKtC;AAED;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,cAAc,GAAG,IAAI,CAoFtE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/browser-entry/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/browser-entry/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG"}
|
|
@@ -12,15 +12,18 @@
|
|
|
12
12
|
*/
|
|
13
13
|
import type { RouterInstance } from '#client-internal';
|
|
14
14
|
import type { NavigationApiController } from '../navigation-api.js';
|
|
15
|
+
import type { ParamsSource } from '../../shared/payload-root.js';
|
|
15
16
|
interface PostHydrationOptions {
|
|
16
17
|
router: RouterInstance;
|
|
17
18
|
navApiController: NavigationApiController | null;
|
|
18
19
|
/** Decoded RSC element from initial SSR (null if no RSC payload) */
|
|
19
20
|
initialElement: unknown;
|
|
21
|
+
/** The params that payload published, from the same decode. */
|
|
22
|
+
initialParams: ParamsSource;
|
|
20
23
|
}
|
|
21
24
|
/**
|
|
22
25
|
* Wire up post-hydration event handlers and state.
|
|
23
26
|
*/
|
|
24
|
-
export declare function setupPostHydration({ router, navApiController, initialElement, }: PostHydrationOptions): void;
|
|
27
|
+
export declare function setupPostHydration({ router, navApiController, initialElement, initialParams, }: PostHydrationOptions): void;
|
|
25
28
|
export {};
|
|
26
29
|
//# sourceMappingURL=post-hydration.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post-hydration.d.ts","sourceRoot":"","sources":["../../../src/client/browser-entry/post-hydration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"post-hydration.d.ts","sourceRoot":"","sources":["../../../src/client/browser-entry/post-hydration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAEpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAEjE,UAAU,oBAAoB;IAC5B,MAAM,EAAE,cAAc,CAAC;IACvB,gBAAgB,EAAE,uBAAuB,GAAG,IAAI,CAAC;IACjD,oEAAoE;IACpE,cAAc,EAAE,OAAO,CAAC;IACxB,+DAA+D;IAC/D,aAAa,EAAE,YAAY,CAAC;CAC7B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,MAAM,EACN,gBAAgB,EAChB,cAAc,EACd,aAAa,GACd,EAAE,oBAAoB,GAAG,IAAI,CAqF7B"}
|
|
@@ -6,10 +6,13 @@
|
|
|
6
6
|
*
|
|
7
7
|
* See design/19-client-navigation.md §"Navigation API Integration"
|
|
8
8
|
*/
|
|
9
|
+
import { type ParamsSource } from '../../shared/payload-root.js';
|
|
9
10
|
import type { RouterInstance } from '#client-internal';
|
|
10
11
|
import { type NavigationApiController } from '../navigation-api.js';
|
|
11
12
|
export interface RouterInitOptions {
|
|
12
13
|
initialElement?: unknown;
|
|
14
|
+
/** The params the hydration payload published, beside `initialElement`. */
|
|
15
|
+
initialParams?: ParamsSource;
|
|
13
16
|
clientSegmentCache?: boolean;
|
|
14
17
|
}
|
|
15
18
|
export interface RouterInitResult {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router-init.d.ts","sourceRoot":"","sources":["../../../src/client/browser-entry/router-init.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAc,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAUnE,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,sBAAsB,CAAC;AAG9B,MAAM,WAAW,iBAAiB;IAChC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,cAAc,CAAC;IACvB,gBAAgB,EAAE,uBAAuB,GAAG,IAAI,CAAC;CAClD;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,gBAAgB,
|
|
1
|
+
{"version":3,"file":"router-init.d.ts","sourceRoot":"","sources":["../../../src/client/browser-entry/router-init.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,EAAuB,KAAK,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAEtF,OAAO,KAAK,EAAc,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAUnE,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,sBAAsB,CAAC;AAG9B,MAAM,WAAW,iBAAiB;IAChC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,2EAA2E;IAC3E,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,cAAc,CAAC;IACvB,gBAAgB,EAAE,uBAAuB,GAAG,IAAI,CAAC;CAClD;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,gBAAgB,CAmShF"}
|
|
@@ -10,9 +10,17 @@
|
|
|
10
10
|
*
|
|
11
11
|
* See design/18-build-system.md §"Entry Files"
|
|
12
12
|
*/
|
|
13
|
+
import { type PublishedParams } from '../../shared/payload-root.js';
|
|
13
14
|
export interface RscStreamResult {
|
|
14
15
|
/** The decoded RSC element (thenable/lazy — resolved by React during render) */
|
|
15
16
|
element: unknown;
|
|
17
|
+
/**
|
|
18
|
+
* The params the same payload published beside that tree. A promise: the
|
|
19
|
+
* inlined Flight stream is still arriving when this runs, and hydration must
|
|
20
|
+
* not wait for it. `PayloadRoot` suspends on it at the position React was
|
|
21
|
+
* going to suspend on `element` anyway (TIM-1297).
|
|
22
|
+
*/
|
|
23
|
+
params: Promise<PublishedParams>;
|
|
16
24
|
}
|
|
17
25
|
/**
|
|
18
26
|
* Create the RSC payload stream from server-inlined `__timber_f` chunks.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rsc-stream.d.ts","sourceRoot":"","sources":["../../../src/client/browser-entry/rsc-stream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"rsc-stream.d.ts","sourceRoot":"","sources":["../../../src/client/browser-entry/rsc-stream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAItF,MAAM,WAAW,eAAe;IAC9B,gFAAgF;IAChF,OAAO,EAAE,OAAO,CAAC;IACjB;;;;;OAKG;IACH,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;CAClC;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,IAAI,eAAe,GAAG,IAAI,CAgI/D"}
|
|
@@ -38,6 +38,12 @@ export interface TimberErrorBoundaryProps {
|
|
|
38
38
|
* graceful degradation — they must NOT change the HTTP status code.
|
|
39
39
|
*/
|
|
40
40
|
isSlotBoundary?: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Segment key of the segment that declared this boundary. Only meaningful
|
|
43
|
+
* against a deny digest carrying an `ownerKey`. See the decline rule in
|
|
44
|
+
* `render()` and TIM-1356.
|
|
45
|
+
*/
|
|
46
|
+
segmentKey?: string;
|
|
41
47
|
children: ReactNode;
|
|
42
48
|
}
|
|
43
49
|
interface TimberErrorBoundaryState {
|
|
@@ -47,6 +53,7 @@ interface TimberErrorBoundaryState {
|
|
|
47
53
|
export declare class TimberErrorBoundary extends Component<TimberErrorBoundaryProps, TimberErrorBoundaryState> {
|
|
48
54
|
constructor(props: TimberErrorBoundaryProps);
|
|
49
55
|
static getDerivedStateFromError(error: Error): TimberErrorBoundaryState;
|
|
56
|
+
componentDidCatch(error: Error): void;
|
|
50
57
|
componentDidUpdate(prevProps: TimberErrorBoundaryProps): void;
|
|
51
58
|
/** Reset the error state so children re-render. */
|
|
52
59
|
private reset;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-boundary.d.ts","sourceRoot":"","sources":["../../src/client/error-boundary.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,SAAS,EAAiB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"error-boundary.d.ts","sourceRoot":"","sources":["../../src/client/error-boundary.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,SAAS,EAAiB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AA4CjE,MAAM,WAAW,wBAAwB;IACvC,uDAAuD;IACvD,iBAAiB,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,SAAS,CAAC;IACtD;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,UAAU,wBAAwB;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB;AAkBD,qBAAa,mBAAoB,SAAQ,SAAS,CAChD,wBAAwB,EACxB,wBAAwB,CACzB;IACC,YAAY,KAAK,EAAE,wBAAwB,EAG1C;IAED,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,KAAK,GAAG,wBAAwB,CAUtE;IAED,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAWpC;IAED,kBAAkB,CAAC,SAAS,EAAE,wBAAwB,GAAG,IAAI,CAO5D;IAED,mDAAmD;IACnD,OAAO,CAAC,KAAK,CAEX;IAEF,MAAM,IAAI,SAAS,CAuKlB;CACF"}
|
|
@@ -1,165 +1,4 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
"use client";
|
|
3
|
-
import {
|
|
4
|
-
import { n as getRouterOrNull } from "../_chunks/router-ref-CtmF-aPv.js";
|
|
5
|
-
import { Component, createElement } from "react";
|
|
6
|
-
//#region src/client/error-boundary.tsx
|
|
7
|
-
/**
|
|
8
|
-
* Framework-injected React error boundary.
|
|
9
|
-
*
|
|
10
|
-
* Catches errors thrown by children and renders a fallback component
|
|
11
|
-
* with the appropriate props based on error type:
|
|
12
|
-
* - DenySignal (4xx) → { status, dangerouslyPassData }
|
|
13
|
-
* - RenderError (5xx) → { error, digest, reset }
|
|
14
|
-
* - Unhandled error → { error, digest: null, reset }
|
|
15
|
-
*
|
|
16
|
-
* The `status` prop controls which errors this boundary catches:
|
|
17
|
-
* - Specific code (e.g. 403) → only that status
|
|
18
|
-
* - Category (400) → any 4xx
|
|
19
|
-
* - Category (500) → any 5xx
|
|
20
|
-
* - Omitted → catches everything (error.tsx behavior)
|
|
21
|
-
*
|
|
22
|
-
* See design/10-error-handling.md §"Status-Code Files"
|
|
23
|
-
*/
|
|
24
|
-
var _isUnloading = false;
|
|
25
|
-
if (typeof window !== "undefined") {
|
|
26
|
-
window.addEventListener("beforeunload", () => {
|
|
27
|
-
_isUnloading = true;
|
|
28
|
-
});
|
|
29
|
-
window.addEventListener("pagehide", () => {
|
|
30
|
-
_isUnloading = true;
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
var _handledRedirects = /* @__PURE__ */ new WeakSet();
|
|
34
|
-
var _pendingRedirectLocation = null;
|
|
35
|
-
var TimberErrorBoundary = class extends Component {
|
|
36
|
-
constructor(props) {
|
|
37
|
-
super(props);
|
|
38
|
-
this.state = {
|
|
39
|
-
hasError: false,
|
|
40
|
-
error: null
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
static getDerivedStateFromError(error) {
|
|
44
|
-
if (_isUnloading) return {
|
|
45
|
-
hasError: false,
|
|
46
|
-
error: null
|
|
47
|
-
};
|
|
48
|
-
return {
|
|
49
|
-
hasError: true,
|
|
50
|
-
error
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
componentDidUpdate(prevProps) {
|
|
54
|
-
if (this.state.hasError && prevProps.children !== this.props.children) this.setState({
|
|
55
|
-
hasError: false,
|
|
56
|
-
error: null
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
/** Reset the error state so children re-render. */
|
|
60
|
-
reset = () => {
|
|
61
|
-
this.setState({
|
|
62
|
-
hasError: false,
|
|
63
|
-
error: null
|
|
64
|
-
});
|
|
65
|
-
};
|
|
66
|
-
render() {
|
|
67
|
-
if (!this.state.hasError || !this.state.error) return this.props.children;
|
|
68
|
-
const error = this.state.error;
|
|
69
|
-
const parsed = parseDigest(error);
|
|
70
|
-
if (parsed?.type === "redirect") {
|
|
71
|
-
if (typeof window === "undefined") throw error;
|
|
72
|
-
if (!(_handledRedirects.has(error) || _pendingRedirectLocation === parsed.location)) {
|
|
73
|
-
_handledRedirects.add(error);
|
|
74
|
-
const router = getRouterOrNull();
|
|
75
|
-
if (router) {
|
|
76
|
-
_pendingRedirectLocation = parsed.location;
|
|
77
|
-
queueMicrotask(() => {
|
|
78
|
-
router.navigate(parsed.location, { replace: true }).catch(() => {
|
|
79
|
-
window.location.href = parsed.location;
|
|
80
|
-
}).finally(() => {
|
|
81
|
-
_pendingRedirectLocation = null;
|
|
82
|
-
});
|
|
83
|
-
});
|
|
84
|
-
} else window.location.href = parsed.location;
|
|
85
|
-
}
|
|
86
|
-
return null;
|
|
87
|
-
}
|
|
88
|
-
if (this.props.status != null) {
|
|
89
|
-
const errorStatus = getErrorStatus(parsed, error);
|
|
90
|
-
if (errorStatus == null || !statusMatches(this.props.status, errorStatus)) throw error;
|
|
91
|
-
}
|
|
92
|
-
if (parsed?.type === "deny") {
|
|
93
|
-
if (this.props.fallbackElement == null || this.props.isSlotBoundary) {
|
|
94
|
-
const ssrData = getSsrData();
|
|
95
|
-
if (ssrData?._navContext) {
|
|
96
|
-
ssrData._navContext._denyHandledByBoundary = true;
|
|
97
|
-
if (!this.props.isSlotBoundary) ssrData._navContext.statusCode = parsed.status;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
if (this.props.fallbackElement != null) return this.props.fallbackElement;
|
|
102
|
-
if (parsed?.type === "deny") {
|
|
103
|
-
if (this.props.status != null) return createElement(this.props.fallbackComponent, {
|
|
104
|
-
status: parsed.status,
|
|
105
|
-
dangerouslyPassData: parsed.data
|
|
106
|
-
});
|
|
107
|
-
return createElement(this.props.fallbackComponent, {
|
|
108
|
-
error,
|
|
109
|
-
digest: null,
|
|
110
|
-
reset: this.reset,
|
|
111
|
-
status: parsed.status,
|
|
112
|
-
dangerouslyPassData: parsed.data
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
const digest = parsed?.type === "render-error" ? {
|
|
116
|
-
code: parsed.code,
|
|
117
|
-
data: parsed.data
|
|
118
|
-
} : null;
|
|
119
|
-
return createElement(this.props.fallbackComponent, {
|
|
120
|
-
error,
|
|
121
|
-
digest,
|
|
122
|
-
reset: this.reset
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
};
|
|
126
|
-
/**
|
|
127
|
-
* Parse the structured digest from the error.
|
|
128
|
-
* React sets `error.digest` from the string returned by RSC's onError.
|
|
129
|
-
*/
|
|
130
|
-
function parseDigest(error) {
|
|
131
|
-
const raw = error.digest;
|
|
132
|
-
if (typeof raw !== "string") return null;
|
|
133
|
-
try {
|
|
134
|
-
const parsed = JSON.parse(raw);
|
|
135
|
-
if (parsed && typeof parsed === "object" && typeof parsed.type === "string") return parsed;
|
|
136
|
-
} catch (e) {
|
|
137
|
-
console.debug("[timber] error digest is not valid JSON:", e instanceof Error ? e.message : e);
|
|
138
|
-
}
|
|
139
|
-
return null;
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Extract the HTTP status code from a parsed digest or error message.
|
|
143
|
-
* Falls back to message pattern matching for errors without a digest.
|
|
144
|
-
*/
|
|
145
|
-
function getErrorStatus(parsed, error) {
|
|
146
|
-
if (parsed?.type === "deny") return parsed.status;
|
|
147
|
-
if (parsed?.type === "render-error") return parsed.status;
|
|
148
|
-
if (parsed?.type === "redirect") return parsed.status;
|
|
149
|
-
const match = error.message.match(/^Access denied with status (\d+)$/);
|
|
150
|
-
if (match) return parseInt(match[1], 10);
|
|
151
|
-
return 500;
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* Check whether an error's status matches the boundary's status filter.
|
|
155
|
-
* Category markers (400, 500) match any status in that range.
|
|
156
|
-
*/
|
|
157
|
-
function statusMatches(boundaryStatus, errorStatus) {
|
|
158
|
-
if (boundaryStatus === 400) return errorStatus >= 400 && errorStatus <= 499;
|
|
159
|
-
if (boundaryStatus === 500) return errorStatus >= 500 && errorStatus <= 599;
|
|
160
|
-
return boundaryStatus === errorStatus;
|
|
161
|
-
}
|
|
162
|
-
//#endregion
|
|
3
|
+
import { t as TimberErrorBoundary } from "../_chunks/error-boundary-D-ODYX41.js";
|
|
163
4
|
export { TimberErrorBoundary };
|
|
164
|
-
|
|
165
|
-
//# sourceMappingURL=error-boundary.js.map
|
package/dist/client/history.d.ts
CHANGED
|
@@ -1,14 +1,21 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ParamsSource } from '../shared/payload-root.js';
|
|
2
|
+
import type { SegmentInfo } from '../shared/segment-info.js';
|
|
2
3
|
export interface HistoryEntry {
|
|
3
4
|
/** The complete segment tree payload at the time of navigation */
|
|
4
5
|
payload: unknown;
|
|
5
6
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
7
|
+
* The params that payload published. Replaying the tree republishes them,
|
|
8
|
+
* because the client owns the provider now and reads it from here
|
|
9
|
+
* (TIM-1297).
|
|
10
|
+
*
|
|
11
|
+
* Stored beside the tree but never *produced* beside it: both come out of
|
|
12
|
+
* one `splitPayloadRoot` on one decoded root and travel together through
|
|
13
|
+
* `prepareNavigation`, the only producer of an entry. That is the property
|
|
14
|
+
* that matters — when they were derived from separate channels, a replay
|
|
15
|
+
* could restore one route's tree with another route's params (TIM-1037,
|
|
16
|
+
* TIM-1285).
|
|
10
17
|
*/
|
|
11
|
-
params
|
|
18
|
+
params: ParamsSource;
|
|
12
19
|
/**
|
|
13
20
|
* Segment metadata for this page's route. Restored into the segment cache
|
|
14
21
|
* on popstate cached replay so the next forward navigation computes a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/client/history.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/client/history.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAI7D,MAAM,WAAW,YAAY;IAC3B,kEAAkE;IAClE,OAAO,EAAE,OAAO,CAAC;IACjB;;;;;;;;;;;OAWG;IACH,MAAM,EAAE,YAAY,CAAC;IACrB;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;CACpC;AAID;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAmC;IAElD,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAE3C;IAED,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAEzC;IAED,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAExB;CACF"}
|
package/dist/client/index.d.ts
CHANGED
|
@@ -16,5 +16,6 @@ export { useSelectedLayoutSegment, useSelectedLayoutSegments } from './use-selec
|
|
|
16
16
|
export { useActionState, useFormAction } from './form';
|
|
17
17
|
export type { UseActionStateFn, UseActionStateReturn, FormErrorsResult } from './form';
|
|
18
18
|
export { useSegmentParams } from './use-segment-params';
|
|
19
|
+
export { useQueryStates } from './use-query-states';
|
|
19
20
|
export type { ClientCookieOptions, CookieSetter } from './use-cookie';
|
|
20
21
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AASA,YAAY,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAGjD,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAChG,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAC9E,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAC/F,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AA4CpF,MAAM,WAAW,YAAY;CAG5B;AACD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACrE,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAGpG,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvD,YAAY,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AASA,YAAY,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAGjD,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAChG,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAC9E,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAC/F,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AA4CpF,MAAM,WAAW,YAAY;CAG5B;AACD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACrE,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAGpG,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvD,YAAY,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAKvF,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAYxD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIpD,YAAY,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/client/index.js
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { n as classifyUrlSegment } from "../_chunks/segment-classify-
|
|
3
|
-
import { t as getSearchParamsDefinition } from "../_chunks/registry-DbJPKoBp.js";
|
|
4
|
-
import { n as getSsrData } from "../_chunks/ssr-data-BOWsq18U.js";
|
|
5
|
-
import { n as useSegmentParams, o as useNavigationContext } from "../_chunks/use-segment-params-D1CzlgBo.js";
|
|
2
|
+
import { n as classifyUrlSegment } from "../_chunks/segment-classify-C539Pa2O.js";
|
|
6
3
|
import { a as mergePreservedSearchParams, i as validateNavigationHref, n as isInternalHref } from "../_chunks/href-validation-CMc5JRls.js";
|
|
7
|
-
import { n as
|
|
8
|
-
import { n as
|
|
4
|
+
import { n as getSsrData } from "../_chunks/ssr-data-14MXm7Pj.js";
|
|
5
|
+
import { n as getRouterOrNull } from "../_chunks/router-ref-DuYuV_0Q.js";
|
|
6
|
+
import { n as useSegmentContext } from "../_chunks/segment-context-CjOlyB8Y.js";
|
|
9
7
|
import { t as getLinkCodec } from "../_chunks/codec-registry-oOUxugz3.js";
|
|
10
|
-
import { r as usePendingNavigation } from "../_chunks/
|
|
11
|
-
import {
|
|
8
|
+
import { l as useNavigationContext, r as useSegmentParams, u as usePendingNavigation } from "../_chunks/use-segment-params-C4r4BD9T.js";
|
|
9
|
+
import { n as useQueryStates } from "../_chunks/use-query-states-BbU5Ge1V.js";
|
|
10
|
+
import { createContext, useActionState as useActionState$1, useContext, useRef, useState, useTransition } from "react";
|
|
12
11
|
import { jsx } from "react/jsx-runtime";
|
|
13
12
|
//#region src/client/use-link-status.ts
|
|
14
13
|
/**
|
|
@@ -142,44 +141,39 @@ function interpolateParams(pattern, params) {
|
|
|
142
141
|
*
|
|
143
142
|
* Handles:
|
|
144
143
|
* - params interpolation into route patterns
|
|
145
|
-
* - searchParams serialization
|
|
144
|
+
* - searchParams serialization (see the two shapes documented above)
|
|
146
145
|
* - Validation that searchParams and inline query strings are exclusive
|
|
147
146
|
*/
|
|
148
147
|
/**
|
|
149
|
-
*
|
|
150
|
-
*
|
|
151
|
-
*
|
|
148
|
+
* Tolerate a leading '?'. `buildSearchParams()` never emits one, but callers
|
|
149
|
+
* hand-rolling a query string reasonably might, and silently producing
|
|
150
|
+
* `?%3Fa=b` for it would be a worse failure than accepting both.
|
|
152
151
|
*/
|
|
153
|
-
function
|
|
154
|
-
return "
|
|
152
|
+
function stripLeadingQuestionMark(qs) {
|
|
153
|
+
return qs.startsWith("?") ? qs.slice(1) : qs;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Escape-hatch serialization for a plain object: String()-coerce every
|
|
157
|
+
* value, append arrays as repeated keys, skip null/undefined.
|
|
158
|
+
*
|
|
159
|
+
* Deliberately codec-free and alias-free — see the shape docs above.
|
|
160
|
+
*/
|
|
161
|
+
function coerceToQueryString(values) {
|
|
162
|
+
const usp = new URLSearchParams();
|
|
163
|
+
for (const [key, val] of Object.entries(values)) {
|
|
164
|
+
if (val === void 0 || val === null) continue;
|
|
165
|
+
if (Array.isArray(val)) for (const item of val) usp.append(key, String(item));
|
|
166
|
+
else usp.set(key, String(val));
|
|
167
|
+
}
|
|
168
|
+
return usp.toString();
|
|
155
169
|
}
|
|
156
170
|
function resolveHref(href, params, searchParams) {
|
|
157
171
|
let resolvedPath = href;
|
|
158
172
|
if (params) resolvedPath = interpolateParams(href, params);
|
|
159
173
|
if (searchParams) {
|
|
160
174
|
if (resolvedPath.includes("?")) throw new Error("<Link> received both a searchParams prop and a query string in href. These are mutually exclusive — use one or the other.");
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
if (isWrappedSearchParamsProp(searchParams)) {
|
|
164
|
-
definition = searchParams.definition;
|
|
165
|
-
values = searchParams.values;
|
|
166
|
-
} else {
|
|
167
|
-
definition = getSearchParamsDefinition(href);
|
|
168
|
-
values = searchParams;
|
|
169
|
-
}
|
|
170
|
-
if (definition) {
|
|
171
|
-
const qs = definition.serialize(values);
|
|
172
|
-
if (qs) resolvedPath = `${resolvedPath}?${qs}`;
|
|
173
|
-
} else {
|
|
174
|
-
const usp = new URLSearchParams();
|
|
175
|
-
for (const [key, val] of Object.entries(values)) {
|
|
176
|
-
if (val === void 0 || val === null) continue;
|
|
177
|
-
if (Array.isArray(val)) for (const item of val) usp.append(key, String(item));
|
|
178
|
-
else usp.set(key, String(val));
|
|
179
|
-
}
|
|
180
|
-
const qs = usp.toString();
|
|
181
|
-
if (qs) resolvedPath = `${resolvedPath}?${qs}`;
|
|
182
|
-
}
|
|
175
|
+
const qs = typeof searchParams === "string" ? stripLeadingQuestionMark(searchParams) : coerceToQueryString(searchParams);
|
|
176
|
+
if (qs) resolvedPath = `${resolvedPath}?${qs}`;
|
|
183
177
|
}
|
|
184
178
|
return resolvedPath;
|
|
185
179
|
}
|
|
@@ -237,7 +231,8 @@ var Link = function LinkImpl(props) {
|
|
|
237
231
|
params: segmentParams,
|
|
238
232
|
searchParams
|
|
239
233
|
});
|
|
240
|
-
const [isPending,
|
|
234
|
+
const [isPending, setIsPending] = useState(false);
|
|
235
|
+
const clickSeq = useRef(0);
|
|
241
236
|
const linkStatus = isPending ? LINK_PENDING : LINK_IDLE;
|
|
242
237
|
const internal = isInternalHref(baseHref);
|
|
243
238
|
const resolvedHref = preserveSearchParams && internal ? mergePreservedSearchParams(baseHref, getCurrentSearch(), preserveSearchParams) : baseHref;
|
|
@@ -262,8 +257,14 @@ var Link = function LinkImpl(props) {
|
|
|
262
257
|
event.preventDefault();
|
|
263
258
|
const shouldScroll = scroll !== false;
|
|
264
259
|
const absoluteHref = resolved.pathname + resolved.search + resolved.hash;
|
|
265
|
-
|
|
266
|
-
|
|
260
|
+
const seq = ++clickSeq.current;
|
|
261
|
+
const settle = () => {
|
|
262
|
+
if (clickSeq.current === seq) setIsPending(false);
|
|
263
|
+
};
|
|
264
|
+
setIsPending(true);
|
|
265
|
+
router.navigate(absoluteHref, { scroll: shouldScroll }).then(settle, (error) => {
|
|
266
|
+
settle();
|
|
267
|
+
throw error;
|
|
267
268
|
});
|
|
268
269
|
} : userOnClick;
|
|
269
270
|
const handleMouseEnter = internal && prefetch ? (event) => {
|
|
@@ -304,7 +305,7 @@ var Link = function LinkImpl(props) {
|
|
|
304
305
|
* In timber, navigation calls reactRoot.render() which is a root-level
|
|
305
306
|
* render — startTransition has no effect on root renders.
|
|
306
307
|
*
|
|
307
|
-
* Navigation state (
|
|
308
|
+
* Navigation state (pathname, search) is delivered atomically via
|
|
308
309
|
* NavigationContext embedded in the element tree passed to
|
|
309
310
|
* reactRoot.render(). See design/19-client-navigation.md §"NavigationContext".
|
|
310
311
|
*
|
|
@@ -640,6 +641,6 @@ function deriveFormErrors(result) {
|
|
|
640
641
|
};
|
|
641
642
|
}
|
|
642
643
|
//#endregion
|
|
643
|
-
export { Link, LinkStatusContext, buildLinkProps, interpolateParams, mergePreservedSearchParams, replaceUrl, resolveHref, useActionState, useFormAction, useLinkStatus, usePathname, usePendingNavigation, useRouter, useSegmentParams, useSelectedLayoutSegment, useSelectedLayoutSegments, validateNavigationHref as validateLinkHref };
|
|
644
|
+
export { Link, LinkStatusContext, buildLinkProps, interpolateParams, mergePreservedSearchParams, replaceUrl, resolveHref, useActionState, useFormAction, useLinkStatus, usePathname, usePendingNavigation, useQueryStates, useRouter, useSegmentParams, useSelectedLayoutSegment, useSelectedLayoutSegments, validateNavigationHref as validateLinkHref };
|
|
644
645
|
|
|
645
646
|
//# sourceMappingURL=index.js.map
|