From f3bfae6e14317f3bedb4fa5fc2304ba9e8de2707 Mon Sep 17 00:00:00 2001 From: rowan Date: Thu, 1 May 2025 16:37:08 -0500 Subject: [PATCH] add checks for array enumerators --- src/index.ts | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/index.ts b/src/index.ts index 9896222..dd56ebb 100644 --- a/src/index.ts +++ b/src/index.ts @@ -311,6 +311,14 @@ export class Enumerator implements IEnumerator, Iterator { } } + static isEnumerator(value: object): value is IEnumerator { + return hasMethods(['moveNext', 'reset', 'toIterator'], value) + } + + static isArrayEnumerator(value: any): value is IArrayEnumerator { + return typeof value['setIndex'] === 'function' && this.isEnumerator(value) + } + static toIterator(enumerator: IEnumerator): Iterator { return new this(enumerator) } @@ -585,7 +593,9 @@ export class Enumerable implements IEnumerable, Iterable { static from(value: IEnumerable | IEnumerator | Iterable | Iterator): Enumerable { if (this.isEnumerable(value)) { return value - } else if (this.isEnumerator(value)) { + } else if (Enumerator.isArrayEnumerator(value)) { + return new ArrayEnumerble(value) + } else if (Enumerator.isEnumerator(value)) { return new Enumerable(value) } else if (isIterable(value)) { const enumerator = Enumerator.fromIterable(value) @@ -608,10 +618,6 @@ export class Enumerable implements IEnumerable, Iterable { return typeof value['enumerator'] === 'function' } - static isEnumerator(value: object): value is IEnumerator { - return hasMethods(['moveNext', 'reset', 'toIterator'], value) - } - [Symbol.iterator](): Iterator { return this._enumerator.toIterator() }