@rangojs/router 0.0.0-experimental.116 → 0.0.0-experimental.118
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/__internal.d.ts +83 -0
- package/dist/__internal.d.ts.map +1 -0
- package/dist/__internal.js +19 -0
- package/dist/__internal.js.map +1 -0
- package/dist/__mocks__/version.d.ts +7 -0
- package/dist/__mocks__/version.d.ts.map +1 -0
- package/dist/__mocks__/version.js +7 -0
- package/dist/__mocks__/version.js.map +1 -0
- package/dist/__tests__/client-href.test.d.ts +2 -0
- package/dist/__tests__/client-href.test.d.ts.map +1 -0
- package/dist/__tests__/client-href.test.js +74 -0
- package/dist/__tests__/client-href.test.js.map +1 -0
- package/dist/__tests__/component-utils.test.d.ts +2 -0
- package/dist/__tests__/component-utils.test.d.ts.map +1 -0
- package/dist/__tests__/component-utils.test.js +51 -0
- package/dist/__tests__/component-utils.test.js.map +1 -0
- package/dist/__tests__/event-controller.test.d.ts +2 -0
- package/dist/__tests__/event-controller.test.d.ts.map +1 -0
- package/dist/__tests__/event-controller.test.js +538 -0
- package/dist/__tests__/event-controller.test.js.map +1 -0
- package/dist/__tests__/helpers/route-tree.d.ts +118 -0
- package/dist/__tests__/helpers/route-tree.d.ts.map +1 -0
- package/dist/__tests__/helpers/route-tree.js +374 -0
- package/dist/__tests__/helpers/route-tree.js.map +1 -0
- package/dist/__tests__/match-result.test.d.ts +2 -0
- package/dist/__tests__/match-result.test.d.ts.map +1 -0
- package/dist/__tests__/match-result.test.js +154 -0
- package/dist/__tests__/match-result.test.js.map +1 -0
- package/dist/__tests__/navigation-store.test.d.ts +2 -0
- package/dist/__tests__/navigation-store.test.d.ts.map +1 -0
- package/dist/__tests__/navigation-store.test.js +440 -0
- package/dist/__tests__/navigation-store.test.js.map +1 -0
- package/dist/__tests__/partial-update.test.d.ts +2 -0
- package/dist/__tests__/partial-update.test.d.ts.map +1 -0
- package/dist/__tests__/partial-update.test.js +1009 -0
- package/dist/__tests__/partial-update.test.js.map +1 -0
- package/dist/__tests__/reverse-types.test.d.ts +8 -0
- package/dist/__tests__/reverse-types.test.d.ts.map +1 -0
- package/dist/__tests__/reverse-types.test.js +656 -0
- package/dist/__tests__/reverse-types.test.js.map +1 -0
- package/dist/__tests__/route-definition.test.d.ts +2 -0
- package/dist/__tests__/route-definition.test.d.ts.map +1 -0
- package/dist/__tests__/route-definition.test.js +55 -0
- package/dist/__tests__/route-definition.test.js.map +1 -0
- package/dist/__tests__/router-helpers.test.d.ts +2 -0
- package/dist/__tests__/router-helpers.test.d.ts.map +1 -0
- package/dist/__tests__/router-helpers.test.js +377 -0
- package/dist/__tests__/router-helpers.test.js.map +1 -0
- package/dist/__tests__/router-integration-2.test.d.ts +2 -0
- package/dist/__tests__/router-integration-2.test.d.ts.map +1 -0
- package/dist/__tests__/router-integration-2.test.js +426 -0
- package/dist/__tests__/router-integration-2.test.js.map +1 -0
- package/dist/__tests__/router-integration.test.d.ts +2 -0
- package/dist/__tests__/router-integration.test.d.ts.map +1 -0
- package/dist/__tests__/router-integration.test.js +1051 -0
- package/dist/__tests__/router-integration.test.js.map +1 -0
- package/dist/__tests__/search-params.test.d.ts +5 -0
- package/dist/__tests__/search-params.test.d.ts.map +1 -0
- package/dist/__tests__/search-params.test.js +306 -0
- package/dist/__tests__/search-params.test.js.map +1 -0
- package/dist/__tests__/segment-system.test.d.ts +2 -0
- package/dist/__tests__/segment-system.test.d.ts.map +1 -0
- package/dist/__tests__/segment-system.test.js +627 -0
- package/dist/__tests__/segment-system.test.js.map +1 -0
- package/dist/__tests__/static-handler-types.test.d.ts +8 -0
- package/dist/__tests__/static-handler-types.test.d.ts.map +1 -0
- package/dist/__tests__/static-handler-types.test.js +63 -0
- package/dist/__tests__/static-handler-types.test.js.map +1 -0
- package/dist/__tests__/urls.test.d.ts +2 -0
- package/dist/__tests__/urls.test.d.ts.map +1 -0
- package/dist/__tests__/urls.test.js +421 -0
- package/dist/__tests__/urls.test.js.map +1 -0
- package/dist/__tests__/use-mount.test.d.ts +2 -0
- package/dist/__tests__/use-mount.test.d.ts.map +1 -0
- package/dist/__tests__/use-mount.test.js +35 -0
- package/dist/__tests__/use-mount.test.js.map +1 -0
- package/dist/bin/rango.d.ts +2 -0
- package/dist/bin/rango.d.ts.map +1 -0
- package/dist/bin/rango.js.map +1 -0
- package/dist/browser/event-controller.d.ts +191 -0
- package/dist/browser/event-controller.d.ts.map +1 -0
- package/dist/browser/event-controller.js +559 -0
- package/dist/browser/event-controller.js.map +1 -0
- package/dist/browser/index.d.ts +2 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +14 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/link-interceptor.d.ts +38 -0
- package/dist/browser/link-interceptor.d.ts.map +1 -0
- package/dist/browser/link-interceptor.js +99 -0
- package/dist/browser/link-interceptor.js.map +1 -0
- package/dist/browser/logging.d.ts +10 -0
- package/dist/browser/logging.d.ts.map +1 -0
- package/dist/browser/logging.js +29 -0
- package/dist/browser/logging.js.map +1 -0
- package/dist/browser/lru-cache.d.ts +17 -0
- package/dist/browser/lru-cache.d.ts.map +1 -0
- package/dist/browser/lru-cache.js +50 -0
- package/dist/browser/lru-cache.js.map +1 -0
- package/dist/browser/merge-segment-loaders.d.ts +39 -0
- package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
- package/dist/browser/merge-segment-loaders.js +102 -0
- package/dist/browser/merge-segment-loaders.js.map +1 -0
- package/dist/browser/navigation-bridge.d.ts +102 -0
- package/dist/browser/navigation-bridge.d.ts.map +1 -0
- package/dist/browser/navigation-bridge.js +708 -0
- package/dist/browser/navigation-bridge.js.map +1 -0
- package/dist/browser/navigation-client.d.ts +25 -0
- package/dist/browser/navigation-client.d.ts.map +1 -0
- package/dist/browser/navigation-client.js +157 -0
- package/dist/browser/navigation-client.js.map +1 -0
- package/dist/browser/navigation-store.d.ts +101 -0
- package/dist/browser/navigation-store.d.ts.map +1 -0
- package/dist/browser/navigation-store.js +625 -0
- package/dist/browser/navigation-store.js.map +1 -0
- package/dist/browser/partial-update.d.ts +75 -0
- package/dist/browser/partial-update.d.ts.map +1 -0
- package/dist/browser/partial-update.js +426 -0
- package/dist/browser/partial-update.js.map +1 -0
- package/dist/browser/react/Link.d.ts +86 -0
- package/dist/browser/react/Link.d.ts.map +1 -0
- package/dist/browser/react/Link.js +128 -0
- package/dist/browser/react/Link.js.map +1 -0
- package/dist/browser/react/NavigationProvider.d.ts +63 -0
- package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
- package/dist/browser/react/NavigationProvider.js +216 -0
- package/dist/browser/react/NavigationProvider.js.map +1 -0
- package/dist/browser/react/ScrollRestoration.d.ts +75 -0
- package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
- package/dist/browser/react/ScrollRestoration.js +57 -0
- package/dist/browser/react/ScrollRestoration.js.map +1 -0
- package/dist/browser/react/context.d.ts +46 -0
- package/dist/browser/react/context.d.ts.map +1 -0
- package/dist/browser/react/context.js +10 -0
- package/dist/browser/react/context.js.map +1 -0
- package/dist/browser/react/index.d.ts +11 -0
- package/dist/browser/react/index.d.ts.map +1 -0
- package/dist/browser/react/index.js +22 -0
- package/dist/browser/react/index.js.map +1 -0
- package/dist/browser/react/location-state-shared.d.ts +63 -0
- package/dist/browser/react/location-state-shared.d.ts.map +1 -0
- package/dist/browser/react/location-state-shared.js +81 -0
- package/dist/browser/react/location-state-shared.js.map +1 -0
- package/dist/browser/react/location-state.d.ts +23 -0
- package/dist/browser/react/location-state.d.ts.map +1 -0
- package/dist/browser/react/location-state.js +29 -0
- package/dist/browser/react/location-state.js.map +1 -0
- package/dist/browser/react/mount-context.d.ts +24 -0
- package/dist/browser/react/mount-context.d.ts.map +1 -0
- package/dist/browser/react/mount-context.js +24 -0
- package/dist/browser/react/mount-context.js.map +1 -0
- package/dist/browser/react/use-action.d.ts +64 -0
- package/dist/browser/react/use-action.d.ts.map +1 -0
- package/dist/browser/react/use-action.js +134 -0
- package/dist/browser/react/use-action.js.map +1 -0
- package/dist/browser/react/use-client-cache.d.ts +41 -0
- package/dist/browser/react/use-client-cache.d.ts.map +1 -0
- package/dist/browser/react/use-client-cache.js +39 -0
- package/dist/browser/react/use-client-cache.js.map +1 -0
- package/dist/browser/react/use-handle.d.ts +31 -0
- package/dist/browser/react/use-handle.d.ts.map +1 -0
- package/dist/browser/react/use-handle.js +144 -0
- package/dist/browser/react/use-handle.js.map +1 -0
- package/dist/browser/react/use-href.d.ts +33 -0
- package/dist/browser/react/use-href.d.ts.map +1 -0
- package/dist/browser/react/use-href.js +39 -0
- package/dist/browser/react/use-href.js.map +1 -0
- package/dist/browser/react/use-link-status.d.ts +37 -0
- package/dist/browser/react/use-link-status.d.ts.map +1 -0
- package/dist/browser/react/use-link-status.js +99 -0
- package/dist/browser/react/use-link-status.js.map +1 -0
- package/dist/browser/react/use-mount.d.ts +25 -0
- package/dist/browser/react/use-mount.d.ts.map +1 -0
- package/dist/browser/react/use-mount.js +30 -0
- package/dist/browser/react/use-mount.js.map +1 -0
- package/dist/browser/react/use-navigation.d.ts +27 -0
- package/dist/browser/react/use-navigation.d.ts.map +1 -0
- package/dist/browser/react/use-navigation.js +87 -0
- package/dist/browser/react/use-navigation.js.map +1 -0
- package/dist/browser/react/use-segments.d.ts +38 -0
- package/dist/browser/react/use-segments.d.ts.map +1 -0
- package/dist/browser/react/use-segments.js +130 -0
- package/dist/browser/react/use-segments.js.map +1 -0
- package/dist/browser/request-controller.d.ts +26 -0
- package/dist/browser/request-controller.d.ts.map +1 -0
- package/dist/browser/request-controller.js +147 -0
- package/dist/browser/request-controller.js.map +1 -0
- package/dist/browser/rsc-router.d.ts +129 -0
- package/dist/browser/rsc-router.d.ts.map +1 -0
- package/dist/browser/rsc-router.js +195 -0
- package/dist/browser/rsc-router.js.map +1 -0
- package/dist/browser/scroll-restoration.d.ts +93 -0
- package/dist/browser/scroll-restoration.d.ts.map +1 -0
- package/dist/browser/scroll-restoration.js +321 -0
- package/dist/browser/scroll-restoration.js.map +1 -0
- package/dist/browser/segment-structure-assert.d.ts +17 -0
- package/dist/browser/segment-structure-assert.d.ts.map +1 -0
- package/dist/browser/segment-structure-assert.js +59 -0
- package/dist/browser/segment-structure-assert.js.map +1 -0
- package/dist/browser/server-action-bridge.d.ts +26 -0
- package/dist/browser/server-action-bridge.d.ts.map +1 -0
- package/dist/browser/server-action-bridge.js +668 -0
- package/dist/browser/server-action-bridge.js.map +1 -0
- package/dist/browser/shallow.d.ts +12 -0
- package/dist/browser/shallow.d.ts.map +1 -0
- package/dist/browser/shallow.js +34 -0
- package/dist/browser/shallow.js.map +1 -0
- package/dist/browser/types.d.ts +369 -0
- package/dist/browser/types.d.ts.map +1 -0
- package/dist/browser/types.js +2 -0
- package/dist/browser/types.js.map +1 -0
- package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
- package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-cli.test.js +237 -0
- package/dist/build/__tests__/generate-cli.test.js.map +1 -0
- package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
- package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-manifest.test.js +119 -0
- package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
- package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
- package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-route-types.test.js +620 -0
- package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
- package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
- package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
- package/dist/build/__tests__/per-router-manifest.test.js +308 -0
- package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
- package/dist/build/generate-manifest.d.ts +81 -0
- package/dist/build/generate-manifest.d.ts.map +1 -0
- package/dist/build/generate-manifest.js +276 -0
- package/dist/build/generate-manifest.js.map +1 -0
- package/dist/build/generate-route-types.d.ts +115 -0
- package/dist/build/generate-route-types.d.ts.map +1 -0
- package/dist/build/generate-route-types.js +740 -0
- package/dist/build/generate-route-types.js.map +1 -0
- package/dist/build/index.d.ts +21 -0
- package/dist/build/index.d.ts.map +1 -0
- package/dist/build/index.js +21 -0
- package/dist/build/index.js.map +1 -0
- package/dist/build/route-trie.d.ts +71 -0
- package/dist/build/route-trie.d.ts.map +1 -0
- package/dist/build/route-trie.js +175 -0
- package/dist/build/route-trie.js.map +1 -0
- package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
- package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
- package/dist/cache/__tests__/cache-scope.test.js +208 -0
- package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
- package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
- package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
- package/dist/cache/__tests__/document-cache.test.js +345 -0
- package/dist/cache/__tests__/document-cache.test.js.map +1 -0
- package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
- package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
- package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
- package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
- package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
- package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
- package/dist/cache/__tests__/memory-store.test.js +367 -0
- package/dist/cache/__tests__/memory-store.test.js.map +1 -0
- package/dist/cache/cache-scope.d.ts +102 -0
- package/dist/cache/cache-scope.d.ts.map +1 -0
- package/dist/cache/cache-scope.js +440 -0
- package/dist/cache/cache-scope.js.map +1 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
- package/dist/cache/cf/cf-cache-store.d.ts +165 -0
- package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
- package/dist/cache/cf/cf-cache-store.js +242 -0
- package/dist/cache/cf/cf-cache-store.js.map +1 -0
- package/dist/cache/cf/index.d.ts +14 -0
- package/dist/cache/cf/index.d.ts.map +1 -0
- package/dist/cache/cf/index.js +17 -0
- package/dist/cache/cf/index.js.map +1 -0
- package/dist/cache/document-cache.d.ts +64 -0
- package/dist/cache/document-cache.d.ts.map +1 -0
- package/dist/cache/document-cache.js +228 -0
- package/dist/cache/document-cache.js.map +1 -0
- package/dist/cache/index.d.ts +19 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +21 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/memory-segment-store.d.ts +110 -0
- package/dist/cache/memory-segment-store.d.ts.map +1 -0
- package/dist/cache/memory-segment-store.js +117 -0
- package/dist/cache/memory-segment-store.js.map +1 -0
- package/dist/cache/memory-store.d.ts +41 -0
- package/dist/cache/memory-store.d.ts.map +1 -0
- package/dist/cache/memory-store.js +191 -0
- package/dist/cache/memory-store.js.map +1 -0
- package/dist/cache/types.d.ts +317 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/cache/types.js +12 -0
- package/dist/cache/types.js.map +1 -0
- package/dist/client.d.ts +248 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +367 -0
- package/dist/client.js.map +1 -0
- package/dist/client.rsc.d.ts +26 -0
- package/dist/client.rsc.d.ts.map +1 -0
- package/dist/client.rsc.js +46 -0
- package/dist/client.rsc.js.map +1 -0
- package/dist/component-utils.d.ts +36 -0
- package/dist/component-utils.d.ts.map +1 -0
- package/dist/component-utils.js +61 -0
- package/dist/component-utils.js.map +1 -0
- package/dist/components/DefaultDocument.d.ts +13 -0
- package/dist/components/DefaultDocument.d.ts.map +1 -0
- package/dist/components/DefaultDocument.js +15 -0
- package/dist/components/DefaultDocument.js.map +1 -0
- package/dist/debug.d.ts +58 -0
- package/dist/debug.d.ts.map +1 -0
- package/dist/debug.js +157 -0
- package/dist/debug.js.map +1 -0
- package/dist/default-error-boundary.d.ts +11 -0
- package/dist/default-error-boundary.d.ts.map +1 -0
- package/dist/default-error-boundary.js +45 -0
- package/dist/default-error-boundary.js.map +1 -0
- package/dist/deps/browser.d.ts +2 -0
- package/dist/deps/browser.d.ts.map +1 -0
- package/dist/deps/browser.js +3 -0
- package/dist/deps/browser.js.map +1 -0
- package/dist/deps/html-stream-client.d.ts +2 -0
- package/dist/deps/html-stream-client.d.ts.map +1 -0
- package/dist/deps/html-stream-client.js +3 -0
- package/dist/deps/html-stream-client.js.map +1 -0
- package/dist/deps/html-stream-server.d.ts +2 -0
- package/dist/deps/html-stream-server.d.ts.map +1 -0
- package/dist/deps/html-stream-server.js +3 -0
- package/dist/deps/html-stream-server.js.map +1 -0
- package/dist/deps/rsc.d.ts +2 -0
- package/dist/deps/rsc.d.ts.map +1 -0
- package/dist/deps/rsc.js +4 -0
- package/dist/deps/rsc.js.map +1 -0
- package/dist/deps/ssr.d.ts +2 -0
- package/dist/deps/ssr.d.ts.map +1 -0
- package/dist/deps/ssr.js +3 -0
- package/dist/deps/ssr.js.map +1 -0
- package/dist/errors.d.ts +174 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +241 -0
- package/dist/errors.js.map +1 -0
- package/dist/handle.d.ts +78 -0
- package/dist/handle.d.ts.map +1 -0
- package/dist/handle.js +82 -0
- package/dist/handle.js.map +1 -0
- package/dist/handles/MetaTags.d.ts +14 -0
- package/dist/handles/MetaTags.d.ts.map +1 -0
- package/dist/handles/MetaTags.js +136 -0
- package/dist/handles/MetaTags.js.map +1 -0
- package/dist/handles/index.d.ts +6 -0
- package/dist/handles/index.d.ts.map +1 -0
- package/dist/handles/index.js +6 -0
- package/dist/handles/index.js.map +1 -0
- package/dist/handles/meta.d.ts +39 -0
- package/dist/handles/meta.d.ts.map +1 -0
- package/dist/handles/meta.js +202 -0
- package/dist/handles/meta.js.map +1 -0
- package/dist/host/__tests__/errors.test.d.ts +2 -0
- package/dist/host/__tests__/errors.test.d.ts.map +1 -0
- package/dist/host/__tests__/errors.test.js +76 -0
- package/dist/host/__tests__/errors.test.js.map +1 -0
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
- package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
- package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
- package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
- package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
- package/dist/host/__tests__/pattern-matcher.test.js +251 -0
- package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
- package/dist/host/__tests__/router.test.d.ts +2 -0
- package/dist/host/__tests__/router.test.d.ts.map +1 -0
- package/dist/host/__tests__/router.test.js +241 -0
- package/dist/host/__tests__/router.test.js.map +1 -0
- package/dist/host/__tests__/testing.test.d.ts +2 -0
- package/dist/host/__tests__/testing.test.d.ts.map +1 -0
- package/dist/host/__tests__/testing.test.js +64 -0
- package/dist/host/__tests__/testing.test.js.map +1 -0
- package/dist/host/__tests__/utils.test.d.ts +2 -0
- package/dist/host/__tests__/utils.test.d.ts.map +1 -0
- package/dist/host/__tests__/utils.test.js +29 -0
- package/dist/host/__tests__/utils.test.js.map +1 -0
- package/dist/host/cookie-handler.d.ts +34 -0
- package/dist/host/cookie-handler.d.ts.map +1 -0
- package/dist/host/cookie-handler.js +124 -0
- package/dist/host/cookie-handler.js.map +1 -0
- package/dist/host/errors.d.ts +56 -0
- package/dist/host/errors.d.ts.map +1 -0
- package/dist/host/errors.js +79 -0
- package/dist/host/errors.js.map +1 -0
- package/dist/host/index.d.ts +29 -0
- package/dist/host/index.d.ts.map +1 -0
- package/dist/host/index.js +32 -0
- package/dist/host/index.js.map +1 -0
- package/dist/host/pattern-matcher.d.ts +36 -0
- package/dist/host/pattern-matcher.d.ts.map +1 -0
- package/dist/host/pattern-matcher.js +172 -0
- package/dist/host/pattern-matcher.js.map +1 -0
- package/dist/host/router.d.ts +26 -0
- package/dist/host/router.d.ts.map +1 -0
- package/dist/host/router.js +218 -0
- package/dist/host/router.js.map +1 -0
- package/dist/host/testing.d.ts +36 -0
- package/dist/host/testing.d.ts.map +1 -0
- package/dist/host/testing.js +55 -0
- package/dist/host/testing.js.map +1 -0
- package/dist/host/types.d.ts +115 -0
- package/dist/host/types.d.ts.map +1 -0
- package/dist/host/types.js +7 -0
- package/dist/host/types.js.map +1 -0
- package/dist/host/utils.d.ts +21 -0
- package/dist/host/utils.d.ts.map +1 -0
- package/dist/host/utils.js +23 -0
- package/dist/host/utils.js.map +1 -0
- package/dist/href-client.d.ts +131 -0
- package/dist/href-client.d.ts.map +1 -0
- package/dist/href-client.js +64 -0
- package/dist/href-client.js.map +1 -0
- package/dist/href-context.d.ts +29 -0
- package/dist/href-context.d.ts.map +1 -0
- package/dist/href-context.js +21 -0
- package/dist/href-context.js.map +1 -0
- package/dist/index.d.ts +73 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +91 -0
- package/dist/index.js.map +1 -0
- package/dist/index.rsc.d.ts +32 -0
- package/dist/index.rsc.d.ts.map +1 -0
- package/dist/index.rsc.js +40 -0
- package/dist/index.rsc.js.map +1 -0
- package/dist/internal-debug.d.ts +2 -0
- package/dist/internal-debug.d.ts.map +1 -0
- package/dist/internal-debug.js +5 -0
- package/dist/internal-debug.js.map +1 -0
- package/dist/loader.d.ts +14 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +20 -0
- package/dist/loader.js.map +1 -0
- package/dist/loader.rsc.d.ts +19 -0
- package/dist/loader.rsc.d.ts.map +1 -0
- package/dist/loader.rsc.js +99 -0
- package/dist/loader.rsc.js.map +1 -0
- package/dist/network-error-thrower.d.ts +17 -0
- package/dist/network-error-thrower.d.ts.map +1 -0
- package/dist/network-error-thrower.js +14 -0
- package/dist/network-error-thrower.js.map +1 -0
- package/dist/outlet-context.d.ts +13 -0
- package/dist/outlet-context.d.ts.map +1 -0
- package/dist/outlet-context.js +3 -0
- package/dist/outlet-context.js.map +1 -0
- package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
- package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
- package/dist/prerender/__tests__/param-hash.test.js +148 -0
- package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
- package/dist/prerender/param-hash.d.ts +16 -0
- package/dist/prerender/param-hash.d.ts.map +1 -0
- package/dist/prerender/param-hash.js +36 -0
- package/dist/prerender/param-hash.js.map +1 -0
- package/dist/prerender/store.d.ts +38 -0
- package/dist/prerender/store.d.ts.map +1 -0
- package/dist/prerender/store.js +61 -0
- package/dist/prerender/store.js.map +1 -0
- package/dist/prerender.d.ts +66 -0
- package/dist/prerender.d.ts.map +1 -0
- package/dist/prerender.js +57 -0
- package/dist/prerender.js.map +1 -0
- package/dist/reverse.d.ts +196 -0
- package/dist/reverse.d.ts.map +1 -0
- package/dist/reverse.js +78 -0
- package/dist/reverse.js.map +1 -0
- package/dist/root-error-boundary.d.ts +33 -0
- package/dist/root-error-boundary.d.ts.map +1 -0
- package/dist/root-error-boundary.js +165 -0
- package/dist/root-error-boundary.js.map +1 -0
- package/dist/route-content-wrapper.d.ts +46 -0
- package/dist/route-content-wrapper.d.ts.map +1 -0
- package/dist/route-content-wrapper.js +77 -0
- package/dist/route-content-wrapper.js.map +1 -0
- package/dist/route-definition.d.ts +421 -0
- package/dist/route-definition.d.ts.map +1 -0
- package/dist/route-definition.js +868 -0
- package/dist/route-definition.js.map +1 -0
- package/dist/route-map-builder.d.ts +155 -0
- package/dist/route-map-builder.d.ts.map +1 -0
- package/dist/route-map-builder.js +237 -0
- package/dist/route-map-builder.js.map +1 -0
- package/dist/route-types.d.ts +165 -0
- package/dist/route-types.d.ts.map +1 -0
- package/dist/route-types.js +7 -0
- package/dist/route-types.js.map +1 -0
- package/dist/router/__tests__/handler-context.test.d.ts +2 -0
- package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
- package/dist/router/__tests__/handler-context.test.js +65 -0
- package/dist/router/__tests__/handler-context.test.js.map +1 -0
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
- package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
- package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
- package/dist/router/__tests__/match-context.test.d.ts +2 -0
- package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-context.test.js +92 -0
- package/dist/router/__tests__/match-context.test.js.map +1 -0
- package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
- package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-pipelines.test.js +417 -0
- package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
- package/dist/router/__tests__/match-result.test.d.ts +2 -0
- package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-result.test.js +457 -0
- package/dist/router/__tests__/match-result.test.js.map +1 -0
- package/dist/router/__tests__/on-error.test.d.ts +2 -0
- package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
- package/dist/router/__tests__/on-error.test.js +678 -0
- package/dist/router/__tests__/on-error.test.js.map +1 -0
- package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
- package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
- package/dist/router/__tests__/pattern-matching.test.js +629 -0
- package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
- package/dist/router/error-handling.d.ts +77 -0
- package/dist/router/error-handling.d.ts.map +1 -0
- package/dist/router/error-handling.js +202 -0
- package/dist/router/error-handling.js.map +1 -0
- package/dist/router/handler-context.d.ts +20 -0
- package/dist/router/handler-context.d.ts.map +1 -0
- package/dist/router/handler-context.js +198 -0
- package/dist/router/handler-context.js.map +1 -0
- package/dist/router/intercept-resolution.d.ts +66 -0
- package/dist/router/intercept-resolution.d.ts.map +1 -0
- package/dist/router/intercept-resolution.js +246 -0
- package/dist/router/intercept-resolution.js.map +1 -0
- package/dist/router/loader-resolution.d.ts +64 -0
- package/dist/router/loader-resolution.d.ts.map +1 -0
- package/dist/router/loader-resolution.js +284 -0
- package/dist/router/loader-resolution.js.map +1 -0
- package/dist/router/logging.d.ts +15 -0
- package/dist/router/logging.d.ts.map +1 -0
- package/dist/router/logging.js +99 -0
- package/dist/router/logging.js.map +1 -0
- package/dist/router/manifest.d.ts +22 -0
- package/dist/router/manifest.d.ts.map +1 -0
- package/dist/router/manifest.js +181 -0
- package/dist/router/manifest.js.map +1 -0
- package/dist/router/match-api.d.ts +35 -0
- package/dist/router/match-api.d.ts.map +1 -0
- package/dist/router/match-api.js +406 -0
- package/dist/router/match-api.js.map +1 -0
- package/dist/router/match-context.d.ts +206 -0
- package/dist/router/match-context.d.ts.map +1 -0
- package/dist/router/match-context.js +17 -0
- package/dist/router/match-context.js.map +1 -0
- package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
- package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
- package/dist/router/match-middleware/background-revalidation.js +75 -0
- package/dist/router/match-middleware/background-revalidation.js.map +1 -0
- package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
- package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
- package/dist/router/match-middleware/cache-lookup.js +257 -0
- package/dist/router/match-middleware/cache-lookup.js.map +1 -0
- package/dist/router/match-middleware/cache-store.d.ts +113 -0
- package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
- package/dist/router/match-middleware/cache-store.js +108 -0
- package/dist/router/match-middleware/cache-store.js.map +1 -0
- package/dist/router/match-middleware/index.d.ts +81 -0
- package/dist/router/match-middleware/index.d.ts.map +1 -0
- package/dist/router/match-middleware/index.js +80 -0
- package/dist/router/match-middleware/index.js.map +1 -0
- package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
- package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
- package/dist/router/match-middleware/intercept-resolution.js +134 -0
- package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
- package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
- package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
- package/dist/router/match-middleware/segment-resolution.js +53 -0
- package/dist/router/match-middleware/segment-resolution.js.map +1 -0
- package/dist/router/match-pipelines.d.ts +147 -0
- package/dist/router/match-pipelines.d.ts.map +1 -0
- package/dist/router/match-pipelines.js +82 -0
- package/dist/router/match-pipelines.js.map +1 -0
- package/dist/router/match-result.d.ts +126 -0
- package/dist/router/match-result.d.ts.map +1 -0
- package/dist/router/match-result.js +93 -0
- package/dist/router/match-result.js.map +1 -0
- package/dist/router/metrics.d.ts +20 -0
- package/dist/router/metrics.d.ts.map +1 -0
- package/dist/router/metrics.js +47 -0
- package/dist/router/metrics.js.map +1 -0
- package/dist/router/middleware.d.ts +249 -0
- package/dist/router/middleware.d.ts.map +1 -0
- package/dist/router/middleware.js +434 -0
- package/dist/router/middleware.js.map +1 -0
- package/dist/router/middleware.test.d.ts +2 -0
- package/dist/router/middleware.test.d.ts.map +1 -0
- package/dist/router/middleware.test.js +816 -0
- package/dist/router/middleware.test.js.map +1 -0
- package/dist/router/pattern-matching.d.ts +149 -0
- package/dist/router/pattern-matching.d.ts.map +1 -0
- package/dist/router/pattern-matching.js +349 -0
- package/dist/router/pattern-matching.js.map +1 -0
- package/dist/router/revalidation.d.ts +44 -0
- package/dist/router/revalidation.d.ts.map +1 -0
- package/dist/router/revalidation.js +147 -0
- package/dist/router/revalidation.js.map +1 -0
- package/dist/router/router-context.d.ts +135 -0
- package/dist/router/router-context.d.ts.map +1 -0
- package/dist/router/router-context.js +36 -0
- package/dist/router/router-context.js.map +1 -0
- package/dist/router/segment-resolution.d.ts +127 -0
- package/dist/router/segment-resolution.d.ts.map +1 -0
- package/dist/router/segment-resolution.js +919 -0
- package/dist/router/segment-resolution.js.map +1 -0
- package/dist/router/trie-matching.d.ts +40 -0
- package/dist/router/trie-matching.d.ts.map +1 -0
- package/dist/router/trie-matching.js +127 -0
- package/dist/router/trie-matching.js.map +1 -0
- package/dist/router/types.d.ts +136 -0
- package/dist/router/types.d.ts.map +1 -0
- package/dist/router/types.js +7 -0
- package/dist/router/types.js.map +1 -0
- package/dist/router.d.ts +753 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.gen.d.ts +6 -0
- package/dist/router.gen.d.ts.map +1 -0
- package/dist/router.gen.js +6 -0
- package/dist/router.gen.js.map +1 -0
- package/dist/router.js +1304 -0
- package/dist/router.js.map +1 -0
- package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
- package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
- package/dist/rsc/__tests__/helpers.test.js +140 -0
- package/dist/rsc/__tests__/helpers.test.js.map +1 -0
- package/dist/rsc/handler.d.ts +45 -0
- package/dist/rsc/handler.d.ts.map +1 -0
- package/dist/rsc/handler.js +1172 -0
- package/dist/rsc/handler.js.map +1 -0
- package/dist/rsc/helpers.d.ts +16 -0
- package/dist/rsc/helpers.d.ts.map +1 -0
- package/dist/rsc/helpers.js +55 -0
- package/dist/rsc/helpers.js.map +1 -0
- package/dist/rsc/index.d.ts +22 -0
- package/dist/rsc/index.d.ts.map +1 -0
- package/dist/rsc/index.js +23 -0
- package/dist/rsc/index.js.map +1 -0
- package/dist/rsc/nonce.d.ts +9 -0
- package/dist/rsc/nonce.d.ts.map +1 -0
- package/dist/rsc/nonce.js +18 -0
- package/dist/rsc/nonce.js.map +1 -0
- package/dist/rsc/types.d.ts +206 -0
- package/dist/rsc/types.d.ts.map +1 -0
- package/dist/rsc/types.js +8 -0
- package/dist/rsc/types.js.map +1 -0
- package/dist/search-params.d.ts +103 -0
- package/dist/search-params.d.ts.map +1 -0
- package/dist/search-params.js +74 -0
- package/dist/search-params.js.map +1 -0
- package/dist/segment-system.d.ts +75 -0
- package/dist/segment-system.d.ts.map +1 -0
- package/dist/segment-system.js +336 -0
- package/dist/segment-system.js.map +1 -0
- package/dist/server/context.d.ts +245 -0
- package/dist/server/context.d.ts.map +1 -0
- package/dist/server/context.js +197 -0
- package/dist/server/context.js.map +1 -0
- package/dist/server/fetchable-loader-store.d.ts +18 -0
- package/dist/server/fetchable-loader-store.d.ts.map +1 -0
- package/dist/server/fetchable-loader-store.js +18 -0
- package/dist/server/fetchable-loader-store.js.map +1 -0
- package/dist/server/handle-store.d.ts +85 -0
- package/dist/server/handle-store.d.ts.map +1 -0
- package/dist/server/handle-store.js +142 -0
- package/dist/server/handle-store.js.map +1 -0
- package/dist/server/loader-registry.d.ts +55 -0
- package/dist/server/loader-registry.d.ts.map +1 -0
- package/dist/server/loader-registry.js +132 -0
- package/dist/server/loader-registry.js.map +1 -0
- package/dist/server/request-context.d.ts +226 -0
- package/dist/server/request-context.d.ts.map +1 -0
- package/dist/server/request-context.js +290 -0
- package/dist/server/request-context.js.map +1 -0
- package/dist/server/root-layout.d.ts +4 -0
- package/dist/server/root-layout.d.ts.map +1 -0
- package/dist/server/root-layout.js +5 -0
- package/dist/server/root-layout.js.map +1 -0
- package/dist/server.d.ts +15 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +20 -0
- package/dist/server.js.map +1 -0
- package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
- package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
- package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
- package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
- package/dist/ssr/index.d.ts +98 -0
- package/dist/ssr/index.d.ts.map +1 -0
- package/dist/ssr/index.js +158 -0
- package/dist/ssr/index.js.map +1 -0
- package/dist/static-handler.d.ts +50 -0
- package/dist/static-handler.d.ts.map +1 -0
- package/dist/static-handler.gen.d.ts +5 -0
- package/dist/static-handler.gen.d.ts.map +1 -0
- package/dist/static-handler.gen.js +5 -0
- package/dist/static-handler.gen.js.map +1 -0
- package/dist/static-handler.js +29 -0
- package/dist/static-handler.js.map +1 -0
- package/dist/testing/vitest.js +82 -0
- package/dist/theme/ThemeProvider.d.ts +20 -0
- package/dist/theme/ThemeProvider.d.ts.map +1 -0
- package/dist/theme/ThemeProvider.js +240 -0
- package/dist/theme/ThemeProvider.js.map +1 -0
- package/dist/theme/ThemeScript.d.ts +48 -0
- package/dist/theme/ThemeScript.d.ts.map +1 -0
- package/dist/theme/ThemeScript.js +13 -0
- package/dist/theme/ThemeScript.js.map +1 -0
- package/dist/theme/__tests__/theme.test.d.ts +2 -0
- package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
- package/dist/theme/__tests__/theme.test.js +103 -0
- package/dist/theme/__tests__/theme.test.js.map +1 -0
- package/dist/theme/constants.d.ts +29 -0
- package/dist/theme/constants.d.ts.map +1 -0
- package/dist/theme/constants.js +48 -0
- package/dist/theme/constants.js.map +1 -0
- package/dist/theme/index.d.ts +31 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +36 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/theme/theme-context.d.ts +40 -0
- package/dist/theme/theme-context.d.ts.map +1 -0
- package/dist/theme/theme-context.js +60 -0
- package/dist/theme/theme-context.js.map +1 -0
- package/dist/theme/theme-script.d.ts +27 -0
- package/dist/theme/theme-script.d.ts.map +1 -0
- package/dist/theme/theme-script.js +147 -0
- package/dist/theme/theme-script.js.map +1 -0
- package/dist/theme/types.d.ts +163 -0
- package/dist/theme/types.d.ts.map +1 -0
- package/dist/theme/types.js +11 -0
- package/dist/theme/types.js.map +1 -0
- package/dist/theme/use-theme.d.ts +12 -0
- package/dist/theme/use-theme.d.ts.map +1 -0
- package/dist/theme/use-theme.js +40 -0
- package/dist/theme/use-theme.js.map +1 -0
- package/dist/types.d.ts +1479 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -0
- package/dist/urls.d.ts +441 -0
- package/dist/urls.d.ts.map +1 -0
- package/dist/urls.gen.d.ts +8 -0
- package/dist/urls.gen.d.ts.map +1 -0
- package/dist/urls.gen.js +8 -0
- package/dist/urls.gen.js.map +1 -0
- package/dist/urls.js +443 -0
- package/dist/urls.js.map +1 -0
- package/dist/use-loader.d.ts +127 -0
- package/dist/use-loader.d.ts.map +1 -0
- package/dist/use-loader.js +237 -0
- package/dist/use-loader.js.map +1 -0
- package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
- package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
- package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
- package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
- package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
- package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
- package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
- package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
- package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
- package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
- package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
- package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
- package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
- package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
- package/dist/vite/__tests__/expose-router-id.test.js +39 -0
- package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
- package/dist/vite/ast-handler-extract.d.ts +49 -0
- package/dist/vite/ast-handler-extract.d.ts.map +1 -0
- package/dist/vite/ast-handler-extract.js +249 -0
- package/dist/vite/ast-handler-extract.js.map +1 -0
- package/dist/vite/expose-action-id.d.ts +19 -0
- package/dist/vite/expose-action-id.d.ts.map +1 -0
- package/dist/vite/expose-action-id.js +250 -0
- package/dist/vite/expose-action-id.js.map +1 -0
- package/dist/vite/expose-id-utils.d.ts +69 -0
- package/dist/vite/expose-id-utils.d.ts.map +1 -0
- package/dist/vite/expose-id-utils.js +289 -0
- package/dist/vite/expose-id-utils.js.map +1 -0
- package/dist/vite/expose-internal-ids.d.ts +22 -0
- package/dist/vite/expose-internal-ids.d.ts.map +1 -0
- package/dist/vite/expose-internal-ids.js +886 -0
- package/dist/vite/expose-internal-ids.js.map +1 -0
- package/dist/vite/index.d.ts +149 -0
- package/dist/vite/index.d.ts.map +1 -0
- package/dist/vite/index.js +8 -10
- package/dist/vite/index.js.bak +5448 -0
- package/dist/vite/index.js.map +1 -0
- package/dist/vite/index.named-routes.gen.ts +103 -0
- package/dist/vite/package-resolution.d.ts +43 -0
- package/dist/vite/package-resolution.d.ts.map +1 -0
- package/dist/vite/package-resolution.js +112 -0
- package/dist/vite/package-resolution.js.map +1 -0
- package/dist/vite/virtual-entries.d.ts +25 -0
- package/dist/vite/virtual-entries.d.ts.map +1 -0
- package/dist/vite/virtual-entries.js +110 -0
- package/dist/vite/virtual-entries.js.map +1 -0
- package/package.json +18 -17
- package/skills/css/SKILL.md +76 -0
- package/skills/host-router/SKILL.md +21 -0
- package/skills/loader/SKILL.md +17 -17
- package/skills/rango/SKILL.md +1 -0
- package/skills/tailwind/SKILL.md +27 -3
- package/src/browser/app-shell.ts +14 -27
- package/src/browser/navigation-bridge.ts +2 -51
- package/src/browser/navigation-client.ts +70 -68
- package/src/browser/navigation-store.ts +1 -25
- package/src/browser/partial-update.ts +19 -32
- package/src/browser/prefetch/cache.ts +97 -48
- package/src/browser/prefetch/fetch.ts +101 -33
- package/src/browser/rango-state.ts +6 -22
- package/src/browser/react/NavigationProvider.tsx +12 -9
- package/src/browser/react/use-router.ts +4 -3
- package/src/browser/response-adapter.ts +27 -1
- package/src/browser/rsc-router.tsx +20 -13
- package/src/browser/server-action-bridge.ts +21 -0
- package/src/browser/types.ts +4 -15
- package/src/cache/cache-runtime.ts +17 -5
- package/src/cache/cache-scope.ts +23 -7
- package/src/cache/cf/cf-cache-store.ts +4 -4
- package/src/cache/handle-snapshot.ts +103 -0
- package/src/cache/memory-segment-store.ts +3 -2
- package/src/cache/types.ts +10 -6
- package/src/prerender/store.ts +9 -7
- package/src/router/lazy-includes.ts +1 -1
- package/src/router/loader-resolution.ts +63 -34
- package/src/router/manifest.ts +1 -1
- package/src/router/match-middleware/cache-lookup.ts +13 -4
- package/src/router/prerender-match.ts +39 -14
- package/src/router/request-classification.ts +36 -9
- package/src/router/router-interfaces.ts +6 -7
- package/src/router/segment-resolution/static-store.ts +19 -5
- package/src/rsc/handler.ts +30 -8
- package/src/rsc/origin-guard.ts +2 -0
- package/src/rsc/response-route-handler.ts +20 -1
- package/src/rsc/rsc-rendering.ts +10 -0
- package/src/rsc/server-action.ts +16 -2
- package/src/server/context.ts +32 -0
- package/src/server/request-context.ts +47 -9
- package/src/types/loader-types.ts +6 -3
- package/src/urls/path-helper-types.ts +6 -0
- package/src/vite/discovery/prerender-collection.ts +5 -5
- package/src/vite/router-discovery.ts +3 -4
|
@@ -24,6 +24,26 @@ export function emptyResponse(): Response {
|
|
|
24
24
|
return new Response(null, { status: 200 });
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
+
/**
|
|
28
|
+
* Whether an RSC content response carries a server-stamped router identity
|
|
29
|
+
* (`X-RSC-Router-Id`) that DIFFERS from the id this client expects (its own
|
|
30
|
+
* routerId, also sent as `_rsc_rid`). Pre-decode integrity check: lets a caller
|
|
31
|
+
* refuse a foreign app's payload before `createFromFetch` imports its chunks.
|
|
32
|
+
*
|
|
33
|
+
* True ONLY when both the header and the expected id are present and differ. An
|
|
34
|
+
* absent header (control-only reload/redirect responses are not stamped) or an
|
|
35
|
+
* absent expected id (e.g. before the client is seeded) is a pass-through —
|
|
36
|
+
* never a false reject.
|
|
37
|
+
*/
|
|
38
|
+
export function isForeignRouterId(
|
|
39
|
+
response: Response,
|
|
40
|
+
expectedId: string | undefined,
|
|
41
|
+
): boolean {
|
|
42
|
+
const got = response.headers.get("X-RSC-Router-Id");
|
|
43
|
+
if (!got || !expectedId) return false;
|
|
44
|
+
return got !== expectedId;
|
|
45
|
+
}
|
|
46
|
+
|
|
27
47
|
/**
|
|
28
48
|
* Handle the X-RSC-Reload control header (server requests a full page reload on
|
|
29
49
|
* a version mismatch). Returns a short-circuit response when the header is
|
|
@@ -56,11 +76,17 @@ export function handleReloadHeader(
|
|
|
56
76
|
*
|
|
57
77
|
* If the response has no body, onComplete fires synchronously.
|
|
58
78
|
* If signal is provided, an abort cancels the tracking reader.
|
|
79
|
+
*
|
|
80
|
+
* `silent` suppresses the stream-error log. Prefetch passes it: a speculative,
|
|
81
|
+
* low-priority prefetch that is aborted or never consumed can error its stream
|
|
82
|
+
* benignly, which is not worth surfacing. The fresh-navigation path keeps the
|
|
83
|
+
* log (default), where a stream error reflects a real failed navigation.
|
|
59
84
|
*/
|
|
60
85
|
export function teeWithCompletion(
|
|
61
86
|
response: Response,
|
|
62
87
|
onComplete: () => void,
|
|
63
88
|
signal?: AbortSignal,
|
|
89
|
+
silent = false,
|
|
64
90
|
): Response {
|
|
65
91
|
if (!response.body) {
|
|
66
92
|
onComplete();
|
|
@@ -84,7 +110,7 @@ export function teeWithCompletion(
|
|
|
84
110
|
onComplete();
|
|
85
111
|
}
|
|
86
112
|
})().catch((error) => {
|
|
87
|
-
if (!signal?.aborted) {
|
|
113
|
+
if (!silent && !signal?.aborted) {
|
|
88
114
|
console.error("[Browser] Error reading tracking stream:", error);
|
|
89
115
|
}
|
|
90
116
|
onComplete();
|
|
@@ -23,6 +23,7 @@ import type { EventController } from "./event-controller.js";
|
|
|
23
23
|
import type { ResolvedThemeConfig, Theme } from "../theme/types.js";
|
|
24
24
|
import { initRangoState } from "./rango-state.js";
|
|
25
25
|
import { initPrefetchCache } from "./prefetch/cache.js";
|
|
26
|
+
import { setPrefetchDecoder } from "./prefetch/fetch.js";
|
|
26
27
|
import { setAppVersion } from "./app-version.js";
|
|
27
28
|
import {
|
|
28
29
|
isInterceptSegment,
|
|
@@ -116,10 +117,12 @@ export interface BrowserAppContext {
|
|
|
116
117
|
/** App version for prefetch version mismatch detection */
|
|
117
118
|
version?: string;
|
|
118
119
|
/**
|
|
119
|
-
*
|
|
120
|
-
* NavigationProvider
|
|
121
|
-
*
|
|
122
|
-
*
|
|
120
|
+
* App-shell ref, read through on each render so renderSegments and the
|
|
121
|
+
* NavigationProvider see rootLayout/basename/version without closing over a
|
|
122
|
+
* stale snapshot. Set once from the initial payload and not swapped within a
|
|
123
|
+
* session: a cross-app navigation is a full document load (X-RSC-Reload), so
|
|
124
|
+
* the target app establishes its own shell on load. Theme, warmup, and
|
|
125
|
+
* prefetch TTL are document-lifetime too (see AppShell).
|
|
123
126
|
*/
|
|
124
127
|
appShellRef?: import("./app-shell.js").AppShellRef;
|
|
125
128
|
}
|
|
@@ -212,11 +215,11 @@ export async function initBrowserApp(
|
|
|
212
215
|
// Create composable utilities
|
|
213
216
|
const client = createNavigationClient(deps);
|
|
214
217
|
|
|
215
|
-
// Capture the per-router app-shell
|
|
216
|
-
//
|
|
217
|
-
//
|
|
218
|
-
//
|
|
219
|
-
//
|
|
218
|
+
// Capture the per-router app-shell. rootLayout, basename, and version live
|
|
219
|
+
// here and are read through the ref at call time rather than closed over.
|
|
220
|
+
// It is set once from the initial payload and not swapped within a session:
|
|
221
|
+
// a cross-app navigation is a full document load (X-RSC-Reload), so the
|
|
222
|
+
// target app establishes its own shell on load.
|
|
220
223
|
const version = initialPayload.metadata?.version;
|
|
221
224
|
const appShellRef = createAppShellRef({
|
|
222
225
|
routerId: initialPayload.metadata?.routerId,
|
|
@@ -238,9 +241,14 @@ export async function initBrowserApp(
|
|
|
238
241
|
initPrefetchCache(prefetchCacheTTL);
|
|
239
242
|
}
|
|
240
243
|
|
|
241
|
-
//
|
|
242
|
-
//
|
|
243
|
-
|
|
244
|
+
// Wire the RSC decoder so prefetches decode eagerly and warm the route's
|
|
245
|
+
// client chunks (same createFromFetch the navigation client uses).
|
|
246
|
+
setPrefetchDecoder((response) => deps.createFromFetch<RscPayload>(response));
|
|
247
|
+
|
|
248
|
+
// Create a bound renderSegments that reads rootLayout through the shell ref.
|
|
249
|
+
// The shell is set once at init and not swapped within a session (a cross-app
|
|
250
|
+
// navigation is a full document load), so this always renders this app's
|
|
251
|
+
// Document; reading through the ref just avoids closing over a stale value.
|
|
244
252
|
const renderSegments = (
|
|
245
253
|
segments: ResolvedSegment[],
|
|
246
254
|
options?: RenderSegmentsOptions,
|
|
@@ -280,7 +288,6 @@ export async function initBrowserApp(
|
|
|
280
288
|
onUpdate: (update) => store.emitUpdate(update),
|
|
281
289
|
renderSegments,
|
|
282
290
|
version: version,
|
|
283
|
-
appShellRef,
|
|
284
291
|
});
|
|
285
292
|
|
|
286
293
|
// Connect action redirect → navigation bridge (now that both are initialized)
|
|
@@ -27,6 +27,7 @@ import {
|
|
|
27
27
|
emptyResponse,
|
|
28
28
|
handleReloadHeader,
|
|
29
29
|
teeWithCompletion,
|
|
30
|
+
isForeignRouterId,
|
|
30
31
|
} from "./response-adapter.js";
|
|
31
32
|
import { mergeLocationState } from "./history-state.js";
|
|
32
33
|
import { classifyActionOutcome } from "./action-coordinator.js";
|
|
@@ -260,6 +261,26 @@ export function createServerActionBridge(
|
|
|
260
261
|
return emptyResponse();
|
|
261
262
|
}
|
|
262
263
|
|
|
264
|
+
// Integrity check (pre-decode): a foreign app's action response must
|
|
265
|
+
// not be decoded + applied here. This is the one decode-and-apply path
|
|
266
|
+
// the post-decode partial-update guard does NOT cover (the action
|
|
267
|
+
// bridge has its own createFromFetch -> onUpdate). Ordered after the
|
|
268
|
+
// reload/redirect handlers, which steer control responses first.
|
|
269
|
+
// Reloads via window.location.reload() rather than navigating to a
|
|
270
|
+
// target (as the navigation-client guard does): an action has no
|
|
271
|
+
// navigation target, so reloading the current URL re-syncs the
|
|
272
|
+
// document against the server-applied action effect.
|
|
273
|
+
if (
|
|
274
|
+
!handle.signal.aborted &&
|
|
275
|
+
isForeignRouterId(response, store.getRouterId?.())
|
|
276
|
+
) {
|
|
277
|
+
log("action router id mismatch, reloading to re-sync");
|
|
278
|
+
handle.complete(undefined);
|
|
279
|
+
resolveStreamComplete();
|
|
280
|
+
window.location.reload();
|
|
281
|
+
return new Promise<Response>(() => {});
|
|
282
|
+
}
|
|
283
|
+
|
|
263
284
|
// Start streaming immediately when response arrives
|
|
264
285
|
if (!handle.signal.aborted) {
|
|
265
286
|
streamingToken = handle.startStreaming();
|
package/src/browser/types.ts
CHANGED
|
@@ -32,8 +32,10 @@ export type HandleData = Record<string, Record<string, unknown[]>>;
|
|
|
32
32
|
export interface RscMetadata {
|
|
33
33
|
pathname: string;
|
|
34
34
|
segments: ResolvedSegment[];
|
|
35
|
-
/** Router instance ID
|
|
36
|
-
*
|
|
35
|
+
/** Router instance ID — the current app's identity. A mismatch with the
|
|
36
|
+
* client's id (sent as _rsc_rid) is detected server-side and answered with
|
|
37
|
+
* X-RSC-Reload (full document load), so the client never swaps apps
|
|
38
|
+
* in-session; within a session this always equals the current app. */
|
|
37
39
|
routerId?: string;
|
|
38
40
|
isPartial?: boolean;
|
|
39
41
|
isError?: boolean;
|
|
@@ -433,12 +435,6 @@ export interface NavigationStore {
|
|
|
433
435
|
markCacheAsStale(): void;
|
|
434
436
|
markCacheAsStaleAndBroadcast(): void;
|
|
435
437
|
clearHistoryCache(): void;
|
|
436
|
-
/**
|
|
437
|
-
* Clear this tab's nav + prefetch caches without broadcasting or rotating
|
|
438
|
-
* shared state. Intended for app-switch transitions that affect only this
|
|
439
|
-
* tab's session.
|
|
440
|
-
*/
|
|
441
|
-
clearHistoryCacheLocal(): void;
|
|
442
438
|
broadcastCacheInvalidation(): void;
|
|
443
439
|
|
|
444
440
|
// Cross-tab refresh callback (set by navigation bridge)
|
|
@@ -556,13 +552,6 @@ export interface NavigationBridge {
|
|
|
556
552
|
getVersion(): string | undefined;
|
|
557
553
|
/** Update the RSC version (e.g. after HMR). Clears prefetch cache. */
|
|
558
554
|
updateVersion(newVersion: string): void;
|
|
559
|
-
/**
|
|
560
|
-
* Replace the active app-shell snapshot (rootLayout, basename, version)
|
|
561
|
-
* atomically. Used on cross-app navigations when the response's routerId
|
|
562
|
-
* indicates the user entered a different app. Theme, warmup, and prefetch
|
|
563
|
-
* TTL are document-lifetime and not part of the shell.
|
|
564
|
-
*/
|
|
565
|
-
updateAppShell(next: import("./app-shell.js").AppShell): void;
|
|
566
555
|
}
|
|
567
556
|
|
|
568
557
|
/**
|
|
@@ -32,7 +32,11 @@ import {
|
|
|
32
32
|
export { isCachedFunction };
|
|
33
33
|
import { serializeResult, deserializeResult } from "./segment-codec.js";
|
|
34
34
|
import { createHandleStore } from "../server/handle-store.js";
|
|
35
|
-
import {
|
|
35
|
+
import {
|
|
36
|
+
restoreHandles,
|
|
37
|
+
encodeHandles,
|
|
38
|
+
decodeHandles,
|
|
39
|
+
} from "./handle-snapshot.js";
|
|
36
40
|
import { startHandleCapture, type HandleCapture } from "./handle-capture.js";
|
|
37
41
|
import { sortedSearchString } from "./cache-key-utils.js";
|
|
38
42
|
import { runBackground } from "./background-task.js";
|
|
@@ -170,7 +174,8 @@ export function registerCachedFunction<T extends (...args: any[]) => any>(
|
|
|
170
174
|
if (cached.handles && hasTaintedArgs) {
|
|
171
175
|
const handleStore = requestCtx?._handleStore;
|
|
172
176
|
if (handleStore) {
|
|
173
|
-
|
|
177
|
+
const r = await decodeHandles(cached.handles);
|
|
178
|
+
if (r) restoreHandles(r, handleStore);
|
|
174
179
|
}
|
|
175
180
|
}
|
|
176
181
|
return result;
|
|
@@ -186,7 +191,8 @@ export function registerCachedFunction<T extends (...args: any[]) => any>(
|
|
|
186
191
|
if (cached.handles && hasTaintedArgs) {
|
|
187
192
|
const handleStore = requestCtx?._handleStore;
|
|
188
193
|
if (handleStore) {
|
|
189
|
-
|
|
194
|
+
const r = await decodeHandles(cached.handles);
|
|
195
|
+
if (r) restoreHandles(r, handleStore);
|
|
190
196
|
}
|
|
191
197
|
}
|
|
192
198
|
// Background revalidation — must capture handles if tainted args present.
|
|
@@ -242,8 +248,11 @@ export function registerCachedFunction<T extends (...args: any[]) => any>(
|
|
|
242
248
|
bgStopCapture?.();
|
|
243
249
|
const serialized = await serializeResult(freshResult);
|
|
244
250
|
if (serialized !== null) {
|
|
251
|
+
const encodedHandles = bgCapture?.data
|
|
252
|
+
? await encodeHandles(bgCapture.data)
|
|
253
|
+
: undefined;
|
|
245
254
|
await store.setItem!(cacheKey, serialized, {
|
|
246
|
-
handles:
|
|
255
|
+
handles: encodedHandles,
|
|
247
256
|
ttl: profile.ttl,
|
|
248
257
|
swr: profile.swr,
|
|
249
258
|
tags: profile.tags,
|
|
@@ -317,8 +326,11 @@ export function registerCachedFunction<T extends (...args: any[]) => any>(
|
|
|
317
326
|
try {
|
|
318
327
|
const serialized = await serializeResult(result);
|
|
319
328
|
if (serialized !== null) {
|
|
329
|
+
const encodedHandles = capture?.data
|
|
330
|
+
? await encodeHandles(capture.data)
|
|
331
|
+
: undefined;
|
|
320
332
|
await store.setItem!(cacheKey, serialized, {
|
|
321
|
-
handles:
|
|
333
|
+
handles: encodedHandles,
|
|
322
334
|
ttl: profile.ttl,
|
|
323
335
|
swr: profile.swr,
|
|
324
336
|
tags: profile.tags,
|
package/src/cache/cache-scope.ts
CHANGED
|
@@ -17,7 +17,12 @@ import {
|
|
|
17
17
|
_getRequestContext,
|
|
18
18
|
} from "../server/request-context.js";
|
|
19
19
|
import { serializeSegments, deserializeSegments } from "./segment-codec.js";
|
|
20
|
-
import {
|
|
20
|
+
import {
|
|
21
|
+
captureHandles,
|
|
22
|
+
restoreHandles,
|
|
23
|
+
encodeHandles,
|
|
24
|
+
decodeHandles,
|
|
25
|
+
} from "./handle-snapshot.js";
|
|
21
26
|
import { sortedSearchString, sortedRouteParams } from "./cache-key-utils.js";
|
|
22
27
|
import {
|
|
23
28
|
DEFAULT_ROUTE_TTL,
|
|
@@ -251,10 +256,16 @@ export class CacheScope {
|
|
|
251
256
|
// Deserialize segments
|
|
252
257
|
const segments = await deserializeSegments(cached.segments);
|
|
253
258
|
|
|
254
|
-
// Replay handle data
|
|
259
|
+
// Replay handle data. An empty string means the route pushed no handles —
|
|
260
|
+
// skip the decode entirely (the common case). Otherwise decode the
|
|
261
|
+
// Flight-encoded blob; a decode failure skips handle restore but keeps the
|
|
262
|
+
// valid cached segments.
|
|
255
263
|
const handleStore = _getRequestContext()?._handleStore;
|
|
256
|
-
if (handleStore) {
|
|
257
|
-
|
|
264
|
+
if (handleStore && cached.handles) {
|
|
265
|
+
const handlesRecord = await decodeHandles(cached.handles);
|
|
266
|
+
if (handlesRecord) {
|
|
267
|
+
restoreHandles(handlesRecord, handleStore);
|
|
268
|
+
}
|
|
258
269
|
}
|
|
259
270
|
|
|
260
271
|
if (INTERNAL_RANGO_DEBUG) {
|
|
@@ -367,12 +378,17 @@ export class CacheScope {
|
|
|
367
378
|
);
|
|
368
379
|
}
|
|
369
380
|
|
|
370
|
-
// Serialize
|
|
371
|
-
|
|
381
|
+
// Serialize segments and Flight-encode handles in parallel. Handles go
|
|
382
|
+
// through the codec (not raw into the entry) so Promise/ReactNode handle
|
|
383
|
+
// values survive a JSON-serializing store — see encodeHandles.
|
|
384
|
+
const [serializedSegments, encodedHandles] = await Promise.all([
|
|
385
|
+
serializeSegments(nonLoaderSegments),
|
|
386
|
+
encodeHandles(handles),
|
|
387
|
+
]);
|
|
372
388
|
|
|
373
389
|
const data: CachedEntryData = {
|
|
374
390
|
segments: serializedSegments,
|
|
375
|
-
handles,
|
|
391
|
+
handles: encodedHandles,
|
|
376
392
|
expiresAt: Date.now() + ttl * 1000,
|
|
377
393
|
};
|
|
378
394
|
|
|
@@ -116,8 +116,8 @@ interface KVSegmentEnvelope {
|
|
|
116
116
|
interface KVItemEnvelope {
|
|
117
117
|
/** RSC-serialized return value */
|
|
118
118
|
v: string;
|
|
119
|
-
/**
|
|
120
|
-
h?:
|
|
119
|
+
/** RSC-encoded handle data (see handle-snapshot.ts encodeHandles) */
|
|
120
|
+
h?: string;
|
|
121
121
|
/** When entry becomes stale (ms epoch) */
|
|
122
122
|
s: number;
|
|
123
123
|
/** When entry hard-expires (ms epoch) */
|
|
@@ -278,7 +278,7 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
|
|
|
278
278
|
* @internal
|
|
279
279
|
*/
|
|
280
280
|
private deriveBaseUrl(): string {
|
|
281
|
-
const fallback = "https://rsc-
|
|
281
|
+
const fallback = "https://rsc-dummy-host-1.com/";
|
|
282
282
|
|
|
283
283
|
const ctx = _getRequestContext();
|
|
284
284
|
if (!ctx?.request) {
|
|
@@ -638,7 +638,7 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
|
|
|
638
638
|
|
|
639
639
|
const data = (await response.json()) as {
|
|
640
640
|
value: string;
|
|
641
|
-
handles?:
|
|
641
|
+
handles?: string;
|
|
642
642
|
};
|
|
643
643
|
|
|
644
644
|
if (!isStale || isRevalidating) {
|
|
@@ -9,6 +9,109 @@
|
|
|
9
9
|
import type { ResolvedSegment } from "../types.js";
|
|
10
10
|
import type { HandleStore } from "../server/handle-store.js";
|
|
11
11
|
import type { SegmentHandleData } from "./types.js";
|
|
12
|
+
import { serializeResult, deserializeResult } from "./segment-codec.js";
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Bound on the background cache-write encode of handle data. A pushed handle
|
|
16
|
+
* value can be a Promise (request-context push-a-promise) or a Promise<ReactNode>
|
|
17
|
+
* (Breadcrumbs content), which the Flight encoder awaits while draining. The
|
|
18
|
+
* encode runs in waitUntil/runBackground, so a never-resolving handle value
|
|
19
|
+
* would otherwise pin a background slot indefinitely; on timeout the entry's
|
|
20
|
+
* handles coalesce to empty rather than hanging or poisoning the whole write.
|
|
21
|
+
*/
|
|
22
|
+
const HANDLE_ENCODE_TIMEOUT_MS = 5000;
|
|
23
|
+
|
|
24
|
+
type HandleRecord = Record<string, SegmentHandleData>;
|
|
25
|
+
|
|
26
|
+
// captureHandles builds a per-segment map keyed by every cached segment id, even
|
|
27
|
+
// segments that pushed nothing (their entry is an empty object). "No handle data"
|
|
28
|
+
// means no segment has any handle, in which case we skip the Flight encode and
|
|
29
|
+
// store an empty string — so the common handle-free route pays neither an encode
|
|
30
|
+
// on write nor a decode on every cache hit.
|
|
31
|
+
function hasHandleData(handles: HandleRecord): boolean {
|
|
32
|
+
for (const segId in handles) {
|
|
33
|
+
for (const _ in handles[segId]) return true;
|
|
34
|
+
}
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function withTimeout<T>(p: Promise<T>, ms: number, onTimeout: T): Promise<T> {
|
|
39
|
+
let timer: ReturnType<typeof setTimeout>;
|
|
40
|
+
const timeout = new Promise<T>((resolve) => {
|
|
41
|
+
timer = setTimeout(() => resolve(onTimeout), ms);
|
|
42
|
+
});
|
|
43
|
+
return Promise.race([
|
|
44
|
+
p.then(
|
|
45
|
+
(v) => {
|
|
46
|
+
clearTimeout(timer);
|
|
47
|
+
return v;
|
|
48
|
+
},
|
|
49
|
+
(e) => {
|
|
50
|
+
clearTimeout(timer);
|
|
51
|
+
throw e;
|
|
52
|
+
},
|
|
53
|
+
),
|
|
54
|
+
timeout,
|
|
55
|
+
]);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Encode a captured handle map to a string for cache storage.
|
|
60
|
+
*
|
|
61
|
+
* Handle values can be Promises or React elements (e.g. Breadcrumbs `content`).
|
|
62
|
+
* JSON.stringify destroys those (Promise -> {}, ReactNode non-representable), so
|
|
63
|
+
* persisting the raw map silently corrupts non-scalar handle values on stores
|
|
64
|
+
* that serialize to JSON (the Cloudflare cache). Routing the map through the same
|
|
65
|
+
* RSC-Flight codec the segments/value already use awaits Promises and serializes
|
|
66
|
+
* React elements, so the stored field is a lossless, JSON-safe string. The
|
|
67
|
+
* in-memory store keeps the same string by reference, so both backends replay
|
|
68
|
+
* identical decoded values.
|
|
69
|
+
*/
|
|
70
|
+
export async function encodeHandles(handles: HandleRecord): Promise<string> {
|
|
71
|
+
// No handle was pushed anywhere — store an empty marker (decoded as "skip").
|
|
72
|
+
if (!hasHandleData(handles)) return "";
|
|
73
|
+
return encodeHandleValue(handles);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Decode a stored handle string back to a handle map. Returns null on any
|
|
78
|
+
* decode failure (e.g. a cross-version entry read under a pinned static
|
|
79
|
+
* version), so the caller can skip handle restore without discarding the
|
|
80
|
+
* otherwise-valid cached segments alongside it.
|
|
81
|
+
*/
|
|
82
|
+
export function decodeHandles(encoded: string): Promise<HandleRecord | null> {
|
|
83
|
+
return decodeHandleValue<HandleRecord>(encoded);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Encode an arbitrary handle-data value to a Flight string. Used directly by the
|
|
88
|
+
* prerender/static pipeline, whose static path holds a single segment's
|
|
89
|
+
* `SegmentHandleData` (not a segId-keyed map). Bounded by the same timeout as
|
|
90
|
+
* encodeHandles; failure/timeout coalesces to "". The caller owns the empty
|
|
91
|
+
* check (an empty value still encodes to a non-empty Flight string, so skip the
|
|
92
|
+
* call when there is nothing to store).
|
|
93
|
+
*/
|
|
94
|
+
export async function encodeHandleValue(value: unknown): Promise<string> {
|
|
95
|
+
const encoded = await withTimeout(
|
|
96
|
+
serializeResult(value),
|
|
97
|
+
HANDLE_ENCODE_TIMEOUT_MS,
|
|
98
|
+
null,
|
|
99
|
+
);
|
|
100
|
+
return encoded ?? "";
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Decode a Flight-encoded handle-data string. Returns null on any decode
|
|
105
|
+
* failure so the caller can skip handle restore without discarding valid
|
|
106
|
+
* cached/prerendered segments.
|
|
107
|
+
*/
|
|
108
|
+
export async function decodeHandleValue<T>(encoded: string): Promise<T | null> {
|
|
109
|
+
try {
|
|
110
|
+
return await deserializeResult<T>(encoded);
|
|
111
|
+
} catch {
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
12
115
|
|
|
13
116
|
/**
|
|
14
117
|
* Capture handle data for a set of segments from the handle store.
|
|
@@ -12,7 +12,6 @@ import type {
|
|
|
12
12
|
CacheGetResult,
|
|
13
13
|
CacheItemResult,
|
|
14
14
|
CacheItemOptions,
|
|
15
|
-
SegmentHandleData,
|
|
16
15
|
} from "./types.js";
|
|
17
16
|
import type { RequestContext } from "../server/request-context.js";
|
|
18
17
|
import {
|
|
@@ -56,7 +55,9 @@ interface CachedResponseEntry {
|
|
|
56
55
|
|
|
57
56
|
interface CachedItemEntry {
|
|
58
57
|
value: string;
|
|
59
|
-
|
|
58
|
+
/** RSC-encoded handle data (see handle-snapshot.ts encodeHandles). Stored as
|
|
59
|
+
* the encoded string by reference, identical to the JSON-serializing stores. */
|
|
60
|
+
handles?: string;
|
|
60
61
|
expiresAt: number;
|
|
61
62
|
staleAt: number;
|
|
62
63
|
}
|
package/src/cache/types.ts
CHANGED
|
@@ -175,8 +175,10 @@ export interface SegmentCacheStore<TEnv = unknown> {
|
|
|
175
175
|
export interface CacheItemResult {
|
|
176
176
|
/** RSC-serialized return value */
|
|
177
177
|
value: string;
|
|
178
|
-
/**
|
|
179
|
-
|
|
178
|
+
/** RSC-encoded handle data captured during execution (breadcrumbs, metadata,
|
|
179
|
+
* etc.). Encoded via the Flight codec so Promise/ReactNode handle values
|
|
180
|
+
* survive JSON-serializing stores — see handle-snapshot.ts encodeHandles. */
|
|
181
|
+
handles?: string;
|
|
180
182
|
/** Whether the entry is stale and should be revalidated */
|
|
181
183
|
shouldRevalidate: boolean;
|
|
182
184
|
}
|
|
@@ -185,8 +187,8 @@ export interface CacheItemResult {
|
|
|
185
187
|
* Options for setItem() for function-level caching ("use cache").
|
|
186
188
|
*/
|
|
187
189
|
export interface CacheItemOptions {
|
|
188
|
-
/**
|
|
189
|
-
handles?:
|
|
190
|
+
/** RSC-encoded handle data to store alongside the value (see encodeHandles). */
|
|
191
|
+
handles?: string;
|
|
190
192
|
/** Time-to-live in seconds */
|
|
191
193
|
ttl?: number;
|
|
192
194
|
/** Stale-while-revalidate window in seconds */
|
|
@@ -227,8 +229,10 @@ export interface SerializedSegmentData {
|
|
|
227
229
|
export interface CachedEntryData {
|
|
228
230
|
/** Serialized segments for this entry */
|
|
229
231
|
segments: SerializedSegmentData[];
|
|
230
|
-
/**
|
|
231
|
-
|
|
232
|
+
/** RSC-encoded handle data keyed by segment ID. Encoded via the Flight codec
|
|
233
|
+
* (see handle-snapshot.ts encodeHandles) so Promise/ReactNode handle values
|
|
234
|
+
* round-trip through JSON-serializing stores instead of being flattened. */
|
|
235
|
+
handles: string;
|
|
232
236
|
/** Expiration timestamp (ms since epoch) */
|
|
233
237
|
expiresAt: number;
|
|
234
238
|
}
|
package/src/prerender/store.ts
CHANGED
|
@@ -8,14 +8,14 @@
|
|
|
8
8
|
* that anchors import() resolution relative to the manifest file.
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
import type {
|
|
12
|
-
SerializedSegmentData,
|
|
13
|
-
SegmentHandleData,
|
|
14
|
-
} from "../cache/types.js";
|
|
11
|
+
import type { SerializedSegmentData } from "../cache/types.js";
|
|
15
12
|
|
|
16
13
|
export interface PrerenderEntry {
|
|
17
14
|
segments: SerializedSegmentData[];
|
|
18
|
-
|
|
15
|
+
/** RSC-encoded handle map (see handle-snapshot.ts encodeHandles); "" when the
|
|
16
|
+
* route pushed no handles. Encoded so Promise/ReactNode handle values survive
|
|
17
|
+
* the JSON-serialized build artifact / dev wire, identical to the runtime cache. */
|
|
18
|
+
handles: string;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
export interface PrerenderStore {
|
|
@@ -28,7 +28,9 @@ export interface PrerenderStore {
|
|
|
28
28
|
|
|
29
29
|
export interface StaticEntry {
|
|
30
30
|
encoded: string;
|
|
31
|
-
|
|
31
|
+
/** RSC-encoded single-segment handle data (see encodeHandleValue); "" when the
|
|
32
|
+
* Static handler pushed no handles. */
|
|
33
|
+
handles: string;
|
|
32
34
|
}
|
|
33
35
|
|
|
34
36
|
export interface StaticStore {
|
|
@@ -174,7 +176,7 @@ export function createStaticStore(): StaticStore | null {
|
|
|
174
176
|
const val = mod.default;
|
|
175
177
|
// Normalize: string-only (no handles) or { encoded, handles }
|
|
176
178
|
if (typeof val === "string") {
|
|
177
|
-
return { encoded: val, handles:
|
|
179
|
+
return { encoded: val, handles: "" } as StaticEntry;
|
|
178
180
|
}
|
|
179
181
|
return val as StaticEntry;
|
|
180
182
|
})
|
|
@@ -119,7 +119,7 @@ export function evaluateLazyEntry<TEnv = any>(
|
|
|
119
119
|
const lazyContext = entry.lazyContext;
|
|
120
120
|
|
|
121
121
|
// Create a new context for evaluating the lazy patterns.
|
|
122
|
-
// KNOWN REDUNDANCY (LP3, docs/internal/matching-
|
|
122
|
+
// KNOWN REDUNDANCY (LP3, docs/internal/matching-and-lazy-discovery.md): this
|
|
123
123
|
// runs lazyPatterns.handler() purely to extract `patterns` (route name ->
|
|
124
124
|
// pattern) for matching, and DISCARDS the EntryData `manifest` it builds.
|
|
125
125
|
// loadManifest() then runs the SAME handler again on the first request to
|