diff --git a/.gitea/workflows/test.yml b/.gitea/workflows/test.yml index c2cbbf3..5610458 100644 --- a/.gitea/workflows/test.yml +++ b/.gitea/workflows/test.yml @@ -28,6 +28,13 @@ jobs: - name: Install dependencies run: ~/.bun/bin/bun install --frozen-lockfile + # Before the tests, not after: a type error is cheaper to read than the + # runtime failure it eventually causes. The compiler is pinned in + # devDependencies, so this gate goes red when the repo changes — not + # when TypeScript ships a release. + - name: Typecheck + run: ~/.bun/bin/bun run typecheck + - name: Run tests env: SHADE_TEST_PG_URL: postgres://postgres:test@localhost:5432/postgres diff --git a/.gitignore b/.gitignore index d6f4cb6..0f91b3b 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,6 @@ dist/ **/.tmp-*.db **/.tmp-*.db-shm **/.tmp-*.db-wal + +# Byggeartefakt fra @shade/observer (outDir-avviket i G0) +dist-build/ diff --git a/bun.lock b/bun.lock index d89ff91..41cec1c 100644 --- a/bun.lock +++ b/bun.lock @@ -13,11 +13,12 @@ "devDependencies": { "bun-types": "^1.3.11", "fast-check": "^3.22.0", + "typescript": "7.0.2", }, }, "packages/shade-cli": { "name": "@shade/cli", - "version": "4.8.5", + "version": "4.12.0", "bin": { "shade": "src/cli.ts", }, @@ -36,7 +37,7 @@ }, "packages/shade-core": { "name": "@shade/core", - "version": "4.8.5", + "version": "4.12.0", "dependencies": { "@shade/observability": "workspace:*", }, @@ -49,7 +50,7 @@ }, "packages/shade-crypto-web": { "name": "@shade/crypto-web", - "version": "4.8.5", + "version": "4.12.0", "dependencies": { "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1", @@ -59,7 +60,7 @@ }, "packages/shade-dashboard": { "name": "@shade/dashboard", - "version": "4.8.5", + "version": "4.12.0", "dependencies": { "@shade/widgets": "workspace:*", "react": "^19.0.0", @@ -74,7 +75,7 @@ }, "packages/shade-files": { "name": "@shade/files", - "version": "4.8.5", + "version": "4.12.0", "dependencies": { "@shade/core": "workspace:*", "@shade/crypto-web": "workspace:*", @@ -101,7 +102,7 @@ }, "packages/shade-inbox": { "name": "@shade/inbox", - "version": "4.8.5", + "version": "4.12.0", "dependencies": { "@shade/core": "workspace:*", "@shade/proto": "workspace:*", @@ -114,7 +115,7 @@ }, "packages/shade-inbox-server": { "name": "@shade/inbox-server", - "version": "4.8.5", + "version": "4.12.0", "dependencies": { "@shade/core": "workspace:*", "@shade/observability": "workspace:*", @@ -132,7 +133,7 @@ }, "packages/shade-key-transparency": { "name": "@shade/key-transparency", - "version": "4.8.5", + "version": "4.12.0", "dependencies": { "@noble/hashes": "^2.0.1", "@shade/core": "workspace:*", @@ -144,11 +145,11 @@ }, "packages/shade-keychain": { "name": "@shade/keychain", - "version": "4.8.5", + "version": "4.12.0", }, "packages/shade-observability": { "name": "@shade/observability", - "version": "4.8.5", + "version": "4.12.0", "dependencies": { "@noble/hashes": "^2.0.1", }, @@ -166,7 +167,7 @@ }, "packages/shade-observer": { "name": "@shade/observer", - "version": "4.8.5", + "version": "4.12.0", "dependencies": { "@shade/core": "workspace:*", "@shade/server": "workspace:*", @@ -178,14 +179,14 @@ }, "packages/shade-proto": { "name": "@shade/proto", - "version": "4.8.5", + "version": "4.12.0", "dependencies": { "@shade/core": "workspace:*", }, }, "packages/shade-recovery": { "name": "@shade/recovery", - "version": "4.8.5", + "version": "4.12.0", "dependencies": { "@shade/core": "workspace:*", "@shade/crypto-web": "workspace:*", @@ -198,7 +199,7 @@ }, "packages/shade-sdk": { "name": "@shade/sdk", - "version": "4.8.5", + "version": "4.12.0", "dependencies": { "@shade/core": "workspace:*", "@shade/crypto-web": "workspace:*", @@ -228,12 +229,14 @@ }, "packages/shade-server": { "name": "@shade/server", - "version": "4.8.5", + "version": "4.12.0", "dependencies": { "@shade/core": "workspace:*", "@shade/inbox-server": "workspace:*", "@shade/key-transparency": "workspace:*", "@shade/observability": "workspace:*", + "@shade/storage-sqlite": "workspace:*", + "@shade/vault": "workspace:*", "hono": "^4.12.12", }, "devDependencies": { @@ -248,7 +251,7 @@ }, "packages/shade-storage-encrypted": { "name": "@shade/storage-encrypted", - "version": "4.8.5", + "version": "4.12.0", "dependencies": { "@noble/hashes": "^2.0.1", "@shade/core": "workspace:*", @@ -270,7 +273,7 @@ }, "packages/shade-storage-indexeddb": { "name": "@shade/storage-indexeddb", - "version": "4.8.5", + "version": "4.12.0", "dependencies": { "@shade/core": "workspace:*", "idb": "^8.0.3", @@ -282,7 +285,7 @@ }, "packages/shade-storage-postgres": { "name": "@shade/storage-postgres", - "version": "4.8.5", + "version": "4.12.0", "dependencies": { "@shade/core": "workspace:*", "@shade/inbox-server": "workspace:*", @@ -297,17 +300,18 @@ }, "packages/shade-storage-sqlite": { "name": "@shade/storage-sqlite", - "version": "4.8.5", + "version": "4.12.0", "dependencies": { "@shade/core": "workspace:*", "@shade/crypto-web": "workspace:*", "@shade/inbox-server": "workspace:*", "@shade/server": "workspace:*", + "@shade/vault": "workspace:*", }, }, "packages/shade-streams": { "name": "@shade/streams", - "version": "4.8.5", + "version": "4.12.0", "dependencies": { "@noble/hashes": "^2.0.1", "@shade/core": "workspace:*", @@ -319,7 +323,7 @@ }, "packages/shade-transfer": { "name": "@shade/transfer", - "version": "4.8.5", + "version": "4.12.0", "dependencies": { "@shade/core": "workspace:*", "@shade/crypto-web": "workspace:*", @@ -336,7 +340,7 @@ }, "packages/shade-transport": { "name": "@shade/transport", - "version": "4.8.5", + "version": "4.12.0", "dependencies": { "@shade/core": "workspace:*", "@shade/crypto-web": "workspace:*", @@ -347,7 +351,7 @@ }, "packages/shade-transport-bridge": { "name": "@shade/transport-bridge", - "version": "4.8.5", + "version": "4.12.0", "dependencies": { "@shade/core": "workspace:*", "@shade/server": "workspace:*", @@ -369,16 +373,29 @@ }, "packages/shade-transport-webrtc": { "name": "@shade/transport-webrtc", - "version": "4.8.5", + "version": "4.12.0", "dependencies": { "@shade/core": "workspace:*", "@shade/streams": "workspace:*", "@shade/transfer": "workspace:*", }, }, + "packages/shade-vault": { + "name": "@shade/vault", + "version": "4.13.0", + "dependencies": { + "@noble/hashes": "^2.0.1", + "@shade/core": "workspace:*", + "@shade/crypto-web": "workspace:*", + "@shade/observability": "workspace:*", + "@shade/server": "workspace:*", + "@shade/storage-encrypted": "workspace:*", + "hono": "^4.12.18", + }, + }, "packages/shade-widgets": { "name": "@shade/widgets", - "version": "4.8.5", + "version": "4.12.0", "dependencies": { "@shade/recovery": "workspace:*", "@shade/sdk": "workspace:*", @@ -603,6 +620,8 @@ "@shade/transport-webrtc": ["@shade/transport-webrtc@workspace:packages/shade-transport-webrtc"], + "@shade/vault": ["@shade/vault@workspace:packages/shade-vault"], + "@shade/widgets": ["@shade/widgets@workspace:packages/shade-widgets"], "@types/babel__core": ["@types/babel__core@7.20.5", "", { "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA=="], @@ -621,6 +640,46 @@ "@types/react-dom": ["@types/react-dom@19.2.3", "", { "peerDependencies": { "@types/react": "^19.2.0" } }, "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ=="], + "@typescript/typescript-aix-ppc64": ["@typescript/typescript-aix-ppc64@7.0.2", "", { "os": "aix", "cpu": "ppc64" }, "sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ=="], + + "@typescript/typescript-darwin-arm64": ["@typescript/typescript-darwin-arm64@7.0.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA=="], + + "@typescript/typescript-darwin-x64": ["@typescript/typescript-darwin-x64@7.0.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA=="], + + "@typescript/typescript-freebsd-arm64": ["@typescript/typescript-freebsd-arm64@7.0.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ=="], + + "@typescript/typescript-freebsd-x64": ["@typescript/typescript-freebsd-x64@7.0.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw=="], + + "@typescript/typescript-linux-arm": ["@typescript/typescript-linux-arm@7.0.2", "", { "os": "linux", "cpu": "arm" }, "sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ=="], + + "@typescript/typescript-linux-arm64": ["@typescript/typescript-linux-arm64@7.0.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ=="], + + "@typescript/typescript-linux-loong64": ["@typescript/typescript-linux-loong64@7.0.2", "", { "os": "linux", "cpu": "none" }, "sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ=="], + + "@typescript/typescript-linux-mips64el": ["@typescript/typescript-linux-mips64el@7.0.2", "", { "os": "linux", "cpu": "none" }, "sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA=="], + + "@typescript/typescript-linux-ppc64": ["@typescript/typescript-linux-ppc64@7.0.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA=="], + + "@typescript/typescript-linux-riscv64": ["@typescript/typescript-linux-riscv64@7.0.2", "", { "os": "linux", "cpu": "none" }, "sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ=="], + + "@typescript/typescript-linux-s390x": ["@typescript/typescript-linux-s390x@7.0.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw=="], + + "@typescript/typescript-linux-x64": ["@typescript/typescript-linux-x64@7.0.2", "", { "os": "linux", "cpu": "x64" }, "sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A=="], + + "@typescript/typescript-netbsd-arm64": ["@typescript/typescript-netbsd-arm64@7.0.2", "", { "os": "none", "cpu": "arm64" }, "sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA=="], + + "@typescript/typescript-netbsd-x64": ["@typescript/typescript-netbsd-x64@7.0.2", "", { "os": "none", "cpu": "x64" }, "sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA=="], + + "@typescript/typescript-openbsd-arm64": ["@typescript/typescript-openbsd-arm64@7.0.2", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ=="], + + "@typescript/typescript-openbsd-x64": ["@typescript/typescript-openbsd-x64@7.0.2", "", { "os": "openbsd", "cpu": "x64" }, "sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg=="], + + "@typescript/typescript-sunos-x64": ["@typescript/typescript-sunos-x64@7.0.2", "", { "os": "sunos", "cpu": "x64" }, "sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g=="], + + "@typescript/typescript-win32-arm64": ["@typescript/typescript-win32-arm64@7.0.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ=="], + + "@typescript/typescript-win32-x64": ["@typescript/typescript-win32-x64@7.0.2", "", { "os": "win32", "cpu": "x64" }, "sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g=="], + "@vitejs/plugin-react": ["@vitejs/plugin-react@4.7.0", "", { "dependencies": { "@babel/core": "^7.28.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", "@rolldown/pluginutils": "1.0.0-beta.27", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA=="], "baseline-browser-mapping": ["baseline-browser-mapping@2.10.17", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-HdrkN8eVG2CXxeifv/VdJ4A4RSra1DTW8dc/hdxzhGHN8QePs6gKaWM9pHPcpCoxYZJuOZ8drHmbdpLHjCYjLA=="], @@ -703,6 +762,8 @@ "tinyglobby": ["tinyglobby@0.2.16", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg=="], + "typescript": ["typescript@7.0.2", "", { "optionalDependencies": { "@typescript/typescript-aix-ppc64": "7.0.2", "@typescript/typescript-darwin-arm64": "7.0.2", "@typescript/typescript-darwin-x64": "7.0.2", "@typescript/typescript-freebsd-arm64": "7.0.2", "@typescript/typescript-freebsd-x64": "7.0.2", "@typescript/typescript-linux-arm": "7.0.2", "@typescript/typescript-linux-arm64": "7.0.2", "@typescript/typescript-linux-loong64": "7.0.2", "@typescript/typescript-linux-mips64el": "7.0.2", "@typescript/typescript-linux-ppc64": "7.0.2", "@typescript/typescript-linux-riscv64": "7.0.2", "@typescript/typescript-linux-s390x": "7.0.2", "@typescript/typescript-linux-x64": "7.0.2", "@typescript/typescript-netbsd-arm64": "7.0.2", "@typescript/typescript-netbsd-x64": "7.0.2", "@typescript/typescript-openbsd-arm64": "7.0.2", "@typescript/typescript-openbsd-x64": "7.0.2", "@typescript/typescript-sunos-x64": "7.0.2", "@typescript/typescript-win32-arm64": "7.0.2", "@typescript/typescript-win32-x64": "7.0.2" }, "bin": { "tsc": "bin/tsc" } }, "sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA=="], + "undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], "update-browserslist-db": ["update-browserslist-db@1.2.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w=="], @@ -716,5 +777,15 @@ "yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], "zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], + + "@shade/inbox-server/hono": ["hono@4.13.2", "", {}, "sha512-JydRilDRkYBQMt9qR9U92mXxmbGqsqSn/IKOrh4e7/gEbn+0zSr8igTu0obwJoNGN4sez28DIql7FBHWydoJpA=="], + + "@shade/observer/hono": ["hono@4.13.2", "", {}, "sha512-JydRilDRkYBQMt9qR9U92mXxmbGqsqSn/IKOrh4e7/gEbn+0zSr8igTu0obwJoNGN4sez28DIql7FBHWydoJpA=="], + + "@shade/server/hono": ["hono@4.13.2", "", {}, "sha512-JydRilDRkYBQMt9qR9U92mXxmbGqsqSn/IKOrh4e7/gEbn+0zSr8igTu0obwJoNGN4sez28DIql7FBHWydoJpA=="], + + "@shade/transport-bridge/hono": ["hono@4.13.2", "", {}, "sha512-JydRilDRkYBQMt9qR9U92mXxmbGqsqSn/IKOrh4e7/gEbn+0zSr8igTu0obwJoNGN4sez28DIql7FBHWydoJpA=="], + + "@shade/vault/hono": ["hono@4.13.2", "", {}, "sha512-JydRilDRkYBQMt9qR9U92mXxmbGqsqSn/IKOrh4e7/gEbn+0zSr8igTu0obwJoNGN4sez28DIql7FBHWydoJpA=="], } } diff --git a/package.json b/package.json index aff4278..ea779dc 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,9 @@ { "name": "shade", "private": true, - "workspaces": ["packages/*"], + "workspaces": [ + "packages/*" + ], "scripts": { "test": "bun test --recursive", "test:core": "cd packages/shade-core && bun test", @@ -25,7 +27,8 @@ }, "devDependencies": { "bun-types": "^1.3.11", - "fast-check": "^3.22.0" + "fast-check": "^3.22.0", + "typescript": "7.0.2" }, "dependencies": { "@noble/curves": "^2.0.1", diff --git a/scripts/typecheck-all.ts b/scripts/typecheck-all.ts index 3c75517..72ae8ea 100644 --- a/scripts/typecheck-all.ts +++ b/scripts/typecheck-all.ts @@ -18,6 +18,16 @@ import { readdirSync, statSync, existsSync } from 'fs'; import { join } from 'path'; import { $ } from 'bun'; + +/** + * The pinned compiler, not whatever `bunx` resolves today. + * + * `bunx tsc` fetches the newest release on every run, so this gate could go + * red — or, worse, quietly stop catching things — because TypeScript shipped, + * not because the repo changed. The version is pinned in devDependencies and + * resolved from node_modules here. + */ +const TSC = join(import.meta.dir, '..', 'node_modules', '.bin', 'tsc'); const ROOT = join(import.meta.dir, '..'); const PACKAGES_DIR = join(ROOT, 'packages'); @@ -38,7 +48,7 @@ const failed: { pkg: string; out: string }[] = []; for (const pkg of packages) { const dir = join(PACKAGES_DIR, pkg); - const proc = Bun.spawnSync(['bunx', 'tsc', '--noEmit', '-p', 'tsconfig.json'], { + const proc = Bun.spawnSync([TSC, '--noEmit', '-p', 'tsconfig.json'], { cwd: dir, stdout: 'pipe', stderr: 'pipe', @@ -73,7 +83,7 @@ if (filter.size === 0) { console.log('Consumer-strict smoke (lib: DOM, exactOptional, paths→workspace) ...'); const consumerDir = join(ROOT, 'tests', 'consumer-strict'); if (existsSync(join(consumerDir, 'tsconfig.json'))) { - const proc = Bun.spawnSync(['bunx', 'tsc', '--noEmit', '-p', 'tsconfig.json'], { + const proc = Bun.spawnSync([TSC, '--noEmit', '-p', 'tsconfig.json'], { cwd: consumerDir, stdout: 'pipe', stderr: 'pipe',