JS++ and tscc.
The projects reinforce one another without becoming one codebase. tscc is a TypeScript compiler. JS++ is an embeddable JavaScript runtime.
JS++
- executable ECMAScript syntax
- bytecode and runtime execution
- values, objects and prototypes
- closures, exceptions and GC
- jobs, modules and embedding
tscc
- TypeScript syntax and recovery
- symbols, types and checking
- compiler diagnostics
- project and module resolution
- lowering and JavaScript emission
First integration: tests
TypeScript source
↓
tscc
↓
JavaScript output
↙ ↘
Node JS++
oracle candidate runtime
Node remains the initial compatibility oracle. The first six-case intersection now runs through both public CLIs and explicit expected values; JS++ failures remain separately classified engine gaps rather than silently becoming normal tscc regressions.
Nothing migrates initially
| Existing component | Initial ownership |
|---|---|
| TypeScript lexer and parser | tscc |
| Range erasure and replacements | tscc during migration |
| Binder and checker | tscc |
| CommonJS lowering | tscc |
| JavaScript runtime harness | Generalized for Node and JS++ |
| ECMAScript runtime semantics | JS++ |
Later decision gates
Once both parsers exist, compare tokens, diagnostics, losslessness, recovery and TypeScript extension needs. Share only a small public syntax facility if evidence proves it serves both products. Private cross-repository includes are not acceptable architecture.
Optional JS++ embedding in tscc is considered only for a concrete bounded feature such as plugin execution or deterministic configuration. Normal compilation never executes user source as a shortcut around type checking.