From 6f1c302ff325a8bfca461169a55724cfb3dd5fab Mon Sep 17 00:00:00 2001 From: Ardis Lu Date: Sat, 8 Feb 2025 22:03:39 -0800 Subject: [PATCH] Add cleanup on abort `close()` is NOT called if CSVWriter errors, only `abort()`. So need to call `close()` within `abort()` to finish cleanup. --- src/core.js | 3 +++ test/core.test.js | 6 ++++-- 2 files changed, 7 insertions(+), 2 deletions(-) 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'], -- 2.47.3