@bitfab/sdk 0.64.24 → 0.64.25

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 (97) hide show
  1. package/dist/{chunk-3YAEAQI5.js → chunk-DY52FEEM.js} +2 -2
  2. package/dist/{chunk-3YAEAQI5.js.map → chunk-DY52FEEM.js.map} +1 -1
  3. package/dist/{chunk-E6YNESVO.js → chunk-EFGQRVMT.js} +2 -2
  4. package/dist/chunk-GSHCHCB5.js +433 -0
  5. package/dist/chunk-GSHCHCB5.js.map +1 -0
  6. package/dist/chunk-IBWW3SP4.js +45 -0
  7. package/dist/chunk-IBWW3SP4.js.map +1 -0
  8. package/dist/{chunk-EXTDH26A.js → chunk-JNVDKPFL.js} +6 -6
  9. package/dist/{chunk-OXFZJP4E.js → chunk-MN3E2RUU.js} +6 -8
  10. package/dist/chunk-MN3E2RUU.js.map +1 -0
  11. package/dist/{chunk-7A5E42SY.js → chunk-OMWPLB5R.js} +2 -2
  12. package/dist/{chunk-7A5E42SY.js.map → chunk-OMWPLB5R.js.map} +1 -1
  13. package/dist/{chunk-3NIUOINN.js → chunk-R7SJXFMB.js} +4 -4
  14. package/dist/{chunk-NOWQOHCR.js → chunk-ULKKTYOL.js} +2 -2
  15. package/dist/{http-UQTRAPDD.js → http-GDTWWWYY.js} +2 -2
  16. package/dist/{http-G3U247I4.js → http-QXJJB2F5.js} +2 -2
  17. package/dist/index.cjs +1 -1
  18. package/dist/index.cjs.map +1 -1
  19. package/dist/index.d.cts +1 -1
  20. package/dist/index.d.ts +1 -1
  21. package/dist/index.js +3 -3
  22. package/dist/node.cjs +1 -1
  23. package/dist/node.cjs.map +1 -1
  24. package/dist/node.js +3 -3
  25. package/dist/{replay-SK4FOKUB.js → replay-DC3PID7Q.js} +3 -3
  26. package/dist/{replay-MPMU3VBP.js → replay-VXQGVZXM.js} +3 -3
  27. package/dist/replayCli.js +3 -3
  28. package/dist/seedCli.js +3 -3
  29. package/dist/transform/babel.cjs +68 -34
  30. package/dist/transform/babel.cjs.map +1 -1
  31. package/dist/transform/babel.d.cts +2 -2
  32. package/dist/transform/babel.d.ts +2 -2
  33. package/dist/transform/babel.js +2 -374
  34. package/dist/transform/babel.js.map +1 -1
  35. package/dist/transform/bun.cjs +389 -464
  36. package/dist/transform/bun.cjs.map +1 -1
  37. package/dist/transform/bun.js +3 -3
  38. package/dist/transform/esbuild.cjs +389 -464
  39. package/dist/transform/esbuild.cjs.map +1 -1
  40. package/dist/transform/esbuild.js +3 -3
  41. package/dist/transform/loaderRuntime.cjs +448 -498
  42. package/dist/transform/loaderRuntime.cjs.map +1 -1
  43. package/dist/transform/loaderRuntime.js +90 -70
  44. package/dist/transform/loaderRuntime.js.map +1 -1
  45. package/dist/transform/nest.cjs +389 -464
  46. package/dist/transform/nest.cjs.map +1 -1
  47. package/dist/transform/nest.js +3 -3
  48. package/dist/transform/next.cjs +389 -464
  49. package/dist/transform/next.cjs.map +1 -1
  50. package/dist/transform/next.js +3 -3
  51. package/dist/transform/nodeLoader.js +451 -498
  52. package/dist/transform/nodeLoader.js.map +1 -1
  53. package/dist/transform/rolldown.cjs +389 -464
  54. package/dist/transform/rolldown.cjs.map +1 -1
  55. package/dist/transform/rolldown.js +3 -3
  56. package/dist/transform/rollup.cjs +389 -464
  57. package/dist/transform/rollup.cjs.map +1 -1
  58. package/dist/transform/rollup.js +3 -3
  59. package/dist/transform/rsbuild.cjs +389 -464
  60. package/dist/transform/rsbuild.cjs.map +1 -1
  61. package/dist/transform/rsbuild.js +3 -3
  62. package/dist/transform/rspack.cjs +389 -464
  63. package/dist/transform/rspack.cjs.map +1 -1
  64. package/dist/transform/rspack.js +3 -3
  65. package/dist/transform/swc.cjs +402 -471
  66. package/dist/transform/swc.cjs.map +1 -1
  67. package/dist/transform/swc.js +19 -13
  68. package/dist/transform/swc.js.map +1 -1
  69. package/dist/transform/unplugin.cjs +389 -464
  70. package/dist/transform/unplugin.cjs.map +1 -1
  71. package/dist/transform/unplugin.js +3 -3
  72. package/dist/transform/vite.cjs +389 -464
  73. package/dist/transform/vite.cjs.map +1 -1
  74. package/dist/transform/vite.js +3 -3
  75. package/dist/transform/webpack.cjs +389 -464
  76. package/dist/transform/webpack.cjs.map +1 -1
  77. package/dist/transform/webpack.js +3 -3
  78. package/package.json +10 -21
  79. package/dist/chunk-6R33XLNY.js +0 -28
  80. package/dist/chunk-6R33XLNY.js.map +0 -1
  81. package/dist/chunk-OXFZJP4E.js.map +0 -1
  82. package/dist/chunk-PACLPKDH.js +0 -513
  83. package/dist/chunk-PACLPKDH.js.map +0 -1
  84. package/dist/transform/typescript.cjs +0 -566
  85. package/dist/transform/typescript.cjs.map +0 -1
  86. package/dist/transform/typescript.d.cts +0 -22
  87. package/dist/transform/typescript.d.ts +0 -22
  88. package/dist/transform/typescript.js +0 -10
  89. package/dist/transform/typescript.js.map +0 -1
  90. /package/dist/{chunk-E6YNESVO.js.map → chunk-EFGQRVMT.js.map} +0 -0
  91. /package/dist/{chunk-EXTDH26A.js.map → chunk-JNVDKPFL.js.map} +0 -0
  92. /package/dist/{chunk-3NIUOINN.js.map → chunk-R7SJXFMB.js.map} +0 -0
  93. /package/dist/{chunk-NOWQOHCR.js.map → chunk-ULKKTYOL.js.map} +0 -0
  94. /package/dist/{http-G3U247I4.js.map → http-GDTWWWYY.js.map} +0 -0
  95. /package/dist/{http-UQTRAPDD.js.map → http-QXJJB2F5.js.map} +0 -0
  96. /package/dist/{replay-MPMU3VBP.js.map → replay-DC3PID7Q.js.map} +0 -0
  97. /package/dist/{replay-SK4FOKUB.js.map → replay-VXQGVZXM.js.map} +0 -0
