From 7f116cb6ad51a908e1597da1a1edb316e73777a1 Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Tue, 11 Mar 2025 10:58:58 +0100 Subject: [PATCH 1/2] feat(tanstackstart): Add `@sentry/tanstackstart-react` package and make `@sentry/tanstackstart` package a utility package --- .craft.yml | 3 + .../e2e-tests/verdaccio-config/config.yaml | 6 ++ package.json | 1 + packages/tanstackstart-react/.eslintrc.js | 10 +++ packages/tanstackstart-react/LICENSE | 21 +++++ packages/tanstackstart-react/README.md | 52 +++++++++++ packages/tanstackstart-react/package.json | 86 +++++++++++++++++++ .../tanstackstart-react/rollup.npm.config.mjs | 10 +++ .../tanstackstart-react/src/client/index.ts | 1 + .../tanstackstart-react/src/common/index.ts | 23 +++++ .../tanstackstart-react/src/config/index.ts | 16 ++++ .../tanstackstart-react/src/index.client.ts | 2 + .../tanstackstart-react/src/index.server.ts | 3 + .../tanstackstart-react/src/index.types.ts | 27 ++++++ .../tanstackstart-react/src/server/index.ts | 42 +++++++++ .../tanstackstart-react/test/temp.test.ts | 7 ++ .../tanstackstart-react/test/tsconfig.json | 3 + packages/tanstackstart-react/tsconfig.json | 8 ++ .../tanstackstart-react/tsconfig.test.json | 8 ++ .../tanstackstart-react/tsconfig.types.json | 9 ++ packages/tanstackstart-react/vite.config.ts | 8 ++ packages/tanstackstart/README.md | 38 +------- packages/tanstackstart/package.json | 22 +---- packages/tanstackstart/rollup.npm.config.mjs | 3 +- packages/tanstackstart/src/client/index.ts | 2 +- packages/tanstackstart/src/common/index.ts | 24 +----- packages/tanstackstart/src/config/index.ts | 17 +--- packages/tanstackstart/src/index.types.ts | 21 ----- packages/tanstackstart/src/server/index.ts | 43 +--------- yarn.lock | 12 ++- 30 files changed, 367 insertions(+), 161 deletions(-) create mode 100644 packages/tanstackstart-react/.eslintrc.js create mode 100644 packages/tanstackstart-react/LICENSE create mode 100644 packages/tanstackstart-react/README.md create mode 100644 packages/tanstackstart-react/package.json create mode 100644 packages/tanstackstart-react/rollup.npm.config.mjs create mode 100644 packages/tanstackstart-react/src/client/index.ts create mode 100644 packages/tanstackstart-react/src/common/index.ts create mode 100644 packages/tanstackstart-react/src/config/index.ts create mode 100644 packages/tanstackstart-react/src/index.client.ts create mode 100644 packages/tanstackstart-react/src/index.server.ts create mode 100644 packages/tanstackstart-react/src/index.types.ts create mode 100644 packages/tanstackstart-react/src/server/index.ts create mode 100644 packages/tanstackstart-react/test/temp.test.ts create mode 100644 packages/tanstackstart-react/test/tsconfig.json create mode 100644 packages/tanstackstart-react/tsconfig.json create mode 100644 packages/tanstackstart-react/tsconfig.test.json create mode 100644 packages/tanstackstart-react/tsconfig.types.json create mode 100644 packages/tanstackstart-react/vite.config.ts diff --git a/.craft.yml b/.craft.yml index 4f52ed1ea6ba..a5df75a24519 100644 --- a/.craft.yml +++ b/.craft.yml @@ -111,6 +111,9 @@ targets: - name: npm id: '@sentry/tanstackstart' includeNames: /^sentry-tanstackstart-\d.*\.tgz$/ + - name: npm + id: '@sentry/tanstackstart-react' + includeNames: /^sentry-tanstackstart-react-\d.*\.tgz$/ - name: npm id: '@sentry/gatsby' includeNames: /^sentry-gatsby-\d.*\.tgz$/ diff --git a/dev-packages/e2e-tests/verdaccio-config/config.yaml b/dev-packages/e2e-tests/verdaccio-config/config.yaml index af7d62521c59..8535c5898175 100644 --- a/dev-packages/e2e-tests/verdaccio-config/config.yaml +++ b/dev-packages/e2e-tests/verdaccio-config/config.yaml @@ -176,6 +176,12 @@ packages: unpublish: $all # proxy: npmjs # Don't proxy for E2E tests! + '@sentry/tanstackstart-react': + access: $all + publish: $all + unpublish: $all + # proxy: npmjs # Don't proxy for E2E tests! + '@sentry/types': access: $all publish: $all diff --git a/package.json b/package.json index 460d2c42abb1..443b45361873 100644 --- a/package.json +++ b/package.json @@ -80,6 +80,7 @@ "packages/svelte", "packages/sveltekit", "packages/tanstackstart", + "packages/tanstackstart-react", "packages/types", "packages/typescript", "packages/vercel-edge", diff --git a/packages/tanstackstart-react/.eslintrc.js b/packages/tanstackstart-react/.eslintrc.js new file mode 100644 index 000000000000..54e8382b22a8 --- /dev/null +++ b/packages/tanstackstart-react/.eslintrc.js @@ -0,0 +1,10 @@ +module.exports = { + env: { + browser: true, + node: true, + }, + parserOptions: { + jsx: true, + }, + extends: ['../../.eslintrc.js'], +}; diff --git a/packages/tanstackstart-react/LICENSE b/packages/tanstackstart-react/LICENSE new file mode 100644 index 000000000000..0da96cd2f885 --- /dev/null +++ b/packages/tanstackstart-react/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 Functional Software, Inc. dba Sentry + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/tanstackstart-react/README.md b/packages/tanstackstart-react/README.md new file mode 100644 index 000000000000..6d28df3ba6df --- /dev/null +++ b/packages/tanstackstart-react/README.md @@ -0,0 +1,52 @@ +

