@timber-js/app 0.2.0-alpha.14 → 0.2.0-alpha.141
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-DzFMnUAR.js +1147 -0
- package/dist/_chunks/actions-DzFMnUAR.js.map +1 -0
- package/dist/_chunks/build-output-helper-B20ZuTSA.js +102 -0
- package/dist/_chunks/build-output-helper-B20ZuTSA.js.map +1 -0
- package/dist/_chunks/cli-schema-sync-D2IpXicg.js +785 -0
- package/dist/_chunks/cli-schema-sync-D2IpXicg.js.map +1 -0
- package/dist/_chunks/cli-schema-sync-DH-M8Poy.js +2 -0
- package/dist/_chunks/codec-registry-oOUxugz3.js +21 -0
- package/dist/_chunks/codec-registry-oOUxugz3.js.map +1 -0
- package/dist/_chunks/define-C3RvHQPK.js +195 -0
- package/dist/_chunks/define-C3RvHQPK.js.map +1 -0
- package/dist/_chunks/define-DMVhsipD.js +112 -0
- package/dist/_chunks/define-DMVhsipD.js.map +1 -0
- package/dist/_chunks/fast-hash-D6hIVt1Y.js +36 -0
- package/dist/_chunks/fast-hash-D6hIVt1Y.js.map +1 -0
- package/dist/_chunks/format-CfwjgPz9.js +14 -0
- package/dist/_chunks/format-CfwjgPz9.js.map +1 -0
- package/dist/_chunks/handler-store-DjISKYEB.js +54 -0
- package/dist/_chunks/handler-store-DjISKYEB.js.map +1 -0
- package/dist/_chunks/href-validation-EZktELp8.js +124 -0
- package/dist/_chunks/href-validation-EZktELp8.js.map +1 -0
- package/dist/_chunks/logger-Dt-jQaBO.js +291 -0
- package/dist/_chunks/logger-Dt-jQaBO.js.map +1 -0
- package/dist/_chunks/{metadata-routes-Cjmvi3rQ.js → metadata-routes-BjepjefT.js} +32 -19
- package/dist/_chunks/metadata-routes-BjepjefT.js.map +1 -0
- package/dist/_chunks/navigation-root-DLc4s4ZC.js +103 -0
- package/dist/_chunks/navigation-root-DLc4s4ZC.js.map +1 -0
- package/dist/_chunks/registry-DbJPKoBp.js +20 -0
- package/dist/_chunks/registry-DbJPKoBp.js.map +1 -0
- package/dist/_chunks/resolve-schema-Dj8tQloi.js +77 -0
- package/dist/_chunks/resolve-schema-Dj8tQloi.js.map +1 -0
- package/dist/_chunks/router-ref-CtmF-aPv.js +28 -0
- package/dist/_chunks/router-ref-CtmF-aPv.js.map +1 -0
- package/dist/_chunks/schema-bridge-DK_89h8O.js +86 -0
- package/dist/_chunks/schema-bridge-DK_89h8O.js.map +1 -0
- package/dist/_chunks/segment-classify-CDDRVKs7.js +137 -0
- package/dist/_chunks/segment-classify-CDDRVKs7.js.map +1 -0
- package/dist/_chunks/segment-context-ZDnXDkbz.js +34 -0
- package/dist/_chunks/segment-context-ZDnXDkbz.js.map +1 -0
- package/dist/_chunks/{ssr-data-MjmprTmO.js → ssr-data-BOWsq18U.js} +1 -1
- package/dist/_chunks/ssr-data-BOWsq18U.js.map +1 -0
- package/dist/_chunks/tracing-M_zKubhk.js +358 -0
- package/dist/_chunks/tracing-M_zKubhk.js.map +1 -0
- package/dist/_chunks/{use-query-states-D5KaffOK.js → use-query-states-CbeQmext.js} +7 -20
- package/dist/_chunks/use-query-states-CbeQmext.js.map +1 -0
- package/dist/_chunks/use-segment-params-D1CzlgBo.js +151 -0
- package/dist/_chunks/use-segment-params-D1CzlgBo.js.map +1 -0
- package/dist/_chunks/validation-taUkvA4Q.js +113 -0
- package/dist/_chunks/validation-taUkvA4Q.js.map +1 -0
- package/dist/_chunks/walkers-7FBPM-hX.js +724 -0
- package/dist/_chunks/walkers-7FBPM-hX.js.map +1 -0
- package/dist/_chunks/{format-RyoGQL74.js → warnings-CNPXaypM.js} +6 -45
- package/dist/_chunks/warnings-CNPXaypM.js.map +1 -0
- package/dist/adapters/build-output-helper.d.ts +28 -0
- package/dist/adapters/build-output-helper.d.ts.map +1 -0
- package/dist/adapters/cloudflare-dev.d.ts +109 -0
- package/dist/adapters/cloudflare-dev.d.ts.map +1 -0
- package/dist/adapters/cloudflare-dev.js +73 -0
- package/dist/adapters/cloudflare-dev.js.map +1 -0
- package/dist/adapters/cloudflare-kv-cache.d.ts +64 -0
- package/dist/adapters/cloudflare-kv-cache.d.ts.map +1 -0
- package/dist/adapters/cloudflare-kv-cache.js +95 -0
- package/dist/adapters/cloudflare-kv-cache.js.map +1 -0
- package/dist/adapters/cloudflare.d.ts +148 -12
- package/dist/adapters/cloudflare.d.ts.map +1 -1
- package/dist/adapters/cloudflare.js +142 -38
- package/dist/adapters/cloudflare.js.map +1 -1
- package/dist/adapters/compress-module.d.ts.map +1 -1
- package/dist/adapters/nitro.d.ts +17 -1
- package/dist/adapters/nitro.d.ts.map +1 -1
- package/dist/adapters/nitro.js +154 -48
- package/dist/adapters/nitro.js.map +1 -1
- package/dist/adapters/shared.d.ts +16 -0
- package/dist/adapters/shared.d.ts.map +1 -0
- package/dist/cache/cache-api.d.ts +24 -0
- package/dist/cache/cache-api.d.ts.map +1 -0
- package/dist/cache/handler-store.d.ts +31 -0
- package/dist/cache/handler-store.d.ts.map +1 -0
- package/dist/cache/index.d.ts +23 -7
- package/dist/cache/index.d.ts.map +1 -1
- package/dist/cache/index.js +165 -117
- package/dist/cache/index.js.map +1 -1
- package/dist/cache/singleflight.d.ts +18 -1
- package/dist/cache/singleflight.d.ts.map +1 -1
- package/dist/cache/sizeof.d.ts +22 -0
- package/dist/cache/sizeof.d.ts.map +1 -0
- package/dist/cache/timber-cache.d.ts +1 -1
- package/dist/cache/timber-cache.d.ts.map +1 -1
- package/dist/cli-schema-sync.d.ts +39 -0
- package/dist/cli-schema-sync.d.ts.map +1 -0
- package/dist/cli.d.ts +14 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +48 -6
- package/dist/cli.js.map +1 -1
- package/dist/client/browser-dev.d.ts +34 -1
- package/dist/client/browser-dev.d.ts.map +1 -1
- package/dist/client/browser-entry/action-dispatch.d.ts +17 -0
- package/dist/client/browser-entry/action-dispatch.d.ts.map +1 -0
- package/dist/client/browser-entry/hmr.d.ts +21 -0
- package/dist/client/browser-entry/hmr.d.ts.map +1 -0
- package/dist/client/browser-entry/hydrate.d.ts +46 -0
- package/dist/client/browser-entry/hydrate.d.ts.map +1 -0
- package/dist/client/browser-entry/index.d.ts +30 -0
- package/dist/client/browser-entry/index.d.ts.map +1 -0
- package/dist/client/browser-entry/post-hydration.d.ts +26 -0
- package/dist/client/browser-entry/post-hydration.d.ts.map +1 -0
- package/dist/client/browser-entry/router-init.d.ts +26 -0
- package/dist/client/browser-entry/router-init.d.ts.map +1 -0
- package/dist/client/browser-entry/rsc-stream.d.ts +24 -0
- package/dist/client/browser-entry/rsc-stream.d.ts.map +1 -0
- package/dist/client/browser-entry/scroll.d.ts +19 -0
- package/dist/client/browser-entry/scroll.d.ts.map +1 -0
- package/dist/client/error-boundary.d.ts +12 -5
- package/dist/client/error-boundary.d.ts.map +1 -1
- package/dist/client/error-boundary.js +29 -6
- package/dist/client/error-boundary.js.map +1 -1
- package/dist/client/error-reconstituter.d.ts +54 -0
- package/dist/client/error-reconstituter.d.ts.map +1 -0
- package/dist/client/form.d.ts +16 -27
- package/dist/client/form.d.ts.map +1 -1
- package/dist/client/history.d.ts +19 -4
- package/dist/client/history.d.ts.map +1 -1
- package/dist/client/index.d.ts +10 -24
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +183 -1134
- package/dist/client/index.js.map +1 -1
- package/dist/client/internal.d.ts +19 -0
- package/dist/client/internal.d.ts.map +1 -0
- package/dist/client/internal.js +925 -0
- package/dist/client/internal.js.map +1 -0
- package/dist/client/link-pending-store.d.ts +65 -0
- package/dist/client/link-pending-store.d.ts.map +1 -0
- package/dist/client/link.d.ts +69 -60
- package/dist/client/link.d.ts.map +1 -1
- package/dist/client/nav-link-store.d.ts +27 -0
- package/dist/client/nav-link-store.d.ts.map +1 -0
- package/dist/client/navigation-api-types.d.ts +90 -0
- package/dist/client/navigation-api-types.d.ts.map +1 -0
- package/dist/client/navigation-api.d.ts +115 -0
- package/dist/client/navigation-api.d.ts.map +1 -0
- package/dist/client/navigation-context.d.ts +14 -2
- package/dist/client/navigation-context.d.ts.map +1 -1
- package/dist/client/{transition-root.d.ts → navigation-root.d.ts} +46 -9
- package/dist/client/navigation-root.d.ts.map +1 -0
- package/dist/client/nuqs-adapter.d.ts.map +1 -1
- package/dist/client/router-ref.d.ts +1 -1
- package/dist/client/router.d.ts +79 -10
- package/dist/client/router.d.ts.map +1 -1
- package/dist/client/rsc-fetch.d.ts +46 -3
- package/dist/client/rsc-fetch.d.ts.map +1 -1
- package/dist/client/segment-cache.d.ts +3 -1
- package/dist/client/segment-cache.d.ts.map +1 -1
- package/dist/client/segment-outlet.d.ts +49 -0
- package/dist/client/segment-outlet.d.ts.map +1 -0
- package/dist/client/segment-update-context.d.ts +21 -0
- package/dist/client/segment-update-context.d.ts.map +1 -0
- package/dist/client/shallow-url.d.ts +10 -0
- package/dist/client/shallow-url.d.ts.map +1 -0
- package/dist/client/ssr-data.d.ts +13 -4
- package/dist/client/ssr-data.d.ts.map +1 -1
- package/dist/client/stale-reload.d.ts +15 -0
- package/dist/client/stale-reload.d.ts.map +1 -1
- package/dist/client/state.d.ts +1 -1
- package/dist/client/top-loader.d.ts +5 -5
- package/dist/client/top-loader.d.ts.map +1 -1
- package/dist/client/use-cookie.d.ts +12 -0
- package/dist/client/use-cookie.d.ts.map +1 -1
- package/dist/client/use-link-status.d.ts +5 -5
- package/dist/client/use-link-status.d.ts.map +1 -1
- package/dist/client/use-pathname.d.ts.map +1 -1
- package/dist/client/use-pending-navigation.d.ts +23 -0
- package/dist/client/use-pending-navigation.d.ts.map +1 -0
- package/dist/client/use-query-states.d.ts +1 -1
- package/dist/client/use-query-states.d.ts.map +1 -1
- package/dist/client/use-router.d.ts +1 -1
- package/dist/client/use-router.d.ts.map +1 -1
- package/dist/client/use-search-params.d.ts +7 -5
- package/dist/client/use-search-params.d.ts.map +1 -1
- package/dist/client/{use-params.d.ts → use-segment-params.d.ts} +8 -6
- package/dist/client/use-segment-params.d.ts.map +1 -0
- package/dist/codec.d.ts +69 -0
- package/dist/codec.d.ts.map +1 -0
- package/dist/codec.js +75 -0
- package/dist/codec.js.map +1 -0
- package/dist/config-types.d.ts +294 -0
- package/dist/config-types.d.ts.map +1 -0
- package/dist/config-validation.d.ts +51 -0
- package/dist/config-validation.d.ts.map +1 -0
- package/dist/content/index.d.ts +1 -10
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/index.js +0 -2
- package/dist/cookies/define-cookie.d.ts +58 -25
- package/dist/cookies/define-cookie.d.ts.map +1 -1
- package/dist/cookies/index.d.ts +2 -1
- package/dist/cookies/index.d.ts.map +1 -1
- package/dist/cookies/index.js +251 -36
- package/dist/cookies/index.js.map +1 -1
- package/dist/cookies/json-cookie.d.ts +64 -0
- package/dist/cookies/json-cookie.d.ts.map +1 -0
- package/dist/cookies/validation.d.ts +34 -0
- package/dist/cookies/validation.d.ts.map +1 -0
- package/dist/dev-tools/404-page.d.ts +46 -0
- package/dist/dev-tools/404-page.d.ts.map +1 -0
- package/dist/dev-tools/browser-logs.d.ts +84 -0
- package/dist/dev-tools/browser-logs.d.ts.map +1 -0
- package/dist/dev-tools/error-page.d.ts +58 -0
- package/dist/dev-tools/error-page.d.ts.map +1 -0
- package/dist/dev-tools/holding-server.d.ts +54 -0
- package/dist/dev-tools/holding-server.d.ts.map +1 -0
- package/dist/dev-tools/index.d.ts +31 -0
- package/dist/dev-tools/index.d.ts.map +1 -0
- package/dist/{server/dev-span-processor.d.ts → dev-tools/instrumentation.d.ts} +26 -6
- package/dist/dev-tools/instrumentation.d.ts.map +1 -0
- package/dist/{server/dev-logger.d.ts → dev-tools/logger.d.ts} +1 -1
- package/dist/dev-tools/logger.d.ts.map +1 -0
- package/dist/{plugins/dev-logs.d.ts → dev-tools/logs.d.ts} +2 -2
- package/dist/dev-tools/logs.d.ts.map +1 -0
- package/dist/dev-tools/overlay.d.ts +91 -0
- package/dist/dev-tools/overlay.d.ts.map +1 -0
- package/dist/dev-tools/stack-classifier.d.ts +34 -0
- package/dist/dev-tools/stack-classifier.d.ts.map +1 -0
- package/dist/dev-tools/terminal.d.ts +28 -0
- package/dist/dev-tools/terminal.d.ts.map +1 -0
- package/dist/{server/dev-warnings.d.ts → dev-tools/warnings.d.ts} +2 -22
- package/dist/dev-tools/warnings.d.ts.map +1 -0
- package/dist/fonts/ast.d.ts +98 -6
- package/dist/fonts/ast.d.ts.map +1 -1
- package/dist/fonts/bundle.d.ts +48 -0
- package/dist/fonts/bundle.d.ts.map +1 -0
- package/dist/fonts/dev-middleware.d.ts +22 -0
- package/dist/fonts/dev-middleware.d.ts.map +1 -0
- package/dist/fonts/local.d.ts +1 -1
- package/dist/fonts/pipeline.d.ts +172 -0
- package/dist/fonts/pipeline.d.ts.map +1 -0
- package/dist/fonts/transform.d.ts +78 -0
- package/dist/fonts/transform.d.ts.map +1 -0
- package/dist/fonts/types.d.ts +47 -1
- package/dist/fonts/types.d.ts.map +1 -1
- package/dist/fonts/virtual-modules.d.ts +94 -0
- package/dist/fonts/virtual-modules.d.ts.map +1 -0
- package/dist/index.d.ts +46 -180
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5315 -12687
- package/dist/index.js.map +1 -1
- package/dist/params/codec-registry.d.ts +26 -0
- package/dist/params/codec-registry.d.ts.map +1 -0
- package/dist/params/define-schema.d.ts +81 -0
- package/dist/params/define-schema.d.ts.map +1 -0
- package/dist/params/index.d.ts +5 -0
- package/dist/params/index.d.ts.map +1 -0
- package/dist/params/index.js +34 -0
- package/dist/params/index.js.map +1 -0
- package/dist/params/resolve-schema.d.ts +34 -0
- package/dist/params/resolve-schema.d.ts.map +1 -0
- package/dist/plugin-context.d.ts +114 -0
- package/dist/plugin-context.d.ts.map +1 -0
- package/dist/plugins/adapter-build.d.ts +20 -1
- package/dist/plugins/adapter-build.d.ts.map +1 -1
- package/dist/plugins/build-manifest.d.ts +7 -3
- package/dist/plugins/build-manifest.d.ts.map +1 -1
- package/dist/plugins/build-report.d.ts +9 -7
- package/dist/plugins/build-report.d.ts.map +1 -1
- package/dist/plugins/cache.d.ts +31 -0
- package/dist/plugins/cache.d.ts.map +1 -0
- package/dist/plugins/client-chunks.d.ts +39 -0
- package/dist/plugins/client-chunks.d.ts.map +1 -0
- package/dist/plugins/cloudflare-wasm.d.ts +18 -0
- package/dist/plugins/cloudflare-wasm.d.ts.map +1 -0
- package/dist/plugins/content.d.ts +1 -1
- package/dist/plugins/content.d.ts.map +1 -1
- package/dist/plugins/dev-server.d.ts +1 -1
- package/dist/plugins/dev-server.d.ts.map +1 -1
- package/dist/plugins/entries.d.ts +1 -1
- package/dist/plugins/entries.d.ts.map +1 -1
- package/dist/plugins/fonts.d.ts +17 -73
- package/dist/plugins/fonts.d.ts.map +1 -1
- package/dist/plugins/mdx.d.ts +1 -1
- package/dist/plugins/mdx.d.ts.map +1 -1
- package/dist/plugins/routing.d.ts +1 -1
- package/dist/plugins/routing.d.ts.map +1 -1
- package/dist/plugins/server-bundle.d.ts.map +1 -1
- package/dist/plugins/shims.d.ts +6 -5
- package/dist/plugins/shims.d.ts.map +1 -1
- package/dist/plugins/static-build.d.ts +5 -26
- package/dist/plugins/static-build.d.ts.map +1 -1
- package/dist/routing/codegen-shared.d.ts +67 -0
- package/dist/routing/codegen-shared.d.ts.map +1 -0
- package/dist/routing/codegen-types.d.ts +60 -0
- package/dist/routing/codegen-types.d.ts.map +1 -0
- package/dist/routing/codegen.d.ts +7 -2
- package/dist/routing/codegen.d.ts.map +1 -1
- package/dist/routing/convention-lint.d.ts +41 -0
- package/dist/routing/convention-lint.d.ts.map +1 -0
- package/dist/routing/index.d.ts +7 -1
- package/dist/routing/index.d.ts.map +1 -1
- package/dist/routing/index.js +4 -2
- package/dist/routing/link-codegen.d.ts +90 -0
- package/dist/routing/link-codegen.d.ts.map +1 -0
- package/dist/routing/scanner.d.ts +1 -10
- package/dist/routing/scanner.d.ts.map +1 -1
- package/dist/routing/schema-validation.d.ts +35 -0
- package/dist/routing/schema-validation.d.ts.map +1 -0
- package/dist/routing/segment-classify.d.ts +75 -0
- package/dist/routing/segment-classify.d.ts.map +1 -0
- package/dist/routing/segment-codegen.d.ts +38 -0
- package/dist/routing/segment-codegen.d.ts.map +1 -0
- package/dist/routing/types.d.ts +77 -25
- package/dist/routing/types.d.ts.map +1 -1
- package/dist/routing/walkers.d.ts +51 -0
- package/dist/routing/walkers.d.ts.map +1 -0
- package/dist/rsc-runtime/rsc.d.ts +1 -1
- package/dist/rsc-runtime/rsc.d.ts.map +1 -1
- package/dist/rsc-runtime/ssr.d.ts +12 -0
- package/dist/rsc-runtime/ssr.d.ts.map +1 -1
- package/dist/schema-bridge.d.ts +76 -0
- package/dist/schema-bridge.d.ts.map +1 -0
- package/dist/search-params/define.d.ts +157 -0
- package/dist/search-params/define.d.ts.map +1 -0
- package/dist/search-params/index.d.ts +4 -7
- package/dist/search-params/index.d.ts.map +1 -1
- package/dist/search-params/index.js +34 -441
- package/dist/search-params/index.js.map +1 -1
- package/dist/search-params/registry.d.ts +2 -2
- package/dist/search-params/registry.d.ts.map +1 -1
- package/dist/search-params/wrappers.d.ts +53 -0
- package/dist/search-params/wrappers.d.ts.map +1 -0
- package/dist/segment-params/define.d.ts +89 -0
- package/dist/segment-params/define.d.ts.map +1 -0
- package/dist/segment-params/index.d.ts +3 -0
- package/dist/segment-params/index.d.ts.map +1 -0
- package/dist/segment-params/index.js +2 -0
- package/dist/server/access-gate.d.ts +8 -3
- package/dist/server/access-gate.d.ts.map +1 -1
- package/dist/server/action-client.d.ts +41 -6
- package/dist/server/action-client.d.ts.map +1 -1
- package/dist/server/action-encryption.d.ts +76 -0
- package/dist/server/action-encryption.d.ts.map +1 -0
- package/dist/server/action-handler.d.ts +35 -1
- package/dist/server/action-handler.d.ts.map +1 -1
- package/dist/server/actions.d.ts +6 -14
- package/dist/server/actions.d.ts.map +1 -1
- package/dist/server/als-registry.d.ts +70 -11
- package/dist/server/als-registry.d.ts.map +1 -1
- package/dist/server/asset-headers.d.ts +1 -15
- package/dist/server/asset-headers.d.ts.map +1 -1
- package/dist/server/body-limits.d.ts.map +1 -1
- package/dist/server/build-manifest.d.ts +8 -2
- package/dist/server/build-manifest.d.ts.map +1 -1
- package/dist/server/coalesce-tick.d.ts +40 -0
- package/dist/server/coalesce-tick.d.ts.map +1 -0
- package/dist/server/cookie-context.d.ts +170 -0
- package/dist/server/cookie-context.d.ts.map +1 -0
- package/dist/server/cookie-parsing.d.ts +51 -0
- package/dist/server/cookie-parsing.d.ts.map +1 -0
- package/dist/server/csrf.d.ts +3 -2
- package/dist/server/csrf.d.ts.map +1 -1
- package/dist/server/default-logger.d.ts +22 -0
- package/dist/server/default-logger.d.ts.map +1 -0
- package/dist/server/deny-boundary.d.ts +90 -0
- package/dist/server/deny-boundary.d.ts.map +1 -0
- package/dist/server/deny-renderer.d.ts +1 -1
- package/dist/server/deny-renderer.d.ts.map +1 -1
- package/dist/server/dev-source-map.d.ts +22 -0
- package/dist/server/dev-source-map.d.ts.map +1 -0
- package/dist/server/early-hints-sender.d.ts.map +1 -1
- package/dist/server/early-hints.d.ts +13 -11
- package/dist/server/early-hints.d.ts.map +1 -1
- package/dist/server/error-boundary-wrapper.d.ts +7 -1
- package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
- package/dist/server/fallback-error.d.ts +12 -7
- package/dist/server/fallback-error.d.ts.map +1 -1
- package/dist/server/flight-injection-state.d.ts +66 -0
- package/dist/server/flight-injection-state.d.ts.map +1 -0
- package/dist/server/flight-scripts.d.ts +42 -0
- package/dist/server/flight-scripts.d.ts.map +1 -0
- package/dist/server/flush.d.ts.map +1 -1
- package/dist/server/form-data.d.ts +29 -0
- package/dist/server/form-data.d.ts.map +1 -1
- package/dist/server/html-injector-core.d.ts +213 -0
- package/dist/server/html-injector-core.d.ts.map +1 -0
- package/dist/server/html-injectors.d.ts +81 -41
- package/dist/server/html-injectors.d.ts.map +1 -1
- package/dist/server/index.d.ts +10 -46
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +170 -2911
- package/dist/server/index.js.map +1 -1
- package/dist/server/internal.d.ts +48 -0
- package/dist/server/internal.d.ts.map +1 -0
- package/dist/server/internal.js +3126 -0
- package/dist/server/internal.js.map +1 -0
- package/dist/server/logger.d.ts +39 -7
- package/dist/server/logger.d.ts.map +1 -1
- package/dist/server/metadata-routes.d.ts +23 -7
- package/dist/server/metadata-routes.d.ts.map +1 -1
- package/dist/server/middleware-runner.d.ts +36 -4
- package/dist/server/middleware-runner.d.ts.map +1 -1
- package/dist/server/node-stream-transforms.d.ts +112 -0
- package/dist/server/node-stream-transforms.d.ts.map +1 -0
- package/dist/server/param-coercion.d.ts +54 -0
- package/dist/server/param-coercion.d.ts.map +1 -0
- package/dist/server/pipeline-helpers.d.ts +95 -0
- package/dist/server/pipeline-helpers.d.ts.map +1 -0
- package/dist/server/pipeline-interception.d.ts +1 -1
- package/dist/server/pipeline-interception.d.ts.map +1 -1
- package/dist/server/pipeline-metadata.d.ts +6 -0
- package/dist/server/pipeline-metadata.d.ts.map +1 -1
- package/dist/server/pipeline-outcome.d.ts +49 -0
- package/dist/server/pipeline-outcome.d.ts.map +1 -0
- package/dist/server/pipeline-phases.d.ts +56 -0
- package/dist/server/pipeline-phases.d.ts.map +1 -0
- package/dist/server/pipeline.d.ts +111 -19
- package/dist/server/pipeline.d.ts.map +1 -1
- package/dist/server/port-resolution.d.ts +117 -0
- package/dist/server/port-resolution.d.ts.map +1 -0
- package/dist/server/primitives.d.ts +74 -20
- package/dist/server/primitives.d.ts.map +1 -1
- package/dist/server/render-timeout.d.ts +51 -0
- package/dist/server/render-timeout.d.ts.map +1 -0
- package/dist/server/request-context.d.ts +62 -107
- package/dist/server/request-context.d.ts.map +1 -1
- package/dist/server/route-element-builder.d.ts +28 -2
- package/dist/server/route-element-builder.d.ts.map +1 -1
- package/dist/server/route-handler.d.ts.map +1 -1
- package/dist/server/route-matcher.d.ts +25 -36
- package/dist/server/route-matcher.d.ts.map +1 -1
- package/dist/server/rsc-entry/action-middleware-runner.d.ts +66 -0
- package/dist/server/rsc-entry/action-middleware-runner.d.ts.map +1 -0
- package/dist/server/rsc-entry/api-handler.d.ts +12 -3
- package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
- package/dist/server/rsc-entry/error-renderer.d.ts +26 -13
- package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -1
- package/dist/server/rsc-entry/helpers.d.ts +50 -6
- package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
- package/dist/server/rsc-entry/index.d.ts +19 -8
- package/dist/server/rsc-entry/index.d.ts.map +1 -1
- package/dist/server/rsc-entry/render-route.d.ts +50 -0
- package/dist/server/rsc-entry/render-route.d.ts.map +1 -0
- package/dist/server/rsc-entry/revalidate-renderer.d.ts +108 -0
- package/dist/server/rsc-entry/revalidate-renderer.d.ts.map +1 -0
- package/dist/server/rsc-entry/rsc-payload.d.ts +3 -3
- package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
- package/dist/server/rsc-entry/rsc-stream.d.ts +17 -1
- package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
- package/dist/server/rsc-entry/ssr-bridge.d.ts +5 -1
- package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -1
- package/dist/server/rsc-entry/ssr-renderer.d.ts +34 -4
- package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
- package/dist/server/rsc-entry/wrap-action-dispatch.d.ts +119 -0
- package/dist/server/rsc-entry/wrap-action-dispatch.d.ts.map +1 -0
- package/dist/server/safe-load.d.ts +46 -0
- package/dist/server/safe-load.d.ts.map +1 -0
- package/dist/server/sensitive-fields.d.ts +74 -0
- package/dist/server/sensitive-fields.d.ts.map +1 -0
- package/dist/server/sitemap-generator.d.ts +129 -0
- package/dist/server/sitemap-generator.d.ts.map +1 -0
- package/dist/server/sitemap-handler.d.ts +22 -0
- package/dist/server/sitemap-handler.d.ts.map +1 -0
- package/dist/server/slot-resolver.d.ts +1 -1
- package/dist/server/slot-resolver.d.ts.map +1 -1
- package/dist/server/ssr-bridge-types.d.ts +121 -0
- package/dist/server/ssr-bridge-types.d.ts.map +1 -0
- package/dist/server/ssr-entry.d.ts +2 -43
- package/dist/server/ssr-entry.d.ts.map +1 -1
- package/dist/server/ssr-render.d.ts +64 -21
- package/dist/server/ssr-render.d.ts.map +1 -1
- package/dist/server/ssr-wrappers.d.ts +50 -0
- package/dist/server/ssr-wrappers.d.ts.map +1 -0
- package/dist/server/state-tree-diff.d.ts +12 -5
- package/dist/server/state-tree-diff.d.ts.map +1 -1
- package/dist/server/status-code-resolver.d.ts +16 -11
- package/dist/server/status-code-resolver.d.ts.map +1 -1
- package/dist/server/stream-utils.d.ts +36 -0
- package/dist/server/stream-utils.d.ts.map +1 -0
- package/dist/server/tracing.d.ts +5 -5
- package/dist/server/tracing.d.ts.map +1 -1
- package/dist/server/tree-builder.d.ts +62 -30
- package/dist/server/tree-builder.d.ts.map +1 -1
- package/dist/server/tree-match.d.ts +49 -0
- package/dist/server/tree-match.d.ts.map +1 -0
- package/dist/server/types.d.ts +71 -6
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/utils/escape-html.d.ts +14 -0
- package/dist/server/utils/escape-html.d.ts.map +1 -0
- package/dist/server/version-skew.d.ts +61 -0
- package/dist/server/version-skew.d.ts.map +1 -0
- package/dist/shared/href-validation.d.ts +38 -0
- package/dist/shared/href-validation.d.ts.map +1 -0
- package/dist/shared/merge-search-params.d.ts +22 -0
- package/dist/shared/merge-search-params.d.ts.map +1 -0
- package/dist/shims/font-google.d.ts +1 -1
- package/dist/shims/font-google.d.ts.map +1 -1
- package/dist/shims/font-google.js +42 -0
- package/dist/shims/font-google.js.map +1 -0
- package/dist/shims/font-local.d.ts +26 -0
- package/dist/shims/font-local.d.ts.map +1 -0
- package/dist/shims/font-local.js +20 -0
- package/dist/shims/font-local.js.map +1 -0
- package/dist/shims/headers.d.ts +2 -1
- package/dist/shims/headers.d.ts.map +1 -1
- package/dist/shims/image.d.ts +1 -1
- package/dist/shims/navigation-client.d.ts +3 -1
- package/dist/shims/navigation-client.d.ts.map +1 -1
- package/dist/shims/navigation.d.ts +11 -5
- package/dist/shims/navigation.d.ts.map +1 -1
- package/dist/utils/state-machine.d.ts +80 -0
- package/dist/utils/state-machine.d.ts.map +1 -0
- package/package.json +63 -22
- package/src/adapters/build-output-helper.ts +139 -0
- package/src/adapters/cloudflare-dev.ts +177 -0
- package/src/adapters/cloudflare-kv-cache.ts +142 -0
- package/src/adapters/cloudflare.ts +350 -76
- package/src/adapters/compress-module.ts +24 -4
- package/src/adapters/nitro.ts +147 -60
- package/src/adapters/shared.ts +40 -0
- package/src/adapters/wrangler.d.ts +7 -0
- package/src/cache/cache-api.ts +39 -0
- package/src/cache/handler-store.ts +68 -0
- package/src/cache/index.ts +81 -18
- package/src/cache/singleflight.ts +62 -4
- package/src/cache/sizeof.ts +33 -0
- package/src/cache/timber-cache.ts +52 -24
- package/src/cli-schema-sync.ts +295 -0
- package/src/cli.ts +76 -8
- package/src/client/browser-dev.ts +153 -1
- package/src/client/browser-entry/action-dispatch.ts +125 -0
- package/src/client/browser-entry/hmr.ts +81 -0
- package/src/client/browser-entry/hydrate.ts +153 -0
- package/src/client/browser-entry/index.ts +151 -0
- package/src/client/browser-entry/post-hydration.ts +113 -0
- package/src/client/browser-entry/router-init.ts +219 -0
- package/src/client/browser-entry/rsc-stream.ts +157 -0
- package/src/client/browser-entry/scroll.ts +27 -0
- package/src/client/error-boundary.tsx +99 -22
- package/src/client/error-reconstituter.tsx +65 -0
- package/src/client/form.tsx +31 -32
- package/src/client/history.ts +26 -4
- package/src/client/index.ts +67 -45
- package/src/client/internal.ts +58 -0
- package/src/client/link-pending-store.ts +116 -0
- package/src/client/link.tsx +343 -150
- package/src/client/nav-link-store.ts +37 -0
- package/src/client/navigation-api-types.ts +112 -0
- package/src/client/navigation-api.ts +338 -0
- package/src/client/navigation-context.ts +35 -7
- package/src/client/navigation-root.tsx +347 -0
- package/src/client/nuqs-adapter.tsx +16 -3
- package/src/client/router-ref.ts +1 -1
- package/src/client/router.ts +418 -128
- package/src/client/rsc-fetch.ts +208 -10
- package/src/client/segment-cache.ts +6 -3
- package/src/client/segment-outlet.tsx +77 -0
- package/src/client/segment-update-context.ts +42 -0
- package/src/client/shallow-url.ts +22 -0
- package/src/client/ssr-data.ts +13 -5
- package/src/client/stale-reload.ts +72 -3
- package/src/client/state.ts +2 -2
- package/src/client/top-loader.tsx +11 -9
- package/src/client/use-cookie.ts +31 -2
- package/src/client/use-link-status.ts +7 -7
- package/src/client/use-pathname.ts +1 -0
- package/src/client/use-pending-navigation.ts +40 -0
- package/src/client/use-query-states.ts +9 -3
- package/src/client/use-router.ts +4 -1
- package/src/client/use-search-params.ts +26 -44
- package/src/client/{use-params.ts → use-segment-params.ts} +9 -6
- package/src/codec.ts +147 -0
- package/src/config-types.ts +292 -0
- package/src/config-validation.ts +303 -0
- package/src/content/index.ts +5 -13
- package/src/cookies/define-cookie.ts +233 -53
- package/src/cookies/index.ts +12 -1
- package/src/cookies/json-cookie.ts +105 -0
- package/src/cookies/validation.ts +192 -0
- package/src/dev-tools/404-page.ts +387 -0
- package/src/dev-tools/browser-logs.ts +291 -0
- package/src/dev-tools/error-page.ts +507 -0
- package/src/dev-tools/holding-server.ts +187 -0
- package/src/dev-tools/index.ts +90 -0
- package/src/dev-tools/instrumentation.ts +176 -0
- package/src/{plugins/dev-logs.ts → dev-tools/logs.ts} +9 -5
- package/src/dev-tools/overlay.ts +469 -0
- package/src/dev-tools/stack-classifier.ts +75 -0
- package/src/dev-tools/terminal.ts +183 -0
- package/src/{server/dev-warnings.ts → dev-tools/warnings.ts} +5 -50
- package/src/fonts/ast.ts +525 -16
- package/src/fonts/bundle.ts +131 -0
- package/src/fonts/dev-middleware.ts +74 -0
- package/src/fonts/local.ts +3 -3
- package/src/fonts/pipeline.ts +337 -0
- package/src/fonts/transform.ts +317 -0
- package/src/fonts/types.ts +52 -1
- package/src/fonts/virtual-modules.ts +235 -0
- package/src/index.ts +415 -345
- package/src/params/codec-registry.ts +34 -0
- package/src/params/define-schema.ts +115 -0
- package/src/params/index.ts +17 -0
- package/src/params/resolve-schema.ts +116 -0
- package/src/plugin-context.ts +247 -0
- package/src/plugins/adapter-build.ts +98 -4
- package/src/plugins/build-manifest.ts +168 -23
- package/src/plugins/build-report.ts +16 -25
- package/src/plugins/cache.ts +180 -0
- package/src/plugins/client-chunks.ts +113 -0
- package/src/plugins/cloudflare-wasm.ts +103 -0
- package/src/plugins/content.ts +1 -1
- package/src/plugins/dev-server.ts +179 -37
- package/src/plugins/entries.ts +110 -8
- package/src/plugins/fonts.ts +167 -655
- package/src/plugins/mdx.ts +47 -10
- package/src/plugins/routing.ts +386 -47
- package/src/plugins/server-bundle.ts +59 -3
- package/src/plugins/shims.ts +136 -35
- package/src/plugins/static-build.ts +15 -89
- package/src/routing/codegen-shared.ts +115 -0
- package/src/routing/codegen-types.ts +61 -0
- package/src/routing/codegen.ts +321 -177
- package/src/routing/convention-lint.ts +357 -0
- package/src/routing/index.ts +10 -1
- package/src/routing/interception.ts +1 -1
- package/src/routing/link-codegen.ts +310 -0
- package/src/routing/scanner.ts +165 -110
- package/src/routing/schema-validation.ts +149 -0
- package/src/routing/segment-classify.ts +188 -0
- package/src/routing/segment-codegen.ts +98 -0
- package/src/routing/types.ts +78 -25
- package/src/routing/walkers.ts +90 -0
- package/src/rsc-runtime/rsc.ts +2 -0
- package/src/rsc-runtime/ssr.ts +50 -0
- package/src/rsc-runtime/vendor-types.d.ts +7 -0
- package/src/{search-params/codecs.ts → schema-bridge.ts} +60 -22
- package/src/search-params/define.ts +538 -0
- package/src/search-params/index.ts +14 -20
- package/src/search-params/registry.ts +2 -2
- package/src/search-params/wrappers.ts +92 -0
- package/src/segment-params/define.ts +309 -0
- package/src/segment-params/index.ts +9 -0
- package/src/server/access-gate.tsx +76 -34
- package/src/server/action-client.ts +119 -28
- package/src/server/action-encryption.ts +144 -0
- package/src/server/action-handler.ts +112 -14
- package/src/server/actions.ts +34 -26
- package/src/server/als-registry.ts +108 -20
- package/src/server/asset-headers.ts +8 -34
- package/src/server/body-limits.ts +10 -2
- package/src/server/build-manifest.ts +17 -4
- package/src/server/coalesce-tick.ts +75 -0
- package/src/server/compress.ts +25 -7
- package/src/server/cookie-context.ts +473 -0
- package/src/server/cookie-parsing.ts +135 -0
- package/src/server/csrf.ts +39 -6
- package/src/server/default-logger.ts +99 -0
- package/src/server/deny-boundary.ts +218 -0
- package/src/server/deny-renderer.ts +32 -52
- package/src/server/dev-source-map.ts +31 -0
- package/src/server/early-hints-sender.ts +3 -2
- package/src/server/early-hints.ts +35 -27
- package/src/server/error-boundary-wrapper.ts +74 -22
- package/src/server/fallback-error.ts +74 -102
- package/src/server/flight-injection-state.ts +113 -0
- package/src/server/flight-scripts.ts +62 -0
- package/src/server/flush.ts +2 -1
- package/src/server/form-data.ts +101 -5
- package/src/server/html-injector-core.ts +418 -0
- package/src/server/html-injectors.ts +238 -223
- package/src/server/index.ts +29 -183
- package/src/server/internal.ts +182 -0
- package/src/server/logger.ts +67 -36
- package/src/server/metadata-routes.ts +44 -19
- package/src/server/middleware-runner.ts +75 -4
- package/src/server/node-stream-transforms.ts +361 -0
- package/src/server/param-coercion.ts +206 -0
- package/src/server/pipeline-helpers.ts +204 -0
- package/src/server/pipeline-interception.ts +32 -18
- package/src/server/pipeline-metadata.ts +13 -0
- package/src/server/pipeline-outcome.ts +197 -0
- package/src/server/pipeline-phases.ts +527 -0
- package/src/server/pipeline.ts +201 -382
- package/src/server/port-resolution.ts +215 -0
- package/src/server/primitives.ts +130 -46
- package/src/server/render-timeout.ts +108 -0
- package/src/server/request-context.ts +168 -337
- package/src/server/route-element-builder.ts +437 -208
- package/src/server/route-handler.ts +31 -4
- package/src/server/route-matcher.ts +128 -277
- package/src/server/rsc-entry/action-middleware-runner.ts +167 -0
- package/src/server/rsc-entry/api-handler.ts +69 -32
- package/src/server/rsc-entry/error-renderer.ts +316 -89
- package/src/server/rsc-entry/helpers.ts +155 -26
- package/src/server/rsc-entry/index.ts +283 -329
- package/src/server/rsc-entry/render-route.ts +313 -0
- package/src/server/rsc-entry/revalidate-renderer.ts +344 -0
- package/src/server/rsc-entry/rsc-payload.ts +65 -22
- package/src/server/rsc-entry/rsc-stream.ts +85 -13
- package/src/server/rsc-entry/ssr-bridge.ts +18 -5
- package/src/server/rsc-entry/ssr-renderer.ts +271 -41
- package/src/server/rsc-entry/wrap-action-dispatch.ts +449 -0
- package/src/server/safe-load.ts +60 -0
- package/src/server/sensitive-fields.ts +230 -0
- package/src/server/sitemap-generator.ts +338 -0
- package/src/server/sitemap-handler.ts +148 -0
- package/src/server/slot-resolver.ts +234 -246
- package/src/server/ssr-bridge-types.ts +124 -0
- package/src/server/ssr-entry.ts +217 -78
- package/src/server/ssr-render.ts +344 -71
- package/src/server/ssr-wrappers.tsx +141 -0
- package/src/server/state-tree-diff.ts +30 -23
- package/src/server/status-code-resolver.ts +112 -128
- package/src/server/stream-utils.ts +213 -0
- package/src/server/tracing.ts +21 -10
- package/src/server/tree-builder.ts +204 -90
- package/src/server/tree-match.ts +210 -0
- package/src/server/types.ts +78 -9
- package/src/server/utils/escape-html.ts +20 -0
- package/src/server/version-skew.ts +104 -0
- package/src/shared/href-validation.ts +127 -0
- package/src/shared/merge-search-params.ts +55 -0
- package/src/shims/font-google.ts +1 -1
- package/src/shims/font-local.ts +34 -0
- package/src/shims/headers.ts +5 -1
- package/src/shims/navigation-client.ts +4 -3
- package/src/shims/navigation.ts +14 -7
- package/src/utils/state-machine.ts +111 -0
- package/LICENSE +0 -8
- package/dist/_chunks/als-registry-B7DbZ2hS.js +0 -41
- package/dist/_chunks/als-registry-B7DbZ2hS.js.map +0 -1
- package/dist/_chunks/debug-B3Gypr3D.js +0 -108
- package/dist/_chunks/debug-B3Gypr3D.js.map +0 -1
- package/dist/_chunks/format-RyoGQL74.js.map +0 -1
- package/dist/_chunks/interception-BOoWmLUA.js +0 -676
- package/dist/_chunks/interception-BOoWmLUA.js.map +0 -1
- package/dist/_chunks/metadata-routes-Cjmvi3rQ.js.map +0 -1
- package/dist/_chunks/request-context-BQUC8PHn.js +0 -330
- package/dist/_chunks/request-context-BQUC8PHn.js.map +0 -1
- package/dist/_chunks/ssr-data-MjmprTmO.js.map +0 -1
- package/dist/_chunks/tracing-CemImE6h.js +0 -187
- package/dist/_chunks/tracing-CemImE6h.js.map +0 -1
- package/dist/_chunks/use-cookie-DX-l1_5E.js +0 -91
- package/dist/_chunks/use-cookie-DX-l1_5E.js.map +0 -1
- package/dist/_chunks/use-query-states-D5KaffOK.js.map +0 -1
- package/dist/cache/register-cached-function.d.ts +0 -17
- package/dist/cache/register-cached-function.d.ts.map +0 -1
- package/dist/client/browser-entry.d.ts +0 -21
- package/dist/client/browser-entry.d.ts.map +0 -1
- package/dist/client/link-status-provider.d.ts +0 -11
- package/dist/client/link-status-provider.d.ts.map +0 -1
- package/dist/client/segment-merger.d.ts +0 -119
- package/dist/client/segment-merger.d.ts.map +0 -1
- package/dist/client/transition-root.d.ts.map +0 -1
- package/dist/client/use-navigation-pending.d.ts +0 -26
- package/dist/client/use-navigation-pending.d.ts.map +0 -1
- package/dist/client/use-params.d.ts.map +0 -1
- package/dist/plugins/cache-transform.d.ts +0 -36
- package/dist/plugins/cache-transform.d.ts.map +0 -1
- package/dist/plugins/dev-error-overlay.d.ts +0 -60
- package/dist/plugins/dev-error-overlay.d.ts.map +0 -1
- package/dist/plugins/dev-logs.d.ts.map +0 -1
- package/dist/plugins/dynamic-transform.d.ts +0 -72
- package/dist/plugins/dynamic-transform.d.ts.map +0 -1
- package/dist/plugins/server-action-exports.d.ts +0 -26
- package/dist/plugins/server-action-exports.d.ts.map +0 -1
- package/dist/routing/status-file-lint.d.ts +0 -33
- package/dist/routing/status-file-lint.d.ts.map +0 -1
- package/dist/search-params/analyze.d.ts +0 -54
- package/dist/search-params/analyze.d.ts.map +0 -1
- package/dist/search-params/builtin-codecs.d.ts +0 -105
- package/dist/search-params/builtin-codecs.d.ts.map +0 -1
- package/dist/search-params/codecs.d.ts +0 -53
- package/dist/search-params/codecs.d.ts.map +0 -1
- package/dist/search-params/create.d.ts +0 -106
- package/dist/search-params/create.d.ts.map +0 -1
- package/dist/server/dev-fetch-instrumentation.d.ts +0 -22
- package/dist/server/dev-fetch-instrumentation.d.ts.map +0 -1
- package/dist/server/dev-logger.d.ts.map +0 -1
- package/dist/server/dev-span-processor.d.ts.map +0 -1
- package/dist/server/dev-warnings.d.ts.map +0 -1
- package/dist/server/manifest-status-resolver.d.ts +0 -58
- package/dist/server/manifest-status-resolver.d.ts.map +0 -1
- package/dist/server/prerender.d.ts +0 -77
- package/dist/server/prerender.d.ts.map +0 -1
- package/dist/utils/directive-parser.d.ts +0 -70
- package/dist/utils/directive-parser.d.ts.map +0 -1
- package/src/cache/register-cached-function.ts +0 -103
- package/src/client/browser-entry.ts +0 -678
- package/src/client/link-status-provider.tsx +0 -30
- package/src/client/segment-merger.ts +0 -339
- package/src/client/transition-root.tsx +0 -166
- package/src/client/use-navigation-pending.ts +0 -38
- package/src/plugins/cache-transform.ts +0 -199
- package/src/plugins/dev-error-overlay.ts +0 -230
- package/src/plugins/dynamic-transform.ts +0 -161
- package/src/plugins/server-action-exports.ts +0 -220
- package/src/routing/status-file-lint.ts +0 -112
- package/src/search-params/analyze.ts +0 -192
- package/src/search-params/builtin-codecs.ts +0 -228
- package/src/search-params/create.ts +0 -321
- package/src/server/dev-fetch-instrumentation.ts +0 -96
- package/src/server/dev-span-processor.ts +0 -78
- package/src/server/manifest-status-resolver.ts +0 -215
- package/src/server/prerender.ts +0 -139
- package/src/utils/directive-parser.ts +0 -529
- /package/src/{server/dev-logger.ts → dev-tools/logger.ts} +0 -0
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
|
|
21
21
|
import { Component, createElement, type ReactNode } from 'react';
|
|
22
22
|
import { getSsrData } from './ssr-data.js';
|
|
23
|
+
import { getRouterOrNull } from './router-ref.js';
|
|
23
24
|
|
|
24
25
|
// ─── Page Unload Detection ───────────────────────────────────────────────────
|
|
25
26
|
// Track whether the page is being unloaded (user refreshed or navigated away).
|
|
@@ -65,17 +66,24 @@ type ParsedDigest = DenyDigest | RenderErrorDigest | RedirectDigest;
|
|
|
65
66
|
|
|
66
67
|
export interface TimberErrorBoundaryProps {
|
|
67
68
|
/** The component to render when an error is caught. */
|
|
68
|
-
fallbackComponent
|
|
69
|
+
fallbackComponent?: (...args: unknown[]) => ReactNode;
|
|
70
|
+
/**
|
|
71
|
+
* Pre-rendered fallback element. Used for MDX status files which are server
|
|
72
|
+
* components and cannot be passed as function props across the RSC→client
|
|
73
|
+
* boundary. When set, rendered directly instead of calling fallbackComponent.
|
|
74
|
+
*
|
|
75
|
+
* See design/10-error-handling.md §"Status-Code File Variants" — MDX status
|
|
76
|
+
* files are server components by default (zero client JS).
|
|
77
|
+
*/
|
|
78
|
+
fallbackElement?: ReactNode;
|
|
69
79
|
/**
|
|
70
80
|
* Status code filter. If set, only catches errors matching this status.
|
|
71
81
|
* 400 = any 4xx, 500 = any 5xx, specific number = exact match.
|
|
72
82
|
*/
|
|
73
83
|
status?: number;
|
|
74
84
|
/**
|
|
75
|
-
* When true,
|
|
76
|
-
*
|
|
77
|
-
* boundaries should set this — segment boundaries (403.tsx, 4xx.tsx,
|
|
78
|
-
* error.tsx) must NOT, otherwise normal page denies get swallowed.
|
|
85
|
+
* When true, this boundary wraps a parallel slot. Slot denials are
|
|
86
|
+
* graceful degradation — they must NOT change the HTTP status code.
|
|
79
87
|
*/
|
|
80
88
|
isSlotBoundary?: boolean;
|
|
81
89
|
children: ReactNode;
|
|
@@ -86,6 +94,13 @@ interface TimberErrorBoundaryState {
|
|
|
86
94
|
error: Error | null;
|
|
87
95
|
}
|
|
88
96
|
|
|
97
|
+
// Module-level guard: the first boundary to catch a given redirect digest
|
|
98
|
+
// schedules the navigation and marks it handled here. Subsequent renders
|
|
99
|
+
// (React retries the error-boundary render path multiple times in dev, and
|
|
100
|
+
// outer boundaries that also see the error) become no-ops, preventing
|
|
101
|
+
// duplicate router.navigate() calls.
|
|
102
|
+
const _handledRedirects = new WeakSet<object>();
|
|
103
|
+
|
|
89
104
|
// ─── Component ───────────────────────────────────────────────────────────────
|
|
90
105
|
|
|
91
106
|
export class TimberErrorBoundary extends Component<
|
|
@@ -131,11 +146,48 @@ export class TimberErrorBoundary extends Component<
|
|
|
131
146
|
const error = this.state.error;
|
|
132
147
|
const parsed = parseDigest(error);
|
|
133
148
|
|
|
134
|
-
// RedirectSignal
|
|
135
|
-
//
|
|
136
|
-
//
|
|
149
|
+
// RedirectSignal handling splits by environment:
|
|
150
|
+
//
|
|
151
|
+
// - SSR (no window): re-throw so the Fizz shell fails and the server
|
|
152
|
+
// pipeline catch block can produce a proper HTTP 3xx response. See
|
|
153
|
+
// design/04-authorization.md.
|
|
154
|
+
//
|
|
155
|
+
// - Client (window exists): a RedirectSignal that leaked into the RSC
|
|
156
|
+
// Flight payload during client navigation would otherwise bubble past
|
|
157
|
+
// every error boundary to `window.onerror`, which in dev triggers the
|
|
158
|
+
// Vite error overlay (false positive — navigation itself works).
|
|
159
|
+
// Instead, ask the router to perform an SPA navigation to the target
|
|
160
|
+
// and render nothing while it takes over. The router's own catch path
|
|
161
|
+
// handles cross-origin / hard navigations. See TIM-838.
|
|
137
162
|
if (parsed?.type === 'redirect') {
|
|
138
|
-
|
|
163
|
+
if (typeof window === 'undefined') {
|
|
164
|
+
throw error;
|
|
165
|
+
}
|
|
166
|
+
// Dedupe: React may render the error-boundary fallback path more
|
|
167
|
+
// than once for a single caught error (dev-mode double render, and
|
|
168
|
+
// additional boundaries above us in the tree). Only schedule the
|
|
169
|
+
// navigation on the first render that sees this error instance.
|
|
170
|
+
const alreadyHandled = _handledRedirects.has(error);
|
|
171
|
+
if (!alreadyHandled) {
|
|
172
|
+
_handledRedirects.add(error);
|
|
173
|
+
const router = getRouterOrNull();
|
|
174
|
+
if (router) {
|
|
175
|
+
// Schedule the navigation outside the render phase to avoid
|
|
176
|
+
// setState-during-render warnings from router state updates.
|
|
177
|
+
queueMicrotask(() => {
|
|
178
|
+
router.navigate(parsed.location, { replace: true }).catch(() => {
|
|
179
|
+
// Fall back to a hard navigation if the soft navigation fails.
|
|
180
|
+
window.location.href = parsed.location;
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
} else {
|
|
184
|
+
// No router available (shouldn't happen post-bootstrap) — fall
|
|
185
|
+
// back to a hard navigation so the user still ends up at the
|
|
186
|
+
// target.
|
|
187
|
+
window.location.href = parsed.location;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return null;
|
|
139
191
|
}
|
|
140
192
|
|
|
141
193
|
// If this boundary has a status filter, check whether the error matches.
|
|
@@ -148,20 +200,45 @@ export class TimberErrorBoundary extends Component<
|
|
|
148
200
|
}
|
|
149
201
|
}
|
|
150
202
|
|
|
151
|
-
// Report DenySignal handling
|
|
152
|
-
//
|
|
153
|
-
//
|
|
154
|
-
//
|
|
155
|
-
//
|
|
156
|
-
//
|
|
157
|
-
//
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
203
|
+
// Report DenySignal handling so the pipeline skips the redundant
|
|
204
|
+
// renderDenyPage() re-render — but ONLY when this boundary can fully
|
|
205
|
+
// handle the deny in-tree:
|
|
206
|
+
//
|
|
207
|
+
// ✅ TSX boundaries (fallbackComponent) — can receive runtime props
|
|
208
|
+
// (status, dangerouslyPassData) dynamically in render()
|
|
209
|
+
// ❌ MDX boundaries (fallbackElement) — pre-rendered at tree-build time,
|
|
210
|
+
// cannot receive runtime deny props. Must fall through to re-render.
|
|
211
|
+
//
|
|
212
|
+
// For qualifying segment boundaries: also set the HTTP status code from
|
|
213
|
+
// the DenySignal so the Response has the correct 4xx status. This runs
|
|
214
|
+
// synchronously during Fizz rendering, BEFORE onShellReady.
|
|
215
|
+
//
|
|
216
|
+
// For slot boundaries: set _denyHandledByBoundary but do NOT change
|
|
217
|
+
// statusCode — slot denials are graceful degradation.
|
|
218
|
+
//
|
|
219
|
+
// See TIM-664, LOCAL-298.
|
|
220
|
+
if (parsed?.type === 'deny') {
|
|
221
|
+
const canHandleInTree = this.props.fallbackElement == null;
|
|
222
|
+
|
|
223
|
+
if (canHandleInTree || this.props.isSlotBoundary) {
|
|
224
|
+
const ssrData = getSsrData();
|
|
225
|
+
if (ssrData?._navContext) {
|
|
226
|
+
ssrData._navContext._denyHandledByBoundary = true;
|
|
227
|
+
if (!this.props.isSlotBoundary) {
|
|
228
|
+
ssrData._navContext.statusCode = parsed.status;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
162
231
|
}
|
|
163
232
|
}
|
|
164
233
|
|
|
234
|
+
// Pre-rendered fallback element (MDX status files) — render directly.
|
|
235
|
+
// MDX components are server components that cannot be passed as function
|
|
236
|
+
// props across the RSC→client boundary. Instead, they are pre-rendered
|
|
237
|
+
// as elements in the RSC environment and passed here as fallbackElement.
|
|
238
|
+
if (this.props.fallbackElement != null) {
|
|
239
|
+
return this.props.fallbackElement;
|
|
240
|
+
}
|
|
241
|
+
|
|
165
242
|
// Render the fallback component with the right props shape.
|
|
166
243
|
if (parsed?.type === 'deny') {
|
|
167
244
|
return createElement(this.props.fallbackComponent as never, {
|
|
@@ -196,8 +273,8 @@ function parseDigest(error: Error): ParsedDigest | null {
|
|
|
196
273
|
if (parsed && typeof parsed === 'object' && typeof parsed.type === 'string') {
|
|
197
274
|
return parsed as ParsedDigest;
|
|
198
275
|
}
|
|
199
|
-
} catch {
|
|
200
|
-
|
|
276
|
+
} catch (e) {
|
|
277
|
+
console.debug('[timber] error digest is not valid JSON:', e instanceof Error ? e.message : e);
|
|
201
278
|
}
|
|
202
279
|
return null;
|
|
203
280
|
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Reconstitutes a SerializableError into a real Error instance before
|
|
5
|
+
* passing to the user's error component.
|
|
6
|
+
*
|
|
7
|
+
* TSX error pages are 'use client' components that receive { error: Error, digest, reset }.
|
|
8
|
+
* Error objects are not RSC-serializable (React Flight throws "Only plain objects
|
|
9
|
+
* can be passed to Client Components"). This wrapper receives the error as a plain
|
|
10
|
+
* SerializableError object, reconstitutes a real Error instance, and passes it
|
|
11
|
+
* to the user's error component — ensuring error instanceof Error works correctly.
|
|
12
|
+
*
|
|
13
|
+
* See design/spike-TIM-565-unify-error-pages.md §"Edge Case B"
|
|
14
|
+
* See design/10-error-handling.md §"RSC → SSR for Error Pages via SerializableError"
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { createElement, type ReactNode, type ComponentType } from 'react';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Plain-object representation of an Error that can cross the RSC → client boundary.
|
|
21
|
+
* Stack is only included in dev mode (gated by isDevMode() on the server).
|
|
22
|
+
*/
|
|
23
|
+
export interface SerializableError {
|
|
24
|
+
message: string;
|
|
25
|
+
name: string;
|
|
26
|
+
stack?: string;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Props for the ErrorReconstituter wrapper component.
|
|
31
|
+
* All props are RSC-serializable:
|
|
32
|
+
* - error: plain object (SerializableError)
|
|
33
|
+
* - digest: plain JSON or null
|
|
34
|
+
* - reset: undefined (only meaningful on client after boundary catch)
|
|
35
|
+
* - component: client module reference (RSC Flight serializes as opaque ref)
|
|
36
|
+
*/
|
|
37
|
+
interface ErrorReconstituterProps {
|
|
38
|
+
error: SerializableError;
|
|
39
|
+
digest: { code: string; data: unknown } | null;
|
|
40
|
+
reset: undefined;
|
|
41
|
+
component: ComponentType<{
|
|
42
|
+
error: Error;
|
|
43
|
+
digest: { code: string; data: unknown } | null;
|
|
44
|
+
reset: (() => void) | undefined;
|
|
45
|
+
}>;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Reconstitute a SerializableError into a real Error instance and render
|
|
50
|
+
* the user's error component with the proper props.
|
|
51
|
+
*/
|
|
52
|
+
export function ErrorReconstituter({
|
|
53
|
+
error: serialized,
|
|
54
|
+
digest,
|
|
55
|
+
reset,
|
|
56
|
+
component,
|
|
57
|
+
}: ErrorReconstituterProps): ReactNode {
|
|
58
|
+
// Reconstitute a real Error so instanceof checks work in user code
|
|
59
|
+
const error = Object.assign(new Error(serialized.message), {
|
|
60
|
+
name: serialized.name,
|
|
61
|
+
...(serialized.stack != null ? { stack: serialized.stack } : {}),
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
return createElement(component, { error, digest, reset });
|
|
65
|
+
}
|
package/src/client/form.tsx
CHANGED
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
14
|
import { useActionState as reactUseActionState, useTransition } from 'react';
|
|
15
|
-
import type { ActionResult, ValidationErrors } from '
|
|
16
|
-
import type { FormFlashData } from '
|
|
15
|
+
import type { ActionFn, ActionResult, InputHint, ValidationErrors } from '../server/action-client';
|
|
16
|
+
import type { FormFlashData } from '../server/form-flash';
|
|
17
17
|
|
|
18
18
|
// ─── Types ───────────────────────────────────────────────────────────────
|
|
19
19
|
|
|
@@ -27,13 +27,15 @@ export type UseActionStateFn<TData> = (
|
|
|
27
27
|
) => Promise<ActionResult<TData>>;
|
|
28
28
|
|
|
29
29
|
/**
|
|
30
|
-
* Return type of useActionState
|
|
31
|
-
* [result, formAction, isPending]
|
|
30
|
+
* Return type of useActionState.
|
|
31
|
+
* [result, formAction, isPending, errors]
|
|
32
|
+
* The 4th element is auto-derived from result via useFormErrors logic.
|
|
32
33
|
*/
|
|
33
34
|
export type UseActionStateReturn<TData> = [
|
|
34
35
|
result: ActionResult<TData> | null,
|
|
35
36
|
formAction: (formData: FormData) => void,
|
|
36
37
|
isPending: boolean,
|
|
38
|
+
errors: FormErrorsResult,
|
|
37
39
|
];
|
|
38
40
|
|
|
39
41
|
// ─── useActionState ──────────────────────────────────────────────────────
|
|
@@ -73,7 +75,13 @@ export function useActionState<TData>(
|
|
|
73
75
|
): UseActionStateReturn<TData> {
|
|
74
76
|
// FormFlashData is structurally compatible with ActionResult at runtime —
|
|
75
77
|
// the cast satisfies React's generic inference which would otherwise widen TData.
|
|
76
|
-
|
|
78
|
+
const [result, formAction, isPending] = reactUseActionState(
|
|
79
|
+
action,
|
|
80
|
+
initialState as ActionResult<TData> | null,
|
|
81
|
+
permalink
|
|
82
|
+
);
|
|
83
|
+
const errors = deriveFormErrors(result);
|
|
84
|
+
return [result, formAction, isPending, errors];
|
|
77
85
|
}
|
|
78
86
|
|
|
79
87
|
// ─── useFormAction ───────────────────────────────────────────────────────
|
|
@@ -90,15 +98,22 @@ export function useActionState<TData>(
|
|
|
90
98
|
* </button>
|
|
91
99
|
* ```
|
|
92
100
|
*/
|
|
93
|
-
export function useFormAction<TData>(
|
|
94
|
-
action: (input:
|
|
95
|
-
): [
|
|
101
|
+
export function useFormAction<TData = unknown, TInput = unknown>(
|
|
102
|
+
action: ActionFn<TData, TInput> | ((input: TInput) => Promise<ActionResult<TData>>)
|
|
103
|
+
): [
|
|
104
|
+
(
|
|
105
|
+
...args: undefined extends TInput ? [input?: InputHint<TInput>] : [input: InputHint<TInput>]
|
|
106
|
+
) => Promise<ActionResult<TData>>,
|
|
107
|
+
boolean,
|
|
108
|
+
] {
|
|
96
109
|
const [isPending, startTransition] = useTransition();
|
|
97
110
|
|
|
98
|
-
const execute = (input?:
|
|
111
|
+
const execute = (input?: InputHint<TInput>): Promise<ActionResult<TData>> => {
|
|
99
112
|
return new Promise((resolve) => {
|
|
100
113
|
startTransition(async () => {
|
|
101
|
-
const result = await action(input)
|
|
114
|
+
const result = await (action as (input: InputHint<TInput>) => Promise<ActionResult<TData>>)(
|
|
115
|
+
input as InputHint<TInput>
|
|
116
|
+
);
|
|
102
117
|
resolve(result);
|
|
103
118
|
});
|
|
104
119
|
});
|
|
@@ -107,9 +122,9 @@ export function useFormAction<TData>(
|
|
|
107
122
|
return [execute, isPending];
|
|
108
123
|
}
|
|
109
124
|
|
|
110
|
-
// ───
|
|
125
|
+
// ─── Form error extraction ────────────────────────────────────────────────
|
|
111
126
|
|
|
112
|
-
/** Return type of
|
|
127
|
+
/** Return type of the errors element in useActionState. */
|
|
113
128
|
export interface FormErrorsResult {
|
|
114
129
|
/** Per-field validation errors keyed by field name. */
|
|
115
130
|
fieldErrors: Record<string, string[]>;
|
|
@@ -124,27 +139,11 @@ export interface FormErrorsResult {
|
|
|
124
139
|
}
|
|
125
140
|
|
|
126
141
|
/**
|
|
127
|
-
*
|
|
128
|
-
*
|
|
129
|
-
*
|
|
130
|
-
* since it's used in render. Accepts the result from `useActionState`
|
|
131
|
-
* or flash data from `getFormFlash()`.
|
|
132
|
-
*
|
|
133
|
-
* @example
|
|
134
|
-
* ```tsx
|
|
135
|
-
* const [result, action, isPending] = useActionState(createTodo, null)
|
|
136
|
-
* const errors = useFormErrors(result)
|
|
137
|
-
*
|
|
138
|
-
* return (
|
|
139
|
-
* <form action={action}>
|
|
140
|
-
* <input name="title" />
|
|
141
|
-
* {errors.getFieldError('title') && <p>{errors.getFieldError('title')}</p>}
|
|
142
|
-
* {errors.formErrors.map(e => <p key={e}>{e}</p>)}
|
|
143
|
-
* </form>
|
|
144
|
-
* )
|
|
145
|
-
* ```
|
|
142
|
+
* Derive FormErrorsResult from an action result.
|
|
143
|
+
* Used internally by useActionState 4th tuple element.
|
|
144
|
+
* @internal — exported for test access only.
|
|
146
145
|
*/
|
|
147
|
-
export function
|
|
146
|
+
export function deriveFormErrors<TData>(
|
|
148
147
|
result:
|
|
149
148
|
| ActionResult<TData>
|
|
150
149
|
| {
|
package/src/client/history.ts
CHANGED
|
@@ -23,20 +23,42 @@ export interface HistoryEntry {
|
|
|
23
23
|
* On forward navigation, the new page's payload is pushed onto the stack.
|
|
24
24
|
* On popstate, the cached payload is replayed instantly.
|
|
25
25
|
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
26
|
+
* Supports two keying modes:
|
|
27
|
+
* - **URL-keyed** (default): entries keyed by pathname + search.
|
|
28
|
+
* Used with the History API fallback.
|
|
29
|
+
* - **Entry-key + URL**: when the Navigation API is available,
|
|
30
|
+
* entries can also be stored by Navigation entry key for
|
|
31
|
+
* disambiguation of duplicate URLs in the history stack.
|
|
32
|
+
* Falls back to URL lookup when entry key is not found.
|
|
33
|
+
*
|
|
34
|
+
* Scroll positions are stored in history.state or Navigation API entry
|
|
35
|
+
* state, not in this stack — see design/19-client-navigation.md §Scroll Restoration.
|
|
28
36
|
*
|
|
29
37
|
* Entries persist for the session duration (no expiry) and are cleared
|
|
30
38
|
* when the tab is closed — matching browser back-button behavior.
|
|
31
39
|
*/
|
|
32
40
|
export class HistoryStack {
|
|
33
41
|
private entries = new Map<string, HistoryEntry>();
|
|
42
|
+
/** Entries keyed by Navigation API entry key for duplicate URL disambiguation. */
|
|
43
|
+
private entryKeyMap = new Map<string, HistoryEntry>();
|
|
34
44
|
|
|
35
|
-
push(url: string, entry: HistoryEntry): void {
|
|
45
|
+
push(url: string, entry: HistoryEntry, entryKey?: string): void {
|
|
36
46
|
this.entries.set(url, entry);
|
|
47
|
+
if (entryKey) {
|
|
48
|
+
this.entryKeyMap.set(entryKey, entry);
|
|
49
|
+
}
|
|
37
50
|
}
|
|
38
51
|
|
|
39
|
-
|
|
52
|
+
/**
|
|
53
|
+
* Get an entry. When an entry key is provided (Navigation API),
|
|
54
|
+
* tries the entry-key map first for accurate disambiguation of
|
|
55
|
+
* duplicate URLs, then falls back to URL lookup.
|
|
56
|
+
*/
|
|
57
|
+
get(url: string, entryKey?: string): HistoryEntry | undefined {
|
|
58
|
+
if (entryKey) {
|
|
59
|
+
const byKey = this.entryKeyMap.get(entryKey);
|
|
60
|
+
if (byKey) return byKey;
|
|
61
|
+
}
|
|
40
62
|
return this.entries.get(url);
|
|
41
63
|
}
|
|
42
64
|
|
package/src/client/index.ts
CHANGED
|
@@ -1,64 +1,86 @@
|
|
|
1
1
|
// @timber-js/app/client — Client-side primitives
|
|
2
2
|
// These are the primary imports for client components.
|
|
3
|
+
//
|
|
4
|
+
// Framework-internal bootstrap, SSR bridge, and segment plumbing is in
|
|
5
|
+
// #client-internal (Node package import).
|
|
6
|
+
// Design doc: design/triage/api-naming-spike.md §8.5
|
|
3
7
|
|
|
4
|
-
|
|
8
|
+
// JsonSerializable moved to @timber-js/app/codec as the single canonical path.
|
|
9
|
+
// Re-export removed per TIM-721.
|
|
10
|
+
export type { RenderErrorDigest } from './types';
|
|
5
11
|
|
|
6
12
|
// Navigation
|
|
7
13
|
export { Link, interpolateParams, resolveHref, validateLinkHref, buildLinkProps } from './link';
|
|
8
|
-
export
|
|
9
|
-
export type {
|
|
10
|
-
export {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
export { mergePreservedSearchParams } from '../shared/merge-search-params.js';
|
|
15
|
+
export type { LinkProps, LinkPropsWithHref, LinkPropsWithParams, LinkBaseProps } from './link';
|
|
16
|
+
export type { LinkSegmentParams, OnNavigateHandler, OnNavigateEvent } from './link';
|
|
17
|
+
|
|
18
|
+
// ─── LinkFunction (originally declared here for module augmentation) ───
|
|
19
|
+
//
|
|
20
|
+
// The codegen emits TWO augmentations of this interface:
|
|
21
|
+
//
|
|
22
|
+
// 1. Per-route call signatures — `href: '/products/[id]'` with direct
|
|
23
|
+
// `segmentParams`/`searchParams` types.
|
|
24
|
+
// 2. Catch-all call signatures — `ExternalHref` + computed `string`
|
|
25
|
+
// variable hrefs.
|
|
26
|
+
//
|
|
27
|
+
// Both live in the codegen output (NOT here). Overload ORDER matters
|
|
28
|
+
// for error UX, and TypeScript's declaration-merging rule "later overload
|
|
29
|
+
// sets ordered first" means that whichever augmentation block is
|
|
30
|
+
// declared LATER in the codegen file ends up FIRST in the merged call-
|
|
31
|
+
// signature list — and therefore the EARLIER block ends up LAST, which
|
|
32
|
+
// is the overload whose error message TypeScript reports when no
|
|
33
|
+
// overload matches.
|
|
34
|
+
//
|
|
35
|
+
// We want the PER-ROUTE overloads to be the error-reporting ones when
|
|
36
|
+
// a user passes a known literal `href` with a mistyped segmentParam.
|
|
37
|
+
// So the codegen emits them FIRST and the catch-all SECOND. That way
|
|
38
|
+
// a call like:
|
|
39
|
+
//
|
|
40
|
+
// <Link href="/products/[id]" segmentParams={{ id: maybeUndef }} />
|
|
41
|
+
//
|
|
42
|
+
// reports the actual mismatch (`'string | undefined' is not assignable
|
|
43
|
+
// to 'string | number'` on `id`) instead of the notorious "Type 'string'
|
|
44
|
+
// is not assignable to type 'never'" cascade that the old fixed
|
|
45
|
+
// catch-all produced (TIM-832, sibling of TIM-830 / TIM-624).
|
|
46
|
+
//
|
|
47
|
+
// The interface is kept as an empty placeholder here so:
|
|
48
|
+
// - module augmentation has a base interface to merge into
|
|
49
|
+
// - `link.tsx` can `import type { LinkFunction }` and use it as the
|
|
50
|
+
// cast target for the `Link` const (an empty interface accepts any
|
|
51
|
+
// non-nullable value, so the cast is valid even without codegen run)
|
|
52
|
+
// - NO call signatures live here — in a fresh checkout where codegen
|
|
53
|
+
// hasn't run yet, invoking `<Link>` is deliberately a type error,
|
|
54
|
+
// which surfaces "codegen hasn't run" rather than a misleading
|
|
55
|
+
// structural type mismatch.
|
|
56
|
+
//
|
|
57
|
+
// See TIM-624 (original typed Link), TIM-830 (flat searchParams), and
|
|
58
|
+
// TIM-832 (this restructure for overload error UX).
|
|
59
|
+
// eslint-disable-next-line typescript/no-empty-interface -- augmented by codegen
|
|
60
|
+
export interface LinkFunction {
|
|
61
|
+
// intentionally empty — call signatures are provided via codegen
|
|
62
|
+
// augmentation in `.timber/timber-routes.d.ts`.
|
|
63
|
+
}
|
|
64
|
+
export { usePendingNavigation } from './use-pending-navigation';
|
|
19
65
|
export { useLinkStatus, LinkStatusContext } from './use-link-status';
|
|
20
66
|
export type { LinkStatus } from './use-link-status';
|
|
21
|
-
export { getRouter, setGlobalRouter } from './router-ref';
|
|
22
67
|
export { useRouter } from './use-router';
|
|
23
68
|
export type { AppRouterInstance } from './use-router';
|
|
24
69
|
export { usePathname } from './use-pathname';
|
|
25
|
-
export {
|
|
70
|
+
export { replaceUrl } from './shallow-url';
|
|
71
|
+
// useSearchParams removed from public exports — lives in next/navigation shim only.
|
|
26
72
|
export { useSelectedLayoutSegment, useSelectedLayoutSegments } from './use-selected-layout-segment';
|
|
27
73
|
|
|
28
|
-
// Segment context (internal, used by rsc-entry to inject layout position)
|
|
29
|
-
export { SegmentProvider, useSegmentContext } from './segment-context';
|
|
30
|
-
export type { SegmentContextValue } from './segment-context';
|
|
31
|
-
|
|
32
|
-
// Segment cache (internal, but exported for advanced use)
|
|
33
|
-
export { SegmentCache, PrefetchCache } from './segment-cache';
|
|
34
|
-
export type { SegmentNode, StateTree } from './segment-cache';
|
|
35
|
-
|
|
36
|
-
// History (internal, but exported for advanced use)
|
|
37
|
-
export { HistoryStack } from './history';
|
|
38
|
-
export type { HistoryEntry } from './history';
|
|
39
|
-
|
|
40
74
|
// Forms
|
|
41
|
-
export { useActionState, useFormAction
|
|
75
|
+
export { useActionState, useFormAction } from './form';
|
|
42
76
|
export type { UseActionStateFn, UseActionStateReturn, FormErrorsResult } from './form';
|
|
43
77
|
|
|
44
|
-
// Params
|
|
45
|
-
export {
|
|
78
|
+
// Params — raw hook for untyped access. For typed params, use defineSegmentParams().useSegmentParams().
|
|
79
|
+
export { useSegmentParams } from './use-segment-params';
|
|
46
80
|
|
|
47
|
-
//
|
|
48
|
-
|
|
49
|
-
export type { NavigationState } from './navigation-context';
|
|
81
|
+
// Query states — useQueryStates lives on defineSearchParams().useQueryStates()
|
|
82
|
+
// and is available via direct import for advanced cases.
|
|
50
83
|
|
|
51
|
-
//
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
// Cookies
|
|
55
|
-
export { useCookie } from './use-cookie';
|
|
84
|
+
// Cookies — useCookie lives on defineCookie().useCookie().
|
|
85
|
+
// Types still exported for advanced use.
|
|
56
86
|
export type { ClientCookieOptions, CookieSetter } from './use-cookie';
|
|
57
|
-
|
|
58
|
-
// SSR data (framework-internal, used by ssr-entry to provide request data to hooks)
|
|
59
|
-
export { setSsrData, clearSsrData, getSsrData } from './ssr-data';
|
|
60
|
-
export type { SsrData } from './ssr-data';
|
|
61
|
-
|
|
62
|
-
// Error boundary (framework-internal, used by tree-builder and rsc-entry)
|
|
63
|
-
export { TimberErrorBoundary } from './error-boundary';
|
|
64
|
-
export type { TimberErrorBoundaryProps } from './error-boundary';
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
// #client-internal — Framework-internal client exports
|
|
2
|
+
//
|
|
3
|
+
// This module is a Node package import (#client-internal in package.json
|
|
4
|
+
// "imports" field). It is only resolvable from within @timber-js/app —
|
|
5
|
+
// external consumers cannot import it.
|
|
6
|
+
//
|
|
7
|
+
// These exports are consumed by browser-entry, ssr-entry, and build plugins.
|
|
8
|
+
// They are NOT part of the user-facing API and should not appear in
|
|
9
|
+
// documentation or autocomplete for application developers.
|
|
10
|
+
//
|
|
11
|
+
// Design doc: design/triage/api-naming-spike.md §8.5
|
|
12
|
+
|
|
13
|
+
// ── Bootstrap ────────────────────────────────────────────────────────────
|
|
14
|
+
export { createRouter } from './router.js';
|
|
15
|
+
export type {
|
|
16
|
+
RouterInstance,
|
|
17
|
+
NavigationOptions,
|
|
18
|
+
RouterDeps,
|
|
19
|
+
RouterPhase,
|
|
20
|
+
RscDecoder,
|
|
21
|
+
RootRenderer,
|
|
22
|
+
} from './router.js';
|
|
23
|
+
export { getRouter, getRouterOrNull, setGlobalRouter } from './router-ref.js';
|
|
24
|
+
|
|
25
|
+
// ── SSR bridge ───────────────────────────────────────────────────────────
|
|
26
|
+
export { setSsrData, clearSsrData, getSsrData } from './ssr-data.js';
|
|
27
|
+
export type { SsrData } from './ssr-data.js';
|
|
28
|
+
|
|
29
|
+
// ── Segment context ──────────────────────────────────────────────────────
|
|
30
|
+
export { SegmentProvider, useSegmentContext } from './segment-context.js';
|
|
31
|
+
export type { SegmentContextValue } from './segment-context.js';
|
|
32
|
+
|
|
33
|
+
// ── Segment cache ────────────────────────────────────────────────────────
|
|
34
|
+
export { SegmentCache, PrefetchCache } from './segment-cache.js';
|
|
35
|
+
export type { SegmentNode, StateTree } from './segment-cache.js';
|
|
36
|
+
|
|
37
|
+
// ── History ──────────────────────────────────────────────────────────────
|
|
38
|
+
export { HistoryStack } from './history.js';
|
|
39
|
+
export type { HistoryEntry } from './history.js';
|
|
40
|
+
|
|
41
|
+
// ── Params (internal setter + raw hooks) ─────────────────────────────────
|
|
42
|
+
export { setCurrentParams } from './use-segment-params.js';
|
|
43
|
+
export { useSearchParams } from './use-search-params.js';
|
|
44
|
+
|
|
45
|
+
// ── Navigation context ───────────────────────────────────────────────────
|
|
46
|
+
export {
|
|
47
|
+
NavigationProvider,
|
|
48
|
+
getNavigationState,
|
|
49
|
+
setNavigationState,
|
|
50
|
+
} from './navigation-context.js';
|
|
51
|
+
export type { NavigationState } from './navigation-context.js';
|
|
52
|
+
|
|
53
|
+
// ── Query states (internal binder) ───────────────────────────────────────
|
|
54
|
+
export { bindUseQueryStates } from './use-query-states.js';
|
|
55
|
+
|
|
56
|
+
// ── Error boundary ───────────────────────────────────────────────────────
|
|
57
|
+
export { TimberErrorBoundary } from './error-boundary.js';
|
|
58
|
+
export type { TimberErrorBoundaryProps } from './error-boundary.js';
|