@bitfab/sdk 0.75.0 → 0.76.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 (58) hide show
  1. package/dist/{autoTrace-kHOBg49M.js → autoTrace-BgN0zCQf.js} +565 -69
  2. package/dist/autoTrace-BgN0zCQf.js.map +1 -0
  3. package/dist/{autoTrace-DPWV1Xzr.cjs → autoTrace-pZKu5Nk2.cjs} +612 -68
  4. package/dist/autoTrace-pZKu5Nk2.cjs.map +1 -0
  5. package/dist/autoTrace.cjs +2 -1
  6. package/dist/autoTrace.d.cts +20 -24
  7. package/dist/autoTrace.d.ts +20 -24
  8. package/dist/autoTrace.js +1 -1
  9. package/dist/{babelPlugin-C0Im6AZ2.cjs → babelPlugin-BpEeVvk4.cjs} +73 -25
  10. package/dist/babelPlugin-BpEeVvk4.cjs.map +1 -0
  11. package/dist/{babelPlugin-hS2Hb2vt.js → babelPlugin-PgjdBuQe.js} +73 -25
  12. package/dist/babelPlugin-PgjdBuQe.js.map +1 -0
  13. package/dist/{http-BkL24D7v.cjs → http-CWOvmnGL.cjs} +3 -3
  14. package/dist/{http-BkL24D7v.cjs.map → http-CWOvmnGL.cjs.map} +1 -1
  15. package/dist/{http-Cotx6kLL.js → http-DeWpv44r.js} +3 -3
  16. package/dist/{http-Cotx6kLL.js.map → http-DeWpv44r.js.map} +1 -1
  17. package/dist/{index-V6ECPulQ.d.cts → index-Dx3MwCB4.d.cts} +263 -17
  18. package/dist/{index-V6ECPulQ.d.ts → index-Dx3MwCB4.d.ts} +263 -17
  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-DdE8cNOX.js → registryCommand-D1VgfJjC.js} +341 -46
  28. package/dist/registryCommand-D1VgfJjC.js.map +1 -0
  29. package/dist/replayCli.js +1 -1
  30. package/dist/seedCli.js +1 -1
  31. package/dist/{src-CrV0INwT.js → src-CFD_cP43.js} +64 -34
  32. package/dist/src-CFD_cP43.js.map +1 -0
  33. package/dist/{src-BJ5a-chk.cjs → src-CxsswRYd.cjs} +70 -40
  34. package/dist/src-CxsswRYd.cjs.map +1 -0
  35. package/dist/transform/babel.cjs +1 -1
  36. package/dist/transform/babel.d.cts +2 -9
  37. package/dist/transform/babel.d.ts +2 -9
  38. package/dist/transform/babel.js +1 -1
  39. package/dist/transform/loaderRuntime.cjs +2 -2
  40. package/dist/transform/loaderRuntime.js +2 -2
  41. package/dist/transform/nodeLoader.js +72 -24
  42. package/dist/transform/nodeLoader.js.map +1 -1
  43. package/dist/transform/swc.cjs +1 -1
  44. package/dist/transform/swc.js +1 -1
  45. package/dist/transform/unplugin.cjs +2 -2
  46. package/dist/transform/unplugin.js +2 -2
  47. package/dist/{transform-BL1fJW-C.js → transform-BhazCKOg.js} +2 -2
  48. package/dist/{transform-BL1fJW-C.js.map → transform-BhazCKOg.js.map} +1 -1
  49. package/dist/{transform-C4H7TKW-.cjs → transform-Cdg7CSbP.cjs} +2 -2
  50. package/dist/{transform-C4H7TKW-.cjs.map → transform-Cdg7CSbP.cjs.map} +1 -1
  51. package/package.json +1 -1
  52. package/dist/autoTrace-DPWV1Xzr.cjs.map +0 -1
  53. package/dist/autoTrace-kHOBg49M.js.map +0 -1
  54. package/dist/babelPlugin-C0Im6AZ2.cjs.map +0 -1
  55. package/dist/babelPlugin-hS2Hb2vt.js.map +0 -1
  56. package/dist/registryCommand-DdE8cNOX.js.map +0 -1
  57. package/dist/src-BJ5a-chk.cjs.map +0 -1
  58. package/dist/src-CrV0INwT.js.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-C0Im6AZ2.cjs");
