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