From ac387dcad3135f939b1b122263286f6bbb503874 Mon Sep 17 00:00:00 2001 From: Ryan Turnquist Date: Wed, 26 Jul 2023 10:19:59 -0700 Subject: [PATCH] fix: handle errors thrown in await catch attrs --- .changeset/gold-timers-sleep.md | 5 +++++ packages/marko/src/core-tags/core/await/renderer.js | 6 +++++- .../fixtures/await-error-rethrow-catch/template.marko | 10 ++++++++++ .../render/fixtures/await-error-rethrow-catch/test.js | 10 ++++++++++ 4 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 .changeset/gold-timers-sleep.md create mode 100644 packages/marko/test/render/fixtures/await-error-rethrow-catch/template.marko create mode 100644 packages/marko/test/render/fixtures/await-error-rethrow-catch/test.js diff --git a/.changeset/gold-timers-sleep.md b/.changeset/gold-timers-sleep.md new file mode 100644 index 0000000000..761afc9076 --- /dev/null +++ b/.changeset/gold-timers-sleep.md @@ -0,0 +1,5 @@ +--- +"marko": patch +--- + +Handle errors thrown in await catch attribute diff --git a/packages/marko/src/core-tags/core/await/renderer.js b/packages/marko/src/core-tags/core/await/renderer.js index 69bdeb3706..69ca4a0244 100644 --- a/packages/marko/src/core-tags/core/await/renderer.js +++ b/packages/marko/src/core-tags/core/await/renderer.js @@ -220,7 +220,11 @@ function renderContents(err, data, input, out) { if (err) { if (input.catch) { if (errorRenderer) { - errorRenderer(out, err); + try { + errorRenderer(out, err); + } catch (err2) { + out.error(err2); + } } } else { out.error(err); diff --git a/packages/marko/test/render/fixtures/await-error-rethrow-catch/template.marko b/packages/marko/test/render/fixtures/await-error-rethrow-catch/template.marko new file mode 100644 index 0000000000..dabf19703e --- /dev/null +++ b/packages/marko/test/render/fixtures/await-error-rethrow-catch/template.marko @@ -0,0 +1,10 @@ +--- +BEFORE + + <@then|testData|>Success! + <@catch|err|> + $ throw err + + +AFTER +--- \ No newline at end of file diff --git a/packages/marko/test/render/fixtures/await-error-rethrow-catch/test.js b/packages/marko/test/render/fixtures/await-error-rethrow-catch/test.js new file mode 100644 index 0000000000..f537553064 --- /dev/null +++ b/packages/marko/test/render/fixtures/await-error-rethrow-catch/test.js @@ -0,0 +1,10 @@ +var expect = require("chai").expect; + +exports.templateData = {}; + +exports.skip_vdom = "VDOM does not support async components"; + +exports.checkError = function (e) { + var message = e.toString(); + expect(message).to.contain("Something went wrong"); +};