@bitfab/sdk 0.64.30 → 0.65.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/dist/autoTrace.cjs +28 -0
  2. package/dist/autoTrace.cjs.map +1 -1
  3. package/dist/autoTrace.d.cts +2 -1
  4. package/dist/autoTrace.d.ts +2 -1
  5. package/dist/autoTrace.js +3 -1
  6. package/dist/{chunk-BTCJ5XGH.js → chunk-4O5APMS4.js} +65 -21
  7. package/dist/chunk-4O5APMS4.js.map +1 -0
  8. package/dist/{chunk-5H2UZ2LR.js → chunk-4RU4RZSM.js} +2 -2
  9. package/dist/chunk-4RU4RZSM.js.map +1 -0
  10. package/dist/{chunk-N3CG4AHU.js → chunk-7OR34NXC.js} +2 -2
  11. package/dist/{chunk-GSHCHCB5.js → chunk-LXBV37XY.js} +2 -39
  12. package/dist/chunk-LXBV37XY.js.map +1 -0
  13. package/dist/{chunk-IBWW3SP4.js → chunk-P7JUVRYZ.js} +2 -2
  14. package/dist/{chunk-YWXQM6J3.js → chunk-QRNHRY7F.js} +28 -1
  15. package/dist/chunk-QRNHRY7F.js.map +1 -0
  16. package/dist/{chunk-PIMCRSR2.js → chunk-S2EYDTUH.js} +2 -2
  17. package/dist/{chunk-DARYURT3.js → chunk-SXNYSDXU.js} +2 -2
  18. package/dist/chunk-SXNYSDXU.js.map +1 -0
  19. package/dist/{chunk-MN3E2RUU.js → chunk-VS36LW4L.js} +3 -3
  20. package/dist/{chunk-GLBBZLG2.js → chunk-VYIIDV2D.js} +4 -4
  21. package/dist/chunk-VYIIDV2D.js.map +1 -0
  22. package/dist/{http-JI7TADRE.js → http-2R2LUIGH.js} +2 -2
  23. package/dist/{http-5HVQJKA7.js → http-NWJPWZF5.js} +2 -2
  24. package/dist/index.cjs +74 -15
  25. package/dist/index.cjs.map +1 -1
  26. package/dist/index.d.cts +76 -43
  27. package/dist/index.d.ts +76 -43
  28. package/dist/index.js +6 -4
  29. package/dist/node.cjs +74 -15
  30. package/dist/node.cjs.map +1 -1
  31. package/dist/node.d.cts +1 -1
  32. package/dist/node.d.ts +1 -1
  33. package/dist/node.js +6 -4
  34. package/dist/node.js.map +1 -1
  35. package/dist/{replay-FRGREQBV.js → replay-3GJHADDC.js} +3 -3
  36. package/dist/{replay-WL7ZJP3A.js → replay-Z5ND6EVB.js} +3 -3
  37. package/dist/replayCli.js +3 -3
  38. package/dist/seedCli.js +3 -3
  39. package/dist/transform/babel.cjs +1 -38
  40. package/dist/transform/babel.cjs.map +1 -1
  41. package/dist/transform/babel.js +1 -1
  42. package/dist/transform/bun.cjs +1 -38
  43. package/dist/transform/bun.cjs.map +1 -1
  44. package/dist/transform/bun.js +3 -3
  45. package/dist/transform/esbuild.cjs +1 -38
  46. package/dist/transform/esbuild.cjs.map +1 -1
  47. package/dist/transform/esbuild.js +3 -3
  48. package/dist/transform/loaderRuntime.cjs +1 -38
  49. package/dist/transform/loaderRuntime.cjs.map +1 -1
  50. package/dist/transform/loaderRuntime.js +2 -2
  51. package/dist/transform/nest.cjs +1 -38
  52. package/dist/transform/nest.cjs.map +1 -1
  53. package/dist/transform/nest.js +3 -3
  54. package/dist/transform/next.cjs +1 -38
  55. package/dist/transform/next.cjs.map +1 -1
  56. package/dist/transform/next.js +3 -3
  57. package/dist/transform/nodeLoader.js +1 -38
  58. package/dist/transform/nodeLoader.js.map +1 -1
  59. package/dist/transform/rolldown.cjs +1 -38
  60. package/dist/transform/rolldown.cjs.map +1 -1
  61. package/dist/transform/rolldown.js +3 -3
  62. package/dist/transform/rollup.cjs +1 -38
  63. package/dist/transform/rollup.cjs.map +1 -1
  64. package/dist/transform/rollup.js +3 -3
  65. package/dist/transform/rsbuild.cjs +1 -38
  66. package/dist/transform/rsbuild.cjs.map +1 -1
  67. package/dist/transform/rsbuild.js +3 -3
  68. package/dist/transform/rspack.cjs +1 -38
  69. package/dist/transform/rspack.cjs.map +1 -1
  70. package/dist/transform/rspack.js +3 -3
  71. package/dist/transform/swc.cjs +1 -38
  72. package/dist/transform/swc.cjs.map +1 -1
  73. package/dist/transform/swc.js +2 -2
  74. package/dist/transform/unplugin.cjs +1 -38
  75. package/dist/transform/unplugin.cjs.map +1 -1
  76. package/dist/transform/unplugin.js +3 -3
  77. package/dist/transform/vite.cjs +1 -38
  78. package/dist/transform/vite.cjs.map +1 -1
  79. package/dist/transform/vite.js +3 -3
  80. package/dist/transform/webpack.cjs +1 -38
  81. package/dist/transform/webpack.cjs.map +1 -1
  82. package/dist/transform/webpack.js +3 -3
  83. package/package.json +1 -1
  84. package/dist/chunk-5H2UZ2LR.js.map +0 -1
  85. package/dist/chunk-BTCJ5XGH.js.map +0 -1
  86. package/dist/chunk-DARYURT3.js.map +0 -1
  87. package/dist/chunk-GLBBZLG2.js.map +0 -1
  88. package/dist/chunk-GSHCHCB5.js.map +0 -1
  89. package/dist/chunk-YWXQM6J3.js.map +0 -1
  90. /package/dist/{chunk-N3CG4AHU.js.map → chunk-7OR34NXC.js.map} +0 -0
  91. /package/dist/{chunk-IBWW3SP4.js.map → chunk-P7JUVRYZ.js.map} +0 -0
  92. /package/dist/{chunk-PIMCRSR2.js.map → chunk-S2EYDTUH.js.map} +0 -0
  93. /package/dist/{chunk-MN3E2RUU.js.map → chunk-VS36LW4L.js.map} +0 -0
  94. /package/dist/{http-5HVQJKA7.js.map → http-2R2LUIGH.js.map} +0 -0
  95. /package/dist/{http-JI7TADRE.js.map → http-NWJPWZF5.js.map} +0 -0
  96. /package/dist/{replay-FRGREQBV.js.map → replay-3GJHADDC.js.map} +0 -0
  97. /package/dist/{replay-WL7ZJP3A.js.map → replay-Z5ND6EVB.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../bitfab-typescript-transform/src/nest.ts","../../../bitfab-typescript-transform/src/unplugin.ts","../../../bitfab-typescript-transform/src/transform.ts","../../../bitfab-typescript-transform/src/transformOptions.ts","../../../bitfab-typescript-transform/src/babelPlugin.ts"],"sourcesContent":["import type { BitfabTransformOptions } from \"./transformOptions.js\"\nimport { bitfabTraceUnplugin } from \"./unplugin.js\"\n\nexport interface NestWebpackConfig {\n plugins?: unknown[]\n [key: string]: unknown\n}\n\nexport type NestWebpackConfigFactory = (\n config: NestWebpackConfig,\n) => NestWebpackConfig\n\n/**\n * Configure experimental Bitfab automatic call tracing for Nest's webpack\n * builder while preserving the rest of the generated Nest webpack config.\n *\n * @experimental The generated function identity protocol may change.\n */\nexport default function bitfabNestTrace(\n options: BitfabTransformOptions = {},\n): NestWebpackConfigFactory {\n return (config) => ({\n ...config,\n plugins: [...(config.plugins ?? []), bitfabTraceUnplugin.webpack(options)],\n })\n}\n","import { createUnplugin } from \"unplugin\"\nimport { transformBitfabSource } from \"./transform.js\"\nimport type { BitfabTransformOptions } from \"./transformOptions.js\"\nimport { shouldTransformBitfabFile } from \"./transformOptions.js\"\n\nexport const bitfabTraceUnplugin = createUnplugin<\n BitfabTransformOptions | undefined,\n false\n>((options) => {\n const resolvedOptions = options ?? {}\n\n return {\n name: \"bitfab-auto-trace\",\n enforce: \"pre\",\n transform(source, filename) {\n if (!shouldTransformBitfabFile(filename, resolvedOptions)) {\n return null\n }\n\n const result = transformBitfabSource(source, filename, resolvedOptions)\n return result.map ? result : null\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","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\n const { line, column } = sourcePosition(path)\n return `anonymous-${line}-${column}`\n}\n\nfunction isInstrumentableFunction(\n node: BabelTypes.Function,\n types: BabelTypesApi,\n): boolean {\n if (node.generator || types.isClassPrivateMethod(node)) {\n return false\n }\n return (\n !(types.isClassMethod(node) || types.isObjectMethod(node)) ||\n node.kind === \"method\"\n )\n}\n\nfunction sourcePosition(path: NodePath<BabelTypes.Function>): {\n line: number\n column: number\n} {\n const exportDeclaration = path.parentPath?.isExportDeclaration()\n ? path.parentPath.node\n : undefined\n const start = (exportDeclaration ?? path.node).loc?.start\n return { line: start?.line ?? 0, column: start?.column ?? 0 }\n}\n\nfunction qualifiedFunctionName(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): string {\n const ownName = functionName(path, types)\n if (ownName.startsWith(\"anonymous-\")) {\n return ownName\n }\n const scopes: string[] = []\n let ancestor: NodePath | null = path.parentPath\n while (ancestor) {\n if (ancestor.isFunction()) {\n if (!isInstrumentableFunction(ancestor.node, types)) {\n ancestor = ancestor.parentPath\n continue\n }\n const name = functionName(\n ancestor as NodePath<BabelTypes.Function>,\n types,\n )\n if (!name.startsWith(\"anonymous-\")) {\n scopes.unshift(name)\n }\n } else if (\n (ancestor.isClassDeclaration() || ancestor.isClassExpression()) &&\n ancestor.node.id\n ) {\n scopes.unshift(ancestor.node.id.name)\n } else if (ancestor.isObjectExpression()) {\n const parent = ancestor.parentPath?.node\n if (types.isVariableDeclarator(parent)) {\n const name = propertyName(parent.id, types)\n if (name) {\n scopes.unshift(name)\n }\n } else if (types.isObjectProperty(parent) && !parent.computed) {\n const name = propertyName(parent.key, types)\n if (name) {\n scopes.unshift(name)\n }\n }\n }\n ancestor = ancestor.parentPath\n }\n return [...scopes, ownName].join(\".\")\n}\n\nfunction isTraceDecoratorRoot(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): boolean {\n const node = path.node\n if (!types.isClassMethod(node) && !types.isClassPrivateMethod(node)) {\n return false\n }\n\n return (\n node.decorators?.some((decorator) => {\n const expression = decorator.expression\n if (!types.isCallExpression(expression)) {\n return false\n }\n const callee = expression.callee\n return (\n types.isMemberExpression(callee) &&\n !callee.computed &&\n types.isIdentifier(callee.property, { name: \"trace\" })\n )\n }) ?? false\n )\n}\n\nfunction isBitfabWrapperArgument(\n path: NodePath,\n types: BabelTypesApi,\n): boolean {\n const parent = path.parentPath?.node\n if (!types.isCallExpression(parent)) {\n return false\n }\n if (!parent.arguments.some((argument) => argument === path.node)) {\n return false\n }\n\n const callee = parent.callee\n return (\n types.isMemberExpression(callee) &&\n !callee.computed &&\n types.isIdentifier(callee.property) &&\n (callee.property.name === \"withTrace\" ||\n callee.property.name === \"withSpan\")\n )\n}\n\nfunction withNodeFunctionName(\n path: NodePath<BabelTypes.CallExpression>,\n types: BabelTypesApi,\n): string | null {\n if (path.node.arguments.length > 2) {\n return null\n }\n const callee = path.node.callee\n if (\n !types.isMemberExpression(callee) ||\n callee.computed ||\n !types.isIdentifier(callee.property, { name: \"withNode\" })\n ) {\n return null\n }\n const fn = path.node.arguments[path.node.arguments.length - 1]\n if (types.isIdentifier(fn)) {\n return fn.name\n }\n if (types.isMemberExpression(fn) && !fn.computed) {\n return propertyName(fn.property, types)\n }\n if (types.isFunctionExpression(fn) && fn.id) {\n return fn.id.name\n }\n return null\n}\n\nfunction functionBindingName(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): string | null {\n if (types.isFunctionDeclaration(path.node) && path.node.id) {\n return path.node.id.name\n }\n\n const parent = path.parentPath?.node\n if (types.isVariableDeclarator(parent) && types.isIdentifier(parent.id)) {\n return parent.id.name\n }\n return null\n}\n\nfunction isBitfabWrappedFunction(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): boolean {\n if (isBitfabWrapperArgument(path, types)) {\n return true\n }\n\n const bindingName = functionBindingName(path, types)\n if (!bindingName) {\n return false\n }\n const binding = path.scope.getBinding(bindingName)\n return (\n binding?.referencePaths.some((referencePath) =>\n isBitfabWrapperArgument(referencePath, types),\n ) ?? false\n )\n}\n\nfunction isBitfabManagedFunction(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): boolean {\n return (\n isTraceDecoratorRoot(path, types) || isBitfabWrappedFunction(path, types)\n )\n}\n\nfunction runtimeParameters(\n node: BabelTypes.Function,\n types: BabelTypesApi,\n): BabelTypes.Function[\"params\"] {\n return node.params.filter(\n (parameter) => !types.isIdentifier(parameter, { name: \"this\" }),\n )\n}\n\nfunction parameterInputs(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): ReturnType<BabelTypesApi[\"arrayExpression\"]> {\n const elements: Array<BabelTypes.Expression | BabelTypes.SpreadElement> = []\n\n for (const [index, parameter] of runtimeParameters(\n path.node,\n types,\n ).entries()) {\n if (!types.isArrowFunctionExpression(path.node)) {\n if (types.isRestElement(parameter)) {\n elements.push(\n types.spreadElement(\n types.callExpression(\n types.memberExpression(\n types.arrayExpression([\n types.spreadElement(types.identifier(\"arguments\")),\n ]),\n types.identifier(\"slice\"),\n ),\n [types.numericLiteral(index)],\n ),\n ),\n )\n } else {\n elements.push(\n types.memberExpression(\n types.identifier(\"arguments\"),\n types.numericLiteral(index),\n true,\n ),\n )\n }\n continue\n }\n\n if (types.isIdentifier(parameter)) {\n elements.push(types.identifier(parameter.name))\n } else if (\n types.isRestElement(parameter) &&\n types.isIdentifier(parameter.argument)\n ) {\n elements.push(\n types.spreadElement(types.identifier(parameter.argument.name)),\n )\n }\n }\n\n return types.arrayExpression(elements)\n}\n\nfunction needsArgumentWrapper(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): boolean {\n return (\n types.isArrowFunctionExpression(path.node) &&\n path.node.params.some(\n (parameter) =>\n !types.isIdentifier(parameter) &&\n !(\n types.isRestElement(parameter) &&\n types.isIdentifier(parameter.argument)\n ),\n )\n )\n}\n\nfunction isRestWrapper(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): boolean {\n const parameters = runtimeParameters(path.node, types)\n return parameters.length === 1 && types.isRestElement(parameters[0])\n}\n\n/**\n * Babel adapter for Bitfab's experimental automatic call-span runtime.\n *\n * @experimental The transform protocol and generated function identities may\n * change before the feature is stable.\n */\nexport default function bitfabBabelPlugin(api: {\n types: BabelTypesApi\n}): PluginObject<BitfabPluginState> {\n const { types } = api\n\n return {\n name: \"bitfab-auto-trace\",\n visitor: {\n Program: {\n enter(path: NodePath<BabelTypes.Program>, state: BitfabPluginState) {\n const filename = state.file.opts.filename ?? \"unknown\"\n state.skipFile =\n !shouldTransformBitfabFile(filename, state.opts) ||\n path.scope.hasBinding(AUTO_TRACE_TRANSFORM_MARKER) ||\n path.node.directives.some(\n (directive) => directive.value.value === \"use client\",\n )\n state.runtimeIdentifier =\n path.scope.generateUidIdentifier(\"bitfabAutoSpan\")\n state.activeIdentifier = path.scope.generateUidIdentifier(\n \"bitfabAutoTraceActive\",\n )\n state.wrapperIdentifier =\n path.scope.generateUidIdentifier(\"bitfabAutoWrap\")\n state.definitions = []\n state.usedRuntime = false\n state.usedWrapper = false\n },\n exit(path: NodePath<BabelTypes.Program>, state: BitfabPluginState) {\n if (\n state.skipFile ||\n !state.usedRuntime ||\n !state.runtimeIdentifier ||\n !state.activeIdentifier ||\n !state.wrapperIdentifier\n ) {\n return\n }\n\n state.file.metadata[AUTO_TRACE_TRANSFORM_MARKER] = true\n path.unshiftContainer(\"body\", [\n types.importDeclaration(\n [\n types.importSpecifier(\n state.runtimeIdentifier,\n types.identifier(\"__bitfabAutoSpan\"),\n ),\n types.importSpecifier(\n state.activeIdentifier,\n types.identifier(\"__bitfabAutoTraceActive\"),\n ),\n ...(state.usedWrapper\n ? [\n types.importSpecifier(\n state.wrapperIdentifier,\n types.identifier(\"__bitfabAutoWrap\"),\n ),\n ]\n : []),\n ],\n types.stringLiteral(\n state.opts.runtimeModule ?? \"@bitfab/sdk/auto\",\n ),\n ),\n types.variableDeclaration(\"const\", [\n types.variableDeclarator(\n types.identifier(AUTO_TRACE_TRANSFORM_MARKER),\n types.assignmentExpression(\n \"=\",\n types.memberExpression(\n types.identifier(\"globalThis\"),\n types.identifier(AUTO_TRACE_TRANSFORM_MARKER),\n ),\n types.booleanLiteral(true),\n ),\n ),\n ]),\n ...(state.definitions ?? []),\n ])\n },\n },\n CallExpression: {\n exit(\n path: NodePath<BabelTypes.CallExpression>,\n state: BitfabPluginState,\n ) {\n if (state.skipFile) {\n return\n }\n const configuredName = withNodeFunctionName(path, types)\n if (configuredName === null) {\n return\n }\n if (path.node.arguments.length === 1) {\n path.node.arguments.push(types.identifier(\"undefined\"))\n }\n path.node.arguments.push(types.stringLiteral(configuredName))\n },\n },\n Function: {\n exit(path: NodePath<BabelTypes.Function>, state: BitfabPluginState) {\n const node = path.node as typeof path.node & InstrumentedFunction\n if (\n state.skipFile ||\n node._bitfabInstrumented ||\n !isInstrumentableFunction(node, types) ||\n isBitfabManagedFunction(path, types) ||\n !state.runtimeIdentifier ||\n !state.activeIdentifier ||\n !state.wrapperIdentifier\n ) {\n return\n }\n const name = qualifiedFunctionName(path, types)\n if (name.startsWith(\"anonymous-\")) {\n return\n }\n const normalizedFilename = autoTraceFilename(\n state.file.opts.filename ?? \"unknown\",\n state.opts.cwd ?? state.file.opts.cwd ?? process.cwd(),\n )\n const { line, column } = sourcePosition(path)\n const definition = types.objectExpression([\n types.objectProperty(\n types.identifier(\"id\"),\n types.stringLiteral(\n autoTraceFunctionId(normalizedFilename, name),\n ),\n ),\n types.objectProperty(\n types.identifier(\"name\"),\n types.stringLiteral(name),\n ),\n types.objectProperty(\n types.identifier(\"file\"),\n types.stringLiteral(normalizedFilename),\n ),\n types.objectProperty(\n types.identifier(\"line\"),\n types.numericLiteral(line),\n ),\n types.objectProperty(\n types.identifier(\"column\"),\n types.numericLiteral(column),\n ),\n ...(node.async\n ? [\n types.objectProperty(\n types.identifier(\"async\"),\n types.booleanLiteral(true),\n ),\n ]\n : []),\n ...(isRestWrapper(path, types)\n ? [\n types.objectProperty(\n types.identifier(\"wrapper\"),\n types.booleanLiteral(true),\n ),\n ]\n : []),\n ])\n const definitionIdentifier = path.scope\n .getProgramParent()\n .generateUidIdentifier(\"bitfabAutoDefinition\")\n state.definitions?.push(\n types.variableDeclaration(\"const\", [\n types.variableDeclarator(definitionIdentifier, definition),\n ]),\n )\n\n if (needsArgumentWrapper(path, types)) {\n node._bitfabInstrumented = true\n path.replaceWith(\n types.callExpression(types.cloneNode(state.wrapperIdentifier), [\n types.cloneNode(definitionIdentifier),\n node as BabelTypes.ArrowFunctionExpression,\n ]),\n )\n state.usedRuntime = true\n state.usedWrapper = true\n return\n }\n\n const originalBody = types.isBlockStatement(node.body)\n ? node.body\n : types.blockStatement([types.returnStatement(node.body)])\n const directives = originalBody.directives\n originalBody.directives = []\n\n const body = types.blockStatement(\n [\n types.ifStatement(\n types.callExpression(\n types.cloneNode(state.activeIdentifier),\n [],\n ),\n types.blockStatement([\n types.returnStatement(\n types.callExpression(\n types.cloneNode(state.runtimeIdentifier),\n [\n types.cloneNode(definitionIdentifier),\n parameterInputs(path, types),\n types.arrowFunctionExpression(\n [],\n types.cloneNode(originalBody, true),\n node.async ?? false,\n ),\n ],\n ),\n ),\n ]),\n ),\n ...originalBody.body,\n ],\n directives,\n )\n node.body = body\n node._bitfabInstrumented = true\n state.usedRuntime = true\n },\n },\n },\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../bitfab-typescript-transform/src/nest.ts","../../../bitfab-typescript-transform/src/unplugin.ts","../../../bitfab-typescript-transform/src/transform.ts","../../../bitfab-typescript-transform/src/transformOptions.ts","../../../bitfab-typescript-transform/src/babelPlugin.ts"],"sourcesContent":["import type { BitfabTransformOptions } from \"./transformOptions.js\"\nimport { bitfabTraceUnplugin } from \"./unplugin.js\"\n\nexport interface NestWebpackConfig {\n plugins?: unknown[]\n [key: string]: unknown\n}\n\nexport type NestWebpackConfigFactory = (\n config: NestWebpackConfig,\n) => NestWebpackConfig\n\n/**\n * Configure experimental Bitfab automatic call tracing for Nest's webpack\n * builder while preserving the rest of the generated Nest webpack config.\n *\n * @experimental The generated function identity protocol may change.\n */\nexport default function bitfabNestTrace(\n options: BitfabTransformOptions = {},\n): NestWebpackConfigFactory {\n return (config) => ({\n ...config,\n plugins: [...(config.plugins ?? []), bitfabTraceUnplugin.webpack(options)],\n })\n}\n","import { createUnplugin } from \"unplugin\"\nimport { transformBitfabSource } from \"./transform.js\"\nimport type { BitfabTransformOptions } from \"./transformOptions.js\"\nimport { shouldTransformBitfabFile } from \"./transformOptions.js\"\n\nexport const bitfabTraceUnplugin = createUnplugin<\n BitfabTransformOptions | undefined,\n false\n>((options) => {\n const resolvedOptions = options ?? {}\n\n return {\n name: \"bitfab-auto-trace\",\n enforce: \"pre\",\n transform(source, filename) {\n if (!shouldTransformBitfabFile(filename, resolvedOptions)) {\n return null\n }\n\n const result = transformBitfabSource(source, filename, resolvedOptions)\n return result.map ? result : null\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","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\n const { line, column } = sourcePosition(path)\n return `anonymous-${line}-${column}`\n}\n\nfunction isInstrumentableFunction(\n node: BabelTypes.Function,\n types: BabelTypesApi,\n): boolean {\n if (node.generator || types.isClassPrivateMethod(node)) {\n return false\n }\n return (\n !(types.isClassMethod(node) || types.isObjectMethod(node)) ||\n node.kind === \"method\"\n )\n}\n\nfunction sourcePosition(path: NodePath<BabelTypes.Function>): {\n line: number\n column: number\n} {\n const exportDeclaration = path.parentPath?.isExportDeclaration()\n ? path.parentPath.node\n : undefined\n const start = (exportDeclaration ?? path.node).loc?.start\n return { line: start?.line ?? 0, column: start?.column ?? 0 }\n}\n\nfunction qualifiedFunctionName(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): string {\n const ownName = functionName(path, types)\n if (ownName.startsWith(\"anonymous-\")) {\n return ownName\n }\n const scopes: string[] = []\n let ancestor: NodePath | null = path.parentPath\n while (ancestor) {\n if (ancestor.isFunction()) {\n if (!isInstrumentableFunction(ancestor.node, types)) {\n ancestor = ancestor.parentPath\n continue\n }\n const name = functionName(\n ancestor as NodePath<BabelTypes.Function>,\n types,\n )\n if (!name.startsWith(\"anonymous-\")) {\n scopes.unshift(name)\n }\n } else if (\n (ancestor.isClassDeclaration() || ancestor.isClassExpression()) &&\n ancestor.node.id\n ) {\n scopes.unshift(ancestor.node.id.name)\n } else if (ancestor.isObjectExpression()) {\n const parent = ancestor.parentPath?.node\n if (types.isVariableDeclarator(parent)) {\n const name = propertyName(parent.id, types)\n if (name) {\n scopes.unshift(name)\n }\n } else if (types.isObjectProperty(parent) && !parent.computed) {\n const name = propertyName(parent.key, types)\n if (name) {\n scopes.unshift(name)\n }\n }\n }\n ancestor = ancestor.parentPath\n }\n return [...scopes, ownName].join(\".\")\n}\n\nfunction isTraceDecoratorRoot(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): boolean {\n const node = path.node\n if (!types.isClassMethod(node) && !types.isClassPrivateMethod(node)) {\n return false\n }\n\n return (\n node.decorators?.some((decorator) => {\n const expression = decorator.expression\n if (!types.isCallExpression(expression)) {\n return false\n }\n const callee = expression.callee\n return (\n types.isMemberExpression(callee) &&\n !callee.computed &&\n types.isIdentifier(callee.property, { name: \"trace\" })\n )\n }) ?? false\n )\n}\n\nfunction 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":[]}
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  bitfabTraceUnplugin
3
- } from "../chunk-MN3E2RUU.js";
4
- import "../chunk-IBWW3SP4.js";
5
- import "../chunk-GSHCHCB5.js";
3
+ } from "../chunk-VS36LW4L.js";
4
+ import "../chunk-P7JUVRYZ.js";
5
+ import "../chunk-LXBV37XY.js";
6
6
 
