From 1be4b907e68bb5ef8209a6e4ac27f65e4b0ac7e5 Mon Sep 17 00:00:00 2001 From: Dan Rose Date: Sat, 17 Dec 2022 09:11:23 -0600 Subject: [PATCH] fix(json)!: log more robustly when JSON parsing fails (#1361) * Log more robustly when JSON parsing fails * changed to error per pr feedback --- packages/json/src/index.js | 3 +-- packages/json/test/test.js | 27 ++++++++++++--------------- 2 files changed, 13 insertions(+), 17 deletions(-) diff --git a/packages/json/src/index.js b/packages/json/src/index.js index 63e37c280..b61ed2300 100755 --- a/packages/json/src/index.js +++ b/packages/json/src/index.js @@ -24,8 +24,7 @@ export default function json(options = {}) { }; } catch (err) { const message = 'Could not parse JSON file'; - const position = parseInt(/[\d]/.exec(err.message)[0], 10); - this.warn({ message, id, position }); + this.error({ message, id, cause: err }); return null; } } diff --git a/packages/json/test/test.js b/packages/json/test/test.js index 95ce01d33..1abbc2377 100755 --- a/packages/json/test/test.js +++ b/packages/json/test/test.js @@ -73,21 +73,18 @@ test('handles JSON objects with no valid keys (#19)', async (t) => { }); test('handles garbage', async (t) => { - const warns = []; - - await rollup({ - input: 'fixtures/garbage/main.js', - plugins: [json()], - onwarn: (warning) => warns.push(warning) - }).catch(() => {}); - - const [{ message, id, position, plugin }] = warns; - - t.is(warns.length, 1); - t.is(plugin, 'json'); - t.is(position, 1); - t.is(message, 'Could not parse JSON file'); - t.regex(id, /(.*)bad.json$/); + const err = await t.throwsAsync( + rollup({ + input: 'fixtures/garbage/main.js', + plugins: [json()] + }) + ); + t.is(err.code, 'PLUGIN_ERROR'); + t.is(err.plugin, 'json'); + t.is(err.message, 'Could not parse JSON file'); + t.is(err.name, 'RollupError'); + t.is(err.cause.name, 'SyntaxError'); + t.regex(err.id, /(.*)bad.json$/); }); test('does not generate an AST', async (t) => {