From 17bc4c107d214ddd7316795a5ffface2f3f25991 Mon Sep 17 00:00:00 2001 From: Trivikram Kamat <16024985+trivikr@users.noreply.github.com> Date: Sun, 1 Nov 2026 23:05:42 -0800 Subject: [PATCH 1/2] fix: pass parse errors to transform callback instead of throwing --- commit-stream.js | 10 +++++++--- test.js | 14 ++++++++++++++ types/commit-stream.d.ts.map | 2 +- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/commit-stream.js b/commit-stream.js index 8b7c07e..1fcaf51 100644 --- a/commit-stream.js +++ b/commit-stream.js @@ -46,8 +46,12 @@ export default function commitStream (ghUser, ghProject) { return new Transform({ objectMode: true, transform (line, _, callback) { - emit(this, addLine(line)) - callback() + try { + emit(this, addLine(line)) + callback() + } catch (err) { + callback(/** @type {Error} */ (err)) + } }, flush (callback) { emit(this, commit) @@ -73,7 +77,7 @@ export default function commitStream (ghUser, ghProject) { let m if (!commit) { - throw new Error('Something unexpected occurred') + throw new Error(`Unexpected line before first "commit" header: ${line}`) } if ((m = line.match(/^CommitDate:\s+(.*)$/)) !== null) { diff --git a/test.js b/test.js index 0ffa43f..04cfd69 100644 --- a/test.js +++ b/test.js @@ -233,3 +233,17 @@ test('cve id with 4 or more sequence digits', async () => { const commits = await toCommits(ids.flatMap(log)) assert.deepStrictEqual(commits.map((c) => c.cveId), ids) }) + +test('line before first commit header rejects pipeline', async () => { + await assert.rejects(toCommits(['garbage']), { + message: 'Unexpected line before first "commit" header: garbage' + }) +}) + +test('line before first commit header emits error on write', async () => { + const stream = commitStream() + const error = once(stream, 'error') + stream.write('garbage') + const [err] = await error + assert.strictEqual(err.message, 'Unexpected line before first "commit" header: garbage') +}) diff --git a/types/commit-stream.d.ts.map b/types/commit-stream.d.ts.map index f5cbe0b..5e645ab 100644 --- a/types/commit-stream.d.ts.map +++ b/types/commit-stream.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"commit-stream.d.ts","sourceRoot":"","sources":["../commit-stream.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAIpC,YAAkB,MAAM,GACxB;IAAmB,IAAI,EAAZ,MAAM,CACjB;IAAmB,KAAK,EAAb,MAAM,CACnB;CAAA,CAAA;AAGE,YAAkB,OAAO,GACzB;IAAmB,KAAK,EAAb,MAAM,CACjB;IAAmB,UAAU,EAAlB,MAAM,CACjB;IAAmB,SAAS,EAAjB,MAAM,CACnB;CAAA,CAAA;AAGE,YAAkB,MAAM,GACxB;IAAmB,GAAG,EAAX,MAAM,CACjB;IAAoB,MAAM,AAA1B,CACA,EADW,MAAM,CACjB;IAAsB,OAAO,AAA7B,CACA,EADW,MAAM,EAAE,CACnB;IAAoB,UAAU,AAA9B,CACA,EADW,MAAM,CACjB;IAAoB,UAAU,AAA9B,CACA,EADW,MAAM,CACjB;IAAoB,OAAO,AAA3B,CACA,EADW,MAAM,CACjB;IAAsB,WAAW,AAAjC,CACA,EADW,MAAM,EAAE,CACnB;IAAsB,SAAS,AAA/B,CACA,EADW,MAAM,EAAE,CACnB;IAAqB,OAAO,AAA5B,CACA,EADW,OAAO,CAClB;IAAoB,KAAK,AAAzB,CACA,EADW,MAAM,CACjB;IAAoB,MAAM,AAA1B,CACA,EADW,MAAM,CACjB;IAAoB,SAAS,AAA7B,CACA,EADW,MAAM,CACjB;IAAoB,OAAO,AAA3B,CACA,EADW,MAAM,CACjB;IAAoB,KAAK,AAAzB,CAA0B,EAAf,MAAM,CAAS;CAAA,CAAA;AA5B7B;;;;GAIG;AAEH;;;;;GAKG;AAEH;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAAE,MAAM,AAJzC,CACA,EADQ,MAIiC,EAAE,SAAS,AAHpD,CACA,EADQ,MAG4C,GAF1C,SAAS,CA6FrB"} \ No newline at end of file +{"version":3,"file":"commit-stream.d.ts","sourceRoot":"","sources":["../commit-stream.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAIpC,YAAkB,MAAM,GACxB;IAAmB,IAAI,EAAZ,MAAM,CACjB;IAAmB,KAAK,EAAb,MAAM,CACnB;CAAA,CAAA;AAGE,YAAkB,OAAO,GACzB;IAAmB,KAAK,EAAb,MAAM,CACjB;IAAmB,UAAU,EAAlB,MAAM,CACjB;IAAmB,SAAS,EAAjB,MAAM,CACnB;CAAA,CAAA;AAGE,YAAkB,MAAM,GACxB;IAAmB,GAAG,EAAX,MAAM,CACjB;IAAoB,MAAM,AAA1B,CACA,EADW,MAAM,CACjB;IAAsB,OAAO,AAA7B,CACA,EADW,MAAM,EAAE,CACnB;IAAoB,UAAU,AAA9B,CACA,EADW,MAAM,CACjB;IAAoB,UAAU,AAA9B,CACA,EADW,MAAM,CACjB;IAAoB,OAAO,AAA3B,CACA,EADW,MAAM,CACjB;IAAsB,WAAW,AAAjC,CACA,EADW,MAAM,EAAE,CACnB;IAAsB,SAAS,AAA/B,CACA,EADW,MAAM,EAAE,CACnB;IAAqB,OAAO,AAA5B,CACA,EADW,OAAO,CAClB;IAAoB,KAAK,AAAzB,CACA,EADW,MAAM,CACjB;IAAoB,MAAM,AAA1B,CACA,EADW,MAAM,CACjB;IAAoB,SAAS,AAA7B,CACA,EADW,MAAM,CACjB;IAAoB,OAAO,AAA3B,CACA,EADW,MAAM,CACjB;IAAoB,KAAK,AAAzB,CAA0B,EAAf,MAAM,CAAS;CAAA,CAAA;AA5B7B;;;;GAIG;AAEH;;;;;GAKG;AAEH;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAAE,MAAM,AAJzC,CACA,EADQ,MAIiC,EAAE,SAAS,AAHpD,CACA,EADQ,MAG4C,GAF1C,SAAS,CAiGrB"} \ No newline at end of file From 38c1cc14ece9e641cf8d927e883fef8673992f6b Mon Sep 17 00:00:00 2001 From: Trivikram Kamat <16024985+trivikr@users.noreply.github.com> Date: Sun, 1 Nov 2026 23:51:47 -0800 Subject: [PATCH 2/2] fix: only catch addLine errors in transform Co-authored-by: Rod Vagg --- commit-stream.js | 8 +++++--- types/commit-stream.d.ts.map | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/commit-stream.js b/commit-stream.js index 1fcaf51..9ae2d5f 100644 --- a/commit-stream.js +++ b/commit-stream.js @@ -46,12 +46,14 @@ export default function commitStream (ghUser, ghProject) { return new Transform({ objectMode: true, transform (line, _, callback) { + let done try { - emit(this, addLine(line)) - callback() + done = addLine(line) } catch (err) { - callback(/** @type {Error} */ (err)) + return callback(/** @type {Error} */ (err)) } + emit(this, done) + callback() }, flush (callback) { emit(this, commit) diff --git a/types/commit-stream.d.ts.map b/types/commit-stream.d.ts.map index 5e645ab..b670c7e 100644 --- a/types/commit-stream.d.ts.map +++ b/types/commit-stream.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"commit-stream.d.ts","sourceRoot":"","sources":["../commit-stream.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAIpC,YAAkB,MAAM,GACxB;IAAmB,IAAI,EAAZ,MAAM,CACjB;IAAmB,KAAK,EAAb,MAAM,CACnB;CAAA,CAAA;AAGE,YAAkB,OAAO,GACzB;IAAmB,KAAK,EAAb,MAAM,CACjB;IAAmB,UAAU,EAAlB,MAAM,CACjB;IAAmB,SAAS,EAAjB,MAAM,CACnB;CAAA,CAAA;AAGE,YAAkB,MAAM,GACxB;IAAmB,GAAG,EAAX,MAAM,CACjB;IAAoB,MAAM,AAA1B,CACA,EADW,MAAM,CACjB;IAAsB,OAAO,AAA7B,CACA,EADW,MAAM,EAAE,CACnB;IAAoB,UAAU,AAA9B,CACA,EADW,MAAM,CACjB;IAAoB,UAAU,AAA9B,CACA,EADW,MAAM,CACjB;IAAoB,OAAO,AAA3B,CACA,EADW,MAAM,CACjB;IAAsB,WAAW,AAAjC,CACA,EADW,MAAM,EAAE,CACnB;IAAsB,SAAS,AAA/B,CACA,EADW,MAAM,EAAE,CACnB;IAAqB,OAAO,AAA5B,CACA,EADW,OAAO,CAClB;IAAoB,KAAK,AAAzB,CACA,EADW,MAAM,CACjB;IAAoB,MAAM,AAA1B,CACA,EADW,MAAM,CACjB;IAAoB,SAAS,AAA7B,CACA,EADW,MAAM,CACjB;IAAoB,OAAO,AAA3B,CACA,EADW,MAAM,CACjB;IAAoB,KAAK,AAAzB,CAA0B,EAAf,MAAM,CAAS;CAAA,CAAA;AA5B7B;;;;GAIG;AAEH;;;;;GAKG;AAEH;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAAE,MAAM,AAJzC,CACA,EADQ,MAIiC,EAAE,SAAS,AAHpD,CACA,EADQ,MAG4C,GAF1C,SAAS,CAiGrB"} \ No newline at end of file +{"version":3,"file":"commit-stream.d.ts","sourceRoot":"","sources":["../commit-stream.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAIpC,YAAkB,MAAM,GACxB;IAAmB,IAAI,EAAZ,MAAM,CACjB;IAAmB,KAAK,EAAb,MAAM,CACnB;CAAA,CAAA;AAGE,YAAkB,OAAO,GACzB;IAAmB,KAAK,EAAb,MAAM,CACjB;IAAmB,UAAU,EAAlB,MAAM,CACjB;IAAmB,SAAS,EAAjB,MAAM,CACnB;CAAA,CAAA;AAGE,YAAkB,MAAM,GACxB;IAAmB,GAAG,EAAX,MAAM,CACjB;IAAoB,MAAM,AAA1B,CACA,EADW,MAAM,CACjB;IAAsB,OAAO,AAA7B,CACA,EADW,MAAM,EAAE,CACnB;IAAoB,UAAU,AAA9B,CACA,EADW,MAAM,CACjB;IAAoB,UAAU,AAA9B,CACA,EADW,MAAM,CACjB;IAAoB,OAAO,AAA3B,CACA,EADW,MAAM,CACjB;IAAsB,WAAW,AAAjC,CACA,EADW,MAAM,EAAE,CACnB;IAAsB,SAAS,AAA/B,CACA,EADW,MAAM,EAAE,CACnB;IAAqB,OAAO,AAA5B,CACA,EADW,OAAO,CAClB;IAAoB,KAAK,AAAzB,CACA,EADW,MAAM,CACjB;IAAoB,MAAM,AAA1B,CACA,EADW,MAAM,CACjB;IAAoB,SAAS,AAA7B,CACA,EADW,MAAM,CACjB;IAAoB,OAAO,AAA3B,CACA,EADW,MAAM,CACjB;IAAoB,KAAK,AAAzB,CAA0B,EAAf,MAAM,CAAS;CAAA,CAAA;AA5B7B;;;;GAIG;AAEH;;;;;GAKG;AAEH;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAAE,MAAM,AAJzC,CACA,EADQ,MAIiC,EAAE,SAAS,AAHpD,CACA,EADQ,MAG4C,GAF1C,SAAS,CAmGrB"} \ No newline at end of file