-
-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(solidstart): Add
browserTracingIntegration
by default (#13561)
Closes: #13352
- Loading branch information
1 parent
2393064
commit d929462
Showing
2 changed files
with
72 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,17 +1,42 @@ | ||
import { applySdkMetadata } from '@sentry/core'; | ||
import type { BrowserOptions } from '@sentry/solid'; | ||
import { init as initSolidSDK } from '@sentry/solid'; | ||
import type { Client } from '@sentry/types'; | ||
import { | ||
browserTracingIntegration, | ||
getDefaultIntegrations as getDefaultSolidIntegrations, | ||
init as initSolidSDK, | ||
} from '@sentry/solid'; | ||
import type { Client, Integration } from '@sentry/types'; | ||
|
||
// Treeshakable guard to remove all code related to tracing | ||
declare const __SENTRY_TRACING__: boolean; | ||
|
||
/** | ||
* Initializes the client side of the Solid Start SDK. | ||
*/ | ||
export function init(options: BrowserOptions): Client | undefined { | ||
const opts = { | ||
defaultIntegrations: getDefaultIntegrations(options), | ||
...options, | ||
}; | ||
|
||
applySdkMetadata(opts, 'solidstart', ['solidstart', 'solid']); | ||
|
||
return initSolidSDK(opts); | ||
} | ||
|
||
function getDefaultIntegrations(options: BrowserOptions): Integration[] { | ||
const integrations = getDefaultSolidIntegrations(options); | ||
|
||
// This evaluates to true unless __SENTRY_TRACING__ is text-replaced with "false", | ||
// in which case everything inside will get tree-shaken away | ||
if (typeof __SENTRY_TRACING__ === 'undefined' || __SENTRY_TRACING__) { | ||
// We add the default BrowserTracingIntegration here always. | ||
// We can do this, even if `solidRouterBrowserTracingIntegration` is | ||
// supplied as integration in `init` by users because it will win | ||
// over the default integration by virtue of having the same | ||
// `BrowserTracing` integration name and being added later. | ||
integrations.push(browserTracingIntegration()); | ||
} | ||
|
||
return integrations; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -3,6 +3,7 @@ import * as SentrySolid from '@sentry/solid'; | |
|
||
import { vi } from 'vitest'; | ||
import { init as solidStartInit } from '../../src/client'; | ||
import { solidRouterBrowserTracingIntegration } from '../../src/client/solidrouter'; | ||
|
||
const browserInit = vi.spyOn(SentrySolid, 'init'); | ||
|
||
|
@@ -34,3 +35,47 @@ describe('Initialize Solid Start SDK', () => { | |
expect(browserInit).toHaveBeenLastCalledWith(expect.objectContaining(expectedMetadata)); | ||
}); | ||
}); | ||
|
||
describe('browserTracingIntegration', () => { | ||
it('adds the `browserTracingIntegration` when `__SENTRY_TRACING__` is not set', () => { | ||
const client = solidStartInit({ | ||
dsn: 'https://[email protected]/1337', | ||
}); | ||
|
||
const browserTracingIntegration = client | ||
?.getOptions() | ||
.integrations.find(integration => integration.name === 'BrowserTracing'); | ||
expect(browserTracingIntegration).toBeDefined(); | ||
expect(browserTracingIntegration!.isDefaultInstance).toEqual(true); | ||
}); | ||
|
||
it("doesn't add the `browserTracingIntegration` if `__SENTRY_TRACING__` is false", () => { | ||
// @ts-expect-error Test setup for build-time flag | ||
globalThis.__SENTRY_TRACING__ = false; | ||
|
||
const client = solidStartInit({ | ||
dsn: 'https://[email protected]/1337', | ||
}); | ||
|
||
const browserTracingIntegration = client | ||
?.getOptions() | ||
.integrations.find(integration => integration.name === 'BrowserTracing'); | ||
expect(browserTracingIntegration).toBeUndefined(); | ||
|
||
// @ts-expect-error Test setup for build-time flag | ||
delete globalThis.__SENTRY_TRACING__; | ||
}); | ||
|
||
it("doesn't add the default `browserTracingIntegration` if `solidBrowserTracingIntegration` was already passed in", () => { | ||
const client = solidStartInit({ | ||
integrations: [solidRouterBrowserTracingIntegration()], | ||
dsn: 'https://[email protected]/1337', | ||
}); | ||
|
||
const browserTracingIntegration = client | ||
?.getOptions() | ||
.integrations.find(integration => integration.name === 'BrowserTracing'); | ||
expect(browserTracingIntegration).toBeDefined(); | ||
expect(browserTracingIntegration!.isDefaultInstance).toBeUndefined(); | ||
}); | ||
}); |