diff --git a/commit-stream.js b/commit-stream.js index 8b7c07e..9ae2d5f 100644 --- a/commit-stream.js +++ b/commit-stream.js @@ -46,7 +46,13 @@ export default function commitStream (ghUser, ghProject) { return new Transform({ objectMode: true, transform (line, _, callback) { - emit(this, addLine(line)) + let done + try { + done = addLine(line) + } catch (err) { + return callback(/** @type {Error} */ (err)) + } + emit(this, done) callback() }, flush (callback) { @@ -73,7 +79,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..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,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,CAmGrB"} \ No newline at end of file