diffblazer
Version:
A super fast diffing utility for HTML and Plaintext
97 lines (66 loc) • 2.73 kB
Markdown
<h1 align='center'>Diffblazer</h1>
<p align='center'>A super fast diffing utility for HTML and Plaintext</p>
This work is based on [htmldiff.net](https://github.com/Rohland/htmldiff.net). Originally, I forked [htmldiff-javascript](https://github.com/jibin2706/htmldiff-javascript) (which is a fork of [htmldiff-js](https://github.com/dfoverdx/htmldiff-js)), but now the code has almost completely deviated. A summary of the changes:
1. New faster tokenizer based on [htmlparser2](https://github.com/fb55/htmlparser2)
2. Support for "atomic" tags (i.e. tags that should be considered as 1 token) in the tokenizer
3. Support for diffing nodes based on attributes
4. No such thing as "word" anymore. Everything is a token
5. More efficient match finder (no more unnecessary stripping of attributes from tags)
6. Extensive test suite (thanks to [htmldiff.net](https://github.com/Rohland/htmldiff.net) and [htmldiff.js](https://github.com/idesis-gmbh/htmldiff.js))
7. Removed support for block expressions
8. Tags & class names are now fully configurable
9. ~100x faster (no kidding!)
## Installation
```bash
npm install diffblazer
```
## Usage
```ts
import { diff } from 'diffblazer'
const oldHtml = '<p>hello world</p>'
const newHtml = '<p>hello world!</p>'
diff(oldHtml, newHtml)
// Output: <p>hello world<ins class='diffins'>!</ins></p>
```
### Custom markers
Aside from marking differences using HTML tags, you can also specify your own markers. This can be anything:
```ts
import { diff } from 'diffblazer'
const oldText = 'hello world'
const newText = 'hello beautiful world'
diff(oldText, newText, {
markers: {
insert: {
start: '**',
end: '**',
},
},
})
// Output: hello **beautiful** world
```
## Benchmarks
```
✓ benches/html-diff.bench.ts (2) 1212ms
✓ benchmark (2) 1210ms
name hz min max mean p75 p99 p995 p999 rme samples
· diffblazer 5,980.63 0.1440 2.2266 0.1672 0.1657 0.3724 0.4760 0.9363 ±1.30% 2991 fastest
· node-htmldiff 615.75 1.3015 3.3126 1.6240 1.6930 3.0620 3.2030 3.3126 ±2.60% 308
BENCH Summary
diffblazer - benches/html-diff.bench.ts > benchmark
9.71x faster than node-htmldiff
```
To run these benchmarks yourself:
```
npm run bench
```
## Contributing
If you'd like to contribute to this project, you can do so in the following ways:
1. Report an issue
2. Implement a feature
3. Fix a bug
Before you open a PR, make sure to run the tests, like so:
```
npm run test
```
## License
Copyright © 2024 Abdullah Atta under MIT. [Read full text here.](/LICENSE)