All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- feat: Code quality improvements - enforcing strict type checking (v0.8.7-dev)
- feat: Replaced 20+
anytypes with proper interfaces across core modules (v0.8.7-dev) - feat: Removed
no-explicit-anyexclusion from linting rules (v0.8.7-dev) - feat: Added temporary IRFunctionExpression interface for lambda/arrow function support (v0.8.7-dev)
- feat: Comprehensive type guards for all IR node types in
src/ir/type-guards.ts(v0.8.7-dev) - feat: Branded types for type-safe code generation (
CppCode,TypeScriptCode) (v0.8.7-dev) - feat: Exhaustive switch checks with
assertNeverutilities (v0.8.7-dev) - feat: Added 15+ missing IR node types for complete type system (v0.8.7-dev)
- feat: Template literal tags
cppandtsfor type-safe code strings (v0.8.7-dev) - feat: ExhaustivenessValidator class for runtime validation (v0.8.7-dev)
- fix: transpiler.ts now uses proper TypeChecker and PluginContext types (v0.8.7-dev)
- fix: cli.ts now uses CompileOptions type with proper type casting (v0.8.7-dev)
- fix: memory/analyzer.ts uses Record<string, unknown> instead of any (v0.8.7-dev)
- fix: generator.ts now uses proper CompilerContext, Plugin[], and ErrorReporter types (v0.8.7-dev)
- fix: transformer.ts now uses proper TypeScript compiler API types (v0.8.7-dev)
- fix: Improved type safety in recursive node traversal functions (v0.8.7-dev)
- refactor: Improved type safety across transpiler, cli, generator, transformer, and memory modules (v0.8.7-dev)
- refactor: Enhanced module exports with type guards and branded types (v0.8.7-dev)
- feat: keyof operator support for type-safe property key extraction (v0.8.6-dev)
- feat: Conditional types basic support with compile-time resolution (v0.8.6-dev)
- feat: Mapped types basic support with readonly/optional modifier detection (v0.8.6-dev)
- feat: Template literal types support with js::string mapping (v0.8.6-dev)
- feat: Index types and indexed access support with dynamic property access (v0.8.6-dev)
- feat: Typeof type operator support for type extraction from values (v0.8.6-dev)
- feat: Const assertions (
as const) support for literal type narrowing and immutability (v0.8.6-dev) - feat: Satisfies operator support for type validation without type narrowing (v0.8.6-dev)
- feat: Non-null assertion operator (!) support for nullable type assertions (v0.8.6-dev)
- feat: Definite assignment assertion (!) support for strict property initialization control (v0.8.6-dev)
- feat: Const type parameters support with const modifier detection and C++ comment generation (v0.8.6-dev)
- feat: NoInfer utility type support for preventing unwanted type inference in generic functions (v0.8.6-dev)
- feat: TypedArray support for efficient binary data handling with all 11 JavaScript TypedArray types (v0.8.6-dev)
- feat: Tuple types support with rest elements, optional elements, and named members mapping to std::tuple (v0.8.6-dev)
- feat: Literal types support for string, number, and boolean literals with const qualifier mapping (v0.8.6-dev)
- feat: Object static methods (keys, values, entries, fromEntries, assign, create) in runtime library
- feat: Type assertion (as) expression support in transformer
- feat: ConditionalType, InferType, MappedType, TemplateLiteralType, IndexedAccessType, and TypeQuery handling in SimpleTypeChecker
- feat: AsExpression detection for const assertions with
isConstAssertionflag propagation - feat: SatisfiesExpression support with pass-through behavior for compile-time type validation
- feat: NonNullExpression support with pass-through behavior for non-null assertions
- feat: PropertyDeclaration support for definite assignment assertions with standard C++ property generation
- feat: Enhanced IRTemplateParameter interface with isConst flag for TypeScript 5.0+ const type parameter tracking
- feat: Template parameter generation with /* const */ comments for improved code readability
- feat: NoInfer type extraction in SimpleTypeChecker for compile-time type inference control
- feat: TypedArray base class template implementation with inheritance from array in runtime library
- feat: TypedArray type mapping in SimpleTypeChecker (Int8Array → js::Int8Array, etc.)
- feat: TypedArray methods implementation (subarray, set, fill, byteLength, BYTES_PER_ELEMENT)
- feat: TupleType support in SimpleTypeChecker with std::tuple C++ mapping
- feat: Rest type elements handling in tuples with variadic template support
- feat: Optional type elements in tuples using std::optional
- feat: Named tuple member support for TypeScript 4.0+ tuple syntax
- feat: Automatic include detection in code generator
- feat: Enhanced LiteralType handling for string, number, and boolean literals in SimpleTypeChecker
- fix: Object identifier mapping conflict (was dual-mapped to js::Object and js::object)
- fix: Type assertions now properly pass through expressions without affecting runtime behavior
- fix: Type aliases no longer generate runtime code (they're compile-time only constructs)
- fix: Default runtime include path changed from "core.h" to "runtime/core.h" for consistency
- fix: Arrays with const assertions now properly receive C++ const qualifier for immutability
- feat: Array higher-order methods (forEach, find, findIndex, some, every, includes)
- feat: Computed property names in object literals (
{[key]: value}) - feat: IIFE (Immediately Invoked Function Expressions) support
- feat: instanceof operator for runtime type checking
- feat: in operator for property existence checking
- feat: delete operator for property deletion
- feat: Full arrow function support with lambda generation
- feat: Object rest properties in destructuring (
const {a, ...rest} = obj) - feat: Array spread in array literals (
[...arr1, ...arr2])
- fix: C++ reserved keywords properly escaped with underscore suffix
- fix: Added missing arithmetic operators to js::any (*, /, -, %)
- fix: Fixed === operator mapping to == in C++ generation
- fix: Lambda capture issues resolved for global scope operations
- fix: Better array method detection in code generator
- Enhanced js::any with comprehensive operator overloads
- Improved runtime helper functions for new operators
- Better type safety in array method implementations
- feat: Implement exponentiation operator (**) with std::pow and automatic cmath inclusion
- feat: Add numeric separators support (1_000_000, 3.14_159, 0xFF_EC, 0b1010_0001)
- feat: Enhanced destructuring assignment with fixed duplicate declarations
- feat: Advanced spread operator support with array concatenation
- feat: Add slice() methods to js::array and js::any for rest element support
- feat: Comprehensive test suites for modern JavaScript operators
- feat: Automatic empty array type deduction (js::arrayjs::any{})
- fix: Destructuring code generation now only in source files (no duplicates in headers)
- fix: Empty array template deduction issues resolved
- fix: Spread operator fallback to addition (now uses proper ** mapping)
- fix: Add coverage files to .gitignore (cov_profile/, coverage.lcov)
- enhance: Runtime library with concat() methods for array spreading
- enhance: BinaryOp type system to include exponentiation operator
- enhance: Pre-release QA process with comprehensive checks
- enhance: Code formatting and linting compliance
- fix: Circular dependency resolution in runtime/core.h
- fix: Type inference for binary expressions generating invalid extern declarations
- fix: Test runner absolute path resolution for runtime includes
- fix: Test execution permissions with full --allow-run flag
- fix: E2E compilation issues preventing C++ code from compiling
- refactor: Restructured runtime header to define simple types before complex types
- refactor: Enhanced code generator type inference for arithmetic operations
- refactor: Project Organization - Consolidated all output into unified
.output/directory structure- Replaced 8+ scattered directories (cmake-test-output, cov_profile, etc.) with organized subdirectories
- All generated files now in
.output/{coverage,dist,docs,cmake-tests,reports}/ - Moved CMake integration tests to
tests/integration/cmake-e2e.ts - Simplified .gitignore to single
.output/entry - Added
test:cmakeDeno task for E2E pipeline testing
- chore: Updated version to 0.5.0 in deno.json
- docs: Created comprehensive release notes for v0.2.x, v0.3.x, and v0.4.x
- docs: Updated README with current project status and achievements
- docs: Enhanced feature compatibility tables
-
feat: Decorator Support - Complete decorator implementation with metadata preservation
- Class, method, property, and accessor decorators
- Decorator factories with parameters
- Multiple decorators on same target
- C++ metadata storage using has_metadata pattern
-
feat: Exception Handling - Full try/catch/finally support
- Proper stack unwinding semantics
- js::any as universal exception type
- Error hierarchy (Error, TypeError, ReferenceError)
- Nested try/catch blocks
-
feat: Union Types - Type-safe runtime unions
- string | number → js::typed::StringOrNumber
- T | null → js::typed::Nullable
- T | undefined → js::typed::Optional
- Complex unions fallback to js::any
-
feat: Type Guards - Runtime type checking
- typeof operator implementation
- Type predicate functions (is_string, is_number, etc.)
- Nullable type checking helpers
- Control flow type narrowing
-
feat: Intersection Types - Basic intersection support
- T & U type combinations
- Interface intersection
- Primitive & object intersection
- First-type prioritization strategy
- feat: End-to-end test runner with C++ compilation
- feat: Cross-platform compiler detection (clang++, g++, MSVC)
- feat: Automatic compilation and execution of generated code
- feat: 40+ new test cases for advanced features
- feat: Complete js::string implementation - 30+ methods including charAt, slice, split, replace, trim, toUpperCase, toLowerCase, indexOf, etc.
- feat: Enhanced js::number - IEEE 754 double with NaN, Infinity constants, formatting methods
- feat: Full js::array implementation - forEach, map, filter, reduce, find, findIndex, includes, join, push, pop, slice, splice, etc.
- feat: js::object with prototype chain - Dynamic property access and inheritance support
- feat: js::any with std::variant - Dynamic typing system for mixed-type operations
- feat: Complete Math object - PI, E, abs, max, min, random, sin, cos, tan, sqrt, pow, floor, ceil, round, etc.
- feat: Full Date implementation - now, getFullYear, getMonth, getDate, toString, toISOString, getTime, etc.
- feat: RegExp object - Regular expression support with test, exec methods and flag handling
- feat: Enhanced console object - log, error, warn, info, debug, trace methods with proper formatting
- feat: JSON object - stringify and parse methods for object serialization
- feat: Type parsing functions - parseInt with radix support (2-36), parseFloat with proper validation
- feat: Validation functions - isNaN, isFinite for number validation
- feat: URI functions - encodeURI, decodeURI, encodeURIComponent, decodeURIComponent
- feat: Type conversion utilities - Comprehensive JavaScript-to-C++ type mapping
- feat: Complete Error hierarchy - Error, TypeError, ReferenceError, SyntaxError, RangeError classes
- feat: Stack trace support - Error objects include message and stack information
- feat: Exception handling - Proper C++ exception integration for JavaScript errors
- feat: Enhanced type mapping - Map Date, RegExp, Promise, Array to appropriate C++ types
- feat: Global identifier mapping - Math, Date, JSON, console mapped to js:: namespace
- feat: Improved literal generation - Proper handling of NaN, Infinity, null, undefined
- feat: Member access generation - Static method calls for Math::PI, Date::now, etc.
- feat: Template literal improvements - Better string interpolation and concatenation
- feat: Smart pointer optimization - js:: runtime types exclude smart pointer wrapping
- feat: Efficient object allocation - Optimized memory patterns for JavaScript objects
- feat: Reference counting - Proper cleanup for complex object relationships
- feat: Comprehensive test suite - 30+ test cases covering all runtime features
- feat: Runtime verification - Tests for string, number, array, object operations
- feat: Integration tests - Full transpilation pipeline testing with runtime features
- BREAKING: Enhanced runtime library with 1000+ lines of new C++ code
- BREAKING: Updated all type mappings to use comprehensive js:: runtime types
- refactor: Code generator now properly handles JavaScript standard objects
- refactor: Improved identifier mapping for built-in JavaScript globals
- refactor: Enhanced literal generation for JavaScript special values
- refactor: Member access generation supports static method calls
- fix: Method call generation issues for string and array methods
- fix: NaN and Infinity literal generation
- fix: Math, Date, JSON static method access
- fix: Error constructor generation
- fix: Template literal interpolation with proper escaping
- fix: Object property access with dynamic keys
- perf: Optimized string operations with efficient C++ implementations
- perf: Fast array methods using modern C++ algorithms
- perf: Efficient object property access with hash maps
- perf: Memory-efficient type conversion utilities
- docs: Updated README with comprehensive v0.3.0 runtime features
- docs: Added runtime library documentation with all available methods
- docs: Enhanced examples showcasing JavaScript runtime capabilities
- docs: Updated type mapping tables with new runtime types
This is a major release that implements a complete JavaScript runtime environment in C++. The transpiler can now handle complex JavaScript operations including:
- Advanced string manipulation and parsing
- Full array processing with functional programming methods
- Mathematical computations with the complete Math object
- Date/time operations with timezone support
- Regular expression pattern matching
- JSON serialization and deserialization
- Comprehensive error handling and exceptions
- Dynamic typing with proper type conversions
The runtime library provides over 100 JavaScript methods and functions, making it possible to transpile sophisticated JavaScript/TypeScript code while maintaining full semantic compatibility.
- fix: Documentation formatting issues preventing JSR.io publish
- fix: Escaped JSDoc comments in code examples
- fix: Changed glob pattern example to avoid formatter errors
This release fixes documentation formatting that was preventing the package from publishing to JSR.io. All QA checks now pass.
- docs: Enhanced module documentation for better JSR.io score
- docs: Added comprehensive JSDoc comments to all exported functions
- docs: Added usage examples and feature descriptions
- docs: Documented CLI module with installation and usage instructions
This release improves documentation to achieve a better JSR.io package score. No functional changes.
- fix: JSR publish workflow now uses token authentication
This release adds JSR_TOKEN authentication to the publish workflow as a temporary solution until OIDC authentication with linked repositories is working.
- fix: JSR publishing authentication via linked repository on JSR.io
This release tests the JSR publishing workflow after linking the GitHub
repository on JSR.io for automatic authentication with deno publish.
- feat: First official JSR.io publication
- feat: Package now available at jsr.io/@wowemulation-dev/typescript2cxx
- docs: Consolidated v0.1.x release notes into single file
- docs: Updated installation instructions to prioritize JSR
This release marks the first successful publication to JSR.io. The package
is now easily installable via deno add and deno install commands.
All functionality remains the same as v0.1.2.
- feat: JSR.io publishing workflow enabled
- feat: JSR package verification in CI pipeline
- fix: Code formatting issues in CHANGELOG.md
- fix: Enabled JSR publish workflow (was disabled)
- fix: Added JSR package dry-run verification to CI
- chore: All QA checks passing (format, lint, type check, tests)
This is a quick follow-up release to v0.1.1 that enables JSR.io publishing. The TypeScript Compiler API migration from v0.1.1 makes this possible.
- feat: TypeScript Compiler API integration - Complete migration from SWC to TypeScript API
- feat: SimpleTypeChecker - Type resolution without full program creation
- feat: Enhanced type support - Generic types (Array, Promise), unions, intersections
- feat: Function type resolution - Proper C++ std::function generation
- feat: Type checking integration - Basic type validation in parser
- feat: memory annotation support from JSDoc comments (@weak, @shared, @unique)
- feat: optional chaining detection and generation
- feat: runtime include path configuration via --runtime CLI option
- BREAKING: Replaced SWC parser with TypeScript Compiler API (npm:typescript@5.7.3)
- refactor: Parser now returns synchronous results (no longer async)
- refactor: Transformer updated to work with TypeScript AST nodes
- refactor: All node type checks now use ts.SyntaxKind enums
- refactor: updated GitHub Actions to use explicit permissions instead of -A flag
- refactor: updated test tasks in deno.json to include --allow-net permission
- fix: deprecated parse import replaced with parseArgs from @std/cli/parse_args
- fix: all C++ compilation issues resolved - generated code now compiles successfully
- fix: runtime include path now flows through the transpilation pipeline
- fix: memory annotations properly applied in code generation
- fix: optional chaining expressions generate correct C++ code
- fix: Decorator API compatibility with latest TypeScript
- fix: Property transformation to use 'type' instead of 'cppType'
- fix: All 50 test steps now passing after migration
- BREAKING: Removed deno.land/x/swc dependency
- Removed SWC-specific AST handling code
0.1.0 - 2025-08-05
- feat: initialize Deno project with TypeScript configuration
- feat: add dual MIT/Apache-2.0 licensing
- feat: add JSR package configuration for
@wowemulation-dev/typescript2cxx - feat: add comprehensive README with game engine examples
- feat: add CLAUDE.md with AI assistance guidelines
- feat: add reference to local prototype implementation
- feat: implement TypeScript AST parser using swc
- feat: add feature detection for async, generators, decorators, template literals
- feat: add support for TypeScript syntax (interfaces, type annotations, generics)
- feat: implement parse error handling with source locations
- feat: design comprehensive IR node system for C++ translation
- feat: add memory management annotations (shared, unique, weak, raw, value, auto)
- feat: implement access modifiers (public, private, protected)
- feat: add variable kinds (const, let, var)
- feat: support all major statement and expression types
- feat: implement complete AST to IR transformer
- feat: add scope tracking for variable resolution
- feat: support function declarations with parameters and return types
- feat: support class declarations with methods and properties
- feat: implement control flow statements (if, while, for)
- feat: handle TypeScript type annotations and map to IR types
- feat: implement C++ code generator from IR
- feat: generate separate header (.h) and source (.cpp) files
- feat: add header guards and forward declarations
- feat: implement type mapping from TypeScript to C++ types
- feat: generate JavaScript-like runtime calls (console.log, string literals)
- feat: support smart pointer generation for heap allocations
- feat: generate proper class definitions with access levels
- feat: implement main entry point generation
- feat: port and modernize C++ runtime library (core.h)
- feat: implement JavaScript-like types (js::string, js::number, js::array, js::object)
- feat: add console API implementation
- feat: support string literal operator (_S)
- feat: implement any type for dynamic typing
- feat: implement command-line interface with argument parsing
- feat: add watch mode support
- feat: add build command for batch processing
- feat: support output directory specification
- feat: add verbose and quiet modes
- feat: implement file/directory exclusion patterns
- feat: design extensible plugin architecture
- feat: implement plugin loader
- feat: add lifecycle hooks (onInit, onBeforeTransform, onAfterTransform, onComplete)
- feat: support custom type mappings
- feat: enable custom transformers and emitters
- feat: create game engine plugin example
- feat: add comprehensive test suite using Deno's testing framework
- feat: implement parser tests with feature detection
- feat: add transpiler integration tests
- feat: test memory management annotations
- feat: verify C++ standard option handling
- feat: add memory analyzer module structure
- feat: support memory strategy options (auto, shared, unique, manual)
- feat: implement memory management enums in IR
- feat: add TypeScript type definitions for all public APIs
- feat: implement error reporting with source locations
- feat: add transpilation statistics tracking
- feat: support source map generation (placeholder)
- refactor: separate plugin types into distinct modules
- refactor: improve error handling with custom error classes
- refactor: organize exports in mod.ts for clean API
- fix: correct swc import to use parse instead of parseModule
- fix: remove unsupported allowJs compiler option
- fix: add proper type exports to avoid circular dependencies
- fix: export AccessModifier and VariableKind enums
- fix: handle parse errors with try-catch pattern
- fix: correct parameter types in transformer and generator
- fix: add missing IR node types (Array, Assignment, Conditional, Interface, New, Object, Unary expressions)
- fix: resolve all TypeScript type mismatches in transformer and generator
- fix: clean up unused variables and parameters throughout codebase
- fix: remove unnecessary async keywords from synchronous functions
- fix: properly export IRNode type from plugins module
- security: avoid executing arbitrary code from untrusted sources
- security: implement defensive checks in parser and transformer
- docs: add comprehensive development guide (docs/DEVELOPMENT.md)
- docs: add release process documentation (docs/RELEASE.md)
- docs: add TODO list for tracking future work
- docs: add contribution guidelines (CONTRIBUTING.md)
- docs: add game engine examples and WoW-specific use cases to README
- ci: add continuous integration workflow for PRs and main branch
- ci: add automated JSR publishing on version tags
- ci: add GitHub release creation workflow with changelog extraction