diff --git a/docs/migration/v8-to-v9.md b/docs/migration/v8-to-v9.md index 15d51fde355c..9df7a734def4 100644 --- a/docs/migration/v8-to-v9.md +++ b/docs/migration/v8-to-v9.md @@ -97,6 +97,10 @@ It will be removed in a future major version. - The `wrapUseRoutes` method has been removed. Use `wrapUseRoutesV6` or `wrapUseRoutesV7` instead depending on what version of react router you are using. - The `wrapCreateBrowserRouter` method has been removed. Use `wrapCreateBrowserRouterV6` or `wrapCreateBrowserRouterV7` depending on what version of react router you are using. +### `@sentry/core` + +- The `getNumberOfUrlSegments` method has been removed. There are no replacements. + ## 5. Build Changes Previously the CJS versions of the SDK code (wrongfully) contained compatibility statements for default exports in ESM: diff --git a/packages/core/src/utils-hoist/index.ts b/packages/core/src/utils-hoist/index.ts index 28a981be7bb4..6882323782c4 100644 --- a/packages/core/src/utils-hoist/index.ts +++ b/packages/core/src/utils-hoist/index.ts @@ -162,8 +162,7 @@ export { parseBaggageHeader, } from './baggage'; -// eslint-disable-next-line deprecation/deprecation -export { getNumberOfUrlSegments, getSanitizedUrlString, parseUrl, stripUrlQueryAndFragment } from './url'; +export { getSanitizedUrlString, parseUrl, stripUrlQueryAndFragment } from './url'; // eslint-disable-next-line deprecation/deprecation export { makeFifoCache } from './cache'; export { eventFromMessage, eventFromUnknownInput, exceptionFromError, parseStackFrames } from './eventbuilder'; diff --git a/packages/core/src/utils-hoist/url.ts b/packages/core/src/utils-hoist/url.ts index 44dc669da93a..7863e208f2cc 100644 --- a/packages/core/src/utils-hoist/url.ts +++ b/packages/core/src/utils-hoist/url.ts @@ -48,17 +48,6 @@ export function stripUrlQueryAndFragment(urlPath: string): string { return (urlPath.split(/[?#]/, 1) as [string, ...string[]])[0]; } -/** - * Returns number of URL segments of a passed string URL. - * - * @deprecated This function will be removed in the next major version. - */ -// TODO(v9): Hoist this function into the places where we use it. (as it stands only react router v6 instrumentation) -export function getNumberOfUrlSegments(url: string): number { - // split at '/' or at '\/' to split regex urls correctly - return url.split(/\\?\//).filter(s => s.length > 0 && s !== ',').length; -} - /** * Takes a URL object and returns a sanitized string which is safe to use as span name * see: https://develop.sentry.dev/sdk/data-handling/#structuring-data diff --git a/packages/core/test/utils-hoist/url.test.ts b/packages/core/test/utils-hoist/url.test.ts index cd793e1d3d0c..cd066201945d 100644 --- a/packages/core/test/utils-hoist/url.test.ts +++ b/packages/core/test/utils-hoist/url.test.ts @@ -1,9 +1,4 @@ -import { - getNumberOfUrlSegments, - getSanitizedUrlString, - parseUrl, - stripUrlQueryAndFragment, -} from '../../src/utils-hoist/url'; +import { getSanitizedUrlString, parseUrl, stripUrlQueryAndFragment } from '../../src/utils-hoist/url'; describe('stripQueryStringAndFragment', () => { const urlString = 'http://dogs.are.great:1231/yay/'; @@ -26,18 +21,6 @@ describe('stripQueryStringAndFragment', () => { }); }); -describe('getNumberOfUrlSegments', () => { - test.each([ - ['regular path', '/projects/123/views/234', 4], - ['single param parameterized path', '/users/:id/details', 3], - ['multi param parameterized path', '/stores/:storeId/products/:productId', 4], - ['regex path', String(/\/api\/post[0-9]/), 2], - ])('%s', (_: string, input, output) => { - // eslint-disable-next-line deprecation/deprecation - expect(getNumberOfUrlSegments(input)).toEqual(output); - }); -}); - describe('getSanitizedUrlString', () => { it.each([ ['regular url', 'https://somedomain.com', 'https://somedomain.com'], diff --git a/packages/react/src/reactrouterv6-compat-utils.tsx b/packages/react/src/reactrouterv6-compat-utils.tsx index c17ea1bb190f..08f20354f870 100644 --- a/packages/react/src/reactrouterv6-compat-utils.tsx +++ b/packages/react/src/reactrouterv6-compat-utils.tsx @@ -16,7 +16,6 @@ import { getActiveSpan, getClient, getCurrentScope, - getNumberOfUrlSegments, getRootSpan, logger, spanToJSON, @@ -436,8 +435,6 @@ function getNormalizedName( // If the route defined on the element is something like // Product} /> // We should check against the branch.pathname for the number of / separators - // TODO(v9): Put the implementation of `getNumberOfUrlSegments` in this file - // eslint-disable-next-line deprecation/deprecation getNumberOfUrlSegments(pathBuilder) !== getNumberOfUrlSegments(branch.pathname) && // We should not count wildcard operators in the url segments calculation !pathEndsWithWildcard(pathBuilder) @@ -572,3 +569,11 @@ function getActiveRootSpan(): Span | undefined { // Only use this root span if it is a pageload or navigation span return op === 'navigation' || op === 'pageload' ? rootSpan : undefined; } + +/** + * Returns number of URL segments of a passed string URL. + */ +export function getNumberOfUrlSegments(url: string): number { + // split at '/' or at '\/' to split regex urls correctly + return url.split(/\\?\//).filter(s => s.length > 0 && s !== ',').length; +} diff --git a/packages/react/test/reactrouterv6-compat-utils.test.tsx b/packages/react/test/reactrouterv6-compat-utils.test.tsx new file mode 100644 index 000000000000..2bbe1ec7e52c --- /dev/null +++ b/packages/react/test/reactrouterv6-compat-utils.test.tsx @@ -0,0 +1,12 @@ +import { getNumberOfUrlSegments } from '../src/reactrouterv6-compat-utils'; + +describe('getNumberOfUrlSegments', () => { + test.each([ + ['regular path', '/projects/123/views/234', 4], + ['single param parameterized path', '/users/:id/details', 3], + ['multi param parameterized path', '/stores/:storeId/products/:productId', 4], + ['regex path', String(/\/api\/post[0-9]/), 2], + ])('%s', (_: string, input, output) => { + expect(getNumberOfUrlSegments(input)).toEqual(output); + }); +}); diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index 842f8475905d..d227c9af5008 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -77,7 +77,6 @@ import { getFunctionName as getFunctionName_imported, getGlobalSingleton as getGlobalSingleton_imported, getLocationHref as getLocationHref_imported, - getNumberOfUrlSegments as getNumberOfUrlSegments_imported, getOriginalFunction as getOriginalFunction_imported, getSDKSource as getSDKSource_imported, getSanitizedUrlString as getSanitizedUrlString_imported, @@ -644,10 +643,6 @@ export const addRequestDataToEvent = addRequestDataToEvent_imported; // eslint-disable-next-line deprecation/deprecation export const BAGGAGE_HEADER_NAME = BAGGAGE_HEADER_NAME_imported; -/** @deprecated Import from `@sentry/core` instead. */ -// eslint-disable-next-line deprecation/deprecation -export const getNumberOfUrlSegments = getNumberOfUrlSegments_imported; - /** @deprecated Import from `@sentry/core` instead. */ export const getSanitizedUrlString = getSanitizedUrlString_imported;