5
+ const require_babelPlugin = require("../babelPlugin-BpEeVvk4.cjs");
6
6
  exports.default = require_babelPlugin.bitfabBabelPlugin;
@@ -9,20 +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
- recordedCallIdentifiers?: Map<RecordedClientCall, ReturnType<BabelTypesApi["identifier"]>>;
12
+ recordedCallIdentifiers?: Map<string, ReturnType<BabelTypesApi["identifier"]>>;
13
13
  definitions?: Array<ReturnType<BabelTypesApi["variableDeclaration"]>>;
14
14
  skipFile?: boolean;
15
15
  bamlGenerated?: boolean;
16
16
  usedRuntime?: boolean;
17
17
  usedWrapper?: boolean;
18
- usedRecordedCalls?: Set<RecordedClientCall>;
19
- }
20
- interface RecordedClientCall {
21
- method: string;
22
- runtimeExport: string;
23
- identifierHint: string;
24
- receiverHint: string;
25
- matchesReceiver: (receiver: BabelTypes.Expression, types: BabelTypesApi) => boolean;
18
+ usedRecordedCalls?: Set<string>;
26
19
  }
27
20
  /**
28
21
  * Babel adapter for Bitfab's experimental automatic call-span runtime.
@@ -9,20 +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
- recordedCallIdentifiers?: Map<RecordedClientCall, ReturnType<BabelTypesApi["identifier"]>>;
12
+ recordedCallIdentifiers?: Map<string, ReturnType<BabelTypesApi["identifier"]>>;
13
13
  definitions?: Array<ReturnType<BabelTypesApi["variableDeclaration"]>>;
14
14
  skipFile?: boolean;
15
15
  bamlGenerated?: boolean;
16
16
  usedRuntime?: boolean;
17
17
  usedWrapper?: boolean;
18
- usedRecordedCalls?: Set<RecordedClientCall>;
19
- }
20
- interface RecordedClientCall {
21
- method: string;
22
- runtimeExport: string;
23
- identifierHint: string;
24
- receiverHint: string;
25
- matchesReceiver: (receiver: BabelTypes.Expression, types: BabelTypesApi) => boolean;
18
+ usedRecordedCalls?: Set<string>;
26
19
  }
27
20
  /**
28
21
  * Babel adapter for Bitfab's experimental automatic call-span runtime.
@@ -1 +1 @@
1
- export { t as default } from "../babelPlugin-hS2Hb2vt.js";
1
+ export { t as default } from "../babelPlugin-PgjdBuQe.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-C0Im6AZ2.cjs");
28
- const require_transform = require("../transform-C4H7TKW-.cjs");
27
+ const require_babelPlugin = require("../babelPlugin-BpEeVvk4.cjs");
28
+ const require_transform = require("../transform-Cdg7CSbP.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-hS2Hb2vt.js";
2
- import { t as parserPlugins } from "../transform-BL1fJW-C.js";
1
+ import { i as sourceFilename, r as shouldTransformBitfabFile, t as bitfabBabelPlugin } from "../babelPlugin-PgjdBuQe.js";
2
+ import { t as parserPlugins } from "../transform-BhazCKOg.js";
3
3
  import { transformFromAstSync, transformSync } from "@babel/core";
4
4
  import { dirname } from "path";
5
5
  import decoratorsPlugin from "@babel/plugin-proposal-decorators";
@@ -173,45 +173,88 @@ function isMessagesReceiver(receiver, types) {
173
173
  function isResponsesReceiver(receiver, types) {
174
174
  return isNamedMember(receiver, "responses", types);
175
175
  }
176
+ function isEmbeddingsReceiver(receiver, types) {
177
+ return isNamedMember(receiver, "embeddings", types);
178
+ }
179
+ function isTranscriptionsReceiver(receiver, types) {
180
+ return isNamedMember(receiver, "transcriptions", types) && isNamedMember(receiver.object, "audio", types);
181
+ }
182
+ function isModelsReceiver(receiver, types) {
183
+ return isNamedMember(receiver, "models", types);
184
+ }
185
+ const CLIENT_CALL_RUNTIME = {
186
+ runtimeExport: "__bitfabAutoClientCall",
187
+ identifierHint: "bitfabAutoClientCall",
188
+ receiverHint: "bitfabClientCallReceiver"
189
+ };
176
190
  const RECORDED_CLIENT_CALLS = [
177
191
  {
178
- method: JEV_METHOD,
192
+ methods: [JEV_METHOD],
179
193
  runtimeExport: "__bitfabAutoJev",
180
194
  identifierHint: "bitfabAutoJev",
181
195
  receiverHint: "bitfabJevReceiver",
182
196
  matchesReceiver: () => true
183
197
  },
184
198
  {
185
- method: "create",
186
- runtimeExport: "__bitfabAutoOpenRouter",
187
- identifierHint: "bitfabAutoOpenRouter",
188
- receiverHint: "bitfabOpenRouterReceiver",
199
+ ...CLIENT_CALL_RUNTIME,
200
+ endpoint: "chat.completions",
201
+ methods: [
202
+ "create",
203
+ "parse",
204
+ "stream"
205
+ ],
189
206
  matchesReceiver: isChatCompletionsReceiver
190
207
  },
191
208
  {
192
- method: "create",
193
- runtimeExport: "__bitfabAutoAnthropic",
194
- identifierHint: "bitfabAutoAnthropic",
195
- receiverHint: "bitfabAnthropicReceiver",
209
+ ...CLIENT_CALL_RUNTIME,
210
+ endpoint: "embeddings",
211
+ methods: ["create"],
212
+ matchesReceiver: isEmbeddingsReceiver
213
+ },
214
+ {
215
+ ...CLIENT_CALL_RUNTIME,
216
+ endpoint: "audio.transcriptions",
217
+ methods: ["create"],
218
+ matchesReceiver: isTranscriptionsReceiver
219
+ },
220
+ {
221
+ ...CLIENT_CALL_RUNTIME,
222
+ endpoint: "messages",
223
+ methods: [
224
+ "create",
225
+ "parse",
226
+ "stream"
227
+ ],
196
228
  matchesReceiver: isMessagesReceiver
197
229
  },
198
230
  {
199
- method: "create",
200
- runtimeExport: "__bitfabAutoOpenAIResponses",
201
- identifierHint: "bitfabAutoOpenAIResponses",
202
- receiverHint: "bitfabOpenAIResponsesReceiver",
231
+ ...CLIENT_CALL_RUNTIME,
232
+ endpoint: "responses",
233
+ methods: [
234
+ "create",
235
+ "parse",
236
+ "stream"
237
+ ],
203
238
  matchesReceiver: isResponsesReceiver
239
+ },
240
+ {
241
+ ...CLIENT_CALL_RUNTIME,
242
+ endpoint: "models",
243
+ methods: ["generateContent", "generateContentStream"],
244
+ matchesReceiver: isModelsReceiver
204
245
  }
205
246
  ];
247
+ const RECORDED_CALL_RUNTIMES = [...new Map(RECORDED_CLIENT_CALLS.map((call) => [call.runtimeExport, call])).values()];
206
248
  function recordedCallTarget(node, types) {
207
249
  const callee = node.callee;
208
250
  if (!(types.isMemberExpression(callee) || types.isOptionalMemberExpression(callee)) || callee.computed || !types.isIdentifier(callee.property) || types.isSuper(callee.object)) return null;
209
251
  const method = callee.property.name;
210
252
  const receiver = callee.object;
211
- const call = RECORDED_CLIENT_CALLS.find((candidate) => candidate.method === method && candidate.matchesReceiver(receiver, types));
253
+ const call = RECORDED_CLIENT_CALLS.find((candidate) => candidate.methods.includes(method) && candidate.matchesReceiver(receiver, types));
212
254
  return call === void 0 ? null : {
213
255
  call,
214
- receiver
256
+ receiver,
257
+ method
215
258
  };
216
259
  }
217
260
  function isOptionalChain(node, types) {
@@ -225,9 +268,9 @@ function rewriteRecordedClientCall(path, state, types) {
225
268
  if (state.skipFile || state.bamlGenerated) return;
226
269
  const node = path.node;
227
270
  const target = recordedCallTarget(node, types);
228
- const identifier = target === null ? void 0 : state.recordedCallIdentifiers?.get(target.call);
271
+ const identifier = target === null ? void 0 : state.recordedCallIdentifiers?.get(target.call.runtimeExport);
229
272
  if (target === null || identifier === void 0) return;
230
- const { call: recordedCall, receiver } = target;
273
+ const { call: recordedCall, receiver, method } = target;
231
274
  const optionalReceiver = types.isOptionalMemberExpression(node.callee) && node.callee.optional;
232
275
  const optionalMethod = types.isOptionalCallExpression(node) && node.optional;
233
276
  if (types.isOptionalCallExpression(node)) {
@@ -236,16 +279,21 @@ function rewriteRecordedClientCall(path, state, types) {
236
279
  const guarded = optionalReceiver || optionalMethod;
237
280
  const receiverReference = guarded && !path.scope.isStatic(receiver) ? path.scope.generateDeclaredUidIdentifier(recordedCall.receiverHint) : null;
238
281
  const receiverValue = () => receiverReference === null ? types.cloneNode(receiver) : types.cloneNode(receiverReference);
239
- const call = types.callExpression(types.cloneNode(identifier), [receiverValue(), ...node.arguments]);
282
+ const call = types.callExpression(types.cloneNode(identifier), recordedCall.endpoint === void 0 ? [receiverValue(), ...node.arguments] : [
283
+ types.stringLiteral(recordedCall.endpoint),
284
+ receiverValue(),
285
+ types.stringLiteral(method),
286
+ ...node.arguments
287
+ ]);
240
288
  state.usedRuntime = true;
241
- state.usedRecordedCalls?.add(recordedCall);
289
+ state.usedRecordedCalls?.add(recordedCall.runtimeExport);
242
290
  if (!guarded) {
243
291
  path.replaceWith(call);
244
292
  return;
245
293
  }
246
294
  const firstReceiver = receiverReference === null ? types.cloneNode(receiver) : types.assignmentExpression("=", types.cloneNode(receiverReference), receiver);
247
295
  const missing = (value) => types.binaryExpression("==", value, types.nullLiteral());
248
- const methodOf = (value) => types.memberExpression(value, types.identifier(recordedCall.method));
296
+ const methodOf = (value) => types.memberExpression(value, types.identifier(method));
249
297
  const test = optionalReceiver ? optionalMethod ? types.logicalExpression("||", missing(firstReceiver), missing(methodOf(receiverValue()))) : missing(firstReceiver) : missing(methodOf(firstReceiver));
250
298
  path.replaceWith(types.conditionalExpression(test, types.unaryExpression("void", types.numericLiteral(0)), call));
251
299
  }
@@ -260,7 +308,7 @@ function bitfabBabelPlugin(api) {
260
308
  state.runtimeIdentifier = path.scope.generateUidIdentifier("bitfabAutoSpan");
261
309
  state.activeIdentifier = path.scope.generateUidIdentifier("bitfabAutoTraceActive");
262
310
  state.wrapperIdentifier = path.scope.generateUidIdentifier("bitfabAutoWrap");
263
- state.recordedCallIdentifiers = new Map(RECORDED_CLIENT_CALLS.map((call) => [call, path.scope.generateUidIdentifier(call.identifierHint)]));
311
+ state.recordedCallIdentifiers = new Map(RECORDED_CALL_RUNTIMES.map((call) => [call.runtimeExport, path.scope.generateUidIdentifier(call.identifierHint)]));
264
312
  state.bamlGenerated = isBamlGeneratedSource(state.file.code ?? "");
265
313
  state.definitions = [];
266
314
  state.usedRuntime = false;
@@ -275,9 +323,9 @@ function bitfabBabelPlugin(api) {
275
323
  types.importSpecifier(state.runtimeIdentifier, types.identifier("__bitfabAutoSpan")),
276
324
  types.importSpecifier(state.activeIdentifier, types.identifier("__bitfabAutoTraceActive")),
277
325
  ...state.usedWrapper ? [types.importSpecifier(state.wrapperIdentifier, types.identifier("__bitfabAutoWrap"))] : [],
278
- ...RECORDED_CLIENT_CALLS.flatMap((call) => {
279
- const identifier = state.recordedCallIdentifiers?.get(call);
280
- return state.usedRecordedCalls?.has(call) && identifier ? [types.importSpecifier(identifier, types.identifier(call.runtimeExport))] : [];
326
+ ...RECORDED_CALL_RUNTIMES.flatMap((call) => {
327
+ const identifier = state.recordedCallIdentifiers?.get(call.runtimeExport);
328
+ return state.usedRecordedCalls?.has(call.runtimeExport) && identifier ? [types.importSpecifier(identifier, types.identifier(call.runtimeExport))] : [];
281
329
  })
282
330
  ], types.stringLiteral(state.opts.runtimeModule ?? "@bitfab/sdk/auto")),
283
331
  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)))]),
@@ -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 recordedCallIdentifiers?: Map<\n RecordedClientCall,\n ReturnType<BabelTypesApi[\"identifier\"]>\n >\n definitions?: Array<ReturnType<BabelTypesApi[\"variableDeclaration\"]>>\n skipFile?: boolean\n bamlGenerated?: boolean\n usedRuntime?: boolean\n usedWrapper?: boolean\n usedRecordedCalls?: Set<RecordedClientCall>\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 RecordedCallNode =\n | BabelTypes.CallExpression\n | BabelTypes.OptionalCallExpression\n\ninterface RecordedClientCall {\n method: string\n runtimeExport: string\n identifierHint: string\n receiverHint: string\n matchesReceiver: (\n receiver: BabelTypes.Expression,\n types: BabelTypesApi,\n ) => boolean\n}\n\nfunction isNamedMember(\n node: BabelTypes.Node,\n name: string,\n types: BabelTypesApi,\n): node is BabelTypes.MemberExpression | BabelTypes.OptionalMemberExpression {\n return (\n (types.isMemberExpression(node) ||\n types.isOptionalMemberExpression(node)) &&\n !node.computed &&\n types.isIdentifier(node.property, { name })\n )\n}\n\nfunction isChatCompletionsReceiver(\n receiver: BabelTypes.Expression,\n types: BabelTypesApi,\n): boolean {\n return (\n isNamedMember(receiver, \"completions\", types) &&\n isNamedMember(receiver.object, \"chat\", types)\n )\n}\n\nfunction isMessagesReceiver(\n receiver: BabelTypes.Expression,\n types: BabelTypesApi,\n): boolean {\n return (\n isNamedMember(receiver, \"messages\", types) &&\n !isNamedMember(receiver.object, \"beta\", types)\n )\n}\n\nfunction isResponsesReceiver(\n receiver: BabelTypes.Expression,\n types: BabelTypesApi,\n): boolean {\n return isNamedMember(receiver, \"responses\", types)\n}\n\nconst RECORDED_CLIENT_CALLS: readonly RecordedClientCall[] = [\n {\n method: JEV_METHOD,\n runtimeExport: \"__bitfabAutoJev\",\n identifierHint: \"bitfabAutoJev\",\n receiverHint: \"bitfabJevReceiver\",\n matchesReceiver: () => true,\n },\n {\n method: \"create\",\n runtimeExport: \"__bitfabAutoOpenRouter\",\n identifierHint: \"bitfabAutoOpenRouter\",\n receiverHint: \"bitfabOpenRouterReceiver\",\n matchesReceiver: isChatCompletionsReceiver,\n },\n {\n method: \"create\",\n runtimeExport: \"__bitfabAutoAnthropic\",\n identifierHint: \"bitfabAutoAnthropic\",\n receiverHint: \"bitfabAnthropicReceiver\",\n matchesReceiver: isMessagesReceiver,\n },\n {\n method: \"create\",\n runtimeExport: \"__bitfabAutoOpenAIResponses\",\n identifierHint: \"bitfabAutoOpenAIResponses\",\n receiverHint: \"bitfabOpenAIResponsesReceiver\",\n matchesReceiver: isResponsesReceiver,\n },\n]\n\nfunction recordedCallTarget(\n node: RecordedCallNode,\n types: BabelTypesApi,\n): { call: RecordedClientCall; receiver: 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) ||\n types.isSuper(callee.object)\n ) {\n return null\n }\n const method = callee.property.name\n const receiver = callee.object\n const call = RECORDED_CLIENT_CALLS.find(\n (candidate) =>\n candidate.method === method && candidate.matchesReceiver(receiver, types),\n )\n return call === undefined ? null : { call, receiver }\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 rewriteRecordedClientCall(\n path: NodePath<RecordedCallNode>,\n state: BitfabPluginState,\n types: BabelTypesApi,\n): void {\n if (state.skipFile || state.bamlGenerated) {\n return\n }\n const node = path.node\n const target = recordedCallTarget(node, types)\n const identifier =\n target === null\n ? undefined\n : state.recordedCallIdentifiers?.get(target.call)\n if (target === null || identifier === undefined) {\n return\n }\n const { call: recordedCall, receiver } = target\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(recordedCall.receiverHint)\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(identifier), [\n receiverValue(),\n ...node.arguments,\n ])\n state.usedRuntime = true\n state.usedRecordedCalls?.add(recordedCall)\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(recordedCall.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.recordedCallIdentifiers = new Map(\n RECORDED_CLIENT_CALLS.map((call) => [\n call,\n path.scope.generateUidIdentifier(call.identifierHint),\n ]),\n )\n state.bamlGenerated = isBamlGeneratedSource(state.file.code ?? \"\")\n state.definitions = []\n state.usedRuntime = false\n state.usedWrapper = false\n state.usedRecordedCalls = new Set()\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 ...RECORDED_CLIENT_CALLS.flatMap((call) => {\n const identifier = state.recordedCallIdentifiers?.get(call)\n return state.usedRecordedCalls?.has(call) && identifier\n ? [\n types.importSpecifier(\n identifier,\n types.identifier(call.runtimeExport),\n ),\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 if (recordedCallTarget(path.node, types) !== null) {\n rewriteRecordedClientCall(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 rewriteRecordedClientCall(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/sdk/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/sdk/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 recordedCallIdentifiers?: Map<string, ReturnType<BabelTypesApi[\"identifier\"]>>\n definitions?: Array<ReturnType<BabelTypesApi[\"variableDeclaration\"]>>\n skipFile?: boolean\n bamlGenerated?: boolean\n usedRuntime?: boolean\n usedWrapper?: boolean\n usedRecordedCalls?: Set<string>\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 RecordedCallNode =\n | BabelTypes.CallExpression\n | BabelTypes.OptionalCallExpression\n\ninterface RecordedClientCall {\n methods: readonly string[]\n endpoint?: string\n runtimeExport: string\n identifierHint: string\n receiverHint: string\n matchesReceiver: (\n receiver: BabelTypes.Expression,\n types: BabelTypesApi,\n ) => boolean\n}\n\nfunction isNamedMember(\n node: BabelTypes.Node,\n name: string,\n types: BabelTypesApi,\n): node is BabelTypes.MemberExpression | BabelTypes.OptionalMemberExpression {\n return (\n (types.isMemberExpression(node) ||\n types.isOptionalMemberExpression(node)) &&\n !node.computed &&\n types.isIdentifier(node.property, { name })\n )\n}\n\nfunction isChatCompletionsReceiver(\n receiver: BabelTypes.Expression,\n types: BabelTypesApi,\n): boolean {\n return (\n isNamedMember(receiver, \"completions\", types) &&\n isNamedMember(receiver.object, \"chat\", types)\n )\n}\n\nfunction isMessagesReceiver(\n receiver: BabelTypes.Expression,\n types: BabelTypesApi,\n): boolean {\n return (\n isNamedMember(receiver, \"messages\", types) &&\n !isNamedMember(receiver.object, \"beta\", types)\n )\n}\n\nfunction isResponsesReceiver(\n receiver: BabelTypes.Expression,\n types: BabelTypesApi,\n): boolean {\n return isNamedMember(receiver, \"responses\", types)\n}\n\nfunction isEmbeddingsReceiver(\n receiver: BabelTypes.Expression,\n types: BabelTypesApi,\n): boolean {\n return isNamedMember(receiver, \"embeddings\", types)\n}\n\nfunction isTranscriptionsReceiver(\n receiver: BabelTypes.Expression,\n types: BabelTypesApi,\n): boolean {\n return (\n isNamedMember(receiver, \"transcriptions\", types) &&\n isNamedMember(receiver.object, \"audio\", types)\n )\n}\n\nfunction isModelsReceiver(\n receiver: BabelTypes.Expression,\n types: BabelTypesApi,\n): boolean {\n return isNamedMember(receiver, \"models\", types)\n}\n\nconst CLIENT_CALL_RUNTIME = {\n runtimeExport: \"__bitfabAutoClientCall\",\n identifierHint: \"bitfabAutoClientCall\",\n receiverHint: \"bitfabClientCallReceiver\",\n}\n\nconst RECORDED_CLIENT_CALLS: readonly RecordedClientCall[] = [\n {\n methods: [JEV_METHOD],\n runtimeExport: \"__bitfabAutoJev\",\n identifierHint: \"bitfabAutoJev\",\n receiverHint: \"bitfabJevReceiver\",\n matchesReceiver: () => true,\n },\n {\n ...CLIENT_CALL_RUNTIME,\n endpoint: \"chat.completions\",\n methods: [\"create\", \"parse\", \"stream\"],\n matchesReceiver: isChatCompletionsReceiver,\n },\n {\n ...CLIENT_CALL_RUNTIME,\n endpoint: \"embeddings\",\n methods: [\"create\"],\n matchesReceiver: isEmbeddingsReceiver,\n },\n {\n ...CLIENT_CALL_RUNTIME,\n endpoint: \"audio.transcriptions\",\n methods: [\"create\"],\n matchesReceiver: isTranscriptionsReceiver,\n },\n {\n ...CLIENT_CALL_RUNTIME,\n endpoint: \"messages\",\n methods: [\"create\", \"parse\", \"stream\"],\n matchesReceiver: isMessagesReceiver,\n },\n {\n ...CLIENT_CALL_RUNTIME,\n endpoint: \"responses\",\n methods: [\"create\", \"parse\", \"stream\"],\n matchesReceiver: isResponsesReceiver,\n },\n {\n ...CLIENT_CALL_RUNTIME,\n endpoint: \"models\",\n methods: [\"generateContent\", \"generateContentStream\"],\n matchesReceiver: isModelsReceiver,\n },\n]\n\nconst RECORDED_CALL_RUNTIMES = [\n ...new Map(\n RECORDED_CLIENT_CALLS.map((call) => [call.runtimeExport, call]),\n ).values(),\n]\n\nfunction recordedCallTarget(\n node: RecordedCallNode,\n types: BabelTypesApi,\n): {\n call: RecordedClientCall\n receiver: BabelTypes.Expression\n method: string\n} | 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) ||\n types.isSuper(callee.object)\n ) {\n return null\n }\n const method = callee.property.name\n const receiver = callee.object\n const call = RECORDED_CLIENT_CALLS.find(\n (candidate) =>\n candidate.methods.includes(method) &&\n candidate.matchesReceiver(receiver, types),\n )\n return call === undefined ? null : { call, receiver, method }\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 rewriteRecordedClientCall(\n path: NodePath<RecordedCallNode>,\n state: BitfabPluginState,\n types: BabelTypesApi,\n): void {\n if (state.skipFile || state.bamlGenerated) {\n return\n }\n const node = path.node\n const target = recordedCallTarget(node, types)\n const identifier =\n target === null\n ? undefined\n : state.recordedCallIdentifiers?.get(target.call.runtimeExport)\n if (target === null || identifier === undefined) {\n return\n }\n const { call: recordedCall, receiver, method } = target\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(recordedCall.receiverHint)\n : null\n const receiverValue = (): BabelTypes.Expression =>\n receiverReference === null\n ? types.cloneNode(receiver)\n : types.cloneNode(receiverReference)\n const call = types.callExpression(\n types.cloneNode(identifier),\n recordedCall.endpoint === undefined\n ? [receiverValue(), ...node.arguments]\n : [\n types.stringLiteral(recordedCall.endpoint),\n receiverValue(),\n types.stringLiteral(method),\n ...node.arguments,\n ],\n )\n state.usedRuntime = true\n state.usedRecordedCalls?.add(recordedCall.runtimeExport)\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(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.recordedCallIdentifiers = new Map(\n RECORDED_CALL_RUNTIMES.map((call) => [\n call.runtimeExport,\n path.scope.generateUidIdentifier(call.identifierHint),\n ]),\n )\n state.bamlGenerated = isBamlGeneratedSource(state.file.code ?? \"\")\n state.definitions = []\n state.usedRuntime = false\n state.usedWrapper = false\n state.usedRecordedCalls = new Set()\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 ...RECORDED_CALL_RUNTIMES.flatMap((call) => {\n const identifier = state.recordedCallIdentifiers?.get(\n call.runtimeExport,\n )\n return state.usedRecordedCalls?.has(call.runtimeExport) &&\n identifier\n ? [\n types.importSpecifier(\n identifier,\n types.identifier(call.runtimeExport),\n ),\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 if (recordedCallTarget(path.node, types) !== null) {\n rewriteRecordedClientCall(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 rewriteRecordedClientCall(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/sdk/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/sdk/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-C4H7TKW-.cjs");
5
+ const require_transform = require("../transform-Cdg7CSbP.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-BL1fJW-C.js";
1
+ import { n as transformBitfabSource } from "../transform-BhazCKOg.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-C0Im6AZ2.cjs");
6
- const require_transform = require("../transform-C4H7TKW-.cjs");
5
+ const require_babelPlugin = require("../babelPlugin-BpEeVvk4.cjs");
6
+ const require_transform = require("../transform-Cdg7CSbP.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-hS2Hb2vt.js";
2
- import { n as transformBitfabSource } from "../transform-BL1fJW-C.js";
1
+ import { r as shouldTransformBitfabFile } from "../babelPlugin-PgjdBuQe.js";
2
+ import { n as transformBitfabSource } from "../transform-BhazCKOg.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
- import { i as sourceFilename, r as shouldTransformBitfabFile, t as bitfabBabelPlugin } from "./babelPlugin-hS2Hb2vt.js";
1
+ import { i as sourceFilename, r as shouldTransformBitfabFile, t as bitfabBabelPlugin } from "./babelPlugin-PgjdBuQe.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-BL1fJW-C.js.map
36
+ //# sourceMappingURL=transform-BhazCKOg.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transform-BL1fJW-C.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-BhazCKOg.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,4 +1,4 @@
1
- const require_babelPlugin = require("./babelPlugin-C0Im6AZ2.cjs");
1
+ const require_babelPlugin = require("./babelPlugin-BpEeVvk4.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-C4H7TKW-.cjs.map
47
+ //# sourceMappingURL=transform-Cdg7CSbP.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"transform-C4H7TKW-.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-Cdg7CSbP.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"}