# macroforge_ts
TypeScript macro expansion engine - write compile-time macros in Rust
[](https://crates.io/crates/macroforge_ts)
[](https://docs.rs/macroforge_ts)
## Overview
This crate provides a TypeScript macro expansion engine that brings Rust-like derive macros to
TypeScript. It supports multiple output targets via feature flags:
- `wasm`: (Default) Universal WebAssembly module via wasm-bindgen for browser and edge environments.
- `node`: Optional native Node.js bindings via NAPI-RS.
## Overview
Macroforge processes TypeScript source files containing `@derive` decorators and expands them into
concrete implementations. For example, a class decorated with `@derive(Debug, Clone)` will have
`toString()` and `clone()` methods automatically generated.
## Architecture
The crate is organized into several key components:
- **Unified API** (`api` module): An output-agnostic trait-based interface (`MacroforgeApi`) that
defines all macro operations.
- **Target Bindings**:
- `bindings_napi`: Node.js specific entry points using NAPI-RS.
- `bindings_wasm`: Universal entry points using `wasm-bindgen`.
- **Position Mapping** (`api_types::SourceMappingResult`): Bidirectional source mapping for IDE
integration.
- **Macro Host** (`host` module): Core expansion engine with registry and dispatcher.
- **Built-in Macros** (`builtin` module): Standard derive macros (Debug, Clone, Serialize, etc.).
## Usage
### From Node.js
```javascript
const { expandSync } = require('macroforge');
const result = expandSync(code, filepath, { keep_decorators: false });
```
### From WASM
```javascript
import init, { expand_sync } from './pkg/macroforge_ts.js';
await init();
const result = expand_sync(code, filepath, { keep_decorators: false });
```
## Re-exports for Macro Authors
This crate re-exports several dependencies for convenience when writing custom macros:
- `ts_syn`: TypeScript syntax types for AST manipulation
- `macros`: Macro attributes and quote templates
- `swc_core`, `swc_common`, `swc_ecma_ast`: SWC compatibility infrastructure
## Installation
Add this to your `Cargo.toml`:
```toml
[dependencies]
macroforge_ts = "0.1.79"
```
## Key Exports
### Functions
- **`__macroforge_ffi_free`** - Free a buffer allocated by an FFI function.
- **`__macroforge_ffi_get_manifest`** - Returns the full MacroManifest as JSON via FFI.
## API Reference
See the [full API documentation](https://macroforge.dev/docs/api/reference/rust/macroforge_ts) on
the Macroforge website.
## License
MIT