https://github.com/h-a-n-a/magic-string-rs
⚡️ Fast MagicString port driven by Rust and N-API
https://github.com/h-a-n-a/magic-string-rs
magic-string napi-rs rust string
Last synced: 4 months ago
JSON representation
⚡️ Fast MagicString port driven by Rust and N-API
- Host: GitHub
- URL: https://github.com/h-a-n-a/magic-string-rs
- Owner: h-a-n-a
- License: mit
- Created: 2021-11-14T17:01:56.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2024-04-06T13:05:51.000Z (about 1 year ago)
- Last Synced: 2025-01-14T10:14:06.606Z (5 months ago)
- Topics: magic-string, napi-rs, rust, string
- Language: Rust
- Homepage:
- Size: 325 KB
- Stars: 71
- Watchers: 4
- Forks: 7
- Open Issues: 13
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
magic-string-rs
MagicString port for Node and modern browsers, also, for rust, of course.
## 🔧 Installation
### Rust
Add it as a dependency in a Cargo project.
```toml
# Cargo.toml[dependency]
magic_string = "x.x.x"
```### Node
```bash
$ npm install @napi-rs/magic-string
```Note: Web-Assembly is currently not supported, but it's on the plan.
## Performance
### Hardware info
```
Model Name: MacBook Pro
Model Identifier: MacBookPro17,1
Chip: Apple M1
Total Number of Cores: 8 (4 performance and 4 efficiency)
Memory: 16 GB
```### Benchmark
```
Running "overwrite" suite...
Progress: 100%MagicString:
238 584 ops/s, ±0.34% | slowest, 50.7% slowerMagicStringRust:
483 950 ops/s, ±2.13% | fastestFinished 2 cases!
Fastest: MagicStringRust
Slowest: MagicStringRunning "prepend|append" suite...
Progress: 100%MagicString:
290 244 ops/s, ±1.35% | slowest, 48.35% slowerMagicStringRust:
561 981 ops/s, ±6.71% | fastestFinished 2 cases!
Fastest: MagicStringRust
Slowest: MagicStringRunning "add banner#toString" suite...
Progress: 100%MagicString:
301 467 ops/s, ±0.29% | slowest, 37.66% slowerMagicStringRust:
483 586 ops/s, ±5.50% | fastestFinished 2 cases!
Fastest: MagicStringRust
Slowest: MagicStringRunning "add banner#generateDecodedMap" suite...
Progress: 100%MagicString:
233 702 ops/s, ±0.76% | fastestMagicStringRust:
229 899 ops/s, ±2.68% | slowest, 1.63% slowerFinished 2 cases!
Fastest: MagicString
Slowest: MagicStringRustRunning "add banner#generateMapHires" suite...
Progress: 100%MagicString:
177 783 ops/s, ±1.84% | fastestMagicStringRust:
90 780 ops/s, ±1.00% | slowest, 48.94% slowerFinished 2 cases!
Fastest: MagicString
Slowest: MagicStringRustRunning "add banner#generateMap" suite...
Progress: 100%MagicString:
227 594 ops/s, ±0.68% | slowest, 0.42% slow
erMagicStringRust:
228 545 ops/s, ±0.82% | fastestFinished 2 cases!
Fastest: MagicStringRust
Slowest: MagicStringRunning "add banner#generateMap.toString" suite...
Progress: 100%MagicString:
201 272 ops/s, ±0.47% | slowest, 21.86% slowerMagicStringRust:
257 577 ops/s, ±2.38% | fastestFinished 2 cases!
Fastest: MagicStringRust
Slowest: MagicStringRunning "add banner#generateMapHires.toString" suite...
Progress: 100%MagicString:
157 685 ops/s, ±0.18% | fastestMagicStringRust:
95 510 ops/s, ±1.00% | slowest, 39.43% slowerFinished 2 cases!
Fastest: MagicString
Slowest: MagicStringRustRunning "add banner#generateMap.toUrl" suite...
Progress: 100%MagicString:
182 161 ops/s, ±0.65% | slowest, 25.04% slowerMagicStringRust:
243 019 ops/s, ±0.98% | fastestFinished 2 cases!
Fastest: MagicStringRust
Slowest: MagicString
```## 📃 Documentation
[doc.rs](https://docs.rs/magic_string/latest/magic_string)
## Supported APIs
- [x] generateMap: Note that there is a huge overhead for rust for implementing the same API in Node, for more detail please refer to [this](./node/index.d.ts)
- [x] generateDecodedMap
- [x] toString
- [x] prepend
- [x] append
- [x] prependLeft
- [x] prependRight
- [x] appendLeft
- [x] appendRight
- [x] overwrite
- [x] trim
- [x] trimStart
- [x] trimEnd
- [x] trimLines
- [x] isEmpty
- [x] remove
- [ ] move
- [ ] indent
- [ ] addSourcemapLocation
- [ ] clone
- [ ] slice
- [ ] snip## Credits
The original project [magic-string](https://github.com/Rich-Harris/magic-string) is really awesome, you should check it out and we made this project even furthur for better performance.
## License
MIT