@rangojs/router 0.0.0-experimental.141 → 0.0.0-experimental.143
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 +6 -10
- package/README.md +17 -0
- 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/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 +84 -15
- 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 +21 -18
- package/skills/api-client/SKILL.md +1 -1
- package/skills/breadcrumbs/SKILL.md +1 -1
- package/skills/cache-guide/SKILL.md +1 -1
- package/skills/caching/SKILL.md +35 -1
- package/skills/catalog.json +265 -0
- package/skills/comparison/references/framework-comparison.md +1 -1
- package/skills/composability/SKILL.md +33 -1
- package/skills/debug-manifest/SKILL.md +1 -1
- package/skills/document-cache/SKILL.md +9 -1
- package/skills/fonts/SKILL.md +1 -1
- package/skills/handler-use/SKILL.md +1 -1
- package/skills/hooks/SKILL.md +54 -892
- package/skills/hooks/data.md +273 -0
- package/skills/hooks/handle-and-actions.md +103 -0
- package/skills/hooks/navigation.md +110 -0
- package/skills/hooks/outlets.md +41 -0
- package/skills/hooks/state.md +228 -0
- package/skills/hooks/urls.md +135 -0
- package/skills/host-router/SKILL.md +1 -1
- package/skills/i18n/SKILL.md +1 -1
- package/skills/intercept/SKILL.md +8 -1
- package/skills/layout/SKILL.md +1 -1
- package/skills/links/SKILL.md +1 -1
- package/skills/loader/SKILL.md +8 -1
- package/skills/middleware/SKILL.md +1 -1
- package/skills/migrate-nextjs/SKILL.md +133 -1
- package/skills/migrate-react-router/SKILL.md +42 -816
- package/skills/migrate-react-router/cloudflare-workers.md +129 -0
- package/skills/migrate-react-router/component-migration.md +196 -0
- package/skills/migrate-react-router/data-and-actions.md +225 -0
- package/skills/migrate-react-router/route-mapping.md +271 -0
- package/skills/mime-routes/SKILL.md +1 -1
- package/skills/observability/SKILL.md +9 -1
- package/skills/parallel/SKILL.md +10 -1
- package/skills/ppr/SKILL.md +331 -32
- package/skills/prerender/SKILL.md +8 -1
- package/skills/rango/SKILL.md +12 -12
- package/skills/response-routes/SKILL.md +1 -1
- package/skills/route/SKILL.md +9 -1
- package/skills/router-setup/SKILL.md +1 -1
- package/skills/scripts/SKILL.md +1 -1
- package/skills/server-actions/SKILL.md +3 -2
- package/skills/shell-manifest/SKILL.md +1 -1
- package/skills/streams-and-websockets/SKILL.md +1 -1
- package/skills/tailwind/SKILL.md +1 -1
- package/skills/testing/SKILL.md +1 -1
- package/skills/theme/SKILL.md +1 -1
- package/skills/typesafety/SKILL.md +45 -919
- package/skills/typesafety/env-and-bindings.md +254 -0
- package/skills/typesafety/generated-files-and-cli.md +335 -0
- package/skills/typesafety/params-and-search.md +153 -0
- package/skills/typesafety/route-types.md +209 -0
- package/skills/use-cache/SKILL.md +7 -1
- package/skills/vercel/SKILL.md +1 -1
- package/skills/view-transitions/SKILL.md +1 -1
- package/src/browser/event-controller.ts +41 -10
- package/src/browser/logging.ts +10 -0
- package/src/browser/merge-segment-loaders.ts +6 -4
- package/src/browser/navigation-client.ts +5 -1
- package/src/browser/navigation-store.ts +46 -6
- package/src/browser/partial-update.ts +27 -15
- package/src/browser/prefetch/cache.ts +26 -4
- package/src/browser/prefetch/fetch.ts +27 -17
- package/src/browser/react/Link.tsx +13 -3
- package/src/browser/react/NavigationProvider.tsx +21 -19
- package/src/browser/scroll-restoration.ts +7 -5
- package/src/browser/segment-reconciler.ts +31 -21
- package/src/browser/types.ts +12 -0
- package/src/cache/cache-runtime.ts +203 -23
- package/src/cache/document-cache.ts +20 -9
- package/src/cache/memory-segment-store.ts +53 -2
- package/src/cache/segment-codec.ts +4 -4
- package/src/cache/shell-snapshot.ts +50 -1
- package/src/cache/types.ts +25 -5
- package/src/cache/vercel/vercel-cache-store.ts +131 -107
- package/src/cloudflare/tracing.ts +7 -8
- package/src/index.rsc.ts +1 -0
- package/src/index.ts +12 -8
- package/src/route-definition/helpers-types.ts +5 -4
- package/src/route-map-builder.ts +24 -1
- package/src/router/find-match.ts +15 -1
- package/src/router/instrument.ts +9 -4
- package/src/router/manifest.ts +13 -5
- package/src/router/match-api.ts +70 -30
- package/src/router/match-handlers.ts +176 -135
- package/src/router/match-result.ts +35 -15
- package/src/router/middleware.ts +46 -32
- package/src/router/request-classification.ts +20 -7
- package/src/router/route-snapshot.ts +10 -0
- package/src/router/router-interfaces.ts +9 -0
- package/src/router/segment-resolution/fresh.ts +25 -4
- package/src/router/segment-resolution/loader-cache.ts +57 -8
- package/src/router/segment-resolution/loader-mask.ts +26 -3
- package/src/router/segment-resolution/loader-snapshot.ts +251 -0
- package/src/router/telemetry-otel.ts +6 -8
- package/src/router/tracing.ts +14 -5
- package/src/router.ts +15 -6
- package/src/rsc/handler.ts +46 -30
- package/src/rsc/nonce.ts +10 -1
- package/src/rsc/rsc-rendering.ts +39 -8
- package/src/rsc/shell-capture.ts +201 -13
- package/src/rsc/shell-serve.ts +26 -0
- package/src/server/cookie-store.ts +6 -0
- package/src/server/request-context.ts +33 -0
- package/src/ssr/index.tsx +7 -0
- package/src/testing/dispatch.ts +142 -37
- package/src/urls/path-helper-types.ts +9 -4
- package/src/vercel/tracing.ts +7 -7
- package/src/vite/discovery/dev-prerender-cache.ts +117 -0
- package/src/vite/router-discovery.ts +78 -15
|
@@ -156,7 +156,7 @@ interface VercelResponseEnvelope {
|
|
|
156
156
|
s: number;
|
|
157
157
|
/** expiresAt (ms since epoch). */
|
|
158
158
|
e: number;
|
|
159
|
-
/** Tags, preserved so a
|
|
159
|
+
/** Tags, preserved so a background revalidation re-write keeps them. */
|
|
160
160
|
t?: string[];
|
|
161
161
|
}
|
|
162
162
|
|
|
@@ -174,7 +174,7 @@ interface VercelShellEnvelope {
|
|
|
174
174
|
s: number;
|
|
175
175
|
/** expiresAt (ms since epoch). */
|
|
176
176
|
e: number;
|
|
177
|
-
/** Tags, preserved so a
|
|
177
|
+
/** Tags, preserved so a background revalidation re-write keeps them. */
|
|
178
178
|
t?: string[];
|
|
179
179
|
/** initialTheme the capture render was built with (resume theme fidelity). */
|
|
180
180
|
i?: string;
|
|
@@ -226,9 +226,9 @@ export interface VercelCacheStoreOptions<TEnv = unknown> {
|
|
|
226
226
|
cache: VercelRuntimeCache;
|
|
227
227
|
|
|
228
228
|
/**
|
|
229
|
-
* `waitUntil` from `@vercel/functions`. Used only to run the stale-read
|
|
230
|
-
*
|
|
231
|
-
* backgrounds the actual writes. When omitted, the
|
|
229
|
+
* `waitUntil` from `@vercel/functions`. Used only to run the stale-read lock
|
|
230
|
+
* write (herd dampening) off the response path - the router already
|
|
231
|
+
* backgrounds the actual writes. When omitted, the lock write runs detached
|
|
232
232
|
* (fire-and-forget) instead.
|
|
233
233
|
*/
|
|
234
234
|
waitUntil?: (promise: Promise<unknown>) => void;
|
|
@@ -393,7 +393,7 @@ export class VercelCacheStore<
|
|
|
393
393
|
this.emitDebug({ op: "get", key, outcome: "miss", readMs });
|
|
394
394
|
return null;
|
|
395
395
|
}
|
|
396
|
-
const env = this.asSegmentEnvelope(raw);
|
|
396
|
+
const env = this.asSegmentEnvelope(this.decodeRaw(raw));
|
|
397
397
|
if (!env) {
|
|
398
398
|
reportCacheError(
|
|
399
399
|
new Error("malformed segment envelope"),
|
|
@@ -420,35 +420,19 @@ export class VercelCacheStore<
|
|
|
420
420
|
}
|
|
421
421
|
|
|
422
422
|
const isStale = env.s > 0 && now > env.s;
|
|
423
|
-
|
|
424
|
-
this.
|
|
425
|
-
|
|
426
|
-
env,
|
|
427
|
-
env.d.tags,
|
|
428
|
-
"[VercelCacheStore] get",
|
|
429
|
-
);
|
|
430
|
-
this.emitDebug({
|
|
431
|
-
op: "get",
|
|
432
|
-
key,
|
|
433
|
-
outcome: "stale-revalidate",
|
|
434
|
-
shouldRevalidate: true,
|
|
435
|
-
staleAt: env.s,
|
|
436
|
-
expiresAt: env.e,
|
|
437
|
-
readMs,
|
|
438
|
-
});
|
|
439
|
-
return { data: env.d, shouldRevalidate: true };
|
|
440
|
-
}
|
|
441
|
-
|
|
423
|
+
const shouldRevalidate = isStale
|
|
424
|
+
? await this.claimRevalidation(storeKey, env.e, "[VercelCacheStore] get")
|
|
425
|
+
: false;
|
|
442
426
|
this.emitDebug({
|
|
443
427
|
op: "get",
|
|
444
428
|
key,
|
|
445
|
-
outcome: "fresh",
|
|
446
|
-
shouldRevalidate
|
|
429
|
+
outcome: shouldRevalidate ? "stale-revalidate" : "fresh",
|
|
430
|
+
shouldRevalidate,
|
|
447
431
|
staleAt: env.s,
|
|
448
432
|
expiresAt: env.e,
|
|
449
433
|
readMs,
|
|
450
434
|
});
|
|
451
|
-
return { data: env.d, shouldRevalidate
|
|
435
|
+
return { data: env.d, shouldRevalidate };
|
|
452
436
|
}
|
|
453
437
|
|
|
454
438
|
async set(
|
|
@@ -462,8 +446,7 @@ export class VercelCacheStore<
|
|
|
462
446
|
const { staleAt, expiresAt } = computeExpiration(ttl, swrWindow);
|
|
463
447
|
// Embed the CLAMPED tags, like putResponse/setItem: the segment family
|
|
464
448
|
// carries its tags inside `d`, and a raw list would resurface dropped
|
|
465
|
-
// tags into recordRequestTags on every hit
|
|
466
|
-
// spurious cache-write report) by markRevalidating on every stale read.
|
|
449
|
+
// tags into recordRequestTags on every hit.
|
|
467
450
|
const safeTags = this.clampTagsForWrite(
|
|
468
451
|
data.tags,
|
|
469
452
|
"[VercelCacheStore] set",
|
|
@@ -517,7 +500,7 @@ export class VercelCacheStore<
|
|
|
517
500
|
this.emitDebug({ op: "getResponse", key, outcome: "miss", readMs });
|
|
518
501
|
return null;
|
|
519
502
|
}
|
|
520
|
-
const env = this.asResponseEnvelope(raw);
|
|
503
|
+
const env = this.asResponseEnvelope(this.decodeRaw(raw));
|
|
521
504
|
if (!env) {
|
|
522
505
|
reportCacheError(
|
|
523
506
|
new Error("malformed response envelope"),
|
|
@@ -543,11 +526,11 @@ export class VercelCacheStore<
|
|
|
543
526
|
return null;
|
|
544
527
|
}
|
|
545
528
|
|
|
546
|
-
// Reconstruct the Response BEFORE
|
|
547
|
-
// invalid base64 from base64ToBuffer, or bad header entries) would
|
|
548
|
-
// throw out of getResponse — breaking the fail-open contract — and
|
|
549
|
-
//
|
|
550
|
-
// a corrupt entry: report, evict, and miss.
|
|
529
|
+
// Reconstruct the Response BEFORE claiming revalidation. A corrupt body
|
|
530
|
+
// (e.g. invalid base64 from base64ToBuffer, or bad header entries) would
|
|
531
|
+
// otherwise throw out of getResponse — breaking the fail-open contract — and
|
|
532
|
+
// a stale read would have written a lock for an entry it then evicts. Treat a
|
|
533
|
+
// reconstruction failure as a corrupt entry: report, evict, and miss.
|
|
551
534
|
let response: Response;
|
|
552
535
|
try {
|
|
553
536
|
response = new Response(base64ToBuffer(env.b), {
|
|
@@ -566,24 +549,23 @@ export class VercelCacheStore<
|
|
|
566
549
|
}
|
|
567
550
|
|
|
568
551
|
const isStale = env.s > 0 && now > env.s;
|
|
569
|
-
|
|
570
|
-
this.
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
}
|
|
552
|
+
const shouldRevalidate = isStale
|
|
553
|
+
? await this.claimRevalidation(
|
|
554
|
+
storeKey,
|
|
555
|
+
env.e,
|
|
556
|
+
"[VercelCacheStore] getResponse",
|
|
557
|
+
)
|
|
558
|
+
: false;
|
|
577
559
|
this.emitDebug({
|
|
578
560
|
op: "getResponse",
|
|
579
561
|
key,
|
|
580
|
-
outcome:
|
|
581
|
-
shouldRevalidate
|
|
562
|
+
outcome: shouldRevalidate ? "stale-revalidate" : "fresh",
|
|
563
|
+
shouldRevalidate,
|
|
582
564
|
staleAt: env.s,
|
|
583
565
|
expiresAt: env.e,
|
|
584
566
|
readMs,
|
|
585
567
|
});
|
|
586
|
-
return { response, shouldRevalidate
|
|
568
|
+
return { response, shouldRevalidate };
|
|
587
569
|
}
|
|
588
570
|
|
|
589
571
|
async putResponse(
|
|
@@ -650,7 +632,7 @@ export class VercelCacheStore<
|
|
|
650
632
|
this.emitDebug({ op: "getItem", key, outcome: "miss", readMs });
|
|
651
633
|
return null;
|
|
652
634
|
}
|
|
653
|
-
const env = this.asItemEnvelope(raw);
|
|
635
|
+
const env = this.asItemEnvelope(this.decodeRaw(raw));
|
|
654
636
|
if (!env) {
|
|
655
637
|
reportCacheError(
|
|
656
638
|
new Error("malformed item envelope"),
|
|
@@ -677,14 +659,18 @@ export class VercelCacheStore<
|
|
|
677
659
|
}
|
|
678
660
|
|
|
679
661
|
const isStale = env.s > 0 && now > env.s;
|
|
680
|
-
|
|
681
|
-
this.
|
|
682
|
-
|
|
662
|
+
const shouldRevalidate = isStale
|
|
663
|
+
? await this.claimRevalidation(
|
|
664
|
+
storeKey,
|
|
665
|
+
env.e,
|
|
666
|
+
"[VercelCacheStore] getItem",
|
|
667
|
+
)
|
|
668
|
+
: false;
|
|
683
669
|
this.emitDebug({
|
|
684
670
|
op: "getItem",
|
|
685
671
|
key,
|
|
686
|
-
outcome:
|
|
687
|
-
shouldRevalidate
|
|
672
|
+
outcome: shouldRevalidate ? "stale-revalidate" : "fresh",
|
|
673
|
+
shouldRevalidate,
|
|
688
674
|
staleAt: env.s,
|
|
689
675
|
expiresAt: env.e,
|
|
690
676
|
readMs,
|
|
@@ -692,7 +678,7 @@ export class VercelCacheStore<
|
|
|
692
678
|
return {
|
|
693
679
|
value: env.v,
|
|
694
680
|
handles: env.h,
|
|
695
|
-
shouldRevalidate
|
|
681
|
+
shouldRevalidate,
|
|
696
682
|
tags: env.t,
|
|
697
683
|
};
|
|
698
684
|
}
|
|
@@ -752,7 +738,7 @@ export class VercelCacheStore<
|
|
|
752
738
|
this.emitDebug({ op: "getShell", key, outcome: "miss", readMs });
|
|
753
739
|
return null;
|
|
754
740
|
}
|
|
755
|
-
const env = this.asShellEnvelope(raw);
|
|
741
|
+
const env = this.asShellEnvelope(this.decodeRaw(raw));
|
|
756
742
|
if (!env) {
|
|
757
743
|
reportCacheError(
|
|
758
744
|
new Error("malformed shell envelope"),
|
|
@@ -779,19 +765,18 @@ export class VercelCacheStore<
|
|
|
779
765
|
}
|
|
780
766
|
|
|
781
767
|
const isStale = env.s > 0 && now > env.s;
|
|
782
|
-
|
|
783
|
-
this.
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
}
|
|
768
|
+
const shouldRevalidate = isStale
|
|
769
|
+
? await this.claimRevalidation(
|
|
770
|
+
storeKey,
|
|
771
|
+
env.e,
|
|
772
|
+
"[VercelCacheStore] getShell",
|
|
773
|
+
)
|
|
774
|
+
: false;
|
|
790
775
|
this.emitDebug({
|
|
791
776
|
op: "getShell",
|
|
792
777
|
key,
|
|
793
|
-
outcome:
|
|
794
|
-
shouldRevalidate
|
|
778
|
+
outcome: shouldRevalidate ? "stale-revalidate" : "fresh",
|
|
779
|
+
shouldRevalidate,
|
|
795
780
|
staleAt: env.s,
|
|
796
781
|
expiresAt: env.e,
|
|
797
782
|
readMs,
|
|
@@ -805,7 +790,7 @@ export class VercelCacheStore<
|
|
|
805
790
|
snapshot: env.sn,
|
|
806
791
|
createdAt: env.c,
|
|
807
792
|
},
|
|
808
|
-
shouldRevalidate
|
|
793
|
+
shouldRevalidate,
|
|
809
794
|
};
|
|
810
795
|
}
|
|
811
796
|
|
|
@@ -901,68 +886,107 @@ export class VercelCacheStore<
|
|
|
901
886
|
tags: string[] | undefined,
|
|
902
887
|
label: string,
|
|
903
888
|
): Promise<void> {
|
|
904
|
-
|
|
889
|
+
// Serialize the envelope exactly ONCE: the same string measures the entry
|
|
890
|
+
// against the size cap AND is what we hand the platform. The Vercel client
|
|
891
|
+
// JSON-serializes whatever value it is given, so passing the raw object here
|
|
892
|
+
// would walk and stringify the (potentially large) envelope a SECOND time.
|
|
893
|
+
// Entries written this way are JSON strings; the read path (decodeRaw)
|
|
894
|
+
// parses them back, and still accepts the legacy object shape written before
|
|
895
|
+
// this change.
|
|
896
|
+
let serialized: string | undefined;
|
|
897
|
+
try {
|
|
898
|
+
serialized = JSON.stringify(value);
|
|
899
|
+
} catch {
|
|
900
|
+
// Unserializable value: fall back to letting the platform serialize it
|
|
901
|
+
// (best-effort — matches the prior "cannot measure -> allow the write").
|
|
902
|
+
serialized = undefined;
|
|
903
|
+
}
|
|
904
|
+
if (serialized !== undefined && !this.withinSizeLimit(serialized, label)) {
|
|
905
|
+
return;
|
|
906
|
+
}
|
|
905
907
|
const safeTags = this.clampTagsForWrite(tags, label);
|
|
906
908
|
const options: { ttl: number; tags?: string[]; name?: string } = {
|
|
907
909
|
ttl: Math.max(1, Math.ceil(totalTtlSeconds)),
|
|
908
910
|
};
|
|
909
911
|
if (safeTags.length > 0) options.tags = safeTags;
|
|
910
912
|
if (this.name) options.name = this.name;
|
|
911
|
-
await this.cache.set(storeKey, value, options);
|
|
913
|
+
await this.cache.set(storeKey, serialized ?? value, options);
|
|
912
914
|
}
|
|
913
915
|
|
|
914
916
|
/**
|
|
915
|
-
*
|
|
916
|
-
*
|
|
917
|
-
*
|
|
918
|
-
*
|
|
917
|
+
* Normalize a value read back from the cache. Entries written by this store
|
|
918
|
+
* are pre-serialized JSON strings (see write()); legacy entries (written
|
|
919
|
+
* before that change, or by a client that deserializes for us) come back as
|
|
920
|
+
* objects. Parse strings, pass objects through, and treat a non-JSON string
|
|
921
|
+
* as corrupt (returns undefined, so the caller reports + evicts).
|
|
922
|
+
*/
|
|
923
|
+
private decodeRaw(raw: unknown): unknown {
|
|
924
|
+
if (typeof raw !== "string") return raw;
|
|
925
|
+
try {
|
|
926
|
+
return JSON.parse(raw);
|
|
927
|
+
} catch {
|
|
928
|
+
return undefined;
|
|
929
|
+
}
|
|
930
|
+
}
|
|
931
|
+
|
|
932
|
+
/**
|
|
933
|
+
* Stale-read herd dampening via a tiny companion lock key. On a stale read,
|
|
934
|
+
* check `{storeKey}:lock`; if absent, claim it (write a short-TTL marker) and
|
|
935
|
+
* return true so THIS reader triggers revalidation. If present, another
|
|
936
|
+
* same-region reader already claimed it, so return false and serve the stale
|
|
937
|
+
* entry as fresh without piling on. Best-effort and non-blocking; never throws.
|
|
938
|
+
*
|
|
939
|
+
* Only the STALE path pays the extra lock read; the fresh-hit path takes no
|
|
940
|
+
* lock round trip. Unlike the prior whole-envelope re-stamp, a stale read now
|
|
941
|
+
* writes only the tiny lock, never the (potentially large) payload.
|
|
919
942
|
*
|
|
920
|
-
*
|
|
921
|
-
*
|
|
922
|
-
*
|
|
923
|
-
*
|
|
924
|
-
* the re-stamp. Both self-heal within REVALIDATION_LOCK_MS (the re-stamped
|
|
925
|
-
* copy is then re-read as stale and revalidated again, or re-deleted). The
|
|
926
|
-
* window is narrow and the cost is at most one extra revalidation / one brief
|
|
927
|
-
* stale serve; a read-compare would not close it atomically without CAS.
|
|
943
|
+
* Non-atomic (getCache has no compare-and-set): two readers can both find no
|
|
944
|
+
* lock and both revalidate. The window is REVALIDATION_LOCK_MS wide, after
|
|
945
|
+
* which the lock expires and the entry is re-claimed (or a fresh write has
|
|
946
|
+
* superseded it). A read-compare would not close the race without CAS.
|
|
928
947
|
*/
|
|
929
|
-
private
|
|
948
|
+
private async claimRevalidation(
|
|
930
949
|
storeKey: string,
|
|
931
|
-
|
|
932
|
-
tags: string[] | undefined,
|
|
950
|
+
expiresAt: number,
|
|
933
951
|
label: string,
|
|
934
|
-
):
|
|
935
|
-
const
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
952
|
+
): Promise<boolean> {
|
|
953
|
+
const lockKey = `${storeKey}:lock`;
|
|
954
|
+
let lock: unknown;
|
|
955
|
+
try {
|
|
956
|
+
lock = await this.cache.get(lockKey);
|
|
957
|
+
} catch {
|
|
958
|
+
// A lock-read failure must not break the read path: treat as unlocked.
|
|
959
|
+
lock = null;
|
|
960
|
+
}
|
|
961
|
+
if (lock != null) return false;
|
|
962
|
+
|
|
963
|
+
const remainingSeconds = Math.ceil((expiresAt - Date.now()) / 1000);
|
|
964
|
+
const lockTtl = Math.max(
|
|
965
|
+
1,
|
|
966
|
+
Math.min(Math.ceil(REVALIDATION_LOCK_MS / 1000), remainingSeconds),
|
|
967
|
+
);
|
|
942
968
|
const task = (): Promise<void> =>
|
|
943
|
-
this.
|
|
969
|
+
this.cache.set(lockKey, 1, { ttl: lockTtl });
|
|
944
970
|
if (this.waitUntil) {
|
|
945
971
|
this.waitUntil(reportingAsync(task, "cache-write", label));
|
|
946
972
|
} else {
|
|
947
973
|
void reportingAsync(task, "cache-write", label);
|
|
948
974
|
}
|
|
975
|
+
return true;
|
|
949
976
|
}
|
|
950
977
|
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
}
|
|
964
|
-
} catch {
|
|
965
|
-
// If the value cannot be measured, allow the write (best-effort).
|
|
978
|
+
/** Measure a pre-serialized entry against the per-item size cap (see write). */
|
|
979
|
+
private withinSizeLimit(serialized: string, label: string): boolean {
|
|
980
|
+
const bytes = new TextEncoder().encode(serialized).length;
|
|
981
|
+
if (bytes >= this.maxItemBytes) {
|
|
982
|
+
reportCacheError(
|
|
983
|
+
new Error(
|
|
984
|
+
`entry is ${bytes}B, at/above the ${this.maxItemBytes}B cap; not cached`,
|
|
985
|
+
),
|
|
986
|
+
"cache-write",
|
|
987
|
+
label,
|
|
988
|
+
);
|
|
989
|
+
return false;
|
|
966
990
|
}
|
|
967
991
|
return true;
|
|
968
992
|
}
|
|
@@ -39,7 +39,7 @@ import { _getRequestContext } from "../server/request-context.js";
|
|
|
39
39
|
import {
|
|
40
40
|
type RouterTracingConfig,
|
|
41
41
|
type SpanRunner,
|
|
42
|
-
type
|
|
42
|
+
type TracingToggleOptions,
|
|
43
43
|
NOOP_TRACE_SPAN,
|
|
44
44
|
} from "../router/tracing.js";
|
|
45
45
|
|
|
@@ -57,13 +57,12 @@ interface CloudflareTracing {
|
|
|
57
57
|
enterSpan<T>(name: string, callback: (span: CloudflareSpan) => T): T;
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
-
/**
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
}
|
|
60
|
+
/**
|
|
61
|
+
* Options for createCloudflareTracing. Alias of the shared
|
|
62
|
+
* {@link TracingToggleOptions} (`enabled` master switch + per-phase `spans`
|
|
63
|
+
* toggles); the name is public API.
|
|
64
|
+
*/
|
|
65
|
+
export type CloudflareTracingOptions = TracingToggleOptions;
|
|
67
66
|
|
|
68
67
|
/**
|
|
69
68
|
* Resolve the per-request Cloudflare tracer from the active execution context.
|
package/src/index.rsc.ts
CHANGED
package/src/index.ts
CHANGED
|
@@ -343,14 +343,17 @@ export {
|
|
|
343
343
|
// Path and response types are ambient on the `Rango` namespace (`Rango.Path`,
|
|
344
344
|
// `Rango.PathResponse`, declared in href-client.ts) — no import needed.
|
|
345
345
|
|
|
346
|
-
// Telemetry types only — the createConsoleSink/createOTelSink
|
|
347
|
-
// server-only and live in index.rsc.ts (the
|
|
348
|
-
// bare `@rangojs/router` import). Re-exporting
|
|
349
|
-
// (default/client) entry would pull telemetry.ts and
|
|
350
|
-
// the client module graph; both tree-shake to zero bytes
|
|
351
|
-
// bundle analysis output and slow build-time module
|
|
352
|
-
//
|
|
353
|
-
//
|
|
346
|
+
// Telemetry types only — the createConsoleSink / createOTelSink /
|
|
347
|
+
// createOTelTracing VALUES are server-only and live in index.rsc.ts (the
|
|
348
|
+
// `react-server` condition of the bare `@rangojs/router` import). Re-exporting
|
|
349
|
+
// them as values from this (default/client) entry would pull telemetry.ts and
|
|
350
|
+
// telemetry-otel.ts into the client module graph; both tree-shake to zero bytes
|
|
351
|
+
// but still appear in bundle analysis output and slow build-time module
|
|
352
|
+
// resolution. The factory values are NOT re-exported from `@rangojs/router/server`
|
|
353
|
+
// either — that subpath is internal, not user-facing (see server.ts header).
|
|
354
|
+
// Non-RSC server code imports these TYPES from the root and obtains the factory
|
|
355
|
+
// VALUES from its own router definition module, which resolves to index.rsc.ts
|
|
356
|
+
// under the `react-server` condition.
|
|
354
357
|
export type {
|
|
355
358
|
OTelTracer,
|
|
356
359
|
OTelActiveSpanTracer,
|
|
@@ -386,6 +389,7 @@ export type {
|
|
|
386
389
|
RouterTracingConfig,
|
|
387
390
|
TracePhase,
|
|
388
391
|
TracePhaseToggles,
|
|
392
|
+
TracingToggleOptions,
|
|
389
393
|
} from "./router/tracing.js";
|
|
390
394
|
|
|
391
395
|
// Timeout types and error class
|
|
@@ -149,8 +149,11 @@ export type RouteHelpers<T extends RouteDefinition, TEnv> = {
|
|
|
149
149
|
* so they take precedence on `loading()` and other last-write-wins
|
|
150
150
|
* fields.
|
|
151
151
|
*/
|
|
152
|
-
|
|
153
|
-
|
|
152
|
+
// Not generic over the slots record: an inferred type parameter makes the
|
|
153
|
+
// object literal an inference site, which suppresses contextual typing of
|
|
154
|
+
// arrow slot handlers (`(ctx) => ...` was implicit any).
|
|
155
|
+
parallel: (
|
|
156
|
+
slots: Record<
|
|
154
157
|
`@${string}`,
|
|
155
158
|
| Handler<any, any, TEnv>
|
|
156
159
|
| ReactNode
|
|
@@ -159,8 +162,6 @@ export type RouteHelpers<T extends RouteDefinition, TEnv> = {
|
|
|
159
162
|
use?: () => UseItems<ParallelUseItem>;
|
|
160
163
|
}
|
|
161
164
|
>,
|
|
162
|
-
>(
|
|
163
|
-
slots: TSlots,
|
|
164
165
|
use?: () => UseItems<ParallelUseItem>,
|
|
165
166
|
) => ParallelItem;
|
|
166
167
|
/**
|
package/src/route-map-builder.ts
CHANGED
|
@@ -139,6 +139,7 @@ export function clearAllRouterData(): void {
|
|
|
139
139
|
perRouterManifestMap.clear();
|
|
140
140
|
perRouterTrieMap.clear();
|
|
141
141
|
perRouterPrecomputedEntriesMap.clear();
|
|
142
|
+
authoritativeTrieRouters.clear();
|
|
142
143
|
}
|
|
143
144
|
|
|
144
145
|
export function setRouterManifest(
|
|
@@ -162,6 +163,23 @@ export function setRouterTrie(
|
|
|
162
163
|
perRouterTrieMap.set(routerId, trie);
|
|
163
164
|
}
|
|
164
165
|
|
|
166
|
+
// Routers whose trie came from the COMPLETE build manifest (deserialized via
|
|
167
|
+
// ensureRouterManifest). For these, a trie miss is a real 404 and findMatch
|
|
168
|
+
// skips the regex fallback scan — the only remaining route-count-proportional
|
|
169
|
+
// match path (#664). Dev rebuilds (manifest-init.ts, router-discovery HMR
|
|
170
|
+
// pushes) deliberately never mark authoritative: the dev-only trie-gap warning
|
|
171
|
+
// in find-match.ts depends on the fallback running on misses, and dev route
|
|
172
|
+
// churn (HMR, dev-time routes) makes a stale-trie 404 unacceptable there.
|
|
173
|
+
const authoritativeTrieRouters: Set<string> = new Set();
|
|
174
|
+
|
|
175
|
+
export function markRouterTrieAuthoritative(routerId: string): void {
|
|
176
|
+
authoritativeTrieRouters.add(routerId);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
export function isRouterTrieAuthoritative(routerId: string): boolean {
|
|
180
|
+
return authoritativeTrieRouters.has(routerId);
|
|
181
|
+
}
|
|
182
|
+
|
|
165
183
|
export function getRouterTrie(
|
|
166
184
|
routerId: string,
|
|
167
185
|
): import("./build/route-trie.js").TrieNode | undefined {
|
|
@@ -204,7 +222,12 @@ export async function ensureRouterManifest(routerId: string): Promise<void> {
|
|
|
204
222
|
if (loader) {
|
|
205
223
|
const mod = await loader();
|
|
206
224
|
if (mod.manifest) perRouterManifestMap.set(routerId, mod.manifest);
|
|
207
|
-
if (mod.trie)
|
|
225
|
+
if (mod.trie) {
|
|
226
|
+
perRouterTrieMap.set(routerId, mod.trie);
|
|
227
|
+
// A trie serialized into the build manifest comes from complete
|
|
228
|
+
// discovery — misses are authoritative 404s (see find-match.ts).
|
|
229
|
+
markRouterTrieAuthoritative(routerId);
|
|
230
|
+
}
|
|
208
231
|
if (mod.precomputedEntries)
|
|
209
232
|
perRouterPrecomputedEntriesMap.set(routerId, mod.precomputedEntries);
|
|
210
233
|
routerManifestLoaders.delete(routerId);
|
package/src/router/find-match.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { tryTrieMatch } from "./trie-matching.js";
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
getRouterTrie,
|
|
4
|
+
isRouterTrieAuthoritative,
|
|
5
|
+
} from "../route-map-builder.js";
|
|
3
6
|
import {
|
|
4
7
|
findMatch as findRouteMatch,
|
|
5
8
|
isLazyEvaluationNeeded,
|
|
@@ -166,6 +169,17 @@ export function createFindMatch<TEnv = any>(
|
|
|
166
169
|
};
|
|
167
170
|
return cloneMatchResult(lastFindMatchResult);
|
|
168
171
|
}
|
|
172
|
+
} else if (isRouterTrieAuthoritative(deps.routerId)) {
|
|
173
|
+
// Authoritative miss (#664): this trie was deserialized from the
|
|
174
|
+
// COMPLETE build manifest, so trailing-slash redirects are already
|
|
175
|
+
// trie-native hits and a miss means no route exists. Skip the regex
|
|
176
|
+
// fallback — the only route-count-proportional match path — and do
|
|
177
|
+
// not evaluate lazy includes for unmatched (bot-probe) traffic.
|
|
178
|
+
// Trie hits that need lazy splicing keep the fallback loop below
|
|
179
|
+
// (trieMatched === true never reaches this branch).
|
|
180
|
+
lastFindMatchPathname = pathname;
|
|
181
|
+
lastFindMatchResult = null;
|
|
182
|
+
return null;
|
|
169
183
|
}
|
|
170
184
|
}
|
|
171
185
|
|
package/src/router/instrument.ts
CHANGED
|
@@ -318,10 +318,10 @@ export function observeHandler<C, R>(
|
|
|
318
318
|
* sink is configured.
|
|
319
319
|
*
|
|
320
320
|
* This is the canonical emitter for SYNCHRONOUS facts that fire inside the
|
|
321
|
-
* request's ALS scope (
|
|
322
|
-
*
|
|
323
|
-
*
|
|
324
|
-
*
|
|
321
|
+
* request's ALS scope (revalidation decisions, cache-lookup decisions). A few
|
|
322
|
+
* emitters deliberately stay on the lower-level resolveSink + safeEmit because
|
|
323
|
+
* observeEvent's lazy, per-call getRouterContext() read does not fit them — keep
|
|
324
|
+
* this the complete list:
|
|
325
325
|
* - router.ts wrapLoaderPromise (loader.start/end/error) and
|
|
326
326
|
* segment-resolution/streamed-handler-telemetry.ts (streamed handler.error)
|
|
327
327
|
* capture the sink + request id EAGERLY and emit from a fire-and-forget
|
|
@@ -330,6 +330,11 @@ export function observeHandler<C, R>(
|
|
|
330
330
|
* loop (request.start/end/error, cache.decision, ...).
|
|
331
331
|
* - segment-resolution/helpers.ts emits via a caller-provided report.telemetry
|
|
332
332
|
* sink rather than the ALS router context.
|
|
333
|
+
* - rsc/handler.ts handleTimeoutResponse (request.timeout), the origin guard
|
|
334
|
+
* (request.origin-rejected), and handleStore.onError (late-handle
|
|
335
|
+
* handler.error) emit via router.telemetry directly — they run outside the
|
|
336
|
+
* RouterContext ALS (only match()/matchPartial() enter it), so a
|
|
337
|
+
* getRouterContext() read there throws and the event would vanish.
|
|
333
338
|
*/
|
|
334
339
|
export function observeEvent(event: TelemetryEvent): void {
|
|
335
340
|
// getRouterContext() either throws (real impl, outside a router context — e.g.
|
package/src/router/manifest.ts
CHANGED
|
@@ -82,10 +82,14 @@ export async function loadManifest(
|
|
|
82
82
|
Store.mountIndex = mountIndex;
|
|
83
83
|
Store.isSSR = isSSR;
|
|
84
84
|
if (metricsStore) Store.metrics = metricsStore;
|
|
85
|
-
//
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
85
|
+
// Alias the request-scoped Store to the cached Map instead of copying it
|
|
86
|
+
// entry-by-entry. At request time this Store is throwaway (no ambient
|
|
87
|
+
// RangoContext store spans classify->match->render, so getOrCreateStore
|
|
88
|
+
// returns a fresh detached store here), so nothing mutates it in place after
|
|
89
|
+
// loadManifest returns. The fresh path below REASSIGNS Store.manifest rather
|
|
90
|
+
// than clearing it in place, so a later fresh load sharing this Store cannot
|
|
91
|
+
// poison the cached Map.
|
|
92
|
+
Store.manifest = cached;
|
|
89
93
|
pushMetric?.("manifest:cache-hit", cacheStart);
|
|
90
94
|
return cached.get(routeKey)!;
|
|
91
95
|
}
|
|
@@ -103,7 +107,11 @@ export async function loadManifest(
|
|
|
103
107
|
pushMetric?.("manifest:store-setup", storeSetupStart);
|
|
104
108
|
|
|
105
109
|
const clearStart = performance.now();
|
|
106
|
-
|
|
110
|
+
// Reassign rather than clear() in place: a prior cache-hit may have aliased
|
|
111
|
+
// Store.manifest to a shared module-cache Map (see cache-hit branch above),
|
|
112
|
+
// and clearing it in place would poison that cache. A fresh Map isolates this
|
|
113
|
+
// build; the cache still receives an independent copy at the end.
|
|
114
|
+
Store.manifest = new Map();
|
|
107
115
|
pushMetric?.("manifest:clear", clearStart);
|
|
108
116
|
|
|
109
117
|
try {
|