autotel-tanstack 1.13.42 → 1.13.44

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 (62) hide show
  1. package/dist/auto.d.ts +2 -3
  2. package/dist/auto.d.ts.map +1 -1
  3. package/dist/browser/context.d.ts.map +1 -1
  4. package/dist/browser/context.js.map +1 -1
  5. package/dist/browser/debug-headers.d.ts +0 -1
  6. package/dist/browser/debug-headers.d.ts.map +1 -1
  7. package/dist/browser/error-reporting.d.ts.map +1 -1
  8. package/dist/browser/handlers.d.ts +0 -1
  9. package/dist/browser/handlers.d.ts.map +1 -1
  10. package/dist/browser/loaders.d.ts +0 -1
  11. package/dist/browser/loaders.d.ts.map +1 -1
  12. package/dist/browser/metrics.d.ts.map +1 -1
  13. package/dist/browser/middleware.d.ts +0 -1
  14. package/dist/browser/middleware.d.ts.map +1 -1
  15. package/dist/browser/server-functions.d.ts +0 -1
  16. package/dist/browser/server-functions.d.ts.map +1 -1
  17. package/dist/browser/testing.d.ts.map +1 -1
  18. package/dist/context.d.ts +2 -2
  19. package/dist/context.d.ts.map +1 -1
  20. package/dist/context.js +2 -1
  21. package/dist/context.js.map +1 -1
  22. package/dist/control-flow-p-dnko0G.js +78 -0
  23. package/dist/control-flow-p-dnko0G.js.map +1 -0
  24. package/dist/debug-headers.d.ts +0 -1
  25. package/dist/debug-headers.d.ts.map +1 -1
  26. package/dist/error-reporting.d.ts.map +1 -1
  27. package/dist/handlers.d.ts +1 -2
  28. package/dist/handlers.d.ts.map +1 -1
  29. package/dist/handlers.js +22 -6
  30. package/dist/handlers.js.map +1 -1
  31. package/dist/index.d.ts +3 -4
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +1 -1
  34. package/dist/{instrument-DS7YCE1R.d.ts → instrument-B4bfWksz.d.ts} +1 -2
  35. package/dist/instrument-B4bfWksz.d.ts.map +1 -0
  36. package/dist/{loaders-dci0y1cD.d.ts → loaders-DMUCHc32.d.ts} +113 -145
  37. package/dist/loaders-DMUCHc32.d.ts.map +1 -0
  38. package/dist/loaders.d.ts +1 -1
  39. package/dist/loaders.js +31 -12
  40. package/dist/loaders.js.map +1 -1
  41. package/dist/metrics.d.ts.map +1 -1
  42. package/dist/middleware.d.ts +1 -2
  43. package/dist/middleware.d.ts.map +1 -1
  44. package/dist/middleware.js +22 -6
  45. package/dist/middleware.js.map +1 -1
  46. package/dist/server-functions.d.ts +1 -2
  47. package/dist/server-functions.d.ts.map +1 -1
  48. package/dist/server-functions.js +12 -4
  49. package/dist/server-functions.js.map +1 -1
  50. package/dist/testing.d.ts +0 -1
  51. package/dist/testing.d.ts.map +1 -1
  52. package/dist/testing.js.map +1 -1
  53. package/dist/types-BJ7FyVoX.d.ts.map +1 -1
  54. package/dist/{types-pQgmQa4j.d.ts → types-zkKShSiK.d.ts} +1 -2
  55. package/dist/types-zkKShSiK.d.ts.map +1 -0
  56. package/package.json +11 -12
  57. package/skills/autotel-tanstack/SKILL.md +5 -5
  58. package/dist/instrument-DS7YCE1R.d.ts.map +0 -1
  59. package/dist/loaders-dci0y1cD.d.ts.map +0 -1
  60. package/dist/types-BrccP0yX.js +0 -38
  61. package/dist/types-BrccP0yX.js.map +0 -1
  62. package/dist/types-pQgmQa4j.d.ts.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loaders-DMUCHc32.d.ts","names":[],"sources":["../../../node_modules/.pnpm/@tanstack+history@1.162.0/node_modules/@tanstack/history/dist/esm/index.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/fileRoute.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/utils.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/link.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/routeInfo.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/redirect.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/Matches.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/root.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/RouterProvider.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/ssr/serializer/RawStream.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/ssr/serializer/transformer.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/route.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/validators.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/location.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/load-matches.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/lru-cache.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/new-process-route-tree.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/searchParams.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/manifest.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/stores.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/router.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/global.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/structuralSharing.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/useRouteContext.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/useSearch.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/useParams.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/useNavigate.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/useLoaderDeps.d.ts","../../../node_modules/.pnpm/@tanstack+router-core@1.171.15/node_modules/@tanstack/router-core/dist/esm/useLoaderData.d.ts","../../../node_modules/.pnpm/@tanstack+react-router@1.170.18_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-router/dist/esm/structuralSharing.d.ts","../../../node_modules/.pnpm/@tanstack+react-router@1.170.18_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-router/dist/esm/useLoaderData.d.ts","../../../node_modules/.pnpm/@tanstack+react-router@1.170.18_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-router/dist/esm/useMatch.d.ts","../../../node_modules/.pnpm/@tanstack+react-router@1.170.18_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-router/dist/esm/useLoaderDeps.d.ts","../../../node_modules/.pnpm/@tanstack+react-router@1.170.18_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-router/dist/esm/useParams.d.ts","../../../node_modules/.pnpm/@tanstack+react-router@1.170.18_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-router/dist/esm/useSearch.d.ts","../../../node_modules/.pnpm/@tanstack+react-router@1.170.18_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-router/dist/esm/useRouteContext.d.ts","../../../node_modules/.pnpm/@tanstack+react-router@1.170.18_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-router/dist/esm/link.d.ts","../../../node_modules/.pnpm/@tanstack+react-router@1.170.18_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-router/dist/esm/route.d.ts","../../../node_modules/.pnpm/@tanstack+react-router@1.170.18_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-router/dist/esm/fileRoute.d.ts","../../../node_modules/.pnpm/@tanstack+react-router@1.170.18_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-router/dist/esm/history.d.ts","../../../node_modules/.pnpm/@tanstack+react-router@1.170.18_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-router/dist/esm/Matches.d.ts","../../../node_modules/.pnpm/@tanstack+react-router@1.170.18_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-router/dist/esm/router.d.ts","../../../node_modules/.pnpm/@tanstack+react-router@1.170.18_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-router/dist/esm/ssr/serializer.d.ts","../src/loaders.ts"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"mappings":"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"}
package/dist/loaders.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { i as LoaderFnContext, n as traceBeforeLoad, r as traceLoader, t as createTracedRoute } from "./loaders-dci0y1cD.js";
1
+ import { i as LoaderFnContext, n as traceBeforeLoad, r as traceLoader, t as createTracedRoute } from "./loaders-DMUCHc32.js";
2
2
  export { type LoaderFnContext, createTracedRoute, traceBeforeLoad, traceLoader };
package/dist/loaders.js CHANGED
@@ -1,7 +1,7 @@
1
- import { n as SPAN_ATTRIBUTES } from "./types-BrccP0yX.js";
1
+ import { i as SPAN_ATTRIBUTES, n as isRealError, t as isControlFlowSignal } from "./control-flow-p-dnko0G.js";
2
2
  import { r as isServerSide } from "./env-BpFWNnpL.js";
3
3
  import { SpanStatusCode } from "@opentelemetry/api";
4
- import { trace } from "autotel";
4
+ import { getActiveTraceContext, trace } from "autotel";
5
5
 
6
6
  //#region src/loaders.ts
