bitfab 0.61.0 → 0.61.2

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 (141) hide show
  1. package/README.md +8 -5
  2. package/dist/autoTrace.cjs +1 -1
  3. package/dist/autoTrace.cjs.map +1 -1
  4. package/dist/autoTrace.js +1 -1
  5. package/dist/chunk-6R33XLNY.js +28 -0
  6. package/dist/chunk-6R33XLNY.js.map +1 -0
  7. package/dist/{chunk-6JQL37VC.js → chunk-A4UVO6BQ.js} +171 -48
  8. package/dist/chunk-A4UVO6BQ.js.map +1 -0
  9. package/dist/{chunk-5DNB7EN7.js → chunk-BMJNDIVA.js} +2 -2
  10. package/dist/chunk-BMJNDIVA.js.map +1 -0
  11. package/dist/{chunk-2M62EGYK.js → chunk-INA6W7OB.js} +42 -2
  12. package/dist/{chunk-2M62EGYK.js.map → chunk-INA6W7OB.js.map} +1 -1
  13. package/dist/{chunk-O52C6BRF.js → chunk-LUOCT4HG.js} +7 -7
  14. package/dist/{chunk-O52C6BRF.js.map → chunk-LUOCT4HG.js.map} +1 -1
  15. package/dist/{chunk-J54ZR6NF.js → chunk-MTK6PZHA.js} +122 -52
  16. package/dist/chunk-MTK6PZHA.js.map +1 -0
  17. package/dist/{chunk-3BTITSNA.js → chunk-ONZFMRRF.js} +42 -2
  18. package/dist/{chunk-3BTITSNA.js.map → chunk-ONZFMRRF.js.map} +1 -1
  19. package/dist/chunk-OXFZJP4E.js +30 -0
  20. package/dist/chunk-OXFZJP4E.js.map +1 -0
  21. package/dist/chunk-PACLPKDH.js +513 -0
  22. package/dist/chunk-PACLPKDH.js.map +1 -0
  23. package/dist/{http-2EZA7I4F.js → http-2R6MSRVA.js} +2 -2
  24. package/dist/{http-PKQBVZD6.js → http-KM6QWKAP.js} +2 -2
  25. package/dist/index.cjs +212 -49
  26. package/dist/index.cjs.map +1 -1
  27. package/dist/index.d.cts +27 -1
  28. package/dist/index.d.ts +27 -1
  29. package/dist/index.js +4 -4
  30. package/dist/node.cjs +212 -49
  31. package/dist/node.cjs.map +1 -1
  32. package/dist/node.js +4 -4
  33. package/dist/{replay-XC2YOK4X.js → replay-6UUBJBLK.js} +3 -3
  34. package/dist/replayCli.js +4 -3
  35. package/dist/replayCli.js.map +1 -1
  36. package/dist/seedCli.js +2 -2
  37. package/dist/transform/babel.cjs +418 -0
  38. package/dist/transform/babel.cjs.map +1 -0
  39. package/dist/transform/babel.d.cts +27 -0
  40. package/dist/transform/babel.d.ts +27 -0
  41. package/dist/transform/babel.js +379 -0
  42. package/dist/transform/babel.js.map +1 -0
  43. package/dist/transform/bun.cjs +586 -0
  44. package/dist/transform/bun.cjs.map +1 -0
  45. package/dist/transform/bun.d.cts +12 -0
  46. package/dist/transform/bun.d.ts +12 -0
  47. package/dist/transform/bun.js +14 -0
  48. package/dist/transform/bun.js.map +1 -0
  49. package/dist/transform/esbuild.cjs +586 -0
  50. package/dist/transform/esbuild.cjs.map +1 -0
  51. package/dist/transform/esbuild.d.cts +12 -0
  52. package/dist/transform/esbuild.d.ts +12 -0
  53. package/dist/transform/esbuild.js +14 -0
  54. package/dist/transform/esbuild.js.map +1 -0
  55. package/dist/transform/loaderRuntime.cjs +627 -0
  56. package/dist/transform/loaderRuntime.cjs.map +1 -0
  57. package/dist/transform/loaderRuntime.d.cts +12 -0
  58. package/dist/transform/loaderRuntime.d.ts +12 -0
  59. package/dist/transform/loaderRuntime.js +93 -0
  60. package/dist/transform/loaderRuntime.js.map +1 -0
  61. package/dist/transform/nest.cjs +589 -0
  62. package/dist/transform/nest.cjs.map +1 -0
  63. package/dist/transform/nest.d.cts +16 -0
  64. package/dist/transform/nest.d.ts +16 -0
  65. package/dist/transform/nest.js +17 -0
  66. package/dist/transform/nest.js.map +1 -0
  67. package/dist/transform/next.cjs +641 -0
  68. package/dist/transform/next.cjs.map +1 -0
  69. package/dist/transform/next.d.cts +40 -0
  70. package/dist/transform/next.d.ts +40 -0
  71. package/dist/transform/next.js +69 -0
  72. package/dist/transform/next.js.map +1 -0
  73. package/dist/transform/nodeLoader.js +640 -0
  74. package/dist/transform/nodeLoader.js.map +1 -0
  75. package/dist/transform/register.js +5 -0
  76. package/dist/transform/register.js.map +1 -0
  77. package/dist/transform/rolldown.cjs +586 -0
  78. package/dist/transform/rolldown.cjs.map +1 -0
  79. package/dist/transform/rolldown.d.cts +12 -0
  80. package/dist/transform/rolldown.d.ts +12 -0
  81. package/dist/transform/rolldown.js +14 -0
  82. package/dist/transform/rolldown.js.map +1 -0
  83. package/dist/transform/rollup.cjs +586 -0
  84. package/dist/transform/rollup.cjs.map +1 -0
  85. package/dist/transform/rollup.d.cts +12 -0
  86. package/dist/transform/rollup.d.ts +12 -0
  87. package/dist/transform/rollup.js +14 -0
  88. package/dist/transform/rollup.js.map +1 -0
  89. package/dist/transform/rsbuild.cjs +586 -0
  90. package/dist/transform/rsbuild.cjs.map +1 -0
  91. package/dist/transform/rsbuild.d.cts +12 -0
  92. package/dist/transform/rsbuild.d.ts +12 -0
  93. package/dist/transform/rsbuild.js +14 -0
  94. package/dist/transform/rsbuild.js.map +1 -0
  95. package/dist/transform/rspack.cjs +586 -0
  96. package/dist/transform/rspack.cjs.map +1 -0
  97. package/dist/transform/rspack.d.cts +12 -0
  98. package/dist/transform/rspack.d.ts +12 -0
  99. package/dist/transform/rspack.js +14 -0
  100. package/dist/transform/rspack.js.map +1 -0
  101. package/dist/transform/swc.cjs +592 -0
  102. package/dist/transform/swc.cjs.map +1 -0
  103. package/dist/transform/swc.d.cts +32 -0
  104. package/dist/transform/swc.d.ts +32 -0
  105. package/dist/transform/swc.js +33 -0
  106. package/dist/transform/swc.js.map +1 -0
  107. package/dist/transform/typescript.cjs +566 -0
  108. package/dist/transform/typescript.cjs.map +1 -0
  109. package/dist/transform/typescript.d.cts +22 -0
  110. package/dist/transform/typescript.d.ts +22 -0
  111. package/dist/transform/typescript.js +10 -0
  112. package/dist/transform/typescript.js.map +1 -0
  113. package/dist/transform/unplugin.cjs +583 -0
  114. package/dist/transform/unplugin.cjs.map +1 -0
  115. package/dist/transform/unplugin.d.cts +6 -0
  116. package/dist/transform/unplugin.d.ts +6 -0
  117. package/dist/transform/unplugin.js +9 -0
  118. package/dist/transform/unplugin.js.map +1 -0
  119. package/dist/transform/vite.cjs +586 -0
  120. package/dist/transform/vite.cjs.map +1 -0
  121. package/dist/transform/vite.d.cts +15 -0
  122. package/dist/transform/vite.d.ts +15 -0
  123. package/dist/transform/vite.js +14 -0
  124. package/dist/transform/vite.js.map +1 -0
  125. package/dist/transform/webpack.cjs +586 -0
  126. package/dist/transform/webpack.cjs.map +1 -0
  127. package/dist/transform/webpack.d.cts +12 -0
  128. package/dist/transform/webpack.d.ts +12 -0
  129. package/dist/transform/webpack.js +14 -0
  130. package/dist/transform/webpack.js.map +1 -0
  131. package/dist/transformOptions-Df2_Chtc.d.cts +10 -0
  132. package/dist/transformOptions-Df2_Chtc.d.ts +10 -0
  133. package/package.json +167 -7
  134. package/transform-loader.cjs +19 -0
  135. package/transform-loader.d.cts +19 -0
  136. package/dist/chunk-5DNB7EN7.js.map +0 -1
  137. package/dist/chunk-6JQL37VC.js.map +0 -1
  138. package/dist/chunk-J54ZR6NF.js.map +0 -1
  139. /package/dist/{http-2EZA7I4F.js.map → http-2R6MSRVA.js.map} +0 -0
  140. /package/dist/{http-PKQBVZD6.js.map → http-KM6QWKAP.js.map} +0 -0
  141. /package/dist/{replay-XC2YOK4X.js.map → replay-6UUBJBLK.js.map} +0 -0
