@rangojs/router 0.0.0-experimental.32 → 0.0.0-experimental.3232cd17
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 +4 -0
- package/README.md +198 -44
- package/dist/bin/rango.js +287 -105
- package/dist/testing/vitest.js +82 -0
- package/dist/vite/index.js +3248 -1117
- package/dist/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
- package/package.json +73 -21
- package/skills/api-client/SKILL.md +211 -0
- package/skills/breadcrumbs/SKILL.md +107 -1
- package/skills/bundle-analysis/SKILL.md +159 -0
- package/skills/cache-guide/SKILL.md +245 -21
- package/skills/caching/SKILL.md +302 -6
- package/skills/composability/SKILL.md +27 -2
- package/skills/css/SKILL.md +76 -0
- package/skills/document-cache/SKILL.md +78 -55
- package/skills/handler-use/SKILL.md +364 -0
- package/skills/hooks/SKILL.md +270 -30
- package/skills/host-router/SKILL.md +82 -22
- package/skills/i18n/SKILL.md +276 -0
- package/skills/intercept/SKILL.md +49 -5
- package/skills/layout/SKILL.md +35 -9
- package/skills/links/SKILL.md +249 -17
- package/skills/loader/SKILL.md +294 -30
- package/skills/middleware/SKILL.md +52 -13
- package/skills/migrate-nextjs/SKILL.md +584 -0
- package/skills/migrate-react-router/SKILL.md +769 -0
- package/skills/mime-routes/SKILL.md +27 -0
- package/skills/observability/SKILL.md +137 -0
- package/skills/parallel/SKILL.md +203 -7
- package/skills/prerender/SKILL.md +123 -100
- package/skills/rango/SKILL.md +250 -22
- package/skills/react-compiler/SKILL.md +168 -0
- package/skills/response-routes/SKILL.md +122 -47
- package/skills/route/SKILL.md +97 -5
- package/skills/router-setup/SKILL.md +90 -5
- package/skills/server-actions/SKILL.md +775 -0
- package/skills/streams-and-websockets/SKILL.md +283 -0
- package/skills/tailwind/SKILL.md +27 -3
- package/skills/testing/SKILL.md +129 -0
- package/skills/testing/bindings.md +89 -0
- package/skills/testing/cache-prerender.md +124 -0
- package/skills/testing/client-components.md +122 -0
- package/skills/testing/e2e-parity.md +125 -0
- package/skills/testing/flight.md +92 -0
- package/skills/testing/handles.md +129 -0
- package/skills/testing/loader.md +128 -0
- package/skills/testing/middleware.md +99 -0
- package/skills/testing/render-handler.md +121 -0
- package/skills/testing/response-routes.md +95 -0
- package/skills/testing/reverse-and-types.md +84 -0
- package/skills/testing/server-actions.md +107 -0
- package/skills/testing/server-tree.md +128 -0
- package/skills/testing/setup.md +120 -0
- package/skills/typesafety/SKILL.md +329 -27
- package/skills/use-cache/SKILL.md +36 -5
- package/skills/view-transitions/SKILL.md +294 -0
- package/src/__augment-tests__/augment.ts +81 -0
- package/src/__augment-tests__/augmented.check.ts +116 -0
- package/src/__internal.ts +67 -40
- package/src/browser/action-coordinator.ts +53 -36
- package/src/browser/action-fence.ts +47 -0
- package/src/browser/app-shell.ts +39 -0
- package/src/browser/app-version.ts +14 -0
- package/src/browser/cookie-name.ts +140 -0
- package/src/browser/event-controller.ts +86 -147
- package/src/browser/history-state.ts +21 -0
- package/src/browser/index.ts +3 -3
- package/src/browser/invalidate-client-cache.ts +52 -0
- package/src/browser/link-interceptor.ts +4 -0
- package/src/browser/navigation-bridge.ts +148 -19
- package/src/browser/navigation-client.ts +187 -67
- package/src/browser/navigation-store-handle.ts +38 -0
- package/src/browser/navigation-store.ts +76 -67
- package/src/browser/navigation-transaction.ts +18 -66
- package/src/browser/partial-update.ts +123 -94
- package/src/browser/prefetch/cache.ts +214 -36
- package/src/browser/prefetch/fetch.ts +260 -38
- package/src/browser/prefetch/policy.ts +6 -0
- package/src/browser/prefetch/queue.ts +126 -20
- package/src/browser/prefetch/resource-ready.ts +77 -0
- package/src/browser/rango-state.ts +158 -76
- package/src/browser/react/Link.tsx +93 -11
- package/src/browser/react/NavigationProvider.tsx +115 -34
- package/src/browser/react/ScrollRestoration.tsx +10 -6
- package/src/browser/react/context.ts +7 -2
- package/src/browser/react/filter-segment-order.ts +49 -7
- package/src/browser/react/index.ts +0 -48
- package/src/browser/react/location-state-shared.ts +166 -8
- package/src/browser/react/location-state.ts +39 -14
- package/src/browser/react/use-action.ts +6 -15
- package/src/browser/react/use-handle.ts +23 -69
- package/src/browser/react/use-link-status.ts +0 -4
- package/src/browser/react/use-navigation.ts +22 -5
- package/src/browser/react/use-params.ts +20 -10
- package/src/browser/react/use-reverse.ts +106 -0
- package/src/browser/react/use-router.ts +46 -11
- package/src/browser/react/use-search-params.ts +0 -5
- package/src/browser/react/use-segments.ts +11 -21
- package/src/browser/response-adapter.ts +52 -1
- package/src/browser/rsc-router.tsx +215 -76
- package/src/browser/scroll-restoration.ts +46 -39
- package/src/browser/segment-reconciler.ts +36 -9
- package/src/browser/segment-structure-assert.ts +2 -2
- package/src/browser/server-action-bridge.ts +176 -50
- package/src/browser/types.ts +95 -11
- package/src/browser/validate-redirect-origin.ts +43 -16
- package/src/build/collect-fallback-refs.ts +107 -0
- package/src/build/generate-manifest.ts +65 -40
- package/src/build/generate-route-types.ts +5 -0
- package/src/build/index.ts +8 -2
- package/src/build/prefix-tree-utils.ts +123 -0
- package/src/build/route-trie.ts +137 -32
- package/src/build/route-types/codegen.ts +4 -4
- package/src/build/route-types/include-resolution.ts +9 -2
- package/src/build/route-types/param-extraction.ts +6 -3
- package/src/build/route-types/per-module-writer.ts +7 -4
- package/src/build/route-types/router-processing.ts +278 -96
- package/src/build/route-types/scan-filter.ts +9 -2
- package/src/build/route-types/source-scan.ts +118 -0
- package/src/build/runtime-discovery.ts +9 -20
- package/src/cache/cache-error.ts +104 -0
- package/src/cache/cache-policy.ts +68 -28
- package/src/cache/cache-runtime.ts +149 -43
- package/src/cache/cache-scope.ts +148 -81
- package/src/cache/cache-tag.ts +98 -0
- package/src/cache/cf/cf-cache-store.ts +2550 -93
- package/src/cache/cf/index.ts +11 -17
- package/src/cache/document-cache.ts +78 -27
- package/src/cache/handle-snapshot.ts +63 -0
- package/src/cache/index.ts +23 -20
- package/src/cache/memory-segment-store.ts +136 -37
- package/src/cache/profile-registry.ts +6 -30
- package/src/cache/read-through-swr.ts +41 -11
- package/src/cache/segment-codec.ts +0 -16
- package/src/cache/tag-invalidation.ts +230 -0
- package/src/cache/taint.ts +55 -0
- package/src/cache/types.ts +33 -100
- package/src/cache/vercel/index.ts +11 -0
- package/src/cache/vercel/vercel-cache-store.ts +799 -0
- package/src/client.rsc.tsx +6 -21
- package/src/client.tsx +108 -290
- package/src/component-utils.ts +19 -0
- package/src/context-var.ts +84 -2
- package/src/debug.ts +2 -2
- package/src/decode-loader-results.ts +36 -0
- package/src/defer.ts +196 -0
- package/src/deps/ssr.ts +0 -1
- package/src/errors.ts +30 -4
- package/src/handle.ts +70 -22
- package/src/handles/MetaTags.tsx +0 -14
- package/src/handles/breadcrumbs.ts +16 -5
- package/src/handles/meta.ts +0 -39
- package/src/host/cookie-handler.ts +0 -36
- package/src/host/errors.ts +0 -24
- package/src/host/index.ts +8 -2
- package/src/host/pattern-matcher.ts +7 -50
- package/src/host/router.ts +107 -99
- package/src/host/testing.ts +40 -27
- package/src/host/types.ts +37 -4
- package/src/host/utils.ts +1 -1
- package/src/href-client.ts +137 -22
- package/src/index.rsc.ts +52 -26
- package/src/index.ts +100 -38
- package/src/internal-debug.ts +2 -4
- package/src/loader-store.ts +500 -0
- package/src/loader.rsc.ts +20 -13
- package/src/loader.ts +12 -11
- package/src/missing-id-error.ts +68 -0
- package/src/network-error-thrower.tsx +1 -6
- package/src/outlet-context.ts +1 -1
- package/src/outlet-provider.tsx +1 -5
- package/src/prerender/param-hash.ts +10 -11
- package/src/prerender/store.ts +37 -41
- package/src/prerender.ts +198 -82
- package/src/redirect-origin.ts +100 -0
- package/src/response-utils.ts +37 -0
- package/src/reverse.ts +65 -15
- package/src/root-error-boundary.tsx +1 -19
- package/src/route-content-wrapper.tsx +7 -72
- package/src/route-definition/dsl-helpers.ts +437 -274
- package/src/route-definition/helper-factories.ts +29 -139
- package/src/route-definition/helpers-types.ts +113 -37
- package/src/route-definition/index.ts +3 -0
- package/src/route-definition/redirect.ts +52 -10
- package/src/route-definition/resolve-handler-use.ts +161 -0
- package/src/route-definition/use-item-types.ts +32 -0
- package/src/route-map-builder.ts +7 -17
- package/src/route-types.ts +37 -41
- package/src/router/basename.ts +14 -0
- package/src/router/content-negotiation.ts +108 -9
- package/src/router/error-handling.ts +13 -17
- package/src/router/find-match.ts +45 -22
- package/src/router/handler-context.ts +83 -41
- package/src/router/intercept-resolution.ts +25 -23
- package/src/router/lazy-includes.ts +19 -53
- package/src/router/loader-resolution.ts +213 -30
- package/src/router/logging.ts +5 -8
- package/src/router/manifest.ts +49 -45
- package/src/router/match-api.ts +120 -204
- package/src/router/match-context.ts +0 -22
- package/src/router/match-handlers.ts +58 -58
- package/src/router/match-middleware/background-revalidation.ts +27 -6
- package/src/router/match-middleware/cache-lookup.ts +205 -249
- package/src/router/match-middleware/cache-store.ts +45 -32
- package/src/router/match-middleware/intercept-resolution.ts +8 -28
- package/src/router/match-middleware/segment-resolution.ts +52 -18
- package/src/router/match-pipelines.ts +1 -42
- package/src/router/match-result.ts +104 -40
- package/src/router/metrics.ts +5 -34
- package/src/router/middleware-types.ts +13 -142
- package/src/router/middleware.ts +173 -143
- package/src/router/navigation-snapshot.ts +131 -0
- package/src/router/params-util.ts +23 -0
- package/src/router/pattern-matching.ts +109 -63
- package/src/router/prerender-match.ts +190 -54
- package/src/router/preview-match.ts +32 -102
- package/src/router/request-classification.ts +276 -0
- package/src/router/revalidation.ts +63 -55
- package/src/router/route-snapshot.ts +244 -0
- package/src/router/router-context.ts +6 -28
- package/src/router/router-interfaces.ts +100 -35
- package/src/router/router-options.ts +91 -11
- package/src/router/router-registry.ts +2 -5
- package/src/router/segment-resolution/fresh.ts +242 -75
- package/src/router/segment-resolution/helpers.ts +63 -24
- package/src/router/segment-resolution/loader-cache.ts +41 -37
- package/src/router/segment-resolution/revalidation.ts +456 -372
- package/src/router/segment-resolution/static-store.ts +19 -5
- package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
- package/src/router/segment-resolution/view-transition-default.ts +36 -0
- package/src/router/segment-resolution.ts +4 -1
- package/src/router/segment-wrappers.ts +2 -3
- package/src/router/state-cookie-name.ts +33 -0
- package/src/router/substitute-pattern-params.ts +56 -0
- package/src/router/telemetry-otel.ts +0 -20
- package/src/router/telemetry.ts +96 -19
- package/src/router/timeout.ts +0 -20
- package/src/router/trie-matching.ts +91 -46
- package/src/router/types.ts +10 -63
- package/src/router/url-params.ts +44 -0
- package/src/router.ts +134 -43
- package/src/rsc/handler-context.ts +3 -2
- package/src/rsc/handler.ts +492 -383
- package/src/rsc/helpers.ts +162 -46
- package/src/rsc/index.ts +1 -1
- package/src/rsc/json-route-result.ts +38 -0
- package/src/rsc/loader-fetch.ts +23 -3
- package/src/rsc/manifest-init.ts +33 -42
- package/src/rsc/origin-guard.ts +39 -25
- package/src/rsc/progressive-enhancement.ts +30 -3
- package/src/rsc/redirect-guard.ts +99 -0
- package/src/rsc/response-error.ts +79 -12
- package/src/rsc/response-route-handler.ts +90 -63
- package/src/rsc/rsc-rendering.ts +56 -54
- package/src/rsc/runtime-warnings.ts +23 -10
- package/src/rsc/server-action.ts +74 -67
- package/src/rsc/ssr-setup.ts +18 -2
- package/src/rsc/types.ts +25 -6
- package/src/runtime-env.ts +18 -0
- package/src/search-params.ts +4 -20
- package/src/segment-content-promise.ts +67 -0
- package/src/segment-loader-promise.ts +134 -0
- package/src/segment-system.tsx +272 -129
- package/src/serialize.ts +243 -0
- package/src/server/context.ts +309 -61
- package/src/server/cookie-store.ts +80 -5
- package/src/server/handle-store.ts +26 -24
- package/src/server/loader-registry.ts +10 -28
- package/src/server/request-context.ts +338 -126
- package/src/ssr/index.tsx +23 -15
- package/src/static-handler.ts +27 -18
- package/src/testing/cache-status.ts +162 -0
- package/src/testing/collect-handle.ts +40 -0
- package/src/testing/dispatch.ts +618 -0
- package/src/testing/dom.entry.ts +22 -0
- package/src/testing/e2e/fixture.ts +188 -0
- package/src/testing/e2e/index.ts +128 -0
- package/src/testing/e2e/matchers.ts +35 -0
- package/src/testing/e2e/page-helpers.ts +272 -0
- package/src/testing/e2e/parity.ts +387 -0
- package/src/testing/e2e/server.ts +195 -0
- package/src/testing/flight-matchers.ts +97 -0
- package/src/testing/flight-normalize.ts +11 -0
- package/src/testing/flight-runtime.d.ts +57 -0
- package/src/testing/flight-tree.ts +682 -0
- package/src/testing/flight.entry.ts +52 -0
- package/src/testing/flight.ts +232 -0
- package/src/testing/generated-routes.ts +183 -0
- package/src/testing/index.ts +99 -0
- package/src/testing/internal/context.ts +348 -0
- package/src/testing/internal/flight-client-globals.ts +30 -0
- package/src/testing/internal/seed-vars.ts +54 -0
- package/src/testing/render-handler.ts +330 -0
- package/src/testing/render-route.tsx +566 -0
- package/src/testing/run-loader.ts +378 -0
- package/src/testing/run-middleware.ts +205 -0
- package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
- package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
- package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
- package/src/testing/vitest-stubs/version.ts +5 -0
- package/src/testing/vitest.ts +305 -0
- package/src/theme/ThemeProvider.tsx +0 -52
- package/src/theme/ThemeScript.tsx +0 -6
- package/src/theme/constants.ts +0 -12
- package/src/theme/index.ts +0 -7
- package/src/theme/theme-context.ts +1 -5
- package/src/theme/theme-script.ts +0 -14
- package/src/theme/use-theme.ts +0 -3
- package/src/types/boundaries.ts +0 -35
- package/src/types/cache-types.ts +17 -8
- package/src/types/error-types.ts +30 -90
- package/src/types/global-namespace.ts +54 -41
- package/src/types/handler-context.ts +233 -81
- package/src/types/index.ts +1 -10
- package/src/types/loader-types.ts +44 -15
- package/src/types/request-scope.ts +107 -0
- package/src/types/route-config.ts +6 -50
- package/src/types/route-entry.ts +19 -7
- package/src/types/segments.ts +37 -14
- package/src/urls/include-helper.ts +33 -70
- package/src/urls/index.ts +1 -11
- package/src/urls/path-helper-types.ts +58 -11
- package/src/urls/path-helper.ts +57 -111
- package/src/urls/pattern-types.ts +48 -19
- package/src/urls/response-types.ts +25 -22
- package/src/urls/type-extraction.ts +58 -139
- package/src/urls/urls-function.ts +1 -18
- package/src/use-loader.tsx +346 -89
- package/src/vite/debug.ts +185 -0
- package/src/vite/discovery/bundle-postprocess.ts +36 -38
- package/src/vite/discovery/discover-routers.ts +130 -85
- package/src/vite/discovery/discovery-errors.ts +194 -0
- package/src/vite/discovery/gate-state.ts +171 -0
- package/src/vite/discovery/prerender-collection.ts +192 -99
- package/src/vite/discovery/route-types-writer.ts +40 -84
- package/src/vite/discovery/self-gen-tracking.ts +27 -1
- package/src/vite/discovery/state.ts +51 -6
- package/src/vite/discovery/virtual-module-codegen.ts +14 -34
- package/src/vite/index.ts +8 -0
- package/src/vite/plugin-types.ts +187 -69
- package/src/vite/plugins/cjs-to-esm.ts +8 -18
- package/src/vite/plugins/client-ref-dedup.ts +16 -11
- package/src/vite/plugins/client-ref-hashing.ts +28 -15
- package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
- package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
- package/src/vite/plugins/cloudflare-protocol-stub.ts +194 -0
- package/src/vite/plugins/expose-action-id.ts +49 -98
- package/src/vite/plugins/expose-id-utils.ts +11 -50
- package/src/vite/plugins/expose-ids/export-analysis.ts +76 -34
- package/src/vite/plugins/expose-ids/handler-transform.ts +10 -48
- package/src/vite/plugins/expose-ids/loader-transform.ts +3 -20
- package/src/vite/plugins/expose-ids/router-transform.ts +20 -16
- package/src/vite/plugins/expose-internal-ids.ts +554 -317
- package/src/vite/plugins/performance-tracks.ts +89 -0
- package/src/vite/plugins/refresh-cmd.ts +89 -27
- package/src/vite/plugins/use-cache-transform.ts +73 -83
- package/src/vite/plugins/vercel-output.ts +258 -0
- package/src/vite/plugins/version-injector.ts +21 -25
- package/src/vite/plugins/version-plugin.ts +41 -20
- package/src/vite/plugins/virtual-entries.ts +2 -17
- package/src/vite/rango.ts +257 -289
- package/src/vite/router-discovery.ts +930 -140
- package/src/vite/utils/ast-handler-extract.ts +15 -31
- package/src/vite/utils/banner.ts +4 -4
- package/src/vite/utils/bundle-analysis.ts +10 -15
- package/src/vite/utils/client-chunks.ts +184 -0
- package/src/vite/utils/forward-user-plugins.ts +171 -0
- package/src/vite/utils/manifest-utils.ts +4 -59
- package/src/vite/utils/package-resolution.ts +20 -52
- package/src/vite/utils/prerender-utils.ts +27 -29
- package/src/vite/utils/shared-utils.ts +92 -42
- package/src/browser/action-response-classifier.ts +0 -99
- package/src/browser/react/use-client-cache.ts +0 -58
- package/src/browser/shallow.ts +0 -40
- package/src/handles/index.ts +0 -7
- package/src/router/middleware-cookies.ts +0 -55
package/src/theme/use-theme.ts
CHANGED
|
@@ -27,9 +27,6 @@ import type { UseThemeReturn } from "./types.js";
|
|
|
27
27
|
*
|
|
28
28
|
* Must be used within a ThemeProvider (which is automatically included
|
|
29
29
|
* in NavigationProvider when theme is enabled in router config).
|
|
30
|
-
*
|
|
31
|
-
* @returns Theme state and methods
|
|
32
|
-
* @throws Error if used outside ThemeProvider
|
|
33
30
|
*/
|
|
34
31
|
export function useTheme(): UseThemeReturn {
|
|
35
32
|
const ctx = requireThemeContext();
|
package/src/types/boundaries.ts
CHANGED
|
@@ -1,22 +1,12 @@
|
|
|
1
1
|
import type { ReactNode } from "react";
|
|
2
2
|
|
|
3
|
-
/**
|
|
4
|
-
* Error information passed to error boundary fallback components
|
|
5
|
-
*/
|
|
6
3
|
export interface ErrorInfo {
|
|
7
|
-
/** Error message (always available) */
|
|
8
4
|
message: string;
|
|
9
|
-
/** Error name/type (e.g., "RouteNotFoundError", "MiddlewareError") */
|
|
10
5
|
name: string;
|
|
11
|
-
/** Optional error code for programmatic handling */
|
|
12
6
|
code?: string;
|
|
13
|
-
/** Stack trace (only in development) */
|
|
14
7
|
stack?: string;
|
|
15
|
-
/** Original error cause if available */
|
|
16
8
|
cause?: unknown;
|
|
17
|
-
/** Segment ID where the error occurred */
|
|
18
9
|
segmentId: string;
|
|
19
|
-
/** Segment type where the error occurred */
|
|
20
10
|
segmentType:
|
|
21
11
|
| "layout"
|
|
22
12
|
| "route"
|
|
@@ -46,13 +36,9 @@ export interface ErrorInfo {
|
|
|
46
36
|
* ```
|
|
47
37
|
*/
|
|
48
38
|
export interface ErrorBoundaryFallbackProps {
|
|
49
|
-
/** Error information */
|
|
50
39
|
error: ErrorInfo;
|
|
51
40
|
}
|
|
52
41
|
|
|
53
|
-
/**
|
|
54
|
-
* Error boundary handler - receives error info and returns fallback UI
|
|
55
|
-
*/
|
|
56
42
|
export type ErrorBoundaryHandler = (
|
|
57
43
|
props: ErrorBoundaryFallbackProps,
|
|
58
44
|
) => ReactNode;
|
|
@@ -77,17 +63,10 @@ export type ErrorBoundaryHandler = (
|
|
|
77
63
|
* ```
|
|
78
64
|
*/
|
|
79
65
|
export interface ClientErrorBoundaryFallbackProps {
|
|
80
|
-
/** Error information */
|
|
81
66
|
error: ErrorInfo;
|
|
82
|
-
/** Function to reset error state and retry rendering */
|
|
83
67
|
reset: () => void;
|
|
84
68
|
}
|
|
85
69
|
|
|
86
|
-
/**
|
|
87
|
-
* Wrapped loader data result for deferred resolution with error handling.
|
|
88
|
-
* When loaders are deferred to client-side resolution, errors need to be
|
|
89
|
-
* wrapped so the client can handle them appropriately.
|
|
90
|
-
*/
|
|
91
70
|
export type LoaderDataResult<T = unknown> =
|
|
92
71
|
| { __loaderResult: true; ok: true; data: T }
|
|
93
72
|
| {
|
|
@@ -97,9 +76,6 @@ export type LoaderDataResult<T = unknown> =
|
|
|
97
76
|
fallback: ReactNode | null;
|
|
98
77
|
};
|
|
99
78
|
|
|
100
|
-
/**
|
|
101
|
-
* Type guard to check if a value is a wrapped loader result
|
|
102
|
-
*/
|
|
103
79
|
export function isLoaderDataResult(value: unknown): value is LoaderDataResult {
|
|
104
80
|
return (
|
|
105
81
|
typeof value === "object" &&
|
|
@@ -109,15 +85,9 @@ export function isLoaderDataResult(value: unknown): value is LoaderDataResult {
|
|
|
109
85
|
);
|
|
110
86
|
}
|
|
111
87
|
|
|
112
|
-
/**
|
|
113
|
-
* Not found information passed to notFound boundary fallback components
|
|
114
|
-
*/
|
|
115
88
|
export interface NotFoundInfo {
|
|
116
|
-
/** Not found message */
|
|
117
89
|
message: string;
|
|
118
|
-
/** Segment ID where notFound was thrown */
|
|
119
90
|
segmentId: string;
|
|
120
|
-
/** Segment type where notFound was thrown */
|
|
121
91
|
segmentType:
|
|
122
92
|
| "layout"
|
|
123
93
|
| "route"
|
|
@@ -125,7 +95,6 @@ export interface NotFoundInfo {
|
|
|
125
95
|
| "loader"
|
|
126
96
|
| "middleware"
|
|
127
97
|
| "cache";
|
|
128
|
-
/** The pathname that triggered the not found */
|
|
129
98
|
pathname?: string;
|
|
130
99
|
}
|
|
131
100
|
|
|
@@ -146,13 +115,9 @@ export interface NotFoundInfo {
|
|
|
146
115
|
* ```
|
|
147
116
|
*/
|
|
148
117
|
export interface NotFoundBoundaryFallbackProps {
|
|
149
|
-
/** Not found information */
|
|
150
118
|
notFound: NotFoundInfo;
|
|
151
119
|
}
|
|
152
120
|
|
|
153
|
-
/**
|
|
154
|
-
* NotFound boundary handler - receives not found info and returns fallback UI
|
|
155
|
-
*/
|
|
156
121
|
export type NotFoundBoundaryHandler = (
|
|
157
122
|
props: NotFoundBoundaryFallbackProps,
|
|
158
123
|
) => ReactNode;
|
package/src/types/cache-types.ts
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* during cache key generation (before middleware runs).
|
|
6
6
|
*
|
|
7
7
|
* Note: While the full RequestContext is passed, middleware-set variables
|
|
8
|
-
*
|
|
9
|
-
*
|
|
8
|
+
* read via `ctx.get()` may not be populated yet since cache lookup happens
|
|
9
|
+
* before middleware execution.
|
|
10
10
|
*/
|
|
11
11
|
export type { RequestContext as CacheContext } from "../server/request-context.js";
|
|
12
12
|
|
|
@@ -78,6 +78,14 @@ export interface CacheOptions<TEnv = unknown> {
|
|
|
78
78
|
* - Loader-specific caching strategies
|
|
79
79
|
* - Hot data in fast cache, cold data in larger/slower cache
|
|
80
80
|
*
|
|
81
|
+
* Tag invalidation caveat: a per-boundary store becomes reachable by
|
|
82
|
+
* `updateTag()` / `revalidateTag()` once this boundary is resolved in the
|
|
83
|
+
* current process. If the store is *durable* (shared across processes) and the
|
|
84
|
+
* very first request to a fresh worker is an `updateTag`/`revalidateTag` for a
|
|
85
|
+
* tag held only in this store - before this boundary is matched - that
|
|
86
|
+
* invalidation can miss it. For data you invalidate by tag, prefer the
|
|
87
|
+
* app-level store (always reachable), or ensure the boundary is warmed.
|
|
88
|
+
*
|
|
81
89
|
* @example
|
|
82
90
|
* ```typescript
|
|
83
91
|
* const kvStore = new CloudflareKVStore(env.CACHE_KV);
|
|
@@ -101,7 +109,7 @@ export interface CacheOptions<TEnv = unknown> {
|
|
|
101
109
|
* Return false to skip cache for this request (always fetch fresh).
|
|
102
110
|
*
|
|
103
111
|
* Has access to full RequestContext including env, request, params, cookies, etc.
|
|
104
|
-
* Note: Middleware-set variables
|
|
112
|
+
* Note: Middleware-set variables read via `ctx.get()` may not be populated yet.
|
|
105
113
|
*
|
|
106
114
|
* @example
|
|
107
115
|
* ```typescript
|
|
@@ -123,7 +131,7 @@ export interface CacheOptions<TEnv = unknown> {
|
|
|
123
131
|
* Bypasses default key generation AND store's keyGenerator.
|
|
124
132
|
*
|
|
125
133
|
* Has access to full RequestContext including env, request, params, cookies, etc.
|
|
126
|
-
* Note: Middleware-set variables
|
|
134
|
+
* Note: Middleware-set variables read via `ctx.get()` may not be populated yet.
|
|
127
135
|
*
|
|
128
136
|
* @example
|
|
129
137
|
* ```typescript
|
|
@@ -145,10 +153,11 @@ export interface CacheOptions<TEnv = unknown> {
|
|
|
145
153
|
* Tags for cache invalidation.
|
|
146
154
|
* Can be a static array or a function that returns tags.
|
|
147
155
|
*
|
|
148
|
-
*
|
|
149
|
-
*
|
|
150
|
-
*
|
|
151
|
-
*
|
|
156
|
+
* The built-in `MemorySegmentCacheStore` and `CFCacheStore` index by tag.
|
|
157
|
+
* Invalidate on demand with `updateTag(...tags)` (awaitable, read-your-own-writes;
|
|
158
|
+
* for server actions) or `revalidateTag(...tags)` (background hard-purge, not
|
|
159
|
+
* awaited; for route handlers / webhooks). For `CFCacheStore`, distributed
|
|
160
|
+
* invalidation requires a `kv` namespace (markers live in that same namespace).
|
|
152
161
|
*
|
|
153
162
|
* @example
|
|
154
163
|
* ```typescript
|
package/src/types/error-types.ts
CHANGED
|
@@ -14,19 +14,19 @@
|
|
|
14
14
|
* - "unknown": Fallback for unclassified errors (not currently invoked)
|
|
15
15
|
*/
|
|
16
16
|
export type ErrorPhase =
|
|
17
|
-
| "routing"
|
|
18
|
-
| "manifest"
|
|
19
|
-
| "middleware"
|
|
20
|
-
| "loader"
|
|
21
|
-
| "handler"
|
|
22
|
-
| "rendering"
|
|
23
|
-
| "action"
|
|
24
|
-
| "revalidation"
|
|
25
|
-
| "cache"
|
|
26
|
-
| "prerender"
|
|
27
|
-
| "static"
|
|
28
|
-
| "origin"
|
|
29
|
-
| "unknown";
|
|
17
|
+
| "routing"
|
|
18
|
+
| "manifest"
|
|
19
|
+
| "middleware"
|
|
20
|
+
| "loader"
|
|
21
|
+
| "handler"
|
|
22
|
+
| "rendering"
|
|
23
|
+
| "action"
|
|
24
|
+
| "revalidation"
|
|
25
|
+
| "cache"
|
|
26
|
+
| "prerender"
|
|
27
|
+
| "static"
|
|
28
|
+
| "origin"
|
|
29
|
+
| "unknown";
|
|
30
30
|
|
|
31
31
|
/**
|
|
32
32
|
* Comprehensive context passed to onError callback
|
|
@@ -59,103 +59,43 @@ export type ErrorPhase =
|
|
|
59
59
|
* ```
|
|
60
60
|
*/
|
|
61
61
|
export interface OnErrorContext<TEnv = any> {
|
|
62
|
-
/**
|
|
63
|
-
* The error that occurred
|
|
64
|
-
*/
|
|
65
62
|
error: Error;
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Phase where the error occurred
|
|
69
|
-
*/
|
|
70
63
|
phase: ErrorPhase;
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* The original request
|
|
74
|
-
*/
|
|
75
64
|
request: Request;
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Parsed URL from the request
|
|
79
|
-
*/
|
|
80
65
|
url: URL;
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* Request pathname
|
|
84
|
-
*/
|
|
85
66
|
pathname: string;
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* HTTP method
|
|
89
|
-
*/
|
|
90
67
|
method: string;
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Matched route key (if available)
|
|
94
|
-
* e.g., "shop.products.detail"
|
|
95
|
-
*/
|
|
68
|
+
/** Matched route key (if available) e.g., "shop.products.detail" */
|
|
96
69
|
routeKey?: string;
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Route params (if available)
|
|
100
|
-
* e.g., { slug: "headphones" }
|
|
101
|
-
*/
|
|
70
|
+
/** Route params (if available) e.g., { slug: "headphones" } */
|
|
102
71
|
params?: Record<string, string>;
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* Segment ID where error occurred (if available)
|
|
106
|
-
* e.g., "M1L0" for a layout, "M1R0" for a route
|
|
107
|
-
*/
|
|
72
|
+
/** Segment ID where error occurred (if available) e.g., "M1L0" for a layout, "M1R0" for a route */
|
|
108
73
|
segmentId?: string;
|
|
109
|
-
|
|
110
|
-
/**
|
|
111
|
-
* Segment type where error occurred (if available)
|
|
112
|
-
*/
|
|
74
|
+
/** Segment type where error occurred (if available) */
|
|
113
75
|
segmentType?: "layout" | "route" | "parallel" | "loader" | "middleware";
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
* Loader name (if error occurred in a loader)
|
|
117
|
-
*/
|
|
76
|
+
/** Loader name (if error occurred in a loader) */
|
|
118
77
|
loaderName?: string;
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* Middleware name/id (if error occurred in middleware)
|
|
122
|
-
*/
|
|
78
|
+
/** Middleware name/id (if error occurred in middleware) */
|
|
123
79
|
middlewareId?: string;
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
* Action ID (if error occurred during server action)
|
|
127
|
-
* e.g., "src/actions.ts#addToCart"
|
|
128
|
-
*/
|
|
80
|
+
/** Action ID (if error occurred during server action) e.g., "src/actions.ts#addToCart" */
|
|
129
81
|
actionId?: string;
|
|
130
|
-
|
|
131
|
-
/**
|
|
132
|
-
* Environment/bindings (platform context)
|
|
133
|
-
*/
|
|
82
|
+
/** Environment/bindings (platform context) */
|
|
134
83
|
env?: TEnv;
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
* Duration from request start to error (milliseconds)
|
|
138
|
-
*/
|
|
84
|
+
/** Duration from request start to error (milliseconds) */
|
|
139
85
|
duration?: number;
|
|
140
|
-
|
|
141
|
-
/**
|
|
142
|
-
* Whether this is a partial/navigation request
|
|
143
|
-
*/
|
|
86
|
+
/** Whether this is a partial/navigation request */
|
|
144
87
|
isPartial?: boolean;
|
|
145
|
-
|
|
146
|
-
/**
|
|
147
|
-
* Whether an error boundary caught the error
|
|
148
|
-
* If true, the error was handled and a fallback UI was rendered
|
|
149
|
-
*/
|
|
88
|
+
/** Whether an error boundary caught the error */
|
|
150
89
|
handledByBoundary?: boolean;
|
|
151
|
-
|
|
152
|
-
/**
|
|
153
|
-
* Stack trace (if available)
|
|
154
|
-
*/
|
|
90
|
+
/** Stack trace (if available) */
|
|
155
91
|
stack?: string;
|
|
156
92
|
|
|
157
93
|
/**
|
|
158
|
-
* Additional metadata specific to the error phase
|
|
94
|
+
* Additional metadata specific to the error phase. For the `cache` phase,
|
|
95
|
+
* `metadata.category` is a `CacheErrorCategory` (exported from
|
|
96
|
+
* `@rangojs/router/cache`) identifying the failure kind, e.g. `cache-read`
|
|
97
|
+
* (transient outage, degraded to a miss) vs `cache-corrupt` (faulty entry
|
|
98
|
+
* self-healed) vs `cache-invalidate` (a failed background revalidateTag).
|
|
159
99
|
*/
|
|
160
100
|
metadata?: Record<string, unknown>;
|
|
161
101
|
}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* ```typescript
|
|
8
8
|
* // In env.ts or env.d.ts
|
|
9
9
|
* declare global {
|
|
10
|
-
* namespace
|
|
10
|
+
* namespace Rango {
|
|
11
11
|
* interface Env extends AppBindings {}
|
|
12
12
|
* interface Vars extends AppVariables {}
|
|
13
13
|
* }
|
|
@@ -18,39 +18,41 @@
|
|
|
18
18
|
* ```
|
|
19
19
|
*/
|
|
20
20
|
declare global {
|
|
21
|
-
namespace
|
|
21
|
+
namespace Rango {
|
|
22
22
|
// eslint-disable-next-line @typescript-eslint/no-empty-interface
|
|
23
|
-
interface Env {
|
|
24
|
-
// Empty by default - users augment with their bindings (e.g., { DB: D1Database })
|
|
25
|
-
}
|
|
23
|
+
interface Env {}
|
|
26
24
|
|
|
27
25
|
// eslint-disable-next-line @typescript-eslint/no-empty-interface
|
|
28
|
-
interface Vars {
|
|
29
|
-
// Empty by default - users augment with their variables (e.g., { user?: User })
|
|
30
|
-
}
|
|
26
|
+
interface Vars {}
|
|
31
27
|
|
|
32
28
|
// eslint-disable-next-line @typescript-eslint/no-empty-interface
|
|
33
|
-
interface RegisteredRoutes {
|
|
34
|
-
// Empty by default - users augment with their merged route maps for type-safe href()
|
|
35
|
-
// Values are string (pattern) for RSC routes, or { path: string; response: T } for response routes
|
|
36
|
-
}
|
|
29
|
+
interface RegisteredRoutes {}
|
|
37
30
|
|
|
38
31
|
// eslint-disable-next-line @typescript-eslint/no-empty-interface
|
|
39
|
-
interface GeneratedRouteMap {
|
|
40
|
-
// Empty by default - populated by generated named-routes.gen.ts
|
|
41
|
-
// Maps route names to URL pattern strings for Handler<"routeName"> support
|
|
42
|
-
}
|
|
32
|
+
interface GeneratedRouteMap {}
|
|
43
33
|
}
|
|
44
34
|
}
|
|
45
35
|
|
|
46
36
|
/**
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
37
|
+
* Route map for path-validation surfaces (`href`, `ValidPaths`, `PathResponse`).
|
|
38
|
+
*
|
|
39
|
+
* Resolution order:
|
|
40
|
+
* 1. `RegisteredRoutes` — manual `extends typeof router.routeMap`; richest map,
|
|
41
|
+
* the only one carrying response-route payload metadata.
|
|
42
|
+
* 2. `GeneratedRouteMap` — auto-wired by `router.named-routes.gen.ts`; path +
|
|
43
|
+
* search only. Lets `rango generate` alone enable `href()`/`ValidPaths` path
|
|
44
|
+
* checking without a manual `RegisteredRoutes` declaration.
|
|
45
|
+
* 3. `Record<string, string>` — permissive fallback when nothing is registered.
|
|
46
|
+
*
|
|
47
|
+
* Referencing `GeneratedRouteMap` here is cycle-safe: it is declared in the
|
|
48
|
+
* standalone gen file with no imports, unlike `RegisteredRoutes extends typeof
|
|
49
|
+
* router.routeMap`.
|
|
50
50
|
*/
|
|
51
|
-
export type GetRegisteredRoutes = keyof
|
|
52
|
-
?
|
|
53
|
-
|
|
51
|
+
export type GetRegisteredRoutes = keyof Rango.RegisteredRoutes extends never
|
|
52
|
+
? keyof Rango.GeneratedRouteMap extends never
|
|
53
|
+
? Record<string, string>
|
|
54
|
+
: Rango.GeneratedRouteMap
|
|
55
|
+
: Rango.RegisteredRoutes;
|
|
54
56
|
|
|
55
57
|
/**
|
|
56
58
|
* Default route map for reverse() surfaces.
|
|
@@ -58,12 +60,11 @@ export type GetRegisteredRoutes = keyof RSCRouter.RegisteredRoutes extends never
|
|
|
58
60
|
* cycles, but falls back to RegisteredRoutes for manual augmentation and then to
|
|
59
61
|
* a permissive record when no route types are available.
|
|
60
62
|
*/
|
|
61
|
-
export type DefaultReverseRouteMap =
|
|
62
|
-
keyof
|
|
63
|
-
?
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
: RSCRouter.GeneratedRouteMap;
|
|
63
|
+
export type DefaultReverseRouteMap = keyof Rango.GeneratedRouteMap extends never
|
|
64
|
+
? keyof Rango.RegisteredRoutes extends never
|
|
65
|
+
? Record<string, string>
|
|
66
|
+
: Rango.RegisteredRoutes
|
|
67
|
+
: Rango.GeneratedRouteMap;
|
|
67
68
|
|
|
68
69
|
/**
|
|
69
70
|
* Default route map for Handler type.
|
|
@@ -71,30 +72,42 @@ export type DefaultReverseRouteMap =
|
|
|
71
72
|
* circular dependencies: router.tsx -> urls.tsx -> handler.tsx -> RegisteredRoutes -> router.tsx.
|
|
72
73
|
* GeneratedRouteMap is declared in a standalone gen file with no imports.
|
|
73
74
|
*/
|
|
74
|
-
export type DefaultHandlerRouteMap =
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
: RSCRouter.GeneratedRouteMap;
|
|
75
|
+
export type DefaultHandlerRouteMap = keyof Rango.GeneratedRouteMap extends never
|
|
76
|
+
? {}
|
|
77
|
+
: Rango.GeneratedRouteMap;
|
|
78
78
|
|
|
79
79
|
/**
|
|
80
|
-
* Default environment type - uses global augmentation if available
|
|
80
|
+
* Default environment type - uses global augmentation if available.
|
|
81
|
+
*
|
|
82
|
+
* Falls back to `unknown` (not `any`) when `Rango.Env` is not augmented, so
|
|
83
|
+
* an app that forgets to register its bindings gets a compile error on
|
|
84
|
+
* `ctx.env.SOMETHING` instead of silently losing all env type-checking. Augment
|
|
85
|
+
* `Rango.Env` to type `ctx.env`.
|
|
81
86
|
*/
|
|
82
|
-
export type DefaultEnv = keyof
|
|
83
|
-
? any
|
|
84
|
-
: RSCRouter.Env;
|
|
87
|
+
export type DefaultEnv = keyof Rango.Env extends never ? unknown : Rango.Env;
|
|
85
88
|
|
|
86
89
|
/**
|
|
87
|
-
*
|
|
90
|
+
* Variables type backing the string-key `ctx.get` / `ctx.set` overloads.
|
|
91
|
+
*
|
|
92
|
+
* Uses `Rango.Vars` augmentation when present; otherwise falls back to
|
|
93
|
+
* `Record<string, any>` so an un-augmented app can use string-key vars with
|
|
94
|
+
* zero config -- at the cost of a typo'd key being silently `any`.
|
|
95
|
+
*
|
|
96
|
+
* This `any` fallback is deliberate (see #561) and is an intentional asymmetry
|
|
97
|
+
* with `DefaultEnv` above, which falls back to `unknown`: env bindings are
|
|
98
|
+
* platform-critical and should be registered, so a forgotten binding is made a
|
|
99
|
+
* compile error; vars are ad-hoc and middleware-set, so the zero-config path
|
|
100
|
+
* wins. Augment `Rango.Vars` for type-safe keys.
|
|
88
101
|
*/
|
|
89
|
-
export type DefaultVars = keyof
|
|
102
|
+
export type DefaultVars = keyof Rango.Vars extends never
|
|
90
103
|
? Record<string, any>
|
|
91
|
-
:
|
|
104
|
+
: Rango.Vars;
|
|
92
105
|
|
|
93
106
|
/**
|
|
94
107
|
* Default route name type for public `routeName` on contexts.
|
|
95
108
|
* When GeneratedRouteMap is augmented, narrows to the known route names.
|
|
96
109
|
* Otherwise falls back to `string` for untyped usage.
|
|
97
110
|
*/
|
|
98
|
-
export type DefaultRouteName = keyof
|
|
111
|
+
export type DefaultRouteName = keyof Rango.GeneratedRouteMap extends never
|
|
99
112
|
? string
|
|
100
|
-
: keyof
|
|
113
|
+
: keyof Rango.GeneratedRouteMap & string;
|