+ + Sentry + +

+ +# Official Sentry SDK for TanStack Start React (Alpha) + +[![npm version](https://img.shields.io/npm/v/@sentry/tanstackstart-react.svg)](https://www.npmjs.com/package/@sentry/tanstackstart-react) +[![npm dm](https://img.shields.io/npm/dm/@sentry/tanstackstart-react.svg)](https://www.npmjs.com/package/@sentry/tanstackstart-react) +[![npm dt](https://img.shields.io/npm/dt/@sentry/tanstackstart-react.svg)](https://www.npmjs.com/package/@sentry/tanstackstart-react) + +> NOTICE: This package is in alpha state and may be subject to breaking changes. + +## Getting Started + +This SDK does not have docs yet. Stay tuned. + +## Compatibility + +The minimum supported version of TanStack Start is `1.111.12`. + +## Custom Usage + +To set context information or to send manual events, you can use `@sentry/tanstackstart-react` as follows: + +```ts +import * as Sentry from '@sentry/tanstackstart-react'; + +// Set user information, as well as tags and further extras +Sentry.setTag('user_mode', 'admin'); +Sentry.setUser({ id: '4711' }); +Sentry.setContext('application_area', { location: 'checkout' }); + +// Add a breadcrumb for future events +Sentry.addBreadcrumb({ + message: '"Add to cart" clicked', + // ... +}); + +// Capture exceptions or messages +Sentry.captureException(new Error('Oh no.')); +Sentry.captureMessage('Hello, world!'); +``` + +## Links + + + +- [Sentry.io](https://sentry.io/?utm_source=github&utm_medium=npm_tanstackstartreact) +- [Sentry Discord Server](https://discord.gg/Ww9hbqr) +- [Stack Overflow](https://stackoverflow.com/questions/tagged/sentry) diff --git a/packages/tanstackstart-react/package.json b/packages/tanstackstart-react/package.json new file mode 100644 index 000000000000..7e36a332922e --- /dev/null +++ b/packages/tanstackstart-react/package.json @@ -0,0 +1,86 @@ +{ + "name": "@sentry/tanstackstart-react", + "version": "9.5.0", + "description": "Official Sentry SDK for TanStack Start React", + "repository": "git://github.com/getsentry/sentry-javascript.git", + "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/tanstackstart-react", + "author": "Sentry", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "main": "build/cjs/index.server.js", + "module": "build/esm/index.server.js", + "types": "build/types/index.types.d.ts", + "files": [ + "/build" + ], + "exports": { + "./package.json": "./package.json", + ".": { + "types": "./build/types/index.types.d.ts", + "browser": { + "import": "./build/esm/index.client.js", + "require": "./build/cjs/index.client.js" + }, + "node": { + "import": "./build/esm/index.server.js", + "require": "./build/cjs/index.server.js" + } + }, + "./import": { + "import": { + "default": "./build/import-hook.mjs" + } + }, + "./loader": { + "import": { + "default": "./build/loader-hook.mjs" + } + } + }, + "typesVersions": { + "<5.0": { + "build/npm/types/index.d.ts": [ + "build/npm/types-ts3.8/index.d.ts" + ] + } + }, + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/semantic-conventions": "^1.30.0", + "@sentry-internal/browser-utils": "9.5.0", + "@sentry/core": "9.5.0", + "@sentry/node": "9.5.0", + "@sentry/opentelemetry": "9.5.0", + "@sentry/react": "9.5.0" + }, + "scripts": { + "build": "run-p build:transpile build:types", + "build:dev": "yarn build", + "build:transpile": "rollup -c rollup.npm.config.mjs", + "build:types": "run-s build:types:core build:types:downlevel", + "build:types:core": "tsc -p tsconfig.types.json", + "build:types:downlevel": "yarn downlevel-dts build/types build/types-ts3.8 --to ts3.8", + "build:watch": "run-p build:transpile:watch build:types:watch", + "build:dev:watch": "yarn build:watch", + "build:transpile:watch": "nodemon --ext ts --watch src scripts/buildRollup.ts", + "build:types:watch": "tsc -p tsconfig.types.json --watch", + "build:tarball": "npm pack", + "circularDepCheck": "madge --circular src/index.client.ts && madge --circular src/index.server.ts && madge --circular src/index.types.ts", + "clean": "rimraf build coverage sentry-tanstackstart-react-*.tgz", + "fix": "eslint . --format stylish --fix", + "lint": "eslint . --format stylish", + "test": "yarn test:unit", + "test:unit": "vitest run", + "test:watch": "vitest --watch", + "yalc:publish": "yalc publish --push --sig" + }, + "volta": { + "extends": "../../package.json" + }, + "sideEffects": false +} diff --git a/packages/tanstackstart-react/rollup.npm.config.mjs b/packages/tanstackstart-react/rollup.npm.config.mjs new file mode 100644 index 000000000000..3c1bae9abd07 --- /dev/null +++ b/packages/tanstackstart-react/rollup.npm.config.mjs @@ -0,0 +1,10 @@ +import { makeBaseNPMConfig, makeNPMConfigVariants, makeOtelLoaders } from '@sentry-internal/rollup-utils'; + +export default [ + ...makeNPMConfigVariants( + makeBaseNPMConfig({ + entrypoints: ['src/index.server.ts', 'src/index.client.ts', 'src/client/index.ts', 'src/server/index.ts'], + }), + ), + ...makeOtelLoaders('./build', 'sentry-node'), +]; diff --git a/packages/tanstackstart-react/src/client/index.ts b/packages/tanstackstart-react/src/client/index.ts new file mode 100644 index 000000000000..c45aad673ad0 --- /dev/null +++ b/packages/tanstackstart-react/src/client/index.ts @@ -0,0 +1 @@ +export * from '@sentry/react'; diff --git a/packages/tanstackstart-react/src/common/index.ts b/packages/tanstackstart-react/src/common/index.ts new file mode 100644 index 000000000000..d83c684d1523 --- /dev/null +++ b/packages/tanstackstart-react/src/common/index.ts @@ -0,0 +1,23 @@ +/** + * 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(); + }; +} + +/** + * Wraps a TanStack Start stream handler with Sentry instrumentation that can be passed to `createStartHandler(...)`. + */ +export function wrapStreamHandlerWithSentry(handler: H): H { + return handler; +} + +/** + * Wraps the create root route function with Sentry for server-client tracing with SSR. + */ +export function wrapCreateRootRouteWithSentry(createRootRoute: F): F { + return createRootRoute; +} diff --git a/packages/tanstackstart-react/src/config/index.ts b/packages/tanstackstart-react/src/config/index.ts new file mode 100644 index 000000000000..579fe3c7db00 --- /dev/null +++ b/packages/tanstackstart-react/src/config/index.ts @@ -0,0 +1,16 @@ +/** + * Wraps a TanStack Start config. + */ +export function wrapVinxiConfigWithSentry( + config: C, + // TODO: Expand this type in the future. Right now it is just so that TS doesn't complain for our users when they copy paste from the docs. + // eslint-disable-next-line @typescript-eslint/no-unused-vars + sentryBuildOptions: { + org?: string; + project?: string; + silent?: boolean; + authToken?: boolean; + } = {}, +): C { + return config; +} diff --git a/packages/tanstackstart-react/src/index.client.ts b/packages/tanstackstart-react/src/index.client.ts new file mode 100644 index 000000000000..478066d2ce1e --- /dev/null +++ b/packages/tanstackstart-react/src/index.client.ts @@ -0,0 +1,2 @@ +export * from './client'; +export * from './common'; diff --git a/packages/tanstackstart-react/src/index.server.ts b/packages/tanstackstart-react/src/index.server.ts new file mode 100644 index 000000000000..3295df71604b --- /dev/null +++ b/packages/tanstackstart-react/src/index.server.ts @@ -0,0 +1,3 @@ +export * from './config'; +export * from './server'; +export * from './common'; diff --git a/packages/tanstackstart-react/src/index.types.ts b/packages/tanstackstart-react/src/index.types.ts new file mode 100644 index 000000000000..84a987788d17 --- /dev/null +++ b/packages/tanstackstart-react/src/index.types.ts @@ -0,0 +1,27 @@ +// We export everything from both the client part of the SDK and from the server part. Some of the exports collide, +// which is not allowed, unless we redefine the colliding exports in this file - which we do below. +export * from './config'; +export * from './client'; +export * from './server'; +export * from './common'; + +import type { Client, Integration, Options, StackParser } from '@sentry/core'; + +import type * as clientSdk from './client'; +import type * as serverSdk from './server'; + +/** Initializes Sentry TanStack Start SDK */ +export declare function init(options: Options | clientSdk.BrowserOptions | serverSdk.NodeOptions): Client | undefined; + +export declare const linkedErrorsIntegration: typeof clientSdk.linkedErrorsIntegration; +export declare const contextLinesIntegration: typeof clientSdk.contextLinesIntegration; + +export declare const getDefaultIntegrations: (options: Options) => Integration[]; +export declare const defaultStackParser: StackParser; + +export declare function getSentryRelease(fallback?: string): string | undefined; + +export declare const ErrorBoundary: typeof clientSdk.ErrorBoundary; +export declare const createReduxEnhancer: typeof clientSdk.createReduxEnhancer; +export declare const showReportDialog: typeof clientSdk.showReportDialog; +export declare const withErrorBoundary: typeof clientSdk.withErrorBoundary; diff --git a/packages/tanstackstart-react/src/server/index.ts b/packages/tanstackstart-react/src/server/index.ts new file mode 100644 index 000000000000..91f80547f143 --- /dev/null +++ b/packages/tanstackstart-react/src/server/index.ts @@ -0,0 +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-react/test/temp.test.ts b/packages/tanstackstart-react/test/temp.test.ts new file mode 100644 index 000000000000..28874b0d1c84 --- /dev/null +++ b/packages/tanstackstart-react/test/temp.test.ts @@ -0,0 +1,7 @@ +import { describe, it, expect } from 'vitest'; + +describe('Basic test suite', () => { + it('should pass', () => { + expect(true).toBe(true); + }); +}); diff --git a/packages/tanstackstart-react/test/tsconfig.json b/packages/tanstackstart-react/test/tsconfig.json new file mode 100644 index 000000000000..38ca0b13bcdd --- /dev/null +++ b/packages/tanstackstart-react/test/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "../tsconfig.test.json" +} diff --git a/packages/tanstackstart-react/tsconfig.json b/packages/tanstackstart-react/tsconfig.json new file mode 100644 index 000000000000..20cf507e5203 --- /dev/null +++ b/packages/tanstackstart-react/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.json", + "include": ["src/**/*"], + "compilerOptions": { + "lib": ["es2018", "es2020.string"], + "module": "Node16" + } +} diff --git a/packages/tanstackstart-react/tsconfig.test.json b/packages/tanstackstart-react/tsconfig.test.json new file mode 100644 index 000000000000..bbbebba51d18 --- /dev/null +++ b/packages/tanstackstart-react/tsconfig.test.json @@ -0,0 +1,8 @@ +{ + "extends": "./tsconfig.json", + "include": ["test/**/*", "vite.config.ts"], + "compilerOptions": { + "types": ["node"], + "lib": ["DOM", "ESNext"] + } +} diff --git a/packages/tanstackstart-react/tsconfig.types.json b/packages/tanstackstart-react/tsconfig.types.json new file mode 100644 index 000000000000..b1a51db073c2 --- /dev/null +++ b/packages/tanstackstart-react/tsconfig.types.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "declaration": true, + "declarationMap": true, + "emitDeclarationOnly": true, + "outDir": "build/types" + } +} diff --git a/packages/tanstackstart-react/vite.config.ts b/packages/tanstackstart-react/vite.config.ts new file mode 100644 index 000000000000..f18ec92095bc --- /dev/null +++ b/packages/tanstackstart-react/vite.config.ts @@ -0,0 +1,8 @@ +import baseConfig from '../../vite/vite.config'; + +export default { + ...baseConfig, + test: { + ...baseConfig.test, + }, +}; diff --git a/packages/tanstackstart/README.md b/packages/tanstackstart/README.md index 35e369cf25e9..e5ef2c111dd6 100644 --- a/packages/tanstackstart/README.md +++ b/packages/tanstackstart/README.md @@ -4,49 +4,19 @@