@@ -0,0 +1,627 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // ../bitfab-typescript-transform/src/loaderRuntime.ts
31
+ var loaderRuntime_exports = {};
32
+ __export(loaderRuntime_exports, {
33
+ transformBitfabModuleToJavaScript: () => transformBitfabModuleToJavaScript
34
+ });
35
+ module.exports = __toCommonJS(loaderRuntime_exports);
36
+ var import_node_path = require("path");
37
+ var import_typescript2 = __toESM(require("typescript"), 1);
38
+
39
+ // ../bitfab-typescript-transform/src/transformOptions.ts
40
+ var AUTO_TRACE_FUNCTION_ID_VERSION = "ts-auto-v1";
41
+ var AUTO_TRACE_TRANSFORM_MARKER = "__bitfab_auto_trace_transformed_v1__";
42
+ function autoTraceFunctionId(file, name) {
43
+ return `${AUTO_TRACE_FUNCTION_ID_VERSION}:${file}#${name}`;
44
+ }
45
+ function shouldTransformBitfabFile(filename, options) {
46
+ if (!filename) {
47
+ return false;
48
+ }
49
+ if (options.include && !options.include(filename)) {
50
+ return false;
51
+ }
52
+ const normalized = filename.replace(/\\/g, "/").split(/[?#]/, 1)[0] ?? "";
53
+ const normalizedCwd = options.cwd?.replace(/\\/g, "/").replace(/\/$/, "");
54
+ const isAbsolute = normalized.startsWith("/") || /^[A-Za-z]:\//.test(normalized);
55
+ if (normalizedCwd && isAbsolute && normalized !== normalizedCwd && !normalized.startsWith(`${normalizedCwd}/`)) {
56
+ return false;
57
+ }
58
+ return !normalized.includes("/node_modules/") && !normalized.endsWith(".d.ts") && /\.[cm]?[jt]sx?$/.test(normalized);
59
+ }
60
+
61
+ // ../bitfab-typescript-transform/src/typescriptTransformer.ts
62
+ var import_typescript = __toESM(require("typescript"), 1);
63
+ function hasUseClientDirective(sourceFile) {
64
+ return sourceFile.statements.some(
65
+ (statement) => import_typescript.default.isExpressionStatement(statement) && import_typescript.default.isStringLiteral(statement.expression) && statement.expression.text === "use client"
66
+ );
67
+ }
68
+ function hasTransformMarker(sourceFile) {
69
+ return sourceFile.statements.some(
70
+ (statement) => import_typescript.default.isVariableStatement(statement) && statement.declarationList.declarations.some(
71
+ (declaration) => import_typescript.default.isIdentifier(declaration.name) && declaration.name.text === AUTO_TRACE_TRANSFORM_MARKER
72
+ )
73
+ );
74
+ }
75
+ function isBitfabMemberCall(node, memberName) {
76
+ return import_typescript.default.isCallExpression(node) && import_typescript.default.isPropertyAccessExpression(node.expression) && node.expression.name.text === memberName;
77
+ }
78
+ function withNodeFunctionName(node) {
79
+ if (!isBitfabMemberCall(node, "withNode") || node.arguments.length > 2) {
80
+ return null;
81
+ }
82
+ const fn = node.arguments[node.arguments.length - 1];
83
+ if (import_typescript.default.isIdentifier(fn)) {
84
+ return fn.text;
85
+ }
86
+ if (import_typescript.default.isPropertyAccessExpression(fn)) {
87
+ return fn.name.text;
88
+ }
89
+ if (import_typescript.default.isFunctionExpression(fn) && fn.name) {
90
+ return fn.name.text;
91
+ }
92
+ return null;
93
+ }
94
+ function traceDecorators(node) {
95
+ if (!import_typescript.default.canHaveDecorators(node)) {
96
+ return [];
97
+ }
98
+ return import_typescript.default.getDecorators(node) ?? [];
99
+ }
100
+ function isTraceDecoratorRoot(node) {
101
+ return traceDecorators(node).some(
102
+ (decorator) => isBitfabMemberCall(decorator.expression, "trace")
103
+ );
104
+ }
105
+ function collectBitfabWrappedFunctions(sourceFile) {
106
+ const inlineRoots = /* @__PURE__ */ new Set();
107
+ const referencedRoots = /* @__PURE__ */ new Set();
108
+ function visit(node) {
109
+ if (isBitfabMemberCall(node, "withTrace") || isBitfabMemberCall(node, "withSpan")) {
110
+ const fn = node.arguments[node.arguments.length - 1];
111
+ if (fn && (import_typescript.default.isArrowFunction(fn) || import_typescript.default.isFunctionExpression(fn))) {
112
+ inlineRoots.add(fn);
113
+ } else if (fn && import_typescript.default.isIdentifier(fn)) {
114
+ referencedRoots.add(fn.text);
115
+ }
116
+ }
117
+ import_typescript.default.forEachChild(node, visit);
118
+ }
119
+ visit(sourceFile);
120
+ return { inlineRoots, referencedRoots };
121
+ }
122
+ function declaredFunctionName(node) {
123
+ if (node.name && import_typescript.default.isIdentifier(node.name)) {
124
+ return node.name.text;
125
+ }
126
+ if ((import_typescript.default.isArrowFunction(node) || import_typescript.default.isFunctionExpression(node)) && import_typescript.default.isVariableDeclaration(node.parent) && import_typescript.default.isIdentifier(node.parent.name)) {
127
+ return node.parent.name.text;
128
+ }
129
+ if ((import_typescript.default.isArrowFunction(node) || import_typescript.default.isFunctionExpression(node)) && import_typescript.default.isPropertyAssignment(node.parent) && (import_typescript.default.isIdentifier(node.parent.name) || import_typescript.default.isStringLiteral(node.parent.name))) {
130
+ return node.parent.name.text;
131
+ }
132
+ return null;
133
+ }
134
+ function objectContainerName(node) {
135
+ if (import_typescript.default.isVariableDeclaration(node.parent) && import_typescript.default.isIdentifier(node.parent.name)) {
136
+ return node.parent.name.text;
137
+ }
138
+ if (import_typescript.default.isPropertyAssignment(node.parent) && (import_typescript.default.isIdentifier(node.parent.name) || import_typescript.default.isStringLiteral(node.parent.name))) {
139
+ return node.parent.name.text;
140
+ }
141
+ return null;
142
+ }
143
+ function functionName(node) {
144
+ const ownName = declaredFunctionName(node);
145
+ if (ownName) {
146
+ const scopes = [];
147
+ let ancestor = node.parent;
148
+ while (ancestor) {
149
+ if (isInstrumentableFunction(ancestor)) {
150
+ const name = declaredFunctionName(ancestor);
151
+ if (name) {
152
+ scopes.unshift(name);
153
+ }
154
+ } else if ((import_typescript.default.isClassDeclaration(ancestor) || import_typescript.default.isClassExpression(ancestor)) && ancestor.name) {
155
+ scopes.unshift(ancestor.name.text);
156
+ } else if (import_typescript.default.isObjectLiteralExpression(ancestor)) {
157
+ const name = objectContainerName(ancestor);
158
+ if (name) {
159
+ scopes.unshift(name);
160
+ }
161
+ }
162
+ ancestor = ancestor.parent;
163
+ }
164
+ return [...scopes, ownName].join(".");
165
+ }
166
+ const sourceFile = node.getSourceFile();
167
+ const position = sourceFile.getLineAndCharacterOfPosition(node.getStart());
168
+ return `anonymous-${position.line + 1}-${position.character}`;
169
+ }
170
+ function isBitfabWrappedFunction(node, inlineRoots, referencedRoots) {
171
+ if (inlineRoots.has(node)) {
172
+ return true;
173
+ }
174
+ const name = declaredFunctionName(node);
175
+ return name !== null && referencedRoots.has(name);
176
+ }
177
+ function isInstrumentableFunction(node) {
178
+ if (!import_typescript.default.isFunctionDeclaration(node) && !import_typescript.default.isFunctionExpression(node) && !import_typescript.default.isArrowFunction(node) && !import_typescript.default.isMethodDeclaration(node)) {
179
+ return false;
180
+ }
181
+ return node.body !== void 0 && node.asteriskToken === void 0 && (!node.name || !import_typescript.default.isPrivateIdentifier(node.name));
182
+ }
183
+ function normalizedFilename(filename, cwd) {
184
+ const normalized = filename.replace(/\\/g, "/").split(/[?#]/, 1)[0] ?? "";
185
+ const normalizedCwd = cwd.replace(/\\/g, "/").replace(/\/$/, "");
186
+ return normalized.startsWith(`${normalizedCwd}/`) ? normalized.slice(normalizedCwd.length + 1) : normalized;
187
+ }
188
+ function parameterInputs(factory, node) {
189
+ return factory.createArrayLiteralExpression(
190
+ node.parameters.map((parameter, index) => {
191
+ if (!import_typescript.default.isArrowFunction(node)) {
192
+ if (parameter.dotDotDotToken) {
193
+ return factory.createSpreadElement(
194
+ factory.createCallExpression(
195
+ factory.createPropertyAccessExpression(
196
+ factory.createArrayLiteralExpression([
197
+ factory.createSpreadElement(
198
+ factory.createIdentifier("arguments")
199
+ )
200
+ ]),
201
+ "slice"
202
+ ),
203
+ void 0,
204
+ [factory.createNumericLiteral(index)]
205
+ )
206
+ );
207
+ }
208
+ return factory.createElementAccessExpression(
209
+ factory.createIdentifier("arguments"),
210
+ factory.createNumericLiteral(index)
211
+ );
212
+ }
213
+ if (import_typescript.default.isIdentifier(parameter.name)) {
214
+ const identifier = factory.createIdentifier(parameter.name.text);
215
+ return parameter.dotDotDotToken ? factory.createSpreadElement(identifier) : identifier;
216
+ }
217
+ throw new Error(
218
+ "Bitfab transform invariant: arrow parameter requires argument wrapper"
219
+ );
220
+ })
221
+ );
222
+ }
223
+ function needsArgumentWrapper(node) {
224
+ return import_typescript.default.isArrowFunction(node) && node.parameters.some(
225
+ (parameter) => !import_typescript.default.isIdentifier(parameter.name) || parameter.initializer !== void 0
226
+ );
227
+ }
228
+ function isRestWrapper(node) {
229
+ return node.parameters.length === 1 && node.parameters[0]?.dotDotDotToken !== void 0;
230
+ }
231
+ function splitDirectivePrologue(body) {
232
+ const firstNonDirective = body.statements.findIndex(
233
+ (statement) => !(import_typescript.default.isExpressionStatement(statement) && import_typescript.default.isStringLiteral(statement.expression))
234
+ );
235
+ if (firstNonDirective === -1) {
236
+ return { directives: body.statements, statements: [] };
237
+ }
238
+ return {
239
+ directives: body.statements.slice(0, firstNonDirective),
240
+ statements: body.statements.slice(firstNonDirective)
241
+ };
242
+ }
243
+ function updateFunctionBody(factory, node, body) {
244
+ if (import_typescript.default.isFunctionDeclaration(node)) {
245
+ return factory.updateFunctionDeclaration(
246
+ node,
247
+ node.modifiers,
248
+ node.asteriskToken,
249
+ node.name,
250
+ node.typeParameters,
251
+ node.parameters,
252
+ node.type,
253
+ body
254
+ );
255
+ }
256
+ if (import_typescript.default.isFunctionExpression(node)) {
257
+ return factory.updateFunctionExpression(
258
+ node,
259
+ node.modifiers,
260
+ node.asteriskToken,
261
+ node.name,
262
+ node.typeParameters,
263
+ node.parameters,
264
+ node.type,
265
+ body
266
+ );
267
+ }
268
+ if (import_typescript.default.isArrowFunction(node)) {
269
+ return factory.updateArrowFunction(
270
+ node,
271
+ node.modifiers,
272
+ node.typeParameters,
273
+ node.parameters,
274
+ node.type,
275
+ node.equalsGreaterThanToken,
276
+ body
277
+ );
278
+ }
279
+ if (import_typescript.default.isMethodDeclaration(node)) {
280
+ return factory.updateMethodDeclaration(
281
+ node,
282
+ node.modifiers,
283
+ node.asteriskToken,
284
+ node.name,
285
+ node.questionToken,
286
+ node.typeParameters,
287
+ node.parameters,
288
+ node.type,
289
+ body
290
+ );
291
+ }
292
+ return node;
293
+ }
294
+ function createBitfabTypeScriptTransformer(options = {}) {
295
+ return (context) => (sourceFile) => {
296
+ if (hasUseClientDirective(sourceFile) || hasTransformMarker(sourceFile) || !shouldTransformBitfabFile(sourceFile.fileName, options)) {
297
+ return sourceFile;
298
+ }
299
+ const { factory } = context;
300
+ const { inlineRoots, referencedRoots } = collectBitfabWrappedFunctions(sourceFile);
301
+ const runtimeIdentifier = factory.createUniqueName("bitfabAutoSpan");
302
+ const activeIdentifier = factory.createUniqueName("bitfabAutoTraceActive");
303
+ const wrapperIdentifier = factory.createUniqueName("bitfabAutoWrap");
304
+ const transformedNodes = /* @__PURE__ */ new Set();
305
+ const definitions = [];
306
+ let usedRuntime = false;
307
+ let usedWrapper = false;
308
+ const cwd = options.cwd ?? process.cwd();
309
+ const file = normalizedFilename(sourceFile.fileName, cwd);
310
+ const visitor = (node) => {
311
+ const visited = import_typescript.default.visitEachChild(node, visitor, context);
312
+ if (import_typescript.default.isCallExpression(node) && import_typescript.default.isCallExpression(visited)) {
313
+ const configuredName = withNodeFunctionName(node);
314
+ if (configuredName !== null) {
315
+ const args = [...visited.arguments];
316
+ if (args.length === 1) {
317
+ args.push(factory.createIdentifier("undefined"));
318
+ }
319
+ args.push(factory.createStringLiteral(configuredName));
320
+ return factory.updateCallExpression(
321
+ visited,
322
+ visited.expression,
323
+ visited.typeArguments,
324
+ args
325
+ );
326
+ }
327
+ }
328
+ if (!isInstrumentableFunction(node)) {
329
+ return visited;
330
+ }
331
+ if (!isInstrumentableFunction(visited) || transformedNodes.has(visited) || isTraceDecoratorRoot(node) || isBitfabWrappedFunction(node, inlineRoots, referencedRoots)) {
332
+ return visited;
333
+ }
334
+ const name = functionName(node);
335
+ if (name.startsWith("anonymous-")) {
336
+ return visited;
337
+ }
338
+ const position = sourceFile.getLineAndCharacterOfPosition(node.getStart());
339
+ const definition = factory.createObjectLiteralExpression(
340
+ [
341
+ factory.createPropertyAssignment(
342
+ "id",
343
+ factory.createStringLiteral(autoTraceFunctionId(file, name))
344
+ ),
345
+ factory.createPropertyAssignment(
346
+ "name",
347
+ factory.createStringLiteral(name)
348
+ ),
349
+ factory.createPropertyAssignment(
350
+ "file",
351
+ factory.createStringLiteral(file)
352
+ ),
353
+ factory.createPropertyAssignment(
354
+ "line",
355
+ factory.createNumericLiteral(position.line + 1)
356
+ ),
357
+ factory.createPropertyAssignment(
358
+ "column",
359
+ factory.createNumericLiteral(position.character)
360
+ ),
361
+ ...node.modifiers?.some(
362
+ (modifier) => modifier.kind === import_typescript.default.SyntaxKind.AsyncKeyword
363
+ ) ? [factory.createPropertyAssignment("async", factory.createTrue())] : [],
364
+ ...isRestWrapper(node) ? [
365
+ factory.createPropertyAssignment(
366
+ "wrapper",
367
+ factory.createTrue()
368
+ )
369
+ ] : []
370
+ ],
371
+ false
372
+ );
373
+ const definitionIdentifier = factory.createUniqueName(
374
+ "bitfabAutoDefinition"
375
+ );
376
+ definitions.push(
377
+ factory.createVariableStatement(
378
+ void 0,
379
+ factory.createVariableDeclarationList(
380
+ [
381
+ factory.createVariableDeclaration(
382
+ definitionIdentifier,
383
+ void 0,
384
+ void 0,
385
+ definition
386
+ )
387
+ ],
388
+ import_typescript.default.NodeFlags.Const
389
+ )
390
+ )
391
+ );
392
+ if (needsArgumentWrapper(visited)) {
393
+ usedRuntime = true;
394
+ usedWrapper = true;
395
+ return factory.createCallExpression(wrapperIdentifier, void 0, [
396
+ definitionIdentifier,
397
+ visited
398
+ ]);
399
+ }
400
+ const visitedBody = visited.body;
401
+ const originalBody = import_typescript.default.isBlock(visitedBody) ? visitedBody : factory.createBlock(
402
+ [factory.createReturnStatement(visitedBody)],
403
+ true
404
+ );
405
+ const { directives, statements } = splitDirectivePrologue(originalBody);
406
+ const invoke = factory.createArrowFunction(
407
+ hasAsyncModifier(node) ? [factory.createModifier(import_typescript.default.SyntaxKind.AsyncKeyword)] : void 0,
408
+ void 0,
409
+ [],
410
+ void 0,
411
+ factory.createToken(import_typescript.default.SyntaxKind.EqualsGreaterThanToken),
412
+ factory.updateBlock(originalBody, statements)
413
+ );
414
+ const body = factory.createBlock(
415
+ [
416
+ ...directives,
417
+ factory.createIfStatement(
418
+ factory.createCallExpression(activeIdentifier, void 0, []),
419
+ factory.createBlock(
420
+ [
421
+ factory.createReturnStatement(
422
+ factory.createCallExpression(runtimeIdentifier, void 0, [
423
+ definitionIdentifier,
424
+ parameterInputs(factory, visited),
425
+ invoke
426
+ ])
427
+ )
428
+ ],
429
+ true
430
+ )
431
+ ),
432
+ ...statements
433
+ ],
434
+ true
435
+ );
436
+ const updated = updateFunctionBody(factory, visited, body);
437
+ transformedNodes.add(updated);
438
+ usedRuntime = true;
439
+ return updated;
440
+ };
441
+ const transformed = import_typescript.default.visitEachChild(sourceFile, visitor, context);
442
+ if (!usedRuntime) {
443
+ return transformed;
444
+ }
445
+ const runtimeImport = factory.createImportDeclaration(
446
+ void 0,
447
+ factory.createImportClause(
448
+ false,
449
+ void 0,
450
+ factory.createNamedImports([
451
+ factory.createImportSpecifier(
452
+ false,
453
+ factory.createIdentifier("__bitfabAutoSpan"),
454
+ runtimeIdentifier
455
+ ),
456
+ factory.createImportSpecifier(
457
+ false,
458
+ factory.createIdentifier("__bitfabAutoTraceActive"),
459
+ activeIdentifier
460
+ ),
461
+ ...usedWrapper ? [
462
+ factory.createImportSpecifier(
463
+ false,
464
+ factory.createIdentifier("__bitfabAutoWrap"),
465
+ wrapperIdentifier
466
+ )
467
+ ] : []
468
+ ])
469
+ ),
470
+ factory.createStringLiteral(options.runtimeModule ?? "bitfab/auto")
471
+ );
472
+ const transformMarker = factory.createVariableStatement(
473
+ void 0,
474
+ factory.createVariableDeclarationList(
475
+ [
476
+ factory.createVariableDeclaration(
477
+ factory.createIdentifier(AUTO_TRACE_TRANSFORM_MARKER),
478
+ void 0,
479
+ void 0,
480
+ factory.createAssignment(
481
+ factory.createPropertyAccessExpression(
482
+ factory.createIdentifier("globalThis"),
483
+ factory.createIdentifier(AUTO_TRACE_TRANSFORM_MARKER)
484
+ ),
485
+ factory.createTrue()
486
+ )
487
+ )
488
+ ],
489
+ import_typescript.default.NodeFlags.Const
490
+ )
491
+ );
492
+ return factory.updateSourceFile(transformed, [
493
+ context.getCompilerOptions().module === import_typescript.default.ModuleKind.CommonJS ? factory.createVariableStatement(
494
+ void 0,
495
+ factory.createVariableDeclarationList(
496
+ [
497
+ factory.createVariableDeclaration(
498
+ factory.createObjectBindingPattern([
499
+ factory.createBindingElement(
500
+ void 0,
501
+ "__bitfabAutoSpan",
502
+ runtimeIdentifier
503
+ ),
504
+ factory.createBindingElement(
505
+ void 0,
506
+ "__bitfabAutoTraceActive",
507
+ activeIdentifier
508
+ ),
509
+ ...usedWrapper ? [
510
+ factory.createBindingElement(
511
+ void 0,
512
+ "__bitfabAutoWrap",
513
+ wrapperIdentifier
514
+ )
515
+ ] : []
516
+ ]),
517
+ void 0,
518
+ void 0,
519
+ factory.createCallExpression(
520
+ factory.createIdentifier("require"),
521
+ void 0,
522
+ [
523
+ factory.createStringLiteral(
524
+ options.runtimeModule ?? "bitfab/auto"
525
+ )
526
+ ]
527
+ )
528
+ )
529
+ ],
530
+ import_typescript.default.NodeFlags.Const
531
+ )
532
+ ) : runtimeImport,
533
+ transformMarker,
534
+ ...definitions,
535
+ ...transformed.statements
536
+ ]);
537
+ };
538
+ }
539
+ function hasAsyncModifier(node) {
540
+ return import_typescript.default.canHaveModifiers(node) ? import_typescript.default.getModifiers(node)?.some((modifier) => modifier.kind === import_typescript.default.SyntaxKind.AsyncKeyword) ?? false : false;
541
+ }
542
+
543
+ // ../bitfab-typescript-transform/src/loaderRuntime.ts
544
+ var OPTIONS_THAT_ONLY_APPLY_TO_A_WHOLE_PROGRAM = [
545
+ "composite",
546
+ "declarationDir",
547
+ "incremental",
548
+ "outDir",
549
+ "rootDir",
550
+ "rootDirs",
551
+ "tsBuildInfoFile"
552
+ ];
553
+ function readCompilerOptions(filename, configuredPath) {
554
+ const configPath = configuredPath ?? import_typescript2.default.findConfigFile((0, import_node_path.dirname)(filename), import_typescript2.default.sys.fileExists, "tsconfig.json");
555
+ if (!configPath) {
556
+ return {};
557
+ }
558
+ const config = import_typescript2.default.readConfigFile(configPath, import_typescript2.default.sys.readFile);
559
+ if (config.error) {
560
+ throw new Error(
561
+ import_typescript2.default.flattenDiagnosticMessageText(config.error.messageText, "\n")
562
+ );
563
+ }
564
+ const { options } = import_typescript2.default.parseJsonConfigFileContent(
565
+ config.config,
566
+ import_typescript2.default.sys,
567
+ (0, import_node_path.dirname)(configPath)
568
+ );
569
+ for (const option of OPTIONS_THAT_ONLY_APPLY_TO_A_WHOLE_PROGRAM) {
570
+ delete options[option];
571
+ }
572
+ return options;
573
+ }
574
+ function moduleKindForFormat(filename, format) {
575
+ if (format === "commonjs" || filename.endsWith(".cts")) {
576
+ return import_typescript2.default.ModuleKind.CommonJS;
577
+ }
578
+ return import_typescript2.default.ModuleKind.ESNext;
579
+ }
580
+ function transformBitfabModuleToJavaScript(source, filename, options = {}, format, sourceMapMode = "external") {
581
+ const { tsconfig, ...transformOptions } = options;
582
+ if (!shouldTransformBitfabFile(filename, transformOptions)) {
583
+ return { code: source };
584
+ }
585
+ const compilerOptions = readCompilerOptions(filename, tsconfig);
586
+ const result = import_typescript2.default.transpileModule(source, {
587
+ compilerOptions: {
588
+ ...compilerOptions,
589
+ allowJs: true,
590
+ declaration: false,
591
+ emitDeclarationOnly: false,
592
+ inlineSourceMap: sourceMapMode === "inline",
593
+ inlineSources: sourceMapMode === "inline",
594
+ module: moduleKindForFormat(filename, format),
595
+ moduleResolution: format === "commonjs" ? import_typescript2.default.ModuleResolutionKind.Node10 : import_typescript2.default.ModuleResolutionKind.Bundler,
596
+ noEmit: false,
597
+ noEmitOnError: false,
598
+ sourceMap: sourceMapMode === "external"
599
+ },
600
+ fileName: filename,
601
+ reportDiagnostics: true,
602
+ transformers: {
603
+ before: [createBitfabTypeScriptTransformer(transformOptions)]
604
+ }
605
+ });
606
+ const errors = result.diagnostics?.filter(
607
+ (diagnostic) => diagnostic.category === import_typescript2.default.DiagnosticCategory.Error
608
+ );
609
+ if (errors && errors.length > 0) {
610
+ throw new Error(
611
+ import_typescript2.default.formatDiagnostics(errors, {
612
+ getCanonicalFileName: (file) => file,
613
+ getCurrentDirectory: () => process.cwd(),
614
+ getNewLine: () => "\n"
615
+ })
616
+ );
617
+ }
618
+ return {
619
+ code: result.outputText,
620
+ ...result.sourceMapText ? { map: result.sourceMapText } : {}
621
+ };
622
+ }
623
+ // Annotate the CommonJS export names for ESM import in node:
624
+ 0 && (module.exports = {
625
+ transformBitfabModuleToJavaScript
626
+ });
627
+ //# sourceMappingURL=loaderRuntime.cjs.map