bitfab 0.65.1 → 0.65.4

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 (84) hide show
  1. package/cloudReplay.py +207 -30
  2. package/dist/{chunk-HW4ZKFYV.js → chunk-3266UYG5.js} +33 -30
  3. package/dist/chunk-3266UYG5.js.map +1 -0
  4. package/dist/{chunk-VG54N52W.js → chunk-32BQRD37.js} +2 -2
  5. package/dist/{chunk-VG54N52W.js.map → chunk-32BQRD37.js.map} +1 -1
  6. package/dist/{chunk-GS7FUQ6U.js → chunk-6WMY7SWO.js} +2 -2
  7. package/dist/{chunk-GS7FUQ6U.js.map → chunk-6WMY7SWO.js.map} +1 -1
  8. package/dist/{chunk-U2GQPMOK.js → chunk-7MT7ODVG.js} +2 -2
  9. package/dist/{chunk-4SBOBQGH.js → chunk-OJMUXZBC.js} +4 -4
  10. package/dist/{chunk-3FTI76L6.js → chunk-OPOYSRYU.js} +2 -2
  11. package/dist/{chunk-VS36LW4L.js → chunk-PTCLRG4E.js} +3 -3
  12. package/dist/{chunk-P7JUVRYZ.js → chunk-YVJAOGHE.js} +2 -2
  13. package/dist/{chunk-LXBV37XY.js → chunk-ZG6SHKEF.js} +11 -3
  14. package/dist/chunk-ZG6SHKEF.js.map +1 -0
  15. package/dist/{http-FN74JEHE.js → http-2PRP3HWS.js} +2 -2
  16. package/dist/{http-G32WE67W.js → http-IJB2G6EO.js} +2 -2
  17. package/dist/index.cjs +28 -25
  18. package/dist/index.cjs.map +1 -1
  19. package/dist/index.d.cts +18 -1
  20. package/dist/index.d.ts +18 -1
  21. package/dist/index.js +3 -3
  22. package/dist/node.cjs +28 -25
  23. package/dist/node.cjs.map +1 -1
  24. package/dist/node.js +3 -3
  25. package/dist/{replay-FHHOJPX7.js → replay-J5SGUAGH.js} +3 -3
  26. package/dist/{replay-SVHAY4S6.js → replay-YMNBRGZ7.js} +3 -3
  27. package/dist/replayCli.js +3 -3
  28. package/dist/seedCli.js +3 -3
  29. package/dist/transform/babel.cjs +10 -2
  30. package/dist/transform/babel.cjs.map +1 -1
  31. package/dist/transform/babel.js +1 -1
  32. package/dist/transform/bun.cjs +10 -2
  33. package/dist/transform/bun.cjs.map +1 -1
  34. package/dist/transform/bun.js +3 -3
  35. package/dist/transform/esbuild.cjs +10 -2
  36. package/dist/transform/esbuild.cjs.map +1 -1
  37. package/dist/transform/esbuild.js +3 -3
  38. package/dist/transform/loaderRuntime.cjs +10 -2
  39. package/dist/transform/loaderRuntime.cjs.map +1 -1
  40. package/dist/transform/loaderRuntime.js +2 -2
  41. package/dist/transform/nest.cjs +10 -2
  42. package/dist/transform/nest.cjs.map +1 -1
  43. package/dist/transform/nest.js +3 -3
  44. package/dist/transform/next.cjs +10 -2
  45. package/dist/transform/next.cjs.map +1 -1
  46. package/dist/transform/next.js +3 -3
  47. package/dist/transform/nodeLoader.js +10 -2
  48. package/dist/transform/nodeLoader.js.map +1 -1
  49. package/dist/transform/rolldown.cjs +10 -2
  50. package/dist/transform/rolldown.cjs.map +1 -1
  51. package/dist/transform/rolldown.js +3 -3
  52. package/dist/transform/rollup.cjs +10 -2
  53. package/dist/transform/rollup.cjs.map +1 -1
  54. package/dist/transform/rollup.js +3 -3
  55. package/dist/transform/rsbuild.cjs +10 -2
  56. package/dist/transform/rsbuild.cjs.map +1 -1
  57. package/dist/transform/rsbuild.js +3 -3
  58. package/dist/transform/rspack.cjs +10 -2
  59. package/dist/transform/rspack.cjs.map +1 -1
  60. package/dist/transform/rspack.js +3 -3
  61. package/dist/transform/swc.cjs +10 -2
  62. package/dist/transform/swc.cjs.map +1 -1
  63. package/dist/transform/swc.js +2 -2
  64. package/dist/transform/unplugin.cjs +10 -2
  65. package/dist/transform/unplugin.cjs.map +1 -1
  66. package/dist/transform/unplugin.js +3 -3
  67. package/dist/transform/vite.cjs +10 -2
  68. package/dist/transform/vite.cjs.map +1 -1
  69. package/dist/transform/vite.js +3 -3
  70. package/dist/transform/webpack.cjs +10 -2
  71. package/dist/transform/webpack.cjs.map +1 -1
  72. package/dist/transform/webpack.js +3 -3
  73. package/package.json +11 -11
  74. package/dist/chunk-HW4ZKFYV.js.map +0 -1
  75. package/dist/chunk-LXBV37XY.js.map +0 -1
  76. /package/dist/{chunk-U2GQPMOK.js.map → chunk-7MT7ODVG.js.map} +0 -0
  77. /package/dist/{chunk-4SBOBQGH.js.map → chunk-OJMUXZBC.js.map} +0 -0
  78. /package/dist/{chunk-3FTI76L6.js.map → chunk-OPOYSRYU.js.map} +0 -0
  79. /package/dist/{chunk-VS36LW4L.js.map → chunk-PTCLRG4E.js.map} +0 -0
  80. /package/dist/{chunk-P7JUVRYZ.js.map → chunk-YVJAOGHE.js.map} +0 -0
  81. /package/dist/{http-FN74JEHE.js.map → http-2PRP3HWS.js.map} +0 -0
  82. /package/dist/{http-G32WE67W.js.map → http-IJB2G6EO.js.map} +0 -0
  83. /package/dist/{replay-FHHOJPX7.js.map → replay-J5SGUAGH.js.map} +0 -0
  84. /package/dist/{replay-SVHAY4S6.js.map → replay-YMNBRGZ7.js.map} +0 -0
