@sentry/react 10.70.0 → 11.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/error.js +1 -7
- package/build/cjs/error.js.map +1 -1
- package/build/cjs/hoist-non-react-statics.js +1 -7
- package/build/cjs/hoist-non-react-statics.js.map +1 -1
- package/build/cjs/profiler.js +12 -8
- package/build/cjs/profiler.js.map +1 -1
- package/build/cjs/reactrouter-compat-utils/instrumentation.js +24 -41
- package/build/cjs/reactrouter-compat-utils/instrumentation.js.map +1 -1
- package/build/cjs/reactrouter-compat-utils/utils.js +2 -1
- package/build/cjs/reactrouter-compat-utils/utils.js.map +1 -1
- package/build/cjs/reactrouter.js +5 -2
- package/build/cjs/reactrouter.js.map +1 -1
- package/build/cjs/reactrouterv3.js.map +1 -1
- package/build/cjs/tanstackrouter.js +2 -1
- package/build/cjs/tanstackrouter.js.map +1 -1
- package/build/esm/error.js +2 -7
- package/build/esm/error.js.map +1 -1
- package/build/esm/hoist-non-react-statics.js +1 -7
- package/build/esm/hoist-non-react-statics.js.map +1 -1
- package/build/esm/package.json +1 -1
- package/build/esm/profiler.js +12 -8
- package/build/esm/profiler.js.map +1 -1
- package/build/esm/reactrouter-compat-utils/instrumentation.js +25 -42
- package/build/esm/reactrouter-compat-utils/instrumentation.js.map +1 -1
- package/build/esm/reactrouter-compat-utils/utils.js +2 -1
- package/build/esm/reactrouter-compat-utils/utils.js.map +1 -1
- package/build/esm/reactrouter.js +5 -2
- package/build/esm/reactrouter.js.map +1 -1
- package/build/esm/reactrouterv3.js.map +1 -1
- package/build/esm/tanstackrouter.js +2 -1
- package/build/esm/tanstackrouter.js.map +1 -1
- package/build/types/error.d.ts +0 -4
- package/build/types/error.d.ts.map +1 -1
- package/build/types/errorboundary.d.ts.map +1 -1
- package/build/types/hoist-non-react-statics.d.ts.map +1 -1
- package/build/types/profiler.d.ts +0 -1
- package/build/types/profiler.d.ts.map +1 -1
- package/build/types/reactrouter-compat-utils/instrumentation.d.ts.map +1 -1
- package/build/types/reactrouter-compat-utils/utils.d.ts.map +1 -1
- package/build/types/reactrouter.d.ts.map +1 -1
- package/build/types/tanstackrouter.d.ts.map +1 -1
- package/package.json +9 -20
- package/build/cjs/constants.js +0 -10
- package/build/cjs/constants.js.map +0 -1
- package/build/esm/constants.js +0 -6
- package/build/esm/constants.js.map +0 -1
- package/build/types/constants.d.ts +0 -4
- package/build/types/constants.d.ts.map +0 -1
- package/build/types-ts3.8/constants.d.ts +0 -4
- package/build/types-ts3.8/debug-build.d.ts +0 -7
- package/build/types-ts3.8/error.d.ts +0 -41
- package/build/types-ts3.8/errorboundary.d.ts +0 -87
- package/build/types-ts3.8/hoist-non-react-statics.d.ts +0 -21
- package/build/types-ts3.8/index.d.ts +0 -14
- package/build/types-ts3.8/isSyntheticEvent.d.ts +0 -10
- package/build/types-ts3.8/profiler.d.ts +0 -56
- package/build/types-ts3.8/reactrouter-compat-utils/index.d.ts +0 -5
- package/build/types-ts3.8/reactrouter-compat-utils/instrumentation.d.ts +0 -117
- package/build/types-ts3.8/reactrouter-compat-utils/lazy-routes.d.ts +0 -18
- package/build/types-ts3.8/reactrouter-compat-utils/route-manifest.d.ts +0 -13
- package/build/types-ts3.8/reactrouter-compat-utils/utils.d.ts +0 -77
- package/build/types-ts3.8/reactrouter.compat.d.ts +0 -42
- package/build/types-ts3.8/reactrouter.d.ts +0 -41
- package/build/types-ts3.8/reactrouterv3.d.ts +0 -29
- package/build/types-ts3.8/reactrouterv6.d.ts +0 -42
- package/build/types-ts3.8/reactrouterv7.d.ts +0 -42
- package/build/types-ts3.8/redux.d.ts +0 -38
- package/build/types-ts3.8/sdk.d.ts +0 -7
- package/build/types-ts3.8/tanstackrouter.d.ts +0 -13
- package/build/types-ts3.8/types.d.ts +0 -163
- package/build/types-ts3.8/vendor/tanstackrouter-types.d.ts +0 -37
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../src/reactrouter-compat-utils/utils.ts"],"sourcesContent":["import type { Span, TransactionSource } from '@sentry/core/browser';\nimport { debug, getActiveSpan, getRootSpan, spanToJSON } from '@sentry/core/browser';\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { Location, MatchRoutes, RouteMatch, RouteObject } from '../types';\nimport { matchRouteManifest, stripBasenameFromPathname } from './route-manifest';\n\n// Global variables that these utilities depend on\nlet _matchRoutes: MatchRoutes;\nlet _stripBasename: boolean = false;\n\n// Navigation context stack for nested/concurrent patchRoutesOnNavigation calls.\n// Required because window.location hasn't updated yet when handlers are invoked.\ninterface NavigationContext {\n token: object;\n targetPath: string | undefined;\n span: Span | undefined;\n}\n\nconst _navigationContextStack: NavigationContext[] = [];\nconst MAX_CONTEXT_STACK_SIZE = 10;\n\n/**\n * Pushes a navigation context and returns a unique token for cleanup.\n * The token uses object identity for uniqueness (no counter needed).\n */\nexport function setNavigationContext(targetPath: string | undefined, span: Span | undefined): object {\n const token = {};\n // Prevent unbounded stack growth - oldest (likely stale) contexts are evicted first\n if (_navigationContextStack.length >= MAX_CONTEXT_STACK_SIZE) {\n DEBUG_BUILD && debug.warn('[React Router] Navigation context stack overflow - removing oldest context');\n _navigationContextStack.shift();\n }\n _navigationContextStack.push({ token, targetPath, span });\n return token;\n}\n\n/**\n * Clears the navigation context if it's on top of the stack (LIFO).\n * If our context is not on top (out-of-order completion), we leave it -\n * it will be cleaned up by overflow protection when the stack fills up.\n */\nexport function clearNavigationContext(token: object): void {\n const top = _navigationContextStack[_navigationContextStack.length - 1];\n if (top?.token === token) {\n _navigationContextStack.pop();\n }\n}\n\n/** Gets the current (most recent) navigation context if inside a patchRoutesOnNavigation call. */\nexport function getNavigationContext(): NavigationContext | null {\n const length = _navigationContextStack.length;\n // The `?? null` converts undefined (from array access) to null to match return type\n return length > 0 ? (_navigationContextStack[length - 1] ?? null) : null;\n}\n\n/**\n * Initialize function to set dependencies that the router utilities need.\n * Must be called before using any of the exported utility functions.\n */\nexport function initializeRouterUtils(matchRoutes: MatchRoutes, stripBasename: boolean = false): void {\n _matchRoutes = matchRoutes;\n _stripBasename = stripBasename;\n}\n\n// Helper functions\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\n/**\n * Checks if a path ends with a wildcard character (*).\n */\nexport function pathEndsWithWildcard(path: string): boolean {\n return path.endsWith('*');\n}\n\n/** Checks if transaction name has wildcard (/* or ends with *). */\nexport function transactionNameHasWildcard(name: string): boolean {\n return name.includes('/*') || name.endsWith('*');\n}\n\n/**\n * Checks if a path is a wildcard and has child routes.\n */\nexport function pathIsWildcardAndHasChildren(path: string, branch: RouteMatch<string>): boolean {\n return (pathEndsWithWildcard(path) && !!branch.route.children?.length) || false;\n}\n\n/** Check if route is in descendant route (<Routes> within <Routes>) */\nexport function routeIsDescendant(route: RouteObject): boolean {\n return !!(!route.children && route.element && route.path?.endsWith('/*'));\n}\n\nfunction sendIndexPath(pathBuilder: string, pathname: string, basename: string): [string, TransactionSource] {\n const reconstructedPath =\n pathBuilder && pathBuilder.length > 0\n ? pathBuilder\n : _stripBasename\n ? stripBasenameFromPathname(pathname, basename)\n : pathname;\n\n let formattedPath =\n // If the path ends with a wildcard suffix, remove both the slash and the asterisk\n reconstructedPath.slice(-2) === '/*' ? reconstructedPath.slice(0, -2) : reconstructedPath;\n\n // If the path ends with a slash, remove it (but keep single '/')\n if (formattedPath.length > 1 && formattedPath[formattedPath.length - 1] === '/') {\n formattedPath = formattedPath.slice(0, -1);\n }\n\n return [formattedPath, 'route'];\n}\n\n/**\n * Returns the number of URL segments in the given URL string.\n * Splits at '/' or '\\/' to handle regex URLs correctly.\n *\n * @param url - The URL string to segment.\n * @returns The number of segments in the 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\n// Exported utility functions\n\n/**\n * Ensures a path string starts with a forward slash.\n */\nexport function prefixWithSlash(path: string): string {\n return path[0] === '/' ? path : `/${path}`;\n}\n\n/**\n * Rebuilds the route path from all available routes by matching against the current location.\n */\nexport function 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 if (location.pathname === strippedPath) {\n return trimSlash(strippedPath);\n }\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\n/**\n * Recovers the parent prefix for descendant `<Routes>` names.\n *\n * `allRoutes` flattens every mounted `<Routes>` into one set, so an orphaned descendant subtree can\n * outscore the `.../*` route that anchors the location and drop its prefix (e.g. `/:id/:sub` instead of `/child/:id`).\n * Matching only the descendant-parent routes recovers the true anchor.\n */\nfunction reconstructNameFromDescendantParent(\n location: Location,\n allRoutes: RouteObject[],\n currentName: string | undefined,\n): string | undefined {\n const descendantParents = allRoutes.filter(routeIsDescendant);\n if (!descendantParents.length) {\n return undefined;\n }\n\n const matchedParents = _matchRoutes(descendantParents, location) as RouteMatch[] | null;\n const parentMatch = matchedParents?.[matchedParents.length - 1];\n if (!parentMatch || !pickSplat(parentMatch)) {\n return undefined;\n }\n\n const parentTemplate = trimSlash(trimWildcard(parentMatch.route.path || ''));\n\n if (!parentTemplate) {\n return undefined;\n }\n\n const expectedPrefix = prefixWithSlash(parentTemplate);\n\n // Child `<Routes>` resolve against the matched parent, but flattened route matching can already retain\n // a dynamic leading parameter. Adding the parent again would duplicate it (e.g. `/:id/:id`)\n const firstElement = parentTemplate.split('/')[0];\n const hasDynamicLead = firstElement?.startsWith(':') && currentName?.split('/').includes(firstElement);\n\n // Rebuild only when matching the descendant subtree discarded its parent route template\n if (currentName === expectedPrefix || currentName?.startsWith(`${expectedPrefix}/`) || hasDynamicLead) {\n return undefined;\n }\n\n const remainingPathname =\n stripBasenameFromPathname(location.pathname, prefixWithSlash(parentMatch.pathnameBase)) || '/';\n const remainingName = rebuildRoutePathFromAllRoutes(\n allRoutes.filter(route => route !== parentMatch.route),\n { pathname: remainingPathname },\n );\n\n return remainingName ? prefixWithSlash(`${parentTemplate}${prefixWithSlash(remainingName)}`) : undefined;\n}\n\n/**\n * Checks if the current location is inside a descendant route (route with splat parameter).\n */\nexport function 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\n/**\n * Returns a fallback transaction name from location pathname.\n */\nfunction getFallbackTransactionName(location: Location, basename: string): string {\n return _stripBasename ? stripBasenameFromPathname(location.pathname, basename) : location.pathname || '';\n}\n\n/**\n * Gets a normalized route name and transaction source from the current routes and location.\n */\nexport function 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 if (!branches) {\n return [getFallbackTransactionName(location, basename), 'url'];\n }\n\n let pathBuilder = '';\n\n for (const branch of branches) {\n const route = branch.route;\n if (!route) {\n continue;\n }\n\n // Early return for index routes\n if (route.index) {\n return sendIndexPath(pathBuilder, branch.pathname, basename);\n }\n\n const path = route.path;\n if (!path || pathIsWildcardAndHasChildren(path, branch)) {\n continue;\n }\n\n // Build the route path\n const newPath = path[0] === '/' || pathBuilder[pathBuilder.length - 1] === '/' ? path : `/${path}`;\n pathBuilder = trimSlash(pathBuilder) + prefixWithSlash(newPath);\n\n // Check if this path matches the current location\n if (trimSlash(location.pathname) !== trimSlash(basename + branch.pathname)) {\n continue;\n }\n\n // Check if this is a parameterized route like /stores/:storeId/products/:productId\n if (\n getNumberOfUrlSegments(pathBuilder) !== getNumberOfUrlSegments(branch.pathname) &&\n !pathEndsWithWildcard(pathBuilder)\n ) {\n return [(_stripBasename ? '' : basename) + newPath, 'route'];\n }\n\n // Handle wildcard routes with children - strip trailing wildcard\n if (pathIsWildcardAndHasChildren(pathBuilder, branch)) {\n pathBuilder = pathBuilder.slice(0, -1);\n }\n\n return [(_stripBasename ? '' : basename) + pathBuilder, 'route'];\n }\n\n // Fallback when no matching route found\n return [getFallbackTransactionName(location, basename), 'url'];\n}\n\n/**\n * Shared helper function to resolve route name and source\n */\nexport function resolveRouteNameAndSource(\n location: Location,\n routes: RouteObject[],\n allRoutes: RouteObject[],\n branches: RouteMatch[],\n basename: string = '',\n lazyRouteManifest?: string[],\n enableAsyncRouteHandlers?: boolean,\n): [string, TransactionSource] {\n // When lazy route manifest is provided, use it as the primary source for transaction names\n if (enableAsyncRouteHandlers && lazyRouteManifest && lazyRouteManifest.length > 0) {\n const manifestMatch = matchRouteManifest(location.pathname, lazyRouteManifest, basename);\n if (manifestMatch) {\n return [(_stripBasename ? '' : basename) + manifestMatch, 'route'];\n }\n }\n\n // Fall back to React Router route matching\n let name: string | undefined;\n let source: TransactionSource = 'url';\n\n const isInDescendantRoute = locationIsInsideDescendantRoute(location, allRoutes);\n\n if (isInDescendantRoute) {\n name = prefixWithSlash(rebuildRoutePathFromAllRoutes(allRoutes, location));\n source = 'route';\n }\n\n if (!isInDescendantRoute || !name) {\n [name, source] = getNormalizedName(routes, location, branches, basename);\n }\n\n // Guard against orphaned descendant subtrees stealing the transaction name: if the location is\n // anchored by a descendant-parent route (`.../*`) whose prefix was dropped, reconstruct with it.\n const anchoredName = reconstructNameFromDescendantParent(location, allRoutes, name);\n if (anchoredName) {\n return [anchoredName, 'route'];\n }\n\n return [name || location.pathname, source];\n}\n\n/**\n * Gets the active root span if it's a pageload or navigation span.\n */\nexport function 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":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../src/reactrouter-compat-utils/utils.ts"],"sourcesContent":["import type { Span, TransactionSource } from '@sentry/core/browser';\nimport { debug, getActiveSpan, getRootSpan, spanToJSON } from '@sentry/core/browser';\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { Location, MatchRoutes, RouteMatch, RouteObject } from '../types';\nimport { matchRouteManifest, stripBasenameFromPathname } from './route-manifest';\nimport { SENTRY_OP } from '@sentry/conventions/attributes';\n\n// Global variables that these utilities depend on\nlet _matchRoutes: MatchRoutes;\nlet _stripBasename: boolean = false;\n\n// Navigation context stack for nested/concurrent patchRoutesOnNavigation calls.\n// Required because window.location hasn't updated yet when handlers are invoked.\ninterface NavigationContext {\n token: object;\n targetPath: string | undefined;\n span: Span | undefined;\n}\n\nconst _navigationContextStack: NavigationContext[] = [];\nconst MAX_CONTEXT_STACK_SIZE = 10;\n\n/**\n * Pushes a navigation context and returns a unique token for cleanup.\n * The token uses object identity for uniqueness (no counter needed).\n */\nexport function setNavigationContext(targetPath: string | undefined, span: Span | undefined): object {\n const token = {};\n // Prevent unbounded stack growth - oldest (likely stale) contexts are evicted first\n if (_navigationContextStack.length >= MAX_CONTEXT_STACK_SIZE) {\n DEBUG_BUILD && debug.warn('[React Router] Navigation context stack overflow - removing oldest context');\n _navigationContextStack.shift();\n }\n _navigationContextStack.push({ token, targetPath, span });\n return token;\n}\n\n/**\n * Clears the navigation context if it's on top of the stack (LIFO).\n * If our context is not on top (out-of-order completion), we leave it -\n * it will be cleaned up by overflow protection when the stack fills up.\n */\nexport function clearNavigationContext(token: object): void {\n const top = _navigationContextStack[_navigationContextStack.length - 1];\n if (top?.token === token) {\n _navigationContextStack.pop();\n }\n}\n\n/** Gets the current (most recent) navigation context if inside a patchRoutesOnNavigation call. */\nexport function getNavigationContext(): NavigationContext | null {\n const length = _navigationContextStack.length;\n // The `?? null` converts undefined (from array access) to null to match return type\n return length > 0 ? (_navigationContextStack[length - 1] ?? null) : null;\n}\n\n/**\n * Initialize function to set dependencies that the router utilities need.\n * Must be called before using any of the exported utility functions.\n */\nexport function initializeRouterUtils(matchRoutes: MatchRoutes, stripBasename: boolean = false): void {\n _matchRoutes = matchRoutes;\n _stripBasename = stripBasename;\n}\n\n// Helper functions\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\n/**\n * Checks if a path ends with a wildcard character (*).\n */\nexport function pathEndsWithWildcard(path: string): boolean {\n return path.endsWith('*');\n}\n\n/** Checks if transaction name has wildcard (/* or ends with *). */\nexport function transactionNameHasWildcard(name: string): boolean {\n return name.includes('/*') || name.endsWith('*');\n}\n\n/**\n * Checks if a path is a wildcard and has child routes.\n */\nexport function pathIsWildcardAndHasChildren(path: string, branch: RouteMatch<string>): boolean {\n return (pathEndsWithWildcard(path) && !!branch.route.children?.length) || false;\n}\n\n/** Check if route is in descendant route (<Routes> within <Routes>) */\nexport function routeIsDescendant(route: RouteObject): boolean {\n return !!(!route.children && route.element && route.path?.endsWith('/*'));\n}\n\nfunction sendIndexPath(pathBuilder: string, pathname: string, basename: string): [string, TransactionSource] {\n const reconstructedPath =\n pathBuilder && pathBuilder.length > 0\n ? pathBuilder\n : _stripBasename\n ? stripBasenameFromPathname(pathname, basename)\n : pathname;\n\n let formattedPath =\n // If the path ends with a wildcard suffix, remove both the slash and the asterisk\n reconstructedPath.slice(-2) === '/*' ? reconstructedPath.slice(0, -2) : reconstructedPath;\n\n // If the path ends with a slash, remove it (but keep single '/')\n if (formattedPath.length > 1 && formattedPath[formattedPath.length - 1] === '/') {\n formattedPath = formattedPath.slice(0, -1);\n }\n\n return [formattedPath, 'route'];\n}\n\n/**\n * Returns the number of URL segments in the given URL string.\n * Splits at '/' or '\\/' to handle regex URLs correctly.\n *\n * @param url - The URL string to segment.\n * @returns The number of segments in the 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\n// Exported utility functions\n\n/**\n * Ensures a path string starts with a forward slash.\n */\nexport function prefixWithSlash(path: string): string {\n return path[0] === '/' ? path : `/${path}`;\n}\n\n/**\n * Rebuilds the route path from all available routes by matching against the current location.\n */\nexport function 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 if (location.pathname === strippedPath) {\n return trimSlash(strippedPath);\n }\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\n/**\n * Recovers the parent prefix for descendant `<Routes>` names.\n *\n * `allRoutes` flattens every mounted `<Routes>` into one set, so an orphaned descendant subtree can\n * outscore the `.../*` route that anchors the location and drop its prefix (e.g. `/:id/:sub` instead of `/child/:id`).\n * Matching only the descendant-parent routes recovers the true anchor.\n */\nfunction reconstructNameFromDescendantParent(\n location: Location,\n allRoutes: RouteObject[],\n currentName: string | undefined,\n): string | undefined {\n const descendantParents = allRoutes.filter(routeIsDescendant);\n if (!descendantParents.length) {\n return undefined;\n }\n\n const matchedParents = _matchRoutes(descendantParents, location) as RouteMatch[] | null;\n const parentMatch = matchedParents?.[matchedParents.length - 1];\n if (!parentMatch || !pickSplat(parentMatch)) {\n return undefined;\n }\n\n const parentTemplate = trimSlash(trimWildcard(parentMatch.route.path || ''));\n\n if (!parentTemplate) {\n return undefined;\n }\n\n const expectedPrefix = prefixWithSlash(parentTemplate);\n\n // Child `<Routes>` resolve against the matched parent, but flattened route matching can already retain\n // a dynamic leading parameter. Adding the parent again would duplicate it (e.g. `/:id/:id`)\n const firstElement = parentTemplate.split('/')[0];\n const hasDynamicLead = firstElement?.startsWith(':') && currentName?.split('/').includes(firstElement);\n\n // Rebuild only when matching the descendant subtree discarded its parent route template\n if (currentName === expectedPrefix || currentName?.startsWith(`${expectedPrefix}/`) || hasDynamicLead) {\n return undefined;\n }\n\n const remainingPathname =\n stripBasenameFromPathname(location.pathname, prefixWithSlash(parentMatch.pathnameBase)) || '/';\n const remainingName = rebuildRoutePathFromAllRoutes(\n allRoutes.filter(route => route !== parentMatch.route),\n { pathname: remainingPathname },\n );\n\n return remainingName ? prefixWithSlash(`${parentTemplate}${prefixWithSlash(remainingName)}`) : undefined;\n}\n\n/**\n * Checks if the current location is inside a descendant route (route with splat parameter).\n */\nexport function 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\n/**\n * Returns a fallback transaction name from location pathname.\n */\nfunction getFallbackTransactionName(location: Location, basename: string): string {\n return _stripBasename ? stripBasenameFromPathname(location.pathname, basename) : location.pathname || '';\n}\n\n/**\n * Gets a normalized route name and transaction source from the current routes and location.\n */\nexport function 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 if (!branches) {\n return [getFallbackTransactionName(location, basename), 'url'];\n }\n\n let pathBuilder = '';\n\n for (const branch of branches) {\n const route = branch.route;\n if (!route) {\n continue;\n }\n\n // Early return for index routes\n if (route.index) {\n return sendIndexPath(pathBuilder, branch.pathname, basename);\n }\n\n const path = route.path;\n if (!path || pathIsWildcardAndHasChildren(path, branch)) {\n continue;\n }\n\n // Build the route path\n const newPath = path[0] === '/' || pathBuilder[pathBuilder.length - 1] === '/' ? path : `/${path}`;\n pathBuilder = trimSlash(pathBuilder) + prefixWithSlash(newPath);\n\n // Check if this path matches the current location\n if (trimSlash(location.pathname) !== trimSlash(basename + branch.pathname)) {\n continue;\n }\n\n // Check if this is a parameterized route like /stores/:storeId/products/:productId\n if (\n getNumberOfUrlSegments(pathBuilder) !== getNumberOfUrlSegments(branch.pathname) &&\n !pathEndsWithWildcard(pathBuilder)\n ) {\n return [(_stripBasename ? '' : basename) + newPath, 'route'];\n }\n\n // Handle wildcard routes with children - strip trailing wildcard\n if (pathIsWildcardAndHasChildren(pathBuilder, branch)) {\n pathBuilder = pathBuilder.slice(0, -1);\n }\n\n return [(_stripBasename ? '' : basename) + pathBuilder, 'route'];\n }\n\n // Fallback when no matching route found\n return [getFallbackTransactionName(location, basename), 'url'];\n}\n\n/**\n * Shared helper function to resolve route name and source\n */\nexport function resolveRouteNameAndSource(\n location: Location,\n routes: RouteObject[],\n allRoutes: RouteObject[],\n branches: RouteMatch[],\n basename: string = '',\n lazyRouteManifest?: string[],\n enableAsyncRouteHandlers?: boolean,\n): [string, TransactionSource] {\n // When lazy route manifest is provided, use it as the primary source for transaction names\n if (enableAsyncRouteHandlers && lazyRouteManifest && lazyRouteManifest.length > 0) {\n const manifestMatch = matchRouteManifest(location.pathname, lazyRouteManifest, basename);\n if (manifestMatch) {\n return [(_stripBasename ? '' : basename) + manifestMatch, 'route'];\n }\n }\n\n // Fall back to React Router route matching\n let name: string | undefined;\n let source: TransactionSource = 'url';\n\n const isInDescendantRoute = locationIsInsideDescendantRoute(location, allRoutes);\n\n if (isInDescendantRoute) {\n name = prefixWithSlash(rebuildRoutePathFromAllRoutes(allRoutes, location));\n source = 'route';\n }\n\n if (!isInDescendantRoute || !name) {\n [name, source] = getNormalizedName(routes, location, branches, basename);\n }\n\n // Guard against orphaned descendant subtrees stealing the transaction name: if the location is\n // anchored by a descendant-parent route (`.../*`) whose prefix was dropped, reconstruct with it.\n const anchoredName = reconstructNameFromDescendantParent(location, allRoutes, name);\n if (anchoredName) {\n return [anchoredName, 'route'];\n }\n\n return [name || location.pathname, source];\n}\n\n/**\n * Gets the active root span if it's a pageload or navigation span.\n */\nexport function 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).attributes[SENTRY_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":[],"mappings":"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"}
|
package/build/esm/reactrouter.js
CHANGED
|
@@ -132,7 +132,10 @@ function withSentryRouting(Route) {
|
|
|
132
132
|
getCurrentScope().setTransactionName(route);
|
|
133
133
|
if (activeRootSpan) {
|
|
134
134
|
activeRootSpan.updateName(route);
|
|
135
|
-
activeRootSpan.setAttributes({
|
|
135
|
+
activeRootSpan.setAttributes({
|
|
136
|
+
[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: "route",
|
|
137
|
+
[URL_TEMPLATE]: route
|
|
138
|
+
});
|
|
136
139
|
}
|
|
137
140
|
}
|
|
138
141
|
return /* @__PURE__ */ React.createElement(Route, { ...props });
|
|
@@ -147,7 +150,7 @@ function getActiveRootSpan() {
|
|
|
147
150
|
if (!rootSpan) {
|
|
148
151
|
return void 0;
|
|
149
152
|
}
|
|
150
|
-
const op = spanToJSON(rootSpan).
|
|
153
|
+
const op = spanToJSON(rootSpan).attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP];
|
|
151
154
|
return op === "navigation" || op === "pageload" ? rootSpan : void 0;
|
|
152
155
|
}
|
|
153
156
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reactrouter.js","sources":["../../src/reactrouter.tsx"],"sourcesContent":["import {\n browserTracingIntegration,\n startBrowserTracingNavigationSpan,\n startBrowserTracingPageLoadSpan,\n WINDOW,\n} from '@sentry/browser';\nimport type { Client, Integration, Span, TransactionSource } from '@sentry/core';\nimport {\n getActiveSpan,\n getCurrentScope,\n getRootSpan,\n SEMANTIC_ATTRIBUTE_SENTRY_OP,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n spanToJSON,\n} from '@sentry/core';\nimport type { ReactElement } from 'react';\nimport * as React from 'react';\nimport { hoistNonReactStatics } from './hoist-non-react-statics';\nimport type { Action, Location } from './types';\nimport { URL_TEMPLATE } from '@sentry/conventions/attributes';\n\n// We need to disable eslint no-explicit-any because any is required for the\n// react-router typings.\ntype Match = { path: string; url: string; params: Record<string, any>; isExact: boolean }; // eslint-disable-line @typescript-eslint/no-explicit-any\n\nexport type RouterHistory = {\n location?: Location;\n listen?(cb: (location: Location, action: Action) => void): void;\n} & Record<string, any>; // eslint-disable-line @typescript-eslint/no-explicit-any\n\nexport type RouteConfig = {\n [propName: string]: unknown;\n path?: string | string[];\n exact?: boolean;\n component?: ReactElement;\n routes?: RouteConfig[];\n};\n\nexport type MatchPath = (pathname: string, props: string | string[] | any, parent?: Match | null) => Match | null; // eslint-disable-line @typescript-eslint/no-explicit-any\n\ninterface ReactRouterOptions {\n history: RouterHistory;\n routes?: RouteConfig[];\n matchPath?: MatchPath;\n}\n\n/**\n * A browser tracing integration that uses React Router v4 to instrument navigations.\n * Expects `history` (and optionally `routes` and `matchPath`) to be passed as options.\n */\nexport function reactRouterV4BrowserTracingIntegration(\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, matchPath, instrumentPageLoad = true, instrumentNavigation = true } = options;\n\n return {\n ...integration,\n afterAllSetup(client) {\n integration.afterAllSetup(client);\n\n instrumentReactRouter(\n client,\n instrumentPageLoad,\n instrumentNavigation,\n history,\n 'reactrouter_v4',\n routes,\n matchPath,\n );\n },\n };\n}\n\n/**\n * A browser tracing integration that uses React Router v5 to instrument navigations.\n * Expects `history` (and optionally `routes` and `matchPath`) to be passed as options.\n */\nexport function reactRouterV5BrowserTracingIntegration(\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, matchPath, instrumentPageLoad = true, instrumentNavigation = true } = options;\n\n return {\n ...integration,\n afterAllSetup(client) {\n integration.afterAllSetup(client);\n\n instrumentReactRouter(\n client,\n instrumentPageLoad,\n instrumentNavigation,\n history,\n 'reactrouter_v5',\n routes,\n matchPath,\n );\n },\n };\n}\n\nfunction instrumentReactRouter(\n client: Client,\n instrumentPageLoad: boolean,\n instrumentNavigation: boolean,\n history: RouterHistory,\n instrumentationName: string,\n allRoutes: RouteConfig[] = [],\n matchPath?: MatchPath,\n): void {\n function getInitPathName(): string | undefined {\n if (history.location) {\n return history.location.pathname;\n }\n\n if (WINDOW.location) {\n return WINDOW.location.pathname;\n }\n\n return undefined;\n }\n\n /**\n * Normalizes a transaction name. Returns the new name as well as the\n * source of the transaction.\n *\n * @param pathname The initial pathname we normalize\n */\n function normalizeTransactionName(pathname: string): [string, TransactionSource] {\n if (allRoutes.length === 0 || !matchPath) {\n return [pathname, 'url'];\n }\n\n const branches = matchRoutes(allRoutes, pathname, matchPath);\n for (const branch of branches) {\n if (branch.match.isExact) {\n return [branch.match.path, 'route'];\n }\n }\n\n return [pathname, 'url'];\n }\n\n if (instrumentPageLoad) {\n const initPathName = getInitPathName();\n if (initPathName) {\n const [name, source] = normalizeTransactionName(initPathName);\n startBrowserTracingPageLoadSpan(client, {\n name,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: `auto.pageload.react.${instrumentationName}`,\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: source,\n ...(source === 'route' && { [URL_TEMPLATE]: name }),\n },\n });\n }\n }\n\n if (instrumentNavigation && history.listen) {\n history.listen((location, action) => {\n if (action && (action === 'PUSH' || action === 'POP')) {\n const [name, source] = normalizeTransactionName(location.pathname);\n startBrowserTracingNavigationSpan(client, {\n name,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: `auto.navigation.react.${instrumentationName}`,\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: source,\n ...(source === 'route' && { [URL_TEMPLATE]: name }),\n },\n });\n }\n });\n }\n}\n\n/**\n * Matches a set of routes to a pathname\n * Based on implementation from\n */\nfunction matchRoutes(\n routes: RouteConfig[],\n pathname: string,\n matchPath: MatchPath,\n branch: Array<{ route: RouteConfig; match: Match }> = [],\n): Array<{ route: RouteConfig; match: Match }> {\n routes.some(route => {\n const match = route.path\n ? matchPath(pathname, route)\n : branch.length\n ? // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n branch[branch.length - 1]!.match // use parent match\n : computeRootMatch(pathname); // use default \"root\" match\n\n if (match) {\n branch.push({ route, match });\n\n if (route.routes) {\n matchRoutes(route.routes, pathname, matchPath, branch);\n }\n }\n\n return !!match;\n });\n\n return branch;\n}\n\nfunction computeRootMatch(pathname: string): Match {\n return { path: '/', url: '/', params: {}, isExact: pathname === '/' };\n}\n\n/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access */\nexport function withSentryRouting<P extends Record<string, any>, R extends React.ComponentType<P>>(Route: R): R {\n const componentDisplayName = Route.displayName || Route.name;\n\n const WrappedRoute: React.FC<P> = (props: P) => {\n if (props?.computedMatch?.isExact) {\n const route = props.computedMatch.path;\n const activeRootSpan = getActiveRootSpan();\n\n getCurrentScope().setTransactionName(route);\n\n if (activeRootSpan) {\n activeRootSpan.updateName(route);\n activeRootSpan.setAttributes({ [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'route', [URL_TEMPLATE]: route });\n }\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 // https://github.com/DefinitelyTyped/DefinitelyTyped/blob/13dc4235c069e25fe7ee16e11f529d909f9f3ff8/types/react-router/index.d.ts#L154-L164\n return <Route {...props} />;\n };\n\n WrappedRoute.displayName = `sentryRoute(${componentDisplayName})`;\n hoistNonReactStatics(WrappedRoute, Route);\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 // https://github.com/DefinitelyTyped/DefinitelyTyped/blob/13dc4235c069e25fe7ee16e11f529d909f9f3ff8/types/react-router/index.d.ts#L154-L164\n return WrappedRoute;\n}\n/* eslint-enable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access */\n\nfunction getActiveRootSpan(): Span | undefined {\n const span = getActiveSpan();\n const rootSpan = span && getRootSpan(span);\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":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"reactrouter.js","sources":["../../src/reactrouter.tsx"],"sourcesContent":["import {\n browserTracingIntegration,\n startBrowserTracingNavigationSpan,\n startBrowserTracingPageLoadSpan,\n WINDOW,\n} from '@sentry/browser';\nimport type { Client, Integration, Span, TransactionSource } from '@sentry/core';\nimport {\n getActiveSpan,\n getCurrentScope,\n getRootSpan,\n SEMANTIC_ATTRIBUTE_SENTRY_OP,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n spanToJSON,\n} from '@sentry/core';\nimport type { ReactElement } from 'react';\nimport * as React from 'react';\nimport { hoistNonReactStatics } from './hoist-non-react-statics';\nimport type { Action, Location } from './types';\nimport { URL_TEMPLATE } from '@sentry/conventions/attributes';\n\n// We need to disable eslint no-explicit-any because any is required for the\n// react-router typings.\ntype Match = { path: string; url: string; params: Record<string, any>; isExact: boolean }; // eslint-disable-line @typescript-eslint/no-explicit-any\n\nexport type RouterHistory = {\n location?: Location;\n listen?(cb: (location: Location, action: Action) => void): void;\n} & Record<string, any>; // eslint-disable-line @typescript-eslint/no-explicit-any\n\nexport type RouteConfig = {\n [propName: string]: unknown;\n path?: string | string[];\n exact?: boolean;\n component?: ReactElement;\n routes?: RouteConfig[];\n};\n\nexport type MatchPath = (pathname: string, props: string | string[] | any, parent?: Match | null) => Match | null; // eslint-disable-line @typescript-eslint/no-explicit-any\n\ninterface ReactRouterOptions {\n history: RouterHistory;\n routes?: RouteConfig[];\n matchPath?: MatchPath;\n}\n\n/**\n * A browser tracing integration that uses React Router v4 to instrument navigations.\n * Expects `history` (and optionally `routes` and `matchPath`) to be passed as options.\n */\nexport function reactRouterV4BrowserTracingIntegration(\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, matchPath, instrumentPageLoad = true, instrumentNavigation = true } = options;\n\n return {\n ...integration,\n afterAllSetup(client) {\n integration.afterAllSetup(client);\n\n instrumentReactRouter(\n client,\n instrumentPageLoad,\n instrumentNavigation,\n history,\n 'reactrouter_v4',\n routes,\n matchPath,\n );\n },\n };\n}\n\n/**\n * A browser tracing integration that uses React Router v5 to instrument navigations.\n * Expects `history` (and optionally `routes` and `matchPath`) to be passed as options.\n */\nexport function reactRouterV5BrowserTracingIntegration(\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, matchPath, instrumentPageLoad = true, instrumentNavigation = true } = options;\n\n return {\n ...integration,\n afterAllSetup(client) {\n integration.afterAllSetup(client);\n\n instrumentReactRouter(\n client,\n instrumentPageLoad,\n instrumentNavigation,\n history,\n 'reactrouter_v5',\n routes,\n matchPath,\n );\n },\n };\n}\n\nfunction instrumentReactRouter(\n client: Client,\n instrumentPageLoad: boolean,\n instrumentNavigation: boolean,\n history: RouterHistory,\n instrumentationName: string,\n allRoutes: RouteConfig[] = [],\n matchPath?: MatchPath,\n): void {\n function getInitPathName(): string | undefined {\n if (history.location) {\n return history.location.pathname;\n }\n\n if (WINDOW.location) {\n return WINDOW.location.pathname;\n }\n\n return undefined;\n }\n\n /**\n * Normalizes a transaction name. Returns the new name as well as the\n * source of the transaction.\n *\n * @param pathname The initial pathname we normalize\n */\n function normalizeTransactionName(pathname: string): [string, TransactionSource] {\n if (allRoutes.length === 0 || !matchPath) {\n return [pathname, 'url'];\n }\n\n const branches = matchRoutes(allRoutes, pathname, matchPath);\n for (const branch of branches) {\n if (branch.match.isExact) {\n return [branch.match.path, 'route'];\n }\n }\n\n return [pathname, 'url'];\n }\n\n if (instrumentPageLoad) {\n const initPathName = getInitPathName();\n if (initPathName) {\n const [name, source] = normalizeTransactionName(initPathName);\n startBrowserTracingPageLoadSpan(client, {\n name,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: `auto.pageload.react.${instrumentationName}`,\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: source,\n ...(source === 'route' && { [URL_TEMPLATE]: name }),\n },\n });\n }\n }\n\n if (instrumentNavigation && history.listen) {\n history.listen((location, action) => {\n if (action && (action === 'PUSH' || action === 'POP')) {\n const [name, source] = normalizeTransactionName(location.pathname);\n startBrowserTracingNavigationSpan(client, {\n name,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: `auto.navigation.react.${instrumentationName}`,\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: source,\n ...(source === 'route' && { [URL_TEMPLATE]: name }),\n },\n });\n }\n });\n }\n}\n\n/**\n * Matches a set of routes to a pathname\n * Based on implementation from\n */\nfunction matchRoutes(\n routes: RouteConfig[],\n pathname: string,\n matchPath: MatchPath,\n branch: Array<{ route: RouteConfig; match: Match }> = [],\n): Array<{ route: RouteConfig; match: Match }> {\n routes.some(route => {\n const match = route.path\n ? matchPath(pathname, route)\n : branch.length\n ? // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n branch[branch.length - 1]!.match // use parent match\n : computeRootMatch(pathname); // use default \"root\" match\n\n if (match) {\n branch.push({ route, match });\n\n if (route.routes) {\n matchRoutes(route.routes, pathname, matchPath, branch);\n }\n }\n\n return !!match;\n });\n\n return branch;\n}\n\nfunction computeRootMatch(pathname: string): Match {\n return { path: '/', url: '/', params: {}, isExact: pathname === '/' };\n}\n\n/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access */\nexport function withSentryRouting<P extends Record<string, any>, R extends React.ComponentType<P>>(Route: R): R {\n const componentDisplayName = Route.displayName || Route.name;\n\n const WrappedRoute: React.FC<P> = (props: P) => {\n if (props?.computedMatch?.isExact) {\n const route = props.computedMatch.path;\n const activeRootSpan = getActiveRootSpan();\n\n getCurrentScope().setTransactionName(route);\n\n if (activeRootSpan) {\n activeRootSpan.updateName(route);\n activeRootSpan.setAttributes({\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'route',\n [URL_TEMPLATE]: route,\n });\n }\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 // https://github.com/DefinitelyTyped/DefinitelyTyped/blob/13dc4235c069e25fe7ee16e11f529d909f9f3ff8/types/react-router/index.d.ts#L154-L164\n return <Route {...props} />;\n };\n\n WrappedRoute.displayName = `sentryRoute(${componentDisplayName})`;\n hoistNonReactStatics(WrappedRoute, Route);\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 // https://github.com/DefinitelyTyped/DefinitelyTyped/blob/13dc4235c069e25fe7ee16e11f529d909f9f3ff8/types/react-router/index.d.ts#L154-L164\n return WrappedRoute;\n}\n/* eslint-enable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access */\n\nfunction getActiveRootSpan(): Span | undefined {\n const span = getActiveSpan();\n const rootSpan = span && getRootSpan(span);\n\n if (!rootSpan) {\n return undefined;\n }\n\n const op = spanToJSON(rootSpan).attributes[SEMANTIC_ATTRIBUTE_SENTRY_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":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reactrouterv3.js","sources":["../../src/reactrouterv3.ts"],"sourcesContent":["import {\n browserTracingIntegration,\n startBrowserTracingNavigationSpan,\n startBrowserTracingPageLoadSpan,\n WINDOW,\n} from '@sentry/browser';\nimport type { Integration, TransactionSource } from '@sentry/core/browser';\nimport {\n SEMANTIC_ATTRIBUTE_SENTRY_OP,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n} from '@sentry/core/browser';\nimport type { Location } from './types';\nimport { URL_TEMPLATE } from '@sentry/conventions/attributes';\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
|
|
1
|
+
{"version":3,"file":"reactrouterv3.js","sources":["../../src/reactrouterv3.ts"],"sourcesContent":["import {\n browserTracingIntegration,\n startBrowserTracingNavigationSpan,\n startBrowserTracingPageLoadSpan,\n WINDOW,\n} from '@sentry/browser';\nimport type { Integration, TransactionSource } from '@sentry/core/browser';\nimport {\n SEMANTIC_ATTRIBUTE_SENTRY_OP,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n} from '@sentry/core/browser';\nimport type { Location } from './types';\nimport { URL_TEMPLATE } from '@sentry/conventions/attributes';\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,\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 ...(source === 'route' && { [URL_TEMPLATE]: localName }),\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 ...(source === 'route' && { [URL_TEMPLATE]: localName }),\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.slice(index).reduce((acc, { path }) => {\n const pathSegment = acc === '/' || acc === '' ? path : `/${path}`;\n return `${acc}${pathSegment}`;\n }, '');\n}\n"],"names":[],"mappings":";;;;AA2CO,SAAS,uCACd,OAAA,EACa;AACb,EAAA,MAAM,cAAc,yBAAA,CAA0B;AAAA,IAC5C,GAAG,OAAA;AAAA,IACH,kBAAA,EAAoB,KAAA;AAAA,IACpB,oBAAA,EAAsB;AAAA,GACvB,CAAA;AAED,EAAA,MAAM,EAAE,SAAS,MAAA,EAAQ,KAAA,EAAO,qBAAqB,IAAA,EAAM,oBAAA,GAAuB,MAAK,GAAI,OAAA;AAE3F,EAAA,OAAO;AAAA,IACL,GAAG,WAAA;AAAA,IACH,cAAc,MAAA,EAAQ;AACpB,MAAA,WAAA,CAAY,cAAc,MAAM,CAAA;AAEhC,MAAA,IAAI,kBAAA,IAAsB,OAAO,QAAA,EAAU;AACzC,QAAA,wBAAA;AAAA,UACE,MAAA;AAAA,UACA,MAAA,CAAO,QAAA;AAAA,UACP,KAAA;AAAA,UACA,CAAC,SAAA,EAAmB,MAAA,GAAyC,KAAA,KAAU;AACrE,YAAA,+BAAA,CAAgC,MAAA,EAAQ;AAAA,cACtC,IAAA,EAAM,SAAA;AAAA,cACN,UAAA,EAAY;AAAA,gBACV,CAAC,4BAA4B,GAAG,UAAA;AAAA,gBAChC,CAAC,gCAAgC,GAAG,oCAAA;AAAA,gBACpC,CAAC,gCAAgC,GAAG,MAAA;AAAA,gBACpC,GAAI,MAAA,KAAW,OAAA,IAAW,EAAE,CAAC,YAAY,GAAG,SAAA;AAAU;AACxD,aACD,CAAA;AAAA,UACH;AAAA,SACF;AAAA,MACF;AAEA,MAAA,IAAI,oBAAA,IAAwB,QAAQ,MAAA,EAAQ;AAC1C,QAAA,OAAA,CAAQ,OAAO,CAAA,QAAA,KAAY;AACzB,UAAA,IAAI,QAAA,CAAS,MAAA,KAAW,MAAA,IAAU,QAAA,CAAS,WAAW,KAAA,EAAO;AAC3D,YAAA,wBAAA;AAAA,cACE,MAAA;AAAA,cACA,QAAA;AAAA,cACA,KAAA;AAAA,cACA,CAAC,SAAA,EAAmB,MAAA,GAA4B,KAAA,KAAU;AACxD,gBAAA,iCAAA,CAAkC,MAAA,EAAQ;AAAA,kBACxC,IAAA,EAAM,SAAA;AAAA,kBACN,UAAA,EAAY;AAAA,oBACV,CAAC,4BAA4B,GAAG,YAAA;AAAA,oBAChC,CAAC,gCAAgC,GAAG,sCAAA;AAAA,oBACpC,CAAC,gCAAgC,GAAG,MAAA;AAAA,oBACpC,GAAI,MAAA,KAAW,OAAA,IAAW,EAAE,CAAC,YAAY,GAAG,SAAA;AAAU;AACxD,iBACD,CAAA;AAAA,cACH;AAAA,aACF;AAAA,UACF;AAAA,QACF,CAAC,CAAA;AAAA,MACH;AAAA,IACF;AAAA,GACF;AACF;AAKA,SAAS,wBAAA,CACP,SAAA,EACA,QAAA,EACA,KAAA,EACA,QAAA,EACM;AACN,EAAA,IAAI,OAAO,QAAA,CAAS,QAAA;AACpB,EAAA,KAAA;AAAA,IACE;AAAA,MACE,QAAA;AAAA,MACA,MAAA,EAAQ;AAAA,KACV;AAAA,IACA,CAAC,KAAA,EAAO,iBAAA,EAAmB,WAAA,KAAgB;AACzC,MAAA,IAAI,KAAA,IAAS,CAAC,WAAA,EAAa;AACzB,QAAA,OAAO,SAAS,IAAI,CAAA;AAAA,MACtB;AAEA,MAAA,MAAM,SAAA,GAAY,wBAAA,CAAyB,WAAA,CAAY,MAAA,IAAU,EAAE,CAAA;AACnE,MAAA,IAAI,SAAA,CAAU,MAAA,KAAW,CAAA,IAAK,SAAA,KAAc,IAAA,EAAM;AAChD,QAAA,OAAO,SAAS,IAAI,CAAA;AAAA,MACtB;AAEA,MAAA,IAAA,GAAO,SAAA;AACP,MAAA,OAAO,QAAA,CAAS,MAAM,OAAO,CAAA;AAAA,IAC/B;AAAA,GACF;AACF;AAKA,SAAS,yBAAyB,MAAA,EAAyB;AACzD,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,IAAK,MAAA,CAAO,WAAW,CAAA,EAAG;AACjD,IAAA,OAAO,EAAA;AAAA,EACT;AAEA,EAAA,MAAM,eAAA,GAA2B,OAAO,MAAA,CAAO,CAAC,UAAiB,CAAC,CAAC,MAAM,IAAI,CAAA;AAE7E,EAAA,IAAI,KAAA,GAAQ,EAAA;AACZ,EAAA,KAAA,IAAS,IAAI,eAAA,CAAgB,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AAEpD,IAAA,MAAM,KAAA,GAAQ,gBAAgB,CAAC,CAAA;AAC/B,IAAA,IAAI,KAAA,CAAM,IAAA,EAAM,UAAA,CAAW,GAAG,CAAA,EAAG;AAC/B,MAAA,KAAA,GAAQ,CAAA;AACR,MAAA;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,eAAA,CAAgB,MAAM,KAAK,CAAA,CAAE,OAAO,CAAC,GAAA,EAAK,EAAE,IAAA,EAAK,KAAM;AAC5D,IAAA,MAAM,cAAc,GAAA,KAAQ,GAAA,IAAO,QAAQ,EAAA,GAAK,IAAA,GAAO,IAAI,IAAI,CAAA,CAAA;AAC/D,IAAA,OAAO,CAAA,EAAG,GAAG,CAAA,EAAG,WAAW,CAAA,CAAA;AAAA,EAC7B,GAAG,EAAE,CAAA;AACP;;;;"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { browserTracingIntegration, WINDOW, startBrowserTracingPageLoadSpan, startBrowserTracingNavigationSpan, getAbsoluteUrl } from '@sentry/browser';
|
|
2
|
+
import { filterCollectedUrl } from '@sentry/core';
|
|
2
3
|
import { SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_OP } from '@sentry/core/browser';
|
|
3
4
|
import { URL_TEMPLATE, URL_PATH_PARAMETER_KEY_BASE, PARAMS_KEY_BASE, URL_FULL, URL_PATH } from '@sentry/conventions/attributes';
|
|
4
5
|
|
|
@@ -110,7 +111,7 @@ function locationToSpanUrlAttributes(router, location) {
|
|
|
110
111
|
const absoluteUrl = locationToAbsoluteUrl(router, location);
|
|
111
112
|
return {
|
|
112
113
|
[URL_PATH]: location.pathname,
|
|
113
|
-
[URL_FULL]: absoluteUrl
|
|
114
|
+
[URL_FULL]: filterCollectedUrl(absoluteUrl)
|
|
114
115
|
};
|
|
115
116
|
}
|
|
116
117
|
function routeMatchToParamSpanAttributes(match) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tanstackrouter.js","sources":["../../src/tanstackrouter.ts"],"sourcesContent":["import {\n browserTracingIntegration as originalBrowserTracingIntegration,\n getAbsoluteUrl,\n startBrowserTracingNavigationSpan,\n startBrowserTracingPageLoadSpan,\n WINDOW,\n} from '@sentry/browser';\nimport type { Integration } from '@sentry/core/browser';\nimport {\n SEMANTIC_ATTRIBUTE_SENTRY_OP,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n} from '@sentry/core/browser';\nimport type { VendoredTanstackRouter, VendoredTanstackRouterRouteMatch } from './vendor/tanstackrouter-types';\nimport {\n PARAMS_KEY_BASE,\n URL_FULL,\n URL_PATH,\n URL_PATH_PARAMETER_KEY_BASE,\n URL_TEMPLATE,\n} from '@sentry/conventions/attributes';\n\ninterface TanstackRouterLocation {\n pathname: string;\n search: Record<string, unknown>;\n state?: unknown;\n}\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 resolveRouteMatch = (pathname: string, search: unknown): VendoredTanstackRouterRouteMatch | undefined => {\n const matchedRoutes = castRouterInstance.matchRoutes(pathname, search as {}, {\n preload: false,\n throwOnError: false,\n });\n const lastMatch = matchedRoutes[matchedRoutes.length - 1];\n // If we only match __root__, we ended up not matching any route at all, so\n // we fall back to the pathname.\n return lastMatch?.routeId !== '__root__' ? lastMatch : undefined;\n };\n\n const applyRouteMatch = (\n span: NonNullable<ReturnType<typeof startBrowserTracingPageLoadSpan>>,\n match: VendoredTanstackRouterRouteMatch | undefined,\n toLocation: TanstackRouterLocation,\n fallbackName: string,\n ): void => {\n span.updateName(match ? match.routeId : fallbackName);\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, match ? 'route' : 'url');\n span.setAttributes({\n ...(match && { [URL_TEMPLATE]: match.routeId }),\n ...locationToSpanUrlAttributes(castRouterInstance, toLocation),\n ...routeMatchToParamSpanAttributes(match),\n });\n };\n\n const initialWindowLocation = WINDOW.location;\n if (instrumentPageLoad && initialWindowLocation) {\n const routeMatch = resolveRouteMatch(\n initialWindowLocation.pathname,\n castRouterInstance.options.parseSearch(initialWindowLocation.search),\n );\n\n const pageloadSpan = startBrowserTracingPageLoadSpan(client, {\n name: routeMatch ? routeMatch.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]: routeMatch ? 'route' : 'url',\n ...(routeMatch && { [URL_TEMPLATE]: routeMatch.routeId }),\n ...routeMatchToParamSpanAttributes(routeMatch),\n },\n });\n\n // A redirect thrown during the initial pageload leaves the span named after the pre-redirect\n // route, so correct it to the resolved route once.\n const unsubscribePageloadResolved = castRouterInstance.subscribe('onResolved', onResolvedArgs => {\n unsubscribePageloadResolved();\n if (!pageloadSpan) {\n return;\n }\n const { toLocation } = onResolvedArgs;\n const resolvedMatch = resolveRouteMatch(toLocation.pathname, toLocation.search);\n applyRouteMatch(pageloadSpan, resolvedMatch, toLocation, toLocation.pathname);\n });\n }\n\n if (instrumentNavigation) {\n // Navigation is driven by `onBeforeLoad` (accurate start) + `onResolved` (final route), not\n // `onBeforeNavigate`, which TanStack stops firing after any loader redirect (TanStack/router#3920).\n // A redirect chain emits one `onBeforeLoad` per load but a single `onResolved`, so we start the\n // span on the first `onBeforeLoad`, rename it on later ones, and clear it on `onResolved`.\n let inFlightNavigationSpan: ReturnType<typeof startBrowserTracingNavigationSpan> | undefined;\n\n castRouterInstance.subscribe('onBeforeLoad', onBeforeLoadArgs => {\n const { toLocation, fromLocation } = onBeforeLoadArgs;\n // Skip the initial pageload (no fromLocation) and no-op reloads (same state).\n if (!fromLocation || toLocation.state === fromLocation.state) {\n return;\n }\n\n const routeMatch = resolveRouteMatch(toLocation.pathname, toLocation.search);\n const fallbackName = WINDOW.location?.pathname || toLocation.pathname;\n\n if (inFlightNavigationSpan) {\n // Redirect continuation within the same navigation: keep the span, update the target.\n applyRouteMatch(inFlightNavigationSpan, routeMatch, toLocation, fallbackName);\n return;\n }\n\n inFlightNavigationSpan = startBrowserTracingNavigationSpan(\n client,\n {\n name: routeMatch ? routeMatch.routeId : fallbackName,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.tanstack_router',\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: routeMatch ? 'route' : 'url',\n ...(routeMatch && { [URL_TEMPLATE]: routeMatch.routeId }),\n ...routeMatchToParamSpanAttributes(routeMatch),\n },\n },\n { url: locationToAbsoluteUrl(castRouterInstance, toLocation) },\n );\n });\n\n castRouterInstance.subscribe('onResolved', onResolvedArgs => {\n const span = inFlightNavigationSpan;\n inFlightNavigationSpan = undefined;\n if (!span) {\n return;\n }\n const { toLocation } = onResolvedArgs;\n const resolvedMatch = resolveRouteMatch(toLocation.pathname, toLocation.search);\n if (resolvedMatch) {\n applyRouteMatch(span, resolvedMatch, toLocation, WINDOW.location?.pathname || toLocation.pathname);\n }\n });\n }\n },\n };\n}\n\nfunction locationToAbsoluteUrl(router: VendoredTanstackRouter, location: TanstackRouterLocation): string {\n const search = router.options.stringifySearch?.(location.search) ?? '';\n const pathWithSearch = `${location.pathname}${search && search !== '?' ? search : ''}`;\n\n return getAbsoluteUrl(pathWithSearch);\n}\n\nfunction locationToSpanUrlAttributes(\n router: VendoredTanstackRouter,\n location: TanstackRouterLocation,\n): Record<string, string> {\n const absoluteUrl = locationToAbsoluteUrl(router, location);\n\n return {\n [URL_PATH]: location.pathname,\n [URL_FULL]: absoluteUrl,\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; // TODO(v11): remove attribute which does not adhere to Sentry's semantic convention\n paramAttributes[`${URL_PATH_PARAMETER_KEY_BASE}.${key}`] = value;\n paramAttributes[`${PARAMS_KEY_BASE}.${key}`] = value; // params.[key] is an alias\n });\n\n return paramAttributes;\n}\n"],"names":["originalBrowserTracingIntegration"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tanstackrouter.js","sources":["../../src/tanstackrouter.ts"],"sourcesContent":["import {\n browserTracingIntegration as originalBrowserTracingIntegration,\n getAbsoluteUrl,\n startBrowserTracingNavigationSpan,\n startBrowserTracingPageLoadSpan,\n WINDOW,\n} from '@sentry/browser';\nimport type { Integration } from '@sentry/core/browser';\nimport { filterCollectedUrl } from '@sentry/core';\nimport {\n SEMANTIC_ATTRIBUTE_SENTRY_OP,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n} from '@sentry/core/browser';\nimport type { VendoredTanstackRouter, VendoredTanstackRouterRouteMatch } from './vendor/tanstackrouter-types';\nimport {\n PARAMS_KEY_BASE,\n URL_FULL,\n URL_PATH,\n URL_PATH_PARAMETER_KEY_BASE,\n URL_TEMPLATE,\n} from '@sentry/conventions/attributes';\n\ninterface TanstackRouterLocation {\n pathname: string;\n search: Record<string, unknown>;\n state?: unknown;\n}\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 resolveRouteMatch = (pathname: string, search: unknown): VendoredTanstackRouterRouteMatch | undefined => {\n const matchedRoutes = castRouterInstance.matchRoutes(pathname, search as {}, {\n preload: false,\n throwOnError: false,\n });\n const lastMatch = matchedRoutes[matchedRoutes.length - 1];\n // If we only match __root__, we ended up not matching any route at all, so\n // we fall back to the pathname.\n return lastMatch?.routeId !== '__root__' ? lastMatch : undefined;\n };\n\n const applyRouteMatch = (\n span: NonNullable<ReturnType<typeof startBrowserTracingPageLoadSpan>>,\n match: VendoredTanstackRouterRouteMatch | undefined,\n toLocation: TanstackRouterLocation,\n fallbackName: string,\n ): void => {\n span.updateName(match ? match.routeId : fallbackName);\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, match ? 'route' : 'url');\n span.setAttributes({\n ...(match && { [URL_TEMPLATE]: match.routeId }),\n ...locationToSpanUrlAttributes(castRouterInstance, toLocation),\n ...routeMatchToParamSpanAttributes(match),\n });\n };\n\n const initialWindowLocation = WINDOW.location;\n if (instrumentPageLoad && initialWindowLocation) {\n const routeMatch = resolveRouteMatch(\n initialWindowLocation.pathname,\n castRouterInstance.options.parseSearch(initialWindowLocation.search),\n );\n\n const pageloadSpan = startBrowserTracingPageLoadSpan(client, {\n name: routeMatch ? routeMatch.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]: routeMatch ? 'route' : 'url',\n ...(routeMatch && { [URL_TEMPLATE]: routeMatch.routeId }),\n ...routeMatchToParamSpanAttributes(routeMatch),\n },\n });\n\n // A redirect thrown during the initial pageload leaves the span named after the pre-redirect\n // route, so correct it to the resolved route once.\n const unsubscribePageloadResolved = castRouterInstance.subscribe('onResolved', onResolvedArgs => {\n unsubscribePageloadResolved();\n if (!pageloadSpan) {\n return;\n }\n const { toLocation } = onResolvedArgs;\n const resolvedMatch = resolveRouteMatch(toLocation.pathname, toLocation.search);\n applyRouteMatch(pageloadSpan, resolvedMatch, toLocation, toLocation.pathname);\n });\n }\n\n if (instrumentNavigation) {\n // Navigation is driven by `onBeforeLoad` (accurate start) + `onResolved` (final route), not\n // `onBeforeNavigate`, which TanStack stops firing after any loader redirect (TanStack/router#3920).\n // A redirect chain emits one `onBeforeLoad` per load but a single `onResolved`, so we start the\n // span on the first `onBeforeLoad`, rename it on later ones, and clear it on `onResolved`.\n let inFlightNavigationSpan: ReturnType<typeof startBrowserTracingNavigationSpan> | undefined;\n\n castRouterInstance.subscribe('onBeforeLoad', onBeforeLoadArgs => {\n const { toLocation, fromLocation } = onBeforeLoadArgs;\n // Skip the initial pageload (no fromLocation) and no-op reloads (same state).\n if (!fromLocation || toLocation.state === fromLocation.state) {\n return;\n }\n\n const routeMatch = resolveRouteMatch(toLocation.pathname, toLocation.search);\n const fallbackName = WINDOW.location?.pathname || toLocation.pathname;\n\n if (inFlightNavigationSpan) {\n // Redirect continuation within the same navigation: keep the span, update the target.\n applyRouteMatch(inFlightNavigationSpan, routeMatch, toLocation, fallbackName);\n return;\n }\n\n inFlightNavigationSpan = startBrowserTracingNavigationSpan(\n client,\n {\n name: routeMatch ? routeMatch.routeId : fallbackName,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.tanstack_router',\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: routeMatch ? 'route' : 'url',\n ...(routeMatch && { [URL_TEMPLATE]: routeMatch.routeId }),\n ...routeMatchToParamSpanAttributes(routeMatch),\n },\n },\n { url: locationToAbsoluteUrl(castRouterInstance, toLocation) },\n );\n });\n\n castRouterInstance.subscribe('onResolved', onResolvedArgs => {\n const span = inFlightNavigationSpan;\n inFlightNavigationSpan = undefined;\n if (!span) {\n return;\n }\n const { toLocation } = onResolvedArgs;\n const resolvedMatch = resolveRouteMatch(toLocation.pathname, toLocation.search);\n if (resolvedMatch) {\n applyRouteMatch(span, resolvedMatch, toLocation, WINDOW.location?.pathname || toLocation.pathname);\n }\n });\n }\n },\n };\n}\n\nfunction locationToAbsoluteUrl(router: VendoredTanstackRouter, location: TanstackRouterLocation): string {\n const search = router.options.stringifySearch?.(location.search) ?? '';\n const pathWithSearch = `${location.pathname}${search && search !== '?' ? search : ''}`;\n\n return getAbsoluteUrl(pathWithSearch);\n}\n\nfunction locationToSpanUrlAttributes(\n router: VendoredTanstackRouter,\n location: TanstackRouterLocation,\n): Record<string, string> {\n const absoluteUrl = locationToAbsoluteUrl(router, location);\n\n return {\n [URL_PATH]: location.pathname,\n [URL_FULL]: filterCollectedUrl(absoluteUrl),\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; // TODO(v11): remove attribute which does not adhere to Sentry's semantic convention\n paramAttributes[`${URL_PATH_PARAMETER_KEY_BASE}.${key}`] = value;\n paramAttributes[`${PARAMS_KEY_BASE}.${key}`] = value; // params.[key] is an alias\n });\n\n return paramAttributes;\n}\n"],"names":["originalBrowserTracingIntegration"],"mappings":"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"}
|
package/build/types/error.d.ts
CHANGED
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
import { captureException } from '@sentry/browser';
|
|
2
2
|
import type { ErrorInfo } from 'react';
|
|
3
|
-
/**
|
|
4
|
-
* See if React major version is 17+ by parsing version string.
|
|
5
|
-
*/
|
|
6
|
-
export declare function isAtLeastReact17(reactVersion: string): boolean;
|
|
7
3
|
/**
|
|
8
4
|
* Recurse through `error.cause` chain to set cause on an error.
|
|
9
5
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG;IAAE,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAiB7E;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAEnC,KAAK,EAAE,GAAG,EACV,EAAE,cAAc,EAAE,EAAE,SAAS,EAC7B,IAAI,CAAC,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAC5C,MAAM,CAkBR;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAE/B,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,GAErE,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,KAAK,IAAI,CAW5C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errorboundary.d.ts","sourceRoot":"","sources":["../../src/errorboundary.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,eAAO,MAAM,iBAAiB,YAAY,CAAC;AAE3C,MAAM,MAAM,cAAc,GAAG,CAAC,SAAS,EAAE;IACvC,KAAK,EAAE,OAAO,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,IAAI,IAAI,CAAC;CACpB,KAAK,KAAK,CAAC,YAAY,CAAC;AAEzB,KAAK,aAAa,GAAG;IACnB,CAAC,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC;IACzD,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACjE,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,CAAC,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC;IACrD,4DAA4D;IAC5D,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC;;;OAGG;IACH,aAAa,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAC;IAChD;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,YAAY,GAAG,cAAc,GAAG,SAAS,CAAC;IAC3D;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,yDAAyD;IACzD,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC1F,oCAAoC;IACpC,OAAO,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IACnC;;;OAGG;IACH,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC1F;;;;;OAKG;IACH,SAAS,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IACtC,2GAA2G;IAC3G,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CAC9F,CAAC;AAEF,KAAK,kBAAkB,GACnB;IACE,cAAc,EAAE,IAAI,CAAC;IACrB,KAAK,EAAE,IAAI,CAAC;IACZ,OAAO,EAAE,IAAI,CAAC;CACf,GACD;IACE,cAAc,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAClD,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAQN;;;;;GAKG;AACH,cAAM,aAAc,SAAQ,KAAK,CAAC,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IAC1E,KAAK,EAAE,kBAAkB,CAAC;IAEjC,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAU;IAEpD,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,YAAY,CAAC,CAAa;
|
|
1
|
+
{"version":3,"file":"errorboundary.d.ts","sourceRoot":"","sources":["../../src/errorboundary.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,eAAO,MAAM,iBAAiB,YAAY,CAAC;AAE3C,MAAM,MAAM,cAAc,GAAG,CAAC,SAAS,EAAE;IACvC,KAAK,EAAE,OAAO,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,IAAI,IAAI,CAAC;CACpB,KAAK,KAAK,CAAC,YAAY,CAAC;AAEzB,KAAK,aAAa,GAAG;IACnB,CAAC,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC;IACzD,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACjE,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,CAAC,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC;IACrD,4DAA4D;IAC5D,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC;;;OAGG;IACH,aAAa,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAC;IAChD;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,YAAY,GAAG,cAAc,GAAG,SAAS,CAAC;IAC3D;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,yDAAyD;IACzD,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC1F,oCAAoC;IACpC,OAAO,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IACnC;;;OAGG;IACH,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC1F;;;;;OAKG;IACH,SAAS,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IACtC,2GAA2G;IAC3G,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CAC9F,CAAC;AAEF,KAAK,kBAAkB,GACnB;IACE,cAAc,EAAE,IAAI,CAAC;IACrB,KAAK,EAAE,IAAI,CAAC;IACZ,OAAO,EAAE,IAAI,CAAC;CACf,GACD;IACE,cAAc,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAClD,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAQN;;;;;GAKG;AACH,cAAM,aAAc,SAAQ,KAAK,CAAC,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IAC1E,KAAK,EAAE,kBAAkB,CAAC;IAEjC,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAU;IAEpD,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,YAAY,CAAC,CAAa;IAElC,YAAmB,KAAK,EAAE,kBAAkB,EAe3C;IAEM,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,GAAG,IAAI,CA2BzE;IAEM,iBAAiB,IAAI,IAAI,CAK/B;IAEM,oBAAoB,IAAI,IAAI,CAmBlC;IAEM,kBAAkB,IAAI,IAAI,CAUhC;IAEM,MAAM,IAAI,KAAK,CAAC,SAAS,CA+B/B;CACF;AAGD,iBAAS,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACtD,gBAAgB,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EACxC,oBAAoB,EAAE,kBAAkB,GACvC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAeb;AAED,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hoist-non-react-statics.d.ts","sourceRoot":"","sources":["../../src/hoist-non-react-statics.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"hoist-non-react-statics.d.ts","sourceRoot":"","sources":["../../src/hoist-non-react-statics.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAoFpC;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAElC,CAAC,SAAS,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,EAElC,CAAC,SAAS,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,EAClC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EACzD,eAAe,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,CA4C5D"}
|
|
@@ -45,7 +45,6 @@ declare function withProfiler<P extends Record<string, any>>(WrappedComponent: R
|
|
|
45
45
|
*
|
|
46
46
|
* `useProfiler` is a React hook that profiles a React component.
|
|
47
47
|
*
|
|
48
|
-
* Requires React 16.8 or above.
|
|
49
48
|
* @param name displayName of component being profiled
|
|
50
49
|
*/
|
|
51
50
|
declare function useProfiler(name: string, options?: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profiler.d.ts","sourceRoot":"","sources":["../../src/profiler.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"profiler.d.ts","sourceRoot":"","sources":["../../src/profiler.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAIzC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,eAAO,MAAM,iBAAiB,YAAY,CAAC;AAE3C,MAAM,MAAM,aAAa,GAAG;IAE1B,IAAI,EAAE,MAAM,CAAC;IAGb,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAE3B,WAAW,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;CACzC,CAAC;AAEF;;;GAGG;AACH,cAAM,QAAS,SAAQ,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC;IACnD;;;OAGG;IACH,SAAS,CAAC,UAAU,EAAE,IAAI,GAAG,SAAS,CAAC;IACvC;;OAEG;IACH,SAAS,CAAC,WAAW,EAAE,IAAI,GAAG,SAAS,CAAC;IAExC,YAAmB,KAAK,EAAE,aAAa,EAkBtC;IAGM,iBAAiB,IAAI,IAAI,CAI/B;IAEM,qBAAqB,CAAC,EAAE,WAAW,EAAE,cAAqB,EAAE,EAAE,aAAa,GAAG,OAAO,CA4B3F;IAEM,kBAAkB,IAAI,IAAI,CAKhC;IAIM,oBAAoB,IAAI,IAAI,CAwBlC;IAEM,MAAM,IAAI,KAAK,CAAC,SAAS,CAE/B;CACF;AAWD;;;;;;;GAOG;AAEH,iBAAS,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACjD,gBAAgB,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAExC,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,MAAM,aAAa,EAAE,aAAa,GAAG,UAAU,CAAC,CAAC,GAC/F,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAgBb;AAED;;;;;GAKG;AACH,iBAAS,WAAW,CAClB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAGrD,GACA,IAAI,CAgDN;AAED,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../../src/reactrouter-compat-utils/instrumentation.tsx"],"names":[],"mappings":"AAIA,OAAO,EACL,yBAAyB,EAI1B,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAU,WAAW,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAW9D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EACV,MAAM,EACN,sBAAsB,EACtB,oBAAoB,EACpB,wBAAwB,EACxB,QAAQ,EACR,WAAW,EAEX,WAAW,EACX,MAAM,EACN,WAAW,EACX,SAAS,EACT,WAAW,EACX,iBAAiB,EACjB,SAAS,EACV,MAAM,UAAU,CAAC;AAsClB,eAAO,MAAM,SAAS,kBAAyB,CAAC;AA8BhD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAE7D;AAUD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EACN;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,GACjG,SAAS,EACb,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,OAAO,GACpB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,OAAO,CAAA;CAAE,CAkC1C;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,wBAAwB,EAAE,wBAAwB,CAAC;IACnD,WAAW,EAAE,WAAW,CAAC;IACzB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;OAKG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;IAEnC;;;;;;;;;;OAUG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;;;;;;;;;;;;;;OAgBG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,KAAK,mBAAmB,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC;AAE1C,wBAAgB,yBAAyB,CAAC,cAAc,EAAE,WAAW,EAAE,EAAE,WAAW,EAAE,WAAW,GAAG,IAAI,CAgBvG;AAiDD;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,cAAc,EAAE,WAAW,EAAE,EAC7B,WAAW,CAAC,EAAE,WAAW,EACzB,eAAe,GAAE,QAAQ,GAAG,IAAW,EACvC,YAAY,CAAC,EAAE,IAAI,GAClB,IAAI,CAuDN;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,cAAc,EAAE,IAAI,EACpB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,WAAW,EAAE,EACxB,WAAW,qBAAQ,EACnB,WAAW,EAAE,WAAW,GACvB,IAAI,
|
|
1
|
+
{"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../../src/reactrouter-compat-utils/instrumentation.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/reactrouter-compat-utils/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGpE,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/reactrouter-compat-utils/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGpE,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAU/E,UAAU,iBAAiB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC;CACxB;AAKD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,IAAI,GAAG,SAAS,GAAG,MAAM,CASnG;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAK1D;AAED,kGAAkG;AAClG,wBAAgB,oBAAoB,IAAI,iBAAiB,GAAG,IAAI,CAI/D;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,WAAW,EAAE,aAAa,GAAE,OAAe,GAAG,IAAI,CAGpG;AAmBD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,mEAAmE;AACnE,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,OAAO,CAE9F;AAED,uEAAuE;AACvE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAE7D;AAsBD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG1D;AAID;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,WAAW,EAAE,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,CA+BlG;AAqDD;;GAEG;AACH,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAYlG;AASD;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,WAAW,EAAE,EACrB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,UAAU,EAAE,EACtB,QAAQ,GAAE,MAAW,GACpB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAsD7B;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,WAAW,EAAE,EACrB,SAAS,EAAE,WAAW,EAAE,EACxB,QAAQ,EAAE,UAAU,EAAE,EACtB,QAAQ,GAAE,MAAW,EACrB,iBAAiB,CAAC,EAAE,MAAM,EAAE,EAC5B,wBAAwB,CAAC,EAAE,OAAO,GACjC,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAgC7B;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,GAAG,SAAS,CAYpD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reactrouter.d.ts","sourceRoot":"","sources":["../../src/reactrouter.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EAI1B,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAU,WAAW,EAA2B,MAAM,cAAc,CAAC;AAUjF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAKhD,KAAK,KAAK,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC;AAE1F,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;CACjE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAExB,MAAM,MAAM,WAAW,GAAG;IACxB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,GAAG,EAAE,MAAM,CAAC,EAAE,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG,IAAI,CAAC;AAElH,UAAU,kBAAkB;IAC1B,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,sCAAsC,CACpD,OAAO,EAAE,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC,CAAC,CAAC,GAAG,kBAAkB,GAC5E,WAAW,CAyBb;AAED;;;GAGG;AACH,wBAAgB,sCAAsC,CACpD,OAAO,EAAE,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC,CAAC,CAAC,GAAG,kBAAkB,GAC5E,WAAW,CAyBb;AAmHD,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,SAAS,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"reactrouter.d.ts","sourceRoot":"","sources":["../../src/reactrouter.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EAI1B,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAU,WAAW,EAA2B,MAAM,cAAc,CAAC;AAUjF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAKhD,KAAK,KAAK,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC;AAE1F,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;CACjE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAExB,MAAM,MAAM,WAAW,GAAG;IACxB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,GAAG,EAAE,MAAM,CAAC,EAAE,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG,IAAI,CAAC;AAElH,UAAU,kBAAkB;IAC1B,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,sCAAsC,CACpD,OAAO,EAAE,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC,CAAC,CAAC,GAAG,kBAAkB,GAC5E,WAAW,CAyBb;AAED;;;GAGG;AACH,wBAAgB,sCAAsC,CACpD,OAAO,EAAE,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC,CAAC,CAAC,GAAG,kBAAkB,GAC5E,WAAW,CAyBb;AAmHD,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,SAAS,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CA+B9G"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tanstackrouter.d.ts","sourceRoot":"","sources":["../../src/tanstackrouter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,IAAI,iCAAiC,EAK/D,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"tanstackrouter.d.ts","sourceRoot":"","sources":["../../src/tanstackrouter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,IAAI,iCAAiC,EAK/D,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAsBxD;;;;;;;GAOG;AACH,wBAAgB,uCAAuC,CAErD,MAAM,EAAE,GAAG,EAAE,iGAAiG;AAC9G,OAAO,GAAE,UAAU,CAAC,OAAO,iCAAiC,CAAC,CAAC,CAAC,CAAM,GACpE,WAAW,CA+Hb"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sentry/react",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "11.0.0-alpha.1",
|
|
4
4
|
"description": "Official Sentry SDK for React.js",
|
|
5
5
|
"repository": "git://github.com/getsentry/sentry-javascript.git",
|
|
6
6
|
"homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/react",
|
|
7
7
|
"author": "Sentry",
|
|
8
8
|
"license": "MIT",
|
|
9
9
|
"engines": {
|
|
10
|
-
"node": ">=
|
|
10
|
+
"node": ">=20.19.0 <22.0.0 || >=22.12.0 <23.0.0 || >=23.2.0"
|
|
11
11
|
},
|
|
12
12
|
"files": [
|
|
13
13
|
"/build"
|
|
@@ -32,23 +32,16 @@
|
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
},
|
|
35
|
-
"typesVersions": {
|
|
36
|
-
"<5.0": {
|
|
37
|
-
"build/types/index.d.ts": [
|
|
38
|
-
"build/types-ts3.8/index.d.ts"
|
|
39
|
-
]
|
|
40
|
-
}
|
|
41
|
-
},
|
|
42
35
|
"publishConfig": {
|
|
43
36
|
"access": "public"
|
|
44
37
|
},
|
|
45
38
|
"dependencies": {
|
|
46
|
-
"@sentry/browser": "
|
|
47
|
-
"@sentry/core": "
|
|
48
|
-
"@sentry/conventions": "^0.
|
|
39
|
+
"@sentry/browser": "11.0.0-alpha.1",
|
|
40
|
+
"@sentry/core": "11.0.0-alpha.1",
|
|
41
|
+
"@sentry/conventions": "^0.19.0"
|
|
49
42
|
},
|
|
50
43
|
"peerDependencies": {
|
|
51
|
-
"react": "
|
|
44
|
+
"react": "17.x || 18.x || 19.x"
|
|
52
45
|
},
|
|
53
46
|
"devDependencies": {
|
|
54
47
|
"@testing-library/react": "^15.0.5",
|
|
@@ -59,8 +52,6 @@
|
|
|
59
52
|
"@types/react": "17.0.3",
|
|
60
53
|
"@types/react-router-4": "npm:@types/react-router@4.0.25",
|
|
61
54
|
"@types/react-router-5": "npm:@types/react-router@5.1.20",
|
|
62
|
-
"eslint-plugin-react": "^7.20.5",
|
|
63
|
-
"eslint-plugin-react-hooks": "^4.6.0",
|
|
64
55
|
"history-4": "npm:history@4.6.0",
|
|
65
56
|
"history-5": "npm:history@4.9.0",
|
|
66
57
|
"react": "^18.3.1",
|
|
@@ -75,17 +66,15 @@
|
|
|
75
66
|
"build": "run-p build:transpile build:types",
|
|
76
67
|
"build:dev": "yarn build",
|
|
77
68
|
"build:transpile": "rollup -c rollup.npm.config.mjs",
|
|
78
|
-
"build:types": "
|
|
79
|
-
"build:types:core": "tsc -p tsconfig.types.json",
|
|
80
|
-
"build:types:downlevel": "yarn downlevel-dts build/types build/types-ts3.8 --to ts3.8",
|
|
69
|
+
"build:types": "tsc -p tsconfig.types.json",
|
|
81
70
|
"build:watch": "run-p build:transpile:watch",
|
|
82
71
|
"build:dev:watch": "yarn build:watch",
|
|
83
72
|
"build:transpile:watch": "rollup -c rollup.npm.config.mjs --watch",
|
|
84
73
|
"build:tarball": "npm pack",
|
|
85
74
|
"circularDepCheck": "madge --circular src/index.ts",
|
|
86
75
|
"clean": "rimraf build coverage sentry-react-*.tgz",
|
|
87
|
-
"lint:fix": "
|
|
88
|
-
"lint": "
|
|
76
|
+
"lint:fix": "oxlint . --fix --type-aware",
|
|
77
|
+
"lint": "oxlint . --type-aware",
|
|
89
78
|
"lint:es-compatibility": "es-check es2020 ./build/cjs/*.js && es-check es2020 ./build/esm/*.js --module",
|
|
90
79
|
"test": "vitest run",
|
|
91
80
|
"test:watch": "vitest --watch",
|
package/build/cjs/constants.js
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
|
|
3
|
-
const REACT_RENDER_OP = "ui.react.render";
|
|
4
|
-
const REACT_UPDATE_OP = "ui.react.update";
|
|
5
|
-
const REACT_MOUNT_OP = "ui.react.mount";
|
|
6
|
-
|
|
7
|
-
exports.REACT_MOUNT_OP = REACT_MOUNT_OP;
|
|
8
|
-
exports.REACT_RENDER_OP = REACT_RENDER_OP;
|
|
9
|
-
exports.REACT_UPDATE_OP = REACT_UPDATE_OP;
|
|
10
|
-
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sources":["../../src/constants.ts"],"sourcesContent":["export const REACT_RENDER_OP = 'ui.react.render';\n\nexport const REACT_UPDATE_OP = 'ui.react.update';\n\nexport const REACT_MOUNT_OP = 'ui.react.mount';\n"],"names":[],"mappings":";;AAAO,MAAM,eAAA,GAAkB;AAExB,MAAM,eAAA,GAAkB;AAExB,MAAM,cAAA,GAAiB;;;;;;"}
|
package/build/esm/constants.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sources":["../../src/constants.ts"],"sourcesContent":["export const REACT_RENDER_OP = 'ui.react.render';\n\nexport const REACT_UPDATE_OP = 'ui.react.update';\n\nexport const REACT_MOUNT_OP = 'ui.react.mount';\n"],"names":[],"mappings":"AAAO,MAAM,eAAA,GAAkB;AAExB,MAAM,eAAA,GAAkB;AAExB,MAAM,cAAA,GAAiB;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,oBAAoB,CAAC;AAEjD,eAAO,MAAM,eAAe,oBAAoB,CAAC;AAEjD,eAAO,MAAM,cAAc,mBAAmB,CAAC"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.
|
|
3
|
-
*
|
|
4
|
-
* ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.
|
|
5
|
-
*/
|
|
6
|
-
export declare const DEBUG_BUILD: boolean;
|
|
7
|
-
//# sourceMappingURL=debug-build.d.ts.map
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { captureException } from '@sentry/browser';
|
|
2
|
-
import { ErrorInfo } from 'react';
|
|
3
|
-
/**
|
|
4
|
-
* See if React major version is 17+ by parsing version string.
|
|
5
|
-
*/
|
|
6
|
-
export declare function isAtLeastReact17(reactVersion: string): boolean;
|
|
7
|
-
/**
|
|
8
|
-
* Recurse through `error.cause` chain to set cause on an error.
|
|
9
|
-
*/
|
|
10
|
-
export declare function setCause(error: Error & {
|
|
11
|
-
cause?: Error;
|
|
12
|
-
}, cause: Error): void;
|
|
13
|
-
/**
|
|
14
|
-
* Captures an error that was thrown by a React ErrorBoundary or React root.
|
|
15
|
-
*
|
|
16
|
-
* @param error The error to capture.
|
|
17
|
-
* @param errorInfo The errorInfo provided by React.
|
|
18
|
-
* @param hint Optional additional data to attach to the Sentry event.
|
|
19
|
-
* @returns the id of the captured Sentry event.
|
|
20
|
-
*/
|
|
21
|
-
export declare function captureReactException(error: any, { componentStack }: ErrorInfo, hint?: Parameters<typeof captureException>[1]): string;
|
|
22
|
-
/**
|
|
23
|
-
* Creates an error handler that can be used with the `onCaughtError`, `onUncaughtError`,
|
|
24
|
-
* and `onRecoverableError` options in `createRoot` and `hydrateRoot` React DOM methods.
|
|
25
|
-
*
|
|
26
|
-
* @param callback An optional callback that will be called after the error is captured.
|
|
27
|
-
* Use this to add custom handling for errors.
|
|
28
|
-
*
|
|
29
|
-
* @example
|
|
30
|
-
*
|
|
31
|
-
* ```JavaScript
|
|
32
|
-
* const root = createRoot(container, {
|
|
33
|
-
* onCaughtError: Sentry.reactErrorHandler(),
|
|
34
|
-
* onUncaughtError: Sentry.reactErrorHandler((error, errorInfo) => {
|
|
35
|
-
* console.warn('Caught error', error, errorInfo.componentStack);
|
|
36
|
-
* });
|
|
37
|
-
* });
|
|
38
|
-
* ```
|
|
39
|
-
*/
|
|
40
|
-
export declare function reactErrorHandler(callback?: (error: any, errorInfo: ErrorInfo, eventId: string) => void): (error: any, errorInfo: ErrorInfo) => void;
|
|
41
|
-
//# sourceMappingURL=error.d.ts.map
|