bitfab 0.66.0 → 0.68.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/dist/{autoTrace-CQw0qMBt.cjs → autoTrace-BikML0lX.cjs} +86 -4
  2. package/dist/autoTrace-BikML0lX.cjs.map +1 -0
  3. package/dist/{autoTrace-O40k8f5M.js → autoTrace-CVt9EDyo.js} +75 -5
  4. package/dist/autoTrace-CVt9EDyo.js.map +1 -0
  5. package/dist/autoTrace.cjs +3 -1
  6. package/dist/autoTrace.d.cts +23 -0
  7. package/dist/autoTrace.d.ts +23 -0
  8. package/dist/autoTrace.js +1 -1
  9. package/dist/{babelPlugin-C70OxrqA.js → babelPlugin-a7ofCoOd.js} +83 -4
  10. package/dist/babelPlugin-a7ofCoOd.js.map +1 -0
  11. package/dist/{babelPlugin-Nta4-VcL.cjs → babelPlugin-s8EFjT6e.cjs} +83 -4
  12. package/dist/babelPlugin-s8EFjT6e.cjs.map +1 -0
  13. package/dist/{http-D91qP2J-.js → http-_cgR_DM2.js} +3 -3
  14. package/dist/{http-D91qP2J-.js.map → http-_cgR_DM2.js.map} +1 -1
  15. package/dist/{http-DIz8mEMq.cjs → http-psFF1ptn.cjs} +3 -3
  16. package/dist/{http-DIz8mEMq.cjs.map → http-psFF1ptn.cjs.map} +1 -1
  17. package/dist/{index-DiYFr-KV.d.cts → index-j7SrvOqe.d.cts} +44 -2
  18. package/dist/{index-DiYFr-KV.d.ts → index-j7SrvOqe.d.ts} +44 -2
  19. package/dist/index.cjs +2 -2
  20. package/dist/index.d.cts +2 -2
  21. package/dist/index.d.ts +2 -2
  22. package/dist/index.js +2 -2
  23. package/dist/node.cjs +3 -3
  24. package/dist/node.d.cts +2 -2
  25. package/dist/node.d.ts +2 -2
  26. package/dist/node.js +3 -3
  27. package/dist/registryCommand-Dk4Y1ZgW.js.map +1 -1
  28. package/dist/{src-CL5eQlNk.js → src-DyEKM7yn.js} +178 -14
  29. package/dist/src-DyEKM7yn.js.map +1 -0
  30. package/dist/{src-rJcHXJEz.cjs → src-Dze8o7iU.cjs} +178 -14
  31. package/dist/src-Dze8o7iU.cjs.map +1 -0
  32. package/dist/transform/babel.cjs +1 -1
  33. package/dist/transform/babel.d.cts +3 -0
  34. package/dist/transform/babel.d.ts +3 -0
  35. package/dist/transform/babel.js +1 -1
  36. package/dist/transform/loaderRuntime.cjs +2 -2
  37. package/dist/transform/loaderRuntime.js +2 -2
  38. package/dist/transform/nodeLoader.js +82 -3
  39. package/dist/transform/nodeLoader.js.map +1 -1
  40. package/dist/transform/swc.cjs +1 -1
  41. package/dist/transform/swc.js +1 -1
  42. package/dist/transform/unplugin.cjs +2 -2
  43. package/dist/transform/unplugin.js +2 -2
  44. package/dist/{transform-BjxHGGKc.cjs → transform-BBzrqpVH.cjs} +2 -2
  45. package/dist/{transform-BjxHGGKc.cjs.map → transform-BBzrqpVH.cjs.map} +1 -1
  46. package/dist/{transform-BcyUocwm.js → transform-DkcFn_tg.js} +2 -2
  47. package/dist/{transform-BcyUocwm.js.map → transform-DkcFn_tg.js.map} +1 -1
  48. package/package.json +2 -1
  49. package/dist/autoTrace-CQw0qMBt.cjs.map +0 -1
  50. package/dist/autoTrace-O40k8f5M.js.map +0 -1
  51. package/dist/babelPlugin-C70OxrqA.js.map +0 -1
  52. package/dist/babelPlugin-Nta4-VcL.cjs.map +0 -1
  53. package/dist/src-CL5eQlNk.js.map +0 -1
  54. package/dist/src-rJcHXJEz.cjs.map +0 -1
@@ -2,5 +2,5 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_babelPlugin = require("../babelPlugin-Nta4-VcL.cjs");
5
+ const require_babelPlugin = require("../babelPlugin-s8EFjT6e.cjs");
6
6
  exports.default = require_babelPlugin.bitfabBabelPlugin;
@@ -9,10 +9,13 @@ interface BitfabPluginState extends PluginPass {
9
9
  runtimeIdentifier?: ReturnType<BabelTypesApi["identifier"]>;
10
10
  activeIdentifier?: ReturnType<BabelTypesApi["identifier"]>;
11
11
  wrapperIdentifier?: ReturnType<BabelTypesApi["identifier"]>;
12
+ jevIdentifier?: ReturnType<BabelTypesApi["identifier"]>;
12
13
  definitions?: Array<ReturnType<BabelTypesApi["variableDeclaration"]>>;
13
14
  skipFile?: boolean;
15
+ bamlGenerated?: boolean;
14
16
  usedRuntime?: boolean;
15
17
  usedWrapper?: boolean;
18
+ usedJev?: boolean;
16
19
  }
17
20
  /**
18
21
  * Babel adapter for Bitfab's experimental automatic call-span runtime.
@@ -9,10 +9,13 @@ interface BitfabPluginState extends PluginPass {
9
9
  runtimeIdentifier?: ReturnType<BabelTypesApi["identifier"]>;
10
10
  activeIdentifier?: ReturnType<BabelTypesApi["identifier"]>;
11
11
  wrapperIdentifier?: ReturnType<BabelTypesApi["identifier"]>;
12
+ jevIdentifier?: ReturnType<BabelTypesApi["identifier"]>;
12
13
  definitions?: Array<ReturnType<BabelTypesApi["variableDeclaration"]>>;
13
14
  skipFile?: boolean;
15
+ bamlGenerated?: boolean;
14
16
  usedRuntime?: boolean;
15
17
  usedWrapper?: boolean;
18
+ usedJev?: boolean;
16
19
  }
17
20
  /**
18
21
  * Babel adapter for Bitfab's experimental automatic call-span runtime.
@@ -1 +1 @@
1
- export { t as default } from "../babelPlugin-C70OxrqA.js";
1
+ export { t as default } from "../babelPlugin-a7ofCoOd.js";
@@ -24,8 +24,8 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
24
24
  enumerable: true
25
25
  }) : target, mod));
26
26
  //#endregion
27
- const require_babelPlugin = require("../babelPlugin-Nta4-VcL.cjs");
28
- const require_transform = require("../transform-BjxHGGKc.cjs");
27
+ const require_babelPlugin = require("../babelPlugin-s8EFjT6e.cjs");
28
+ const require_transform = require("../transform-BBzrqpVH.cjs");
29
29
  let _babel_core = require("@babel/core");
30
30
  let path = require("path");
31
31
  let _babel_plugin_proposal_decorators = require("@babel/plugin-proposal-decorators");
@@ -1,5 +1,5 @@
1
- import { i as sourceFilename, r as shouldTransformBitfabFile, t as bitfabBabelPlugin } from "../babelPlugin-C70OxrqA.js";
2
- import { t as parserPlugins } from "../transform-BcyUocwm.js";
1
+ import { i as sourceFilename, r as shouldTransformBitfabFile, t as bitfabBabelPlugin } from "../babelPlugin-a7ofCoOd.js";
2
+ import { t as parserPlugins } from "../transform-DkcFn_tg.js";
3
3
  import { transformFromAstSync, transformSync } from "@babel/core";
4
4
  import { dirname } from "path";
5
5
  import decoratorsPlugin from "@babel/plugin-proposal-decorators";
@@ -54,6 +54,11 @@ function functionName(path, types) {
54
54
  const { line, column } = sourcePosition(path);
55
55
  return `anonymous-${line}-${column}`;
56
56
  }
57
+ const JEV_METHOD = "systemOne";
58
+ function isJevMethodDefinition(path, types) {
59
+ const parent = path.parentPath?.node;
60
+ return (types.isClassMethod(path.node) || types.isObjectMethod(path.node) || types.isObjectProperty(parent) || types.isClassProperty(parent)) && functionName(path, types) === JEV_METHOD;
61
+ }
57
62
  function isInstrumentableFunction(node, types) {
58
63
  if (node.generator || types.isClassPrivateMethod(node)) return false;
59
64
  return !(types.isClassMethod(node) || types.isObjectMethod(node)) || node.kind === "method";
@@ -115,6 +120,24 @@ function withNodeFunctionName(path, types) {
115
120
  if (types.isFunctionExpression(fn) && fn.id) return fn.id.name;
116
121
  return null;
117
122
  }
123
+ const BAML_GENERATED_HEADER = "This file was generated by BAML";
124
+ const BAML_CLIENT_CLASSES = /* @__PURE__ */ new Set(["BamlAsyncClient", "BamlSyncClient"]);
125
+ const BAML_OPTIONS_PARAMETER = "__baml_options__";
126
+ function isBamlGeneratedSource(code) {
127
+ return code.slice(0, 4096).includes(BAML_GENERATED_HEADER);
128
+ }
129
+ function isBamlClientMethod(path, types) {
130
+ const node = path.node;
131
+ if (!types.isClassMethod(node) || node.kind !== "method" || node.static) return false;
132
+ const classPath = path.parentPath?.parentPath;
133
+ if (!classPath || !(classPath.isClassDeclaration() || classPath.isClassExpression()) || !classPath.node.id || !BAML_CLIENT_CLASSES.has(classPath.node.id.name)) return false;
134
+ const parameters = runtimeParameters(node, types);
135
+ const last = parameters[parameters.length - 1];
136
+ return types.isIdentifier(last, { name: BAML_OPTIONS_PARAMETER });
137
+ }
138
+ function bamlOptionsDeclaration(callerOptions, withCollector, types) {
139
+ return types.variableDeclaration("const", [types.variableDeclarator(types.identifier(BAML_OPTIONS_PARAMETER), types.conditionalExpression(types.binaryExpression("===", types.cloneNode(withCollector), types.identifier("undefined")), types.cloneNode(callerOptions), types.callExpression(types.cloneNode(withCollector), [types.cloneNode(callerOptions), types.memberExpression(types.thisExpression(), types.identifier("bamlOptions"))])))]);
140
+ }
118
141
  function runtimeParameters(node, types) {
119
142
  return node.params.filter((parameter) => !types.isIdentifier(parameter, { name: "this" }));
120
143
  }
