This document tracks planned features and known issues for typescript2cxx.
Added: January 2025 - Critical code quality and maintainability improvements identified during code review.
-
Started removing
anytypes (100+ instances found, fixed 20+)- Fixed transpiler.ts:
- ✅
createTypeChecker()→ returnsTypeCheckerinterface - ✅
createPluginContext(plugin: Plugin, context)→ returnsPluginContext - ✅
countIRNodes(node: IRNode)→ uses proper IRNode type - ✅
applyMemoryAnalysis(ir: IRNode, results: Map<IRNode, MemoryAnalysisResult>)→ uses proper types
- ✅
- Fixed cli.ts:
- ✅
compileFile(filePath: string, options: CompileOptions)→ uses proper type - ✅ Cast command-line args to proper types
- ✅
- Fix generator.ts (completed):
- ✅
context: CompilerContext→ uses existing type - ✅
plugins: Plugin[]→ uses Plugin interface from plugins/types.ts - ✅
errorReporter: ErrorReporter→ uses existing type from errors.ts - ✅
member→ uses IRClassMember with IRClassMemberWithAccess type - ✅ Lambda
params: IRParameter[]→ properly typed - ✅ Added temporary IRFunctionExpression interface for arrow functions
- ✅
- Fix transformer.ts (completed):
- ✅
context: CompilerContext→ uses existing type - ✅
plugins: Plugin[]→ uses Plugin interface - ✅
errorReporter: ErrorReporter→ uses existing type - ✅ Fixed method signatures to use TypeScript compiler API types
- ✅
- Fixed memory/analyzer.ts:
- ✅
options: Record<string, unknown>→ uses proper type
- ✅
- Test files can keep
anyfor testing edge cases
- Fixed transpiler.ts:
-
Enable strict TypeScript mode
- Removed
no-explicit-anyexclusion from linting rules - Already has strict compiler options in deno.json
- Fix remaining type errors (100+ any types across codebase)
- Removed
-
Refactor large classes (Critical for maintainability)
- Break down generator.ts (3339 lines, 50+ methods) into:
ExpressionGeneratormodule:- generateExpression, generateIdentifier, generateLiteral
- generateBinary, generateUnary, generateAssignment
- generateCall, generateMember, generateConditional
- generateArray, generateObject, generateNew
- generateTemplate, generateAwait, generateLambda
StatementGeneratormodule:- generateStatement, generateBlock, generateIf
- generateSwitch, generateWhile, generateFor
- generateForOf, generateForIn, generateReturn
- generateBreak, generateContinue, generateThrow
- generateTry, generateCatch, generateExpressionStatement
DeclarationGeneratormodule:- generateFunction, generateClass, generateInterface
- generateEnum, generateVariable, generateTypeAlias
- generateImport, generateExport, generateNamespace
TypeGeneratormodule:- generateType, generateCppType, resolveType
- generateTemplateParams, generateGenericConstraints
- generateUnionType, generateIntersectionType
UtilityGeneratormodule:- generateIncludes, generateForwardDeclarations
- generateNamespaceWrapper, generateHeaderGuards
- formatCode, escapeString, indent
- Break down transformer.ts (2705 lines) into similar modules:
ExpressionTransformermoduleStatementTransformermoduleDeclarationTransformermoduleTypeTransformermoduleUtilityTransformermodule
- Break down generator.ts (3339 lines, 50+ methods) into:
// src/ir/type-guards.ts
export function isIRFunction(node: IRNode): node is IRFunctionDeclaration {
return node.kind === IRNodeKind.FunctionDeclaration;
}
export function isIRClass(node: IRNode): node is IRClassDeclaration {
return node.kind === IRNodeKind.ClassDeclaration;
}
export function isIRExpression(node: IRNode): node is IRExpression {
return node.nodeType === "Expression";
}// src/codegen/types.ts
export type CppCode = string & { readonly __brand: "CppCode" };
export type TypeScriptCode = string & { readonly __brand: "TypeScriptCode" };
export function toCppCode(code: string): CppCode {
return code as CppCode;
}
export function toTypeScriptCode(code: string): TypeScriptCode {
return code as TypeScriptCode;
}-
Implement type guards for better type narrowing ✅ COMPLETED (v0.8.7-dev)
- ✅ Created comprehensive type guards in
src/ir/type-guards.ts - ✅ Guards for all IR node types (100+ type guard functions)
- ✅ Utility guards for async/generator functions, decorators, etc.
- ✅ Exported from main module for use throughout codebase
- ✅ Created comprehensive type guards in
-
Use branded types for type safety ✅ COMPLETED (v0.8.7-dev)
- ✅ Created branded types in
src/codegen/types.ts - ✅
CppCode,TypeScriptCode,CppHeaderCode,CppSourceCodetypes - ✅ Helper functions for type conversion and concatenation
- ✅ Template literal tags
cppandtsfor type-safe code generation
- ✅ Created branded types in
-
Add exhaustive switch checks ✅ COMPLETED (v0.8.7-dev)
- ✅ Created exhaustiveness utilities in
src/utils/assert-never.ts - ✅
assertNeverandassertUnreachablefunctions - ✅
ExhaustivenessValidatorclass for runtime validation - ✅ Type-level exhaustiveness check types
- ✅ Created exhaustiveness utilities in
-
Consistent import organization
- Group type imports separately
- Sort imports alphabetically
- Use consistent import patterns
-
Extract magic numbers to named constants
- Replace hard-coded values with const enums
- Document special values
-
Use const assertions for configuration
const CONFIG = { ... } as const;
-
Phase 1: Type Safety (1-2 days)
- Enable strict mode and fix type errors
- Replace all
anytypes with proper interfaces - Run full test suite after each change
-
Phase 2: Code Organization (3-4 days)
- Extract generator modules one by one
- Extract transformer modules one by one
- Ensure all tests pass after each extraction
-
Phase 3: Best Practices (2-3 days)
- Implement type guards and branded types
- Add exhaustive switch checks
- Organize imports and extract constants
- Type Coverage: Increase from ~70% to >95%
- Function Length: Reduce from ~50 lines average to <30
- Cyclomatic Complexity: Reduce high complexity in generator.ts
- Maintainability: Easier to understand, test, and extend
- Bug Prevention: Catch errors at compile time
- Developer Experience: Better IDE support and autocomplete
- Performance: Potential performance improvements from better type inference
- Testing: Easier to unit test smaller, focused modules
Current Version: v0.8.6-dev (January 2025)
- Core TypeScript Features: ~88% complete
- JavaScript Runtime: ~98% complete
- Advanced Features: ~70% complete
- Build & Tooling: ~50% complete
- ✅ TypeScript Compiler API Integration - Full type checking and analysis
- ✅ Complete JavaScript Runtime - String, Number, Array, Object, Math, Date, RegExp, JSON, Console
- ✅ Class System - Inheritance, constructors, methods, properties, decorators, abstract classes, private fields
- ✅ Exception Handling - Try/catch/finally with proper C++ semantics
- ✅ Advanced Types - Unions, intersections, type guards, decorators, keyof, conditional types, mapped types, typeof, const assertions
- ✅ Template Literal Types - String pattern types with js::string mapping
- ✅ Index Types & Indexed Access - T[K] support with dynamic property access
- ✅ Typeof Type Operator - Type extraction from values with js::any mapping
- ✅ Const Assertions - Literal type narrowing with
as const - ✅ Enum Support - Numeric, string, mixed, const enums with reverse mapping
- ✅ E2E Compilation - TypeScript → C++ → Executable working pipeline with 12/12 tests passing (100% success)
- ✅ CMake Build System - Complete CMake integration with CLI support
- ✅ JSR.io Publishing - Package available on JSR registry
- ✅ Method Corruption Fix - Resolved toString method name corruption issue
- ✅ Complete JavaScript Types - Symbol, BigInt, Function, and typed wrappers implemented
- ✅ Async/Await - C++20 coroutines implemented (v0.8.0-dev)
- ✅ Module System - ES module support completed (v0.8.0-dev)
- ✅ Advanced Control Flow - Switch statements, for...of/in loops implemented (v0.5.3-dev)
- ✅ Function Features - Default/optional parameters done, rest parameters completed (v0.8.0-dev)
- ✅ Destructuring - Advanced destructuring patterns implemented (v0.8.0-dev)
- ✅ Modern Operators - Nullish coalescing, logical assignments implemented (v0.6.0-dev)
Based on analysis of both reference implementations:
- ASDAlexander77/TypeScript2Cxx - Full-featured transpiler with TypeScript API
- tswow/typescript2cxx - Game-specific fork with ORM and custom features
- Replace SWC with TypeScript Compiler API
- ✅ Import
npm:typescriptfor Deno compatibility - ✅ Full type information access with SimpleTypeChecker
- ✅ Basic semantic analysis implementation
- ✅ Type resolution for primitive and complex types
- ✅ C++ type mapping system
- ✅ Integration with parser and transformer
- ✅ All 50 test steps passing after migration
- ✅ Quality checks: formatting, linting, type checking, tests all pass
- Watch mode support (from tswow) - Future enhancement
- ✅ This enables JSR publishing and full TypeScript features
- ✅ Import
-
Multi-Stage IR Pipeline (from ASDAlexander77)
- IR nodes for all TypeScript constructs
- Semantic analysis phase
- Memory management annotations
- Optimization passes on IR
- C++ specific IR nodes (pointers, references, moves)
- Source location tracking
- Type resolution caching
-
IR Transformations
- TypeScript AST → IR transformation
- IR semantic analyzer
- IR optimizer with multiple passes
- IR → C++ code generation
- IR serialization for caching
- IR validation and verification
-
IR-Based Features
- Cross-module optimization
- Whole-program analysis
- Dead code elimination at IR level
- Inlining decisions based on IR
-
Compilation Cache (from both prototypes)
- File-based caching system
- Module dependency tracking
- Incremental type checking
- Cached IR representations
- Version tracking for cache invalidation
- Hash-based change detection
-
Build Performance
- Parallel compilation support
- Minimal recompilation on changes
- Precompiled header generation
- Module-level caching
- Type information caching
- Symbol table persistence
-
Core Pipeline Components
- Preprocessor for code transformations
- Multi-stage emitter architecture
- Resolver for identifier/type resolution
- Code writer with formatting options
- Error reporter with recovery
- Diagnostics system
-
Advanced Resolvers
- Type resolver with caching
- Symbol resolver with scoping
- Module resolver with import tracking
- Overload resolution
- Template parameter resolution
- Namespace resolution
-
Code Generation Architecture
- Modular emitter system (from ASDAlexander77)
- Separate emitters for declarations/expressions/statements
- Emitter coordinator for orchestration
- Platform-specific emitters
- Custom emitter plugins
-
Core JavaScript Types ✅ COMPLETED
- ✅
js::objectbase class with prototype chain - ✅
js::array<T>with all ES methods:- ✅ Mutating: push, pop, shift, unshift, splice, sort, reverse, fill
- ✅ Non-mutating: slice, concat, join, toString, toLocaleString
- ✅ Iteration: forEach, map, filter, reduce, reduceRight, find, findIndex
- ✅ Testing: every, some, includes, indexOf, lastIndexOf
- ✅ ES6+: from, of, entries, keys, values, flat, flatMap
- ✅
js::stringwith full string API (30+ methods):- ✅ charAt, charCodeAt, codePointAt
- ✅ substring, substr, slice
- ✅ toLowerCase, toUpperCase, toLocaleLowerCase, toLocaleUpperCase
- ✅ trim, trimStart, trimEnd
- ✅ split, replace, replaceAll, match, search
- ✅ startsWith, endsWith, includes, indexOf, lastIndexOf
- ✅ padStart, padEnd, repeat
- ✅ String.raw for template literals
- ✅
js::numberwith proper semantics:- ✅ toString, toFixed, toExponential, toPrecision
- ✅ parseInt, parseFloat (static)
- ✅ isNaN, isFinite, isInteger, isSafeInteger (static)
- ✅ Number.EPSILON, MAX_VALUE, MIN_VALUE, etc.
- ✅ NaN and Infinity constants
- ✅
js::booleanwrapper type - ✅
js::anyvariant type implementation - ✅
js::unknowntype-safe any - ✅
js::undefinedandjs::nullsingletons - ✅
js::symboltype with global registry and well-known symbols - ✅
js::bigintsupport with arithmetic operators and static methods - ✅
js::functionwrapper for callbacks using C++ templates - ✅ Typed union wrappers (StringOrNumber, Nullable, Dictionary, SafeArray, Result)
- ✅
-
Standard Objects ✅ COMPLETED
- ✅
Mathobject with all methods:- ✅ Trigonometric: sin, cos, tan, asin, acos, atan, atan2
- ✅ Logarithmic: log, log10, log2, log1p
- ✅ Exponential: exp, expm1, pow, sqrt, cbrt
- ✅ Rounding: floor, ceil, round, trunc
- ✅ Other: abs, sign, min, max, random, hypot, imul, clz32
- ✅ Constants: E, LN2, LN10, LOG2E, LOG10E, PI, SQRT1_2, SQRT2
- ✅
Dateobject implementation with full API - ✅
RegExpwith C++ regex backend (test, exec, match, replace) - ✅
JSONstringify/parse with replacer/reviver - ✅
consoleobject:- ✅ log, error, warn, info, debug
- ✅ table, dir, dirxml
- ✅ time, timeEnd, timeLog
- ✅ assert, count, countReset
- ✅ group, groupCollapsed, groupEnd
- ✅ clear, trace
- ✅ Global functions:
- ✅ parseInt, parseFloat
- ✅ isNaN, isFinite
- ✅ encodeURI, decodeURI, encodeURIComponent, decodeURIComponent (v0.8.4-dev)
- eval (if supported)
- ✅
Errorand error subclasses:- ✅ Error, TypeError, ReferenceError, SyntaxError, RangeError
- ✅ EvalError, URIError, AggregateError (v0.8.4-dev)
- ✅
Promiseimplementation with async/await- ✅ Promise.all and Promise.race methods (v0.8.4-dev)
- Promise.allSettled, Promise.any
-
ArrayBufferand views -
URLandURLSearchParams -
TextEncoder/TextDecoder -
cryptobasic operations
- ✅
-
Async/Await with C++20 Coroutines ✅ COMPLETED (v0.8.0-dev)
- ✅
js::Promise<T>implementation with C++20 coroutines - ✅ async/await transformation working correctly
- ✅ Promise.resolve/reject factory functions
- Event loop for Deno compatibility (future enhancement)
- Promise.all/race (future enhancement)
- Async generators (future enhancement)
- for await...of loops (future enhancement)
- ✅
-
Full Class System ✅ PARTIAL (v0.2.0-v0.5.3)
- ✅ Complete inheritance with
super(v0.2.0) - ✅ Abstract classes and methods (v0.5.3)
- ✅ Static members and blocks (v0.2.0)
- ✅ Private fields (#private syntax) (v0.8.0)
- ✅ Decorators with metadata (class, method, property, parameter) (v0.4.0)
- ✅ Decorator factories (v0.4.0)
- ✅ Decorator metadata API (v0.4.0)
- Property descriptors
- ✅ Getters/setters (accessors) (v0.4.0)
- Class expressions
- Anonymous classes
- Constructor overloading
- ✅ Complete inheritance with
-
Exception Handling ✅ COMPLETED (v0.4.0-dev)
- ✅ Try/catch/finally with proper unwinding
- ✅ Error types hierarchy (js::any universal exception type)
- ✅ Custom error classes (Error, TypeError, ReferenceError)
- ✅ finally block semantics (C++ comment-based implementation)
- ✅ Nested try/catch blocks
- Stack traces with source maps
- Async error handling
-
Advanced Type Features ✅ PARTIAL (v0.4.0)
- ✅ Union types with runtime checks (v0.4.0)
- ✅ Intersection types (v0.4.0)
- ✅ Type guards and narrowing (custom and built-in) (v0.4.0)
- ✅ Conditional types (basic support) (v0.8.6-dev)
- ✅ Mapped types (basic support) (v0.8.6-dev)
- ✅ Template literal types (v0.8.6-dev)
- ✅ Index types and indexed access (v0.8.6-dev)
- ✅
keyofoperator (v0.8.6-dev) - ✅
typeoftype operator (v0.8.6-dev) - ✅ Const assertions (
as const) (v0.8.6-dev) - Satisfies operator (v0.8.6-dev)
- Non-null assertion operator (!) (v0.8.6-dev)
- Definite assignment assertion (!) (v0.8.6-dev)
- Const type parameters (v0.8.6-dev)
- NoInfer utility type (v0.8.6-dev)
- TypedArray support (v0.8.6-dev)
- Tuple types with rest elements (v0.8.6-dev)
- Literal types (string, number, boolean) (v0.8.6-dev)
- Enum literal types
- Type aliases (simple and complex)
- Unknown type with type guards
- Never type
- This type
- Unique symbol types
-
Functions and Parameters ✅ COMPLETED (v0.2.0, v0.5.3-dev, v0.8.0-dev)
- ✅ Default parameters (v0.5.3-dev)
- ✅ Optional parameters (v0.5.3-dev)
- ✅ Rest parameters (...) (v0.8.0-dev)
- ✅ Function overloading (v0.8.0)
- ✅ Generic functions (v0.8.0)
- ✅ Function types (v0.1.1)
- Higher-order functions
- ✅ Arrow functions with proper
thisbinding (v0.2.0) - ✅ IIFE (Immediately Invoked Function Expressions) (v0.7.0)
-
Modern JavaScript Operators ✅ PARTIAL (v0.1.0-v0.5.4)
- ✅ Nullish coalescing (??) (v0.5.4-dev)
- ✅ Optional chaining (?.) (v0.1.0)
- ✅ Logical assignment operators (&&=, ||=, ??=) (v0.6.0-dev)
- ✅ Numeric separators (1_000_000) (v0.6.0-dev)
- ✅ Exponentiation operator (**) (v0.6.0-dev)
- ✅ BigInt literals (123n) (v0.8.0)
-
Object and Array Features ✅ COMPLETED (v0.2.0-v0.8.0)
- ✅ Advanced destructuring patterns (v0.8.0-dev)
- ✅ Spread operator (...) (v0.5.4-dev)
- ✅ Rest parameters (...) (v0.5.3-dev)
- ✅ Default parameters (v0.5.3-dev)
- ✅ Dynamic property access (v0.2.0)
- ✅ Computed property names (v0.7.0)
- ✅ Object.assign/Object.create (v0.3.0)
- ✅ Object.keys/values/entries (v0.3.0)
- ✅ Array.from/Array.of (v0.3.0)
- ✅ for...of loops (v0.5.3-dev)
- ✅ for...in loops (v0.5.3-dev)
-
String and RegExp Features
- Template literals with tag functions
- String.raw
- RegExp named groups
- RegExp lookbehind
- String padding methods
- String.prototype.matchAll
-
Other Language Features ✅ PARTIAL (v0.2.0-v0.4.0)
- delete operator (v0.7.0)
- instanceof operator (runtime) (v0.7.0)
- ✅ typeof operator (runtime) (v0.4.0)
- in operator (v0.7.0)
- void operator
- Symbol support
- Symbol.iterator protocol
- Symbol.asyncIterator
- Symbol.hasInstance
- Symbol.toPrimitive
- Symbol.toStringTag
- using declarations (resource management)
- await using declarations
- ✅ switch statements with fall-through (v0.5.3-dev)
- with statement (if supported)
- debugger statement
- labeled statements
- Comma operator
- ✅ Conditional (ternary) operator (v0.2.0)
- ✅ Compound assignment operators (+=, -=, etc.) (v0.2.0)
-
Enums ✅ COMPLETED (v0.5.3)
- ✅ Numeric enums with auto-increment (0, 1, 2...)
- ✅ String enums with explicit values ("UP", "DOWN", etc.)
- ✅ Heterogeneous enums (mixed string/number)
- ✅ Const enums with inline value substitution
- ✅ Computed enum values
- ✅ Enum reverse mappings (Color[0] → "Red")
- ✅ Enum as types in function parameters
- ✅ Enum to string conversion via getName() function
- ✅ Proper C++ namespace generation
- ✅ Header/source separation with extern const declarations
-
Namespaces and Modules
- Namespace declarations
- Nested namespaces
- Namespace merging
- Ambient namespaces
- Module declarations
- Module augmentation
- Global augmentation
- Triple-slash directives
- Type-only imports/exports
-
Smart Pointer Optimization
- Escape analysis for unique_ptr
- Weak pointer cycle detection
- Custom allocators option
- Memory pool support
- RAII patterns
- Move semantics optimization
-
Thread Safety (from ASDAlexander77)
- Atomic operations
- Thread-local storage
- Mutex wrappers
- Concurrent collections
-
ES Module Support ✅ COMPLETED (v0.8.0-dev)
- ✅ import/export transformation with C++ namespace mapping
- ✅ Named imports and exports (import { foo } from "./module")
- ✅ Default imports and exports (import foo, export default)
- ✅ Namespace imports (import * as utils)
- ✅ Re-exports (export * from "./module")
- ✅ Module path resolution and header generation
- Dynamic imports (future enhancement)
- Circular dependency handling (future enhancement)
- CommonJS interop (future enhancement)
-
Code Splitting
- Separate compilation units
- Header/implementation split
- Incremental compilation
- Module bundling options
-
Debugging Support
- Source maps generation
- Debug symbols
- Runtime type information
- Stack trace mapping
- Breakpoint preservation
-
Build System Integration ✅ COMPLETED (v0.5.2)
- ✅ CMake generation with full CLI integration
- ✅ --cmake flag integrated with transpiler workflow
- ✅ Debug/Release build configurations
- ✅ vcpkg/Conan package manager support (config types implemented)
- ✅ Cross-platform build configuration (Windows/Linux/macOS)
- ✅ CMake config integration with typescript2cxx.config.ts
- ✅ End-to-end tested workflow (TypeScript → CMake → Executable)
- Makefile generation
- Cross-compilation targets
- Platform-specific code paths
-
IDE Support
- Language server protocol
- Diagnostic reporting
- Code completion hints
- Refactoring support
-
ORM System (from tswow fork)
- Database schema generation
- Type-safe queries
- Migration support
-
Game Engine Integration
- Custom decorators
- Event system
- Network protocol generation
- Performance profiling hooks
-
Collections
- Map/Set with iterators
- WeakMap/WeakSet
- Typed arrays (Uint8Array, etc.)
- ArrayBuffer/DataView
- SharedArrayBuffer
- Atomics API
-
Modern JavaScript APIs
- Proxy objects with all traps
- Reflect API
- Symbol.iterator protocol
- Generators and yield
- Async generators
- Object.freeze/seal/preventExtensions
- Object.isFrozen/isSealed/isExtensible
- Object.getOwnPropertyDescriptor(s)
- Object.defineProperty/defineProperties
- Object.setPrototypeOf/getPrototypeOf
- Intl API (basic support)
-
Compile-Time Optimization
- Constant folding
- Dead code elimination
- Inline expansion
- Loop unrolling
- Tail call optimization
- Lambda capture optimization
- Escape analysis for stack allocation
- Common subexpression elimination
- Strength reduction
- Loop-invariant code motion
-
Runtime Performance
- String interning
- Object pooling
- JIT-friendly patterns
- Profile-guided optimization
- Small string optimization
- Copy elision
- Return value optimization (RVO)
- Named return value optimization (NRVO)
- constexpr evaluation
- Link-time optimization (LTO) support
-
C++20/23 Features
- Concepts for type constraints
- Ranges library integration
- std::format support
- Three-way comparison (spaceship) operator
- Modules support
- Coroutine integration improvements
-
C++ Interoperability
- Direct C++ library calls
- Template instantiation from TypeScript
- Operator overloading
- Custom conversion operators
- ADL (Argument-Dependent Lookup) support
- SFINAE helpers
-
CLI Options (from prototypes)
- --varAsLet option (treat var as let)
- --readable option for code formatting
- --run_after_compile for post-processing
- --watch mode with incremental compilation
- --silent mode for CI/CD
- Multiple output formats (header-only, static lib, etc.)
-
Development Tools
- REPL for testing transpiled code
- AST viewer/explorer
- Type inference debugger
- Memory leak detector integration
- Profiler integration
- Coverage report generation
-
Analysis Passes (from ASDAlexander77)
- Ownership analyzer for smart pointer inference
- Escape analyzer for stack vs heap allocation
- Cycle detector for weak_ptr insertion
- Const-correctness analyzer
- Move semantics analyzer
- Thread safety analyzer
- AST inspector for debugging
-
Factory Pattern Architecture
- Node factory for IR creation
- Type factory for C++ type generation
- Expression factory
- Statement factory
- Declaration factory
- TypeScript version compatibility layer
-
Helper Systems
- Type helpers for conversions
- String manipulation helpers
- Path resolution helpers
- Platform-specific helpers (Windows/Linux/macOS)
- Diagnostic helpers
- Bitwise operation helpers
-
Test Infrastructure ✅ PARTIAL (v0.1.0-v0.4.0)
- ✅ Cross-platform test runner (v0.4.0)
- ✅ Multiple compiler support (MSVC, clang++, g++) (v0.4.0)
- ✅ Automatic compiler detection (v0.4.0)
- ✅ Integration test framework (v0.4.0)
- Performance benchmarks
- Memory leak tests
- ✅ Spec test runner (v0.1.0)
-
Error Handling Architecture
- Multi-level error recovery
- Error code system (from error-codes.ts)
- Diagnostic formatter with colors
- Error context preservation
- Suggestion system
- Fix-it hints
- CompilerError class hierarchy
-
Readability Configuration (from readability-config.ts)
- Configurable comment generation
- Source annotations
- Section separators
- Code formatting options
- Debug annotations
- Type information comments
- Performance hints in output
-
Cross-Platform Support
- Windows-specific code paths
- Linux optimizations
- macOS compatibility
- Platform-specific runtime features
- Endianness handling
- Path separator normalization
- Platform utilities (from platform-utils.ts)
-
Package Distribution
- NPM package (once JSR ready)
- Standalone binaries
- Docker images
- VS Code extension
- GitHub Actions
- Pre-commit hooks
- Package.json generation for C++
-
Postprocessing Pipeline (from tswow)
- Tag macro processing
- Tracy profiler integration
- Zone scope instrumentation
- ID file management
- Custom dataset support
-
Terminal/Output Management
- Colored output support
- Progress indicators
- Error formatting with context
- Silent mode for automation
- Structured logging
-
Modular Emitter System (from ASDAlexander77/emitters)
- Base emitter abstraction
- Declaration emitter
- Expression emitter
- Statement emitter
- Type emitter
- Module emitter
- Emitter coordinator for orchestration
- Custom emitter extensions
-
IR Code Generation (from ir-codegen.ts)
- IR to C++ transformation
- Template generation
- Header/implementation separation
- Forward declaration handling
- Include dependency management
- Namespace generation
- Blocked by SWC dependency: SWC only available via deno.land/x, not JSR
- npm:@swc/core incompatible: Requires Node.js native bindings
- npm:@swc/wasm-typescript insufficient: Only transforms, no AST access
-
Option 1: Migrate to TypeScript Compiler API (recommended)
- Direct
npm:typescriptimport works with JSR - Full type information and semantic analysis
- Industry standard parser
- Direct
-
Option 2: Create pure TypeScript parser
- JSR-compatible but significant effort
- Would lack type checking capabilities
-
Option 3: Vendor SWC WASM build
- Bundle WASM with package
- Increases package size significantly
-
✅ Critical toString Method Fix
- ✅ Resolved TypeScript resolving method identifiers to implementation strings
- ✅ Property access now extracts identifier names directly to prevent corruption
- ✅ Fixed generator to handle identifier properties specially in member expressions
- ✅ All transpilable TypeScript applications achieve 100% C++20 compilation success
-
✅ Enhanced Runtime Implementation
- ✅ Complete Date class with full JavaScript API (toString, getFullYear, getTime, etc.)
- ✅ Error class with getMessage and toString methods
- ✅ Math static class with essential operations (PI, random, abs, max, min, etc.)
- ✅ String utility methods (trim, toUpperCase, toLowerCase, includes)
- ✅ Array join method for proper string conversion
-
✅ Type System and Code Generation Improvements
- ✅ Fixed const qualifier handling for arrays (JavaScript semantics)
- ✅ Enhanced type inference for arrays and binary expressions
- ✅ Improved method recognition for arrays, strings, and Date objects
- ✅ Added comprehensive operator overloads for js::number (++, --, comparisons)
- ✅ Better smart pointer detection ordering to prioritize method calls
-
✅ Test Results
- ✅ 3/3 transpilable applications successful (hello-world, runtime-demo, hello-world-simple)
- ✅ Proper identification and exclusion of non-transpilable plugin definitions
- ✅ C++20 standard compliance achieved across all generated code
-
✅ Async/Await with C++20 Coroutines
- ✅ Full async function support with proper C++20 coroutine transformation
- ✅ await keyword handling for Promise-based operations
- ✅ js::Promise template class implementation
- ✅ Automatic coroutine return type inference
- ✅ Integration with existing error handling (try/catch with async)
-
✅ Comprehensive ES6 Module System
- ✅ import/export statements with C++ namespace mapping
- ✅ Named imports:
import { foo, bar } from "./module" - ✅ Default imports:
import Component from "./component" - ✅ Namespace imports:
import * as Utils from "./utils" - ✅ Re-exports:
export * from "./base",export { foo } from "./other" - ✅ Module resolution with automatic header generation
- ✅ Proper C++ namespace hierarchies for module organization
-
✅ Advanced Destructuring Patterns
- ✅ Complex object destructuring with nested patterns
- ✅ Array destructuring with rest elements
- ✅ Default values in destructuring assignments
- ✅ Mixed destructuring patterns (objects + arrays)
- ✅ Parameter destructuring in function signatures
- ✅ Proper C++ variable generation for destructured values
-
✅ Arrow Functions and Higher-Order Methods
- ✅ Arrow function syntax with lexical
thisbinding - ✅ Array methods: map, filter, reduce, forEach with lambda expressions
- ✅ Automatic C++ lambda generation with proper capture semantics
- ✅ Complex callback chains and functional programming patterns
- ✅ Integration with async functions
- ✅ Arrow function syntax with lexical
-
✅ Modern JavaScript Operators (v0.7.0)
- ✅ IIFE (Immediately Invoked Function Expressions)
- ✅ Computed property names in object literals
- ✅ Advanced property access patterns
- ✅ typeof, instanceof, delete, in operators
- ✅ Runtime operator implementations
-
✅ Abstract Classes Implementation
- ✅ Pure virtual functions (
= 0) for abstract methods - ✅ Proper
virtualandoverridekeyword generation - ✅ Multi-level abstract inheritance chains
- ✅ Prevention of abstract class instantiation
- ✅ Abstract methods with return types
- ✅ Static methods excluded from virtual/override marking
- ✅ Pure virtual functions (
-
✅ Expression Handling Fixes
- ✅ Parenthesized expressions support
- ✅ Fixed issue where
(a + b)was incorrectly transpiled tojs::null - ✅ Proper pass-through of inner expressions
-
✅ Smart Pointer Detection
- ✅ Expanded variable name recognition for
->operator usage - ✅ Added common patterns: animals, shapes, vehicles, factories
- ✅ Improved method call generation for smart pointers
- ✅ Expanded variable name recognition for
-
✅ Runtime Improvements
- ✅ Template constructor for typed array conversion to
js::any - ✅ Fixed console.log formatting (no trailing spaces)
- ✅ Enhanced type guards for runtime type checking
- ✅ Template constructor for typed array conversion to
-
✅ Switch Statements
- ✅ Full switch/case/default statement support
- ✅ Fall-through behavior correctly implemented
- ✅ Break statement handling
- ✅ Proper C++ switch generation with case labels
-
✅ Loop Enhancements
- ✅ for...of loops with C++ range-based for loop generation
- ✅ for...in loops for object property enumeration
- ✅ Proper iterator pattern implementation
- ✅ Compatible with js::array and js::object types
-
✅ Function Parameters
- ✅ Default parameters with proper C++ syntax (header-only defaults)
- ✅ Optional parameters using std::optional
- ✅ std::nullopt as default for optional parameters
- ✅ Correct separation of declaration vs implementation
-
✅ Code Generation Improvements
- ✅ Fixed shared_ptr method call dereferencing (-> operator)
- ✅ Improved smart pointer detection heuristic
- ✅ Added #include for optional parameters
- ✅ Enhanced binary expression handling for undefined comparisons
-
✅ Complete Enum Support
- ✅ Numeric enums with auto-increment (Direction.Up → 0, Direction.Down → 1)
- ✅ String enums with explicit values (LogLevel.Error → "ERROR")
- ✅ Mixed enums combining numeric and string values
- ✅ Const enums with inline value substitution
- ✅ Proper C++ namespace generation (namespace Direction { ... })
-
✅ Advanced Enum Features
- ✅ Reverse mapping support (Color[0] → "Red", Color[1] → "Green")
- ✅ Enum values as function parameters and return types
- ✅ Enum comparison operations (status === Status.Active)
- ✅ Header/source file separation with extern const declarations
-
✅ C++ Code Generation
- ✅ Proper scope placement (global scope, not inside functions)
- ✅ Type-safe member access with :: operator (Direction::Up)
- ✅ getName() function for reverse mapping instead of invalid operator[]
- ✅ Correct undefined handling ("undefined" string return)
- ✅ Full compilation and execution testing
-
✅ CMake Build System
- ✅ Full CMakeLists.txt generation with proper configuration
- ✅ CLI integration with
--cmakeflag - ✅ Automatic C++20 standard configuration
- ✅ Cross-platform compiler support (GCC, Clang, MSVC)
- ✅ Debug/Release/RelWithDebInfo/MinSizeRel build configurations
- ✅ Runtime library integration with automatic include paths
- ✅ Installation targets for executable and library outputs
- ✅ End-to-end tested workflow (TypeScript → CMake → Executable)
-
✅ Package Manager Support
- ✅ vcpkg configuration types with manifest generation capability
- ✅ Conan configuration types with conanfile generation capability
- ✅ CMakePresets.json generation for vcpkg integration
- ✅ Package manager integration in generated CMakeLists.txt
-
✅ Decorator Implementation
- ✅ Class decorators with metadata preservation
- ✅ Method decorators
- ✅ Property decorators
- ✅ Accessor (getter/setter) decorators
- ✅ Basic parameter decorators
- ✅ Multiple decorators on same target
- ✅ Decorator factories support
- ✅ Metadata inheritance in class hierarchies
- ✅ C++ metadata storage using
has_metadata<T>base class pattern - ✅ 10 comprehensive decorator tests passing
- ✅ Generated C++ code uses initialization lists for metadata
-
✅ Testing Infrastructure
- ✅ End-to-end test runner with C++ compilation
- ✅ Cross-platform compiler detection (clang++, g++, MSVC)
- ✅ Automatic C++ compilation and execution
- ✅ Integration test framework
- ✅ Spec test runner with TypeScript compatibility flags
-
✅ Union Types Implementation
- ✅
string | number→js::typed::StringOrNumbertyped wrapper - ✅
T | null→js::typed::Nullable<T>nullable wrapper - ✅
T | undefined→js::typed::Nullable<T>optional wrapper - ✅ Complex unions fallback to
js::any - ✅ Function parameters and return types with unions
- ✅ Array of union types support
- ✅ Runtime type-safe wrappers with conversion methods
- ✅
-
✅ Type Guards Foundation
- ✅
typeofoperator runtime implementation - ✅ Type predicate functions (is_string, is_number, is_boolean, etc.)
- ✅ Nullable type checking helpers
- ✅ Runtime type guards infrastructure
- ✅ Basic typeof operator AST handling
- ✅
-
✅ Intersection Types Implementation
- ✅ Basic intersection type support (T & U)
- ✅ Interface intersection handling
- ✅ Primitive & object type intersection
- ✅ Multiple object intersection support
- ✅ Function parameter intersection types
- ✅ Prioritizes object types over primitives
- ✅ 5 comprehensive intersection type tests passing
- ✅ Uses first/most specific type approach (C++ compatible)
-
✅ Complete Runtime Implementation
- ✅ Full js::string implementation with 30+ methods (charAt, slice, split, replace, trim, etc.)
- ✅ Enhanced js::number with IEEE 754 double, NaN/Infinity constants, formatting methods
- ✅ Complete js::array with forEach, map, filter, reduce, find, includes, join, push, pop, etc.
- ✅ js::object with prototype chain and dynamic property access
- ✅ js::any with std::variant for dynamic typing
- ✅ All 40 runtime tests passing with comprehensive coverage
-
✅ Standard JavaScript Objects
- ✅ Complete Math object with PI, E, abs, max, min, random, sin, cos, tan, sqrt, pow, floor, ceil, round, etc.
- ✅ Full Date implementation with now, getFullYear, getMonth, getDate, toString, toISOString, getTime, etc.
- ✅ RegExp object with regular expression support and test, exec methods
- ✅ JSON object with stringify/parse methods
- ✅ console object with log, error, warn, info, debug, time, timeEnd, assert, etc.
-
✅ Error Types and Global Functions
- ✅ Error, TypeError, ReferenceError classes
- ✅ Global functions: parseInt, parseFloat, isNaN, isFinite
- ✅ Proper identifier mapping for NaN and Infinity
-
✅ Type System Improvements
- ✅ Fixed critical type annotation issue:
const text: string = "hello"now correctly generatesjs::stringinstead ofjs::any - ✅ Proper variable declaration type resolution using declaration node instead of type annotation node
- ✅ Enhanced SimpleTypeChecker with correct type mapping
- ✅ Fixed critical type annotation issue:
-
✅ JSR Publishing Success
- ✅ Successfully published @wowemulation-dev/typescript2cxx@0.3.0 to JSR
- ✅ All CI checks passing: formatting, linting, type checking, tests
- ✅ GitHub release created with comprehensive changelog
- ✅ Complete SWC to TypeScript API Migration
- ✅ Replaced SWC parser with TypeScript Compiler API
- ✅ Integrated
npm:typescript@5.7.3for Deno compatibility - ✅ Implemented SimpleTypeChecker for type resolution
- ✅ Full C++ type mapping system
- ✅ Support for primitive types (string, number, boolean, void, etc.)
- ✅ Complex type support (Array, unions, intersections, functions)
- ✅ Interface and class type processing
- ✅ All existing tests passing (50 test steps)
- ✅ Type checker tests added (13 test steps)
- ✅ JSR.io publishing now possible
-
✅ For Loops - All variants implemented
- ✅ Classic for loops with init, condition, update
- ✅ While and do-while loops
- ✅ Break and continue statements
-
✅ Binary and Unary Operators - Complete
- ✅ Arithmetic operators (+, -, *, /, %)
- ✅ Comparison operators (<, >, <=, >=, ==, !=)
- ✅ Logical operators (&&, ||, !)
- ✅ Bitwise operators (&, |, ^, ~, <<, >>)
- ✅ Unary operators (++, --, +, -, !)
- ✅ Assignment operators (=, +=, -=, *=, /=, etc.)
-
✅ Conditional Expressions
- ✅ If/else statements
- ✅ Ternary operator (? :)
- ✅ Complex boolean expressions
-
✅ C++ Compilation Issues - All resolved:
- ✅ Header file naming fixed (uses outputName correctly)
- ✅ Method implementation generation working (display() method generates)
- ✅ This pointer syntax fixed (
this->memberinstead ofthis.member) - ✅ Top-level statements placed in Main() function
- ✅ Generated code compiles successfully with clang++ and g++
-
✅ Template Literal Interpolation - Working correctly
- ✅ Expression interpolation implemented
- ✅ String concatenation with js::toString()
-
✅ For Loop Increment - Fixed
- ✅ UpdateExpression support added
- ✅ Proper increment/decrement generation
-
✅ Method Body Generation - Complete
- ✅ All method types handled correctly
- ✅ Constructor generation with proper C++ syntax
-
✅ Code Quality - All issues resolved
- ✅ 0 linting issues (147 → 0)
- ✅ 0 type checking errors (4 → 0)
- ✅ All tests passing (124/124 steps: 88 spec + 36 unit)
-
✅ Memory Annotations - Complete
- ✅ JSDoc comment parsing (@weak, @shared, @unique)
- ✅ Code generation with proper smart pointer types
- ✅ Memory management flow through transformer pipeline
-
✅ Optional Chaining - Complete
- ✅ Detection in AST parser
- ✅ C++ code generation with null checks
- ✅ Proper handling of computed/non-computed access
-
✅ Basic Language Features - Complete
- ✅ Variable declarations (let, const, var)
- ✅ Function declarations and expressions
- ✅ Class declarations with constructors and methods
- ✅ Interface declarations
- ✅ Type annotations
- ✅ Template literals with interpolation
- ✅ Array and object literals
- ✅ Property access (dot and bracket notation)
- ✅ Method calls
- ✅ New expressions
-
✅ Runtime Include Path - Complete
- ✅ CLI --runtime option
- ✅ Pipeline integration
- ✅ Configurable header paths
-
✅ GitHub Actions Security - Complete
- ✅ Removed -A (allow-all) flags
- ✅ Explicit permission specifications
- ✅ Updated all workflows and deno.json tasks
-
✅ Deprecated Imports - Complete
- ✅ Fixed parse import to use parseArgs
- ✅ Updated to correct standard library modules
- JSR Publishing Support ✅ COMPLETED
- ✅ Migrated from deno.land/x/swc to JSR-compatible TypeScript Compiler API
- ✅ Uses npm:typescript which is JSR-compatible
- ✅ No longer blocked by native bindings
- ✅ Ready for JSR.io publishing
-
✅ Memory Annotations - Complete
- ✅ Parse JSDoc comments for @weak, @shared, @unique
- ✅ Apply annotations to generated code
- ✅ Example:
/** @weak */ parent: Node;
-
Type Checker Integration ✅ COMPLETED
- ✅ Use TypeScript Compiler API for accurate type information
- ✅ Better type resolution with C++ type mapping
- ✅ Basic generic type support (Array, Promise)
- ✅ Union and intersection type handling
- ✅ Function type resolution
- ✅ Interface and class type processing
-
Source Maps ✅ COMPLETED (v0.8.1-dev)
- ✅ Generate source maps for debugging
- ✅ Map C++ lines back to TypeScript
- ✅ Base64 VLQ encoding for standard source map format
- ✅ Support for both header and source file source maps
-
Module System
- Support ES modules import/export
- Generate proper C++ namespaces
- Handle circular dependencies
-
Async/Await
- Implement using C++20 coroutines
- Generate proper async function signatures
- Handle promise types
-
Optimization Passes
- Dead code elimination
- Constant folding
- Inline simple functions
-
Better Type Mappings
- Map, Set, WeakMap, WeakSet
- Promise, ArrayBuffer
- Typed arrays
-
CMake Build System Integration ✅ COMPLETED (v0.5.2)
- ✅ Generate CMakeLists.txt files for C++ projects (implemented)
- ✅ CLI option:
--cmakeintegrated with transpiler workflow - ✅ Support for executable and library targets (working)
- ✅ Automatic dependency management (basic)
- ✅ Cross-platform build configuration (Windows/Linux/macOS)
- ✅ Integration with vcpkg/Conan package managers (config support)
- ✅ Debug/Release build configurations (full cmake preset support)
- Custom CMake module detection
- ✅ Automatic runtime library linking (working)
- ✅ End-to-end tested workflow (TypeScript → CMake → Executable)
-
Additional Build Systems
- Makefile generation
- Package.json scripts
- Meson build files
-
Error Recovery
- Continue transpilation after errors
- Generate partial output
- Better error messages
-
Performance Profiling
- Track transpilation time by phase
- Memory usage statistics
- Optimization suggestions
-
Code Formatting
- Respect C++ style guides
- Configurable formatting options
- Integration with clang-format
-
Documentation Generation
- Generate Doxygen comments
- Preserve JSDoc comments
- API documentation
-
Test Coverage
- Increase test coverage to 90%+
- Property-based testing
- Fuzzing
-
Reflection Support
- Generate RTTI information
- Runtime type checking
- Serialization support
-
Interop Improvements
- Better C++ library integration
- FFI support
- Bindings generation
-
Advanced Memory Management
- Custom allocators
- Memory pools
- Garbage collection integration
-
WASM Target
- Generate WebAssembly alongside C++
- Shared runtime library
- Browser compatibility
-
GPU Compute
- Generate CUDA/OpenCL kernels
- Parallel array operations
- GPU memory management
-
Game Engine Integration
- Unreal Engine plugin
- Unity native plugin
- Custom engine support
-
Advanced Type System
- Dependent types
- Linear types for memory safety
- Effect system
-
Optimization Research
- Machine learning for optimization
- Profile-guided optimization
- Superoptimization
Goal: Replace SWC with TypeScript Compiler API for full type information
-
Setup TypeScript API ✅ COMPLETED
- ✅ Import
npm:typescriptin Deno - ✅ Create AST walker infrastructure
- ✅ Implement type checker integration (SimpleTypeChecker)
- ✅ Migrate existing parser tests
- ✅ Import
-
Benefits ✅ ACHIEVED
- ✅ Enables JSR publishing
- ✅ Full type information access
- ✅ Basic generic handling (Array, Promise, function types)
- ✅ Type resolution with C++ mapping
- ✅ Better error messages structure
Goal: Implement core JavaScript runtime in C++
-
Core Types ✅ COMPLETED
- ✅ Implement js namespace types
- ✅ String/Array/Object methods
- ✅ Type conversion utilities
- ✅ Memory management helpers
- ✅ Type annotation resolution (const text: string generates js::string)
-
Standard Library ✅ COMPLETED
- ✅ Math, Date, RegExp
- ✅ Console implementation
- ✅ JSON support
- ✅ Global functions
- ✅ Error types (Error, TypeError, ReferenceError)
- ✅ 40 comprehensive runtime tests passing
Goal: Support modern TypeScript/JavaScript features
-
Language Features
- ✅ Async/await with C++20 coroutines
- ✅ Full class inheritance with extends and super
- ✅ Exception handling (try/catch/finally/throw)
- ✅ Decorators (basic support with metadata preservation)
-
Type System
- ✅ Union types (string | number → js::typed::StringOrNumber, T | null → js::typed::Nullable)
- ✅ Type guards (basic typeof operator support and runtime type checking)
- ✅ Intersection types (basic support - uses first/most specific type)
- Conditional types (future enhancement)
- Mapped types (future enhancement)
-
Testing Infrastructure
- ✅ End-to-end test runner with C++ compilation
- ✅ Cross-platform compiler detection (clang++, g++, MSVC)
- ✅ Automatic execution of generated code
- ✅ Integration test framework
Goal: Complete transpiler with tooling
-
Developer Experience
- Source maps
- Debugging support
- Build system integration
- Performance optimization
-
Documentation
- Complete API docs
- Migration guides
- Performance tuning
- Best practices
-
Type Assertions and Casting
- Type assertions with
askeyword - Type assertions with angle brackets (legacy)
- Non-null assertions in expressions
- Type predicates in conditionals
- User-defined type guards
- Type assertions with
-
Object and Array Patterns
- Object property shorthand
- Computed property names in objects
- Object method shorthand
- Array and object destructuring with defaults
- Nested destructuring
- Rest properties in destructuring
- Destructuring in parameters
-
Advanced Control Flow
- Labeled break/continue
- Nested loops with labels
- Early returns with cleanup
- Complex switch cases
- Fall-through prevention
-
Special JavaScript Behaviors
- Automatic semicolon insertion
- Hoisting behavior
- Temporal dead zone for let/const
- Block-scoped variables
- Function scoping vs block scoping
-
Edge Cases and Compatibility
- Unicode identifiers and strings
- Emoji support in strings
- Very large numbers and precision
- Special number values (Infinity, -0)
- Property access on primitives
- Implicit type conversions
- Truthiness/falsiness rules
To ensure we meet or exceed the capabilities of both prototype implementations:
- Full TypeScript Compiler API integration
- Complete js:: namespace runtime
- All 50+ test scenarios passing
- Decorator metadata support
- Proxy object implementation
- WeakMap/WeakSet support
- Source map generation
- Escape analysis optimization
- Thread safety primitives
- C++20 concepts integration
- Platform-specific code generation
- Comprehensive error recovery
- Direct TypeScript API usage
- Lambda capture analysis
- varAsLet transformation
- Custom error formatting
- Post-compilation hooks
- Silent mode for CI/CD
- ORM code generation (optional)
- Game-specific optimizations (optional)
- Deno-first implementation
- JSR.io publishing capability
- Modern Deno 2.x security model
- Comprehensive test suite
- Plugin architecture
- Better documentation
- Active community support
To work on any of these items:
- Comment on the issue if one exists
- Create a feature branch
- Write tests first
- Implement the feature
- Submit a PR with description
Priority guidelines:
- 🐛 Bug fixes always welcome
- ✨ Core features need discussion
- 🚀 Features need design docs
- 🎨 Code quality improvements welcome
- 🔧 Advanced features need RFC