Implementation of the longest common subsequence (diff) algorithm.
npm install myers-diffA 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.
``bash`
$ npm install myers-diff
With basic usage:
`js
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:
`js
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:
`js
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;
}
}
`
- myersmyers.diff(lhs, rhs, [options])
- [](#diff)myers.formats
- GnuNormalFormat
- myers.changed(part)
- Change
- Types
- LeftPart
- RightPart
-
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 - The left-hand side text to compare.rhs
- - The right-hand side text to compare.options
-
An object that describes a change occurrence between the left-hand text and right-hand text.
- lhs - Describes the left-hand change.rhs
- - Describes the right-hand change.
Describes a left-hand change occurrence.
- at - 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
- - 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
- - The zero-based character position of the part from the original text.text
- - The text that was changed.length
- - The number of characters.
Describes a right-hand change occurrence.
- at - 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
- - 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
- - The zero-based character position of the part from the original text.text
- - The text that was changed.length
- - The number of characters.
Formatting functions.
#### GnuNormalFormat(changes)
Formats an array of Change in GNU Normal Format.
- changes <Change[]> - An array of changes from myers.diff.
- Returns The diff text.
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.
- part <LeftPart | RightPart>- The left-hand part or right-hand part to compare.
- Returns: Returns true if changed, otherwise, it returns false`.