@@ -9,7 +9,7 @@ import {
9
9
  unrefTimer,
10
10
  warnOnce,
11
11
  writeOnce
12
- } from "./chunk-VG54N52W.js";
12
+ } from "./chunk-32BQRD37.js";
13
13
 
14
14
  // src/codeChange.ts
15
15
  var MAX_FILES = 60;
@@ -1909,4 +1909,4 @@ export {
1909
1909
  warnJudgeAssertionsDeprecated,
1910
1910
  replay
1911
1911
  };
1912
- //# sourceMappingURL=chunk-U2GQPMOK.js.map
1912
+ //# sourceMappingURL=chunk-7MT7ODVG.js.map
@@ -6,13 +6,13 @@ import {
6
6
  serializeReplayResult,
7
7
  warnJudgeAssertionsDeprecated,
8
8
  withCliFlags
9
- } from "./chunk-U2GQPMOK.js";
9
+ } from "./chunk-7MT7ODVG.js";
10
10
  import {
11
11
  BitfabError,
12
12
  asyncStorageReady,
13
13
  createAsyncLocalStorage,
14
14
  warnOnce
15
- } from "./chunk-VG54N52W.js";
15
+ } from "./chunk-32BQRD37.js";
16
16
 
17
17
  // src/autoTrace.ts
18
18
  var autoTraceGlobal = globalThis;
@@ -458,7 +458,7 @@ async function seedFromRegistry(registry, pipeline, cases, options = {}) {
458
458
  sessionId: seedCase.sessionId
459
459
  })
460
460
  );
461
- const { flushTraces } = await import("./http-G32WE67W.js");
461
+ const { flushTraces } = await import("./http-IJB2G6EO.js");
462
462
  await flushTraces(3e4);
463
463
  return { pipeline, traceFunctionKey, traceIds };
464
464
  }
@@ -1173,4 +1173,4 @@ export {
1173
1173
  runRegistryMain,
1174
1174
  runIfEntrypoint
1175
1175
  };
1176
- //# sourceMappingURL=chunk-4SBOBQGH.js.map
1176
+ //# sourceMappingURL=chunk-OJMUXZBC.js.map
@@ -8,7 +8,7 @@ import {
8
8
  replayContextReady,
9
9
  runWithReplayContext,
10
10
  unrefTimer
11
- } from "./chunk-GS7FUQ6U.js";
11
+ } from "./chunk-6WMY7SWO.js";
12
12
  import {
13
13
  runWithCaptureSuppressed,
14
14
  warnOnce,
@@ -2057,4 +2057,4 @@ export {
2057
2057
  warnJudgeAssertionsDeprecated,
2058
2058
  replay
2059
2059
  };
2060
- //# sourceMappingURL=chunk-3FTI76L6.js.map
2060
+ //# sourceMappingURL=chunk-OPOYSRYU.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  transformBitfabSource
3
- } from "./chunk-P7JUVRYZ.js";
3
+ } from "./chunk-YVJAOGHE.js";
4
4
  import {
5
5
  shouldTransformBitfabFile
6
- } from "./chunk-LXBV37XY.js";
6
+ } from "./chunk-ZG6SHKEF.js";
7
7
 
