From: Ardis Lu Date: Sun, 9 Feb 2025 06:03:39 +0000 (-0800) Subject: Add cleanup on abort X-Git-Tag: v0.1.0~64 X-Git-Url: https://git.ardis.lu/?a=commitdiff_plain;h=6f1c302ff325a8bfca461169a55724cfb3dd5fab;p=csvio Add cleanup on abort `close()` is NOT called if CSVWriter errors, only `abort()`. So need to call `close()` within `abort()` to finish cleanup. --- diff --git a/src/core.js b/src/core.js index 03cac7f..4e09f5d 100644 --- a/src/core.js +++ b/src/core.js @@ -375,6 +375,9 @@ export class CSVWriter extends WritableStream { await handle.close(); status.elapsed = performance.now() - status.start; status.done = true; + }, + async abort() { + await this.close(); } }); diff --git a/test/core.test.js b/test/core.test.js index 2839397..a02e4bd 100644 --- a/test/core.test.js +++ b/test/core.test.js @@ -522,14 +522,16 @@ suite('CSVWriter', { concurrency: true }, () => { test('flushes progress to disk on uncaught error', { concurrency: true }, async (t) => { const temp = await createTempFile(); t.after(async () => await unlink(temp)); + const writer = new CSVWriter(temp); await rejects(async () => { await ReadableStream.from((function* () { yield '["header1","header2"]'; yield '["1","1"]'; throw new Error(); - })()).pipeTo(new CSVWriter(temp)) + })()).pipeTo(writer) }); - await new CSVReader(temp).pipeTo( + deepStrictEqual(writer.status.done, true); // Confirm cleanup actions + await new CSVReader(temp).pipeTo( // Confirm flush to disk csvStreamEqualWritable([ ['header1', 'header2'], ['1', '1'],