| Crates.io | macroforge_ts |
| lib.rs | macroforge_ts |
| version | 0.1.72 |
| created_at | 2025-12-07 21:43:35.35473+00 |
| updated_at | 2026-01-05 06:21:28.920806+00 |
| description | TypeScript macro expansion engine - write compile-time macros in Rust |
| homepage | https://github.com/macroforge-ts/core |
| repository | https://github.com/macroforge-ts/core |
| max_upload_size | |
| id | 1972294 |
| size | 1,212,804 |
TypeScript macro expansion engine - write compile-time macros in Rust
This crate provides a TypeScript macro expansion engine that brings Rust-like derive macros to TypeScript. It is designed to be used via NAPI bindings from Node.js, enabling compile-time code generation for TypeScript projects.
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.
The crate is organized into several key components:
NativePlugin, expand_sync, transform_sync): Entry points for Node.jsNativePositionMapper, NativeMapper): Bidirectional source mapping for
IDE integrationhost module): Core expansion engine with registry and dispatcherbuiltin module): Standard derive macros (Debug, Clone, Serialize, etc.)@derive decoratorsconst { NativePlugin, expand_sync } = require('macroforge-ts');
// Create a plugin instance with caching
const plugin = new NativePlugin();
// Process a file (uses cache if version matches)
const result = plugin.process_file(filepath, code, { version: '1.0' });
// Or use the sync function directly
const result = expand_sync(code, filepath, { keep_decorators: false });
This crate re-exports several dependencies for convenience when writing custom macros:
ts_syn: TypeScript syntax types for AST manipulationmacros: Macro attributes and quote templatesswc_core, swc_common, swc_ecma_ast: SWC compiler infrastructureAdd this to your Cargo.toml:
[dependencies]
macroforge_ts = "0.1.38"
TransformResult - Result of transforming TypeScript code through the macro system.MacroDiagnostic - A diagnostic message produced during macro expansion.MappingSegmentResult - A segment mapping a range in the original source to a range in the
expanded source.GeneratedRegionResult - A region in the expanded source that was generated by a macro.SourceMappingResult - Complete source mapping information for a macro expansion.ExpandResult - Result of expanding macros in TypeScript source code.ImportSourceResult - Information about an imported identifier from a TypeScript module.SyntaxCheckResult - Result of checking TypeScript syntax validity.SpanResult - A span (range) in source code, represented as start position and length.JsDiagnostic - A diagnostic from the TypeScript/JavaScript compiler or IDE.unchanged - Creates a no-op result with the original code unchanged.new - Creates a new position mapper from source mapping data.is_empty - Checks if this mapper has no mapping data.original_to_expanded - Converts a position in the original source to the corresponding
position in expanded source.expanded_to_original - Converts a position in the expanded source back to the original
source position.generated_by - Returns the name of the macro that generated code at the given position.map_span_to_original - Maps a span (start + length) from expanded source to original source.map_span_to_expanded - Maps a span (start + length) from original source to expanded source.is_in_generated - Checks if a position is inside macro-generated code.new - Creates a new mapper wrapping the given source mapping.See the full API documentation on the Macroforge website.
MIT