mirror of
https://github.com/oxc-project/oxc.git
synced 2026-09-14 19:36:11 +08:00
894c8f9cd8
### 💥 BREAKING CHANGES -a31567aallocator: [**BREAKING**] Make `Allocator::cursor_ptr` and `data_end_ptr` private (#26081) (overlookmotel) ### 🚀 Features -784e9faminifier: Invert `!0` and `!1` in place for boolean context to `1` and `0` (#26050) (Armano) -1e902ccminifier: Expand fold leading assignments into the var decl (#26142) (Armano) -3ed4f6aminifier: Expand de morgan's optimization to allow move of `!` (#25930) (Armano) -5672585parser: Attach all comments to nodes (#25944) (camc314) ### 🐛 Bug Fixes -4adfb4csemantic: Validate chained continue labels (#26157) (camc314) -b874f48ecmascript: `Math.round` only exact half ties (#26150) (camc314) -a625378minifier: Coerce omitted `indexOf` search argument (#26149) (camc314) -dc7398becmascript: Trim trailing whitespace in string to number (#26148) (camc314) -243b685transformer/object-rest: Lower multiple declarators correctly (#26147) (camc314) -dc09a3aparser: Avoid panic on escaped string export names (#26146) (camc314) -e412cf2linter: Clamp invalid JS plugin locations (#26144) (camc314) -c3dedc9semantic: Skip function body bindings in parameters (#26099) (Dunqing) -e74de61transform-react: Match Babel diagnostic reporting (#26128) (Boshen) -d5163d0parser: Correctly classify unapplied pure annotations (#26084) (camc314) -8531b9blinter/plugins: Alter method for obtaining mutable `Program` when sending AST to JS plugins (#26077) (overlookmotel) -9b51658regular_expression: Allow oversized decimal escape for Annex B (#26070) (leaysgur) -c8de4dfregular_expression: Reject oversized backreferences (#26055) (camc314) ### ⚡ Performance -ac4785adiagnostics: Use fixed ANSI styles (#26130) (Boshen) -07a0793packages/codegen: Flatten output in chunks (#26109) (overlookmotel) -487427apackages/codegen: Faster string flattening (#26108) (overlookmotel) -7785583packages/codegen: Ensure indent strings are flattened (#26107) (overlookmotel) -0dd4db3packages/codegen: Store mapping positions in an `Int32Array` (#26085) (overlookmotel)
Oxc NAPI
Node.js Native API bindings for oxc tools.
Overview
This crate provides Node.js bindings for oxc tools, enabling JavaScript/TypeScript applications to use oxc's high-performance parsing, linting, and transformation capabilities through native Node.js modules.
Key Features
- Native performance: Direct access to oxc's Rust implementation
- UTF-16 compatibility: Automatic span conversion for JavaScript strings
- Error handling: Proper JavaScript error propagation
- Comment preservation: Maintains comments during processing
- Type safety: TypeScript definitions for all APIs
Architecture
UTF-8 to UTF-16 Conversion
JavaScript uses UTF-16 string encoding, while Rust uses UTF-8. This crate handles the conversion:
- Span conversion: Updates all source positions to UTF-16 offsets
- Comment handling: Preserves comment positions during conversion
- Error mapping: Ensures error positions are correct in JavaScript
Node.js Integration
The bindings are designed for:
- npm packages: Used by
@oxc-project/npm packages - Build tools: Integration with Webpack, Vite, and other bundlers
- Editor support: Language server and editor extension features
- CLI tools: Command-line interfaces for Node.js environments
Error Handling
Provides JavaScript-friendly error handling:
- OxcError: Rust errors converted to JavaScript exceptions
- Diagnostic integration: Rich error messages with source context
- Stack traces: Proper error propagation to JavaScript
Performance Considerations
- Zero-copy: Minimizes data copying between Rust and JavaScript
- Efficient conversion: Optimized UTF-8 to UTF-16 conversion
- Memory management: Proper cleanup of Rust resources
- Async support: Non-blocking operations where appropriate
This crate enables the broader JavaScript ecosystem to benefit from oxc's performance while maintaining familiar JavaScript APIs.