From f91ae43bac5bf5f7053f83f5655ee78ac275c8b7 Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Fri, 28 Feb 2025 13:09:25 +0100 Subject: [PATCH 1/5] feat(tanstackstart): Add passthrough entrypoints for instrumentation --- packages/tanstackstart/src/common/index.ts | 9 +++++++++ packages/tanstackstart/src/config/index.ts | 7 ++++++- packages/tanstackstart/src/index.client.ts | 1 + packages/tanstackstart/src/index.server.ts | 1 + 4 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 packages/tanstackstart/src/common/index.ts diff --git a/packages/tanstackstart/src/common/index.ts b/packages/tanstackstart/src/common/index.ts new file mode 100644 index 000000000000..4eb421593cf4 --- /dev/null +++ b/packages/tanstackstart/src/common/index.ts @@ -0,0 +1,9 @@ +/** + * A middleware handler that can be passed to TanStack Start's `createMiddleware().server(...)` method as [global middleware](https://tanstack.com/start/latest/docs/framework/react/middleware#global-middleware) for instrumenting server functions. + */ +export function sentryGlobalServerMiddlewareHandler() { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + return function (server: { next: (...args: any[]) => T }): T { + return server.next(); + }; +} diff --git a/packages/tanstackstart/src/config/index.ts b/packages/tanstackstart/src/config/index.ts index cb0ff5c3b541..89897b1b6677 100644 --- a/packages/tanstackstart/src/config/index.ts +++ b/packages/tanstackstart/src/config/index.ts @@ -1 +1,6 @@ -export {}; +/** + * Wraps a TanStack Start config. + */ +export function wrapVinxiConfigWithSentry(config: C): C { + return config; +} diff --git a/packages/tanstackstart/src/index.client.ts b/packages/tanstackstart/src/index.client.ts index 4f1cce44fa36..478066d2ce1e 100644 --- a/packages/tanstackstart/src/index.client.ts +++ b/packages/tanstackstart/src/index.client.ts @@ -1 +1,2 @@ export * from './client'; +export * from './common'; diff --git a/packages/tanstackstart/src/index.server.ts b/packages/tanstackstart/src/index.server.ts index d08940e2ac5d..65cf4317ce4b 100644 --- a/packages/tanstackstart/src/index.server.ts +++ b/packages/tanstackstart/src/index.server.ts @@ -1,5 +1,6 @@ export * from './config'; export * from './server'; +export * from './common'; /** * A passthrough error boundary for the server that doesn't depend on any react. Error boundaries don't catch SSR errors From ba2d3b681d50ef80f3e183cc49c79d461a8e9c87 Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Fri, 28 Feb 2025 13:19:45 +0100 Subject: [PATCH 2/5] stream handler --- packages/tanstackstart/src/common/index.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/tanstackstart/src/common/index.ts b/packages/tanstackstart/src/common/index.ts index 4eb421593cf4..a853f3bee0ef 100644 --- a/packages/tanstackstart/src/common/index.ts +++ b/packages/tanstackstart/src/common/index.ts @@ -7,3 +7,10 @@ export function sentryGlobalServerMiddlewareHandler() { return server.next(); }; } + +/** + * Wraps a TanStack Start stream handler with Sentry instrumentation that can be passed to `createStartHandler(...)`. + */ +export function wrapStreamHandlerWithSentry(handler: H): H { + return handler; +} From b84a3115ef32e9a0ce79c8e3e67012349183a805 Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Fri, 28 Feb 2025 14:28:13 +0100 Subject: [PATCH 3/5] . --- packages/tanstackstart/src/index.server.ts | 41 ---------------------- packages/tanstackstart/src/index.types.ts | 1 + packages/tanstackstart/src/server/index.ts | 41 ++++++++++++++++++++++ packages/tanstackstart/tsconfig.json | 2 +- 4 files changed, 43 insertions(+), 42 deletions(-) diff --git a/packages/tanstackstart/src/index.server.ts b/packages/tanstackstart/src/index.server.ts index 65cf4317ce4b..3295df71604b 100644 --- a/packages/tanstackstart/src/index.server.ts +++ b/packages/tanstackstart/src/index.server.ts @@ -1,44 +1,3 @@ export * from './config'; export * from './server'; export * from './common'; - -/** - * 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. - */ -export const ErrorBoundary = (props: React.PropsWithChildren): React.ReactNode => { - if (!props.children) { - return null; - } - - if (typeof props.children === 'function') { - return (props.children as () => React.ReactNode)(); - } - - return props.children; -}; - -/** - * A passthrough redux enhancer for the server that doesn't depend on anything from the `@sentry/react` package. - */ -export function createReduxEnhancer() { - return (createStore: unknown) => createStore; -} - -/** - * A passthrough error boundary wrapper for the server that doesn't depend on any react. Error boundaries don't catch - * SSR errors so they should simply be a passthrough. - */ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export function withErrorBoundary