package/dist/node.js CHANGED
@@ -28,7 +28,7 @@ import {
28
28
  getCurrentTrace,
29
29
  reseedFromRegistry,
30
30
  seedFromRegistry
31
- } from "./chunk-EXTDH26A.js";
31
+ } from "./chunk-JNVDKPFL.js";
32
32
  import "./chunk-YWXQM6J3.js";
33
33
  import {
34
34
  BITFAB_PROGRESS_PREFIX,
@@ -37,7 +37,7 @@ import {
37
37
  ReplayError,
38
38
  reportReplayProgress,
39
39
  serializeReplayResult
40
- } from "./chunk-E6YNESVO.js";
40
+ } from "./chunk-EFGQRVMT.js";
41
41
  import {
42
42
  BitfabError,
43
43
  DEFAULT_SERVICE_URL,
@@ -45,7 +45,7 @@ import {
45
45
  MixedTracingError,
46
46
  __version__,
47
47
  flushTraces
48
- } from "./chunk-3YAEAQI5.js";
48
+ } from "./chunk-DY52FEEM.js";
49
49
  import {
50
50
  assertAsyncStorageRegistered,
51
51
  registerAsyncLocalStorageClass
@@ -10,8 +10,8 @@ import {
10
10
  sleepForReplayPersistence,
11
11
  waitForReplayPersistence,
12
12
  warnJudgeAssertionsDeprecated
13
- } from "./chunk-NOWQOHCR.js";
14
- import "./chunk-7A5E42SY.js";
13
+ } from "./chunk-ULKKTYOL.js";
14
+ import "./chunk-OMWPLB5R.js";
15
15
  export {
16
16
  BITFAB_PROGRESS_PREFIX,
17
17
  DbBranchReplayError,
@@ -25,4 +25,4 @@ export {
25
25
  waitForReplayPersistence,
26
26
  warnJudgeAssertionsDeprecated
27
27
  };
28
- //# sourceMappingURL=replay-SK4FOKUB.js.map
28
+ //# sourceMappingURL=replay-DC3PID7Q.js.map
@@ -10,8 +10,8 @@ import {
10
10
  sleepForReplayPersistence,
11
11
  waitForReplayPersistence,
12
12
  warnJudgeAssertionsDeprecated
13
- } from "./chunk-E6YNESVO.js";
14
- import "./chunk-3YAEAQI5.js";
13
+ } from "./chunk-EFGQRVMT.js";
14
+ import "./chunk-DY52FEEM.js";
15
15
  import "./chunk-MT36GJMW.js";
16
16
  export {
17
17
  BITFAB_PROGRESS_PREFIX,
@@ -26,4 +26,4 @@ export {
26
26
  waitForReplayPersistence,
27
27
  warnJudgeAssertionsDeprecated
28
28
  };
29
- //# sourceMappingURL=replay-MPMU3VBP.js.map
29
+ //# sourceMappingURL=replay-VXQGVZXM.js.map
package/dist/replayCli.js CHANGED
@@ -8,9 +8,9 @@ import {
8
8
  runRegistryMain,
9
9
  runReplayCli,
10
10
  runSeedCli
11
- } from "./chunk-3NIUOINN.js";
12
- import "./chunk-NOWQOHCR.js";
13
- import "./chunk-7A5E42SY.js";
11
+ } from "./chunk-R7SJXFMB.js";
12
+ import "./chunk-ULKKTYOL.js";
13
+ import "./chunk-OMWPLB5R.js";
14
14
 
15
15
  // src/cloudReplayCli.ts
16
16
  var CLOUD_REPLAY_HINT = "Add --cloud to run the same replay on GitHub Actions; bitfab-replay --cloud --help explains it.";
package/dist/seedCli.js CHANGED
@@ -6,9 +6,9 @@ import {
6
6
  runIfEntrypoint,
7
7
  runRegistryMain,
8
8
  runSeedCli
9
- } from "./chunk-3NIUOINN.js";
10
- import "./chunk-NOWQOHCR.js";
11
- import "./chunk-7A5E42SY.js";
9
+ } from "./chunk-R7SJXFMB.js";
10
+ import "./chunk-ULKKTYOL.js";
11
+ import "./chunk-OMWPLB5R.js";
12
12
 
13
13
  // src/seedCli.ts
14
14
  var USAGE = "Usage: bitfab-seed --registry <path> <pipeline> --from-trace <id>[,<id>...]\n bitfab-seed --registry <path> <pipeline> --cases <cases.jsonl> [--run]\nRun bitfab-seed --registry <path> <pipeline> --help for details.";
@@ -30,6 +30,14 @@ var AUTO_TRACE_TRANSFORM_MARKER = "__bitfab_auto_trace_transformed_v1__";
30
30
  function autoTraceFunctionId(file, name) {
31
31
  return `${AUTO_TRACE_FUNCTION_ID_VERSION}:${file}#${name}`;
32
32
  }
