@sentry/tanstackstart-react 11.0.0-alpha.2 → 11.0.0-beta.1

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.
@@ -1,6 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
 
3
3
  const core = require('@sentry/core');
4
+ const server = require('@sentry/core/server');
4
5
  const node = require('@sentry/node');
5
6
  const attributes = require('@sentry/conventions/attributes');
6
7
  const op = require('@sentry/conventions/op');
@@ -106,7 +107,7 @@ function wrapFetchWithSentry(serverEntry) {
106
107
  }
107
108
  return injectMetaTagsInResponse(await target.apply(thisArg, args));
108
109
  } finally {
109
- await core.flushIfServerless();
110
+ await server.flushIfServerless();
110
111
  }
111
112
  }
112
113
  });
@@ -1 +1 @@
1
- {"version":3,"file":"wrapFetchWithSentry.js","sources":["../../../src/server/wrapFetchWithSentry.ts"],"sourcesContent":["import { flushIfServerless, getTraceMetaTags } from '@sentry/core';\nimport { captureException, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, startSpan } from '@sentry/node';\nimport { SENTRY_OP } from '@sentry/conventions/attributes';\nimport { FUNCTION } from '@sentry/conventions/op';\nimport { updateSpanWithRouteParametrization } from './routeParametrization';\n\ndeclare const __SENTRY_ROUTE_PATTERNS__: string[] | undefined;\n\nexport type ServerEntry = {\n // `opts` is forwarded verbatim to the wrapped handler, so this must accept whatever shape\n // the real framework entry uses (e.g. TanStack's `RequestOptions<Register>`). Under\n // parameter contravariance `unknown` would reject such an entry; `any` keeps it assignable.\n // oxlint-disable-next-line typescript/no-explicit-any\n fetch: (request: Request, opts?: any) => Promise<Response> | Response;\n};\n\n/**\n * This function optimistically assumes that the HTML coming in chunks will not be split\n * within the <head> tag. If this still happens, we simply won't replace anything.\n */\nfunction addMetaTagToHead(htmlChunk: string, metaTagsStr: string): string {\n if (typeof htmlChunk !== 'string' || !metaTagsStr) {\n return htmlChunk;\n }\n\n if (htmlChunk.includes('\"sentry-trace\"')) {\n return htmlChunk;\n }\n\n // Skip quoted attribute values so we don't match <head> inside e.g. data-code=\"...<head>...\"\n let replaced = false;\n return htmlChunk.replace(/\"[^\"]*\"|'[^']*'|(<head>)/g, (match, headTag) => {\n if (headTag && !replaced) {\n replaced = true;\n return `<head>${metaTagsStr}`;\n }\n return match;\n });\n}\n\nfunction injectMetaTagsInResponse(originalResponse: Response): Response {\n try {\n const contentType = originalResponse.headers.get('content-type');\n\n const isPageloadRequest = contentType?.startsWith('text/html');\n if (!isPageloadRequest) {\n return originalResponse;\n }\n\n // Type case necessary b/c the body's ReadableStream type doesn't include\n // the async iterator that is actually available in Node\n // We later on use the async iterator to read the body chunks\n // see https://github.com/microsoft/TypeScript/issues/39051\n const originalBody = originalResponse.body as NodeJS.ReadableStream | null;\n if (!originalBody) {\n return originalResponse;\n }\n\n const metaTagsStr = getTraceMetaTags();\n const decoder = new TextDecoder();\n\n const newResponseStream = new ReadableStream({\n start: async controller => {\n // Assign to a new variable to avoid TS losing the narrower type checked above.\n const body = originalBody;\n\n async function* bodyReporter(): AsyncGenerator<string | Buffer> {\n try {\n for await (const chunk of body) {\n yield chunk;\n }\n } catch (e) {\n captureException(e, {\n mechanism: { type: 'auto.http.tanstackstart', handled: false },\n });\n throw e;\n }\n }\n\n let errored = false;\n try {\n for await (const chunk of bodyReporter()) {\n const html = typeof chunk === 'string' ? chunk : decoder.decode(chunk, { stream: true });\n const modifiedHtml = addMetaTagToHead(html, metaTagsStr);\n controller.enqueue(new TextEncoder().encode(modifiedHtml));\n }\n } catch (e) {\n errored = true;\n controller.error(e);\n } finally {\n if (!errored) {\n controller.close();\n }\n }\n },\n });\n\n return new Response(newResponseStream, {\n status: originalResponse.status,\n statusText: originalResponse.statusText,\n headers: new Headers(originalResponse.headers),\n });\n } catch (e) {\n captureException(e, {\n mechanism: { type: 'auto.http.tanstackstart', handled: false },\n });\n throw e;\n }\n}\n\n/**\n * This function can be used to wrap the server entry request handler to add tracing to server-side functionality.\n * You must explicitly define a server entry point in your application for this to work. This is done by passing the request handler to the `createServerEntry` function.\n * For more information about the server entry point, see the [TanStack Start documentation](https://tanstack.com/start/docs/server-entry).\n *\n * @example\n * ```ts\n * import { wrapFetchWithSentry } from '@sentry/tanstackstart-react';\n *\n * import handler, { createServerEntry } from '@tanstack/react-start/server-entry';\n * import type { ServerEntry } from '@tanstack/react-start/server-entry';\n *\n * const requestHandler: ServerEntry = wrapFetchWithSentry({\n * fetch(request: Request) {\n * return handler.fetch(request);\n * },\n * });\n *\n * export default serverEntry = createServerEntry(requestHandler);\n * ```\n *\n * @param serverEntry - request handler to wrap\n * @returns - wrapped request handler\n */\nexport function wrapFetchWithSentry(serverEntry: ServerEntry): ServerEntry {\n if (serverEntry.fetch) {\n serverEntry.fetch = new Proxy<typeof serverEntry.fetch>(serverEntry.fetch, {\n async apply(target, thisArg, args) {\n try {\n const request: Request = args[0];\n const url = new URL(request.url);\n const method = request.method || 'GET';\n\n // instrument server functions\n if (url.pathname.includes('_serverFn') || url.pathname.includes('createServerFn')) {\n return await startSpan(\n {\n name: `${method} ${url.pathname}`,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.tanstackstart.server',\n [SENTRY_OP]: FUNCTION,\n },\n },\n async () => {\n return target.apply(thisArg, args);\n },\n );\n }\n\n if (typeof __SENTRY_ROUTE_PATTERNS__ !== 'undefined') {\n updateSpanWithRouteParametrization(method, url.pathname, __SENTRY_ROUTE_PATTERNS__);\n }\n\n return injectMetaTagsInResponse(await target.apply(thisArg, args));\n } finally {\n await flushIfServerless();\n }\n },\n });\n }\n return serverEntry;\n}\n"],"names":["getTraceMetaTags","captureException","startSpan","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","SENTRY_OP","FUNCTION","updateSpanWithRouteParametrization","flushIfServerless"],"mappings":"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"}
1
+ {"version":3,"file":"wrapFetchWithSentry.js","sources":["../../../src/server/wrapFetchWithSentry.ts"],"sourcesContent":["import { getTraceMetaTags } from '@sentry/core';\nimport { flushIfServerless } from '@sentry/core/server';\nimport { captureException, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, startSpan } from '@sentry/node';\nimport { SENTRY_OP } from '@sentry/conventions/attributes';\nimport { FUNCTION } from '@sentry/conventions/op';\nimport { updateSpanWithRouteParametrization } from './routeParametrization';\n\ndeclare const __SENTRY_ROUTE_PATTERNS__: string[] | undefined;\n\nexport type ServerEntry = {\n // `opts` is forwarded verbatim to the wrapped handler, so this must accept whatever shape\n // the real framework entry uses (e.g. TanStack's `RequestOptions<Register>`). Under\n // parameter contravariance `unknown` would reject such an entry; `any` keeps it assignable.\n // oxlint-disable-next-line typescript/no-explicit-any\n fetch: (request: Request, opts?: any) => Promise<Response> | Response;\n};\n\n/**\n * This function optimistically assumes that the HTML coming in chunks will not be split\n * within the <head> tag. If this still happens, we simply won't replace anything.\n */\nfunction addMetaTagToHead(htmlChunk: string, metaTagsStr: string): string {\n if (typeof htmlChunk !== 'string' || !metaTagsStr) {\n return htmlChunk;\n }\n\n if (htmlChunk.includes('\"sentry-trace\"')) {\n return htmlChunk;\n }\n\n // Skip quoted attribute values so we don't match <head> inside e.g. data-code=\"...<head>...\"\n let replaced = false;\n return htmlChunk.replace(/\"[^\"]*\"|'[^']*'|(<head>)/g, (match, headTag) => {\n if (headTag && !replaced) {\n replaced = true;\n return `<head>${metaTagsStr}`;\n }\n return match;\n });\n}\n\nfunction injectMetaTagsInResponse(originalResponse: Response): Response {\n try {\n const contentType = originalResponse.headers.get('content-type');\n\n const isPageloadRequest = contentType?.startsWith('text/html');\n if (!isPageloadRequest) {\n return originalResponse;\n }\n\n // Type case necessary b/c the body's ReadableStream type doesn't include\n // the async iterator that is actually available in Node\n // We later on use the async iterator to read the body chunks\n // see https://github.com/microsoft/TypeScript/issues/39051\n const originalBody = originalResponse.body as NodeJS.ReadableStream | null;\n if (!originalBody) {\n return originalResponse;\n }\n\n const metaTagsStr = getTraceMetaTags();\n const decoder = new TextDecoder();\n\n const newResponseStream = new ReadableStream({\n start: async controller => {\n // Assign to a new variable to avoid TS losing the narrower type checked above.\n const body = originalBody;\n\n async function* bodyReporter(): AsyncGenerator<string | Buffer> {\n try {\n for await (const chunk of body) {\n yield chunk;\n }\n } catch (e) {\n captureException(e, {\n mechanism: { type: 'auto.http.tanstackstart', handled: false },\n });\n throw e;\n }\n }\n\n let errored = false;\n try {\n for await (const chunk of bodyReporter()) {\n const html = typeof chunk === 'string' ? chunk : decoder.decode(chunk, { stream: true });\n const modifiedHtml = addMetaTagToHead(html, metaTagsStr);\n controller.enqueue(new TextEncoder().encode(modifiedHtml));\n }\n } catch (e) {\n errored = true;\n controller.error(e);\n } finally {\n if (!errored) {\n controller.close();\n }\n }\n },\n });\n\n return new Response(newResponseStream, {\n status: originalResponse.status,\n statusText: originalResponse.statusText,\n headers: new Headers(originalResponse.headers),\n });\n } catch (e) {\n captureException(e, {\n mechanism: { type: 'auto.http.tanstackstart', handled: false },\n });\n throw e;\n }\n}\n\n/**\n * This function can be used to wrap the server entry request handler to add tracing to server-side functionality.\n * You must explicitly define a server entry point in your application for this to work. This is done by passing the request handler to the `createServerEntry` function.\n * For more information about the server entry point, see the [TanStack Start documentation](https://tanstack.com/start/docs/server-entry).\n *\n * @example\n * ```ts\n * import { wrapFetchWithSentry } from '@sentry/tanstackstart-react';\n *\n * import handler, { createServerEntry } from '@tanstack/react-start/server-entry';\n * import type { ServerEntry } from '@tanstack/react-start/server-entry';\n *\n * const requestHandler: ServerEntry = wrapFetchWithSentry({\n * fetch(request: Request) {\n * return handler.fetch(request);\n * },\n * });\n *\n * export default serverEntry = createServerEntry(requestHandler);\n * ```\n *\n * @param serverEntry - request handler to wrap\n * @returns - wrapped request handler\n */\nexport function wrapFetchWithSentry(serverEntry: ServerEntry): ServerEntry {\n if (serverEntry.fetch) {\n serverEntry.fetch = new Proxy<typeof serverEntry.fetch>(serverEntry.fetch, {\n async apply(target, thisArg, args) {\n try {\n const request: Request = args[0];\n const url = new URL(request.url);\n const method = request.method || 'GET';\n\n // instrument server functions\n if (url.pathname.includes('_serverFn') || url.pathname.includes('createServerFn')) {\n return await startSpan(\n {\n name: `${method} ${url.pathname}`,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.tanstackstart.server',\n [SENTRY_OP]: FUNCTION,\n },\n },\n async () => {\n return target.apply(thisArg, args);\n },\n );\n }\n\n if (typeof __SENTRY_ROUTE_PATTERNS__ !== 'undefined') {\n updateSpanWithRouteParametrization(method, url.pathname, __SENTRY_ROUTE_PATTERNS__);\n }\n\n return injectMetaTagsInResponse(await target.apply(thisArg, args));\n } finally {\n await flushIfServerless();\n }\n },\n });\n }\n return serverEntry;\n}\n"],"names":["getTraceMetaTags","captureException","startSpan","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","SENTRY_OP","FUNCTION","updateSpanWithRouteParametrization","flushIfServerless"],"mappings":"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"}
@@ -1 +1 @@
1
- {"type":"module","version":"11.0.0-alpha.2","sideEffects":false}
1
+ {"type":"module","version":"11.0.0-beta.1","sideEffects":false}
@@ -1,4 +1,5 @@
1
- import { flushIfServerless, getTraceMetaTags } from '@sentry/core';
1
+ import { getTraceMetaTags } from '@sentry/core';
2
+ import { flushIfServerless } from '@sentry/core/server';
2
3
  import { startSpan, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, captureException } from '@sentry/node';