7
7
  /**
@@ -49,7 +49,11 @@ function traceLoader(loaderFn, config = {}) {
49
49
  const routeId = context?.route?.id || "unknown";
50
50
  const spanName = config.name || `tanstack.loader.${routeId}`;
51
51
  const result = loaderFn(context);
52
- if (!(result instanceof Promise)) return trace(spanName, (ctx) => {
52
+ if (!(result instanceof Promise)) return trace({
53
+ name: spanName,
54
+ isError: isRealError
55
+ }, () => {
56
+ const ctx = getActiveTraceContext();
53
57
  ctx.setAttributes({
54
58
  [SPAN_ATTRIBUTES.TANSTACK_TYPE]: "loader",
55
59
  [SPAN_ATTRIBUTES.TANSTACK_LOADER_ROUTE_ID]: routeId,
@@ -67,8 +71,12 @@ function traceLoader(loaderFn, config = {}) {
67
71
  }
68
72
  ctx.setStatus({ code: SpanStatusCode.OK });
69
73
  return result;
70
- });
71
- return trace(spanName, async (ctx) => {
74
+ })();
75
+ return trace({
76
+ name: spanName,
77
+ isError: isRealError
78
+ }, async () => {
79
+ const ctx = getActiveTraceContext();
72
80
  ctx.setAttributes({
73
81
  [SPAN_ATTRIBUTES.TANSTACK_TYPE]: "loader",
74
82
  [SPAN_ATTRIBUTES.TANSTACK_LOADER_ROUTE_ID]: routeId,
@@ -89,11 +97,15 @@ function traceLoader(loaderFn, config = {}) {
89
97
  ctx.setStatus({ code: SpanStatusCode.OK });
90
98
  return asyncResult;
91
99
  } catch (error) {
100
+ if (isControlFlowSignal(error)) {
101
+ ctx.setStatus({ code: SpanStatusCode.OK });
102
+ throw error;
103
+ }
92
104
  if ("recordError" in ctx && typeof ctx.recordError === "function") ctx.recordError(error);
93
105
  else if ("recordException" in ctx && typeof ctx.recordException === "function") ctx.recordException(error);
94
106
  throw error;
95
107
  }
96
- });
108
+ })();
97
109
  };
98
110
  return wrapped;
99
111
  }
@@ -138,7 +150,11 @@ function traceBeforeLoad(beforeLoadFn, config = {}) {
138
150
  const routeId = input?.route?.id || "unknown";
139
151
  const spanName = config.name || `tanstack.beforeLoad.${routeId}`;
140
152
  const result = beforeLoadFn(input);
141
- if (!(result instanceof Promise)) return trace(spanName, (ctx) => {
153
+ if (!(result instanceof Promise)) return trace({
154
+ name: spanName,
155
+ isError: isRealError
156
+ }, () => {
157
+ const ctx = getActiveTraceContext();
142
158
  ctx.setAttributes({
143
159
  [SPAN_ATTRIBUTES.TANSTACK_TYPE]: "beforeLoad",
144
160
  [SPAN_ATTRIBUTES.TANSTACK_LOADER_ROUTE_ID]: routeId,
@@ -151,8 +167,12 @@ function traceBeforeLoad(beforeLoadFn, config = {}) {
151
167
  }
152
168
  ctx.setStatus({ code: SpanStatusCode.OK });
153
169
  return result;
154
- });
155
- return trace(spanName, async (ctx) => {
170
+ })();
171
+ return trace({
172
+ name: spanName,
173
+ isError: isRealError
174
+ }, async () => {
175
+ const ctx = getActiveTraceContext();
156
176
  ctx.setAttributes({
157
177
  [SPAN_ATTRIBUTES.TANSTACK_TYPE]: "beforeLoad",
158
178
  [SPAN_ATTRIBUTES.TANSTACK_LOADER_ROUTE_ID]: routeId,
@@ -168,15 +188,14 @@ function traceBeforeLoad(beforeLoadFn, config = {}) {
168
188
  ctx.setStatus({ code: SpanStatusCode.OK });
169
189
  return asyncResult;
170
190
  } catch (error) {
171
- const errorName = error.name;
172
- if (errorName === "RedirectError" || errorName === "NotFoundError") {
191
+ if (isControlFlowSignal(error)) {
173
192
  ctx.setAttribute("tanstack.beforeLoad.redirect", true);
174
193
  ctx.setStatus({ code: SpanStatusCode.OK });
175
194
  } else if ("recordError" in ctx && typeof ctx.recordError === "function") ctx.recordError(error);
176
195
  else if ("recordException" in ctx && typeof ctx.recordException === "function") ctx.recordException(error);
177
196
  throw error;
178
197
  }
179
- });
198
+ })();
180
199
  };
181
200
  return wrapped;
182
201
  }
@@ -1 +1 @@
1
- {"version":3,"file":"loaders.js","names":[],"sources":["../src/loaders.ts"],"sourcesContent":["import { SpanStatusCode } from '@opentelemetry/api';\nimport { trace, type TraceContext } from 'autotel';\nimport { isServerSide } from './env';\nimport { type TraceLoaderConfig, SPAN_ATTRIBUTES } from './types';\n\n// Re-export types from @tanstack/react-router for consumers who need them\nexport type { LoaderFnContext } from '@tanstack/react-router';\n\n/**\n * Internal type for extracting route info from TanStack context.\n * This is a minimal interface used only for instrumentation - the actual\n * TanStack types flow through the generic parameter.\n */\ninterface TanStackContextInternal {\n route?: { id?: string };\n params?: Record<string, string>;\n}\n\n/**\n * Wrap a TanStack route loader with OpenTelemetry tracing\n *\n * This function wraps a loader function to automatically create spans\n * for each invocation. It captures route ID, params (optionally),\n * and errors.\n *\n * The generic type TLoaderFn preserves the full TanStack Router type inference,\n * including typed params, context, and return types.\n *\n * @param loaderFn - The loader function to wrap\n * @param config - Configuration options\n * @returns Wrapped loader function with tracing (preserves original types)\n *\n * @example\n * ```typescript\n * import { createFileRoute } from '@tanstack/react-router';\n * import { traceLoader } from 'autotel-tanstack/loaders';\n *\n * export const Route = createFileRoute('/users/$userId')({\n * // Types are fully preserved - params.userId is typed as string\n * loader: traceLoader(async ({ params }) => {\n * return await db.users.findUnique({ where: { id: params.userId } });\n * }),\n * });\n * ```\n *\n * @example\n * ```typescript\n * // Sync loaders are also supported\n * export const Route = createFileRoute('/static')({\n * loader: traceLoader(({ context }) => ({\n * message: `Welcome, ${context.userId}!`,\n * })),\n * });\n * ```\n */\nexport function traceLoader<TLoaderFn extends (ctx: any) => any>(\n loaderFn: TLoaderFn,\n config: TraceLoaderConfig = {},\n): TLoaderFn {\n const captureParams = config.captureParams ?? true;\n const captureResult = config.captureResult ?? false;\n\n const wrapped = (context: TanStackContextInternal) => {\n // If we're in the browser, just call the loader without tracing\n // This prevents autotel (which uses Node.js APIs) from being executed in the browser\n if (!isServerSide()) {\n return loaderFn(context);\n }\n\n const routeId = context?.route?.id || 'unknown';\n const spanName = config.name || `tanstack.loader.${routeId}`;\n\n // Handle both sync and async loaders\n const result = loaderFn(context);\n const isPromise = result instanceof Promise;\n\n if (!isPromise) {\n // Sync loader - wrap in trace synchronously\n return trace(spanName, (ctx: TraceContext) => {\n ctx.setAttributes({\n [SPAN_ATTRIBUTES.TANSTACK_TYPE]: 'loader',\n [SPAN_ATTRIBUTES.TANSTACK_LOADER_ROUTE_ID]: routeId,\n [SPAN_ATTRIBUTES.TANSTACK_LOADER_TYPE]: 'loader',\n });\n\n if (captureParams && context?.params) {\n try {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_LOADER_PARAMS,\n JSON.stringify(context.params),\n );\n } catch {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_LOADER_PARAMS,\n '[non-serializable]',\n );\n }\n }\n\n if (captureResult && result !== undefined) {\n try {\n ctx.setAttribute('tanstack.loader.result', JSON.stringify(result));\n } catch {\n ctx.setAttribute('tanstack.loader.result', '[non-serializable]');\n }\n }\n\n ctx.setStatus({ code: SpanStatusCode.OK });\n return result;\n });\n }\n\n // Async loader\n return trace(spanName, async (ctx: TraceContext) => {\n ctx.setAttributes({\n [SPAN_ATTRIBUTES.TANSTACK_TYPE]: 'loader',\n [SPAN_ATTRIBUTES.TANSTACK_LOADER_ROUTE_ID]: routeId,\n [SPAN_ATTRIBUTES.TANSTACK_LOADER_TYPE]: 'loader',\n });\n\n if (captureParams && context?.params) {\n try {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_LOADER_PARAMS,\n JSON.stringify(context.params),\n );\n } catch {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_LOADER_PARAMS,\n '[non-serializable]',\n );\n }\n }\n\n try {\n const asyncResult = await result;\n\n if (captureResult && asyncResult !== undefined) {\n try {\n ctx.setAttribute(\n 'tanstack.loader.result',\n JSON.stringify(asyncResult),\n );\n } catch {\n ctx.setAttribute('tanstack.loader.result', '[non-serializable]');\n }\n }\n\n ctx.setStatus({ code: SpanStatusCode.OK });\n return asyncResult;\n } catch (error) {\n if ('recordError' in ctx && typeof ctx.recordError === 'function') {\n ctx.recordError(error);\n } else if (\n 'recordException' in ctx &&\n typeof ctx.recordException === 'function'\n ) {\n ctx.recordException(error);\n }\n throw error;\n }\n });\n };\n\n return wrapped as TLoaderFn;\n}\n\n/**\n * Wrap a TanStack route beforeLoad function with OpenTelemetry tracing\n *\n * This function wraps a beforeLoad function to automatically create spans.\n * beforeLoad runs before the route component renders and is typically\n * used for auth checks, redirects, or data prefetching.\n *\n * The generic type TBeforeLoadFn preserves the full TanStack Router type inference,\n * including typed params, context, search, and return types.\n *\n * @param beforeLoadFn - The beforeLoad function to wrap\n * @param config - Configuration options\n * @returns Wrapped beforeLoad function with tracing (preserves original types)\n *\n * @example\n * ```typescript\n * import { createFileRoute, redirect } from '@tanstack/react-router';\n * import { traceBeforeLoad } from 'autotel-tanstack/loaders';\n *\n * export const Route = createFileRoute('/dashboard')({\n * // Types are fully preserved - context, params, search are all typed\n * beforeLoad: traceBeforeLoad(async ({ context, params }) => {\n * if (!context.auth.isAuthenticated) {\n * throw redirect({ to: '/login' });\n * }\n * return { userId: params.userId }; // Return type flows to loader context\n * }),\n * loader: ({ context }) => {\n * // context.userId is typed from beforeLoad return\n * return { user: context.userId };\n * },\n * });\n * ```\n */\nexport function traceBeforeLoad<TBeforeLoadFn extends (opts: any) => any>(\n beforeLoadFn: TBeforeLoadFn,\n config: TraceLoaderConfig = {},\n): TBeforeLoadFn {\n const captureParams = config.captureParams ?? true;\n\n const wrapped = (input: TanStackContextInternal) => {\n // Skip tracing in browser\n if (!isServerSide()) {\n return beforeLoadFn(input);\n }\n\n const routeId = input?.route?.id || 'unknown';\n const spanName = config.name || `tanstack.beforeLoad.${routeId}`;\n\n // Handle both sync and async beforeLoad\n const result = beforeLoadFn(input);\n const isPromise = result instanceof Promise;\n\n if (!isPromise) {\n // Sync beforeLoad\n return trace(spanName, (ctx: TraceContext) => {\n ctx.setAttributes({\n [SPAN_ATTRIBUTES.TANSTACK_TYPE]: 'beforeLoad',\n [SPAN_ATTRIBUTES.TANSTACK_LOADER_ROUTE_ID]: routeId,\n [SPAN_ATTRIBUTES.TANSTACK_LOADER_TYPE]: 'beforeLoad',\n });\n\n if (captureParams && input?.params) {\n try {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_LOADER_PARAMS,\n JSON.stringify(input.params),\n );\n } catch {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_LOADER_PARAMS,\n '[non-serializable]',\n );\n }\n }\n\n ctx.setStatus({ code: SpanStatusCode.OK });\n return result;\n });\n }\n\n // Async beforeLoad\n return trace(spanName, async (ctx: TraceContext) => {\n ctx.setAttributes({\n [SPAN_ATTRIBUTES.TANSTACK_TYPE]: 'beforeLoad',\n [SPAN_ATTRIBUTES.TANSTACK_LOADER_ROUTE_ID]: routeId,\n [SPAN_ATTRIBUTES.TANSTACK_LOADER_TYPE]: 'beforeLoad',\n });\n\n if (captureParams && input?.params) {\n try {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_LOADER_PARAMS,\n JSON.stringify(input.params),\n );\n } catch {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_LOADER_PARAMS,\n '[non-serializable]',\n );\n }\n }\n\n try {\n const asyncResult = await result;\n ctx.setStatus({ code: SpanStatusCode.OK });\n return asyncResult;\n } catch (error) {\n // Check if this is a redirect or notFound (expected control flow)\n const errorName = (error as Error).name;\n if (errorName === 'RedirectError' || errorName === 'NotFoundError') {\n // Mark as OK since these are expected control flow\n ctx.setAttribute('tanstack.beforeLoad.redirect', true);\n ctx.setStatus({ code: SpanStatusCode.OK });\n } else {\n if ('recordError' in ctx && typeof ctx.recordError === 'function') {\n ctx.recordError(error);\n } else if (\n 'recordException' in ctx &&\n typeof ctx.recordException === 'function'\n ) {\n ctx.recordException(error);\n }\n }\n throw error;\n }\n });\n };\n\n return wrapped as TBeforeLoadFn;\n}\n\n/**\n * Create a traced route configuration helper\n *\n * This higher-order function helps create route configurations\n * with automatic tracing for both loader and beforeLoad.\n *\n * @param routeId - The route identifier\n * @param config - Tracing configuration\n * @returns Object with traced loader and beforeLoad wrappers\n *\n * @example\n * ```typescript\n * import { createFileRoute } from '@tanstack/react-router';\n * import { createTracedRoute } from 'autotel-tanstack/loaders';\n *\n * const traced = createTracedRoute('/users/$userId');\n *\n * export const Route = createFileRoute('/users/$userId')({\n * beforeLoad: traced.beforeLoad(async ({ context }) => {\n * // Auth check\n * }),\n * loader: traced.loader(async ({ params }) => {\n * return await getUser(params.userId);\n * }),\n * });\n * ```\n */\nexport function createTracedRoute(\n routeId: string,\n config: Omit<TraceLoaderConfig, 'name'> = {},\n) {\n return {\n /**\n * Wrap a loader function with tracing\n */\n loader<TLoaderFn extends (ctx: any) => any>(\n loaderFn: TLoaderFn,\n ): TLoaderFn {\n return traceLoader(loaderFn, {\n ...config,\n name: `tanstack.loader.${routeId}`,\n });\n },\n\n /**\n * Wrap a beforeLoad function with tracing\n */\n beforeLoad<TBeforeLoadFn extends (opts: any) => any>(\n beforeLoadFn: TBeforeLoadFn,\n ): TBeforeLoadFn {\n return traceBeforeLoad(beforeLoadFn, {\n ...config,\n name: `tanstack.beforeLoad.${routeId}`,\n });\n },\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"loaders.js","names":[],"sources":["../src/loaders.ts"],"sourcesContent":["import { SpanStatusCode } from '@opentelemetry/api';\nimport { trace, getActiveTraceContext } from 'autotel';\nimport { isServerSide } from './env';\nimport { isControlFlowSignal, isRealError } from './control-flow';\nimport { type TraceLoaderConfig, SPAN_ATTRIBUTES } from './types';\n\n// Re-export types from @tanstack/react-router for consumers who need them\nexport type { LoaderFnContext } from '@tanstack/react-router';\n\n/**\n * Internal type for extracting route info from TanStack context.\n * This is a minimal interface used only for instrumentation - the actual\n * TanStack types flow through the generic parameter.\n */\ninterface TanStackContextInternal {\n route?: { id?: string };\n params?: Record<string, string>;\n}\n\n/**\n * Wrap a TanStack route loader with OpenTelemetry tracing\n *\n * This function wraps a loader function to automatically create spans\n * for each invocation. It captures route ID, params (optionally),\n * and errors.\n *\n * The generic type TLoaderFn preserves the full TanStack Router type inference,\n * including typed params, context, and return types.\n *\n * @param loaderFn - The loader function to wrap\n * @param config - Configuration options\n * @returns Wrapped loader function with tracing (preserves original types)\n *\n * @example\n * ```typescript\n * import { createFileRoute } from '@tanstack/react-router';\n * import { traceLoader } from 'autotel-tanstack/loaders';\n *\n * export const Route = createFileRoute('/users/$userId')({\n * // Types are fully preserved - params.userId is typed as string\n * loader: traceLoader(async ({ params }) => {\n * return await db.users.findUnique({ where: { id: params.userId } });\n * }),\n * });\n * ```\n *\n * @example\n * ```typescript\n * // Sync loaders are also supported\n * export const Route = createFileRoute('/static')({\n * loader: traceLoader(({ context }) => ({\n * message: `Welcome, ${context.userId}!`,\n * })),\n * });\n * ```\n */\nexport function traceLoader<TLoaderFn extends (ctx: any) => any>(\n loaderFn: TLoaderFn,\n config: TraceLoaderConfig = {},\n): TLoaderFn {\n const captureParams = config.captureParams ?? true;\n const captureResult = config.captureResult ?? false;\n\n const wrapped = (context: TanStackContextInternal) => {\n // If we're in the browser, just call the loader without tracing\n // This prevents autotel (which uses Node.js APIs) from being executed in the browser\n if (!isServerSide()) {\n return loaderFn(context);\n }\n\n const routeId = context?.route?.id || 'unknown';\n const spanName = config.name || `tanstack.loader.${routeId}`;\n\n // Handle both sync and async loaders\n const result = loaderFn(context);\n const isPromise = result instanceof Promise;\n\n if (!isPromise) {\n // Sync loader - wrap in trace synchronously\n return trace({ name: spanName, isError: isRealError }, () => {\n const ctx = getActiveTraceContext()!;\n ctx.setAttributes({\n [SPAN_ATTRIBUTES.TANSTACK_TYPE]: 'loader',\n [SPAN_ATTRIBUTES.TANSTACK_LOADER_ROUTE_ID]: routeId,\n [SPAN_ATTRIBUTES.TANSTACK_LOADER_TYPE]: 'loader',\n });\n\n if (captureParams && context?.params) {\n try {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_LOADER_PARAMS,\n JSON.stringify(context.params),\n );\n } catch {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_LOADER_PARAMS,\n '[non-serializable]',\n );\n }\n }\n\n if (captureResult && result !== undefined) {\n try {\n ctx.setAttribute('tanstack.loader.result', JSON.stringify(result));\n } catch {\n ctx.setAttribute('tanstack.loader.result', '[non-serializable]');\n }\n }\n\n ctx.setStatus({ code: SpanStatusCode.OK });\n return result;\n })();\n }\n\n // Async loader\n return trace({ name: spanName, isError: isRealError }, async () => {\n const ctx = getActiveTraceContext()!;\n ctx.setAttributes({\n [SPAN_ATTRIBUTES.TANSTACK_TYPE]: 'loader',\n [SPAN_ATTRIBUTES.TANSTACK_LOADER_ROUTE_ID]: routeId,\n [SPAN_ATTRIBUTES.TANSTACK_LOADER_TYPE]: 'loader',\n });\n\n if (captureParams && context?.params) {\n try {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_LOADER_PARAMS,\n JSON.stringify(context.params),\n );\n } catch {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_LOADER_PARAMS,\n '[non-serializable]',\n );\n }\n }\n\n try {\n const asyncResult = await result;\n\n if (captureResult && asyncResult !== undefined) {\n try {\n ctx.setAttribute(\n 'tanstack.loader.result',\n JSON.stringify(asyncResult),\n );\n } catch {\n ctx.setAttribute('tanstack.loader.result', '[non-serializable]');\n }\n }\n\n ctx.setStatus({ code: SpanStatusCode.OK });\n return asyncResult;\n } catch (error) {\n if (isControlFlowSignal(error)) {\n ctx.setStatus({ code: SpanStatusCode.OK });\n throw error;\n }\n if ('recordError' in ctx && typeof ctx.recordError === 'function') {\n ctx.recordError(error);\n } else if (\n 'recordException' in ctx &&\n typeof ctx.recordException === 'function'\n ) {\n ctx.recordException(error);\n }\n throw error;\n }\n })();\n };\n\n return wrapped as TLoaderFn;\n}\n\n/**\n * Wrap a TanStack route beforeLoad function with OpenTelemetry tracing\n *\n * This function wraps a beforeLoad function to automatically create spans.\n * beforeLoad runs before the route component renders and is typically\n * used for auth checks, redirects, or data prefetching.\n *\n * The generic type TBeforeLoadFn preserves the full TanStack Router type inference,\n * including typed params, context, search, and return types.\n *\n * @param beforeLoadFn - The beforeLoad function to wrap\n * @param config - Configuration options\n * @returns Wrapped beforeLoad function with tracing (preserves original types)\n *\n * @example\n * ```typescript\n * import { createFileRoute, redirect } from '@tanstack/react-router';\n * import { traceBeforeLoad } from 'autotel-tanstack/loaders';\n *\n * export const Route = createFileRoute('/dashboard')({\n * // Types are fully preserved - context, params, search are all typed\n * beforeLoad: traceBeforeLoad(async ({ context, params }) => {\n * if (!context.auth.isAuthenticated) {\n * throw redirect({ to: '/login' });\n * }\n * return { userId: params.userId }; // Return type flows to loader context\n * }),\n * loader: ({ context }) => {\n * // context.userId is typed from beforeLoad return\n * return { user: context.userId };\n * },\n * });\n * ```\n */\nexport function traceBeforeLoad<TBeforeLoadFn extends (opts: any) => any>(\n beforeLoadFn: TBeforeLoadFn,\n config: TraceLoaderConfig = {},\n): TBeforeLoadFn {\n const captureParams = config.captureParams ?? true;\n\n const wrapped = (input: TanStackContextInternal) => {\n // Skip tracing in browser\n if (!isServerSide()) {\n return beforeLoadFn(input);\n }\n\n const routeId = input?.route?.id || 'unknown';\n const spanName = config.name || `tanstack.beforeLoad.${routeId}`;\n\n // Handle both sync and async beforeLoad\n const result = beforeLoadFn(input);\n const isPromise = result instanceof Promise;\n\n if (!isPromise) {\n // Sync beforeLoad\n return trace({ name: spanName, isError: isRealError }, () => {\n const ctx = getActiveTraceContext()!;\n ctx.setAttributes({\n [SPAN_ATTRIBUTES.TANSTACK_TYPE]: 'beforeLoad',\n [SPAN_ATTRIBUTES.TANSTACK_LOADER_ROUTE_ID]: routeId,\n [SPAN_ATTRIBUTES.TANSTACK_LOADER_TYPE]: 'beforeLoad',\n });\n\n if (captureParams && input?.params) {\n try {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_LOADER_PARAMS,\n JSON.stringify(input.params),\n );\n } catch {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_LOADER_PARAMS,\n '[non-serializable]',\n );\n }\n }\n\n ctx.setStatus({ code: SpanStatusCode.OK });\n return result;\n })();\n }\n\n // Async beforeLoad\n return trace({ name: spanName, isError: isRealError }, async () => {\n const ctx = getActiveTraceContext()!;\n ctx.setAttributes({\n [SPAN_ATTRIBUTES.TANSTACK_TYPE]: 'beforeLoad',\n [SPAN_ATTRIBUTES.TANSTACK_LOADER_ROUTE_ID]: routeId,\n [SPAN_ATTRIBUTES.TANSTACK_LOADER_TYPE]: 'beforeLoad',\n });\n\n if (captureParams && input?.params) {\n try {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_LOADER_PARAMS,\n JSON.stringify(input.params),\n );\n } catch {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_LOADER_PARAMS,\n '[non-serializable]',\n );\n }\n }\n\n try {\n const asyncResult = await result;\n ctx.setStatus({ code: SpanStatusCode.OK });\n return asyncResult;\n } catch (error) {\n // redirect()/notFound() are expected control flow, not errors.\n if (isControlFlowSignal(error)) {\n ctx.setAttribute('tanstack.beforeLoad.redirect', true);\n ctx.setStatus({ code: SpanStatusCode.OK });\n } else {\n if ('recordError' in ctx && typeof ctx.recordError === 'function') {\n ctx.recordError(error);\n } else if (\n 'recordException' in ctx &&\n typeof ctx.recordException === 'function'\n ) {\n ctx.recordException(error);\n }\n }\n throw error;\n }\n })();\n };\n\n return wrapped as TBeforeLoadFn;\n}\n\n/**\n * Create a traced route configuration helper\n *\n * This higher-order function helps create route configurations\n * with automatic tracing for both loader and beforeLoad.\n *\n * @param routeId - The route identifier\n * @param config - Tracing configuration\n * @returns Object with traced loader and beforeLoad wrappers\n *\n * @example\n * ```typescript\n * import { createFileRoute } from '@tanstack/react-router';\n * import { createTracedRoute } from 'autotel-tanstack/loaders';\n *\n * const traced = createTracedRoute('/users/$userId');\n *\n * export const Route = createFileRoute('/users/$userId')({\n * beforeLoad: traced.beforeLoad(async ({ context }) => {\n * // Auth check\n * }),\n * loader: traced.loader(async ({ params }) => {\n * return await getUser(params.userId);\n * }),\n * });\n * ```\n */\nexport function createTracedRoute(\n routeId: string,\n config: Omit<TraceLoaderConfig, 'name'> = {},\n) {\n return {\n /**\n * Wrap a loader function with tracing\n */\n loader<TLoaderFn extends (ctx: any) => any>(\n loaderFn: TLoaderFn,\n ): TLoaderFn {\n return traceLoader(loaderFn, {\n ...config,\n name: `tanstack.loader.${routeId}`,\n });\n },\n\n /**\n * Wrap a beforeLoad function with tracing\n */\n beforeLoad<TBeforeLoadFn extends (opts: any) => any>(\n beforeLoadFn: TBeforeLoadFn,\n ): TBeforeLoadFn {\n return traceBeforeLoad(beforeLoadFn, {\n ...config,\n name: `tanstack.beforeLoad.${routeId}`,\n });\n },\n };\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.d.ts","names":[],"sources":["../src/metrics.ts"],"mappings":";;AAUA;;;;;;;;UAAiB,WAAA;EACf,KAAA;EACA,GAAA;EACA,GAAA;EACA,GAAA;EACA,GAAA;EACA,GAAA;AAAA;;;;;;;;;;;;;;;;;;;cAqBI,gBAAA;EAAA,QACI,OAAA;EAAA,iBACS,UAAA;EAyEmC;;;EApEpD,YAAA,CAAa,IAAA,UAAc,QAAA;EA4Fb;;;EA3Ed,QAAA,CAAS,IAAA,WAAe,WAAA;;;;EAsBxB,WAAA,IAAe,MAAA,SAAe,WAAA;EAqDI;;;EAvClC,KAAA;;;;EAOA,WAAA,CAAY,IAAA;AAAA;;;;cAQD,gBAAA,EAAgB,gBAAyB;;AAsDtD;;;;;;;;;;;AAGI;;;;;;;;;;iBAjCY,oBAAA,UAAoB,OAAA,iCAAA,YAAA;;;;;;;;;;;;;;;;;;;;;;;iBA8BpB,YAAA,eAA2B,IAAA,iBACzC,UAAA,UACA,EAAA,EAAI,CAAA,GACH,CAAC"}
1
+ {"version":3,"file":"metrics.d.ts","names":[],"sources":["../src/metrics.ts"],"mappings":";;;;;;;;;;UAUiB;EACf;EACA;EACA;EACA;EACA;EACA;;;;;;;;;;;;;;;;;;;;cAqBI;UACI;mBACS;;;;EAKjB,aAAa,cAAc;;;;EAiB3B,SAAS,eAAe;;;;EAsBxB,eAAe,eAAe;;;;EAc9B;;;;EAOA,YAAY;;;;;cAQD,kBAAgB;;;;;;;;;;;;;;;;;;;;;;;iBAwBb,8BAAoB,wCAAA;;;;;;;;;;;;;;;;;;;;;;;iBA8BpB,aAAa,cAAc,qBACzC,oBACA,IAAI,IACH"}
@@ -1,5 +1,4 @@
1
- import { o as TracingMiddlewareConfig } from "./types-pQgmQa4j.js";
2
-
1
+ import { o as TracingMiddlewareConfig } from "./types-zkKShSiK.js";
3
2
  //#region src/middleware.d.ts
4
3
  /**
5
4
  * Generic middleware handler type (compatible with TanStack's middleware pattern)
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.d.ts","names":[],"sources":["../src/middleware.ts"],"mappings":";;;;;AAgFA;;;;UAAiB,iBAAA;EAAA,CACd,IAAA;IACC,IAAA,GAAO,GAAA,GAAM,OAAA,CAAQ,QAAA,MAAc,OAAA,CAAQ,QAAA;IAC3C,OAAA,EAAS,QAAA;IACT,OAAA,GAAU,OAAA;IACV,QAAA;IACA,IAAA;IACA,MAAA;IACA,QAAA;IACA,UAAA;IACA,MAAA,GAAS,WAAA;EAAA,IACP,OAAA,CAAQ,QAAA;AAAA;;;;;;;;;;;;;;;;;;;;AAAQ;AAyCtB;;;;;;;;;;;;;;AAE6B;AAiN7B;;;iBAnNgB,uBAAA,qBACd,MAAA,GAAS,uBAAA,GACR,iBAAA,CAAkB,QAAA;;;;;;;;;;;AAmNQ;AA6B7B;;;;;;;;iBA/BgB,iBAAA,qBACd,MAAA,GAAS,uBAAA,GACR,iBAAA,CAAkB,QAAA;;;;;;;;AA+BQ;AAiD7B;;;;;;;;;AAEa;;;iBArDG,yBAAA,qBACd,MAAA,GAAS,IAAA,CAAK,uBAAA,YACb,iBAAA,CAAkB,QAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAiDL,0BAAA,qBACd,MAAA,GAAS,uBAAuB,IAC9B,IAAA"}
1
+ {"version":3,"file":"middleware.d.ts","names":[],"sources":["../src/middleware.ts"],"mappings":";;;;;;;;UAiFiB,kBAAkB;GAChC;IACC,OAAO,MAAM,QAAQ,cAAc,QAAQ;IAC3C,SAAS;IACT,UAAU;IACV;IACA;IACA;IACA;IACA;IACA,SAAS;MACP,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAyCE,wBAAwB,oBACtC,SAAS,0BACR,kBAAkB;;;;;;;;;;;;;;;;;;;;iBAkOL,kBAAkB,oBAChC,SAAS,0BACR,kBAAkB;;;;;;;;;;;;;;;;;;;;;iBA6BL,0BAA0B,oBACxC,SAAS,KAAK,mCACb,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAiDL,2BAA2B,oBACzC,SAAS,2BACP"}
@@ -1,9 +1,9 @@
1
- import { n as SPAN_ATTRIBUTES, t as DEFAULT_CONFIG } from "./types-BrccP0yX.js";
1
+ import { i as SPAN_ATTRIBUTES, n as isRealError, r as DEFAULT_CONFIG, t as isControlFlowSignal } from "./control-flow-p-dnko0G.js";
2
2
  import { extractContextFromRequest } from "./context.js";
3
3
  import { r as isServerSide } from "./env-BpFWNnpL.js";
4
4
  import { t as isExcludedPath } from "./route-filter-dLg-j3jR.js";
5
5
  import { SpanStatusCode, context } from "@opentelemetry/api";
6
- import { trace } from "autotel";
6
+ import { getActiveTraceContext, trace } from "autotel";
7
7
 
8
8
  //#region src/middleware.ts
9
9
  /**
@@ -91,7 +91,11 @@ function createTracingMiddleware(config) {
91
91
  if (mergedConfig.type === "function") {
92
92
  const fnName = functionId || "unknown";
93
93
  const method = opts.method || "POST";
94
- return trace(`tanstack.serverFn.${fnName}`, async (ctx) => {
94
+ return trace({
95
+ name: `tanstack.serverFn.${fnName}`,
96
+ isError: isRealError
97
+ }, async () => {
98
+ const ctx = getActiveTraceContext();
95
99
  const attrs = buildServerFnAttributes(fnName, method, data, mergedConfig);
96
100
  ctx.setAttributes(attrs);
97
101
  if (config?.customAttributes) {
@@ -112,6 +116,10 @@ function createTracingMiddleware(config) {
112
116
  ctx.setStatus({ code: SpanStatusCode.OK });
113
117
  return result;
114
118
  } catch (error) {
119
+ if (isControlFlowSignal(error)) {
120
+ ctx.setStatus({ code: SpanStatusCode.OK });
121
+ throw error;
122
+ }
115
123
  if (mergedConfig.captureErrors) {
116
124
  if ("recordError" in ctx && typeof ctx.recordError === "function") ctx.recordError(error);
117
125
  else if ("recordException" in ctx && typeof ctx.recordException === "function") ctx.recordException(error);
@@ -126,7 +134,7 @@ function createTracingMiddleware(config) {
126
134
  }
127
135
  throw error;
128
136
  }
129
- });
137
+ })();
130
138
  }
131
139
  if (!request) return next();
132
140
  const url = new URL(request.url);
@@ -134,7 +142,11 @@ function createTracingMiddleware(config) {
134
142
  const parentContext = extractContextFromRequest(request);
135
143
  return context.with(parentContext, async () => {
136
144
  const spanName = `${request.method} ${pathname || url.pathname}`;
137
- return trace(spanName, async (ctx) => {
145
+ return trace({
146
+ name: spanName,
147
+ isError: isRealError
148
+ }, async () => {
149
+ const ctx = getActiveTraceContext();
138
150
  const attrs = buildRequestAttributes(request, mergedConfig);
139
151
  ctx.setAttributes(attrs);
140
152
  if (config?.customAttributes) {
@@ -160,6 +172,10 @@ function createTracingMiddleware(config) {
160
172
  } catch (error) {
161
173
  const duration = Date.now() - startTime;
162
174
  ctx.setAttribute(SPAN_ATTRIBUTES.TANSTACK_REQUEST_DURATION_MS, duration);
175
+ if (isControlFlowSignal(error)) {
176
+ ctx.setStatus({ code: SpanStatusCode.OK });
177
+ throw error;
178
+ }
163
179
  if (mergedConfig.captureErrors) {
164
180
  if ("recordError" in ctx && typeof ctx.recordError === "function") ctx.recordError(error);
165
181
  else if ("recordException" in ctx && typeof ctx.recordException === "function") ctx.recordException(error);
@@ -174,7 +190,7 @@ function createTracingMiddleware(config) {
174
190
  }
175
191
  throw error;
176
192
  }
177
- });
193
+ })();
178
194
  });
179
195
  };
180
196
  }
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.js","names":[],"sources":["../src/middleware.ts"],"sourcesContent":["import { context, SpanStatusCode, type Attributes } from '@opentelemetry/api';\nimport { trace, type TraceContext } from 'autotel';\nimport { extractContextFromRequest } from './context';\nimport { isServerSide } from './env';\nimport { isExcludedPath } from './route-filter';\nimport {\n type TracingMiddlewareConfig,\n DEFAULT_CONFIG,\n SPAN_ATTRIBUTES,\n} from './types';\n\n/**\n * Build span attributes for HTTP requests\n */\nfunction buildRequestAttributes(\n request: Request,\n config: Required<\n Omit<TracingMiddlewareConfig, 'customAttributes' | 'service' | 'type'>\n >,\n): Attributes {\n const url = new URL(request.url);\n const attrs: Attributes = {\n [SPAN_ATTRIBUTES.HTTP_REQUEST_METHOD]: request.method,\n [SPAN_ATTRIBUTES.URL_PATH]: url.pathname,\n [SPAN_ATTRIBUTES.TANSTACK_TYPE]: 'request',\n };\n\n if (url.search) {\n attrs[SPAN_ATTRIBUTES.URL_QUERY] = url.search;\n }\n\n // Capture configured headers\n if (config.captureHeaders) {\n for (const header of config.captureHeaders) {\n const value = request.headers.get(header);\n if (value) {\n attrs[`http.request.header.${header.toLowerCase()}`] = value;\n }\n }\n }\n\n return attrs;\n}\n\n/**\n * Build span attributes for server functions\n */\nfunction buildServerFnAttributes(\n functionName: string,\n method: string,\n args: unknown,\n config: Required<\n Omit<TracingMiddlewareConfig, 'customAttributes' | 'service' | 'type'>\n >,\n): Attributes {\n const attrs: Attributes = {\n [SPAN_ATTRIBUTES.RPC_SYSTEM]: 'tanstack-start',\n [SPAN_ATTRIBUTES.RPC_METHOD]: functionName,\n [SPAN_ATTRIBUTES.TANSTACK_TYPE]: 'serverFn',\n [SPAN_ATTRIBUTES.TANSTACK_SERVER_FN_NAME]: functionName,\n [SPAN_ATTRIBUTES.TANSTACK_SERVER_FN_METHOD]: method,\n };\n\n if (config.captureArgs && args !== undefined) {\n try {\n attrs[SPAN_ATTRIBUTES.TANSTACK_SERVER_FN_ARGS] = JSON.stringify(args);\n } catch {\n attrs[SPAN_ATTRIBUTES.TANSTACK_SERVER_FN_ARGS] = '[non-serializable]';\n }\n }\n\n return attrs;\n}\n\n/**\n * Generic middleware handler type (compatible with TanStack's middleware pattern)\n *\n * This type represents the shape of TanStack middleware handlers.\n * We use a generic type to avoid direct dependency on TanStack packages.\n */\nexport interface MiddlewareHandler<TContext = unknown> {\n (opts: {\n next: (ctx?: Partial<TContext>) => Promise<TContext>;\n context: TContext;\n request?: Request;\n pathname?: string;\n data?: unknown;\n method?: string;\n filename?: string;\n functionId?: string;\n signal?: AbortSignal;\n }): Promise<TContext>;\n}\n\n/**\n * Create a TanStack-compatible tracing middleware\n *\n * This creates middleware that automatically traces all requests/server functions\n * with OpenTelemetry spans. Use with TanStack Start's middleware system.\n *\n * @param config - Configuration options\n * @returns Middleware handler compatible with TanStack Start\n *\n * @example\n * ```typescript\n * // Global request middleware in app/start.ts\n * import { createStart } from '@tanstack/react-start';\n * import { createTracingMiddleware } from 'autotel-tanstack/middleware';\n *\n * export const startInstance = createStart(() => ({\n * requestMiddleware: [\n * createTracingMiddleware({\n * captureHeaders: ['x-request-id', 'user-agent'],\n * excludePaths: ['/health', '/metrics'],\n * }),\n * ],\n * }));\n * ```\n *\n * @example\n * ```typescript\n * // Server function middleware\n * import { createServerFn } from '@tanstack/react-start';\n * import { createTracingMiddleware } from 'autotel-tanstack/middleware';\n *\n * export const getUser = createServerFn({ method: 'GET' })\n * .middleware([createTracingMiddleware({ type: 'function' })])\n * .handler(async ({ data: id }) => {\n * return await db.users.findUnique({ where: { id } });\n * });\n * ```\n */\nexport function createTracingMiddleware<TContext = unknown>(\n config?: TracingMiddlewareConfig,\n): MiddlewareHandler<TContext> {\n const mergedConfig = {\n ...DEFAULT_CONFIG,\n ...config,\n type: config?.type ?? 'request',\n };\n\n return async function tracingMiddleware(opts) {\n // If we're in the browser, return a no-op middleware\n // This prevents autotel (which uses Node.js APIs) from being bundled/executed in the browser\n if (!isServerSide()) {\n return opts.next();\n }\n const { next, request, pathname, data, functionId } = opts;\n\n // For function middleware\n if (mergedConfig.type === 'function') {\n const fnName = functionId || 'unknown';\n const method = (opts as { method?: string }).method || 'POST';\n\n return trace(`tanstack.serverFn.${fnName}`, async (ctx: TraceContext) => {\n const attrs = buildServerFnAttributes(\n fnName,\n method,\n data,\n mergedConfig,\n );\n ctx.setAttributes(attrs as Record<string, string | number | boolean>);\n\n // Add custom attributes if provided\n if (config?.customAttributes) {\n const customAttrs = config.customAttributes({\n type: 'serverFn',\n name: fnName,\n args: data,\n });\n ctx.setAttributes(\n customAttrs as Record<string, string | number | boolean>,\n );\n }\n\n try {\n const result = await next();\n\n // Capture result if configured\n if (mergedConfig.captureResults && result !== undefined) {\n try {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_SERVER_FN_RESULT,\n JSON.stringify(result),\n );\n } catch {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_SERVER_FN_RESULT,\n '[non-serializable]',\n );\n }\n }\n\n ctx.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n if (mergedConfig.captureErrors) {\n if ('recordError' in ctx && typeof ctx.recordError === 'function') {\n ctx.recordError(error);\n } else if (\n 'recordException' in ctx &&\n typeof ctx.recordException === 'function'\n ) {\n ctx.recordException(error);\n }\n\n // Report error to error store\n try {\n const { reportError } = await import('./error-reporting');\n reportError(error as Error, {\n type: 'serverFn',\n name: fnName,\n method,\n });\n } catch {\n // Error reporting not available, skip\n }\n }\n throw error;\n }\n }) as Promise<TContext>;\n }\n\n // For request middleware\n if (!request) {\n // No request available, just pass through\n return next();\n }\n\n const url = new URL(request.url);\n\n // Check if path should be excluded\n if (isExcludedPath(url.pathname, mergedConfig.excludePaths)) {\n return next();\n }\n\n // Extract parent context from request headers\n const parentContext = extractContextFromRequest(request);\n\n // Run within parent context for distributed tracing\n return context.with(parentContext, async () => {\n const spanName = `${request.method} ${pathname || url.pathname}`;\n\n return trace(spanName, async (ctx: TraceContext) => {\n const attrs = buildRequestAttributes(request, mergedConfig);\n ctx.setAttributes(attrs as Record<string, string | number | boolean>);\n\n // Add custom attributes if provided\n if (config?.customAttributes) {\n const customAttrs = config.customAttributes({\n type: 'request',\n name: spanName,\n request,\n });\n ctx.setAttributes(\n customAttrs as Record<string, string | number | boolean>,\n );\n }\n\n const startTime = Date.now();\n\n try {\n const result = await next();\n\n const duration = Date.now() - startTime;\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_REQUEST_DURATION_MS,\n duration,\n );\n\n // Record timing in metrics collector\n try {\n const { metricsCollector } = await import('./metrics');\n metricsCollector.recordTiming(spanName, duration);\n } catch {\n // Metrics not available, skip\n }\n\n // Try to get response status from result if it's a Response\n if (result && typeof result === 'object' && 'status' in result) {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.HTTP_RESPONSE_STATUS_CODE,\n (result as { status: number }).status,\n );\n }\n\n ctx.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n const duration = Date.now() - startTime;\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_REQUEST_DURATION_MS,\n duration,\n );\n\n if (mergedConfig.captureErrors) {\n if ('recordError' in ctx && typeof ctx.recordError === 'function') {\n ctx.recordError(error);\n } else if (\n 'recordException' in ctx &&\n typeof ctx.recordException === 'function'\n ) {\n ctx.recordException(error);\n }\n\n // Report error to error store\n try {\n const { reportError } = await import('./error-reporting');\n reportError(error as Error, {\n type: 'request',\n method: request.method,\n pathname: url.pathname,\n });\n } catch {\n // Error reporting not available, skip\n }\n }\n throw error;\n }\n }) as Promise<TContext>;\n });\n };\n}\n\n/**\n * Pre-configured tracing middleware with sensible defaults\n *\n * Convenience export for quick setup. Uses adaptive sampling,\n * captures x-request-id header, and excludes common health check paths.\n *\n * @param config - Optional configuration overrides\n * @returns Middleware handler\n *\n * @example\n * ```typescript\n * import { createStart } from '@tanstack/react-start';\n * import { tracingMiddleware } from 'autotel-tanstack/middleware';\n *\n * export const startInstance = createStart(() => ({\n * requestMiddleware: [tracingMiddleware()],\n * }));\n * ```\n */\nexport function tracingMiddleware<TContext = unknown>(\n config?: TracingMiddlewareConfig,\n): MiddlewareHandler<TContext> {\n return createTracingMiddleware({\n sampling: 'adaptive',\n captureHeaders: ['x-request-id', 'user-agent'],\n excludePaths: ['/health', '/healthz', '/ready', '/metrics', '/_ping'],\n ...config,\n });\n}\n\n/**\n * Create function-specific tracing middleware\n *\n * Convenience wrapper for server function middleware.\n *\n * @param config - Optional configuration\n * @returns Middleware handler for server functions\n *\n * @example\n * ```typescript\n * import { createServerFn } from '@tanstack/react-start';\n * import { functionTracingMiddleware } from 'autotel-tanstack/middleware';\n *\n * export const getUser = createServerFn({ method: 'GET' })\n * .middleware([functionTracingMiddleware()])\n * .handler(async ({ data: id }) => {\n * return await db.users.findUnique({ where: { id } });\n * });\n * ```\n */\nexport function functionTracingMiddleware<TContext = unknown>(\n config?: Omit<TracingMiddlewareConfig, 'type'>,\n): MiddlewareHandler<TContext> {\n return createTracingMiddleware({\n ...config,\n type: 'function',\n });\n}\n\n/**\n * Create a tracing handler for use with TanStack's native createMiddleware()\n *\n * This provides the raw tracing logic that you can pass to createMiddleware().server().\n * Use this when you want full control over the middleware builder pattern.\n *\n * The handler accepts TanStack's middleware signature `{ next, context, request }`\n * and internally adapts it to our more flexible MiddlewareHandler interface.\n *\n * @param config - Configuration options\n * @returns Server handler function compatible with createMiddleware().server()\n *\n * @example\n * ```typescript\n * import { createStart, createMiddleware } from '@tanstack/react-start';\n * import { createTracingServerHandler } from 'autotel-tanstack/middleware';\n *\n * // TanStack-native middleware creation\n * const requestTracingMiddleware = createMiddleware().server(\n * createTracingServerHandler({ captureHeaders: ['x-request-id'] })\n * );\n *\n * export const start = createStart(() => ({\n * requestMiddleware: [requestTracingMiddleware],\n * }));\n * ```\n *\n * @example\n * ```typescript\n * // For server functions - use createMiddleware({ type: 'function' })\n * import { createStart, createMiddleware } from '@tanstack/react-start';\n * import { createTracingServerHandler } from 'autotel-tanstack/middleware';\n *\n * const functionTracingMiddleware = createMiddleware({ type: 'function' }).server(\n * createTracingServerHandler({ type: 'function', captureArgs: true })\n * );\n *\n * export const start = createStart(() => ({\n * functionMiddleware: [functionTracingMiddleware],\n * }));\n * ```\n */\nexport function createTracingServerHandler<TContext = unknown>(\n config?: TracingMiddlewareConfig,\n): (opts: any) => any {\n const handler = createTracingMiddleware<TContext>(config);\n\n // Adapt TanStack's signature to our handler\n return async (opts: any) => {\n return handler(opts);\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"middleware.js","names":[],"sources":["../src/middleware.ts"],"sourcesContent":["import { context, SpanStatusCode, type Attributes } from '@opentelemetry/api';\nimport { trace, getActiveTraceContext } from 'autotel';\nimport { extractContextFromRequest } from './context';\nimport { isServerSide } from './env';\nimport { isControlFlowSignal, isRealError } from './control-flow';\nimport { isExcludedPath } from './route-filter';\nimport {\n type TracingMiddlewareConfig,\n DEFAULT_CONFIG,\n SPAN_ATTRIBUTES,\n} from './types';\n\n/**\n * Build span attributes for HTTP requests\n */\nfunction buildRequestAttributes(\n request: Request,\n config: Required<\n Omit<TracingMiddlewareConfig, 'customAttributes' | 'service' | 'type'>\n >,\n): Attributes {\n const url = new URL(request.url);\n const attrs: Attributes = {\n [SPAN_ATTRIBUTES.HTTP_REQUEST_METHOD]: request.method,\n [SPAN_ATTRIBUTES.URL_PATH]: url.pathname,\n [SPAN_ATTRIBUTES.TANSTACK_TYPE]: 'request',\n };\n\n if (url.search) {\n attrs[SPAN_ATTRIBUTES.URL_QUERY] = url.search;\n }\n\n // Capture configured headers\n if (config.captureHeaders) {\n for (const header of config.captureHeaders) {\n const value = request.headers.get(header);\n if (value) {\n attrs[`http.request.header.${header.toLowerCase()}`] = value;\n }\n }\n }\n\n return attrs;\n}\n\n/**\n * Build span attributes for server functions\n */\nfunction buildServerFnAttributes(\n functionName: string,\n method: string,\n args: unknown,\n config: Required<\n Omit<TracingMiddlewareConfig, 'customAttributes' | 'service' | 'type'>\n >,\n): Attributes {\n const attrs: Attributes = {\n [SPAN_ATTRIBUTES.RPC_SYSTEM]: 'tanstack-start',\n [SPAN_ATTRIBUTES.RPC_METHOD]: functionName,\n [SPAN_ATTRIBUTES.TANSTACK_TYPE]: 'serverFn',\n [SPAN_ATTRIBUTES.TANSTACK_SERVER_FN_NAME]: functionName,\n [SPAN_ATTRIBUTES.TANSTACK_SERVER_FN_METHOD]: method,\n };\n\n if (config.captureArgs && args !== undefined) {\n try {\n attrs[SPAN_ATTRIBUTES.TANSTACK_SERVER_FN_ARGS] = JSON.stringify(args);\n } catch {\n attrs[SPAN_ATTRIBUTES.TANSTACK_SERVER_FN_ARGS] = '[non-serializable]';\n }\n }\n\n return attrs;\n}\n\n/**\n * Generic middleware handler type (compatible with TanStack's middleware pattern)\n *\n * This type represents the shape of TanStack middleware handlers.\n * We use a generic type to avoid direct dependency on TanStack packages.\n */\nexport interface MiddlewareHandler<TContext = unknown> {\n (opts: {\n next: (ctx?: Partial<TContext>) => Promise<TContext>;\n context: TContext;\n request?: Request;\n pathname?: string;\n data?: unknown;\n method?: string;\n filename?: string;\n functionId?: string;\n signal?: AbortSignal;\n }): Promise<TContext>;\n}\n\n/**\n * Create a TanStack-compatible tracing middleware\n *\n * This creates middleware that automatically traces all requests/server functions\n * with OpenTelemetry spans. Use with TanStack Start's middleware system.\n *\n * @param config - Configuration options\n * @returns Middleware handler compatible with TanStack Start\n *\n * @example\n * ```typescript\n * // Global request middleware in app/start.ts\n * import { createStart } from '@tanstack/react-start';\n * import { createTracingMiddleware } from 'autotel-tanstack/middleware';\n *\n * export const startInstance = createStart(() => ({\n * requestMiddleware: [\n * createTracingMiddleware({\n * captureHeaders: ['x-request-id', 'user-agent'],\n * excludePaths: ['/health', '/metrics'],\n * }),\n * ],\n * }));\n * ```\n *\n * @example\n * ```typescript\n * // Server function middleware\n * import { createServerFn } from '@tanstack/react-start';\n * import { createTracingMiddleware } from 'autotel-tanstack/middleware';\n *\n * export const getUser = createServerFn({ method: 'GET' })\n * .middleware([createTracingMiddleware({ type: 'function' })])\n * .handler(async ({ data: id }) => {\n * return await db.users.findUnique({ where: { id } });\n * });\n * ```\n */\nexport function createTracingMiddleware<TContext = unknown>(\n config?: TracingMiddlewareConfig,\n): MiddlewareHandler<TContext> {\n const mergedConfig = {\n ...DEFAULT_CONFIG,\n ...config,\n type: config?.type ?? 'request',\n };\n\n return async function tracingMiddleware(opts) {\n // If we're in the browser, return a no-op middleware\n // This prevents autotel (which uses Node.js APIs) from being bundled/executed in the browser\n if (!isServerSide()) {\n return opts.next();\n }\n const { next, request, pathname, data, functionId } = opts;\n\n // For function middleware\n if (mergedConfig.type === 'function') {\n const fnName = functionId || 'unknown';\n const method = (opts as { method?: string }).method || 'POST';\n\n return trace(\n { name: `tanstack.serverFn.${fnName}`, isError: isRealError },\n async () => {\n const ctx = getActiveTraceContext()!;\n const attrs = buildServerFnAttributes(\n fnName,\n method,\n data,\n mergedConfig,\n );\n ctx.setAttributes(attrs as Record<string, string | number | boolean>);\n\n // Add custom attributes if provided\n if (config?.customAttributes) {\n const customAttrs = config.customAttributes({\n type: 'serverFn',\n name: fnName,\n args: data,\n });\n ctx.setAttributes(\n customAttrs as Record<string, string | number | boolean>,\n );\n }\n\n try {\n const result = await next();\n\n // Capture result if configured\n if (mergedConfig.captureResults && result !== undefined) {\n try {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_SERVER_FN_RESULT,\n JSON.stringify(result),\n );\n } catch {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_SERVER_FN_RESULT,\n '[non-serializable]',\n );\n }\n }\n\n ctx.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n if (isControlFlowSignal(error)) {\n ctx.setStatus({ code: SpanStatusCode.OK });\n throw error;\n }\n if (mergedConfig.captureErrors) {\n if (\n 'recordError' in ctx &&\n typeof ctx.recordError === 'function'\n ) {\n ctx.recordError(error);\n } else if (\n 'recordException' in ctx &&\n typeof ctx.recordException === 'function'\n ) {\n ctx.recordException(error);\n }\n\n // Report error to error store\n try {\n const { reportError } = await import('./error-reporting');\n reportError(error as Error, {\n type: 'serverFn',\n name: fnName,\n method,\n });\n } catch {\n // Error reporting not available, skip\n }\n }\n throw error;\n }\n },\n )() as Promise<TContext>;\n }\n\n // For request middleware\n if (!request) {\n // No request available, just pass through\n return next();\n }\n\n const url = new URL(request.url);\n\n // Check if path should be excluded\n if (isExcludedPath(url.pathname, mergedConfig.excludePaths)) {\n return next();\n }\n\n // Extract parent context from request headers\n const parentContext = extractContextFromRequest(request);\n\n // Run within parent context for distributed tracing\n return context.with(parentContext, async () => {\n const spanName = `${request.method} ${pathname || url.pathname}`;\n\n return trace({ name: spanName, isError: isRealError }, async () => {\n const ctx = getActiveTraceContext()!;\n const attrs = buildRequestAttributes(request, mergedConfig);\n ctx.setAttributes(attrs as Record<string, string | number | boolean>);\n\n // Add custom attributes if provided\n if (config?.customAttributes) {\n const customAttrs = config.customAttributes({\n type: 'request',\n name: spanName,\n request,\n });\n ctx.setAttributes(\n customAttrs as Record<string, string | number | boolean>,\n );\n }\n\n const startTime = Date.now();\n\n try {\n const result = await next();\n\n const duration = Date.now() - startTime;\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_REQUEST_DURATION_MS,\n duration,\n );\n\n // Record timing in metrics collector\n try {\n const { metricsCollector } = await import('./metrics');\n metricsCollector.recordTiming(spanName, duration);\n } catch {\n // Metrics not available, skip\n }\n\n // Try to get response status from result if it's a Response\n if (result && typeof result === 'object' && 'status' in result) {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.HTTP_RESPONSE_STATUS_CODE,\n (result as { status: number }).status,\n );\n }\n\n ctx.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n const duration = Date.now() - startTime;\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_REQUEST_DURATION_MS,\n duration,\n );\n\n if (isControlFlowSignal(error)) {\n ctx.setStatus({ code: SpanStatusCode.OK });\n throw error;\n }\n\n if (mergedConfig.captureErrors) {\n if ('recordError' in ctx && typeof ctx.recordError === 'function') {\n ctx.recordError(error);\n } else if (\n 'recordException' in ctx &&\n typeof ctx.recordException === 'function'\n ) {\n ctx.recordException(error);\n }\n\n // Report error to error store\n try {\n const { reportError } = await import('./error-reporting');\n reportError(error as Error, {\n type: 'request',\n method: request.method,\n pathname: url.pathname,\n });\n } catch {\n // Error reporting not available, skip\n }\n }\n throw error;\n }\n })() as Promise<TContext>;\n });\n };\n}\n\n/**\n * Pre-configured tracing middleware with sensible defaults\n *\n * Convenience export for quick setup. Uses adaptive sampling,\n * captures x-request-id header, and excludes common health check paths.\n *\n * @param config - Optional configuration overrides\n * @returns Middleware handler\n *\n * @example\n * ```typescript\n * import { createStart } from '@tanstack/react-start';\n * import { tracingMiddleware } from 'autotel-tanstack/middleware';\n *\n * export const startInstance = createStart(() => ({\n * requestMiddleware: [tracingMiddleware()],\n * }));\n * ```\n */\nexport function tracingMiddleware<TContext = unknown>(\n config?: TracingMiddlewareConfig,\n): MiddlewareHandler<TContext> {\n return createTracingMiddleware({\n sampling: 'adaptive',\n captureHeaders: ['x-request-id', 'user-agent'],\n excludePaths: ['/health', '/healthz', '/ready', '/metrics', '/_ping'],\n ...config,\n });\n}\n\n/**\n * Create function-specific tracing middleware\n *\n * Convenience wrapper for server function middleware.\n *\n * @param config - Optional configuration\n * @returns Middleware handler for server functions\n *\n * @example\n * ```typescript\n * import { createServerFn } from '@tanstack/react-start';\n * import { functionTracingMiddleware } from 'autotel-tanstack/middleware';\n *\n * export const getUser = createServerFn({ method: 'GET' })\n * .middleware([functionTracingMiddleware()])\n * .handler(async ({ data: id }) => {\n * return await db.users.findUnique({ where: { id } });\n * });\n * ```\n */\nexport function functionTracingMiddleware<TContext = unknown>(\n config?: Omit<TracingMiddlewareConfig, 'type'>,\n): MiddlewareHandler<TContext> {\n return createTracingMiddleware({\n ...config,\n type: 'function',\n });\n}\n\n/**\n * Create a tracing handler for use with TanStack's native createMiddleware()\n *\n * This provides the raw tracing logic that you can pass to createMiddleware().server().\n * Use this when you want full control over the middleware builder pattern.\n *\n * The handler accepts TanStack's middleware signature `{ next, context, request }`\n * and internally adapts it to our more flexible MiddlewareHandler interface.\n *\n * @param config - Configuration options\n * @returns Server handler function compatible with createMiddleware().server()\n *\n * @example\n * ```typescript\n * import { createStart, createMiddleware } from '@tanstack/react-start';\n * import { createTracingServerHandler } from 'autotel-tanstack/middleware';\n *\n * // TanStack-native middleware creation\n * const requestTracingMiddleware = createMiddleware().server(\n * createTracingServerHandler({ captureHeaders: ['x-request-id'] })\n * );\n *\n * export const start = createStart(() => ({\n * requestMiddleware: [requestTracingMiddleware],\n * }));\n * ```\n *\n * @example\n * ```typescript\n * // For server functions - use createMiddleware({ type: 'function' })\n * import { createStart, createMiddleware } from '@tanstack/react-start';\n * import { createTracingServerHandler } from 'autotel-tanstack/middleware';\n *\n * const functionTracingMiddleware = createMiddleware({ type: 'function' }).server(\n * createTracingServerHandler({ type: 'function', captureArgs: true })\n * );\n *\n * export const start = createStart(() => ({\n * functionMiddleware: [functionTracingMiddleware],\n * }));\n * ```\n */\nexport function createTracingServerHandler<TContext = unknown>(\n config?: TracingMiddlewareConfig,\n): (opts: any) => any {\n const handler = createTracingMiddleware<TContext>(config);\n\n // Adapt TanStack's signature to our handler\n return async (opts: any) => {\n return handler(opts);\n };\n}\n"],"mappings":"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"}
@@ -1,5 +1,4 @@
1
- import { a as TraceServerFnConfig } from "./types-pQgmQa4j.js";
2
-
1
+ import { a as TraceServerFnConfig } from "./types-zkKShSiK.js";
3
2
  //#region src/server-functions.d.ts
4
3
  /**
5
4
  * Wrap a TanStack server function with OpenTelemetry tracing
@@ -1 +1 @@
1
- {"version":3,"file":"server-functions.d.ts","names":[],"sources":["../src/server-functions.ts"],"mappings":";;;;;AA6CA;;;;;;;;;;;;;;;;AAGI;AAwGJ;;;;;;;;;;;;;;;;;;AAKkB;;;iBAhHF,aAAA,eAA4B,IAAA,iBAC1C,QAAA,EAAU,CAAA,EACV,MAAA,GAAQ,mBAAA,GACP,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;iBAwGa,2BAAA,6BACc,IAAA,iBAE5B,sBAAA,EAAwB,eAAA,EACxB,aAAA,GAAe,IAAA,CAAK,mBAAA,YACnB,eAAA"}
1
+ {"version":3,"file":"server-functions.d.ts","names":[],"sources":["../src/server-functions.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA8CgB,cAAc,cAAc,qBAC1C,UAAU,GACV,SAAQ,sBACP;;;;;;;;;;;;;;;;;;;;;;;;;iBAgHa,4BACd,4BAA4B,qBAE5B,wBAAwB,iBACxB,gBAAe,KAAK,+BACnB"}
@@ -1,7 +1,7 @@
1
- import { n as SPAN_ATTRIBUTES } from "./types-BrccP0yX.js";
1
+ import { i as SPAN_ATTRIBUTES, n as isRealError, t as isControlFlowSignal } from "./control-flow-p-dnko0G.js";
2
2
  import { r as isServerSide } from "./env-BpFWNnpL.js";
3
3
  import { SpanStatusCode } from "@opentelemetry/api";
4
- import { trace } from "autotel";
4
+ import { getActiveTraceContext, trace } from "autotel";
5
5
 
6
6
  //#region src/server-functions.ts
7
7
  /**
@@ -51,7 +51,11 @@ function traceServerFn(serverFn, config = {}) {
51
51
  return new Proxy(serverFn, {
52
52
  apply(target, thisArg, argArray) {
53
53
  if (!isServerSide()) return target.apply(thisArg, argArray);
54
- return trace(`tanstack.serverFn.${fnName}`, async (ctx) => {
54
+ return trace({
55
+ name: `tanstack.serverFn.${fnName}`,
56
+ isError: isRealError
57
+ }, async () => {
58
+ const ctx = getActiveTraceContext();
55
59
  ctx.setAttributes({
56
60
  [SPAN_ATTRIBUTES.RPC_SYSTEM]: "tanstack-start",
57
61
  [SPAN_ATTRIBUTES.RPC_METHOD]: fnName,
@@ -76,11 +80,15 @@ function traceServerFn(serverFn, config = {}) {
76
80
  ctx.setStatus({ code: SpanStatusCode.OK });
77
81
  return result;
78
82
  } catch (error) {
83
+ if (isControlFlowSignal(error)) {
84
+ ctx.setStatus({ code: SpanStatusCode.OK });
85
+ throw error;
86
+ }
79
87
  if ("recordError" in ctx && typeof ctx.recordError === "function") ctx.recordError(error);
80
88
  else if ("recordException" in ctx && typeof ctx.recordException === "function") ctx.recordException(error);
81
89
  throw error;
82
90
  }
83
- });
91
+ })();
84
92
  },
85
93
  get(target, prop, receiver) {
86
94
  return Reflect.get(target, prop, receiver);
@@ -1 +1 @@
1
- {"version":3,"file":"server-functions.js","names":[],"sources":["../src/server-functions.ts"],"sourcesContent":["import { SpanStatusCode } from '@opentelemetry/api';\nimport { trace, type TraceContext } from 'autotel';\nimport { isServerSide } from './env';\nimport { type TraceServerFnConfig, SPAN_ATTRIBUTES } from './types';\n\n/**\n * Wrap a TanStack server function with OpenTelemetry tracing\n *\n * This function wraps a server function to automatically create spans\n * for each invocation. It captures function name, arguments (optionally),\n * results (optionally), and errors.\n *\n * @param serverFn - The server function to wrap\n * @param config - Configuration options\n * @returns Wrapped server function with tracing\n *\n * @example\n * ```typescript\n * import { createServerFn } from '@tanstack/react-start';\n * import { traceServerFn } from 'autotel-tanstack/server-functions';\n *\n * const getUserBase = createServerFn({ method: 'GET' })\n * .handler(async ({ data: id }) => {\n * return await db.users.findUnique({ where: { id } });\n * });\n *\n * export const getUser = traceServerFn(getUserBase, { name: 'getUser' });\n * ```\n *\n * @example\n * ```typescript\n * // With argument and result capture (careful with PII!)\n * export const createUser = traceServerFn(\n * createServerFn({ method: 'POST' })\n * .handler(async ({ data }) => {\n * return await db.users.create({ data });\n * }),\n * {\n * name: 'createUser',\n * captureArgs: true,\n * captureResults: false, // Don't capture for PII reasons\n * }\n * );\n * ```\n */\nexport function traceServerFn<T extends (...args: any[]) => any>(\n serverFn: T,\n config: TraceServerFnConfig = {},\n): T {\n const fnName = config.name || serverFn.name || 'serverFn';\n const captureArgs = config.captureArgs ?? true;\n const captureResults = config.captureResults ?? false;\n\n return new Proxy(serverFn, {\n apply(target, thisArg, argArray) {\n // If we're in the browser, just call the function without tracing\n // Server functions should never run in the browser, but this prevents\n // autotel (which uses Node.js APIs) from being executed if it somehow does\n if (!isServerSide()) {\n return target.apply(thisArg, argArray);\n }\n\n return trace(`tanstack.serverFn.${fnName}`, async (ctx: TraceContext) => {\n ctx.setAttributes({\n [SPAN_ATTRIBUTES.RPC_SYSTEM]: 'tanstack-start',\n [SPAN_ATTRIBUTES.RPC_METHOD]: fnName,\n [SPAN_ATTRIBUTES.TANSTACK_TYPE]: 'serverFn',\n [SPAN_ATTRIBUTES.TANSTACK_SERVER_FN_NAME]: fnName,\n });\n\n // Capture arguments if configured\n if (captureArgs && argArray.length > 0) {\n const args = argArray[0];\n if (args !== undefined) {\n try {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_SERVER_FN_ARGS,\n JSON.stringify(args),\n );\n } catch {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_SERVER_FN_ARGS,\n '[non-serializable]',\n );\n }\n }\n }\n\n try {\n const result = await Reflect.apply(target, thisArg, argArray);\n\n // Capture result if configured\n if (captureResults && result !== undefined) {\n try {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_SERVER_FN_RESULT,\n JSON.stringify(result),\n );\n } catch {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_SERVER_FN_RESULT,\n '[non-serializable]',\n );\n }\n }\n\n ctx.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n if ('recordError' in ctx && typeof ctx.recordError === 'function') {\n ctx.recordError(error);\n } else if (\n 'recordException' in ctx &&\n typeof ctx.recordException === 'function'\n ) {\n ctx.recordException(error);\n }\n throw error;\n }\n });\n },\n\n get(target, prop, receiver) {\n return Reflect.get(target, prop, receiver);\n },\n }) as T;\n}\n\n/**\n * Create a traced version of createServerFn\n *\n * This higher-order function wraps TanStack's createServerFn to automatically\n * add tracing to all created server functions.\n *\n * @param createServerFnOriginal - The original createServerFn from TanStack\n * @param defaultConfig - Default configuration for all server functions\n * @returns Wrapped createServerFn that produces traced server functions\n *\n * @example\n * ```typescript\n * import { createServerFn as originalCreateServerFn } from '@tanstack/react-start';\n * import { createTracedServerFnFactory } from 'autotel-tanstack/server-functions';\n *\n * export const createServerFn = createTracedServerFnFactory(originalCreateServerFn);\n *\n * // Now all server functions created with createServerFn are automatically traced\n * export const getUser = createServerFn({ method: 'GET' })\n * .handler(async ({ data: id }) => {\n * return await db.users.findUnique({ where: { id } });\n * });\n * ```\n */\nexport function createTracedServerFnFactory<\n TCreateServerFn extends (...args: any[]) => any,\n>(\n createServerFnOriginal: TCreateServerFn,\n defaultConfig: Omit<TraceServerFnConfig, 'name'> = {},\n): TCreateServerFn {\n return new Proxy(createServerFnOriginal, {\n apply(target, thisArg, argArray) {\n const result = Reflect.apply(target, thisArg, argArray);\n\n // If the result has a .handler method, wrap it\n if (\n result &&\n typeof result === 'object' &&\n 'handler' in result &&\n typeof result.handler === 'function'\n ) {\n const originalHandler = result.handler.bind(result);\n\n result.handler = function tracedHandler(handlerFn: unknown) {\n const wrappedHandler = originalHandler(handlerFn as never);\n\n // Try to infer function name from the handler\n const fnName = (handlerFn as { name?: string })?.name || 'serverFn';\n\n return traceServerFn(wrappedHandler, {\n ...defaultConfig,\n name: fnName,\n });\n };\n }\n\n return result;\n },\n }) as TCreateServerFn;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6CA,SAAgB,cACd,UACA,SAA8B,CAAC,GAC5B;CACH,MAAM,SAAS,OAAO,QAAQ,SAAS,QAAQ;CAC/C,MAAM,cAAc,OAAO,eAAe;CAC1C,MAAM,iBAAiB,OAAO,kBAAkB;CAEhD,OAAO,IAAI,MAAM,UAAU;EACzB,MAAM,QAAQ,SAAS,UAAU;GAI/B,IAAI,CAAC,aAAa,GAChB,OAAO,OAAO,MAAM,SAAS,QAAQ;GAGvC,OAAO,MAAM,qBAAqB,UAAU,OAAO,QAAsB;IACvE,IAAI,cAAc;MACf,gBAAgB,aAAa;MAC7B,gBAAgB,aAAa;MAC7B,gBAAgB,gBAAgB;MAChC,gBAAgB,0BAA0B;IAC7C,CAAC;IAGD,IAAI,eAAe,SAAS,SAAS,GAAG;KACtC,MAAM,OAAO,SAAS;KACtB,IAAI,SAAS,QACX,IAAI;MACF,IAAI,aACF,gBAAgB,yBAChB,KAAK,UAAU,IAAI,CACrB;KACF,QAAQ;MACN,IAAI,aACF,gBAAgB,yBAChB,oBACF;KACF;IAEJ;IAEA,IAAI;KACF,MAAM,SAAS,MAAM,QAAQ,MAAM,QAAQ,SAAS,QAAQ;KAG5D,IAAI,kBAAkB,WAAW,QAC/B,IAAI;MACF,IAAI,aACF,gBAAgB,2BAChB,KAAK,UAAU,MAAM,CACvB;KACF,QAAQ;MACN,IAAI,aACF,gBAAgB,2BAChB,oBACF;KACF;KAGF,IAAI,UAAU,EAAE,MAAM,eAAe,GAAG,CAAC;KACzC,OAAO;IACT,SAAS,OAAO;KACd,IAAI,iBAAiB,OAAO,OAAO,IAAI,gBAAgB,YACrD,IAAI,YAAY,KAAK;UAChB,IACL,qBAAqB,OACrB,OAAO,IAAI,oBAAoB,YAE/B,IAAI,gBAAgB,KAAK;KAE3B,MAAM;IACR;GACF,CAAC;EACH;EAEA,IAAI,QAAQ,MAAM,UAAU;GAC1B,OAAO,QAAQ,IAAI,QAAQ,MAAM,QAAQ;EAC3C;CACF,CAAC;AACH;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,SAAgB,4BAGd,wBACA,gBAAmD,CAAC,GACnC;CACjB,OAAO,IAAI,MAAM,wBAAwB,EACvC,MAAM,QAAQ,SAAS,UAAU;EAC/B,MAAM,SAAS,QAAQ,MAAM,QAAQ,SAAS,QAAQ;EAGtD,IACE,UACA,OAAO,WAAW,YAClB,aAAa,UACb,OAAO,OAAO,YAAY,YAC1B;GACA,MAAM,kBAAkB,OAAO,QAAQ,KAAK,MAAM;GAElD,OAAO,UAAU,SAAS,cAAc,WAAoB;IAC1D,MAAM,iBAAiB,gBAAgB,SAAkB;IAGzD,MAAM,SAAU,WAAiC,QAAQ;IAEzD,OAAO,cAAc,gBAAgB;KACnC,GAAG;KACH,MAAM;IACR,CAAC;GACH;EACF;EAEA,OAAO;CACT,EACF,CAAC;AACH"}
1
+ {"version":3,"file":"server-functions.js","names":[],"sources":["../src/server-functions.ts"],"sourcesContent":["import { SpanStatusCode } from '@opentelemetry/api';\nimport { trace, getActiveTraceContext } from 'autotel';\nimport { isServerSide } from './env';\nimport { isControlFlowSignal, isRealError } from './control-flow';\nimport { type TraceServerFnConfig, SPAN_ATTRIBUTES } from './types';\n\n/**\n * Wrap a TanStack server function with OpenTelemetry tracing\n *\n * This function wraps a server function to automatically create spans\n * for each invocation. It captures function name, arguments (optionally),\n * results (optionally), and errors.\n *\n * @param serverFn - The server function to wrap\n * @param config - Configuration options\n * @returns Wrapped server function with tracing\n *\n * @example\n * ```typescript\n * import { createServerFn } from '@tanstack/react-start';\n * import { traceServerFn } from 'autotel-tanstack/server-functions';\n *\n * const getUserBase = createServerFn({ method: 'GET' })\n * .handler(async ({ data: id }) => {\n * return await db.users.findUnique({ where: { id } });\n * });\n *\n * export const getUser = traceServerFn(getUserBase, { name: 'getUser' });\n * ```\n *\n * @example\n * ```typescript\n * // With argument and result capture (careful with PII!)\n * export const createUser = traceServerFn(\n * createServerFn({ method: 'POST' })\n * .handler(async ({ data }) => {\n * return await db.users.create({ data });\n * }),\n * {\n * name: 'createUser',\n * captureArgs: true,\n * captureResults: false, // Don't capture for PII reasons\n * }\n * );\n * ```\n */\nexport function traceServerFn<T extends (...args: any[]) => any>(\n serverFn: T,\n config: TraceServerFnConfig = {},\n): T {\n const fnName = config.name || serverFn.name || 'serverFn';\n const captureArgs = config.captureArgs ?? true;\n const captureResults = config.captureResults ?? false;\n\n return new Proxy(serverFn, {\n apply(target, thisArg, argArray) {\n // If we're in the browser, just call the function without tracing\n // Server functions should never run in the browser, but this prevents\n // autotel (which uses Node.js APIs) from being executed if it somehow does\n if (!isServerSide()) {\n return target.apply(thisArg, argArray);\n }\n\n return trace(\n { name: `tanstack.serverFn.${fnName}`, isError: isRealError },\n async () => {\n const ctx = getActiveTraceContext()!;\n ctx.setAttributes({\n [SPAN_ATTRIBUTES.RPC_SYSTEM]: 'tanstack-start',\n [SPAN_ATTRIBUTES.RPC_METHOD]: fnName,\n [SPAN_ATTRIBUTES.TANSTACK_TYPE]: 'serverFn',\n [SPAN_ATTRIBUTES.TANSTACK_SERVER_FN_NAME]: fnName,\n });\n\n // Capture arguments if configured\n if (captureArgs && argArray.length > 0) {\n const args = argArray[0];\n if (args !== undefined) {\n try {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_SERVER_FN_ARGS,\n JSON.stringify(args),\n );\n } catch {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_SERVER_FN_ARGS,\n '[non-serializable]',\n );\n }\n }\n }\n\n try {\n const result = await Reflect.apply(target, thisArg, argArray);\n\n // Capture result if configured\n if (captureResults && result !== undefined) {\n try {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_SERVER_FN_RESULT,\n JSON.stringify(result),\n );\n } catch {\n ctx.setAttribute(\n SPAN_ATTRIBUTES.TANSTACK_SERVER_FN_RESULT,\n '[non-serializable]',\n );\n }\n }\n\n ctx.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n if (isControlFlowSignal(error)) {\n ctx.setStatus({ code: SpanStatusCode.OK });\n throw error;\n }\n if ('recordError' in ctx && typeof ctx.recordError === 'function') {\n ctx.recordError(error);\n } else if (\n 'recordException' in ctx &&\n typeof ctx.recordException === 'function'\n ) {\n ctx.recordException(error);\n }\n throw error;\n }\n },\n )();\n },\n\n get(target, prop, receiver) {\n return Reflect.get(target, prop, receiver);\n },\n }) as T;\n}\n\n/**\n * Create a traced version of createServerFn\n *\n * This higher-order function wraps TanStack's createServerFn to automatically\n * add tracing to all created server functions.\n *\n * @param createServerFnOriginal - The original createServerFn from TanStack\n * @param defaultConfig - Default configuration for all server functions\n * @returns Wrapped createServerFn that produces traced server functions\n *\n * @example\n * ```typescript\n * import { createServerFn as originalCreateServerFn } from '@tanstack/react-start';\n * import { createTracedServerFnFactory } from 'autotel-tanstack/server-functions';\n *\n * export const createServerFn = createTracedServerFnFactory(originalCreateServerFn);\n *\n * // Now all server functions created with createServerFn are automatically traced\n * export const getUser = createServerFn({ method: 'GET' })\n * .handler(async ({ data: id }) => {\n * return await db.users.findUnique({ where: { id } });\n * });\n * ```\n */\nexport function createTracedServerFnFactory<\n TCreateServerFn extends (...args: any[]) => any,\n>(\n createServerFnOriginal: TCreateServerFn,\n defaultConfig: Omit<TraceServerFnConfig, 'name'> = {},\n): TCreateServerFn {\n return new Proxy(createServerFnOriginal, {\n apply(target, thisArg, argArray) {\n const result = Reflect.apply(target, thisArg, argArray);\n\n // If the result has a .handler method, wrap it\n if (\n result &&\n typeof result === 'object' &&\n 'handler' in result &&\n typeof result.handler === 'function'\n ) {\n const originalHandler = result.handler.bind(result);\n\n result.handler = function tracedHandler(handlerFn: unknown) {\n const wrappedHandler = originalHandler(handlerFn as never);\n\n // Try to infer function name from the handler\n const fnName = (handlerFn as { name?: string })?.name || 'serverFn';\n\n return traceServerFn(wrappedHandler, {\n ...defaultConfig,\n name: fnName,\n });\n };\n }\n\n return result;\n },\n }) as TCreateServerFn;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CA,SAAgB,cACd,UACA,SAA8B,CAAC,GAC5B;CACH,MAAM,SAAS,OAAO,QAAQ,SAAS,QAAQ;CAC/C,MAAM,cAAc,OAAO,eAAe;CAC1C,MAAM,iBAAiB,OAAO,kBAAkB;CAEhD,OAAO,IAAI,MAAM,UAAU;EACzB,MAAM,QAAQ,SAAS,UAAU;GAI/B,IAAI,CAAC,aAAa,GAChB,OAAO,OAAO,MAAM,SAAS,QAAQ;GAGvC,OAAO,MACL;IAAE,MAAM,qBAAqB;IAAU,SAAS;GAAY,GAC5D,YAAY;IACV,MAAM,MAAM,sBAAsB;IAClC,IAAI,cAAc;MACf,gBAAgB,aAAa;MAC7B,gBAAgB,aAAa;MAC7B,gBAAgB,gBAAgB;MAChC,gBAAgB,0BAA0B;IAC7C,CAAC;IAGD,IAAI,eAAe,SAAS,SAAS,GAAG;KACtC,MAAM,OAAO,SAAS;KACtB,IAAI,SAAS,QACX,IAAI;MACF,IAAI,aACF,gBAAgB,yBAChB,KAAK,UAAU,IAAI,CACrB;KACF,QAAQ;MACN,IAAI,aACF,gBAAgB,yBAChB,oBACF;KACF;IAEJ;IAEA,IAAI;KACF,MAAM,SAAS,MAAM,QAAQ,MAAM,QAAQ,SAAS,QAAQ;KAG5D,IAAI,kBAAkB,WAAW,QAC/B,IAAI;MACF,IAAI,aACF,gBAAgB,2BAChB,KAAK,UAAU,MAAM,CACvB;KACF,QAAQ;MACN,IAAI,aACF,gBAAgB,2BAChB,oBACF;KACF;KAGF,IAAI,UAAU,EAAE,MAAM,eAAe,GAAG,CAAC;KACzC,OAAO;IACT,SAAS,OAAO;KACd,IAAI,oBAAoB,KAAK,GAAG;MAC9B,IAAI,UAAU,EAAE,MAAM,eAAe,GAAG,CAAC;MACzC,MAAM;KACR;KACA,IAAI,iBAAiB,OAAO,OAAO,IAAI,gBAAgB,YACrD,IAAI,YAAY,KAAK;UAChB,IACL,qBAAqB,OACrB,OAAO,IAAI,oBAAoB,YAE/B,IAAI,gBAAgB,KAAK;KAE3B,MAAM;IACR;GACF,CACF,CAAC,CAAC;EACJ;EAEA,IAAI,QAAQ,MAAM,UAAU;GAC1B,OAAO,QAAQ,IAAI,QAAQ,MAAM,QAAQ;EAC3C;CACF,CAAC;AACH;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,SAAgB,4BAGd,wBACA,gBAAmD,CAAC,GACnC;CACjB,OAAO,IAAI,MAAM,wBAAwB,EACvC,MAAM,QAAQ,SAAS,UAAU;EAC/B,MAAM,SAAS,QAAQ,MAAM,QAAQ,SAAS,QAAQ;EAGtD,IACE,UACA,OAAO,WAAW,YAClB,aAAa,UACb,OAAO,OAAO,YAAY,YAC1B;GACA,MAAM,kBAAkB,OAAO,QAAQ,KAAK,MAAM;GAElD,OAAO,UAAU,SAAS,cAAc,WAAoB;IAC1D,MAAM,iBAAiB,gBAAgB,SAAkB;IAGzD,MAAM,SAAU,WAAiC,QAAQ;IAEzD,OAAO,cAAc,gBAAgB;KACnC,GAAG;KACH,MAAM;IACR,CAAC;GACH;EACF;EAEA,OAAO;CACT,EACF,CAAC;AACH"}
package/dist/testing.d.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  import { AttributeValue, Attributes, Context, HrTime, Link, SpanContext, SpanKind, SpanStatus } from "@opentelemetry/api";
2
-
3
2
  //#region ../../node_modules/.pnpm/@opentelemetry+resources@2.9.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/resources/build/src/types.d.ts
4
3
  type MaybePromise<T> = T | Promise<T>;
5
4
  type RawResourceAttribute = [string, MaybePromise<AttributeValue | undefined>];
@@ -1 +1 @@
1
- {"version":3,"file":"testing.d.ts","names":["detect","ResourceDetectionConfig","config","DetectedResource","attributes","DetectedResourceAttributes","MaybePromise","AttributeValue","Record","DetectedResourceAttributeValue","T","Promise","schemaUrl","asyncAttributesPending","attributes","Attributes","schemaUrl","waitForAsyncAttributes","Promise","merge","Resource","other","getRawAttributes","RawResourceAttribute","Function","__wrapped","__unwrap","__original","name","version","schemaUrl","Exception","ex","time","HrTime","name","attributes","Attributes","droppedAttributesCount","name","kind","SpanKind","spanContext","SpanContext","parentSpanContext","startTime","HrTime","endTime","status","SpanStatus","attributes","Attributes","links","Link","events","TimedEvent","duration","ended","resource","Resource","instrumentationScope","InstrumentationScope","droppedAttributesCount","droppedEventsCount","droppedLinksCount"],"sources":["../../../node_modules/.pnpm/@opentelemetry+resources@2.9.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/resources/build/src/types.d.ts","../../../node_modules/.pnpm/@opentelemetry+resources@2.9.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/resources/build/src/Resource.d.ts","../../../node_modules/.pnpm/@opentelemetry+core@2.9.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/core/build/src/common/types.d.ts","../../../node_modules/.pnpm/@opentelemetry+sdk-trace@2.9.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/sdk-trace/build/src/TimedEvent.d.ts","../../../node_modules/.pnpm/@opentelemetry+sdk-trace@2.9.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/sdk-trace/build/src/export/ReadableSpan.d.ts","../src/testing.ts"],"x_google_ignoreList":[0,1,2,3,4],"mappings":"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"}
1
+ {"version":3,"file":"testing.d.ts","names":[],"sources":["../../../node_modules/.pnpm/@opentelemetry+resources@2.9.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/resources/build/src/types.d.ts","../../../node_modules/.pnpm/@opentelemetry+resources@2.9.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/resources/build/src/Resource.d.ts","../../../node_modules/.pnpm/@opentelemetry+core@2.9.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/core/build/src/common/types.d.ts","../../../node_modules/.pnpm/@opentelemetry+sdk-trace@2.9.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/sdk-trace/build/src/TimedEvent.d.ts","../../../node_modules/.pnpm/@opentelemetry+sdk-trace@2.9.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/sdk-trace/build/src/export/ReadableSpan.d.ts","../src/testing.ts"],"x_google_ignoreList":[0,1,2,3,4],"mappings":";;KA+BY,aAAa,KAAK,IAAI,QAAQ;KAC9B,gCAER,aAAa;;;;;;;;;;;;;UCtBA;;;;;;;WAOJ;;;;WAIA,YAAY;;;;WAIZ;;;;;;EAMT,2BAA2B;;;;;;;;;EAS3B,MAAM,OAAO,kBAAkB;EAC/B,oBAAoB;;;;;;;;;UC5BP;WACJ;WACA;WACA;;;;;;;;UCbI;EACb,MAAM;;EAEN;;EAEA,aAAa;;EAEb;;;;UCRa;WACJ;WACA,MAAM;WACN,mBAAmB;WACnB,oBAAoB;WACpB,WAAW;WACX,SAAS;WACT,QAAQ;WACR,YAAY;WACZ,OAAO;WACP,QAAQ;WACR,UAAU;WACV;WACA,UAAU;WACV,sBAAsB;WACtB;WACA;WACA;;;;;;;;;;UCVI;;;;EAIf;IACE,oBAAoB;IACpB;;;;;EAMF,YAAY;;;;EAKZ,eAAe,eAAe,SAAS;;;;EAKvC,eACE,yDACC;;;;EAKH;;;;EAKA,iBAAiB,eAAe;;;;EAKhC,uBACE,eAAe,QACf,cACA;;;;EAMF,qBAAqB;;;;EAKrB,mBAAmB;;;;EAKnB,uBAAuB;;;;EAKvB,oBAAoB,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAwCtB,qBAAqB;;;;;;;;;;;;;iBA8GrB,kBACd,gBACA,cACA;EACE,UAAU;EACV;EACA;IAED;;;;;;;;;;;;;;iBA2Ba,oBAAoB,kBAAkB;;;;;;;;KAyB1C;EACV;EACA;EACA;EACA;EACA,aAAa;EACb;IAAU;IAAc;;EACxB;;;;;;KA4CG,eAAe;EAAY,SAAS;;KAGpC,mBAAmB,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAyC1B,qBACd,iBAAiB,iBACjB;iBAUc;EACd,MAAM,OAAO,iBAAiB;EAC9B,SAAS,OAAO,iBAAiB"}