-# Official Sentry SDK for TanStack Start (Alpha) +# Utilities for the Sentry TanStack Start SDKs [![npm version](https://img.shields.io/npm/v/@sentry/tanstackstart.svg)](https://www.npmjs.com/package/@sentry/tanstackstart) [![npm dm](https://img.shields.io/npm/dm/@sentry/tanstackstart.svg)](https://www.npmjs.com/package/@sentry/tanstackstart) [![npm dt](https://img.shields.io/npm/dt/@sentry/tanstackstart.svg)](https://www.npmjs.com/package/@sentry/tanstackstart) -> NOTICE: This package is in alpha state and may be subject to breaking changes. +> NOTICE: This package is a package that contains SDK internals and does not follow semantic versioning. Use with caution. -## Getting Started - -This SDK does not have docs yet. Stay tuned. - -## Compatibility - -The minimum supported version of TanStack Start is `1.111.12`. - -## Custom Usage - -To set context information or to send manual events, you can use `@sentry/tanstackstart` as follows: - -```ts -import * as Sentry from '@sentry/tanstackstart'; - -// Set user information, as well as tags and further extras -Sentry.setTag('user_mode', 'admin'); -Sentry.setUser({ id: '4711' }); -Sentry.setContext('application_area', { location: 'checkout' }); - -// Add a breadcrumb for future events -Sentry.addBreadcrumb({ - message: '"Add to cart" clicked', - // ... -}); - -// Capture exceptions or messages -Sentry.captureException(new Error('Oh no.')); -Sentry.captureMessage('Hello, world!'); -``` +This package contains shared utilities for Sentry TanStack Start SDKs. +If you are looking for the actual TanStack Start React SDK package, see: https://www.npmjs.com/package/@sentry/tanstackstart-react ## Links - - - [Sentry.io](https://sentry.io/?utm_source=github&utm_medium=npm_tanstackstart) - [Sentry Discord Server](https://discord.gg/Ww9hbqr) - [Stack Overflow](https://stackoverflow.com/questions/tagged/sentry) diff --git a/packages/tanstackstart/package.json b/packages/tanstackstart/package.json index 992a07d9c6eb..766a85278741 100644 --- a/packages/tanstackstart/package.json +++ b/packages/tanstackstart/package.json @@ -1,7 +1,7 @@ { "name": "@sentry/tanstackstart", "version": "9.5.0", - "description": "Official Sentry SDK for TanStack Start", + "description": "Utilities for the Sentry TanStack Start SDKs", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/tanstackstart", "author": "Sentry", @@ -27,16 +27,6 @@ "import": "./build/esm/index.server.js", "require": "./build/cjs/index.server.js" } - }, - "./import": { - "import": { - "default": "./build/import-hook.mjs" - } - }, - "./loader": { - "import": { - "default": "./build/loader-hook.mjs" - } } }, "typesVersions": { @@ -49,15 +39,7 @@ "publishConfig": { "access": "public" }, - "dependencies": { - "@opentelemetry/api": "^1.9.0", - "@opentelemetry/semantic-conventions": "^1.30.0", - "@sentry-internal/browser-utils": "9.5.0", - "@sentry/core": "9.5.0", - "@sentry/node": "9.5.0", - "@sentry/opentelemetry": "9.5.0", - "@sentry/react": "9.5.0" - }, + "dependencies": {}, "scripts": { "build": "run-p build:transpile build:types", "build:dev": "yarn build", diff --git a/packages/tanstackstart/rollup.npm.config.mjs b/packages/tanstackstart/rollup.npm.config.mjs index 9b334bdbae41..25850a8309c6 100644 --- a/packages/tanstackstart/rollup.npm.config.mjs +++ b/packages/tanstackstart/rollup.npm.config.mjs @@ -1,4 +1,4 @@ -import { makeBaseNPMConfig, makeNPMConfigVariants, makeOtelLoaders } from '@sentry-internal/rollup-utils'; +import { makeBaseNPMConfig, makeNPMConfigVariants } from '@sentry-internal/rollup-utils'; export default [ ...makeNPMConfigVariants( @@ -12,5 +12,4 @@ export default [ ], }), ), - ...makeOtelLoaders('./build', 'sentry-node'), ]; diff --git a/packages/tanstackstart/src/client/index.ts b/packages/tanstackstart/src/client/index.ts index c45aad673ad0..cb0ff5c3b541 100644 --- a/packages/tanstackstart/src/client/index.ts +++ b/packages/tanstackstart/src/client/index.ts @@ -1 +1 @@ -export * from '@sentry/react'; +export {}; diff --git a/packages/tanstackstart/src/common/index.ts b/packages/tanstackstart/src/common/index.ts index d83c684d1523..cb0ff5c3b541 100644 --- a/packages/tanstackstart/src/common/index.ts +++ b/packages/tanstackstart/src/common/index.ts @@ -1,23 +1 @@ -/** - * 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(); - }; -} - -/** - * Wraps a TanStack Start stream handler with Sentry instrumentation that can be passed to `createStartHandler(...)`. - */ -export function wrapStreamHandlerWithSentry(handler: H): H { - return handler; -} - -/** - * Wraps the create root route function with Sentry for server-client tracing with SSR. - */ -export function wrapCreateRootRouteWithSentry(createRootRoute: F): F { - return createRootRoute; -} +export {}; diff --git a/packages/tanstackstart/src/config/index.ts b/packages/tanstackstart/src/config/index.ts index 579fe3c7db00..cb0ff5c3b541 100644 --- a/packages/tanstackstart/src/config/index.ts +++ b/packages/tanstackstart/src/config/index.ts @@ -1,16 +1 @@ -/** - * Wraps a TanStack Start config. - */ -export function wrapVinxiConfigWithSentry( - config: C, - // TODO: Expand this type in the future. Right now it is just so that TS doesn't complain for our users when they copy paste from the docs. - // eslint-disable-next-line @typescript-eslint/no-unused-vars - sentryBuildOptions: { - org?: string; - project?: string; - silent?: boolean; - authToken?: boolean; - } = {}, -): C { - return config; -} +export {}; diff --git a/packages/tanstackstart/src/index.types.ts b/packages/tanstackstart/src/index.types.ts index 84a987788d17..13fa9080e92a 100644 --- a/packages/tanstackstart/src/index.types.ts +++ b/packages/tanstackstart/src/index.types.ts @@ -4,24 +4,3 @@ export * from './config'; export * from './client'; export * from './server'; export * from './common'; - -import type { Client, Integration, Options, StackParser } from '@sentry/core'; - -import type * as clientSdk from './client'; -import type * as serverSdk from './server'; - -/** Initializes Sentry TanStack Start SDK */ -export declare function init(options: Options | clientSdk.BrowserOptions | serverSdk.NodeOptions): Client | undefined; - -export declare const linkedErrorsIntegration: typeof clientSdk.linkedErrorsIntegration; -export declare const contextLinesIntegration: typeof clientSdk.contextLinesIntegration; - -export declare const getDefaultIntegrations: (options: Options) => Integration[]; -export declare const defaultStackParser: StackParser; - -export declare function getSentryRelease(fallback?: string): string | undefined; - -export declare const ErrorBoundary: typeof clientSdk.ErrorBoundary; -export declare const createReduxEnhancer: typeof clientSdk.createReduxEnhancer; -export declare const showReportDialog: typeof clientSdk.showReportDialog; -export declare const withErrorBoundary: typeof clientSdk.withErrorBoundary; diff --git a/packages/tanstackstart/src/server/index.ts b/packages/tanstackstart/src/server/index.ts index 91f80547f143..cb0ff5c3b541 100644 --- a/packages/tanstackstart/src/server/index.ts +++ b/packages/tanstackstart/src/server/index.ts @@ -1,42 +1 @@ -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; -} +export {}; diff --git a/yarn.lock b/yarn.lock index 758c24916a6d..33da7621e609 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10884,7 +10884,16 @@ aws-ssl-profiles@^1.1.1: resolved "https://registry.yarnpkg.com/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz#157dd77e9f19b1d123678e93f120e6f193022641" integrity sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g== -axios@1.7.7, axios@^1.0.0, axios@^1.7.7: +axios@1.8.2: + version "1.8.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.8.2.tgz#fabe06e241dfe83071d4edfbcaa7b1c3a40f7979" + integrity sha512-ls4GYBm5aig9vWx8AWDSGLpnpDQRtWAfrjU+EuytuODrFBkqesN2RkOQCBzrA1RQNHw1SmRMSDDDSwzNAYQ6Rg== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +axios@^1.0.0, axios@^1.7.7: version "1.7.7" resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.7.tgz#2f554296f9892a72ac8d8e4c5b79c14a91d0a47f" integrity sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q== @@ -28630,7 +28639,6 @@ stylus@0.59.0, stylus@^0.59.0: sucrase@^3.27.0, sucrase@^3.35.0, sucrase@getsentry/sucrase#es2020-polyfills: version "3.36.0" - uid fd682f6129e507c00bb4e6319cc5d6b767e36061 resolved "https://codeload.github.com/getsentry/sucrase/tar.gz/fd682f6129e507c00bb4e6319cc5d6b767e36061" dependencies: "@jridgewell/gen-mapping" "^0.3.2" From 94290842eda70e81e8d46a90780631bf674da59e Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Tue, 11 Mar 2025 12:17:12 +0100 Subject: [PATCH 2/2] Add to readme and bug template and update release checklist --- .github/ISSUE_TEMPLATE/bug.yml | 1 + README.md | 1 + docs/new-sdk-release-checklist.md | 6 ++++++ 3 files changed, 8 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml index a68dea235925..7446ed57aabc 100644 --- a/.github/ISSUE_TEMPLATE/bug.yml +++ b/.github/ISSUE_TEMPLATE/bug.yml @@ -50,6 +50,7 @@ body: - '@sentry/solidstart' - '@sentry/svelte' - '@sentry/sveltekit' + - '@sentry/tanstackstart-react' - '@sentry/vue' - '@sentry/wasm' - Sentry Browser Loader diff --git a/README.md b/README.md index 50f1b7125a94..8b22dafb0c63 100644 --- a/README.md +++ b/README.md @@ -60,6 +60,7 @@ package. Please refer to the README and instructions of those SDKs for more deta - [`@sentry/nestjs`](https://github.com/getsentry/sentry-javascript/tree/master/packages/nestjs): SDK for NestJS - [`@sentry/nextjs`](https://github.com/getsentry/sentry-javascript/tree/master/packages/nextjs): SDK for Next.js - [`@sentry/remix`](https://github.com/getsentry/sentry-javascript/tree/master/packages/remix): SDK for Remix +- [`@sentry/tanstackstart-react`](https://github.com/getsentry/sentry-javascript/tree/master/packages/tanstackstart-react): SDK for TanStack Start React - [`@sentry/aws-serverless`](https://github.com/getsentry/sentry-javascript/tree/master/packages/aws-serverless): SDK for AWS Lambda Functions - [`@sentry/google-cloud-serverless`](https://github.com/getsentry/sentry-javascript/tree/master/packages/google-cloud-serverless): diff --git a/docs/new-sdk-release-checklist.md b/docs/new-sdk-release-checklist.md index 7f1811e53d8f..3bf931a1dab4 100644 --- a/docs/new-sdk-release-checklist.md +++ b/docs/new-sdk-release-checklist.md @@ -62,6 +62,12 @@ differ slightly for other SDKs depending on how they are structured and how they - [ ] If the package you're adding is a dependency of fullstack framework (e.g. Remix or NextJS) SDKs, make sure that your package is added to the integration test apps' `"resolutions"` field in their `package.json`s. +- [ ] Add the new package to the "root" README inside the repository. + +- [ ] Add the new package to the GitHub Issue bug template. + +- [ ] Create label inside the GitHub repo named "Package: foobar". + ## Cutting the Release When you’re ready to make the first release, there are a couple of steps that need to be performed in the **correct