From eefcaa72b26ae77c646b43be46e9c5bb456df965 Mon Sep 17 00:00:00 2001 From: Elizabeth Craig Date: Sat, 25 Apr 2026 04:22:01 -0700 Subject: [PATCH 1/2] Generate CLI bundles directly from TS --- ...-cfddac19-8849-4345-9490-243f9c6a98f9.json | 11 + packages/lage/package.json | 3 +- packages/lage/scripts/bundle.mjs | 27 ++- packages/scheduler/src/SimpleScheduler.ts | 2 +- yarn.lock | 221 +++++++++--------- 5 files changed, 143 insertions(+), 121 deletions(-) create mode 100644 change/change-cfddac19-8849-4345-9490-243f9c6a98f9.json diff --git a/change/change-cfddac19-8849-4345-9490-243f9c6a98f9.json b/change/change-cfddac19-8849-4345-9490-243f9c6a98f9.json new file mode 100644 index 000000000..872ef8e81 --- /dev/null +++ b/change/change-cfddac19-8849-4345-9490-243f9c6a98f9.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "type": "minor", + "comment": "Generate the CLI bundles directly from TypeScript code, not from the intermediate CJS generated by swc. This is marked as a minor change due to slight chance of behavior differences.", + "packageName": "lage", + "email": "elcraig@microsoft.com", + "dependentChangeType": "patch" + } + ] +} \ No newline at end of file diff --git a/packages/lage/package.json b/packages/lage/package.json index 469cb2d32..9e607bc2f 100644 --- a/packages/lage/package.json +++ b/packages/lage/package.json @@ -29,7 +29,8 @@ "@lage-run/cli": "workspace:^", "@lage-run/monorepo-scripts": "workspace:^", "@lage-run/runners": "workspace:^", - "esbuild": "^0.25.0" + "esbuild": "^0.28.0", + "workspace-tools-npm": "npm:workspace-tools@latest" }, "files": [ "dist" diff --git a/packages/lage/scripts/bundle.mjs b/packages/lage/scripts/bundle.mjs index 313b8d4c6..0eb3330d3 100644 --- a/packages/lage/scripts/bundle.mjs +++ b/packages/lage/scripts/bundle.mjs @@ -3,34 +3,43 @@ import * as esbuild from "esbuild"; import fs from "fs"; import path from "path"; import { fileURLToPath } from "url"; +import { getPackageInfos } from "workspace-tools-npm"; const dirname = path.dirname(fileURLToPath(import.meta.url)); const packageRoot = path.resolve(dirname, ".."); -const runnerDir = path.resolve(packageRoot, "../runners/lib"); +const repoRoot = path.resolve(packageRoot, "../.."); +const runnerDir = path.resolve(packageRoot, "../runners/src"); const outdir = "dist"; +const internalPackages = Object.values(getPackageInfos(repoRoot)).filter((info) => !info.private); + fs.rmSync(path.join(packageRoot, outdir), { recursive: true, force: true }); console.log("Bundling with esbuild..."); await esbuild.build({ + absWorkingDir: packageRoot, + // Point all entries to the source files entryPoints: { - lage: "@lage-run/cli/lib/cli.js", - "lage-server": "@lage-run/cli/lib/server.js", + lage: "../cli/src/cli.ts", + "lage-server": "../cli/src/server.ts", main: "./index.js", - "workers/targetWorker": "@lage-run/scheduler/lib/workers/targetWorker.js", - singleTargetWorker: "@lage-run/cli/lib/commands/server/singleTargetWorker.js", + "workers/targetWorker": "../scheduler/src/workers/targetWorker.ts", + singleTargetWorker: "../cli/src/commands/server/singleTargetWorker.ts", // Bundle the runners instead of simply copying, in case they reference other files ...Object.fromEntries( fs .readdirSync(runnerDir) - .filter((file) => file.endsWith("Runner.js")) + .filter((file) => file.endsWith("Runner.ts")) .map((runner) => { - const name = path.basename(runner, ".js"); - return [`runners/${name}`, `@lage-run/runners/lib/${runner}`]; + const name = path.basename(runner, ".ts"); + return [`runners/${name}`, `../runners/src/${runner}`]; }) ), }, + // Alias all packages to their source files for better tree shaking + // (aliases to packages which aren't referenced do nothing) + alias: Object.fromEntries(internalPackages.map((pkg) => [pkg.name, `${pkg.name}/src/index.ts`])), outdir, bundle: true, platform: "node", @@ -42,7 +51,7 @@ await esbuild.build({ "./runners/NpmScriptRunner.js", "./runners/NoOpRunner.js", "./runners/WorkerRunner.js", - "./workers/targetWorker", + "./workers/targetWorker.js", "./singleTargetWorker.js", ], minify: true, diff --git a/packages/scheduler/src/SimpleScheduler.ts b/packages/scheduler/src/SimpleScheduler.ts index 694b40853..11ee221eb 100644 --- a/packages/scheduler/src/SimpleScheduler.ts +++ b/packages/scheduler/src/SimpleScheduler.ts @@ -63,7 +63,7 @@ export class SimpleScheduler implements TargetScheduler { maxWorkersByGroup: options.maxWorkersPerTask, groupBy: ({ target }) => target.task, maxWorkers: options.concurrency, - script: require.resolve("./workers/targetWorker"), + script: require.resolve("./workers/targetWorker.js"), workerOptions: { stdout: true, stderr: true, diff --git a/yarn.lock b/yarn.lock index 616af11e0..b351a0e21 100644 --- a/yarn.lock +++ b/yarn.lock @@ -866,184 +866,184 @@ __metadata: languageName: node linkType: hard -"@esbuild/aix-ppc64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/aix-ppc64@npm:0.25.12" +"@esbuild/aix-ppc64@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/aix-ppc64@npm:0.28.0" conditions: os=aix & cpu=ppc64 languageName: node linkType: hard -"@esbuild/android-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/android-arm64@npm:0.25.12" +"@esbuild/android-arm64@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/android-arm64@npm:0.28.0" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@esbuild/android-arm@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/android-arm@npm:0.25.12" +"@esbuild/android-arm@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/android-arm@npm:0.28.0" conditions: os=android & cpu=arm languageName: node linkType: hard -"@esbuild/android-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/android-x64@npm:0.25.12" +"@esbuild/android-x64@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/android-x64@npm:0.28.0" conditions: os=android & cpu=x64 languageName: node linkType: hard -"@esbuild/darwin-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/darwin-arm64@npm:0.25.12" +"@esbuild/darwin-arm64@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/darwin-arm64@npm:0.28.0" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@esbuild/darwin-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/darwin-x64@npm:0.25.12" +"@esbuild/darwin-x64@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/darwin-x64@npm:0.28.0" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@esbuild/freebsd-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/freebsd-arm64@npm:0.25.12" +"@esbuild/freebsd-arm64@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/freebsd-arm64@npm:0.28.0" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard -"@esbuild/freebsd-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/freebsd-x64@npm:0.25.12" +"@esbuild/freebsd-x64@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/freebsd-x64@npm:0.28.0" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@esbuild/linux-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-arm64@npm:0.25.12" +"@esbuild/linux-arm64@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/linux-arm64@npm:0.28.0" conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"@esbuild/linux-arm@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-arm@npm:0.25.12" +"@esbuild/linux-arm@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/linux-arm@npm:0.28.0" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@esbuild/linux-ia32@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-ia32@npm:0.25.12" +"@esbuild/linux-ia32@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/linux-ia32@npm:0.28.0" conditions: os=linux & cpu=ia32 languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-loong64@npm:0.25.12" +"@esbuild/linux-loong64@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/linux-loong64@npm:0.28.0" conditions: os=linux & cpu=loong64 languageName: node linkType: hard -"@esbuild/linux-mips64el@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-mips64el@npm:0.25.12" +"@esbuild/linux-mips64el@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/linux-mips64el@npm:0.28.0" conditions: os=linux & cpu=mips64el languageName: node linkType: hard -"@esbuild/linux-ppc64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-ppc64@npm:0.25.12" +"@esbuild/linux-ppc64@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/linux-ppc64@npm:0.28.0" conditions: os=linux & cpu=ppc64 languageName: node linkType: hard -"@esbuild/linux-riscv64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-riscv64@npm:0.25.12" +"@esbuild/linux-riscv64@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/linux-riscv64@npm:0.28.0" conditions: os=linux & cpu=riscv64 languageName: node linkType: hard -"@esbuild/linux-s390x@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-s390x@npm:0.25.12" +"@esbuild/linux-s390x@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/linux-s390x@npm:0.28.0" conditions: os=linux & cpu=s390x languageName: node linkType: hard -"@esbuild/linux-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-x64@npm:0.25.12" +"@esbuild/linux-x64@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/linux-x64@npm:0.28.0" conditions: os=linux & cpu=x64 languageName: node linkType: hard -"@esbuild/netbsd-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/netbsd-arm64@npm:0.25.12" +"@esbuild/netbsd-arm64@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/netbsd-arm64@npm:0.28.0" conditions: os=netbsd & cpu=arm64 languageName: node linkType: hard -"@esbuild/netbsd-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/netbsd-x64@npm:0.25.12" +"@esbuild/netbsd-x64@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/netbsd-x64@npm:0.28.0" conditions: os=netbsd & cpu=x64 languageName: node linkType: hard -"@esbuild/openbsd-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/openbsd-arm64@npm:0.25.12" +"@esbuild/openbsd-arm64@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/openbsd-arm64@npm:0.28.0" conditions: os=openbsd & cpu=arm64 languageName: node linkType: hard -"@esbuild/openbsd-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/openbsd-x64@npm:0.25.12" +"@esbuild/openbsd-x64@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/openbsd-x64@npm:0.28.0" conditions: os=openbsd & cpu=x64 languageName: node linkType: hard -"@esbuild/openharmony-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/openharmony-arm64@npm:0.25.12" +"@esbuild/openharmony-arm64@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/openharmony-arm64@npm:0.28.0" conditions: os=openharmony & cpu=arm64 languageName: node linkType: hard -"@esbuild/sunos-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/sunos-x64@npm:0.25.12" +"@esbuild/sunos-x64@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/sunos-x64@npm:0.28.0" conditions: os=sunos & cpu=x64 languageName: node linkType: hard -"@esbuild/win32-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/win32-arm64@npm:0.25.12" +"@esbuild/win32-arm64@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/win32-arm64@npm:0.28.0" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@esbuild/win32-ia32@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/win32-ia32@npm:0.25.12" +"@esbuild/win32-ia32@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/win32-ia32@npm:0.28.0" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@esbuild/win32-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/win32-x64@npm:0.25.12" +"@esbuild/win32-x64@npm:0.28.0": + version: 0.28.0 + resolution: "@esbuild/win32-x64@npm:0.28.0" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -4341,36 +4341,36 @@ __metadata: languageName: node linkType: hard -"esbuild@npm:^0.25.0": - version: 0.25.12 - resolution: "esbuild@npm:0.25.12" - dependencies: - "@esbuild/aix-ppc64": "npm:0.25.12" - "@esbuild/android-arm": "npm:0.25.12" - "@esbuild/android-arm64": "npm:0.25.12" - "@esbuild/android-x64": "npm:0.25.12" - "@esbuild/darwin-arm64": "npm:0.25.12" - "@esbuild/darwin-x64": "npm:0.25.12" - "@esbuild/freebsd-arm64": "npm:0.25.12" - "@esbuild/freebsd-x64": "npm:0.25.12" - "@esbuild/linux-arm": "npm:0.25.12" - "@esbuild/linux-arm64": "npm:0.25.12" - "@esbuild/linux-ia32": "npm:0.25.12" - "@esbuild/linux-loong64": "npm:0.25.12" - "@esbuild/linux-mips64el": "npm:0.25.12" - "@esbuild/linux-ppc64": "npm:0.25.12" - "@esbuild/linux-riscv64": "npm:0.25.12" - "@esbuild/linux-s390x": "npm:0.25.12" - "@esbuild/linux-x64": "npm:0.25.12" - "@esbuild/netbsd-arm64": "npm:0.25.12" - "@esbuild/netbsd-x64": "npm:0.25.12" - "@esbuild/openbsd-arm64": "npm:0.25.12" - "@esbuild/openbsd-x64": "npm:0.25.12" - "@esbuild/openharmony-arm64": "npm:0.25.12" - "@esbuild/sunos-x64": "npm:0.25.12" - "@esbuild/win32-arm64": "npm:0.25.12" - "@esbuild/win32-ia32": "npm:0.25.12" - "@esbuild/win32-x64": "npm:0.25.12" +"esbuild@npm:^0.28.0": + version: 0.28.0 + resolution: "esbuild@npm:0.28.0" + dependencies: + "@esbuild/aix-ppc64": "npm:0.28.0" + "@esbuild/android-arm": "npm:0.28.0" + "@esbuild/android-arm64": "npm:0.28.0" + "@esbuild/android-x64": "npm:0.28.0" + "@esbuild/darwin-arm64": "npm:0.28.0" + "@esbuild/darwin-x64": "npm:0.28.0" + "@esbuild/freebsd-arm64": "npm:0.28.0" + "@esbuild/freebsd-x64": "npm:0.28.0" + "@esbuild/linux-arm": "npm:0.28.0" + "@esbuild/linux-arm64": "npm:0.28.0" + "@esbuild/linux-ia32": "npm:0.28.0" + "@esbuild/linux-loong64": "npm:0.28.0" + "@esbuild/linux-mips64el": "npm:0.28.0" + "@esbuild/linux-ppc64": "npm:0.28.0" + "@esbuild/linux-riscv64": "npm:0.28.0" + "@esbuild/linux-s390x": "npm:0.28.0" + "@esbuild/linux-x64": "npm:0.28.0" + "@esbuild/netbsd-arm64": "npm:0.28.0" + "@esbuild/netbsd-x64": "npm:0.28.0" + "@esbuild/openbsd-arm64": "npm:0.28.0" + "@esbuild/openbsd-x64": "npm:0.28.0" + "@esbuild/openharmony-arm64": "npm:0.28.0" + "@esbuild/sunos-x64": "npm:0.28.0" + "@esbuild/win32-arm64": "npm:0.28.0" + "@esbuild/win32-ia32": "npm:0.28.0" + "@esbuild/win32-x64": "npm:0.28.0" dependenciesMeta: "@esbuild/aix-ppc64": optional: true @@ -4426,7 +4426,7 @@ __metadata: optional: true bin: esbuild: bin/esbuild - checksum: 10c0/c205357531423220a9de8e1e6c6514242bc9b1666e762cd67ccdf8fdfdc3f1d0bd76f8d9383958b97ad4c953efdb7b6e8c1f9ca5951cd2b7c5235e8755b34a6b + checksum: 10c0/8acd95c238ec6c4a9d16163277faf228a8994b642d187b3fe667ffbb469008e6748cde144fdc3c175bf8e78ee49e15a0ed9b9f183fdb5fcea1772f87fb1372a4 languageName: node linkType: hard @@ -6595,9 +6595,10 @@ __metadata: "@lage-run/cli": "workspace:^" "@lage-run/monorepo-scripts": "workspace:^" "@lage-run/runners": "workspace:^" - esbuild: "npm:^0.25.0" + esbuild: "npm:^0.28.0" fsevents: "npm:~2.3.2" glob-hasher: "npm:^1.4.2" + workspace-tools-npm: "npm:workspace-tools@latest" dependenciesMeta: fsevents: optional: true From 5b6a8e511378fb6da481ed7cf09a56e2eb44afd8 Mon Sep 17 00:00:00 2001 From: Elizabeth Craig Date: Mon, 27 Apr 2026 17:14:55 -0700 Subject: [PATCH 2/2] Change files --- .../change-b10efea4-006d-4179-865d-f3832fa27d44.json | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 change/change-b10efea4-006d-4179-865d-f3832fa27d44.json diff --git a/change/change-b10efea4-006d-4179-865d-f3832fa27d44.json b/change/change-b10efea4-006d-4179-865d-f3832fa27d44.json new file mode 100644 index 000000000..b1cbf1b8b --- /dev/null +++ b/change/change-b10efea4-006d-4179-865d-f3832fa27d44.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "type": "patch", + "comment": "Fix targetWorker import path extension", + "packageName": "@lage-run/scheduler", + "email": "elcraig@microsoft.com", + "dependentChangeType": "patch" + } + ] +} \ No newline at end of file