@sentry/react 8.53.0 → 9.0.0-alpha.0

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.
Files changed (63) hide show
  1. package/build/cjs/constants.js +1 -1
  2. package/build/cjs/debug-build.js +1 -1
  3. package/build/cjs/error.js +1 -1
  4. package/build/cjs/errorboundary.js +46 -56
  5. package/build/cjs/errorboundary.js.map +1 -1
  6. package/build/cjs/index.js +1 -3
  7. package/build/cjs/index.js.map +1 -1
  8. package/build/cjs/profiler.js +19 -34
  9. package/build/cjs/profiler.js.map +1 -1
  10. package/build/cjs/reactrouter.js +6 -23
  11. package/build/cjs/reactrouter.js.map +1 -1
  12. package/build/cjs/reactrouterv3.js +3 -3
  13. package/build/cjs/reactrouterv3.js.map +1 -1
  14. package/build/cjs/reactrouterv6-compat-utils.js +24 -36
  15. package/build/cjs/reactrouterv6-compat-utils.js.map +1 -1
  16. package/build/cjs/reactrouterv6.js +1 -15
  17. package/build/cjs/reactrouterv6.js.map +1 -1
  18. package/build/cjs/reactrouterv7.js +1 -1
  19. package/build/cjs/redux.js +3 -3
  20. package/build/cjs/redux.js.map +1 -1
  21. package/build/cjs/sdk.js +1 -1
  22. package/build/cjs/tanstackrouter.js +3 -4
  23. package/build/cjs/tanstackrouter.js.map +1 -1
  24. package/build/esm/errorboundary.js +41 -34
  25. package/build/esm/errorboundary.js.map +1 -1
  26. package/build/esm/index.js +1 -1
  27. package/build/esm/package.json +1 -1
  28. package/build/esm/profiler.js +12 -10
  29. package/build/esm/profiler.js.map +1 -1
  30. package/build/esm/reactrouter.js +3 -3
  31. package/build/esm/reactrouter.js.map +1 -1
  32. package/build/esm/reactrouterv3.js +2 -2
  33. package/build/esm/reactrouterv3.js.map +1 -1
  34. package/build/esm/reactrouterv6-compat-utils.js +18 -14
  35. package/build/esm/reactrouterv6-compat-utils.js.map +1 -1
  36. package/build/esm/reactrouterv6.js +1 -13
  37. package/build/esm/reactrouterv6.js.map +1 -1
  38. package/build/esm/redux.js +2 -2
  39. package/build/esm/redux.js.map +1 -1
  40. package/build/esm/tanstackrouter.js +2 -3
  41. package/build/esm/tanstackrouter.js.map +1 -1
  42. package/build/types/errorboundary.d.ts +19 -7
  43. package/build/types/errorboundary.d.ts.map +1 -1
  44. package/build/types/index.d.ts +1 -1
  45. package/build/types/index.d.ts.map +1 -1
  46. package/build/types/profiler.d.ts +0 -1
  47. package/build/types/profiler.d.ts.map +1 -1
  48. package/build/types/reactrouterv6-compat-utils.d.ts +4 -0
  49. package/build/types/reactrouterv6-compat-utils.d.ts.map +1 -1
  50. package/build/types/reactrouterv6.d.ts +0 -10
  51. package/build/types/reactrouterv6.d.ts.map +1 -1
  52. package/build/types/tanstackrouter.d.ts +1 -1
  53. package/build/types/tanstackrouter.d.ts.map +1 -1
  54. package/build/types/vendor/tanstackrouter-types.d.ts +1 -1
  55. package/build/types/vendor/tanstackrouter-types.d.ts.map +1 -1
  56. package/build/types-ts3.8/errorboundary.d.ts +19 -7
  57. package/build/types-ts3.8/index.d.ts +1 -1
  58. package/build/types-ts3.8/profiler.d.ts +0 -1
  59. package/build/types-ts3.8/reactrouterv6-compat-utils.d.ts +4 -0
  60. package/build/types-ts3.8/reactrouterv6.d.ts +0 -10
  61. package/build/types-ts3.8/tanstackrouter.d.ts +1 -1
  62. package/build/types-ts3.8/vendor/tanstackrouter-types.d.ts +1 -1
  63. package/package.json +7 -8
