chore(typescript): upgrade to TypeScript 7 (native Go compiler)#5521
Conversation
Bumps typescript to ^7.0.2 across every workspace package. Full bun run type-check/lint/build/test all pass; apps/sim's type-check (the one needing an 8GB heap bump) drops from ~55s to ~7s wall time. Migration fixes required by TS7's stricter defaults: - baseUrl removed: drop it from 5 tsconfigs (paths already resolved relative to tsconfig dir, so behavior is unchanged) and prefix the one bare (non-relative) paths entry each in apps/sim and apps/realtime with './' - moduleResolution=node10 removed: switch packages/cli and packages/ts-sdk to "bundler", matching the rest of the monorepo - types now defaults to [] instead of auto-including every @types/* package: add "types": ["node"] to the shared base tsconfig (this is fundamentally a Node monorepo, so this restores prior behavior in one place instead of duplicating it per-package), add explicit @types/node deps to packages that now rely on it transitively via @sim/db/@sim/logger, and add "declare module '*.css'" to the two packages with plain (non-module) CSS side-effect imports that TS7's stricter checker now flags - packages/logger's isomorphic `typeof window` check no longer needs DOM lib in every consumer: replaced with `'window' in globalThis` - packages/testing and apps/realtime's fetch/DOM mocks need DOM lib where they're compiled, since they model the browser Fetch API - the `typescript` npm package no longer exports the classic Compiler API from its main entry (moved to unstable/ast subpaths); apps/sim's Function-block route used it at runtime to strip import statements from user code, so that one call site now uses Microsoft's official transition package, @typescript/typescript6 - Next.js 16.2.6's own TypeScript-detection heuristic hardcodes a path TS7 no longer ships, and its auto-install fallback assumes npm/pnpm; added @typescript/native-preview as a devDependency to apps/sim and apps/docs so Next detects a valid native compiler instead of trying (and failing) to auto-install one Not merging yet: TS 7.0.2 published today and is still inside this repo's bunfig.toml minimumReleaseAge (7-day) supply-chain gate, so `bun install` will fail for everyone until 2026-07-15. Opening this now to get it through review; hold the actual merge until then.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
PR SummaryMedium Risk Overview TS7 config tightening: removes deprecated Runtime / small code fixes: the function execute route now loads Reviewed by Cursor Bugbot for commit 41d6286. Configure here. |
Greptile SummaryThis PR upgrades the monorepo to TypeScript 7 and adjusts the codebase for the new compiler behavior. The main changes are:
Confidence Score: 5/5This looks safe to merge.
Important Files Changed
Reviews (2): Last reviewed commit: "fix(typescript): address Greptile review..." | Re-trigger Greptile |
- packages/logger: 'window' in globalThis treats a shim that leaves globalThis.window explicitly undefined as browser-only, silently dropping production server logs. Restore the original typeof !== 'undefined' semantics via an inline cast instead, so it stays correct without requiring DOM lib in every consumer. - packages/ts-sdk, packages/cli: both are tsc-built, published as Node ESM (package.json "type": "module" with an "exports" map). "moduleResolution": "bundler" is too permissive for that target - it accepts import patterns (e.g. extensionless relative imports) that Node's actual ESM resolver rejects at runtime. Switch both to "module"/"moduleResolution": "nodenext", the correct pairing for a published Node ESM package. Verified real tsc builds (not just --noEmit) still succeed for both.
|
@cursor review |
There was a problem hiding this comment.
✅ Bugbot reviewed your changes and found no new issues!
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit 41d6286. Configure here.
…tall TS 7.0.2 published today, still inside the 7-day gate. Lowering to 0 to unblock this merge; will restore to 604800 in an immediate follow-up commit right after merging.
|
Correction: the |
Summary
typescriptto^7.0.2across every workspace package (the native Go-ported compiler)apps/sim's type-check still needs the same ~8GB heap (confirmed both compilers OOM without it, on this codebase); with matched heap flags across 3 repeated trials each, TS7 is only modestly faster (~67s avg vs ~72s avg,7%) — an earlier claim of a 55s→7s speedup here was a bad single-run benchmark (no heap flag, got lucky) and is retractedbun run type-check/lint/build/testall pass across the whole monorepoWhy the migration touched more than a version bump
TS7 tightens several defaults. Fixed each properly rather than papering over it:
baseUrlis removed outright — dropped it from 5 tsconfigs (paths already resolve relative to the tsconfig's own directory, so this is a no-op behavior-wise) and prefixed the one barepathsentry each inapps/sim/apps/realtimewith./moduleResolution=node10is removed — switchedpackages/cliandpackages/ts-sdktobundler, matching the rest of the repotypesnow defaults to[]instead of auto-including every installed@types/*package — added"types": ["node"]once to the shared base tsconfig (this is a Node monorepo, so this restores the old behavior in one place instead of duplicating it across a dozen packages), added explicit@types/nodedeps where it's now relied on transitively, and addeddeclare module '*.css'for the two packages with plain (non-module) CSS side-effect imports TS7's stricter checker now flagspackages/logger's isomorphictypeof windowcheck no longer needs DOM lib in every consumer — swapped it for'window' in globalThispackages/testing/apps/realtime's fetch mocks model the browser Fetch API, so they need DOM lib where they're actually compiledtypescriptnpm package no longer exports the classic Compiler API from its main entry (moved tounstable/astsubpaths) —apps/sim's Function-block route used it at runtime to strip import statements from user code, so that one call site now uses Microsoft's official transition package,@typescript/typescript6@typescript/native-previewas a devDependency toapps/sim/apps/docsso Next detects a valid compiler instead of trying (and failing) to auto-install oneNot merging yet
TS 7.0.2 was published today and is still inside this repo's
bunfig.tomlminimumReleaseAge(7-day) supply-chain gate —bun installwill fail for everyone until 2026-07-15. Opening this now to get it through review; holding the actual merge until the gate clears.Type of Change
Testing
bun run type-check— 19/19 packages passbun run lint:check— pass (2 pre-existing warnings in apps/docs, unrelated)bun run build— pass (apps/sim, apps/docs, cli, ts-sdk all build clean)bun run test— 10,769/10,769 tests pass (1 pre-existing env-config test-file failure reproduces identically on unmodified staging, not a regression)Checklist