@rangojs/router 0.0.0-experimental.117 → 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 +1 -1
- package/skills/css/SKILL.md +76 -0
- package/skills/host-router/SKILL.md +21 -0
- 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 +14 -0
- package/src/browser/navigation-store.ts +1 -25
- package/src/browser/partial-update.ts +19 -32
- package/src/browser/prefetch/cache.ts +39 -21
- package/src/browser/prefetch/fetch.ts +10 -1
- 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 +20 -0
- package/src/browser/rsc-router.tsx +15 -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/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/urls/path-helper-types.ts +6 -0
- package/src/vite/discovery/prerender-collection.ts +5 -5
- package/src/vite/router-discovery.ts +3 -4
|
@@ -59,11 +59,16 @@ export async function matchForPrerender<TEnv = any>(
|
|
|
59
59
|
devMode?: boolean,
|
|
60
60
|
): Promise<{
|
|
61
61
|
segments: SerializedSegmentData[];
|
|
62
|
-
|
|
62
|
+
/** RSC-encoded handle map ("" when none) — see handle-snapshot.ts. Encoded in
|
|
63
|
+
* the producer (where the Flight codec resolves) so the node-side build/dev
|
|
64
|
+
* sinks can persist it without touching the codec. */
|
|
65
|
+
handles: string;
|
|
63
66
|
routeName: string;
|
|
64
67
|
params: Record<string, string>;
|
|
65
68
|
interceptSegments?: SerializedSegmentData[];
|
|
66
|
-
|
|
69
|
+
/** RSC-encoded MERGED (main + intercept) handle map for the intercept artifact;
|
|
70
|
+
* the sinks store it as-is (no longer merge raw records). */
|
|
71
|
+
interceptHandles?: string;
|
|
67
72
|
passthrough?: true;
|
|
68
73
|
} | null> {
|
|
69
74
|
// 1. Find the matching route entry
|
|
@@ -142,7 +147,7 @@ export async function matchForPrerender<TEnv = any>(
|
|
|
142
147
|
if (!isKnown) {
|
|
143
148
|
return {
|
|
144
149
|
segments: [],
|
|
145
|
-
handles:
|
|
150
|
+
handles: "",
|
|
146
151
|
routeName: matched.routeKey,
|
|
147
152
|
params: matchedParams,
|
|
148
153
|
passthrough: true as const,
|
|
@@ -162,7 +167,7 @@ export async function matchForPrerender<TEnv = any>(
|
|
|
162
167
|
if (err?.name === "Skip") {
|
|
163
168
|
return {
|
|
164
169
|
segments: [],
|
|
165
|
-
handles:
|
|
170
|
+
handles: "",
|
|
166
171
|
routeName: matched.routeKey,
|
|
167
172
|
params: matchedParams,
|
|
168
173
|
passthrough: true as const,
|
|
@@ -261,7 +266,7 @@ export async function matchForPrerender<TEnv = any>(
|
|
|
261
266
|
if (isPrerenderPassthrough(seg.component)) {
|
|
262
267
|
return {
|
|
263
268
|
segments: [],
|
|
264
|
-
handles:
|
|
269
|
+
handles: "",
|
|
265
270
|
routeName: matched.routeKey,
|
|
266
271
|
params: matchedParams,
|
|
267
272
|
passthrough: true as const,
|
|
@@ -278,16 +283,22 @@ export async function matchForPrerender<TEnv = any>(
|
|
|
278
283
|
|
|
279
284
|
// 12. Serialize segments using the cache serializer
|
|
280
285
|
const { serializeSegments } = await import("../cache/segment-codec.js");
|
|
286
|
+
const { encodeHandles } = await import("../cache/handle-snapshot.js");
|
|
281
287
|
const serializedSegments = await serializeSegments(nonLoaderSegments);
|
|
282
288
|
|
|
283
|
-
// 13. Collect handle data per segment (skip segments with no handle data)
|
|
284
|
-
|
|
289
|
+
// 13. Collect handle data per segment (skip segments with no handle data).
|
|
290
|
+
// Encoded through the Flight codec (not stored raw) so Promise/ReactNode
|
|
291
|
+
// handle values survive the JSON-serialized build artifact / dev wire —
|
|
292
|
+
// the same fix the runtime cache uses. Encode happens here, in the RSC
|
|
293
|
+
// environment where the codec resolves; the node-side sinks only persist.
|
|
294
|
+
const handlesRecord: Record<string, SegmentHandleData> = {};
|
|
285
295
|
for (const seg of nonLoaderSegments) {
|
|
286
296
|
const segHandles = handleStore.getDataForSegment(seg.id);
|
|
287
297
|
if (Object.keys(segHandles).length > 0) {
|
|
288
|
-
|
|
298
|
+
handlesRecord[seg.id] = segHandles;
|
|
289
299
|
}
|
|
290
300
|
}
|
|
301
|
+
const handles = await encodeHandles(handlesRecord);
|
|
291
302
|
|
|
292
303
|
// Use the trie-level route key (e.g., "docs", "docs.article")
|
|
293
304
|
const routeName = matched.routeKey;
|
|
@@ -297,7 +308,7 @@ export async function matchForPrerender<TEnv = any>(
|
|
|
297
308
|
// evaluation -- we pre-render all intercepts unconditionally and let
|
|
298
309
|
// runtime matching decide which to serve.
|
|
299
310
|
let interceptSegments: SerializedSegmentData[] | undefined;
|
|
300
|
-
let interceptHandles:
|
|
311
|
+
let interceptHandles: string | undefined;
|
|
301
312
|
|
|
302
313
|
const foundIntercepts: {
|
|
303
314
|
intercept: InterceptEntry;
|
|
@@ -379,13 +390,20 @@ export async function matchForPrerender<TEnv = any>(
|
|
|
379
390
|
interceptSegments = await serializeSegments(
|
|
380
391
|
interceptResolvedSegments,
|
|
381
392
|
);
|
|
382
|
-
|
|
393
|
+
const interceptHandlesRecord: Record<string, SegmentHandleData> = {};
|
|
383
394
|
for (const seg of interceptResolvedSegments) {
|
|
384
395
|
const segHandles = handleStore.getDataForSegment(seg.id);
|
|
385
396
|
if (Object.keys(segHandles).length > 0) {
|
|
386
|
-
|
|
397
|
+
interceptHandlesRecord[seg.id] = segHandles;
|
|
387
398
|
}
|
|
388
399
|
}
|
|
400
|
+
// The intercept artifact serves main + intercept segments together, so
|
|
401
|
+
// encode the MERGED handle map here (the sinks no longer merge raw
|
|
402
|
+
// records — they store this pre-encoded string as-is).
|
|
403
|
+
interceptHandles = await encodeHandles({
|
|
404
|
+
...handlesRecord,
|
|
405
|
+
...interceptHandlesRecord,
|
|
406
|
+
});
|
|
389
407
|
}
|
|
390
408
|
}
|
|
391
409
|
|
|
@@ -414,7 +432,7 @@ export async function renderStaticSegment<TEnv = any>(
|
|
|
414
432
|
routeName?: string,
|
|
415
433
|
buildEnv?: TEnv,
|
|
416
434
|
devMode?: boolean,
|
|
417
|
-
): Promise<{ encoded: string; handles:
|
|
435
|
+
): Promise<{ encoded: string; handles: string } | null> {
|
|
418
436
|
const syntheticUrl = new URL("http://prerender/");
|
|
419
437
|
const syntheticRequest = new Request(syntheticUrl);
|
|
420
438
|
|
|
@@ -492,10 +510,17 @@ export async function renderStaticSegment<TEnv = any>(
|
|
|
492
510
|
};
|
|
493
511
|
|
|
494
512
|
const { serializeSegments } = await import("../cache/segment-codec.js");
|
|
513
|
+
const { encodeHandleValue } = await import("../cache/handle-snapshot.js");
|
|
495
514
|
const [serialized] = await serializeSegments([segment]);
|
|
496
515
|
|
|
497
|
-
// Collect handle data pushed during rendering
|
|
498
|
-
|
|
516
|
+
// Collect handle data pushed during rendering and Flight-encode it (so
|
|
517
|
+
// Promise/ReactNode handle values survive the JSON build artifact). "" when
|
|
518
|
+
// nothing was pushed.
|
|
519
|
+
const segHandles = handleStore.getDataForSegment(handlerId);
|
|
520
|
+
const handles =
|
|
521
|
+
Object.keys(segHandles).length > 0
|
|
522
|
+
? await encodeHandleValue(segHandles)
|
|
523
|
+
: "";
|
|
499
524
|
|
|
500
525
|
return { encoded: serialized.encoded, handles };
|
|
501
526
|
});
|
|
@@ -40,6 +40,12 @@ interface VersionMismatchPlan<TEnv = any> {
|
|
|
40
40
|
reloadUrl: string;
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
+
interface AppSwitchReloadPlan {
|
|
44
|
+
mode: "app-switch";
|
|
45
|
+
/** Clean target URL (internal _rsc_* params stripped) to navigate to. */
|
|
46
|
+
reloadUrl: string;
|
|
47
|
+
}
|
|
48
|
+
|
|
43
49
|
interface ResponseRoutePlan<TEnv = any> {
|
|
44
50
|
mode: "response";
|
|
45
51
|
route: RouteSnapshot<TEnv>;
|
|
@@ -86,6 +92,7 @@ interface PartialRenderPlan<TEnv = any> {
|
|
|
86
92
|
export type RequestPlan<TEnv = any> =
|
|
87
93
|
| RedirectPlan<TEnv>
|
|
88
94
|
| VersionMismatchPlan<TEnv>
|
|
95
|
+
| AppSwitchReloadPlan
|
|
89
96
|
| ResponseRoutePlan<TEnv>
|
|
90
97
|
| LoaderFetchPlan<TEnv>
|
|
91
98
|
| PeRenderPlan<TEnv>
|
|
@@ -94,12 +101,13 @@ export type RequestPlan<TEnv = any> =
|
|
|
94
101
|
| PartialRenderPlan<TEnv>;
|
|
95
102
|
|
|
96
103
|
/**
|
|
97
|
-
* Plans that have passed the terminal-check gate (version-mismatch
|
|
98
|
-
* and are ready for execution. Always have a
|
|
104
|
+
* Plans that have passed the terminal-check gate (version-mismatch and
|
|
105
|
+
* app-switch reloads handled) and are ready for execution. Always have a
|
|
106
|
+
* `route` field.
|
|
99
107
|
*/
|
|
100
108
|
export type ExecutableRequestPlan<TEnv = any> = Exclude<
|
|
101
109
|
RequestPlan<TEnv>,
|
|
102
|
-
VersionMismatchPlan<TEnv>
|
|
110
|
+
VersionMismatchPlan<TEnv> | AppSwitchReloadPlan
|
|
103
111
|
>;
|
|
104
112
|
|
|
105
113
|
/**
|
|
@@ -179,6 +187,30 @@ export async function classifyRequest<TEnv = any>(
|
|
|
179
187
|
};
|
|
180
188
|
}
|
|
181
189
|
|
|
190
|
+
// App switch — also runs BEFORE route resolution (like version-mismatch
|
|
191
|
+
// above), and for the same reason: a cross-app SPA navigation must reload
|
|
192
|
+
// even when the target route does NOT exist in the target app. If we resolved
|
|
193
|
+
// first, a missing route would throw RouteNotFoundError and the 404 would
|
|
194
|
+
// render in-place under the SOURCE app's document — violating the invariant
|
|
195
|
+
// that crossing a host-router app boundary is always a full document load.
|
|
196
|
+
// A mismatched routerId (_rsc_rid) means the navigation crossed an app
|
|
197
|
+
// boundary; force a real document navigation. A soft swap can't faithfully
|
|
198
|
+
// re-establish the target app's document (stylesheets shared across apps are
|
|
199
|
+
// dropped by React 19's by-href dedup; theme/warmup/prefetch-TTL are
|
|
200
|
+
// document-lifetime — see browser/app-shell.ts). Only SPA (`_rsc_partial`)
|
|
201
|
+
// requests need this; a direct full load already IS the document navigation.
|
|
202
|
+
const clientRouterId = url.searchParams.get("_rsc_rid");
|
|
203
|
+
if (
|
|
204
|
+
clientRouterId &&
|
|
205
|
+
clientRouterId !== deps.routerId &&
|
|
206
|
+
url.searchParams.has("_rsc_partial")
|
|
207
|
+
) {
|
|
208
|
+
return {
|
|
209
|
+
mode: "app-switch",
|
|
210
|
+
reloadUrl: stripInternalParams(url).toString(),
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
|
|
182
214
|
// No metricsStore — classification is a lightweight gating step.
|
|
183
215
|
// Route-matching and manifest-loading metrics belong in the match path
|
|
184
216
|
// (createMatchContextForFull/Partial) which runs the authoritative resolution.
|
|
@@ -252,12 +284,7 @@ export async function classifyRequest<TEnv = any>(
|
|
|
252
284
|
return { mode: "pe-render", route: snapshot };
|
|
253
285
|
}
|
|
254
286
|
|
|
255
|
-
|
|
256
|
-
const clientRouterId = url.searchParams.get("_rsc_rid");
|
|
257
|
-
const isAppSwitch = !!(clientRouterId && clientRouterId !== deps.routerId);
|
|
258
|
-
const isPartial = url.searchParams.has("_rsc_partial") && !isAppSwitch;
|
|
259
|
-
|
|
260
|
-
if (isPartial) {
|
|
287
|
+
if (url.searchParams.has("_rsc_partial")) {
|
|
261
288
|
return { mode: "partial-render", route: snapshot, negotiated };
|
|
262
289
|
}
|
|
263
290
|
|
|
@@ -7,10 +7,7 @@ import type { EntryData } from "../server/context";
|
|
|
7
7
|
import type { ErrorInfo, MatchResult } from "../types";
|
|
8
8
|
import type { NonceProvider } from "../rsc/types.js";
|
|
9
9
|
import type { ExecutionContext } from "../server/request-context.js";
|
|
10
|
-
import type {
|
|
11
|
-
SerializedSegmentData,
|
|
12
|
-
SegmentHandleData,
|
|
13
|
-
} from "../cache/types.js";
|
|
10
|
+
import type { SerializedSegmentData } from "../cache/types.js";
|
|
14
11
|
import type { MiddlewareEntry, MiddlewareFn } from "./middleware.js";
|
|
15
12
|
import { RSC_ROUTER_BRAND } from "./router-registry.js";
|
|
16
13
|
import type { RangoOptions, RootLayoutProps } from "./router-options.js";
|
|
@@ -395,11 +392,13 @@ export interface RangoInternal<
|
|
|
395
392
|
devMode?: boolean,
|
|
396
393
|
): Promise<{
|
|
397
394
|
segments: SerializedSegmentData[];
|
|
398
|
-
|
|
395
|
+
/** RSC-encoded handle map ("" when none) — see handle-snapshot.ts. */
|
|
396
|
+
handles: string;
|
|
399
397
|
routeName: string;
|
|
400
398
|
params: Record<string, string>;
|
|
401
399
|
interceptSegments?: SerializedSegmentData[];
|
|
402
|
-
|
|
400
|
+
/** RSC-encoded MERGED (main + intercept) handle map for the intercept artifact. */
|
|
401
|
+
interceptHandles?: string;
|
|
403
402
|
passthrough?: true;
|
|
404
403
|
} | null>;
|
|
405
404
|
|
|
@@ -413,7 +412,7 @@ export interface RangoInternal<
|
|
|
413
412
|
routeName?: string,
|
|
414
413
|
buildEnv?: any,
|
|
415
414
|
devMode?: boolean,
|
|
416
|
-
): Promise<{ encoded: string; handles:
|
|
415
|
+
): Promise<{ encoded: string; handles: string } | null>;
|
|
417
416
|
|
|
418
417
|
/**
|
|
419
418
|
* Preview match - returns route middleware without segment resolution.
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
import type { ReactNode } from "react";
|
|
9
9
|
import { _getRequestContext } from "../../server/request-context.js";
|
|
10
10
|
import type { StaticStore } from "../../prerender/store.js";
|
|
11
|
+
import type { SegmentHandleData } from "../../cache/types.js";
|
|
11
12
|
|
|
12
13
|
// Lazy-initialized static store for production Static handler interception.
|
|
13
14
|
// Remains undefined until first check; null means checked but no manifest.
|
|
@@ -19,6 +20,9 @@ let _staticStore: StaticStore | null | undefined =
|
|
|
19
20
|
? undefined
|
|
20
21
|
: null;
|
|
21
22
|
let _deserializeComponent: ((encoded: string) => Promise<unknown>) | undefined;
|
|
23
|
+
let _decodeHandleValue:
|
|
24
|
+
| typeof import("../../cache/handle-snapshot.js").decodeHandleValue
|
|
25
|
+
| undefined;
|
|
22
26
|
|
|
23
27
|
async function ensureStaticDeps(): Promise<void> {
|
|
24
28
|
if (_staticStore === undefined) {
|
|
@@ -29,6 +33,9 @@ async function ensureStaticDeps(): Promise<void> {
|
|
|
29
33
|
const { deserializeComponent } =
|
|
30
34
|
await import("../../cache/segment-codec.js");
|
|
31
35
|
_deserializeComponent = deserializeComponent;
|
|
36
|
+
const { decodeHandleValue } =
|
|
37
|
+
await import("../../cache/handle-snapshot.js");
|
|
38
|
+
_decodeHandleValue = decodeHandleValue;
|
|
32
39
|
}
|
|
33
40
|
}
|
|
34
41
|
|
|
@@ -53,13 +60,20 @@ export async function tryStaticLookup(
|
|
|
53
60
|
const entry = await _staticStore.get(handlerId);
|
|
54
61
|
if (!entry) return undefined;
|
|
55
62
|
|
|
56
|
-
// Replay handle data captured during build-time rendering.
|
|
57
|
-
//
|
|
58
|
-
//
|
|
59
|
-
|
|
63
|
+
// Replay handle data captured during build-time rendering. entry.handles is a
|
|
64
|
+
// Flight-encoded string ("" when none) — decode before replay so
|
|
65
|
+
// Promise/ReactNode handle values are revived. The data was keyed by handlerId
|
|
66
|
+
// at build time; replay under segmentId so it matches the segment order used
|
|
67
|
+
// by useHandle on the client.
|
|
68
|
+
if (entry.handles && _decodeHandleValue) {
|
|
60
69
|
const handleStore = _getRequestContext()?._handleStore;
|
|
61
70
|
if (handleStore) {
|
|
62
|
-
|
|
71
|
+
const segHandles = await _decodeHandleValue<SegmentHandleData>(
|
|
72
|
+
entry.handles,
|
|
73
|
+
);
|
|
74
|
+
if (segHandles) {
|
|
75
|
+
handleStore.replaySegmentData(segmentId, segHandles);
|
|
76
|
+
}
|
|
63
77
|
}
|
|
64
78
|
}
|
|
65
79
|
|
package/src/rsc/handler.ts
CHANGED
|
@@ -128,6 +128,22 @@ import {
|
|
|
128
128
|
* });
|
|
129
129
|
* ```
|
|
130
130
|
*/
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Response that tells the client to do a full document navigation. Shared by
|
|
134
|
+
* the terminal reload plans (version-mismatch and app-switch): an empty 200
|
|
135
|
+
* carrying X-RSC-Reload, which the client turns into window.location.href.
|
|
136
|
+
*/
|
|
137
|
+
function createReloadResponse(reloadUrl: string) {
|
|
138
|
+
return createResponseWithMergedHeaders(null, {
|
|
139
|
+
status: 200,
|
|
140
|
+
headers: {
|
|
141
|
+
"X-RSC-Reload": reloadUrl,
|
|
142
|
+
"content-type": "text/x-component;charset=utf-8",
|
|
143
|
+
},
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
|
|
131
147
|
export function createRSCHandler<
|
|
132
148
|
TEnv = unknown,
|
|
133
149
|
TRoutes extends Record<string, string> = Record<string, string>,
|
|
@@ -642,13 +658,14 @@ export function createRSCHandler<
|
|
|
642
658
|
console.log(
|
|
643
659
|
`[RSC] Version mismatch: client=${url.searchParams.get("_rsc_v")}, server=${version}. Forcing reload.`,
|
|
644
660
|
);
|
|
645
|
-
return
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
661
|
+
return createReloadResponse(plan.reloadUrl);
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
if (plan.mode === "app-switch") {
|
|
665
|
+
// Cross-app SPA navigation crossed a host-router app boundary. Force a
|
|
666
|
+
// real document navigation so the target app's document is re-established
|
|
667
|
+
// (stylesheets, theme, warmup, prefetch-TTL). See request-classification.
|
|
668
|
+
return createReloadResponse(plan.reloadUrl);
|
|
652
669
|
}
|
|
653
670
|
|
|
654
671
|
// ---- 3. Origin guard (gate for action/loader/PE modes) ----
|
|
@@ -1068,7 +1085,12 @@ export function createRSCHandler<
|
|
|
1068
1085
|
if (isRscRequest(request, url, isPartial)) {
|
|
1069
1086
|
return createResponseWithMergedHeaders(rscStream, {
|
|
1070
1087
|
status: 404,
|
|
1071
|
-
headers: {
|
|
1088
|
+
headers: {
|
|
1089
|
+
"content-type": "text/x-component;charset=utf-8",
|
|
1090
|
+
// Router identity for the client's pre-decode integrity check; a
|
|
1091
|
+
// same-app 404 matches and applies in place. See response-adapter.
|
|
1092
|
+
"X-RSC-Router-Id": router.id,
|
|
1093
|
+
},
|
|
1072
1094
|
});
|
|
1073
1095
|
}
|
|
1074
1096
|
|
package/src/rsc/origin-guard.ts
CHANGED
|
@@ -131,7 +131,26 @@ export async function handleResponseRoute<TEnv>(
|
|
|
131
131
|
|
|
132
132
|
// Handled before the MIME lookup (json is also a RESPONSE_TYPE_MIME key).
|
|
133
133
|
if (preview.responseType === "json") {
|
|
134
|
-
|
|
134
|
+
// Runtime guard: the json() return type rejects nested Promises at
|
|
135
|
+
// compile time, but an `as`-cast or untyped (JS) handler can still slip
|
|
136
|
+
// one through. JSON.stringify would silently emit {} for it (the
|
|
137
|
+
// forgotten-await footgun — the RSC pipeline awaits nested promises, this
|
|
138
|
+
// path does not). Throw a clear error instead of shipping empty data.
|
|
139
|
+
const body = JSON.stringify(result, (_key, value) => {
|
|
140
|
+
if (
|
|
141
|
+
value != null &&
|
|
142
|
+
typeof (value as { then?: unknown }).then === "function"
|
|
143
|
+
) {
|
|
144
|
+
throw new RouterError(
|
|
145
|
+
"RESPONSE_NOT_SERIALIZABLE",
|
|
146
|
+
"A json() response route returned a Promise (likely a forgotten " +
|
|
147
|
+
"await). Await async values before returning so they serialize, " +
|
|
148
|
+
"instead of emitting an empty {}.",
|
|
149
|
+
);
|
|
150
|
+
}
|
|
151
|
+
return value;
|
|
152
|
+
});
|
|
153
|
+
return createResponseWithMergedHeaders(body, {
|
|
135
154
|
status: 200,
|
|
136
155
|
headers: { "content-type": "application/json;charset=utf-8" },
|
|
137
156
|
});
|
package/src/rsc/rsc-rendering.ts
CHANGED
|
@@ -83,6 +83,11 @@ export async function handleRscRendering<TEnv>(
|
|
|
83
83
|
payload = {
|
|
84
84
|
metadata: {
|
|
85
85
|
pathname: url.pathname,
|
|
86
|
+
// routerId is serialized on every payload (including within-session
|
|
87
|
+
// ones) so the frontend can read the current app/router identity. It
|
|
88
|
+
// always equals the current app's id: a cross-app navigation is
|
|
89
|
+
// intercepted server-side (X-RSC-Reload) and never delivers a
|
|
90
|
+
// different-router payload to the client.
|
|
86
91
|
routerId: ctx.router.id,
|
|
87
92
|
segments: result.segments,
|
|
88
93
|
matched: result.matched,
|
|
@@ -180,6 +185,11 @@ export async function handleRscRendering<TEnv>(
|
|
|
180
185
|
const rscHeaders: Record<string, string> = {
|
|
181
186
|
"content-type": "text/x-component;charset=utf-8",
|
|
182
187
|
vary: "accept, X-Rango-State, X-RSC-Router-Client-Path",
|
|
188
|
+
// Router identity, so the client can verify pre-decode (before importing
|
|
189
|
+
// chunks) that this content payload belongs to its app and refuse a
|
|
190
|
+
// foreign one (cache/proxy/bug). Control-only reload/redirect responses
|
|
191
|
+
// are deliberately NOT stamped. See browser/response-adapter.ts.
|
|
192
|
+
"X-RSC-Router-Id": ctx.router.id,
|
|
183
193
|
};
|
|
184
194
|
// Tell the client's prefetch cache to scope this response to its source
|
|
185
195
|
// URL (instead of the default source-agnostic wildcard). Intercept
|
package/src/rsc/server-action.ts
CHANGED
|
@@ -184,6 +184,8 @@ export async function executeServerAction<TEnv>(
|
|
|
184
184
|
const payload: RscPayload = {
|
|
185
185
|
metadata: {
|
|
186
186
|
pathname: url.pathname,
|
|
187
|
+
// routerId exposed for the frontend (current app identity); see
|
|
188
|
+
// rsc-rendering.ts partial branch.
|
|
187
189
|
routerId: ctx.router.id,
|
|
188
190
|
segments: errorResult.segments,
|
|
189
191
|
isPartial: true,
|
|
@@ -211,7 +213,12 @@ export async function executeServerAction<TEnv>(
|
|
|
211
213
|
|
|
212
214
|
return createResponseWithMergedHeaders(rscStream, {
|
|
213
215
|
status: actionStatus,
|
|
214
|
-
headers: {
|
|
216
|
+
headers: {
|
|
217
|
+
"content-type": "text/x-component;charset=utf-8",
|
|
218
|
+
// Router identity for the client's pre-decode integrity check (the
|
|
219
|
+
// action apply path has no post-decode guard). See response-adapter.
|
|
220
|
+
"X-RSC-Router-Id": ctx.router.id,
|
|
221
|
+
},
|
|
215
222
|
});
|
|
216
223
|
}
|
|
217
224
|
}
|
|
@@ -296,6 +303,8 @@ export async function revalidateAfterAction<TEnv>(
|
|
|
296
303
|
const payload: RscPayload = {
|
|
297
304
|
metadata: {
|
|
298
305
|
pathname: url.pathname,
|
|
306
|
+
// routerId exposed for the frontend (current app identity); see
|
|
307
|
+
// rsc-rendering.ts partial branch.
|
|
299
308
|
routerId: ctx.router.id,
|
|
300
309
|
segments: matchResult.segments,
|
|
301
310
|
isPartial: true,
|
|
@@ -331,6 +340,11 @@ export async function revalidateAfterAction<TEnv>(
|
|
|
331
340
|
|
|
332
341
|
return createResponseWithMergedHeaders(rscStream, {
|
|
333
342
|
status: actionStatus,
|
|
334
|
-
headers: {
|
|
343
|
+
headers: {
|
|
344
|
+
"content-type": "text/x-component;charset=utf-8",
|
|
345
|
+
// Router identity for the client's pre-decode integrity check (the action
|
|
346
|
+
// apply path has no post-decode guard). See response-adapter.
|
|
347
|
+
"X-RSC-Router-Id": ctx.router.id,
|
|
348
|
+
},
|
|
335
349
|
});
|
|
336
350
|
}
|
|
@@ -114,6 +114,12 @@ export type ResponsePathFn<TEnv> = <
|
|
|
114
114
|
* Path function for JSON response routes (path.json()).
|
|
115
115
|
* Handler can return plain JSON-serializable values or Response.
|
|
116
116
|
* TData is inferred from the handler's return type (excluding Response/Promise wrappers).
|
|
117
|
+
*
|
|
118
|
+
* Note: a nested Promise in the return (a forgotten await) is caught at runtime
|
|
119
|
+
* by response-route-handler.ts (it throws instead of silently emitting `{}`). A
|
|
120
|
+
* compile-time JsonValue constraint was evaluated and rejected — it breaks
|
|
121
|
+
* interface-typed returns (interfaces lack the index signature JsonValue
|
|
122
|
+
* requires) and preserves literal types in the inferred response shape.
|
|
117
123
|
*/
|
|
118
124
|
export type JsonResponsePathFn<TEnv> = <
|
|
119
125
|
const TPattern extends string,
|
|
@@ -282,10 +282,9 @@ export async function expandPrerenderRoutes(
|
|
|
282
282
|
const interceptKey = `${result.routeName}/${paramHash}/i`;
|
|
283
283
|
const interceptValue = JSON.stringify({
|
|
284
284
|
segments: [...result.segments, ...result.interceptSegments],
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
},
|
|
285
|
+
// interceptHandles is the pre-encoded MERGED (main + intercept)
|
|
286
|
+
// handle string (the producer merged before encoding).
|
|
287
|
+
handles: result.interceptHandles ?? "",
|
|
289
288
|
});
|
|
290
289
|
manifestEntries[interceptKey] = stageBuildAssetModule(
|
|
291
290
|
state.projectRoot,
|
|
@@ -420,7 +419,8 @@ export async function renderStaticHandlers(
|
|
|
420
419
|
!state.isBuildMode,
|
|
421
420
|
);
|
|
422
421
|
if (result) {
|
|
423
|
-
|
|
422
|
+
// result.handles is the pre-encoded handle string ("" when none).
|
|
423
|
+
const hasHandles = result.handles !== "";
|
|
424
424
|
const exportValue = hasHandles
|
|
425
425
|
? JSON.stringify(result)
|
|
426
426
|
: JSON.stringify(result.encoded);
|
|
@@ -893,10 +893,9 @@ export function createRouterDiscoveryPlugin(
|
|
|
893
893
|
if (wantIntercept && result.interceptSegments?.length) {
|
|
894
894
|
payload = {
|
|
895
895
|
segments: [...result.segments, ...result.interceptSegments],
|
|
896
|
-
handles
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
},
|
|
896
|
+
// Pre-encoded MERGED handle string from the producer (handles are
|
|
897
|
+
// Flight-encoded so Promise/ReactNode values survive the wire).
|
|
898
|
+
handles: result.interceptHandles ?? "",
|
|
900
899
|
};
|
|
901
900
|
} else {
|
|
902
901
|
payload = { segments: result.segments, handles: result.handles };
|