diff --git a/.changeset/sixty-comics-bow.md b/.changeset/sixty-comics-bow.md new file mode 100644 index 0000000000..2463e52430 --- /dev/null +++ b/.changeset/sixty-comics-bow.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: preserve symbols when creating derived rest properties diff --git a/packages/svelte/src/internal/client/runtime.js b/packages/svelte/src/internal/client/runtime.js index 2197f34d16..6485d21ec2 100644 --- a/packages/svelte/src/internal/client/runtime.js +++ b/packages/svelte/src/internal/client/runtime.js @@ -763,12 +763,12 @@ export function set_signal_status(signal, status) { } /** - * @param {Record} obj - * @param {string[]} keys - * @returns {Record} + * @param {Record} obj + * @param {Array} keys + * @returns {Record} */ export function exclude_from_object(obj, keys) { - /** @type {Record} */ + /** @type {Record} */ var result = {}; for (var key in obj) { @@ -777,6 +777,12 @@ export function exclude_from_object(obj, keys) { } } + for (var symbol of Object.getOwnPropertySymbols(obj)) { + if (!keys.includes(symbol)) { + result[symbol] = obj[symbol]; + } + } + return result; } diff --git a/packages/svelte/tests/runtime-runes/samples/derived-rest-includes-symbol/_config.js b/packages/svelte/tests/runtime-runes/samples/derived-rest-includes-symbol/_config.js new file mode 100644 index 0000000000..eec60928a2 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/derived-rest-includes-symbol/_config.js @@ -0,0 +1,5 @@ +import { test } from '../../test'; + +export default test({ + html: `

42

` +}); diff --git a/packages/svelte/tests/runtime-runes/samples/derived-rest-includes-symbol/main.svelte b/packages/svelte/tests/runtime-runes/samples/derived-rest-includes-symbol/main.svelte new file mode 100644 index 0000000000..ee161696e1 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/derived-rest-includes-symbol/main.svelte @@ -0,0 +1,8 @@ + + +

{b[symbol]}