@rangojs/router 0.0.0-experimental.42 → 0.0.0-experimental.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/rango.js +8 -3
- package/dist/vite/index.js +136 -197
- package/package.json +1 -1
- package/skills/caching/SKILL.md +37 -4
- package/src/browser/event-controller.ts +5 -0
- package/src/browser/navigation-bridge.ts +1 -11
- package/src/browser/navigation-client.ts +70 -24
- package/src/browser/navigation-transaction.ts +11 -9
- package/src/browser/partial-update.ts +39 -9
- package/src/browser/prefetch/cache.ts +54 -2
- package/src/browser/prefetch/fetch.ts +22 -12
- package/src/browser/prefetch/queue.ts +53 -13
- package/src/browser/react/Link.tsx +9 -1
- package/src/browser/react/NavigationProvider.tsx +27 -0
- package/src/browser/rsc-router.tsx +109 -57
- package/src/browser/scroll-restoration.ts +20 -11
- package/src/browser/types.ts +9 -0
- package/src/build/route-types/router-processing.ts +12 -2
- package/src/cache/cache-scope.ts +2 -2
- package/src/cache/cf/cf-cache-store.ts +453 -11
- package/src/cache/cf/index.ts +5 -1
- package/src/cache/index.ts +1 -0
- package/src/route-definition/redirect.ts +2 -2
- package/src/router/middleware.ts +2 -1
- package/src/server/request-context.ts +10 -4
- package/src/ssr/index.tsx +1 -0
- package/src/vite/discovery/state.ts +0 -2
- package/src/vite/plugin-types.ts +0 -83
- package/src/vite/plugins/expose-action-id.ts +1 -3
- package/src/vite/plugins/version-plugin.ts +13 -1
- package/src/vite/rango.ts +144 -209
- package/src/vite/router-discovery.ts +0 -8
- package/dist/__internal.d.ts +0 -83
- package/dist/__internal.d.ts.map +0 -1
- package/dist/__internal.js +0 -19
- package/dist/__internal.js.map +0 -1
- package/dist/__mocks__/version.d.ts +0 -7
- package/dist/__mocks__/version.d.ts.map +0 -1
- package/dist/__mocks__/version.js +0 -7
- package/dist/__mocks__/version.js.map +0 -1
- package/dist/__tests__/client-href.test.d.ts +0 -2
- package/dist/__tests__/client-href.test.d.ts.map +0 -1
- package/dist/__tests__/client-href.test.js +0 -74
- package/dist/__tests__/client-href.test.js.map +0 -1
- package/dist/__tests__/component-utils.test.d.ts +0 -2
- package/dist/__tests__/component-utils.test.d.ts.map +0 -1
- package/dist/__tests__/component-utils.test.js +0 -51
- package/dist/__tests__/component-utils.test.js.map +0 -1
- package/dist/__tests__/event-controller.test.d.ts +0 -2
- package/dist/__tests__/event-controller.test.d.ts.map +0 -1
- package/dist/__tests__/event-controller.test.js +0 -538
- package/dist/__tests__/event-controller.test.js.map +0 -1
- package/dist/__tests__/helpers/route-tree.d.ts +0 -118
- package/dist/__tests__/helpers/route-tree.d.ts.map +0 -1
- package/dist/__tests__/helpers/route-tree.js +0 -374
- package/dist/__tests__/helpers/route-tree.js.map +0 -1
- package/dist/__tests__/match-result.test.d.ts +0 -2
- package/dist/__tests__/match-result.test.d.ts.map +0 -1
- package/dist/__tests__/match-result.test.js +0 -154
- package/dist/__tests__/match-result.test.js.map +0 -1
- package/dist/__tests__/navigation-store.test.d.ts +0 -2
- package/dist/__tests__/navigation-store.test.d.ts.map +0 -1
- package/dist/__tests__/navigation-store.test.js +0 -440
- package/dist/__tests__/navigation-store.test.js.map +0 -1
- package/dist/__tests__/partial-update.test.d.ts +0 -2
- package/dist/__tests__/partial-update.test.d.ts.map +0 -1
- package/dist/__tests__/partial-update.test.js +0 -1009
- package/dist/__tests__/partial-update.test.js.map +0 -1
- package/dist/__tests__/reverse-types.test.d.ts +0 -8
- package/dist/__tests__/reverse-types.test.d.ts.map +0 -1
- package/dist/__tests__/reverse-types.test.js +0 -656
- package/dist/__tests__/reverse-types.test.js.map +0 -1
- package/dist/__tests__/route-definition.test.d.ts +0 -2
- package/dist/__tests__/route-definition.test.d.ts.map +0 -1
- package/dist/__tests__/route-definition.test.js +0 -55
- package/dist/__tests__/route-definition.test.js.map +0 -1
- package/dist/__tests__/router-helpers.test.d.ts +0 -2
- package/dist/__tests__/router-helpers.test.d.ts.map +0 -1
- package/dist/__tests__/router-helpers.test.js +0 -377
- package/dist/__tests__/router-helpers.test.js.map +0 -1
- package/dist/__tests__/router-integration-2.test.d.ts +0 -2
- package/dist/__tests__/router-integration-2.test.d.ts.map +0 -1
- package/dist/__tests__/router-integration-2.test.js +0 -426
- package/dist/__tests__/router-integration-2.test.js.map +0 -1
- package/dist/__tests__/router-integration.test.d.ts +0 -2
- package/dist/__tests__/router-integration.test.d.ts.map +0 -1
- package/dist/__tests__/router-integration.test.js +0 -1051
- package/dist/__tests__/router-integration.test.js.map +0 -1
- package/dist/__tests__/search-params.test.d.ts +0 -5
- package/dist/__tests__/search-params.test.d.ts.map +0 -1
- package/dist/__tests__/search-params.test.js +0 -306
- package/dist/__tests__/search-params.test.js.map +0 -1
- package/dist/__tests__/segment-system.test.d.ts +0 -2
- package/dist/__tests__/segment-system.test.d.ts.map +0 -1
- package/dist/__tests__/segment-system.test.js +0 -627
- package/dist/__tests__/segment-system.test.js.map +0 -1
- package/dist/__tests__/static-handler-types.test.d.ts +0 -8
- package/dist/__tests__/static-handler-types.test.d.ts.map +0 -1
- package/dist/__tests__/static-handler-types.test.js +0 -63
- package/dist/__tests__/static-handler-types.test.js.map +0 -1
- package/dist/__tests__/urls.test.d.ts +0 -2
- package/dist/__tests__/urls.test.d.ts.map +0 -1
- package/dist/__tests__/urls.test.js +0 -421
- package/dist/__tests__/urls.test.js.map +0 -1
- package/dist/__tests__/use-mount.test.d.ts +0 -2
- package/dist/__tests__/use-mount.test.d.ts.map +0 -1
- package/dist/__tests__/use-mount.test.js +0 -35
- package/dist/__tests__/use-mount.test.js.map +0 -1
- package/dist/bin/rango.d.ts +0 -2
- package/dist/bin/rango.d.ts.map +0 -1
- package/dist/bin/rango.js.map +0 -1
- package/dist/browser/event-controller.d.ts +0 -191
- package/dist/browser/event-controller.d.ts.map +0 -1
- package/dist/browser/event-controller.js +0 -559
- package/dist/browser/event-controller.js.map +0 -1
- package/dist/browser/index.d.ts +0 -2
- package/dist/browser/index.d.ts.map +0 -1
- package/dist/browser/index.js +0 -14
- package/dist/browser/index.js.map +0 -1
- package/dist/browser/link-interceptor.d.ts +0 -38
- package/dist/browser/link-interceptor.d.ts.map +0 -1
- package/dist/browser/link-interceptor.js +0 -99
- package/dist/browser/link-interceptor.js.map +0 -1
- package/dist/browser/logging.d.ts +0 -10
- package/dist/browser/logging.d.ts.map +0 -1
- package/dist/browser/logging.js +0 -29
- package/dist/browser/logging.js.map +0 -1
- package/dist/browser/lru-cache.d.ts +0 -17
- package/dist/browser/lru-cache.d.ts.map +0 -1
- package/dist/browser/lru-cache.js +0 -50
- package/dist/browser/lru-cache.js.map +0 -1
- package/dist/browser/merge-segment-loaders.d.ts +0 -39
- package/dist/browser/merge-segment-loaders.d.ts.map +0 -1
- package/dist/browser/merge-segment-loaders.js +0 -102
- package/dist/browser/merge-segment-loaders.js.map +0 -1
- package/dist/browser/navigation-bridge.d.ts +0 -102
- package/dist/browser/navigation-bridge.d.ts.map +0 -1
- package/dist/browser/navigation-bridge.js +0 -708
- package/dist/browser/navigation-bridge.js.map +0 -1
- package/dist/browser/navigation-client.d.ts +0 -25
- package/dist/browser/navigation-client.d.ts.map +0 -1
- package/dist/browser/navigation-client.js +0 -157
- package/dist/browser/navigation-client.js.map +0 -1
- package/dist/browser/navigation-store.d.ts +0 -101
- package/dist/browser/navigation-store.d.ts.map +0 -1
- package/dist/browser/navigation-store.js +0 -625
- package/dist/browser/navigation-store.js.map +0 -1
- package/dist/browser/partial-update.d.ts +0 -75
- package/dist/browser/partial-update.d.ts.map +0 -1
- package/dist/browser/partial-update.js +0 -426
- package/dist/browser/partial-update.js.map +0 -1
- package/dist/browser/react/Link.d.ts +0 -86
- package/dist/browser/react/Link.d.ts.map +0 -1
- package/dist/browser/react/Link.js +0 -128
- package/dist/browser/react/Link.js.map +0 -1
- package/dist/browser/react/NavigationProvider.d.ts +0 -63
- package/dist/browser/react/NavigationProvider.d.ts.map +0 -1
- package/dist/browser/react/NavigationProvider.js +0 -216
- package/dist/browser/react/NavigationProvider.js.map +0 -1
- package/dist/browser/react/ScrollRestoration.d.ts +0 -75
- package/dist/browser/react/ScrollRestoration.d.ts.map +0 -1
- package/dist/browser/react/ScrollRestoration.js +0 -57
- package/dist/browser/react/ScrollRestoration.js.map +0 -1
- package/dist/browser/react/context.d.ts +0 -46
- package/dist/browser/react/context.d.ts.map +0 -1
- package/dist/browser/react/context.js +0 -10
- package/dist/browser/react/context.js.map +0 -1
- package/dist/browser/react/index.d.ts +0 -11
- package/dist/browser/react/index.d.ts.map +0 -1
- package/dist/browser/react/index.js +0 -22
- package/dist/browser/react/index.js.map +0 -1
- package/dist/browser/react/location-state-shared.d.ts +0 -63
- package/dist/browser/react/location-state-shared.d.ts.map +0 -1
- package/dist/browser/react/location-state-shared.js +0 -81
- package/dist/browser/react/location-state-shared.js.map +0 -1
- package/dist/browser/react/location-state.d.ts +0 -23
- package/dist/browser/react/location-state.d.ts.map +0 -1
- package/dist/browser/react/location-state.js +0 -29
- package/dist/browser/react/location-state.js.map +0 -1
- package/dist/browser/react/mount-context.d.ts +0 -24
- package/dist/browser/react/mount-context.d.ts.map +0 -1
- package/dist/browser/react/mount-context.js +0 -24
- package/dist/browser/react/mount-context.js.map +0 -1
- package/dist/browser/react/use-action.d.ts +0 -64
- package/dist/browser/react/use-action.d.ts.map +0 -1
- package/dist/browser/react/use-action.js +0 -134
- package/dist/browser/react/use-action.js.map +0 -1
- package/dist/browser/react/use-client-cache.d.ts +0 -41
- package/dist/browser/react/use-client-cache.d.ts.map +0 -1
- package/dist/browser/react/use-client-cache.js +0 -39
- package/dist/browser/react/use-client-cache.js.map +0 -1
- package/dist/browser/react/use-handle.d.ts +0 -31
- package/dist/browser/react/use-handle.d.ts.map +0 -1
- package/dist/browser/react/use-handle.js +0 -144
- package/dist/browser/react/use-handle.js.map +0 -1
- package/dist/browser/react/use-href.d.ts +0 -33
- package/dist/browser/react/use-href.d.ts.map +0 -1
- package/dist/browser/react/use-href.js +0 -39
- package/dist/browser/react/use-href.js.map +0 -1
- package/dist/browser/react/use-link-status.d.ts +0 -37
- package/dist/browser/react/use-link-status.d.ts.map +0 -1
- package/dist/browser/react/use-link-status.js +0 -99
- package/dist/browser/react/use-link-status.js.map +0 -1
- package/dist/browser/react/use-mount.d.ts +0 -25
- package/dist/browser/react/use-mount.d.ts.map +0 -1
- package/dist/browser/react/use-mount.js +0 -30
- package/dist/browser/react/use-mount.js.map +0 -1
- package/dist/browser/react/use-navigation.d.ts +0 -27
- package/dist/browser/react/use-navigation.d.ts.map +0 -1
- package/dist/browser/react/use-navigation.js +0 -87
- package/dist/browser/react/use-navigation.js.map +0 -1
- package/dist/browser/react/use-segments.d.ts +0 -38
- package/dist/browser/react/use-segments.d.ts.map +0 -1
- package/dist/browser/react/use-segments.js +0 -130
- package/dist/browser/react/use-segments.js.map +0 -1
- package/dist/browser/request-controller.d.ts +0 -26
- package/dist/browser/request-controller.d.ts.map +0 -1
- package/dist/browser/request-controller.js +0 -147
- package/dist/browser/request-controller.js.map +0 -1
- package/dist/browser/rsc-router.d.ts +0 -129
- package/dist/browser/rsc-router.d.ts.map +0 -1
- package/dist/browser/rsc-router.js +0 -195
- package/dist/browser/rsc-router.js.map +0 -1
- package/dist/browser/scroll-restoration.d.ts +0 -93
- package/dist/browser/scroll-restoration.d.ts.map +0 -1
- package/dist/browser/scroll-restoration.js +0 -321
- package/dist/browser/scroll-restoration.js.map +0 -1
- package/dist/browser/segment-structure-assert.d.ts +0 -17
- package/dist/browser/segment-structure-assert.d.ts.map +0 -1
- package/dist/browser/segment-structure-assert.js +0 -59
- package/dist/browser/segment-structure-assert.js.map +0 -1
- package/dist/browser/server-action-bridge.d.ts +0 -26
- package/dist/browser/server-action-bridge.d.ts.map +0 -1
- package/dist/browser/server-action-bridge.js +0 -668
- package/dist/browser/server-action-bridge.js.map +0 -1
- package/dist/browser/shallow.d.ts +0 -12
- package/dist/browser/shallow.d.ts.map +0 -1
- package/dist/browser/shallow.js +0 -34
- package/dist/browser/shallow.js.map +0 -1
- package/dist/browser/types.d.ts +0 -369
- package/dist/browser/types.d.ts.map +0 -1
- package/dist/browser/types.js +0 -2
- package/dist/browser/types.js.map +0 -1
- package/dist/build/__tests__/generate-cli.test.d.ts +0 -2
- package/dist/build/__tests__/generate-cli.test.d.ts.map +0 -1
- package/dist/build/__tests__/generate-cli.test.js +0 -237
- package/dist/build/__tests__/generate-cli.test.js.map +0 -1
- package/dist/build/__tests__/generate-manifest.test.d.ts +0 -2
- package/dist/build/__tests__/generate-manifest.test.d.ts.map +0 -1
- package/dist/build/__tests__/generate-manifest.test.js +0 -119
- package/dist/build/__tests__/generate-manifest.test.js.map +0 -1
- package/dist/build/__tests__/generate-route-types.test.d.ts +0 -2
- package/dist/build/__tests__/generate-route-types.test.d.ts.map +0 -1
- package/dist/build/__tests__/generate-route-types.test.js +0 -620
- package/dist/build/__tests__/generate-route-types.test.js.map +0 -1
- package/dist/build/__tests__/per-router-manifest.test.d.ts +0 -2
- package/dist/build/__tests__/per-router-manifest.test.d.ts.map +0 -1
- package/dist/build/__tests__/per-router-manifest.test.js +0 -308
- package/dist/build/__tests__/per-router-manifest.test.js.map +0 -1
- package/dist/build/generate-manifest.d.ts +0 -81
- package/dist/build/generate-manifest.d.ts.map +0 -1
- package/dist/build/generate-manifest.js +0 -276
- package/dist/build/generate-manifest.js.map +0 -1
- package/dist/build/generate-route-types.d.ts +0 -115
- package/dist/build/generate-route-types.d.ts.map +0 -1
- package/dist/build/generate-route-types.js +0 -740
- package/dist/build/generate-route-types.js.map +0 -1
- package/dist/build/index.d.ts +0 -21
- package/dist/build/index.d.ts.map +0 -1
- package/dist/build/index.js +0 -21
- package/dist/build/index.js.map +0 -1
- package/dist/build/route-trie.d.ts +0 -71
- package/dist/build/route-trie.d.ts.map +0 -1
- package/dist/build/route-trie.js +0 -175
- package/dist/build/route-trie.js.map +0 -1
- package/dist/cache/__tests__/cache-scope.test.d.ts +0 -2
- package/dist/cache/__tests__/cache-scope.test.d.ts.map +0 -1
- package/dist/cache/__tests__/cache-scope.test.js +0 -208
- package/dist/cache/__tests__/cache-scope.test.js.map +0 -1
- package/dist/cache/__tests__/document-cache.test.d.ts +0 -2
- package/dist/cache/__tests__/document-cache.test.d.ts.map +0 -1
- package/dist/cache/__tests__/document-cache.test.js +0 -345
- package/dist/cache/__tests__/document-cache.test.js.map +0 -1
- package/dist/cache/__tests__/memory-segment-store.test.d.ts +0 -2
- package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +0 -1
- package/dist/cache/__tests__/memory-segment-store.test.js +0 -425
- package/dist/cache/__tests__/memory-segment-store.test.js.map +0 -1
- package/dist/cache/__tests__/memory-store.test.d.ts +0 -2
- package/dist/cache/__tests__/memory-store.test.d.ts.map +0 -1
- package/dist/cache/__tests__/memory-store.test.js +0 -367
- package/dist/cache/__tests__/memory-store.test.js.map +0 -1
- package/dist/cache/cache-scope.d.ts +0 -102
- package/dist/cache/cache-scope.d.ts.map +0 -1
- package/dist/cache/cache-scope.js +0 -440
- package/dist/cache/cache-scope.js.map +0 -1
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +0 -2
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +0 -1
- package/dist/cache/cf/__tests__/cf-cache-store.test.js +0 -330
- package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +0 -1
- package/dist/cache/cf/cf-cache-store.d.ts +0 -165
- package/dist/cache/cf/cf-cache-store.d.ts.map +0 -1
- package/dist/cache/cf/cf-cache-store.js +0 -242
- package/dist/cache/cf/cf-cache-store.js.map +0 -1
- package/dist/cache/cf/index.d.ts +0 -14
- package/dist/cache/cf/index.d.ts.map +0 -1
- package/dist/cache/cf/index.js +0 -17
- package/dist/cache/cf/index.js.map +0 -1
- package/dist/cache/document-cache.d.ts +0 -64
- package/dist/cache/document-cache.d.ts.map +0 -1
- package/dist/cache/document-cache.js +0 -228
- package/dist/cache/document-cache.js.map +0 -1
- package/dist/cache/index.d.ts +0 -19
- package/dist/cache/index.d.ts.map +0 -1
- package/dist/cache/index.js +0 -21
- package/dist/cache/index.js.map +0 -1
- package/dist/cache/memory-segment-store.d.ts +0 -110
- package/dist/cache/memory-segment-store.d.ts.map +0 -1
- package/dist/cache/memory-segment-store.js +0 -117
- package/dist/cache/memory-segment-store.js.map +0 -1
- package/dist/cache/memory-store.d.ts +0 -41
- package/dist/cache/memory-store.d.ts.map +0 -1
- package/dist/cache/memory-store.js +0 -191
- package/dist/cache/memory-store.js.map +0 -1
- package/dist/cache/types.d.ts +0 -317
- package/dist/cache/types.d.ts.map +0 -1
- package/dist/cache/types.js +0 -12
- package/dist/cache/types.js.map +0 -1
- package/dist/client.d.ts +0 -248
- package/dist/client.d.ts.map +0 -1
- package/dist/client.js +0 -367
- package/dist/client.js.map +0 -1
- package/dist/client.rsc.d.ts +0 -26
- package/dist/client.rsc.d.ts.map +0 -1
- package/dist/client.rsc.js +0 -46
- package/dist/client.rsc.js.map +0 -1
- package/dist/component-utils.d.ts +0 -36
- package/dist/component-utils.d.ts.map +0 -1
- package/dist/component-utils.js +0 -61
- package/dist/component-utils.js.map +0 -1
- package/dist/components/DefaultDocument.d.ts +0 -13
- package/dist/components/DefaultDocument.d.ts.map +0 -1
- package/dist/components/DefaultDocument.js +0 -15
- package/dist/components/DefaultDocument.js.map +0 -1
- package/dist/debug.d.ts +0 -58
- package/dist/debug.d.ts.map +0 -1
- package/dist/debug.js +0 -157
- package/dist/debug.js.map +0 -1
- package/dist/default-error-boundary.d.ts +0 -11
- package/dist/default-error-boundary.d.ts.map +0 -1
- package/dist/default-error-boundary.js +0 -45
- package/dist/default-error-boundary.js.map +0 -1
- package/dist/deps/browser.d.ts +0 -2
- package/dist/deps/browser.d.ts.map +0 -1
- package/dist/deps/browser.js +0 -3
- package/dist/deps/browser.js.map +0 -1
- package/dist/deps/html-stream-client.d.ts +0 -2
- package/dist/deps/html-stream-client.d.ts.map +0 -1
- package/dist/deps/html-stream-client.js +0 -3
- package/dist/deps/html-stream-client.js.map +0 -1
- package/dist/deps/html-stream-server.d.ts +0 -2
- package/dist/deps/html-stream-server.d.ts.map +0 -1
- package/dist/deps/html-stream-server.js +0 -3
- package/dist/deps/html-stream-server.js.map +0 -1
- package/dist/deps/rsc.d.ts +0 -2
- package/dist/deps/rsc.d.ts.map +0 -1
- package/dist/deps/rsc.js +0 -4
- package/dist/deps/rsc.js.map +0 -1
- package/dist/deps/ssr.d.ts +0 -2
- package/dist/deps/ssr.d.ts.map +0 -1
- package/dist/deps/ssr.js +0 -3
- package/dist/deps/ssr.js.map +0 -1
- package/dist/errors.d.ts +0 -174
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js +0 -241
- package/dist/errors.js.map +0 -1
- package/dist/handle.d.ts +0 -78
- package/dist/handle.d.ts.map +0 -1
- package/dist/handle.js +0 -82
- package/dist/handle.js.map +0 -1
- package/dist/handles/MetaTags.d.ts +0 -14
- package/dist/handles/MetaTags.d.ts.map +0 -1
- package/dist/handles/MetaTags.js +0 -136
- package/dist/handles/MetaTags.js.map +0 -1
- package/dist/handles/index.d.ts +0 -6
- package/dist/handles/index.d.ts.map +0 -1
- package/dist/handles/index.js +0 -6
- package/dist/handles/index.js.map +0 -1
- package/dist/handles/meta.d.ts +0 -39
- package/dist/handles/meta.d.ts.map +0 -1
- package/dist/handles/meta.js +0 -202
- package/dist/handles/meta.js.map +0 -1
- package/dist/host/__tests__/errors.test.d.ts +0 -2
- package/dist/host/__tests__/errors.test.d.ts.map +0 -1
- package/dist/host/__tests__/errors.test.js +0 -76
- package/dist/host/__tests__/errors.test.js.map +0 -1
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts +0 -2
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +0 -1
- package/dist/host/__tests__/pattern-comprehensive.test.js +0 -732
- package/dist/host/__tests__/pattern-comprehensive.test.js.map +0 -1
- package/dist/host/__tests__/pattern-matcher.test.d.ts +0 -2
- package/dist/host/__tests__/pattern-matcher.test.d.ts.map +0 -1
- package/dist/host/__tests__/pattern-matcher.test.js +0 -251
- package/dist/host/__tests__/pattern-matcher.test.js.map +0 -1
- package/dist/host/__tests__/router.test.d.ts +0 -2
- package/dist/host/__tests__/router.test.d.ts.map +0 -1
- package/dist/host/__tests__/router.test.js +0 -241
- package/dist/host/__tests__/router.test.js.map +0 -1
- package/dist/host/__tests__/testing.test.d.ts +0 -2
- package/dist/host/__tests__/testing.test.d.ts.map +0 -1
- package/dist/host/__tests__/testing.test.js +0 -64
- package/dist/host/__tests__/testing.test.js.map +0 -1
- package/dist/host/__tests__/utils.test.d.ts +0 -2
- package/dist/host/__tests__/utils.test.d.ts.map +0 -1
- package/dist/host/__tests__/utils.test.js +0 -29
- package/dist/host/__tests__/utils.test.js.map +0 -1
- package/dist/host/cookie-handler.d.ts +0 -34
- package/dist/host/cookie-handler.d.ts.map +0 -1
- package/dist/host/cookie-handler.js +0 -124
- package/dist/host/cookie-handler.js.map +0 -1
- package/dist/host/errors.d.ts +0 -56
- package/dist/host/errors.d.ts.map +0 -1
- package/dist/host/errors.js +0 -79
- package/dist/host/errors.js.map +0 -1
- package/dist/host/index.d.ts +0 -29
- package/dist/host/index.d.ts.map +0 -1
- package/dist/host/index.js +0 -32
- package/dist/host/index.js.map +0 -1
- package/dist/host/pattern-matcher.d.ts +0 -36
- package/dist/host/pattern-matcher.d.ts.map +0 -1
- package/dist/host/pattern-matcher.js +0 -172
- package/dist/host/pattern-matcher.js.map +0 -1
- package/dist/host/router.d.ts +0 -26
- package/dist/host/router.d.ts.map +0 -1
- package/dist/host/router.js +0 -218
- package/dist/host/router.js.map +0 -1
- package/dist/host/testing.d.ts +0 -36
- package/dist/host/testing.d.ts.map +0 -1
- package/dist/host/testing.js +0 -55
- package/dist/host/testing.js.map +0 -1
- package/dist/host/types.d.ts +0 -115
- package/dist/host/types.d.ts.map +0 -1
- package/dist/host/types.js +0 -7
- package/dist/host/types.js.map +0 -1
- package/dist/host/utils.d.ts +0 -21
- package/dist/host/utils.d.ts.map +0 -1
- package/dist/host/utils.js +0 -23
- package/dist/host/utils.js.map +0 -1
- package/dist/href-client.d.ts +0 -131
- package/dist/href-client.d.ts.map +0 -1
- package/dist/href-client.js +0 -64
- package/dist/href-client.js.map +0 -1
- package/dist/href-context.d.ts +0 -29
- package/dist/href-context.d.ts.map +0 -1
- package/dist/href-context.js +0 -21
- package/dist/href-context.js.map +0 -1
- package/dist/index.d.ts +0 -73
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -91
- package/dist/index.js.map +0 -1
- package/dist/index.rsc.d.ts +0 -32
- package/dist/index.rsc.d.ts.map +0 -1
- package/dist/index.rsc.js +0 -40
- package/dist/index.rsc.js.map +0 -1
- package/dist/internal-debug.d.ts +0 -2
- package/dist/internal-debug.d.ts.map +0 -1
- package/dist/internal-debug.js +0 -5
- package/dist/internal-debug.js.map +0 -1
- package/dist/loader.d.ts +0 -14
- package/dist/loader.d.ts.map +0 -1
- package/dist/loader.js +0 -20
- package/dist/loader.js.map +0 -1
- package/dist/loader.rsc.d.ts +0 -19
- package/dist/loader.rsc.d.ts.map +0 -1
- package/dist/loader.rsc.js +0 -99
- package/dist/loader.rsc.js.map +0 -1
- package/dist/network-error-thrower.d.ts +0 -17
- package/dist/network-error-thrower.d.ts.map +0 -1
- package/dist/network-error-thrower.js +0 -14
- package/dist/network-error-thrower.js.map +0 -1
- package/dist/outlet-context.d.ts +0 -13
- package/dist/outlet-context.d.ts.map +0 -1
- package/dist/outlet-context.js +0 -3
- package/dist/outlet-context.js.map +0 -1
- package/dist/prerender/__tests__/param-hash.test.d.ts +0 -2
- package/dist/prerender/__tests__/param-hash.test.d.ts.map +0 -1
- package/dist/prerender/__tests__/param-hash.test.js +0 -148
- package/dist/prerender/__tests__/param-hash.test.js.map +0 -1
- package/dist/prerender/param-hash.d.ts +0 -16
- package/dist/prerender/param-hash.d.ts.map +0 -1
- package/dist/prerender/param-hash.js +0 -36
- package/dist/prerender/param-hash.js.map +0 -1
- package/dist/prerender/store.d.ts +0 -38
- package/dist/prerender/store.d.ts.map +0 -1
- package/dist/prerender/store.js +0 -61
- package/dist/prerender/store.js.map +0 -1
- package/dist/prerender.d.ts +0 -66
- package/dist/prerender.d.ts.map +0 -1
- package/dist/prerender.js +0 -57
- package/dist/prerender.js.map +0 -1
- package/dist/reverse.d.ts +0 -196
- package/dist/reverse.d.ts.map +0 -1
- package/dist/reverse.js +0 -78
- package/dist/reverse.js.map +0 -1
- package/dist/root-error-boundary.d.ts +0 -33
- package/dist/root-error-boundary.d.ts.map +0 -1
- package/dist/root-error-boundary.js +0 -165
- package/dist/root-error-boundary.js.map +0 -1
- package/dist/route-content-wrapper.d.ts +0 -46
- package/dist/route-content-wrapper.d.ts.map +0 -1
- package/dist/route-content-wrapper.js +0 -77
- package/dist/route-content-wrapper.js.map +0 -1
- package/dist/route-definition.d.ts +0 -421
- package/dist/route-definition.d.ts.map +0 -1
- package/dist/route-definition.js +0 -868
- package/dist/route-definition.js.map +0 -1
- package/dist/route-map-builder.d.ts +0 -155
- package/dist/route-map-builder.d.ts.map +0 -1
- package/dist/route-map-builder.js +0 -237
- package/dist/route-map-builder.js.map +0 -1
- package/dist/route-types.d.ts +0 -165
- package/dist/route-types.d.ts.map +0 -1
- package/dist/route-types.js +0 -7
- package/dist/route-types.js.map +0 -1
- package/dist/router/__tests__/handler-context.test.d.ts +0 -2
- package/dist/router/__tests__/handler-context.test.d.ts.map +0 -1
- package/dist/router/__tests__/handler-context.test.js +0 -65
- package/dist/router/__tests__/handler-context.test.js.map +0 -1
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts +0 -2
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +0 -1
- package/dist/router/__tests__/loader-cycle-detection.test.js +0 -221
- package/dist/router/__tests__/loader-cycle-detection.test.js.map +0 -1
- package/dist/router/__tests__/match-context.test.d.ts +0 -2
- package/dist/router/__tests__/match-context.test.d.ts.map +0 -1
- package/dist/router/__tests__/match-context.test.js +0 -92
- package/dist/router/__tests__/match-context.test.js.map +0 -1
- package/dist/router/__tests__/match-pipelines.test.d.ts +0 -2
- package/dist/router/__tests__/match-pipelines.test.d.ts.map +0 -1
- package/dist/router/__tests__/match-pipelines.test.js +0 -417
- package/dist/router/__tests__/match-pipelines.test.js.map +0 -1
- package/dist/router/__tests__/match-result.test.d.ts +0 -2
- package/dist/router/__tests__/match-result.test.d.ts.map +0 -1
- package/dist/router/__tests__/match-result.test.js +0 -457
- package/dist/router/__tests__/match-result.test.js.map +0 -1
- package/dist/router/__tests__/on-error.test.d.ts +0 -2
- package/dist/router/__tests__/on-error.test.d.ts.map +0 -1
- package/dist/router/__tests__/on-error.test.js +0 -678
- package/dist/router/__tests__/on-error.test.js.map +0 -1
- package/dist/router/__tests__/pattern-matching.test.d.ts +0 -2
- package/dist/router/__tests__/pattern-matching.test.d.ts.map +0 -1
- package/dist/router/__tests__/pattern-matching.test.js +0 -629
- package/dist/router/__tests__/pattern-matching.test.js.map +0 -1
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +0 -2
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +0 -1
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +0 -155
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +0 -1
- package/dist/router/error-handling.d.ts +0 -77
- package/dist/router/error-handling.d.ts.map +0 -1
- package/dist/router/error-handling.js +0 -202
- package/dist/router/error-handling.js.map +0 -1
- package/dist/router/handler-context.d.ts +0 -20
- package/dist/router/handler-context.d.ts.map +0 -1
- package/dist/router/handler-context.js +0 -198
- package/dist/router/handler-context.js.map +0 -1
- package/dist/router/intercept-resolution.d.ts +0 -66
- package/dist/router/intercept-resolution.d.ts.map +0 -1
- package/dist/router/intercept-resolution.js +0 -246
- package/dist/router/intercept-resolution.js.map +0 -1
- package/dist/router/loader-resolution.d.ts +0 -64
- package/dist/router/loader-resolution.d.ts.map +0 -1
- package/dist/router/loader-resolution.js +0 -284
- package/dist/router/loader-resolution.js.map +0 -1
- package/dist/router/logging.d.ts +0 -15
- package/dist/router/logging.d.ts.map +0 -1
- package/dist/router/logging.js +0 -99
- package/dist/router/logging.js.map +0 -1
- package/dist/router/manifest.d.ts +0 -22
- package/dist/router/manifest.d.ts.map +0 -1
- package/dist/router/manifest.js +0 -181
- package/dist/router/manifest.js.map +0 -1
- package/dist/router/match-api.d.ts +0 -35
- package/dist/router/match-api.d.ts.map +0 -1
- package/dist/router/match-api.js +0 -406
- package/dist/router/match-api.js.map +0 -1
- package/dist/router/match-context.d.ts +0 -206
- package/dist/router/match-context.d.ts.map +0 -1
- package/dist/router/match-context.js +0 -17
- package/dist/router/match-context.js.map +0 -1
- package/dist/router/match-middleware/background-revalidation.d.ts +0 -127
- package/dist/router/match-middleware/background-revalidation.d.ts.map +0 -1
- package/dist/router/match-middleware/background-revalidation.js +0 -75
- package/dist/router/match-middleware/background-revalidation.js.map +0 -1
- package/dist/router/match-middleware/cache-lookup.d.ts +0 -112
- package/dist/router/match-middleware/cache-lookup.d.ts.map +0 -1
- package/dist/router/match-middleware/cache-lookup.js +0 -257
- package/dist/router/match-middleware/cache-lookup.js.map +0 -1
- package/dist/router/match-middleware/cache-store.d.ts +0 -113
- package/dist/router/match-middleware/cache-store.d.ts.map +0 -1
- package/dist/router/match-middleware/cache-store.js +0 -108
- package/dist/router/match-middleware/cache-store.js.map +0 -1
- package/dist/router/match-middleware/index.d.ts +0 -81
- package/dist/router/match-middleware/index.d.ts.map +0 -1
- package/dist/router/match-middleware/index.js +0 -80
- package/dist/router/match-middleware/index.js.map +0 -1
- package/dist/router/match-middleware/intercept-resolution.d.ts +0 -117
- package/dist/router/match-middleware/intercept-resolution.d.ts.map +0 -1
- package/dist/router/match-middleware/intercept-resolution.js +0 -134
- package/dist/router/match-middleware/intercept-resolution.js.map +0 -1
- package/dist/router/match-middleware/segment-resolution.d.ts +0 -99
- package/dist/router/match-middleware/segment-resolution.d.ts.map +0 -1
- package/dist/router/match-middleware/segment-resolution.js +0 -53
- package/dist/router/match-middleware/segment-resolution.js.map +0 -1
- package/dist/router/match-pipelines.d.ts +0 -147
- package/dist/router/match-pipelines.d.ts.map +0 -1
- package/dist/router/match-pipelines.js +0 -82
- package/dist/router/match-pipelines.js.map +0 -1
- package/dist/router/match-result.d.ts +0 -126
- package/dist/router/match-result.d.ts.map +0 -1
- package/dist/router/match-result.js +0 -93
- package/dist/router/match-result.js.map +0 -1
- package/dist/router/metrics.d.ts +0 -20
- package/dist/router/metrics.d.ts.map +0 -1
- package/dist/router/metrics.js +0 -47
- package/dist/router/metrics.js.map +0 -1
- package/dist/router/middleware.d.ts +0 -249
- package/dist/router/middleware.d.ts.map +0 -1
- package/dist/router/middleware.js +0 -434
- package/dist/router/middleware.js.map +0 -1
- package/dist/router/middleware.test.d.ts +0 -2
- package/dist/router/middleware.test.d.ts.map +0 -1
- package/dist/router/middleware.test.js +0 -816
- package/dist/router/middleware.test.js.map +0 -1
- package/dist/router/pattern-matching.d.ts +0 -149
- package/dist/router/pattern-matching.d.ts.map +0 -1
- package/dist/router/pattern-matching.js +0 -349
- package/dist/router/pattern-matching.js.map +0 -1
- package/dist/router/revalidation.d.ts +0 -44
- package/dist/router/revalidation.d.ts.map +0 -1
- package/dist/router/revalidation.js +0 -147
- package/dist/router/revalidation.js.map +0 -1
- package/dist/router/router-context.d.ts +0 -135
- package/dist/router/router-context.d.ts.map +0 -1
- package/dist/router/router-context.js +0 -36
- package/dist/router/router-context.js.map +0 -1
- package/dist/router/segment-resolution.d.ts +0 -127
- package/dist/router/segment-resolution.d.ts.map +0 -1
- package/dist/router/segment-resolution.js +0 -919
- package/dist/router/segment-resolution.js.map +0 -1
- package/dist/router/trie-matching.d.ts +0 -40
- package/dist/router/trie-matching.d.ts.map +0 -1
- package/dist/router/trie-matching.js +0 -127
- package/dist/router/trie-matching.js.map +0 -1
- package/dist/router/types.d.ts +0 -136
- package/dist/router/types.d.ts.map +0 -1
- package/dist/router/types.js +0 -7
- package/dist/router/types.js.map +0 -1
- package/dist/router.d.ts +0 -753
- package/dist/router.d.ts.map +0 -1
- package/dist/router.gen.d.ts +0 -6
- package/dist/router.gen.d.ts.map +0 -1
- package/dist/router.gen.js +0 -6
- package/dist/router.gen.js.map +0 -1
- package/dist/router.js +0 -1304
- package/dist/router.js.map +0 -1
- package/dist/rsc/__tests__/helpers.test.d.ts +0 -2
- package/dist/rsc/__tests__/helpers.test.d.ts.map +0 -1
- package/dist/rsc/__tests__/helpers.test.js +0 -140
- package/dist/rsc/__tests__/helpers.test.js.map +0 -1
- package/dist/rsc/handler.d.ts +0 -45
- package/dist/rsc/handler.d.ts.map +0 -1
- package/dist/rsc/handler.js +0 -1172
- package/dist/rsc/handler.js.map +0 -1
- package/dist/rsc/helpers.d.ts +0 -16
- package/dist/rsc/helpers.d.ts.map +0 -1
- package/dist/rsc/helpers.js +0 -55
- package/dist/rsc/helpers.js.map +0 -1
- package/dist/rsc/index.d.ts +0 -22
- package/dist/rsc/index.d.ts.map +0 -1
- package/dist/rsc/index.js +0 -23
- package/dist/rsc/index.js.map +0 -1
- package/dist/rsc/nonce.d.ts +0 -9
- package/dist/rsc/nonce.d.ts.map +0 -1
- package/dist/rsc/nonce.js +0 -18
- package/dist/rsc/nonce.js.map +0 -1
- package/dist/rsc/types.d.ts +0 -206
- package/dist/rsc/types.d.ts.map +0 -1
- package/dist/rsc/types.js +0 -8
- package/dist/rsc/types.js.map +0 -1
- package/dist/search-params.d.ts +0 -103
- package/dist/search-params.d.ts.map +0 -1
- package/dist/search-params.js +0 -74
- package/dist/search-params.js.map +0 -1
- package/dist/segment-system.d.ts +0 -75
- package/dist/segment-system.d.ts.map +0 -1
- package/dist/segment-system.js +0 -336
- package/dist/segment-system.js.map +0 -1
- package/dist/server/context.d.ts +0 -245
- package/dist/server/context.d.ts.map +0 -1
- package/dist/server/context.js +0 -197
- package/dist/server/context.js.map +0 -1
- package/dist/server/fetchable-loader-store.d.ts +0 -18
- package/dist/server/fetchable-loader-store.d.ts.map +0 -1
- package/dist/server/fetchable-loader-store.js +0 -18
- package/dist/server/fetchable-loader-store.js.map +0 -1
- package/dist/server/handle-store.d.ts +0 -85
- package/dist/server/handle-store.d.ts.map +0 -1
- package/dist/server/handle-store.js +0 -142
- package/dist/server/handle-store.js.map +0 -1
- package/dist/server/loader-registry.d.ts +0 -55
- package/dist/server/loader-registry.d.ts.map +0 -1
- package/dist/server/loader-registry.js +0 -132
- package/dist/server/loader-registry.js.map +0 -1
- package/dist/server/request-context.d.ts +0 -226
- package/dist/server/request-context.d.ts.map +0 -1
- package/dist/server/request-context.js +0 -290
- package/dist/server/request-context.js.map +0 -1
- package/dist/server/root-layout.d.ts +0 -4
- package/dist/server/root-layout.d.ts.map +0 -1
- package/dist/server/root-layout.js +0 -5
- package/dist/server/root-layout.js.map +0 -1
- package/dist/server.d.ts +0 -15
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js +0 -20
- package/dist/server.js.map +0 -1
- package/dist/ssr/__tests__/ssr-handler.test.d.ts +0 -2
- package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +0 -1
- package/dist/ssr/__tests__/ssr-handler.test.js +0 -132
- package/dist/ssr/__tests__/ssr-handler.test.js.map +0 -1
- package/dist/ssr/index.d.ts +0 -98
- package/dist/ssr/index.d.ts.map +0 -1
- package/dist/ssr/index.js +0 -158
- package/dist/ssr/index.js.map +0 -1
- package/dist/static-handler.d.ts +0 -50
- package/dist/static-handler.d.ts.map +0 -1
- package/dist/static-handler.gen.d.ts +0 -5
- package/dist/static-handler.gen.d.ts.map +0 -1
- package/dist/static-handler.gen.js +0 -5
- package/dist/static-handler.gen.js.map +0 -1
- package/dist/static-handler.js +0 -29
- package/dist/static-handler.js.map +0 -1
- package/dist/theme/ThemeProvider.d.ts +0 -20
- package/dist/theme/ThemeProvider.d.ts.map +0 -1
- package/dist/theme/ThemeProvider.js +0 -240
- package/dist/theme/ThemeProvider.js.map +0 -1
- package/dist/theme/ThemeScript.d.ts +0 -48
- package/dist/theme/ThemeScript.d.ts.map +0 -1
- package/dist/theme/ThemeScript.js +0 -13
- package/dist/theme/ThemeScript.js.map +0 -1
- package/dist/theme/__tests__/theme.test.d.ts +0 -2
- package/dist/theme/__tests__/theme.test.d.ts.map +0 -1
- package/dist/theme/__tests__/theme.test.js +0 -103
- package/dist/theme/__tests__/theme.test.js.map +0 -1
- package/dist/theme/constants.d.ts +0 -29
- package/dist/theme/constants.d.ts.map +0 -1
- package/dist/theme/constants.js +0 -48
- package/dist/theme/constants.js.map +0 -1
- package/dist/theme/index.d.ts +0 -31
- package/dist/theme/index.d.ts.map +0 -1
- package/dist/theme/index.js +0 -36
- package/dist/theme/index.js.map +0 -1
- package/dist/theme/theme-context.d.ts +0 -40
- package/dist/theme/theme-context.d.ts.map +0 -1
- package/dist/theme/theme-context.js +0 -60
- package/dist/theme/theme-context.js.map +0 -1
- package/dist/theme/theme-script.d.ts +0 -27
- package/dist/theme/theme-script.d.ts.map +0 -1
- package/dist/theme/theme-script.js +0 -147
- package/dist/theme/theme-script.js.map +0 -1
- package/dist/theme/types.d.ts +0 -163
- package/dist/theme/types.d.ts.map +0 -1
- package/dist/theme/types.js +0 -11
- package/dist/theme/types.js.map +0 -1
- package/dist/theme/use-theme.d.ts +0 -12
- package/dist/theme/use-theme.d.ts.map +0 -1
- package/dist/theme/use-theme.js +0 -40
- package/dist/theme/use-theme.js.map +0 -1
- package/dist/types.d.ts +0 -1479
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -10
- package/dist/types.js.map +0 -1
- package/dist/urls.d.ts +0 -441
- package/dist/urls.d.ts.map +0 -1
- package/dist/urls.gen.d.ts +0 -8
- package/dist/urls.gen.d.ts.map +0 -1
- package/dist/urls.gen.js +0 -8
- package/dist/urls.gen.js.map +0 -1
- package/dist/urls.js +0 -443
- package/dist/urls.js.map +0 -1
- package/dist/use-loader.d.ts +0 -127
- package/dist/use-loader.d.ts.map +0 -1
- package/dist/use-loader.js +0 -237
- package/dist/use-loader.js.map +0 -1
- package/dist/vite/__tests__/ast-handler-extract.test.d.ts +0 -2
- package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +0 -1
- package/dist/vite/__tests__/ast-handler-extract.test.js +0 -294
- package/dist/vite/__tests__/ast-handler-extract.test.js.map +0 -1
- package/dist/vite/__tests__/expose-id-utils.test.d.ts +0 -2
- package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +0 -1
- package/dist/vite/__tests__/expose-id-utils.test.js +0 -224
- package/dist/vite/__tests__/expose-id-utils.test.js.map +0 -1
- package/dist/vite/__tests__/expose-internal-ids.test.d.ts +0 -2
- package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +0 -1
- package/dist/vite/__tests__/expose-internal-ids.test.js +0 -647
- package/dist/vite/__tests__/expose-internal-ids.test.js.map +0 -1
- package/dist/vite/__tests__/expose-router-id.test.d.ts +0 -2
- package/dist/vite/__tests__/expose-router-id.test.d.ts.map +0 -1
- package/dist/vite/__tests__/expose-router-id.test.js +0 -39
- package/dist/vite/__tests__/expose-router-id.test.js.map +0 -1
- package/dist/vite/ast-handler-extract.d.ts +0 -49
- package/dist/vite/ast-handler-extract.d.ts.map +0 -1
- package/dist/vite/ast-handler-extract.js +0 -249
- package/dist/vite/ast-handler-extract.js.map +0 -1
- package/dist/vite/expose-action-id.d.ts +0 -19
- package/dist/vite/expose-action-id.d.ts.map +0 -1
- package/dist/vite/expose-action-id.js +0 -250
- package/dist/vite/expose-action-id.js.map +0 -1
- package/dist/vite/expose-id-utils.d.ts +0 -69
- package/dist/vite/expose-id-utils.d.ts.map +0 -1
- package/dist/vite/expose-id-utils.js +0 -289
- package/dist/vite/expose-id-utils.js.map +0 -1
- package/dist/vite/expose-internal-ids.d.ts +0 -22
- package/dist/vite/expose-internal-ids.d.ts.map +0 -1
- package/dist/vite/expose-internal-ids.js +0 -886
- package/dist/vite/expose-internal-ids.js.map +0 -1
- package/dist/vite/index.d.ts +0 -149
- package/dist/vite/index.d.ts.map +0 -1
- package/dist/vite/index.js.map +0 -1
- package/dist/vite/index.named-routes.gen.ts +0 -103
- package/dist/vite/package-resolution.d.ts +0 -43
- package/dist/vite/package-resolution.d.ts.map +0 -1
- package/dist/vite/package-resolution.js +0 -112
- package/dist/vite/package-resolution.js.map +0 -1
- package/dist/vite/virtual-entries.d.ts +0 -25
- package/dist/vite/virtual-entries.d.ts.map +0 -1
- package/dist/vite/virtual-entries.js +0 -110
- package/dist/vite/virtual-entries.js.map +0 -1
|
@@ -10,14 +10,21 @@ declare global {
|
|
|
10
10
|
/**
|
|
11
11
|
* Cloudflare Edge Cache Store
|
|
12
12
|
*
|
|
13
|
-
* Production cache store using Cloudflare's Cache API
|
|
14
|
-
*
|
|
13
|
+
* Production cache store using Cloudflare's Cache API (L1) with optional
|
|
14
|
+
* KV persistence (L2).
|
|
15
|
+
*
|
|
16
|
+
* L1 (Cache API): Per-colo, fast, ephemeral. Handles SWR atomically.
|
|
17
|
+
* L2 (KV): Global, persistent, ~50ms reads. Auto-warms cold colos.
|
|
18
|
+
*
|
|
19
|
+
* Read flow: L1 hit → serve | L1 miss → L2 hit → serve + promote to L1 | both miss → render
|
|
20
|
+
* Write flow: L1 write + L2 write (both via waitUntil)
|
|
15
21
|
*
|
|
16
22
|
* Features:
|
|
17
23
|
* - Extended TTL for SWR window (max-age = ttl + swr)
|
|
18
24
|
* - Staleness via x-edge-cache-stale-at header
|
|
19
|
-
* - Atomic REVALIDATING status for thundering herd prevention
|
|
25
|
+
* - Atomic REVALIDATING status for thundering herd prevention (L1 only)
|
|
20
26
|
* - Non-blocking writes via waitUntil
|
|
27
|
+
* - KV L2 for cross-colo cache persistence
|
|
21
28
|
*/
|
|
22
29
|
|
|
23
30
|
import type {
|
|
@@ -68,6 +75,67 @@ export interface ExecutionContext {
|
|
|
68
75
|
passThroughOnException(): void;
|
|
69
76
|
}
|
|
70
77
|
|
|
78
|
+
/**
|
|
79
|
+
* Minimal Cloudflare KV Namespace interface.
|
|
80
|
+
* Avoids hard dependency on @cloudflare/workers-types.
|
|
81
|
+
*/
|
|
82
|
+
export interface KVNamespace {
|
|
83
|
+
get(key: string, options?: { type?: string }): Promise<any>;
|
|
84
|
+
put(
|
|
85
|
+
key: string,
|
|
86
|
+
value: string,
|
|
87
|
+
options?: { expirationTtl?: number },
|
|
88
|
+
): Promise<void>;
|
|
89
|
+
delete(key: string): Promise<void>;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* KV envelope for segment cache entries.
|
|
94
|
+
* @internal
|
|
95
|
+
*/
|
|
96
|
+
interface KVSegmentEnvelope {
|
|
97
|
+
/** Cached segment data */
|
|
98
|
+
d: CachedEntryData;
|
|
99
|
+
/** When entry becomes stale (ms epoch) */
|
|
100
|
+
s: number;
|
|
101
|
+
/** When entry hard-expires (ms epoch) */
|
|
102
|
+
e: number;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* KV envelope for function cache entries ("use cache").
|
|
107
|
+
* @internal
|
|
108
|
+
*/
|
|
109
|
+
interface KVItemEnvelope {
|
|
110
|
+
/** RSC-serialized return value */
|
|
111
|
+
v: string;
|
|
112
|
+
/** Handle data */
|
|
113
|
+
h?: Record<string, Record<string, unknown[]>>;
|
|
114
|
+
/** When entry becomes stale (ms epoch) */
|
|
115
|
+
s: number;
|
|
116
|
+
/** When entry hard-expires (ms epoch) */
|
|
117
|
+
e: number;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* KV envelope for document cache entries.
|
|
122
|
+
* @internal
|
|
123
|
+
*/
|
|
124
|
+
interface KVResponseEnvelope {
|
|
125
|
+
/** Response body as base64-encoded string (safe for binary payloads) */
|
|
126
|
+
b: string;
|
|
127
|
+
/** HTTP status code */
|
|
128
|
+
st: number;
|
|
129
|
+
/** HTTP status text */
|
|
130
|
+
stx: string;
|
|
131
|
+
/** Serialized headers as key-value pairs */
|
|
132
|
+
hd: [string, string][];
|
|
133
|
+
/** When entry becomes stale (ms epoch) */
|
|
134
|
+
s: number;
|
|
135
|
+
/** When entry hard-expires (ms epoch) */
|
|
136
|
+
e: number;
|
|
137
|
+
}
|
|
138
|
+
|
|
71
139
|
export interface CFCacheStoreOptions<TEnv = unknown> {
|
|
72
140
|
/**
|
|
73
141
|
* Cache namespace. If not provided, uses caches.default (recommended).
|
|
@@ -98,6 +166,20 @@ export interface CFCacheStoreOptions<TEnv = unknown> {
|
|
|
98
166
|
*/
|
|
99
167
|
ctx: ExecutionContext;
|
|
100
168
|
|
|
169
|
+
/**
|
|
170
|
+
* Optional KV namespace for L2 cache persistence.
|
|
171
|
+
*
|
|
172
|
+
* When provided, KV acts as a global fallback behind the per-colo Cache API.
|
|
173
|
+
* On L1 miss, KV is checked and hits are promoted back to L1.
|
|
174
|
+
* On writes, data is persisted to both L1 and KV.
|
|
175
|
+
*
|
|
176
|
+
* @example
|
|
177
|
+
* ```typescript
|
|
178
|
+
* new CFCacheStore({ ctx: env.ctx, kv: env.CACHE_KV })
|
|
179
|
+
* ```
|
|
180
|
+
*/
|
|
181
|
+
kv?: KVNamespace;
|
|
182
|
+
|
|
101
183
|
/**
|
|
102
184
|
* Cache version string override. When this changes, all cached entries are
|
|
103
185
|
* effectively invalidated (new keys won't match old entries).
|
|
@@ -163,6 +245,7 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
|
|
|
163
245
|
private readonly baseUrl: string;
|
|
164
246
|
private readonly waitUntil?: (fn: () => Promise<void>) => void;
|
|
165
247
|
private readonly version?: string;
|
|
248
|
+
private readonly kv?: KVNamespace;
|
|
166
249
|
|
|
167
250
|
constructor(options: CFCacheStoreOptions<TEnv>) {
|
|
168
251
|
if (!options.ctx) {
|
|
@@ -179,6 +262,7 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
|
|
|
179
262
|
this.version = options.version ?? VERSION;
|
|
180
263
|
this.keyGenerator = options.keyGenerator;
|
|
181
264
|
this.waitUntil = (fn) => options.ctx.waitUntil(fn());
|
|
265
|
+
this.kv = options.kv;
|
|
182
266
|
}
|
|
183
267
|
|
|
184
268
|
/**
|
|
@@ -232,6 +316,10 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
|
|
|
232
316
|
return caches.default;
|
|
233
317
|
}
|
|
234
318
|
|
|
319
|
+
// ============================================================================
|
|
320
|
+
// Segment Cache Methods
|
|
321
|
+
// ============================================================================
|
|
322
|
+
|
|
235
323
|
/**
|
|
236
324
|
* Get cached entry data by key.
|
|
237
325
|
*
|
|
@@ -240,7 +328,8 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
|
|
|
240
328
|
* - If already REVALIDATING (and recent), returns shouldRevalidate: false
|
|
241
329
|
* - If fresh, returns shouldRevalidate: false
|
|
242
330
|
*
|
|
243
|
-
*
|
|
331
|
+
* On L1 miss, falls back to KV (L2) if configured.
|
|
332
|
+
* KV hits are promoted to L1 in the background.
|
|
244
333
|
*/
|
|
245
334
|
async get(key: string): Promise<CacheGetResult | null> {
|
|
246
335
|
try {
|
|
@@ -249,7 +338,7 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
|
|
|
249
338
|
const response = await cache.match(request);
|
|
250
339
|
|
|
251
340
|
if (!response) {
|
|
252
|
-
return
|
|
341
|
+
return this.kvGetSegment(key);
|
|
253
342
|
}
|
|
254
343
|
|
|
255
344
|
// Read status headers
|
|
@@ -292,6 +381,7 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
|
|
|
292
381
|
/**
|
|
293
382
|
* Store entry data with TTL and optional SWR window.
|
|
294
383
|
* Uses waitUntil for non-blocking write when available.
|
|
384
|
+
* When KV is configured, also persists to L2.
|
|
295
385
|
*/
|
|
296
386
|
async set(
|
|
297
387
|
key: string,
|
|
@@ -308,7 +398,8 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
|
|
|
308
398
|
const totalTtl = ttl + swrWindow;
|
|
309
399
|
const staleAt = Date.now() + ttl * 1000;
|
|
310
400
|
|
|
311
|
-
const
|
|
401
|
+
const body = JSON.stringify(data);
|
|
402
|
+
const response = new Response(body, {
|
|
312
403
|
headers: {
|
|
313
404
|
"Content-Type": "application/json",
|
|
314
405
|
"Cache-Control": `public, max-age=${totalTtl}`,
|
|
@@ -328,18 +419,35 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
|
|
|
328
419
|
// Blocking fallback
|
|
329
420
|
await putPromise;
|
|
330
421
|
}
|
|
422
|
+
|
|
423
|
+
// L2: persist to KV
|
|
424
|
+
this.kvSetSegment(key, data, staleAt, totalTtl);
|
|
331
425
|
} catch (error) {
|
|
332
426
|
console.error("[CFCacheStore] set failed:", error);
|
|
333
427
|
}
|
|
334
428
|
}
|
|
335
429
|
|
|
336
430
|
/**
|
|
337
|
-
* Delete a cached entry
|
|
431
|
+
* Delete a cached entry from L1 and L2.
|
|
338
432
|
*/
|
|
339
433
|
async delete(key: string): Promise<boolean> {
|
|
340
434
|
try {
|
|
341
435
|
const cache = await this.getCache();
|
|
342
|
-
|
|
436
|
+
const result = await cache.delete(this.keyToRequest(key));
|
|
437
|
+
|
|
438
|
+
// L2: delete from KV
|
|
439
|
+
if (this.kv && this.waitUntil) {
|
|
440
|
+
const kvKey = this.toKVKey(key);
|
|
441
|
+
this.waitUntil(async () => {
|
|
442
|
+
try {
|
|
443
|
+
await this.kv!.delete(kvKey);
|
|
444
|
+
} catch {
|
|
445
|
+
// KV delete failures are non-critical
|
|
446
|
+
}
|
|
447
|
+
});
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
return result;
|
|
343
451
|
} catch (error) {
|
|
344
452
|
console.error("[CFCacheStore] delete failed:", error);
|
|
345
453
|
return false;
|
|
@@ -353,6 +461,7 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
|
|
|
353
461
|
/**
|
|
354
462
|
* Get a cached Response by key (for document-level caching).
|
|
355
463
|
* Returns the response and whether it should be revalidated (SWR).
|
|
464
|
+
* Falls back to KV (L2) on L1 miss.
|
|
356
465
|
*/
|
|
357
466
|
async getResponse(
|
|
358
467
|
key: string,
|
|
@@ -363,7 +472,7 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
|
|
|
363
472
|
const response = await cache.match(request);
|
|
364
473
|
|
|
365
474
|
if (!response || response.status !== 200) {
|
|
366
|
-
return
|
|
475
|
+
return this.kvGetResponse(key);
|
|
367
476
|
}
|
|
368
477
|
|
|
369
478
|
// Check staleness
|
|
@@ -382,6 +491,7 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
|
|
|
382
491
|
|
|
383
492
|
/**
|
|
384
493
|
* Store a Response with TTL and optional SWR window (for document-level caching).
|
|
494
|
+
* When KV is configured, also persists to L2.
|
|
385
495
|
*/
|
|
386
496
|
async putResponse(
|
|
387
497
|
key: string,
|
|
@@ -398,12 +508,19 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
|
|
|
398
508
|
const totalTtl = ttl + swrWindow;
|
|
399
509
|
const staleAt = Date.now() + ttl * 1000;
|
|
400
510
|
|
|
511
|
+
// Clone body for potential KV write before consuming it for L1
|
|
512
|
+
const [l1Body, kvBody] = this.kv
|
|
513
|
+
? response.body
|
|
514
|
+
? response.body.tee()
|
|
515
|
+
: [null, null]
|
|
516
|
+
: [response.body, null];
|
|
517
|
+
|
|
401
518
|
// Clone and add cache headers
|
|
402
519
|
const headers = new Headers(response.headers);
|
|
403
520
|
headers.set("Cache-Control", `public, max-age=${totalTtl}`);
|
|
404
521
|
headers.set(CACHE_STALE_AT_HEADER, String(staleAt));
|
|
405
522
|
|
|
406
|
-
const toCache = new Response(
|
|
523
|
+
const toCache = new Response(l1Body, {
|
|
407
524
|
status: response.status,
|
|
408
525
|
statusText: response.statusText,
|
|
409
526
|
headers,
|
|
@@ -420,6 +537,36 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
|
|
|
420
537
|
// Blocking fallback
|
|
421
538
|
await putPromise;
|
|
422
539
|
}
|
|
540
|
+
|
|
541
|
+
// L2: persist to KV (KV requires expirationTtl >= 60s)
|
|
542
|
+
if (this.kv && this.waitUntil && totalTtl >= 60) {
|
|
543
|
+
const kvKey = this.toKVKey(`doc:${key}`);
|
|
544
|
+
const headersArray: [string, string][] = [];
|
|
545
|
+
response.headers.forEach((v, k) => headersArray.push([k, v]));
|
|
546
|
+
// Read body as ArrayBuffer and encode to base64 to preserve binary payloads
|
|
547
|
+
const bodyBuf = kvBody
|
|
548
|
+
? await new Response(kvBody).arrayBuffer()
|
|
549
|
+
: new ArrayBuffer(0);
|
|
550
|
+
const bodyBase64 = bufferToBase64(bodyBuf);
|
|
551
|
+
|
|
552
|
+
this.waitUntil(async () => {
|
|
553
|
+
try {
|
|
554
|
+
const envelope: KVResponseEnvelope = {
|
|
555
|
+
b: bodyBase64,
|
|
556
|
+
st: response.status,
|
|
557
|
+
stx: response.statusText,
|
|
558
|
+
hd: headersArray,
|
|
559
|
+
s: staleAt,
|
|
560
|
+
e: staleAt + swrWindow * 1000,
|
|
561
|
+
};
|
|
562
|
+
await this.kv!.put(kvKey, JSON.stringify(envelope), {
|
|
563
|
+
expirationTtl: totalTtl,
|
|
564
|
+
});
|
|
565
|
+
} catch (error) {
|
|
566
|
+
console.error("[CFCacheStore] KV putResponse failed:", error);
|
|
567
|
+
}
|
|
568
|
+
});
|
|
569
|
+
}
|
|
423
570
|
} catch (error) {
|
|
424
571
|
console.error("[CFCacheStore] putResponse failed:", error);
|
|
425
572
|
}
|
|
@@ -432,6 +579,7 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
|
|
|
432
579
|
/**
|
|
433
580
|
* Get a cached function result by key.
|
|
434
581
|
* Follows the same SWR pattern as get() for segment caching.
|
|
582
|
+
* Falls back to KV (L2) on L1 miss.
|
|
435
583
|
*/
|
|
436
584
|
async getItem(key: string): Promise<CacheItemResult | null> {
|
|
437
585
|
try {
|
|
@@ -439,7 +587,7 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
|
|
|
439
587
|
const request = this.keyToRequest(`fn:${key}`);
|
|
440
588
|
const response = await cache.match(request);
|
|
441
589
|
|
|
442
|
-
if (!response) return
|
|
590
|
+
if (!response) return this.kvGetItem(key);
|
|
443
591
|
|
|
444
592
|
const staleAt = Number(
|
|
445
593
|
response.headers.get(CACHE_STALE_AT_HEADER) ?? "0",
|
|
@@ -485,6 +633,7 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
|
|
|
485
633
|
|
|
486
634
|
/**
|
|
487
635
|
* Store a function result with TTL and optional SWR window.
|
|
636
|
+
* When KV is configured, also persists to L2.
|
|
488
637
|
*/
|
|
489
638
|
async setItem(
|
|
490
639
|
key: string,
|
|
@@ -519,11 +668,35 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
|
|
|
519
668
|
} else {
|
|
520
669
|
await putPromise;
|
|
521
670
|
}
|
|
671
|
+
|
|
672
|
+
// L2: persist to KV (KV requires expirationTtl >= 60s)
|
|
673
|
+
if (this.kv && this.waitUntil && totalTtl >= 60) {
|
|
674
|
+
const kvKey = this.toKVKey(`fn:${key}`);
|
|
675
|
+
this.waitUntil(async () => {
|
|
676
|
+
try {
|
|
677
|
+
const envelope: KVItemEnvelope = {
|
|
678
|
+
v: value,
|
|
679
|
+
h: options?.handles,
|
|
680
|
+
s: staleAt,
|
|
681
|
+
e: staleAt + swrWindow * 1000,
|
|
682
|
+
};
|
|
683
|
+
await this.kv!.put(kvKey, JSON.stringify(envelope), {
|
|
684
|
+
expirationTtl: totalTtl,
|
|
685
|
+
});
|
|
686
|
+
} catch (error) {
|
|
687
|
+
console.error("[CFCacheStore] KV setItem failed:", error);
|
|
688
|
+
}
|
|
689
|
+
});
|
|
690
|
+
}
|
|
522
691
|
} catch (error) {
|
|
523
692
|
console.error("[CFCacheStore] setItem failed:", error);
|
|
524
693
|
}
|
|
525
694
|
}
|
|
526
695
|
|
|
696
|
+
// ============================================================================
|
|
697
|
+
// Key Helpers
|
|
698
|
+
// ============================================================================
|
|
699
|
+
|
|
527
700
|
/**
|
|
528
701
|
* Convert string key to Request object for CF Cache API.
|
|
529
702
|
* Includes version in URL if specified (for cache invalidation on code changes).
|
|
@@ -537,4 +710,273 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
|
|
|
537
710
|
method: "GET",
|
|
538
711
|
});
|
|
539
712
|
}
|
|
713
|
+
|
|
714
|
+
/**
|
|
715
|
+
* Convert string key to KV key string.
|
|
716
|
+
* Uses same version prefix as Cache API for consistent invalidation.
|
|
717
|
+
* @internal
|
|
718
|
+
*/
|
|
719
|
+
private toKVKey(key: string): string {
|
|
720
|
+
const versionPath = this.version ? `v/${this.version}/` : "";
|
|
721
|
+
return `${versionPath}${key}`;
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
// ============================================================================
|
|
725
|
+
// KV L2 Helpers
|
|
726
|
+
// ============================================================================
|
|
727
|
+
|
|
728
|
+
/**
|
|
729
|
+
* KV fallback for segment cache reads.
|
|
730
|
+
* Returns null if KV is not configured, entry is missing, or expired.
|
|
731
|
+
* Promotes hits to L1 via waitUntil.
|
|
732
|
+
* @internal
|
|
733
|
+
*/
|
|
734
|
+
private async kvGetSegment(key: string): Promise<CacheGetResult | null> {
|
|
735
|
+
if (!this.kv) return null;
|
|
736
|
+
|
|
737
|
+
try {
|
|
738
|
+
const kvKey = this.toKVKey(key);
|
|
739
|
+
const raw = await this.kv.get(kvKey, { type: "json" });
|
|
740
|
+
if (!raw) return null;
|
|
741
|
+
|
|
742
|
+
const envelope = raw as KVSegmentEnvelope;
|
|
743
|
+
const now = Date.now();
|
|
744
|
+
|
|
745
|
+
// Hard-expired — treat as miss
|
|
746
|
+
if (now > envelope.e) return null;
|
|
747
|
+
|
|
748
|
+
const shouldRevalidate = now > envelope.s;
|
|
749
|
+
|
|
750
|
+
// Promote to L1 in background
|
|
751
|
+
this.promoteSegmentToL1(key, envelope);
|
|
752
|
+
|
|
753
|
+
return { data: envelope.d, shouldRevalidate };
|
|
754
|
+
} catch (error) {
|
|
755
|
+
console.error("[CFCacheStore] KV get failed:", error);
|
|
756
|
+
return null;
|
|
757
|
+
}
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
/**
|
|
761
|
+
* Write segment data to KV.
|
|
762
|
+
* @internal
|
|
763
|
+
*/
|
|
764
|
+
private kvSetSegment(
|
|
765
|
+
key: string,
|
|
766
|
+
data: CachedEntryData,
|
|
767
|
+
staleAt: number,
|
|
768
|
+
totalTtl: number,
|
|
769
|
+
): void {
|
|
770
|
+
// KV requires expirationTtl >= 60s. Skip write for short-lived entries.
|
|
771
|
+
if (!this.kv || !this.waitUntil || totalTtl < 60) return;
|
|
772
|
+
|
|
773
|
+
const kvKey = this.toKVKey(key);
|
|
774
|
+
const swrWindow = totalTtl * 1000 - (staleAt - Date.now());
|
|
775
|
+
const expiresAt = staleAt + swrWindow;
|
|
776
|
+
|
|
777
|
+
this.waitUntil(async () => {
|
|
778
|
+
try {
|
|
779
|
+
const envelope: KVSegmentEnvelope = {
|
|
780
|
+
d: data,
|
|
781
|
+
s: staleAt,
|
|
782
|
+
e: expiresAt,
|
|
783
|
+
};
|
|
784
|
+
await this.kv!.put(kvKey, JSON.stringify(envelope), {
|
|
785
|
+
expirationTtl: totalTtl,
|
|
786
|
+
});
|
|
787
|
+
} catch (error) {
|
|
788
|
+
console.error("[CFCacheStore] KV set failed:", error);
|
|
789
|
+
}
|
|
790
|
+
});
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
/**
|
|
794
|
+
* Promote segment data from KV to L1 Cache API.
|
|
795
|
+
* @internal
|
|
796
|
+
*/
|
|
797
|
+
private promoteSegmentToL1(key: string, envelope: KVSegmentEnvelope): void {
|
|
798
|
+
if (!this.waitUntil) return;
|
|
799
|
+
|
|
800
|
+
this.waitUntil(async () => {
|
|
801
|
+
try {
|
|
802
|
+
const now = Date.now();
|
|
803
|
+
const remainingTtl = Math.max(1, Math.floor((envelope.e - now) / 1000));
|
|
804
|
+
const cache = await this.getCache();
|
|
805
|
+
const request = this.keyToRequest(key);
|
|
806
|
+
|
|
807
|
+
const response = new Response(JSON.stringify(envelope.d), {
|
|
808
|
+
headers: {
|
|
809
|
+
"Content-Type": "application/json",
|
|
810
|
+
"Cache-Control": `public, max-age=${remainingTtl}`,
|
|
811
|
+
[CACHE_STALE_AT_HEADER]: String(envelope.s),
|
|
812
|
+
[CACHE_STATUS_HEADER]: "HIT",
|
|
813
|
+
},
|
|
814
|
+
});
|
|
815
|
+
|
|
816
|
+
await cache.put(request, response);
|
|
817
|
+
} catch (error) {
|
|
818
|
+
console.error("[CFCacheStore] L1 promote failed:", error);
|
|
819
|
+
}
|
|
820
|
+
});
|
|
821
|
+
}
|
|
822
|
+
|
|
823
|
+
/**
|
|
824
|
+
* KV fallback for function cache reads.
|
|
825
|
+
* @internal
|
|
826
|
+
*/
|
|
827
|
+
private async kvGetItem(key: string): Promise<CacheItemResult | null> {
|
|
828
|
+
if (!this.kv) return null;
|
|
829
|
+
|
|
830
|
+
try {
|
|
831
|
+
const kvKey = this.toKVKey(`fn:${key}`);
|
|
832
|
+
const raw = await this.kv.get(kvKey, { type: "json" });
|
|
833
|
+
if (!raw) return null;
|
|
834
|
+
|
|
835
|
+
const envelope = raw as KVItemEnvelope;
|
|
836
|
+
const now = Date.now();
|
|
837
|
+
|
|
838
|
+
if (now > envelope.e) return null;
|
|
839
|
+
|
|
840
|
+
const shouldRevalidate = now > envelope.s;
|
|
841
|
+
|
|
842
|
+
// Promote to L1
|
|
843
|
+
this.promoteItemToL1(key, envelope);
|
|
844
|
+
|
|
845
|
+
return {
|
|
846
|
+
value: envelope.v,
|
|
847
|
+
handles: envelope.h,
|
|
848
|
+
shouldRevalidate,
|
|
849
|
+
};
|
|
850
|
+
} catch (error) {
|
|
851
|
+
console.error("[CFCacheStore] KV getItem failed:", error);
|
|
852
|
+
return null;
|
|
853
|
+
}
|
|
854
|
+
}
|
|
855
|
+
|
|
856
|
+
/**
|
|
857
|
+
* Promote function cache data from KV to L1.
|
|
858
|
+
* @internal
|
|
859
|
+
*/
|
|
860
|
+
private promoteItemToL1(key: string, envelope: KVItemEnvelope): void {
|
|
861
|
+
if (!this.waitUntil) return;
|
|
862
|
+
|
|
863
|
+
this.waitUntil(async () => {
|
|
864
|
+
try {
|
|
865
|
+
const now = Date.now();
|
|
866
|
+
const remainingTtl = Math.max(1, Math.floor((envelope.e - now) / 1000));
|
|
867
|
+
const cache = await this.getCache();
|
|
868
|
+
const request = this.keyToRequest(`fn:${key}`);
|
|
869
|
+
|
|
870
|
+
const body = JSON.stringify({ value: envelope.v, handles: envelope.h });
|
|
871
|
+
const response = new Response(body, {
|
|
872
|
+
headers: {
|
|
873
|
+
"Content-Type": "application/json",
|
|
874
|
+
"Cache-Control": `public, max-age=${remainingTtl}`,
|
|
875
|
+
[CACHE_STALE_AT_HEADER]: String(envelope.s),
|
|
876
|
+
[CACHE_STATUS_HEADER]: "HIT",
|
|
877
|
+
},
|
|
878
|
+
});
|
|
879
|
+
|
|
880
|
+
await cache.put(request, response);
|
|
881
|
+
} catch (error) {
|
|
882
|
+
console.error("[CFCacheStore] L1 item promote failed:", error);
|
|
883
|
+
}
|
|
884
|
+
});
|
|
885
|
+
}
|
|
886
|
+
|
|
887
|
+
/**
|
|
888
|
+
* KV fallback for document cache reads.
|
|
889
|
+
* @internal
|
|
890
|
+
*/
|
|
891
|
+
private async kvGetResponse(
|
|
892
|
+
key: string,
|
|
893
|
+
): Promise<{ response: Response; shouldRevalidate: boolean } | null> {
|
|
894
|
+
if (!this.kv) return null;
|
|
895
|
+
|
|
896
|
+
try {
|
|
897
|
+
const kvKey = this.toKVKey(`doc:${key}`);
|
|
898
|
+
const raw = await this.kv.get(kvKey, { type: "json" });
|
|
899
|
+
if (!raw) return null;
|
|
900
|
+
|
|
901
|
+
const envelope = raw as KVResponseEnvelope;
|
|
902
|
+
const now = Date.now();
|
|
903
|
+
|
|
904
|
+
if (now > envelope.e) return null;
|
|
905
|
+
|
|
906
|
+
const shouldRevalidate = now > envelope.s;
|
|
907
|
+
|
|
908
|
+
// Reconstruct Response (decode base64 → binary)
|
|
909
|
+
const headers = new Headers(envelope.hd);
|
|
910
|
+
const bodyBuffer = base64ToBuffer(envelope.b);
|
|
911
|
+
const response = new Response(bodyBuffer, {
|
|
912
|
+
status: envelope.st,
|
|
913
|
+
statusText: envelope.stx,
|
|
914
|
+
headers,
|
|
915
|
+
});
|
|
916
|
+
|
|
917
|
+
// Promote to L1
|
|
918
|
+
this.promoteResponseToL1(key, envelope);
|
|
919
|
+
|
|
920
|
+
return { response, shouldRevalidate };
|
|
921
|
+
} catch (error) {
|
|
922
|
+
console.error("[CFCacheStore] KV getResponse failed:", error);
|
|
923
|
+
return null;
|
|
924
|
+
}
|
|
925
|
+
}
|
|
926
|
+
|
|
927
|
+
/**
|
|
928
|
+
* Promote document cache data from KV to L1.
|
|
929
|
+
* @internal
|
|
930
|
+
*/
|
|
931
|
+
private promoteResponseToL1(key: string, envelope: KVResponseEnvelope): void {
|
|
932
|
+
if (!this.waitUntil) return;
|
|
933
|
+
|
|
934
|
+
this.waitUntil(async () => {
|
|
935
|
+
try {
|
|
936
|
+
const now = Date.now();
|
|
937
|
+
const remainingTtl = Math.max(1, Math.floor((envelope.e - now) / 1000));
|
|
938
|
+
const cache = await this.getCache();
|
|
939
|
+
const request = this.keyToRequest(`doc:${key}`);
|
|
940
|
+
|
|
941
|
+
const headers = new Headers(envelope.hd);
|
|
942
|
+
headers.set("Cache-Control", `public, max-age=${remainingTtl}`);
|
|
943
|
+
headers.set(CACHE_STALE_AT_HEADER, String(envelope.s));
|
|
944
|
+
|
|
945
|
+
const bodyBuffer = base64ToBuffer(envelope.b);
|
|
946
|
+
const response = new Response(bodyBuffer, {
|
|
947
|
+
status: envelope.st,
|
|
948
|
+
statusText: envelope.stx,
|
|
949
|
+
headers,
|
|
950
|
+
});
|
|
951
|
+
|
|
952
|
+
await cache.put(request, response);
|
|
953
|
+
} catch (error) {
|
|
954
|
+
console.error("[CFCacheStore] L1 response promote failed:", error);
|
|
955
|
+
}
|
|
956
|
+
});
|
|
957
|
+
}
|
|
958
|
+
}
|
|
959
|
+
|
|
960
|
+
// ============================================================================
|
|
961
|
+
// Base64 Helpers (binary-safe response body encoding for KV)
|
|
962
|
+
// ============================================================================
|
|
963
|
+
|
|
964
|
+
/** Encode ArrayBuffer to base64 string. */
|
|
965
|
+
function bufferToBase64(buffer: ArrayBuffer): string {
|
|
966
|
+
const bytes = new Uint8Array(buffer);
|
|
967
|
+
let binary = "";
|
|
968
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
969
|
+
binary += String.fromCharCode(bytes[i]!);
|
|
970
|
+
}
|
|
971
|
+
return btoa(binary);
|
|
972
|
+
}
|
|
973
|
+
|
|
974
|
+
/** Decode base64 string to ArrayBuffer. */
|
|
975
|
+
function base64ToBuffer(base64: string): ArrayBuffer {
|
|
976
|
+
const binary = atob(base64);
|
|
977
|
+
const bytes = new Uint8Array(binary.length);
|
|
978
|
+
for (let i = 0; i < binary.length; i++) {
|
|
979
|
+
bytes[i] = binary.charCodeAt(i);
|
|
980
|
+
}
|
|
981
|
+
return bytes.buffer;
|
|
540
982
|
}
|
package/src/cache/cf/index.ts
CHANGED
|
@@ -10,7 +10,11 @@
|
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
// Public API
|
|
13
|
-
export {
|
|
13
|
+
export {
|
|
14
|
+
CFCacheStore,
|
|
15
|
+
type CFCacheStoreOptions,
|
|
16
|
+
type KVNamespace,
|
|
17
|
+
} from "./cf-cache-store.js";
|
|
14
18
|
|
|
15
19
|
// Header constants for debugging and inspection
|
|
16
20
|
export {
|
package/src/cache/index.ts
CHANGED
|
@@ -71,9 +71,9 @@ export function redirect(
|
|
|
71
71
|
// actions both deliver state through Flight payloads, so suppress for those.
|
|
72
72
|
if (
|
|
73
73
|
reqCtx &&
|
|
74
|
-
!reqCtx.
|
|
74
|
+
!reqCtx.originalUrl.searchParams.has("_rsc_partial") &&
|
|
75
75
|
!reqCtx.request.headers.has("rsc-action") &&
|
|
76
|
-
!reqCtx.
|
|
76
|
+
!reqCtx.originalUrl.searchParams.has("_rsc_action")
|
|
77
77
|
) {
|
|
78
78
|
console.warn(
|
|
79
79
|
`[Router] redirect() with state during a full-page (SSR) request to "${url}". ` +
|
package/src/router/middleware.ts
CHANGED
|
@@ -21,6 +21,7 @@ import type {
|
|
|
21
21
|
import { _getRequestContext } from "../server/request-context.js";
|
|
22
22
|
import { isAutoGeneratedRouteName } from "../route-name.js";
|
|
23
23
|
import { appendMetric, createMetricsStore } from "./metrics.js";
|
|
24
|
+
import { stripInternalParams } from "./handler-context.js";
|
|
24
25
|
|
|
25
26
|
// Re-export types and cookie utilities for backward compatibility
|
|
26
27
|
export type {
|
|
@@ -147,7 +148,7 @@ export function createMiddlewareContext<TEnv>(
|
|
|
147
148
|
search?: Record<string, unknown>,
|
|
148
149
|
) => string,
|
|
149
150
|
): MiddlewareContext<TEnv> {
|
|
150
|
-
const url = new URL(request.url);
|
|
151
|
+
const url = stripInternalParams(new URL(request.url));
|
|
151
152
|
|
|
152
153
|
// Track the initial response to detect pre/post-next() phase.
|
|
153
154
|
// Before next(): responseHolder.response === initialResponse (the stub).
|