From a6010533738c523aa9393c5079027daa9d3abac2 Mon Sep 17 00:00:00 2001 From: Nicolas Hrubec Date: Tue, 2 Dec 2025 11:19:19 +0100 Subject: [PATCH 1/2] export client/server init from tanstackstart --- .../tanstackstart-react/src/client/index.ts | 2 + .../tanstackstart-react/src/client/sdk.ts | 20 +++++++++ .../tanstackstart-react/src/server/index.ts | 2 + .../tanstackstart-react/src/server/sdk.ts | 17 +++++++ .../test/client/sdk.test.ts | 45 +++++++++++++++++++ .../test/server/sdk.test.ts | 42 +++++++++++++++++ .../tanstackstart-react/test/temp.test.ts | 7 --- 7 files changed, 128 insertions(+), 7 deletions(-) create mode 100644 packages/tanstackstart-react/src/client/sdk.ts create mode 100644 packages/tanstackstart-react/src/server/sdk.ts create mode 100644 packages/tanstackstart-react/test/client/sdk.test.ts create mode 100644 packages/tanstackstart-react/test/server/sdk.test.ts delete mode 100644 packages/tanstackstart-react/test/temp.test.ts diff --git a/packages/tanstackstart-react/src/client/index.ts b/packages/tanstackstart-react/src/client/index.ts index c45aad673ad0..7c603d040693 100644 --- a/packages/tanstackstart-react/src/client/index.ts +++ b/packages/tanstackstart-react/src/client/index.ts @@ -1 +1,3 @@ export * from '@sentry/react'; + +export { init } from './sdk'; diff --git a/packages/tanstackstart-react/src/client/sdk.ts b/packages/tanstackstart-react/src/client/sdk.ts new file mode 100644 index 000000000000..a1d12feb2252 --- /dev/null +++ b/packages/tanstackstart-react/src/client/sdk.ts @@ -0,0 +1,20 @@ +import { getDefaultIntegrations as getReactDefaultIntegrations, init as initReactSDK } from '@sentry/react'; +import type { Client } from '@sentry/core'; +import { applySdkMetadata } from '@sentry/core'; +import type { BrowserOptions as ReactBrowserOptions } from '@sentry/react'; + +/** + * Initializes the TanStack Start React SDK + * + * @param options Configuration options for the SDK. + */ +export function init(options: ReactBrowserOptions): Client | undefined { + const sentryOptions: ReactBrowserOptions = { + defaultIntegrations: [...getReactDefaultIntegrations(options)], + ...options, + }; + + applySdkMetadata(sentryOptions, 'tanstackstart-react', ['tanstackstart-react', 'react']); + + return initReactSDK(sentryOptions); +} diff --git a/packages/tanstackstart-react/src/server/index.ts b/packages/tanstackstart-react/src/server/index.ts index c79572a7f318..f377305d429f 100644 --- a/packages/tanstackstart-react/src/server/index.ts +++ b/packages/tanstackstart-react/src/server/index.ts @@ -1,5 +1,7 @@ export * from '@sentry/node'; +export { init } from './sdk'; + /** * A passthrough error boundary for the server that doesn't depend on any react. Error boundaries don't catch SSR errors * so they should simply be a passthrough. diff --git a/packages/tanstackstart-react/src/server/sdk.ts b/packages/tanstackstart-react/src/server/sdk.ts new file mode 100644 index 000000000000..1bf2b5e65be2 --- /dev/null +++ b/packages/tanstackstart-react/src/server/sdk.ts @@ -0,0 +1,17 @@ +import { applySdkMetadata } from '@sentry/core'; +import type { NodeClient, NodeOptions } from '@sentry/node'; +import { getDefaultIntegrations as getDefaultNodeIntegrations, init as initNodeSdk } from '@sentry/node'; + +/** + * Initializes the server side of the TanStack Start React SDK + */ +export function init(options: NodeOptions): NodeClient | undefined { + const sentryOptions: NodeOptions = { + defaultIntegrations: [...getDefaultNodeIntegrations(options)], + ...options, + }; + + applySdkMetadata(sentryOptions, 'tanstackstart-react', ['tanstackstart-react', 'node']); + + return initNodeSdk(sentryOptions); +} diff --git a/packages/tanstackstart-react/test/client/sdk.test.ts b/packages/tanstackstart-react/test/client/sdk.test.ts new file mode 100644 index 000000000000..fdcd4043bd23 --- /dev/null +++ b/packages/tanstackstart-react/test/client/sdk.test.ts @@ -0,0 +1,45 @@ +import * as SentryReact from '@sentry/react'; +import { SDK_VERSION } from '@sentry/react'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { init } from '../../src/client'; + +const reactInit = vi.spyOn(SentryReact, 'init'); + +describe('TanStack Start React Client SDK', () => { + describe('init', () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + + it('Adds TanStack Start React client metadata to the SDK options', () => { + expect(reactInit).not.toHaveBeenCalled(); + + init({ + dsn: 'https://public@dsn.ingest.sentry.io/1337', + }); + + const expectedMetadata = { + _metadata: { + sdk: { + name: 'sentry.javascript.tanstackstart-react', + version: SDK_VERSION, + packages: [ + { name: 'npm:@sentry/tanstackstart-react', version: SDK_VERSION }, + { name: 'npm:@sentry/react', version: SDK_VERSION }, + ], + "settings": { + "infer_ip": "never", + }, + }, + }, + }; + + expect(reactInit).toHaveBeenCalledTimes(1); + expect(reactInit).toHaveBeenLastCalledWith(expect.objectContaining(expectedMetadata)); + }); + + it('returns client from init', () => { + expect(init({})).not.toBeUndefined(); + }); + }); +}); diff --git a/packages/tanstackstart-react/test/server/sdk.test.ts b/packages/tanstackstart-react/test/server/sdk.test.ts new file mode 100644 index 000000000000..f95d970ce8cc --- /dev/null +++ b/packages/tanstackstart-react/test/server/sdk.test.ts @@ -0,0 +1,42 @@ +import * as SentryNode from '@sentry/node'; +import { SDK_VERSION } from '@sentry/node'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { init } from '../../src/server'; + +const nodeInit = vi.spyOn(SentryNode, 'init'); + +describe('TanStack Start React Server SDK', () => { + describe('init', () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + + it('Adds TanStack Start React server metadata to the SDK options', () => { + expect(nodeInit).not.toHaveBeenCalled(); + + init({ + dsn: 'https://public@dsn.ingest.sentry.io/1337', + }); + + const expectedMetadata = { + _metadata: { + sdk: { + name: 'sentry.javascript.tanstackstart-react', + version: SDK_VERSION, + packages: [ + { name: 'npm:@sentry/tanstackstart-react', version: SDK_VERSION }, + { name: 'npm:@sentry/node', version: SDK_VERSION }, + ], + }, + }, + }; + + expect(nodeInit).toHaveBeenCalledTimes(1); + expect(nodeInit).toHaveBeenLastCalledWith(expect.objectContaining(expectedMetadata)); + }); + + it('returns client from init', () => { + expect(init({})).not.toBeUndefined(); + }); + }); +}); diff --git a/packages/tanstackstart-react/test/temp.test.ts b/packages/tanstackstart-react/test/temp.test.ts deleted file mode 100644 index dc8614cad037..000000000000 --- a/packages/tanstackstart-react/test/temp.test.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { describe, expect, it } from 'vitest'; - -describe('Basic test suite', () => { - it('should pass', () => { - expect(true).toBe(true); - }); -}); From 9c1bd793a3610660b5e090a0708ae4da18e172ee Mon Sep 17 00:00:00 2001 From: Nicolas Hrubec Date: Tue, 2 Dec 2025 11:28:12 +0100 Subject: [PATCH 2/2] lint --- packages/tanstackstart-react/src/client/sdk.ts | 2 +- packages/tanstackstart-react/test/client/sdk.test.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/tanstackstart-react/src/client/sdk.ts b/packages/tanstackstart-react/src/client/sdk.ts index a1d12feb2252..b0ee3b53053f 100644 --- a/packages/tanstackstart-react/src/client/sdk.ts +++ b/packages/tanstackstart-react/src/client/sdk.ts @@ -1,7 +1,7 @@ -import { getDefaultIntegrations as getReactDefaultIntegrations, init as initReactSDK } from '@sentry/react'; import type { Client } from '@sentry/core'; import { applySdkMetadata } from '@sentry/core'; import type { BrowserOptions as ReactBrowserOptions } from '@sentry/react'; +import { getDefaultIntegrations as getReactDefaultIntegrations, init as initReactSDK } from '@sentry/react'; /** * Initializes the TanStack Start React SDK diff --git a/packages/tanstackstart-react/test/client/sdk.test.ts b/packages/tanstackstart-react/test/client/sdk.test.ts index fdcd4043bd23..4cba4a199ef5 100644 --- a/packages/tanstackstart-react/test/client/sdk.test.ts +++ b/packages/tanstackstart-react/test/client/sdk.test.ts @@ -27,8 +27,8 @@ describe('TanStack Start React Client SDK', () => { { name: 'npm:@sentry/tanstackstart-react', version: SDK_VERSION }, { name: 'npm:@sentry/react', version: SDK_VERSION }, ], - "settings": { - "infer_ip": "never", + settings: { + infer_ip: 'never', }, }, },