From cce7dbfbe9f6e6e93cdc2b724328560b98147a71 Mon Sep 17 00:00:00 2001 From: Laurin Weger Date: Wed, 22 Oct 2025 15:38:06 +0200 Subject: [PATCH] deepSignal values iterator: inherit from prototype --- sdk/js/alien-deepsignals/src/deepSignal.ts | 27 ++++++++++++---------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/sdk/js/alien-deepsignals/src/deepSignal.ts b/sdk/js/alien-deepsignals/src/deepSignal.ts index f1f08b20..19ce5c4d 100644 --- a/sdk/js/alien-deepsignals/src/deepSignal.ts +++ b/sdk/js/alien-deepsignals/src/deepSignal.ts @@ -678,21 +678,24 @@ function getFromSet( const makeIterator = (pair: boolean) => { return function thisIter(this: any) { const iterable = raw.values(); - return { - [Symbol.iterator]() { + // Create an Iterator that inherits Iterator.prototype methods (map, filter, etc.) + // Wrap the iterator to proxy entries on-demand + const wrappedIterator = { + next() { + const n = iterable.next(); + if (n.done) return n; + const entry = ensureEntryProxy(n.value); return { - next() { - const n = iterable.next(); - if (n.done) return n; - const entry = ensureEntryProxy(n.value); - return { - value: pair ? [entry, entry] : entry, - done: false, - }; - }, + value: pair ? [entry, entry] : entry, + done: false, }; }, - } as Iterable; + }; + // Set the prototype to Iterator.prototype if available (ES2023+ Iterator Helpers) + if (typeof Iterator !== "undefined" && Iterator.prototype) { + Object.setPrototypeOf(wrappedIterator, Iterator.prototype); + } + return wrappedIterator; }; }; if (key === "values" || key === "keys") return makeIterator(false);