@rangojs/router 0.0.0-experimental.13 → 0.0.0-experimental.13221847
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +9 -0
- package/README.md +884 -4
- package/dist/bin/rango.js +1531 -212
- package/dist/vite/index.js +3995 -2489
- package/package.json +57 -52
- package/skills/breadcrumbs/SKILL.md +250 -0
- package/skills/cache-guide/SKILL.md +262 -0
- package/skills/caching/SKILL.md +85 -23
- package/skills/composability/SKILL.md +172 -0
- package/skills/debug-manifest/SKILL.md +12 -8
- package/skills/document-cache/SKILL.md +18 -16
- package/skills/fonts/SKILL.md +6 -4
- package/skills/hooks/SKILL.md +328 -70
- package/skills/host-router/SKILL.md +218 -0
- package/skills/intercept/SKILL.md +131 -8
- package/skills/layout/SKILL.md +100 -3
- package/skills/links/SKILL.md +62 -15
- package/skills/loader/SKILL.md +368 -42
- package/skills/middleware/SKILL.md +171 -34
- package/skills/mime-routes/SKILL.md +14 -10
- package/skills/parallel/SKILL.md +137 -1
- package/skills/prerender/SKILL.md +366 -28
- package/skills/rango/SKILL.md +85 -21
- package/skills/response-routes/SKILL.md +136 -83
- package/skills/route/SKILL.md +195 -21
- package/skills/router-setup/SKILL.md +123 -30
- package/skills/theme/SKILL.md +9 -8
- package/skills/typesafety/SKILL.md +240 -102
- package/skills/use-cache/SKILL.md +324 -0
- package/src/__internal.ts +102 -4
- package/src/bin/rango.ts +312 -15
- package/src/browser/action-coordinator.ts +97 -0
- package/src/browser/action-response-classifier.ts +99 -0
- package/src/browser/event-controller.ts +92 -64
- package/src/browser/history-state.ts +80 -0
- package/src/browser/intercept-utils.ts +52 -0
- package/src/browser/link-interceptor.ts +24 -4
- package/src/browser/logging.ts +11 -0
- package/src/browser/merge-segment-loaders.ts +20 -12
- package/src/browser/navigation-bridge.ts +266 -558
- package/src/browser/navigation-client.ts +132 -75
- package/src/browser/navigation-store.ts +33 -50
- package/src/browser/navigation-transaction.ts +297 -0
- package/src/browser/network-error-handler.ts +61 -0
- package/src/browser/partial-update.ts +303 -309
- package/src/browser/prefetch/cache.ts +206 -0
- package/src/browser/prefetch/fetch.ts +144 -0
- package/src/browser/prefetch/observer.ts +65 -0
- package/src/browser/prefetch/policy.ts +48 -0
- package/src/browser/prefetch/queue.ts +128 -0
- package/src/browser/rango-state.ts +112 -0
- package/src/browser/react/Link.tsx +190 -70
- package/src/browser/react/NavigationProvider.tsx +78 -11
- package/src/browser/react/context.ts +6 -0
- package/src/browser/react/filter-segment-order.ts +11 -0
- package/src/browser/react/index.ts +12 -12
- package/src/browser/react/location-state-shared.ts +95 -53
- package/src/browser/react/location-state.ts +60 -15
- package/src/browser/react/mount-context.ts +6 -1
- package/src/browser/react/nonce-context.ts +23 -0
- package/src/browser/react/shallow-equal.ts +27 -0
- package/src/browser/react/use-action.ts +29 -51
- package/src/browser/react/use-client-cache.ts +5 -3
- package/src/browser/react/use-handle.ts +29 -70
- package/src/browser/react/use-link-status.ts +6 -5
- package/src/browser/react/use-navigation.ts +22 -63
- package/src/browser/react/use-params.ts +65 -0
- package/src/browser/react/use-pathname.ts +47 -0
- package/src/browser/react/use-router.ts +63 -0
- package/src/browser/react/use-search-params.ts +56 -0
- package/src/browser/react/use-segments.ts +80 -97
- package/src/browser/response-adapter.ts +73 -0
- package/src/browser/rsc-router.tsx +188 -57
- package/src/browser/scroll-restoration.ts +117 -44
- package/src/browser/segment-reconciler.ts +221 -0
- package/src/browser/segment-structure-assert.ts +16 -0
- package/src/browser/server-action-bridge.ts +488 -606
- package/src/browser/shallow.ts +6 -1
- package/src/browser/types.ts +116 -47
- package/src/browser/validate-redirect-origin.ts +29 -0
- package/src/build/generate-manifest.ts +63 -21
- package/src/build/generate-route-types.ts +36 -1038
- package/src/build/index.ts +2 -5
- package/src/build/route-trie.ts +38 -12
- package/src/build/route-types/ast-helpers.ts +25 -0
- package/src/build/route-types/ast-route-extraction.ts +98 -0
- package/src/build/route-types/codegen.ts +102 -0
- package/src/build/route-types/include-resolution.ts +411 -0
- package/src/build/route-types/param-extraction.ts +48 -0
- package/src/build/route-types/per-module-writer.ts +128 -0
- package/src/build/route-types/router-processing.ts +479 -0
- package/src/build/route-types/scan-filter.ts +78 -0
- package/src/build/runtime-discovery.ts +231 -0
- package/src/cache/background-task.ts +34 -0
- package/src/cache/cache-key-utils.ts +44 -0
- package/src/cache/cache-policy.ts +125 -0
- package/src/cache/cache-runtime.ts +342 -0
- package/src/cache/cache-scope.ts +122 -303
- package/src/cache/cf/cf-cache-store.ts +571 -17
- package/src/cache/cf/index.ts +13 -3
- package/src/cache/document-cache.ts +116 -77
- package/src/cache/handle-capture.ts +81 -0
- package/src/cache/handle-snapshot.ts +41 -0
- package/src/cache/index.ts +1 -15
- package/src/cache/memory-segment-store.ts +191 -13
- package/src/cache/profile-registry.ts +73 -0
- package/src/cache/read-through-swr.ts +134 -0
- package/src/cache/segment-codec.ts +256 -0
- package/src/cache/taint.ts +98 -0
- package/src/cache/types.ts +72 -122
- package/src/client.rsc.tsx +3 -1
- package/src/client.tsx +84 -126
- package/src/component-utils.ts +4 -4
- package/src/components/DefaultDocument.tsx +5 -1
- package/src/context-var.ts +86 -0
- package/src/debug.ts +19 -9
- package/src/errors.ts +77 -7
- package/src/handle.ts +12 -7
- package/src/handles/MetaTags.tsx +73 -20
- package/src/handles/breadcrumbs.ts +66 -0
- package/src/handles/index.ts +1 -0
- package/src/handles/meta.ts +30 -13
- package/src/host/cookie-handler.ts +21 -15
- package/src/host/errors.ts +8 -8
- package/src/host/index.ts +4 -7
- package/src/host/pattern-matcher.ts +27 -27
- package/src/host/router.ts +61 -39
- package/src/host/testing.ts +8 -8
- package/src/host/types.ts +15 -7
- package/src/host/utils.ts +1 -1
- package/src/href-client.ts +65 -45
- package/src/index.rsc.ts +104 -40
- package/src/index.ts +122 -67
- package/src/internal-debug.ts +9 -3
- package/src/loader.rsc.ts +18 -93
- package/src/loader.ts +26 -9
- package/src/network-error-thrower.tsx +3 -1
- package/src/outlet-provider.tsx +45 -0
- package/src/prerender/param-hash.ts +4 -2
- package/src/prerender/store.ts +121 -17
- package/src/prerender.ts +325 -20
- package/src/reverse.ts +144 -124
- package/src/root-error-boundary.tsx +41 -29
- package/src/route-content-wrapper.tsx +7 -4
- package/src/route-definition/dsl-helpers.ts +959 -0
- package/src/route-definition/helper-factories.ts +200 -0
- package/src/route-definition/helpers-types.ts +430 -0
- package/src/route-definition/index.ts +52 -0
- package/src/route-definition/redirect.ts +93 -0
- package/src/route-definition.ts +1 -1450
- package/src/route-map-builder.ts +87 -133
- package/src/route-name.ts +53 -0
- package/src/route-types.ts +41 -6
- package/src/router/content-negotiation.ts +116 -0
- package/src/router/debug-manifest.ts +72 -0
- package/src/router/error-handling.ts +9 -9
- package/src/router/find-match.ts +160 -0
- package/src/router/handler-context.ts +324 -116
- package/src/router/intercept-resolution.ts +11 -4
- package/src/router/lazy-includes.ts +237 -0
- package/src/router/loader-resolution.ts +179 -133
- package/src/router/logging.ts +112 -6
- package/src/router/manifest.ts +58 -19
- package/src/router/match-api.ts +89 -88
- package/src/router/match-context.ts +4 -2
- package/src/router/match-handlers.ts +440 -0
- package/src/router/match-middleware/background-revalidation.ts +86 -89
- package/src/router/match-middleware/cache-lookup.ts +295 -49
- package/src/router/match-middleware/cache-store.ts +56 -13
- package/src/router/match-middleware/intercept-resolution.ts +45 -22
- package/src/router/match-middleware/segment-resolution.ts +20 -9
- package/src/router/match-pipelines.ts +10 -45
- package/src/router/match-result.ts +44 -21
- package/src/router/metrics.ts +240 -15
- package/src/router/middleware-cookies.ts +55 -0
- package/src/router/middleware-types.ts +222 -0
- package/src/router/middleware.ts +327 -369
- package/src/router/pattern-matching.ts +169 -31
- package/src/router/prerender-match.ts +402 -0
- package/src/router/preview-match.ts +170 -0
- package/src/router/revalidation.ts +105 -14
- package/src/router/router-context.ts +40 -21
- package/src/router/router-interfaces.ts +452 -0
- package/src/router/router-options.ts +592 -0
- package/src/router/router-registry.ts +24 -0
- package/src/router/segment-resolution/fresh.ts +677 -0
- package/src/router/segment-resolution/helpers.ts +263 -0
- package/src/router/segment-resolution/loader-cache.ts +199 -0
- package/src/router/segment-resolution/revalidation.ts +1296 -0
- package/src/router/segment-resolution/static-store.ts +67 -0
- package/src/router/segment-resolution.ts +21 -1354
- package/src/router/segment-wrappers.ts +291 -0
- package/src/router/telemetry-otel.ts +299 -0
- package/src/router/telemetry.ts +300 -0
- package/src/router/timeout.ts +148 -0
- package/src/router/trie-matching.ts +96 -29
- package/src/router/types.ts +15 -9
- package/src/router.ts +642 -2366
- package/src/rsc/handler-context.ts +45 -0
- package/src/rsc/handler.ts +639 -1027
- package/src/rsc/helpers.ts +140 -6
- package/src/rsc/index.ts +0 -20
- package/src/rsc/loader-fetch.ts +209 -0
- package/src/rsc/manifest-init.ts +86 -0
- package/src/rsc/nonce.ts +14 -0
- package/src/rsc/origin-guard.ts +141 -0
- package/src/rsc/progressive-enhancement.ts +379 -0
- package/src/rsc/response-error.ts +37 -0
- package/src/rsc/response-route-handler.ts +347 -0
- package/src/rsc/rsc-rendering.ts +237 -0
- package/src/rsc/runtime-warnings.ts +42 -0
- package/src/rsc/server-action.ts +348 -0
- package/src/rsc/ssr-setup.ts +128 -0
- package/src/rsc/types.ts +38 -11
- package/src/search-params.ts +66 -54
- package/src/segment-system.tsx +165 -17
- package/src/server/context.ts +237 -54
- package/src/server/cookie-store.ts +190 -0
- package/src/server/fetchable-loader-store.ts +11 -6
- package/src/server/handle-store.ts +94 -15
- package/src/server/loader-registry.ts +15 -56
- package/src/server/request-context.ts +438 -71
- package/src/server.ts +26 -164
- package/src/ssr/index.tsx +101 -31
- package/src/static-handler.ts +22 -4
- package/src/theme/ThemeProvider.tsx +21 -15
- package/src/theme/ThemeScript.tsx +5 -5
- package/src/theme/constants.ts +5 -2
- package/src/theme/index.ts +4 -14
- package/src/theme/theme-context.ts +4 -30
- package/src/theme/theme-script.ts +21 -18
- package/src/types/boundaries.ts +158 -0
- package/src/types/cache-types.ts +198 -0
- package/src/types/error-types.ts +192 -0
- package/src/types/global-namespace.ts +100 -0
- package/src/types/handler-context.ts +773 -0
- package/src/types/index.ts +88 -0
- package/src/types/loader-types.ts +183 -0
- package/src/types/route-config.ts +170 -0
- package/src/types/route-entry.ts +109 -0
- package/src/types/segments.ts +150 -0
- package/src/types.ts +1 -1795
- package/src/urls/include-helper.ts +197 -0
- package/src/urls/index.ts +53 -0
- package/src/urls/path-helper-types.ts +339 -0
- package/src/urls/path-helper.ts +329 -0
- package/src/urls/pattern-types.ts +95 -0
- package/src/urls/response-types.ts +106 -0
- package/src/urls/type-extraction.ts +372 -0
- package/src/urls/urls-function.ts +98 -0
- package/src/urls.ts +1 -1323
- package/src/use-loader.tsx +85 -77
- package/src/vite/discovery/bundle-postprocess.ts +184 -0
- package/src/vite/discovery/discover-routers.ts +344 -0
- package/src/vite/discovery/prerender-collection.ts +385 -0
- package/src/vite/discovery/route-types-writer.ts +258 -0
- package/src/vite/discovery/self-gen-tracking.ts +47 -0
- package/src/vite/discovery/state.ts +108 -0
- package/src/vite/discovery/virtual-module-codegen.ts +203 -0
- package/src/vite/index.ts +11 -2259
- package/src/vite/plugin-types.ts +48 -0
- package/src/vite/plugins/cjs-to-esm.ts +93 -0
- package/src/vite/plugins/client-ref-dedup.ts +115 -0
- package/src/vite/plugins/client-ref-hashing.ts +105 -0
- package/src/vite/{expose-action-id.ts → plugins/expose-action-id.ts} +72 -47
- package/src/vite/{expose-id-utils.ts → plugins/expose-id-utils.ts} +8 -43
- package/src/vite/plugins/expose-ids/export-analysis.ts +296 -0
- package/src/vite/plugins/expose-ids/handler-transform.ts +179 -0
- package/src/vite/plugins/expose-ids/loader-transform.ts +74 -0
- package/src/vite/plugins/expose-ids/router-transform.ts +110 -0
- package/src/vite/plugins/expose-ids/types.ts +45 -0
- package/src/vite/plugins/expose-internal-ids.ts +569 -0
- package/src/vite/plugins/refresh-cmd.ts +65 -0
- package/src/vite/plugins/use-cache-transform.ts +323 -0
- package/src/vite/plugins/version-injector.ts +83 -0
- package/src/vite/plugins/version-plugin.ts +266 -0
- package/src/vite/{virtual-entries.ts → plugins/virtual-entries.ts} +23 -14
- package/src/vite/plugins/virtual-stub-plugin.ts +29 -0
- package/src/vite/rango.ts +445 -0
- package/src/vite/router-discovery.ts +777 -0
- package/src/vite/{ast-handler-extract.ts → utils/ast-handler-extract.ts} +181 -9
- package/src/vite/utils/banner.ts +36 -0
- package/src/vite/utils/bundle-analysis.ts +137 -0
- package/src/vite/utils/manifest-utils.ts +70 -0
- package/src/vite/{package-resolution.ts → utils/package-resolution.ts} +25 -29
- package/src/vite/utils/prerender-utils.ts +189 -0
- package/src/vite/utils/shared-utils.ts +169 -0
- package/CLAUDE.md +0 -43
- package/dist/vite/index.named-routes.gen.ts +0 -103
- package/src/browser/lru-cache.ts +0 -69
- package/src/browser/request-controller.ts +0 -164
- package/src/cache/memory-store.ts +0 -253
- package/src/href-context.ts +0 -33
- package/src/router.gen.ts +0 -6
- package/src/static-handler.gen.ts +0 -5
- package/src/urls.gen.ts +0 -8
- package/src/vite/expose-internal-ids.ts +0 -1167
- /package/src/vite/{version.d.ts → plugins/version.d.ts} +0 -0
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { tryTrieMatch } from "./trie-matching.js";
|
|
2
|
+
import { getRouteTrie, getRouterTrie } from "../route-map-builder.js";
|
|
3
|
+
import {
|
|
4
|
+
findMatch as findRouteMatch,
|
|
5
|
+
isLazyEvaluationNeeded,
|
|
6
|
+
type RouteMatchResult,
|
|
7
|
+
} from "./pattern-matching.js";
|
|
8
|
+
import type { MetricsStore } from "../server/context";
|
|
9
|
+
import type { RouteEntry } from "../types";
|
|
10
|
+
|
|
11
|
+
export interface FindMatchDeps<TEnv = any> {
|
|
12
|
+
routesEntries: RouteEntry<TEnv>[];
|
|
13
|
+
evaluateLazyEntry: (entry: RouteEntry<TEnv>) => void;
|
|
14
|
+
routerId: string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Create a findMatch function bound to router state.
|
|
19
|
+
* Includes single-entry cache to avoid redundant matching within the same request.
|
|
20
|
+
*/
|
|
21
|
+
export function createFindMatch<TEnv = any>(
|
|
22
|
+
deps: FindMatchDeps<TEnv>,
|
|
23
|
+
): (pathname: string, ms?: MetricsStore) => RouteMatchResult<TEnv> | null {
|
|
24
|
+
// Single-entry cache for findMatch to avoid redundant matching within the same request.
|
|
25
|
+
// previewMatch and match both call findMatch with the same pathname — this ensures
|
|
26
|
+
// the route matching work (which may check thousands of routes) only happens once.
|
|
27
|
+
let lastFindMatchPathname: string | null = null;
|
|
28
|
+
let lastFindMatchResult: RouteMatchResult<TEnv> | null = null;
|
|
29
|
+
|
|
30
|
+
// Wrapper for findMatch that uses routesEntries
|
|
31
|
+
// Handles lazy evaluation by evaluating lazy entries on first match.
|
|
32
|
+
// Phase 1: try O(path_length) trie match.
|
|
33
|
+
// Phase 2: fall back to regex iteration.
|
|
34
|
+
return function findMatch(
|
|
35
|
+
pathname: string,
|
|
36
|
+
ms?: MetricsStore,
|
|
37
|
+
): RouteMatchResult<TEnv> | null {
|
|
38
|
+
// Return cached result if same pathname (avoids double-match per request)
|
|
39
|
+
if (lastFindMatchPathname === pathname) {
|
|
40
|
+
return lastFindMatchResult;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// Helper to push sub-metrics
|
|
44
|
+
const pushMetric = ms
|
|
45
|
+
? (label: string, start: number) => {
|
|
46
|
+
ms.metrics.push({
|
|
47
|
+
label,
|
|
48
|
+
duration: performance.now() - start,
|
|
49
|
+
startTime: start - ms.requestStart,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
: undefined;
|
|
53
|
+
|
|
54
|
+
// Phase 1: Try trie match (O(path_length))
|
|
55
|
+
// Only use the per-router trie. The global trie merges routes from ALL
|
|
56
|
+
// routers and must not be used — in multi-router setups (host routing)
|
|
57
|
+
// overlapping paths like "/" would match the wrong app's route.
|
|
58
|
+
const routeTrie = getRouterTrie(deps.routerId);
|
|
59
|
+
if (routeTrie) {
|
|
60
|
+
const trieStart = performance.now();
|
|
61
|
+
const trieResult = tryTrieMatch(routeTrie, pathname);
|
|
62
|
+
pushMetric?.("match:trie", trieStart);
|
|
63
|
+
|
|
64
|
+
if (trieResult) {
|
|
65
|
+
// Find the RouteEntry that contains this route.
|
|
66
|
+
// Multiple entries can share the same staticPrefix (e.g., several
|
|
67
|
+
// include("/", patterns) calls all produce staticPrefix=""). Evaluate
|
|
68
|
+
// each candidate and pick the one whose routes include the matched key.
|
|
69
|
+
const entryStart = performance.now();
|
|
70
|
+
let entry: RouteEntry<TEnv> | undefined;
|
|
71
|
+
let fallbackEntry: RouteEntry<TEnv> | undefined;
|
|
72
|
+
|
|
73
|
+
for (const e of deps.routesEntries) {
|
|
74
|
+
if (e.staticPrefix !== trieResult.sp) continue;
|
|
75
|
+
if (!fallbackEntry) fallbackEntry = e;
|
|
76
|
+
deps.evaluateLazyEntry(e);
|
|
77
|
+
if (
|
|
78
|
+
e.routes &&
|
|
79
|
+
trieResult.routeKey in (e.routes as Record<string, unknown>)
|
|
80
|
+
) {
|
|
81
|
+
entry = e;
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// If no entry had the route in its routes map, use the first matching
|
|
87
|
+
// entry as fallback (handles main entry with inline routes not yet
|
|
88
|
+
// reflected in its routes object).
|
|
89
|
+
if (!entry) entry = fallbackEntry;
|
|
90
|
+
|
|
91
|
+
// If entry not found (nested include not yet discovered), evaluate parent
|
|
92
|
+
if (!entry) {
|
|
93
|
+
const parent = deps.routesEntries.find(
|
|
94
|
+
(e) =>
|
|
95
|
+
trieResult.sp.startsWith(e.staticPrefix) &&
|
|
96
|
+
e.staticPrefix !== trieResult.sp,
|
|
97
|
+
);
|
|
98
|
+
if (parent) {
|
|
99
|
+
const lazyStart = performance.now();
|
|
100
|
+
deps.evaluateLazyEntry(parent);
|
|
101
|
+
pushMetric?.("match:lazy-eval", lazyStart);
|
|
102
|
+
}
|
|
103
|
+
entry = deps.routesEntries.find(
|
|
104
|
+
(e) => e.staticPrefix === trieResult.sp,
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
pushMetric?.("match:entry-resolve", entryStart);
|
|
108
|
+
|
|
109
|
+
if (entry) {
|
|
110
|
+
lastFindMatchPathname = pathname;
|
|
111
|
+
lastFindMatchResult = {
|
|
112
|
+
entry,
|
|
113
|
+
routeKey: trieResult.routeKey,
|
|
114
|
+
params: trieResult.params,
|
|
115
|
+
optionalParams: new Set(trieResult.optionalParams || []),
|
|
116
|
+
redirectTo: trieResult.redirectTo,
|
|
117
|
+
ancestry: trieResult.ancestry,
|
|
118
|
+
...(trieResult.pr ? { pr: true } : {}),
|
|
119
|
+
...(trieResult.pt ? { pt: true } : {}),
|
|
120
|
+
...(trieResult.responseType
|
|
121
|
+
? { responseType: trieResult.responseType }
|
|
122
|
+
: {}),
|
|
123
|
+
...(trieResult.negotiateVariants
|
|
124
|
+
? { negotiateVariants: trieResult.negotiateVariants }
|
|
125
|
+
: {}),
|
|
126
|
+
...(trieResult.rscFirst ? { rscFirst: true } : {}),
|
|
127
|
+
};
|
|
128
|
+
return lastFindMatchResult;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// Phase 2: Fall back to existing matching (regex iteration)
|
|
134
|
+
const regexStart = performance.now();
|
|
135
|
+
let result = findRouteMatch(pathname, deps.routesEntries);
|
|
136
|
+
|
|
137
|
+
// If we hit a lazy entry that needs evaluation, evaluate and retry.
|
|
138
|
+
// Cap iterations to prevent infinite loops from pathological nesting.
|
|
139
|
+
const MAX_LAZY_ITERATIONS = 100;
|
|
140
|
+
let iterations = 0;
|
|
141
|
+
while (isLazyEvaluationNeeded(result)) {
|
|
142
|
+
if (++iterations > MAX_LAZY_ITERATIONS) {
|
|
143
|
+
console.error(
|
|
144
|
+
`[@rangojs/router] Exceeded ${MAX_LAZY_ITERATIONS} lazy evaluation iterations ` +
|
|
145
|
+
`for pathname "${pathname}". This likely indicates circular lazy includes.`,
|
|
146
|
+
);
|
|
147
|
+
lastFindMatchPathname = pathname;
|
|
148
|
+
lastFindMatchResult = null;
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
deps.evaluateLazyEntry(result.lazyEntry);
|
|
152
|
+
result = findRouteMatch(pathname, deps.routesEntries);
|
|
153
|
+
}
|
|
154
|
+
pushMetric?.("match:regex-fallback", regexStart);
|
|
155
|
+
|
|
156
|
+
lastFindMatchPathname = pathname;
|
|
157
|
+
lastFindMatchResult = result;
|
|
158
|
+
return result;
|
|
159
|
+
};
|
|
160
|
+
}
|