@@ -1 +1 @@
1
- {"version":3,"file":"reactrouterv3.js","sources":["../../src/reactrouterv3.ts"],"sourcesContent":["import {\n WINDOW,\n browserTracingIntegration,\n startBrowserTracingNavigationSpan,\n startBrowserTracingPageLoadSpan,\n} from '@sentry/browser';\nimport {\n SEMANTIC_ATTRIBUTE_SENTRY_OP,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n} from '@sentry/core';\nimport type { Integration, TransactionSource } from '@sentry/core';\n\nimport type { Location } from './types';\n\n// Many of the types below had to be mocked out to prevent typescript issues\n// these types are required for correct functionality.\n\ntype HistoryV3 = {\n location?: Location;\n listen?(cb: (location: Location) => void): void;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n} & Record<string, any>;\n\nexport type Route = { path?: string; childRoutes?: Route[] };\n\nexport type Match = (\n props: { location: Location; routes: Route[] },\n cb: (error?: Error, _redirectLocation?: Location, renderProps?: { routes?: Route[] }) => void,\n) => void;\n\ntype ReactRouterV3TransactionSource = Extract<TransactionSource, 'url' | 'route'>;\n\ninterface ReactRouterOptions {\n history: HistoryV3;\n routes: Route[];\n match: Match;\n}\n\n/**\n * A browser tracing integration that uses React Router v3 to instrument navigations.\n * Expects `history` (and optionally `routes` and `matchPath`) to be passed as options.\n */\nexport function reactRouterV3BrowserTracingIntegration(\n options: Parameters<typeof browserTracingIntegration>[0] & ReactRouterOptions,\n): Integration {\n const integration = browserTracingIntegration({\n ...options,\n instrumentPageLoad: false,\n instrumentNavigation: false,\n });\n\n const { history, routes, match, instrumentPageLoad = true, instrumentNavigation = true } = options;\n\n return {\n ...integration,\n afterAllSetup(client) {\n integration.afterAllSetup(client);\n\n if (instrumentPageLoad && WINDOW && WINDOW.location) {\n normalizeTransactionName(\n routes,\n WINDOW.location as unknown as Location,\n match,\n (localName: string, source: ReactRouterV3TransactionSource = 'url') => {\n startBrowserTracingPageLoadSpan(client, {\n name: localName,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.react.reactrouter_v3',\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: source,\n },\n });\n },\n );\n }\n\n if (instrumentNavigation && history.listen) {\n history.listen(location => {\n if (location.action === 'PUSH' || location.action === 'POP') {\n normalizeTransactionName(\n routes,\n location,\n match,\n (localName: string, source: TransactionSource = 'url') => {\n startBrowserTracingNavigationSpan(client, {\n name: localName,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v3',\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: source,\n },\n });\n },\n );\n }\n });\n }\n },\n };\n}\n\n/**\n * Normalize transaction names using `Router.match`\n */\nfunction normalizeTransactionName(\n appRoutes: Route[],\n location: Location,\n match: Match,\n callback: (pathname: string, source?: ReactRouterV3TransactionSource) => void,\n): void {\n let name = location.pathname;\n match(\n {\n location,\n routes: appRoutes,\n },\n (error, _redirectLocation, renderProps) => {\n if (error || !renderProps) {\n return callback(name);\n }\n\n const routePath = getRouteStringFromRoutes(renderProps.routes || []);\n if (routePath.length === 0 || routePath === '/*') {\n return callback(name);\n }\n\n name = routePath;\n return callback(name, 'route');\n },\n );\n}\n\n/**\n * Generate route name from array of routes\n */\nfunction getRouteStringFromRoutes(routes: Route[]): string {\n if (!Array.isArray(routes) || routes.length === 0) {\n return '';\n }\n\n const routesWithPaths: Route[] = routes.filter((route: Route) => !!route.path);\n\n let index = -1;\n for (let x = routesWithPaths.length - 1; x >= 0; x--) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const route = routesWithPaths[x]!;\n if (route.path && route.path.startsWith('/')) {\n index = x;\n break;\n }\n }\n\n return routesWithPaths\n .slice(index)\n .filter(({ path }) => !!path)\n .map(({ path }) => path)\n .join('');\n}\n"],"names":["browserTracingIntegration","WINDOW","startBrowserTracingPageLoadSpan","SEMANTIC_ATTRIBUTE_SENTRY_OP","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","SEMANTIC_ATTRIBUTE_SENTRY_SOURCE","startBrowserTracingNavigationSpan"],"mappings":"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"}
1
+ {"version":3,"file":"reactrouterv3.js","sources":["../../src/reactrouterv3.ts"],"sourcesContent":["import {\n WINDOW,\n browserTracingIntegration,\n startBrowserTracingNavigationSpan,\n startBrowserTracingPageLoadSpan,\n} from '@sentry/browser';\nimport {\n SEMANTIC_ATTRIBUTE_SENTRY_OP,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n} from '@sentry/core';\nimport type { Integration, TransactionSource } from '@sentry/core';\n\nimport type { Location } from './types';\n\n// Many of the types below had to be mocked out to prevent typescript issues\n// these types are required for correct functionality.\n\ntype HistoryV3 = {\n location?: Location;\n listen?(cb: (location: Location) => void): void;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n} & Record<string, any>;\n\nexport type Route = { path?: string; childRoutes?: Route[] };\n\nexport type Match = (\n props: { location: Location; routes: Route[] },\n cb: (error?: Error, _redirectLocation?: Location, renderProps?: { routes?: Route[] }) => void,\n) => void;\n\ntype ReactRouterV3TransactionSource = Extract<TransactionSource, 'url' | 'route'>;\n\ninterface ReactRouterOptions {\n history: HistoryV3;\n routes: Route[];\n match: Match;\n}\n\n/**\n * A browser tracing integration that uses React Router v3 to instrument navigations.\n * Expects `history` (and optionally `routes` and `matchPath`) to be passed as options.\n */\nexport function reactRouterV3BrowserTracingIntegration(\n options: Parameters<typeof browserTracingIntegration>[0] & ReactRouterOptions,\n): Integration {\n const integration = browserTracingIntegration({\n ...options,\n instrumentPageLoad: false,\n instrumentNavigation: false,\n });\n\n const { history, routes, match, instrumentPageLoad = true, instrumentNavigation = true } = options;\n\n return {\n ...integration,\n afterAllSetup(client) {\n integration.afterAllSetup(client);\n\n if (instrumentPageLoad && WINDOW.location) {\n normalizeTransactionName(\n routes,\n WINDOW.location as unknown as Location,\n match,\n (localName: string, source: ReactRouterV3TransactionSource = 'url') => {\n startBrowserTracingPageLoadSpan(client, {\n name: localName,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.react.reactrouter_v3',\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: source,\n },\n });\n },\n );\n }\n\n if (instrumentNavigation && history.listen) {\n history.listen(location => {\n if (location.action === 'PUSH' || location.action === 'POP') {\n normalizeTransactionName(\n routes,\n location,\n match,\n (localName: string, source: TransactionSource = 'url') => {\n startBrowserTracingNavigationSpan(client, {\n name: localName,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v3',\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: source,\n },\n });\n },\n );\n }\n });\n }\n },\n };\n}\n\n/**\n * Normalize transaction names using `Router.match`\n */\nfunction normalizeTransactionName(\n appRoutes: Route[],\n location: Location,\n match: Match,\n callback: (pathname: string, source?: ReactRouterV3TransactionSource) => void,\n): void {\n let name = location.pathname;\n match(\n {\n location,\n routes: appRoutes,\n },\n (error, _redirectLocation, renderProps) => {\n if (error || !renderProps) {\n return callback(name);\n }\n\n const routePath = getRouteStringFromRoutes(renderProps.routes || []);\n if (routePath.length === 0 || routePath === '/*') {\n return callback(name);\n }\n\n name = routePath;\n return callback(name, 'route');\n },\n );\n}\n\n/**\n * Generate route name from array of routes\n */\nfunction getRouteStringFromRoutes(routes: Route[]): string {\n if (!Array.isArray(routes) || routes.length === 0) {\n return '';\n }\n\n const routesWithPaths: Route[] = routes.filter((route: Route) => !!route.path);\n\n let index = -1;\n for (let x = routesWithPaths.length - 1; x >= 0; x--) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const route = routesWithPaths[x]!;\n if (route.path?.startsWith('/')) {\n index = x;\n break;\n }\n }\n\n return routesWithPaths\n .slice(index)\n .filter(({ path }) => !!path)\n .map(({ path }) => path)\n .join('');\n}\n"],"names":["browserTracingIntegration","WINDOW","startBrowserTracingPageLoadSpan","SEMANTIC_ATTRIBUTE_SENTRY_OP","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","SEMANTIC_ATTRIBUTE_SENTRY_SOURCE","startBrowserTracingNavigationSpan"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- Object.defineProperty(exports, '__esModule', { value: true });
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
 
3
3
  const browser = require('@sentry/browser');
4
4
  const core = require('@sentry/core');
@@ -6,23 +6,6 @@ const React = require('react');
6
6
  const hoistNonReactStatics = require('hoist-non-react-statics');
7
7
  const debugBuild = require('./debug-build.js');
8
8
 
9
- const _interopDefault = e => e && e.__esModule ? e.default : e;
10
-
11
- function _interopNamespace(e) {
12
- if (e && e.__esModule) return e;
13
- const n = Object.create(null);
14
- if (e) {
15
- for (const k in e) {
16
- n[k] = e[k];
17
- }
18
- }
19
- n.default = e;
20
- return n;
21
- }
22
-
23
- const React__namespace = /*#__PURE__*/_interopNamespace(React);
24
- const hoistNonReactStatics__default = /*#__PURE__*/_interopDefault(hoistNonReactStatics);
25
-
26
9
  /* eslint-disable max-lines */
27
10
  // Inspired from Donnie McNeal's solution:
28
11
  // https://gist.github.com/wontondon/e8c4bdf2888875e4c755712e99279536
@@ -57,7 +40,7 @@ function createV6CompatibleWrapCreateBrowserRouter
57
40
 
58
41
  return function (routes, opts) {
59
42
  const router = createRouterFunction(routes, opts);
60
- const basename = opts && opts.basename;
43
+ const basename = opts?.basename;
61
44
 
62
45
  const activeRootSpan = getActiveRootSpan();
63
46
 
@@ -110,13 +93,13 @@ function createV6CompatibleWrapCreateMemoryRouter
110
93
  ,
111
94
  ) {
112
95
  const router = createRouterFunction(routes, opts);
113
- const basename = opts ? opts.basename : undefined;
96
+ const basename = opts?.basename;
114
97
 
115
98
  const activeRootSpan = getActiveRootSpan();
116
99
  let initialEntry = undefined;
117
100
 
118
- const initialEntries = opts ? opts.initialEntries : undefined;
119
- const initialIndex = opts ? opts.initialIndex : undefined;
101
+ const initialEntries = opts?.initialEntries;
102
+ const initialIndex = opts?.initialIndex;
120
103
 
121
104
  const hasOnlyOneInitialEntry = initialEntries && initialEntries.length === 1;
122
105
  const hasIndexedEntry = initialIndex !== undefined && initialEntries && initialEntries[initialIndex];
@@ -191,7 +174,7 @@ function createReactRouterV6CompatibleTracingIntegration(
191
174
  afterAllSetup(client) {
192
175
  integration.afterAllSetup(client);
193
176
 
194
- const initPathName = browser.WINDOW && browser.WINDOW.location && browser.WINDOW.location.pathname;
177
+ const initPathName = browser.WINDOW.location?.pathname;
195
178
  if (instrumentPageLoad && initPathName) {
196
179
  browser.startBrowserTracingPageLoadSpan(client, {
197
180
  name: initPathName,
@@ -225,7 +208,7 @@ function createV6CompatibleWrapUseRoutes(origUseRoutes, version) {
225
208
  const SentryRoutes
226
209
 
227
210
  = (props) => {
228
- const isMountRenderPass = React__namespace.useRef(true);
211
+ const isMountRenderPass = React.useRef(true);
229
212
  const { routes, locationArg } = props;
230
213
 
231
214
  const Routes = origUseRoutes(routes, locationArg);
@@ -235,9 +218,7 @@ function createV6CompatibleWrapUseRoutes(origUseRoutes, version) {
235
218
 
236
219
  // A value with stable identity to either pick `locationArg` if available or `location` if not
237
220
  const stableLocationParam =
238
- typeof locationArg === 'string' || (locationArg && locationArg.pathname)
239
- ? (locationArg )
240
- : location;
221
+ typeof locationArg === 'string' || locationArg?.pathname ? (locationArg ) : location;
241
222
 
242
223
  _useEffect(() => {
243
224
  const normalizedLocation =
@@ -277,7 +258,7 @@ function createV6CompatibleWrapUseRoutes(origUseRoutes, version) {
277
258
 
278
259
  // eslint-disable-next-line react/display-name
279
260
  return (routes, locationArg) => {
280
- return React__namespace.createElement(SentryRoutes, { routes: routes, locationArg: locationArg,} );
261
+ return React.createElement(SentryRoutes, { routes: routes, locationArg: locationArg,} );
281
262
  };
282
263
  }
283
264
 
@@ -365,11 +346,11 @@ function pathEndsWithWildcard(path) {
365
346
  }
366
347
 
367
348
  function pathIsWildcardAndHasChildren(path, branch) {
368
- return (pathEndsWithWildcard(path) && branch.route.children && branch.route.children.length > 0) || false;
349
+ return (pathEndsWithWildcard(path) && !!branch.route.children?.length) || false;
369
350
  }
370
351
 
371
352
  function routeIsDescendant(route) {
372
- return !!(!route.children && route.element && route.path && route.path.endsWith('/*'));
353
+ return !!(!route.children && route.element && route.path?.endsWith('/*'));
373
354
  }
374
355
 
375
356
  function locationIsInsideDescendantRoute(location, routes) {
@@ -483,9 +464,7 @@ function getNormalizedName(
483
464
  // If the route defined on the element is something like
484
465
  // <Route path="/stores/:storeId/products/:productId" element={<div>Product</div>} />
485
466
  // We should check against the branch.pathname for the number of / separators
486
- // TODO(v9): Put the implementation of `getNumberOfUrlSegments` in this file
487
- // eslint-disable-next-line deprecation/deprecation
488
- core.getNumberOfUrlSegments(pathBuilder) !== core.getNumberOfUrlSegments(branch.pathname) &&
467
+ getNumberOfUrlSegments(pathBuilder) !== getNumberOfUrlSegments(branch.pathname) &&
489
468
  // We should not count wildcard operators in the url segments calculation
490
469
  !pathEndsWithWildcard(pathBuilder)
491
470
  ) {
@@ -563,7 +542,7 @@ function createV6CompatibleWithSentryReactRouterRouting(
563
542
  const allRoutes = new Set();
564
543
 
565
544
  const SentryRoutes = (props) => {
566
- const isMountRenderPass = React__namespace.useRef(true);
545
+ const isMountRenderPass = React.useRef(true);
567
546
 
568
547
  const location = _useLocation();
569
548
  const navigationType = _useNavigationType();
@@ -600,10 +579,10 @@ function createV6CompatibleWithSentryReactRouterRouting(
600
579
 
601
580
  // @ts-expect-error Setting more specific React Component typing for `R` generic above
602
581
  // will break advanced type inference done by react router params
603
- return React__namespace.createElement(Routes, { ...props,} );
582
+ return React.createElement(Routes, { ...props,} );
604
583
  };
605
584
 
606
- hoistNonReactStatics__default(SentryRoutes, Routes);
585
+ hoistNonReactStatics.default(SentryRoutes, Routes);
607
586
 
608
587
  // @ts-expect-error Setting more specific React Component typing for `R` generic above
609
588
  // will break advanced type inference done by react router params
@@ -624,10 +603,19 @@ function getActiveRootSpan() {
624
603
  return op === 'navigation' || op === 'pageload' ? rootSpan : undefined;
625
604
  }
626
605
 
606
+ /**
607
+ * Returns number of URL segments of a passed string URL.
608
+ */
609
+ function getNumberOfUrlSegments(url) {
610
+ // split at '/' or at '\/' to split regex urls correctly
611
+ return url.split(/\\?\//).filter(s => s.length > 0 && s !== ',').length;
612
+ }
613
+
627
614
  exports.createReactRouterV6CompatibleTracingIntegration = createReactRouterV6CompatibleTracingIntegration;
628
615
  exports.createV6CompatibleWithSentryReactRouterRouting = createV6CompatibleWithSentryReactRouterRouting;
629
616
  exports.createV6CompatibleWrapCreateBrowserRouter = createV6CompatibleWrapCreateBrowserRouter;
630
617
  exports.createV6CompatibleWrapCreateMemoryRouter = createV6CompatibleWrapCreateMemoryRouter;
631
618
  exports.createV6CompatibleWrapUseRoutes = createV6CompatibleWrapUseRoutes;
619
+ exports.getNumberOfUrlSegments = getNumberOfUrlSegments;
632
620
  exports.handleNavigation = handleNavigation;
633
621
  //# sourceMappingURL=reactrouterv6-compat-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"reactrouterv6-compat-utils.js","sources":["../../src/reactrouterv6-compat-utils.tsx"],"sourcesContent":["/* eslint-disable max-lines */\n// Inspired from Donnie McNeal's solution:\n// https://gist.github.com/wontondon/e8c4bdf2888875e4c755712e99279536\n\nimport {\n WINDOW,\n browserTracingIntegration,\n startBrowserTracingNavigationSpan,\n startBrowserTracingPageLoadSpan,\n} from '@sentry/browser';\nimport type { Client, Integration, Span, TransactionSource } from '@sentry/core';\nimport {\n SEMANTIC_ATTRIBUTE_SENTRY_OP,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n getActiveSpan,\n getClient,\n getCurrentScope,\n getNumberOfUrlSegments,\n getRootSpan,\n logger,\n spanToJSON,\n} from '@sentry/core';\nimport * as React from 'react';\n\nimport hoistNonReactStatics from 'hoist-non-react-statics';\nimport { DEBUG_BUILD } from './debug-build';\nimport type {\n Action,\n AgnosticDataRouteMatch,\n CreateRouterFunction,\n CreateRoutesFromChildren,\n Location,\n MatchRoutes,\n RouteMatch,\n RouteObject,\n Router,\n RouterState,\n UseEffect,\n UseLocation,\n UseNavigationType,\n UseRoutes,\n} from './types';\n\nlet _useEffect: UseEffect;\nlet _useLocation: UseLocation;\nlet _useNavigationType: UseNavigationType;\nlet _createRoutesFromChildren: CreateRoutesFromChildren;\nlet _matchRoutes: MatchRoutes;\nlet _stripBasename: boolean = false;\n\nconst CLIENTS_WITH_INSTRUMENT_NAVIGATION = new WeakSet<Client>();\n\nexport interface ReactRouterOptions {\n useEffect: UseEffect;\n useLocation: UseLocation;\n useNavigationType: UseNavigationType;\n createRoutesFromChildren: CreateRoutesFromChildren;\n matchRoutes: MatchRoutes;\n stripBasename?: boolean;\n}\n\ntype V6CompatibleVersion = '6' | '7';\n\n/**\n * Creates a wrapCreateBrowserRouter function that can be used with all React Router v6 compatible versions.\n */\nexport function createV6CompatibleWrapCreateBrowserRouter<\n TState extends RouterState = RouterState,\n TRouter extends Router<TState> = Router<TState>,\n>(\n createRouterFunction: CreateRouterFunction<TState, TRouter>,\n version: V6CompatibleVersion,\n): CreateRouterFunction<TState, TRouter> {\n if (!_useEffect || !_useLocation || !_useNavigationType || !_matchRoutes) {\n DEBUG_BUILD &&\n logger.warn(\n `reactRouterV${version}Instrumentation was unable to wrap the \\`createRouter\\` function because of one or more missing parameters.`,\n );\n\n return createRouterFunction;\n }\n\n return function (routes: RouteObject[], opts?: Record<string, unknown> & { basename?: string }): TRouter {\n const router = createRouterFunction(routes, opts);\n const basename = opts && opts.basename;\n\n const activeRootSpan = getActiveRootSpan();\n\n // The initial load ends when `createBrowserRouter` is called.\n // This is the earliest convenient time to update the transaction name.\n // Callbacks to `router.subscribe` are not called for the initial load.\n if (router.state.historyAction === 'POP' && activeRootSpan) {\n updatePageloadTransaction(activeRootSpan, router.state.location, routes, undefined, basename);\n }\n\n router.subscribe((state: RouterState) => {\n const location = state.location;\n if (state.historyAction === 'PUSH' || state.historyAction === 'POP') {\n handleNavigation({\n location,\n routes,\n navigationType: state.historyAction,\n version,\n basename,\n });\n }\n });\n\n return router;\n };\n}\n\n/**\n * Creates a wrapCreateMemoryRouter function that can be used with all React Router v6 compatible versions.\n */\nexport function createV6CompatibleWrapCreateMemoryRouter<\n TState extends RouterState = RouterState,\n TRouter extends Router<TState> = Router<TState>,\n>(\n createRouterFunction: CreateRouterFunction<TState, TRouter>,\n version: V6CompatibleVersion,\n): CreateRouterFunction<TState, TRouter> {\n if (!_useEffect || !_useLocation || !_useNavigationType || !_matchRoutes) {\n DEBUG_BUILD &&\n logger.warn(\n `reactRouterV${version}Instrumentation was unable to wrap the \\`createMemoryRouter\\` function because of one or more missing parameters.`,\n );\n\n return createRouterFunction;\n }\n\n return function (\n routes: RouteObject[],\n opts?: Record<string, unknown> & {\n basename?: string;\n initialEntries?: (string | { pathname: string })[];\n initialIndex?: number;\n },\n ): TRouter {\n const router = createRouterFunction(routes, opts);\n const basename = opts ? opts.basename : undefined;\n\n const activeRootSpan = getActiveRootSpan();\n let initialEntry = undefined;\n\n const initialEntries = opts ? opts.initialEntries : undefined;\n const initialIndex = opts ? opts.initialIndex : undefined;\n\n const hasOnlyOneInitialEntry = initialEntries && initialEntries.length === 1;\n const hasIndexedEntry = initialIndex !== undefined && initialEntries && initialEntries[initialIndex];\n\n initialEntry = hasOnlyOneInitialEntry\n ? initialEntries[0]\n : hasIndexedEntry\n ? initialEntries[initialIndex]\n : undefined;\n\n const location = initialEntry\n ? typeof initialEntry === 'string'\n ? { pathname: initialEntry }\n : initialEntry\n : router.state.location;\n\n if (router.state.historyAction === 'POP' && activeRootSpan) {\n updatePageloadTransaction(activeRootSpan, location, routes, undefined, basename);\n }\n\n router.subscribe((state: RouterState) => {\n const location = state.location;\n if (state.historyAction === 'PUSH' || state.historyAction === 'POP') {\n handleNavigation({\n location,\n routes,\n navigationType: state.historyAction,\n version,\n basename,\n });\n }\n });\n\n return router;\n };\n}\n\n/**\n * Creates a browser tracing integration that can be used with all React Router v6 compatible versions.\n */\nexport function createReactRouterV6CompatibleTracingIntegration(\n options: Parameters<typeof browserTracingIntegration>[0] & ReactRouterOptions,\n version: V6CompatibleVersion,\n): Integration {\n const integration = browserTracingIntegration({\n ...options,\n instrumentPageLoad: false,\n instrumentNavigation: false,\n });\n\n const {\n useEffect,\n useLocation,\n useNavigationType,\n createRoutesFromChildren,\n matchRoutes,\n stripBasename,\n instrumentPageLoad = true,\n instrumentNavigation = true,\n } = options;\n\n return {\n ...integration,\n setup() {\n _useEffect = useEffect;\n _useLocation = useLocation;\n _useNavigationType = useNavigationType;\n _matchRoutes = matchRoutes;\n _createRoutesFromChildren = createRoutesFromChildren;\n _stripBasename = stripBasename || false;\n },\n afterAllSetup(client) {\n integration.afterAllSetup(client);\n\n const initPathName = WINDOW && WINDOW.location && WINDOW.location.pathname;\n if (instrumentPageLoad && initPathName) {\n startBrowserTracingPageLoadSpan(client, {\n name: initPathName,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url',\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: `auto.pageload.react.reactrouter_v${version}`,\n },\n });\n }\n\n if (instrumentNavigation) {\n CLIENTS_WITH_INSTRUMENT_NAVIGATION.add(client);\n }\n },\n };\n}\n\nexport function createV6CompatibleWrapUseRoutes(origUseRoutes: UseRoutes, version: V6CompatibleVersion): UseRoutes {\n if (!_useEffect || !_useLocation || !_useNavigationType || !_matchRoutes) {\n DEBUG_BUILD &&\n logger.warn(\n 'reactRouterV6Instrumentation was unable to wrap `useRoutes` because of one or more missing parameters.',\n );\n\n return origUseRoutes;\n }\n\n const allRoutes: Set<RouteObject> = new Set();\n\n const SentryRoutes: React.FC<{\n children?: React.ReactNode;\n routes: RouteObject[];\n locationArg?: Partial<Location> | string;\n }> = (props: { children?: React.ReactNode; routes: RouteObject[]; locationArg?: Partial<Location> | string }) => {\n const isMountRenderPass = React.useRef(true);\n const { routes, locationArg } = props;\n\n const Routes = origUseRoutes(routes, locationArg);\n\n const location = _useLocation();\n const navigationType = _useNavigationType();\n\n // A value with stable identity to either pick `locationArg` if available or `location` if not\n const stableLocationParam =\n typeof locationArg === 'string' || (locationArg && locationArg.pathname)\n ? (locationArg as { pathname: string })\n : location;\n\n _useEffect(() => {\n const normalizedLocation =\n typeof stableLocationParam === 'string' ? { pathname: stableLocationParam } : stableLocationParam;\n\n if (isMountRenderPass.current) {\n routes.forEach(route => {\n const extractedChildRoutes = getChildRoutesRecursively(route);\n\n extractedChildRoutes.forEach(r => {\n allRoutes.add(r);\n });\n });\n\n updatePageloadTransaction(\n getActiveRootSpan(),\n normalizedLocation,\n routes,\n undefined,\n undefined,\n Array.from(allRoutes),\n );\n isMountRenderPass.current = false;\n } else {\n handleNavigation({\n location: normalizedLocation,\n routes,\n navigationType,\n version,\n allRoutes: Array.from(allRoutes),\n });\n }\n }, [navigationType, stableLocationParam]);\n\n return Routes;\n };\n\n // eslint-disable-next-line react/display-name\n return (routes: RouteObject[], locationArg?: Partial<Location> | string): React.ReactElement | null => {\n return <SentryRoutes routes={routes} locationArg={locationArg} />;\n };\n}\n\nexport function handleNavigation(opts: {\n location: Location;\n routes: RouteObject[];\n navigationType: Action;\n version: V6CompatibleVersion;\n matches?: AgnosticDataRouteMatch;\n basename?: string;\n allRoutes?: RouteObject[];\n}): void {\n const { location, routes, navigationType, version, matches, basename, allRoutes } = opts;\n\n const branches = Array.isArray(matches) ? matches : _matchRoutes(routes, location, basename);\n\n const client = getClient();\n if (!client || !CLIENTS_WITH_INSTRUMENT_NAVIGATION.has(client)) {\n return;\n }\n\n if ((navigationType === 'PUSH' || navigationType === 'POP') && branches) {\n let name,\n source: TransactionSource = 'url';\n const isInDescendantRoute = locationIsInsideDescendantRoute(location, allRoutes || routes);\n\n if (isInDescendantRoute) {\n name = prefixWithSlash(rebuildRoutePathFromAllRoutes(allRoutes || routes, location));\n source = 'route';\n }\n\n if (!isInDescendantRoute || !name) {\n [name, source] = getNormalizedName(routes, location, branches, basename);\n }\n\n startBrowserTracingNavigationSpan(client, {\n name,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: source,\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: `auto.navigation.react.reactrouter_v${version}`,\n },\n });\n }\n}\n\n/**\n * Strip the basename from a pathname if exists.\n *\n * Vendored and modified from `react-router`\n * https://github.com/remix-run/react-router/blob/462bb712156a3f739d6139a0f14810b76b002df6/packages/router/utils.ts#L1038\n */\nfunction stripBasenameFromPathname(pathname: string, basename: string): string {\n if (!basename || basename === '/') {\n return pathname;\n }\n\n if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {\n return pathname;\n }\n\n // We want to leave trailing slash behavior in the user's control, so if they\n // specify a basename with a trailing slash, we should support it\n const startIndex = basename.endsWith('/') ? basename.length - 1 : basename.length;\n const nextChar = pathname.charAt(startIndex);\n if (nextChar && nextChar !== '/') {\n // pathname does not start with basename/\n return pathname;\n }\n\n return pathname.slice(startIndex) || '/';\n}\n\nfunction sendIndexPath(pathBuilder: string, pathname: string, basename: string): [string, TransactionSource] {\n const reconstructedPath = pathBuilder || _stripBasename ? stripBasenameFromPathname(pathname, basename) : pathname;\n\n const formattedPath =\n // If the path ends with a slash, remove it\n reconstructedPath[reconstructedPath.length - 1] === '/'\n ? reconstructedPath.slice(0, -1)\n : // If the path ends with a wildcard, remove it\n reconstructedPath.slice(-2) === '/*'\n ? reconstructedPath.slice(0, -1)\n : reconstructedPath;\n\n return [formattedPath, 'route'];\n}\n\nfunction pathEndsWithWildcard(path: string): boolean {\n return path.endsWith('*');\n}\n\nfunction pathIsWildcardAndHasChildren(path: string, branch: RouteMatch<string>): boolean {\n return (pathEndsWithWildcard(path) && branch.route.children && branch.route.children.length > 0) || false;\n}\n\nfunction routeIsDescendant(route: RouteObject): boolean {\n return !!(!route.children && route.element && route.path && route.path.endsWith('/*'));\n}\n\nfunction locationIsInsideDescendantRoute(location: Location, routes: RouteObject[]): boolean {\n const matchedRoutes = _matchRoutes(routes, location) as RouteMatch[];\n\n if (matchedRoutes) {\n for (const match of matchedRoutes) {\n if (routeIsDescendant(match.route) && pickSplat(match)) {\n return true;\n }\n }\n }\n\n return false;\n}\n\nfunction getChildRoutesRecursively(route: RouteObject, allRoutes: Set<RouteObject> = new Set()): Set<RouteObject> {\n if (!allRoutes.has(route)) {\n allRoutes.add(route);\n\n if (route.children && !route.index) {\n route.children.forEach(child => {\n const childRoutes = getChildRoutesRecursively(child, allRoutes);\n\n childRoutes.forEach(r => allRoutes.add(r));\n });\n }\n }\n\n return allRoutes;\n}\n\nfunction pickPath(match: RouteMatch): string {\n return trimWildcard(match.route.path || '');\n}\n\nfunction pickSplat(match: RouteMatch): string {\n return match.params['*'] || '';\n}\n\nfunction trimWildcard(path: string): string {\n return path[path.length - 1] === '*' ? path.slice(0, -1) : path;\n}\n\nfunction trimSlash(path: string): string {\n return path[path.length - 1] === '/' ? path.slice(0, -1) : path;\n}\n\nfunction prefixWithSlash(path: string): string {\n return path[0] === '/' ? path : `/${path}`;\n}\n\nfunction rebuildRoutePathFromAllRoutes(allRoutes: RouteObject[], location: Location): string {\n const matchedRoutes = _matchRoutes(allRoutes, location) as RouteMatch[];\n\n if (!matchedRoutes || matchedRoutes.length === 0) {\n return '';\n }\n\n for (const match of matchedRoutes) {\n if (match.route.path && match.route.path !== '*') {\n const path = pickPath(match);\n const strippedPath = stripBasenameFromPathname(location.pathname, prefixWithSlash(match.pathnameBase));\n\n return trimSlash(\n trimSlash(path || '') +\n prefixWithSlash(\n rebuildRoutePathFromAllRoutes(\n allRoutes.filter(route => route !== match.route),\n {\n pathname: strippedPath,\n },\n ),\n ),\n );\n }\n }\n\n return '';\n}\n\nfunction getNormalizedName(\n routes: RouteObject[],\n location: Location,\n branches: RouteMatch[],\n basename: string = '',\n): [string, TransactionSource] {\n if (!routes || routes.length === 0) {\n return [_stripBasename ? stripBasenameFromPathname(location.pathname, basename) : location.pathname, 'url'];\n }\n\n let pathBuilder = '';\n if (branches) {\n for (const branch of branches) {\n const route = branch.route;\n if (route) {\n // Early return if index route\n if (route.index) {\n return sendIndexPath(pathBuilder, branch.pathname, basename);\n }\n const path = route.path;\n\n // If path is not a wildcard and has no child routes, append the path\n if (path && !pathIsWildcardAndHasChildren(path, branch)) {\n const newPath = path[0] === '/' || pathBuilder[pathBuilder.length - 1] === '/' ? path : `/${path}`;\n pathBuilder = trimSlash(pathBuilder) + prefixWithSlash(newPath);\n\n // If the path matches the current location, return the path\n if (trimSlash(location.pathname) === trimSlash(basename + branch.pathname)) {\n if (\n // If the route defined on the element is something like\n // <Route path=\"/stores/:storeId/products/:productId\" element={<div>Product</div>} />\n // We should check against the branch.pathname for the number of / separators\n // TODO(v9): Put the implementation of `getNumberOfUrlSegments` in this file\n // eslint-disable-next-line deprecation/deprecation\n getNumberOfUrlSegments(pathBuilder) !== getNumberOfUrlSegments(branch.pathname) &&\n // We should not count wildcard operators in the url segments calculation\n !pathEndsWithWildcard(pathBuilder)\n ) {\n return [(_stripBasename ? '' : basename) + newPath, 'route'];\n }\n\n // if the last character of the pathbuilder is a wildcard and there are children, remove the wildcard\n if (pathIsWildcardAndHasChildren(pathBuilder, branch)) {\n pathBuilder = pathBuilder.slice(0, -1);\n }\n\n return [(_stripBasename ? '' : basename) + pathBuilder, 'route'];\n }\n }\n }\n }\n }\n\n const fallbackTransactionName = _stripBasename\n ? stripBasenameFromPathname(location.pathname, basename)\n : location.pathname || '/';\n\n return [fallbackTransactionName, 'url'];\n}\n\nfunction updatePageloadTransaction(\n activeRootSpan: Span | undefined,\n location: Location,\n routes: RouteObject[],\n matches?: AgnosticDataRouteMatch,\n basename?: string,\n allRoutes?: RouteObject[],\n): void {\n const branches = Array.isArray(matches)\n ? matches\n : (_matchRoutes(routes, location, basename) as unknown as RouteMatch[]);\n\n if (branches) {\n let name,\n source: TransactionSource = 'url';\n const isInDescendantRoute = locationIsInsideDescendantRoute(location, allRoutes || routes);\n\n if (isInDescendantRoute) {\n name = prefixWithSlash(rebuildRoutePathFromAllRoutes(allRoutes || routes, location));\n source = 'route';\n }\n\n if (!isInDescendantRoute || !name) {\n [name, source] = getNormalizedName(routes, location, branches, basename);\n }\n\n getCurrentScope().setTransactionName(name);\n\n if (activeRootSpan) {\n activeRootSpan.updateName(name);\n activeRootSpan.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, source);\n }\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function createV6CompatibleWithSentryReactRouterRouting<P extends Record<string, any>, R extends React.FC<P>>(\n Routes: R,\n version: V6CompatibleVersion,\n): R {\n if (!_useEffect || !_useLocation || !_useNavigationType || !_createRoutesFromChildren || !_matchRoutes) {\n DEBUG_BUILD &&\n logger.warn(`reactRouterV6Instrumentation was unable to wrap Routes because of one or more missing parameters.\n useEffect: ${_useEffect}. useLocation: ${_useLocation}. useNavigationType: ${_useNavigationType}.\n createRoutesFromChildren: ${_createRoutesFromChildren}. matchRoutes: ${_matchRoutes}.`);\n\n return Routes;\n }\n\n const allRoutes: Set<RouteObject> = new Set();\n\n const SentryRoutes: React.FC<P> = (props: P) => {\n const isMountRenderPass = React.useRef(true);\n\n const location = _useLocation();\n const navigationType = _useNavigationType();\n\n _useEffect(\n () => {\n const routes = _createRoutesFromChildren(props.children) as RouteObject[];\n\n if (isMountRenderPass.current) {\n routes.forEach(route => {\n const extractedChildRoutes = getChildRoutesRecursively(route);\n\n extractedChildRoutes.forEach(r => {\n allRoutes.add(r);\n });\n });\n\n updatePageloadTransaction(getActiveRootSpan(), location, routes, undefined, undefined, Array.from(allRoutes));\n isMountRenderPass.current = false;\n } else {\n handleNavigation({\n location,\n routes,\n navigationType,\n version,\n allRoutes: Array.from(allRoutes),\n });\n }\n },\n // `props.children` is purposely not included in the dependency array, because we do not want to re-run this effect\n // when the children change. We only want to start transactions when the location or navigation type change.\n [location, navigationType],\n );\n\n // @ts-expect-error Setting more specific React Component typing for `R` generic above\n // will break advanced type inference done by react router params\n return <Routes {...props} />;\n };\n\n hoistNonReactStatics(SentryRoutes, Routes);\n\n // @ts-expect-error Setting more specific React Component typing for `R` generic above\n // will break advanced type inference done by react router params\n return SentryRoutes;\n}\n\nfunction getActiveRootSpan(): Span | undefined {\n const span = getActiveSpan();\n const rootSpan = span ? getRootSpan(span) : undefined;\n\n if (!rootSpan) {\n return undefined;\n }\n\n const op = spanToJSON(rootSpan).op;\n\n // Only use this root span if it is a pageload or navigation span\n return op === 'navigation' || op === 'pageload' ? rootSpan : undefined;\n}\n"],"names":["DEBUG_BUILD","logger","browserTracingIntegration","WINDOW","startBrowserTracingPageLoadSpan","SEMANTIC_ATTRIBUTE_SENTRY_SOURCE","SEMANTIC_ATTRIBUTE_SENTRY_OP","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","React","getClient","startBrowserTracingNavigationSpan","getNumberOfUrlSegments","getCurrentScope","hoistNonReactStatics","getActiveSpan","getRootSpan","spanToJSON"],"mappings":"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"}
1
+ {"version":3,"file":"reactrouterv6-compat-utils.js","sources":["../../src/reactrouterv6-compat-utils.tsx"],"sourcesContent":["/* eslint-disable max-lines */\n// Inspired from Donnie McNeal's solution:\n// https://gist.github.com/wontondon/e8c4bdf2888875e4c755712e99279536\n\nimport {\n WINDOW,\n browserTracingIntegration,\n startBrowserTracingNavigationSpan,\n startBrowserTracingPageLoadSpan,\n} from '@sentry/browser';\nimport type { Client, Integration, Span, TransactionSource } from '@sentry/core';\nimport {\n SEMANTIC_ATTRIBUTE_SENTRY_OP,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n getActiveSpan,\n getClient,\n getCurrentScope,\n getRootSpan,\n logger,\n spanToJSON,\n} from '@sentry/core';\nimport * as React from 'react';\n\nimport hoistNonReactStatics from 'hoist-non-react-statics';\nimport { DEBUG_BUILD } from './debug-build';\nimport type {\n Action,\n AgnosticDataRouteMatch,\n CreateRouterFunction,\n CreateRoutesFromChildren,\n Location,\n MatchRoutes,\n RouteMatch,\n RouteObject,\n Router,\n RouterState,\n UseEffect,\n UseLocation,\n UseNavigationType,\n UseRoutes,\n} from './types';\n\nlet _useEffect: UseEffect;\nlet _useLocation: UseLocation;\nlet _useNavigationType: UseNavigationType;\nlet _createRoutesFromChildren: CreateRoutesFromChildren;\nlet _matchRoutes: MatchRoutes;\nlet _stripBasename: boolean = false;\n\nconst CLIENTS_WITH_INSTRUMENT_NAVIGATION = new WeakSet<Client>();\n\nexport interface ReactRouterOptions {\n useEffect: UseEffect;\n useLocation: UseLocation;\n useNavigationType: UseNavigationType;\n createRoutesFromChildren: CreateRoutesFromChildren;\n matchRoutes: MatchRoutes;\n stripBasename?: boolean;\n}\n\ntype V6CompatibleVersion = '6' | '7';\n\n/**\n * Creates a wrapCreateBrowserRouter function that can be used with all React Router v6 compatible versions.\n */\nexport function createV6CompatibleWrapCreateBrowserRouter<\n TState extends RouterState = RouterState,\n TRouter extends Router<TState> = Router<TState>,\n>(\n createRouterFunction: CreateRouterFunction<TState, TRouter>,\n version: V6CompatibleVersion,\n): CreateRouterFunction<TState, TRouter> {\n if (!_useEffect || !_useLocation || !_useNavigationType || !_matchRoutes) {\n DEBUG_BUILD &&\n logger.warn(\n `reactRouterV${version}Instrumentation was unable to wrap the \\`createRouter\\` function because of one or more missing parameters.`,\n );\n\n return createRouterFunction;\n }\n\n return function (routes: RouteObject[], opts?: Record<string, unknown> & { basename?: string }): TRouter {\n const router = createRouterFunction(routes, opts);\n const basename = opts?.basename;\n\n const activeRootSpan = getActiveRootSpan();\n\n // The initial load ends when `createBrowserRouter` is called.\n // This is the earliest convenient time to update the transaction name.\n // Callbacks to `router.subscribe` are not called for the initial load.\n if (router.state.historyAction === 'POP' && activeRootSpan) {\n updatePageloadTransaction(activeRootSpan, router.state.location, routes, undefined, basename);\n }\n\n router.subscribe((state: RouterState) => {\n const location = state.location;\n if (state.historyAction === 'PUSH' || state.historyAction === 'POP') {\n handleNavigation({\n location,\n routes,\n navigationType: state.historyAction,\n version,\n basename,\n });\n }\n });\n\n return router;\n };\n}\n\n/**\n * Creates a wrapCreateMemoryRouter function that can be used with all React Router v6 compatible versions.\n */\nexport function createV6CompatibleWrapCreateMemoryRouter<\n TState extends RouterState = RouterState,\n TRouter extends Router<TState> = Router<TState>,\n>(\n createRouterFunction: CreateRouterFunction<TState, TRouter>,\n version: V6CompatibleVersion,\n): CreateRouterFunction<TState, TRouter> {\n if (!_useEffect || !_useLocation || !_useNavigationType || !_matchRoutes) {\n DEBUG_BUILD &&\n logger.warn(\n `reactRouterV${version}Instrumentation was unable to wrap the \\`createMemoryRouter\\` function because of one or more missing parameters.`,\n );\n\n return createRouterFunction;\n }\n\n return function (\n routes: RouteObject[],\n opts?: Record<string, unknown> & {\n basename?: string;\n initialEntries?: (string | { pathname: string })[];\n initialIndex?: number;\n },\n ): TRouter {\n const router = createRouterFunction(routes, opts);\n const basename = opts?.basename;\n\n const activeRootSpan = getActiveRootSpan();\n let initialEntry = undefined;\n\n const initialEntries = opts?.initialEntries;\n const initialIndex = opts?.initialIndex;\n\n const hasOnlyOneInitialEntry = initialEntries && initialEntries.length === 1;\n const hasIndexedEntry = initialIndex !== undefined && initialEntries && initialEntries[initialIndex];\n\n initialEntry = hasOnlyOneInitialEntry\n ? initialEntries[0]\n : hasIndexedEntry\n ? initialEntries[initialIndex]\n : undefined;\n\n const location = initialEntry\n ? typeof initialEntry === 'string'\n ? { pathname: initialEntry }\n : initialEntry\n : router.state.location;\n\n if (router.state.historyAction === 'POP' && activeRootSpan) {\n updatePageloadTransaction(activeRootSpan, location, routes, undefined, basename);\n }\n\n router.subscribe((state: RouterState) => {\n const location = state.location;\n if (state.historyAction === 'PUSH' || state.historyAction === 'POP') {\n handleNavigation({\n location,\n routes,\n navigationType: state.historyAction,\n version,\n basename,\n });\n }\n });\n\n return router;\n };\n}\n\n/**\n * Creates a browser tracing integration that can be used with all React Router v6 compatible versions.\n */\nexport function createReactRouterV6CompatibleTracingIntegration(\n options: Parameters<typeof browserTracingIntegration>[0] & ReactRouterOptions,\n version: V6CompatibleVersion,\n): Integration {\n const integration = browserTracingIntegration({\n ...options,\n instrumentPageLoad: false,\n instrumentNavigation: false,\n });\n\n const {\n useEffect,\n useLocation,\n useNavigationType,\n createRoutesFromChildren,\n matchRoutes,\n stripBasename,\n instrumentPageLoad = true,\n instrumentNavigation = true,\n } = options;\n\n return {\n ...integration,\n setup() {\n _useEffect = useEffect;\n _useLocation = useLocation;\n _useNavigationType = useNavigationType;\n _matchRoutes = matchRoutes;\n _createRoutesFromChildren = createRoutesFromChildren;\n _stripBasename = stripBasename || false;\n },\n afterAllSetup(client) {\n integration.afterAllSetup(client);\n\n const initPathName = WINDOW.location?.pathname;\n if (instrumentPageLoad && initPathName) {\n startBrowserTracingPageLoadSpan(client, {\n name: initPathName,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url',\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: `auto.pageload.react.reactrouter_v${version}`,\n },\n });\n }\n\n if (instrumentNavigation) {\n CLIENTS_WITH_INSTRUMENT_NAVIGATION.add(client);\n }\n },\n };\n}\n\nexport function createV6CompatibleWrapUseRoutes(origUseRoutes: UseRoutes, version: V6CompatibleVersion): UseRoutes {\n if (!_useEffect || !_useLocation || !_useNavigationType || !_matchRoutes) {\n DEBUG_BUILD &&\n logger.warn(\n 'reactRouterV6Instrumentation was unable to wrap `useRoutes` because of one or more missing parameters.',\n );\n\n return origUseRoutes;\n }\n\n const allRoutes: Set<RouteObject> = new Set();\n\n const SentryRoutes: React.FC<{\n children?: React.ReactNode;\n routes: RouteObject[];\n locationArg?: Partial<Location> | string;\n }> = (props: { children?: React.ReactNode; routes: RouteObject[]; locationArg?: Partial<Location> | string }) => {\n const isMountRenderPass = React.useRef(true);\n const { routes, locationArg } = props;\n\n const Routes = origUseRoutes(routes, locationArg);\n\n const location = _useLocation();\n const navigationType = _useNavigationType();\n\n // A value with stable identity to either pick `locationArg` if available or `location` if not\n const stableLocationParam =\n typeof locationArg === 'string' || locationArg?.pathname ? (locationArg as { pathname: string }) : location;\n\n _useEffect(() => {\n const normalizedLocation =\n typeof stableLocationParam === 'string' ? { pathname: stableLocationParam } : stableLocationParam;\n\n if (isMountRenderPass.current) {\n routes.forEach(route => {\n const extractedChildRoutes = getChildRoutesRecursively(route);\n\n extractedChildRoutes.forEach(r => {\n allRoutes.add(r);\n });\n });\n\n updatePageloadTransaction(\n getActiveRootSpan(),\n normalizedLocation,\n routes,\n undefined,\n undefined,\n Array.from(allRoutes),\n );\n isMountRenderPass.current = false;\n } else {\n handleNavigation({\n location: normalizedLocation,\n routes,\n navigationType,\n version,\n allRoutes: Array.from(allRoutes),\n });\n }\n }, [navigationType, stableLocationParam]);\n\n return Routes;\n };\n\n // eslint-disable-next-line react/display-name\n return (routes: RouteObject[], locationArg?: Partial<Location> | string): React.ReactElement | null => {\n return <SentryRoutes routes={routes} locationArg={locationArg} />;\n };\n}\n\nexport function handleNavigation(opts: {\n location: Location;\n routes: RouteObject[];\n navigationType: Action;\n version: V6CompatibleVersion;\n matches?: AgnosticDataRouteMatch;\n basename?: string;\n allRoutes?: RouteObject[];\n}): void {\n const { location, routes, navigationType, version, matches, basename, allRoutes } = opts;\n\n const branches = Array.isArray(matches) ? matches : _matchRoutes(routes, location, basename);\n\n const client = getClient();\n if (!client || !CLIENTS_WITH_INSTRUMENT_NAVIGATION.has(client)) {\n return;\n }\n\n if ((navigationType === 'PUSH' || navigationType === 'POP') && branches) {\n let name,\n source: TransactionSource = 'url';\n const isInDescendantRoute = locationIsInsideDescendantRoute(location, allRoutes || routes);\n\n if (isInDescendantRoute) {\n name = prefixWithSlash(rebuildRoutePathFromAllRoutes(allRoutes || routes, location));\n source = 'route';\n }\n\n if (!isInDescendantRoute || !name) {\n [name, source] = getNormalizedName(routes, location, branches, basename);\n }\n\n startBrowserTracingNavigationSpan(client, {\n name,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: source,\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: `auto.navigation.react.reactrouter_v${version}`,\n },\n });\n }\n}\n\n/**\n * Strip the basename from a pathname if exists.\n *\n * Vendored and modified from `react-router`\n * https://github.com/remix-run/react-router/blob/462bb712156a3f739d6139a0f14810b76b002df6/packages/router/utils.ts#L1038\n */\nfunction stripBasenameFromPathname(pathname: string, basename: string): string {\n if (!basename || basename === '/') {\n return pathname;\n }\n\n if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {\n return pathname;\n }\n\n // We want to leave trailing slash behavior in the user's control, so if they\n // specify a basename with a trailing slash, we should support it\n const startIndex = basename.endsWith('/') ? basename.length - 1 : basename.length;\n const nextChar = pathname.charAt(startIndex);\n if (nextChar && nextChar !== '/') {\n // pathname does not start with basename/\n return pathname;\n }\n\n return pathname.slice(startIndex) || '/';\n}\n\nfunction sendIndexPath(pathBuilder: string, pathname: string, basename: string): [string, TransactionSource] {\n const reconstructedPath = pathBuilder || _stripBasename ? stripBasenameFromPathname(pathname, basename) : pathname;\n\n const formattedPath =\n // If the path ends with a slash, remove it\n reconstructedPath[reconstructedPath.length - 1] === '/'\n ? reconstructedPath.slice(0, -1)\n : // If the path ends with a wildcard, remove it\n reconstructedPath.slice(-2) === '/*'\n ? reconstructedPath.slice(0, -1)\n : reconstructedPath;\n\n return [formattedPath, 'route'];\n}\n\nfunction pathEndsWithWildcard(path: string): boolean {\n return path.endsWith('*');\n}\n\nfunction pathIsWildcardAndHasChildren(path: string, branch: RouteMatch<string>): boolean {\n return (pathEndsWithWildcard(path) && !!branch.route.children?.length) || false;\n}\n\nfunction routeIsDescendant(route: RouteObject): boolean {\n return !!(!route.children && route.element && route.path?.endsWith('/*'));\n}\n\nfunction locationIsInsideDescendantRoute(location: Location, routes: RouteObject[]): boolean {\n const matchedRoutes = _matchRoutes(routes, location) as RouteMatch[];\n\n if (matchedRoutes) {\n for (const match of matchedRoutes) {\n if (routeIsDescendant(match.route) && pickSplat(match)) {\n return true;\n }\n }\n }\n\n return false;\n}\n\nfunction getChildRoutesRecursively(route: RouteObject, allRoutes: Set<RouteObject> = new Set()): Set<RouteObject> {\n if (!allRoutes.has(route)) {\n allRoutes.add(route);\n\n if (route.children && !route.index) {\n route.children.forEach(child => {\n const childRoutes = getChildRoutesRecursively(child, allRoutes);\n\n childRoutes.forEach(r => allRoutes.add(r));\n });\n }\n }\n\n return allRoutes;\n}\n\nfunction pickPath(match: RouteMatch): string {\n return trimWildcard(match.route.path || '');\n}\n\nfunction pickSplat(match: RouteMatch): string {\n return match.params['*'] || '';\n}\n\nfunction trimWildcard(path: string): string {\n return path[path.length - 1] === '*' ? path.slice(0, -1) : path;\n}\n\nfunction trimSlash(path: string): string {\n return path[path.length - 1] === '/' ? path.slice(0, -1) : path;\n}\n\nfunction prefixWithSlash(path: string): string {\n return path[0] === '/' ? path : `/${path}`;\n}\n\nfunction rebuildRoutePathFromAllRoutes(allRoutes: RouteObject[], location: Location): string {\n const matchedRoutes = _matchRoutes(allRoutes, location) as RouteMatch[];\n\n if (!matchedRoutes || matchedRoutes.length === 0) {\n return '';\n }\n\n for (const match of matchedRoutes) {\n if (match.route.path && match.route.path !== '*') {\n const path = pickPath(match);\n const strippedPath = stripBasenameFromPathname(location.pathname, prefixWithSlash(match.pathnameBase));\n\n return trimSlash(\n trimSlash(path || '') +\n prefixWithSlash(\n rebuildRoutePathFromAllRoutes(\n allRoutes.filter(route => route !== match.route),\n {\n pathname: strippedPath,\n },\n ),\n ),\n );\n }\n }\n\n return '';\n}\n\nfunction getNormalizedName(\n routes: RouteObject[],\n location: Location,\n branches: RouteMatch[],\n basename: string = '',\n): [string, TransactionSource] {\n if (!routes || routes.length === 0) {\n return [_stripBasename ? stripBasenameFromPathname(location.pathname, basename) : location.pathname, 'url'];\n }\n\n let pathBuilder = '';\n if (branches) {\n for (const branch of branches) {\n const route = branch.route;\n if (route) {\n // Early return if index route\n if (route.index) {\n return sendIndexPath(pathBuilder, branch.pathname, basename);\n }\n const path = route.path;\n\n // If path is not a wildcard and has no child routes, append the path\n if (path && !pathIsWildcardAndHasChildren(path, branch)) {\n const newPath = path[0] === '/' || pathBuilder[pathBuilder.length - 1] === '/' ? path : `/${path}`;\n pathBuilder = trimSlash(pathBuilder) + prefixWithSlash(newPath);\n\n // If the path matches the current location, return the path\n if (trimSlash(location.pathname) === trimSlash(basename + branch.pathname)) {\n if (\n // If the route defined on the element is something like\n // <Route path=\"/stores/:storeId/products/:productId\" element={<div>Product</div>} />\n // We should check against the branch.pathname for the number of / separators\n getNumberOfUrlSegments(pathBuilder) !== getNumberOfUrlSegments(branch.pathname) &&\n // We should not count wildcard operators in the url segments calculation\n !pathEndsWithWildcard(pathBuilder)\n ) {\n return [(_stripBasename ? '' : basename) + newPath, 'route'];\n }\n\n // if the last character of the pathbuilder is a wildcard and there are children, remove the wildcard\n if (pathIsWildcardAndHasChildren(pathBuilder, branch)) {\n pathBuilder = pathBuilder.slice(0, -1);\n }\n\n return [(_stripBasename ? '' : basename) + pathBuilder, 'route'];\n }\n }\n }\n }\n }\n\n const fallbackTransactionName = _stripBasename\n ? stripBasenameFromPathname(location.pathname, basename)\n : location.pathname || '/';\n\n return [fallbackTransactionName, 'url'];\n}\n\nfunction updatePageloadTransaction(\n activeRootSpan: Span | undefined,\n location: Location,\n routes: RouteObject[],\n matches?: AgnosticDataRouteMatch,\n basename?: string,\n allRoutes?: RouteObject[],\n): void {\n const branches = Array.isArray(matches)\n ? matches\n : (_matchRoutes(routes, location, basename) as unknown as RouteMatch[]);\n\n if (branches) {\n let name,\n source: TransactionSource = 'url';\n const isInDescendantRoute = locationIsInsideDescendantRoute(location, allRoutes || routes);\n\n if (isInDescendantRoute) {\n name = prefixWithSlash(rebuildRoutePathFromAllRoutes(allRoutes || routes, location));\n source = 'route';\n }\n\n if (!isInDescendantRoute || !name) {\n [name, source] = getNormalizedName(routes, location, branches, basename);\n }\n\n getCurrentScope().setTransactionName(name);\n\n if (activeRootSpan) {\n activeRootSpan.updateName(name);\n activeRootSpan.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, source);\n }\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function createV6CompatibleWithSentryReactRouterRouting<P extends Record<string, any>, R extends React.FC<P>>(\n Routes: R,\n version: V6CompatibleVersion,\n): R {\n if (!_useEffect || !_useLocation || !_useNavigationType || !_createRoutesFromChildren || !_matchRoutes) {\n DEBUG_BUILD &&\n logger.warn(`reactRouterV6Instrumentation was unable to wrap Routes because of one or more missing parameters.\n useEffect: ${_useEffect}. useLocation: ${_useLocation}. useNavigationType: ${_useNavigationType}.\n createRoutesFromChildren: ${_createRoutesFromChildren}. matchRoutes: ${_matchRoutes}.`);\n\n return Routes;\n }\n\n const allRoutes: Set<RouteObject> = new Set();\n\n const SentryRoutes: React.FC<P> = (props: P) => {\n const isMountRenderPass = React.useRef(true);\n\n const location = _useLocation();\n const navigationType = _useNavigationType();\n\n _useEffect(\n () => {\n const routes = _createRoutesFromChildren(props.children) as RouteObject[];\n\n if (isMountRenderPass.current) {\n routes.forEach(route => {\n const extractedChildRoutes = getChildRoutesRecursively(route);\n\n extractedChildRoutes.forEach(r => {\n allRoutes.add(r);\n });\n });\n\n updatePageloadTransaction(getActiveRootSpan(), location, routes, undefined, undefined, Array.from(allRoutes));\n isMountRenderPass.current = false;\n } else {\n handleNavigation({\n location,\n routes,\n navigationType,\n version,\n allRoutes: Array.from(allRoutes),\n });\n }\n },\n // `props.children` is purposely not included in the dependency array, because we do not want to re-run this effect\n // when the children change. We only want to start transactions when the location or navigation type change.\n [location, navigationType],\n );\n\n // @ts-expect-error Setting more specific React Component typing for `R` generic above\n // will break advanced type inference done by react router params\n return <Routes {...props} />;\n };\n\n hoistNonReactStatics(SentryRoutes, Routes);\n\n // @ts-expect-error Setting more specific React Component typing for `R` generic above\n // will break advanced type inference done by react router params\n return SentryRoutes;\n}\n\nfunction getActiveRootSpan(): Span | undefined {\n const span = getActiveSpan();\n const rootSpan = span ? getRootSpan(span) : undefined;\n\n if (!rootSpan) {\n return undefined;\n }\n\n const op = spanToJSON(rootSpan).op;\n\n // Only use this root span if it is a pageload or navigation span\n return op === 'navigation' || op === 'pageload' ? rootSpan : undefined;\n}\n\n/**\n * Returns number of URL segments of a passed string URL.\n */\nexport function getNumberOfUrlSegments(url: string): number {\n // split at '/' or at '\\/' to split regex urls correctly\n return url.split(/\\\\?\\//).filter(s => s.length > 0 && s !== ',').length;\n}\n"],"names":["DEBUG_BUILD","logger","browserTracingIntegration","WINDOW","startBrowserTracingPageLoadSpan","SEMANTIC_ATTRIBUTE_SENTRY_SOURCE","SEMANTIC_ATTRIBUTE_SENTRY_OP","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","getClient","startBrowserTracingNavigationSpan","getCurrentScope","hoistNonReactStatics","getActiveSpan","getRootSpan","spanToJSON"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- Object.defineProperty(exports, '__esModule', { value: true });
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
 
3
3
  const reactrouterv6CompatUtils = require('./reactrouterv6-compat-utils.js');
4
4
 
@@ -20,12 +20,6 @@ function wrapUseRoutesV6(origUseRoutes) {
20
20
  return reactrouterv6CompatUtils.createV6CompatibleWrapUseRoutes(origUseRoutes, '6');
21
21
  }
22
22
 
23
- /**
24
- * Alias for backwards compatibility
25
- * @deprecated Use `wrapUseRoutesV6` or `wrapUseRoutesV7` instead.
26
- */
27
- const wrapUseRoutes = wrapUseRoutesV6;
28
-
29
23
  /**
30
24
  * A wrapper function that adds Sentry routing instrumentation to a React Router v6 createBrowserRouter function.
31
25
  * This is used to automatically capture route changes as transactions when using the createBrowserRouter API.
@@ -36,12 +30,6 @@ function wrapCreateBrowserRouterV6
36
30
  return reactrouterv6CompatUtils.createV6CompatibleWrapCreateBrowserRouter(createRouterFunction, '6');
37
31
  }
38
32
 
39
- /**
40
- * Alias for backwards compatibility
41
- * @deprecated Use `wrapCreateBrowserRouterV6` or `wrapCreateBrowserRouterV7` instead.
42
- */
43
- const wrapCreateBrowserRouter = wrapCreateBrowserRouterV6;
44
-
45
33
  /**
46
34
  * A wrapper function that adds Sentry routing instrumentation to a React Router v6 createMemoryRouter function.
47
35
  * This is used to automatically capture route changes as transactions when using the createMemoryRouter API.
@@ -65,9 +53,7 @@ function withSentryReactRouterV6Routing(routes) {
65
53
 
66
54
  exports.reactRouterV6BrowserTracingIntegration = reactRouterV6BrowserTracingIntegration;
67
55
  exports.withSentryReactRouterV6Routing = withSentryReactRouterV6Routing;
68
- exports.wrapCreateBrowserRouter = wrapCreateBrowserRouter;
69
56
  exports.wrapCreateBrowserRouterV6 = wrapCreateBrowserRouterV6;
70
57
  exports.wrapCreateMemoryRouterV6 = wrapCreateMemoryRouterV6;
71
- exports.wrapUseRoutes = wrapUseRoutes;
72
58
  exports.wrapUseRoutesV6 = wrapUseRoutesV6;
73
59
  //# sourceMappingURL=reactrouterv6.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"reactrouterv6.js","sources":["../../src/reactrouterv6.tsx"],"sourcesContent":["import type { browserTracingIntegration } from '@sentry/browser';\nimport type { Integration } from '@sentry/core';\nimport type { ReactRouterOptions } from './reactrouterv6-compat-utils';\nimport {\n createReactRouterV6CompatibleTracingIntegration,\n createV6CompatibleWithSentryReactRouterRouting,\n createV6CompatibleWrapCreateBrowserRouter,\n createV6CompatibleWrapCreateMemoryRouter,\n createV6CompatibleWrapUseRoutes,\n} from './reactrouterv6-compat-utils';\nimport type { CreateRouterFunction, Router, RouterState, UseRoutes } from './types';\n\n/**\n * A browser tracing integration that uses React Router v6 to instrument navigations.\n * Expects `useEffect`, `useLocation`, `useNavigationType`, `createRoutesFromChildren` and `matchRoutes` to be passed as options.\n */\nexport function reactRouterV6BrowserTracingIntegration(\n options: Parameters<typeof browserTracingIntegration>[0] & ReactRouterOptions,\n): Integration {\n return createReactRouterV6CompatibleTracingIntegration(options, '6');\n}\n\n/**\n * A wrapper function that adds Sentry routing instrumentation to a React Router v6 useRoutes hook.\n * This is used to automatically capture route changes as transactions when using the useRoutes hook.\n */\nexport function wrapUseRoutesV6(origUseRoutes: UseRoutes): UseRoutes {\n return createV6CompatibleWrapUseRoutes(origUseRoutes, '6');\n}\n\n/**\n * Alias for backwards compatibility\n * @deprecated Use `wrapUseRoutesV6` or `wrapUseRoutesV7` instead.\n */\nexport const wrapUseRoutes = wrapUseRoutesV6;\n\n/**\n * A wrapper function that adds Sentry routing instrumentation to a React Router v6 createBrowserRouter function.\n * This is used to automatically capture route changes as transactions when using the createBrowserRouter API.\n */\nexport function wrapCreateBrowserRouterV6<\n TState extends RouterState = RouterState,\n TRouter extends Router<TState> = Router<TState>,\n>(createRouterFunction: CreateRouterFunction<TState, TRouter>): CreateRouterFunction<TState, TRouter> {\n return createV6CompatibleWrapCreateBrowserRouter(createRouterFunction, '6');\n}\n\n/**\n * Alias for backwards compatibility\n * @deprecated Use `wrapCreateBrowserRouterV6` or `wrapCreateBrowserRouterV7` instead.\n */\nexport const wrapCreateBrowserRouter = wrapCreateBrowserRouterV6;\n\n/**\n * A wrapper function that adds Sentry routing instrumentation to a React Router v6 createMemoryRouter function.\n * This is used to automatically capture route changes as transactions when using the createMemoryRouter API.\n * The difference between createBrowserRouter and createMemoryRouter is that with createMemoryRouter,\n * optional `initialEntries` are also taken into account.\n */\nexport function wrapCreateMemoryRouterV6<\n TState extends RouterState = RouterState,\n TRouter extends Router<TState> = Router<TState>,\n>(createMemoryRouterFunction: CreateRouterFunction<TState, TRouter>): CreateRouterFunction<TState, TRouter> {\n return createV6CompatibleWrapCreateMemoryRouter(createMemoryRouterFunction, '6');\n}\n\n/**\n * A higher-order component that adds Sentry routing instrumentation to a React Router v6 Route component.\n * This is used to automatically capture route changes as transactions.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function withSentryReactRouterV6Routing<P extends Record<string, any>, R extends React.FC<P>>(routes: R): R {\n return createV6CompatibleWithSentryReactRouterRouting<P, R>(routes, '6');\n}\n"],"names":["createReactRouterV6CompatibleTracingIntegration","createV6CompatibleWrapUseRoutes","createV6CompatibleWrapCreateBrowserRouter","createV6CompatibleWrapCreateMemoryRouter","createV6CompatibleWithSentryReactRouterRouting"],"mappings":";;;;AAYA;AACA;AACA;AACA;AACO,SAAS,sCAAsC;AACtD,EAAE,OAAO;AACT,EAAe;AACf,EAAE,OAAOA,wEAA+C,CAAC,OAAO,EAAE,GAAG,CAAC;AACtE;;AAEA;AACA;AACA;AACA;AACO,SAAS,eAAe,CAAC,aAAa,EAAwB;AACrE,EAAE,OAAOC,wDAA+B,CAAC,aAAa,EAAE,GAAG,CAAC;AAC5D;;AAEA;AACA;AACA;AACA;AACO,MAAM,aAAc,GAAE;;AAE7B;AACA;AACA;AACA;AACO,SAAS;;AAGhB,CAAE,oBAAoB,EAAgF;AACtG,EAAE,OAAOC,kEAAyC,CAAC,oBAAoB,EAAE,GAAG,CAAC;AAC7E;;AAEA;AACA;AACA;AACA;AACO,MAAM,uBAAwB,GAAE;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACO,SAAS;;AAGhB,CAAE,0BAA0B,EAAgF;AAC5G,EAAE,OAAOC,iEAAwC,CAAC,0BAA0B,EAAE,GAAG,CAAC;AAClF;;AAEA;AACA;AACA;AACA;AACA;AACO,SAAS,8BAA8B,CAAuD,MAAM,EAAQ;AACnH,EAAE,OAAOC,uEAA8C,CAAO,MAAM,EAAE,GAAG,CAAC;AAC1E;;;;;;;;;;"}
1
+ {"version":3,"file":"reactrouterv6.js","sources":["../../src/reactrouterv6.tsx"],"sourcesContent":["import type { browserTracingIntegration } from '@sentry/browser';\nimport type { Integration } from '@sentry/core';\nimport type { ReactRouterOptions } from './reactrouterv6-compat-utils';\nimport {\n createReactRouterV6CompatibleTracingIntegration,\n createV6CompatibleWithSentryReactRouterRouting,\n createV6CompatibleWrapCreateBrowserRouter,\n createV6CompatibleWrapCreateMemoryRouter,\n createV6CompatibleWrapUseRoutes,\n} from './reactrouterv6-compat-utils';\nimport type { CreateRouterFunction, Router, RouterState, UseRoutes } from './types';\n\n/**\n * A browser tracing integration that uses React Router v6 to instrument navigations.\n * Expects `useEffect`, `useLocation`, `useNavigationType`, `createRoutesFromChildren` and `matchRoutes` to be passed as options.\n */\nexport function reactRouterV6BrowserTracingIntegration(\n options: Parameters<typeof browserTracingIntegration>[0] & ReactRouterOptions,\n): Integration {\n return createReactRouterV6CompatibleTracingIntegration(options, '6');\n}\n\n/**\n * A wrapper function that adds Sentry routing instrumentation to a React Router v6 useRoutes hook.\n * This is used to automatically capture route changes as transactions when using the useRoutes hook.\n */\nexport function wrapUseRoutesV6(origUseRoutes: UseRoutes): UseRoutes {\n return createV6CompatibleWrapUseRoutes(origUseRoutes, '6');\n}\n\n/**\n * A wrapper function that adds Sentry routing instrumentation to a React Router v6 createBrowserRouter function.\n * This is used to automatically capture route changes as transactions when using the createBrowserRouter API.\n */\nexport function wrapCreateBrowserRouterV6<\n TState extends RouterState = RouterState,\n TRouter extends Router<TState> = Router<TState>,\n>(createRouterFunction: CreateRouterFunction<TState, TRouter>): CreateRouterFunction<TState, TRouter> {\n return createV6CompatibleWrapCreateBrowserRouter(createRouterFunction, '6');\n}\n\n/**\n * A wrapper function that adds Sentry routing instrumentation to a React Router v6 createMemoryRouter function.\n * This is used to automatically capture route changes as transactions when using the createMemoryRouter API.\n * The difference between createBrowserRouter and createMemoryRouter is that with createMemoryRouter,\n * optional `initialEntries` are also taken into account.\n */\nexport function wrapCreateMemoryRouterV6<\n TState extends RouterState = RouterState,\n TRouter extends Router<TState> = Router<TState>,\n>(createMemoryRouterFunction: CreateRouterFunction<TState, TRouter>): CreateRouterFunction<TState, TRouter> {\n return createV6CompatibleWrapCreateMemoryRouter(createMemoryRouterFunction, '6');\n}\n\n/**\n * A higher-order component that adds Sentry routing instrumentation to a React Router v6 Route component.\n * This is used to automatically capture route changes as transactions.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function withSentryReactRouterV6Routing<P extends Record<string, any>, R extends React.FC<P>>(routes: R): R {\n return createV6CompatibleWithSentryReactRouterRouting<P, R>(routes, '6');\n}\n"],"names":["createReactRouterV6CompatibleTracingIntegration","createV6CompatibleWrapUseRoutes","createV6CompatibleWrapCreateBrowserRouter","createV6CompatibleWrapCreateMemoryRouter","createV6CompatibleWithSentryReactRouterRouting"],"mappings":";;;;AAYA;AACA;AACA;AACA;AACO,SAAS,sCAAsC;AACtD,EAAE,OAAO;AACT,EAAe;AACf,EAAE,OAAOA,wEAA+C,CAAC,OAAO,EAAE,GAAG,CAAC;AACtE;;AAEA;AACA;AACA;AACA;AACO,SAAS,eAAe,CAAC,aAAa,EAAwB;AACrE,EAAE,OAAOC,wDAA+B,CAAC,aAAa,EAAE,GAAG,CAAC;AAC5D;;AAEA;AACA;AACA;AACA;AACO,SAAS;;AAGhB,CAAE,oBAAoB,EAAgF;AACtG,EAAE,OAAOC,kEAAyC,CAAC,oBAAoB,EAAE,GAAG,CAAC;AAC7E;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS;;AAGhB,CAAE,0BAA0B,EAAgF;AAC5G,EAAE,OAAOC,iEAAwC,CAAC,0BAA0B,EAAE,GAAG,CAAC;AAClF;;AAEA;AACA;AACA;AACA;AACA;AACO,SAAS,8BAA8B,CAAuD,MAAM,EAAQ;AACnH,EAAE,OAAOC,uEAA8C,CAAO,MAAM,EAAE,GAAG,CAAC;AAC1E;;;;;;;;"}
@@ -1,4 +1,4 @@
1
- Object.defineProperty(exports, '__esModule', { value: true });
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
 
3
3
  const reactrouterv6CompatUtils = require('./reactrouterv6-compat-utils.js');
4
4
 
@@ -1,4 +1,4 @@
1
- Object.defineProperty(exports, '__esModule', { value: true });
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
 
3
3
  const core = require('@sentry/core');
4
4
 
@@ -61,8 +61,8 @@ function createReduxEnhancer(enhancerOptions) {
61
61
  const transformedState = options.stateTransformer(newState);
62
62
  if (typeof transformedState !== 'undefined' && transformedState !== null) {
63
63
  const client = core.getClient();
64
- const options = client && client.getOptions();
65
- const normalizationDepth = (options && options.normalizeDepth) || 3; // default state normalization depth to 3
64
+ const options = client?.getOptions();
65
+ const normalizationDepth = options?.normalizeDepth || 3; // default state normalization depth to 3
66
66
 
67
67
  // Set the normalization depth of the redux state to the configured `normalizeDepth` option or a sane number as a fallback
68
68
  const newStateContext = { state: { type: 'redux', value: transformedState } };
@@ -1 +1 @@
1
- {"version":3,"file":"redux.js","sources":["../../src/redux.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Scope } from '@sentry/core';\nimport { addBreadcrumb, addNonEnumerableProperty, getClient, getCurrentScope, getGlobalScope } from '@sentry/core';\n\ninterface Action<T = any> {\n type: T;\n}\n\ninterface AnyAction extends Action {\n [extraProps: string]: any;\n}\n\ntype Reducer<S = any, A extends Action = AnyAction> = (state: S | undefined, action: A) => S;\n\ntype Dispatch<A extends Action = AnyAction> = <T extends A>(action: T, ...extraArgs: any[]) => T;\n\ntype ExtendState<State, Extension> = [Extension] extends [never] ? State : State & Extension;\n\ntype Unsubscribe = () => void;\n\ninterface Store<S = any, A extends Action = AnyAction, StateExt = never, Ext = Record<string, unknown>> {\n dispatch: Dispatch<A>;\n getState(): S;\n subscribe(listener: () => void): Unsubscribe;\n replaceReducer<NewState, NewActions extends Action>(\n nextReducer: Reducer<NewState, NewActions>,\n ): Store<ExtendState<NewState, StateExt>, NewActions, StateExt, Ext> & Ext;\n}\n\ndeclare const $CombinedState: unique symbol;\n\ntype CombinedState<S> = { readonly [$CombinedState]?: undefined } & S;\n\ntype PreloadedState<S> = Required<S> extends {\n [$CombinedState]: undefined;\n}\n ? S extends CombinedState<infer S1>\n ? { [K in keyof S1]?: S1[K] extends Record<string, unknown> ? PreloadedState<S1[K]> : S1[K] }\n : never\n : { [K in keyof S]: S[K] extends string | number | boolean | symbol ? S[K] : PreloadedState<S[K]> };\n\ntype StoreEnhancerStoreCreator<Ext = Record<string, unknown>, StateExt = never> = <\n S = any,\n A extends Action = AnyAction,\n>(\n reducer: Reducer<S, A>,\n preloadedState?: PreloadedState<S>,\n) => Store<ExtendState<S, StateExt>, A, StateExt, Ext> & Ext;\n\nexport interface SentryEnhancerOptions<S = any> {\n /**\n * Redux state in attachments or not.\n * @default true\n */\n attachReduxState?: boolean;\n\n /**\n * Transforms the state before attaching it to an event.\n * Use this to remove any private data before sending it to Sentry.\n * Return null to not attach the state.\n */\n stateTransformer(state: S | undefined): (S & any) | null;\n /**\n * Transforms the action before sending it as a breadcrumb.\n * Use this to remove any private data before sending it to Sentry.\n * Return null to not send the breadcrumb.\n */\n actionTransformer(action: AnyAction): AnyAction | null;\n /**\n * Called on every state update, configure the Sentry Scope with the redux state.\n */\n configureScopeWithState?(scope: Scope, state: S): void;\n}\n\nconst ACTION_BREADCRUMB_CATEGORY = 'redux.action';\nconst ACTION_BREADCRUMB_TYPE = 'info';\n\nconst defaultOptions: SentryEnhancerOptions = {\n attachReduxState: true,\n actionTransformer: action => action,\n stateTransformer: state => state || null,\n};\n\n/**\n * Creates an enhancer that would be passed to Redux's createStore to log actions and the latest state to Sentry.\n *\n * @param enhancerOptions Options to pass to the enhancer\n */\nfunction createReduxEnhancer(enhancerOptions?: Partial<SentryEnhancerOptions>): any {\n // Note: We return an any type as to not have type conflicts.\n const options = {\n ...defaultOptions,\n ...enhancerOptions,\n };\n\n return (next: StoreEnhancerStoreCreator): StoreEnhancerStoreCreator =>\n <S = any, A extends Action = AnyAction>(reducer: Reducer<S, A>, initialState?: PreloadedState<S>) => {\n options.attachReduxState &&\n getGlobalScope().addEventProcessor((event, hint) => {\n try {\n // @ts-expect-error try catch to reduce bundle size\n if (event.type === undefined && event.contexts.state.state.type === 'redux') {\n hint.attachments = [\n ...(hint.attachments || []),\n // @ts-expect-error try catch to reduce bundle size\n { filename: 'redux_state.json', data: JSON.stringify(event.contexts.state.state.value) },\n ];\n }\n } catch (_) {\n // empty\n }\n return event;\n });\n\n const sentryReducer: Reducer<S, A> = (state, action): S => {\n const newState = reducer(state, action);\n\n const scope = getCurrentScope();\n\n /* Action breadcrumbs */\n const transformedAction = options.actionTransformer(action);\n if (typeof transformedAction !== 'undefined' && transformedAction !== null) {\n addBreadcrumb({\n category: ACTION_BREADCRUMB_CATEGORY,\n data: transformedAction,\n type: ACTION_BREADCRUMB_TYPE,\n });\n }\n\n /* Set latest state to scope */\n const transformedState = options.stateTransformer(newState);\n if (typeof transformedState !== 'undefined' && transformedState !== null) {\n const client = getClient();\n const options = client && client.getOptions();\n const normalizationDepth = (options && options.normalizeDepth) || 3; // default state normalization depth to 3\n\n // Set the normalization depth of the redux state to the configured `normalizeDepth` option or a sane number as a fallback\n const newStateContext = { state: { type: 'redux', value: transformedState } };\n addNonEnumerableProperty(\n newStateContext,\n '__sentry_override_normalization_depth__',\n 3 + // 3 layers for `state.value.transformedState`\n normalizationDepth, // rest for the actual state\n );\n\n scope.setContext('state', newStateContext);\n } else {\n scope.setContext('state', null);\n }\n\n /* Allow user to configure scope with latest state */\n const { configureScopeWithState } = options;\n if (typeof configureScopeWithState === 'function') {\n configureScopeWithState(scope, newState);\n }\n\n return newState;\n };\n\n return next(sentryReducer, initialState);\n };\n}\n\nexport { createReduxEnhancer };\n"],"names":["getGlobalScope","getCurrentScope","addBreadcrumb","getClient","addNonEnumerableProperty"],"mappings":"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"}
1
+ {"version":3,"file":"redux.js","sources":["../../src/redux.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Scope } from '@sentry/core';\nimport { addBreadcrumb, addNonEnumerableProperty, getClient, getCurrentScope, getGlobalScope } from '@sentry/core';\n\ninterface Action<T = any> {\n type: T;\n}\n\ninterface AnyAction extends Action {\n [extraProps: string]: any;\n}\n\ntype Reducer<S = any, A extends Action = AnyAction> = (state: S | undefined, action: A) => S;\n\ntype Dispatch<A extends Action = AnyAction> = <T extends A>(action: T, ...extraArgs: any[]) => T;\n\ntype ExtendState<State, Extension> = [Extension] extends [never] ? State : State & Extension;\n\ntype Unsubscribe = () => void;\n\ninterface Store<S = any, A extends Action = AnyAction, StateExt = never, Ext = Record<string, unknown>> {\n dispatch: Dispatch<A>;\n getState(): S;\n subscribe(listener: () => void): Unsubscribe;\n replaceReducer<NewState, NewActions extends Action>(\n nextReducer: Reducer<NewState, NewActions>,\n ): Store<ExtendState<NewState, StateExt>, NewActions, StateExt, Ext> & Ext;\n}\n\ndeclare const $CombinedState: unique symbol;\n\ntype CombinedState<S> = { readonly [$CombinedState]?: undefined } & S;\n\ntype PreloadedState<S> = Required<S> extends {\n [$CombinedState]: undefined;\n}\n ? S extends CombinedState<infer S1>\n ? { [K in keyof S1]?: S1[K] extends Record<string, unknown> ? PreloadedState<S1[K]> : S1[K] }\n : never\n : { [K in keyof S]: S[K] extends string | number | boolean | symbol ? S[K] : PreloadedState<S[K]> };\n\ntype StoreEnhancerStoreCreator<Ext = Record<string, unknown>, StateExt = never> = <\n S = any,\n A extends Action = AnyAction,\n>(\n reducer: Reducer<S, A>,\n preloadedState?: PreloadedState<S>,\n) => Store<ExtendState<S, StateExt>, A, StateExt, Ext> & Ext;\n\nexport interface SentryEnhancerOptions<S = any> {\n /**\n * Redux state in attachments or not.\n * @default true\n */\n attachReduxState?: boolean;\n\n /**\n * Transforms the state before attaching it to an event.\n * Use this to remove any private data before sending it to Sentry.\n * Return null to not attach the state.\n */\n stateTransformer(state: S | undefined): (S & any) | null;\n /**\n * Transforms the action before sending it as a breadcrumb.\n * Use this to remove any private data before sending it to Sentry.\n * Return null to not send the breadcrumb.\n */\n actionTransformer(action: AnyAction): AnyAction | null;\n /**\n * Called on every state update, configure the Sentry Scope with the redux state.\n */\n configureScopeWithState?(scope: Scope, state: S): void;\n}\n\nconst ACTION_BREADCRUMB_CATEGORY = 'redux.action';\nconst ACTION_BREADCRUMB_TYPE = 'info';\n\nconst defaultOptions: SentryEnhancerOptions = {\n attachReduxState: true,\n actionTransformer: action => action,\n stateTransformer: state => state || null,\n};\n\n/**\n * Creates an enhancer that would be passed to Redux's createStore to log actions and the latest state to Sentry.\n *\n * @param enhancerOptions Options to pass to the enhancer\n */\nfunction createReduxEnhancer(enhancerOptions?: Partial<SentryEnhancerOptions>): any {\n // Note: We return an any type as to not have type conflicts.\n const options = {\n ...defaultOptions,\n ...enhancerOptions,\n };\n\n return (next: StoreEnhancerStoreCreator): StoreEnhancerStoreCreator =>\n <S = any, A extends Action = AnyAction>(reducer: Reducer<S, A>, initialState?: PreloadedState<S>) => {\n options.attachReduxState &&\n getGlobalScope().addEventProcessor((event, hint) => {\n try {\n // @ts-expect-error try catch to reduce bundle size\n if (event.type === undefined && event.contexts.state.state.type === 'redux') {\n hint.attachments = [\n ...(hint.attachments || []),\n // @ts-expect-error try catch to reduce bundle size\n { filename: 'redux_state.json', data: JSON.stringify(event.contexts.state.state.value) },\n ];\n }\n } catch (_) {\n // empty\n }\n return event;\n });\n\n const sentryReducer: Reducer<S, A> = (state, action): S => {\n const newState = reducer(state, action);\n\n const scope = getCurrentScope();\n\n /* Action breadcrumbs */\n const transformedAction = options.actionTransformer(action);\n if (typeof transformedAction !== 'undefined' && transformedAction !== null) {\n addBreadcrumb({\n category: ACTION_BREADCRUMB_CATEGORY,\n data: transformedAction,\n type: ACTION_BREADCRUMB_TYPE,\n });\n }\n\n /* Set latest state to scope */\n const transformedState = options.stateTransformer(newState);\n if (typeof transformedState !== 'undefined' && transformedState !== null) {\n const client = getClient();\n const options = client?.getOptions();\n const normalizationDepth = options?.normalizeDepth || 3; // default state normalization depth to 3\n\n // Set the normalization depth of the redux state to the configured `normalizeDepth` option or a sane number as a fallback\n const newStateContext = { state: { type: 'redux', value: transformedState } };\n addNonEnumerableProperty(\n newStateContext,\n '__sentry_override_normalization_depth__',\n 3 + // 3 layers for `state.value.transformedState`\n normalizationDepth, // rest for the actual state\n );\n\n scope.setContext('state', newStateContext);\n } else {\n scope.setContext('state', null);\n }\n\n /* Allow user to configure scope with latest state */\n const { configureScopeWithState } = options;\n if (typeof configureScopeWithState === 'function') {\n configureScopeWithState(scope, newState);\n }\n\n return newState;\n };\n\n return next(sentryReducer, initialState);\n };\n}\n\nexport { createReduxEnhancer };\n"],"names":["getGlobalScope","getCurrentScope","addBreadcrumb","getClient","addNonEnumerableProperty"],"mappings":"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"}
package/build/cjs/sdk.js CHANGED
@@ -1,4 +1,4 @@
1
- Object.defineProperty(exports, '__esModule', { value: true });
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
 
3
3
  const browser = require('@sentry/browser');
4
4
  const core = require('@sentry/core');
@@ -1,4 +1,4 @@
1
- Object.defineProperty(exports, '__esModule', { value: true });
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
 
3
3
  const browser = require('@sentry/browser');
4
4
  const core = require('@sentry/core');
@@ -6,7 +6,7 @@ const core = require('@sentry/core');
6
6
  /**
7
7
  * A custom browser tracing integration for TanStack Router.
8
8
  *
9
- * The minimum compatible version of `@tanstack/router` is `1.34.5`.
9
+ * The minimum compatible version of `@tanstack/react-router` is `1.64.0`.
10
10
  *
11
11
  * @param router A TanStack Router `Router` instance that should be used for routing instrumentation.
12
12
  * @param options Sentry browser tracing configuration.
@@ -55,9 +55,8 @@ function tanstackRouterBrowserTracingIntegration(
55
55
  if (instrumentNavigation) {
56
56
  // The onBeforeNavigate hook is called at the very beginning of a navigation and is only called once per navigation, even when the user is redirected
57
57
  castRouterInstance.subscribe('onBeforeNavigate', onBeforeNavigateArgs => {
58
- const fromLocationState = onBeforeNavigateArgs.fromLocation && onBeforeNavigateArgs.fromLocation.state;
59
58
  // onBeforeNavigate is called during pageloads. We can avoid creating navigation spans by comparing the states of the to and from arguments.
60
- if (onBeforeNavigateArgs.toLocation.state === fromLocationState) {
59
+ if (onBeforeNavigateArgs.toLocation.state === onBeforeNavigateArgs.fromLocation.state) {
61
60
  return;
62
61
  }
63
62
 
@@ -1 +1 @@
1
- {"version":3,"file":"tanstackrouter.js","sources":["../../src/tanstackrouter.ts"],"sourcesContent":["import {\n WINDOW,\n browserTracingIntegration as originalBrowserTracingIntegration,\n startBrowserTracingNavigationSpan,\n startBrowserTracingPageLoadSpan,\n} from '@sentry/browser';\nimport type { Integration } from '@sentry/core';\nimport {\n SEMANTIC_ATTRIBUTE_SENTRY_OP,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n} from '@sentry/core';\nimport type { VendoredTanstackRouter, VendoredTanstackRouterRouteMatch } from './vendor/tanstackrouter-types';\n\n/**\n * A custom browser tracing integration for TanStack Router.\n *\n * The minimum compatible version of `@tanstack/router` is `1.34.5`.\n *\n * @param router A TanStack Router `Router` instance that should be used for routing instrumentation.\n * @param options Sentry browser tracing configuration.\n */\nexport function tanstackRouterBrowserTracingIntegration(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n router: any, // This is `any` because we don't want any type mismatches if TanStack Router changes their types\n options: Parameters<typeof originalBrowserTracingIntegration>[0] = {},\n): Integration {\n const castRouterInstance: VendoredTanstackRouter = router;\n\n const browserTracingIntegrationInstance = originalBrowserTracingIntegration({\n ...options,\n instrumentNavigation: false,\n instrumentPageLoad: false,\n });\n\n const { instrumentPageLoad = true, instrumentNavigation = true } = options;\n\n return {\n ...browserTracingIntegrationInstance,\n afterAllSetup(client) {\n browserTracingIntegrationInstance.afterAllSetup(client);\n\n const initialWindowLocation = WINDOW.location;\n if (instrumentPageLoad && initialWindowLocation) {\n const matchedRoutes = castRouterInstance.matchRoutes(\n initialWindowLocation.pathname,\n castRouterInstance.options.parseSearch(initialWindowLocation.search),\n { preload: false, throwOnError: false },\n );\n\n const lastMatch = matchedRoutes[matchedRoutes.length - 1];\n\n startBrowserTracingPageLoadSpan(client, {\n name: lastMatch ? lastMatch.routeId : initialWindowLocation.pathname,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.react.tanstack_router',\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: lastMatch ? 'route' : 'url',\n ...routeMatchToParamSpanAttributes(lastMatch),\n },\n });\n }\n\n if (instrumentNavigation) {\n // The onBeforeNavigate hook is called at the very beginning of a navigation and is only called once per navigation, even when the user is redirected\n castRouterInstance.subscribe('onBeforeNavigate', onBeforeNavigateArgs => {\n const fromLocationState = onBeforeNavigateArgs.fromLocation && onBeforeNavigateArgs.fromLocation.state;\n // onBeforeNavigate is called during pageloads. We can avoid creating navigation spans by comparing the states of the to and from arguments.\n if (onBeforeNavigateArgs.toLocation.state === fromLocationState) {\n return;\n }\n\n const onResolvedMatchedRoutes = castRouterInstance.matchRoutes(\n onBeforeNavigateArgs.toLocation.pathname,\n onBeforeNavigateArgs.toLocation.search,\n { preload: false, throwOnError: false },\n );\n\n const onBeforeNavigateLastMatch = onResolvedMatchedRoutes[onResolvedMatchedRoutes.length - 1];\n\n const navigationLocation = WINDOW.location;\n const navigationSpan = startBrowserTracingNavigationSpan(client, {\n name: onBeforeNavigateLastMatch ? onBeforeNavigateLastMatch.routeId : navigationLocation.pathname,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.tanstack_router',\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: onBeforeNavigateLastMatch ? 'route' : 'url',\n },\n });\n\n // In case the user is redirected during navigation we want to update the span with the right value.\n const unsubscribeOnResolved = castRouterInstance.subscribe('onResolved', onResolvedArgs => {\n unsubscribeOnResolved();\n if (navigationSpan) {\n const onResolvedMatchedRoutes = castRouterInstance.matchRoutes(\n onResolvedArgs.toLocation.pathname,\n onResolvedArgs.toLocation.search,\n { preload: false, throwOnError: false },\n );\n\n const onResolvedLastMatch = onResolvedMatchedRoutes[onResolvedMatchedRoutes.length - 1];\n\n if (onResolvedLastMatch) {\n navigationSpan.updateName(onResolvedLastMatch.routeId);\n navigationSpan.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, 'route');\n navigationSpan.setAttributes(routeMatchToParamSpanAttributes(onResolvedLastMatch));\n }\n }\n });\n });\n }\n },\n };\n}\n\nfunction routeMatchToParamSpanAttributes(match: VendoredTanstackRouterRouteMatch | undefined): Record<string, string> {\n if (!match) {\n return {};\n }\n\n const paramAttributes: Record<string, string> = {};\n Object.entries(match.params).forEach(([key, value]) => {\n paramAttributes[`url.path.params.${key}`] = value;\n });\n\n return paramAttributes;\n}\n"],"names":["originalBrowserTracingIntegration","WINDOW","startBrowserTracingPageLoadSpan","SEMANTIC_ATTRIBUTE_SENTRY_OP","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","SEMANTIC_ATTRIBUTE_SENTRY_SOURCE","startBrowserTracingNavigationSpan"],"mappings":"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"}
1
+ {"version":3,"file":"tanstackrouter.js","sources":["../../src/tanstackrouter.ts"],"sourcesContent":["import {\n WINDOW,\n browserTracingIntegration as originalBrowserTracingIntegration,\n startBrowserTracingNavigationSpan,\n startBrowserTracingPageLoadSpan,\n} from '@sentry/browser';\nimport type { Integration } from '@sentry/core';\nimport {\n SEMANTIC_ATTRIBUTE_SENTRY_OP,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n} from '@sentry/core';\nimport type { VendoredTanstackRouter, VendoredTanstackRouterRouteMatch } from './vendor/tanstackrouter-types';\n\n/**\n * A custom browser tracing integration for TanStack Router.\n *\n * The minimum compatible version of `@tanstack/react-router` is `1.64.0`.\n *\n * @param router A TanStack Router `Router` instance that should be used for routing instrumentation.\n * @param options Sentry browser tracing configuration.\n */\nexport function tanstackRouterBrowserTracingIntegration(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n router: any, // This is `any` because we don't want any type mismatches if TanStack Router changes their types\n options: Parameters<typeof originalBrowserTracingIntegration>[0] = {},\n): Integration {\n const castRouterInstance: VendoredTanstackRouter = router;\n\n const browserTracingIntegrationInstance = originalBrowserTracingIntegration({\n ...options,\n instrumentNavigation: false,\n instrumentPageLoad: false,\n });\n\n const { instrumentPageLoad = true, instrumentNavigation = true } = options;\n\n return {\n ...browserTracingIntegrationInstance,\n afterAllSetup(client) {\n browserTracingIntegrationInstance.afterAllSetup(client);\n\n const initialWindowLocation = WINDOW.location;\n if (instrumentPageLoad && initialWindowLocation) {\n const matchedRoutes = castRouterInstance.matchRoutes(\n initialWindowLocation.pathname,\n castRouterInstance.options.parseSearch(initialWindowLocation.search),\n { preload: false, throwOnError: false },\n );\n\n const lastMatch = matchedRoutes[matchedRoutes.length - 1];\n\n startBrowserTracingPageLoadSpan(client, {\n name: lastMatch ? lastMatch.routeId : initialWindowLocation.pathname,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.react.tanstack_router',\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: lastMatch ? 'route' : 'url',\n ...routeMatchToParamSpanAttributes(lastMatch),\n },\n });\n }\n\n if (instrumentNavigation) {\n // The onBeforeNavigate hook is called at the very beginning of a navigation and is only called once per navigation, even when the user is redirected\n castRouterInstance.subscribe('onBeforeNavigate', onBeforeNavigateArgs => {\n // onBeforeNavigate is called during pageloads. We can avoid creating navigation spans by comparing the states of the to and from arguments.\n if (onBeforeNavigateArgs.toLocation.state === onBeforeNavigateArgs.fromLocation.state) {\n return;\n }\n\n const onResolvedMatchedRoutes = castRouterInstance.matchRoutes(\n onBeforeNavigateArgs.toLocation.pathname,\n onBeforeNavigateArgs.toLocation.search,\n { preload: false, throwOnError: false },\n );\n\n const onBeforeNavigateLastMatch = onResolvedMatchedRoutes[onResolvedMatchedRoutes.length - 1];\n\n const navigationLocation = WINDOW.location;\n const navigationSpan = startBrowserTracingNavigationSpan(client, {\n name: onBeforeNavigateLastMatch ? onBeforeNavigateLastMatch.routeId : navigationLocation.pathname,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.tanstack_router',\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: onBeforeNavigateLastMatch ? 'route' : 'url',\n },\n });\n\n // In case the user is redirected during navigation we want to update the span with the right value.\n const unsubscribeOnResolved = castRouterInstance.subscribe('onResolved', onResolvedArgs => {\n unsubscribeOnResolved();\n if (navigationSpan) {\n const onResolvedMatchedRoutes = castRouterInstance.matchRoutes(\n onResolvedArgs.toLocation.pathname,\n onResolvedArgs.toLocation.search,\n { preload: false, throwOnError: false },\n );\n\n const onResolvedLastMatch = onResolvedMatchedRoutes[onResolvedMatchedRoutes.length - 1];\n\n if (onResolvedLastMatch) {\n navigationSpan.updateName(onResolvedLastMatch.routeId);\n navigationSpan.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, 'route');\n navigationSpan.setAttributes(routeMatchToParamSpanAttributes(onResolvedLastMatch));\n }\n }\n });\n });\n }\n },\n };\n}\n\nfunction routeMatchToParamSpanAttributes(match: VendoredTanstackRouterRouteMatch | undefined): Record<string, string> {\n if (!match) {\n return {};\n }\n\n const paramAttributes: Record<string, string> = {};\n Object.entries(match.params).forEach(([key, value]) => {\n paramAttributes[`url.path.params.${key}`] = value;\n });\n\n return paramAttributes;\n}\n"],"names":["originalBrowserTracingIntegration","WINDOW","startBrowserTracingPageLoadSpan","SEMANTIC_ATTRIBUTE_SENTRY_OP","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","SEMANTIC_ATTRIBUTE_SENTRY_SOURCE","startBrowserTracingNavigationSpan"],"mappings":"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"}