Skip to content

Commit 113a3da

Browse files
fix: don't define error.message if it's not configurable (#16149)
* fix: don't define `error.message` if it's not configurable * fix: print console.error with updated stack * fix: revert second `console.error`
1 parent da63318 commit 113a3da

File tree

4 files changed

+31
-1
lines changed

4 files changed

+31
-1
lines changed

.changeset/unlucky-plants-jump.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'svelte': patch
3+
---
4+
5+
fix: don't define `error.message` if it's not configurable

packages/svelte/src/internal/client/error-handling.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { DEV } from 'esm-env';
33
import { FILENAME } from '../../constants.js';
44
import { is_firefox } from './dom/operations.js';
55
import { BOUNDARY_EFFECT, EFFECT_RAN } from './constants.js';
6-
import { define_property } from '../shared/utils.js';
6+
import { define_property, get_descriptor } from '../shared/utils.js';
77
import { active_effect } from './runtime.js';
88

99
/**
@@ -63,6 +63,12 @@ function adjust_error(error, effect) {
6363
if (adjusted_errors.has(error)) return;
6464
adjusted_errors.add(error);
6565

66+
const message_descriptor = get_descriptor(error, 'message');
67+
68+
// if the message was already changed and it's not configurable we can't change it
69+
// or it will throw a different error swallowing the original error
70+
if (message_descriptor && !message_descriptor.configurable) return;
71+
6672
var indent = is_firefox ? ' ' : '\t';
6773
var component_stack = `\n${indent}in ${effect.fn?.name || '<unknown>'}`;
6874
var context = effect.ctx;
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { test } from '../../test';
2+
3+
export default test({
4+
compileOptions: {
5+
dev: true
6+
},
7+
error: 'test'
8+
});
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<script>
2+
class CustomError extends Error {
3+
constructor() {
4+
super();
5+
Object.defineProperty(this, "message", {
6+
value: "test"
7+
});
8+
}
9+
}
10+
throw new CustomError()
11+
</script>

0 commit comments

Comments
 (0)