@rangojs/router 0.0.0-experimental.8 → 0.0.0-experimental.8123bb7e
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/AGENTS.md +9 -0
- package/README.md +884 -4
- 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 +1606 -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/{src/href-context.ts → dist/href-context.d.ts} +7 -11
- 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/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 +4636 -935
- 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/{src/vite/virtual-entries.ts → dist/vite/virtual-entries.js} +12 -16
- package/dist/vite/virtual-entries.js.map +1 -0
- package/package.json +69 -59
- package/skills/breadcrumbs/SKILL.md +250 -0
- package/skills/cache-guide/SKILL.md +294 -0
- package/skills/caching/SKILL.md +93 -23
- package/skills/composability/SKILL.md +172 -0
- package/skills/debug-manifest/SKILL.md +12 -8
- package/skills/document-cache/SKILL.md +18 -16
- package/skills/fonts/SKILL.md +167 -0
- package/skills/hooks/SKILL.md +334 -72
- package/skills/host-router/SKILL.md +218 -0
- package/skills/intercept/SKILL.md +131 -8
- package/skills/layout/SKILL.md +100 -3
- package/skills/links/SKILL.md +89 -30
- package/skills/loader/SKILL.md +404 -44
- package/skills/middleware/SKILL.md +171 -34
- package/skills/mime-routes/SKILL.md +128 -0
- package/skills/parallel/SKILL.md +204 -1
- package/skills/prerender/SKILL.md +643 -0
- package/skills/rango/SKILL.md +85 -16
- package/skills/response-routes/SKILL.md +411 -0
- package/skills/route/SKILL.md +257 -14
- package/skills/router-setup/SKILL.md +175 -32
- package/skills/tailwind/SKILL.md +129 -0
- package/skills/theme/SKILL.md +9 -8
- package/skills/typesafety/SKILL.md +328 -89
- package/skills/use-cache/SKILL.md +324 -0
- package/src/__internal.ts +102 -4
- package/src/bin/rango.ts +321 -0
- package/src/browser/action-coordinator.ts +97 -0
- package/src/browser/action-response-classifier.ts +99 -0
- package/src/browser/debug-channel.ts +93 -0
- package/src/browser/event-controller.ts +92 -64
- package/src/browser/history-state.ts +80 -0
- package/src/browser/intercept-utils.ts +52 -0
- package/src/browser/link-interceptor.ts +24 -4
- package/src/browser/logging.ts +55 -0
- package/src/browser/merge-segment-loaders.ts +20 -12
- package/src/browser/navigation-bridge.ts +282 -557
- package/src/browser/navigation-client.ts +182 -72
- package/src/browser/navigation-store.ts +33 -50
- package/src/browser/navigation-transaction.ts +297 -0
- package/src/browser/network-error-handler.ts +61 -0
- package/src/browser/partial-update.ts +303 -310
- package/src/browser/prefetch/cache.ts +206 -0
- package/src/browser/prefetch/fetch.ts +144 -0
- package/src/browser/prefetch/observer.ts +65 -0
- package/src/browser/prefetch/policy.ts +48 -0
- package/src/browser/prefetch/queue.ts +160 -0
- package/src/browser/prefetch/resource-ready.ts +77 -0
- package/src/browser/rango-state.ts +112 -0
- package/src/browser/react/Link.tsx +193 -73
- package/src/browser/react/NavigationProvider.tsx +80 -11
- package/src/browser/react/context.ts +6 -0
- package/src/browser/react/filter-segment-order.ts +11 -0
- package/src/browser/react/index.ts +12 -12
- package/src/browser/react/location-state-shared.ts +95 -53
- package/src/browser/react/location-state.ts +60 -15
- package/src/browser/react/mount-context.ts +6 -1
- package/src/browser/react/nonce-context.ts +23 -0
- package/src/browser/react/shallow-equal.ts +27 -0
- package/src/browser/react/use-action.ts +29 -51
- package/src/browser/react/use-client-cache.ts +5 -3
- package/src/browser/react/use-handle.ts +32 -79
- package/src/browser/react/use-href.tsx +2 -2
- package/src/browser/react/use-link-status.ts +6 -5
- package/src/browser/react/use-navigation.ts +22 -63
- package/src/browser/react/use-params.ts +65 -0
- package/src/browser/react/use-pathname.ts +47 -0
- package/src/browser/react/use-router.ts +63 -0
- package/src/browser/react/use-search-params.ts +56 -0
- package/src/browser/react/use-segments.ts +80 -97
- package/src/browser/response-adapter.ts +73 -0
- package/src/browser/rsc-router.tsx +188 -55
- package/src/browser/scroll-restoration.ts +117 -44
- package/src/browser/segment-reconciler.ts +221 -0
- package/src/browser/segment-structure-assert.ts +16 -0
- package/src/browser/server-action-bridge.ts +516 -599
- package/src/browser/shallow.ts +6 -1
- package/src/browser/types.ts +125 -47
- package/src/browser/validate-redirect-origin.ts +29 -0
- package/src/build/generate-manifest.ts +235 -24
- package/src/build/generate-route-types.ts +36 -0
- package/src/build/index.ts +13 -0
- package/src/build/route-trie.ts +265 -0
- package/src/build/route-types/ast-helpers.ts +25 -0
- package/src/build/route-types/ast-route-extraction.ts +98 -0
- package/src/build/route-types/codegen.ts +102 -0
- package/src/build/route-types/include-resolution.ts +411 -0
- package/src/build/route-types/param-extraction.ts +48 -0
- package/src/build/route-types/per-module-writer.ts +128 -0
- package/src/build/route-types/router-processing.ts +479 -0
- package/src/build/route-types/scan-filter.ts +78 -0
- package/src/build/runtime-discovery.ts +231 -0
- package/src/cache/background-task.ts +34 -0
- package/src/cache/cache-key-utils.ts +44 -0
- package/src/cache/cache-policy.ts +125 -0
- package/src/cache/cache-runtime.ts +342 -0
- package/src/cache/cache-scope.ts +167 -309
- package/src/cache/cf/cf-cache-store.ts +571 -17
- package/src/cache/cf/index.ts +13 -3
- package/src/cache/document-cache.ts +116 -77
- package/src/cache/handle-capture.ts +81 -0
- package/src/cache/handle-snapshot.ts +41 -0
- package/src/cache/index.ts +1 -15
- package/src/cache/memory-segment-store.ts +191 -13
- package/src/cache/profile-registry.ts +73 -0
- package/src/cache/read-through-swr.ts +134 -0
- package/src/cache/segment-codec.ts +256 -0
- package/src/cache/taint.ts +153 -0
- package/src/cache/types.ts +72 -122
- package/src/client.rsc.tsx +3 -1
- package/src/client.tsx +106 -126
- package/src/component-utils.ts +4 -4
- package/src/components/DefaultDocument.tsx +5 -1
- package/src/context-var.ts +156 -0
- package/src/debug.ts +19 -9
- package/src/deps/browser.ts +1 -0
- package/src/errors.ts +108 -2
- package/src/handle.ts +15 -29
- package/src/handles/MetaTags.tsx +73 -20
- package/src/handles/breadcrumbs.ts +66 -0
- package/src/handles/index.ts +1 -0
- package/src/handles/meta.ts +30 -13
- package/src/host/cookie-handler.ts +21 -15
- package/src/host/errors.ts +8 -8
- package/src/host/index.ts +4 -7
- package/src/host/pattern-matcher.ts +27 -27
- package/src/host/router.ts +61 -39
- package/src/host/testing.ts +8 -8
- package/src/host/types.ts +15 -7
- package/src/host/utils.ts +1 -1
- package/src/href-client.ts +119 -29
- package/src/index.rsc.ts +153 -19
- package/src/index.ts +211 -30
- package/src/internal-debug.ts +11 -0
- package/src/loader.rsc.ts +26 -157
- package/src/loader.ts +27 -10
- package/src/network-error-thrower.tsx +3 -1
- package/src/outlet-provider.tsx +45 -0
- package/src/prerender/param-hash.ts +37 -0
- package/src/prerender/store.ts +185 -0
- package/src/prerender.ts +463 -0
- package/src/reverse.ts +330 -0
- package/src/root-error-boundary.tsx +41 -29
- package/src/route-content-wrapper.tsx +7 -4
- package/src/route-definition/dsl-helpers.ts +959 -0
- package/src/route-definition/helper-factories.ts +200 -0
- package/src/route-definition/helpers-types.ts +431 -0
- package/src/route-definition/index.ts +52 -0
- package/src/route-definition/redirect.ts +93 -0
- package/src/route-definition.ts +1 -1428
- package/src/route-map-builder.ts +217 -123
- package/src/route-name.ts +53 -0
- package/src/route-types.ts +59 -8
- package/src/router/content-negotiation.ts +116 -0
- package/src/router/debug-manifest.ts +72 -0
- package/src/router/error-handling.ts +9 -9
- package/src/router/find-match.ts +160 -0
- package/src/router/handler-context.ts +400 -84
- package/src/router/intercept-resolution.ts +397 -0
- package/src/router/lazy-includes.ts +237 -0
- package/src/router/loader-resolution.ts +222 -123
- package/src/router/logging.ts +251 -0
- package/src/router/manifest.ts +154 -35
- package/src/router/match-api.ts +620 -0
- package/src/router/match-context.ts +5 -3
- package/src/router/match-handlers.ts +440 -0
- package/src/router/match-middleware/background-revalidation.ts +108 -93
- package/src/router/match-middleware/cache-lookup.ts +440 -10
- package/src/router/match-middleware/cache-store.ts +98 -26
- package/src/router/match-middleware/intercept-resolution.ts +57 -17
- package/src/router/match-middleware/segment-resolution.ts +27 -6
- package/src/router/match-pipelines.ts +10 -45
- package/src/router/match-result.ts +55 -33
- package/src/router/metrics.ts +240 -15
- package/src/router/middleware-cookies.ts +55 -0
- package/src/router/middleware-types.ts +226 -0
- package/src/router/middleware.ts +327 -369
- package/src/router/pattern-matching.ts +211 -43
- package/src/router/prerender-match.ts +402 -0
- package/src/router/preview-match.ts +170 -0
- package/src/router/revalidation.ts +137 -38
- package/src/router/router-context.ts +41 -21
- package/src/router/router-interfaces.ts +452 -0
- package/src/router/router-options.ts +592 -0
- package/src/router/router-registry.ts +24 -0
- package/src/router/segment-resolution/fresh.ts +683 -0
- package/src/router/segment-resolution/helpers.ts +268 -0
- package/src/router/segment-resolution/loader-cache.ts +199 -0
- package/src/router/segment-resolution/revalidation.ts +1301 -0
- package/src/router/segment-resolution/static-store.ts +67 -0
- package/src/router/segment-resolution.ts +21 -0
- package/src/router/segment-wrappers.ts +291 -0
- package/src/router/telemetry-otel.ts +299 -0
- package/src/router/telemetry.ts +300 -0
- package/src/router/timeout.ts +148 -0
- package/src/router/trie-matching.ts +239 -0
- package/src/router/types.ts +78 -3
- package/src/router.ts +697 -4257
- package/src/rsc/handler-context.ts +45 -0
- package/src/rsc/handler.ts +790 -755
- package/src/rsc/helpers.ts +140 -6
- package/src/rsc/index.ts +0 -20
- package/src/rsc/loader-fetch.ts +214 -0
- package/src/rsc/manifest-init.ts +86 -0
- package/src/rsc/nonce.ts +14 -0
- package/src/rsc/origin-guard.ts +141 -0
- package/src/rsc/progressive-enhancement.ts +382 -0
- package/src/rsc/response-error.ts +37 -0
- package/src/rsc/response-route-handler.ts +347 -0
- package/src/rsc/rsc-rendering.ts +240 -0
- package/src/rsc/runtime-warnings.ts +42 -0
- package/src/rsc/server-action.ts +350 -0
- package/src/rsc/ssr-setup.ts +128 -0
- package/src/rsc/types.ts +44 -11
- package/src/search-params.ts +230 -0
- package/src/segment-system.tsx +165 -17
- package/src/server/context.ts +278 -58
- package/src/server/cookie-store.ts +190 -0
- package/src/server/fetchable-loader-store.ts +37 -0
- package/src/server/handle-store.ts +94 -15
- package/src/server/loader-registry.ts +15 -56
- package/src/server/request-context.ts +481 -74
- package/src/server.ts +35 -130
- package/src/ssr/index.tsx +101 -31
- package/src/static-handler.ts +114 -0
- package/src/theme/ThemeProvider.tsx +21 -15
- package/src/theme/ThemeScript.tsx +5 -5
- package/src/theme/constants.ts +5 -2
- package/src/theme/index.ts +4 -14
- package/src/theme/theme-context.ts +4 -30
- package/src/theme/theme-script.ts +21 -18
- package/src/types/boundaries.ts +158 -0
- package/src/types/cache-types.ts +198 -0
- package/src/types/error-types.ts +192 -0
- package/src/types/global-namespace.ts +100 -0
- package/src/types/handler-context.ts +785 -0
- package/src/types/index.ts +88 -0
- package/src/types/loader-types.ts +183 -0
- package/src/types/route-config.ts +170 -0
- package/src/types/route-entry.ts +109 -0
- package/src/types/segments.ts +150 -0
- package/src/types.ts +1 -1623
- package/src/urls/include-helper.ts +197 -0
- package/src/urls/index.ts +53 -0
- package/src/urls/path-helper-types.ts +339 -0
- package/src/urls/path-helper.ts +329 -0
- package/src/urls/pattern-types.ts +95 -0
- package/src/urls/response-types.ts +106 -0
- package/src/urls/type-extraction.ts +372 -0
- package/src/urls/urls-function.ts +98 -0
- package/src/urls.ts +1 -802
- package/src/use-loader.tsx +85 -77
- package/src/vite/discovery/bundle-postprocess.ts +184 -0
- package/src/vite/discovery/discover-routers.ts +344 -0
- package/src/vite/discovery/prerender-collection.ts +385 -0
- package/src/vite/discovery/route-types-writer.ts +258 -0
- package/src/vite/discovery/self-gen-tracking.ts +47 -0
- package/src/vite/discovery/state.ts +108 -0
- package/src/vite/discovery/virtual-module-codegen.ts +203 -0
- package/src/vite/index.ts +11 -1133
- package/src/vite/plugin-types.ts +48 -0
- package/src/vite/plugins/cjs-to-esm.ts +93 -0
- package/src/vite/plugins/client-ref-dedup.ts +115 -0
- package/src/vite/plugins/client-ref-hashing.ts +105 -0
- package/src/vite/{expose-action-id.ts → plugins/expose-action-id.ts} +72 -53
- package/src/vite/plugins/expose-id-utils.ts +287 -0
- package/src/vite/plugins/expose-ids/export-analysis.ts +296 -0
- package/src/vite/plugins/expose-ids/handler-transform.ts +179 -0
- package/src/vite/plugins/expose-ids/loader-transform.ts +74 -0
- package/src/vite/plugins/expose-ids/router-transform.ts +110 -0
- package/src/vite/plugins/expose-ids/types.ts +45 -0
- package/src/vite/plugins/expose-internal-ids.ts +569 -0
- package/src/vite/plugins/performance-tracks.ts +235 -0
- package/src/vite/plugins/refresh-cmd.ts +65 -0
- package/src/vite/plugins/use-cache-transform.ts +323 -0
- package/src/vite/plugins/version-injector.ts +83 -0
- package/src/vite/plugins/version-plugin.ts +266 -0
- package/src/vite/plugins/virtual-entries.ts +123 -0
- package/src/vite/plugins/virtual-stub-plugin.ts +29 -0
- package/src/vite/rango.ts +456 -0
- package/src/vite/router-discovery.ts +777 -0
- package/src/vite/utils/ast-handler-extract.ts +517 -0
- package/src/vite/utils/banner.ts +36 -0
- package/src/vite/utils/bundle-analysis.ts +137 -0
- package/src/vite/utils/manifest-utils.ts +70 -0
- package/src/vite/{package-resolution.ts → utils/package-resolution.ts} +25 -29
- package/src/vite/utils/prerender-utils.ts +189 -0
- package/src/vite/utils/shared-utils.ts +169 -0
- package/CLAUDE.md +0 -43
- package/src/browser/lru-cache.ts +0 -69
- package/src/browser/request-controller.ts +0 -164
- package/src/cache/memory-store.ts +0 -253
- package/src/href.ts +0 -255
- package/src/server/route-manifest-cache.ts +0 -173
- package/src/vite/expose-handle-id.ts +0 -209
- package/src/vite/expose-loader-id.ts +0 -426
- package/src/vite/expose-location-state-id.ts +0 -177
- /package/src/vite/{version.d.ts → plugins/version.d.ts} +0 -0
|
@@ -11,8 +11,7 @@ import { createEventController } from "./event-controller.js";
|
|
|
11
11
|
import { createNavigationClient } from "./navigation-client.js";
|
|
12
12
|
import { createServerActionBridge } from "./server-action-bridge.js";
|
|
13
13
|
import { createNavigationBridge } from "./navigation-bridge.js";
|
|
14
|
-
import { NavigationProvider
|
|
15
|
-
import { initThemeConfigSync } from "../theme/theme-context.js";
|
|
14
|
+
import { NavigationProvider } from "./react/index.js";
|
|
16
15
|
import type {
|
|
17
16
|
RscPayload,
|
|
18
17
|
RscBrowserDependencies,
|
|
@@ -22,6 +21,12 @@ import type {
|
|
|
22
21
|
} from "./types.js";
|
|
23
22
|
import type { EventController } from "./event-controller.js";
|
|
24
23
|
import type { ResolvedThemeConfig, Theme } from "../theme/types.js";
|
|
24
|
+
import { initRangoState } from "./rango-state.js";
|
|
25
|
+
import { initPrefetchCache } from "./prefetch/cache.js";
|
|
26
|
+
import {
|
|
27
|
+
isInterceptSegment,
|
|
28
|
+
splitInterceptSegments,
|
|
29
|
+
} from "./intercept-utils.js";
|
|
25
30
|
|
|
26
31
|
// Vite HMR types are provided by vite/client
|
|
27
32
|
|
|
@@ -106,6 +111,8 @@ export interface BrowserAppContext {
|
|
|
106
111
|
initialTheme?: Theme;
|
|
107
112
|
/** Whether connection warmup is enabled */
|
|
108
113
|
warmupEnabled?: boolean;
|
|
114
|
+
/** App version for prefetch version mismatch detection */
|
|
115
|
+
version?: string;
|
|
109
116
|
}
|
|
110
117
|
|
|
111
118
|
// Module-level state for the initialized app
|
|
@@ -121,9 +128,16 @@ let browserAppContext: BrowserAppContext | null = null;
|
|
|
121
128
|
* - Configures HMR support
|
|
122
129
|
*/
|
|
123
130
|
export async function initBrowserApp(
|
|
124
|
-
options: InitBrowserAppOptions
|
|
131
|
+
options: InitBrowserAppOptions,
|
|
125
132
|
): Promise<BrowserAppContext> {
|
|
126
|
-
const {
|
|
133
|
+
const {
|
|
134
|
+
rscStream,
|
|
135
|
+
deps,
|
|
136
|
+
storeOptions,
|
|
137
|
+
linkInterception = true,
|
|
138
|
+
themeConfig,
|
|
139
|
+
initialTheme,
|
|
140
|
+
} = options;
|
|
127
141
|
|
|
128
142
|
// Load initial payload from SSR-injected __FLIGHT_DATA__
|
|
129
143
|
const initialPayload =
|
|
@@ -131,8 +145,10 @@ export async function initBrowserApp(
|
|
|
131
145
|
|
|
132
146
|
// Extract themeConfig and initialTheme from payload if not explicitly provided
|
|
133
147
|
// This allows virtual entries to work without importing the router
|
|
134
|
-
const effectiveThemeConfig =
|
|
135
|
-
|
|
148
|
+
const effectiveThemeConfig =
|
|
149
|
+
themeConfig ?? initialPayload.metadata?.themeConfig ?? null;
|
|
150
|
+
const effectiveInitialTheme =
|
|
151
|
+
initialTheme ?? initialPayload.metadata?.initialTheme;
|
|
136
152
|
|
|
137
153
|
// Get initial segments and compute history key from current URL
|
|
138
154
|
const initialSegments = (initialPayload.metadata?.segments ??
|
|
@@ -153,15 +169,12 @@ export async function initBrowserApp(
|
|
|
153
169
|
initialLocation: new URL(window.location.href),
|
|
154
170
|
});
|
|
155
171
|
|
|
156
|
-
// Initialize segments state BEFORE hydration to avoid mismatch
|
|
157
|
-
initSegmentsSync(initialPayload.metadata?.matched, initialPayload.metadata?.pathname);
|
|
158
|
-
|
|
159
|
-
// Initialize theme config for MetaTags (must match SSR state)
|
|
160
|
-
initThemeConfigSync(effectiveThemeConfig);
|
|
161
|
-
|
|
162
172
|
// Initialize event controller with segment order (even without handles)
|
|
163
173
|
eventController.setHandleData({}, initialPayload.metadata?.matched);
|
|
164
174
|
|
|
175
|
+
// Initialize route params
|
|
176
|
+
eventController.setParams(initialPayload.metadata?.params ?? {});
|
|
177
|
+
|
|
165
178
|
// Initialize handle data from initial payload BEFORE hydration
|
|
166
179
|
// This ensures useHandle returns correct data during hydration to avoid mismatch
|
|
167
180
|
// The handles property is an async generator that yields on each push
|
|
@@ -171,16 +184,17 @@ export async function initBrowserApp(
|
|
|
171
184
|
for await (const handleData of handlesGenerator) {
|
|
172
185
|
lastHandleData = handleData;
|
|
173
186
|
}
|
|
174
|
-
// Initialize
|
|
175
|
-
eventController.setHandleData(
|
|
176
|
-
|
|
187
|
+
// Initialize event controller with initial handle state before hydration.
|
|
188
|
+
eventController.setHandleData(
|
|
189
|
+
lastHandleData,
|
|
190
|
+
initialPayload.metadata?.matched,
|
|
191
|
+
);
|
|
177
192
|
|
|
178
193
|
// Update the initial cache entry with the processed handleData
|
|
179
194
|
// The cache entry was created by createNavigationStore but without handleData
|
|
180
195
|
store.updateCacheHandleData(initialHistoryKey, lastHandleData);
|
|
181
196
|
}
|
|
182
197
|
|
|
183
|
-
|
|
184
198
|
// Create composable utilities
|
|
185
199
|
const client = createNavigationClient(deps);
|
|
186
200
|
|
|
@@ -188,12 +202,27 @@ export async function initBrowserApp(
|
|
|
188
202
|
const rootLayout = initialPayload.metadata?.rootLayout;
|
|
189
203
|
const version = initialPayload.metadata?.version;
|
|
190
204
|
|
|
205
|
+
// Initialize the localStorage state key for cache invalidation.
|
|
206
|
+
// Uses the build version so a new deploy automatically busts all cached prefetches.
|
|
207
|
+
initRangoState(version ?? "0");
|
|
208
|
+
|
|
209
|
+
// Initialize the in-memory prefetch cache TTL from server config.
|
|
210
|
+
// A value of 0 disables the cache; undefined falls back to the module default.
|
|
211
|
+
const prefetchCacheTTL = initialPayload.metadata?.prefetchCacheTTL;
|
|
212
|
+
if (prefetchCacheTTL !== undefined) {
|
|
213
|
+
initPrefetchCache(prefetchCacheTTL);
|
|
214
|
+
}
|
|
215
|
+
|
|
191
216
|
// Create a bound renderSegments that includes rootLayout
|
|
192
217
|
const renderSegments = (
|
|
193
218
|
segments: ResolvedSegment[],
|
|
194
|
-
options?: RenderSegmentsOptions
|
|
219
|
+
options?: RenderSegmentsOptions,
|
|
195
220
|
) => baseRenderSegments(segments, { ...options, rootLayout });
|
|
196
221
|
|
|
222
|
+
// Lazy reference for navigation bridge — the action bridge is created first
|
|
223
|
+
// but may need to trigger SPA navigation for action redirects.
|
|
224
|
+
let navigateFn: ((url: string, options?: any) => Promise<void>) | null = null;
|
|
225
|
+
|
|
197
226
|
// Setup server action bridge
|
|
198
227
|
const actionBridge = createServerActionBridge({
|
|
199
228
|
store,
|
|
@@ -203,6 +232,13 @@ export async function initBrowserApp(
|
|
|
203
232
|
onUpdate: (update) => store.emitUpdate(update),
|
|
204
233
|
renderSegments,
|
|
205
234
|
version,
|
|
235
|
+
onNavigate: (url, options) => {
|
|
236
|
+
if (!navigateFn) {
|
|
237
|
+
window.location.href = url;
|
|
238
|
+
return Promise.resolve();
|
|
239
|
+
}
|
|
240
|
+
return navigateFn(url, options);
|
|
241
|
+
},
|
|
206
242
|
});
|
|
207
243
|
actionBridge.register();
|
|
208
244
|
|
|
@@ -216,6 +252,9 @@ export async function initBrowserApp(
|
|
|
216
252
|
version,
|
|
217
253
|
});
|
|
218
254
|
|
|
255
|
+
// Connect action redirect → navigation bridge (now that both are initialized)
|
|
256
|
+
navigateFn = (url, options) => navigationBridge.navigate(url, options);
|
|
257
|
+
|
|
219
258
|
// Optionally enable global link interception
|
|
220
259
|
if (linkInterception) {
|
|
221
260
|
navigationBridge.registerLinkInterception();
|
|
@@ -224,47 +263,123 @@ export async function initBrowserApp(
|
|
|
224
263
|
// Build initial tree with rootLayout
|
|
225
264
|
const initialTree = renderSegments(initialPayload.metadata!.segments);
|
|
226
265
|
|
|
227
|
-
// Setup HMR
|
|
266
|
+
// Setup HMR with debounce — burst saves (format-on-save, rapid edits)
|
|
267
|
+
// fire many rsc:update events in quick succession. Without debouncing,
|
|
268
|
+
// each event triggers a fetchPartial() which on slow routes can pile up
|
|
269
|
+
// and overwhelm the worker (cross-request promise issues, 500s).
|
|
228
270
|
if (import.meta.hot) {
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
271
|
+
let hmrTimer: ReturnType<typeof setTimeout> | null = null;
|
|
272
|
+
let hmrAbort: AbortController | null = null;
|
|
273
|
+
|
|
274
|
+
import.meta.hot.on("rsc:update", () => {
|
|
275
|
+
// Cancel any pending debounce timer
|
|
276
|
+
if (hmrTimer !== null) {
|
|
277
|
+
clearTimeout(hmrTimer);
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
// Abort any in-flight HMR fetch so it doesn't race with the next one
|
|
281
|
+
if (hmrAbort) {
|
|
282
|
+
hmrAbort.abort();
|
|
283
|
+
hmrAbort = null;
|
|
284
|
+
}
|
|
243
285
|
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
286
|
+
// Debounce: wait 200ms of quiet before fetching
|
|
287
|
+
hmrTimer = setTimeout(async () => {
|
|
288
|
+
hmrTimer = null;
|
|
289
|
+
|
|
290
|
+
// Don't interrupt an active user navigation — startNavigation()
|
|
291
|
+
// would abort it and refetch the old URL (window.location.href
|
|
292
|
+
// hasn't updated yet). The user's navigation will pick up the
|
|
293
|
+
// new server code when it completes. isNavigating covers the
|
|
294
|
+
// full lifecycle (fetching + streaming, before commit) without
|
|
295
|
+
// blocking on server actions.
|
|
296
|
+
if (eventController.getState().isNavigating) {
|
|
297
|
+
console.log("[RSCRouter] HMR: Skipping — navigation in progress");
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
247
300
|
|
|
248
|
-
|
|
249
|
-
store.setCurrentUrl(window.location.href);
|
|
301
|
+
console.log("[RSCRouter] HMR: Server update, refetching RSC");
|
|
250
302
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
const currentHandleData = eventController.getHandleState().data;
|
|
254
|
-
store.cacheSegmentsForHistory(historyKey, segments, currentHandleData);
|
|
303
|
+
const abort = new AbortController();
|
|
304
|
+
hmrAbort = abort;
|
|
255
305
|
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
306
|
+
const handle = eventController.startNavigation(window.location.href, {
|
|
307
|
+
replace: true,
|
|
308
|
+
});
|
|
309
|
+
const streamingToken = handle.startStreaming();
|
|
310
|
+
|
|
311
|
+
const interceptSourceUrl = store.getInterceptSourceUrl();
|
|
312
|
+
|
|
313
|
+
try {
|
|
314
|
+
const { payload, streamComplete } = await client.fetchPartial({
|
|
315
|
+
targetUrl: window.location.href,
|
|
316
|
+
segmentIds: [],
|
|
317
|
+
previousUrl: store.getSegmentState().currentUrl,
|
|
318
|
+
interceptSourceUrl: interceptSourceUrl || undefined,
|
|
319
|
+
hmr: true,
|
|
320
|
+
signal: abort.signal,
|
|
259
321
|
});
|
|
260
|
-
}
|
|
261
322
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
323
|
+
if (abort.signal.aborted) return;
|
|
324
|
+
|
|
325
|
+
// If the server returned a non-RSC response (404, 500 without
|
|
326
|
+
// error boundary), the payload won't have valid metadata.
|
|
327
|
+
// Reload to recover rather than leaving the page stale.
|
|
328
|
+
if (!payload.metadata) {
|
|
329
|
+
throw new Error("HMR refetch returned invalid payload");
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
if (payload.metadata?.isPartial) {
|
|
333
|
+
const segments = payload.metadata.segments || [];
|
|
334
|
+
const matched = payload.metadata.matched || [];
|
|
335
|
+
|
|
336
|
+
// Derive intercept state from the returned payload, not the
|
|
337
|
+
// pre-fetch store snapshot. If the HMR edit removed intercept
|
|
338
|
+
// behavior, the response won't contain intercept segments.
|
|
339
|
+
const responseIsIntercept = segments.some(isInterceptSegment);
|
|
340
|
+
|
|
341
|
+
// Sync store intercept state with what the server returned
|
|
342
|
+
if (!responseIsIntercept && interceptSourceUrl) {
|
|
343
|
+
store.setInterceptSourceUrl(null);
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
store.setSegmentIds(matched);
|
|
347
|
+
store.setCurrentUrl(window.location.href);
|
|
348
|
+
|
|
349
|
+
const historyKey = generateHistoryKey(window.location.href, {
|
|
350
|
+
intercept: responseIsIntercept,
|
|
351
|
+
});
|
|
352
|
+
store.setHistoryKey(historyKey);
|
|
353
|
+
const currentHandleData = eventController.getHandleState().data;
|
|
354
|
+
store.cacheSegmentsForHistory(
|
|
355
|
+
historyKey,
|
|
356
|
+
segments,
|
|
357
|
+
currentHandleData,
|
|
358
|
+
);
|
|
359
|
+
|
|
360
|
+
const { main, intercept } = splitInterceptSegments(segments);
|
|
361
|
+
store.emitUpdate({
|
|
362
|
+
root: renderSegments(main, {
|
|
363
|
+
interceptSegments: intercept.length > 0 ? intercept : undefined,
|
|
364
|
+
}),
|
|
365
|
+
metadata: payload.metadata,
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
await streamComplete;
|
|
370
|
+
handle.complete(new URL(window.location.href));
|
|
371
|
+
console.log("[RSCRouter] HMR: RSC stream complete");
|
|
372
|
+
} catch (err) {
|
|
373
|
+
if (abort.signal.aborted) return;
|
|
374
|
+
console.warn("[RSCRouter] HMR: Refetch failed, reloading page", err);
|
|
375
|
+
window.location.reload();
|
|
376
|
+
return;
|
|
377
|
+
} finally {
|
|
378
|
+
if (hmrAbort === abort) hmrAbort = null;
|
|
379
|
+
streamingToken.end();
|
|
380
|
+
handle[Symbol.dispose]();
|
|
381
|
+
}
|
|
382
|
+
}, 200);
|
|
268
383
|
});
|
|
269
384
|
}
|
|
270
385
|
|
|
@@ -278,6 +393,7 @@ export async function initBrowserApp(
|
|
|
278
393
|
themeConfig: effectiveThemeConfig,
|
|
279
394
|
initialTheme: effectiveInitialTheme,
|
|
280
395
|
warmupEnabled: initialPayload.metadata?.warmupEnabled ?? true,
|
|
396
|
+
version,
|
|
281
397
|
};
|
|
282
398
|
browserAppContext = context;
|
|
283
399
|
|
|
@@ -290,7 +406,7 @@ export async function initBrowserApp(
|
|
|
290
406
|
export function getBrowserAppContext(): BrowserAppContext {
|
|
291
407
|
if (!browserAppContext) {
|
|
292
408
|
throw new Error(
|
|
293
|
-
"RSCRouter: initBrowserApp() must be called before rendering RSCRouter"
|
|
409
|
+
"RSCRouter: initBrowserApp() must be called before rendering RSCRouter",
|
|
294
410
|
);
|
|
295
411
|
}
|
|
296
412
|
return browserAppContext;
|
|
@@ -333,18 +449,35 @@ export interface RSCRouterProps {}
|
|
|
333
449
|
* ```
|
|
334
450
|
*/
|
|
335
451
|
export function RSCRouter(_props: RSCRouterProps): React.ReactElement {
|
|
336
|
-
const {
|
|
337
|
-
|
|
452
|
+
const {
|
|
453
|
+
store,
|
|
454
|
+
eventController,
|
|
455
|
+
bridge,
|
|
456
|
+
initialPayload,
|
|
457
|
+
initialTree,
|
|
458
|
+
themeConfig,
|
|
459
|
+
initialTheme,
|
|
460
|
+
warmupEnabled,
|
|
461
|
+
version,
|
|
462
|
+
} = getBrowserAppContext();
|
|
463
|
+
|
|
464
|
+
// Signal that the React tree has hydrated. useEffect only fires after
|
|
465
|
+
// hydration completes, so this attribute is a stable readiness marker
|
|
466
|
+
// that does not depend on React internals like __reactFiber.
|
|
467
|
+
React.useEffect(() => {
|
|
468
|
+
document.documentElement.dataset.hydrated = "";
|
|
469
|
+
}, []);
|
|
338
470
|
|
|
339
471
|
return (
|
|
340
472
|
<NavigationProvider
|
|
341
473
|
store={store}
|
|
342
474
|
eventController={eventController}
|
|
343
|
-
initialPayload={{
|
|
475
|
+
initialPayload={{ root: initialTree, metadata: initialPayload.metadata! }}
|
|
344
476
|
bridge={bridge}
|
|
345
477
|
themeConfig={themeConfig}
|
|
346
478
|
initialTheme={initialTheme}
|
|
347
479
|
warmupEnabled={warmupEnabled}
|
|
480
|
+
version={version}
|
|
348
481
|
/>
|
|
349
482
|
);
|
|
350
483
|
}
|
|
@@ -8,8 +8,27 @@
|
|
|
8
8
|
* - Supports hash link scrolling
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
+
import { debugLog } from "./logging.js";
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Defers a callback to the next animation frame.
|
|
15
|
+
* Falls back to setTimeout(0) in environments without requestAnimationFrame.
|
|
16
|
+
*/
|
|
17
|
+
const deferToNextPaint: (fn: () => void) => void =
|
|
18
|
+
typeof requestAnimationFrame === "function"
|
|
19
|
+
? requestAnimationFrame
|
|
20
|
+
: (fn) => setTimeout(fn, 0);
|
|
21
|
+
|
|
11
22
|
const SCROLL_STORAGE_KEY = "rsc-router-scroll-positions";
|
|
12
23
|
|
|
24
|
+
/**
|
|
25
|
+
* Maximum number of scroll position entries to retain.
|
|
26
|
+
* When exceeded, the oldest entries (by insertion order) are evicted.
|
|
27
|
+
* 200 entries is well within sessionStorage limits while covering
|
|
28
|
+
* realistic back/forward navigation depth.
|
|
29
|
+
*/
|
|
30
|
+
const MAX_SCROLL_ENTRIES = 200;
|
|
31
|
+
|
|
13
32
|
/**
|
|
14
33
|
* Interval for polling scroll restoration during streaming (ms).
|
|
15
34
|
* If content is still loading and we can't scroll to saved position,
|
|
@@ -29,6 +48,13 @@ const SCROLL_POLL_TIMEOUT_MS = 5000;
|
|
|
29
48
|
*/
|
|
30
49
|
let savedScrollPositions: Record<string, number> = {};
|
|
31
50
|
|
|
51
|
+
/**
|
|
52
|
+
* Tracks insertion order of scroll position keys for LRU eviction.
|
|
53
|
+
* Most recent entries are at the end of the array.
|
|
54
|
+
* When a key is updated, it is moved to the end.
|
|
55
|
+
*/
|
|
56
|
+
let scrollKeyOrder: string[] = [];
|
|
57
|
+
|
|
32
58
|
/**
|
|
33
59
|
* Whether scroll restoration has been initialized
|
|
34
60
|
*/
|
|
@@ -37,9 +63,12 @@ let initialized = false;
|
|
|
37
63
|
/**
|
|
38
64
|
* Custom getKey function for determining scroll restoration key
|
|
39
65
|
*/
|
|
40
|
-
type GetScrollKeyFunction = (
|
|
41
|
-
|
|
42
|
-
|
|
66
|
+
type GetScrollKeyFunction = (location: {
|
|
67
|
+
pathname: string;
|
|
68
|
+
search: string;
|
|
69
|
+
hash: string;
|
|
70
|
+
key: string;
|
|
71
|
+
}) => string;
|
|
43
72
|
|
|
44
73
|
let customGetKey: GetScrollKeyFunction | null = null;
|
|
45
74
|
|
|
@@ -99,9 +128,13 @@ export function initScrollRestoration(options?: {
|
|
|
99
128
|
const stored = sessionStorage.getItem(SCROLL_STORAGE_KEY);
|
|
100
129
|
if (stored) {
|
|
101
130
|
savedScrollPositions = JSON.parse(stored);
|
|
131
|
+
// Rebuild key order from loaded positions.
|
|
132
|
+
// Exact original order is lost across page loads, but this is
|
|
133
|
+
// acceptable -- the important invariant is bounded size.
|
|
134
|
+
scrollKeyOrder = Object.keys(savedScrollPositions);
|
|
102
135
|
}
|
|
103
136
|
} catch (e) {
|
|
104
|
-
// Ignore parse errors
|
|
137
|
+
// Ignore parse errors, start with empty state
|
|
105
138
|
}
|
|
106
139
|
|
|
107
140
|
// Ensure current history entry has a key
|
|
@@ -117,31 +150,82 @@ export function initScrollRestoration(options?: {
|
|
|
117
150
|
|
|
118
151
|
window.addEventListener("pagehide", handlePageHide);
|
|
119
152
|
|
|
120
|
-
|
|
153
|
+
debugLog(
|
|
154
|
+
"[Scroll] Initialized, loaded positions:",
|
|
155
|
+
Object.keys(savedScrollPositions).length,
|
|
156
|
+
);
|
|
121
157
|
|
|
122
158
|
return () => {
|
|
159
|
+
cancelScrollRestorationPolling();
|
|
123
160
|
window.removeEventListener("pagehide", handlePageHide);
|
|
124
161
|
window.history.scrollRestoration = "auto";
|
|
125
162
|
initialized = false;
|
|
163
|
+
savedScrollPositions = {};
|
|
164
|
+
scrollKeyOrder = [];
|
|
126
165
|
};
|
|
127
166
|
}
|
|
128
167
|
|
|
129
168
|
/**
|
|
130
|
-
* Save the current scroll position for the current history entry
|
|
169
|
+
* Save the current scroll position for the current history entry.
|
|
170
|
+
* Maintains bounded size by evicting oldest entries when the limit is exceeded.
|
|
131
171
|
*/
|
|
132
172
|
export function saveCurrentScrollPosition(): void {
|
|
133
173
|
const key = getScrollKey();
|
|
174
|
+
|
|
175
|
+
// If this key already exists, remove it from its current position
|
|
176
|
+
// in the order array so it can be re-appended at the end (most recent).
|
|
177
|
+
const existingIndex = scrollKeyOrder.indexOf(key);
|
|
178
|
+
if (existingIndex !== -1) {
|
|
179
|
+
scrollKeyOrder.splice(existingIndex, 1);
|
|
180
|
+
}
|
|
181
|
+
|
|
134
182
|
savedScrollPositions[key] = window.scrollY;
|
|
183
|
+
scrollKeyOrder.push(key);
|
|
184
|
+
|
|
185
|
+
// Evict oldest entries if we exceed the limit
|
|
186
|
+
while (scrollKeyOrder.length > MAX_SCROLL_ENTRIES) {
|
|
187
|
+
const oldestKey = scrollKeyOrder.shift()!;
|
|
188
|
+
delete savedScrollPositions[oldestKey];
|
|
189
|
+
}
|
|
135
190
|
}
|
|
136
191
|
|
|
137
192
|
/**
|
|
138
|
-
* Persist scroll positions to sessionStorage
|
|
193
|
+
* Persist scroll positions to sessionStorage.
|
|
194
|
+
* If the write fails due to quota exceeded, progressively evict the oldest
|
|
195
|
+
* entries and retry until it succeeds or the store is empty.
|
|
139
196
|
*/
|
|
140
197
|
function persistToSessionStorage(): void {
|
|
141
198
|
try {
|
|
142
|
-
sessionStorage.setItem(
|
|
199
|
+
sessionStorage.setItem(
|
|
200
|
+
SCROLL_STORAGE_KEY,
|
|
201
|
+
JSON.stringify(savedScrollPositions),
|
|
202
|
+
);
|
|
143
203
|
} catch (e) {
|
|
144
|
-
|
|
204
|
+
// Likely QuotaExceededError. Evict oldest entries and retry.
|
|
205
|
+
const evictCount = Math.max(1, Math.floor(scrollKeyOrder.length / 4));
|
|
206
|
+
for (let i = 0; i < evictCount && scrollKeyOrder.length > 0; i++) {
|
|
207
|
+
const oldestKey = scrollKeyOrder.shift()!;
|
|
208
|
+
delete savedScrollPositions[oldestKey];
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
try {
|
|
212
|
+
sessionStorage.setItem(
|
|
213
|
+
SCROLL_STORAGE_KEY,
|
|
214
|
+
JSON.stringify(savedScrollPositions),
|
|
215
|
+
);
|
|
216
|
+
} catch (retryErr) {
|
|
217
|
+
// Storage still full after eviction. Clear our key entirely so we
|
|
218
|
+
// don't block other sessionStorage consumers.
|
|
219
|
+
console.warn(
|
|
220
|
+
"[Scroll] Failed to persist to sessionStorage after eviction, clearing scroll data:",
|
|
221
|
+
retryErr,
|
|
222
|
+
);
|
|
223
|
+
try {
|
|
224
|
+
sessionStorage.removeItem(SCROLL_STORAGE_KEY);
|
|
225
|
+
} catch {
|
|
226
|
+
// Nothing more we can do
|
|
227
|
+
}
|
|
228
|
+
}
|
|
145
229
|
}
|
|
146
230
|
}
|
|
147
231
|
|
|
@@ -189,50 +273,35 @@ export function restoreScrollPosition(options?: {
|
|
|
189
273
|
return false;
|
|
190
274
|
}
|
|
191
275
|
|
|
192
|
-
//
|
|
193
|
-
const maxScrollY = document.documentElement.scrollHeight - window.innerHeight;
|
|
194
|
-
const canScrollToPosition = savedY <= maxScrollY;
|
|
195
|
-
|
|
196
|
-
if (canScrollToPosition) {
|
|
197
|
-
window.scrollTo(0, savedY);
|
|
198
|
-
console.log("[Scroll] Restored position:", savedY, "for key:", key);
|
|
199
|
-
return true;
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
// Scroll as far as we can for now
|
|
203
|
-
window.scrollTo(0, maxScrollY);
|
|
204
|
-
console.log("[Scroll] Partial restore to:", maxScrollY, "target:", savedY);
|
|
205
|
-
|
|
206
|
-
// Poll while streaming until we can scroll to target position
|
|
276
|
+
// If streaming, poll until streaming ends then scroll to saved position
|
|
207
277
|
if (options?.retryIfStreaming && options?.isStreaming?.()) {
|
|
208
278
|
const startTime = Date.now();
|
|
209
279
|
|
|
210
280
|
pendingPollInterval = setInterval(() => {
|
|
211
|
-
// Stop if we've exceeded the timeout
|
|
212
281
|
if (Date.now() - startTime > SCROLL_POLL_TIMEOUT_MS) {
|
|
213
|
-
|
|
282
|
+
debugLog("[Scroll] Polling timeout, giving up");
|
|
214
283
|
cancelScrollRestorationPolling();
|
|
215
284
|
return;
|
|
216
285
|
}
|
|
217
286
|
|
|
218
|
-
// Stop if streaming ended
|
|
219
287
|
if (!options.isStreaming?.()) {
|
|
220
|
-
console.log("[Scroll] Streaming ended, stopping poll");
|
|
221
|
-
cancelScrollRestorationPolling();
|
|
222
|
-
return;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
// Check if we can now scroll to the target position
|
|
226
|
-
const currentMaxScrollY = document.documentElement.scrollHeight - window.innerHeight;
|
|
227
|
-
if (savedY <= currentMaxScrollY) {
|
|
228
288
|
window.scrollTo(0, savedY);
|
|
229
|
-
|
|
289
|
+
debugLog("[Scroll] Restored after streaming:", savedY);
|
|
230
290
|
cancelScrollRestorationPolling();
|
|
231
291
|
}
|
|
232
292
|
}, SCROLL_POLL_INTERVAL_MS);
|
|
293
|
+
|
|
294
|
+
return true;
|
|
233
295
|
}
|
|
234
296
|
|
|
235
|
-
|
|
297
|
+
// Not streaming — scroll after React commits and browser paints.
|
|
298
|
+
// startTransition defers the DOM commit, so scrolling synchronously
|
|
299
|
+
// would be overwritten when React replaces the content.
|
|
300
|
+
deferToNextPaint(() => {
|
|
301
|
+
window.scrollTo(0, savedY);
|
|
302
|
+
debugLog("[Scroll] Restored position:", savedY, "for key:", key);
|
|
303
|
+
});
|
|
304
|
+
return true;
|
|
236
305
|
}
|
|
237
306
|
|
|
238
307
|
/**
|
|
@@ -249,7 +318,7 @@ export function scrollToHash(): boolean {
|
|
|
249
318
|
const element = document.getElementById(id);
|
|
250
319
|
if (element) {
|
|
251
320
|
element.scrollIntoView();
|
|
252
|
-
|
|
321
|
+
debugLog("[Scroll] Scrolled to hash element:", id);
|
|
253
322
|
return true;
|
|
254
323
|
}
|
|
255
324
|
} catch (e) {
|
|
@@ -306,13 +375,17 @@ export function handleNavigationEnd(options: {
|
|
|
306
375
|
// Fall through to hash or top if no saved position
|
|
307
376
|
}
|
|
308
377
|
|
|
309
|
-
//
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
378
|
+
// Defer hash and scroll-to-top to after React paints the new content,
|
|
379
|
+
// so the user doesn't see the current page jump before the new route appears.
|
|
380
|
+
deferToNextPaint(() => {
|
|
381
|
+
// Try hash scrolling first
|
|
382
|
+
if (scrollToHash()) {
|
|
383
|
+
return;
|
|
384
|
+
}
|
|
313
385
|
|
|
314
|
-
|
|
315
|
-
|
|
386
|
+
// Default: scroll to top
|
|
387
|
+
scrollToTop();
|
|
388
|
+
});
|
|
316
389
|
}
|
|
317
390
|
|
|
318
391
|
/**
|