@sentry/tanstackstart-react 10.39.0-alpha.0 → 10.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/build/cjs/client/index.js +14 -0
  2. package/build/cjs/client/index.js.map +1 -1
  3. package/build/cjs/index.client.js +2 -0
  4. package/build/cjs/index.client.js.map +1 -1
  5. package/build/cjs/index.server.js +4 -2
  6. package/build/cjs/index.server.js.map +1 -1
  7. package/build/cjs/server/globalMiddleware.js +51 -0
  8. package/build/cjs/server/globalMiddleware.js.map +1 -0
  9. package/build/cjs/server/index.js +17 -3
  10. package/build/cjs/server/index.js.map +1 -1
  11. package/build/cjs/server/middleware.js +7 -2
  12. package/build/cjs/server/middleware.js.map +1 -1
  13. package/build/cjs/vite/index.js +8 -0
  14. package/build/cjs/vite/index.js.map +1 -0
  15. package/build/cjs/vite/sentryTanstackStart.js +1 -1
  16. package/build/cjs/vite/sentryTanstackStart.js.map +1 -1
  17. package/build/esm/client/index.js +13 -1
  18. package/build/esm/client/index.js.map +1 -1
  19. package/build/esm/index.client.js +1 -1
  20. package/build/esm/index.server.js +2 -2
  21. package/build/esm/package.json +1 -1
  22. package/build/esm/server/globalMiddleware.js +48 -0
  23. package/build/esm/server/globalMiddleware.js.map +1 -0
  24. package/build/esm/server/index.js +15 -4
  25. package/build/esm/server/index.js.map +1 -1
  26. package/build/esm/server/middleware.js +7 -3
  27. package/build/esm/server/middleware.js.map +1 -1
  28. package/build/esm/vite/index.js +2 -0
  29. package/build/esm/vite/index.js.map +1 -0
  30. package/build/esm/vite/sentryTanstackStart.js +1 -1
  31. package/build/esm/vite/sentryTanstackStart.js.map +1 -1
  32. package/build/types/client/index.d.ts +10 -0
  33. package/build/types/client/index.d.ts.map +1 -1
  34. package/build/types/common/types.d.ts +3 -2
  35. package/build/types/common/types.d.ts.map +1 -1
  36. package/build/types/index.server.d.ts +0 -1
  37. package/build/types/index.server.d.ts.map +1 -1
  38. package/build/types/index.types.d.ts +3 -1
  39. package/build/types/index.types.d.ts.map +1 -1
  40. package/build/types/server/globalMiddleware.d.ts +12 -0
  41. package/build/types/server/globalMiddleware.d.ts.map +1 -0
  42. package/build/types/server/index.d.ts +7 -0
  43. package/build/types/server/index.d.ts.map +1 -1
  44. package/build/types/server/middleware.d.ts +1 -0
  45. package/build/types/server/middleware.d.ts.map +1 -1
  46. package/build/types/vite/sentryTanstackStart.d.ts +1 -1
  47. package/build/types-ts3.8/client/index.d.ts +10 -0
  48. package/build/types-ts3.8/common/types.d.ts +3 -2
  49. package/build/types-ts3.8/index.server.d.ts +0 -1
  50. package/build/types-ts3.8/index.types.d.ts +3 -1
  51. package/build/types-ts3.8/server/globalMiddleware.d.ts +12 -0
  52. package/build/types-ts3.8/server/index.d.ts +7 -0
  53. package/build/types-ts3.8/server/middleware.d.ts +1 -0
  54. package/build/types-ts3.8/vite/sentryTanstackStart.d.ts +1 -1
  55. package/package.json +12 -8
@@ -11,7 +11,21 @@ function wrapMiddlewaresWithSentry(middlewares) {
11
11
  return Object.values(middlewares);
12
12
  }
13
13
 
14
+ /**
15
+ * No-op stub for client-side builds.
16
+ * The actual implementation is server-only, but this stub is needed to prevent rendering errors.
17
+ */
18
+ const sentryGlobalRequestMiddleware = { '~types': undefined, options: {} };
19
+
20
+ /**
21
+ * No-op stub for client-side builds.
22
+ * The actual implementation is server-only, but this stub is needed to prevent rendering errors.
23
+ */
24
+ const sentryGlobalFunctionMiddleware = { '~types': undefined, options: {} };
25
+
14
26
  exports.init = sdk.init;
27
+ exports.sentryGlobalFunctionMiddleware = sentryGlobalFunctionMiddleware;
28
+ exports.sentryGlobalRequestMiddleware = sentryGlobalRequestMiddleware;
15
29
  exports.wrapMiddlewaresWithSentry = wrapMiddlewaresWithSentry;
16
30
  Object.prototype.hasOwnProperty.call(react, '__proto__') &&
17
31
  !Object.prototype.hasOwnProperty.call(exports, '__proto__') &&
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/client/index.ts"],"sourcesContent":["// import/export got a false positive, and affects most of our index barrel files\n// can be removed once following issue is fixed: https://github.com/import-js/eslint-plugin-import/issues/703\n/* eslint-disable import/export */\nimport type { TanStackMiddlewareBase } from '../common/types';\n\nexport * from '@sentry/react';\n\nexport { init } from './sdk';\n\n/**\n * No-op stub for client-side builds.\n * The actual implementation is server-only, but this stub is needed to prevent build errors.\n */\nexport function wrapMiddlewaresWithSentry<T extends TanStackMiddlewareBase>(middlewares: Record<string, T>): T[] {\n return Object.values(middlewares);\n}\n"],"names":[],"mappings":";;;;;AASA;AACA;AACA;AACA;AACO,SAAS,yBAAyB,CAAmC,WAAW,EAA0B;AACjH,EAAE,OAAO,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;AACnC;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/client/index.ts"],"sourcesContent":["// import/export got a false positive, and affects most of our index barrel files\n// can be removed once following issue is fixed: https://github.com/import-js/eslint-plugin-import/issues/703\n/* eslint-disable import/export */\nimport type { TanStackMiddlewareBase } from '../common/types';\n\nexport * from '@sentry/react';\n\nexport { init } from './sdk';\n\n/**\n * No-op stub for client-side builds.\n * The actual implementation is server-only, but this stub is needed to prevent build errors.\n */\nexport function wrapMiddlewaresWithSentry<T extends TanStackMiddlewareBase>(middlewares: Record<string, T>): T[] {\n return Object.values(middlewares);\n}\n\n/**\n * No-op stub for client-side builds.\n * The actual implementation is server-only, but this stub is needed to prevent rendering errors.\n */\nexport const sentryGlobalRequestMiddleware: TanStackMiddlewareBase = { '~types': undefined, options: {} };\n\n/**\n * No-op stub for client-side builds.\n * The actual implementation is server-only, but this stub is needed to prevent rendering errors.\n */\nexport const sentryGlobalFunctionMiddleware: TanStackMiddlewareBase = { '~types': undefined, options: {} };\n"],"names":[],"mappings":";;;;;AASA;AACA;AACA;AACA;AACO,SAAS,yBAAyB,CAAmC,WAAW,EAA0B;AACjH,EAAE,OAAO,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;AACnC;;AAEA;AACA;AACA;AACA;AACO,MAAM,6BAA6B,GAA2B,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE;;AAErG;AACA;AACA;AACA;AACO,MAAM,8BAA8B,GAA2B,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE;;;;;;;;;;;;;;;;;"}
@@ -6,6 +6,8 @@ const sdk = require('./client/sdk.js');
6
6
 
7
7
 
8
8
 
9
+ exports.sentryGlobalFunctionMiddleware = index.sentryGlobalFunctionMiddleware;
10
+ exports.sentryGlobalRequestMiddleware = index.sentryGlobalRequestMiddleware;
9
11
  exports.wrapMiddlewaresWithSentry = index.wrapMiddlewaresWithSentry;
10
12
  exports.init = sdk.init;
11
13
  Object.prototype.hasOwnProperty.call(react, '__proto__') &&
@@ -1 +1 @@
1
- {"version":3,"file":"index.client.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.client.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;"}
@@ -1,18 +1,20 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
 
3
3
  const index = require('./server/index.js');
4
- const sentryTanstackStart = require('./vite/sentryTanstackStart.js');
5
4
  const node = require('@sentry/node');
6
5
  const sdk = require('./server/sdk.js');
6
+ const globalMiddleware = require('./server/globalMiddleware.js');
7
7
  const wrapFetchWithSentry = require('./server/wrapFetchWithSentry.js');
8
8
  const middleware = require('./server/middleware.js');
9
9
 
10
10
 
11
11
 
12
12
  exports.ErrorBoundary = index.ErrorBoundary;
13
+ exports.tanstackRouterBrowserTracingIntegration = index.tanstackRouterBrowserTracingIntegration;
13
14
  exports.withErrorBoundary = index.withErrorBoundary;
14
- exports.sentryTanstackStart = sentryTanstackStart.sentryTanstackStart;
15
15
  exports.init = sdk.init;
16
+ exports.sentryGlobalFunctionMiddleware = globalMiddleware.sentryGlobalFunctionMiddleware;
17
+ exports.sentryGlobalRequestMiddleware = globalMiddleware.sentryGlobalRequestMiddleware;
16
18
  exports.wrapFetchWithSentry = wrapFetchWithSentry.wrapFetchWithSentry;
17
19
  exports.wrapMiddlewaresWithSentry = middleware.wrapMiddlewaresWithSentry;
18
20
  Object.prototype.hasOwnProperty.call(node, '__proto__') &&
