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.
- package/README.md +8 -5
- package/dist/autoTrace.cjs +1 -1
- package/dist/autoTrace.cjs.map +1 -1
- package/dist/autoTrace.js +1 -1
- package/dist/chunk-6R33XLNY.js +28 -0
- package/dist/chunk-6R33XLNY.js.map +1 -0
- package/dist/{chunk-6JQL37VC.js → chunk-A4UVO6BQ.js} +171 -48
- package/dist/chunk-A4UVO6BQ.js.map +1 -0
- package/dist/{chunk-5DNB7EN7.js → chunk-BMJNDIVA.js} +2 -2
- package/dist/chunk-BMJNDIVA.js.map +1 -0
- package/dist/{chunk-2M62EGYK.js → chunk-INA6W7OB.js} +42 -2
- package/dist/{chunk-2M62EGYK.js.map → chunk-INA6W7OB.js.map} +1 -1
- package/dist/{chunk-O52C6BRF.js → chunk-LUOCT4HG.js} +7 -7
- package/dist/{chunk-O52C6BRF.js.map → chunk-LUOCT4HG.js.map} +1 -1
- package/dist/{chunk-J54ZR6NF.js → chunk-MTK6PZHA.js} +122 -52
- package/dist/chunk-MTK6PZHA.js.map +1 -0
- package/dist/{chunk-3BTITSNA.js → chunk-ONZFMRRF.js} +42 -2
- package/dist/{chunk-3BTITSNA.js.map → chunk-ONZFMRRF.js.map} +1 -1
- package/dist/chunk-OXFZJP4E.js +30 -0
- package/dist/chunk-OXFZJP4E.js.map +1 -0
- package/dist/chunk-PACLPKDH.js +513 -0
- package/dist/chunk-PACLPKDH.js.map +1 -0
- package/dist/{http-2EZA7I4F.js → http-2R6MSRVA.js} +2 -2
- package/dist/{http-PKQBVZD6.js → http-KM6QWKAP.js} +2 -2
- package/dist/index.cjs +212 -49
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +27 -1
- package/dist/index.d.ts +27 -1
- package/dist/index.js +4 -4
- package/dist/node.cjs +212 -49
- package/dist/node.cjs.map +1 -1
- package/dist/node.js +4 -4
- package/dist/{replay-XC2YOK4X.js → replay-6UUBJBLK.js} +3 -3
- package/dist/replayCli.js +4 -3
- package/dist/replayCli.js.map +1 -1
- package/dist/seedCli.js +2 -2
- package/dist/transform/babel.cjs +418 -0
- package/dist/transform/babel.cjs.map +1 -0
- package/dist/transform/babel.d.cts +27 -0
- package/dist/transform/babel.d.ts +27 -0
- package/dist/transform/babel.js +379 -0
- package/dist/transform/babel.js.map +1 -0
- package/dist/transform/bun.cjs +586 -0
- package/dist/transform/bun.cjs.map +1 -0
- package/dist/transform/bun.d.cts +12 -0
- package/dist/transform/bun.d.ts +12 -0
- package/dist/transform/bun.js +14 -0
- package/dist/transform/bun.js.map +1 -0
- package/dist/transform/esbuild.cjs +586 -0
- package/dist/transform/esbuild.cjs.map +1 -0
- package/dist/transform/esbuild.d.cts +12 -0
- package/dist/transform/esbuild.d.ts +12 -0
- package/dist/transform/esbuild.js +14 -0
- package/dist/transform/esbuild.js.map +1 -0
- package/dist/transform/loaderRuntime.cjs +627 -0
- package/dist/transform/loaderRuntime.cjs.map +1 -0
- package/dist/transform/loaderRuntime.d.cts +12 -0
- package/dist/transform/loaderRuntime.d.ts +12 -0
- package/dist/transform/loaderRuntime.js +93 -0
- package/dist/transform/loaderRuntime.js.map +1 -0
- package/dist/transform/nest.cjs +589 -0
- package/dist/transform/nest.cjs.map +1 -0
- package/dist/transform/nest.d.cts +16 -0
- package/dist/transform/nest.d.ts +16 -0
- package/dist/transform/nest.js +17 -0
- package/dist/transform/nest.js.map +1 -0
- package/dist/transform/next.cjs +641 -0
- package/dist/transform/next.cjs.map +1 -0
- package/dist/transform/next.d.cts +40 -0
- package/dist/transform/next.d.ts +40 -0
- package/dist/transform/next.js +69 -0
- package/dist/transform/next.js.map +1 -0
- package/dist/transform/nodeLoader.js +640 -0
- package/dist/transform/nodeLoader.js.map +1 -0
- package/dist/transform/register.js +5 -0
- package/dist/transform/register.js.map +1 -0
- package/dist/transform/rolldown.cjs +586 -0
- package/dist/transform/rolldown.cjs.map +1 -0
- package/dist/transform/rolldown.d.cts +12 -0
- package/dist/transform/rolldown.d.ts +12 -0
- package/dist/transform/rolldown.js +14 -0
- package/dist/transform/rolldown.js.map +1 -0
- package/dist/transform/rollup.cjs +586 -0
- package/dist/transform/rollup.cjs.map +1 -0
- package/dist/transform/rollup.d.cts +12 -0
- package/dist/transform/rollup.d.ts +12 -0
- package/dist/transform/rollup.js +14 -0
- package/dist/transform/rollup.js.map +1 -0
- package/dist/transform/rsbuild.cjs +586 -0
- package/dist/transform/rsbuild.cjs.map +1 -0
- package/dist/transform/rsbuild.d.cts +12 -0
- package/dist/transform/rsbuild.d.ts +12 -0
- package/dist/transform/rsbuild.js +14 -0
- package/dist/transform/rsbuild.js.map +1 -0
- package/dist/transform/rspack.cjs +586 -0
- package/dist/transform/rspack.cjs.map +1 -0
- package/dist/transform/rspack.d.cts +12 -0
- package/dist/transform/rspack.d.ts +12 -0
- package/dist/transform/rspack.js +14 -0
- package/dist/transform/rspack.js.map +1 -0
- package/dist/transform/swc.cjs +592 -0
- package/dist/transform/swc.cjs.map +1 -0
- package/dist/transform/swc.d.cts +32 -0
- package/dist/transform/swc.d.ts +32 -0
- package/dist/transform/swc.js +33 -0
- package/dist/transform/swc.js.map +1 -0
- package/dist/transform/typescript.cjs +566 -0
- package/dist/transform/typescript.cjs.map +1 -0
- package/dist/transform/typescript.d.cts +22 -0
- package/dist/transform/typescript.d.ts +22 -0
- package/dist/transform/typescript.js +10 -0
- package/dist/transform/typescript.js.map +1 -0
- package/dist/transform/unplugin.cjs +583 -0
- package/dist/transform/unplugin.cjs.map +1 -0
- package/dist/transform/unplugin.d.cts +6 -0
- package/dist/transform/unplugin.d.ts +6 -0
- package/dist/transform/unplugin.js +9 -0
- package/dist/transform/unplugin.js.map +1 -0
- package/dist/transform/vite.cjs +586 -0
- package/dist/transform/vite.cjs.map +1 -0
- package/dist/transform/vite.d.cts +15 -0
- package/dist/transform/vite.d.ts +15 -0
- package/dist/transform/vite.js +14 -0
- package/dist/transform/vite.js.map +1 -0
- package/dist/transform/webpack.cjs +586 -0
- package/dist/transform/webpack.cjs.map +1 -0
- package/dist/transform/webpack.d.cts +12 -0
- package/dist/transform/webpack.d.ts +12 -0
- package/dist/transform/webpack.js +14 -0
- package/dist/transform/webpack.js.map +1 -0
- package/dist/transformOptions-Df2_Chtc.d.cts +10 -0
- package/dist/transformOptions-Df2_Chtc.d.ts +10 -0
- package/package.json +167 -7
- package/transform-loader.cjs +19 -0
- package/transform-loader.d.cts +19 -0
- package/dist/chunk-5DNB7EN7.js.map +0 -1
- package/dist/chunk-6JQL37VC.js.map +0 -1
- package/dist/chunk-J54ZR6NF.js.map +0 -1
- /package/dist/{http-2EZA7I4F.js.map → http-2R6MSRVA.js.map} +0 -0
- /package/dist/{http-PKQBVZD6.js.map → http-KM6QWKAP.js.map} +0 -0
- /package/dist/{replay-XC2YOK4X.js.map → replay-6UUBJBLK.js.map} +0 -0
package/dist/node.js
CHANGED
|
@@ -35,8 +35,8 @@ import {
|
|
|
35
35
|
getCurrentTrace,
|
|
36
36
|
reseedFromRegistry,
|
|
37
37
|
seedFromRegistry
|
|
38
|
-
} from "./chunk-
|
|
39
|
-
import "./chunk-
|
|
38
|
+
} from "./chunk-LUOCT4HG.js";
|
|
39
|
+
import "./chunk-BMJNDIVA.js";
|
|
40
40
|
import {
|
|
41
41
|
BITFAB_PROGRESS_PREFIX,
|
|
42
42
|
DbBranchReplayError,
|
|
@@ -44,7 +44,7 @@ import {
|
|
|
44
44
|
ReplayError,
|
|
45
45
|
reportReplayProgress,
|
|
46
46
|
serializeReplayResult
|
|
47
|
-
} from "./chunk-
|
|
47
|
+
} from "./chunk-A4UVO6BQ.js";
|
|
48
48
|
import {
|
|
49
49
|
BitfabError,
|
|
50
50
|
DEFAULT_SERVICE_URL,
|
|
@@ -52,7 +52,7 @@ import {
|
|
|
52
52
|
MixedTracingError,
|
|
53
53
|
__version__,
|
|
54
54
|
flushTraces
|
|
55
|
-
} from "./chunk-
|
|
55
|
+
} from "./chunk-INA6W7OB.js";
|
|
56
56
|
import {
|
|
57
57
|
assertAsyncStorageRegistered,
|
|
58
58
|
registerAsyncLocalStorageClass
|
|
@@ -8,8 +8,8 @@ import {
|
|
|
8
8
|
serializeReplayResult,
|
|
9
9
|
sleepForReplayPersistence,
|
|
10
10
|
waitForReplayPersistence
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-
|
|
11
|
+
} from "./chunk-A4UVO6BQ.js";
|
|
12
|
+
import "./chunk-INA6W7OB.js";
|
|
13
13
|
import "./chunk-BAOIRE5T.js";
|
|
14
14
|
export {
|
|
15
15
|
BITFAB_PROGRESS_PREFIX,
|
|
@@ -22,4 +22,4 @@ export {
|
|
|
22
22
|
sleepForReplayPersistence,
|
|
23
23
|
waitForReplayPersistence
|
|
24
24
|
};
|
|
25
|
-
//# sourceMappingURL=replay-
|
|
25
|
+
//# sourceMappingURL=replay-6UUBJBLK.js.map
|
package/dist/replayCli.js
CHANGED
|
@@ -7,10 +7,10 @@ import {
|
|
|
7
7
|
runRegistryMain,
|
|
8
8
|
runReplayCli,
|
|
9
9
|
runSeedCli
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-MTK6PZHA.js";
|
|
11
11
|
import {
|
|
12
12
|
BitfabError
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-ONZFMRRF.js";
|
|
14
14
|
|
|
15
15
|
// src/cloudReplayCli.ts
|
|
16
16
|
var CLOUD_REPLAY_HELP = "Direct GitHub replay: --cloud <pipeline> --trace-ids <UUIDs> [--registry <path>] [--max-concurrency 1..32] [--cloud-include <file>] [--cloud-dry-run] [--cloud-detach] [--cloud-request-id <UUID>]. Lifecycle: --cloud-status|--cloud-watch|--cloud-cancel|--cloud-cleanup <UUID>. Requires git, gh auth login, Python 3.10+, and bitfab:setup cloud.";
|
|
@@ -84,6 +84,7 @@ async function runCloudReplayCommand(argv, io = {}) {
|
|
|
84
84
|
|
|
85
85
|
// src/replayCli.ts
|
|
86
86
|
var USAGE = `Usage: bitfab-replay --registry <path> <pipeline> [options]
|
|
87
|
+
bitfab-replay --registry <path> <pipeline> --resume <experimentId>
|
|
87
88
|
bitfab-replay --registry <path> <pipeline> --seed <cases.jsonl> [--run]
|
|
88
89
|
Run bitfab-replay --registry <path> --help to list replay options.
|
|
89
90
|
${CLOUD_REPLAY_HELP}`;
|
|
@@ -99,7 +100,7 @@ async function runReplayCommand(argv, io = {}, importer = importRegistry) {
|
|
|
99
100
|
if (commandArgs.includes("--seed")) {
|
|
100
101
|
return runSeedCli(registry, commandArgs, io);
|
|
101
102
|
}
|
|
102
|
-
return runReplayCli(registry, commandArgs, io);
|
|
103
|
+
return runReplayCli(registry, commandArgs, io, registryPath);
|
|
103
104
|
}
|
|
104
105
|
async function runReplayMain(argv, io = {}) {
|
|
105
106
|
return runRegistryMain(() => runReplayCommand(argv, io), io);
|
package/dist/replayCli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cloudReplayCli.ts","../src/replayCli.ts"],"sourcesContent":["import { BitfabError } from \"./errors.js\"\nimport type { ReplayCliIo } from \"./replayRegistry.js\"\n\nexport const CLOUD_REPLAY_HELP =\n \"Direct GitHub replay: --cloud <pipeline> --trace-ids <UUIDs> [--registry <path>] [--max-concurrency 1..32] [--cloud-include <file>] [--cloud-dry-run] [--cloud-detach] [--cloud-request-id <UUID>]. Lifecycle: --cloud-status|--cloud-watch|--cloud-cancel|--cloud-cleanup <UUID>. Requires git, gh auth login, Python 3.10+, and bitfab:setup cloud.\"\n\nexport function isCloudReplayCommand(argv: readonly string[]): boolean {\n return argv.some((arg) => arg === \"--cloud\" || arg.startsWith(\"--cloud-\"))\n}\n\nexport async function runCloudReplayCommand(\n argv: readonly string[],\n io: ReplayCliIo = {},\n): Promise<Record<string, unknown>> {\n if (argv.includes(\"--help\") || argv.includes(\"-h\")) {\n ;(io.stdout ?? console.log)(CLOUD_REPLAY_HELP)\n return {}\n }\n const [{ execFileSync, spawn }, { realpath }, path] = await Promise.all([\n import(\"node:child_process\"),\n import(\"node:fs/promises\"),\n import(\"node:path\"),\n ])\n const root = execFileSync(\"git\", [\"rev-parse\", \"--show-toplevel\"], {\n encoding: \"utf8\",\n timeout: 15_000,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n }).trim()\n const helper = path.join(root, \".bitfab\", \"cloudReplay.py\")\n try {\n if (\n (await realpath(helper)) !==\n path.join(await realpath(root), \".bitfab\", \"cloudReplay.py\")\n ) {\n throw new Error(\"Symlinked helper\")\n }\n } catch {\n throw new BitfabError(\n \"Run bitfab:setup cloud first. Expected .bitfab/cloudReplay.py inside this repository.\",\n )\n }\n const output = await new Promise<string>((resolve, reject) => {\n const child = spawn(\"python3\", [helper, ...argv], {\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n })\n let stdout = \"\"\n child.stdout.setEncoding(\"utf8\")\n child.stderr.setEncoding(\"utf8\")\n child.stdout.on(\"data\", (chunk: string) => {\n stdout += chunk\n })\n child.stderr.on(\"data\", (chunk: string) => {\n ;(io.stderr ?? ((text) => process.stderr.write(text)))(chunk)\n })\n child.on(\"error\", () =>\n reject(new BitfabError(\"Cloud replay requires Python 3.10+ on PATH\")),\n )\n child.on(\"close\", (code) => {\n if (code !== 0) {\n if (stdout.trim() !== \"\") {\n ;(io.stdout ?? console.log)(stdout.trim())\n }\n reject(\n new BitfabError(\n \"Cloud replay failed. See diagnostics; use the execution UUID to recover a dispatched job.\",\n ),\n )\n } else {\n resolve(stdout)\n }\n })\n })\n const result = JSON.parse(output) as Record<string, unknown>\n ;(io.stdout ?? console.log)(JSON.stringify(result, null, 2))\n return result\n}\n","#!/usr/bin/env node\n\nimport {\n CLOUD_REPLAY_HELP,\n isCloudReplayCommand,\n runCloudReplayCommand,\n} from \"./cloudReplayCli.js\"\nimport {\n importRegistry,\n parseRegistryCommandArgs,\n type RegistryImporter,\n resolveRegistry,\n runIfEntrypoint,\n runRegistryMain,\n} from \"./registryCommand.js\"\nimport type { ReplayResult } from \"./replay.js\"\nimport {\n type ReplayCliIo,\n type ReseedRegistryResult,\n runReplayCli,\n runSeedCli,\n type SeedResult,\n} from \"./replayRegistry.js\"\n\nconst USAGE = `Usage: bitfab-replay --registry <path> <pipeline> [options]\\n bitfab-replay --registry <path> <pipeline> --seed <cases.jsonl> [--run]\\nRun bitfab-replay --registry <path> --help to list replay options.\\n${CLOUD_REPLAY_HELP}`\n\nexport async function runReplayCommand(\n argv: readonly string[],\n io: ReplayCliIo = {},\n importer: RegistryImporter = importRegistry,\n): Promise<\n | ReplayResult<unknown>\n | SeedResult\n | ReseedRegistryResult\n | Record<string, unknown>\n> {\n if (isCloudReplayCommand(argv)) {\n return runCloudReplayCommand(argv, io)\n }\n const { registryPath, commandArgs } = await parseRegistryCommandArgs(\n argv,\n USAGE,\n )\n const registry = resolveRegistry(await importer(registryPath), registryPath)\n if (commandArgs.includes(\"--seed\")) {\n return runSeedCli(registry, commandArgs, io)\n }\n return runReplayCli(registry, commandArgs, io)\n}\n\nexport async function runReplayMain(\n argv: readonly string[],\n io: ReplayCliIo = {},\n): Promise<number> {\n return runRegistryMain(() => runReplayCommand(argv, io), io)\n}\n\nrunIfEntrypoint(import.meta.url, () => runReplayMain(process.argv.slice(2)))\n"],"mappings":";;;;;;;;;;;;;;;AAGO,IAAM,oBACX;AAEK,SAAS,qBAAqB,MAAkC;AACrE,SAAO,KAAK,KAAK,CAAC,QAAQ,QAAQ,aAAa,IAAI,WAAW,UAAU,CAAC;AAC3E;AAEA,eAAsB,sBACpB,MACA,KAAkB,CAAC,GACe;AAClC,MAAI,KAAK,SAAS,QAAQ,KAAK,KAAK,SAAS,IAAI,GAAG;AAClD;AAAC,KAAC,GAAG,UAAU,QAAQ,KAAK,iBAAiB;AAC7C,WAAO,CAAC;AAAA,EACV;AACA,QAAM,CAAC,EAAE,cAAc,MAAM,GAAG,EAAE,SAAS,GAAG,IAAI,IAAI,MAAM,QAAQ,IAAI;AAAA,IACtE,OAAO,eAAoB;AAAA,IAC3B,OAAO,aAAkB;AAAA,IACzB,OAAO,MAAW;AAAA,EACpB,CAAC;AACD,QAAM,OAAO,aAAa,OAAO,CAAC,aAAa,iBAAiB,GAAG;AAAA,IACjE,UAAU;AAAA,IACV,SAAS;AAAA,IACT,OAAO,CAAC,UAAU,QAAQ,MAAM;AAAA,EAClC,CAAC,EAAE,KAAK;AACR,QAAM,SAAS,KAAK,KAAK,MAAM,WAAW,gBAAgB;AAC1D,MAAI;AACF,QACG,MAAM,SAAS,MAAM,MACtB,KAAK,KAAK,MAAM,SAAS,IAAI,GAAG,WAAW,gBAAgB,GAC3D;AACA,YAAM,IAAI,MAAM,kBAAkB;AAAA,IACpC;AAAA,EACF,QAAQ;AACN,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,QAAM,SAAS,MAAM,IAAI,QAAgB,CAAC,SAAS,WAAW;AAC5D,UAAM,QAAQ,MAAM,WAAW,CAAC,QAAQ,GAAG,IAAI,GAAG;AAAA,MAChD,OAAO,CAAC,UAAU,QAAQ,MAAM;AAAA,IAClC,CAAC;AACD,QAAI,SAAS;AACb,UAAM,OAAO,YAAY,MAAM;AAC/B,UAAM,OAAO,YAAY,MAAM;AAC/B,UAAM,OAAO,GAAG,QAAQ,CAAC,UAAkB;AACzC,gBAAU;AAAA,IACZ,CAAC;AACD,UAAM,OAAO,GAAG,QAAQ,CAAC,UAAkB;AACzC;AAAC,OAAC,GAAG,WAAW,CAAC,SAAS,QAAQ,OAAO,MAAM,IAAI,IAAI,KAAK;AAAA,IAC9D,CAAC;AACD,UAAM;AAAA,MAAG;AAAA,MAAS,MAChB,OAAO,IAAI,YAAY,4CAA4C,CAAC;AAAA,IACtE;AACA,UAAM,GAAG,SAAS,CAAC,SAAS;AAC1B,UAAI,SAAS,GAAG;AACd,YAAI,OAAO,KAAK,MAAM,IAAI;AACxB;AAAC,WAAC,GAAG,UAAU,QAAQ,KAAK,OAAO,KAAK,CAAC;AAAA,QAC3C;AACA;AAAA,UACE,IAAI;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF,OAAO;AACL,gBAAQ,MAAM;AAAA,MAChB;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACD,QAAM,SAAS,KAAK,MAAM,MAAM;AAC/B,GAAC,GAAG,UAAU,QAAQ,KAAK,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAC3D,SAAO;AACT;;;ACnDA,IAAM,QAAQ;AAAA;AAAA;AAAA,
|
|
1
|
+
{"version":3,"sources":["../src/cloudReplayCli.ts","../src/replayCli.ts"],"sourcesContent":["import { BitfabError } from \"./errors.js\"\nimport type { ReplayCliIo } from \"./replayRegistry.js\"\n\nexport const CLOUD_REPLAY_HELP =\n \"Direct GitHub replay: --cloud <pipeline> --trace-ids <UUIDs> [--registry <path>] [--max-concurrency 1..32] [--cloud-include <file>] [--cloud-dry-run] [--cloud-detach] [--cloud-request-id <UUID>]. Lifecycle: --cloud-status|--cloud-watch|--cloud-cancel|--cloud-cleanup <UUID>. Requires git, gh auth login, Python 3.10+, and bitfab:setup cloud.\"\n\nexport function isCloudReplayCommand(argv: readonly string[]): boolean {\n return argv.some((arg) => arg === \"--cloud\" || arg.startsWith(\"--cloud-\"))\n}\n\nexport async function runCloudReplayCommand(\n argv: readonly string[],\n io: ReplayCliIo = {},\n): Promise<Record<string, unknown>> {\n if (argv.includes(\"--help\") || argv.includes(\"-h\")) {\n ;(io.stdout ?? console.log)(CLOUD_REPLAY_HELP)\n return {}\n }\n const [{ execFileSync, spawn }, { realpath }, path] = await Promise.all([\n import(\"node:child_process\"),\n import(\"node:fs/promises\"),\n import(\"node:path\"),\n ])\n const root = execFileSync(\"git\", [\"rev-parse\", \"--show-toplevel\"], {\n encoding: \"utf8\",\n timeout: 15_000,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n }).trim()\n const helper = path.join(root, \".bitfab\", \"cloudReplay.py\")\n try {\n if (\n (await realpath(helper)) !==\n path.join(await realpath(root), \".bitfab\", \"cloudReplay.py\")\n ) {\n throw new Error(\"Symlinked helper\")\n }\n } catch {\n throw new BitfabError(\n \"Run bitfab:setup cloud first. Expected .bitfab/cloudReplay.py inside this repository.\",\n )\n }\n const output = await new Promise<string>((resolve, reject) => {\n const child = spawn(\"python3\", [helper, ...argv], {\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n })\n let stdout = \"\"\n child.stdout.setEncoding(\"utf8\")\n child.stderr.setEncoding(\"utf8\")\n child.stdout.on(\"data\", (chunk: string) => {\n stdout += chunk\n })\n child.stderr.on(\"data\", (chunk: string) => {\n ;(io.stderr ?? ((text) => process.stderr.write(text)))(chunk)\n })\n child.on(\"error\", () =>\n reject(new BitfabError(\"Cloud replay requires Python 3.10+ on PATH\")),\n )\n child.on(\"close\", (code) => {\n if (code !== 0) {\n if (stdout.trim() !== \"\") {\n ;(io.stdout ?? console.log)(stdout.trim())\n }\n reject(\n new BitfabError(\n \"Cloud replay failed. See diagnostics; use the execution UUID to recover a dispatched job.\",\n ),\n )\n } else {\n resolve(stdout)\n }\n })\n })\n const result = JSON.parse(output) as Record<string, unknown>\n ;(io.stdout ?? console.log)(JSON.stringify(result, null, 2))\n return result\n}\n","#!/usr/bin/env node\n\nimport {\n CLOUD_REPLAY_HELP,\n isCloudReplayCommand,\n runCloudReplayCommand,\n} from \"./cloudReplayCli.js\"\nimport {\n importRegistry,\n parseRegistryCommandArgs,\n type RegistryImporter,\n resolveRegistry,\n runIfEntrypoint,\n runRegistryMain,\n} from \"./registryCommand.js\"\nimport type { ReplayResult } from \"./replay.js\"\nimport {\n type ReplayCliIo,\n type ReseedRegistryResult,\n runReplayCli,\n runSeedCli,\n type SeedResult,\n} from \"./replayRegistry.js\"\n\nconst USAGE = `Usage: bitfab-replay --registry <path> <pipeline> [options]\\n bitfab-replay --registry <path> <pipeline> --resume <experimentId>\\n bitfab-replay --registry <path> <pipeline> --seed <cases.jsonl> [--run]\\nRun bitfab-replay --registry <path> --help to list replay options.\\n${CLOUD_REPLAY_HELP}`\n\nexport async function runReplayCommand(\n argv: readonly string[],\n io: ReplayCliIo = {},\n importer: RegistryImporter = importRegistry,\n): Promise<\n | ReplayResult<unknown>\n | SeedResult\n | ReseedRegistryResult\n | Record<string, unknown>\n> {\n if (isCloudReplayCommand(argv)) {\n return runCloudReplayCommand(argv, io)\n }\n const { registryPath, commandArgs } = await parseRegistryCommandArgs(\n argv,\n USAGE,\n )\n const registry = resolveRegistry(await importer(registryPath), registryPath)\n if (commandArgs.includes(\"--seed\")) {\n return runSeedCli(registry, commandArgs, io)\n }\n return runReplayCli(registry, commandArgs, io, registryPath)\n}\n\nexport async function runReplayMain(\n argv: readonly string[],\n io: ReplayCliIo = {},\n): Promise<number> {\n return runRegistryMain(() => runReplayCommand(argv, io), io)\n}\n\nrunIfEntrypoint(import.meta.url, () => runReplayMain(process.argv.slice(2)))\n"],"mappings":"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","names":[]}
|
package/dist/seedCli.js
CHANGED
|
@@ -6,8 +6,8 @@ import {
|
|
|
6
6
|
runIfEntrypoint,
|
|
7
7
|
runRegistryMain,
|
|
8
8
|
runSeedCli
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import "./chunk-
|
|
9
|
+
} from "./chunk-MTK6PZHA.js";
|
|
10
|
+
import "./chunk-ONZFMRRF.js";
|
|
11
11
|
|
|
12
12
|
// src/seedCli.ts
|
|
13
13
|
var USAGE = "Usage: bitfab-seed --registry <path> <pipeline> --from-trace <id>[,<id>...]\n bitfab-seed --registry <path> <pipeline> --cases <cases.jsonl> [--run]\nRun bitfab-seed --registry <path> <pipeline> --help for details.";
|
|
@@ -0,0 +1,418 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// ../bitfab-typescript-transform/src/babelPlugin.ts
|
|
21
|
+
var babelPlugin_exports = {};
|
|
22
|
+
__export(babelPlugin_exports, {
|
|
23
|
+
default: () => bitfabBabelPlugin
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(babelPlugin_exports);
|
|
26
|
+
|
|
27
|
+
// ../bitfab-typescript-transform/src/transformOptions.ts
|
|
28
|
+
var AUTO_TRACE_FUNCTION_ID_VERSION = "ts-auto-v1";
|
|
29
|
+
var AUTO_TRACE_TRANSFORM_MARKER = "__bitfab_auto_trace_transformed_v1__";
|
|
30
|
+
function autoTraceFunctionId(file, name) {
|
|
31
|
+
return `${AUTO_TRACE_FUNCTION_ID_VERSION}:${file}#${name}`;
|
|
32
|
+
}
|
|
33
|
+
function shouldTransformBitfabFile(filename, options) {
|
|
34
|
+
if (!filename) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
if (options.include && !options.include(filename)) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
const normalized = filename.replace(/\\/g, "/").split(/[?#]/, 1)[0] ?? "";
|
|
41
|
+
const normalizedCwd = options.cwd?.replace(/\\/g, "/").replace(/\/$/, "");
|
|
42
|
+
const isAbsolute = normalized.startsWith("/") || /^[A-Za-z]:\//.test(normalized);
|
|
43
|
+
if (normalizedCwd && isAbsolute && normalized !== normalizedCwd && !normalized.startsWith(`${normalizedCwd}/`)) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
return !normalized.includes("/node_modules/") && !normalized.endsWith(".d.ts") && /\.[cm]?[jt]sx?$/.test(normalized);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// ../bitfab-typescript-transform/src/babelPlugin.ts
|
|
50
|
+
function propertyName(node, types) {
|
|
51
|
+
if (types.isIdentifier(node)) {
|
|
52
|
+
return node.name;
|
|
53
|
+
}
|
|
54
|
+
if (types.isStringLiteral(node)) {
|
|
55
|
+
return node.value;
|
|
56
|
+
}
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
function functionName(path, types) {
|
|
60
|
+
const node = path.node;
|
|
61
|
+
if (types.isFunctionDeclaration(node) || types.isFunctionExpression(node)) {
|
|
62
|
+
if (node.id) {
|
|
63
|
+
return node.id.name;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if ((types.isClassMethod(node) || types.isObjectMethod(node)) && !node.computed) {
|
|
67
|
+
return propertyName(node.key, types) ?? "anonymous";
|
|
68
|
+
}
|
|
69
|
+
const parent = path.parentPath?.node;
|
|
70
|
+
if (types.isVariableDeclarator(parent)) {
|
|
71
|
+
return propertyName(parent.id, types) ?? "anonymous";
|
|
72
|
+
}
|
|
73
|
+
if (types.isObjectProperty(parent) && !parent.computed) {
|
|
74
|
+
return propertyName(parent.key, types) ?? "anonymous";
|
|
75
|
+
}
|
|
76
|
+
const line = node.loc?.start.line ?? 0;
|
|
77
|
+
const column = node.loc?.start.column ?? 0;
|
|
78
|
+
return `anonymous-${line}-${column}`;
|
|
79
|
+
}
|
|
80
|
+
function qualifiedFunctionName(path, types) {
|
|
81
|
+
const ownName = functionName(path, types);
|
|
82
|
+
const scopes = [];
|
|
83
|
+
let ancestor = path.parentPath;
|
|
84
|
+
while (ancestor) {
|
|
85
|
+
if (ancestor.isFunction()) {
|
|
86
|
+
const name = functionName(
|
|
87
|
+
ancestor,
|
|
88
|
+
types
|
|
89
|
+
);
|
|
90
|
+
if (!name.startsWith("anonymous-")) {
|
|
91
|
+
scopes.unshift(name);
|
|
92
|
+
}
|
|
93
|
+
} else if ((ancestor.isClassDeclaration() || ancestor.isClassExpression()) && ancestor.node.id) {
|
|
94
|
+
scopes.unshift(ancestor.node.id.name);
|
|
95
|
+
} else if (ancestor.isObjectExpression()) {
|
|
96
|
+
const parent = ancestor.parentPath?.node;
|
|
97
|
+
if (types.isVariableDeclarator(parent)) {
|
|
98
|
+
const name = propertyName(parent.id, types);
|
|
99
|
+
if (name) {
|
|
100
|
+
scopes.unshift(name);
|
|
101
|
+
}
|
|
102
|
+
} else if (types.isObjectProperty(parent) && !parent.computed) {
|
|
103
|
+
const name = propertyName(parent.key, types);
|
|
104
|
+
if (name) {
|
|
105
|
+
scopes.unshift(name);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
ancestor = ancestor.parentPath;
|
|
110
|
+
}
|
|
111
|
+
return [...scopes, ownName].join(".");
|
|
112
|
+
}
|
|
113
|
+
function isTraceDecoratorRoot(path, types) {
|
|
114
|
+
const node = path.node;
|
|
115
|
+
if (!types.isClassMethod(node) && !types.isClassPrivateMethod(node)) {
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
return node.decorators?.some((decorator) => {
|
|
119
|
+
const expression = decorator.expression;
|
|
120
|
+
if (!types.isCallExpression(expression)) {
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
const callee = expression.callee;
|
|
124
|
+
return types.isMemberExpression(callee) && !callee.computed && types.isIdentifier(callee.property, { name: "trace" });
|
|
125
|
+
}) ?? false;
|
|
126
|
+
}
|
|
127
|
+
function isBitfabWrapperArgument(path, types) {
|
|
128
|
+
const parent = path.parentPath?.node;
|
|
129
|
+
if (!types.isCallExpression(parent)) {
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
if (!parent.arguments.some((argument) => argument === path.node)) {
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
const callee = parent.callee;
|
|
136
|
+
return types.isMemberExpression(callee) && !callee.computed && types.isIdentifier(callee.property) && (callee.property.name === "withTrace" || callee.property.name === "withSpan");
|
|
137
|
+
}
|
|
138
|
+
function withNodeFunctionName(path, types) {
|
|
139
|
+
if (path.node.arguments.length > 2) {
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
const callee = path.node.callee;
|
|
143
|
+
if (!types.isMemberExpression(callee) || callee.computed || !types.isIdentifier(callee.property, { name: "withNode" })) {
|
|
144
|
+
return null;
|
|
145
|
+
}
|
|
146
|
+
const fn = path.node.arguments[path.node.arguments.length - 1];
|
|
147
|
+
if (types.isIdentifier(fn)) {
|
|
148
|
+
return fn.name;
|
|
149
|
+
}
|
|
150
|
+
if (types.isMemberExpression(fn) && !fn.computed) {
|
|
151
|
+
return propertyName(fn.property, types);
|
|
152
|
+
}
|
|
153
|
+
if (types.isFunctionExpression(fn) && fn.id) {
|
|
154
|
+
return fn.id.name;
|
|
155
|
+
}
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
function functionBindingName(path, types) {
|
|
159
|
+
if (types.isFunctionDeclaration(path.node) && path.node.id) {
|
|
160
|
+
return path.node.id.name;
|
|
161
|
+
}
|
|
162
|
+
const parent = path.parentPath?.node;
|
|
163
|
+
if (types.isVariableDeclarator(parent) && types.isIdentifier(parent.id)) {
|
|
164
|
+
return parent.id.name;
|
|
165
|
+
}
|
|
166
|
+
return null;
|
|
167
|
+
}
|
|
168
|
+
function isBitfabWrappedFunction(path, types) {
|
|
169
|
+
if (isBitfabWrapperArgument(path, types)) {
|
|
170
|
+
return true;
|
|
171
|
+
}
|
|
172
|
+
const bindingName = functionBindingName(path, types);
|
|
173
|
+
if (!bindingName) {
|
|
174
|
+
return false;
|
|
175
|
+
}
|
|
176
|
+
const binding = path.scope.getBinding(bindingName);
|
|
177
|
+
return binding?.referencePaths.some(
|
|
178
|
+
(referencePath) => isBitfabWrapperArgument(referencePath, types)
|
|
179
|
+
) ?? false;
|
|
180
|
+
}
|
|
181
|
+
function isBitfabManagedFunction(path, types) {
|
|
182
|
+
return isTraceDecoratorRoot(path, types) || isBitfabWrappedFunction(path, types);
|
|
183
|
+
}
|
|
184
|
+
function parameterInputs(path, types) {
|
|
185
|
+
const elements = [];
|
|
186
|
+
for (const [index, parameter] of (path.node.params ?? []).entries()) {
|
|
187
|
+
if (!types.isArrowFunctionExpression(path.node)) {
|
|
188
|
+
if (types.isRestElement(parameter)) {
|
|
189
|
+
elements.push(
|
|
190
|
+
types.spreadElement(
|
|
191
|
+
types.callExpression(
|
|
192
|
+
types.memberExpression(
|
|
193
|
+
types.arrayExpression([
|
|
194
|
+
types.spreadElement(types.identifier("arguments"))
|
|
195
|
+
]),
|
|
196
|
+
types.identifier("slice")
|
|
197
|
+
),
|
|
198
|
+
[types.numericLiteral(index)]
|
|
199
|
+
)
|
|
200
|
+
)
|
|
201
|
+
);
|
|
202
|
+
} else {
|
|
203
|
+
elements.push(
|
|
204
|
+
types.memberExpression(
|
|
205
|
+
types.identifier("arguments"),
|
|
206
|
+
types.numericLiteral(index),
|
|
207
|
+
true
|
|
208
|
+
)
|
|
209
|
+
);
|
|
210
|
+
}
|
|
211
|
+
continue;
|
|
212
|
+
}
|
|
213
|
+
if (types.isIdentifier(parameter)) {
|
|
214
|
+
elements.push(types.identifier(parameter.name));
|
|
215
|
+
} else if (types.isRestElement(parameter) && types.isIdentifier(parameter.argument)) {
|
|
216
|
+
elements.push(
|
|
217
|
+
types.spreadElement(types.identifier(parameter.argument.name))
|
|
218
|
+
);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return types.arrayExpression(elements);
|
|
222
|
+
}
|
|
223
|
+
function needsArgumentWrapper(path, types) {
|
|
224
|
+
return types.isArrowFunctionExpression(path.node) && path.node.params.some(
|
|
225
|
+
(parameter) => !types.isIdentifier(parameter) && !(types.isRestElement(parameter) && types.isIdentifier(parameter.argument))
|
|
226
|
+
);
|
|
227
|
+
}
|
|
228
|
+
function isRestWrapper(path, types) {
|
|
229
|
+
return path.node.params.length === 1 && types.isRestElement(path.node.params[0]);
|
|
230
|
+
}
|
|
231
|
+
function bitfabBabelPlugin(api) {
|
|
232
|
+
const { types } = api;
|
|
233
|
+
return {
|
|
234
|
+
name: "bitfab-auto-trace",
|
|
235
|
+
visitor: {
|
|
236
|
+
Program: {
|
|
237
|
+
enter(path, state) {
|
|
238
|
+
const filename = state.file.opts.filename ?? "unknown";
|
|
239
|
+
state.skipFile = !shouldTransformBitfabFile(filename, state.opts) || path.scope.hasBinding(AUTO_TRACE_TRANSFORM_MARKER) || path.node.directives.some(
|
|
240
|
+
(directive) => directive.value.value === "use client"
|
|
241
|
+
);
|
|
242
|
+
state.runtimeIdentifier = path.scope.generateUidIdentifier("bitfabAutoSpan");
|
|
243
|
+
state.activeIdentifier = path.scope.generateUidIdentifier(
|
|
244
|
+
"bitfabAutoTraceActive"
|
|
245
|
+
);
|
|
246
|
+
state.wrapperIdentifier = path.scope.generateUidIdentifier("bitfabAutoWrap");
|
|
247
|
+
state.definitions = [];
|
|
248
|
+
state.usedRuntime = false;
|
|
249
|
+
state.usedWrapper = false;
|
|
250
|
+
},
|
|
251
|
+
exit(path, state) {
|
|
252
|
+
if (state.skipFile || !state.usedRuntime || !state.runtimeIdentifier || !state.activeIdentifier || !state.wrapperIdentifier) {
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
path.unshiftContainer("body", [
|
|
256
|
+
types.importDeclaration(
|
|
257
|
+
[
|
|
258
|
+
types.importSpecifier(
|
|
259
|
+
state.runtimeIdentifier,
|
|
260
|
+
types.identifier("__bitfabAutoSpan")
|
|
261
|
+
),
|
|
262
|
+
types.importSpecifier(
|
|
263
|
+
state.activeIdentifier,
|
|
264
|
+
types.identifier("__bitfabAutoTraceActive")
|
|
265
|
+
),
|
|
266
|
+
...state.usedWrapper ? [
|
|
267
|
+
types.importSpecifier(
|
|
268
|
+
state.wrapperIdentifier,
|
|
269
|
+
types.identifier("__bitfabAutoWrap")
|
|
270
|
+
)
|
|
271
|
+
] : []
|
|
272
|
+
],
|
|
273
|
+
types.stringLiteral(
|
|
274
|
+
state.opts.runtimeModule ?? "bitfab/auto"
|
|
275
|
+
)
|
|
276
|
+
),
|
|
277
|
+
types.variableDeclaration("const", [
|
|
278
|
+
types.variableDeclarator(
|
|
279
|
+
types.identifier(AUTO_TRACE_TRANSFORM_MARKER),
|
|
280
|
+
types.assignmentExpression(
|
|
281
|
+
"=",
|
|
282
|
+
types.memberExpression(
|
|
283
|
+
types.identifier("globalThis"),
|
|
284
|
+
types.identifier(AUTO_TRACE_TRANSFORM_MARKER)
|
|
285
|
+
),
|
|
286
|
+
types.booleanLiteral(true)
|
|
287
|
+
)
|
|
288
|
+
)
|
|
289
|
+
]),
|
|
290
|
+
...state.definitions ?? []
|
|
291
|
+
]);
|
|
292
|
+
}
|
|
293
|
+
},
|
|
294
|
+
CallExpression: {
|
|
295
|
+
exit(path, state) {
|
|
296
|
+
if (state.skipFile) {
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
const configuredName = withNodeFunctionName(path, types);
|
|
300
|
+
if (configuredName === null) {
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
if (path.node.arguments.length === 1) {
|
|
304
|
+
path.node.arguments.push(types.identifier("undefined"));
|
|
305
|
+
}
|
|
306
|
+
path.node.arguments.push(types.stringLiteral(configuredName));
|
|
307
|
+
}
|
|
308
|
+
},
|
|
309
|
+
Function: {
|
|
310
|
+
exit(path, state) {
|
|
311
|
+
const node = path.node;
|
|
312
|
+
if (state.skipFile || node._bitfabInstrumented || node.generator || isBitfabManagedFunction(path, types) || !state.runtimeIdentifier || !state.activeIdentifier || !state.wrapperIdentifier) {
|
|
313
|
+
return;
|
|
314
|
+
}
|
|
315
|
+
if ((types.isClassMethod(node) || types.isObjectMethod(node)) && node.kind !== "method" || types.isClassPrivateMethod(node)) {
|
|
316
|
+
return;
|
|
317
|
+
}
|
|
318
|
+
const name = qualifiedFunctionName(path, types);
|
|
319
|
+
if (name.startsWith("anonymous-")) {
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
322
|
+
const filename = state.file.opts.filename ?? "unknown";
|
|
323
|
+
const cwd = state.opts.cwd ?? state.file.opts.cwd ?? process.cwd();
|
|
324
|
+
const normalizedFilename = filename.replace(`${cwd}/`, "").replace(/\\/g, "/");
|
|
325
|
+
const line = node.loc?.start.line ?? 0;
|
|
326
|
+
const column = node.loc?.start.column ?? 0;
|
|
327
|
+
const definition = types.objectExpression([
|
|
328
|
+
types.objectProperty(
|
|
329
|
+
types.identifier("id"),
|
|
330
|
+
types.stringLiteral(
|
|
331
|
+
autoTraceFunctionId(normalizedFilename, name)
|
|
332
|
+
)
|
|
333
|
+
),
|
|
334
|
+
types.objectProperty(
|
|
335
|
+
types.identifier("name"),
|
|
336
|
+
types.stringLiteral(name)
|
|
337
|
+
),
|
|
338
|
+
types.objectProperty(
|
|
339
|
+
types.identifier("file"),
|
|
340
|
+
types.stringLiteral(normalizedFilename)
|
|
341
|
+
),
|
|
342
|
+
types.objectProperty(
|
|
343
|
+
types.identifier("line"),
|
|
344
|
+
types.numericLiteral(line)
|
|
345
|
+
),
|
|
346
|
+
types.objectProperty(
|
|
347
|
+
types.identifier("column"),
|
|
348
|
+
types.numericLiteral(column)
|
|
349
|
+
),
|
|
350
|
+
...node.async ? [
|
|
351
|
+
types.objectProperty(
|
|
352
|
+
types.identifier("async"),
|
|
353
|
+
types.booleanLiteral(true)
|
|
354
|
+
)
|
|
355
|
+
] : [],
|
|
356
|
+
...isRestWrapper(path, types) ? [
|
|
357
|
+
types.objectProperty(
|
|
358
|
+
types.identifier("wrapper"),
|
|
359
|
+
types.booleanLiteral(true)
|
|
360
|
+
)
|
|
361
|
+
] : []
|
|
362
|
+
]);
|
|
363
|
+
const definitionIdentifier = path.scope.getProgramParent().generateUidIdentifier("bitfabAutoDefinition");
|
|
364
|
+
state.definitions?.push(
|
|
365
|
+
types.variableDeclaration("const", [
|
|
366
|
+
types.variableDeclarator(definitionIdentifier, definition)
|
|
367
|
+
])
|
|
368
|
+
);
|
|
369
|
+
if (needsArgumentWrapper(path, types)) {
|
|
370
|
+
const original = types.cloneNode(
|
|
371
|
+
node,
|
|
372
|
+
true
|
|
373
|
+
);
|
|
374
|
+
original._bitfabInstrumented = true;
|
|
375
|
+
path.replaceWith(
|
|
376
|
+
types.callExpression(state.wrapperIdentifier, [
|
|
377
|
+
definitionIdentifier,
|
|
378
|
+
original
|
|
379
|
+
])
|
|
380
|
+
);
|
|
381
|
+
state.usedRuntime = true;
|
|
382
|
+
state.usedWrapper = true;
|
|
383
|
+
return;
|
|
384
|
+
}
|
|
385
|
+
const originalBody = types.isBlockStatement(node.body) ? node.body : types.blockStatement([types.returnStatement(node.body)]);
|
|
386
|
+
const directives = originalBody.directives;
|
|
387
|
+
originalBody.directives = [];
|
|
388
|
+
const body = types.blockStatement(
|
|
389
|
+
[
|
|
390
|
+
types.ifStatement(
|
|
391
|
+
types.callExpression(state.activeIdentifier, []),
|
|
392
|
+
types.blockStatement([
|
|
393
|
+
types.returnStatement(
|
|
394
|
+
types.callExpression(state.runtimeIdentifier, [
|
|
395
|
+
definitionIdentifier,
|
|
396
|
+
parameterInputs(path, types),
|
|
397
|
+
types.arrowFunctionExpression(
|
|
398
|
+
[],
|
|
399
|
+
types.cloneNode(originalBody, true),
|
|
400
|
+
node.async ?? false
|
|
401
|
+
)
|
|
402
|
+
])
|
|
403
|
+
)
|
|
404
|
+
])
|
|
405
|
+
),
|
|
406
|
+
...originalBody.body
|
|
407
|
+
],
|
|
408
|
+
directives
|
|
409
|
+
);
|
|
410
|
+
node.body = body;
|
|
411
|
+
node._bitfabInstrumented = true;
|
|
412
|
+
state.usedRuntime = true;
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
};
|
|
417
|
+
}
|
|
418
|
+
//# sourceMappingURL=babel.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../bitfab-typescript-transform/src/babelPlugin.ts","../../../bitfab-typescript-transform/src/transformOptions.ts"],"sourcesContent":["import type { NodePath, PluginObj, PluginPass } from \"@babel/core\"\nimport type * as BabelTypes from \"@babel/types\"\nimport type { BitfabTransformOptions } from \"./transformOptions.js\"\nimport {\n AUTO_TRACE_TRANSFORM_MARKER,\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 ) {\n return propertyName(node.key, types) ?? \"anonymous\"\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 = node.loc?.start.line ?? 0\n const column = node.loc?.start.column ?? 0\n return `anonymous-${line}-${column}`\n}\n\nfunction qualifiedFunctionName(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): string {\n const ownName = functionName(path, types)\n const scopes: string[] = []\n let ancestor: NodePath | null = path.parentPath\n while (ancestor) {\n if (ancestor.isFunction()) {\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 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 (path.node.params ?? []).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 return (\n path.node.params.length === 1 && types.isRestElement(path.node.params[0])\n )\n}\n\n/**\n * Babel adapter for Bitfab's experimental automatic call-span runtime.\n *\n * @experimental The transform protocol and generated function identities may\n * change before the feature is stable.\n */\nexport default function bitfabBabelPlugin(api: {\n types: BabelTypesApi\n}): PluginObj<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 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/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 node.generator ||\n isBitfabManagedFunction(path, types) ||\n !state.runtimeIdentifier ||\n !state.activeIdentifier ||\n !state.wrapperIdentifier\n ) {\n return\n }\n if (\n ((types.isClassMethod(node) || types.isObjectMethod(node)) &&\n node.kind !== \"method\") ||\n types.isClassPrivateMethod(node)\n ) {\n return\n }\n\n const name = qualifiedFunctionName(path, types)\n if (name.startsWith(\"anonymous-\")) {\n return\n }\n const filename = state.file.opts.filename ?? \"unknown\"\n const cwd = state.opts.cwd ?? state.file.opts.cwd ?? process.cwd()\n const normalizedFilename = filename\n .replace(`${cwd}/`, \"\")\n .replace(/\\\\/g, \"/\")\n const line = node.loc?.start.line ?? 0\n const column = node.loc?.start.column ?? 0\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 const original = types.cloneNode(\n node,\n true,\n ) as BabelTypes.ArrowFunctionExpression & InstrumentedFunction\n original._bitfabInstrumented = true\n path.replaceWith(\n types.callExpression(state.wrapperIdentifier, [\n definitionIdentifier,\n original,\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(state.activeIdentifier, []),\n types.blockStatement([\n types.returnStatement(\n types.callExpression(state.runtimeIdentifier, [\n definitionIdentifier,\n parameterInputs(path, types),\n types.arrowFunctionExpression(\n [],\n types.cloneNode(originalBody, true),\n node.async ?? false,\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","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 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 = filename.replace(/\\\\/g, \"/\").split(/[?#]/, 1)[0] ?? \"\"\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"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { PluginObj, PluginPass } from '@babel/core';
|
|
2
|
+
import * as BabelTypes from '@babel/types';
|
|
3
|
+
import { B as BitfabTransformOptions } from '../transformOptions-Df2_Chtc.cjs';
|
|
4
|
+
|
|
5
|
+
type BabelTypesApi = typeof BabelTypes;
|
|
6
|
+
type BitfabPluginOptions = BitfabTransformOptions;
|
|
7
|
+
interface BitfabPluginState extends PluginPass {
|
|
8
|
+
opts: BitfabPluginOptions;
|
|
9
|
+
runtimeIdentifier?: ReturnType<BabelTypesApi["identifier"]>;
|
|
10
|
+
activeIdentifier?: ReturnType<BabelTypesApi["identifier"]>;
|
|
11
|
+
wrapperIdentifier?: ReturnType<BabelTypesApi["identifier"]>;
|
|
12
|
+
definitions?: Array<ReturnType<BabelTypesApi["variableDeclaration"]>>;
|
|
13
|
+
skipFile?: boolean;
|
|
14
|
+
usedRuntime?: boolean;
|
|
15
|
+
usedWrapper?: boolean;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Babel adapter for Bitfab's experimental automatic call-span runtime.
|
|
19
|
+
*
|
|
20
|
+
* @experimental The transform protocol and generated function identities may
|
|
21
|
+
* change before the feature is stable.
|
|
22
|
+
*/
|
|
23
|
+
declare function bitfabBabelPlugin(api: {
|
|
24
|
+
types: BabelTypesApi;
|
|
25
|
+
}): PluginObj<BitfabPluginState>;
|
|
26
|
+
|
|
27
|
+
export { bitfabBabelPlugin as default };
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { PluginObj, PluginPass } from '@babel/core';
|
|
2
|
+
import * as BabelTypes from '@babel/types';
|
|
3
|
+
import { B as BitfabTransformOptions } from '../transformOptions-Df2_Chtc.js';
|
|
4
|
+
|
|
5
|
+
type BabelTypesApi = typeof BabelTypes;
|
|
6
|
+
type BitfabPluginOptions = BitfabTransformOptions;
|
|
7
|
+
interface BitfabPluginState extends PluginPass {
|
|
8
|
+
opts: BitfabPluginOptions;
|
|
9
|
+
runtimeIdentifier?: ReturnType<BabelTypesApi["identifier"]>;
|
|
10
|
+
activeIdentifier?: ReturnType<BabelTypesApi["identifier"]>;
|
|
11
|
+
wrapperIdentifier?: ReturnType<BabelTypesApi["identifier"]>;
|
|
12
|
+
definitions?: Array<ReturnType<BabelTypesApi["variableDeclaration"]>>;
|
|
13
|
+
skipFile?: boolean;
|
|
14
|
+
usedRuntime?: boolean;
|
|
15
|
+
usedWrapper?: boolean;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Babel adapter for Bitfab's experimental automatic call-span runtime.
|
|
19
|
+
*
|
|
20
|
+
* @experimental The transform protocol and generated function identities may
|
|
21
|
+
* change before the feature is stable.
|
|
22
|
+
*/
|
|
23
|
+
declare function bitfabBabelPlugin(api: {
|
|
24
|
+
types: BabelTypesApi;
|
|
25
|
+
}): PluginObj<BitfabPluginState>;
|
|
26
|
+
|
|
27
|
+
export { bitfabBabelPlugin as default };
|