UNPKG

diffblazer

Version:

A super fast diffing utility for HTML and Plaintext

97 lines (66 loc) 2.73 kB
<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)