From a77eca23db4379ed84ad2959924d59663ec1f703 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Tue, 28 Nov 2023 11:24:55 -0500 Subject: [PATCH] fix array memory leak --- packages/svelte/src/internal/client/magic.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/svelte/src/internal/client/magic.js b/packages/svelte/src/internal/client/magic.js index 30af44c8a2..67cab067bc 100644 --- a/packages/svelte/src/internal/client/magic.js +++ b/packages/svelte/src/internal/client/magic.js @@ -27,6 +27,8 @@ function object(value) { const sources = new Map(); let version = source(0); + const is_array = Array.isArray(value); + return new Proxy(value, { get(target, prop, receiver) { let s = sources.get(prop); @@ -50,6 +52,13 @@ function object(value) { const s = sources.get(prop); if (s) set(s, magic(value)); + if (is_array && prop === 'length') { + for (let i = value; i < target.length; i += 1) { + const s = sources.get(i + ''); + if (s) set(s, undefined); + } + } + if (!(prop in target)) increment(version); target[prop] = value;