@timber-js/app 0.2.0-alpha.8 → 0.2.0-alpha.80
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +8 -0
- package/dist/_chunks/actions-Dg-ANYHb.js +421 -0
- package/dist/_chunks/actions-Dg-ANYHb.js.map +1 -0
- package/dist/_chunks/{als-registry-B7DbZ2hS.js → als-registry-HS0LGUl2.js} +1 -1
- package/dist/_chunks/als-registry-HS0LGUl2.js.map +1 -0
- package/dist/_chunks/chunk-DYhsFzuS.js +33 -0
- package/dist/_chunks/{debug-gwlJkDuf.js → debug-ECi_61pb.js} +2 -2
- package/dist/_chunks/debug-ECi_61pb.js.map +1 -0
- package/dist/_chunks/define-C77ScO0m.js +106 -0
- package/dist/_chunks/define-C77ScO0m.js.map +1 -0
- package/dist/_chunks/define-CZqDwhSu.js +199 -0
- package/dist/_chunks/define-CZqDwhSu.js.map +1 -0
- package/dist/_chunks/define-cookie-C2IkoFGN.js +94 -0
- package/dist/_chunks/define-cookie-C2IkoFGN.js.map +1 -0
- package/dist/_chunks/{format-DviM89f0.js → dev-warnings-DpGRGoDi.js} +5 -44
- package/dist/_chunks/dev-warnings-DpGRGoDi.js.map +1 -0
- package/dist/_chunks/format-CYBGxKtc.js +14 -0
- package/dist/_chunks/format-CYBGxKtc.js.map +1 -0
- package/dist/_chunks/{interception-BOoWmLUA.js → interception-Dpn_UfAD.js} +171 -97
- package/dist/_chunks/interception-Dpn_UfAD.js.map +1 -0
- package/dist/_chunks/merge-search-params-Cm_KIWDX.js +41 -0
- package/dist/_chunks/merge-search-params-Cm_KIWDX.js.map +1 -0
- package/dist/_chunks/{metadata-routes-Cjmvi3rQ.js → metadata-routes-DS3eKNmf.js} +1 -1
- package/dist/_chunks/{metadata-routes-Cjmvi3rQ.js.map → metadata-routes-DS3eKNmf.js.map} +1 -1
- package/dist/_chunks/request-context-qMsWgy9C.js +478 -0
- package/dist/_chunks/request-context-qMsWgy9C.js.map +1 -0
- package/dist/_chunks/schema-bridge-C3xl_vfb.js +86 -0
- package/dist/_chunks/schema-bridge-C3xl_vfb.js.map +1 -0
- package/dist/_chunks/segment-classify-BDNn6EzD.js +65 -0
- package/dist/_chunks/segment-classify-BDNn6EzD.js.map +1 -0
- package/dist/_chunks/segment-context-fHFLF1PE.js +34 -0
- package/dist/_chunks/segment-context-fHFLF1PE.js.map +1 -0
- package/dist/_chunks/{ssr-data-MjmprTmO.js → ssr-data-DzuI0bIV.js} +1 -1
- package/dist/_chunks/{ssr-data-MjmprTmO.js.map → ssr-data-DzuI0bIV.js.map} +1 -1
- package/dist/_chunks/stale-reload-C2plcNtG.js +64 -0
- package/dist/_chunks/stale-reload-C2plcNtG.js.map +1 -0
- package/dist/_chunks/{tracing-CemImE6h.js → tracing-CCYbKn5n.js} +60 -9
- package/dist/_chunks/tracing-CCYbKn5n.js.map +1 -0
- package/dist/_chunks/use-params-Br9YSUFV.js +295 -0
- package/dist/_chunks/use-params-Br9YSUFV.js.map +1 -0
- package/dist/_chunks/{use-query-states-D5KaffOK.js → use-query-states-Lo_s_pw2.js} +4 -4
- package/dist/_chunks/use-query-states-Lo_s_pw2.js.map +1 -0
- package/dist/_chunks/wrappers-_DTmImGt.js +63 -0
- package/dist/_chunks/wrappers-_DTmImGt.js.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 +135 -11
- 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 +56 -13
- package/dist/adapters/nitro.js.map +1 -1
- 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 +142 -80
- 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.d.ts +6 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +6 -1
- package/dist/cli.js.map +1 -1
- package/dist/client/browser-dev.d.ts +27 -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 +23 -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 +10 -4
- 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 +2 -2
- 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 +7 -21
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +210 -1017
- package/dist/client/index.js.map +1 -1
- package/dist/client/internal.d.ts +18 -0
- package/dist/client/internal.d.ts.map +1 -0
- package/dist/client/internal.js +890 -0
- package/dist/client/internal.js.map +1 -0
- package/dist/client/link-pending-store.d.ts +63 -0
- package/dist/client/link-pending-store.d.ts.map +1 -0
- package/dist/client/link.d.ts +90 -32
- package/dist/client/link.d.ts.map +1 -1
- package/dist/client/nav-link-store.d.ts +36 -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 +13 -2
- package/dist/client/navigation-context.d.ts.map +1 -1
- package/dist/client/{transition-root.d.ts → navigation-root.d.ts} +42 -8
- 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 +70 -4
- package/dist/client/router.d.ts.map +1 -1
- package/dist/client/rsc-fetch.d.ts +38 -3
- package/dist/client/rsc-fetch.d.ts.map +1 -1
- package/dist/client/segment-cache.d.ts +1 -1
- package/dist/client/segment-cache.d.ts.map +1 -1
- package/dist/client/segment-outlet.d.ts +63 -0
- package/dist/client/segment-outlet.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/top-loader.d.ts +5 -5
- package/dist/client/top-loader.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-params.d.ts +6 -4
- package/dist/client/use-params.d.ts.map +1 -1
- package/dist/client/{use-navigation-pending.d.ts → use-pending-navigation.d.ts} +4 -4
- 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/codec.d.ts +33 -0
- package/dist/codec.d.ts.map +1 -0
- package/dist/codec.js +2 -0
- package/dist/config-types.d.ts +210 -0
- package/dist/config-types.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 +35 -14
- package/dist/cookies/define-cookie.d.ts.map +1 -1
- package/dist/cookies/index.js +1 -83
- package/dist/fonts/css.d.ts +1 -0
- package/dist/fonts/css.d.ts.map +1 -1
- package/dist/index.d.ts +45 -192
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12296 -11901
- package/dist/index.js.map +1 -1
- package/dist/plugin-context.d.ts +84 -0
- package/dist/plugin-context.d.ts.map +1 -0
- package/dist/plugins/adapter-build.d.ts +1 -1
- package/dist/plugins/adapter-build.d.ts.map +1 -1
- package/dist/plugins/build-manifest.d.ts +2 -2
- package/dist/plugins/build-manifest.d.ts.map +1 -1
- package/dist/plugins/build-report.d.ts +3 -3
- package/dist/plugins/build-report.d.ts.map +1 -1
- package/dist/plugins/client-chunks.d.ts +32 -0
- package/dist/plugins/client-chunks.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-browser-logs.d.ts +84 -0
- package/dist/plugins/dev-browser-logs.d.ts.map +1 -0
- package/dist/plugins/dev-error-overlay.d.ts +26 -1
- package/dist/plugins/dev-error-overlay.d.ts.map +1 -1
- package/dist/plugins/dev-logs.d.ts +1 -1
- package/dist/plugins/dev-logs.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 +19 -5
- 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 +4 -4
- package/dist/plugins/static-build.d.ts.map +1 -1
- package/dist/routing/codegen.d.ts +2 -2
- package/dist/routing/codegen.d.ts.map +1 -1
- package/dist/routing/index.d.ts +2 -0
- package/dist/routing/index.d.ts.map +1 -1
- package/dist/routing/index.js +3 -2
- package/dist/routing/scanner.d.ts.map +1 -1
- package/dist/routing/segment-classify.d.ts +46 -0
- package/dist/routing/segment-classify.d.ts.map +1 -0
- package/dist/routing/status-file-lint.d.ts +2 -1
- package/dist/routing/status-file-lint.d.ts.map +1 -1
- package/dist/routing/types.d.ts +16 -4
- package/dist/routing/types.d.ts.map +1 -1
- 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 +139 -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 +4 -474
- 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 +78 -0
- package/dist/segment-params/define.d.ts.map +1 -0
- package/dist/segment-params/index.d.ts +6 -0
- package/dist/segment-params/index.d.ts.map +1 -0
- package/dist/segment-params/index.js +4 -0
- package/dist/server/access-gate.d.ts +4 -0
- package/dist/server/access-gate.d.ts.map +1 -1
- package/dist/server/action-client.d.ts +12 -1
- 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.map +1 -1
- package/dist/server/actions.d.ts +3 -6
- package/dist/server/actions.d.ts.map +1 -1
- package/dist/server/als-registry.d.ts +32 -4
- package/dist/server/als-registry.d.ts.map +1 -1
- package/dist/server/build-manifest.d.ts +2 -2
- package/dist/server/build-manifest.d.ts.map +1 -1
- package/dist/server/debug.d.ts +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-page-resolver.d.ts +52 -0
- package/dist/server/deny-page-resolver.d.ts.map +1 -0
- package/dist/server/deny-renderer.d.ts.map +1 -1
- package/dist/server/dev-holding-server.d.ts +52 -0
- package/dist/server/dev-holding-server.d.ts.map +1 -0
- package/dist/server/dev-warnings.d.ts +1 -21
- package/dist/server/dev-warnings.d.ts.map +1 -1
- package/dist/server/early-hints.d.ts +13 -5
- 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 +4 -3
- 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-injectors.d.ts +51 -11
- package/dist/server/html-injectors.d.ts.map +1 -1
- package/dist/server/index.d.ts +6 -43
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +38 -2798
- package/dist/server/index.js.map +1 -1
- package/dist/server/internal.d.ts +46 -0
- package/dist/server/internal.d.ts.map +1 -0
- package/dist/server/internal.js +2883 -0
- package/dist/server/internal.js.map +1 -0
- package/dist/server/logger.d.ts +25 -7
- package/dist/server/logger.d.ts.map +1 -1
- package/dist/server/middleware-runner.d.ts +19 -4
- package/dist/server/middleware-runner.d.ts.map +1 -1
- package/dist/server/node-stream-transforms.d.ts +113 -0
- package/dist/server/node-stream-transforms.d.ts.map +1 -0
- package/dist/server/page-deny-boundary.d.ts +31 -0
- package/dist/server/page-deny-boundary.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.d.ts +42 -10
- package/dist/server/pipeline.d.ts.map +1 -1
- package/dist/server/primitives.d.ts +69 -18
- 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 +112 -43
- package/dist/server/request-context.d.ts.map +1 -1
- package/dist/server/route-element-builder.d.ts +27 -1
- 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 +9 -2
- package/dist/server/route-matcher.d.ts.map +1 -1
- package/dist/server/rsc-entry/api-handler.d.ts +2 -2
- 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 +48 -5
- package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
- package/dist/server/rsc-entry/index.d.ts +8 -3
- package/dist/server/rsc-entry/index.d.ts.map +1 -1
- 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 +4 -1
- package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
- package/dist/server/rsc-entry/ssr-bridge.d.ts +1 -1
- package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -1
- package/dist/server/rsc-entry/ssr-renderer.d.ts +19 -4
- package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
- package/dist/server/safe-load.d.ts +46 -0
- package/dist/server/safe-load.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-entry.d.ts +22 -0
- package/dist/server/ssr-entry.d.ts.map +1 -1
- package/dist/server/ssr-render.d.ts +39 -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/status-code-resolver.d.ts +1 -1
- 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 +4 -4
- package/dist/server/tracing.d.ts.map +1 -1
- package/dist/server/tree-builder.d.ts +22 -19
- package/dist/server/tree-builder.d.ts.map +1 -1
- package/dist/server/types.d.ts +1 -4
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/version-skew.d.ts +61 -0
- package/dist/server/version-skew.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/navigation-client.d.ts +1 -1
- package/dist/shims/navigation-client.d.ts.map +1 -1
- package/dist/shims/navigation.d.ts +3 -2
- package/dist/shims/navigation.d.ts.map +1 -1
- package/dist/utils/directive-parser.d.ts +5 -2
- package/dist/utils/directive-parser.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 +53 -23
- package/src/adapters/cloudflare-dev.ts +177 -0
- package/src/adapters/cloudflare-kv-cache.ts +142 -0
- package/src/adapters/cloudflare.ts +342 -28
- package/src/adapters/compress-module.ts +24 -4
- package/src/adapters/nitro.ts +52 -8
- package/src/adapters/wrangler.d.ts +7 -0
- package/src/cache/cache-api.ts +38 -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 +31 -0
- package/src/cache/timber-cache.ts +24 -20
- package/src/cli.ts +6 -1
- package/src/client/browser-dev.ts +128 -1
- package/src/client/browser-entry/action-dispatch.ts +116 -0
- package/src/client/browser-entry/hmr.ts +81 -0
- package/src/client/browser-entry/hydrate.ts +145 -0
- package/src/client/browser-entry/index.ts +138 -0
- package/src/client/browser-entry/post-hydration.ts +119 -0
- package/src/client/browser-entry/router-init.ts +193 -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 +48 -16
- package/src/client/error-reconstituter.tsx +65 -0
- package/src/client/form.tsx +2 -2
- package/src/client/history.ts +26 -4
- package/src/client/index.ts +19 -38
- package/src/client/internal.ts +57 -0
- package/src/client/link-pending-store.ts +111 -0
- package/src/client/link.tsx +329 -97
- package/src/client/nav-link-store.ts +47 -0
- package/src/client/navigation-api-types.ts +112 -0
- package/src/client/navigation-api.ts +332 -0
- package/src/client/navigation-context.ts +31 -6
- package/src/client/navigation-root.tsx +342 -0
- package/src/client/nuqs-adapter.tsx +16 -3
- package/src/client/router-ref.ts +1 -1
- package/src/client/router.ts +299 -72
- package/src/client/rsc-fetch.ts +97 -8
- package/src/client/segment-cache.ts +1 -1
- package/src/client/segment-outlet.tsx +86 -0
- package/src/client/ssr-data.ts +13 -5
- package/src/client/stale-reload.ts +72 -3
- package/src/client/top-loader.tsx +16 -8
- package/src/client/use-link-status.ts +7 -7
- package/src/client/use-params.ts +7 -5
- package/src/client/{use-navigation-pending.ts → use-pending-navigation.ts} +6 -6
- package/src/client/use-query-states.ts +3 -3
- package/src/client/use-router.ts +1 -1
- package/src/codec.ts +49 -0
- package/src/config-types.ts +208 -0
- package/src/content/index.ts +5 -13
- package/src/cookies/define-cookie.ts +78 -25
- package/src/cookies/index.ts +8 -0
- package/src/fonts/css.ts +2 -1
- package/src/index.ts +258 -354
- package/src/plugin-context.ts +200 -0
- package/src/plugins/adapter-build.ts +8 -2
- package/src/plugins/build-manifest.ts +13 -2
- package/src/plugins/build-report.ts +3 -3
- package/src/plugins/client-chunks.ts +65 -0
- package/src/plugins/content.ts +1 -1
- package/src/plugins/dev-browser-logs.ts +288 -0
- package/src/plugins/dev-error-overlay.ts +70 -1
- package/src/plugins/dev-logs.ts +1 -1
- package/src/plugins/dev-server.ts +70 -9
- package/src/plugins/entries.ts +71 -10
- package/src/plugins/fonts.ts +168 -61
- package/src/plugins/mdx.ts +1 -1
- package/src/plugins/routing.ts +57 -17
- package/src/plugins/server-action-exports.ts +1 -1
- package/src/plugins/server-bundle.ts +32 -1
- package/src/plugins/shims.ts +135 -35
- package/src/plugins/static-build.ts +17 -11
- package/src/routing/codegen.ts +165 -105
- package/src/routing/index.ts +2 -0
- package/src/routing/scanner.ts +93 -23
- package/src/routing/segment-classify.ts +89 -0
- package/src/routing/status-file-lint.ts +3 -2
- package/src/routing/types.ts +17 -4
- 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} +57 -20
- package/src/search-params/define.ts +482 -0
- package/src/search-params/index.ts +14 -20
- package/src/search-params/registry.ts +2 -2
- package/src/search-params/wrappers.ts +85 -0
- package/src/segment-params/define.ts +279 -0
- package/src/segment-params/index.ts +29 -0
- package/src/server/access-gate.tsx +70 -29
- package/src/server/action-client.ts +21 -2
- package/src/server/action-encryption.ts +144 -0
- package/src/server/action-handler.ts +21 -4
- package/src/server/actions.ts +10 -9
- package/src/server/als-registry.ts +34 -6
- package/src/server/build-manifest.ts +10 -4
- package/src/server/compress.ts +25 -7
- package/src/server/debug.ts +1 -1
- package/src/server/default-logger.ts +99 -0
- package/src/server/deny-page-resolver.ts +154 -0
- package/src/server/deny-renderer.ts +24 -38
- package/src/server/dev-holding-server.ts +185 -0
- package/src/server/dev-warnings.ts +4 -49
- package/src/server/early-hints.ts +36 -15
- package/src/server/error-boundary-wrapper.ts +74 -22
- package/src/server/fallback-error.ts +31 -15
- 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 +76 -0
- package/src/server/html-injectors.ts +280 -120
- package/src/server/index.ts +26 -177
- package/src/server/internal.ts +169 -0
- package/src/server/logger.ts +44 -36
- package/src/server/middleware-runner.ts +31 -4
- package/src/server/node-stream-transforms.ts +509 -0
- package/src/server/page-deny-boundary.tsx +56 -0
- package/src/server/pipeline-interception.ts +17 -16
- package/src/server/pipeline-metadata.ts +13 -0
- package/src/server/pipeline.ts +227 -62
- package/src/server/primitives.ts +111 -28
- package/src/server/render-timeout.ts +108 -0
- package/src/server/request-context.ts +293 -132
- package/src/server/route-element-builder.ts +283 -191
- package/src/server/route-handler.ts +24 -4
- package/src/server/route-matcher.ts +24 -20
- package/src/server/rsc-entry/api-handler.ts +15 -16
- package/src/server/rsc-entry/error-renderer.ts +300 -89
- package/src/server/rsc-entry/helpers.ts +134 -5
- package/src/server/rsc-entry/index.ts +200 -112
- package/src/server/rsc-entry/rsc-payload.ts +65 -18
- package/src/server/rsc-entry/rsc-stream.ts +65 -13
- package/src/server/rsc-entry/ssr-bridge.ts +14 -5
- package/src/server/rsc-entry/ssr-renderer.ts +168 -38
- package/src/server/safe-load.ts +60 -0
- package/src/server/sitemap-generator.ts +338 -0
- package/src/server/sitemap-handler.ts +126 -0
- package/src/server/slot-resolver.ts +244 -229
- package/src/server/ssr-entry.ts +211 -32
- package/src/server/ssr-render.ts +289 -67
- package/src/server/ssr-wrappers.tsx +139 -0
- package/src/server/status-code-resolver.ts +1 -1
- package/src/server/stream-utils.ts +213 -0
- package/src/server/tracing.ts +20 -9
- package/src/server/tree-builder.ts +92 -58
- package/src/server/types.ts +3 -6
- package/src/server/version-skew.ts +104 -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 +1 -1
- package/src/shims/navigation.ts +7 -2
- package/src/utils/directive-parser.ts +5 -2
- package/src/utils/state-machine.ts +111 -0
- package/dist/_chunks/als-registry-B7DbZ2hS.js.map +0 -1
- package/dist/_chunks/debug-gwlJkDuf.js.map +0 -1
- package/dist/_chunks/format-DviM89f0.js.map +0 -1
- package/dist/_chunks/interception-BOoWmLUA.js.map +0 -1
- package/dist/_chunks/request-context-DIkVh_jG.js +0 -330
- package/dist/_chunks/request-context-DIkVh_jG.js.map +0 -1
- 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/transition-root.d.ts.map +0 -1
- package/dist/client/use-navigation-pending.d.ts.map +0 -1
- package/dist/cookies/index.js.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/dynamic-transform.d.ts +0 -72
- package/dist/plugins/dynamic-transform.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/search-params/index.js.map +0 -1
- package/dist/server/prerender.d.ts +0 -77
- package/dist/server/prerender.d.ts.map +0 -1
- package/dist/server/response-cache.d.ts +0 -54
- package/dist/server/response-cache.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/transition-root.tsx +0 -166
- package/src/plugins/cache-transform.ts +0 -199
- package/src/plugins/dynamic-transform.ts +0 -161
- 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/prerender.ts +0 -139
- package/src/server/response-cache.ts +0 -410
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Navigation API integration — progressive enhancement for client navigation.
|
|
3
|
+
*
|
|
4
|
+
* When the Navigation API (`window.navigation`) is available, this module
|
|
5
|
+
* provides an intercept-based navigation model that replaces the separate
|
|
6
|
+
* popstate + click handler approach with a single navigate event listener.
|
|
7
|
+
*
|
|
8
|
+
* Key benefits:
|
|
9
|
+
* - Intercepts ALL navigations (link clicks, form submissions, back/forward)
|
|
10
|
+
* - Built-in AbortSignal per navigation (auto-aborts in-flight fetches)
|
|
11
|
+
* - Per-entry state via NavigationHistoryEntry.getState()
|
|
12
|
+
* - navigation.transition for progress tracking
|
|
13
|
+
*
|
|
14
|
+
* When unavailable, all functions are no-ops and the History API fallback
|
|
15
|
+
* in browser-entry.ts handles navigation.
|
|
16
|
+
*
|
|
17
|
+
* See design/19-client-navigation.md
|
|
18
|
+
*/
|
|
19
|
+
import type { NavigationApi } from './navigation-api-types.js';
|
|
20
|
+
/**
|
|
21
|
+
* Returns true if the Navigation API is available in the current environment.
|
|
22
|
+
* Feature-detected at runtime — no polyfill.
|
|
23
|
+
*/
|
|
24
|
+
export declare function hasNavigationApi(): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Get the Navigation API instance. Returns null if unavailable.
|
|
27
|
+
* Uses type assertion — we never import Navigation API types unconditionally.
|
|
28
|
+
*/
|
|
29
|
+
export declare function getNavigationApi(): NavigationApi | null;
|
|
30
|
+
/**
|
|
31
|
+
* Callbacks for the Navigation API event handler.
|
|
32
|
+
*
|
|
33
|
+
* When the Navigation API intercepts a navigation, it delegates to these
|
|
34
|
+
* callbacks which run the RSC fetch + render pipeline.
|
|
35
|
+
*/
|
|
36
|
+
export interface NavigationApiCallbacks {
|
|
37
|
+
/**
|
|
38
|
+
* Handle a push/replace navigation intercepted by the Navigation API.
|
|
39
|
+
* This covers both Link <a> clicks (user-initiated, with metadata from
|
|
40
|
+
* nav-link-store) and external navigations (plain <a> tags, programmatic).
|
|
41
|
+
* The Navigation API handles the URL update via event.intercept().
|
|
42
|
+
*/
|
|
43
|
+
onExternalNavigate: (url: string, options: {
|
|
44
|
+
replace: boolean;
|
|
45
|
+
signal: AbortSignal;
|
|
46
|
+
scroll?: boolean;
|
|
47
|
+
}) => Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* Handle a traversal (back/forward button). The Navigation API intercepts
|
|
50
|
+
* the traversal and delegates to us for RSC replay/fetch.
|
|
51
|
+
*/
|
|
52
|
+
onTraverse: (url: string, scrollY: number, signal: AbortSignal) => Promise<void>;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Controller returned by setupNavigationApi. Provides methods to
|
|
56
|
+
* coordinate between the router and the navigate event listener.
|
|
57
|
+
*/
|
|
58
|
+
export interface NavigationApiController {
|
|
59
|
+
/**
|
|
60
|
+
* Set the router-navigating flag. When `true`, the next navigate event
|
|
61
|
+
* (from pushState/replaceState) is recognized as router-initiated. The
|
|
62
|
+
* handler still intercepts it — but ties the browser's native loading
|
|
63
|
+
* state to a deferred promise instead of running the RSC pipeline again.
|
|
64
|
+
*
|
|
65
|
+
* This means `navigation.transition` is active for the full duration of
|
|
66
|
+
* every router-initiated navigation, giving the browser a native loading
|
|
67
|
+
* indicator (tab spinner, address bar) aligned with the TopLoader.
|
|
68
|
+
*
|
|
69
|
+
* Must be called synchronously around pushState/replaceState:
|
|
70
|
+
* controller.setRouterNavigating(true);
|
|
71
|
+
* history.pushState(...); // navigate event fires, intercepted
|
|
72
|
+
* controller.setRouterNavigating(false); // flag off, deferred stays open
|
|
73
|
+
*/
|
|
74
|
+
setRouterNavigating: (value: boolean) => void;
|
|
75
|
+
/**
|
|
76
|
+
* Resolve the deferred promise created by setRouterNavigating(true),
|
|
77
|
+
* clearing the browser's native loading state. Call this when the
|
|
78
|
+
* navigation fully completes — aligned with when the TopLoader's
|
|
79
|
+
* pendingUrl clears (same finally block in router.navigate).
|
|
80
|
+
*/
|
|
81
|
+
completeRouterNavigation: () => void;
|
|
82
|
+
/**
|
|
83
|
+
* Initiate a navigation via the Navigation API (`navigation.navigate()`).
|
|
84
|
+
* Unlike `history.pushState()`, this fires the navigate event BEFORE
|
|
85
|
+
* committing the URL — allowing Chrome to show its native loading
|
|
86
|
+
* indicator while the intercept handler runs.
|
|
87
|
+
*
|
|
88
|
+
* Must be called with setRouterNavigating(true) active so the handler
|
|
89
|
+
* recognizes it as router-initiated and uses the deferred promise.
|
|
90
|
+
*/
|
|
91
|
+
navigate: (url: string, replace: boolean) => void;
|
|
92
|
+
/**
|
|
93
|
+
* Save scroll position into the current navigation entry's state.
|
|
94
|
+
* Uses navigation.updateCurrentEntry() for per-entry scroll storage.
|
|
95
|
+
*/
|
|
96
|
+
saveScrollPosition: (scrollY: number) => void;
|
|
97
|
+
/**
|
|
98
|
+
* Check if the Navigation API has an active transition.
|
|
99
|
+
* Returns the transition object if available, null otherwise.
|
|
100
|
+
*/
|
|
101
|
+
hasActiveTransition: () => boolean;
|
|
102
|
+
/** Remove the navigate event listener. */
|
|
103
|
+
cleanup: () => void;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Set up the Navigation API navigate event listener.
|
|
107
|
+
*
|
|
108
|
+
* Intercepts same-origin navigations and delegates to the provided callbacks.
|
|
109
|
+
* Router-initiated navigations (pushState from router.navigate) are detected
|
|
110
|
+
* via a synchronous flag and NOT intercepted — the router already handles them.
|
|
111
|
+
*
|
|
112
|
+
* Returns a controller for coordinating with the router.
|
|
113
|
+
*/
|
|
114
|
+
export declare function setupNavigationApi(callbacks: NavigationApiCallbacks): NavigationApiController;
|
|
115
|
+
//# sourceMappingURL=navigation-api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigation-api.d.ts","sourceRoot":"","sources":["../../src/client/navigation-api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,2BAA2B,CAAC;AAM9E;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAM1C;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,GAAG,IAAI,CAGvD;AAID;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;;OAKG;IACH,kBAAkB,EAAE,CAClB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,WAAW,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,KACjE,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnB;;;OAGG;IACH,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAClF;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC;;;;;;;;;;;;;;OAcG;IACH,mBAAmB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAE9C;;;;;OAKG;IACH,wBAAwB,EAAE,MAAM,IAAI,CAAC;IAErC;;;;;;;;OAQG;IACH,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAElD;;;OAGG;IACH,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAE9C;;;OAGG;IACH,mBAAmB,EAAE,MAAM,OAAO,CAAC;IAEnC,0CAA0C;IAC1C,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,sBAAsB,GAAG,uBAAuB,CAgM7F"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Holds the current route params and pathname, updated atomically
|
|
5
5
|
* with the RSC tree on each navigation. This replaces the previous
|
|
6
|
-
* useSyncExternalStore approach for
|
|
6
|
+
* useSyncExternalStore approach for useSegmentParams() and usePathname(),
|
|
7
7
|
* which suffered from a timing gap: the new tree could commit before
|
|
8
8
|
* the external store re-renders fired, causing a frame where both
|
|
9
9
|
* old and new active states were visible simultaneously.
|
|
@@ -44,7 +44,7 @@ export interface NavigationState {
|
|
|
44
44
|
/**
|
|
45
45
|
* Read the navigation context. Returns null during SSR (no provider)
|
|
46
46
|
* or in the RSC environment (no context available).
|
|
47
|
-
* Internal — used by
|
|
47
|
+
* Internal — used by useSegmentParams() and usePathname().
|
|
48
48
|
*/
|
|
49
49
|
export declare function useNavigationContext(): NavigationState | null;
|
|
50
50
|
export interface NavigationProviderProps {
|
|
@@ -73,4 +73,15 @@ export declare function PendingNavigationProvider({ value, children, }: {
|
|
|
73
73
|
value: string | null;
|
|
74
74
|
children?: ReactNode;
|
|
75
75
|
}): React.ReactElement;
|
|
76
|
+
/**
|
|
77
|
+
* Check if the browser's Navigation API has an active transition.
|
|
78
|
+
*
|
|
79
|
+
* When the Navigation API is available and a navigation has been intercepted
|
|
80
|
+
* via event.intercept(), `navigation.transition` is non-null until the
|
|
81
|
+
* handler resolves. This provides browser-native progress tracking that
|
|
82
|
+
* can be used alongside the existing pendingUrl mechanism.
|
|
83
|
+
*
|
|
84
|
+
* Returns false when Navigation API is unavailable or no transition is active.
|
|
85
|
+
*/
|
|
86
|
+
export declare function hasNativeNavigationTransition(): boolean;
|
|
76
87
|
//# sourceMappingURL=navigation-context.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation-context.d.ts","sourceRoot":"","sources":["../../src/client/navigation-context.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,KAAK,EAAE,EAAiB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAM7D,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC;CAClB;
|
|
1
|
+
{"version":3,"file":"navigation-context.d.ts","sourceRoot":"","sources":["../../src/client/navigation-context.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,KAAK,EAAE,EAAiB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAM7D,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC;CAClB;AA2CD;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,eAAe,GAAG,IAAI,CAM7D;AAMD,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,eAAe,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,QAAQ,GACT,EAAE,uBAAuB,GAAG,KAAK,CAAC,YAAY,CAO9C;AA6BD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAE/D;AAED,wBAAgB,kBAAkB,IAAI,eAAe,CAEpD;AA8BD;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,GAAG,IAAI,CAKvD;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,EACxC,KAAK,EACL,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,GAAG,KAAK,CAAC,YAAY,CAMrB;AAMD;;;;;;;;;GASG;AACH,wBAAgB,6BAA6B,IAAI,OAAO,CAIvD"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* NavigationRoot — Wrapper component for transition-based rendering.
|
|
3
3
|
*
|
|
4
4
|
* Solves the "new boundary has no old content" problem for client-side
|
|
5
5
|
* navigation. When React renders a completely new Suspense boundary via
|
|
6
6
|
* root.render(), it shows the fallback immediately — root.render() is
|
|
7
7
|
* always an urgent update regardless of startTransition.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
9
|
+
* NavigationRoot holds the current element in React state. Navigation
|
|
10
10
|
* updates call startTransition(() => setState(newElement)), which IS
|
|
11
11
|
* a transition update. React keeps the old committed tree visible while
|
|
12
12
|
* any new Suspense boundaries in the transition resolve.
|
|
@@ -18,11 +18,33 @@
|
|
|
18
18
|
* alongside `setElement(newTree)` — both commit atomically, so the
|
|
19
19
|
* spinner disappears in the same frame as the new content appears.
|
|
20
20
|
*
|
|
21
|
+
* Hard navigation guard: When a hard navigation is triggered (500 error,
|
|
22
|
+
* version skew), the component throws an unresolved thenable AFTER all
|
|
23
|
+
* hooks to suspend forever — preventing React from rendering children
|
|
24
|
+
* during page teardown. The throw must come after hooks to satisfy
|
|
25
|
+
* React's rules (same hook count every render) while still preventing
|
|
26
|
+
* child renders that could hit hook count mismatches in components
|
|
27
|
+
* whose positions shift during teardown. This pattern is borrowed from
|
|
28
|
+
* Next.js (app-router.tsx pushRef.mpaNavigation — also after hooks).
|
|
29
|
+
*
|
|
21
30
|
* See design/05-streaming.md §"deferSuspenseFor"
|
|
22
31
|
* See design/19-client-navigation.md §"NavigationContext"
|
|
23
32
|
*/
|
|
24
33
|
import { type ReactNode } from 'react';
|
|
25
34
|
import { type TopLoaderConfig } from './top-loader.js';
|
|
35
|
+
/**
|
|
36
|
+
* Set the hard-navigating flag. Call this BEFORE setting
|
|
37
|
+
* window.location.href or window.location.reload() to prevent:
|
|
38
|
+
* 1. React from rendering children during page teardown
|
|
39
|
+
* 2. Navigation API from intercepting the hard navigation
|
|
40
|
+
*/
|
|
41
|
+
export declare function setHardNavigating(value: boolean): void;
|
|
42
|
+
/**
|
|
43
|
+
* Check if a hard navigation is in progress.
|
|
44
|
+
* Used by NavigationRoot (throw unresolvedThenable) and by the
|
|
45
|
+
* Navigation API handler (skip interception).
|
|
46
|
+
*/
|
|
47
|
+
export declare function isHardNavigating(): boolean;
|
|
26
48
|
/**
|
|
27
49
|
* Root wrapper component that enables transition-based rendering.
|
|
28
50
|
*
|
|
@@ -31,7 +53,7 @@ import { type TopLoaderConfig } from './top-loader.js';
|
|
|
31
53
|
* (the provider renders no extra DOM elements).
|
|
32
54
|
*
|
|
33
55
|
* Usage in browser-entry.ts:
|
|
34
|
-
* const rootEl = createElement(
|
|
56
|
+
* const rootEl = createElement(NavigationRoot, { initial: wrapped });
|
|
35
57
|
* reactRoot = hydrateRoot(document, rootEl);
|
|
36
58
|
*
|
|
37
59
|
* Subsequent navigations:
|
|
@@ -40,7 +62,7 @@ import { type TopLoaderConfig } from './top-loader.js';
|
|
|
40
62
|
* Non-navigation renders:
|
|
41
63
|
* transitionRender(newWrappedElement);
|
|
42
64
|
*/
|
|
43
|
-
export declare function
|
|
65
|
+
export declare function NavigationRoot({ initial, topLoaderConfig, }: {
|
|
44
66
|
initial: ReactNode;
|
|
45
67
|
topLoaderConfig?: TopLoaderConfig;
|
|
46
68
|
}): ReactNode;
|
|
@@ -57,7 +79,7 @@ export declare function transitionRender(element: ReactNode): void;
|
|
|
57
79
|
*
|
|
58
80
|
* The `perform` callback runs inside `startTransition` — it should fetch the
|
|
59
81
|
* RSC payload, update router state, and return the wrapped React element.
|
|
60
|
-
* The pending URL shows immediately (
|
|
82
|
+
* The pending URL shows immediately (urgent update) and reverts
|
|
61
83
|
* to null when the transition commits (atomic with the new tree).
|
|
62
84
|
*
|
|
63
85
|
* Returns a Promise that resolves when the async work completes (note: the
|
|
@@ -67,8 +89,20 @@ export declare function transitionRender(element: ReactNode): void;
|
|
|
67
89
|
*/
|
|
68
90
|
export declare function navigateTransition(pendingUrl: string, perform: () => Promise<ReactNode>): Promise<void>;
|
|
69
91
|
/**
|
|
70
|
-
* Check if the
|
|
92
|
+
* Check if the NavigationRoot is mounted and ready for renders.
|
|
71
93
|
* Used by browser-entry.ts to guard against renders before hydration.
|
|
72
94
|
*/
|
|
73
|
-
export declare function
|
|
74
|
-
|
|
95
|
+
export declare function isNavigationRootReady(): boolean;
|
|
96
|
+
/**
|
|
97
|
+
* Install one-shot deferred callbacks for the no-RSC bootstrap path (TIM-600).
|
|
98
|
+
*
|
|
99
|
+
* When there's no RSC payload, we can't create a React root immediately —
|
|
100
|
+
* `createRoot(document).render(...)` would blank the SSR HTML. Instead,
|
|
101
|
+
* this sets up `_transitionRender` and `_navigateTransition` so that the
|
|
102
|
+
* first client navigation triggers root creation via `createAndMount`.
|
|
103
|
+
*
|
|
104
|
+
* After `createAndMount` runs, NavigationRoot renders and overwrites these
|
|
105
|
+
* callbacks with its real `startTransition`-based implementations.
|
|
106
|
+
*/
|
|
107
|
+
export declare function installDeferredNavigation(createAndMount: (initial: ReactNode) => void): void;
|
|
108
|
+
//# sourceMappingURL=navigation-root.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigation-root.d.ts","sourceRoot":"","sources":["../../src/client/navigation-root.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAsD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAG3F,OAAO,EAAa,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAqDlE;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAEtD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAiCD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,eAAe,GAChB,EAAE;IACD,OAAO,EAAE,SAAS,CAAC;IACnB,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,GAAG,SAAS,CAyGZ;AAID;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,SAAS,GAAG,IAAI,CAIzD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,GAChC,OAAO,CAAC,IAAI,CAAC,CAMf;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CAAC,cAAc,EAAE,CAAC,OAAO,EAAE,SAAS,KAAK,IAAI,GAAG,IAAI,CAc5F"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nuqs-adapter.d.ts","sourceRoot":"","sources":["../../src/client/nuqs-adapter.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAgC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"nuqs-adapter.d.ts","sourceRoot":"","sources":["../../src/client/nuqs-adapter.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAgC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAgGrE;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAatE"}
|
|
@@ -5,7 +5,7 @@ import type { RouterInstance } from './router.js';
|
|
|
5
5
|
export declare function setGlobalRouter(router: RouterInstance): void;
|
|
6
6
|
/**
|
|
7
7
|
* Get the global router instance. Throws if called before bootstrap.
|
|
8
|
-
* Used by client-side hooks (
|
|
8
|
+
* Used by client-side hooks (usePendingNavigation, etc.)
|
|
9
9
|
*/
|
|
10
10
|
export declare function getRouter(): RouterInstance;
|
|
11
11
|
/**
|
package/dist/client/router.d.ts
CHANGED
|
@@ -2,11 +2,25 @@ import { SegmentCache, PrefetchCache } from './segment-cache';
|
|
|
2
2
|
import type { SegmentInfo } from './segment-cache';
|
|
3
3
|
import { HistoryStack } from './history';
|
|
4
4
|
import type { HeadElement } from './head';
|
|
5
|
+
import { type NavigationState } from './navigation-context.js';
|
|
5
6
|
export interface NavigationOptions {
|
|
6
7
|
/** Set to false to prevent scroll-to-top on forward navigation */
|
|
7
8
|
scroll?: boolean;
|
|
8
9
|
/** Use replaceState instead of pushState (replaces current history entry) */
|
|
9
10
|
replace?: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* @internal AbortSignal from the Navigation API's NavigateEvent.
|
|
13
|
+
* When provided, the signal is linked to the router's per-navigation
|
|
14
|
+
* AbortController so in-flight RSC fetches are cancelled when a new
|
|
15
|
+
* navigation starts.
|
|
16
|
+
*/
|
|
17
|
+
_signal?: AbortSignal;
|
|
18
|
+
/**
|
|
19
|
+
* @internal Skip pushState/replaceState — the Navigation API has already
|
|
20
|
+
* updated the URL via event.intercept(). Used for external navigations
|
|
21
|
+
* intercepted by the navigate event handler.
|
|
22
|
+
*/
|
|
23
|
+
_skipHistory?: boolean;
|
|
10
24
|
}
|
|
11
25
|
/**
|
|
12
26
|
* Function that decodes an RSC Flight stream into a React element tree.
|
|
@@ -18,8 +32,12 @@ export type RscDecoder = (fetchPromise: Promise<Response>) => unknown;
|
|
|
18
32
|
* Function that renders a decoded RSC element tree into the DOM.
|
|
19
33
|
* In production: reactRoot.render(element).
|
|
20
34
|
* In tests: a no-op or mock.
|
|
35
|
+
*
|
|
36
|
+
* Receives the current NavigationState explicitly — no temporal
|
|
37
|
+
* coupling with setNavigationState/getNavigationState. The renderer
|
|
38
|
+
* wraps the element in NavigationProvider with this state.
|
|
21
39
|
*/
|
|
22
|
-
export type RootRenderer = (element: unknown) => void;
|
|
40
|
+
export type RootRenderer = (element: unknown, navState: NavigationState) => void;
|
|
23
41
|
/**
|
|
24
42
|
* Platform dependencies injected for testability. In production these
|
|
25
43
|
* map to browser APIs; in tests they're replaced with mocks.
|
|
@@ -50,11 +68,44 @@ export interface RouterDeps {
|
|
|
50
68
|
*
|
|
51
69
|
* The `perform` callback receives a `wrapPayload` function to wrap the
|
|
52
70
|
* decoded RSC payload with NavigationProvider + NuqsAdapter before
|
|
53
|
-
*
|
|
71
|
+
* NavigationRoot sets it as the new element. The `wrapPayload` function
|
|
72
|
+
* receives the NavigationState explicitly — no temporal coupling with
|
|
73
|
+
* getNavigationState().
|
|
54
74
|
*
|
|
55
75
|
* If not provided (tests), the router falls back to renderRoot.
|
|
56
76
|
*/
|
|
57
|
-
navigateTransition?: (pendingUrl: string, perform: (wrapPayload: (payload: unknown) => unknown) => Promise<unknown>) => Promise<void>;
|
|
77
|
+
navigateTransition?: (pendingUrl: string, perform: (wrapPayload: (payload: unknown, navState: NavigationState) => unknown) => Promise<unknown>) => Promise<void>;
|
|
78
|
+
/**
|
|
79
|
+
* Whether the Navigation API is active and handling traversals.
|
|
80
|
+
* When true, the popstate handler is a no-op — the Navigation API's
|
|
81
|
+
* navigate event covers back/forward button presses.
|
|
82
|
+
*/
|
|
83
|
+
navigationApiActive?: boolean;
|
|
84
|
+
/**
|
|
85
|
+
* Called around pushState/replaceState to set a flag that prevents
|
|
86
|
+
* the Navigation API's navigate listener from double-handling
|
|
87
|
+
* router-initiated navigations.
|
|
88
|
+
*/
|
|
89
|
+
setRouterNavigating?: (value: boolean) => void;
|
|
90
|
+
/**
|
|
91
|
+
* Save scroll position via the Navigation API's per-entry state.
|
|
92
|
+
* When provided, used instead of history.replaceState for scroll storage.
|
|
93
|
+
*/
|
|
94
|
+
saveNavigationEntryScroll?: (scrollY: number) => void;
|
|
95
|
+
/**
|
|
96
|
+
* Signal that a router-initiated navigation has completed. Resolves the
|
|
97
|
+
* deferred promise that ties the browser's native loading state to the
|
|
98
|
+
* navigation lifecycle. Called in the finally block of navigate/refresh,
|
|
99
|
+
* aligned with when the TopLoader's pendingUrl clears.
|
|
100
|
+
*/
|
|
101
|
+
completeRouterNavigation?: () => void;
|
|
102
|
+
/**
|
|
103
|
+
* Initiate a navigation via the Navigation API (`navigation.navigate()`).
|
|
104
|
+
* Fires the navigate event BEFORE committing the URL, allowing Chrome
|
|
105
|
+
* to show its native loading indicator. Falls back to pushState when
|
|
106
|
+
* unavailable.
|
|
107
|
+
*/
|
|
108
|
+
navigationNavigate?: (url: string, replace: boolean) => void;
|
|
58
109
|
}
|
|
59
110
|
export interface RouterInstance {
|
|
60
111
|
/** Navigate to a new URL (forward navigation) */
|
|
@@ -62,7 +113,7 @@ export interface RouterInstance {
|
|
|
62
113
|
/** Full re-render of the current URL — no state tree sent */
|
|
63
114
|
refresh(): Promise<void>;
|
|
64
115
|
/** Handle a popstate event (back/forward button). scrollY is read from history.state. */
|
|
65
|
-
handlePopState(url: string, scrollY?: number): Promise<void>;
|
|
116
|
+
handlePopState(url: string, scrollY?: number, externalSignal?: AbortSignal): Promise<void>;
|
|
66
117
|
/** Whether a navigation is currently in flight */
|
|
67
118
|
isPending(): boolean;
|
|
68
119
|
/** The URL currently being navigated to, or null if idle */
|
|
@@ -99,5 +150,20 @@ export interface RouterInstance {
|
|
|
99
150
|
* Create a router instance. In production, called once at app hydration
|
|
100
151
|
* with real browser APIs. In tests, called with mock dependencies.
|
|
101
152
|
*/
|
|
153
|
+
/**
|
|
154
|
+
* Router navigation phase — discriminated union replacing scattered
|
|
155
|
+
* `pending` + `pendingUrl` boolean flags.
|
|
156
|
+
*
|
|
157
|
+
* - `idle`: No navigation in flight. The committed params/pathname
|
|
158
|
+
* are current.
|
|
159
|
+
* - `navigating`: A fetch or render is in progress. `targetUrl` is
|
|
160
|
+
* the destination being navigated to.
|
|
161
|
+
*/
|
|
162
|
+
export type RouterPhase = {
|
|
163
|
+
phase: 'idle';
|
|
164
|
+
} | {
|
|
165
|
+
phase: 'navigating';
|
|
166
|
+
targetUrl: string;
|
|
167
|
+
};
|
|
102
168
|
export declare function createRouter(deps: RouterDeps): RouterInstance;
|
|
103
169
|
//# sourceMappingURL=router.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/client/router.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAoB,MAAM,iBAAiB,CAAC;AAChF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/client/router.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAoB,MAAM,iBAAiB,CAAC;AAChF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAE1C,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,yBAAyB,CAAC;AAajC,MAAM,WAAW,iBAAiB;IAChC,kEAAkE;IAClE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,6EAA6E;IAC7E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,OAAO,CAAC;AAEtE;;;;;;;;GAQG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,KAAK,IAAI,CAAC;AAEjF;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC7D,SAAS,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChE,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACnE,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,aAAa,EAAE,MAAM,MAAM,CAAC;IAC5B,UAAU,EAAE,MAAM,MAAM,CAAC;IACzB,kGAAkG;IAClG,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,mFAAmF;IACnF,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B;;;;OAIG;IACH,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IAC5C,mFAAmF;IACnF,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC;IAC9C;;;;;;;;;;;;OAYG;IACH,kBAAkB,CAAC,EAAE,CACnB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,CACP,WAAW,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,KAAK,OAAO,KAClE,OAAO,CAAC,OAAO,CAAC,KAClB,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAE/C;;;OAGG;IACH,yBAAyB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAEtD;;;;;OAKG;IACH,wBAAwB,CAAC,EAAE,MAAM,IAAI,CAAC;IAEtC;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CAC9D;AAED,MAAM,WAAW,cAAc;IAC7B,iDAAiD;IACjD,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,6DAA6D;IAC7D,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,yFAAyF;IACzF,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3F,kDAAkD;IAClD,SAAS,IAAI,OAAO,CAAC;IACrB,4DAA4D;IAC5D,aAAa,IAAI,MAAM,GAAG,IAAI,CAAC;IAC/B,yCAAyC;IACzC,eAAe,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAClE,6DAA6D;IAC7D,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B;;;;OAIG;IACH,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;IAC9E;;;OAGG;IACH,gBAAgB,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAChD;;;;OAIG;IACH,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACzC,gEAAgE;IAChE,YAAY,EAAE,YAAY,CAAC;IAC3B,iEAAiE;IACjE,aAAa,EAAE,aAAa,CAAC;IAC7B,4CAA4C;IAC5C,YAAY,EAAE,YAAY,CAAC;CAC5B;AAcD;;;GAGG;AACH;;;;;;;;GAQG;AACH,MAAM,MAAM,WAAW,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,YAAY,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzF,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,cAAc,CA6f7D"}
|
|
@@ -19,12 +19,25 @@ export interface FetchResult {
|
|
|
19
19
|
headElements: HeadElement[] | null;
|
|
20
20
|
/** Segment metadata from X-Timber-Segments header for populating the segment cache. */
|
|
21
21
|
segmentInfo: SegmentInfo[] | null;
|
|
22
|
-
/** Route params from X-Timber-Params header for populating
|
|
22
|
+
/** Route params from X-Timber-Params header for populating useSegmentParams(). */
|
|
23
23
|
params: Record<string, string | string[]> | null;
|
|
24
24
|
/** Segment paths that were skipped by the server (for client-side merging). */
|
|
25
25
|
skippedSegments: string[] | null;
|
|
26
26
|
}
|
|
27
27
|
export declare const RSC_CONTENT_TYPE = "text/x-component";
|
|
28
|
+
/** Set the client deployment ID. Called once at bootstrap. */
|
|
29
|
+
export declare function setClientDeploymentId(id: string | null): void;
|
|
30
|
+
/** Get the client deployment ID. */
|
|
31
|
+
export declare function getClientDeploymentId(): string | null;
|
|
32
|
+
/** Header name used by the server to signal a version skew reload. */
|
|
33
|
+
export declare const RELOAD_HEADER = "X-Timber-Reload";
|
|
34
|
+
/** Header name for the client's deployment ID. */
|
|
35
|
+
export declare const DEPLOYMENT_ID_HEADER = "X-Timber-Deployment-Id";
|
|
36
|
+
/**
|
|
37
|
+
* Check if a response signals a version skew reload.
|
|
38
|
+
* Triggers a full page reload if the server indicates the client is stale.
|
|
39
|
+
*/
|
|
40
|
+
export declare function checkReloadSignal(response: Response): boolean;
|
|
28
41
|
export declare function buildRscHeaders(stateTree: {
|
|
29
42
|
segments: string[];
|
|
30
43
|
} | undefined, currentUrl?: string): Record<string, string>;
|
|
@@ -55,7 +68,7 @@ export declare function extractSkippedSegments(response: Response): string[] | n
|
|
|
55
68
|
* Extract route params from the X-Timber-Params response header.
|
|
56
69
|
* Returns null if the header is missing or malformed.
|
|
57
70
|
*
|
|
58
|
-
* Used to populate
|
|
71
|
+
* Used to populate useSegmentParams() after client-side navigation.
|
|
59
72
|
*/
|
|
60
73
|
export declare function extractParams(response: Response): Record<string, string | string[]> | null;
|
|
61
74
|
/**
|
|
@@ -66,6 +79,28 @@ export declare class RedirectError extends Error {
|
|
|
66
79
|
readonly redirectUrl: string;
|
|
67
80
|
constructor(url: string);
|
|
68
81
|
}
|
|
82
|
+
/**
|
|
83
|
+
* Thrown when the server signals a version skew (X-Timber-Reload header).
|
|
84
|
+
* Caught in navigate() to trigger a full page reload via triggerStaleReload().
|
|
85
|
+
* See TIM-446.
|
|
86
|
+
*/
|
|
87
|
+
export declare class VersionSkewError extends Error {
|
|
88
|
+
constructor();
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Thrown when the server returns an error for an RSC payload request.
|
|
92
|
+
* The server sends X-Timber-Error header and a JSON body instead of a
|
|
93
|
+
* broken RSC stream for any RenderError (4xx or 5xx). Caught in
|
|
94
|
+
* navigate() to trigger a hard navigation so the server can render
|
|
95
|
+
* the error page as HTML.
|
|
96
|
+
*
|
|
97
|
+
* See design/10-error-handling.md §"Error Page Rendering for Client Navigation"
|
|
98
|
+
*/
|
|
99
|
+
export declare class ServerErrorResponse extends Error {
|
|
100
|
+
readonly status: number;
|
|
101
|
+
readonly url: string;
|
|
102
|
+
constructor(status: number, url: string);
|
|
103
|
+
}
|
|
69
104
|
/**
|
|
70
105
|
* Fetch an RSC payload from the server. If a decodeRsc function is provided,
|
|
71
106
|
* the response is decoded into a React element tree via createFromFetch.
|
|
@@ -76,5 +111,5 @@ export declare class RedirectError extends Error {
|
|
|
76
111
|
*/
|
|
77
112
|
export declare function fetchRscPayload(url: string, deps: RouterDeps, stateTree?: {
|
|
78
113
|
segments: string[];
|
|
79
|
-
}, currentUrl?: string): Promise<FetchResult>;
|
|
114
|
+
}, currentUrl?: string, signal?: AbortSignal): Promise<FetchResult>;
|
|
80
115
|
//# sourceMappingURL=rsc-fetch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rsc-fetch.d.ts","sourceRoot":"","sources":["../../src/client/rsc-fetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAI3C,uFAAuF;AACvF,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IACnC,uFAAuF;IACvF,WAAW,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAClC,
|
|
1
|
+
{"version":3,"file":"rsc-fetch.d.ts","sourceRoot":"","sources":["../../src/client/rsc-fetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAI3C,uFAAuF;AACvF,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IACnC,uFAAuF;IACvF,WAAW,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAClC,kFAAkF;IAClF,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC;IACjD,+EAA+E;IAC/E,eAAe,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CAClC;AAID,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AAoCnD,8DAA8D;AAC9D,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAE7D;AAED,oCAAoC;AACpC,wBAAgB,qBAAqB,IAAI,MAAM,GAAG,IAAI,CAErD;AAID,sEAAsE;AACtE,eAAO,MAAM,aAAa,oBAAoB,CAAC;AAE/C,kDAAkD;AAClD,eAAO,MAAM,oBAAoB,2BAA2B,CAAC;AAE7D;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAE7D;AAID,wBAAgB,eAAe,CAC7B,SAAS,EAAE;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,SAAS,EAC7C,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAsBxB;AAID;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,GAAG,WAAW,EAAE,GAAG,IAAI,CAQ5E;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,WAAW,EAAE,GAAG,IAAI,CAQ3E;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAAE,GAAG,IAAI,CAS1E;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,IAAI,CAQ1F;AAID;;;GAGG;AACH,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBACjB,GAAG,EAAE,MAAM;CAIxB;AAED;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;;CAI1C;AAED;;;;;;;;GAQG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;gBACT,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;CAKxC;AAID;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,UAAU,EAChB,SAAS,CAAC,EAAE;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,EAClC,UAAU,CAAC,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,WAAW,CAAC,CAqEtB"}
|
|
@@ -5,7 +5,7 @@ export interface PrefetchResult {
|
|
|
5
5
|
headElements: HeadElement[] | null;
|
|
6
6
|
/** Segment metadata from X-Timber-Segments header for populating the segment cache. */
|
|
7
7
|
segmentInfo?: SegmentInfo[] | null;
|
|
8
|
-
/** Route params from X-Timber-Params header for populating
|
|
8
|
+
/** Route params from X-Timber-Params header for populating useSegmentParams(). */
|
|
9
9
|
params?: Record<string, string | string[]> | null;
|
|
10
10
|
/** Segment paths skipped by the server (for client-side merging). */
|
|
11
11
|
skippedSegments?: string[] | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"segment-cache.d.ts","sourceRoot":"","sources":["../../src/client/segment-cache.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAI1C,gFAAgF;AAChF,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IACnC,uFAAuF;IACvF,WAAW,CAAC,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IACnC,
|
|
1
|
+
{"version":3,"file":"segment-cache.d.ts","sourceRoot":"","sources":["../../src/client/segment-cache.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAI1C,gFAAgF;AAChF,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IACnC,uFAAuF;IACvF,WAAW,CAAC,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IACnC,kFAAkF;IAClF,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC;IAClD,qEAAqE;IACrE,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CACnC;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,4EAA4E;IAC5E,OAAO,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,OAAO,EAAE,OAAO,CAAC;IACjB,kFAAkF;IAClF,OAAO,EAAE,OAAO,CAAC;IACjB,2CAA2C;IAC3C,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACpC;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAID;;;;GAIG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,IAAI,CAA0B;IAEtC,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAO7C,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI;IAM7C,KAAK,IAAI,IAAI;IAIb;;;;;;;;;;;;OAYG;IACH,kBAAkB,CAAC,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,SAAS;CAO7D;AAkBD;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,WAAW,GAAG,SAAS,CA+BjF;AASD;;;;;;;GAOG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAU;IACxC,OAAO,CAAC,OAAO,CAAoC;IAEnD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI;IAO9C,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAU5C,0EAA0E;IAC1E,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;CAOjD"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SegmentOutlet — client component boundary at each layout segment.
|
|
3
|
+
*
|
|
4
|
+
* Replaces the post-hoc tree walking in segment-merger.ts with an explicit
|
|
5
|
+
* client component at each segment boundary. Each outlet:
|
|
6
|
+
*
|
|
7
|
+
* 1. Knows its own segment path (prop from the server)
|
|
8
|
+
* 2. Caches its children in a ref across navigations
|
|
9
|
+
* 3. When `keepCurrent` is true (partial navigation, this segment skipped),
|
|
10
|
+
* returns the previously cached children — layout state is preserved
|
|
11
|
+
* 4. When `keepCurrent` is false (full navigation or this segment changed),
|
|
12
|
+
* stores and renders the new children
|
|
13
|
+
*
|
|
14
|
+
* This eliminates the need for client-side element tree walking, which
|
|
15
|
+
* breaks on real RSC trees due to opaque client component lazy refs,
|
|
16
|
+
* Suspense thenables, and AccessGate wrappers.
|
|
17
|
+
*
|
|
18
|
+
* Architecture is similar to Next.js's `<LayoutRouter>` client component —
|
|
19
|
+
* each layout boundary is an explicit client component that manages its
|
|
20
|
+
* own subtree. See design/19-client-navigation.md.
|
|
21
|
+
*
|
|
22
|
+
* Security: This is a performance optimization only. The server always
|
|
23
|
+
* runs all access.ts files regardless of segment skipping. A fabricated
|
|
24
|
+
* keepCurrent prop can only cause stale layouts — never auth bypass.
|
|
25
|
+
* See design/13-security.md §"State tree manipulation".
|
|
26
|
+
*/
|
|
27
|
+
import { type ReactNode } from 'react';
|
|
28
|
+
export interface SegmentOutletProps {
|
|
29
|
+
/**
|
|
30
|
+
* Unique identifier for this segment. For normal segments this is the
|
|
31
|
+
* urlPath (e.g., "/", "/dashboard"). For route groups this includes the
|
|
32
|
+
* group name (e.g., "/(marketing)") to distinguish siblings that share
|
|
33
|
+
* the same urlPath. Must match the segmentId used in state-tree-diff.ts.
|
|
34
|
+
*/
|
|
35
|
+
segmentPath: string;
|
|
36
|
+
/**
|
|
37
|
+
* When true, the outlet returns its previously cached children instead
|
|
38
|
+
* of rendering the new children prop. Set by the server when this
|
|
39
|
+
* segment was skipped (the client already has the layout mounted).
|
|
40
|
+
*
|
|
41
|
+
* On the first render (SSR/hydration), this is always false — there's
|
|
42
|
+
* no cached content yet. On subsequent partial navigations, the server
|
|
43
|
+
* sets this to true for segments it skipped rendering.
|
|
44
|
+
*/
|
|
45
|
+
keepCurrent?: boolean;
|
|
46
|
+
/** The segment's React subtree (layout + inner content). */
|
|
47
|
+
children: ReactNode;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Client component boundary at each layout segment in the element tree.
|
|
51
|
+
*
|
|
52
|
+
* On full navigation: receives new children, stores them, renders them.
|
|
53
|
+
* On partial navigation (keepCurrent=true): ignores children prop,
|
|
54
|
+
* returns previously stored content — React reconciles the same elements,
|
|
55
|
+
* preserving all client component state in the layout subtree.
|
|
56
|
+
*
|
|
57
|
+
* React preserves the ref across `reactRoot.render()` calls because:
|
|
58
|
+
* - SegmentOutlet has a stable type (client component module reference)
|
|
59
|
+
* - It appears at the same tree position on every navigation
|
|
60
|
+
* - React reconciles same-type, same-position → instance preserved
|
|
61
|
+
*/
|
|
62
|
+
export declare function SegmentOutlet({ segmentPath: _segmentPath, keepCurrent, children, }: SegmentOutletProps): ReactNode;
|
|
63
|
+
//# sourceMappingURL=segment-outlet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"segment-outlet.d.ts","sourceRoot":"","sources":["../../src/client/segment-outlet.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAIH,OAAO,EAAU,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE/C,MAAM,WAAW,kBAAkB;IACjC;;;;;OAKG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,4DAA4D;IAC5D,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,EAC5B,WAAW,EAAE,YAAY,EACzB,WAAmB,EACnB,QAAQ,GACT,EAAE,kBAAkB,aAapB"}
|
|
@@ -31,12 +31,21 @@ export interface SsrData {
|
|
|
31
31
|
/** The request's route params (e.g. { id: '123' }) */
|
|
32
32
|
params: Record<string, string | string[]>;
|
|
33
33
|
/**
|
|
34
|
-
* Mutable reference to NavContext for error boundary →
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
34
|
+
* Mutable reference to NavContext for error boundary → pipeline communication.
|
|
35
|
+
*
|
|
36
|
+
* When TimberErrorBoundary catches a DenySignal during SSR, it:
|
|
37
|
+
* 1. Sets `statusCode` to the deny status (e.g., 403) — so the HTTP
|
|
38
|
+
* Response has the correct status code without a re-render.
|
|
39
|
+
* 2. Sets `_denyHandledByBoundary = true` — so the pipeline skips
|
|
40
|
+
* the redundant renderDenyPage() re-render.
|
|
41
|
+
*
|
|
42
|
+
* This runs synchronously during Fizz rendering, BEFORE onShellReady,
|
|
43
|
+
* so the status code is committed before any bytes are sent.
|
|
44
|
+
*
|
|
45
|
+
* See TIM-664, design/04-authorization.md §"React.cache Scope in Deny/Error Re-renders"
|
|
38
46
|
*/
|
|
39
47
|
_navContext?: {
|
|
48
|
+
statusCode?: number;
|
|
40
49
|
_denyHandledByBoundary?: boolean;
|
|
41
50
|
};
|
|
42
51
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssr-data.d.ts","sourceRoot":"","sources":["../../src/client/ssr-data.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAWH,MAAM,WAAW,OAAO;IACtB,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,gDAAgD;IAChD,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IAC1C
|
|
1
|
+
{"version":3,"file":"ssr-data.d.ts","sourceRoot":"","sources":["../../src/client/ssr-data.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAWH,MAAM,WAAW,OAAO;IACtB,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,gDAAgD;IAChD,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IAC1C;;;;;;;;;;;;;OAaG;IACH,WAAW,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,sBAAsB,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CACzE;AAkBD;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,OAAO,GAAG,SAAS,GAAG,IAAI,CAEjF;AAMD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAE9C;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAEnC;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,IAAI,OAAO,GAAG,SAAS,CAKhD"}
|
|
@@ -24,6 +24,21 @@
|
|
|
24
24
|
* new bundle hashes while the client is still running old JavaScript.
|
|
25
25
|
*/
|
|
26
26
|
export declare function isStaleClientReference(error: unknown): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Check if an error is a chunk load failure from a dynamic import.
|
|
29
|
+
*
|
|
30
|
+
* After a deployment, old chunk filenames no longer exist. When the client
|
|
31
|
+
* tries to dynamically import a chunk that's been replaced, the browser
|
|
32
|
+
* throws one of these errors:
|
|
33
|
+
*
|
|
34
|
+
* - Chromium: "Failed to fetch dynamically imported module: <url>"
|
|
35
|
+
* - Firefox: "error loading dynamically imported module: <url>"
|
|
36
|
+
* - Safari: "Importing a module script failed."
|
|
37
|
+
* - Vite/Rollup: "Unable to preload CSS for <url>"
|
|
38
|
+
*
|
|
39
|
+
* See TIM-446
|
|
40
|
+
*/
|
|
41
|
+
export declare function isChunkLoadError(error: unknown): boolean;
|
|
27
42
|
/**
|
|
28
43
|
* Trigger a full page reload to pick up new bundles.
|
|
29
44
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stale-reload.d.ts","sourceRoot":"","sources":["../../src/client/stale-reload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"stale-reload.d.ts","sourceRoot":"","sources":["../../src/client/stale-reload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAcH;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAI9D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAYxD;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAqD5C;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAa3C"}
|