Fork of: https://github.com/wickedest/myers-diff
Modified to expose more classes.
myers-diff
A JavaScript test differentiation implementation based on An O(ND) Difference Algorithm and Its Variations (1986). It is a lightweight, low-level, no-frills library that can be used to build bulkier viewers.
Installation
$ npm install myers-diff
Getting started
With basic usage:
const myers = require('myers-diff');
const lhs = 'the quick red fox jumped\nover the hairy dog';
const rhs = 'the quick brown fox jumped\nover the lazy dog';
const diff = myers.diff(lhs, rhs);
console.log(myers.formats.GnuNormalFormat(diff));
console.log(diff);
//
// 1,2c1,2
// < the quick red fox jumped
// < over the hairy dog
// ---
// > the quick brown fox jumped
// > over the lazy dog
With all options:
const myers = require('myers-diff');
const lhs = 'the quick red fox jumped\nover the hairy dog';
const rhs = 'the quick brown fox jumped\nover the lazy dog';
const diff = myers.diff(lhs, rhs, {
compare: 'lines',
ignoreWhitespace: false,
ignoreCase: false,
ignoreAccents: false
});
For building visual editors:
const { diff, changed } = require('myers-diff');
const lhs = 'the quick red fox jumped\nover the hairy dog';
const rhs = 'the quick brown fox jumped\nover the lazy dog';
const changes = diff(lhs, rhs);
for (const change of changes) {
if (changed(change.lhs)) {
// deleted
const { pos, text, del, length } = change.lhs;
}
if (changed(change.rhs)) {
// added
const { pos, text, add, length } = change.rhs;
}
}
API
-
myers
- Types
myers.diff(lhs, rhs, [options])
Compare lhs
text to rhs
text. Changes are compared from left to right such that items are deleted from left or added to right.
-
lhs
<string>
- The left-hand side text to compare. -
rhs
<string>
- The right-hand side text to compare. -
options
<object>
- Diff options. - Returns:
<
Change
[]>
- Returns an array of Change.
Change
An object that describes a change occurrence between the left-hand text and right-hand text.
-
lhs
<LeftPart>
- Describes the left-hand change. -
rhs
<RightPart>
- Describes the right-hand change.
LeftPart
Describes a left-hand change occurrence.
-
at
<number>
- The part item identifier. When comparing lines, it is the n-th line; when comparing words, it is the n-th word; when comparing chars, it is the n-th char. -
del
<number>
- The number of parts deleted from the left. When comparing lines, it is the number of lines deleted; when comparing words, it is the number of words deleted; when comparing chars, it is the number of chars deleted. -
pos
<number>
- The zero-based character position of the part from the original text. -
text
<string>
- The text that was changed. -
length
<number>
- The number of characters.
RightPart
Describes a right-hand change occurrence.
-
at
<number>
- The part item identifier. When comparing lines, it is the n-th line; when comparing words, it is the n-th word; when comparing chars, it is the n-th char. -
add
<number>
- The number of parts added from the right. When comparing lines, it is the number of lines added; when comparing words, it is the number of words added; when comparing chars, it is the number of chars added. -
pos
<number>
- The zero-based character position of the part from the original text. -
text
<string>
- The text that was changed. -
length
<number>
- The number of characters.
myers.formats
Formatting functions.
GnuNormalFormat(changes)
Formats an array of Change in GNU Normal Format.
-
changes
<
Change
[]>
- An array of changes from myers.diff. - Returns
<string>
The diff text.
myers.changed(part)
Examines the LeftPart
or RightPart
part
to determine if was changed. It is possible for a Change to only affect one side or the other, or both. If changed, it returns true
, otherwise, it returns false
.