From 70102760d491cc7f7c3a3082baba3059c925e3c7 Mon Sep 17 00:00:00 2001 From: kieronwel Date: Sat, 11 Apr 2026 04:50:36 +0700 Subject: [PATCH 1/3] Fix Windows source startup script runners --- apps/server/package.json | 5 ++-- bun.lock | 2 +- package.json | 22 +++++++++--------- scripts/package-scripts.test.ts | 41 +++++++++++++++++++++++++++++++++ 4 files changed, 56 insertions(+), 14 deletions(-) create mode 100644 scripts/package-scripts.test.ts diff --git a/apps/server/package.json b/apps/server/package.json index e43c935107..87b7b4dcaf 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -15,8 +15,8 @@ ], "type": "module", "scripts": { - "dev": "bun run src/bin.ts", - "build": "node scripts/cli.ts build", + "dev": "tsx src/bin.ts", + "build": "tsx scripts/cli.ts build", "start": "node dist/bin.mjs", "prepare": "effect-language-service patch", "typecheck": "tsc --noEmit", @@ -41,6 +41,7 @@ "@types/bun": "catalog:", "@types/node": "catalog:", "tsdown": "catalog:", + "tsx": "^4.20.6", "typescript": "catalog:", "vitest": "catalog:" }, diff --git a/bun.lock b/bun.lock index 3eb358a7ee..9edfc44822 100644 --- a/bun.lock +++ b/bun.lock @@ -1,6 +1,5 @@ { "lockfileVersion": 1, - "configVersion": 1, "workspaces": { "": { "name": "@t3tools/monorepo", @@ -65,6 +64,7 @@ "@types/bun": "catalog:", "@types/node": "catalog:", "tsdown": "catalog:", + "tsx": "^4.20.6", "typescript": "catalog:", "vitest": "catalog:", }, diff --git a/package.json b/package.json index 8fe4a98672..0a2253cdd1 100644 --- a/package.json +++ b/package.json @@ -25,11 +25,11 @@ }, "type": "module", "scripts": { - "dev": "node scripts/dev-runner.ts dev", - "dev:server": "node scripts/dev-runner.ts dev:server", - "dev:web": "node scripts/dev-runner.ts dev:web", + "dev": "bun run scripts/dev-runner.ts dev", + "dev:server": "bun run scripts/dev-runner.ts dev:server", + "dev:web": "bun run scripts/dev-runner.ts dev:web", "dev:marketing": "turbo run dev --filter=@t3tools/marketing", - "dev:desktop": "node scripts/dev-runner.ts dev:desktop", + "dev:desktop": "bun run scripts/dev-runner.ts dev:desktop", "start": "turbo run start --filter=t3", "start:desktop": "turbo run start --filter=@t3tools/desktop", "start:marketing": "turbo run preview --filter=@t3tools/marketing", @@ -44,13 +44,13 @@ "fmt": "oxfmt", "fmt:check": "oxfmt --check", "build:contracts": "turbo run build --filter=@t3tools/contracts", - "dist:desktop:artifact": "node scripts/build-desktop-artifact.ts", - "dist:desktop:dmg": "node scripts/build-desktop-artifact.ts --platform mac --target dmg", - "dist:desktop:dmg:arm64": "node scripts/build-desktop-artifact.ts --platform mac --target dmg --arch arm64", - "dist:desktop:dmg:x64": "node scripts/build-desktop-artifact.ts --platform mac --target dmg --arch x64", - "dist:desktop:linux": "node scripts/build-desktop-artifact.ts --platform linux --target AppImage --arch x64", - "dist:desktop:win": "node scripts/build-desktop-artifact.ts --platform win --target nsis --arch x64", - "release:smoke": "node scripts/release-smoke.ts", + "dist:desktop:artifact": "bun run scripts/build-desktop-artifact.ts", + "dist:desktop:dmg": "bun run scripts/build-desktop-artifact.ts --platform mac --target dmg", + "dist:desktop:dmg:arm64": "bun run scripts/build-desktop-artifact.ts --platform mac --target dmg --arch arm64", + "dist:desktop:dmg:x64": "bun run scripts/build-desktop-artifact.ts --platform mac --target dmg --arch x64", + "dist:desktop:linux": "bun run scripts/build-desktop-artifact.ts --platform linux --target AppImage --arch x64", + "dist:desktop:win": "bun run scripts/build-desktop-artifact.ts --platform win --target nsis --arch x64", + "release:smoke": "bun run scripts/release-smoke.ts", "clean": "rm -rf node_modules apps/*/node_modules packages/*/node_modules apps/*/dist apps/*/dist-electron packages/*/dist .turbo apps/*/.turbo packages/*/.turbo", "sync:vscode-icons": "node scripts/sync-vscode-icons.mjs" }, diff --git a/scripts/package-scripts.test.ts b/scripts/package-scripts.test.ts new file mode 100644 index 0000000000..224cb39967 --- /dev/null +++ b/scripts/package-scripts.test.ts @@ -0,0 +1,41 @@ +import { readFileSync } from "node:fs"; +import path from "node:path"; +import { assert, describe, it } from "@effect/vitest"; + +const TS_NODE_SCRIPT_PATTERN = /\bnode\s+[^\r\n"]+\.(?:cts|mts|ts)\b/; + +function readPackageScripts(relativePath: string): Record { + const packageJsonPath = path.resolve(import.meta.dirname, "..", relativePath); + const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf8")) as { + scripts?: Record; + }; + + return packageJson.scripts ?? {}; +} + +describe("package scripts", () => { + it("does not rely on node to execute raw TypeScript entrypoints", () => { + const packageFiles = ["package.json", "apps/server/package.json"]; + + for (const packageFile of packageFiles) { + const scripts = readPackageScripts(packageFile); + for (const [scriptName, command] of Object.entries(scripts)) { + assert.equal( + TS_NODE_SCRIPT_PATTERN.test(command), + false, + `${packageFile} script "${scriptName}" should not use node to execute a TypeScript file: ${command}`, + ); + } + } + }); + + it("uses a Node-compatible TypeScript runner for the server dev script", () => { + const scripts = readPackageScripts("apps/server/package.json"); + + assert.equal( + /^bun\s+run\s+src\/bin\.ts\b/.test(scripts.dev ?? ""), + false, + `apps/server dev script should not run under Bun on Windows because PTY support is unavailable: ${scripts.dev}`, + ); + }); +}); From cb3251d4649707fa649c0d48b81cefa662993f44 Mon Sep 17 00:00:00 2001 From: kieronwel Date: Sat, 11 Apr 2026 05:04:01 +0700 Subject: [PATCH 2/3] Narrow Windows fix to server dev runtime --- apps/server/package.json | 2 +- package.json | 22 +++++++++++----------- scripts/package-scripts.test.ts | 17 ----------------- 3 files changed, 12 insertions(+), 29 deletions(-) diff --git a/apps/server/package.json b/apps/server/package.json index fc7fe3f7fa..6f9f33d9aa 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -16,7 +16,7 @@ "type": "module", "scripts": { "dev": "tsx src/bin.ts", - "build": "tsx scripts/cli.ts build", + "build": "node scripts/cli.ts build", "start": "node dist/bin.mjs", "prepare": "effect-language-service patch", "typecheck": "tsc --noEmit", diff --git a/package.json b/package.json index 3c1d93d3fe..97b30e6d4d 100644 --- a/package.json +++ b/package.json @@ -25,11 +25,11 @@ }, "type": "module", "scripts": { - "dev": "bun run scripts/dev-runner.ts dev", - "dev:server": "bun run scripts/dev-runner.ts dev:server", - "dev:web": "bun run scripts/dev-runner.ts dev:web", + "dev": "node scripts/dev-runner.ts dev", + "dev:server": "node scripts/dev-runner.ts dev:server", + "dev:web": "node scripts/dev-runner.ts dev:web", "dev:marketing": "turbo run dev --filter=@t3tools/marketing", - "dev:desktop": "bun run scripts/dev-runner.ts dev:desktop", + "dev:desktop": "node scripts/dev-runner.ts dev:desktop", "start": "turbo run start --filter=t3", "start:desktop": "turbo run start --filter=@t3tools/desktop", "start:marketing": "turbo run preview --filter=@t3tools/marketing", @@ -44,13 +44,13 @@ "fmt": "oxfmt", "fmt:check": "oxfmt --check", "build:contracts": "turbo run build --filter=@t3tools/contracts", - "dist:desktop:artifact": "bun run scripts/build-desktop-artifact.ts", - "dist:desktop:dmg": "bun run scripts/build-desktop-artifact.ts --platform mac --target dmg", - "dist:desktop:dmg:arm64": "bun run scripts/build-desktop-artifact.ts --platform mac --target dmg --arch arm64", - "dist:desktop:dmg:x64": "bun run scripts/build-desktop-artifact.ts --platform mac --target dmg --arch x64", - "dist:desktop:linux": "bun run scripts/build-desktop-artifact.ts --platform linux --target AppImage --arch x64", - "dist:desktop:win": "bun run scripts/build-desktop-artifact.ts --platform win --target nsis --arch x64", - "release:smoke": "bun run scripts/release-smoke.ts", + "dist:desktop:artifact": "node scripts/build-desktop-artifact.ts", + "dist:desktop:dmg": "node scripts/build-desktop-artifact.ts --platform mac --target dmg", + "dist:desktop:dmg:arm64": "node scripts/build-desktop-artifact.ts --platform mac --target dmg --arch arm64", + "dist:desktop:dmg:x64": "node scripts/build-desktop-artifact.ts --platform mac --target dmg --arch x64", + "dist:desktop:linux": "node scripts/build-desktop-artifact.ts --platform linux --target AppImage --arch x64", + "dist:desktop:win": "node scripts/build-desktop-artifact.ts --platform win --target nsis --arch x64", + "release:smoke": "node scripts/release-smoke.ts", "clean": "rm -rf node_modules apps/*/node_modules packages/*/node_modules apps/*/dist apps/*/dist-electron packages/*/dist .turbo apps/*/.turbo packages/*/.turbo", "sync:vscode-icons": "node scripts/sync-vscode-icons.mjs" }, diff --git a/scripts/package-scripts.test.ts b/scripts/package-scripts.test.ts index 224cb39967..3aebbf976f 100644 --- a/scripts/package-scripts.test.ts +++ b/scripts/package-scripts.test.ts @@ -2,8 +2,6 @@ import { readFileSync } from "node:fs"; import path from "node:path"; import { assert, describe, it } from "@effect/vitest"; -const TS_NODE_SCRIPT_PATTERN = /\bnode\s+[^\r\n"]+\.(?:cts|mts|ts)\b/; - function readPackageScripts(relativePath: string): Record { const packageJsonPath = path.resolve(import.meta.dirname, "..", relativePath); const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf8")) as { @@ -14,21 +12,6 @@ function readPackageScripts(relativePath: string): Record { } describe("package scripts", () => { - it("does not rely on node to execute raw TypeScript entrypoints", () => { - const packageFiles = ["package.json", "apps/server/package.json"]; - - for (const packageFile of packageFiles) { - const scripts = readPackageScripts(packageFile); - for (const [scriptName, command] of Object.entries(scripts)) { - assert.equal( - TS_NODE_SCRIPT_PATTERN.test(command), - false, - `${packageFile} script "${scriptName}" should not use node to execute a TypeScript file: ${command}`, - ); - } - } - }); - it("uses a Node-compatible TypeScript runner for the server dev script", () => { const scripts = readPackageScripts("apps/server/package.json"); From 211bfafa754e0a419b17433c7e35b94448fffb69 Mon Sep 17 00:00:00 2001 From: kieronwel Date: Sat, 11 Apr 2026 05:20:59 +0700 Subject: [PATCH 3/3] Fix lockfile metadata and strengthen dev script test --- bun.lock | 1 + scripts/package-scripts.test.ts | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/bun.lock b/bun.lock index 1223303055..4f15d0cb9e 100644 --- a/bun.lock +++ b/bun.lock @@ -1,5 +1,6 @@ { "lockfileVersion": 1, + "configVersion": 1, "workspaces": { "": { "name": "@t3tools/monorepo", diff --git a/scripts/package-scripts.test.ts b/scripts/package-scripts.test.ts index 3aebbf976f..de1a4c7b1c 100644 --- a/scripts/package-scripts.test.ts +++ b/scripts/package-scripts.test.ts @@ -16,9 +16,9 @@ describe("package scripts", () => { const scripts = readPackageScripts("apps/server/package.json"); assert.equal( - /^bun\s+run\s+src\/bin\.ts\b/.test(scripts.dev ?? ""), - false, - `apps/server dev script should not run under Bun on Windows because PTY support is unavailable: ${scripts.dev}`, + scripts.dev, + "tsx src/bin.ts", + `apps/server dev script should use the exact Windows-safe runtime entrypoint: ${scripts.dev}`, ); }); });