From 6c4452b9590c322a779326345d0cde307612776d Mon Sep 17 00:00:00 2001 From: Steve Szczecina Date: Tue, 15 Nov 2022 22:32:23 -0700 Subject: [PATCH 1/3] Update log.js to support async reporter plugins Async reporters can be easily supported by `await`ing the reporter function. --- lib/file-set-pipeline/log.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/file-set-pipeline/log.js b/lib/file-set-pipeline/log.js index a67fe6e..b2cf072 100644 --- a/lib/file-set-pipeline/log.js +++ b/lib/file-set-pipeline/log.js @@ -36,7 +36,7 @@ export async function log(context, settings) { func = settings.reporter } - let diagnostics = func( + let diagnostics = await func( context.files.filter( (file) => file.data.unifiedEngineGiven && !file.data.unifiedEngineIgnored ), From 42ede24fafbdbc6cbf8c7c6b13cc07643bd6c471 Mon Sep 17 00:00:00 2001 From: Steve Szczecina Date: Wed, 16 Nov 2022 14:26:48 -0700 Subject: [PATCH 2/3] Update typedef for VFileReporter --- lib/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/index.js b/lib/index.js index eddb883..13ee011 100644 --- a/lib/index.js +++ b/lib/index.js @@ -17,7 +17,7 @@ * @callback VFileReporter * @param {Array} files * @param {VFileReporterOptions} options - * @returns {string} + * @returns {string | Promise} * * @typedef Settings * @property {Options['processor']} processor From e1364728f4d2497d70810d148d4d101f341cc4b9 Mon Sep 17 00:00:00 2001 From: Steve Szczecina Date: Thu, 17 Nov 2022 09:38:10 -0700 Subject: [PATCH 3/3] Add test for async reporters --- test/reporting.js | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/test/reporting.js b/test/reporting.js index 43c53a7..cb2d496 100644 --- a/test/reporting.js +++ b/test/reporting.js @@ -18,6 +18,9 @@ const windows = process.platform === 'win32' const cross = windows ? '×' : '✖' const danger = windows ? '‼' : '⚠' +/** @type {import('unified-engine').VFileReporter} */ +const vfileReporterPrettyAsync = async (files) => vfileReporterPretty(files) + // See: . const original = process.env.CI @@ -169,6 +172,29 @@ test('reporting', async () => { ) }) + await new Promise((resolve) => { + const stderr = spy() + + engine( + { + processor: noop(), + cwd: new URL('two-files/', fixtures), + streamError: stderr.stream, + files: ['.'], + extensions: ['txt'], + reporter: vfileReporterPrettyAsync + }, + (error, code) => { + assert.deepEqual( + [error, code, stripAnsi(stderr())], + [null, 0, ''], + 'should support async reporters' + ) + resolve(undefined) + } + ) + }) + await new Promise((resolve) => { const stderr = spy() const cwd = new URL('two-files/', fixtures)