Skip to content

Commit

Permalink
feat(solidstart): Add browserTracingIntegration by default (#13561)
Browse files Browse the repository at this point in the history
Closes: #13352
  • Loading branch information
andreiborza authored Sep 3, 2024
1 parent 2393064 commit d929462
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 2 deletions.
29 changes: 27 additions & 2 deletions packages/solidstart/src/client/sdk.ts
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;
}
45 changes: 45 additions & 0 deletions packages/solidstart/test/client/sdk.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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');

Expand Down Expand Up @@ -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();
});
});

0 comments on commit d929462

Please sign in to comment.