1.0.4 • Published 11 months ago

unidiff v1.0.4

Weekly downloads
56,377
License
MIT
Repository
github
Last release
11 months ago

unidiff

unidiff adds support for creating unified diff format to jsdiff

The following snippet:

var unidiff = require('unidiff')

var diff = unidiff.diffLines(
    'a quick\nbrown\nfox\njumped\nover\nthe\nlazy\ndog\n',
    'a quick\nbrown\ncat\njumped\nat\nthe\nnot-so-lazy\nfox\n'
)
console.log(unidiff.formatLines(diff), {context: 2})

Produces this unified diff output:

--- a
+++ b
@@ -1,8 +1,8 @@
 a quick
 brown
-fox
+cat
 jumped
-over
+at
 the
-lazy
-dog
+not-so-lazy
+fox

This same output can be achieved more concisely using the diffAsText function:

console.log(require('unidiff').diffAsText(
    'a quick\nbrown\nfox\njumped\nover\nthe\nlazy\ndog\n',
    'a quick\nbrown\ncat\njumped\nat\nthe\nnot-so-lazy\nfox\n'
))

Both formatLines() and diffAsText() take a format options parameter with the following options.

{
    aname:        file name for input a, defaults to 'a'
    bname:        file name for input b, defaults to 'b'
    pre_context:  write up to this many unmodified lines before each change
    post_context: write up to this many unmodified lines after each change
    context:      default values for pre_context and post_context (specify both in one setting)
                  (context defaults to 3 when nothing is specified)
    format:       format of output text.  currently only "unified" is supported
}

Differences From JSDiff

All js-diff functions are also availalbe in unidiff, with a couple minor changes:

  • unidiff.diffLines() and unidiff.diffAsText() accept arrays of strings as well as strings with new lines for input.
  • unidiff.diffLines() returns an empty array when there are no differences instead of an array with a single unmodified change.

Useful features to add to unidiff

  • implement parsing of unified format to convert text output into patches.