Unified diff parser for Node and the browser
This project is a ES2015 version of
https://github.com/sergeyt/parse-diff.
It comes with a full test suite and in addition to line numbers also provides position
information as required by the GitHub Comments API.
import parse from 'diffparser';
const diff = `
diff --git a/file b/file
index 123..456 789
--- a/file
+++ b/file
@@ -1,2 +1,2 @@
- line1
+ line2
`;
parse(diff);
This will return an array (one entry per file) with the following structure:
[
{
"from": "file",
"to": "file",
"chunks": [
{
"content": "@@ -1,2 +1,2 @@",
"changes": [
{
"type": "del",
"del": true,
"oldLine": 1,
"position": 1,
"content": "- line1"
},
{
"type": "add",
"add": true,
"newLine": 1,
"position": 2,
"content": "+ line2"
}
],
"oldStart": 1,
"oldLines": 2,
"newStart": 1,
"newLines": 2
}
],
"deletions": 1,
"additions": 1,
"index": [
"123..456",
"789"
]
}
]
Optional Rename Detection
You can pass { findRenames: true }
as option in order to detect renamed files:
const diff = `
diff --git a/bar b/bar
new file mode 100644
index 0000000..4e4b354
--- /dev/null
+++ b/bar
@@ -0,0 +1,2 @@
+this is a
+sample file
diff --git a/foo b/foo
deleted file mode 100644
index 4e4b354..0000000
--- a/foo
+++ /dev/null
@@ -1,2 +0,0 @@
-this is a
-sample file
`;
parse(diff, { findRenames: true });
This will return the following array:
[
{
"renamed": true,
"from": "foo",
"to": "bar"
}
]
License
MIT