From 911014cba0317731b68a7b1fe90d71aa85f4662c Mon Sep 17 00:00:00 2001 From: Damien Clark Date: Tue, 2 Jul 2019 22:26:58 +1000 Subject: [PATCH] Implemented keepDelimiter - keeps delimiter characters at end of each output record --- index.js | 9 ++++ package-lock.json | 109 +++++++++++++++++++++++----------------------- readme.markdown | 8 ++++ 3 files changed, 72 insertions(+), 54 deletions(-) diff --git a/index.js b/index.js index 4f23429..28df821 100644 --- a/index.js +++ b/index.js @@ -16,6 +16,7 @@ function split (matcher, mapper, options) { var decoder = new Decoder() var soFar = '' var maxLength = options && options.maxLength; + var keepDelimiter = options && options.keepDelimiter === true ? true : false var trailing = options && options.trailing === false ? false : true if('function' === typeof matcher) mapper = matcher, matcher = null @@ -44,6 +45,14 @@ function split (matcher, mapper, options) { if (maxLength && soFar.length > maxLength) return stream.emit('error', new Error('maximum buffer reached')) + if(keepDelimiter) { + pieces.length % 2 && pieces.push('') // Add trailing empty string if odd elements + for (var i = 0; i < pieces.length; i+=2) { + var piece = pieces[i] + pieces[i+1] + emit(stream,piece) + } + return + } for (var i = 0; i < pieces.length; i++) { var piece = pieces[i] emit(stream, piece) diff --git a/package-lock.json b/package-lock.json index 349405a..707302d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,9 +10,9 @@ "integrity": "sha1-qUM87R/OV8yZmvCWXRAI6WwnluY=", "dev": true, "requires": { - "fomatto": "git://github.com/BonsaiDen/Fomatto.git#468666f600b46f9067e3da7200fd9df428923ea6", - "render": "0.1.4", - "traverser": "1.0.0" + "fomatto": "fomatto@git://github.com/BonsaiDen/Fomatto.git#468666f600b46f9067e3da7200fd9df428923ea6", + "render": "0.1", + "traverser": "1" }, "dependencies": { "traverser": { @@ -21,7 +21,7 @@ "integrity": "sha1-b1nlgTdZruqzZGuPRRP9SmLk/iA=", "dev": true, "requires": { - "curry": "0.0.4" + "curry": "0.0.x" } } } @@ -33,7 +33,7 @@ "dev": true, "requires": { "ctrlflow": "0.0.3", - "test-cmd": "1.7.0" + "test-cmd": "1" } }, "ctrlflow": { @@ -42,7 +42,7 @@ "integrity": "sha1-6WwYCJDcBcKztDc19SmnEpPhOcA=", "dev": true, "requires": { - "curry": "0.0.4" + "curry": "0.0.x" } }, "curry": { @@ -69,17 +69,18 @@ "integrity": "sha1-A4u7LqnqkDhbJvvBhU0LU58qvqM=", "dev": true, "requires": { - "duplexer": "0.1.1", - "from": "0.1.7", - "map-stream": "0.0.7", + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.0.3", "pause-stream": "0.0.11", - "split": "0.2.10", - "stream-combiner": "0.0.4", - "through": "2.3.8" + "split": "0.2", + "stream-combiner": "~0.0.3", + "through": "~2.3.1" } }, "fomatto": { "version": "git://github.com/BonsaiDen/Fomatto.git#468666f600b46f9067e3da7200fd9df428923ea6", + "from": "fomatto@git://github.com/BonsaiDen/Fomatto.git#468666f600b46f9067e3da7200fd9df428923ea6", "dev": true }, "from": { @@ -100,11 +101,11 @@ "integrity": "sha1-RpcAgZg4pGVu1PF2lT9b/PU/SDs=", "dev": true, "requires": { - "assertions": "2.3.4", - "render": "0.1.4", - "style": "0.1.1", - "traverser": "0.0.5", - "trees": "0.0.4" + "assertions": "~2.3.1", + "render": "~0.1.4", + "style": "0.1.x", + "traverser": "0.0.x", + "trees": "0.0.x" } }, "ls-r": { @@ -113,9 +114,9 @@ "integrity": "sha1-sjmgH6p9QxSIdKZP6xHgrey2b6A=", "dev": true, "requires": { - "ctrlflow": "4.1.3", - "d-utils": "2.3.3", - "optimist": "0.2.8" + "ctrlflow": "~4.1", + "d-utils": "~2.3", + "optimist": "0.2" }, "dependencies": { "ctrlflow": { @@ -124,8 +125,8 @@ "integrity": "sha1-MCi+xE8BocET/ZIG/E+ZgjN4QoY=", "dev": true, "requires": { - "curry": "0.0.4", - "d-utils": "1.4.0" + "curry": "0.0.x", + "d-utils": "~1.4" }, "dependencies": { "d-utils": { @@ -150,7 +151,7 @@ "integrity": "sha1-2pcZQt8MRDV53KhhcyAgqQXfsrg=", "dev": true, "requires": { - "assertions": "2.3.4" + "assertions": "2.3" } }, "map-stream": { @@ -165,7 +166,7 @@ "integrity": "sha1-6YGrfiaLRXlIWTtVZ0wJmoFcrDE=", "dev": true, "requires": { - "wordwrap": "0.0.3" + "wordwrap": ">=0.0.1 <0.1.0" } }, "pause-stream": { @@ -174,7 +175,7 @@ "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", "dev": true, "requires": { - "through": "2.3.8" + "through": "~2.3" } }, "render": { @@ -183,7 +184,7 @@ "integrity": "sha1-z7M6NOJgaFkdQYRp4j2Mxc4c7/U=", "dev": true, "requires": { - "traverser": "0.0.5" + "traverser": "0.0.x" } }, "should": { @@ -192,11 +193,11 @@ "integrity": "sha1-kPVRRVUtAc/CAGZuToGKHJZw7aI=", "dev": true, "requires": { - "should-equal": "1.0.1", - "should-format": "3.0.3", - "should-type": "1.4.0", - "should-type-adaptors": "1.0.1", - "should-util": "1.0.0" + "should-equal": "^1.0.0", + "should-format": "^3.0.2", + "should-type": "^1.4.0", + "should-type-adaptors": "^1.0.1", + "should-util": "^1.0.0" } }, "should-equal": { @@ -205,7 +206,7 @@ "integrity": "sha1-C26VFvJgGp+wuy3MNpr6HH4gCvc=", "dev": true, "requires": { - "should-type": "1.4.0" + "should-type": "^1.0.0" } }, "should-format": { @@ -214,8 +215,8 @@ "integrity": "sha1-m/yPdPo5IFxT04w01xcwPidxJPE=", "dev": true, "requires": { - "should-type": "1.4.0", - "should-type-adaptors": "1.0.1" + "should-type": "^1.3.0", + "should-type-adaptors": "^1.0.1" } }, "should-type": { @@ -230,8 +231,8 @@ "integrity": "sha1-7+VVPN9oz/ZuXF9RtxLcNRx3vqo=", "dev": true, "requires": { - "should-type": "1.4.0", - "should-util": "1.0.0" + "should-type": "^1.3.0", + "should-util": "^1.0.0" } }, "should-util": { @@ -246,7 +247,7 @@ "integrity": "sha1-Zwl8YB1pfOE2j0GPBs0gHPBSGlc=", "dev": true, "requires": { - "through": "2.3.8" + "through": "2" } }, "stream-combiner": { @@ -255,7 +256,7 @@ "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", "dev": true, "requires": { - "duplexer": "0.1.1" + "duplexer": "~0.1.1" } }, "stream-spec": { @@ -264,8 +265,8 @@ "integrity": "sha1-vuEVU/JRJDk1yHN10CErUX15f3I=", "dev": true, "requires": { - "assertions": "2.3.4", - "macgyver": "1.6.3" + "assertions": "2.3", + "macgyver": "~1.6.1" } }, "string-to-stream": { @@ -274,7 +275,7 @@ "integrity": "sha1-0oKOiV+49m+MovFoLww3PIbM95Y=", "dev": true, "requires": { - "inherits": "2.0.3" + "inherits": "^2.0.1" } }, "style": { @@ -283,7 +284,7 @@ "integrity": "sha1-4vq2WxuB0+AOvK2FTMWEuiMfJW0=", "dev": true, "requires": { - "curry": "0.0.4" + "curry": "0.0.x" } }, "test-cmd": { @@ -292,12 +293,12 @@ "integrity": "sha1-nldMSfOUcweeLyj+cWF4EtFH4xA=", "dev": true, "requires": { - "ctrlflow": "4.1.3", - "d-utils": "2.1.1", - "ls-r": "0.2.1", - "optimist": "0.2.8", - "test-report": "1.1.2", - "test-report-view": "1.0.0" + "ctrlflow": "~4.1", + "d-utils": "~2.1", + "ls-r": "0", + "optimist": "0.2", + "test-report": "~1.1", + "test-report-view": "1" }, "dependencies": { "ctrlflow": { @@ -306,8 +307,8 @@ "integrity": "sha1-MCi+xE8BocET/ZIG/E+ZgjN4QoY=", "dev": true, "requires": { - "curry": "0.0.4", - "d-utils": "1.4.0" + "curry": "0.0.x", + "d-utils": "~1.4" }, "dependencies": { "d-utils": { @@ -343,7 +344,7 @@ "integrity": "sha1-xm84xFagwhqIAUsSI1gMfr4GMes=", "dev": true, "requires": { - "curry": "0.0.4" + "curry": "0.0.x" } }, "trees": { @@ -352,9 +353,9 @@ "integrity": "sha1-L1H9m19khvcyyX4R7nVmcja+HVk=", "dev": true, "requires": { - "should": "11.2.1", - "style": "0.1.1", - "traverser": "0.0.5" + "should": ">=0.0.4", + "style": "0.1.x", + "traverser": "0.0.x" } }, "ubelt": { diff --git a/readme.markdown b/readme.markdown index c2e527d..32340a0 100644 --- a/readme.markdown +++ b/readme.markdown @@ -39,6 +39,14 @@ Valid options: split(JSON.parse, null, { trailing: false }) ``` +* keepDelimiter - By default, delimiters are thrown away. Set this property `true` to keep the trailing delimiter characters at the end of the line. You will also need to keep matched splitter as instructed as follows. + +``` js + split(/(\r?\n)/, { keepDelimiter: true }) // Must also use matching group in RE + // Example output: line\n +``` + + ## keep matched splitter As with `String#split`, if you split by a regular expression with a matching group,