From 6f54ade88139c1fff005ac50522cda01e3a60fea Mon Sep 17 00:00:00 2001 From: Dominic Gannaway Date: Fri, 17 May 2024 20:07:07 +0100 Subject: [PATCH 1/8] fix: avoid writing to not writable error object in handle_error --- .changeset/shiny-pillows-relax.md | 5 +++++ packages/svelte/src/internal/client/runtime.js | 16 ++++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 .changeset/shiny-pillows-relax.md diff --git a/.changeset/shiny-pillows-relax.md b/.changeset/shiny-pillows-relax.md new file mode 100644 index 000000000000..79cfc313179b --- /dev/null +++ b/.changeset/shiny-pillows-relax.md @@ -0,0 +1,5 @@ +--- +"svelte": patch +--- + +fix: avoid writing to not writable error object in handle_error diff --git a/packages/svelte/src/internal/client/runtime.js b/packages/svelte/src/internal/client/runtime.js index 43ccd4d7036a..d6ce6850800f 100644 --- a/packages/svelte/src/internal/client/runtime.js +++ b/packages/svelte/src/internal/client/runtime.js @@ -1,5 +1,11 @@ import { DEV } from 'esm-env'; -import { get_descriptors, get_prototype_of, is_frozen, object_freeze } from './utils.js'; +import { + get_descriptor, + get_descriptors, + get_prototype_of, + is_frozen, + object_freeze +} from './utils.js'; import { snapshot } from './proxy.js'; import { destroy_effect, effect, execute_effect_teardown } from './reactivity/effects.js'; import { @@ -255,7 +261,13 @@ export function check_dirtiness(reaction) { */ function handle_error(error, effect, component_context) { // Given we don't yet have error boundaries, we will just always throw. - if (!DEV || handled_errors.has(error) || component_context === null) { + if ( + !DEV || + handled_errors.has(error) || + component_context === null || + // If we're in a worker, errors aren't writable + !get_descriptor(error, 'message')?.writable + ) { throw error; } From 663edc993e4705bc8fb7f0c70dc71140613dfa30 Mon Sep 17 00:00:00 2001 From: Dominic Gannaway Date: Tue, 21 May 2024 14:37:12 +0100 Subject: [PATCH 2/8] feedback --- packages/svelte/src/internal/client/runtime.js | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/packages/svelte/src/internal/client/runtime.js b/packages/svelte/src/internal/client/runtime.js index d6ce6850800f..ba2c9dd61db7 100644 --- a/packages/svelte/src/internal/client/runtime.js +++ b/packages/svelte/src/internal/client/runtime.js @@ -261,13 +261,7 @@ export function check_dirtiness(reaction) { */ function handle_error(error, effect, component_context) { // Given we don't yet have error boundaries, we will just always throw. - if ( - !DEV || - handled_errors.has(error) || - component_context === null || - // If we're in a worker, errors aren't writable - !get_descriptor(error, 'message')?.writable - ) { + if (!DEV || handled_errors.has(error) || component_context === null) { throw error; } @@ -294,7 +288,9 @@ function handle_error(error, effect, component_context) { } const indent = /Firefox/.test(navigator.userAgent) ? ' ' : '\t'; - error.message += `\n${component_stack.map((name) => `\n${indent}in ${name}`).join('')}\n`; + Object.defineProperty(error, 'message', { + value: error.message + `\n${component_stack.map((name) => `\n${indent}in ${name}`).join('')}\n` + }); const stack = error.stack; @@ -309,7 +305,9 @@ function handle_error(error, effect, component_context) { } new_lines.push(line); } - error.stack = new_lines.join('\n'); + Object.defineProperty(error, 'stack', { + value: error.stack + new_lines.join('\n') + }); } handled_errors.add(error); From dcd122be0bbb5aa6045c413cc244106a0cae79a3 Mon Sep 17 00:00:00 2001 From: Dominic Gannaway Date: Tue, 21 May 2024 14:38:16 +0100 Subject: [PATCH 3/8] feedback --- .changeset/shiny-pillows-relax.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/shiny-pillows-relax.md b/.changeset/shiny-pillows-relax.md index 79cfc313179b..d4a152a6cb17 100644 --- a/.changeset/shiny-pillows-relax.md +++ b/.changeset/shiny-pillows-relax.md @@ -2,4 +2,4 @@ "svelte": patch --- -fix: avoid writing to not writable error object in handle_error +fix: assign message to error object in handle_error using Object.assign From e6e98efa6f4a747a08b9b86cef14afeb7327f8f4 Mon Sep 17 00:00:00 2001 From: Dominic Gannaway Date: Tue, 21 May 2024 14:50:52 +0100 Subject: [PATCH 4/8] Update packages/svelte/src/internal/client/runtime.js Co-authored-by: Rich Harris --- packages/svelte/src/internal/client/runtime.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/svelte/src/internal/client/runtime.js b/packages/svelte/src/internal/client/runtime.js index ba2c9dd61db7..098954c3796b 100644 --- a/packages/svelte/src/internal/client/runtime.js +++ b/packages/svelte/src/internal/client/runtime.js @@ -305,7 +305,7 @@ function handle_error(error, effect, component_context) { } new_lines.push(line); } - Object.defineProperty(error, 'stack', { + define_property(error, 'stack', { value: error.stack + new_lines.join('\n') }); } From 8cfd22d2a19aea6653162a1727916deaf379c450 Mon Sep 17 00:00:00 2001 From: Dominic Gannaway Date: Tue, 21 May 2024 14:51:01 +0100 Subject: [PATCH 5/8] Update .changeset/shiny-pillows-relax.md Co-authored-by: Rich Harris --- .changeset/shiny-pillows-relax.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/shiny-pillows-relax.md b/.changeset/shiny-pillows-relax.md index d4a152a6cb17..15286e12c00d 100644 --- a/.changeset/shiny-pillows-relax.md +++ b/.changeset/shiny-pillows-relax.md @@ -2,4 +2,4 @@ "svelte": patch --- -fix: assign message to error object in handle_error using Object.assign +fix: assign message to error object in `handle_error` using `Object.defineProperty` From 324ad9c07e7046629827815af3b92dcdd44e17c6 Mon Sep 17 00:00:00 2001 From: Dominic Gannaway Date: Tue, 21 May 2024 14:51:37 +0100 Subject: [PATCH 6/8] Update packages/svelte/src/internal/client/runtime.js Co-authored-by: Rich Harris --- packages/svelte/src/internal/client/runtime.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/svelte/src/internal/client/runtime.js b/packages/svelte/src/internal/client/runtime.js index 098954c3796b..f15af46bef54 100644 --- a/packages/svelte/src/internal/client/runtime.js +++ b/packages/svelte/src/internal/client/runtime.js @@ -288,7 +288,7 @@ function handle_error(error, effect, component_context) { } const indent = /Firefox/.test(navigator.userAgent) ? ' ' : '\t'; - Object.defineProperty(error, 'message', { + define_property(error, 'message', { value: error.message + `\n${component_stack.map((name) => `\n${indent}in ${name}`).join('')}\n` }); From 4a89e2820a86616f76e404024645c8d9b3ca231a Mon Sep 17 00:00:00 2001 From: Dominic Gannaway Date: Tue, 21 May 2024 14:51:41 +0100 Subject: [PATCH 7/8] Update packages/svelte/src/internal/client/runtime.js Co-authored-by: Rich Harris --- packages/svelte/src/internal/client/runtime.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/svelte/src/internal/client/runtime.js b/packages/svelte/src/internal/client/runtime.js index f15af46bef54..6feeeeae7c1b 100644 --- a/packages/svelte/src/internal/client/runtime.js +++ b/packages/svelte/src/internal/client/runtime.js @@ -1,5 +1,6 @@ import { DEV } from 'esm-env'; import { + define_property, get_descriptor, get_descriptors, get_prototype_of, From c630ec6e9483f70691c1359b0f09a3f2b5d6a8c9 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Sun, 2 Jun 2024 15:35:09 +0100 Subject: [PATCH 8/8] Update packages/svelte/src/internal/client/runtime.js --- packages/svelte/src/internal/client/runtime.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/svelte/src/internal/client/runtime.js b/packages/svelte/src/internal/client/runtime.js index d5ece4357bce..92a13dc6d469 100644 --- a/packages/svelte/src/internal/client/runtime.js +++ b/packages/svelte/src/internal/client/runtime.js @@ -1,7 +1,6 @@ import { DEV } from 'esm-env'; import { define_property, - get_descriptor, get_descriptors, get_prototype_of, is_frozen,