Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(react)!: Remove deprecated getNumberOfUrlSegments method #14744

Merged
merged 1 commit into from
Dec 17, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions docs/migration/v8-to-v9.md
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
3 changes: 1 addition & 2 deletions packages/core/src/utils-hoist/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down
11 changes: 0 additions & 11 deletions packages/core/src/utils-hoist/url.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
19 changes: 1 addition & 18 deletions packages/core/test/utils-hoist/url.test.ts
Original file line number Diff line number Diff line change
@@ -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/';
Expand All @@ -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'],
Expand Down
11 changes: 8 additions & 3 deletions packages/react/src/reactrouterv6-compat-utils.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ import {
getActiveSpan,
getClient,
getCurrentScope,
getNumberOfUrlSegments,
getRootSpan,
logger,
spanToJSON,
Expand Down Expand Up @@ -436,8 +435,6 @@ function getNormalizedName(
// If the route defined on the element is something like
// <Route path="/stores/:storeId/products/:productId" element={<div>Product</div>} />
// 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)
Expand Down Expand Up @@ -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;
}
12 changes: 12 additions & 0 deletions packages/react/test/reactrouterv6-compat-utils.test.tsx
Original file line number Diff line number Diff line change
@@ -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);
});
});
5 changes: 0 additions & 5 deletions packages/utils/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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;

Expand Down
Loading