8
8
  // ../bitfab-typescript-transform/src/unplugin.ts
9
9
  import { createUnplugin } from "unplugin";
@@ -25,4 +25,4 @@ var bitfabTraceUnplugin = createUnplugin((options) => {
25
25
  export {
26
26
  bitfabTraceUnplugin
27
27
  };
28
- //# sourceMappingURL=chunk-VS36LW4L.js.map
28
+ //# sourceMappingURL=chunk-PTCLRG4E.js.map
@@ -3,7 +3,7 @@ import {
3
3
  bitfabBabelPlugin,
4
4
  shouldTransformBitfabFile,
5
5
  sourceFilename
6
- } from "./chunk-LXBV37XY.js";
6
+ } from "./chunk-ZG6SHKEF.js";
7
7
 
8
8
  // ../bitfab-typescript-transform/src/transform.ts
9
9
  import { transformSync } from "@babel/core";
@@ -42,4 +42,4 @@ export {
42
42
  parserPlugins,
43
43
  transformBitfabSource
44
44
  };
45
- //# sourceMappingURL=chunk-P7JUVRYZ.js.map
45
+ //# sourceMappingURL=chunk-YVJAOGHE.js.map
@@ -55,6 +55,12 @@ function functionName(path, types) {
55
55
  if (types.isObjectProperty(parent) && !parent.computed) {
56
56
  return propertyName(parent.key, types) ?? "anonymous";
57
57
  }
58
+ if (types.isClassProperty(parent) && !parent.computed) {
59
+ const name = propertyName(parent.key, types);
60
+ if (name) {
61
+ return name;
62
+ }
63
+ }
58
64
  const { line, column } = sourcePosition(path);
59
65
  return `anonymous-${line}-${column}`;
60
66
  }
@@ -111,10 +117,12 @@ function qualifiedFunctionName(path, types) {
111
117
  }
112
118
  function isTraceDecoratorRoot(path, types) {
113
119
  const node = path.node;
114
- if (!types.isClassMethod(node) && !types.isClassPrivateMethod(node)) {
120
+ const parent = path.parentPath?.node;
121
+ const decorated = types.isClassMethod(node) || types.isClassPrivateMethod(node) ? node : types.isClassProperty(parent) && parent.value === node ? parent : null;
122
+ if (!decorated) {
115
123
  return false;
116
124
  }
117
- return node.decorators?.some((decorator) => {
125
+ return decorated.decorators?.some((decorator) => {
118
126
  const expression = decorator.expression;
119
127
  if (!types.isCallExpression(expression)) {
120
128
  return false;
@@ -393,4 +401,4 @@ export {
393
401
  shouldTransformBitfabFile,
394
402
  bitfabBabelPlugin
395
403
  };
396
- //# sourceMappingURL=chunk-LXBV37XY.js.map
404
+ //# sourceMappingURL=chunk-ZG6SHKEF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../bitfab-typescript-transform/src/transformOptions.ts","../../bitfab-typescript-transform/src/babelPlugin.ts"],"sourcesContent":["export interface BitfabTransformOptions {\n /** Module that exports the automatic span runtime. */\n runtimeModule?: string\n /** Working directory removed from generated function IDs. */\n cwd?: string\n /** Return false to leave a file unchanged. */\n include?: (filename: string) => boolean\n}\n\nconst AUTO_TRACE_FUNCTION_ID_VERSION = \"ts-auto-v1\"\nexport const AUTO_TRACE_TRANSFORM_MARKER =\n \"__bitfab_auto_trace_transformed_v1__\"\n\nexport function autoTraceFunctionId(file: string, name: string): string {\n return `${AUTO_TRACE_FUNCTION_ID_VERSION}:${file}#${name}`\n}\n\nexport function sourceFilename(filename: string): string {\n return filename.replace(/\\\\/g, \"/\").split(/[?#]/, 1)[0] ?? \"\"\n}\n\nexport function autoTraceFilename(filename: string, cwd: string): string {\n const normalized = sourceFilename(filename)\n const normalizedCwd = cwd.replace(/\\\\/g, \"/\").replace(/\\/$/, \"\")\n return normalized.startsWith(`${normalizedCwd}/`)\n ? normalized.slice(normalizedCwd.length + 1)\n : normalized\n}\n\nexport function shouldTransformBitfabFile(\n filename: string,\n options: BitfabTransformOptions,\n): boolean {\n if (!filename) {\n return false\n }\n if (options.include && !options.include(filename)) {\n return false\n }\n\n const normalized = sourceFilename(filename)\n const normalizedCwd = options.cwd?.replace(/\\\\/g, \"/\").replace(/\\/$/, \"\")\n const isAbsolute =\n normalized.startsWith(\"/\") || /^[A-Za-z]:\\//.test(normalized)\n if (\n normalizedCwd &&\n isAbsolute &&\n normalized !== normalizedCwd &&\n !normalized.startsWith(`${normalizedCwd}/`)\n ) {\n return false\n }\n return (\n !normalized.includes(\"/node_modules/\") &&\n !normalized.endsWith(\".d.ts\") &&\n /\\.[cm]?[jt]sx?$/.test(normalized)\n )\n}\n","import type { NodePath, PluginObject, PluginPass } from \"@babel/core\"\nimport type * as BabelTypes from \"@babel/types\"\nimport type { BitfabTransformOptions } from \"./transformOptions.js\"\nimport {\n AUTO_TRACE_TRANSFORM_MARKER,\n autoTraceFilename,\n autoTraceFunctionId,\n shouldTransformBitfabFile,\n} from \"./transformOptions.js\"\n\ntype BabelTypesApi = typeof BabelTypes\n\ntype BitfabPluginOptions = BitfabTransformOptions\n\ninterface BitfabPluginState extends PluginPass {\n opts: BitfabPluginOptions\n runtimeIdentifier?: ReturnType<BabelTypesApi[\"identifier\"]>\n activeIdentifier?: ReturnType<BabelTypesApi[\"identifier\"]>\n wrapperIdentifier?: ReturnType<BabelTypesApi[\"identifier\"]>\n definitions?: Array<ReturnType<BabelTypesApi[\"variableDeclaration\"]>>\n skipFile?: boolean\n usedRuntime?: boolean\n usedWrapper?: boolean\n}\n\ninterface InstrumentedFunction {\n _bitfabInstrumented?: boolean\n}\n\nfunction propertyName(\n node: BabelTypes.Node | null | undefined,\n types: BabelTypesApi,\n): string | null {\n if (types.isIdentifier(node)) {\n return node.name\n }\n if (types.isStringLiteral(node)) {\n return node.value\n }\n return null\n}\n\nfunction functionName(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): string {\n const node = path.node\n if (types.isFunctionDeclaration(node) || types.isFunctionExpression(node)) {\n if (node.id) {\n return node.id.name\n }\n }\n\n if (\n (types.isClassMethod(node) || types.isObjectMethod(node)) &&\n !node.computed &&\n types.isIdentifier(node.key)\n ) {\n return node.key.name\n }\n\n const parent = path.parentPath?.node\n if (types.isVariableDeclarator(parent)) {\n return propertyName(parent.id, types) ?? \"anonymous\"\n }\n if (types.isObjectProperty(parent) && !parent.computed) {\n return propertyName(parent.key, types) ?? \"anonymous\"\n }\n if (types.isClassProperty(parent) && !parent.computed) {\n const name = propertyName(parent.key, types)\n if (name) {\n return name\n }\n }\n\n const { line, column } = sourcePosition(path)\n return `anonymous-${line}-${column}`\n}\n\nfunction isInstrumentableFunction(\n node: BabelTypes.Function,\n types: BabelTypesApi,\n): boolean {\n if (node.generator || types.isClassPrivateMethod(node)) {\n return false\n }\n return (\n !(types.isClassMethod(node) || types.isObjectMethod(node)) ||\n node.kind === \"method\"\n )\n}\n\nfunction sourcePosition(path: NodePath<BabelTypes.Function>): {\n line: number\n column: number\n} {\n const exportDeclaration = path.parentPath?.isExportDeclaration()\n ? path.parentPath.node\n : undefined\n const start = (exportDeclaration ?? path.node).loc?.start\n return { line: start?.line ?? 0, column: start?.column ?? 0 }\n}\n\nfunction qualifiedFunctionName(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): string {\n const ownName = functionName(path, types)\n if (ownName.startsWith(\"anonymous-\")) {\n return ownName\n }\n const scopes: string[] = []\n let ancestor: NodePath | null = path.parentPath\n while (ancestor) {\n if (ancestor.isFunction()) {\n if (!isInstrumentableFunction(ancestor.node, types)) {\n ancestor = ancestor.parentPath\n continue\n }\n const name = functionName(\n ancestor as NodePath<BabelTypes.Function>,\n types,\n )\n if (!name.startsWith(\"anonymous-\")) {\n scopes.unshift(name)\n }\n } else if (\n (ancestor.isClassDeclaration() || ancestor.isClassExpression()) &&\n ancestor.node.id\n ) {\n scopes.unshift(ancestor.node.id.name)\n } else if (ancestor.isObjectExpression()) {\n const parent = ancestor.parentPath?.node\n if (types.isVariableDeclarator(parent)) {\n const name = propertyName(parent.id, types)\n if (name) {\n scopes.unshift(name)\n }\n } else if (types.isObjectProperty(parent) && !parent.computed) {\n const name = propertyName(parent.key, types)\n if (name) {\n scopes.unshift(name)\n }\n }\n }\n ancestor = ancestor.parentPath\n }\n return [...scopes, ownName].join(\".\")\n}\n\nfunction isTraceDecoratorRoot(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): boolean {\n const node = path.node\n const parent = path.parentPath?.node\n const decorated =\n types.isClassMethod(node) || types.isClassPrivateMethod(node)\n ? node\n : types.isClassProperty(parent) && parent.value === node\n ? parent\n : null\n if (!decorated) {\n return false\n }\n\n return (\n decorated.decorators?.some((decorator) => {\n const expression = decorator.expression\n if (!types.isCallExpression(expression)) {\n return false\n }\n const callee = expression.callee\n return (\n types.isMemberExpression(callee) &&\n !callee.computed &&\n types.isIdentifier(callee.property, { name: \"trace\" })\n )\n }) ?? false\n )\n}\n\nfunction withNodeFunctionName(\n path: NodePath<BabelTypes.CallExpression>,\n types: BabelTypesApi,\n): string | null {\n if (path.node.arguments.length > 2) {\n return null\n }\n const callee = path.node.callee\n if (\n !types.isMemberExpression(callee) ||\n callee.computed ||\n !types.isIdentifier(callee.property, { name: \"withNode\" })\n ) {\n return null\n }\n const fn = path.node.arguments[path.node.arguments.length - 1]\n if (types.isIdentifier(fn)) {\n return fn.name\n }\n if (types.isMemberExpression(fn) && !fn.computed) {\n return propertyName(fn.property, types)\n }\n if (types.isFunctionExpression(fn) && fn.id) {\n return fn.id.name\n }\n return null\n}\n\nfunction runtimeParameters(\n node: BabelTypes.Function,\n types: BabelTypesApi,\n): BabelTypes.Function[\"params\"] {\n return node.params.filter(\n (parameter) => !types.isIdentifier(parameter, { name: \"this\" }),\n )\n}\n\nfunction parameterInputs(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): ReturnType<BabelTypesApi[\"arrayExpression\"]> {\n const elements: Array<BabelTypes.Expression | BabelTypes.SpreadElement> = []\n\n for (const [index, parameter] of runtimeParameters(\n path.node,\n types,\n ).entries()) {\n if (!types.isArrowFunctionExpression(path.node)) {\n if (types.isRestElement(parameter)) {\n elements.push(\n types.spreadElement(\n types.callExpression(\n types.memberExpression(\n types.arrayExpression([\n types.spreadElement(types.identifier(\"arguments\")),\n ]),\n types.identifier(\"slice\"),\n ),\n [types.numericLiteral(index)],\n ),\n ),\n )\n } else {\n elements.push(\n types.memberExpression(\n types.identifier(\"arguments\"),\n types.numericLiteral(index),\n true,\n ),\n )\n }\n continue\n }\n\n if (types.isIdentifier(parameter)) {\n elements.push(types.identifier(parameter.name))\n } else if (\n types.isRestElement(parameter) &&\n types.isIdentifier(parameter.argument)\n ) {\n elements.push(\n types.spreadElement(types.identifier(parameter.argument.name)),\n )\n }\n }\n\n return types.arrayExpression(elements)\n}\n\nfunction needsArgumentWrapper(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): boolean {\n return (\n types.isArrowFunctionExpression(path.node) &&\n path.node.params.some(\n (parameter) =>\n !types.isIdentifier(parameter) &&\n !(\n types.isRestElement(parameter) &&\n types.isIdentifier(parameter.argument)\n ),\n )\n )\n}\n\nfunction isRestWrapper(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): boolean {\n const parameters = runtimeParameters(path.node, types)\n return parameters.length === 1 && types.isRestElement(parameters[0])\n}\n\n/**\n * Babel adapter for Bitfab's experimental automatic call-span runtime.\n *\n * @experimental The transform protocol and generated function identities may\n * change before the feature is stable.\n */\nexport default function bitfabBabelPlugin(api: {\n types: BabelTypesApi\n}): PluginObject<BitfabPluginState> {\n const { types } = api\n\n return {\n name: \"bitfab-auto-trace\",\n visitor: {\n Program: {\n enter(path: NodePath<BabelTypes.Program>, state: BitfabPluginState) {\n const filename = state.file.opts.filename ?? \"unknown\"\n state.skipFile =\n !shouldTransformBitfabFile(filename, state.opts) ||\n path.scope.hasBinding(AUTO_TRACE_TRANSFORM_MARKER) ||\n path.node.directives.some(\n (directive) => directive.value.value === \"use client\",\n )\n state.runtimeIdentifier =\n path.scope.generateUidIdentifier(\"bitfabAutoSpan\")\n state.activeIdentifier = path.scope.generateUidIdentifier(\n \"bitfabAutoTraceActive\",\n )\n state.wrapperIdentifier =\n path.scope.generateUidIdentifier(\"bitfabAutoWrap\")\n state.definitions = []\n state.usedRuntime = false\n state.usedWrapper = false\n },\n exit(path: NodePath<BabelTypes.Program>, state: BitfabPluginState) {\n if (\n state.skipFile ||\n !state.usedRuntime ||\n !state.runtimeIdentifier ||\n !state.activeIdentifier ||\n !state.wrapperIdentifier\n ) {\n return\n }\n\n state.file.metadata[AUTO_TRACE_TRANSFORM_MARKER] = true\n path.unshiftContainer(\"body\", [\n types.importDeclaration(\n [\n types.importSpecifier(\n state.runtimeIdentifier,\n types.identifier(\"__bitfabAutoSpan\"),\n ),\n types.importSpecifier(\n state.activeIdentifier,\n types.identifier(\"__bitfabAutoTraceActive\"),\n ),\n ...(state.usedWrapper\n ? [\n types.importSpecifier(\n state.wrapperIdentifier,\n types.identifier(\"__bitfabAutoWrap\"),\n ),\n ]\n : []),\n ],\n types.stringLiteral(\n state.opts.runtimeModule ?? \"@bitfab/sdk/auto\",\n ),\n ),\n types.variableDeclaration(\"const\", [\n types.variableDeclarator(\n types.identifier(AUTO_TRACE_TRANSFORM_MARKER),\n types.assignmentExpression(\n \"=\",\n types.memberExpression(\n types.identifier(\"globalThis\"),\n types.identifier(AUTO_TRACE_TRANSFORM_MARKER),\n ),\n types.booleanLiteral(true),\n ),\n ),\n ]),\n ...(state.definitions ?? []),\n ])\n },\n },\n CallExpression: {\n exit(\n path: NodePath<BabelTypes.CallExpression>,\n state: BitfabPluginState,\n ) {\n if (state.skipFile) {\n return\n }\n const configuredName = withNodeFunctionName(path, types)\n if (configuredName === null) {\n return\n }\n if (path.node.arguments.length === 1) {\n path.node.arguments.push(types.identifier(\"undefined\"))\n }\n path.node.arguments.push(types.stringLiteral(configuredName))\n },\n },\n Function: {\n exit(path: NodePath<BabelTypes.Function>, state: BitfabPluginState) {\n const node = path.node as typeof path.node & InstrumentedFunction\n if (\n state.skipFile ||\n node._bitfabInstrumented ||\n !isInstrumentableFunction(node, types) ||\n isTraceDecoratorRoot(path, types) ||\n !state.runtimeIdentifier ||\n !state.activeIdentifier ||\n !state.wrapperIdentifier\n ) {\n return\n }\n const name = qualifiedFunctionName(path, types)\n if (name.startsWith(\"anonymous-\")) {\n return\n }\n const normalizedFilename = autoTraceFilename(\n state.file.opts.filename ?? \"unknown\",\n state.opts.cwd ?? state.file.opts.cwd ?? process.cwd(),\n )\n const { line, column } = sourcePosition(path)\n const definition = types.objectExpression([\n types.objectProperty(\n types.identifier(\"id\"),\n types.stringLiteral(\n autoTraceFunctionId(normalizedFilename, name),\n ),\n ),\n types.objectProperty(\n types.identifier(\"name\"),\n types.stringLiteral(name),\n ),\n types.objectProperty(\n types.identifier(\"file\"),\n types.stringLiteral(normalizedFilename),\n ),\n types.objectProperty(\n types.identifier(\"line\"),\n types.numericLiteral(line),\n ),\n types.objectProperty(\n types.identifier(\"column\"),\n types.numericLiteral(column),\n ),\n ...(node.async\n ? [\n types.objectProperty(\n types.identifier(\"async\"),\n types.booleanLiteral(true),\n ),\n ]\n : []),\n ...(isRestWrapper(path, types)\n ? [\n types.objectProperty(\n types.identifier(\"wrapper\"),\n types.booleanLiteral(true),\n ),\n ]\n : []),\n ])\n const definitionIdentifier = path.scope\n .getProgramParent()\n .generateUidIdentifier(\"bitfabAutoDefinition\")\n state.definitions?.push(\n types.variableDeclaration(\"const\", [\n types.variableDeclarator(definitionIdentifier, definition),\n ]),\n )\n\n if (needsArgumentWrapper(path, types)) {\n node._bitfabInstrumented = true\n path.replaceWith(\n types.callExpression(types.cloneNode(state.wrapperIdentifier), [\n types.cloneNode(definitionIdentifier),\n node as BabelTypes.ArrowFunctionExpression,\n ]),\n )\n state.usedRuntime = true\n state.usedWrapper = true\n return\n }\n\n const originalBody = types.isBlockStatement(node.body)\n ? node.body\n : types.blockStatement([types.returnStatement(node.body)])\n const directives = originalBody.directives\n originalBody.directives = []\n\n const body = types.blockStatement(\n [\n types.ifStatement(\n types.callExpression(\n types.cloneNode(state.activeIdentifier),\n [],\n ),\n types.blockStatement([\n types.returnStatement(\n types.callExpression(\n types.cloneNode(state.runtimeIdentifier),\n [\n types.cloneNode(definitionIdentifier),\n parameterInputs(path, types),\n types.arrowFunctionExpression(\n [],\n types.cloneNode(originalBody, true),\n node.async ?? false,\n ),\n ],\n ),\n ),\n ]),\n ),\n ...originalBody.body,\n ],\n directives,\n )\n node.body = body\n node._bitfabInstrumented = true\n state.usedRuntime = true\n },\n },\n },\n }\n}\n"],"mappings":"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","names":[]}
@@ -8,7 +8,7 @@ import {
8
8
  flushTraces,
9
9
  parseRetryAfterMs,
10
10
  serializePayloadBody
11
- } from "./chunk-GS7FUQ6U.js";
11
+ } from "./chunk-6WMY7SWO.js";
12
12
  import "./chunk-MT36GJMW.js";
13
13
  export {
14
14
  BitfabError,
@@ -21,4 +21,4 @@ export {
21
21
  parseRetryAfterMs,
22
22
  serializePayloadBody
23
23
  };
24
- //# sourceMappingURL=http-FN74JEHE.js.map
24
+ //# sourceMappingURL=http-2PRP3HWS.js.map
@@ -8,7 +8,7 @@ import {
8
8
  flushTraces,
9
9
  parseRetryAfterMs,
10
10
  serializePayloadBody
11
- } from "./chunk-VG54N52W.js";
11
+ } from "./chunk-32BQRD37.js";
12
12
  export {
13
13
  BitfabError,
14
14
  HttpClient,
@@ -20,4 +20,4 @@ export {
20
20
  parseRetryAfterMs,
21
21
  serializePayloadBody
22
22
  };
23
- //# sourceMappingURL=http-G32WE67W.js.map
23
+ //# sourceMappingURL=http-IJB2G6EO.js.map
package/dist/index.cjs CHANGED
@@ -51,7 +51,7 @@ var __version__, __packageName__;
51
51
  var init_version_generated = __esm({
52
52
  "src/version.generated.ts"() {
53
53
  "use strict";
54
- __version__ = "0.65.1";
54
+ __version__ = "0.65.4";
55
55
  __packageName__ = "bitfab";
56
56
  }
57
57
  });
@@ -6875,6 +6875,12 @@ function finishedRerun(datasetId, run, joinedExisting) {
6875
6875
  }
6876
6876
  return { run, joinedExisting };
6877
6877
  }
6878
+ function normalizeDataset(dataset) {
6879
+ return { ...dataset, golden: dataset.golden ?? false };
6880
+ }
6881
+ function normalizeDatasetResult(response) {
6882
+ return { ...response, dataset: normalizeDataset(response.dataset) };
6883
+ }
6878
6884
  function sleep(ms) {
6879
6885
  return new Promise((resolve) => setTimeout(resolve, ms));
6880
6886
  }
@@ -6891,11 +6897,13 @@ var DatasetsClient = class {
6891
6897
  * leaves an existing one untouched.
6892
6898
  */
6893
6899
  async save(params) {
6894
- return this.httpClient.request("/api/sdk/datasets", {
6900
+ const response = await this.httpClient.request("/api/sdk/datasets", {
6895
6901
  traceFunctionKey: params.traceFunctionKey,
6896
6902
  name: params.name,
6897
- ...params.description === void 0 ? {} : { description: params.description }
6903
+ ...params.description === void 0 ? {} : { description: params.description },
6904
+ ...typeof params.golden === "boolean" ? { golden: params.golden } : {}
6898
6905
  });
6906
+ return normalizeDatasetResult(response);
6899
6907
  }
6900
6908
  /**
6901
6909
  * Rename a dataset or change its description in place. The dataset keeps its
@@ -6905,18 +6913,21 @@ var DatasetsClient = class {
6905
6913
  * organization.
6906
6914
  */
6907
6915
  async update(datasetId, params) {
6908
- if (params.name === void 0 && params.description === void 0) {
6909
- throw new BitfabError("Provide name and/or description to update.");
6916
+ if (params.name === void 0 && params.description === void 0 && params.golden === void 0) {
6917
+ throw new BitfabError(
6918
+ "Provide name, description, and/or golden to update."
6919
+ );
6910
6920
  }
6911
6921
  const response = await this.httpClient.request(
6912
6922
  datasetPath(datasetId),
6913
6923
  {
6914
6924
  ...params.name === void 0 ? {} : { name: params.name },
6915
- ...params.description === void 0 ? {} : { description: params.description }
6925
+ ...params.description === void 0 ? {} : { description: params.description },
6926
+ ...typeof params.golden === "boolean" ? { golden: params.golden } : {}
6916
6927
  },
6917
6928
  { method: "PATCH" }
6918
6929
  );
6919
- return response.dataset;
6930
+ return normalizeDataset(response.dataset);
6920
6931
  }
6921
6932
  /**
6922
6933
  * List datasets, scoped to one trace function when `traceFunctionKey` is
@@ -6934,7 +6945,7 @@ var DatasetsClient = class {
6934
6945
  query.set("cursor", cursor);
6935
6946
  }
6936
6947
  const response = await this.httpClient.get(`/api/sdk/datasets?${query}`);
6937
- datasets.push(...response.datasets);
6948
+ datasets.push(...response.datasets.map(normalizeDataset));
6938
6949
  cursor = response.nextCursor ?? void 0;
6939
6950
  } while (cursor !== void 0);
6940
6951
  return datasets;
@@ -6944,7 +6955,7 @@ var DatasetsClient = class {
6944
6955
  const response = await this.httpClient.get(
6945
6956
  datasetPath(datasetId)
6946
6957
  );
6947
- return response.dataset;
6958
+ return normalizeDataset(response.dataset);
6948
6959
  }
6949
6960
  /** Fetches all trace-ID pages, the same membership a replay with `datasetId` selects. */
6950
6961
  async listTraces(datasetId) {
@@ -6965,17 +6976,13 @@ var DatasetsClient = class {
6965
6976
  * `skippedTraceIds` rather than failing the call.
6966
6977
  */
6967
6978
  async addTraces(datasetId, traceIds) {
6968
- return this.httpClient.request(
6969
- datasetPath(datasetId, "/traces"),
6970
- { traceIds }
6971
- );
6979
+ const response = await this.httpClient.request(datasetPath(datasetId, "/traces"), { traceIds });
6980
+ return normalizeDatasetResult(response);
6972
6981
  }
6973
6982
  /** Remove traces from the dataset. The traces themselves are never deleted. */
6974
6983
  async removeTraces(datasetId, traceIds) {
6975
- return this.httpClient.request(
6976
- datasetPath(datasetId, "/removeTraces"),
6977
- { traceIds }
6978
- );
6984
+ const response = await this.httpClient.request(datasetPath(datasetId, "/removeTraces"), { traceIds });
6985
+ return normalizeDatasetResult(response);
6979
6986
  }
6980
6987
  /**
6981
6988
  * Assign graders to the dataset (1 to 100 ids per call). Graders outside the
@@ -6983,17 +6990,13 @@ var DatasetsClient = class {
6983
6990
  * `skippedGraderIds` rather than failing the call.
6984
6991
  */
6985
6992
  async addGraders(datasetId, graderIds) {
6986
- return this.httpClient.request(
6987
- datasetPath(datasetId, "/graders"),
6988
- { graderIds }
6989
- );
6993
+ const response = await this.httpClient.request(datasetPath(datasetId, "/graders"), { graderIds });
6994
+ return normalizeDatasetResult(response);
6990
6995
  }
6991
6996
  /** Unassign graders from the dataset. */
6992
6997
  async removeGraders(datasetId, graderIds) {
6993
- return this.httpClient.request(
6994
- datasetPath(datasetId, "/removeGraders"),
6995
- { graderIds }
6996
- );
6998
+ const response = await this.httpClient.request(datasetPath(datasetId, "/removeGraders"), { graderIds });
6999
+ return normalizeDatasetResult(response);
6997
7000
  }
6998
7001
  async rerunGraders(datasetId, options = {}) {
6999
7002
  const started = await this.httpClient.request(