3
4
  import { SENTRY_OP } from '@sentry/conventions/attributes';
4
5
  import { FUNCTION } from '@sentry/conventions/op';
@@ -1 +1 @@
1
- {"version":3,"file":"wrapFetchWithSentry.js","sources":["../../../src/server/wrapFetchWithSentry.ts"],"sourcesContent":["import { flushIfServerless, getTraceMetaTags } from '@sentry/core';\nimport { captureException, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, startSpan } from '@sentry/node';\nimport { SENTRY_OP } from '@sentry/conventions/attributes';\nimport { FUNCTION } from '@sentry/conventions/op';\nimport { updateSpanWithRouteParametrization } from './routeParametrization';\n\ndeclare const __SENTRY_ROUTE_PATTERNS__: string[] | undefined;\n\nexport type ServerEntry = {\n // `opts` is forwarded verbatim to the wrapped handler, so this must accept whatever shape\n // the real framework entry uses (e.g. TanStack's `RequestOptions<Register>`). Under\n // parameter contravariance `unknown` would reject such an entry; `any` keeps it assignable.\n // oxlint-disable-next-line typescript/no-explicit-any\n fetch: (request: Request, opts?: any) => Promise<Response> | Response;\n};\n\n/**\n * This function optimistically assumes that the HTML coming in chunks will not be split\n * within the <head> tag. If this still happens, we simply won't replace anything.\n */\nfunction addMetaTagToHead(htmlChunk: string, metaTagsStr: string): string {\n if (typeof htmlChunk !== 'string' || !metaTagsStr) {\n return htmlChunk;\n }\n\n if (htmlChunk.includes('\"sentry-trace\"')) {\n return htmlChunk;\n }\n\n // Skip quoted attribute values so we don't match <head> inside e.g. data-code=\"...<head>...\"\n let replaced = false;\n return htmlChunk.replace(/\"[^\"]*\"|'[^']*'|(<head>)/g, (match, headTag) => {\n if (headTag && !replaced) {\n replaced = true;\n return `<head>${metaTagsStr}`;\n }\n return match;\n });\n}\n\nfunction injectMetaTagsInResponse(originalResponse: Response): Response {\n try {\n const contentType = originalResponse.headers.get('content-type');\n\n const isPageloadRequest = contentType?.startsWith('text/html');\n if (!isPageloadRequest) {\n return originalResponse;\n }\n\n // Type case necessary b/c the body's ReadableStream type doesn't include\n // the async iterator that is actually available in Node\n // We later on use the async iterator to read the body chunks\n // see https://github.com/microsoft/TypeScript/issues/39051\n const originalBody = originalResponse.body as NodeJS.ReadableStream | null;\n if (!originalBody) {\n return originalResponse;\n }\n\n const metaTagsStr = getTraceMetaTags();\n const decoder = new TextDecoder();\n\n const newResponseStream = new ReadableStream({\n start: async controller => {\n // Assign to a new variable to avoid TS losing the narrower type checked above.\n const body = originalBody;\n\n async function* bodyReporter(): AsyncGenerator<string | Buffer> {\n try {\n for await (const chunk of body) {\n yield chunk;\n }\n } catch (e) {\n captureException(e, {\n mechanism: { type: 'auto.http.tanstackstart', handled: false },\n });\n throw e;\n }\n }\n\n let errored = false;\n try {\n for await (const chunk of bodyReporter()) {\n const html = typeof chunk === 'string' ? chunk : decoder.decode(chunk, { stream: true });\n const modifiedHtml = addMetaTagToHead(html, metaTagsStr);\n controller.enqueue(new TextEncoder().encode(modifiedHtml));\n }\n } catch (e) {\n errored = true;\n controller.error(e);\n } finally {\n if (!errored) {\n controller.close();\n }\n }\n },\n });\n\n return new Response(newResponseStream, {\n status: originalResponse.status,\n statusText: originalResponse.statusText,\n headers: new Headers(originalResponse.headers),\n });\n } catch (e) {\n captureException(e, {\n mechanism: { type: 'auto.http.tanstackstart', handled: false },\n });\n throw e;\n }\n}\n\n/**\n * This function can be used to wrap the server entry request handler to add tracing to server-side functionality.\n * You must explicitly define a server entry point in your application for this to work. This is done by passing the request handler to the `createServerEntry` function.\n * For more information about the server entry point, see the [TanStack Start documentation](https://tanstack.com/start/docs/server-entry).\n *\n * @example\n * ```ts\n * import { wrapFetchWithSentry } from '@sentry/tanstackstart-react';\n *\n * import handler, { createServerEntry } from '@tanstack/react-start/server-entry';\n * import type { ServerEntry } from '@tanstack/react-start/server-entry';\n *\n * const requestHandler: ServerEntry = wrapFetchWithSentry({\n * fetch(request: Request) {\n * return handler.fetch(request);\n * },\n * });\n *\n * export default serverEntry = createServerEntry(requestHandler);\n * ```\n *\n * @param serverEntry - request handler to wrap\n * @returns - wrapped request handler\n */\nexport function wrapFetchWithSentry(serverEntry: ServerEntry): ServerEntry {\n if (serverEntry.fetch) {\n serverEntry.fetch = new Proxy<typeof serverEntry.fetch>(serverEntry.fetch, {\n async apply(target, thisArg, args) {\n try {\n const request: Request = args[0];\n const url = new URL(request.url);\n const method = request.method || 'GET';\n\n // instrument server functions\n if (url.pathname.includes('_serverFn') || url.pathname.includes('createServerFn')) {\n return await startSpan(\n {\n name: `${method} ${url.pathname}`,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.tanstackstart.server',\n [SENTRY_OP]: FUNCTION,\n },\n },\n async () => {\n return target.apply(thisArg, args);\n },\n );\n }\n\n if (typeof __SENTRY_ROUTE_PATTERNS__ !== 'undefined') {\n updateSpanWithRouteParametrization(method, url.pathname, __SENTRY_ROUTE_PATTERNS__);\n }\n\n return injectMetaTagsInResponse(await target.apply(thisArg, args));\n } finally {\n await flushIfServerless();\n }\n },\n });\n }\n return serverEntry;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wrapFetchWithSentry.js","sources":["../../../src/server/wrapFetchWithSentry.ts"],"sourcesContent":["import { getTraceMetaTags } from '@sentry/core';\nimport { flushIfServerless } from '@sentry/core/server';\nimport { captureException, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, startSpan } from '@sentry/node';\nimport { SENTRY_OP } from '@sentry/conventions/attributes';\nimport { FUNCTION } from '@sentry/conventions/op';\nimport { updateSpanWithRouteParametrization } from './routeParametrization';\n\ndeclare const __SENTRY_ROUTE_PATTERNS__: string[] | undefined;\n\nexport type ServerEntry = {\n // `opts` is forwarded verbatim to the wrapped handler, so this must accept whatever shape\n // the real framework entry uses (e.g. TanStack's `RequestOptions<Register>`). Under\n // parameter contravariance `unknown` would reject such an entry; `any` keeps it assignable.\n // oxlint-disable-next-line typescript/no-explicit-any\n fetch: (request: Request, opts?: any) => Promise<Response> | Response;\n};\n\n/**\n * This function optimistically assumes that the HTML coming in chunks will not be split\n * within the <head> tag. If this still happens, we simply won't replace anything.\n */\nfunction addMetaTagToHead(htmlChunk: string, metaTagsStr: string): string {\n if (typeof htmlChunk !== 'string' || !metaTagsStr) {\n return htmlChunk;\n }\n\n if (htmlChunk.includes('\"sentry-trace\"')) {\n return htmlChunk;\n }\n\n // Skip quoted attribute values so we don't match <head> inside e.g. data-code=\"...<head>...\"\n let replaced = false;\n return htmlChunk.replace(/\"[^\"]*\"|'[^']*'|(<head>)/g, (match, headTag) => {\n if (headTag && !replaced) {\n replaced = true;\n return `<head>${metaTagsStr}`;\n }\n return match;\n });\n}\n\nfunction injectMetaTagsInResponse(originalResponse: Response): Response {\n try {\n const contentType = originalResponse.headers.get('content-type');\n\n const isPageloadRequest = contentType?.startsWith('text/html');\n if (!isPageloadRequest) {\n return originalResponse;\n }\n\n // Type case necessary b/c the body's ReadableStream type doesn't include\n // the async iterator that is actually available in Node\n // We later on use the async iterator to read the body chunks\n // see https://github.com/microsoft/TypeScript/issues/39051\n const originalBody = originalResponse.body as NodeJS.ReadableStream | null;\n if (!originalBody) {\n return originalResponse;\n }\n\n const metaTagsStr = getTraceMetaTags();\n const decoder = new TextDecoder();\n\n const newResponseStream = new ReadableStream({\n start: async controller => {\n // Assign to a new variable to avoid TS losing the narrower type checked above.\n const body = originalBody;\n\n async function* bodyReporter(): AsyncGenerator<string | Buffer> {\n try {\n for await (const chunk of body) {\n yield chunk;\n }\n } catch (e) {\n captureException(e, {\n mechanism: { type: 'auto.http.tanstackstart', handled: false },\n });\n throw e;\n }\n }\n\n let errored = false;\n try {\n for await (const chunk of bodyReporter()) {\n const html = typeof chunk === 'string' ? chunk : decoder.decode(chunk, { stream: true });\n const modifiedHtml = addMetaTagToHead(html, metaTagsStr);\n controller.enqueue(new TextEncoder().encode(modifiedHtml));\n }\n } catch (e) {\n errored = true;\n controller.error(e);\n } finally {\n if (!errored) {\n controller.close();\n }\n }\n },\n });\n\n return new Response(newResponseStream, {\n status: originalResponse.status,\n statusText: originalResponse.statusText,\n headers: new Headers(originalResponse.headers),\n });\n } catch (e) {\n captureException(e, {\n mechanism: { type: 'auto.http.tanstackstart', handled: false },\n });\n throw e;\n }\n}\n\n/**\n * This function can be used to wrap the server entry request handler to add tracing to server-side functionality.\n * You must explicitly define a server entry point in your application for this to work. This is done by passing the request handler to the `createServerEntry` function.\n * For more information about the server entry point, see the [TanStack Start documentation](https://tanstack.com/start/docs/server-entry).\n *\n * @example\n * ```ts\n * import { wrapFetchWithSentry } from '@sentry/tanstackstart-react';\n *\n * import handler, { createServerEntry } from '@tanstack/react-start/server-entry';\n * import type { ServerEntry } from '@tanstack/react-start/server-entry';\n *\n * const requestHandler: ServerEntry = wrapFetchWithSentry({\n * fetch(request: Request) {\n * return handler.fetch(request);\n * },\n * });\n *\n * export default serverEntry = createServerEntry(requestHandler);\n * ```\n *\n * @param serverEntry - request handler to wrap\n * @returns - wrapped request handler\n */\nexport function wrapFetchWithSentry(serverEntry: ServerEntry): ServerEntry {\n if (serverEntry.fetch) {\n serverEntry.fetch = new Proxy<typeof serverEntry.fetch>(serverEntry.fetch, {\n async apply(target, thisArg, args) {\n try {\n const request: Request = args[0];\n const url = new URL(request.url);\n const method = request.method || 'GET';\n\n // instrument server functions\n if (url.pathname.includes('_serverFn') || url.pathname.includes('createServerFn')) {\n return await startSpan(\n {\n name: `${method} ${url.pathname}`,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.tanstackstart.server',\n [SENTRY_OP]: FUNCTION,\n },\n },\n async () => {\n return target.apply(thisArg, args);\n },\n );\n }\n\n if (typeof __SENTRY_ROUTE_PATTERNS__ !== 'undefined') {\n updateSpanWithRouteParametrization(method, url.pathname, __SENTRY_ROUTE_PATTERNS__);\n }\n\n return injectMetaTagsInResponse(await target.apply(thisArg, args));\n } finally {\n await flushIfServerless();\n }\n },\n });\n }\n return serverEntry;\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- import '@sentry/server-utils/orchestrion/import-hook';
1
+ import '@sentry/server-runtime-injection/import-hook';
@@ -8,7 +8,6 @@ export * from './common';
8
8
  export declare function init(options: Options | clientSdk.BrowserOptions | serverSdk.NodeOptions): Client | undefined;
9
9
  export declare const linkedErrorsIntegration: typeof clientSdk.linkedErrorsIntegration;
10
10
  export declare const contextLinesIntegration: typeof clientSdk.contextLinesIntegration;
11
- export declare const spanStreamingIntegration: typeof clientSdk.spanStreamingIntegration;
12
11
  export declare const startSpan: typeof clientSdk.startSpan;
13
12
  export declare const startSpanManual: typeof clientSdk.startSpanManual;
14
13
  export declare const startInactiveSpan: typeof clientSdk.startInactiveSpan;
@@ -1 +1 @@
1
- {"version":3,"file":"index.types.d.ts","sourceRoot":"","sources":["../../src/index.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.types.d.ts","sourceRoot":"","sources":["../../src/index.types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"wrapFetchWithSentry.d.ts","sourceRoot":"","sources":["../../../src/server/wrapFetchWithSentry.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,WAAW,GAAG;IAKxB,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;CACvE,CAAC;AAgGF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,WAAW,CAqCzE"}
1
+ {"version":3,"file":"wrapFetchWithSentry.d.ts","sourceRoot":"","sources":["../../../src/server/wrapFetchWithSentry.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,WAAW,GAAG;IAKxB,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;CACvE,CAAC;AAgGF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,WAAW,CAqCzE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sentry/tanstackstart-react",
3
- "version": "11.0.0-alpha.2",
3
+ "version": "11.0.0-beta.1",
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",
@@ -52,13 +52,14 @@
52
52
  },
53
53
  "dependencies": {
54
54
  "@opentelemetry/api": "^1.9.1",
55
- "@sentry/browser-utils": "11.0.0-alpha.2",
55
+ "@sentry/browser-utils": "11.0.0-beta.1",
56
56
  "@sentry/conventions": "^0.20.0",
57
- "@sentry/core": "11.0.0-alpha.2",
58
- "@sentry/node": "11.0.0-alpha.2",
59
- "@sentry/react": "11.0.0-alpha.2",
60
- "@sentry/server-utils": "11.0.0-alpha.2",
61
- "@sentry/bundler-plugins": "11.0.0-alpha.2"
57
+ "@sentry/core": "11.0.0-beta.1",
58
+ "@sentry/node": "11.0.0-beta.1",
59
+ "@sentry/react": "11.0.0-beta.1",
60
+ "@sentry/server-runtime-injection": "11.0.0-beta.1",
61
+ "@sentry/server-utils": "11.0.0-beta.1",
62
+ "@sentry/bundler-plugins": "11.0.0-beta.1"
62
63
  },
63
64
  "devDependencies": {
64
65
  "vite": "^6.4.3"
@@ -86,5 +87,18 @@
86
87
  "volta": {
87
88
  "extends": "../../package.json"
88
89
  },
89
- "sideEffects": false
90
+ "sideEffects": false,
91
+ "nx": {
92
+ "targets": {
93
+ "build:transpile": {
94
+ "outputs": [
95
+ "{projectRoot}/build/esm",
96
+ "{projectRoot}/build/cjs",
97
+ "{projectRoot}/build/npm/esm",
98
+ "{projectRoot}/build/npm/cjs",
99
+ "{projectRoot}/build/import-hook.mjs"
100
+ ]
101
+ }
102
+ }
103
+ }
90
104
  }