@@ -1 +1 @@
1
- {"version":3,"file":"index.server.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.server.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,51 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+
3
+ const core = require('@sentry/core');
4
+ const middleware = require('./middleware.js');
5
+
6
+ function createSentryMiddlewareHandler(mechanismType) {
7
+ return async function sentryMiddlewareHandler({ next }) {
8
+ try {
9
+ return await next();
10
+ } catch (e) {
11
+ core.captureException(e, {
12
+ mechanism: { type: mechanismType, handled: false },
13
+ });
14
+ throw e;
15
+ }
16
+ };
17
+ }
18
+
19
+ /**
20
+ * Global request middleware that captures errors from API route requests.
21
+ * Should be added as the first entry in the `requestMiddleware` array of `createStart()`.
22
+ */
23
+ const sentryGlobalRequestMiddleware = {
24
+ '~types': undefined,
25
+
26
+ options: {
27
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
+ server: createSentryMiddlewareHandler('auto.middleware.tanstackstart.request') ,
29
+ },
30
+ };
31
+
32
+ /**
33
+ * Global function middleware that captures errors from server function invocations.
34
+ * Should be added as the first entry in the `functionMiddleware` array of `createStart()`.
35
+ */
36
+ const sentryGlobalFunctionMiddleware = {
37
+ '~types': undefined,
38
+
39
+ options: {
40
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
41
+ server: createSentryMiddlewareHandler('auto.middleware.tanstackstart.server_function') ,
42
+ },
43
+ };
44
+
45
+ // Mark as internal so the Vite auto-instrumentation plugin skips these middleware
46
+ core.addNonEnumerableProperty(sentryGlobalRequestMiddleware, middleware.SENTRY_INTERNAL, true);
47
+ core.addNonEnumerableProperty(sentryGlobalFunctionMiddleware, middleware.SENTRY_INTERNAL, true);
48
+
49
+ exports.sentryGlobalFunctionMiddleware = sentryGlobalFunctionMiddleware;
50
+ exports.sentryGlobalRequestMiddleware = sentryGlobalRequestMiddleware;
51
+ //# sourceMappingURL=globalMiddleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"globalMiddleware.js","sources":["../../../src/server/globalMiddleware.ts"],"sourcesContent":["import { addNonEnumerableProperty, captureException } from '@sentry/core';\nimport type { TanStackMiddlewareBase } from '../common/types';\nimport { SENTRY_INTERNAL } from './middleware';\n\nfunction createSentryMiddlewareHandler(mechanismType: string) {\n return async function sentryMiddlewareHandler({ next }: { next: () => Promise<unknown> }): Promise<unknown> {\n try {\n return await next();\n } catch (e) {\n captureException(e, {\n mechanism: { type: mechanismType, handled: false },\n });\n throw e;\n }\n };\n}\n\n/**\n * Global request middleware that captures errors from API route requests.\n * Should be added as the first entry in the `requestMiddleware` array of `createStart()`.\n */\nexport const sentryGlobalRequestMiddleware: TanStackMiddlewareBase = {\n '~types': undefined,\n\n options: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n server: createSentryMiddlewareHandler('auto.middleware.tanstackstart.request') as (...args: any[]) => any,\n },\n};\n\n/**\n * Global function middleware that captures errors from server function invocations.\n * Should be added as the first entry in the `functionMiddleware` array of `createStart()`.\n */\nexport const sentryGlobalFunctionMiddleware: TanStackMiddlewareBase = {\n '~types': undefined,\n\n options: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n server: createSentryMiddlewareHandler('auto.middleware.tanstackstart.server_function') as (...args: any[]) => any,\n },\n};\n\n// Mark as internal so the Vite auto-instrumentation plugin skips these middleware\naddNonEnumerableProperty(sentryGlobalRequestMiddleware, SENTRY_INTERNAL, true);\naddNonEnumerableProperty(sentryGlobalFunctionMiddleware, SENTRY_INTERNAL, true);\n"],"names":["captureException","addNonEnumerableProperty","SENTRY_INTERNAL"],"mappings":";;;;;AAIA,SAAS,6BAA6B,CAAC,aAAa,EAAU;AAC9D,EAAE,OAAO,eAAe,uBAAuB,CAAC,EAAE,IAAA,EAAM,EAAsD;AAC9G,IAAI,IAAI;AACR,MAAM,OAAO,MAAM,IAAI,EAAE;AACzB,IAAI,CAAA,CAAE,OAAO,CAAC,EAAE;AAChB,MAAMA,qBAAgB,CAAC,CAAC,EAAE;AAC1B,QAAQ,SAAS,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,KAAA,EAAO;AAC1D,OAAO,CAAC;AACR,MAAM,MAAM,CAAC;AACb,IAAI;AACJ,EAAE,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACO,MAAM,6BAA6B,GAA2B;AACrE,EAAE,QAAQ,EAAE,SAAS;;AAErB,EAAE,OAAO,EAAE;AACX;AACA,IAAI,MAAM,EAAE,6BAA6B,CAAC,uCAAuC,CAAA;AACjF,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACO,MAAM,8BAA8B,GAA2B;AACtE,EAAE,QAAQ,EAAE,SAAS;;AAErB,EAAE,OAAO,EAAE;AACX;AACA,IAAI,MAAM,EAAE,6BAA6B,CAAC,+CAA+C,CAAA;AACzF,GAAG;AACH;;AAEA;AACAC,6BAAwB,CAAC,6BAA6B,EAAEC,0BAAe,EAAE,IAAI,CAAC;AAC9ED,6BAAwB,CAAC,8BAA8B,EAAEC,0BAAe,EAAE,IAAI,CAAC;;;;;"}
@@ -4,10 +4,21 @@ const node = require('@sentry/node');
4
4
  const sdk = require('./sdk.js');
5
5
  const wrapFetchWithSentry = require('./wrapFetchWithSentry.js');
6
6
  const middleware = require('./middleware.js');
7
+ const globalMiddleware = require('./globalMiddleware.js');
7
8
 
8
- // import/export got a false positive, and affects most of our index barrel files
9
- // can be removed once following issue is fixed: https://github.com/import-js/eslint-plugin-import/issues/703
10
- /* eslint-disable import/export */
9
+ /**
10
+ * A no-op stub of the browser tracing integration for the server. Router setup code is shared between client and server,
11
+ * so this stub is needed to prevent build errors during SSR bundling.
12
+ */
13
+ function tanstackRouterBrowserTracingIntegration(
14
+ _router,
15
+ _options,
16
+ ) {
17
+ return {
18
+ name: 'BrowserTracing',
19
+ setup() {},
20
+ };
21
+ }
11
22
 
12
23
  /**
13
24
  * A passthrough error boundary for the server that doesn't depend on any react. Error boundaries don't catch SSR errors
@@ -39,7 +50,10 @@ function withErrorBoundary(
39
50
  exports.init = sdk.init;
40
51
  exports.wrapFetchWithSentry = wrapFetchWithSentry.wrapFetchWithSentry;
41
52
  exports.wrapMiddlewaresWithSentry = middleware.wrapMiddlewaresWithSentry;
53
+ exports.sentryGlobalFunctionMiddleware = globalMiddleware.sentryGlobalFunctionMiddleware;
54
+ exports.sentryGlobalRequestMiddleware = globalMiddleware.sentryGlobalRequestMiddleware;
42
55
  exports.ErrorBoundary = ErrorBoundary;
56
+ exports.tanstackRouterBrowserTracingIntegration = tanstackRouterBrowserTracingIntegration;
43
57
  exports.withErrorBoundary = withErrorBoundary;
44
58
  Object.prototype.hasOwnProperty.call(node, '__proto__') &&
45
59
  !Object.prototype.hasOwnProperty.call(exports, '__proto__') &&
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/server/index.ts"],"sourcesContent":["// import/export got a false positive, and affects most of our index barrel files\n// can be removed once following issue is fixed: https://github.com/import-js/eslint-plugin-import/issues/703\n/* eslint-disable import/export */\nexport * from '@sentry/node';\n\nexport { init } from './sdk';\nexport { wrapFetchWithSentry } from './wrapFetchWithSentry';\nexport { wrapMiddlewaresWithSentry } from './middleware';\n\n/**\n * A passthrough error boundary for the server that doesn't depend on any react. Error boundaries don't catch SSR errors\n * so they should simply be a passthrough.\n */\nexport const ErrorBoundary = (props: React.PropsWithChildren<unknown>): React.ReactNode => {\n if (!props.children) {\n return null;\n }\n\n if (typeof props.children === 'function') {\n return (props.children as () => React.ReactNode)();\n }\n\n return props.children;\n};\n\n/**\n * A passthrough error boundary wrapper for the server that doesn't depend on any react. Error boundaries don't catch\n * SSR errors so they should simply be a passthrough.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function withErrorBoundary<P extends Record<string, any>>(\n WrappedComponent: React.ComponentType<P>,\n): React.FC<P> {\n return WrappedComponent as React.FC<P>;\n}\n"],"names":[],"mappings":";;;;;;;AAAA;AACA;AACA;;AAOA;AACA;AACA;AACA;AACO,MAAM,aAAA,GAAgB,CAAC,KAAK,KAAwD;AAC3F,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AACvB,IAAI,OAAO,IAAI;AACf,EAAE;;AAEF,EAAE,IAAI,OAAO,KAAK,CAAC,QAAA,KAAa,UAAU,EAAE;AAC5C,IAAI,OAAO,CAAC,KAAK,CAAC,QAAA,IAAoC;AACtD,EAAE;;AAEF,EAAE,OAAO,KAAK,CAAC,QAAQ;AACvB;;AAEA;AACA;AACA;AACA;AACA;AACO,SAAS,iBAAiB;AACjC,EAAE,gBAAgB;AAClB,EAAe;AACf,EAAE,OAAO,gBAAA;AACT;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/server/index.ts"],"sourcesContent":["// import/export got a false positive, and affects most of our index barrel files\n// can be removed once following issue is fixed: https://github.com/import-js/eslint-plugin-import/issues/703\n/* eslint-disable import/export */\nimport type { Integration } from '@sentry/core';\n\nexport * from '@sentry/node';\n\nexport { init } from './sdk';\nexport { wrapFetchWithSentry } from './wrapFetchWithSentry';\nexport { wrapMiddlewaresWithSentry } from './middleware';\nexport { sentryGlobalRequestMiddleware, sentryGlobalFunctionMiddleware } from './globalMiddleware';\n\n/**\n * A no-op stub of the browser tracing integration for the server. Router setup code is shared between client and server,\n * so this stub is needed to prevent build errors during SSR bundling.\n */\nexport function tanstackRouterBrowserTracingIntegration(\n _router: unknown,\n _options?: Record<string, unknown>,\n): Integration {\n return {\n name: 'BrowserTracing',\n setup() {},\n };\n}\n\n/**\n * A passthrough error boundary for the server that doesn't depend on any react. Error boundaries don't catch SSR errors\n * so they should simply be a passthrough.\n */\nexport const ErrorBoundary = (props: React.PropsWithChildren<unknown>): React.ReactNode => {\n if (!props.children) {\n return null;\n }\n\n if (typeof props.children === 'function') {\n return (props.children as () => React.ReactNode)();\n }\n\n return props.children;\n};\n\n/**\n * A passthrough error boundary wrapper for the server that doesn't depend on any react. Error boundaries don't catch\n * SSR errors so they should simply be a passthrough.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function withErrorBoundary<P extends Record<string, any>>(\n WrappedComponent: React.ComponentType<P>,\n): React.FC<P> {\n return WrappedComponent as React.FC<P>;\n}\n"],"names":[],"mappings":";;;;;;;;AAYA;AACA;AACA;AACA;AACO,SAAS,uCAAuC;AACvD,EAAE,OAAO;AACT,EAAE,QAAQ;AACV,EAAe;AACf,EAAE,OAAO;AACT,IAAI,IAAI,EAAE,gBAAgB;AAC1B,IAAI,KAAK,GAAG,CAAC,CAAC;AACd,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACO,MAAM,aAAA,GAAgB,CAAC,KAAK,KAAwD;AAC3F,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AACvB,IAAI,OAAO,IAAI;AACf,EAAE;;AAEF,EAAE,IAAI,OAAO,KAAK,CAAC,QAAA,KAAa,UAAU,EAAE;AAC5C,IAAI,OAAO,CAAC,KAAK,CAAC,QAAA,IAAoC;AACtD,EAAE;;AAEF,EAAE,OAAO,KAAK,CAAC,QAAQ;AACvB;;AAEA;AACA;AACA;AACA;AACA;AACO,SAAS,iBAAiB;AACjC,EAAE,gBAAgB;AAClB,EAAe;AACf,EAAE,OAAO,gBAAA;AACT;;;;;;;;;;;;;;;;;;;;;"}
@@ -5,6 +5,7 @@ const node = require('@sentry/node');
5
5
  const utils = require('./utils.js');
6
6
 
7
7
  const SENTRY_WRAPPED = '__SENTRY_WRAPPED__';
8
+ const SENTRY_INTERNAL = '__SENTRY_INTERNAL__';
8
9
 
9
10
  /**
10
11
  * Creates a proxy for the next function that ends the current span and restores the parent span.
@@ -39,8 +40,11 @@ function wrapMiddlewareWithSentry(
39
40
  middleware,
40
41
  options,
41
42
  ) {
42
- if ((middleware )[SENTRY_WRAPPED]) {
43
- // already instrumented
43
+ if (
44
+ (middleware )[SENTRY_WRAPPED] ||
45
+ (middleware )[SENTRY_INTERNAL]
46
+ ) {
47
+ // already instrumented or internal Sentry middleware
44
48
  return middleware;
45
49
  }
46
50
 
@@ -109,5 +113,6 @@ function wrapMiddlewaresWithSentry(middlewares) {
109
113
  });
110
114
  }
111
115
 
116
+ exports.SENTRY_INTERNAL = SENTRY_INTERNAL;
112
117
  exports.wrapMiddlewaresWithSentry = wrapMiddlewaresWithSentry;
113
118
  //# sourceMappingURL=middleware.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.js","sources":["../../../src/server/middleware.ts"],"sourcesContent":["import { addNonEnumerableProperty } from '@sentry/core';\nimport type { Span } from '@sentry/node';\nimport { getActiveSpan, startSpanManual, withActiveSpan } from '@sentry/node';\nimport type { MiddlewareWrapperOptions, TanStackMiddlewareBase } from '../common/types';\nimport { getMiddlewareSpanOptions } from './utils';\n\nconst SENTRY_WRAPPED = '__SENTRY_WRAPPED__';\n\n/**\n * Creates a proxy for the next function that ends the current span and restores the parent span.\n * This ensures that subsequent middleware spans are children of the root span, not nested children.\n */\nfunction getNextProxy<T extends (...args: unknown[]) => unknown>(\n next: T,\n span: Span,\n prevSpan: Span | undefined,\n nextState: { called: boolean },\n): T {\n return new Proxy(next, {\n apply: (originalNext, thisArgNext, argsNext) => {\n nextState.called = true;\n span.end();\n\n if (prevSpan) {\n return withActiveSpan(prevSpan, () => {\n return Reflect.apply(originalNext, thisArgNext, argsNext);\n });\n }\n\n return Reflect.apply(originalNext, thisArgNext, argsNext);\n },\n });\n}\n\n/**\n * Wraps a TanStack Start middleware with Sentry instrumentation to create spans.\n */\nfunction wrapMiddlewareWithSentry<T extends TanStackMiddlewareBase>(\n middleware: T,\n options: MiddlewareWrapperOptions,\n): T {\n if ((middleware as TanStackMiddlewareBase & { [SENTRY_WRAPPED]?: boolean })[SENTRY_WRAPPED]) {\n // already instrumented\n return middleware;\n }\n\n // instrument server middleware\n if (middleware.options?.server) {\n middleware.options.server = new Proxy(middleware.options.server, {\n apply: (originalServer, thisArgServer, argsServer) => {\n const prevSpan = getActiveSpan();\n\n return startSpanManual(getMiddlewareSpanOptions(options.name), async (span: Span) => {\n const nextState = { called: false };\n\n // The server function receives { next, context, request } as first argument\n // Users call next() inside their middleware to move down the middleware chain. We proxy next() to end the span when it is called.\n const middlewareArgs = argsServer[0] as { next?: (...args: unknown[]) => unknown } | undefined;\n if (middlewareArgs && typeof middlewareArgs === 'object' && typeof middlewareArgs.next === 'function') {\n middlewareArgs.next = getNextProxy(middlewareArgs.next, span, prevSpan, nextState);\n }\n\n try {\n const result = await originalServer.apply(thisArgServer, argsServer);\n\n // End span here if next() wasn't called, else we already ended it in next()\n if (!nextState.called) {\n span.end();\n }\n\n return result;\n } catch (e) {\n span.end();\n throw e;\n }\n });\n },\n });\n\n // mark as instrumented\n addNonEnumerableProperty(middleware as unknown as Record<string, unknown>, SENTRY_WRAPPED, true);\n }\n\n return middleware;\n}\n\n/**\n * Wraps multiple TanStack Start middlewares with Sentry instrumentation.\n * Object keys are used as span names to avoid users having to specify this manually.\n *\n * @example\n * ```ts\n * import { wrapMiddlewaresWithSentry } from '@sentry/tanstackstart-react';\n *\n * const wrappedMiddlewares = wrapMiddlewaresWithSentry({\n * authMiddleware,\n * loggingMiddleware,\n * });\n *\n * createServerFn().middleware(wrappedMiddlewares)\n * ```\n *\n * @param middlewares - An object containing middlewares\n * @returns An array of wrapped middlewares\n */\nexport function wrapMiddlewaresWithSentry<T extends TanStackMiddlewareBase>(middlewares: Record<string, T>): T[] {\n return Object.entries(middlewares).map(([name, middleware]) => {\n return wrapMiddlewareWithSentry(middleware, { name });\n });\n}\n"],"names":["withActiveSpan","getActiveSpan","startSpanManual","getMiddlewareSpanOptions","addNonEnumerableProperty"],"mappings":"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"}
1
+ {"version":3,"file":"middleware.js","sources":["../../../src/server/middleware.ts"],"sourcesContent":["import { addNonEnumerableProperty } from '@sentry/core';\nimport type { Span } from '@sentry/node';\nimport { getActiveSpan, startSpanManual, withActiveSpan } from '@sentry/node';\nimport type { MiddlewareWrapperOptions, TanStackMiddlewareBase } from '../common/types';\nimport { getMiddlewareSpanOptions } from './utils';\n\nconst SENTRY_WRAPPED = '__SENTRY_WRAPPED__';\nexport const SENTRY_INTERNAL = '__SENTRY_INTERNAL__';\n\n/**\n * Creates a proxy for the next function that ends the current span and restores the parent span.\n * This ensures that subsequent middleware spans are children of the root span, not nested children.\n */\nfunction getNextProxy<T extends (...args: unknown[]) => unknown>(\n next: T,\n span: Span,\n prevSpan: Span | undefined,\n nextState: { called: boolean },\n): T {\n return new Proxy(next, {\n apply: (originalNext, thisArgNext, argsNext) => {\n nextState.called = true;\n span.end();\n\n if (prevSpan) {\n return withActiveSpan(prevSpan, () => {\n return Reflect.apply(originalNext, thisArgNext, argsNext);\n });\n }\n\n return Reflect.apply(originalNext, thisArgNext, argsNext);\n },\n });\n}\n\n/**\n * Wraps a TanStack Start middleware with Sentry instrumentation to create spans.\n */\nfunction wrapMiddlewareWithSentry<T extends TanStackMiddlewareBase>(\n middleware: T,\n options: MiddlewareWrapperOptions,\n): T {\n if (\n (middleware as TanStackMiddlewareBase & { [SENTRY_WRAPPED]?: boolean })[SENTRY_WRAPPED] ||\n (middleware as TanStackMiddlewareBase & { [SENTRY_INTERNAL]?: boolean })[SENTRY_INTERNAL]\n ) {\n // already instrumented or internal Sentry middleware\n return middleware;\n }\n\n // instrument server middleware\n if (middleware.options?.server) {\n middleware.options.server = new Proxy(middleware.options.server, {\n apply: (originalServer, thisArgServer, argsServer) => {\n const prevSpan = getActiveSpan();\n\n return startSpanManual(getMiddlewareSpanOptions(options.name), async (span: Span) => {\n const nextState = { called: false };\n\n // The server function receives { next, context, request } as first argument\n // Users call next() inside their middleware to move down the middleware chain. We proxy next() to end the span when it is called.\n const middlewareArgs = argsServer[0] as { next?: (...args: unknown[]) => unknown } | undefined;\n if (middlewareArgs && typeof middlewareArgs === 'object' && typeof middlewareArgs.next === 'function') {\n middlewareArgs.next = getNextProxy(middlewareArgs.next, span, prevSpan, nextState);\n }\n\n try {\n const result = await originalServer.apply(thisArgServer, argsServer);\n\n // End span here if next() wasn't called, else we already ended it in next()\n if (!nextState.called) {\n span.end();\n }\n\n return result;\n } catch (e) {\n span.end();\n throw e;\n }\n });\n },\n });\n\n // mark as instrumented\n addNonEnumerableProperty(middleware as unknown as Record<string, unknown>, SENTRY_WRAPPED, true);\n }\n\n return middleware;\n}\n\n/**\n * Wraps multiple TanStack Start middlewares with Sentry instrumentation.\n * Object keys are used as span names to avoid users having to specify this manually.\n *\n * @example\n * ```ts\n * import { wrapMiddlewaresWithSentry } from '@sentry/tanstackstart-react';\n *\n * const wrappedMiddlewares = wrapMiddlewaresWithSentry({\n * authMiddleware,\n * loggingMiddleware,\n * });\n *\n * createServerFn().middleware(wrappedMiddlewares)\n * ```\n *\n * @param middlewares - An object containing middlewares\n * @returns An array of wrapped middlewares\n */\nexport function wrapMiddlewaresWithSentry<T extends TanStackMiddlewareBase>(middlewares: Record<string, T>): T[] {\n return Object.entries(middlewares).map(([name, middleware]) => {\n return wrapMiddlewareWithSentry(middleware, { name });\n });\n}\n"],"names":["withActiveSpan","getActiveSpan","startSpanManual","getMiddlewareSpanOptions","addNonEnumerableProperty"],"mappings":";;;;;;AAMA,MAAM,cAAA,GAAiB,oBAAoB;AACpC,MAAM,eAAA,GAAkB;;AAE/B;AACA;AACA;AACA;AACA,SAAS,YAAY;AACrB,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,QAAQ;AACV,EAAE,SAAS;AACX,EAAK;AACL,EAAE,OAAO,IAAI,KAAK,CAAC,IAAI,EAAE;AACzB,IAAI,KAAK,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,QAAQ,KAAK;AACpD,MAAM,SAAS,CAAC,MAAA,GAAS,IAAI;AAC7B,MAAM,IAAI,CAAC,GAAG,EAAE;;AAEhB,MAAM,IAAI,QAAQ,EAAE;AACpB,QAAQ,OAAOA,mBAAc,CAAC,QAAQ,EAAE,MAAM;AAC9C,UAAU,OAAO,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,WAAW,EAAE,QAAQ,CAAC;AACnE,QAAQ,CAAC,CAAC;AACV,MAAM;;AAEN,MAAM,OAAO,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,WAAW,EAAE,QAAQ,CAAC;AAC/D,IAAI,CAAC;AACL,GAAG,CAAC;AACJ;;AAEA;AACA;AACA;AACA,SAAS,wBAAwB;AACjC,EAAE,UAAU;AACZ,EAAE,OAAO;AACT,EAAK;AACL,EAAE;AACF,IAAI,CAAC,UAAA,GAAuE,cAAc,CAAA;AAC1F,IAAI,CAAC,UAAA,GAAwE,eAAe;AAC5F,IAAI;AACJ;AACA,IAAI,OAAO,UAAU;AACrB,EAAE;;AAEF;AACA,EAAE,IAAI,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE;AAClC,IAAI,UAAU,CAAC,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE;AACrE,MAAM,KAAK,EAAE,CAAC,cAAc,EAAE,aAAa,EAAE,UAAU,KAAK;AAC5D,QAAQ,MAAM,QAAA,GAAWC,kBAAa,EAAE;;AAExC,QAAQ,OAAOC,oBAAe,CAACC,8BAAwB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,IAAI,KAAW;AAC7F,UAAU,MAAM,SAAA,GAAY,EAAE,MAAM,EAAE,OAAO;;AAE7C;AACA;AACA,UAAU,MAAM,cAAA,GAAiB,UAAU,CAAC,CAAC,CAAA;AAC7C,UAAU,IAAI,cAAA,IAAkB,OAAO,cAAA,KAAmB,QAAA,IAAY,OAAO,cAAc,CAAC,IAAA,KAAS,UAAU,EAAE;AACjH,YAAY,cAAc,CAAC,IAAA,GAAO,YAAY,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC;AAC9F,UAAU;;AAEV,UAAU,IAAI;AACd,YAAY,MAAM,MAAA,GAAS,MAAM,cAAc,CAAC,KAAK,CAAC,aAAa,EAAE,UAAU,CAAC;;AAEhF;AACA,YAAY,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AACnC,cAAc,IAAI,CAAC,GAAG,EAAE;AACxB,YAAY;;AAEZ,YAAY,OAAO,MAAM;AACzB,UAAU,CAAA,CAAE,OAAO,CAAC,EAAE;AACtB,YAAY,IAAI,CAAC,GAAG,EAAE;AACtB,YAAY,MAAM,CAAC;AACnB,UAAU;AACV,QAAQ,CAAC,CAAC;AACV,MAAM,CAAC;AACP,KAAK,CAAC;;AAEN;AACA,IAAIC,6BAAwB,CAAC,UAAA,GAAkD,cAAc,EAAE,IAAI,CAAC;AACpG,EAAE;;AAEF,EAAE,OAAO,UAAU;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,yBAAyB,CAAmC,WAAW,EAA0B;AACjH,EAAE,OAAO,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK;AACjE,IAAI,OAAO,wBAAwB,CAAC,UAAU,EAAE,EAAE,IAAA,EAAM,CAAC;AACzD,EAAE,CAAC,CAAC;AACJ;;;;;"}
@@ -0,0 +1,8 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+
3
+ const sentryTanstackStart = require('./sentryTanstackStart.js');
4
+
5
+
6
+
7
+ exports.sentryTanstackStart = sentryTanstackStart.sentryTanstackStart;
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -14,7 +14,7 @@ const sourceMaps = require('./sourceMaps.js');
14
14
  * ```typescript
15
15
  * // vite.config.ts
16
16
  * import { defineConfig } from 'vite';
17
- * import { sentryTanstackStart } from '@sentry/tanstackstart-react';
17
+ * import { sentryTanstackStart } from '@sentry/tanstackstart-react/vite';
18
18
  * import { tanstackStart } from '@tanstack/react-start/plugin/vite';
19
19
  *
20
20
  * export default defineConfig({
@@ -1 +1 @@
1
- {"version":3,"file":"sentryTanstackStart.js","sources":["../../../src/vite/sentryTanstackStart.ts"],"sourcesContent":["import type { BuildTimeOptionsBase } from '@sentry/core';\nimport type { Plugin } from 'vite';\nimport { makeAutoInstrumentMiddlewarePlugin } from './autoInstrumentMiddleware';\nimport { makeAddSentryVitePlugin, makeEnableSourceMapsVitePlugin } from './sourceMaps';\n\n/**\n * Build-time options for the Sentry TanStack Start SDK.\n */\nexport interface SentryTanstackStartOptions extends BuildTimeOptionsBase {\n /**\n * If this flag is `true`, the Sentry plugins will automatically instrument TanStack Start middlewares.\n *\n * This wraps global middlewares (`requestMiddleware` and `functionMiddleware`) in `createStart()` with Sentry\n * instrumentation to capture performance data.\n *\n * Set to `false` to disable automatic middleware instrumentation if you prefer to wrap middlewares manually\n * using `wrapMiddlewaresWithSentry`.\n *\n * @default true\n */\n autoInstrumentMiddleware?: boolean;\n}\n\n/**\n * Vite plugins for the Sentry TanStack Start SDK.\n *\n * @example\n * ```typescript\n * // vite.config.ts\n * import { defineConfig } from 'vite';\n * import { sentryTanstackStart } from '@sentry/tanstackstart-react';\n * import { tanstackStart } from '@tanstack/react-start/plugin/vite';\n *\n * export default defineConfig({\n * plugins: [\n * tanstackStart(),\n * sentryTanstackStart({\n * org: 'your-org',\n * project: 'your-project',\n * }),\n * ],\n * });\n * ```\n *\n * @param options - Options to configure the Sentry Vite plugins\n * @returns An array of Vite plugins\n */\nexport function sentryTanstackStart(options: SentryTanstackStartOptions = {}): Plugin[] {\n // only add plugins in production builds\n if (process.env.NODE_ENV === 'development') {\n return [];\n }\n\n const plugins: Plugin[] = [...makeAddSentryVitePlugin(options)];\n\n // middleware auto-instrumentation\n if (options.autoInstrumentMiddleware !== false) {\n plugins.push(makeAutoInstrumentMiddlewarePlugin({ enabled: true, debug: options.debug }));\n }\n\n // source maps\n const sourceMapsDisabled = options.sourcemaps?.disable === true || options.sourcemaps?.disable === 'disable-upload';\n if (!sourceMapsDisabled) {\n plugins.push(...makeEnableSourceMapsVitePlugin(options));\n }\n\n return plugins;\n}\n"],"names":["makeAddSentryVitePlugin","makeAutoInstrumentMiddlewarePlugin","makeEnableSourceMapsVitePlugin"],"mappings":";;;;;AAKA;AACA;AACA;;AAgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,mBAAmB,CAAC,OAAO,GAA+B,EAAE,EAAY;AACxF;AACA,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,QAAA,KAAa,aAAa,EAAE;AAC9C,IAAI,OAAO,EAAE;AACb,EAAE;;AAEF,EAAE,MAAM,OAAO,GAAa,CAAC,GAAGA,kCAAuB,CAAC,OAAO,CAAC,CAAC;;AAEjE;AACA,EAAE,IAAI,OAAO,CAAC,wBAAA,KAA6B,KAAK,EAAE;AAClD,IAAI,OAAO,CAAC,IAAI,CAACC,2DAAkC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,KAAA,EAAO,CAAC,CAAC;AAC7F,EAAE;;AAEF;AACA,EAAE,MAAM,kBAAA,GAAqB,OAAO,CAAC,UAAU,EAAE,OAAA,KAAY,IAAA,IAAQ,OAAO,CAAC,UAAU,EAAE,OAAA,KAAY,gBAAgB;AACrH,EAAE,IAAI,CAAC,kBAAkB,EAAE;AAC3B,IAAI,OAAO,CAAC,IAAI,CAAC,GAAGC,yCAA8B,CAAC,OAAO,CAAC,CAAC;AAC5D,EAAE;;AAEF,EAAE,OAAO,OAAO;AAChB;;;;"}
1
+ {"version":3,"file":"sentryTanstackStart.js","sources":["../../../src/vite/sentryTanstackStart.ts"],"sourcesContent":["import type { BuildTimeOptionsBase } from '@sentry/core';\nimport type { Plugin } from 'vite';\nimport { makeAutoInstrumentMiddlewarePlugin } from './autoInstrumentMiddleware';\nimport { makeAddSentryVitePlugin, makeEnableSourceMapsVitePlugin } from './sourceMaps';\n\n/**\n * Build-time options for the Sentry TanStack Start SDK.\n */\nexport interface SentryTanstackStartOptions extends BuildTimeOptionsBase {\n /**\n * If this flag is `true`, the Sentry plugins will automatically instrument TanStack Start middlewares.\n *\n * This wraps global middlewares (`requestMiddleware` and `functionMiddleware`) in `createStart()` with Sentry\n * instrumentation to capture performance data.\n *\n * Set to `false` to disable automatic middleware instrumentation if you prefer to wrap middlewares manually\n * using `wrapMiddlewaresWithSentry`.\n *\n * @default true\n */\n autoInstrumentMiddleware?: boolean;\n}\n\n/**\n * Vite plugins for the Sentry TanStack Start SDK.\n *\n * @example\n * ```typescript\n * // vite.config.ts\n * import { defineConfig } from 'vite';\n * import { sentryTanstackStart } from '@sentry/tanstackstart-react/vite';\n * import { tanstackStart } from '@tanstack/react-start/plugin/vite';\n *\n * export default defineConfig({\n * plugins: [\n * tanstackStart(),\n * sentryTanstackStart({\n * org: 'your-org',\n * project: 'your-project',\n * }),\n * ],\n * });\n * ```\n *\n * @param options - Options to configure the Sentry Vite plugins\n * @returns An array of Vite plugins\n */\nexport function sentryTanstackStart(options: SentryTanstackStartOptions = {}): Plugin[] {\n // only add plugins in production builds\n if (process.env.NODE_ENV === 'development') {\n return [];\n }\n\n const plugins: Plugin[] = [...makeAddSentryVitePlugin(options)];\n\n // middleware auto-instrumentation\n if (options.autoInstrumentMiddleware !== false) {\n plugins.push(makeAutoInstrumentMiddlewarePlugin({ enabled: true, debug: options.debug }));\n }\n\n // source maps\n const sourceMapsDisabled = options.sourcemaps?.disable === true || options.sourcemaps?.disable === 'disable-upload';\n if (!sourceMapsDisabled) {\n plugins.push(...makeEnableSourceMapsVitePlugin(options));\n }\n\n return plugins;\n}\n"],"names":["makeAddSentryVitePlugin","makeAutoInstrumentMiddlewarePlugin","makeEnableSourceMapsVitePlugin"],"mappings":";;;;;AAKA;AACA;AACA;;AAgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,mBAAmB,CAAC,OAAO,GAA+B,EAAE,EAAY;AACxF;AACA,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,QAAA,KAAa,aAAa,EAAE;AAC9C,IAAI,OAAO,EAAE;AACb,EAAE;;AAEF,EAAE,MAAM,OAAO,GAAa,CAAC,GAAGA,kCAAuB,CAAC,OAAO,CAAC,CAAC;;AAEjE;AACA,EAAE,IAAI,OAAO,CAAC,wBAAA,KAA6B,KAAK,EAAE;AAClD,IAAI,OAAO,CAAC,IAAI,CAACC,2DAAkC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,KAAA,EAAO,CAAC,CAAC;AAC7F,EAAE;;AAEF;AACA,EAAE,MAAM,kBAAA,GAAqB,OAAO,CAAC,UAAU,EAAE,OAAA,KAAY,IAAA,IAAQ,OAAO,CAAC,UAAU,EAAE,OAAA,KAAY,gBAAgB;AACrH,EAAE,IAAI,CAAC,kBAAkB,EAAE;AAC3B,IAAI,OAAO,CAAC,IAAI,CAAC,GAAGC,yCAA8B,CAAC,OAAO,CAAC,CAAC;AAC5D,EAAE;;AAEF,EAAE,OAAO,OAAO;AAChB;;;;"}
@@ -9,5 +9,17 @@ function wrapMiddlewaresWithSentry(middlewares) {
9
9
  return Object.values(middlewares);
10
10
  }
11
11
 
12
- export { wrapMiddlewaresWithSentry };
12
+ /**
13
+ * No-op stub for client-side builds.
14
+ * The actual implementation is server-only, but this stub is needed to prevent rendering errors.
15
+ */
16
+ const sentryGlobalRequestMiddleware = { '~types': undefined, options: {} };
17
+
18
+ /**
19
+ * No-op stub for client-side builds.
20
+ * The actual implementation is server-only, but this stub is needed to prevent rendering errors.
21
+ */
22
+ const sentryGlobalFunctionMiddleware = { '~types': undefined, options: {} };
23
+
24
+ export { sentryGlobalFunctionMiddleware, sentryGlobalRequestMiddleware, wrapMiddlewaresWithSentry };
13
25
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/client/index.ts"],"sourcesContent":["// import/export got a false positive, and affects most of our index barrel files\n// can be removed once following issue is fixed: https://github.com/import-js/eslint-plugin-import/issues/703\n/* eslint-disable import/export */\nimport type { TanStackMiddlewareBase } from '../common/types';\n\nexport * from '@sentry/react';\n\nexport { init } from './sdk';\n\n/**\n * No-op stub for client-side builds.\n * The actual implementation is server-only, but this stub is needed to prevent build errors.\n */\nexport function wrapMiddlewaresWithSentry<T extends TanStackMiddlewareBase>(middlewares: Record<string, T>): T[] {\n return Object.values(middlewares);\n}\n"],"names":[],"mappings":";;;AASA;AACA;AACA;AACA;AACO,SAAS,yBAAyB,CAAmC,WAAW,EAA0B;AACjH,EAAE,OAAO,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;AACnC;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/client/index.ts"],"sourcesContent":["// import/export got a false positive, and affects most of our index barrel files\n// can be removed once following issue is fixed: https://github.com/import-js/eslint-plugin-import/issues/703\n/* eslint-disable import/export */\nimport type { TanStackMiddlewareBase } from '../common/types';\n\nexport * from '@sentry/react';\n\nexport { init } from './sdk';\n\n/**\n * No-op stub for client-side builds.\n * The actual implementation is server-only, but this stub is needed to prevent build errors.\n */\nexport function wrapMiddlewaresWithSentry<T extends TanStackMiddlewareBase>(middlewares: Record<string, T>): T[] {\n return Object.values(middlewares);\n}\n\n/**\n * No-op stub for client-side builds.\n * The actual implementation is server-only, but this stub is needed to prevent rendering errors.\n */\nexport const sentryGlobalRequestMiddleware: TanStackMiddlewareBase = { '~types': undefined, options: {} };\n\n/**\n * No-op stub for client-side builds.\n * The actual implementation is server-only, but this stub is needed to prevent rendering errors.\n */\nexport const sentryGlobalFunctionMiddleware: TanStackMiddlewareBase = { '~types': undefined, options: {} };\n"],"names":[],"mappings":";;;AASA;AACA;AACA;AACA;AACO,SAAS,yBAAyB,CAAmC,WAAW,EAA0B;AACjH,EAAE,OAAO,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;AACnC;;AAEA;AACA;AACA;AACA;AACO,MAAM,6BAA6B,GAA2B,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE;;AAErG;AACA;AACA;AACA;AACO,MAAM,8BAA8B,GAA2B,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE;;;;"}
@@ -1,4 +1,4 @@
1
- export { wrapMiddlewaresWithSentry } from './client/index.js';
1
+ export { sentryGlobalFunctionMiddleware, sentryGlobalRequestMiddleware, wrapMiddlewaresWithSentry } from './client/index.js';
2
2
  export * from '@sentry/react';
3
3
  export { init } from './client/sdk.js';
4
4
  //# sourceMappingURL=index.client.js.map
@@ -1,7 +1,7 @@
1
- export { ErrorBoundary, withErrorBoundary } from './server/index.js';
2
- export { sentryTanstackStart } from './vite/sentryTanstackStart.js';
1
+ export { ErrorBoundary, tanstackRouterBrowserTracingIntegration, withErrorBoundary } from './server/index.js';
3
2
  export * from '@sentry/node';
4
3
  export { init } from './server/sdk.js';
4
+ export { sentryGlobalFunctionMiddleware, sentryGlobalRequestMiddleware } from './server/globalMiddleware.js';
5
5
  export { wrapFetchWithSentry } from './server/wrapFetchWithSentry.js';
6
6
  export { wrapMiddlewaresWithSentry } from './server/middleware.js';
7
7
  //# sourceMappingURL=index.server.js.map
@@ -1 +1 @@
1
- {"type":"module","version":"10.39.0-alpha.0","sideEffects":false}
1
+ {"type":"module","version":"10.40.0","sideEffects":false}
@@ -0,0 +1,48 @@
1
+ import { addNonEnumerableProperty, captureException } from '@sentry/core';
2
+ import { SENTRY_INTERNAL } from './middleware.js';
3
+
4
+ function createSentryMiddlewareHandler(mechanismType) {
5
+ return async function sentryMiddlewareHandler({ next }) {
6
+ try {
7
+ return await next();
8
+ } catch (e) {
9
+ captureException(e, {
10
+ mechanism: { type: mechanismType, handled: false },
11
+ });
12
+ throw e;
13
+ }
14
+ };
15
+ }
16
+
17
+ /**
18
+ * Global request middleware that captures errors from API route requests.
19
+ * Should be added as the first entry in the `requestMiddleware` array of `createStart()`.
20
+ */
21
+ const sentryGlobalRequestMiddleware = {
22
+ '~types': undefined,
23
+
24
+ options: {
25
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
26
+ server: createSentryMiddlewareHandler('auto.middleware.tanstackstart.request') ,
27
+ },
28
+ };
29
+
30
+ /**
31
+ * Global function middleware that captures errors from server function invocations.
32
+ * Should be added as the first entry in the `functionMiddleware` array of `createStart()`.
33
+ */
34
+ const sentryGlobalFunctionMiddleware = {
35
+ '~types': undefined,
36
+
37
+ options: {
38
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
39
+ server: createSentryMiddlewareHandler('auto.middleware.tanstackstart.server_function') ,
40
+ },
41
+ };
42
+
43
+ // Mark as internal so the Vite auto-instrumentation plugin skips these middleware
44
+ addNonEnumerableProperty(sentryGlobalRequestMiddleware, SENTRY_INTERNAL, true);
45
+ addNonEnumerableProperty(sentryGlobalFunctionMiddleware, SENTRY_INTERNAL, true);
46
+
47
+ export { sentryGlobalFunctionMiddleware, sentryGlobalRequestMiddleware };
48
+ //# sourceMappingURL=globalMiddleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"globalMiddleware.js","sources":["../../../src/server/globalMiddleware.ts"],"sourcesContent":["import { addNonEnumerableProperty, captureException } from '@sentry/core';\nimport type { TanStackMiddlewareBase } from '../common/types';\nimport { SENTRY_INTERNAL } from './middleware';\n\nfunction createSentryMiddlewareHandler(mechanismType: string) {\n return async function sentryMiddlewareHandler({ next }: { next: () => Promise<unknown> }): Promise<unknown> {\n try {\n return await next();\n } catch (e) {\n captureException(e, {\n mechanism: { type: mechanismType, handled: false },\n });\n throw e;\n }\n };\n}\n\n/**\n * Global request middleware that captures errors from API route requests.\n * Should be added as the first entry in the `requestMiddleware` array of `createStart()`.\n */\nexport const sentryGlobalRequestMiddleware: TanStackMiddlewareBase = {\n '~types': undefined,\n\n options: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n server: createSentryMiddlewareHandler('auto.middleware.tanstackstart.request') as (...args: any[]) => any,\n },\n};\n\n/**\n * Global function middleware that captures errors from server function invocations.\n * Should be added as the first entry in the `functionMiddleware` array of `createStart()`.\n */\nexport const sentryGlobalFunctionMiddleware: TanStackMiddlewareBase = {\n '~types': undefined,\n\n options: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n server: createSentryMiddlewareHandler('auto.middleware.tanstackstart.server_function') as (...args: any[]) => any,\n },\n};\n\n// Mark as internal so the Vite auto-instrumentation plugin skips these middleware\naddNonEnumerableProperty(sentryGlobalRequestMiddleware, SENTRY_INTERNAL, true);\naddNonEnumerableProperty(sentryGlobalFunctionMiddleware, SENTRY_INTERNAL, true);\n"],"names":[],"mappings":";;;AAIA,SAAS,6BAA6B,CAAC,aAAa,EAAU;AAC9D,EAAE,OAAO,eAAe,uBAAuB,CAAC,EAAE,IAAA,EAAM,EAAsD;AAC9G,IAAI,IAAI;AACR,MAAM,OAAO,MAAM,IAAI,EAAE;AACzB,IAAI,CAAA,CAAE,OAAO,CAAC,EAAE;AAChB,MAAM,gBAAgB,CAAC,CAAC,EAAE;AAC1B,QAAQ,SAAS,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,KAAA,EAAO;AAC1D,OAAO,CAAC;AACR,MAAM,MAAM,CAAC;AACb,IAAI;AACJ,EAAE,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACO,MAAM,6BAA6B,GAA2B;AACrE,EAAE,QAAQ,EAAE,SAAS;;AAErB,EAAE,OAAO,EAAE;AACX;AACA,IAAI,MAAM,EAAE,6BAA6B,CAAC,uCAAuC,CAAA;AACjF,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACO,MAAM,8BAA8B,GAA2B;AACtE,EAAE,QAAQ,EAAE,SAAS;;AAErB,EAAE,OAAO,EAAE;AACX;AACA,IAAI,MAAM,EAAE,6BAA6B,CAAC,+CAA+C,CAAA;AACzF,GAAG;AACH;;AAEA;AACA,wBAAwB,CAAC,6BAA6B,EAAE,eAAe,EAAE,IAAI,CAAC;AAC9E,wBAAwB,CAAC,8BAA8B,EAAE,eAAe,EAAE,IAAI,CAAC;;;;"}
@@ -2,10 +2,21 @@ export * from '@sentry/node';
2
2
  export { init } from './sdk.js';
3
3
  export { wrapFetchWithSentry } from './wrapFetchWithSentry.js';
4
4
  export { wrapMiddlewaresWithSentry } from './middleware.js';
5
+ export { sentryGlobalFunctionMiddleware, sentryGlobalRequestMiddleware } from './globalMiddleware.js';
5
6
 
6
- // import/export got a false positive, and affects most of our index barrel files
7
- // can be removed once following issue is fixed: https://github.com/import-js/eslint-plugin-import/issues/703
8
- /* eslint-disable import/export */
7
+ /**
8
+ * A no-op stub of the browser tracing integration for the server. Router setup code is shared between client and server,
9
+ * so this stub is needed to prevent build errors during SSR bundling.
10
+ */
11
+ function tanstackRouterBrowserTracingIntegration(
12
+ _router,
13
+ _options,
14
+ ) {
15
+ return {
16
+ name: 'BrowserTracing',
17
+ setup() {},
18
+ };
19
+ }
9
20
 
10
21
  /**
11
22
  * A passthrough error boundary for the server that doesn't depend on any react. Error boundaries don't catch SSR errors
@@ -34,5 +45,5 @@ function withErrorBoundary(
34
45
  return WrappedComponent ;
35
46
  }
36
47
 
37
- export { ErrorBoundary, withErrorBoundary };
48
+ export { ErrorBoundary, tanstackRouterBrowserTracingIntegration, withErrorBoundary };
38
49
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/server/index.ts"],"sourcesContent":["// import/export got a false positive, and affects most of our index barrel files\n// can be removed once following issue is fixed: https://github.com/import-js/eslint-plugin-import/issues/703\n/* eslint-disable import/export */\nexport * from '@sentry/node';\n\nexport { init } from './sdk';\nexport { wrapFetchWithSentry } from './wrapFetchWithSentry';\nexport { wrapMiddlewaresWithSentry } from './middleware';\n\n/**\n * A passthrough error boundary for the server that doesn't depend on any react. Error boundaries don't catch SSR errors\n * so they should simply be a passthrough.\n */\nexport const ErrorBoundary = (props: React.PropsWithChildren<unknown>): React.ReactNode => {\n if (!props.children) {\n return null;\n }\n\n if (typeof props.children === 'function') {\n return (props.children as () => React.ReactNode)();\n }\n\n return props.children;\n};\n\n/**\n * A passthrough error boundary wrapper for the server that doesn't depend on any react. Error boundaries don't catch\n * SSR errors so they should simply be a passthrough.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function withErrorBoundary<P extends Record<string, any>>(\n WrappedComponent: React.ComponentType<P>,\n): React.FC<P> {\n return WrappedComponent as React.FC<P>;\n}\n"],"names":[],"mappings":";;;;;AAAA;AACA;AACA;;AAOA;AACA;AACA;AACA;AACO,MAAM,aAAA,GAAgB,CAAC,KAAK,KAAwD;AAC3F,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AACvB,IAAI,OAAO,IAAI;AACf,EAAE;;AAEF,EAAE,IAAI,OAAO,KAAK,CAAC,QAAA,KAAa,UAAU,EAAE;AAC5C,IAAI,OAAO,CAAC,KAAK,CAAC,QAAA,IAAoC;AACtD,EAAE;;AAEF,EAAE,OAAO,KAAK,CAAC,QAAQ;AACvB;;AAEA;AACA;AACA;AACA;AACA;AACO,SAAS,iBAAiB;AACjC,EAAE,gBAAgB;AAClB,EAAe;AACf,EAAE,OAAO,gBAAA;AACT;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/server/index.ts"],"sourcesContent":["// import/export got a false positive, and affects most of our index barrel files\n// can be removed once following issue is fixed: https://github.com/import-js/eslint-plugin-import/issues/703\n/* eslint-disable import/export */\nimport type { Integration } from '@sentry/core';\n\nexport * from '@sentry/node';\n\nexport { init } from './sdk';\nexport { wrapFetchWithSentry } from './wrapFetchWithSentry';\nexport { wrapMiddlewaresWithSentry } from './middleware';\nexport { sentryGlobalRequestMiddleware, sentryGlobalFunctionMiddleware } from './globalMiddleware';\n\n/**\n * A no-op stub of the browser tracing integration for the server. Router setup code is shared between client and server,\n * so this stub is needed to prevent build errors during SSR bundling.\n */\nexport function tanstackRouterBrowserTracingIntegration(\n _router: unknown,\n _options?: Record<string, unknown>,\n): Integration {\n return {\n name: 'BrowserTracing',\n setup() {},\n };\n}\n\n/**\n * A passthrough error boundary for the server that doesn't depend on any react. Error boundaries don't catch SSR errors\n * so they should simply be a passthrough.\n */\nexport const ErrorBoundary = (props: React.PropsWithChildren<unknown>): React.ReactNode => {\n if (!props.children) {\n return null;\n }\n\n if (typeof props.children === 'function') {\n return (props.children as () => React.ReactNode)();\n }\n\n return props.children;\n};\n\n/**\n * A passthrough error boundary wrapper for the server that doesn't depend on any react. Error boundaries don't catch\n * SSR errors so they should simply be a passthrough.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function withErrorBoundary<P extends Record<string, any>>(\n WrappedComponent: React.ComponentType<P>,\n): React.FC<P> {\n return WrappedComponent as React.FC<P>;\n}\n"],"names":[],"mappings":";;;;;;AAYA;AACA;AACA;AACA;AACO,SAAS,uCAAuC;AACvD,EAAE,OAAO;AACT,EAAE,QAAQ;AACV,EAAe;AACf,EAAE,OAAO;AACT,IAAI,IAAI,EAAE,gBAAgB;AAC1B,IAAI,KAAK,GAAG,CAAC,CAAC;AACd,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACO,MAAM,aAAA,GAAgB,CAAC,KAAK,KAAwD;AAC3F,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AACvB,IAAI,OAAO,IAAI;AACf,EAAE;;AAEF,EAAE,IAAI,OAAO,KAAK,CAAC,QAAA,KAAa,UAAU,EAAE;AAC5C,IAAI,OAAO,CAAC,KAAK,CAAC,QAAA,IAAoC;AACtD,EAAE;;AAEF,EAAE,OAAO,KAAK,CAAC,QAAQ;AACvB;;AAEA;AACA;AACA;AACA;AACA;AACO,SAAS,iBAAiB;AACjC,EAAE,gBAAgB;AAClB,EAAe;AACf,EAAE,OAAO,gBAAA;AACT;;;;"}
@@ -3,6 +3,7 @@ import { getActiveSpan, startSpanManual, withActiveSpan } from '@sentry/node';
3
3
  import { getMiddlewareSpanOptions } from './utils.js';
4
4
 
5
5
  const SENTRY_WRAPPED = '__SENTRY_WRAPPED__';
6
+ const SENTRY_INTERNAL = '__SENTRY_INTERNAL__';
6
7
 
7
8
  /**
8
9
  * Creates a proxy for the next function that ends the current span and restores the parent span.
@@ -37,8 +38,11 @@ function wrapMiddlewareWithSentry(
37
38
  middleware,
38
39
  options,
39
40
  ) {
40
- if ((middleware )[SENTRY_WRAPPED]) {
41
- // already instrumented
41
+ if (
42
+ (middleware )[SENTRY_WRAPPED] ||
43
+ (middleware )[SENTRY_INTERNAL]
44
+ ) {
45
+ // already instrumented or internal Sentry middleware
42
46
  return middleware;
43
47
  }
44
48
 
@@ -107,5 +111,5 @@ function wrapMiddlewaresWithSentry(middlewares) {
107
111
  });
108
112
  }
109
113
 
110
- export { wrapMiddlewaresWithSentry };
114
+ export { SENTRY_INTERNAL, wrapMiddlewaresWithSentry };
111
115
  //# sourceMappingURL=middleware.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.js","sources":["../../../src/server/middleware.ts"],"sourcesContent":["import { addNonEnumerableProperty } from '@sentry/core';\nimport type { Span } from '@sentry/node';\nimport { getActiveSpan, startSpanManual, withActiveSpan } from '@sentry/node';\nimport type { MiddlewareWrapperOptions, TanStackMiddlewareBase } from '../common/types';\nimport { getMiddlewareSpanOptions } from './utils';\n\nconst SENTRY_WRAPPED = '__SENTRY_WRAPPED__';\n\n/**\n * Creates a proxy for the next function that ends the current span and restores the parent span.\n * This ensures that subsequent middleware spans are children of the root span, not nested children.\n */\nfunction getNextProxy<T extends (...args: unknown[]) => unknown>(\n next: T,\n span: Span,\n prevSpan: Span | undefined,\n nextState: { called: boolean },\n): T {\n return new Proxy(next, {\n apply: (originalNext, thisArgNext, argsNext) => {\n nextState.called = true;\n span.end();\n\n if (prevSpan) {\n return withActiveSpan(prevSpan, () => {\n return Reflect.apply(originalNext, thisArgNext, argsNext);\n });\n }\n\n return Reflect.apply(originalNext, thisArgNext, argsNext);\n },\n });\n}\n\n/**\n * Wraps a TanStack Start middleware with Sentry instrumentation to create spans.\n */\nfunction wrapMiddlewareWithSentry<T extends TanStackMiddlewareBase>(\n middleware: T,\n options: MiddlewareWrapperOptions,\n): T {\n if ((middleware as TanStackMiddlewareBase & { [SENTRY_WRAPPED]?: boolean })[SENTRY_WRAPPED]) {\n // already instrumented\n return middleware;\n }\n\n // instrument server middleware\n if (middleware.options?.server) {\n middleware.options.server = new Proxy(middleware.options.server, {\n apply: (originalServer, thisArgServer, argsServer) => {\n const prevSpan = getActiveSpan();\n\n return startSpanManual(getMiddlewareSpanOptions(options.name), async (span: Span) => {\n const nextState = { called: false };\n\n // The server function receives { next, context, request } as first argument\n // Users call next() inside their middleware to move down the middleware chain. We proxy next() to end the span when it is called.\n const middlewareArgs = argsServer[0] as { next?: (...args: unknown[]) => unknown } | undefined;\n if (middlewareArgs && typeof middlewareArgs === 'object' && typeof middlewareArgs.next === 'function') {\n middlewareArgs.next = getNextProxy(middlewareArgs.next, span, prevSpan, nextState);\n }\n\n try {\n const result = await originalServer.apply(thisArgServer, argsServer);\n\n // End span here if next() wasn't called, else we already ended it in next()\n if (!nextState.called) {\n span.end();\n }\n\n return result;\n } catch (e) {\n span.end();\n throw e;\n }\n });\n },\n });\n\n // mark as instrumented\n addNonEnumerableProperty(middleware as unknown as Record<string, unknown>, SENTRY_WRAPPED, true);\n }\n\n return middleware;\n}\n\n/**\n * Wraps multiple TanStack Start middlewares with Sentry instrumentation.\n * Object keys are used as span names to avoid users having to specify this manually.\n *\n * @example\n * ```ts\n * import { wrapMiddlewaresWithSentry } from '@sentry/tanstackstart-react';\n *\n * const wrappedMiddlewares = wrapMiddlewaresWithSentry({\n * authMiddleware,\n * loggingMiddleware,\n * });\n *\n * createServerFn().middleware(wrappedMiddlewares)\n * ```\n *\n * @param middlewares - An object containing middlewares\n * @returns An array of wrapped middlewares\n */\nexport function wrapMiddlewaresWithSentry<T extends TanStackMiddlewareBase>(middlewares: Record<string, T>): T[] {\n return Object.entries(middlewares).map(([name, middleware]) => {\n return wrapMiddlewareWithSentry(middleware, { name });\n });\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"middleware.js","sources":["../../../src/server/middleware.ts"],"sourcesContent":["import { addNonEnumerableProperty } from '@sentry/core';\nimport type { Span } from '@sentry/node';\nimport { getActiveSpan, startSpanManual, withActiveSpan } from '@sentry/node';\nimport type { MiddlewareWrapperOptions, TanStackMiddlewareBase } from '../common/types';\nimport { getMiddlewareSpanOptions } from './utils';\n\nconst SENTRY_WRAPPED = '__SENTRY_WRAPPED__';\nexport const SENTRY_INTERNAL = '__SENTRY_INTERNAL__';\n\n/**\n * Creates a proxy for the next function that ends the current span and restores the parent span.\n * This ensures that subsequent middleware spans are children of the root span, not nested children.\n */\nfunction getNextProxy<T extends (...args: unknown[]) => unknown>(\n next: T,\n span: Span,\n prevSpan: Span | undefined,\n nextState: { called: boolean },\n): T {\n return new Proxy(next, {\n apply: (originalNext, thisArgNext, argsNext) => {\n nextState.called = true;\n span.end();\n\n if (prevSpan) {\n return withActiveSpan(prevSpan, () => {\n return Reflect.apply(originalNext, thisArgNext, argsNext);\n });\n }\n\n return Reflect.apply(originalNext, thisArgNext, argsNext);\n },\n });\n}\n\n/**\n * Wraps a TanStack Start middleware with Sentry instrumentation to create spans.\n */\nfunction wrapMiddlewareWithSentry<T extends TanStackMiddlewareBase>(\n middleware: T,\n options: MiddlewareWrapperOptions,\n): T {\n if (\n (middleware as TanStackMiddlewareBase & { [SENTRY_WRAPPED]?: boolean })[SENTRY_WRAPPED] ||\n (middleware as TanStackMiddlewareBase & { [SENTRY_INTERNAL]?: boolean })[SENTRY_INTERNAL]\n ) {\n // already instrumented or internal Sentry middleware\n return middleware;\n }\n\n // instrument server middleware\n if (middleware.options?.server) {\n middleware.options.server = new Proxy(middleware.options.server, {\n apply: (originalServer, thisArgServer, argsServer) => {\n const prevSpan = getActiveSpan();\n\n return startSpanManual(getMiddlewareSpanOptions(options.name), async (span: Span) => {\n const nextState = { called: false };\n\n // The server function receives { next, context, request } as first argument\n // Users call next() inside their middleware to move down the middleware chain. We proxy next() to end the span when it is called.\n const middlewareArgs = argsServer[0] as { next?: (...args: unknown[]) => unknown } | undefined;\n if (middlewareArgs && typeof middlewareArgs === 'object' && typeof middlewareArgs.next === 'function') {\n middlewareArgs.next = getNextProxy(middlewareArgs.next, span, prevSpan, nextState);\n }\n\n try {\n const result = await originalServer.apply(thisArgServer, argsServer);\n\n // End span here if next() wasn't called, else we already ended it in next()\n if (!nextState.called) {\n span.end();\n }\n\n return result;\n } catch (e) {\n span.end();\n throw e;\n }\n });\n },\n });\n\n // mark as instrumented\n addNonEnumerableProperty(middleware as unknown as Record<string, unknown>, SENTRY_WRAPPED, true);\n }\n\n return middleware;\n}\n\n/**\n * Wraps multiple TanStack Start middlewares with Sentry instrumentation.\n * Object keys are used as span names to avoid users having to specify this manually.\n *\n * @example\n * ```ts\n * import { wrapMiddlewaresWithSentry } from '@sentry/tanstackstart-react';\n *\n * const wrappedMiddlewares = wrapMiddlewaresWithSentry({\n * authMiddleware,\n * loggingMiddleware,\n * });\n *\n * createServerFn().middleware(wrappedMiddlewares)\n * ```\n *\n * @param middlewares - An object containing middlewares\n * @returns An array of wrapped middlewares\n */\nexport function wrapMiddlewaresWithSentry<T extends TanStackMiddlewareBase>(middlewares: Record<string, T>): T[] {\n return Object.entries(middlewares).map(([name, middleware]) => {\n return wrapMiddlewareWithSentry(middleware, { name });\n });\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { sentryTanstackStart } from './sentryTanstackStart.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -12,7 +12,7 @@ import { makeAddSentryVitePlugin, makeEnableSourceMapsVitePlugin } from './sourc
12
12
  * ```typescript
13
13
  * // vite.config.ts
14
14
  * import { defineConfig } from 'vite';
15
- * import { sentryTanstackStart } from '@sentry/tanstackstart-react';
15
+ * import { sentryTanstackStart } from '@sentry/tanstackstart-react/vite';
16
16
  * import { tanstackStart } from '@tanstack/react-start/plugin/vite';
17
17
  *
18
18
  * export default defineConfig({
@@ -1 +1 @@
1
- {"version":3,"file":"sentryTanstackStart.js","sources":["../../../src/vite/sentryTanstackStart.ts"],"sourcesContent":["import type { BuildTimeOptionsBase } from '@sentry/core';\nimport type { Plugin } from 'vite';\nimport { makeAutoInstrumentMiddlewarePlugin } from './autoInstrumentMiddleware';\nimport { makeAddSentryVitePlugin, makeEnableSourceMapsVitePlugin } from './sourceMaps';\n\n/**\n * Build-time options for the Sentry TanStack Start SDK.\n */\nexport interface SentryTanstackStartOptions extends BuildTimeOptionsBase {\n /**\n * If this flag is `true`, the Sentry plugins will automatically instrument TanStack Start middlewares.\n *\n * This wraps global middlewares (`requestMiddleware` and `functionMiddleware`) in `createStart()` with Sentry\n * instrumentation to capture performance data.\n *\n * Set to `false` to disable automatic middleware instrumentation if you prefer to wrap middlewares manually\n * using `wrapMiddlewaresWithSentry`.\n *\n * @default true\n */\n autoInstrumentMiddleware?: boolean;\n}\n\n/**\n * Vite plugins for the Sentry TanStack Start SDK.\n *\n * @example\n * ```typescript\n * // vite.config.ts\n * import { defineConfig } from 'vite';\n * import { sentryTanstackStart } from '@sentry/tanstackstart-react';\n * import { tanstackStart } from '@tanstack/react-start/plugin/vite';\n *\n * export default defineConfig({\n * plugins: [\n * tanstackStart(),\n * sentryTanstackStart({\n * org: 'your-org',\n * project: 'your-project',\n * }),\n * ],\n * });\n * ```\n *\n * @param options - Options to configure the Sentry Vite plugins\n * @returns An array of Vite plugins\n */\nexport function sentryTanstackStart(options: SentryTanstackStartOptions = {}): Plugin[] {\n // only add plugins in production builds\n if (process.env.NODE_ENV === 'development') {\n return [];\n }\n\n const plugins: Plugin[] = [...makeAddSentryVitePlugin(options)];\n\n // middleware auto-instrumentation\n if (options.autoInstrumentMiddleware !== false) {\n plugins.push(makeAutoInstrumentMiddlewarePlugin({ enabled: true, debug: options.debug }));\n }\n\n // source maps\n const sourceMapsDisabled = options.sourcemaps?.disable === true || options.sourcemaps?.disable === 'disable-upload';\n if (!sourceMapsDisabled) {\n plugins.push(...makeEnableSourceMapsVitePlugin(options));\n }\n\n return plugins;\n}\n"],"names":[],"mappings":";;;AAKA;AACA;AACA;;AAgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,mBAAmB,CAAC,OAAO,GAA+B,EAAE,EAAY;AACxF;AACA,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,QAAA,KAAa,aAAa,EAAE;AAC9C,IAAI,OAAO,EAAE;AACb,EAAE;;AAEF,EAAE,MAAM,OAAO,GAAa,CAAC,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;;AAEjE;AACA,EAAE,IAAI,OAAO,CAAC,wBAAA,KAA6B,KAAK,EAAE;AAClD,IAAI,OAAO,CAAC,IAAI,CAAC,kCAAkC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,KAAA,EAAO,CAAC,CAAC;AAC7F,EAAE;;AAEF;AACA,EAAE,MAAM,kBAAA,GAAqB,OAAO,CAAC,UAAU,EAAE,OAAA,KAAY,IAAA,IAAQ,OAAO,CAAC,UAAU,EAAE,OAAA,KAAY,gBAAgB;AACrH,EAAE,IAAI,CAAC,kBAAkB,EAAE;AAC3B,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,8BAA8B,CAAC,OAAO,CAAC,CAAC;AAC5D,EAAE;;AAEF,EAAE,OAAO,OAAO;AAChB;;;;"}
1
+ {"version":3,"file":"sentryTanstackStart.js","sources":["../../../src/vite/sentryTanstackStart.ts"],"sourcesContent":["import type { BuildTimeOptionsBase } from '@sentry/core';\nimport type { Plugin } from 'vite';\nimport { makeAutoInstrumentMiddlewarePlugin } from './autoInstrumentMiddleware';\nimport { makeAddSentryVitePlugin, makeEnableSourceMapsVitePlugin } from './sourceMaps';\n\n/**\n * Build-time options for the Sentry TanStack Start SDK.\n */\nexport interface SentryTanstackStartOptions extends BuildTimeOptionsBase {\n /**\n * If this flag is `true`, the Sentry plugins will automatically instrument TanStack Start middlewares.\n *\n * This wraps global middlewares (`requestMiddleware` and `functionMiddleware`) in `createStart()` with Sentry\n * instrumentation to capture performance data.\n *\n * Set to `false` to disable automatic middleware instrumentation if you prefer to wrap middlewares manually\n * using `wrapMiddlewaresWithSentry`.\n *\n * @default true\n */\n autoInstrumentMiddleware?: boolean;\n}\n\n/**\n * Vite plugins for the Sentry TanStack Start SDK.\n *\n * @example\n * ```typescript\n * // vite.config.ts\n * import { defineConfig } from 'vite';\n * import { sentryTanstackStart } from '@sentry/tanstackstart-react/vite';\n * import { tanstackStart } from '@tanstack/react-start/plugin/vite';\n *\n * export default defineConfig({\n * plugins: [\n * tanstackStart(),\n * sentryTanstackStart({\n * org: 'your-org',\n * project: 'your-project',\n * }),\n * ],\n * });\n * ```\n *\n * @param options - Options to configure the Sentry Vite plugins\n * @returns An array of Vite plugins\n */\nexport function sentryTanstackStart(options: SentryTanstackStartOptions = {}): Plugin[] {\n // only add plugins in production builds\n if (process.env.NODE_ENV === 'development') {\n return [];\n }\n\n const plugins: Plugin[] = [...makeAddSentryVitePlugin(options)];\n\n // middleware auto-instrumentation\n if (options.autoInstrumentMiddleware !== false) {\n plugins.push(makeAutoInstrumentMiddlewarePlugin({ enabled: true, debug: options.debug }));\n }\n\n // source maps\n const sourceMapsDisabled = options.sourcemaps?.disable === true || options.sourcemaps?.disable === 'disable-upload';\n if (!sourceMapsDisabled) {\n plugins.push(...makeEnableSourceMapsVitePlugin(options));\n }\n\n return plugins;\n}\n"],"names":[],"mappings":";;;AAKA;AACA;AACA;;AAgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,mBAAmB,CAAC,OAAO,GAA+B,EAAE,EAAY;AACxF;AACA,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,QAAA,KAAa,aAAa,EAAE;AAC9C,IAAI,OAAO,EAAE;AACb,EAAE;;AAEF,EAAE,MAAM,OAAO,GAAa,CAAC,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;;AAEjE;AACA,EAAE,IAAI,OAAO,CAAC,wBAAA,KAA6B,KAAK,EAAE;AAClD,IAAI,OAAO,CAAC,IAAI,CAAC,kCAAkC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,KAAA,EAAO,CAAC,CAAC;AAC7F,EAAE;;AAEF;AACA,EAAE,MAAM,kBAAA,GAAqB,OAAO,CAAC,UAAU,EAAE,OAAA,KAAY,IAAA,IAAQ,OAAO,CAAC,UAAU,EAAE,OAAA,KAAY,gBAAgB;AACrH,EAAE,IAAI,CAAC,kBAAkB,EAAE;AAC3B,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,8BAA8B,CAAC,OAAO,CAAC,CAAC;AAC5D,EAAE;;AAEF,EAAE,OAAO,OAAO;AAChB;;;;"}
@@ -6,4 +6,14 @@ export { init } from './sdk';
6
6
  * The actual implementation is server-only, but this stub is needed to prevent build errors.
7
7
  */
8
8
  export declare function wrapMiddlewaresWithSentry<T extends TanStackMiddlewareBase>(middlewares: Record<string, T>): T[];
9
+ /**
10
+ * No-op stub for client-side builds.
11
+ * The actual implementation is server-only, but this stub is needed to prevent rendering errors.
12
+ */
13
+ export declare const sentryGlobalRequestMiddleware: TanStackMiddlewareBase;
14
+ /**
15
+ * No-op stub for client-side builds.
16
+ * The actual implementation is server-only, but this stub is needed to prevent rendering errors.
17
+ */
18
+ export declare const sentryGlobalFunctionMiddleware: TanStackMiddlewareBase;
9
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAE9D,cAAc,eAAe,CAAC;AAE9B,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAE7B;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,SAAS,sBAAsB,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAE/G"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAE9D,cAAc,eAAe,CAAC;AAE9B,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAE7B;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,SAAS,sBAAsB,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAE/G;AAED;;;GAGG;AACH,eAAO,MAAM,6BAA6B,EAAE,sBAA6D,CAAC;AAE1G;;;GAGG;AACH,eAAO,MAAM,8BAA8B,EAAE,sBAA6D,CAAC"}
@@ -1,6 +1,7 @@
1
1
  export type TanStackMiddlewareBase = {
2
- options?: {
3
- server?: (...args: unknown[]) => unknown;
2
+ '~types': any;
3
+ options: {
4
+ server?: (...args: any[]) => any;
4
5
  };
5
6
  };
6
7
  export type MiddlewareWrapperOptions = {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/common/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAA;KAAE,CAAC;CACxD,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,MAAM,CAAC;CACd,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/common/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,sBAAsB,GAAG;IAEnC,QAAQ,EAAE,GAAG,CAAC;IAEd,OAAO,EAAE;QAAE,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAA;KAAE,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,MAAM,CAAC;CACd,CAAC"}
@@ -1,5 +1,4 @@
1
1
  export * from './config';
2
2
  export * from './server';
3
3
  export * from './common';
4
- export * from './vite';
5
4
  //# sourceMappingURL=index.server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.server.d.ts","sourceRoot":"","sources":["../../src/index.server.ts"],"names":[],"mappings":"AAEA,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.server.d.ts","sourceRoot":"","sources":["../../src/index.server.ts"],"names":[],"mappings":"AAEA,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC"}
@@ -5,7 +5,6 @@ export * from './config';
5
5
  export * from './client';
6
6
  export * from './server';
7
7
  export * from './common';
8
- export * from './vite';
9
8
  /** Initializes Sentry TanStack Start SDK */
10
9
  export declare function init(options: Options | clientSdk.BrowserOptions | serverSdk.NodeOptions): Client | undefined;
11
10
  export declare const linkedErrorsIntegration: typeof clientSdk.linkedErrorsIntegration;
@@ -23,4 +22,7 @@ export declare const OpenFeatureIntegrationHook: typeof clientSdk.OpenFeatureInt
23
22
  export declare const statsigIntegration: typeof clientSdk.statsigIntegration;
24
23
  export declare const unleashIntegration: typeof clientSdk.unleashIntegration;
25
24
  export declare const wrapMiddlewaresWithSentry: typeof serverSdk.wrapMiddlewaresWithSentry;
25
+ export declare const tanstackRouterBrowserTracingIntegration: typeof clientSdk.tanstackRouterBrowserTracingIntegration;
26
+ export declare const sentryGlobalRequestMiddleware: typeof serverSdk.sentryGlobalRequestMiddleware;
27
+ export declare const sentryGlobalFunctionMiddleware: typeof serverSdk.sentryGlobalFunctionMiddleware;
26
28
  //# sourceMappingURL=index.types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.types.d.ts","sourceRoot":"","sources":["../../src/index.types.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,KAAK,KAAK,SAAS,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,KAAK,SAAS,MAAM,UAAU,CAAC;AAE3C,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AAEvB,4CAA4C;AAC5C,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC,cAAc,GAAG,SAAS,CAAC,WAAW,GAAG,MAAM,GAAG,SAAS,CAAC;AAEtH,MAAM,CAAC,OAAO,CAAC,MAAM,uBAAuB,EAAE,OAAO,SAAS,CAAC,uBAAuB,CAAC;AACvF,MAAM,CAAC,OAAO,CAAC,MAAM,uBAAuB,EAAE,OAAO,SAAS,CAAC,uBAAuB,CAAC;AAEvF,MAAM,CAAC,OAAO,CAAC,MAAM,sBAAsB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,WAAW,EAAE,CAAC;AACjF,MAAM,CAAC,OAAO,CAAC,MAAM,kBAAkB,EAAE,WAAW,CAAC;AAErD,MAAM,CAAC,OAAO,CAAC,MAAM,aAAa,EAAE,OAAO,SAAS,CAAC,aAAa,CAAC;AACnE,MAAM,CAAC,OAAO,CAAC,MAAM,iBAAiB,EAAE,OAAO,SAAS,CAAC,iBAAiB,CAAC;AAE3E,MAAM,CAAC,OAAO,CAAC,MAAM,MAAM,EAAE,OAAO,SAAS,CAAC,MAAM,GAAG,OAAO,SAAS,CAAC,MAAM,CAAC;AAE/E,MAAM,CAAC,OAAO,CAAC,MAAM,qBAAqB,EAAE,OAAO,SAAS,CAAC,qBAAqB,CAAC;AACnF,MAAM,CAAC,OAAO,CAAC,MAAM,uBAAuB,EAAE,OAAO,SAAS,CAAC,uBAAuB,CAAC;AACvF,MAAM,CAAC,OAAO,CAAC,MAAM,gCAAgC,EAAE,OAAO,SAAS,CAAC,gCAAgC,CAAC;AACzG,MAAM,CAAC,OAAO,CAAC,MAAM,sBAAsB,EAAE,OAAO,SAAS,CAAC,sBAAsB,CAAC;AACrF,MAAM,CAAC,OAAO,CAAC,MAAM,0BAA0B,EAAE,OAAO,SAAS,CAAC,0BAA0B,CAAC;AAC7F,MAAM,CAAC,OAAO,CAAC,MAAM,kBAAkB,EAAE,OAAO,SAAS,CAAC,kBAAkB,CAAC;AAC7E,MAAM,CAAC,OAAO,CAAC,MAAM,kBAAkB,EAAE,OAAO,SAAS,CAAC,kBAAkB,CAAC;AAE7E,MAAM,CAAC,OAAO,CAAC,MAAM,yBAAyB,EAAE,OAAO,SAAS,CAAC,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.types.d.ts","sourceRoot":"","sources":["../../src/index.types.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,KAAK,KAAK,SAAS,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,KAAK,SAAS,MAAM,UAAU,CAAC;AAE3C,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AAEzB,4CAA4C;AAC5C,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC,cAAc,GAAG,SAAS,CAAC,WAAW,GAAG,MAAM,GAAG,SAAS,CAAC;AAEtH,MAAM,CAAC,OAAO,CAAC,MAAM,uBAAuB,EAAE,OAAO,SAAS,CAAC,uBAAuB,CAAC;AACvF,MAAM,CAAC,OAAO,CAAC,MAAM,uBAAuB,EAAE,OAAO,SAAS,CAAC,uBAAuB,CAAC;AAEvF,MAAM,CAAC,OAAO,CAAC,MAAM,sBAAsB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,WAAW,EAAE,CAAC;AACjF,MAAM,CAAC,OAAO,CAAC,MAAM,kBAAkB,EAAE,WAAW,CAAC;AAErD,MAAM,CAAC,OAAO,CAAC,MAAM,aAAa,EAAE,OAAO,SAAS,CAAC,aAAa,CAAC;AACnE,MAAM,CAAC,OAAO,CAAC,MAAM,iBAAiB,EAAE,OAAO,SAAS,CAAC,iBAAiB,CAAC;AAE3E,MAAM,CAAC,OAAO,CAAC,MAAM,MAAM,EAAE,OAAO,SAAS,CAAC,MAAM,GAAG,OAAO,SAAS,CAAC,MAAM,CAAC;AAE/E,MAAM,CAAC,OAAO,CAAC,MAAM,qBAAqB,EAAE,OAAO,SAAS,CAAC,qBAAqB,CAAC;AACnF,MAAM,CAAC,OAAO,CAAC,MAAM,uBAAuB,EAAE,OAAO,SAAS,CAAC,uBAAuB,CAAC;AACvF,MAAM,CAAC,OAAO,CAAC,MAAM,gCAAgC,EAAE,OAAO,SAAS,CAAC,gCAAgC,CAAC;AACzG,MAAM,CAAC,OAAO,CAAC,MAAM,sBAAsB,EAAE,OAAO,SAAS,CAAC,sBAAsB,CAAC;AACrF,MAAM,CAAC,OAAO,CAAC,MAAM,0BAA0B,EAAE,OAAO,SAAS,CAAC,0BAA0B,CAAC;AAC7F,MAAM,CAAC,OAAO,CAAC,MAAM,kBAAkB,EAAE,OAAO,SAAS,CAAC,kBAAkB,CAAC;AAC7E,MAAM,CAAC,OAAO,CAAC,MAAM,kBAAkB,EAAE,OAAO,SAAS,CAAC,kBAAkB,CAAC;AAE7E,MAAM,CAAC,OAAO,CAAC,MAAM,yBAAyB,EAAE,OAAO,SAAS,CAAC,yBAAyB,CAAC;AAE3F,MAAM,CAAC,OAAO,CAAC,MAAM,uCAAuC,EAAE,OAAO,SAAS,CAAC,uCAAuC,CAAC;AACvH,MAAM,CAAC,OAAO,CAAC,MAAM,6BAA6B,EAAE,OAAO,SAAS,CAAC,6BAA6B,CAAC;AACnG,MAAM,CAAC,OAAO,CAAC,MAAM,8BAA8B,EAAE,OAAO,SAAS,CAAC,8BAA8B,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { TanStackMiddlewareBase } from '../common/types';
2
+ /**
3
+ * Global request middleware that captures errors from API route requests.
4
+ * Should be added as the first entry in the `requestMiddleware` array of `createStart()`.
5
+ */
6
+ export declare const sentryGlobalRequestMiddleware: TanStackMiddlewareBase;
7
+ /**
8
+ * Global function middleware that captures errors from server function invocations.
9
+ * Should be added as the first entry in the `functionMiddleware` array of `createStart()`.
10
+ */
11
+ export declare const sentryGlobalFunctionMiddleware: TanStackMiddlewareBase;
12
+ //# sourceMappingURL=globalMiddleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"globalMiddleware.d.ts","sourceRoot":"","sources":["../../../src/server/globalMiddleware.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAgB9D;;;GAGG;AACH,eAAO,MAAM,6BAA6B,EAAE,sBAO3C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,8BAA8B,EAAE,sBAO5C,CAAC"}
@@ -1,7 +1,14 @@
1
+ import type { Integration } from '@sentry/core';
1
2
  export * from '@sentry/node';
2
3
  export { init } from './sdk';
3
4
  export { wrapFetchWithSentry } from './wrapFetchWithSentry';
4
5
  export { wrapMiddlewaresWithSentry } from './middleware';
6
+ export { sentryGlobalRequestMiddleware, sentryGlobalFunctionMiddleware } from './globalMiddleware';
7
+ /**
8
+ * A no-op stub of the browser tracing integration for the server. Router setup code is shared between client and server,
9
+ * so this stub is needed to prevent build errors during SSR bundling.
10
+ */
11
+ export declare function tanstackRouterBrowserTracingIntegration(_router: unknown, _options?: Record<string, unknown>): Integration;
5
12
  /**
6
13
  * A passthrough error boundary for the server that doesn't depend on any react. Error boundaries don't catch SSR errors
7
14
  * so they should simply be a passthrough.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/index.ts"],"names":[],"mappings":"AAGA,cAAc,cAAc,CAAC;AAE7B,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAEzD;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,OAAO,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAG,KAAK,CAAC,SAU7E,CAAC;AAEF;;;GAGG;AAEH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7D,gBAAgB,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,GACvC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAEb"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,cAAc,cAAc,CAAC;AAE7B,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,6BAA6B,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAEnG;;;GAGG;AACH,wBAAgB,uCAAuC,CACrD,OAAO,EAAE,OAAO,EAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,WAAW,CAKb;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,OAAO,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAG,KAAK,CAAC,SAU7E,CAAC;AAEF;;;GAGG;AAEH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7D,gBAAgB,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,GACvC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAEb"}
@@ -1,4 +1,5 @@
1
1
  import type { TanStackMiddlewareBase } from '../common/types';
2
+ export declare const SENTRY_INTERNAL = "__SENTRY_INTERNAL__";
2
3
  /**
3
4
  * Wraps multiple TanStack Start middlewares with Sentry instrumentation.
4
5
  * Object keys are used as span names to avoid users having to specify this manually.
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../src/server/middleware.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAA4B,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAmFxF;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,SAAS,sBAAsB,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAI/G"}
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../src/server/middleware.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAA4B,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAIxF,eAAO,MAAM,eAAe,wBAAwB,CAAC;AAmFrD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,SAAS,sBAAsB,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAI/G"}
@@ -24,7 +24,7 @@ export interface SentryTanstackStartOptions extends BuildTimeOptionsBase {
24
24
  * ```typescript
25
25
  * // vite.config.ts
26
26
  * import { defineConfig } from 'vite';
27
- * import { sentryTanstackStart } from '@sentry/tanstackstart-react';
27
+ * import { sentryTanstackStart } from '@sentry/tanstackstart-react/vite';
28
28
  * import { tanstackStart } from '@tanstack/react-start/plugin/vite';
29
29
  *
30
30
  * export default defineConfig({
@@ -6,4 +6,14 @@ export { init } from './sdk';
6
6
  * The actual implementation is server-only, but this stub is needed to prevent build errors.
7
7
  */
8
8
  export declare function wrapMiddlewaresWithSentry<T extends TanStackMiddlewareBase>(middlewares: Record<string, T>): T[];
9
+ /**
10
+ * No-op stub for client-side builds.
11
+ * The actual implementation is server-only, but this stub is needed to prevent rendering errors.
12
+ */
13
+ export declare const sentryGlobalRequestMiddleware: TanStackMiddlewareBase;
14
+ /**
15
+ * No-op stub for client-side builds.
16
+ * The actual implementation is server-only, but this stub is needed to prevent rendering errors.
17
+ */
18
+ export declare const sentryGlobalFunctionMiddleware: TanStackMiddlewareBase;
9
19
  //# sourceMappingURL=index.d.ts.map
@@ -1,6 +1,7 @@
1
1
  export type TanStackMiddlewareBase = {
2
- options?: {
3
- server?: (...args: unknown[]) => unknown;
2
+ '~types': any;
3
+ options: {
4
+ server?: (...args: any[]) => any;
4
5
  };
5
6
  };
6
7
  export type MiddlewareWrapperOptions = {
@@ -1,5 +1,4 @@
1
1
  export * from './config';
2
2
  export * from './server';
3
3
  export * from './common';
4
- export * from './vite';
5
4
  //# sourceMappingURL=index.server.d.ts.map
@@ -5,7 +5,6 @@ export * from './config';
5
5
  export * from './client';
6
6
  export * from './server';
7
7
  export * from './common';
8
- export * from './vite';
9
8
  /** Initializes Sentry TanStack Start SDK */
10
9
  export declare function init(options: Options | clientSdk.BrowserOptions | serverSdk.NodeOptions): Client | undefined;
11
10
  export declare const linkedErrorsIntegration: typeof clientSdk.linkedErrorsIntegration;
@@ -23,4 +22,7 @@ export declare const OpenFeatureIntegrationHook: typeof clientSdk.OpenFeatureInt
23
22
  export declare const statsigIntegration: typeof clientSdk.statsigIntegration;
24
23
  export declare const unleashIntegration: typeof clientSdk.unleashIntegration;
25
24
  export declare const wrapMiddlewaresWithSentry: typeof serverSdk.wrapMiddlewaresWithSentry;
25
+ export declare const tanstackRouterBrowserTracingIntegration: typeof clientSdk.tanstackRouterBrowserTracingIntegration;
26
+ export declare const sentryGlobalRequestMiddleware: typeof serverSdk.sentryGlobalRequestMiddleware;
27
+ export declare const sentryGlobalFunctionMiddleware: typeof serverSdk.sentryGlobalFunctionMiddleware;
26
28
  //# sourceMappingURL=index.types.d.ts.map
@@ -0,0 +1,12 @@
1
+ import { TanStackMiddlewareBase } from '../common/types';
2
+ /**
3
+ * Global request middleware that captures errors from API route requests.
4
+ * Should be added as the first entry in the `requestMiddleware` array of `createStart()`.
5
+ */
6
+ export declare const sentryGlobalRequestMiddleware: TanStackMiddlewareBase;
7
+ /**
8
+ * Global function middleware that captures errors from server function invocations.
9
+ * Should be added as the first entry in the `functionMiddleware` array of `createStart()`.
10
+ */
11
+ export declare const sentryGlobalFunctionMiddleware: TanStackMiddlewareBase;
12
+ //# sourceMappingURL=globalMiddleware.d.ts.map
@@ -1,7 +1,14 @@
1
+ import { Integration } from '@sentry/core';
1
2
  export * from '@sentry/node';
2
3
  export { init } from './sdk';
3
4
  export { wrapFetchWithSentry } from './wrapFetchWithSentry';
4
5
  export { wrapMiddlewaresWithSentry } from './middleware';
6
+ export { sentryGlobalRequestMiddleware, sentryGlobalFunctionMiddleware } from './globalMiddleware';
7
+ /**
8
+ * A no-op stub of the browser tracing integration for the server. Router setup code is shared between client and server,
9
+ * so this stub is needed to prevent build errors during SSR bundling.
10
+ */
11
+ export declare function tanstackRouterBrowserTracingIntegration(_router: unknown, _options?: Record<string, unknown>): Integration;
5
12
  /**
6
13
  * A passthrough error boundary for the server that doesn't depend on any react. Error boundaries don't catch SSR errors
7
14
  * so they should simply be a passthrough.
@@ -1,4 +1,5 @@
1
1
  import { TanStackMiddlewareBase } from '../common/types';
2
+ export declare const SENTRY_INTERNAL = "__SENTRY_INTERNAL__";
2
3
  /**
3
4
  * Wraps multiple TanStack Start middlewares with Sentry instrumentation.
4
5
  * Object keys are used as span names to avoid users having to specify this manually.
@@ -24,7 +24,7 @@ export interface SentryTanstackStartOptions extends BuildTimeOptionsBase {
24
24
  * ```typescript
25
25
  * // vite.config.ts
26
26
  * import { defineConfig } from 'vite';
27
- * import { sentryTanstackStart } from '@sentry/tanstackstart-react';
27
+ * import { sentryTanstackStart } from '@sentry/tanstackstart-react/vite';
28
28
  * import { tanstackStart } from '@tanstack/react-start/plugin/vite';
29
29
  *
30
30
  * export default defineConfig({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sentry/tanstackstart-react",
3
- "version": "10.39.0-alpha.0",
3
+ "version": "10.40.0",
4
4
  "description": "Official Sentry SDK for TanStack Start React",
5
5
  "repository": "git://github.com/getsentry/sentry-javascript.git",
6
6
  "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/tanstackstart-react",
@@ -37,6 +37,11 @@
37
37
  "import": {
38
38
  "default": "./build/loader-hook.mjs"
39
39
  }
40
+ },
41
+ "./vite": {
42
+ "types": "./build/types/vite/index.d.ts",
43
+ "import": "./build/esm/vite/index.js",
44
+ "require": "./build/cjs/vite/index.js"
40
45
  }
41
46
  },
42
47
  "typesVersions": {
@@ -52,11 +57,11 @@
52
57
  "dependencies": {
53
58
  "@opentelemetry/api": "^1.9.0",
54
59
  "@opentelemetry/semantic-conventions": "^1.37.0",
55
- "@sentry-internal/browser-utils": "10.39.0-alpha.0",
56
- "@sentry/core": "10.39.0-alpha.0",
57
- "@sentry/node": "10.39.0-alpha.0",
58
- "@sentry/react": "10.39.0-alpha.0",
59
- "@sentry/vite-plugin": "^4.8.0"
60
+ "@sentry-internal/browser-utils": "10.40.0",
61
+ "@sentry/core": "10.40.0",
62
+ "@sentry/node": "10.40.0",
63
+ "@sentry/react": "10.40.0",
64
+ "@sentry/vite-plugin": "^5.1.0"
60
65
  },
61
66
  "devDependencies": {
62
67
  "vite": "^5.4.11"
@@ -68,10 +73,9 @@
68
73
  "build:types": "run-s build:types:core build:types:downlevel",
69
74
  "build:types:core": "tsc -p tsconfig.types.json",
70
75
  "build:types:downlevel": "yarn downlevel-dts build/types build/types-ts3.8 --to ts3.8",
71
- "build:watch": "run-p build:transpile:watch build:types:watch",
76
+ "build:watch": "run-p build:transpile:watch",
72
77
  "build:dev:watch": "yarn build:watch",
73
78
  "build:transpile:watch": "nodemon --ext ts --watch src scripts/buildRollup.ts",
74
- "build:types:watch": "tsc -p tsconfig.types.json --watch",
75
79
  "build:tarball": "npm pack",
76
80
  "circularDepCheck": "madge --circular src/index.client.ts && madge --circular src/index.server.ts && madge --circular src/index.types.ts",
77
81
  "clean": "rimraf build coverage sentry-tanstackstart-react-*.tgz",