@sentry/tanstackstart-react 10.53.1 → 10.54.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.
- package/build/cjs/client/index.js +5 -26
- package/build/cjs/client/index.js.map +1 -1
- package/build/cjs/client/sdk.js +2 -9
- package/build/cjs/client/sdk.js.map +1 -1
- package/build/cjs/client/tunnelRoute.js +2 -13
- package/build/cjs/client/tunnelRoute.js.map +1 -1
- package/build/cjs/server/globalMiddleware.js +7 -21
- package/build/cjs/server/globalMiddleware.js.map +1 -1
- package/build/cjs/server/index.js +8 -29
- package/build/cjs/server/index.js.map +1 -1
- package/build/cjs/server/middleware.js +10 -66
- package/build/cjs/server/middleware.js.map +1 -1
- package/build/cjs/server/sdk.js +2 -7
- package/build/cjs/server/sdk.js.map +1 -1
- package/build/cjs/server/tunnelRoute.js +11 -31
- package/build/cjs/server/tunnelRoute.js.map +1 -1
- package/build/cjs/server/utils.js +5 -17
- package/build/cjs/server/utils.js.map +1 -1
- package/build/cjs/server/wrapFetchWithSentry.js +9 -38
- package/build/cjs/server/wrapFetchWithSentry.js.map +1 -1
- package/build/cjs/vite/autoInstrumentMiddleware.js +15 -97
- package/build/cjs/vite/autoInstrumentMiddleware.js.map +1 -1
- package/build/cjs/vite/sentryTanstackStart.js +3 -40
- package/build/cjs/vite/sentryTanstackStart.js.map +1 -1
- package/build/cjs/vite/sourceMaps.js +30 -76
- package/build/cjs/vite/sourceMaps.js.map +1 -1
- package/build/cjs/vite/tunnelRoute.js +30 -63
- package/build/cjs/vite/tunnelRoute.js.map +1 -1
- package/build/esm/client/index.js +5 -26
- package/build/esm/client/index.js.map +1 -1
- package/build/esm/client/sdk.js +2 -9
- package/build/esm/client/sdk.js.map +1 -1
- package/build/esm/client/tunnelRoute.js +2 -13
- package/build/esm/client/tunnelRoute.js.map +1 -1
- package/build/esm/package.json +1 -1
- package/build/esm/server/globalMiddleware.js +7 -21
- package/build/esm/server/globalMiddleware.js.map +1 -1
- package/build/esm/server/index.js +8 -29
- package/build/esm/server/index.js.map +1 -1
- package/build/esm/server/middleware.js +10 -66
- package/build/esm/server/middleware.js.map +1 -1
- package/build/esm/server/sdk.js +2 -7
- package/build/esm/server/sdk.js.map +1 -1
- package/build/esm/server/tunnelRoute.js +11 -31
- package/build/esm/server/tunnelRoute.js.map +1 -1
- package/build/esm/server/utils.js +5 -17
- package/build/esm/server/utils.js.map +1 -1
- package/build/esm/server/wrapFetchWithSentry.js +9 -38
- package/build/esm/server/wrapFetchWithSentry.js.map +1 -1
- package/build/esm/vite/autoInstrumentMiddleware.js +15 -97
- package/build/esm/vite/autoInstrumentMiddleware.js.map +1 -1
- package/build/esm/vite/sentryTanstackStart.js +3 -40
- package/build/esm/vite/sentryTanstackStart.js.map +1 -1
- package/build/esm/vite/sourceMaps.js +30 -76
- package/build/esm/vite/sourceMaps.js.map +1 -1
- package/build/esm/vite/tunnelRoute.js +30 -63
- package/build/esm/vite/tunnelRoute.js.map +1 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tunnelRoute.js","sources":["../../../src/vite/tunnelRoute.ts"],"sourcesContent":["import type { Plugin } from 'vite';\n\nexport type TunnelRouteOptions =\n | true\n | string\n | {\n /**\n * A list of DSNs that are allowed to use the managed tunnel route.\n *\n * If omitted or empty, the tunnel route will derive the allowed DSN from the active server Sentry SDK at runtime.\n */\n allowedDsns?: string[];\n\n /**\n * Controls the public route path used by the managed tunnel route.\n *\n * If omitted, an opaque path is generated once per dev session or production build.\n */\n path?: string;\n };\n\nconst MANAGED_TUNNEL_ROUTE_IMPORT = 'SentryManagedTunnelRouteImport';\nconst MANAGED_TUNNEL_ROUTE_NAME = 'SentryManagedTunnelRoute';\nconst MANAGED_TUNNEL_ROUTE_PATH_ENV_KEY = '__SENTRY_INTERNAL_TANSTACKSTART_TUNNEL_ROUTE__';\n\nconst VIRTUAL_TUNNEL_ROUTE_ID = 'virtual:sentry-tanstackstart-react/tunnel-route';\nconst RESOLVED_VIRTUAL_TUNNEL_ROUTE_ID = `\\0${VIRTUAL_TUNNEL_ROUTE_ID}`;\n\nfunction generateRandomTunnelRoute(): string {\n const randomPath = Array.from({ length: 8 }, () => Math.floor(Math.random() * 36).toString(36)).join('');\n\n return `/${randomPath}`;\n}\n\nexport function resolveTunnelRoute(tunnel: true | string): string {\n if (typeof tunnel === 'string') {\n return tunnel;\n }\n\n if (process.env[MANAGED_TUNNEL_ROUTE_PATH_ENV_KEY]) {\n return process.env[MANAGED_TUNNEL_ROUTE_PATH_ENV_KEY];\n }\n\n const resolvedTunnelRoute = generateRandomTunnelRoute();\n process.env[MANAGED_TUNNEL_ROUTE_PATH_ENV_KEY] = resolvedTunnelRoute;\n return resolvedTunnelRoute;\n}\n\ntype NormalizedTunnelRouteOptions = {\n resolvedPath: string;\n allowedDsns: string[] | undefined;\n};\n\nfunction validateStaticPath(path: string): void {\n if (!path.startsWith('/') || path.includes('?') || path.includes('#')) {\n throw new Error(\n '[@sentry/tanstackstart-react] `tunnelRoute` static paths must start with `/` and must not contain query or hash segments.',\n );\n }\n}\n\nfunction normalizeTunnelRouteOptions(options: TunnelRouteOptions): NormalizedTunnelRouteOptions {\n if (options === true) {\n return { resolvedPath: resolveTunnelRoute(true), allowedDsns: undefined };\n }\n\n if (typeof options === 'string') {\n validateStaticPath(options);\n return {\n resolvedPath: resolveTunnelRoute(options),\n allowedDsns: undefined,\n };\n }\n\n const allowedDsns = options.allowedDsns && options.allowedDsns.length > 0 ? options.allowedDsns : undefined;\n const path = options.path;\n\n if (path) {\n validateStaticPath(path);\n }\n\n return { resolvedPath: resolveTunnelRoute(path || true), allowedDsns };\n}\n\n// `routeTree.gen.ts` quote style follows `tsr.config.json#quoteStyle` (`single` | `double`),\n// so we check both forms for each route-identifying key.\nconst ROUTE_CONFLICT_KEYS = ['fullPath', 'path', 'id'] as const;\n\nfunction hasRouteConflict(source: string, resolvedTunnelRoute: string): boolean {\n const literals = [`'${resolvedTunnelRoute}'`, `\"${resolvedTunnelRoute}\"`];\n return ROUTE_CONFLICT_KEYS.some(key => literals.some(literal => source.includes(`${key}: ${literal}`)));\n}\n\nfunction injectAfterLastImport(source: string, statement: string): string {\n const importMatches = [...source.matchAll(/^import .+$/gm)];\n const lastImport = importMatches.at(-1);\n\n if (lastImport?.index === undefined) {\n throw new Error(\n '[@sentry/tanstackstart-react] Failed to inject the managed tunnel route because `routeTree.gen.ts` imports could not be located.',\n );\n }\n\n const insertIndex = lastImport.index + lastImport[0].length;\n return `${source.slice(0, insertIndex)}\\n${statement}${source.slice(insertIndex)}`;\n}\n\nexport function injectManagedTunnelRoute(source: string, resolvedTunnelRoute: string): string {\n if (source.includes(VIRTUAL_TUNNEL_ROUTE_ID)) {\n return source;\n }\n\n if (hasRouteConflict(source, resolvedTunnelRoute)) {\n throw new Error(\n `[@sentry/tanstackstart-react] Cannot register managed tunnel route \"${resolvedTunnelRoute}\" because an existing TanStack Start route already uses that path.`,\n );\n }\n\n const serializedTunnelRoute = JSON.stringify(resolvedTunnelRoute);\n\n let transformedSource = injectAfterLastImport(\n source,\n `import { Route as ${MANAGED_TUNNEL_ROUTE_IMPORT} } from '${VIRTUAL_TUNNEL_ROUTE_ID}'`,\n );\n\n const rootRouteChildrenMatch = transformedSource.match(\n /const rootRouteChildren(?:\\s*:\\s*RootRouteChildren)?\\s*=\\s*\\{/,\n );\n\n if (rootRouteChildrenMatch?.index === undefined) {\n throw new Error(\n '[@sentry/tanstackstart-react] Failed to inject the managed tunnel route because the generated TanStack route tree did not contain `rootRouteChildren`.',\n );\n }\n\n const injectedRootRouteChildrenDeclaration = `const ${MANAGED_TUNNEL_ROUTE_NAME} = ${MANAGED_TUNNEL_ROUTE_IMPORT}.update({\n id: ${serializedTunnelRoute},\n path: ${serializedTunnelRoute},\n getParentRoute: () => rootRouteImport,\n} as any)\n\n${rootRouteChildrenMatch[0]}\n ${MANAGED_TUNNEL_ROUTE_NAME}: ${MANAGED_TUNNEL_ROUTE_NAME},\n`;\n\n transformedSource = `${transformedSource.slice(0, rootRouteChildrenMatch.index)}${injectedRootRouteChildrenDeclaration}${transformedSource.slice(rootRouteChildrenMatch.index + rootRouteChildrenMatch[0].length)}`;\n\n return transformedSource;\n}\n\nexport function makeTunnelRoutePlugin(options: TunnelRouteOptions, debug?: boolean): Plugin {\n const normalized = normalizeTunnelRouteOptions(options);\n const resolvedTunnelRoute = normalized.resolvedPath;\n const serializedTunnelRoute = JSON.stringify(resolvedTunnelRoute);\n const serializedAllowedDsns = normalized.allowedDsns ? JSON.stringify(normalized.allowedDsns) : undefined;\n\n if (debug) {\n // eslint-disable-next-line no-console\n console.log(`[@sentry/tanstackstart-react] Registered tunnel route: ${resolvedTunnelRoute}`);\n }\n\n return {\n name: 'sentry-tanstackstart-tunnel-route',\n enforce: 'pre',\n config() {\n return {\n define: {\n __SENTRY_TANSTACKSTART_TUNNEL_ROUTE__: serializedTunnelRoute,\n },\n };\n },\n resolveId(source) {\n return source === VIRTUAL_TUNNEL_ROUTE_ID ? RESOLVED_VIRTUAL_TUNNEL_ROUTE_ID : null;\n },\n load(id) {\n if (id !== RESOLVED_VIRTUAL_TUNNEL_ROUTE_ID) {\n return null;\n }\n\n return `import { createFileRoute } from '@tanstack/react-router';\n\nexport const Route = createFileRoute(${serializedTunnelRoute})({\n server: {\n handlers: {\n async POST({ request }) {\n const Sentry = await import('@sentry/tanstackstart-react');\n return Sentry.createSentryTunnelRoute(${serializedAllowedDsns ? `{ allowedDsns: ${serializedAllowedDsns} }` : `{}`}).handlers.POST({ request });\n },\n },\n },\n});\n`;\n },\n transform(source, id) {\n if (!id.endsWith('/routeTree.gen.ts') && !id.endsWith('\\\\routeTree.gen.ts')) {\n return null;\n }\n\n return injectManagedTunnelRoute(source, resolvedTunnelRoute);\n },\n };\n}\n"],"names":[],"mappings":"AAqBA,MAAM,2BAAA,GAA8B,gCAAgC;AACpE,MAAM,yBAAA,GAA4B,0BAA0B;AAC5D,MAAM,iCAAA,GAAoC,gDAAgD;;AAE1F,MAAM,uBAAA,GAA0B,iDAAiD;AACjF,MAAM,mCAAmC,CAAC,EAAE,EAAE,uBAAuB,CAAC,CAAA;;AAEA,SAAA,yBAAA,GAAA;AACA,EAAA,MAAA,UAAA,GAAA,KAAA,CAAA,IAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,EAAA,MAAA,IAAA,CAAA,KAAA,CAAA,IAAA,CAAA,MAAA,EAAA,GAAA,EAAA,CAAA,CAAA,QAAA,CAAA,EAAA,CAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA;;AAEA,EAAA,OAAA,CAAA,CAAA,EAAA,UAAA,CAAA,CAAA;AACA;;AAEA,SAAA,kBAAA,CAAA,MAAA,EAAA;AACA,EAAA,IAAA,OAAA,MAAA,KAAA,QAAA,EAAA;AACA,IAAA,OAAA,MAAA;AACA,EAAA;;AAEA,EAAA,IAAA,OAAA,CAAA,GAAA,CAAA,iCAAA,CAAA,EAAA;AACA,IAAA,OAAA,OAAA,CAAA,GAAA,CAAA,iCAAA,CAAA;AACA,EAAA;;AAEA,EAAA,MAAA,mBAAA,GAAA,yBAAA,EAAA;AACA,EAAA,OAAA,CAAA,GAAA,CAAA,iCAAA,CAAA,GAAA,mBAAA;AACA,EAAA,OAAA,mBAAA;AACA;;AAOA,SAAA,kBAAA,CAAA,IAAA,EAAA;AACA,EAAA,IAAA,CAAA,IAAA,CAAA,UAAA,CAAA,GAAA,CAAA,IAAA,IAAA,CAAA,QAAA,CAAA,GAAA,CAAA,IAAA,IAAA,CAAA,QAAA,CAAA,GAAA,CAAA,EAAA;AACA,IAAA,MAAA,IAAA,KAAA;AACA,MAAA,2HAAA;AACA,KAAA;AACA,EAAA;AACA;;AAEA,SAAA,2BAAA,CAAA,OAAA,EAAA;AACA,EAAA,IAAA,OAAA,KAAA,IAAA,EAAA;AACA,IAAA,OAAA,EAAA,YAAA,EAAA,kBAAA,CAAA,IAAA,CAAA,EAAA,WAAA,EAAA,SAAA,EAAA;AACA,EAAA;;AAEA,EAAA,IAAA,OAAA,OAAA,KAAA,QAAA,EAAA;AACA,IAAA,kBAAA,CAAA,OAAA,CAAA;AACA,IAAA,OAAA;AACA,MAAA,YAAA,EAAA,kBAAA,CAAA,OAAA,CAAA;AACA,MAAA,WAAA,EAAA,SAAA;AACA,KAAA;AACA,EAAA;;AAEA,EAAA,MAAA,WAAA,GAAA,OAAA,CAAA,WAAA,IAAA,OAAA,CAAA,WAAA,CAAA,MAAA,GAAA,CAAA,GAAA,OAAA,CAAA,WAAA,GAAA,SAAA;AACA,EAAA,MAAA,IAAA,GAAA,OAAA,CAAA,IAAA;;AAEA,EAAA,IAAA,IAAA,EAAA;AACA,IAAA,kBAAA,CAAA,IAAA,CAAA;AACA,EAAA;;AAEA,EAAA,OAAA,EAAA,YAAA,EAAA,kBAAA,CAAA,IAAA,IAAA,IAAA,CAAA,EAAA,WAAA,EAAA;AACA;;AAEA;AACA;AACA,MAAA,mBAAA,GAAA,CAAA,UAAA,EAAA,MAAA,EAAA,IAAA,CAAA;;AAEA,SAAA,gBAAA,CAAA,MAAA,EAAA,mBAAA,EAAA;AACA,EAAA,MAAA,QAAA,GAAA,CAAA,CAAA,CAAA,EAAA,mBAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,mBAAA,CAAA,CAAA,CAAA,CAAA;AACA,EAAA,OAAA,mBAAA,CAAA,IAAA,CAAA,GAAA,IAAA,QAAA,CAAA,IAAA,CAAA,OAAA,IAAA,MAAA,CAAA,QAAA,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,EAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA;;AAEA,SAAA,qBAAA,CAAA,MAAA,EAAA,SAAA,EAAA;AACA,EAAA,MAAA,aAAA,GAAA,CAAA,GAAA,MAAA,CAAA,QAAA,CAAA,eAAA,CAAA,CAAA;AACA,EAAA,MAAA,UAAA,GAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;AAEA,EAAA,IAAA,UAAA,EAAA,KAAA,KAAA,SAAA,EAAA;AACA,IAAA,MAAA,IAAA,KAAA;AACA,MAAA,kIAAA;AACA,KAAA;AACA,EAAA;;AAEA,EAAA,MAAA,WAAA,GAAA,UAAA,CAAA,KAAA,GAAA,UAAA,CAAA,CAAA,CAAA,CAAA,MAAA;AACA,EAAA,OAAA,CAAA,EAAA,MAAA,CAAA,KAAA,CAAA,CAAA,EAAA,WAAA,CAAA,CAAA,EAAA,EAAA,SAAA,CAAA,EAAA,MAAA,CAAA,KAAA,CAAA,WAAA,CAAA,CAAA,CAAA;AACA;;AAEA,SAAA,wBAAA,CAAA,MAAA,EAAA,mBAAA,EAAA;AACA,EAAA,IAAA,MAAA,CAAA,QAAA,CAAA,uBAAA,CAAA,EAAA;AACA,IAAA,OAAA,MAAA;AACA,EAAA;;AAEA,EAAA,IAAA,gBAAA,CAAA,MAAA,EAAA,mBAAA,CAAA,EAAA;AACA,IAAA,MAAA,IAAA,KAAA;AACA,MAAA,CAAA,oEAAA,EAAA,mBAAA,CAAA,kEAAA,CAAA;AACA,KAAA;AACA,EAAA;;AAEA,EAAA,MAAA,qBAAA,GAAA,IAAA,CAAA,SAAA,CAAA,mBAAA,CAAA;;AAEA,EAAA,IAAA,iBAAA,GAAA,qBAAA;AACA,IAAA,MAAA;AACA,IAAA,CAAA,kBAAA,EAAA,2BAAA,CAAA,SAAA,EAAA,uBAAA,CAAA,CAAA,CAAA;AACA,GAAA;;AAEA,EAAA,MAAA,sBAAA,GAAA,iBAAA,CAAA,KAAA;AACA,IAAA,+DAAA;AACA,GAAA;;AAEA,EAAA,IAAA,sBAAA,EAAA,KAAA,KAAA,SAAA,EAAA;AACA,IAAA,MAAA,IAAA,KAAA;AACA,MAAA,wJAAA;AACA,KAAA;AACA,EAAA;;AAEA,EAAA,MAAA,oCAAA,GAAA,CAAA,MAAA,EAAA,yBAAA,CAAA,GAAA,EAAA,2BAAA,CAAA;AACA,MAAA,EAAA,qBAAA,CAAA;AACA,QAAA,EAAA,qBAAA,CAAA;AACA;AACA;;AAEA,EAAA,sBAAA,CAAA,CAAA,CAAA;AACA,EAAA,EAAA,yBAAA,CAAA,EAAA,EAAA,yBAAA,CAAA;AACA,CAAA;;AAEA,EAAA,iBAAA,GAAA,CAAA,EAAA,iBAAA,CAAA,KAAA,CAAA,CAAA,EAAA,sBAAA,CAAA,KAAA,CAAA,CAAA,EAAA,oCAAA,CAAA,EAAA,iBAAA,CAAA,KAAA,CAAA,sBAAA,CAAA,KAAA,GAAA,sBAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,CAAA;;AAEA,EAAA,OAAA,iBAAA;AACA;;AAEA,SAAA,qBAAA,CAAA,OAAA,EAAA,KAAA,EAAA;AACA,EAAA,MAAA,UAAA,GAAA,2BAAA,CAAA,OAAA,CAAA;AACA,EAAA,MAAA,mBAAA,GAAA,UAAA,CAAA,YAAA;AACA,EAAA,MAAA,qBAAA,GAAA,IAAA,CAAA,SAAA,CAAA,mBAAA,CAAA;AACA,EAAA,MAAA,qBAAA,GAAA,UAAA,CAAA,WAAA,GAAA,IAAA,CAAA,SAAA,CAAA,UAAA,CAAA,WAAA,CAAA,GAAA,SAAA;;AAEA,EAAA,IAAA,KAAA,EAAA;AACA;AACA,IAAA,OAAA,CAAA,GAAA,CAAA,CAAA,uDAAA,EAAA,mBAAA,CAAA,CAAA,CAAA;AACA,EAAA;;AAEA,EAAA,OAAA;AACA,IAAA,IAAA,EAAA,mCAAA;AACA,IAAA,OAAA,EAAA,KAAA;AACA,IAAA,MAAA,GAAA;AACA,MAAA,OAAA;AACA,QAAA,MAAA,EAAA;AACA,UAAA,qCAAA,EAAA,qBAAA;AACA,SAAA;AACA,OAAA;AACA,IAAA,CAAA;AACA,IAAA,SAAA,CAAA,MAAA,EAAA;AACA,MAAA,OAAA,MAAA,KAAA,uBAAA,GAAA,gCAAA,GAAA,IAAA;AACA,IAAA,CAAA;AACA,IAAA,IAAA,CAAA,EAAA,EAAA;AACA,MAAA,IAAA,EAAA,KAAA,gCAAA,EAAA;AACA,QAAA,OAAA,IAAA;AACA,MAAA;;AAEA,MAAA,OAAA,CAAA;;AAEA,qCAAA,EAAA,qBAAA,CAAA;AACA;AACA;AACA;AACA;AACA,8CAAA,EAAA,qBAAA,GAAA,CAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,CAAA,GAAA,CAAA,EAAA,CAAA,CAAA;AACA;AACA;AACA;AACA;AACA,CAAA;AACA,IAAA,CAAA;AACA,IAAA,SAAA,CAAA,MAAA,EAAA,EAAA,EAAA;AACA,MAAA,IAAA,CAAA,EAAA,CAAA,QAAA,CAAA,mBAAA,CAAA,IAAA,CAAA,EAAA,CAAA,QAAA,CAAA,oBAAA,CAAA,EAAA;AACA,QAAA,OAAA,IAAA;AACA,MAAA;;AAEA,MAAA,OAAA,wBAAA,CAAA,MAAA,EAAA,mBAAA,CAAA;AACA,IAAA,CAAA;AACA,GAAA;AACA;;;;"}
|
|
1
|
+
{"version":3,"file":"tunnelRoute.js","sources":["../../../src/vite/tunnelRoute.ts"],"sourcesContent":["import type { Plugin } from 'vite';\n\nexport type TunnelRouteOptions =\n | true\n | string\n | {\n /**\n * A list of DSNs that are allowed to use the managed tunnel route.\n *\n * If omitted or empty, the tunnel route will derive the allowed DSN from the active server Sentry SDK at runtime.\n */\n allowedDsns?: string[];\n\n /**\n * Controls the public route path used by the managed tunnel route.\n *\n * If omitted, an opaque path is generated once per dev session or production build.\n */\n path?: string;\n };\n\nconst MANAGED_TUNNEL_ROUTE_IMPORT = 'SentryManagedTunnelRouteImport';\nconst MANAGED_TUNNEL_ROUTE_NAME = 'SentryManagedTunnelRoute';\nconst MANAGED_TUNNEL_ROUTE_PATH_ENV_KEY = '__SENTRY_INTERNAL_TANSTACKSTART_TUNNEL_ROUTE__';\n\nconst VIRTUAL_TUNNEL_ROUTE_ID = 'virtual:sentry-tanstackstart-react/tunnel-route';\nconst RESOLVED_VIRTUAL_TUNNEL_ROUTE_ID = `\\0${VIRTUAL_TUNNEL_ROUTE_ID}`;\n\nfunction generateRandomTunnelRoute(): string {\n const randomPath = Array.from({ length: 8 }, () => Math.floor(Math.random() * 36).toString(36)).join('');\n\n return `/${randomPath}`;\n}\n\nexport function resolveTunnelRoute(tunnel: true | string): string {\n if (typeof tunnel === 'string') {\n return tunnel;\n }\n\n if (process.env[MANAGED_TUNNEL_ROUTE_PATH_ENV_KEY]) {\n return process.env[MANAGED_TUNNEL_ROUTE_PATH_ENV_KEY];\n }\n\n const resolvedTunnelRoute = generateRandomTunnelRoute();\n process.env[MANAGED_TUNNEL_ROUTE_PATH_ENV_KEY] = resolvedTunnelRoute;\n return resolvedTunnelRoute;\n}\n\ntype NormalizedTunnelRouteOptions = {\n resolvedPath: string;\n allowedDsns: string[] | undefined;\n};\n\nfunction validateStaticPath(path: string): void {\n if (!path.startsWith('/') || path.includes('?') || path.includes('#')) {\n throw new Error(\n '[@sentry/tanstackstart-react] `tunnelRoute` static paths must start with `/` and must not contain query or hash segments.',\n );\n }\n}\n\nfunction normalizeTunnelRouteOptions(options: TunnelRouteOptions): NormalizedTunnelRouteOptions {\n if (options === true) {\n return { resolvedPath: resolveTunnelRoute(true), allowedDsns: undefined };\n }\n\n if (typeof options === 'string') {\n validateStaticPath(options);\n return {\n resolvedPath: resolveTunnelRoute(options),\n allowedDsns: undefined,\n };\n }\n\n const allowedDsns = options.allowedDsns && options.allowedDsns.length > 0 ? options.allowedDsns : undefined;\n const path = options.path;\n\n if (path) {\n validateStaticPath(path);\n }\n\n return { resolvedPath: resolveTunnelRoute(path || true), allowedDsns };\n}\n\n// `routeTree.gen.ts` quote style follows `tsr.config.json#quoteStyle` (`single` | `double`),\n// so we check both forms for each route-identifying key.\nconst ROUTE_CONFLICT_KEYS = ['fullPath', 'path', 'id'] as const;\n\nfunction hasRouteConflict(source: string, resolvedTunnelRoute: string): boolean {\n const literals = [`'${resolvedTunnelRoute}'`, `\"${resolvedTunnelRoute}\"`];\n return ROUTE_CONFLICT_KEYS.some(key => literals.some(literal => source.includes(`${key}: ${literal}`)));\n}\n\nfunction injectAfterLastImport(source: string, statement: string): string {\n const importMatches = [...source.matchAll(/^import .+$/gm)];\n const lastImport = importMatches.at(-1);\n\n if (lastImport?.index === undefined) {\n throw new Error(\n '[@sentry/tanstackstart-react] Failed to inject the managed tunnel route because `routeTree.gen.ts` imports could not be located.',\n );\n }\n\n const insertIndex = lastImport.index + lastImport[0].length;\n return `${source.slice(0, insertIndex)}\\n${statement}${source.slice(insertIndex)}`;\n}\n\nexport function injectManagedTunnelRoute(source: string, resolvedTunnelRoute: string): string {\n if (source.includes(VIRTUAL_TUNNEL_ROUTE_ID)) {\n return source;\n }\n\n if (hasRouteConflict(source, resolvedTunnelRoute)) {\n throw new Error(\n `[@sentry/tanstackstart-react] Cannot register managed tunnel route \"${resolvedTunnelRoute}\" because an existing TanStack Start route already uses that path.`,\n );\n }\n\n const serializedTunnelRoute = JSON.stringify(resolvedTunnelRoute);\n\n let transformedSource = injectAfterLastImport(\n source,\n `import { Route as ${MANAGED_TUNNEL_ROUTE_IMPORT} } from '${VIRTUAL_TUNNEL_ROUTE_ID}'`,\n );\n\n const rootRouteChildrenMatch = transformedSource.match(\n /const rootRouteChildren(?:\\s*:\\s*RootRouteChildren)?\\s*=\\s*\\{/,\n );\n\n if (rootRouteChildrenMatch?.index === undefined) {\n throw new Error(\n '[@sentry/tanstackstart-react] Failed to inject the managed tunnel route because the generated TanStack route tree did not contain `rootRouteChildren`.',\n );\n }\n\n const injectedRootRouteChildrenDeclaration = `const ${MANAGED_TUNNEL_ROUTE_NAME} = ${MANAGED_TUNNEL_ROUTE_IMPORT}.update({\n id: ${serializedTunnelRoute},\n path: ${serializedTunnelRoute},\n getParentRoute: () => rootRouteImport,\n} as any)\n\n${rootRouteChildrenMatch[0]}\n ${MANAGED_TUNNEL_ROUTE_NAME}: ${MANAGED_TUNNEL_ROUTE_NAME},\n`;\n\n transformedSource = `${transformedSource.slice(0, rootRouteChildrenMatch.index)}${injectedRootRouteChildrenDeclaration}${transformedSource.slice(rootRouteChildrenMatch.index + rootRouteChildrenMatch[0].length)}`;\n\n return transformedSource;\n}\n\nexport function makeTunnelRoutePlugin(options: TunnelRouteOptions, debug?: boolean): Plugin {\n const normalized = normalizeTunnelRouteOptions(options);\n const resolvedTunnelRoute = normalized.resolvedPath;\n const serializedTunnelRoute = JSON.stringify(resolvedTunnelRoute);\n const serializedAllowedDsns = normalized.allowedDsns ? JSON.stringify(normalized.allowedDsns) : undefined;\n\n if (debug) {\n // eslint-disable-next-line no-console\n console.log(`[@sentry/tanstackstart-react] Registered tunnel route: ${resolvedTunnelRoute}`);\n }\n\n return {\n name: 'sentry-tanstackstart-tunnel-route',\n enforce: 'pre',\n config() {\n return {\n define: {\n __SENTRY_TANSTACKSTART_TUNNEL_ROUTE__: serializedTunnelRoute,\n },\n };\n },\n resolveId(source) {\n return source === VIRTUAL_TUNNEL_ROUTE_ID ? RESOLVED_VIRTUAL_TUNNEL_ROUTE_ID : null;\n },\n load(id) {\n if (id !== RESOLVED_VIRTUAL_TUNNEL_ROUTE_ID) {\n return null;\n }\n\n return `import { createFileRoute } from '@tanstack/react-router';\n\nexport const Route = createFileRoute(${serializedTunnelRoute})({\n server: {\n handlers: {\n async POST({ request }) {\n const Sentry = await import('@sentry/tanstackstart-react');\n return Sentry.createSentryTunnelRoute(${serializedAllowedDsns ? `{ allowedDsns: ${serializedAllowedDsns} }` : `{}`}).handlers.POST({ request });\n },\n },\n },\n});\n`;\n },\n transform(source, id) {\n if (!id.endsWith('/routeTree.gen.ts') && !id.endsWith('\\\\routeTree.gen.ts')) {\n return null;\n }\n\n return injectManagedTunnelRoute(source, resolvedTunnelRoute);\n },\n };\n}\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sentry/tanstackstart-react",
|
|
3
|
-
"version": "10.
|
|
3
|
+
"version": "10.54.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",
|
|
@@ -65,10 +65,10 @@
|
|
|
65
65
|
"dependencies": {
|
|
66
66
|
"@opentelemetry/api": "^1.9.1",
|
|
67
67
|
"@opentelemetry/semantic-conventions": "^1.40.0",
|
|
68
|
-
"@sentry-internal/browser-utils": "10.
|
|
69
|
-
"@sentry/core": "10.
|
|
70
|
-
"@sentry/node": "10.
|
|
71
|
-
"@sentry/react": "10.
|
|
68
|
+
"@sentry-internal/browser-utils": "10.54.0",
|
|
69
|
+
"@sentry/core": "10.54.0",
|
|
70
|
+
"@sentry/node": "10.54.0",
|
|
71
|
+
"@sentry/react": "10.54.0",
|
|
72
72
|
"@sentry/vite-plugin": "^5.3.0"
|
|
73
73
|
},
|
|
74
74
|
"devDependencies": {
|