@rangojs/router 0.0.0-experimental.2 → 0.0.0-experimental.21
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 +5 -0
- package/README.md +850 -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/{src/__mocks__/version.ts → dist/__mocks__/version.js} +1 -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 +1601 -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 +4630 -749
- 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} +18 -17
- package/dist/vite/virtual-entries.js.map +1 -0
- package/package.json +82 -46
- package/skills/cache-guide/SKILL.md +262 -0
- package/skills/caching/SKILL.md +139 -238
- package/skills/composability/SKILL.md +172 -0
- package/skills/debug-manifest/SKILL.md +112 -0
- package/skills/document-cache/SKILL.md +87 -57
- package/skills/fonts/SKILL.md +167 -0
- package/skills/hooks/SKILL.md +403 -60
- package/skills/intercept/SKILL.md +224 -203
- package/skills/layout/SKILL.md +243 -149
- package/skills/links/SKILL.md +239 -0
- package/skills/loader/SKILL.md +444 -253
- package/skills/middleware/SKILL.md +222 -325
- package/skills/mime-routes/SKILL.md +128 -0
- package/skills/parallel/SKILL.md +220 -170
- package/skills/prerender/SKILL.md +643 -0
- package/skills/rango/SKILL.md +119 -0
- package/skills/response-routes/SKILL.md +411 -0
- package/skills/route/SKILL.md +334 -89
- package/skills/router-setup/SKILL.md +305 -274
- package/skills/tailwind/SKILL.md +129 -0
- package/skills/testing/SKILL.md +226 -0
- package/skills/theme/SKILL.md +36 -11
- package/skills/typesafety/SKILL.md +437 -168
- package/skills/use-cache/SKILL.md +324 -0
- package/src/__internal.ts +181 -0
- 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/event-controller.ts +87 -64
- package/src/browser/history-state.ts +80 -0
- package/src/browser/intercept-utils.ts +52 -0
- package/src/browser/link-interceptor.ts +20 -4
- package/src/browser/logging.ts +55 -0
- package/src/browser/merge-segment-loaders.ts +20 -12
- package/src/browser/navigation-bridge.ts +217 -549
- package/src/browser/navigation-client.ts +74 -46
- package/src/browser/navigation-store.ts +33 -50
- package/src/browser/navigation-transaction.ts +295 -0
- package/src/browser/network-error-handler.ts +61 -0
- package/src/browser/partial-update.ts +288 -297
- package/src/browser/prefetch/cache.ts +67 -0
- package/src/browser/prefetch/fetch.ts +137 -0
- package/src/browser/prefetch/observer.ts +65 -0
- package/src/browser/prefetch/policy.ts +42 -0
- package/src/browser/prefetch/queue.ts +88 -0
- package/src/browser/rango-state.ts +112 -0
- package/src/browser/react/Link.tsx +173 -73
- package/src/browser/react/NavigationProvider.tsx +138 -27
- 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 +37 -0
- 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 +49 -65
- package/src/browser/react/use-href.tsx +20 -188
- package/src/browser/react/use-link-status.ts +6 -5
- package/src/browser/react/use-mount.ts +31 -0
- package/src/browser/react/use-navigation.ts +27 -78
- 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 +104 -34
- package/src/browser/scroll-restoration.ts +92 -16
- package/src/browser/segment-reconciler.ts +216 -0
- package/src/browser/segment-structure-assert.ts +83 -0
- package/src/browser/server-action-bridge.ts +504 -584
- package/src/browser/shallow.ts +6 -1
- package/src/browser/types.ts +107 -57
- package/src/browser/validate-redirect-origin.ts +29 -0
- package/src/build/generate-manifest.ts +438 -0
- package/src/build/generate-route-types.ts +36 -0
- package/src/build/index.ts +35 -0
- package/src/build/route-trie.ts +249 -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 +469 -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 +338 -0
- package/src/cache/cache-scope.ts +120 -303
- package/src/cache/cf/cf-cache-store.ts +119 -7
- package/src/cache/cf/index.ts +8 -2
- package/src/cache/document-cache.ts +101 -72
- package/src/cache/handle-capture.ts +81 -0
- package/src/cache/handle-snapshot.ts +41 -0
- package/src/cache/index.ts +0 -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 +98 -0
- package/src/cache/types.ts +76 -121
- package/src/client.rsc.tsx +10 -14
- package/src/client.tsx +114 -89
- package/src/component-utils.ts +4 -4
- package/src/components/DefaultDocument.tsx +6 -2
- package/src/context-var.ts +86 -0
- package/src/debug.ts +243 -0
- package/src/errors.ts +108 -2
- package/src/handle.ts +34 -19
- package/src/handles/MetaTags.tsx +76 -23
- package/src/handles/meta.ts +32 -15
- package/src/host/cookie-handler.ts +165 -0
- package/src/host/errors.ts +97 -0
- package/src/host/index.ts +56 -0
- package/src/host/pattern-matcher.ts +214 -0
- package/src/host/router.ts +352 -0
- package/src/host/testing.ts +79 -0
- package/src/host/types.ts +146 -0
- package/src/host/utils.ts +25 -0
- package/src/href-client.ts +141 -47
- package/src/index.rsc.ts +209 -23
- package/src/index.ts +256 -32
- package/src/internal-debug.ts +11 -0
- package/src/loader.rsc.ts +27 -142
- 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 +9 -11
- package/src/route-definition/dsl-helpers.ts +934 -0
- package/src/route-definition/helper-factories.ts +200 -0
- package/src/route-definition/helpers-types.ts +430 -0
- package/src/route-definition/index.ts +55 -0
- package/src/route-definition/redirect.ts +93 -0
- package/src/route-definition/route-function.ts +119 -0
- package/src/route-definition.ts +1 -1371
- package/src/route-map-builder.ts +241 -112
- package/src/route-name.ts +53 -0
- package/src/route-types.ts +70 -9
- 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 +158 -0
- package/src/router/handler-context.ts +348 -82
- package/src/router/intercept-resolution.ts +395 -0
- package/src/router/lazy-includes.ts +234 -0
- package/src/router/loader-resolution.ts +215 -121
- package/src/router/logging.ts +248 -0
- package/src/router/manifest.ts +172 -43
- package/src/router/match-api.ts +620 -0
- package/src/router/match-context.ts +6 -4
- package/src/router/match-handlers.ts +440 -0
- package/src/router/match-middleware/background-revalidation.ts +80 -93
- package/src/router/match-middleware/cache-lookup.ts +382 -9
- package/src/router/match-middleware/cache-store.ts +51 -22
- package/src/router/match-middleware/intercept-resolution.ts +55 -17
- package/src/router/match-middleware/segment-resolution.ts +24 -6
- package/src/router/match-pipelines.ts +10 -45
- package/src/router/match-result.ts +34 -20
- package/src/router/metrics.ts +3 -3
- package/src/router/middleware-cookies.ts +55 -0
- package/src/router/middleware-types.ts +179 -0
- package/src/router/middleware.ts +239 -328
- package/src/router/pattern-matching.ts +302 -26
- package/src/router/prerender-match.ts +398 -0
- package/src/router/preview-match.ts +170 -0
- package/src/router/revalidation.ts +112 -33
- package/src/router/router-context.ts +40 -23
- package/src/router/router-interfaces.ts +439 -0
- package/src/router/router-options.ts +587 -0
- package/src/router/router-registry.ts +24 -0
- package/src/router/segment-resolution/fresh.ts +552 -0
- package/src/router/segment-resolution/helpers.ts +263 -0
- package/src/router/segment-resolution/loader-cache.ts +198 -0
- package/src/router/segment-resolution/revalidation.ts +1226 -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 +289 -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 +221 -0
- package/src/router/types.ts +78 -4
- package/src/router.ts +672 -3566
- package/src/rsc/handler-context.ts +45 -0
- package/src/rsc/handler.ts +691 -757
- package/src/rsc/helpers.ts +140 -6
- package/src/rsc/index.ts +5 -5
- package/src/rsc/loader-fetch.ts +209 -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 +366 -0
- package/src/rsc/response-error.ts +37 -0
- package/src/rsc/response-route-handler.ts +347 -0
- package/src/rsc/rsc-rendering.ts +250 -0
- package/src/rsc/runtime-warnings.ts +42 -0
- package/src/rsc/server-action.ts +344 -0
- package/src/rsc/types.ts +38 -14
- package/src/search-params.ts +227 -0
- package/src/segment-system.tsx +59 -61
- package/src/server/context.ts +217 -49
- package/src/server/cookie-store.ts +190 -0
- package/src/server/fetchable-loader-store.ts +37 -0
- package/src/server/handle-store.ts +98 -20
- package/src/server/loader-registry.ts +15 -56
- package/src/server/request-context.ts +406 -65
- package/src/server.ts +32 -133
- package/src/ssr/index.tsx +157 -26
- 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 +11 -4
- package/src/theme/index.ts +6 -7
- package/src/theme/theme-context.ts +5 -31
- package/src/theme/theme-script.ts +21 -18
- package/src/theme/types.ts +1 -1
- 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 +691 -0
- package/src/types/index.ts +88 -0
- package/src/types/loader-types.ts +183 -0
- package/src/types/route-config.ts +161 -0
- package/src/types/route-entry.ts +102 -0
- package/src/types/segments.ts +153 -0
- package/src/types.ts +1 -1561
- 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 -726
- package/src/use-loader.tsx +85 -77
- package/src/vite/discovery/bundle-postprocess.ts +184 -0
- package/src/vite/discovery/discover-routers.ts +345 -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 +110 -0
- package/src/vite/discovery/virtual-module-codegen.ts +203 -0
- package/src/vite/index.ts +10 -782
- package/src/vite/plugin-types.ts +131 -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 -51
- 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/use-cache-transform.ts +323 -0
- package/src/vite/plugins/version-injector.ts +83 -0
- package/src/vite/plugins/version-plugin.ts +254 -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 +510 -0
- package/src/vite/router-discovery.ts +785 -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 -7
- package/src/__tests__/component-utils.test.ts +0 -76
- package/src/__tests__/route-definition.test.ts +0 -63
- package/src/__tests__/urls.test.tsx +0 -436
- package/src/browser/lru-cache.ts +0 -69
- package/src/browser/request-controller.ts +0 -164
- package/src/cache/__tests__/document-cache.test.ts +0 -522
- package/src/cache/__tests__/memory-segment-store.test.ts +0 -487
- package/src/cache/__tests__/memory-store.test.ts +0 -484
- package/src/cache/cf/__tests__/cf-cache-store.test.ts +0 -428
- package/src/cache/memory-store.ts +0 -253
- package/src/href.ts +0 -177
- package/src/route-utils.ts +0 -89
- package/src/router/__tests__/match-context.test.ts +0 -104
- package/src/router/__tests__/match-pipelines.test.ts +0 -537
- package/src/router/__tests__/match-result.test.ts +0 -566
- package/src/router/__tests__/on-error.test.ts +0 -935
- package/src/router/__tests__/pattern-matching.test.ts +0 -577
- package/src/router/middleware.test.ts +0 -1355
- package/src/rsc/__tests__/helpers.test.ts +0 -175
- package/src/server/__tests__/request-context.test.ts +0 -171
- package/src/ssr/__tests__/ssr-handler.test.tsx +0 -188
- package/src/theme/__tests__/theme.test.ts +0 -120
- package/src/vite/__tests__/expose-loader-id.test.ts +0 -117
- package/src/vite/expose-handle-id.ts +0 -209
- package/src/vite/expose-loader-id.ts +0 -357
- package/src/vite/expose-location-state-id.ts +0 -177
- /package/src/vite/{version.d.ts → plugins/version.d.ts} +0 -0
|
@@ -13,13 +13,27 @@
|
|
|
13
13
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
14
14
|
import type { CookieOptions } from "../router/middleware.js";
|
|
15
15
|
import type { LoaderDefinition, LoaderContext } from "../types.js";
|
|
16
|
+
import type { ScopedReverseFunction } from "../reverse.js";
|
|
17
|
+
import type {
|
|
18
|
+
DefaultEnv,
|
|
19
|
+
DefaultReverseRouteMap,
|
|
20
|
+
DefaultRouteName,
|
|
21
|
+
} from "../types/global-namespace.js";
|
|
16
22
|
import type { Handle } from "../handle.js";
|
|
23
|
+
import { type ContextVar, contextGet, contextSet } from "../context-var.js";
|
|
17
24
|
import { createHandleStore, type HandleStore } from "./handle-store.js";
|
|
18
25
|
import { isHandle } from "../handle.js";
|
|
19
26
|
import { track } from "./context.js";
|
|
27
|
+
import { getFetchableLoader } from "./fetchable-loader-store.js";
|
|
20
28
|
import type { SegmentCacheStore } from "../cache/types.js";
|
|
21
29
|
import type { Theme, ResolvedThemeConfig } from "../theme/types.js";
|
|
22
30
|
import { THEME_COOKIE } from "../theme/constants.js";
|
|
31
|
+
import type { LocationStateEntry } from "../browser/react/location-state-shared.js";
|
|
32
|
+
import { NOCACHE_SYMBOL, assertNotInsideCacheExec } from "../cache/taint.js";
|
|
33
|
+
import { createReverseFunction } from "../router/handler-context.js";
|
|
34
|
+
import { getGlobalRouteMap, isRouteRootScoped } from "../route-map-builder.js";
|
|
35
|
+
import { invariant } from "../errors.js";
|
|
36
|
+
import { isAutoGeneratedRouteName } from "../route-name.js";
|
|
23
37
|
|
|
24
38
|
/**
|
|
25
39
|
* Unified request context available via getRequestContext()
|
|
@@ -28,7 +42,7 @@ import { THEME_COOKIE } from "../theme/constants.js";
|
|
|
28
42
|
* Use this when you need access to request data outside of route handlers.
|
|
29
43
|
*/
|
|
30
44
|
export interface RequestContext<
|
|
31
|
-
TEnv =
|
|
45
|
+
TEnv = DefaultEnv,
|
|
32
46
|
TParams = Record<string, string>,
|
|
33
47
|
> {
|
|
34
48
|
/** Platform bindings (Cloudflare env, etc.) */
|
|
@@ -44,30 +58,43 @@ export interface RequestContext<
|
|
|
44
58
|
/** Variables set by middleware (same as ctx.var) */
|
|
45
59
|
var: Record<string, any>;
|
|
46
60
|
/** Get a variable set by middleware */
|
|
47
|
-
get:
|
|
61
|
+
get: {
|
|
62
|
+
<T>(contextVar: ContextVar<T>): T | undefined;
|
|
63
|
+
<K extends string>(key: K): any;
|
|
64
|
+
};
|
|
48
65
|
/** Set a variable (shared with middleware and handlers) */
|
|
49
|
-
set:
|
|
66
|
+
set: {
|
|
67
|
+
<T>(contextVar: ContextVar<T>, value: T): void;
|
|
68
|
+
<K extends string>(key: K, value: any): void;
|
|
69
|
+
};
|
|
50
70
|
/**
|
|
51
71
|
* Route params (populated after route matching)
|
|
52
72
|
* Initially empty, then set to matched params
|
|
53
73
|
*/
|
|
54
74
|
params: TParams;
|
|
55
75
|
/**
|
|
56
|
-
* Stub response for setting headers/cookies
|
|
57
|
-
* Headers set here are merged into the final response
|
|
76
|
+
* Stub response for setting headers/cookies (read-only).
|
|
77
|
+
* Headers set here are merged into the final response.
|
|
78
|
+
* Use header() or setStatus() to mutate response headers/status.
|
|
79
|
+
* Use cookies().set()/cookies().delete() for cookie mutations.
|
|
58
80
|
*/
|
|
59
|
-
res: Response;
|
|
81
|
+
readonly res: Response;
|
|
60
82
|
|
|
61
|
-
/** Get a cookie value
|
|
83
|
+
/** @internal Get a cookie value (effective: request + response mutations). Use cookies().get() instead. */
|
|
62
84
|
cookie(name: string): string | undefined;
|
|
63
|
-
/** Get all cookies
|
|
85
|
+
/** @internal Get all cookies (effective merged view). Use cookies().getAll() instead. */
|
|
64
86
|
cookies(): Record<string, string>;
|
|
65
|
-
/** Set a cookie on the response */
|
|
87
|
+
/** @internal Set a cookie on the response. Use cookies().set() instead. */
|
|
66
88
|
setCookie(name: string, value: string, options?: CookieOptions): void;
|
|
67
|
-
/** Delete a cookie */
|
|
68
|
-
deleteCookie(
|
|
89
|
+
/** @internal Delete a cookie. Use cookies().delete() instead. */
|
|
90
|
+
deleteCookie(
|
|
91
|
+
name: string,
|
|
92
|
+
options?: Pick<CookieOptions, "domain" | "path">,
|
|
93
|
+
): void;
|
|
69
94
|
/** Set a response header */
|
|
70
95
|
header(name: string, value: string): void;
|
|
96
|
+
/** Set the response status code */
|
|
97
|
+
setStatus(status: number): void;
|
|
71
98
|
|
|
72
99
|
/**
|
|
73
100
|
* Access loader data or push handle data.
|
|
@@ -89,10 +116,12 @@ export interface RequestContext<
|
|
|
89
116
|
* ```
|
|
90
117
|
*/
|
|
91
118
|
use: {
|
|
92
|
-
<T, TLoaderParams = any>(
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
119
|
+
<T, TLoaderParams = any>(
|
|
120
|
+
loader: LoaderDefinition<T, TLoaderParams>,
|
|
121
|
+
): Promise<T>;
|
|
122
|
+
<TData, TAccumulated = TData[]>(
|
|
123
|
+
handle: Handle<TData, TAccumulated>,
|
|
124
|
+
): (data: TData | Promise<TData> | (() => Promise<TData>)) => void;
|
|
96
125
|
};
|
|
97
126
|
|
|
98
127
|
/** HTTP method (GET, POST, PUT, PATCH, DELETE, etc.) */
|
|
@@ -104,6 +133,12 @@ export interface RequestContext<
|
|
|
104
133
|
/** @internal Cache store for segment caching (optional, used by CacheScope) */
|
|
105
134
|
_cacheStore?: SegmentCacheStore;
|
|
106
135
|
|
|
136
|
+
/** @internal Cache profiles for "use cache" profile resolution (per-router) */
|
|
137
|
+
_cacheProfiles?: Record<
|
|
138
|
+
string,
|
|
139
|
+
import("../cache/profile-registry.js").CacheProfile
|
|
140
|
+
>;
|
|
141
|
+
|
|
107
142
|
/**
|
|
108
143
|
* Schedule work to run after the response is sent.
|
|
109
144
|
* On Cloudflare Workers, uses ctx.waitUntil().
|
|
@@ -177,8 +212,89 @@ export interface RequestContext<
|
|
|
177
212
|
|
|
178
213
|
/** @internal Theme configuration (null if theme not enabled) */
|
|
179
214
|
_themeConfig?: ResolvedThemeConfig | null;
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* Attach location state entries to the current response.
|
|
218
|
+
*
|
|
219
|
+
* For partial (SPA) requests, the state is included in the RSC payload
|
|
220
|
+
* metadata and merged into history.pushState on the client. For redirect
|
|
221
|
+
* responses, the state travels through the redirect payload so the target
|
|
222
|
+
* page can read it via useLocationState.
|
|
223
|
+
*
|
|
224
|
+
* Multiple calls accumulate entries.
|
|
225
|
+
*
|
|
226
|
+
* @example
|
|
227
|
+
* ```typescript
|
|
228
|
+
* ctx.setLocationState(Flash({ text: "Item saved!" }));
|
|
229
|
+
* ```
|
|
230
|
+
*/
|
|
231
|
+
setLocationState(entries: LocationStateEntry | LocationStateEntry[]): void;
|
|
232
|
+
|
|
233
|
+
/** @internal Accumulated location state entries */
|
|
234
|
+
_locationState?: LocationStateEntry[];
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* The matched route name, if the route has an explicit name.
|
|
238
|
+
* Undefined before route matching or for unnamed routes.
|
|
239
|
+
* Includes the namespace prefix from include() (e.g., "blog.post").
|
|
240
|
+
*/
|
|
241
|
+
routeName?: DefaultRouteName;
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* Generate URLs from route names.
|
|
245
|
+
* Uses the global route map. After route matching, scoped (`.name`) resolution
|
|
246
|
+
* works within the matched include() scope.
|
|
247
|
+
*/
|
|
248
|
+
reverse: ScopedReverseFunction<
|
|
249
|
+
Record<string, string>,
|
|
250
|
+
DefaultReverseRouteMap
|
|
251
|
+
>;
|
|
252
|
+
|
|
253
|
+
/** @internal Route name from route matching, used for scoped reverse resolution */
|
|
254
|
+
_routeName?: string;
|
|
255
|
+
|
|
256
|
+
/** @internal Previous route key (from the navigation source), used for revalidation */
|
|
257
|
+
_prevRouteKey?: string;
|
|
258
|
+
|
|
259
|
+
/** @internal Per-request error dedup set for onError reporting */
|
|
260
|
+
_reportedErrors: WeakSet<object>;
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* @internal Report a non-fatal background error through the router's
|
|
264
|
+
* onError callback. Wired by the RSC handler / router during request
|
|
265
|
+
* creation. Cache-runtime and other subsystems call this to surface
|
|
266
|
+
* errors without failing the response.
|
|
267
|
+
*/
|
|
268
|
+
_reportBackgroundError?: (error: unknown, category: string) => void;
|
|
180
269
|
}
|
|
181
270
|
|
|
271
|
+
/**
|
|
272
|
+
* Public view of RequestContext, without internal methods and fields.
|
|
273
|
+
*
|
|
274
|
+
* This is the type exported to library consumers. Internal code should
|
|
275
|
+
* use the full RequestContext interface directly.
|
|
276
|
+
*/
|
|
277
|
+
export type PublicRequestContext<
|
|
278
|
+
TEnv = DefaultEnv,
|
|
279
|
+
TParams = Record<string, string>,
|
|
280
|
+
> = Omit<
|
|
281
|
+
RequestContext<TEnv, TParams>,
|
|
282
|
+
| "cookie"
|
|
283
|
+
| "cookies"
|
|
284
|
+
| "setCookie"
|
|
285
|
+
| "deleteCookie"
|
|
286
|
+
| "_handleStore"
|
|
287
|
+
| "_cacheStore"
|
|
288
|
+
| "_cacheProfiles"
|
|
289
|
+
| "_onResponseCallbacks"
|
|
290
|
+
| "_themeConfig"
|
|
291
|
+
| "_locationState"
|
|
292
|
+
| "_routeName"
|
|
293
|
+
| "_prevRouteKey"
|
|
294
|
+
| "_reportedErrors"
|
|
295
|
+
| "_reportBackgroundError"
|
|
296
|
+
>;
|
|
297
|
+
|
|
182
298
|
// AsyncLocalStorage instance for request context
|
|
183
299
|
const requestContextStorage = new AsyncLocalStorage<RequestContext<any>>();
|
|
184
300
|
|
|
@@ -188,16 +304,33 @@ const requestContextStorage = new AsyncLocalStorage<RequestContext<any>>();
|
|
|
188
304
|
*/
|
|
189
305
|
export function runWithRequestContext<TEnv, T>(
|
|
190
306
|
context: RequestContext<TEnv>,
|
|
191
|
-
fn: () => T
|
|
307
|
+
fn: () => T,
|
|
192
308
|
): T {
|
|
193
309
|
return requestContextStorage.run(context, fn);
|
|
194
310
|
}
|
|
195
311
|
|
|
196
312
|
/**
|
|
197
313
|
* Get the current request context
|
|
198
|
-
*
|
|
314
|
+
* Throws if called outside of a request context
|
|
315
|
+
*/
|
|
316
|
+
export function getRequestContext<TEnv = DefaultEnv>(): RequestContext<TEnv> {
|
|
317
|
+
const ctx = requestContextStorage.getStore() as
|
|
318
|
+
| RequestContext<TEnv>
|
|
319
|
+
| undefined;
|
|
320
|
+
invariant(
|
|
321
|
+
ctx,
|
|
322
|
+
"getRequestContext() called outside of a request context. " +
|
|
323
|
+
"This function must be called from within a route handler, loader, middleware, " +
|
|
324
|
+
"server action, or server component.",
|
|
325
|
+
);
|
|
326
|
+
return ctx;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
/**
|
|
330
|
+
* @internal Get the request context without throwing — for internal code that
|
|
331
|
+
* may run outside a request context (cache stores, optional handle lookups, etc.)
|
|
199
332
|
*/
|
|
200
|
-
export function
|
|
333
|
+
export function _getRequestContext<TEnv = DefaultEnv>():
|
|
201
334
|
| RequestContext<TEnv>
|
|
202
335
|
| undefined {
|
|
203
336
|
return requestContextStorage.getStore() as RequestContext<TEnv> | undefined;
|
|
@@ -205,28 +338,67 @@ export function getRequestContext<TEnv = unknown>():
|
|
|
205
338
|
|
|
206
339
|
/**
|
|
207
340
|
* Update params on the current request context
|
|
208
|
-
* Called after route matching to populate route params
|
|
341
|
+
* Called after route matching to populate route params and route name
|
|
209
342
|
*/
|
|
210
|
-
export function setRequestContextParams(
|
|
343
|
+
export function setRequestContextParams(
|
|
344
|
+
params: Record<string, string>,
|
|
345
|
+
routeName?: string,
|
|
346
|
+
): void {
|
|
211
347
|
const ctx = requestContextStorage.getStore();
|
|
212
348
|
if (ctx) {
|
|
213
349
|
ctx.params = params;
|
|
350
|
+
if (routeName !== undefined) {
|
|
351
|
+
ctx._routeName = routeName;
|
|
352
|
+
ctx.routeName = (
|
|
353
|
+
routeName && !isAutoGeneratedRouteName(routeName)
|
|
354
|
+
? routeName
|
|
355
|
+
: undefined
|
|
356
|
+
) as DefaultRouteName | undefined;
|
|
357
|
+
}
|
|
358
|
+
// Update reverse with scoped resolution now that route is known
|
|
359
|
+
ctx.reverse = createReverseFunction(
|
|
360
|
+
getGlobalRouteMap(),
|
|
361
|
+
routeName,
|
|
362
|
+
params,
|
|
363
|
+
routeName ? isRouteRootScoped(routeName) : undefined,
|
|
364
|
+
);
|
|
214
365
|
}
|
|
215
366
|
}
|
|
216
367
|
|
|
217
368
|
/**
|
|
218
|
-
*
|
|
219
|
-
*
|
|
369
|
+
* Store the previous route key on the request context.
|
|
370
|
+
* Called during partial-match context creation to make the navigation source
|
|
371
|
+
* route key available for revalidation and intercept evaluation.
|
|
372
|
+
* @internal
|
|
220
373
|
*/
|
|
221
|
-
export function
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
);
|
|
374
|
+
export function setRequestContextPrevRouteKey(
|
|
375
|
+
prevRouteKey: string | undefined,
|
|
376
|
+
): void {
|
|
377
|
+
const ctx = requestContextStorage.getStore();
|
|
378
|
+
if (ctx && prevRouteKey !== undefined) {
|
|
379
|
+
ctx._prevRouteKey = prevRouteKey;
|
|
228
380
|
}
|
|
229
|
-
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
/**
|
|
384
|
+
* Get accumulated location state entries from the current request context.
|
|
385
|
+
* Returns undefined if no state has been set.
|
|
386
|
+
*
|
|
387
|
+
* @internal Used by the RSC handler to include state in payload metadata.
|
|
388
|
+
*/
|
|
389
|
+
export function getLocationState(): LocationStateEntry[] | undefined {
|
|
390
|
+
const ctx = getRequestContext();
|
|
391
|
+
return ctx?._locationState;
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
/**
|
|
395
|
+
* Get the current request context, throwing if not available
|
|
396
|
+
* @deprecated Use getRequestContext() directly — it now throws if outside context
|
|
397
|
+
*/
|
|
398
|
+
export function requireRequestContext<
|
|
399
|
+
TEnv = DefaultEnv,
|
|
400
|
+
>(): RequestContext<TEnv> {
|
|
401
|
+
return getRequestContext<TEnv>();
|
|
230
402
|
}
|
|
231
403
|
|
|
232
404
|
/**
|
|
@@ -245,8 +417,15 @@ export interface CreateRequestContextOptions<TEnv> {
|
|
|
245
417
|
request: Request;
|
|
246
418
|
url: URL;
|
|
247
419
|
variables: Record<string, any>;
|
|
420
|
+
/** Optional initial response stub headers/status to seed effective cookie reads */
|
|
421
|
+
initialResponse?: Response;
|
|
248
422
|
/** Optional cache store for segment caching (used by CacheScope) */
|
|
249
423
|
cacheStore?: SegmentCacheStore;
|
|
424
|
+
/** Optional cache profiles for "use cache" resolution (per-router) */
|
|
425
|
+
cacheProfiles?: Record<
|
|
426
|
+
string,
|
|
427
|
+
import("../cache/profile-registry.js").CacheProfile
|
|
428
|
+
>;
|
|
250
429
|
/** Optional Cloudflare execution context for waitUntil support */
|
|
251
430
|
executionContext?: ExecutionContext;
|
|
252
431
|
/** Optional theme configuration (enables ctx.theme and ctx.setTheme) */
|
|
@@ -262,20 +441,37 @@ export interface CreateRequestContextOptions<TEnv> {
|
|
|
262
441
|
* - Passed to handlers as ctx
|
|
263
442
|
*/
|
|
264
443
|
export function createRequestContext<TEnv>(
|
|
265
|
-
options: CreateRequestContextOptions<TEnv
|
|
444
|
+
options: CreateRequestContextOptions<TEnv>,
|
|
266
445
|
): RequestContext<TEnv> {
|
|
267
|
-
const {
|
|
446
|
+
const {
|
|
447
|
+
env,
|
|
448
|
+
request,
|
|
449
|
+
url,
|
|
450
|
+
variables,
|
|
451
|
+
initialResponse,
|
|
452
|
+
cacheStore,
|
|
453
|
+
cacheProfiles,
|
|
454
|
+
executionContext,
|
|
455
|
+
themeConfig,
|
|
456
|
+
} = options;
|
|
268
457
|
const cookieHeader = request.headers.get("Cookie");
|
|
269
458
|
let parsedCookies: Record<string, string> | null = null;
|
|
270
459
|
|
|
271
|
-
// Create stub response for collecting headers/cookies
|
|
272
|
-
|
|
460
|
+
// Create stub response for collecting headers/cookies.
|
|
461
|
+
// All cookie/header mutations go here; cookie reads derive from it.
|
|
462
|
+
let stubResponse = initialResponse
|
|
463
|
+
? new Response(null, {
|
|
464
|
+
status: initialResponse.status,
|
|
465
|
+
statusText: initialResponse.statusText,
|
|
466
|
+
headers: new Headers(initialResponse.headers),
|
|
467
|
+
})
|
|
468
|
+
: new Response(null, { status: 200 });
|
|
273
469
|
|
|
274
470
|
// Create handle store and loader memoization for this request
|
|
275
471
|
const handleStore = createHandleStore();
|
|
276
472
|
const loaderPromises = new Map<string, Promise<any>>();
|
|
277
473
|
|
|
278
|
-
// Lazy parse cookies
|
|
474
|
+
// Lazy parse cookies from the original Cookie header
|
|
279
475
|
const getParsedCookies = (): Record<string, string> => {
|
|
280
476
|
if (!parsedCookies) {
|
|
281
477
|
parsedCookies = parseCookiesFromHeader(cookieHeader);
|
|
@@ -283,11 +479,35 @@ export function createRequestContext<TEnv>(
|
|
|
283
479
|
return parsedCookies;
|
|
284
480
|
};
|
|
285
481
|
|
|
482
|
+
// Cached response cookie mutations — invalidated on setCookie/deleteCookie/setTheme
|
|
483
|
+
let responseCookieCache: Map<string, string | null> | null = null;
|
|
484
|
+
const getResponseCookies = (): Map<string, string | null> => {
|
|
485
|
+
if (!responseCookieCache) {
|
|
486
|
+
responseCookieCache = parseResponseCookies(stubResponse);
|
|
487
|
+
}
|
|
488
|
+
return responseCookieCache;
|
|
489
|
+
};
|
|
490
|
+
const invalidateResponseCookieCache = () => {
|
|
491
|
+
responseCookieCache = null;
|
|
492
|
+
};
|
|
493
|
+
|
|
494
|
+
// Effective cookie read: response stub Set-Cookie wins, then original header.
|
|
495
|
+
// The stub IS the source of truth for same-request mutations.
|
|
496
|
+
const effectiveCookie = (name: string): string | undefined => {
|
|
497
|
+
const mutations = getResponseCookies();
|
|
498
|
+
if (mutations.has(name)) {
|
|
499
|
+
const v = mutations.get(name);
|
|
500
|
+
return v === null ? undefined : v;
|
|
501
|
+
}
|
|
502
|
+
return getParsedCookies()[name];
|
|
503
|
+
};
|
|
504
|
+
|
|
286
505
|
// Theme helpers (only used when themeConfig is provided)
|
|
287
506
|
const getTheme = (): Theme | undefined => {
|
|
288
507
|
if (!themeConfig) return undefined;
|
|
289
508
|
|
|
290
|
-
|
|
509
|
+
// Use overlay-aware read so setTheme() in the same request is reflected
|
|
510
|
+
const stored = effectiveCookie(themeConfig.storageKey);
|
|
291
511
|
if (stored) {
|
|
292
512
|
// Validate stored value
|
|
293
513
|
if (stored === "system" && themeConfig.enableSystem) {
|
|
@@ -305,19 +525,22 @@ export function createRequestContext<TEnv>(
|
|
|
305
525
|
|
|
306
526
|
// Validate theme value
|
|
307
527
|
if (theme !== "system" && !themeConfig.themes.includes(theme)) {
|
|
308
|
-
console.warn(
|
|
528
|
+
console.warn(
|
|
529
|
+
`[Theme] Invalid theme value: "${theme}". Valid values: system, ${themeConfig.themes.join(", ")}`,
|
|
530
|
+
);
|
|
309
531
|
return;
|
|
310
532
|
}
|
|
311
533
|
|
|
312
|
-
//
|
|
534
|
+
// Write to stub — effectiveCookie() will pick it up on next read
|
|
313
535
|
stubResponse.headers.append(
|
|
314
536
|
"Set-Cookie",
|
|
315
537
|
serializeCookieValue(themeConfig.storageKey, theme, {
|
|
316
538
|
path: THEME_COOKIE.path,
|
|
317
539
|
maxAge: THEME_COOKIE.maxAge,
|
|
318
540
|
sameSite: THEME_COOKIE.sameSite,
|
|
319
|
-
})
|
|
541
|
+
}),
|
|
320
542
|
);
|
|
543
|
+
invalidateResponseCookieCache();
|
|
321
544
|
};
|
|
322
545
|
|
|
323
546
|
// Build the context object first (without use), then add use
|
|
@@ -328,42 +551,82 @@ export function createRequestContext<TEnv>(
|
|
|
328
551
|
pathname: url.pathname,
|
|
329
552
|
searchParams: url.searchParams,
|
|
330
553
|
var: variables,
|
|
331
|
-
get:
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
554
|
+
get: ((keyOrVar: any) =>
|
|
555
|
+
contextGet(variables, keyOrVar)) as RequestContext<TEnv>["get"],
|
|
556
|
+
set: ((keyOrVar: any, value: any) => {
|
|
557
|
+
assertNotInsideCacheExec(ctx, "set");
|
|
558
|
+
contextSet(variables, keyOrVar, value);
|
|
559
|
+
}) as RequestContext<TEnv>["set"],
|
|
335
560
|
params: {} as Record<string, string>,
|
|
336
|
-
|
|
561
|
+
|
|
562
|
+
get res(): Response {
|
|
563
|
+
return stubResponse;
|
|
564
|
+
},
|
|
565
|
+
set res(_: Response) {
|
|
566
|
+
throw new Error(
|
|
567
|
+
"ctx.res is read-only. Use ctx.header() to set response headers, or cookies() for cookie mutations.",
|
|
568
|
+
);
|
|
569
|
+
},
|
|
337
570
|
|
|
338
571
|
cookie(name: string): string | undefined {
|
|
339
|
-
return
|
|
572
|
+
return effectiveCookie(name);
|
|
340
573
|
},
|
|
341
574
|
|
|
342
575
|
cookies(): Record<string, string> {
|
|
343
|
-
|
|
576
|
+
const parsed = getParsedCookies();
|
|
577
|
+
const mutations = getResponseCookies();
|
|
578
|
+
if (mutations.size === 0) return { ...parsed };
|
|
579
|
+
// Build result without delete (avoids V8 dictionary-mode de-opt)
|
|
580
|
+
const deleted = new Set<string>();
|
|
581
|
+
for (const [k, v] of mutations) {
|
|
582
|
+
if (v === null) deleted.add(k);
|
|
583
|
+
}
|
|
584
|
+
const result: Record<string, string> = {};
|
|
585
|
+
for (const key of Object.keys(parsed)) {
|
|
586
|
+
if (!deleted.has(key)) result[key] = parsed[key];
|
|
587
|
+
}
|
|
588
|
+
for (const [k, v] of mutations) {
|
|
589
|
+
if (v !== null) result[k] = v;
|
|
590
|
+
}
|
|
591
|
+
return result;
|
|
344
592
|
},
|
|
345
593
|
|
|
346
594
|
setCookie(name: string, value: string, options?: CookieOptions): void {
|
|
595
|
+
assertNotInsideCacheExec(ctx, "setCookie");
|
|
347
596
|
stubResponse.headers.append(
|
|
348
597
|
"Set-Cookie",
|
|
349
|
-
serializeCookieValue(name, value, options)
|
|
598
|
+
serializeCookieValue(name, value, options),
|
|
350
599
|
);
|
|
600
|
+
invalidateResponseCookieCache();
|
|
351
601
|
},
|
|
352
602
|
|
|
353
603
|
deleteCookie(
|
|
354
604
|
name: string,
|
|
355
|
-
options?: Pick<CookieOptions, "domain" | "path"
|
|
605
|
+
options?: Pick<CookieOptions, "domain" | "path">,
|
|
356
606
|
): void {
|
|
607
|
+
assertNotInsideCacheExec(ctx, "deleteCookie");
|
|
357
608
|
stubResponse.headers.append(
|
|
358
609
|
"Set-Cookie",
|
|
359
|
-
serializeCookieValue(name, "", { ...options, maxAge: 0 })
|
|
610
|
+
serializeCookieValue(name, "", { ...options, maxAge: 0 }),
|
|
360
611
|
);
|
|
612
|
+
invalidateResponseCookieCache();
|
|
361
613
|
},
|
|
362
614
|
|
|
363
615
|
header(name: string, value: string): void {
|
|
616
|
+
assertNotInsideCacheExec(ctx, "header");
|
|
364
617
|
stubResponse.headers.set(name, value);
|
|
365
618
|
},
|
|
366
619
|
|
|
620
|
+
setStatus(status: number): void {
|
|
621
|
+
assertNotInsideCacheExec(ctx, "setStatus");
|
|
622
|
+
// Response.status is read-only, so we must create a new Response.
|
|
623
|
+
// Headers are passed by reference — no cookie cache invalidation needed.
|
|
624
|
+
stubResponse = new Response(null, {
|
|
625
|
+
status,
|
|
626
|
+
headers: stubResponse.headers,
|
|
627
|
+
});
|
|
628
|
+
},
|
|
629
|
+
|
|
367
630
|
// Placeholder - will be replaced below
|
|
368
631
|
use: null as any,
|
|
369
632
|
|
|
@@ -371,6 +634,7 @@ export function createRequestContext<TEnv>(
|
|
|
371
634
|
|
|
372
635
|
_handleStore: handleStore,
|
|
373
636
|
_cacheStore: cacheStore,
|
|
637
|
+
_cacheProfiles: cacheProfiles,
|
|
374
638
|
|
|
375
639
|
waitUntil(fn: () => Promise<void>): void {
|
|
376
640
|
if (executionContext?.waitUntil) {
|
|
@@ -378,20 +642,43 @@ export function createRequestContext<TEnv>(
|
|
|
378
642
|
executionContext.waitUntil(fn());
|
|
379
643
|
} else {
|
|
380
644
|
// Node.js / dev: fire-and-forget with error logging
|
|
381
|
-
fn().catch((err) =>
|
|
645
|
+
fn().catch((err) =>
|
|
646
|
+
console.error("[waitUntil] Background task failed:", err),
|
|
647
|
+
);
|
|
382
648
|
}
|
|
383
649
|
},
|
|
384
650
|
|
|
385
651
|
_onResponseCallbacks: [],
|
|
386
652
|
|
|
387
653
|
onResponse(callback: (response: Response) => Response): void {
|
|
654
|
+
assertNotInsideCacheExec(ctx, "onResponse");
|
|
388
655
|
this._onResponseCallbacks.push(callback);
|
|
389
656
|
},
|
|
390
657
|
|
|
391
658
|
// Theme properties (only set when themeConfig is provided)
|
|
392
|
-
theme
|
|
393
|
-
|
|
659
|
+
get theme() {
|
|
660
|
+
return themeConfig ? getTheme() : undefined;
|
|
661
|
+
},
|
|
662
|
+
setTheme: themeConfig
|
|
663
|
+
? (theme: Theme) => {
|
|
664
|
+
assertNotInsideCacheExec(ctx, "setTheme");
|
|
665
|
+
setTheme(theme);
|
|
666
|
+
}
|
|
667
|
+
: undefined,
|
|
394
668
|
_themeConfig: themeConfig,
|
|
669
|
+
|
|
670
|
+
setLocationState(entries: LocationStateEntry | LocationStateEntry[]): void {
|
|
671
|
+
assertNotInsideCacheExec(ctx, "setLocationState");
|
|
672
|
+
const arr = Array.isArray(entries) ? entries : [entries];
|
|
673
|
+
this._locationState = this._locationState
|
|
674
|
+
? [...this._locationState, ...arr]
|
|
675
|
+
: arr;
|
|
676
|
+
},
|
|
677
|
+
_locationState: undefined,
|
|
678
|
+
|
|
679
|
+
_reportedErrors: new WeakSet<object>(),
|
|
680
|
+
|
|
681
|
+
reverse: createReverseFunction(getGlobalRouteMap(), undefined, {}),
|
|
395
682
|
};
|
|
396
683
|
|
|
397
684
|
// Now create use() with access to ctx
|
|
@@ -401,14 +688,53 @@ export function createRequestContext<TEnv>(
|
|
|
401
688
|
getContext: () => ctx,
|
|
402
689
|
});
|
|
403
690
|
|
|
691
|
+
// Brand with taint symbol so "use cache" excludes ctx from cache keys
|
|
692
|
+
(ctx as any)[NOCACHE_SYMBOL] = true;
|
|
404
693
|
return ctx;
|
|
405
694
|
}
|
|
406
695
|
|
|
696
|
+
/**
|
|
697
|
+
* Parse Set-Cookie headers from a response into effective cookie state.
|
|
698
|
+
* Returns a map of cookie name -> value (string) or name -> null (deleted).
|
|
699
|
+
* Last-write-wins: later Set-Cookie entries for the same name overwrite earlier ones.
|
|
700
|
+
* Max-Age=0 is treated as a delete.
|
|
701
|
+
*/
|
|
702
|
+
const MAX_AGE_ZERO_RE = /;\s*Max-Age\s*=\s*0/i;
|
|
703
|
+
|
|
704
|
+
function parseResponseCookies(response: Response): Map<string, string | null> {
|
|
705
|
+
const result = new Map<string, string | null>();
|
|
706
|
+
const setCookies = response.headers.getSetCookie();
|
|
707
|
+
|
|
708
|
+
for (const header of setCookies) {
|
|
709
|
+
// First segment before ';' is the name=value pair
|
|
710
|
+
const semiIdx = header.indexOf(";");
|
|
711
|
+
const pair = semiIdx === -1 ? header : header.substring(0, semiIdx);
|
|
712
|
+
const eqIdx = pair.indexOf("=");
|
|
713
|
+
if (eqIdx === -1) continue;
|
|
714
|
+
|
|
715
|
+
let name: string;
|
|
716
|
+
let value: string;
|
|
717
|
+
try {
|
|
718
|
+
name = decodeURIComponent(pair.substring(0, eqIdx).trim());
|
|
719
|
+
value = decodeURIComponent(pair.substring(eqIdx + 1).trim());
|
|
720
|
+
} catch {
|
|
721
|
+
// Malformed encoding — skip this entry
|
|
722
|
+
continue;
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
// Max-Age=0 means the cookie is being deleted
|
|
726
|
+
const isDeleted = MAX_AGE_ZERO_RE.test(header);
|
|
727
|
+
result.set(name, isDeleted ? null : value);
|
|
728
|
+
}
|
|
729
|
+
|
|
730
|
+
return result;
|
|
731
|
+
}
|
|
732
|
+
|
|
407
733
|
/**
|
|
408
734
|
* Parse cookies from Cookie header
|
|
409
735
|
*/
|
|
410
736
|
function parseCookiesFromHeader(
|
|
411
|
-
cookieHeader: string | null
|
|
737
|
+
cookieHeader: string | null,
|
|
412
738
|
): Record<string, string> {
|
|
413
739
|
if (!cookieHeader) return {};
|
|
414
740
|
|
|
@@ -418,7 +744,13 @@ function parseCookiesFromHeader(
|
|
|
418
744
|
for (const pair of pairs) {
|
|
419
745
|
const [name, ...rest] = pair.trim().split("=");
|
|
420
746
|
if (name) {
|
|
421
|
-
|
|
747
|
+
const raw = rest.join("=");
|
|
748
|
+
try {
|
|
749
|
+
cookies[name] = decodeURIComponent(raw);
|
|
750
|
+
} catch {
|
|
751
|
+
// Malformed percent-encoded value (e.g. %zz, %2) - fall back to raw value
|
|
752
|
+
cookies[name] = raw;
|
|
753
|
+
}
|
|
422
754
|
}
|
|
423
755
|
}
|
|
424
756
|
|
|
@@ -431,7 +763,7 @@ function parseCookiesFromHeader(
|
|
|
431
763
|
function serializeCookieValue(
|
|
432
764
|
name: string,
|
|
433
765
|
value: string,
|
|
434
|
-
options: CookieOptions = {}
|
|
766
|
+
options: CookieOptions = {},
|
|
435
767
|
): string {
|
|
436
768
|
let cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;
|
|
437
769
|
|
|
@@ -463,7 +795,7 @@ export interface CreateUseFunctionOptions<TEnv> {
|
|
|
463
795
|
* - For handles: returns a push function to add handle data
|
|
464
796
|
*/
|
|
465
797
|
export function createUseFunction<TEnv>(
|
|
466
|
-
options: CreateUseFunctionOptions<TEnv
|
|
798
|
+
options: CreateUseFunctionOptions<TEnv>,
|
|
467
799
|
): RequestContext["use"] {
|
|
468
800
|
const { handleStore, loaderPromises, getContext } = options;
|
|
469
801
|
|
|
@@ -477,16 +809,19 @@ export function createUseFunction<TEnv>(
|
|
|
477
809
|
if (!segmentId) {
|
|
478
810
|
throw new Error(
|
|
479
811
|
`Handle "${handle.$$id}" used outside of handler context. ` +
|
|
480
|
-
`Handles must be used within route/layout handlers
|
|
812
|
+
`Handles must be used within route/layout handlers.`,
|
|
481
813
|
);
|
|
482
814
|
}
|
|
483
815
|
|
|
484
816
|
// Return a push function bound to this handle and segment
|
|
485
|
-
return (
|
|
817
|
+
return (
|
|
818
|
+
dataOrFn: unknown | Promise<unknown> | (() => Promise<unknown>),
|
|
819
|
+
) => {
|
|
486
820
|
// If it's a function, call it immediately to get the promise
|
|
487
|
-
const valueOrPromise =
|
|
488
|
-
|
|
489
|
-
|
|
821
|
+
const valueOrPromise =
|
|
822
|
+
typeof dataOrFn === "function"
|
|
823
|
+
? (dataOrFn as () => Promise<unknown>)()
|
|
824
|
+
: dataOrFn;
|
|
490
825
|
|
|
491
826
|
// Push directly - promises will be serialized by RSC and streamed
|
|
492
827
|
handleStore.push(handle.$$id, segmentId, valueOrPromise);
|
|
@@ -504,8 +839,6 @@ export function createUseFunction<TEnv>(
|
|
|
504
839
|
// Get loader function - either from loader object or fetchable registry
|
|
505
840
|
let loaderFn = loader.fn;
|
|
506
841
|
if (!loaderFn) {
|
|
507
|
-
// Lazy import to avoid circular dependency
|
|
508
|
-
const { getFetchableLoader } = require("../loader.rsc.js");
|
|
509
842
|
const fetchable = getFetchableLoader(loader.$$id);
|
|
510
843
|
if (fetchable) {
|
|
511
844
|
loaderFn = fetchable.fn;
|
|
@@ -514,7 +847,7 @@ export function createUseFunction<TEnv>(
|
|
|
514
847
|
|
|
515
848
|
if (!loaderFn) {
|
|
516
849
|
throw new Error(
|
|
517
|
-
`Loader "${loader.$$id}" has no function. This usually means the loader was defined without "use server" and the function was not included in the build
|
|
850
|
+
`Loader "${loader.$$id}" has no function. This usually means the loader was defined without "use server" and the function was not included in the build.`,
|
|
518
851
|
);
|
|
519
852
|
}
|
|
520
853
|
|
|
@@ -523,21 +856,29 @@ export function createUseFunction<TEnv>(
|
|
|
523
856
|
// Create loader context with recursive use() support
|
|
524
857
|
const loaderCtx: LoaderContext<Record<string, string | undefined>, TEnv> = {
|
|
525
858
|
params: ctx.params,
|
|
859
|
+
routeParams: (ctx.params ?? {}) as Record<string, string>,
|
|
526
860
|
request: ctx.request,
|
|
527
861
|
searchParams: ctx.searchParams,
|
|
862
|
+
search: (ctx as any).search ?? {},
|
|
528
863
|
pathname: ctx.pathname,
|
|
529
864
|
url: ctx.url,
|
|
530
865
|
env: ctx.env as any,
|
|
531
866
|
var: ctx.var as any,
|
|
532
867
|
get: ctx.get as any,
|
|
533
868
|
use: <TDep, TDepParams = any>(
|
|
534
|
-
dep: LoaderDefinition<TDep, TDepParams
|
|
869
|
+
dep: LoaderDefinition<TDep, TDepParams>,
|
|
535
870
|
): Promise<TDep> => {
|
|
536
871
|
// Recursive call - will start dep loader if not already started
|
|
537
872
|
return ctx.use(dep);
|
|
538
873
|
},
|
|
539
874
|
method: "GET",
|
|
540
875
|
body: undefined,
|
|
876
|
+
reverse: createReverseFunction(
|
|
877
|
+
getGlobalRouteMap(),
|
|
878
|
+
ctx._routeName,
|
|
879
|
+
ctx.params as Record<string, string>,
|
|
880
|
+
ctx._routeName ? isRouteRootScoped(ctx._routeName) : undefined,
|
|
881
|
+
),
|
|
541
882
|
};
|
|
542
883
|
|
|
543
884
|
// Start loader execution with tracking
|