>( - WrappedComponent: React.ComponentType

, -): React.FC

{ - return WrappedComponent as React.FC

; -} - -/** - * Just a passthrough since we're on the server and showing the report dialog on the server doesn't make any sense. - */ -export function showReportDialog(): void { - return; -} diff --git a/packages/tanstackstart/src/index.types.ts b/packages/tanstackstart/src/index.types.ts index ede1b27f0b3b..84a987788d17 100644 --- a/packages/tanstackstart/src/index.types.ts +++ b/packages/tanstackstart/src/index.types.ts @@ -3,6 +3,7 @@ export * from './config'; export * from './client'; export * from './server'; +export * from './common'; import type { Client, Integration, Options, StackParser } from '@sentry/core'; diff --git a/packages/tanstackstart/src/server/index.ts b/packages/tanstackstart/src/server/index.ts index d61c75b7bfb4..91f80547f143 100644 --- a/packages/tanstackstart/src/server/index.ts +++ b/packages/tanstackstart/src/server/index.ts @@ -1 +1,42 @@ export * from '@sentry/node'; + +/** + * 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. + */ +export const ErrorBoundary = (props: React.PropsWithChildren): React.ReactNode => { + if (!props.children) { + return null; + } + + if (typeof props.children === 'function') { + return (props.children as () => React.ReactNode)(); + } + + return props.children; +}; + +/** + * A passthrough redux enhancer for the server that doesn't depend on anything from the `@sentry/react` package. + */ +export function createReduxEnhancer() { + return (createStore: unknown) => createStore; +} + +/** + * A passthrough error boundary wrapper for the server that doesn't depend on any react. Error boundaries don't catch + * SSR errors so they should simply be a passthrough. + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export function withErrorBoundary

>( + WrappedComponent: React.ComponentType

, +): React.FC

{ + return WrappedComponent as React.FC

; +} + +/** + * Just a passthrough since we're on the server and showing the report dialog on the server doesn't make any sense. + */ +export function showReportDialog(): void { + return; +} diff --git a/packages/tanstackstart/tsconfig.json b/packages/tanstackstart/tsconfig.json index 20cf507e5203..a414b5fc38e8 100644 --- a/packages/tanstackstart/tsconfig.json +++ b/packages/tanstackstart/tsconfig.json @@ -1,6 +1,6 @@ { "extends": "../../tsconfig.json", - "include": ["src/**/*"], + "include": ["src/**/*", "build"], "compilerOptions": { "lib": ["es2018", "es2020.string"], "module": "Node16" From a678497d506a38fd950b14df40f4de2bdb03a3b8 Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Mon, 3 Mar 2025 10:57:46 +0100 Subject: [PATCH 4/5] Fix node import --- packages/tanstackstart/package.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/tanstackstart/package.json b/packages/tanstackstart/package.json index 63a7916ff3dd..80bcd62281f5 100644 --- a/packages/tanstackstart/package.json +++ b/packages/tanstackstart/package.json @@ -23,8 +23,10 @@ "import": "./build/esm/index.client.js", "require": "./build/cjs/index.client.js" }, - "node": "./build/cjs/index.server.js", - "import": "./build/esm/index.server.js" + "node": { + "import": "./build/esm/index.server.js", + "require": "./build/cjs/index.server.js" + } }, "./import": { "import": { From 886b8e927a208ae66809ce04f37d8c5c7bd00204 Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Mon, 3 Mar 2025 11:08:14 +0100 Subject: [PATCH 5/5] . --- packages/tanstackstart/tsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/tanstackstart/tsconfig.json b/packages/tanstackstart/tsconfig.json index a414b5fc38e8..20cf507e5203 100644 --- a/packages/tanstackstart/tsconfig.json +++ b/packages/tanstackstart/tsconfig.json @@ -1,6 +1,6 @@ { "extends": "../../tsconfig.json", - "include": ["src/**/*", "build"], + "include": ["src/**/*"], "compilerOptions": { "lib": ["es2018", "es2020.string"], "module": "Node16"