33
+ function sourceFilename(filename) {
34
+ return filename.replace(/\\/g, "/").split(/[?#]/, 1)[0] ?? "";
35
+ }
36
+ function autoTraceFilename(filename, cwd) {
37
+ const normalized = sourceFilename(filename);
38
+ const normalizedCwd = cwd.replace(/\\/g, "/").replace(/\/$/, "");
39
+ return normalized.startsWith(`${normalizedCwd}/`) ? normalized.slice(normalizedCwd.length + 1) : normalized;
40
+ }
33
41
  function shouldTransformBitfabFile(filename, options) {
34
42
  if (!filename) {
35
43
  return false;
@@ -37,7 +45,7 @@ function shouldTransformBitfabFile(filename, options) {
37
45
  if (options.include && !options.include(filename)) {
38
46
  return false;
39
47
  }
40
- const normalized = filename.replace(/\\/g, "/").split(/[?#]/, 1)[0] ?? "";
48
+ const normalized = sourceFilename(filename);
41
49
  const normalizedCwd = options.cwd?.replace(/\\/g, "/").replace(/\/$/, "");
42
50
  const isAbsolute = normalized.startsWith("/") || /^[A-Za-z]:\//.test(normalized);
43
51
  if (normalizedCwd && isAbsolute && normalized !== normalizedCwd && !normalized.startsWith(`${normalizedCwd}/`)) {
@@ -63,8 +71,8 @@ function functionName(path, types) {
63
71
  return node.id.name;
64
72
  }
65
73
  }
66
- if ((types.isClassMethod(node) || types.isObjectMethod(node)) && !node.computed) {
67
- return propertyName(node.key, types) ?? "anonymous";
74
+ if ((types.isClassMethod(node) || types.isObjectMethod(node)) && !node.computed && types.isIdentifier(node.key)) {
75
+ return node.key.name;
68
76
  }
69
77
  const parent = path.parentPath?.node;
70
78
  if (types.isVariableDeclarator(parent)) {
@@ -73,16 +81,33 @@ function functionName(path, types) {
73
81
  if (types.isObjectProperty(parent) && !parent.computed) {
74
82
  return propertyName(parent.key, types) ?? "anonymous";
75
83
  }
76
- const line = node.loc?.start.line ?? 0;
77
- const column = node.loc?.start.column ?? 0;
84
+ const { line, column } = sourcePosition(path);
78
85
  return `anonymous-${line}-${column}`;
79
86
  }
87
+ function isInstrumentableFunction(node, types) {
88
+ if (node.generator || types.isClassPrivateMethod(node)) {
89
+ return false;
90
+ }
91
+ return !(types.isClassMethod(node) || types.isObjectMethod(node)) || node.kind === "method";
92
+ }
93
+ function sourcePosition(path) {
94
+ const exportDeclaration = path.parentPath?.isExportDeclaration() ? path.parentPath.node : void 0;
95
+ const start = (exportDeclaration ?? path.node).loc?.start;
96
+ return { line: start?.line ?? 0, column: start?.column ?? 0 };
97
+ }
80
98
  function qualifiedFunctionName(path, types) {
81
99
  const ownName = functionName(path, types);
100
+ if (ownName.startsWith("anonymous-")) {
101
+ return ownName;
102
+ }
82
103
  const scopes = [];
83
104
  let ancestor = path.parentPath;
84
105
  while (ancestor) {
85
106
  if (ancestor.isFunction()) {
107
+ if (!isInstrumentableFunction(ancestor.node, types)) {
108
+ ancestor = ancestor.parentPath;
109
+ continue;
110
+ }
86
111
  const name = functionName(
87
112
  ancestor,
88
113
  types
@@ -181,9 +206,17 @@ function isBitfabWrappedFunction(path, types) {
181
206
  function isBitfabManagedFunction(path, types) {
182
207
  return isTraceDecoratorRoot(path, types) || isBitfabWrappedFunction(path, types);
183
208
  }
209
+ function runtimeParameters(node, types) {
210
+ return node.params.filter(
211
+ (parameter) => !types.isIdentifier(parameter, { name: "this" })
212
+ );
213
+ }
184
214
  function parameterInputs(path, types) {
185
215
  const elements = [];
186
- for (const [index, parameter] of (path.node.params ?? []).entries()) {
216
+ for (const [index, parameter] of runtimeParameters(
217
+ path.node,
218
+ types
219
+ ).entries()) {
187
220
  if (!types.isArrowFunctionExpression(path.node)) {
188
221
  if (types.isRestElement(parameter)) {
189
222
  elements.push(
@@ -226,7 +259,8 @@ function needsArgumentWrapper(path, types) {
226
259
  );
227
260
  }
228
261
  function isRestWrapper(path, types) {
229
- return path.node.params.length === 1 && types.isRestElement(path.node.params[0]);
262
+ const parameters = runtimeParameters(path.node, types);
263
+ return parameters.length === 1 && types.isRestElement(parameters[0]);
230
264
  }
231
265
  function bitfabBabelPlugin(api) {
232
266
  const { types } = api;
@@ -252,6 +286,7 @@ function bitfabBabelPlugin(api) {
252
286
  if (state.skipFile || !state.usedRuntime || !state.runtimeIdentifier || !state.activeIdentifier || !state.wrapperIdentifier) {
253
287
  return;
254
288
  }
289
+ state.file.metadata[AUTO_TRACE_TRANSFORM_MARKER] = true;
255
290
  path.unshiftContainer("body", [
256
291
  types.importDeclaration(
257
292
  [
@@ -309,21 +344,18 @@ function bitfabBabelPlugin(api) {
309
344
  Function: {
310
345
  exit(path, state) {
311
346
  const node = path.node;
312
- if (state.skipFile || node._bitfabInstrumented || node.generator || isBitfabManagedFunction(path, types) || !state.runtimeIdentifier || !state.activeIdentifier || !state.wrapperIdentifier) {
313
- return;
314
- }
315
- if ((types.isClassMethod(node) || types.isObjectMethod(node)) && node.kind !== "method" || types.isClassPrivateMethod(node)) {
347
+ if (state.skipFile || node._bitfabInstrumented || !isInstrumentableFunction(node, types) || isBitfabManagedFunction(path, types) || !state.runtimeIdentifier || !state.activeIdentifier || !state.wrapperIdentifier) {
316
348
  return;
317
349
  }
318
350
  const name = qualifiedFunctionName(path, types);
319
351
  if (name.startsWith("anonymous-")) {
320
352
  return;
321
353
  }
322
- const filename = state.file.opts.filename ?? "unknown";
323
- const cwd = state.opts.cwd ?? state.file.opts.cwd ?? process.cwd();
324
- const normalizedFilename = filename.replace(`${cwd}/`, "").replace(/\\/g, "/");
325
- const line = node.loc?.start.line ?? 0;
326
- const column = node.loc?.start.column ?? 0;
354
+ const normalizedFilename = autoTraceFilename(
355
+ state.file.opts.filename ?? "unknown",
356
+ state.opts.cwd ?? state.file.opts.cwd ?? process.cwd()
357
+ );
358
+ const { line, column } = sourcePosition(path);
327
359
  const definition = types.objectExpression([
328
360
  types.objectProperty(
329
361
  types.identifier("id"),
@@ -367,15 +399,11 @@ function bitfabBabelPlugin(api) {
367
399
  ])
368
400
  );
369
401
  if (needsArgumentWrapper(path, types)) {
370
- const original = types.cloneNode(
371
- node,
372
- true
373
- );
374
- original._bitfabInstrumented = true;
402
+ node._bitfabInstrumented = true;
375
403
  path.replaceWith(
376
- types.callExpression(state.wrapperIdentifier, [
377
- definitionIdentifier,
378
- original
404
+ types.callExpression(types.cloneNode(state.wrapperIdentifier), [
405
+ types.cloneNode(definitionIdentifier),
406
+ node
379
407
  ])
380
408
  );
381
409
  state.usedRuntime = true;
@@ -388,18 +416,24 @@ function bitfabBabelPlugin(api) {
388
416
  const body = types.blockStatement(
389
417
  [
390
418
  types.ifStatement(
391
- types.callExpression(state.activeIdentifier, []),
419
+ types.callExpression(
420
+ types.cloneNode(state.activeIdentifier),
421
+ []
422
+ ),
392
423
  types.blockStatement([
393
424
  types.returnStatement(
394
- types.callExpression(state.runtimeIdentifier, [
395
- definitionIdentifier,
396
- parameterInputs(path, types),
397
- types.arrowFunctionExpression(
398
- [],
399
- types.cloneNode(originalBody, true),
400
- node.async ?? false
401
- )
402
- ])
425
+ types.callExpression(
426
+ types.cloneNode(state.runtimeIdentifier),
427
+ [
428
+ types.cloneNode(definitionIdentifier),
429
+ parameterInputs(path, types),
430
+ types.arrowFunctionExpression(
431
+ [],
432
+ types.cloneNode(originalBody, true),
433
+ node.async ?? false
434
+ )
435
+ ]
436
+ )
403
437
  )
404
438
  ])
405
439
  ),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../bitfab-typescript-transform/src/babelPlugin.ts","../../../bitfab-typescript-transform/src/transformOptions.ts"],"sourcesContent":["import type { NodePath, PluginObj, PluginPass } from \"@babel/core\"\nimport type * as BabelTypes from \"@babel/types\"\nimport type { BitfabTransformOptions } from \"./transformOptions.js\"\nimport {\n AUTO_TRACE_TRANSFORM_MARKER,\n autoTraceFunctionId,\n shouldTransformBitfabFile,\n} from \"./transformOptions.js\"\n\ntype BabelTypesApi = typeof BabelTypes\n\ntype BitfabPluginOptions = BitfabTransformOptions\n\ninterface BitfabPluginState extends PluginPass {\n opts: BitfabPluginOptions\n runtimeIdentifier?: ReturnType<BabelTypesApi[\"identifier\"]>\n activeIdentifier?: ReturnType<BabelTypesApi[\"identifier\"]>\n wrapperIdentifier?: ReturnType<BabelTypesApi[\"identifier\"]>\n definitions?: Array<ReturnType<BabelTypesApi[\"variableDeclaration\"]>>\n skipFile?: boolean\n usedRuntime?: boolean\n usedWrapper?: boolean\n}\n\ninterface InstrumentedFunction {\n _bitfabInstrumented?: boolean\n}\n\nfunction propertyName(\n node: BabelTypes.Node | null | undefined,\n types: BabelTypesApi,\n): string | null {\n if (types.isIdentifier(node)) {\n return node.name\n }\n if (types.isStringLiteral(node)) {\n return node.value\n }\n return null\n}\n\nfunction functionName(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): string {\n const node = path.node\n if (types.isFunctionDeclaration(node) || types.isFunctionExpression(node)) {\n if (node.id) {\n return node.id.name\n }\n }\n\n if (\n (types.isClassMethod(node) || types.isObjectMethod(node)) &&\n !node.computed\n ) {\n return propertyName(node.key, types) ?? \"anonymous\"\n }\n\n const parent = path.parentPath?.node\n if (types.isVariableDeclarator(parent)) {\n return propertyName(parent.id, types) ?? \"anonymous\"\n }\n if (types.isObjectProperty(parent) && !parent.computed) {\n return propertyName(parent.key, types) ?? \"anonymous\"\n }\n\n const line = node.loc?.start.line ?? 0\n const column = node.loc?.start.column ?? 0\n return `anonymous-${line}-${column}`\n}\n\nfunction qualifiedFunctionName(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): string {\n const ownName = functionName(path, types)\n const scopes: string[] = []\n let ancestor: NodePath | null = path.parentPath\n while (ancestor) {\n if (ancestor.isFunction()) {\n const name = functionName(\n ancestor as NodePath<BabelTypes.Function>,\n types,\n )\n if (!name.startsWith(\"anonymous-\")) {\n scopes.unshift(name)\n }\n } else if (\n (ancestor.isClassDeclaration() || ancestor.isClassExpression()) &&\n ancestor.node.id\n ) {\n scopes.unshift(ancestor.node.id.name)\n } else if (ancestor.isObjectExpression()) {\n const parent = ancestor.parentPath?.node\n if (types.isVariableDeclarator(parent)) {\n const name = propertyName(parent.id, types)\n if (name) {\n scopes.unshift(name)\n }\n } else if (types.isObjectProperty(parent) && !parent.computed) {\n const name = propertyName(parent.key, types)\n if (name) {\n scopes.unshift(name)\n }\n }\n }\n ancestor = ancestor.parentPath\n }\n return [...scopes, ownName].join(\".\")\n}\n\nfunction isTraceDecoratorRoot(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): boolean {\n const node = path.node\n if (!types.isClassMethod(node) && !types.isClassPrivateMethod(node)) {\n return false\n }\n\n return (\n node.decorators?.some((decorator) => {\n const expression = decorator.expression\n if (!types.isCallExpression(expression)) {\n return false\n }\n const callee = expression.callee\n return (\n types.isMemberExpression(callee) &&\n !callee.computed &&\n types.isIdentifier(callee.property, { name: \"trace\" })\n )\n }) ?? false\n )\n}\n\nfunction isBitfabWrapperArgument(\n path: NodePath,\n types: BabelTypesApi,\n): boolean {\n const parent = path.parentPath?.node\n if (!types.isCallExpression(parent)) {\n return false\n }\n if (!parent.arguments.some((argument) => argument === path.node)) {\n return false\n }\n\n const callee = parent.callee\n return (\n types.isMemberExpression(callee) &&\n !callee.computed &&\n types.isIdentifier(callee.property) &&\n (callee.property.name === \"withTrace\" ||\n callee.property.name === \"withSpan\")\n )\n}\n\nfunction withNodeFunctionName(\n path: NodePath<BabelTypes.CallExpression>,\n types: BabelTypesApi,\n): string | null {\n if (path.node.arguments.length > 2) {\n return null\n }\n const callee = path.node.callee\n if (\n !types.isMemberExpression(callee) ||\n callee.computed ||\n !types.isIdentifier(callee.property, { name: \"withNode\" })\n ) {\n return null\n }\n const fn = path.node.arguments[path.node.arguments.length - 1]\n if (types.isIdentifier(fn)) {\n return fn.name\n }\n if (types.isMemberExpression(fn) && !fn.computed) {\n return propertyName(fn.property, types)\n }\n if (types.isFunctionExpression(fn) && fn.id) {\n return fn.id.name\n }\n return null\n}\n\nfunction functionBindingName(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): string | null {\n if (types.isFunctionDeclaration(path.node) && path.node.id) {\n return path.node.id.name\n }\n\n const parent = path.parentPath?.node\n if (types.isVariableDeclarator(parent) && types.isIdentifier(parent.id)) {\n return parent.id.name\n }\n return null\n}\n\nfunction isBitfabWrappedFunction(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): boolean {\n if (isBitfabWrapperArgument(path, types)) {\n return true\n }\n\n const bindingName = functionBindingName(path, types)\n if (!bindingName) {\n return false\n }\n const binding = path.scope.getBinding(bindingName)\n return (\n binding?.referencePaths.some((referencePath) =>\n isBitfabWrapperArgument(referencePath, types),\n ) ?? false\n )\n}\n\nfunction isBitfabManagedFunction(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): boolean {\n return (\n isTraceDecoratorRoot(path, types) || isBitfabWrappedFunction(path, types)\n )\n}\n\nfunction parameterInputs(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): ReturnType<BabelTypesApi[\"arrayExpression\"]> {\n const elements: Array<BabelTypes.Expression | BabelTypes.SpreadElement> = []\n\n for (const [index, parameter] of (path.node.params ?? []).entries()) {\n if (!types.isArrowFunctionExpression(path.node)) {\n if (types.isRestElement(parameter)) {\n elements.push(\n types.spreadElement(\n types.callExpression(\n types.memberExpression(\n types.arrayExpression([\n types.spreadElement(types.identifier(\"arguments\")),\n ]),\n types.identifier(\"slice\"),\n ),\n [types.numericLiteral(index)],\n ),\n ),\n )\n } else {\n elements.push(\n types.memberExpression(\n types.identifier(\"arguments\"),\n types.numericLiteral(index),\n true,\n ),\n )\n }\n continue\n }\n\n if (types.isIdentifier(parameter)) {\n elements.push(types.identifier(parameter.name))\n } else if (\n types.isRestElement(parameter) &&\n types.isIdentifier(parameter.argument)\n ) {\n elements.push(\n types.spreadElement(types.identifier(parameter.argument.name)),\n )\n }\n }\n\n return types.arrayExpression(elements)\n}\n\nfunction needsArgumentWrapper(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): boolean {\n return (\n types.isArrowFunctionExpression(path.node) &&\n path.node.params.some(\n (parameter) =>\n !types.isIdentifier(parameter) &&\n !(\n types.isRestElement(parameter) &&\n types.isIdentifier(parameter.argument)\n ),\n )\n )\n}\n\nfunction isRestWrapper(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): boolean {\n return (\n path.node.params.length === 1 && types.isRestElement(path.node.params[0])\n )\n}\n\n/**\n * Babel adapter for Bitfab's experimental automatic call-span runtime.\n *\n * @experimental The transform protocol and generated function identities may\n * change before the feature is stable.\n */\nexport default function bitfabBabelPlugin(api: {\n types: BabelTypesApi\n}): PluginObj<BitfabPluginState> {\n const { types } = api\n\n return {\n name: \"bitfab-auto-trace\",\n visitor: {\n Program: {\n enter(path: NodePath<BabelTypes.Program>, state: BitfabPluginState) {\n const filename = state.file.opts.filename ?? \"unknown\"\n state.skipFile =\n !shouldTransformBitfabFile(filename, state.opts) ||\n path.scope.hasBinding(AUTO_TRACE_TRANSFORM_MARKER) ||\n path.node.directives.some(\n (directive) => directive.value.value === \"use client\",\n )\n state.runtimeIdentifier =\n path.scope.generateUidIdentifier(\"bitfabAutoSpan\")\n state.activeIdentifier = path.scope.generateUidIdentifier(\n \"bitfabAutoTraceActive\",\n )\n state.wrapperIdentifier =\n path.scope.generateUidIdentifier(\"bitfabAutoWrap\")\n state.definitions = []\n state.usedRuntime = false\n state.usedWrapper = false\n },\n exit(path: NodePath<BabelTypes.Program>, state: BitfabPluginState) {\n if (\n state.skipFile ||\n !state.usedRuntime ||\n !state.runtimeIdentifier ||\n !state.activeIdentifier ||\n !state.wrapperIdentifier\n ) {\n return\n }\n\n path.unshiftContainer(\"body\", [\n types.importDeclaration(\n [\n types.importSpecifier(\n state.runtimeIdentifier,\n types.identifier(\"__bitfabAutoSpan\"),\n ),\n types.importSpecifier(\n state.activeIdentifier,\n types.identifier(\"__bitfabAutoTraceActive\"),\n ),\n ...(state.usedWrapper\n ? [\n types.importSpecifier(\n state.wrapperIdentifier,\n types.identifier(\"__bitfabAutoWrap\"),\n ),\n ]\n : []),\n ],\n types.stringLiteral(\n state.opts.runtimeModule ?? \"@bitfab/sdk/auto\",\n ),\n ),\n types.variableDeclaration(\"const\", [\n types.variableDeclarator(\n types.identifier(AUTO_TRACE_TRANSFORM_MARKER),\n types.assignmentExpression(\n \"=\",\n types.memberExpression(\n types.identifier(\"globalThis\"),\n types.identifier(AUTO_TRACE_TRANSFORM_MARKER),\n ),\n types.booleanLiteral(true),\n ),\n ),\n ]),\n ...(state.definitions ?? []),\n ])\n },\n },\n CallExpression: {\n exit(\n path: NodePath<BabelTypes.CallExpression>,\n state: BitfabPluginState,\n ) {\n if (state.skipFile) {\n return\n }\n const configuredName = withNodeFunctionName(path, types)\n if (configuredName === null) {\n return\n }\n if (path.node.arguments.length === 1) {\n path.node.arguments.push(types.identifier(\"undefined\"))\n }\n path.node.arguments.push(types.stringLiteral(configuredName))\n },\n },\n Function: {\n exit(path: NodePath<BabelTypes.Function>, state: BitfabPluginState) {\n const node = path.node as typeof path.node & InstrumentedFunction\n if (\n state.skipFile ||\n node._bitfabInstrumented ||\n node.generator ||\n isBitfabManagedFunction(path, types) ||\n !state.runtimeIdentifier ||\n !state.activeIdentifier ||\n !state.wrapperIdentifier\n ) {\n return\n }\n if (\n ((types.isClassMethod(node) || types.isObjectMethod(node)) &&\n node.kind !== \"method\") ||\n types.isClassPrivateMethod(node)\n ) {\n return\n }\n\n const name = qualifiedFunctionName(path, types)\n if (name.startsWith(\"anonymous-\")) {\n return\n }\n const filename = state.file.opts.filename ?? \"unknown\"\n const cwd = state.opts.cwd ?? state.file.opts.cwd ?? process.cwd()\n const normalizedFilename = filename\n .replace(`${cwd}/`, \"\")\n .replace(/\\\\/g, \"/\")\n const line = node.loc?.start.line ?? 0\n const column = node.loc?.start.column ?? 0\n const definition = types.objectExpression([\n types.objectProperty(\n types.identifier(\"id\"),\n types.stringLiteral(\n autoTraceFunctionId(normalizedFilename, name),\n ),\n ),\n types.objectProperty(\n types.identifier(\"name\"),\n types.stringLiteral(name),\n ),\n types.objectProperty(\n types.identifier(\"file\"),\n types.stringLiteral(normalizedFilename),\n ),\n types.objectProperty(\n types.identifier(\"line\"),\n types.numericLiteral(line),\n ),\n types.objectProperty(\n types.identifier(\"column\"),\n types.numericLiteral(column),\n ),\n ...(node.async\n ? [\n types.objectProperty(\n types.identifier(\"async\"),\n types.booleanLiteral(true),\n ),\n ]\n : []),\n ...(isRestWrapper(path, types)\n ? [\n types.objectProperty(\n types.identifier(\"wrapper\"),\n types.booleanLiteral(true),\n ),\n ]\n : []),\n ])\n const definitionIdentifier = path.scope\n .getProgramParent()\n .generateUidIdentifier(\"bitfabAutoDefinition\")\n state.definitions?.push(\n types.variableDeclaration(\"const\", [\n types.variableDeclarator(definitionIdentifier, definition),\n ]),\n )\n\n if (needsArgumentWrapper(path, types)) {\n const original = types.cloneNode(\n node,\n true,\n ) as BabelTypes.ArrowFunctionExpression & InstrumentedFunction\n original._bitfabInstrumented = true\n path.replaceWith(\n types.callExpression(state.wrapperIdentifier, [\n definitionIdentifier,\n original,\n ]),\n )\n state.usedRuntime = true\n state.usedWrapper = true\n return\n }\n\n const originalBody = types.isBlockStatement(node.body)\n ? node.body\n : types.blockStatement([types.returnStatement(node.body)])\n const directives = originalBody.directives\n originalBody.directives = []\n\n const body = types.blockStatement(\n [\n types.ifStatement(\n types.callExpression(state.activeIdentifier, []),\n types.blockStatement([\n types.returnStatement(\n types.callExpression(state.runtimeIdentifier, [\n definitionIdentifier,\n parameterInputs(path, types),\n types.arrowFunctionExpression(\n [],\n types.cloneNode(originalBody, true),\n node.async ?? false,\n ),\n ]),\n ),\n ]),\n ),\n ...originalBody.body,\n ],\n directives,\n )\n node.body = body\n node._bitfabInstrumented = true\n state.usedRuntime = true\n },\n },\n },\n }\n}\n","export interface BitfabTransformOptions {\n /** Module that exports the automatic span runtime. */\n runtimeModule?: string\n /** Working directory removed from generated function IDs. */\n cwd?: string\n /** Return false to leave a file unchanged. */\n include?: (filename: string) => boolean\n}\n\nconst AUTO_TRACE_FUNCTION_ID_VERSION = \"ts-auto-v1\"\nexport const AUTO_TRACE_TRANSFORM_MARKER =\n \"__bitfab_auto_trace_transformed_v1__\"\n\nexport function autoTraceFunctionId(file: string, name: string): string {\n return `${AUTO_TRACE_FUNCTION_ID_VERSION}:${file}#${name}`\n}\n\nexport function shouldTransformBitfabFile(\n filename: string,\n options: BitfabTransformOptions,\n): boolean {\n if (!filename) {\n return false\n }\n if (options.include && !options.include(filename)) {\n return false\n }\n\n const normalized = filename.replace(/\\\\/g, \"/\").split(/[?#]/, 1)[0] ?? \"\"\n const normalizedCwd = options.cwd?.replace(/\\\\/g, \"/\").replace(/\\/$/, \"\")\n const isAbsolute =\n normalized.startsWith(\"/\") || /^[A-Za-z]:\\//.test(normalized)\n if (\n normalizedCwd &&\n isAbsolute &&\n normalized !== normalizedCwd &&\n !normalized.startsWith(`${normalizedCwd}/`)\n ) {\n return false\n }\n return (\n !normalized.includes(\"/node_modules/\") &&\n !normalized.endsWith(\".d.ts\") &&\n /\\.[cm]?[jt]sx?$/.test(normalized)\n )\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../bitfab-typescript-transform/src/babelPlugin.ts","../../../bitfab-typescript-transform/src/transformOptions.ts"],"sourcesContent":["import type { NodePath, PluginObject, PluginPass } from \"@babel/core\"\nimport type * as BabelTypes from \"@babel/types\"\nimport type { BitfabTransformOptions } from \"./transformOptions.js\"\nimport {\n AUTO_TRACE_TRANSFORM_MARKER,\n autoTraceFilename,\n autoTraceFunctionId,\n shouldTransformBitfabFile,\n} from \"./transformOptions.js\"\n\ntype BabelTypesApi = typeof BabelTypes\n\ntype BitfabPluginOptions = BitfabTransformOptions\n\ninterface BitfabPluginState extends PluginPass {\n opts: BitfabPluginOptions\n runtimeIdentifier?: ReturnType<BabelTypesApi[\"identifier\"]>\n activeIdentifier?: ReturnType<BabelTypesApi[\"identifier\"]>\n wrapperIdentifier?: ReturnType<BabelTypesApi[\"identifier\"]>\n definitions?: Array<ReturnType<BabelTypesApi[\"variableDeclaration\"]>>\n skipFile?: boolean\n usedRuntime?: boolean\n usedWrapper?: boolean\n}\n\ninterface InstrumentedFunction {\n _bitfabInstrumented?: boolean\n}\n\nfunction propertyName(\n node: BabelTypes.Node | null | undefined,\n types: BabelTypesApi,\n): string | null {\n if (types.isIdentifier(node)) {\n return node.name\n }\n if (types.isStringLiteral(node)) {\n return node.value\n }\n return null\n}\n\nfunction functionName(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): string {\n const node = path.node\n if (types.isFunctionDeclaration(node) || types.isFunctionExpression(node)) {\n if (node.id) {\n return node.id.name\n }\n }\n\n if (\n (types.isClassMethod(node) || types.isObjectMethod(node)) &&\n !node.computed &&\n types.isIdentifier(node.key)\n ) {\n return node.key.name\n }\n\n const parent = path.parentPath?.node\n if (types.isVariableDeclarator(parent)) {\n return propertyName(parent.id, types) ?? \"anonymous\"\n }\n if (types.isObjectProperty(parent) && !parent.computed) {\n return propertyName(parent.key, types) ?? \"anonymous\"\n }\n\n const { line, column } = sourcePosition(path)\n return `anonymous-${line}-${column}`\n}\n\nfunction isInstrumentableFunction(\n node: BabelTypes.Function,\n types: BabelTypesApi,\n): boolean {\n if (node.generator || types.isClassPrivateMethod(node)) {\n return false\n }\n return (\n !(types.isClassMethod(node) || types.isObjectMethod(node)) ||\n node.kind === \"method\"\n )\n}\n\nfunction sourcePosition(path: NodePath<BabelTypes.Function>): {\n line: number\n column: number\n} {\n const exportDeclaration = path.parentPath?.isExportDeclaration()\n ? path.parentPath.node\n : undefined\n const start = (exportDeclaration ?? path.node).loc?.start\n return { line: start?.line ?? 0, column: start?.column ?? 0 }\n}\n\nfunction qualifiedFunctionName(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): string {\n const ownName = functionName(path, types)\n if (ownName.startsWith(\"anonymous-\")) {\n return ownName\n }\n const scopes: string[] = []\n let ancestor: NodePath | null = path.parentPath\n while (ancestor) {\n if (ancestor.isFunction()) {\n if (!isInstrumentableFunction(ancestor.node, types)) {\n ancestor = ancestor.parentPath\n continue\n }\n const name = functionName(\n ancestor as NodePath<BabelTypes.Function>,\n types,\n )\n if (!name.startsWith(\"anonymous-\")) {\n scopes.unshift(name)\n }\n } else if (\n (ancestor.isClassDeclaration() || ancestor.isClassExpression()) &&\n ancestor.node.id\n ) {\n scopes.unshift(ancestor.node.id.name)\n } else if (ancestor.isObjectExpression()) {\n const parent = ancestor.parentPath?.node\n if (types.isVariableDeclarator(parent)) {\n const name = propertyName(parent.id, types)\n if (name) {\n scopes.unshift(name)\n }\n } else if (types.isObjectProperty(parent) && !parent.computed) {\n const name = propertyName(parent.key, types)\n if (name) {\n scopes.unshift(name)\n }\n }\n }\n ancestor = ancestor.parentPath\n }\n return [...scopes, ownName].join(\".\")\n}\n\nfunction isTraceDecoratorRoot(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): boolean {\n const node = path.node\n if (!types.isClassMethod(node) && !types.isClassPrivateMethod(node)) {\n return false\n }\n\n return (\n node.decorators?.some((decorator) => {\n const expression = decorator.expression\n if (!types.isCallExpression(expression)) {\n return false\n }\n const callee = expression.callee\n return (\n types.isMemberExpression(callee) &&\n !callee.computed &&\n types.isIdentifier(callee.property, { name: \"trace\" })\n )\n }) ?? false\n )\n}\n\nfunction isBitfabWrapperArgument(\n path: NodePath,\n types: BabelTypesApi,\n): boolean {\n const parent = path.parentPath?.node\n if (!types.isCallExpression(parent)) {\n return false\n }\n if (!parent.arguments.some((argument) => argument === path.node)) {\n return false\n }\n\n const callee = parent.callee\n return (\n types.isMemberExpression(callee) &&\n !callee.computed &&\n types.isIdentifier(callee.property) &&\n (callee.property.name === \"withTrace\" ||\n callee.property.name === \"withSpan\")\n )\n}\n\nfunction withNodeFunctionName(\n path: NodePath<BabelTypes.CallExpression>,\n types: BabelTypesApi,\n): string | null {\n if (path.node.arguments.length > 2) {\n return null\n }\n const callee = path.node.callee\n if (\n !types.isMemberExpression(callee) ||\n callee.computed ||\n !types.isIdentifier(callee.property, { name: \"withNode\" })\n ) {\n return null\n }\n const fn = path.node.arguments[path.node.arguments.length - 1]\n if (types.isIdentifier(fn)) {\n return fn.name\n }\n if (types.isMemberExpression(fn) && !fn.computed) {\n return propertyName(fn.property, types)\n }\n if (types.isFunctionExpression(fn) && fn.id) {\n return fn.id.name\n }\n return null\n}\n\nfunction functionBindingName(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): string | null {\n if (types.isFunctionDeclaration(path.node) && path.node.id) {\n return path.node.id.name\n }\n\n const parent = path.parentPath?.node\n if (types.isVariableDeclarator(parent) && types.isIdentifier(parent.id)) {\n return parent.id.name\n }\n return null\n}\n\nfunction isBitfabWrappedFunction(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): boolean {\n if (isBitfabWrapperArgument(path, types)) {\n return true\n }\n\n const bindingName = functionBindingName(path, types)\n if (!bindingName) {\n return false\n }\n const binding = path.scope.getBinding(bindingName)\n return (\n binding?.referencePaths.some((referencePath) =>\n isBitfabWrapperArgument(referencePath, types),\n ) ?? false\n )\n}\n\nfunction isBitfabManagedFunction(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): boolean {\n return (\n isTraceDecoratorRoot(path, types) || isBitfabWrappedFunction(path, types)\n )\n}\n\nfunction runtimeParameters(\n node: BabelTypes.Function,\n types: BabelTypesApi,\n): BabelTypes.Function[\"params\"] {\n return node.params.filter(\n (parameter) => !types.isIdentifier(parameter, { name: \"this\" }),\n )\n}\n\nfunction parameterInputs(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): ReturnType<BabelTypesApi[\"arrayExpression\"]> {\n const elements: Array<BabelTypes.Expression | BabelTypes.SpreadElement> = []\n\n for (const [index, parameter] of runtimeParameters(\n path.node,\n types,\n ).entries()) {\n if (!types.isArrowFunctionExpression(path.node)) {\n if (types.isRestElement(parameter)) {\n elements.push(\n types.spreadElement(\n types.callExpression(\n types.memberExpression(\n types.arrayExpression([\n types.spreadElement(types.identifier(\"arguments\")),\n ]),\n types.identifier(\"slice\"),\n ),\n [types.numericLiteral(index)],\n ),\n ),\n )\n } else {\n elements.push(\n types.memberExpression(\n types.identifier(\"arguments\"),\n types.numericLiteral(index),\n true,\n ),\n )\n }\n continue\n }\n\n if (types.isIdentifier(parameter)) {\n elements.push(types.identifier(parameter.name))\n } else if (\n types.isRestElement(parameter) &&\n types.isIdentifier(parameter.argument)\n ) {\n elements.push(\n types.spreadElement(types.identifier(parameter.argument.name)),\n )\n }\n }\n\n return types.arrayExpression(elements)\n}\n\nfunction needsArgumentWrapper(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): boolean {\n return (\n types.isArrowFunctionExpression(path.node) &&\n path.node.params.some(\n (parameter) =>\n !types.isIdentifier(parameter) &&\n !(\n types.isRestElement(parameter) &&\n types.isIdentifier(parameter.argument)\n ),\n )\n )\n}\n\nfunction isRestWrapper(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): boolean {\n const parameters = runtimeParameters(path.node, types)\n return parameters.length === 1 && types.isRestElement(parameters[0])\n}\n\n/**\n * Babel adapter for Bitfab's experimental automatic call-span runtime.\n *\n * @experimental The transform protocol and generated function identities may\n * change before the feature is stable.\n */\nexport default function bitfabBabelPlugin(api: {\n types: BabelTypesApi\n}): PluginObject<BitfabPluginState> {\n const { types } = api\n\n return {\n name: \"bitfab-auto-trace\",\n visitor: {\n Program: {\n enter(path: NodePath<BabelTypes.Program>, state: BitfabPluginState) {\n const filename = state.file.opts.filename ?? \"unknown\"\n state.skipFile =\n !shouldTransformBitfabFile(filename, state.opts) ||\n path.scope.hasBinding(AUTO_TRACE_TRANSFORM_MARKER) ||\n path.node.directives.some(\n (directive) => directive.value.value === \"use client\",\n )\n state.runtimeIdentifier =\n path.scope.generateUidIdentifier(\"bitfabAutoSpan\")\n state.activeIdentifier = path.scope.generateUidIdentifier(\n \"bitfabAutoTraceActive\",\n )\n state.wrapperIdentifier =\n path.scope.generateUidIdentifier(\"bitfabAutoWrap\")\n state.definitions = []\n state.usedRuntime = false\n state.usedWrapper = false\n },\n exit(path: NodePath<BabelTypes.Program>, state: BitfabPluginState) {\n if (\n state.skipFile ||\n !state.usedRuntime ||\n !state.runtimeIdentifier ||\n !state.activeIdentifier ||\n !state.wrapperIdentifier\n ) {\n return\n }\n\n state.file.metadata[AUTO_TRACE_TRANSFORM_MARKER] = true\n path.unshiftContainer(\"body\", [\n types.importDeclaration(\n [\n types.importSpecifier(\n state.runtimeIdentifier,\n types.identifier(\"__bitfabAutoSpan\"),\n ),\n types.importSpecifier(\n state.activeIdentifier,\n types.identifier(\"__bitfabAutoTraceActive\"),\n ),\n ...(state.usedWrapper\n ? [\n types.importSpecifier(\n state.wrapperIdentifier,\n types.identifier(\"__bitfabAutoWrap\"),\n ),\n ]\n : []),\n ],\n types.stringLiteral(\n state.opts.runtimeModule ?? \"@bitfab/sdk/auto\",\n ),\n ),\n types.variableDeclaration(\"const\", [\n types.variableDeclarator(\n types.identifier(AUTO_TRACE_TRANSFORM_MARKER),\n types.assignmentExpression(\n \"=\",\n types.memberExpression(\n types.identifier(\"globalThis\"),\n types.identifier(AUTO_TRACE_TRANSFORM_MARKER),\n ),\n types.booleanLiteral(true),\n ),\n ),\n ]),\n ...(state.definitions ?? []),\n ])\n },\n },\n CallExpression: {\n exit(\n path: NodePath<BabelTypes.CallExpression>,\n state: BitfabPluginState,\n ) {\n if (state.skipFile) {\n return\n }\n const configuredName = withNodeFunctionName(path, types)\n if (configuredName === null) {\n return\n }\n if (path.node.arguments.length === 1) {\n path.node.arguments.push(types.identifier(\"undefined\"))\n }\n path.node.arguments.push(types.stringLiteral(configuredName))\n },\n },\n Function: {\n exit(path: NodePath<BabelTypes.Function>, state: BitfabPluginState) {\n const node = path.node as typeof path.node & InstrumentedFunction\n if (\n state.skipFile ||\n node._bitfabInstrumented ||\n !isInstrumentableFunction(node, types) ||\n isBitfabManagedFunction(path, types) ||\n !state.runtimeIdentifier ||\n !state.activeIdentifier ||\n !state.wrapperIdentifier\n ) {\n return\n }\n const name = qualifiedFunctionName(path, types)\n if (name.startsWith(\"anonymous-\")) {\n return\n }\n const normalizedFilename = autoTraceFilename(\n state.file.opts.filename ?? \"unknown\",\n state.opts.cwd ?? state.file.opts.cwd ?? process.cwd(),\n )\n const { line, column } = sourcePosition(path)\n const definition = types.objectExpression([\n types.objectProperty(\n types.identifier(\"id\"),\n types.stringLiteral(\n autoTraceFunctionId(normalizedFilename, name),\n ),\n ),\n types.objectProperty(\n types.identifier(\"name\"),\n types.stringLiteral(name),\n ),\n types.objectProperty(\n types.identifier(\"file\"),\n types.stringLiteral(normalizedFilename),\n ),\n types.objectProperty(\n types.identifier(\"line\"),\n types.numericLiteral(line),\n ),\n types.objectProperty(\n types.identifier(\"column\"),\n types.numericLiteral(column),\n ),\n ...(node.async\n ? [\n types.objectProperty(\n types.identifier(\"async\"),\n types.booleanLiteral(true),\n ),\n ]\n : []),\n ...(isRestWrapper(path, types)\n ? [\n types.objectProperty(\n types.identifier(\"wrapper\"),\n types.booleanLiteral(true),\n ),\n ]\n : []),\n ])\n const definitionIdentifier = path.scope\n .getProgramParent()\n .generateUidIdentifier(\"bitfabAutoDefinition\")\n state.definitions?.push(\n types.variableDeclaration(\"const\", [\n types.variableDeclarator(definitionIdentifier, definition),\n ]),\n )\n\n if (needsArgumentWrapper(path, types)) {\n node._bitfabInstrumented = true\n path.replaceWith(\n types.callExpression(types.cloneNode(state.wrapperIdentifier), [\n types.cloneNode(definitionIdentifier),\n node as BabelTypes.ArrowFunctionExpression,\n ]),\n )\n state.usedRuntime = true\n state.usedWrapper = true\n return\n }\n\n const originalBody = types.isBlockStatement(node.body)\n ? node.body\n : types.blockStatement([types.returnStatement(node.body)])\n const directives = originalBody.directives\n originalBody.directives = []\n\n const body = types.blockStatement(\n [\n types.ifStatement(\n types.callExpression(\n types.cloneNode(state.activeIdentifier),\n [],\n ),\n types.blockStatement([\n types.returnStatement(\n types.callExpression(\n types.cloneNode(state.runtimeIdentifier),\n [\n types.cloneNode(definitionIdentifier),\n parameterInputs(path, types),\n types.arrowFunctionExpression(\n [],\n types.cloneNode(originalBody, true),\n node.async ?? false,\n ),\n ],\n ),\n ),\n ]),\n ),\n ...originalBody.body,\n ],\n directives,\n )\n node.body = body\n node._bitfabInstrumented = true\n state.usedRuntime = true\n },\n },\n },\n }\n}\n","export interface BitfabTransformOptions {\n /** Module that exports the automatic span runtime. */\n runtimeModule?: string\n /** Working directory removed from generated function IDs. */\n cwd?: string\n /** Return false to leave a file unchanged. */\n include?: (filename: string) => boolean\n}\n\nconst AUTO_TRACE_FUNCTION_ID_VERSION = \"ts-auto-v1\"\nexport const AUTO_TRACE_TRANSFORM_MARKER =\n \"__bitfab_auto_trace_transformed_v1__\"\n\nexport function autoTraceFunctionId(file: string, name: string): string {\n return `${AUTO_TRACE_FUNCTION_ID_VERSION}:${file}#${name}`\n}\n\nexport function sourceFilename(filename: string): string {\n return filename.replace(/\\\\/g, \"/\").split(/[?#]/, 1)[0] ?? \"\"\n}\n\nexport function autoTraceFilename(filename: string, cwd: string): string {\n const normalized = sourceFilename(filename)\n const normalizedCwd = cwd.replace(/\\\\/g, \"/\").replace(/\\/$/, \"\")\n return normalized.startsWith(`${normalizedCwd}/`)\n ? normalized.slice(normalizedCwd.length + 1)\n : normalized\n}\n\nexport function shouldTransformBitfabFile(\n filename: string,\n options: BitfabTransformOptions,\n): boolean {\n if (!filename) {\n return false\n }\n if (options.include && !options.include(filename)) {\n return false\n }\n\n const normalized = sourceFilename(filename)\n const normalizedCwd = options.cwd?.replace(/\\\\/g, \"/\").replace(/\\/$/, \"\")\n const isAbsolute =\n normalized.startsWith(\"/\") || /^[A-Za-z]:\\//.test(normalized)\n if (\n normalizedCwd &&\n isAbsolute &&\n normalized !== normalizedCwd &&\n !normalized.startsWith(`${normalizedCwd}/`)\n ) {\n return false\n }\n return (\n !normalized.includes(\"/node_modules/\") &&\n !normalized.endsWith(\".d.ts\") &&\n /\\.[cm]?[jt]sx?$/.test(normalized)\n )\n}\n"],"mappings":"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","names":[]}
@@ -1,4 +1,4 @@
1
- import { PluginObj, PluginPass } from '@babel/core';
1
+ import { PluginObject, PluginPass } from '@babel/core';
2
2
  import * as BabelTypes from '@babel/types';
3
3
  import { B as BitfabTransformOptions } from '../transformOptions-Df2_Chtc.cjs';
4
4
 
@@ -22,6 +22,6 @@ interface BitfabPluginState extends PluginPass {
22
22
  */
23
23
  declare function bitfabBabelPlugin(api: {
24
24
  types: BabelTypesApi;
25
- }): PluginObj<BitfabPluginState>;
25
+ }): PluginObject<BitfabPluginState>;
26
26
 
27
27
  export { bitfabBabelPlugin as default };
@@ -1,4 +1,4 @@
1
- import { PluginObj, PluginPass } from '@babel/core';
1
+ import { PluginObject, PluginPass } from '@babel/core';
2
2
  import * as BabelTypes from '@babel/types';
3
3
  import { B as BitfabTransformOptions } from '../transformOptions-Df2_Chtc.js';
4
4
 
@@ -22,6 +22,6 @@ interface BitfabPluginState extends PluginPass {
22
22
  */
23
23
  declare function bitfabBabelPlugin(api: {
24
24
  types: BabelTypesApi;
25
- }): PluginObj<BitfabPluginState>;
25
+ }): PluginObject<BitfabPluginState>;
26
26
 
27
27
  export { bitfabBabelPlugin as default };