@@ -138,6 +161,44 @@ function isRestWrapper(path, types) {
138
161
  const parameters = runtimeParameters(path.node, types);
139
162
  return parameters.length === 1 && types.isRestElement(parameters[0]);
140
163
  }
164
+ function jevReceiver(node, types) {
165
+ const callee = node.callee;
166
+ if (!(types.isMemberExpression(callee) || types.isOptionalMemberExpression(callee)) || callee.computed || !types.isIdentifier(callee.property, { name: JEV_METHOD }) || types.isSuper(callee.object)) return null;
167
+ return callee.object;
168
+ }
169
+ function isOptionalChain(node, types) {
170
+ return types.isOptionalMemberExpression(node) || types.isOptionalCallExpression(node);
171
+ }
172
+ function continuesOptionalChain(path, types) {
173
+ const parent = path.parent;
174
+ return types.isOptionalMemberExpression(parent) && parent.object === path.node || types.isOptionalCallExpression(parent) && parent.callee === path.node;
175
+ }
176
+ function rewriteJevCall(path, state, types) {
177
+ if (state.skipFile || state.bamlGenerated || !state.jevIdentifier) return;
178
+ const node = path.node;
179
+ const receiver = jevReceiver(node, types);
180
+ if (receiver === null) return;
181
+ const optionalReceiver = types.isOptionalMemberExpression(node.callee) && node.callee.optional;
182
+ const optionalMethod = types.isOptionalCallExpression(node) && node.optional;
183
+ if (types.isOptionalCallExpression(node)) {
184
+ if (continuesOptionalChain(path, types) || !optionalReceiver && isOptionalChain(receiver, types)) return;
185
+ }
186
+ const guarded = optionalReceiver || optionalMethod;
187
+ const receiverReference = guarded && !path.scope.isStatic(receiver) ? path.scope.generateDeclaredUidIdentifier("bitfabJevReceiver") : null;
188
+ const receiverValue = () => receiverReference === null ? types.cloneNode(receiver) : types.cloneNode(receiverReference);
189
+ const call = types.callExpression(types.cloneNode(state.jevIdentifier), [receiverValue(), ...node.arguments]);
190
+ state.usedRuntime = true;
191
+ state.usedJev = true;
192
+ if (!guarded) {
193
+ path.replaceWith(call);
194
+ return;
195
+ }
196
+ const firstReceiver = receiverReference === null ? types.cloneNode(receiver) : types.assignmentExpression("=", types.cloneNode(receiverReference), receiver);
197
+ const missing = (value) => types.binaryExpression("==", value, types.nullLiteral());
198
+ const methodOf = (value) => types.memberExpression(value, types.identifier(JEV_METHOD));
199
+ const test = optionalReceiver ? optionalMethod ? types.logicalExpression("||", missing(firstReceiver), missing(methodOf(receiverValue()))) : missing(firstReceiver) : missing(methodOf(firstReceiver));
200
+ path.replaceWith(types.conditionalExpression(test, types.unaryExpression("void", types.numericLiteral(0)), call));
201
+ }
141
202
  function bitfabBabelPlugin(api) {
142
203
  const { types } = api;
143
204
  return {
@@ -149,9 +210,12 @@ function bitfabBabelPlugin(api) {
149
210
  state.runtimeIdentifier = path.scope.generateUidIdentifier("bitfabAutoSpan");
150
211
  state.activeIdentifier = path.scope.generateUidIdentifier("bitfabAutoTraceActive");
151
212
  state.wrapperIdentifier = path.scope.generateUidIdentifier("bitfabAutoWrap");
213
+ state.jevIdentifier = path.scope.generateUidIdentifier("bitfabAutoJev");
214
+ state.bamlGenerated = isBamlGeneratedSource(state.file.code ?? "");
152
215
  state.definitions = [];
153
216
  state.usedRuntime = false;
154
217
  state.usedWrapper = false;
218
+ state.usedJev = false;
155
219
  },
156
220
  exit(path, state) {
157
221
  if (state.skipFile || !state.usedRuntime || !state.runtimeIdentifier || !state.activeIdentifier || !state.wrapperIdentifier) return;
@@ -160,7 +224,8 @@ function bitfabBabelPlugin(api) {
160
224
  types.importDeclaration([
161
225
  types.importSpecifier(state.runtimeIdentifier, types.identifier("__bitfabAutoSpan")),
162
226
  types.importSpecifier(state.activeIdentifier, types.identifier("__bitfabAutoTraceActive")),
163
- ...state.usedWrapper ? [types.importSpecifier(state.wrapperIdentifier, types.identifier("__bitfabAutoWrap"))] : []
227
+ ...state.usedWrapper ? [types.importSpecifier(state.wrapperIdentifier, types.identifier("__bitfabAutoWrap"))] : [],
228
+ ...state.usedJev && state.jevIdentifier ? [types.importSpecifier(state.jevIdentifier, types.identifier("__bitfabAutoJev"))] : []
164
229
  ], types.stringLiteral(state.opts.runtimeModule ?? "bitfab/auto")),
165
230
  types.variableDeclaration("const", [types.variableDeclarator(types.identifier(AUTO_TRACE_TRANSFORM_MARKER), types.assignmentExpression("=", types.memberExpression(types.identifier("globalThis"), types.identifier(AUTO_TRACE_TRANSFORM_MARKER)), types.booleanLiteral(true)))]),
166
231
  ...state.definitions ?? []
@@ -169,14 +234,24 @@ function bitfabBabelPlugin(api) {
169
234
  },
170
235
  CallExpression: { exit(path, state) {
171
236
  if (state.skipFile) return;
237
+ if (jevReceiver(path.node, types) !== null) {
238
+ rewriteJevCall(path, state, types);
239
+ return;
240
+ }
172
241
  const configuredName = withNodeFunctionName(path, types);
173
242
  if (configuredName === null) return;
174
243
  if (path.node.arguments.length === 1) path.node.arguments.push(types.identifier("undefined"));
175
244
  path.node.arguments.push(types.stringLiteral(configuredName));
176
245
  } },
246
+ OptionalCallExpression: { exit(path, state) {
247
+ rewriteJevCall(path, state, types);
248
+ } },
177
249
  Function: { exit(path, state) {
178
250
  const node = path.node;
179
251
  if (state.skipFile || node._bitfabInstrumented || !isInstrumentableFunction(node, types) || isTraceDecoratorRoot(path, types) || !state.runtimeIdentifier || !state.activeIdentifier || !state.wrapperIdentifier) return;
252
+ const bamlMethod = state.bamlGenerated === true && isBamlClientMethod(path, types);
253
+ if (state.bamlGenerated && !bamlMethod) return;
254
+ if (isJevMethodDefinition(path, types)) return;
180
255
  const name = qualifiedFunctionName(path, types);
181
256
  if (name.startsWith("anonymous-")) return;
182
257
  const normalizedFilename = autoTraceFilename(state.file.opts.filename ?? "unknown", state.opts.cwd ?? state.file.opts.cwd ?? process.cwd());
@@ -188,6 +263,7 @@ function bitfabBabelPlugin(api) {
188
263
  types.objectProperty(types.identifier("line"), types.numericLiteral(line)),
189
264
  types.objectProperty(types.identifier("column"), types.numericLiteral(column)),
190
265
  ...node.async ? [types.objectProperty(types.identifier("async"), types.booleanLiteral(true))] : [],
266
+ ...bamlMethod ? [types.objectProperty(types.identifier("baml"), types.booleanLiteral(true))] : [],
191
267
  ...isRestWrapper(path, types) ? [types.objectProperty(types.identifier("wrapper"), types.booleanLiteral(true))] : []
192
268
  ]);
193
269
  const definitionIdentifier = path.scope.getProgramParent().generateUidIdentifier("bitfabAutoDefinition");
@@ -202,10 +278,13 @@ function bitfabBabelPlugin(api) {
202
278
  const originalBody = types.isBlockStatement(node.body) ? node.body : types.blockStatement([types.returnStatement(node.body)]);
203
279
  const directives = originalBody.directives;
204
280
  originalBody.directives = [];
205
- node.body = types.blockStatement([types.ifStatement(types.callExpression(types.cloneNode(state.activeIdentifier), []), types.blockStatement([types.returnStatement(types.callExpression(types.cloneNode(state.runtimeIdentifier), [
281
+ const callerOptions = bamlMethod ? path.scope.generateUidIdentifier("bitfabBamlOptions") : void 0;
282
+ const withCollector = bamlMethod ? path.scope.generateUidIdentifier("bitfabBamlWithCollector") : void 0;
283
+ const tracedBody = callerOptions && withCollector ? types.blockStatement([bamlOptionsDeclaration(callerOptions, withCollector, types), ...types.cloneNode(originalBody, true).body], []) : types.cloneNode(originalBody, true);
284
+ node.body = types.blockStatement([types.ifStatement(types.callExpression(types.cloneNode(state.activeIdentifier), []), types.blockStatement([...callerOptions ? [types.variableDeclaration("const", [types.variableDeclarator(callerOptions, types.identifier(BAML_OPTIONS_PARAMETER))])] : [], types.returnStatement(types.callExpression(types.cloneNode(state.runtimeIdentifier), [
206
285
  types.cloneNode(definitionIdentifier),
207
286
  parameterInputs(path, types),
208
- types.arrowFunctionExpression([], types.cloneNode(originalBody, true), node.async ?? false)
287
+ types.arrowFunctionExpression(withCollector ? [types.cloneNode(withCollector)] : [], tracedBody, node.async ?? false)
209
288
  ]))])), ...originalBody.body], directives);
210
289
  node._bitfabInstrumented = true;
211
290
  state.usedRuntime = true;
@@ -1 +1 @@
1
- {"version":3,"file":"nodeLoader.js","names":["resolvePath"],"sources":["../../../bitfab-typescript-transform/src/transformOptions.ts","../../../bitfab-typescript-transform/src/babelPlugin.ts","../../../bitfab-typescript-transform/src/transform.ts","../../../bitfab-typescript-transform/src/loaderRuntime.ts","../../../bitfab-typescript-transform/src/nodeLoader.ts"],"sourcesContent":["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","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 if (types.isClassProperty(parent) && !parent.computed) {\n const name = propertyName(parent.key, types)\n if (name) {\n return name\n }\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 const parent = path.parentPath?.node\n const decorated =\n types.isClassMethod(node) || types.isClassPrivateMethod(node)\n ? node\n : types.isClassProperty(parent) && parent.value === node\n ? parent\n : null\n if (!decorated) {\n return false\n }\n\n return (\n decorated.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 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 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/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 isTraceDecoratorRoot(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","import { type InputOptions, transformSync } from \"@babel/core\"\nimport bitfabBabelPlugin from \"./babelPlugin.js\"\nimport type { BitfabTransformOptions } from \"./transformOptions.js\"\nimport {\n AUTO_TRACE_TRANSFORM_MARKER,\n shouldTransformBitfabFile,\n sourceFilename,\n} from \"./transformOptions.js\"\n\nexport type { BitfabTransformOptions } from \"./transformOptions.js\"\n\ntype ParserPlugin = NonNullable<\n NonNullable<InputOptions[\"parserOpts\"]>[\"plugins\"]\n>[number]\n\nexport interface BitfabSourceMap {\n version: number\n sources: string[]\n names: string[]\n mappings: string\n file?: string\n sourceRoot?: string\n sourcesContent?: Array<string | null>\n}\n\nexport interface BitfabTransformResult {\n code: string\n map?: BitfabSourceMap\n}\n\nexport function parserPlugins(filename: string): ParserPlugin[] {\n const path = sourceFilename(filename)\n const typescript = /\\.[cm]?tsx?$/.test(path)\n const jsx = /\\.tsx$/.test(path) || /\\.[cm]?jsx?$/.test(path)\n return [\n ...(typescript ? ([\"typescript\"] as const) : []),\n ...(jsx ? ([\"jsx\"] as const) : []),\n \"decorators\",\n ]\n}\n\nexport function transformBitfabSource(\n source: string,\n filename: string,\n options: BitfabTransformOptions = {},\n): BitfabTransformResult {\n if (!shouldTransformBitfabFile(filename, options)) {\n return { code: source }\n }\n const result = transformSync(source, {\n babelrc: false,\n configFile: false,\n filename: sourceFilename(filename),\n parserOpts: { plugins: parserPlugins(filename), sourceType: \"module\" },\n plugins: [[bitfabBabelPlugin, options]],\n sourceMaps: true,\n })\n if (!result?.code || !result.metadata?.[AUTO_TRACE_TRANSFORM_MARKER]) {\n return { code: source }\n }\n return {\n code: result.code,\n ...(result.map ? { map: result.map as BitfabSourceMap } : {}),\n }\n}\n","import { dirname } from \"node:path\"\nimport {\n type PluginItem,\n transformFromAstSync,\n transformSync,\n} from \"@babel/core\"\nimport decoratorsPlugin from \"@babel/plugin-proposal-decorators\"\nimport commonJsPlugin from \"@babel/plugin-transform-modules-commonjs\"\nimport reactJsxPlugin from \"@babel/plugin-transform-react-jsx\"\nimport typeScriptPlugin from \"@babel/plugin-transform-typescript\"\nimport { getTsconfig, parseTsconfig, type TsConfigJson } from \"get-tsconfig\"\nimport bitfabBabelPlugin from \"./babelPlugin.js\"\nimport { parserPlugins } from \"./transform.js\"\nimport type { BitfabTransformOptions } from \"./transformOptions.js\"\nimport {\n shouldTransformBitfabFile,\n sourceFilename,\n} from \"./transformOptions.js\"\n\nexport interface BitfabLoaderOptions\n extends Omit<BitfabTransformOptions, \"include\"> {\n tsconfig?: string\n}\n\nexport interface BitfabJavaScriptTransformResult {\n code: string\n map?: string\n}\n\ntype CompilerOptions = NonNullable<TsConfigJson[\"compilerOptions\"]>\n\nfunction readCompilerOptions(\n filename: string,\n configuredPath: string | undefined,\n): CompilerOptions {\n const config = configuredPath\n ? parseTsconfig(configuredPath)\n : getTsconfig(dirname(filename))?.config\n return config?.compilerOptions ?? {}\n}\n\nfunction reactJsxOptions(compilerOptions: CompilerOptions): PluginItem {\n if (compilerOptions.jsx === \"react\") {\n return [\n reactJsxPlugin,\n {\n runtime: \"classic\",\n ...(compilerOptions.jsxFactory && {\n pragma: compilerOptions.jsxFactory,\n }),\n ...(compilerOptions.jsxFragmentFactory && {\n pragmaFrag: compilerOptions.jsxFragmentFactory,\n }),\n },\n ]\n }\n return [\n reactJsxPlugin,\n {\n runtime: \"automatic\",\n importSource: compilerOptions.jsxImportSource ?? \"react\",\n },\n ]\n}\n\nfunction compilePlugins(\n filename: string,\n compilerOptions: CompilerOptions,\n format: \"commonjs\" | \"module\" | undefined,\n): PluginItem[] {\n const path = sourceFilename(filename)\n const isTypeScript = /\\.[cm]?tsx?$/.test(path)\n const hasJsx = /\\.[jt]sx$/.test(path)\n const isCommonJs = format === \"commonjs\" || path.endsWith(\".cts\")\n return [\n ...(isTypeScript\n ? [\n [\n typeScriptPlugin,\n {\n onlyRemoveTypeImports:\n compilerOptions.verbatimModuleSyntax === true,\n },\n ] satisfies PluginItem,\n ]\n : []),\n [\n decoratorsPlugin,\n {\n version: compilerOptions.experimentalDecorators ? \"legacy\" : \"2023-11\",\n },\n ],\n ...(hasJsx ? [reactJsxOptions(compilerOptions)] : []),\n ...(isCommonJs ? [commonJsPlugin] : []),\n ]\n}\n\nexport function transformBitfabModuleToJavaScript(\n source: string,\n filename: string,\n options: BitfabLoaderOptions = {},\n format?: \"commonjs\" | \"module\",\n sourceMapMode: \"external\" | \"inline\" = \"external\",\n): BitfabJavaScriptTransformResult {\n const { tsconfig, ...transformOptions } = options\n if (!shouldTransformBitfabFile(filename, transformOptions)) {\n return { code: source }\n }\n const sourceFile = sourceFilename(filename)\n const instrumented = transformSync(source, {\n ast: true,\n babelrc: false,\n code: false,\n configFile: false,\n filename: sourceFile,\n parserOpts: { plugins: parserPlugins(filename), sourceType: \"module\" },\n plugins: [[bitfabBabelPlugin, transformOptions]],\n })\n if (!instrumented?.ast) {\n throw new Error(`Bitfab could not parse ${sourceFile}`)\n }\n const compiled = transformFromAstSync(instrumented.ast, source, {\n babelrc: false,\n cloneInputAst: false,\n configFile: false,\n filename: sourceFile,\n plugins: compilePlugins(\n filename,\n readCompilerOptions(filename, tsconfig),\n format,\n ),\n sourceMaps: sourceMapMode === \"inline\" ? \"inline\" : true,\n })\n if (compiled?.code === undefined || compiled.code === null) {\n throw new Error(`Bitfab could not compile ${sourceFile}`)\n }\n return {\n code: compiled.code,\n ...(compiled.map ? { map: JSON.stringify(compiled.map) } : {}),\n }\n}\n","import { readFile } from \"node:fs/promises\"\nimport { createRequire } from \"node:module\"\nimport { isAbsolute, relative, resolve as resolvePath } from \"node:path\"\nimport { fileURLToPath, pathToFileURL } from \"node:url\"\nimport { transformBitfabModuleToJavaScript } from \"./loaderRuntime.js\"\nimport { shouldTransformBitfabFile } from \"./transformOptions.js\"\n\nconst runtimeParentURL =\n process.env.BITFAB_SDK_RESOLVE_FROM === undefined\n ? import.meta.url\n : pathToFileURL(resolvePath(process.env.BITFAB_SDK_RESOLVE_FROM)).href\n\ninterface NodeResolveContext {\n parentURL?: string\n conditions?: string[]\n importAttributes?: Record<string, string>\n}\n\nexport async function resolve(\n specifier: string,\n context: NodeResolveContext,\n nextResolve: (\n specifier: string,\n context: NodeResolveContext,\n ) => Promise<{ url: string }>,\n): Promise<{ url: string }> {\n return specifier === \"bitfab:runtime/auto\"\n ? nextResolve(\"bitfab/auto\", {\n ...context,\n parentURL: runtimeParentURL,\n })\n : nextResolve(specifier, context)\n}\n\ninterface NodeLoadContext {\n format?: string\n}\n\ninterface NodeLoadResult {\n format?: string\n shortCircuit?: boolean\n source?: string | ArrayBuffer | Uint8Array\n}\n\ntype NextLoad = (\n url: string,\n context: NodeLoadContext,\n) => Promise<NodeLoadResult>\n\nfunction runtimeFormat(\n format: string | undefined,\n filename: string,\n): \"commonjs\" | \"module\" {\n return format?.startsWith(\"commonjs\") || /\\.c(?:js|ts)$/.test(filename)\n ? \"commonjs\"\n : \"module\"\n}\n\nfunction isInsideWorkingDirectory(filename: string): boolean {\n const path = relative(process.cwd(), filename)\n return (\n path !== \"..\" &&\n !path.startsWith(`..${process.platform === \"win32\" ? \"\\\\\" : \"/\"}`) &&\n !isAbsolute(path)\n )\n}\n\nexport async function load(\n url: string,\n context: NodeLoadContext,\n nextLoad: NextLoad,\n): Promise<NodeLoadResult> {\n if (!url.startsWith(\"file:\")) {\n return nextLoad(url, context)\n }\n\n const filename = fileURLToPath(url)\n if (\n !isInsideWorkingDirectory(filename) ||\n !shouldTransformBitfabFile(filename, {})\n ) {\n return nextLoad(url, context)\n }\n\n const source = await readFile(filename, \"utf8\")\n const format = runtimeFormat(context.format, filename)\n const transformed = transformBitfabModuleToJavaScript(\n source,\n filename,\n format === \"commonjs\"\n ? {\n runtimeModule:\n createRequire(runtimeParentURL).resolve(\"bitfab/auto\"),\n }\n : { runtimeModule: \"bitfab:runtime/auto\" },\n format,\n \"inline\",\n )\n return {\n format,\n shortCircuit: true,\n source: transformed.code,\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"nodeLoader.js","names":["resolvePath"],"sources":["../../../bitfab-typescript-transform/src/transformOptions.ts","../../../bitfab-typescript-transform/src/babelPlugin.ts","../../../bitfab-typescript-transform/src/transform.ts","../../../bitfab-typescript-transform/src/loaderRuntime.ts","../../../bitfab-typescript-transform/src/nodeLoader.ts"],"sourcesContent":["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","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 jevIdentifier?: ReturnType<BabelTypesApi[\"identifier\"]>\n definitions?: Array<ReturnType<BabelTypesApi[\"variableDeclaration\"]>>\n skipFile?: boolean\n bamlGenerated?: boolean\n usedRuntime?: boolean\n usedWrapper?: boolean\n usedJev?: 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 if (types.isClassProperty(parent) && !parent.computed) {\n const name = propertyName(parent.key, types)\n if (name) {\n return name\n }\n }\n\n const { line, column } = sourcePosition(path)\n return `anonymous-${line}-${column}`\n}\n\nconst JEV_METHOD = \"systemOne\"\n\nfunction isJevMethodDefinition(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): boolean {\n const parent = path.parentPath?.node\n const isMethod =\n types.isClassMethod(path.node) ||\n types.isObjectMethod(path.node) ||\n types.isObjectProperty(parent) ||\n types.isClassProperty(parent)\n return isMethod && functionName(path, types) === JEV_METHOD\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 const parent = path.parentPath?.node\n const decorated =\n types.isClassMethod(node) || types.isClassPrivateMethod(node)\n ? node\n : types.isClassProperty(parent) && parent.value === node\n ? parent\n : null\n if (!decorated) {\n return false\n }\n\n return (\n decorated.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 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\nconst BAML_GENERATED_HEADER = \"This file was generated by BAML\"\nconst BAML_CLIENT_CLASSES = new Set([\"BamlAsyncClient\", \"BamlSyncClient\"])\nconst BAML_OPTIONS_PARAMETER = \"__baml_options__\"\n\nfunction isBamlGeneratedSource(code: string): boolean {\n return code.slice(0, 4096).includes(BAML_GENERATED_HEADER)\n}\n\nfunction isBamlClientMethod(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): boolean {\n const node = path.node\n if (!types.isClassMethod(node) || node.kind !== \"method\" || node.static) {\n return false\n }\n const classPath = path.parentPath?.parentPath\n if (\n !classPath ||\n !(classPath.isClassDeclaration() || classPath.isClassExpression()) ||\n !classPath.node.id ||\n !BAML_CLIENT_CLASSES.has(classPath.node.id.name)\n ) {\n return false\n }\n const parameters = runtimeParameters(node, types)\n const last = parameters[parameters.length - 1]\n return types.isIdentifier(last, { name: BAML_OPTIONS_PARAMETER })\n}\n\nfunction bamlOptionsDeclaration(\n callerOptions: BabelTypes.Identifier,\n withCollector: BabelTypes.Identifier,\n types: BabelTypesApi,\n): BabelTypes.VariableDeclaration {\n return types.variableDeclaration(\"const\", [\n types.variableDeclarator(\n types.identifier(BAML_OPTIONS_PARAMETER),\n types.conditionalExpression(\n types.binaryExpression(\n \"===\",\n types.cloneNode(withCollector),\n types.identifier(\"undefined\"),\n ),\n types.cloneNode(callerOptions),\n types.callExpression(types.cloneNode(withCollector), [\n types.cloneNode(callerOptions),\n types.memberExpression(\n types.thisExpression(),\n types.identifier(\"bamlOptions\"),\n ),\n ]),\n ),\n ),\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\ntype JevCallNode = BabelTypes.CallExpression | BabelTypes.OptionalCallExpression\n\nfunction jevReceiver(\n node: JevCallNode,\n types: BabelTypesApi,\n): BabelTypes.Expression | null {\n const callee = node.callee\n if (\n !(\n types.isMemberExpression(callee) ||\n types.isOptionalMemberExpression(callee)\n ) ||\n callee.computed ||\n !types.isIdentifier(callee.property, { name: JEV_METHOD }) ||\n types.isSuper(callee.object)\n ) {\n return null\n }\n return callee.object\n}\n\nfunction isOptionalChain(node: BabelTypes.Node, types: BabelTypesApi): boolean {\n return (\n types.isOptionalMemberExpression(node) ||\n types.isOptionalCallExpression(node)\n )\n}\n\nfunction continuesOptionalChain(\n path: NodePath<BabelTypes.OptionalCallExpression>,\n types: BabelTypesApi,\n): boolean {\n const parent = path.parent\n return (\n (types.isOptionalMemberExpression(parent) && parent.object === path.node) ||\n (types.isOptionalCallExpression(parent) && parent.callee === path.node)\n )\n}\n\nfunction rewriteJevCall(\n path: NodePath<JevCallNode>,\n state: BitfabPluginState,\n types: BabelTypesApi,\n): void {\n if (state.skipFile || state.bamlGenerated || !state.jevIdentifier) {\n return\n }\n const node = path.node\n const receiver = jevReceiver(node, types)\n if (receiver === null) {\n return\n }\n const optionalReceiver =\n types.isOptionalMemberExpression(node.callee) && node.callee.optional\n const optionalMethod = types.isOptionalCallExpression(node) && node.optional\n if (types.isOptionalCallExpression(node)) {\n if (\n continuesOptionalChain(\n path as NodePath<BabelTypes.OptionalCallExpression>,\n types,\n ) ||\n (!optionalReceiver && isOptionalChain(receiver, types))\n ) {\n return\n }\n }\n const guarded = optionalReceiver || optionalMethod\n const receiverReference =\n guarded && !path.scope.isStatic(receiver)\n ? path.scope.generateDeclaredUidIdentifier(\"bitfabJevReceiver\")\n : null\n const receiverValue = (): BabelTypes.Expression =>\n receiverReference === null\n ? types.cloneNode(receiver)\n : types.cloneNode(receiverReference)\n const call = types.callExpression(types.cloneNode(state.jevIdentifier), [\n receiverValue(),\n ...node.arguments,\n ])\n state.usedRuntime = true\n state.usedJev = true\n if (!guarded) {\n path.replaceWith(call)\n return\n }\n const firstReceiver =\n receiverReference === null\n ? types.cloneNode(receiver)\n : types.assignmentExpression(\n \"=\",\n types.cloneNode(receiverReference),\n receiver,\n )\n const missing = (value: BabelTypes.Expression): BabelTypes.BinaryExpression =>\n types.binaryExpression(\"==\", value, types.nullLiteral())\n const methodOf = (value: BabelTypes.Expression): BabelTypes.Expression =>\n types.memberExpression(value, types.identifier(JEV_METHOD))\n const test = optionalReceiver\n ? optionalMethod\n ? types.logicalExpression(\n \"||\",\n missing(firstReceiver),\n missing(methodOf(receiverValue())),\n )\n : missing(firstReceiver)\n : missing(methodOf(firstReceiver))\n path.replaceWith(\n types.conditionalExpression(\n test,\n types.unaryExpression(\"void\", types.numericLiteral(0)),\n call,\n ),\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}): 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.jevIdentifier =\n path.scope.generateUidIdentifier(\"bitfabAutoJev\")\n state.bamlGenerated = isBamlGeneratedSource(state.file.code ?? \"\")\n state.definitions = []\n state.usedRuntime = false\n state.usedWrapper = false\n state.usedJev = 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 ...(state.usedJev && state.jevIdentifier\n ? [\n types.importSpecifier(\n state.jevIdentifier,\n types.identifier(\"__bitfabAutoJev\"),\n ),\n ]\n : []),\n ],\n types.stringLiteral(\n state.opts.runtimeModule ?? \"bitfab/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 if (jevReceiver(path.node, types) !== null) {\n rewriteJevCall(path, state, types)\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 OptionalCallExpression: {\n exit(\n path: NodePath<BabelTypes.OptionalCallExpression>,\n state: BitfabPluginState,\n ) {\n rewriteJevCall(path, state, types)\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 isTraceDecoratorRoot(path, types) ||\n !state.runtimeIdentifier ||\n !state.activeIdentifier ||\n !state.wrapperIdentifier\n ) {\n return\n }\n const bamlMethod =\n state.bamlGenerated === true && isBamlClientMethod(path, types)\n if (state.bamlGenerated && !bamlMethod) {\n return\n }\n if (isJevMethodDefinition(path, types)) {\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 ...(bamlMethod\n ? [\n types.objectProperty(\n types.identifier(\"baml\"),\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 callerOptions = bamlMethod\n ? path.scope.generateUidIdentifier(\"bitfabBamlOptions\")\n : undefined\n const withCollector = bamlMethod\n ? path.scope.generateUidIdentifier(\"bitfabBamlWithCollector\")\n : undefined\n const tracedBody =\n callerOptions && withCollector\n ? types.blockStatement(\n [\n bamlOptionsDeclaration(callerOptions, withCollector, types),\n ...types.cloneNode(originalBody, true).body,\n ],\n [],\n )\n : types.cloneNode(originalBody, true)\n const body = types.blockStatement(\n [\n types.ifStatement(\n types.callExpression(\n types.cloneNode(state.activeIdentifier),\n [],\n ),\n types.blockStatement([\n ...(callerOptions\n ? [\n types.variableDeclaration(\"const\", [\n types.variableDeclarator(\n callerOptions,\n types.identifier(BAML_OPTIONS_PARAMETER),\n ),\n ]),\n ]\n : []),\n types.returnStatement(\n types.callExpression(\n types.cloneNode(state.runtimeIdentifier),\n [\n types.cloneNode(definitionIdentifier),\n parameterInputs(path, types),\n types.arrowFunctionExpression(\n withCollector ? [types.cloneNode(withCollector)] : [],\n tracedBody,\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","import { type InputOptions, transformSync } from \"@babel/core\"\nimport bitfabBabelPlugin from \"./babelPlugin.js\"\nimport type { BitfabTransformOptions } from \"./transformOptions.js\"\nimport {\n AUTO_TRACE_TRANSFORM_MARKER,\n shouldTransformBitfabFile,\n sourceFilename,\n} from \"./transformOptions.js\"\n\nexport type { BitfabTransformOptions } from \"./transformOptions.js\"\n\ntype ParserPlugin = NonNullable<\n NonNullable<InputOptions[\"parserOpts\"]>[\"plugins\"]\n>[number]\n\nexport interface BitfabSourceMap {\n version: number\n sources: string[]\n names: string[]\n mappings: string\n file?: string\n sourceRoot?: string\n sourcesContent?: Array<string | null>\n}\n\nexport interface BitfabTransformResult {\n code: string\n map?: BitfabSourceMap\n}\n\nexport function parserPlugins(filename: string): ParserPlugin[] {\n const path = sourceFilename(filename)\n const typescript = /\\.[cm]?tsx?$/.test(path)\n const jsx = /\\.tsx$/.test(path) || /\\.[cm]?jsx?$/.test(path)\n return [\n ...(typescript ? ([\"typescript\"] as const) : []),\n ...(jsx ? ([\"jsx\"] as const) : []),\n \"decorators\",\n ]\n}\n\nexport function transformBitfabSource(\n source: string,\n filename: string,\n options: BitfabTransformOptions = {},\n): BitfabTransformResult {\n if (!shouldTransformBitfabFile(filename, options)) {\n return { code: source }\n }\n const result = transformSync(source, {\n babelrc: false,\n configFile: false,\n filename: sourceFilename(filename),\n parserOpts: { plugins: parserPlugins(filename), sourceType: \"module\" },\n plugins: [[bitfabBabelPlugin, options]],\n sourceMaps: true,\n })\n if (!result?.code || !result.metadata?.[AUTO_TRACE_TRANSFORM_MARKER]) {\n return { code: source }\n }\n return {\n code: result.code,\n ...(result.map ? { map: result.map as BitfabSourceMap } : {}),\n }\n}\n","import { dirname } from \"node:path\"\nimport {\n type PluginItem,\n transformFromAstSync,\n transformSync,\n} from \"@babel/core\"\nimport decoratorsPlugin from \"@babel/plugin-proposal-decorators\"\nimport commonJsPlugin from \"@babel/plugin-transform-modules-commonjs\"\nimport reactJsxPlugin from \"@babel/plugin-transform-react-jsx\"\nimport typeScriptPlugin from \"@babel/plugin-transform-typescript\"\nimport { getTsconfig, parseTsconfig, type TsConfigJson } from \"get-tsconfig\"\nimport bitfabBabelPlugin from \"./babelPlugin.js\"\nimport { parserPlugins } from \"./transform.js\"\nimport type { BitfabTransformOptions } from \"./transformOptions.js\"\nimport {\n shouldTransformBitfabFile,\n sourceFilename,\n} from \"./transformOptions.js\"\n\nexport interface BitfabLoaderOptions\n extends Omit<BitfabTransformOptions, \"include\"> {\n tsconfig?: string\n}\n\nexport interface BitfabJavaScriptTransformResult {\n code: string\n map?: string\n}\n\ntype CompilerOptions = NonNullable<TsConfigJson[\"compilerOptions\"]>\n\nfunction readCompilerOptions(\n filename: string,\n configuredPath: string | undefined,\n): CompilerOptions {\n const config = configuredPath\n ? parseTsconfig(configuredPath)\n : getTsconfig(dirname(filename))?.config\n return config?.compilerOptions ?? {}\n}\n\nfunction reactJsxOptions(compilerOptions: CompilerOptions): PluginItem {\n if (compilerOptions.jsx === \"react\") {\n return [\n reactJsxPlugin,\n {\n runtime: \"classic\",\n ...(compilerOptions.jsxFactory && {\n pragma: compilerOptions.jsxFactory,\n }),\n ...(compilerOptions.jsxFragmentFactory && {\n pragmaFrag: compilerOptions.jsxFragmentFactory,\n }),\n },\n ]\n }\n return [\n reactJsxPlugin,\n {\n runtime: \"automatic\",\n importSource: compilerOptions.jsxImportSource ?? \"react\",\n },\n ]\n}\n\nfunction compilePlugins(\n filename: string,\n compilerOptions: CompilerOptions,\n format: \"commonjs\" | \"module\" | undefined,\n): PluginItem[] {\n const path = sourceFilename(filename)\n const isTypeScript = /\\.[cm]?tsx?$/.test(path)\n const hasJsx = /\\.[jt]sx$/.test(path)\n const isCommonJs = format === \"commonjs\" || path.endsWith(\".cts\")\n return [\n ...(isTypeScript\n ? [\n [\n typeScriptPlugin,\n {\n onlyRemoveTypeImports:\n compilerOptions.verbatimModuleSyntax === true,\n },\n ] satisfies PluginItem,\n ]\n : []),\n [\n decoratorsPlugin,\n {\n version: compilerOptions.experimentalDecorators ? \"legacy\" : \"2023-11\",\n },\n ],\n ...(hasJsx ? [reactJsxOptions(compilerOptions)] : []),\n ...(isCommonJs ? [commonJsPlugin] : []),\n ]\n}\n\nexport function transformBitfabModuleToJavaScript(\n source: string,\n filename: string,\n options: BitfabLoaderOptions = {},\n format?: \"commonjs\" | \"module\",\n sourceMapMode: \"external\" | \"inline\" = \"external\",\n): BitfabJavaScriptTransformResult {\n const { tsconfig, ...transformOptions } = options\n if (!shouldTransformBitfabFile(filename, transformOptions)) {\n return { code: source }\n }\n const sourceFile = sourceFilename(filename)\n const instrumented = transformSync(source, {\n ast: true,\n babelrc: false,\n code: false,\n configFile: false,\n filename: sourceFile,\n parserOpts: { plugins: parserPlugins(filename), sourceType: \"module\" },\n plugins: [[bitfabBabelPlugin, transformOptions]],\n })\n if (!instrumented?.ast) {\n throw new Error(`Bitfab could not parse ${sourceFile}`)\n }\n const compiled = transformFromAstSync(instrumented.ast, source, {\n babelrc: false,\n cloneInputAst: false,\n configFile: false,\n filename: sourceFile,\n plugins: compilePlugins(\n filename,\n readCompilerOptions(filename, tsconfig),\n format,\n ),\n sourceMaps: sourceMapMode === \"inline\" ? \"inline\" : true,\n })\n if (compiled?.code === undefined || compiled.code === null) {\n throw new Error(`Bitfab could not compile ${sourceFile}`)\n }\n return {\n code: compiled.code,\n ...(compiled.map ? { map: JSON.stringify(compiled.map) } : {}),\n }\n}\n","import { readFile } from \"node:fs/promises\"\nimport { createRequire } from \"node:module\"\nimport { isAbsolute, relative, resolve as resolvePath } from \"node:path\"\nimport { fileURLToPath, pathToFileURL } from \"node:url\"\nimport { transformBitfabModuleToJavaScript } from \"./loaderRuntime.js\"\nimport { shouldTransformBitfabFile } from \"./transformOptions.js\"\n\nconst runtimeParentURL =\n process.env.BITFAB_SDK_RESOLVE_FROM === undefined\n ? import.meta.url\n : pathToFileURL(resolvePath(process.env.BITFAB_SDK_RESOLVE_FROM)).href\n\ninterface NodeResolveContext {\n parentURL?: string\n conditions?: string[]\n importAttributes?: Record<string, string>\n}\n\nexport async function resolve(\n specifier: string,\n context: NodeResolveContext,\n nextResolve: (\n specifier: string,\n context: NodeResolveContext,\n ) => Promise<{ url: string }>,\n): Promise<{ url: string }> {\n return specifier === \"bitfab:runtime/auto\"\n ? nextResolve(\"bitfab/auto\", {\n ...context,\n parentURL: runtimeParentURL,\n })\n : nextResolve(specifier, context)\n}\n\ninterface NodeLoadContext {\n format?: string\n}\n\ninterface NodeLoadResult {\n format?: string\n shortCircuit?: boolean\n source?: string | ArrayBuffer | Uint8Array\n}\n\ntype NextLoad = (\n url: string,\n context: NodeLoadContext,\n) => Promise<NodeLoadResult>\n\nfunction runtimeFormat(\n format: string | undefined,\n filename: string,\n): \"commonjs\" | \"module\" {\n return format?.startsWith(\"commonjs\") || /\\.c(?:js|ts)$/.test(filename)\n ? \"commonjs\"\n : \"module\"\n}\n\nfunction isInsideWorkingDirectory(filename: string): boolean {\n const path = relative(process.cwd(), filename)\n return (\n path !== \"..\" &&\n !path.startsWith(`..${process.platform === \"win32\" ? \"\\\\\" : \"/\"}`) &&\n !isAbsolute(path)\n )\n}\n\nexport async function load(\n url: string,\n context: NodeLoadContext,\n nextLoad: NextLoad,\n): Promise<NodeLoadResult> {\n if (!url.startsWith(\"file:\")) {\n return nextLoad(url, context)\n }\n\n const filename = fileURLToPath(url)\n if (\n !isInsideWorkingDirectory(filename) ||\n !shouldTransformBitfabFile(filename, {})\n ) {\n return nextLoad(url, context)\n }\n\n const source = await readFile(filename, \"utf8\")\n const format = runtimeFormat(context.format, filename)\n const transformed = transformBitfabModuleToJavaScript(\n source,\n filename,\n format === \"commonjs\"\n ? {\n runtimeModule:\n createRequire(runtimeParentURL).resolve(\"bitfab/auto\"),\n }\n : { runtimeModule: \"bitfab:runtime/auto\" },\n format,\n \"inline\",\n )\n return {\n format,\n shortCircuit: true,\n source: transformed.code,\n }\n}\n"],"mappings":"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"}
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_transform = require("../transform-BjxHGGKc.cjs");
5
+ const require_transform = require("../transform-BBzrqpVH.cjs");
6
6
  //#region ../bitfab-typescript-transform/src/swcAdapter.ts
7
7
  function swcOptions(transformed, options) {
8
8
  return {
@@ -1,4 +1,4 @@
1
- import { n as transformBitfabSource } from "../transform-BcyUocwm.js";
1
+ import { n as transformBitfabSource } from "../transform-DkcFn_tg.js";
2
2
  //#region ../bitfab-typescript-transform/src/swcAdapter.ts
3
3
  function swcOptions(transformed, options) {
4
4
  return {
@@ -2,8 +2,8 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_babelPlugin = require("../babelPlugin-Nta4-VcL.cjs");
6
- const require_transform = require("../transform-BjxHGGKc.cjs");
5
+ const require_babelPlugin = require("../babelPlugin-s8EFjT6e.cjs");
6
+ const require_transform = require("../transform-BBzrqpVH.cjs");
7
7
  //#region ../bitfab-typescript-transform/src/unplugin.ts
8
8
  const bitfabTraceUnplugin = (0, require("unplugin").createUnplugin)((options) => {
9
9
  const resolvedOptions = options ?? {};
@@ -1,5 +1,5 @@
1
- import { r as shouldTransformBitfabFile } from "../babelPlugin-C70OxrqA.js";
2
- import { n as transformBitfabSource } from "../transform-BcyUocwm.js";
1
+ import { r as shouldTransformBitfabFile } from "../babelPlugin-a7ofCoOd.js";
2
+ import { n as transformBitfabSource } from "../transform-DkcFn_tg.js";
3
3
  import { createUnplugin } from "unplugin";
4
4
  //#region ../bitfab-typescript-transform/src/unplugin.ts
5
5
  const bitfabTraceUnplugin = createUnplugin((options) => {
@@ -1,4 +1,4 @@
1
- const require_babelPlugin = require("./babelPlugin-Nta4-VcL.cjs");
1
+ const require_babelPlugin = require("./babelPlugin-s8EFjT6e.cjs");
2
2
  let _babel_core = require("@babel/core");
3
3
  //#region ../bitfab-typescript-transform/src/transform.ts
4
4
  function parserPlugins(filename) {
@@ -44,4 +44,4 @@ Object.defineProperty(exports, "transformBitfabSource", {
44
44
  }
45
45
  });
46
46
 
47
- //# sourceMappingURL=transform-BjxHGGKc.cjs.map
47
+ //# sourceMappingURL=transform-BBzrqpVH.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"transform-BjxHGGKc.cjs","names":["sourceFilename","shouldTransformBitfabFile","transformSync","bitfabBabelPlugin"],"sources":["../../bitfab-typescript-transform/src/transform.ts"],"sourcesContent":["import { type InputOptions, transformSync } from \"@babel/core\"\nimport bitfabBabelPlugin from \"./babelPlugin.js\"\nimport type { BitfabTransformOptions } from \"./transformOptions.js\"\nimport {\n AUTO_TRACE_TRANSFORM_MARKER,\n shouldTransformBitfabFile,\n sourceFilename,\n} from \"./transformOptions.js\"\n\nexport type { BitfabTransformOptions } from \"./transformOptions.js\"\n\ntype ParserPlugin = NonNullable<\n NonNullable<InputOptions[\"parserOpts\"]>[\"plugins\"]\n>[number]\n\nexport interface BitfabSourceMap {\n version: number\n sources: string[]\n names: string[]\n mappings: string\n file?: string\n sourceRoot?: string\n sourcesContent?: Array<string | null>\n}\n\nexport interface BitfabTransformResult {\n code: string\n map?: BitfabSourceMap\n}\n\nexport function parserPlugins(filename: string): ParserPlugin[] {\n const path = sourceFilename(filename)\n const typescript = /\\.[cm]?tsx?$/.test(path)\n const jsx = /\\.tsx$/.test(path) || /\\.[cm]?jsx?$/.test(path)\n return [\n ...(typescript ? ([\"typescript\"] as const) : []),\n ...(jsx ? ([\"jsx\"] as const) : []),\n \"decorators\",\n ]\n}\n\nexport function transformBitfabSource(\n source: string,\n filename: string,\n options: BitfabTransformOptions = {},\n): BitfabTransformResult {\n if (!shouldTransformBitfabFile(filename, options)) {\n return { code: source }\n }\n const result = transformSync(source, {\n babelrc: false,\n configFile: false,\n filename: sourceFilename(filename),\n parserOpts: { plugins: parserPlugins(filename), sourceType: \"module\" },\n plugins: [[bitfabBabelPlugin, options]],\n sourceMaps: true,\n })\n if (!result?.code || !result.metadata?.[AUTO_TRACE_TRANSFORM_MARKER]) {\n return { code: source }\n }\n return {\n code: result.code,\n ...(result.map ? { map: result.map as BitfabSourceMap } : {}),\n }\n}\n"],"mappings":";;;AA8BA,SAAgB,cAAc,UAAkC;CAC9D,MAAM,OAAOA,oBAAAA,eAAe,QAAQ;CACpC,MAAM,aAAa,eAAe,KAAK,IAAI;CAC3C,MAAM,MAAM,SAAS,KAAK,IAAI,KAAK,eAAe,KAAK,IAAI;CAC3D,OAAO;EACL,GAAI,aAAc,CAAC,YAAY,IAAc,CAAC;EAC9C,GAAI,MAAO,CAAC,KAAK,IAAc,CAAC;EAChC;CACF;AACF;AAEA,SAAgB,sBACd,QACA,UACA,UAAkC,CAAC,GACZ;CACvB,IAAI,CAACC,oBAAAA,0BAA0B,UAAU,OAAO,GAC9C,OAAO,EAAE,MAAM,OAAO;CAExB,MAAM,UAAA,GAASC,YAAAA,cAAAA,CAAc,QAAQ;EACnC,SAAS;EACT,YAAY;EACZ,UAAUF,oBAAAA,eAAe,QAAQ;EACjC,YAAY;GAAE,SAAS,cAAc,QAAQ;GAAG,YAAY;EAAS;EACrE,SAAS,CAAC,CAACG,oBAAAA,mBAAmB,OAAO,CAAC;EACtC,YAAY;CACd,CAAC;CACD,IAAI,CAAC,QAAQ,QAAQ,CAAC,OAAO,WAAA,yCAC3B,OAAO,EAAE,MAAM,OAAO;CAExB,OAAO;EACL,MAAM,OAAO;EACb,GAAI,OAAO,MAAM,EAAE,KAAK,OAAO,IAAuB,IAAI,CAAC;CAC7D;AACF"}
1
+ {"version":3,"file":"transform-BBzrqpVH.cjs","names":["sourceFilename","shouldTransformBitfabFile","transformSync","bitfabBabelPlugin"],"sources":["../../bitfab-typescript-transform/src/transform.ts"],"sourcesContent":["import { type InputOptions, transformSync } from \"@babel/core\"\nimport bitfabBabelPlugin from \"./babelPlugin.js\"\nimport type { BitfabTransformOptions } from \"./transformOptions.js\"\nimport {\n AUTO_TRACE_TRANSFORM_MARKER,\n shouldTransformBitfabFile,\n sourceFilename,\n} from \"./transformOptions.js\"\n\nexport type { BitfabTransformOptions } from \"./transformOptions.js\"\n\ntype ParserPlugin = NonNullable<\n NonNullable<InputOptions[\"parserOpts\"]>[\"plugins\"]\n>[number]\n\nexport interface BitfabSourceMap {\n version: number\n sources: string[]\n names: string[]\n mappings: string\n file?: string\n sourceRoot?: string\n sourcesContent?: Array<string | null>\n}\n\nexport interface BitfabTransformResult {\n code: string\n map?: BitfabSourceMap\n}\n\nexport function parserPlugins(filename: string): ParserPlugin[] {\n const path = sourceFilename(filename)\n const typescript = /\\.[cm]?tsx?$/.test(path)\n const jsx = /\\.tsx$/.test(path) || /\\.[cm]?jsx?$/.test(path)\n return [\n ...(typescript ? ([\"typescript\"] as const) : []),\n ...(jsx ? ([\"jsx\"] as const) : []),\n \"decorators\",\n ]\n}\n\nexport function transformBitfabSource(\n source: string,\n filename: string,\n options: BitfabTransformOptions = {},\n): BitfabTransformResult {\n if (!shouldTransformBitfabFile(filename, options)) {\n return { code: source }\n }\n const result = transformSync(source, {\n babelrc: false,\n configFile: false,\n filename: sourceFilename(filename),\n parserOpts: { plugins: parserPlugins(filename), sourceType: \"module\" },\n plugins: [[bitfabBabelPlugin, options]],\n sourceMaps: true,\n })\n if (!result?.code || !result.metadata?.[AUTO_TRACE_TRANSFORM_MARKER]) {\n return { code: source }\n }\n return {\n code: result.code,\n ...(result.map ? { map: result.map as BitfabSourceMap } : {}),\n }\n}\n"],"mappings":";;;AA8BA,SAAgB,cAAc,UAAkC;CAC9D,MAAM,OAAOA,oBAAAA,eAAe,QAAQ;CACpC,MAAM,aAAa,eAAe,KAAK,IAAI;CAC3C,MAAM,MAAM,SAAS,KAAK,IAAI,KAAK,eAAe,KAAK,IAAI;CAC3D,OAAO;EACL,GAAI,aAAc,CAAC,YAAY,IAAc,CAAC;EAC9C,GAAI,MAAO,CAAC,KAAK,IAAc,CAAC;EAChC;CACF;AACF;AAEA,SAAgB,sBACd,QACA,UACA,UAAkC,CAAC,GACZ;CACvB,IAAI,CAACC,oBAAAA,0BAA0B,UAAU,OAAO,GAC9C,OAAO,EAAE,MAAM,OAAO;CAExB,MAAM,UAAA,GAASC,YAAAA,cAAAA,CAAc,QAAQ;EACnC,SAAS;EACT,YAAY;EACZ,UAAUF,oBAAAA,eAAe,QAAQ;EACjC,YAAY;GAAE,SAAS,cAAc,QAAQ;GAAG,YAAY;EAAS;EACrE,SAAS,CAAC,CAACG,oBAAAA,mBAAmB,OAAO,CAAC;EACtC,YAAY;CACd,CAAC;CACD,IAAI,CAAC,QAAQ,QAAQ,CAAC,OAAO,WAAA,yCAC3B,OAAO,EAAE,MAAM,OAAO;CAExB,OAAO;EACL,MAAM,OAAO;EACb,GAAI,OAAO,MAAM,EAAE,KAAK,OAAO,IAAuB,IAAI,CAAC;CAC7D;AACF"}
@@ -1,4 +1,4 @@
1
- import { i as sourceFilename, r as shouldTransformBitfabFile, t as bitfabBabelPlugin } from "./babelPlugin-C70OxrqA.js";
1
+ import { i as sourceFilename, r as shouldTransformBitfabFile, t as bitfabBabelPlugin } from "./babelPlugin-a7ofCoOd.js";
2
2
  import { transformSync } from "@babel/core";
3
3
  //#region ../bitfab-typescript-transform/src/transform.ts
4
4
  function parserPlugins(filename) {
@@ -33,4 +33,4 @@ function transformBitfabSource(source, filename, options = {}) {
33
33
  //#endregion
34
34
  export { transformBitfabSource as n, parserPlugins as t };
35
35
 
36
- //# sourceMappingURL=transform-BcyUocwm.js.map
36
+ //# sourceMappingURL=transform-DkcFn_tg.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transform-BcyUocwm.js","names":[],"sources":["../../bitfab-typescript-transform/src/transform.ts"],"sourcesContent":["import { type InputOptions, transformSync } from \"@babel/core\"\nimport bitfabBabelPlugin from \"./babelPlugin.js\"\nimport type { BitfabTransformOptions } from \"./transformOptions.js\"\nimport {\n AUTO_TRACE_TRANSFORM_MARKER,\n shouldTransformBitfabFile,\n sourceFilename,\n} from \"./transformOptions.js\"\n\nexport type { BitfabTransformOptions } from \"./transformOptions.js\"\n\ntype ParserPlugin = NonNullable<\n NonNullable<InputOptions[\"parserOpts\"]>[\"plugins\"]\n>[number]\n\nexport interface BitfabSourceMap {\n version: number\n sources: string[]\n names: string[]\n mappings: string\n file?: string\n sourceRoot?: string\n sourcesContent?: Array<string | null>\n}\n\nexport interface BitfabTransformResult {\n code: string\n map?: BitfabSourceMap\n}\n\nexport function parserPlugins(filename: string): ParserPlugin[] {\n const path = sourceFilename(filename)\n const typescript = /\\.[cm]?tsx?$/.test(path)\n const jsx = /\\.tsx$/.test(path) || /\\.[cm]?jsx?$/.test(path)\n return [\n ...(typescript ? ([\"typescript\"] as const) : []),\n ...(jsx ? ([\"jsx\"] as const) : []),\n \"decorators\",\n ]\n}\n\nexport function transformBitfabSource(\n source: string,\n filename: string,\n options: BitfabTransformOptions = {},\n): BitfabTransformResult {\n if (!shouldTransformBitfabFile(filename, options)) {\n return { code: source }\n }\n const result = transformSync(source, {\n babelrc: false,\n configFile: false,\n filename: sourceFilename(filename),\n parserOpts: { plugins: parserPlugins(filename), sourceType: \"module\" },\n plugins: [[bitfabBabelPlugin, options]],\n sourceMaps: true,\n })\n if (!result?.code || !result.metadata?.[AUTO_TRACE_TRANSFORM_MARKER]) {\n return { code: source }\n }\n return {\n code: result.code,\n ...(result.map ? { map: result.map as BitfabSourceMap } : {}),\n }\n}\n"],"mappings":";;;AA8BA,SAAgB,cAAc,UAAkC;CAC9D,MAAM,OAAO,eAAe,QAAQ;CACpC,MAAM,aAAa,eAAe,KAAK,IAAI;CAC3C,MAAM,MAAM,SAAS,KAAK,IAAI,KAAK,eAAe,KAAK,IAAI;CAC3D,OAAO;EACL,GAAI,aAAc,CAAC,YAAY,IAAc,CAAC;EAC9C,GAAI,MAAO,CAAC,KAAK,IAAc,CAAC;EAChC;CACF;AACF;AAEA,SAAgB,sBACd,QACA,UACA,UAAkC,CAAC,GACZ;CACvB,IAAI,CAAC,0BAA0B,UAAU,OAAO,GAC9C,OAAO,EAAE,MAAM,OAAO;CAExB,MAAM,SAAS,cAAc,QAAQ;EACnC,SAAS;EACT,YAAY;EACZ,UAAU,eAAe,QAAQ;EACjC,YAAY;GAAE,SAAS,cAAc,QAAQ;GAAG,YAAY;EAAS;EACrE,SAAS,CAAC,CAAC,mBAAmB,OAAO,CAAC;EACtC,YAAY;CACd,CAAC;CACD,IAAI,CAAC,QAAQ,QAAQ,CAAC,OAAO,WAAA,yCAC3B,OAAO,EAAE,MAAM,OAAO;CAExB,OAAO;EACL,MAAM,OAAO;EACb,GAAI,OAAO,MAAM,EAAE,KAAK,OAAO,IAAuB,IAAI,CAAC;CAC7D;AACF"}
1
+ {"version":3,"file":"transform-DkcFn_tg.js","names":[],"sources":["../../bitfab-typescript-transform/src/transform.ts"],"sourcesContent":["import { type InputOptions, transformSync } from \"@babel/core\"\nimport bitfabBabelPlugin from \"./babelPlugin.js\"\nimport type { BitfabTransformOptions } from \"./transformOptions.js\"\nimport {\n AUTO_TRACE_TRANSFORM_MARKER,\n shouldTransformBitfabFile,\n sourceFilename,\n} from \"./transformOptions.js\"\n\nexport type { BitfabTransformOptions } from \"./transformOptions.js\"\n\ntype ParserPlugin = NonNullable<\n NonNullable<InputOptions[\"parserOpts\"]>[\"plugins\"]\n>[number]\n\nexport interface BitfabSourceMap {\n version: number\n sources: string[]\n names: string[]\n mappings: string\n file?: string\n sourceRoot?: string\n sourcesContent?: Array<string | null>\n}\n\nexport interface BitfabTransformResult {\n code: string\n map?: BitfabSourceMap\n}\n\nexport function parserPlugins(filename: string): ParserPlugin[] {\n const path = sourceFilename(filename)\n const typescript = /\\.[cm]?tsx?$/.test(path)\n const jsx = /\\.tsx$/.test(path) || /\\.[cm]?jsx?$/.test(path)\n return [\n ...(typescript ? ([\"typescript\"] as const) : []),\n ...(jsx ? ([\"jsx\"] as const) : []),\n \"decorators\",\n ]\n}\n\nexport function transformBitfabSource(\n source: string,\n filename: string,\n options: BitfabTransformOptions = {},\n): BitfabTransformResult {\n if (!shouldTransformBitfabFile(filename, options)) {\n return { code: source }\n }\n const result = transformSync(source, {\n babelrc: false,\n configFile: false,\n filename: sourceFilename(filename),\n parserOpts: { plugins: parserPlugins(filename), sourceType: \"module\" },\n plugins: [[bitfabBabelPlugin, options]],\n sourceMaps: true,\n })\n if (!result?.code || !result.metadata?.[AUTO_TRACE_TRANSFORM_MARKER]) {\n return { code: source }\n }\n return {\n code: result.code,\n ...(result.map ? { map: result.map as BitfabSourceMap } : {}),\n }\n}\n"],"mappings":";;;AA8BA,SAAgB,cAAc,UAAkC;CAC9D,MAAM,OAAO,eAAe,QAAQ;CACpC,MAAM,aAAa,eAAe,KAAK,IAAI;CAC3C,MAAM,MAAM,SAAS,KAAK,IAAI,KAAK,eAAe,KAAK,IAAI;CAC3D,OAAO;EACL,GAAI,aAAc,CAAC,YAAY,IAAc,CAAC;EAC9C,GAAI,MAAO,CAAC,KAAK,IAAc,CAAC;EAChC;CACF;AACF;AAEA,SAAgB,sBACd,QACA,UACA,UAAkC,CAAC,GACZ;CACvB,IAAI,CAAC,0BAA0B,UAAU,OAAO,GAC9C,OAAO,EAAE,MAAM,OAAO;CAExB,MAAM,SAAS,cAAc,QAAQ;EACnC,SAAS;EACT,YAAY;EACZ,UAAU,eAAe,QAAQ;EACjC,YAAY;GAAE,SAAS,cAAc,QAAQ;GAAG,YAAY;EAAS;EACrE,SAAS,CAAC,CAAC,mBAAmB,OAAO,CAAC;EACtC,YAAY;CACd,CAAC;CACD,IAAI,CAAC,QAAQ,QAAQ,CAAC,OAAO,WAAA,yCAC3B,OAAO,EAAE,MAAM,OAAO;CAExB,OAAO;EACL,MAAM,OAAO;EACb,GAAI,OAAO,MAAM,EAAE,KAAK,OAAO,IAAuB,IAAI,CAAC;CAC7D;AACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bitfab",
3
- "version": "0.66.0",
3
+ "version": "0.68.0",
4
4
  "description": "Bitfab client for provider-based API calls with local BAML execution",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -277,6 +277,7 @@
277
277
  "@langchain/core": "^1.2.17",
278
278
  "@langchain/langgraph": "^1.5.0",
279
279
  "@openai/agents": "^0.20.0",
280
+ "@typesafe-ai/sdk": "^0.7.0",
280
281
  "ai": "^7.0.138",
281
282
  "tsdown": "^0.23.1",
282
283
  "typescript": "^7.0.2"