myers-diff v2.1.0
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-diffGetting 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 dogWith 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.