|
1 | 1 | import { WINDOW } from '@sentry/react'; |
2 | | -import type { RouteManifest } from '../../config/manifest/types'; |
3 | | -import { maybeParameterizeRoute } from './parameterization'; |
| 2 | +import { getManifest, maybeParameterizeRoute } from './parameterization'; |
4 | 3 |
|
5 | | -const globalWithInjectedValues = WINDOW as typeof WINDOW & { |
6 | | - _sentryRouteManifest: string; |
7 | | -}; |
| 4 | +const IS_ISR_SSG_ROUTE_CACHE = new Map<string, boolean>(); |
8 | 5 |
|
9 | 6 | /** |
10 | 7 | * Check if the current page is an ISR/SSG route by checking the route manifest. |
11 | 8 | */ |
12 | 9 | function isIsrSsgRoute(pathname: string): boolean { |
13 | | - const manifestData = globalWithInjectedValues._sentryRouteManifest; |
14 | | - if (!manifestData || typeof manifestData !== 'string') { |
15 | | - return false; |
16 | | - } |
| 10 | + // Early parameterization to get the cache key |
| 11 | + const parameterizedPath = maybeParameterizeRoute(pathname); |
| 12 | + const pathToCheck = parameterizedPath || pathname; |
17 | 13 |
|
18 | | - let manifest: RouteManifest; |
19 | | - try { |
20 | | - manifest = JSON.parse(manifestData); |
21 | | - } catch { |
22 | | - return false; |
| 14 | + // Check cache using the parameterized path as the key |
| 15 | + if (IS_ISR_SSG_ROUTE_CACHE.has(pathToCheck)) { |
| 16 | + return IS_ISR_SSG_ROUTE_CACHE.get(pathToCheck) as boolean; |
23 | 17 | } |
24 | 18 |
|
25 | | - if (!manifest.isrRoutes || !Array.isArray(manifest.isrRoutes) || manifest.isrRoutes.length === 0) { |
| 19 | + // Cache miss get the manifest |
| 20 | + const manifest = getManifest(); |
| 21 | + if (!manifest?.isrRoutes || !Array.isArray(manifest.isrRoutes) || manifest.isrRoutes.length === 0) { |
| 22 | + IS_ISR_SSG_ROUTE_CACHE.set(pathToCheck, false); |
26 | 23 | return false; |
27 | 24 | } |
28 | 25 |
|
29 | | - const parameterizedPath = maybeParameterizeRoute(pathname); |
30 | | - const pathToCheck = parameterizedPath || pathname; |
| 26 | + const isIsrSsgRoute = manifest.isrRoutes.includes(pathToCheck); |
| 27 | + IS_ISR_SSG_ROUTE_CACHE.set(pathToCheck, isIsrSsgRoute); |
31 | 28 |
|
32 | | - return manifest.isrRoutes.includes(pathToCheck); |
| 29 | + return isIsrSsgRoute; |
33 | 30 | } |
34 | 31 |
|
35 | 32 | /** |
|
0 commit comments