Skip to content

Commit a2f0bac

Browse files
authored
feat(browser): Deprecate BrowserTracing in favor of browserTracingIntegration (#10304)
Step by step...
1 parent 3b4650c commit a2f0bac

File tree

28 files changed

+162
-45
lines changed

28 files changed

+162
-45
lines changed

MIGRATION.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ The following list shows how integrations should be migrated:
4646

4747
| Old | New | Packages |
4848
| ------------------------- | -------------------------------- | ------------------------------------------------------------------------------------------------------- |
49+
| `new BrowserTracing()` | `browserTracingIntegration()` | `@sentry/browser` |
4950
| `new InboundFilters()` | `inboundFiltersIntegration()` | `@sentry/core`, `@sentry/browser`, `@sentry/node`, `@sentry/deno`, `@sentry/bun`, `@sentry/vercel-edge` |
5051
| `new FunctionToString()` | `functionToStringIntegration()` | `@sentry/core`, `@sentry/browser`, `@sentry/node`, `@sentry/deno`, `@sentry/bun`, `@sentry/vercel-edge` |
5152
| `new LinkedErrors()` | `linkedErrorsIntegration()` | `@sentry/core`, `@sentry/browser`, `@sentry/node`, `@sentry/deno`, `@sentry/bun`, `@sentry/vercel-edge` |

packages/astro/src/client/sdk.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import type { BrowserOptions } from '@sentry/browser';
22
import {
3-
BrowserTracing,
3+
browserTracingIntegration,
44
getDefaultIntegrations as getBrowserDefaultIntegrations,
55
init as initBrowserSdk,
66
setTag,
@@ -34,7 +34,7 @@ function getDefaultIntegrations(options: BrowserOptions): Integration[] | undefi
3434
// in which case everything inside will get treeshaken away
3535
if (typeof __SENTRY_TRACING__ === 'undefined' || __SENTRY_TRACING__) {
3636
if (hasTracingEnabled(options)) {
37-
return [...getBrowserDefaultIntegrations(options), new BrowserTracing()];
37+
return [...getBrowserDefaultIntegrations(options), browserTracingIntegration()];
3838
}
3939
}
4040

packages/astro/test/client/sdk.test.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import type { BrowserClient } from '@sentry/browser';
1+
import type { BrowserClient, BrowserTracing } from '@sentry/browser';
22
import { getCurrentScope } from '@sentry/browser';
33
import * as SentryBrowser from '@sentry/browser';
4-
import { BrowserTracing, SDK_VERSION, WINDOW, getClient } from '@sentry/browser';
4+
import { SDK_VERSION, WINDOW, browserTracingIntegration, getClient } from '@sentry/browser';
55
import { vi } from 'vitest';
66

77
import { init } from '../../../astro/src/client/sdk';
@@ -103,12 +103,13 @@ describe('Sentry client SDK', () => {
103103
it('Overrides the automatically default BrowserTracing instance with a a user-provided instance', () => {
104104
init({
105105
dsn: 'https://[email protected]/1337',
106-
integrations: [new BrowserTracing({ finalTimeout: 10, startTransactionOnLocationChange: false })],
106+
integrations: [browserTracingIntegration({ finalTimeout: 10, startTransactionOnLocationChange: false })],
107107
enableTracing: true,
108108
});
109109

110110
const integrationsToInit = browserInit.mock.calls[0][0]?.defaultIntegrations;
111111

112+
// eslint-disable-next-line deprecation/deprecation
112113
const browserTracing = getClient<BrowserClient>()?.getIntegrationByName('BrowserTracing') as BrowserTracing;
113114
const options = browserTracing.options;
114115

packages/browser/src/index.bundle.feedback.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,27 @@
11
// This is exported so the loader does not fail when switching off Replay/Tracing
22
import { Feedback, feedbackIntegration } from '@sentry-internal/feedback';
3-
import { BrowserTracing, Replay, addTracingExtensions, replayIntegration } from '@sentry-internal/integration-shims';
3+
import {
4+
BrowserTracing,
5+
Replay,
6+
addTracingExtensions,
7+
browserTracingIntegration,
8+
replayIntegration,
9+
} from '@sentry-internal/integration-shims';
410

511
import * as Sentry from './index.bundle.base';
612

713
// TODO (v8): Remove this as it was only needed for backwards compatibility
814
// eslint-disable-next-line deprecation/deprecation
915
Sentry.Integrations.Replay = Replay;
1016

17+
// eslint-disable-next-line deprecation/deprecation
1118
Sentry.Integrations.BrowserTracing = BrowserTracing;
1219

1320
export * from './index.bundle.base';
1421
export {
22+
// eslint-disable-next-line deprecation/deprecation
1523
BrowserTracing,
24+
browserTracingIntegration,
1625
addTracingExtensions,
1726
// eslint-disable-next-line deprecation/deprecation
1827
Replay,

packages/browser/src/index.bundle.replay.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {
33
BrowserTracing,
44
Feedback,
55
addTracingExtensions,
6+
browserTracingIntegration,
67
feedbackIntegration,
78
} from '@sentry-internal/integration-shims';
89
import { Replay, replayIntegration } from '@sentry/replay';
@@ -13,11 +14,14 @@ import * as Sentry from './index.bundle.base';
1314
// eslint-disable-next-line deprecation/deprecation
1415
Sentry.Integrations.Replay = Replay;
1516

17+
// eslint-disable-next-line deprecation/deprecation
1618
Sentry.Integrations.BrowserTracing = BrowserTracing;
1719

1820
export * from './index.bundle.base';
1921
export {
22+
// eslint-disable-next-line deprecation/deprecation
2023
BrowserTracing,
24+
browserTracingIntegration,
2125
addTracingExtensions,
2226
// eslint-disable-next-line deprecation/deprecation
2327
Replay,

packages/browser/src/index.bundle.tracing.replay.feedback.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Feedback, feedbackIntegration } from '@sentry-internal/feedback';
2-
import { BrowserTracing, Span, addExtensionMethods } from '@sentry-internal/tracing';
2+
import { BrowserTracing, Span, addExtensionMethods, browserTracingIntegration } from '@sentry-internal/tracing';
33
import { Replay, replayIntegration } from '@sentry/replay';
44

55
import * as Sentry from './index.bundle.base';
@@ -10,6 +10,7 @@ import * as Sentry from './index.bundle.base';
1010
// eslint-disable-next-line deprecation/deprecation
1111
Sentry.Integrations.Replay = Replay;
1212

13+
// eslint-disable-next-line deprecation/deprecation
1314
Sentry.Integrations.BrowserTracing = BrowserTracing;
1415

1516
// We are patching the global object with our hub extension methods
@@ -22,7 +23,9 @@ export {
2223
Replay,
2324
feedbackIntegration,
2425
replayIntegration,
26+
// eslint-disable-next-line deprecation/deprecation
2527
BrowserTracing,
28+
browserTracingIntegration,
2629
Span,
2730
addExtensionMethods,
2831
};

packages/browser/src/index.bundle.tracing.replay.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Feedback, feedbackIntegration } from '@sentry-internal/integration-shims';
2-
import { BrowserTracing, Span, addExtensionMethods } from '@sentry-internal/tracing';
2+
import { BrowserTracing, Span, addExtensionMethods, browserTracingIntegration } from '@sentry-internal/tracing';
33
import { Replay, replayIntegration } from '@sentry/replay';
44

55
import * as Sentry from './index.bundle.base';
@@ -10,6 +10,7 @@ import * as Sentry from './index.bundle.base';
1010
// eslint-disable-next-line deprecation/deprecation
1111
Sentry.Integrations.Replay = Replay;
1212

13+
// eslint-disable-next-line deprecation/deprecation
1314
Sentry.Integrations.BrowserTracing = BrowserTracing;
1415

1516
// We are patching the global object with our hub extension methods
@@ -22,7 +23,9 @@ export {
2223
Replay,
2324
replayIntegration,
2425
feedbackIntegration,
26+
// eslint-disable-next-line deprecation/deprecation
2527
BrowserTracing,
28+
browserTracingIntegration,
2629
Span,
2730
addExtensionMethods,
2831
};

packages/browser/src/index.bundle.tracing.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// This is exported so the loader does not fail when switching off Replay
22
import { Feedback, Replay, feedbackIntegration, replayIntegration } from '@sentry-internal/integration-shims';
3-
import { BrowserTracing, Span, addExtensionMethods } from '@sentry-internal/tracing';
3+
import { BrowserTracing, Span, addExtensionMethods, browserTracingIntegration } from '@sentry-internal/tracing';
44

55
import * as Sentry from './index.bundle.base';
66

@@ -10,6 +10,7 @@ import * as Sentry from './index.bundle.base';
1010
// eslint-disable-next-line deprecation/deprecation
1111
Sentry.Integrations.Replay = Replay;
1212

13+
// eslint-disable-next-line deprecation/deprecation
1314
Sentry.Integrations.BrowserTracing = BrowserTracing;
1415

1516
// We are patching the global object with our hub extension methods
@@ -22,7 +23,9 @@ export {
2223
Replay,
2324
feedbackIntegration,
2425
replayIntegration,
26+
// eslint-disable-next-line deprecation/deprecation
2527
BrowserTracing,
28+
browserTracingIntegration,
2629
Span,
2730
addExtensionMethods,
2831
};

packages/browser/src/index.bundle.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {
44
Feedback,
55
Replay,
66
addTracingExtensions,
7+
browserTracingIntegration,
78
feedbackIntegration,
89
replayIntegration,
910
} from '@sentry-internal/integration-shims';
@@ -14,16 +15,19 @@ import * as Sentry from './index.bundle.base';
1415
// eslint-disable-next-line deprecation/deprecation
1516
Sentry.Integrations.Replay = Replay;
1617

18+
// eslint-disable-next-line deprecation/deprecation
1719
Sentry.Integrations.BrowserTracing = BrowserTracing;
1820

1921
export * from './index.bundle.base';
2022
export {
23+
// eslint-disable-next-line deprecation/deprecation
2124
BrowserTracing,
2225
addTracingExtensions,
2326
// eslint-disable-next-line deprecation/deprecation
2427
Replay,
2528
// eslint-disable-next-line deprecation/deprecation
2629
Feedback,
30+
browserTracingIntegration,
2731
feedbackIntegration,
2832
replayIntegration,
2933
};

packages/browser/src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,9 @@ export {
5454
} from '@sentry-internal/feedback';
5555

5656
export {
57+
// eslint-disable-next-line deprecation/deprecation
5758
BrowserTracing,
59+
browserTracingIntegration,
5860
defaultRequestInstrumentationOptions,
5961
instrumentOutgoingRequests,
6062
} from '@sentry-internal/tracing';

packages/browser/test/unit/profiling/integration.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ describe('BrowserProfilingIntegration', () => {
4444
send,
4545
};
4646
},
47-
integrations: [new Sentry.BrowserTracing(), new BrowserProfilingIntegration()],
47+
integrations: [Sentry.browserTracingIntegration(), new BrowserProfilingIntegration()],
4848
});
4949

5050
const client = Sentry.getClient<BrowserClient>();

packages/ember/addon/instance-initializers/sentry-performance.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -404,11 +404,11 @@ export async function instrumentForPerformance(appInstance: ApplicationInstance)
404404
// Maintaining backwards compatibility with config.browserTracingOptions, but passing it with Sentry options is preferred.
405405
const browserTracingOptions = config.browserTracingOptions || config.sentry.browserTracingOptions || {};
406406

407-
const { BrowserTracing } = await import('@sentry/browser');
407+
const { browserTracingIntegration } = await import('@sentry/browser');
408408

409409
const idleTimeout = config.transitionTimeout || 5000;
410410

411-
const browserTracing = new BrowserTracing({
411+
const browserTracing = browserTracingIntegration({
412412
routingInstrumentation: (customStartTransaction, startTransactionOnPageLoad) => {
413413
// eslint-disable-next-line ember/no-private-routing-service
414414
const routerMain = appInstance.lookup('router:main') as EmberRouterMain;

packages/ember/addon/types.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import type { BrowserOptions, BrowserTracing } from '@sentry/browser';
1+
import type { BrowserOptions, browserTracingIntegration } from '@sentry/browser';
22
import type { Transaction, TransactionContext } from '@sentry/types';
33

4-
type BrowserTracingOptions = ConstructorParameters<typeof BrowserTracing>[0];
4+
type BrowserTracingOptions = Parameters<typeof browserTracingIntegration>[0];
55

66
export type EmberSentryConfig = {
77
sentry: BrowserOptions & { browserTracingOptions?: BrowserTracingOptions };

packages/gatsby/src/utils/integrations.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { hasTracingEnabled } from '@sentry/core';
2-
import { BrowserTracing } from '@sentry/react';
2+
import { browserTracingIntegration } from '@sentry/react';
33
import type { Integration } from '@sentry/types';
44

55
import type { GatsbyOptions } from './types';
@@ -31,8 +31,8 @@ export function getIntegrationsFromOptions(options: GatsbyOptions): UserIntegrat
3131
* @param isTracingEnabled Whether the user has enabled tracing.
3232
*/
3333
function getIntegrationsFromArray(userIntegrations: Integration[], isTracingEnabled: boolean): Integration[] {
34-
if (isTracingEnabled && !userIntegrations.some(integration => integration.name === BrowserTracing.name)) {
35-
userIntegrations.push(new BrowserTracing());
34+
if (isTracingEnabled && !userIntegrations.some(integration => integration.name === 'BrowserTracing')) {
35+
userIntegrations.push(browserTracingIntegration());
3636
}
3737
return userIntegrations;
3838
}

packages/gatsby/test/gatsby-browser.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
/* eslint-disable @typescript-eslint/no-explicit-any */
33

44
import { onClientEntry } from '../gatsby-browser';
5-
import { BrowserTracing } from '../src/index';
5+
import { browserTracingIntegration } from '../src/index';
66

77
(global as any).__SENTRY_RELEASE__ = '683f3a6ab819d47d23abfca9a914c81f0524d35b';
88
(global as any).__SENTRY_DSN__ = 'https://[email protected]/0';
@@ -141,7 +141,7 @@ describe('onClientEntry', () => {
141141
});
142142

143143
it('only defines a single `BrowserTracing` integration', () => {
144-
const integrations = [new BrowserTracing()];
144+
const integrations = [browserTracingIntegration()];
145145
onClientEntry(undefined, { tracesSampleRate: 0.5, integrations });
146146

147147
expect(sentryInit).toHaveBeenLastCalledWith(

packages/gatsby/test/sdk.test.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { BrowserTracing, SDK_VERSION, init } from '@sentry/react';
1+
import { SDK_VERSION, browserTracingIntegration, init } from '@sentry/react';
22
import type { Integration } from '@sentry/types';
33

44
import { init as gatsbyInit } from '../src/sdk';
@@ -68,27 +68,27 @@ describe('Integrations from options', () => {
6868
[
6969
'tracing disabled, with BrowserTracing as an array',
7070
[],
71-
{ integrations: [new BrowserTracing()] },
71+
{ integrations: [browserTracingIntegration()] },
7272
['BrowserTracing'],
7373
],
7474
[
7575
'tracing disabled, with BrowserTracing as a function',
7676
[],
7777
{
78-
integrations: () => [new BrowserTracing()],
78+
integrations: () => [browserTracingIntegration()],
7979
},
8080
['BrowserTracing'],
8181
],
8282
[
8383
'tracing enabled, with BrowserTracing as an array',
8484
[],
85-
{ tracesSampleRate: 1, integrations: [new BrowserTracing()] },
85+
{ tracesSampleRate: 1, integrations: [browserTracingIntegration()] },
8686
['BrowserTracing'],
8787
],
8888
[
8989
'tracing enabled, with BrowserTracing as a function',
9090
[],
91-
{ tracesSampleRate: 1, integrations: () => [new BrowserTracing()] },
91+
{ tracesSampleRate: 1, integrations: () => [browserTracingIntegration()] },
9292
['BrowserTracing'],
9393
],
9494
] as TestArgs[])(

packages/integration-shims/src/BrowserTracing.ts

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import { consoleSandbox } from '@sentry/utils';
55
* This is a shim for the BrowserTracing integration.
66
* It is needed in order for the CDN bundles to continue working when users add/remove tracing
77
* from it, without changing their config. This is necessary for the loader mechanism.
8+
*
9+
* @deprecated Use `browserTracingIntegration()` instead.
810
*/
911
class BrowserTracingShim implements Integration {
1012
/**
@@ -19,6 +21,7 @@ class BrowserTracingShim implements Integration {
1921

2022
// eslint-disable-next-line @typescript-eslint/no-explicit-any
2123
public constructor(_options: any) {
24+
// eslint-disable-next-line deprecation/deprecation
2225
this.name = BrowserTracingShim.id;
2326

2427
consoleSandbox(() => {
@@ -33,7 +36,21 @@ class BrowserTracingShim implements Integration {
3336
}
3437
}
3538

36-
export { BrowserTracingShim as BrowserTracing };
39+
/**
40+
* This is a shim for the BrowserTracing integration.
41+
* It is needed in order for the CDN bundles to continue working when users add/remove tracing
42+
* from it, without changing their config. This is necessary for the loader mechanism.
43+
*/
44+
function browserTracingIntegrationShim(): Integration {
45+
// eslint-disable-next-line deprecation/deprecation
46+
return new BrowserTracingShim({});
47+
}
48+
49+
export {
50+
// eslint-disable-next-line deprecation/deprecation
51+
BrowserTracingShim as BrowserTracing,
52+
browserTracingIntegrationShim as browserTracingIntegration,
53+
};
3754

3855
/** Shim function */
3956
export function addTracingExtensions(): void {

packages/integration-shims/src/index.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,16 @@ export {
33
Feedback,
44
feedbackIntegration,
55
} from './Feedback';
6+
67
export {
78
// eslint-disable-next-line deprecation/deprecation
89
Replay,
910
replayIntegration,
1011
} from './Replay';
11-
export { BrowserTracing, addTracingExtensions } from './BrowserTracing';
12+
13+
export {
14+
// eslint-disable-next-line deprecation/deprecation
15+
BrowserTracing,
16+
browserTracingIntegration,
17+
addTracingExtensions,
18+
} from './BrowserTracing';

0 commit comments

Comments
 (0)