disparity
Version:
Colorized string diff ideal for text/code that spans through multiple lines
146 lines (102 loc) • 3.73 kB
Markdown
# disparity
Colorized string diff ideal for text/code that spans through multiple lines.
This is basically just a wrapper around
[diff](https://www.npmjs.com/package/diff) and
[ansi-styles](https://www.npmjs.com/package/ansi-styles) + line numbers and
omitting lines that don't have changes and/or that wouldn't help user identify
the diff "context".
We also replace some *invisible* chars to make it easier to understand what
really changed from one file to another:
- `\r` becomes `<CR>`
- `\n` becomes `<LF>`
- `\t` becomes `<tab>`
Created mainly to be used by
[esformatter](https://www.npmjs.com/package/esformatter) and other tools that
might need to display a nice looking diff of source files.
## API
```js
var disparity = require('disparity');
```
### chars(oldStr, newStr[, opts]):String
Diffs two blocks of text, comparing character by character and returns
a `String` with ansi color codes.
```js
var diff = disparity.chars(file1, file2);
console.log(diff);
```
Will return an empty string if `oldStr === newStr`;
```js
// default options
var opts = {
// how many lines to display before/after a line that contains diffs
context: 3,
// file paths displayed just before the diff
paths: [disparity.removed, disparity.added]
};
```

### unified(oldStr, newStr[, opts]):String
Returns ansi colorized [unified
diff](http://en.wikipedia.org/wiki/Diff_utility#Unified_format).
Will return an empty string if `oldStr === newStr`;
```js
var diff = disparity.unified(file1, file2, {
paths: ['test/file1.js', 'test/file2.js']
});
console.log(diff);
```

### unifiedNoColor(oldStr, newStr[, opts]):String
Returns [unified diff](http://en.wikipedia.org/wiki/Diff_utility#Unified_format).
Useful for terminals that [doesn't support colors](https://www.npmjs.com/package/supports-color).
Will return an empty string if `oldStr === newStr`;
```js
var diff = disparity.unifiedNoColor(file1, file2, {
paths: ['test/file1.js', 'test/file2.js']
});
console.log(diff);
```

### removed:String
String used on the diff headers to say that chars/lines was removed.
```js
// default value
disparity.removed = 'removed';
```
### added:String
String used on the diff headers to say that chars/lines was added.
```js
// default value
disparity.added = 'added';
```
### colors:Object
Object containing references to all the colors used by disparity.
If you want a different output than `ansi` (eg. HTML) you can replace the color
values:
```js
// wrap blocks into custom tags
disparity.colors = {
// chars diff
charsRemoved: { open: '<bggreen>', close: '</bggreen>' },
charsAdded: { open: '<bgred>', close: '</bgred>' },
// unified diff
removed: { open: '<red>', close: '</red>' },
added: { open: '<green>', close: '</green>' },
header: { open: '<yellow>', close: '</yellow>' },
section: { open: '<magenta>', close: '</magenta>' }
};
```
## CLI
`disparity` also have a command line interface:
```
disparity [OPTIONS] <file_1> <file_2>
Options:
-c, --chars Output char diff (default mode).
-u, --unified Output unified diff.
--unified-no-color Don't output colors.
-v, --version Display current version.
-h, --help Display this help.
```
PS: cli can only compare 2 external files at the moment, no `stdin` support.
## License
Released under the MIT license.