From e880a1f60fefeed3fba430dd5c812d34b247a444 Mon Sep 17 00:00:00 2001 From: Julien Deniau Date: Tue, 25 Mar 2025 19:57:28 +0000 Subject: [PATCH 1/2] Call super()" before this in constructors --- eslint.config.mjs | 2 -- src/Map.js | 2 ++ src/Operations.js | 10 ++++++++++ src/Range.js | 2 ++ src/Repeat.js | 2 ++ 5 files changed, 16 insertions(+), 2 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index 1e29c04507..d27ddb9cbd 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -27,13 +27,11 @@ export default tseslint.config( { rules: { eqeqeq: 'error', - 'constructor-super': 'off', 'no-constructor-return': 'error', 'no-else-return': 'error', 'no-lonely-if': 'error', 'no-object-constructor': 'error', 'no-prototype-builtins': 'off', - 'no-this-before-super': 'off', 'no-useless-concat': 'error', 'no-var': 'error', 'operator-assignment': 'error', diff --git a/src/Map.js b/src/Map.js index d0d9d58b61..dd9faf5e49 100644 --- a/src/Map.js +++ b/src/Map.js @@ -553,6 +553,8 @@ ValueNode.prototype.iterate = function (fn, reverse) { class MapIterator extends Iterator { constructor(map, type, reverse) { + super(); + this._type = type; this._reverse = reverse; this._stack = map._root && mapIteratorFrame(map._root); diff --git a/src/Operations.js b/src/Operations.js index 569f3d7793..9c3ba24920 100644 --- a/src/Operations.js +++ b/src/Operations.js @@ -44,6 +44,8 @@ import { OrderedMap } from './OrderedMap'; export class ToKeyedSequence extends KeyedSeqImpl { constructor(indexed, useKeys) { + super(); + this._iter = indexed; this._useKeys = useKeys; this.size = indexed.size; @@ -89,6 +91,8 @@ ToKeyedSequence.prototype[IS_ORDERED_SYMBOL] = true; export class ToIndexedSequence extends IndexedSeqImpl { constructor(iter) { + super(); + this._iter = iter; this.size = iter.size; } @@ -128,6 +132,8 @@ export class ToIndexedSequence extends IndexedSeqImpl { export class ToSetSequence extends SetSeqImpl { constructor(iter) { + super(); + this._iter = iter; this.size = iter.size; } @@ -153,6 +159,8 @@ export class ToSetSequence extends SetSeqImpl { export class FromEntriesSequence extends KeyedSeqImpl { constructor(entries) { + super(); + this._iter = entries; this.size = entries.size; } @@ -597,6 +605,8 @@ export function skipWhileFactory(collection, predicate, context, useKeys) { class ConcatSeq extends SeqImpl { constructor(iterables) { + super(); + this._wrappedIterables = iterables.flatMap((iterable) => { if (iterable._wrappedIterables) { return iterable._wrappedIterables; diff --git a/src/Range.js b/src/Range.js index e00a53fb96..dec20b2973 100644 --- a/src/Range.js +++ b/src/Range.js @@ -33,6 +33,8 @@ export const Range = (start, end, step = 1) => { }; export class RangeImpl extends IndexedSeqImpl { constructor(start, end, step, size) { + super(); + this._start = start; this._end = end; this._step = step; diff --git a/src/Repeat.js b/src/Repeat.js index bc20177523..c428e213d0 100644 --- a/src/Repeat.js +++ b/src/Repeat.js @@ -22,6 +22,8 @@ export const Repeat = (value, times) => { export class RepeatImpl extends IndexedSeqImpl { constructor(value, size) { + super(); + this._value = value; this.size = size; } From 03838f9e8eaf57b680a95fb641b346a1712e876a Mon Sep 17 00:00:00 2001 From: Julien Deniau Date: Tue, 25 Mar 2025 21:59:01 +0000 Subject: [PATCH 2/2] Fix issue with MapIterator re-setting the next method --- src/Iterator.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Iterator.js b/src/Iterator.js index 1954a3661c..e68aef6eb5 100644 --- a/src/Iterator.js +++ b/src/Iterator.js @@ -9,7 +9,10 @@ export const ITERATOR_SYMBOL = REAL_ITERATOR_SYMBOL || FAUX_ITERATOR_SYMBOL; export class Iterator { constructor(next) { - this.next = next; + if (next) { + // Map extends Iterator and has a `next` method, do not erase it in that case. We could have checked `if (next && !this.next)` too. + this.next = next; + } } toString() {