7
7
  // ../bitfab-typescript-transform/src/nest.ts
8
8
  function bitfabNestTrace(options = {}) {
@@ -155,17 +155,6 @@ function isTraceDecoratorRoot(path, types) {
155
155
  return types.isMemberExpression(callee) && !callee.computed && types.isIdentifier(callee.property, { name: "trace" });
156
156
  }) ?? false;
157
157
  }
158
- function isBitfabWrapperArgument(path, types) {
159
- const parent = path.parentPath?.node;
160
- if (!types.isCallExpression(parent)) {
161
- return false;
162
- }
163
- if (!parent.arguments.some((argument) => argument === path.node)) {
164
- return false;
165
- }
166
- const callee = parent.callee;
167
- return types.isMemberExpression(callee) && !callee.computed && types.isIdentifier(callee.property) && (callee.property.name === "withTrace" || callee.property.name === "withSpan");
168
- }
169
158
  function withNodeFunctionName(path, types) {
170
159
  if (path.node.arguments.length > 2) {
171
160
  return null;
@@ -186,32 +175,6 @@ function withNodeFunctionName(path, types) {
186
175
  }
187
176
  return null;
188
177
  }
189
- function functionBindingName(path, types) {
190
- if (types.isFunctionDeclaration(path.node) && path.node.id) {
191
- return path.node.id.name;
192
- }
193
- const parent = path.parentPath?.node;
194
- if (types.isVariableDeclarator(parent) && types.isIdentifier(parent.id)) {
195
- return parent.id.name;
196
- }
197
- return null;
198
- }
199
- function isBitfabWrappedFunction(path, types) {
200
- if (isBitfabWrapperArgument(path, types)) {
201
- return true;
202
- }
203
- const bindingName = functionBindingName(path, types);
204
- if (!bindingName) {
205
- return false;
206
- }
207
- const binding = path.scope.getBinding(bindingName);
208
- return binding?.referencePaths.some(
209
- (referencePath) => isBitfabWrapperArgument(referencePath, types)
210
- ) ?? false;
211
- }
212
- function isBitfabManagedFunction(path, types) {
213
- return isTraceDecoratorRoot(path, types) || isBitfabWrappedFunction(path, types);
214
- }
215
178
  function runtimeParameters(node, types) {
216
179
  return node.params.filter(
217
180
  (parameter) => !types.isIdentifier(parameter, { name: "this" })
@@ -350,7 +313,7 @@ function bitfabBabelPlugin(api) {
350
313
  Function: {
351
314
  exit(path, state) {
352
315
  const node = path.node;
353
- if (state.skipFile || node._bitfabInstrumented || !isInstrumentableFunction(node, types) || isBitfabManagedFunction(path, types) || !state.runtimeIdentifier || !state.activeIdentifier || !state.wrapperIdentifier) {
316
+ if (state.skipFile || node._bitfabInstrumented || !isInstrumentableFunction(node, types) || isTraceDecoratorRoot(path, types) || !state.runtimeIdentifier || !state.activeIdentifier || !state.wrapperIdentifier) {
354
317
  return;
355
318
  }
356
319
  const name = qualifiedFunctionName(path, types);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../bitfab-typescript-transform/src/nextSdk.ts","../../../bitfab-typescript-transform/src/unplugin.ts","../../../bitfab-typescript-transform/src/transform.ts","../../../bitfab-typescript-transform/src/transformOptions.ts","../../../bitfab-typescript-transform/src/babelPlugin.ts","../../../bitfab-typescript-transform/src/next.ts"],"sourcesContent":["import { createWithBitfabTrace } from \"./next.js\"\n\nexport type { BitfabNextOptions } from \"./next.js\"\n\nexport default createWithBitfabTrace(\"@bitfab/sdk/transform/loader\")\n","import { createUnplugin } from \"unplugin\"\nimport { transformBitfabSource } from \"./transform.js\"\nimport type { BitfabTransformOptions } from \"./transformOptions.js\"\nimport { shouldTransformBitfabFile } from \"./transformOptions.js\"\n\nexport const bitfabTraceUnplugin = createUnplugin<\n BitfabTransformOptions | undefined,\n false\n>((options) => {\n const resolvedOptions = options ?? {}\n\n return {\n name: \"bitfab-auto-trace\",\n enforce: \"pre\",\n transform(source, filename) {\n if (!shouldTransformBitfabFile(filename, resolvedOptions)) {\n return null\n }\n\n const result = transformBitfabSource(source, filename, resolvedOptions)\n return result.map ? result : null\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","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\n const { line, column } = sourcePosition(path)\n return `anonymous-${line}-${column}`\n}\n\nfunction isInstrumentableFunction(\n node: BabelTypes.Function,\n types: BabelTypesApi,\n): boolean {\n if (node.generator || types.isClassPrivateMethod(node)) {\n return false\n }\n return (\n !(types.isClassMethod(node) || types.isObjectMethod(node)) ||\n node.kind === \"method\"\n )\n}\n\nfunction sourcePosition(path: NodePath<BabelTypes.Function>): {\n line: number\n column: number\n} {\n const exportDeclaration = path.parentPath?.isExportDeclaration()\n ? path.parentPath.node\n : undefined\n const start = (exportDeclaration ?? path.node).loc?.start\n return { line: start?.line ?? 0, column: start?.column ?? 0 }\n}\n\nfunction qualifiedFunctionName(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): string {\n const ownName = functionName(path, types)\n if (ownName.startsWith(\"anonymous-\")) {\n return ownName\n }\n const scopes: string[] = []\n let ancestor: NodePath | null = path.parentPath\n while (ancestor) {\n if (ancestor.isFunction()) {\n if (!isInstrumentableFunction(ancestor.node, types)) {\n ancestor = ancestor.parentPath\n continue\n }\n const name = functionName(\n ancestor as NodePath<BabelTypes.Function>,\n types,\n )\n if (!name.startsWith(\"anonymous-\")) {\n scopes.unshift(name)\n }\n } else if (\n (ancestor.isClassDeclaration() || ancestor.isClassExpression()) &&\n ancestor.node.id\n ) {\n scopes.unshift(ancestor.node.id.name)\n } else if (ancestor.isObjectExpression()) {\n const parent = ancestor.parentPath?.node\n if (types.isVariableDeclarator(parent)) {\n const name = propertyName(parent.id, types)\n if (name) {\n scopes.unshift(name)\n }\n } else if (types.isObjectProperty(parent) && !parent.computed) {\n const name = propertyName(parent.key, types)\n if (name) {\n scopes.unshift(name)\n }\n }\n }\n ancestor = ancestor.parentPath\n }\n return [...scopes, ownName].join(\".\")\n}\n\nfunction isTraceDecoratorRoot(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): boolean {\n const node = path.node\n if (!types.isClassMethod(node) && !types.isClassPrivateMethod(node)) {\n return false\n }\n\n return (\n node.decorators?.some((decorator) => {\n const expression = decorator.expression\n if (!types.isCallExpression(expression)) {\n return false\n }\n const callee = expression.callee\n return (\n types.isMemberExpression(callee) &&\n !callee.computed &&\n types.isIdentifier(callee.property, { name: \"trace\" })\n )\n }) ?? false\n )\n}\n\nfunction isBitfabWrapperArgument(\n path: NodePath,\n types: BabelTypesApi,\n): boolean {\n const parent = path.parentPath?.node\n if (!types.isCallExpression(parent)) {\n return false\n }\n if (!parent.arguments.some((argument) => argument === path.node)) {\n return false\n }\n\n const callee = parent.callee\n return (\n types.isMemberExpression(callee) &&\n !callee.computed &&\n types.isIdentifier(callee.property) &&\n (callee.property.name === \"withTrace\" ||\n callee.property.name === \"withSpan\")\n )\n}\n\nfunction withNodeFunctionName(\n path: NodePath<BabelTypes.CallExpression>,\n types: BabelTypesApi,\n): string | null {\n if (path.node.arguments.length > 2) {\n return null\n }\n const callee = path.node.callee\n if (\n !types.isMemberExpression(callee) ||\n callee.computed ||\n !types.isIdentifier(callee.property, { name: \"withNode\" })\n ) {\n return null\n }\n const fn = path.node.arguments[path.node.arguments.length - 1]\n if (types.isIdentifier(fn)) {\n return fn.name\n }\n if (types.isMemberExpression(fn) && !fn.computed) {\n return propertyName(fn.property, types)\n }\n if (types.isFunctionExpression(fn) && fn.id) {\n return fn.id.name\n }\n return null\n}\n\nfunction functionBindingName(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): string | null {\n if (types.isFunctionDeclaration(path.node) && path.node.id) {\n return path.node.id.name\n }\n\n const parent = path.parentPath?.node\n if (types.isVariableDeclarator(parent) && types.isIdentifier(parent.id)) {\n return parent.id.name\n }\n return null\n}\n\nfunction isBitfabWrappedFunction(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): boolean {\n if (isBitfabWrapperArgument(path, types)) {\n return true\n }\n\n const bindingName = functionBindingName(path, types)\n if (!bindingName) {\n return false\n }\n const binding = path.scope.getBinding(bindingName)\n return (\n binding?.referencePaths.some((referencePath) =>\n isBitfabWrapperArgument(referencePath, types),\n ) ?? false\n )\n}\n\nfunction isBitfabManagedFunction(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): boolean {\n return (\n isTraceDecoratorRoot(path, types) || isBitfabWrappedFunction(path, types)\n )\n}\n\nfunction runtimeParameters(\n node: BabelTypes.Function,\n types: BabelTypesApi,\n): BabelTypes.Function[\"params\"] {\n return node.params.filter(\n (parameter) => !types.isIdentifier(parameter, { name: \"this\" }),\n )\n}\n\nfunction parameterInputs(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): ReturnType<BabelTypesApi[\"arrayExpression\"]> {\n const elements: Array<BabelTypes.Expression | BabelTypes.SpreadElement> = []\n\n for (const [index, parameter] of runtimeParameters(\n path.node,\n types,\n ).entries()) {\n if (!types.isArrowFunctionExpression(path.node)) {\n if (types.isRestElement(parameter)) {\n elements.push(\n types.spreadElement(\n types.callExpression(\n types.memberExpression(\n types.arrayExpression([\n types.spreadElement(types.identifier(\"arguments\")),\n ]),\n types.identifier(\"slice\"),\n ),\n [types.numericLiteral(index)],\n ),\n ),\n )\n } else {\n elements.push(\n types.memberExpression(\n types.identifier(\"arguments\"),\n types.numericLiteral(index),\n true,\n ),\n )\n }\n continue\n }\n\n if (types.isIdentifier(parameter)) {\n elements.push(types.identifier(parameter.name))\n } else if (\n types.isRestElement(parameter) &&\n types.isIdentifier(parameter.argument)\n ) {\n elements.push(\n types.spreadElement(types.identifier(parameter.argument.name)),\n )\n }\n }\n\n return types.arrayExpression(elements)\n}\n\nfunction needsArgumentWrapper(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): boolean {\n return (\n types.isArrowFunctionExpression(path.node) &&\n path.node.params.some(\n (parameter) =>\n !types.isIdentifier(parameter) &&\n !(\n types.isRestElement(parameter) &&\n types.isIdentifier(parameter.argument)\n ),\n )\n )\n}\n\nfunction isRestWrapper(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): boolean {\n const parameters = runtimeParameters(path.node, types)\n return parameters.length === 1 && types.isRestElement(parameters[0])\n}\n\n/**\n * Babel adapter for Bitfab's experimental automatic call-span runtime.\n *\n * @experimental The transform protocol and generated function identities may\n * change before the feature is stable.\n */\nexport default function bitfabBabelPlugin(api: {\n types: BabelTypesApi\n}): PluginObject<BitfabPluginState> {\n const { types } = api\n\n return {\n name: \"bitfab-auto-trace\",\n visitor: {\n Program: {\n enter(path: NodePath<BabelTypes.Program>, state: BitfabPluginState) {\n const filename = state.file.opts.filename ?? \"unknown\"\n state.skipFile =\n !shouldTransformBitfabFile(filename, state.opts) ||\n path.scope.hasBinding(AUTO_TRACE_TRANSFORM_MARKER) ||\n path.node.directives.some(\n (directive) => directive.value.value === \"use client\",\n )\n state.runtimeIdentifier =\n path.scope.generateUidIdentifier(\"bitfabAutoSpan\")\n state.activeIdentifier = path.scope.generateUidIdentifier(\n \"bitfabAutoTraceActive\",\n )\n state.wrapperIdentifier =\n path.scope.generateUidIdentifier(\"bitfabAutoWrap\")\n state.definitions = []\n state.usedRuntime = false\n state.usedWrapper = false\n },\n exit(path: NodePath<BabelTypes.Program>, state: BitfabPluginState) {\n if (\n state.skipFile ||\n !state.usedRuntime ||\n !state.runtimeIdentifier ||\n !state.activeIdentifier ||\n !state.wrapperIdentifier\n ) {\n return\n }\n\n state.file.metadata[AUTO_TRACE_TRANSFORM_MARKER] = true\n path.unshiftContainer(\"body\", [\n types.importDeclaration(\n [\n types.importSpecifier(\n state.runtimeIdentifier,\n types.identifier(\"__bitfabAutoSpan\"),\n ),\n types.importSpecifier(\n state.activeIdentifier,\n types.identifier(\"__bitfabAutoTraceActive\"),\n ),\n ...(state.usedWrapper\n ? [\n types.importSpecifier(\n state.wrapperIdentifier,\n types.identifier(\"__bitfabAutoWrap\"),\n ),\n ]\n : []),\n ],\n types.stringLiteral(\n state.opts.runtimeModule ?? \"@bitfab/sdk/auto\",\n ),\n ),\n types.variableDeclaration(\"const\", [\n types.variableDeclarator(\n types.identifier(AUTO_TRACE_TRANSFORM_MARKER),\n types.assignmentExpression(\n \"=\",\n types.memberExpression(\n types.identifier(\"globalThis\"),\n types.identifier(AUTO_TRACE_TRANSFORM_MARKER),\n ),\n types.booleanLiteral(true),\n ),\n ),\n ]),\n ...(state.definitions ?? []),\n ])\n },\n },\n CallExpression: {\n exit(\n path: NodePath<BabelTypes.CallExpression>,\n state: BitfabPluginState,\n ) {\n if (state.skipFile) {\n return\n }\n const configuredName = withNodeFunctionName(path, types)\n if (configuredName === null) {\n return\n }\n if (path.node.arguments.length === 1) {\n path.node.arguments.push(types.identifier(\"undefined\"))\n }\n path.node.arguments.push(types.stringLiteral(configuredName))\n },\n },\n Function: {\n exit(path: NodePath<BabelTypes.Function>, state: BitfabPluginState) {\n const node = path.node as typeof path.node & InstrumentedFunction\n if (\n state.skipFile ||\n node._bitfabInstrumented ||\n !isInstrumentableFunction(node, types) ||\n isBitfabManagedFunction(path, types) ||\n !state.runtimeIdentifier ||\n !state.activeIdentifier ||\n !state.wrapperIdentifier\n ) {\n return\n }\n const name = qualifiedFunctionName(path, types)\n if (name.startsWith(\"anonymous-\")) {\n return\n }\n const normalizedFilename = autoTraceFilename(\n state.file.opts.filename ?? \"unknown\",\n state.opts.cwd ?? state.file.opts.cwd ?? process.cwd(),\n )\n const { line, column } = sourcePosition(path)\n const definition = types.objectExpression([\n types.objectProperty(\n types.identifier(\"id\"),\n types.stringLiteral(\n autoTraceFunctionId(normalizedFilename, name),\n ),\n ),\n types.objectProperty(\n types.identifier(\"name\"),\n types.stringLiteral(name),\n ),\n types.objectProperty(\n types.identifier(\"file\"),\n types.stringLiteral(normalizedFilename),\n ),\n types.objectProperty(\n types.identifier(\"line\"),\n types.numericLiteral(line),\n ),\n types.objectProperty(\n types.identifier(\"column\"),\n types.numericLiteral(column),\n ),\n ...(node.async\n ? [\n types.objectProperty(\n types.identifier(\"async\"),\n types.booleanLiteral(true),\n ),\n ]\n : []),\n ...(isRestWrapper(path, types)\n ? [\n types.objectProperty(\n types.identifier(\"wrapper\"),\n types.booleanLiteral(true),\n ),\n ]\n : []),\n ])\n const definitionIdentifier = path.scope\n .getProgramParent()\n .generateUidIdentifier(\"bitfabAutoDefinition\")\n state.definitions?.push(\n types.variableDeclaration(\"const\", [\n types.variableDeclarator(definitionIdentifier, definition),\n ]),\n )\n\n if (needsArgumentWrapper(path, types)) {\n node._bitfabInstrumented = true\n path.replaceWith(\n types.callExpression(types.cloneNode(state.wrapperIdentifier), [\n types.cloneNode(definitionIdentifier),\n node as BabelTypes.ArrowFunctionExpression,\n ]),\n )\n state.usedRuntime = true\n state.usedWrapper = true\n return\n }\n\n const originalBody = types.isBlockStatement(node.body)\n ? node.body\n : types.blockStatement([types.returnStatement(node.body)])\n const directives = originalBody.directives\n originalBody.directives = []\n\n const body = types.blockStatement(\n [\n types.ifStatement(\n types.callExpression(\n types.cloneNode(state.activeIdentifier),\n [],\n ),\n types.blockStatement([\n types.returnStatement(\n types.callExpression(\n types.cloneNode(state.runtimeIdentifier),\n [\n types.cloneNode(definitionIdentifier),\n parameterInputs(path, types),\n types.arrowFunctionExpression(\n [],\n types.cloneNode(originalBody, true),\n node.async ?? false,\n ),\n ],\n ),\n ),\n ]),\n ),\n ...originalBody.body,\n ],\n directives,\n )\n node.body = body\n node._bitfabInstrumented = true\n state.usedRuntime = true\n },\n },\n },\n }\n}\n","import type { BitfabLoaderOptions } from \"./loaderRuntime.js\"\nimport { bitfabTraceUnplugin } from \"./unplugin.js\"\n\ninterface TurbopackLoader {\n loader: string\n options: BitfabLoaderOptions\n}\n\nexport interface BitfabNextOptions extends BitfabLoaderOptions {\n loader?: string\n}\n\ninterface TurbopackRule {\n condition: {\n all: Array<\"node\" | { not: \"foreign\" }>\n }\n loaders: TurbopackLoader[]\n}\n\ntype TurbopackRuleValue = TurbopackRule | TurbopackRule[] | unknown\n\nexport interface NextConfigLike {\n turbopack?: {\n rules?: Record<string, TurbopackRuleValue>\n [key: string]: unknown\n }\n webpack?: (\n config: WebpackConfigLike,\n context: WebpackContextLike,\n ) => WebpackConfigLike\n [key: string]: unknown\n}\n\ninterface WebpackConfigLike {\n plugins?: unknown[]\n [key: string]: unknown\n}\n\ninterface WebpackContextLike {\n isServer?: boolean\n nextRuntime?: string\n [key: string]: unknown\n}\n\nconst SERVER_MODULE_GLOBS = [\n \"*.js\",\n \"*.jsx\",\n \"*.ts\",\n \"*.tsx\",\n \"*.mjs\",\n \"*.mts\",\n \"*.cjs\",\n \"*.cts\",\n]\n\nfunction appendRule(\n existing: TurbopackRuleValue | undefined,\n rule: TurbopackRule,\n): TurbopackRuleValue {\n if (Array.isArray(existing)) {\n return [...existing, rule]\n }\n return existing === undefined ? rule : [existing, rule]\n}\n\nfunction turbopackRules(\n existing: Record<string, TurbopackRuleValue>,\n options: BitfabLoaderOptions,\n loader: string,\n): Record<string, TurbopackRuleValue> {\n const rules = { ...existing }\n const serverRule = (): TurbopackRule => ({\n condition: { all: [\"node\", { not: \"foreign\" }] },\n loaders: [{ loader, options }],\n })\n for (const glob of SERVER_MODULE_GLOBS) {\n rules[glob] = appendRule(rules[glob], serverRule())\n }\n return rules\n}\n\nexport function createWithBitfabTrace(defaultLoader: string) {\n return function withBitfabTrace<T extends object>(\n nextConfig: T,\n options: BitfabNextOptions = {},\n ): T & NextConfigLike {\n const { loader = defaultLoader, cwd = process.cwd(), ...rest } = options\n const transformOptions = { cwd, ...rest }\n const config = nextConfig as NextConfigLike\n const existingWebpack = config.webpack\n return {\n ...nextConfig,\n turbopack: {\n ...config.turbopack,\n rules: turbopackRules(\n config.turbopack?.rules ?? {},\n transformOptions,\n loader,\n ),\n },\n webpack(config, context) {\n const resolved = existingWebpack\n ? existingWebpack(config, context)\n : config\n if (context.isServer && context.nextRuntime !== \"edge\") {\n resolved.plugins ??= []\n resolved.plugins.push(bitfabTraceUnplugin.webpack(transformOptions))\n }\n return resolved\n },\n }\n }\n}\n\nexport default createWithBitfabTrace(\"@bitfab/transform/loader\")\n"],"mappings":"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","names":["config"]}
1
+ {"version":3,"sources":["../../../bitfab-typescript-transform/src/nextSdk.ts","../../../bitfab-typescript-transform/src/unplugin.ts","../../../bitfab-typescript-transform/src/transform.ts","../../../bitfab-typescript-transform/src/transformOptions.ts","../../../bitfab-typescript-transform/src/babelPlugin.ts","../../../bitfab-typescript-transform/src/next.ts"],"sourcesContent":["import { createWithBitfabTrace } from \"./next.js\"\n\nexport type { BitfabNextOptions } from \"./next.js\"\n\nexport default createWithBitfabTrace(\"@bitfab/sdk/transform/loader\")\n","import { createUnplugin } from \"unplugin\"\nimport { transformBitfabSource } from \"./transform.js\"\nimport type { BitfabTransformOptions } from \"./transformOptions.js\"\nimport { shouldTransformBitfabFile } from \"./transformOptions.js\"\n\nexport const bitfabTraceUnplugin = createUnplugin<\n BitfabTransformOptions | undefined,\n false\n>((options) => {\n const resolvedOptions = options ?? {}\n\n return {\n name: \"bitfab-auto-trace\",\n enforce: \"pre\",\n transform(source, filename) {\n if (!shouldTransformBitfabFile(filename, resolvedOptions)) {\n return null\n }\n\n const result = transformBitfabSource(source, filename, resolvedOptions)\n return result.map ? result : null\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","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\n const { line, column } = sourcePosition(path)\n return `anonymous-${line}-${column}`\n}\n\nfunction isInstrumentableFunction(\n node: BabelTypes.Function,\n types: BabelTypesApi,\n): boolean {\n if (node.generator || types.isClassPrivateMethod(node)) {\n return false\n }\n return (\n !(types.isClassMethod(node) || types.isObjectMethod(node)) ||\n node.kind === \"method\"\n )\n}\n\nfunction sourcePosition(path: NodePath<BabelTypes.Function>): {\n line: number\n column: number\n} {\n const exportDeclaration = path.parentPath?.isExportDeclaration()\n ? path.parentPath.node\n : undefined\n const start = (exportDeclaration ?? path.node).loc?.start\n return { line: start?.line ?? 0, column: start?.column ?? 0 }\n}\n\nfunction qualifiedFunctionName(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): string {\n const ownName = functionName(path, types)\n if (ownName.startsWith(\"anonymous-\")) {\n return ownName\n }\n const scopes: string[] = []\n let ancestor: NodePath | null = path.parentPath\n while (ancestor) {\n if (ancestor.isFunction()) {\n if (!isInstrumentableFunction(ancestor.node, types)) {\n ancestor = ancestor.parentPath\n continue\n }\n const name = functionName(\n ancestor as NodePath<BabelTypes.Function>,\n types,\n )\n if (!name.startsWith(\"anonymous-\")) {\n scopes.unshift(name)\n }\n } else if (\n (ancestor.isClassDeclaration() || ancestor.isClassExpression()) &&\n ancestor.node.id\n ) {\n scopes.unshift(ancestor.node.id.name)\n } else if (ancestor.isObjectExpression()) {\n const parent = ancestor.parentPath?.node\n if (types.isVariableDeclarator(parent)) {\n const name = propertyName(parent.id, types)\n if (name) {\n scopes.unshift(name)\n }\n } else if (types.isObjectProperty(parent) && !parent.computed) {\n const name = propertyName(parent.key, types)\n if (name) {\n scopes.unshift(name)\n }\n }\n }\n ancestor = ancestor.parentPath\n }\n return [...scopes, ownName].join(\".\")\n}\n\nfunction isTraceDecoratorRoot(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): boolean {\n const node = path.node\n if (!types.isClassMethod(node) && !types.isClassPrivateMethod(node)) {\n return false\n }\n\n return (\n node.decorators?.some((decorator) => {\n const expression = decorator.expression\n if (!types.isCallExpression(expression)) {\n return false\n }\n const callee = expression.callee\n return (\n types.isMemberExpression(callee) &&\n !callee.computed &&\n types.isIdentifier(callee.property, { name: \"trace\" })\n )\n }) ?? false\n )\n}\n\nfunction 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","import type { BitfabLoaderOptions } from \"./loaderRuntime.js\"\nimport { bitfabTraceUnplugin } from \"./unplugin.js\"\n\ninterface TurbopackLoader {\n loader: string\n options: BitfabLoaderOptions\n}\n\nexport interface BitfabNextOptions extends BitfabLoaderOptions {\n loader?: string\n}\n\ninterface TurbopackRule {\n condition: {\n all: Array<\"node\" | { not: \"foreign\" }>\n }\n loaders: TurbopackLoader[]\n}\n\ntype TurbopackRuleValue = TurbopackRule | TurbopackRule[] | unknown\n\nexport interface NextConfigLike {\n turbopack?: {\n rules?: Record<string, TurbopackRuleValue>\n [key: string]: unknown\n }\n webpack?: (\n config: WebpackConfigLike,\n context: WebpackContextLike,\n ) => WebpackConfigLike\n [key: string]: unknown\n}\n\ninterface WebpackConfigLike {\n plugins?: unknown[]\n [key: string]: unknown\n}\n\ninterface WebpackContextLike {\n isServer?: boolean\n nextRuntime?: string\n [key: string]: unknown\n}\n\nconst SERVER_MODULE_GLOBS = [\n \"*.js\",\n \"*.jsx\",\n \"*.ts\",\n \"*.tsx\",\n \"*.mjs\",\n \"*.mts\",\n \"*.cjs\",\n \"*.cts\",\n]\n\nfunction appendRule(\n existing: TurbopackRuleValue | undefined,\n rule: TurbopackRule,\n): TurbopackRuleValue {\n if (Array.isArray(existing)) {\n return [...existing, rule]\n }\n return existing === undefined ? rule : [existing, rule]\n}\n\nfunction turbopackRules(\n existing: Record<string, TurbopackRuleValue>,\n options: BitfabLoaderOptions,\n loader: string,\n): Record<string, TurbopackRuleValue> {\n const rules = { ...existing }\n const serverRule = (): TurbopackRule => ({\n condition: { all: [\"node\", { not: \"foreign\" }] },\n loaders: [{ loader, options }],\n })\n for (const glob of SERVER_MODULE_GLOBS) {\n rules[glob] = appendRule(rules[glob], serverRule())\n }\n return rules\n}\n\nexport function createWithBitfabTrace(defaultLoader: string) {\n return function withBitfabTrace<T extends object>(\n nextConfig: T,\n options: BitfabNextOptions = {},\n ): T & NextConfigLike {\n const { loader = defaultLoader, cwd = process.cwd(), ...rest } = options\n const transformOptions = { cwd, ...rest }\n const config = nextConfig as NextConfigLike\n const existingWebpack = config.webpack\n return {\n ...nextConfig,\n turbopack: {\n ...config.turbopack,\n rules: turbopackRules(\n config.turbopack?.rules ?? {},\n transformOptions,\n loader,\n ),\n },\n webpack(config, context) {\n const resolved = existingWebpack\n ? existingWebpack(config, context)\n : config\n if (context.isServer && context.nextRuntime !== \"edge\") {\n resolved.plugins ??= []\n resolved.plugins.push(bitfabTraceUnplugin.webpack(transformOptions))\n }\n return resolved\n },\n }\n }\n}\n\nexport default createWithBitfabTrace(\"@bitfab/transform/loader\")\n"],"mappings":"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","names":["config"]}
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  bitfabTraceUnplugin
3
- } from "../chunk-MN3E2RUU.js";
4
- import "../chunk-IBWW3SP4.js";
5
- import "../chunk-GSHCHCB5.js";
3
+ } from "../chunk-VS36LW4L.js";
4
+ import "../chunk-P7JUVRYZ.js";
5
+ import "../chunk-LXBV37XY.js";
6
6
 
7
7
  // ../bitfab-typescript-transform/src/next.ts
8
8
  var SERVER_MODULE_GLOBS = [
@@ -141,17 +141,6 @@ function isTraceDecoratorRoot(path, types) {
141
141
  return types.isMemberExpression(callee) && !callee.computed && types.isIdentifier(callee.property, { name: "trace" });
142
142
  }) ?? false;
143
143
  }
144
- function isBitfabWrapperArgument(path, types) {
145
- const parent = path.parentPath?.node;
146
- if (!types.isCallExpression(parent)) {
147
- return false;
148
- }
149
- if (!parent.arguments.some((argument) => argument === path.node)) {
150
- return false;
151
- }
152
- const callee = parent.callee;
153
- return types.isMemberExpression(callee) && !callee.computed && types.isIdentifier(callee.property) && (callee.property.name === "withTrace" || callee.property.name === "withSpan");
154
- }
155
144
  function withNodeFunctionName(path, types) {
156
145
  if (path.node.arguments.length > 2) {
157
146
  return null;
@@ -172,32 +161,6 @@ function withNodeFunctionName(path, types) {
172
161
  }
173
162
  return null;
174
163
  }
175
- function functionBindingName(path, types) {
176
- if (types.isFunctionDeclaration(path.node) && path.node.id) {
177
- return path.node.id.name;
178
- }
179
- const parent = path.parentPath?.node;
180
- if (types.isVariableDeclarator(parent) && types.isIdentifier(parent.id)) {
181
- return parent.id.name;
182
- }
183
- return null;
184
- }
185
- function isBitfabWrappedFunction(path, types) {
186
- if (isBitfabWrapperArgument(path, types)) {
187
- return true;
188
- }
189
- const bindingName = functionBindingName(path, types);
190
- if (!bindingName) {
191
- return false;
192
- }
193
- const binding = path.scope.getBinding(bindingName);
194
- return binding?.referencePaths.some(
195
- (referencePath) => isBitfabWrapperArgument(referencePath, types)
196
- ) ?? false;
197
- }
198
- function isBitfabManagedFunction(path, types) {
199
- return isTraceDecoratorRoot(path, types) || isBitfabWrappedFunction(path, types);
200
- }
201
164
  function runtimeParameters(node, types) {
202
165
  return node.params.filter(
203
166
  (parameter) => !types.isIdentifier(parameter, { name: "this" })
@@ -336,7 +299,7 @@ function bitfabBabelPlugin(api) {
336
299
  Function: {
337
300
  exit(path, state) {
338
301
  const node = path.node;
339
- if (state.skipFile || node._bitfabInstrumented || !isInstrumentableFunction(node, types) || isBitfabManagedFunction(path, types) || !state.runtimeIdentifier || !state.activeIdentifier || !state.wrapperIdentifier) {
302
+ if (state.skipFile || node._bitfabInstrumented || !isInstrumentableFunction(node, types) || isTraceDecoratorRoot(path, types) || !state.runtimeIdentifier || !state.activeIdentifier || !state.wrapperIdentifier) {
340
303
  return;
341
304
  }
342
305
  const name = qualifiedFunctionName(path, types);