Socket
Socket
Sign inDemoInstall

es-iterator-helpers

Package Overview
Dependencies
Maintainers
1
Versions
20
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

es-iterator-helpers - npm Package Compare versions

Comparing version 1.0.3 to 1.0.4

30

aos/CreateIteratorFromClosure.js

@@ -7,18 +7,38 @@ 'use strict';

var GeneratorStart = require('./GeneratorStart');
var IsArray = require('es-abstract/2022/IsArray');
var IsCallable = require('es-abstract/2022/IsCallable');
var OrdinaryObjectCreate = require('es-abstract/2022/OrdinaryObjectCreate');
var Type = require('es-abstract/2022/Type');
var GeneratorStart = require('./GeneratorStart');
var every = require('es-abstract/helpers/every');
var callBound = require('call-bind/callBound');
var SLOT = require('internal-slot');
module.exports = function CreateIteratorFromClosure(closure, brand, proto) {
var $concat = callBound('Array.prototype.concat');
var isString = function isString(slot) {
return Type(slot) === 'String';
};
module.exports = function CreateIteratorFromClosure(closure, generatorBrand, proto) {
if (!IsCallable(closure)) {
throw new $TypeError('`closure` must be a function');
}
var generator = OrdinaryObjectCreate(proto, ['[[GeneratorContext]]', '[[GeneratorBrand]]', '[[GeneratorState]]']); // steps 3, 5
SLOT.set(generator, '[[GeneratorBrand]]', brand); // step 4
if (Type(generatorBrand) !== 'String') {
throw new $TypeError('`generatorBrand` must be a string');
}
var extraSlots = arguments.length > 3 ? arguments[3] : [];
if (arguments.length > 3) {
if (!IsArray(extraSlots) || !every(extraSlots, isString)) {
throw new $TypeError('`extraSlots` must be a List of String internal slot names');
}
}
var internalSlotsList = $concat(extraSlots, ['[[GeneratorContext]]', '[[GeneratorBrand]]', '[[GeneratorState]]']); // step 3
var generator = OrdinaryObjectCreate(proto, internalSlotsList); // steps 4, 6
SLOT.set(generator, '[[GeneratorBrand]]', generatorBrand); // step 5
SLOT.assert(closure, '[[Sentinel]]'); // our userland slot
SLOT.set(generator, '[[Sentinel]]'); // our userland slot
SLOT.set(generator, '[[Sentinel]]', SLOT.get(closure, '[[Sentinel]]')); // our userland slot
SLOT.assert(closure, '[[CloseIfAbrupt]]'); // our second userland slot

@@ -25,0 +45,0 @@ SLOT.set(generator, '[[CloseIfAbrupt]]', SLOT.get(closure, '[[CloseIfAbrupt]]')); // our second userland slot

2

aos/GetIteratorDirect.js

@@ -13,3 +13,3 @@ 'use strict';

if (Type(obj) !== 'Object') {
throw new $TypeError('`obj` must be an Object'); // step 1
throw new $TypeError('Assertion failed: `obj` must be an Object');
}

@@ -16,0 +16,0 @@

@@ -8,2 +8,10 @@ # Changelog

## [v1.0.4](https://github.com/es-shims/iterator-helpers/compare/v1.0.3...v1.0.4) - 2023-03-21
### Commits
- [Fix] validate arguments first [`4240029`](https://github.com/es-shims/iterator-helpers/commit/42400297454909ddccc899a012dc55bbd403eb8b)
- [Fix] close underlying iterator when helper is closed [`f5372c7`](https://github.com/es-shims/iterator-helpers/commit/f5372c78cafff64bfda5849386538f806916049a)
- [Tests] `Iterator`: remove an unnecessary call-bind [`7d0ba59`](https://github.com/es-shims/iterator-helpers/commit/7d0ba59f672e690b189f91e0348f6b5e00f934e1)
## [v1.0.3](https://github.com/es-shims/iterator-helpers/compare/v1.0.2...v1.0.3) - 2023-03-17

@@ -10,0 +18,0 @@

@@ -17,2 +17,3 @@ 'use strict';

var ToNumber = require('es-abstract/2022/ToNumber');
var Type = require('es-abstract/2022/Type');

@@ -26,3 +27,6 @@ var iterHelperProto = require('../IteratorHelperPrototype');

module.exports = function drop(limit) {
var iterated = GetIteratorDirect(this); // step 1
var O = this; // step 1
if (Type(O) !== 'Object') {
throw new $TypeError('`this` value must be an Object'); // step 2
}

@@ -34,2 +38,4 @@ var numLimit = ToNumber(limit); // step 2

var iterated = GetIteratorDirect(O); // step 4
var integerLimit = ToIntegerOrInfinity(numLimit); // step 4

@@ -85,3 +91,7 @@ if (integerLimit < 0) {

return CreateIteratorFromClosure(closure, 'Iterator Helper', iterHelperProto); // step 4
var result = CreateIteratorFromClosure(closure, 'Iterator Helper', iterHelperProto, ['[[UnderlyingIterator]]']); // step 4
SLOT.set(result, '[[UnderlyingIterator]]', iterated); // step 5
return result; // step 6
};

@@ -16,24 +16,30 @@ 'use strict';

var ToBoolean = require('es-abstract/2022/ToBoolean');
var Type = require('es-abstract/2022/Type');
module.exports = function every(predicate) {
var iterated = GetIteratorDirect(this); // step 1
var O = this; // step 1
if (Type(O) !== 'Object') {
throw new $TypeError('`this` value must be an Object'); // step 2
}
if (!IsCallable(predicate)) {
throw new $TypeError('`predicate` must be a function'); // step 2
throw new $TypeError('`predicate` must be a function'); // step 3
}
var counter = 0; // step 3
var iterated = GetIteratorDirect(O); // step 4
var counter = 0; // step 5
// eslint-disable-next-line no-constant-condition
while (true) { // step 4
var next = IteratorStep(iterated); // step 4.a
while (true) { // step 6
var next = IteratorStep(iterated); // step 6.a
if (!next) {
return true; // step 4.b
return true; // step 6.b
}
var value = IteratorValue(next); // step 4.c
var value = IteratorValue(next); // step 6.c
var result;
try {
result = Call(predicate, void undefined, [value, counter]); // step 4.d
result = Call(predicate, void undefined, [value, counter]); // step 6.d
} catch (e) {
// close iterator // step 4.e
// close iterator // step 6.e
IteratorClose(

@@ -44,3 +50,3 @@ iterated,

} finally {
counter += 1; // step 4.g
counter += 1; // step 6.g
}

@@ -51,5 +57,5 @@ if (!ToBoolean(result)) {

NormalCompletion(false)
); // step 4.f
); // step 6.f
}
}
};

@@ -17,2 +17,3 @@ 'use strict';

var ToBoolean = require('es-abstract/2022/ToBoolean');
var Type = require('es-abstract/2022/Type');

@@ -24,8 +25,13 @@ var iterHelperProto = require('../IteratorHelperPrototype');

module.exports = function filter(predicate) {
var iterated = GetIteratorDirect(this); // step 1
var O = this; // step 1
if (Type(O) !== 'Object') {
throw new $TypeError('`this` value must be an Object'); // step 2
}
if (!IsCallable(predicate)) {
throw new $TypeError('`predicate` must be a function'); // step 2
throw new $TypeError('`predicate` must be a function'); // step 3
}
var iterated = GetIteratorDirect(O); // step 4
var closeIfAbrupt = function (abruptCompletion) {

@@ -42,16 +48,16 @@ if (!(abruptCompletion instanceof CompletionRecord)) {

var sentinel = {};
var counter = 0; // step 3.a
var counter = 0; // step 6.a
var closure = function () {
// eslint-disable-next-line no-constant-condition
while (true) { // step 3.b
var next = IteratorStep(iterated); // step 3.b.i
while (true) { // step 6.b
var next = IteratorStep(iterated); // step 6.b.i
if (!next) {
// return void undefined; // step 3.b.ii
// return void undefined; // step 6.b.ii
return sentinel;
}
var value = IteratorValue(next); // step 3.b.iii
var value = IteratorValue(next); // step 6.b.iii
var selected;
try {
selected = Call(predicate, void undefined, [value, counter]); // step 3.b.iv
// yield mapped // step 3.b.vi
selected = Call(predicate, void undefined, [value, counter]); // step 6.b.iv
// yield mapped // step 6.b.vi
if (ToBoolean(selected)) {

@@ -61,7 +67,7 @@ return value;

} catch (e) {
// close iterator // step 3.b.v, 3.b.vii
// close iterator // step 6.b.v, 6.b.vii
closeIfAbrupt(ThrowCompletion(e));
throw e;
} finally {
counter += 1; // step 3.b.viii
counter += 1; // step 6.b.viii
}

@@ -73,3 +79,7 @@ }

return CreateIteratorFromClosure(closure, 'Iterator Helper', iterHelperProto); // step 4
var result = CreateIteratorFromClosure(closure, 'Iterator Helper', iterHelperProto, ['[[UnderlyingIterator]]']); // step 7
SLOT.set(result, '[[UnderlyingIterator]]', iterated); // step 8
return result; // step 9
};

@@ -16,24 +16,31 @@ 'use strict';

var ToBoolean = require('es-abstract/2022/ToBoolean');
var Type = require('es-abstract/2022/Type');
module.exports = function find(predicate) {
var iterated = GetIteratorDirect(this); // step 1
var O = this; // step 1
if (Type(O) !== 'Object') {
throw new $TypeError('`this` value must be an Object'); // step 2
}
if (!IsCallable(predicate)) {
throw new $TypeError('`predicate` must be a function'); // step 2
throw new $TypeError('`predicate` must be a function'); // step 3
}
var counter = 0; // step 3
var iterated = GetIteratorDirect(O); // step 4
var counter = 0; // step 5
// eslint-disable-next-line no-constant-condition
while (true) { // step 4
var next = IteratorStep(iterated); // step 4.a
while (true) { // step 6
var next = IteratorStep(iterated); // step 6.a
if (!next) {
return void undefined; // step 4.b
return void undefined; // step 6.b
}
var value = IteratorValue(next); // step 4.c
var value = IteratorValue(next); // step 6.c
var result;
try {
result = Call(predicate, void undefined, [value, counter]); // step 4.d
result = Call(predicate, void undefined, [value, counter]); // step 6.d
} catch (e) {
// close iterator // step 4.e
// close iterator // step 6.e
IteratorClose(

@@ -44,3 +51,3 @@ iterated,

} finally {
counter += 1; // step 4.g
counter += 1; // step 6.g
}

@@ -51,5 +58,5 @@ if (ToBoolean(result)) {

NormalCompletion(value)
); // step 4.f
); // step 6.f
}
}
};

@@ -17,2 +17,3 @@ 'use strict';

var ThrowCompletion = require('es-abstract/2022/ThrowCompletion');
var Type = require('es-abstract/2022/Type');

@@ -24,8 +25,13 @@ var iterHelperProto = require('../IteratorHelperPrototype');

module.exports = function flatMap(mapper) {
var iterated = GetIteratorDirect(this); // step 1
var O = this; // step 1
if (Type(O) !== 'Object') {
throw new $TypeError('`this` value must be an Object'); // step 2
}
if (!IsCallable(mapper)) {
throw new $TypeError('`mapper` must be a function'); // step 2
throw new $TypeError('`mapper` must be a function'); // step 3
}
var iterated = GetIteratorDirect(O); // step 4
var closeIfAbrupt = function (abruptCompletion) {

@@ -42,11 +48,11 @@ if (!(abruptCompletion instanceof CompletionRecord)) {

var sentinel = {};
var counter = 0; // step 3.a
var counter = 0; // step 6.a
var closure = function () {
// while (true) { // step 3.b
var next = IteratorStep(iterated); // step 3.b.i
// while (true) { // step 6.b
var next = IteratorStep(iterated); // step 6.b.i
if (!next) {
// return void undefined; // step 3.b.ii
// return void undefined; // step 6.b.ii
return sentinel;
}
var value = IteratorValue(next); // step 3.b.iii
var value = IteratorValue(next); // step 6.b.iii
var mapped;

@@ -56,29 +62,29 @@ var innerIterator;

try {
mapped = Call(mapper, void undefined, [value, counter]); // step 3.b.iv
// yield mapped // step 3.b.vi
innerIterator = GetIteratorFlattenable(mapped, 'sync'); // step 3.b.vi
mapped = Call(mapper, void undefined, [value, counter]); // step 6.b.iv
// yield mapped // step 6.b.vi
innerIterator = GetIteratorFlattenable(mapped, 'sync'); // step 6.b.vi
} catch (e) {
closeIfAbrupt(ThrowCompletion(e)); // steps 3.b.v, 3.b.vii
closeIfAbrupt(ThrowCompletion(e)); // steps 6.b.v, 6.b.vii
}
var innerAlive = true; // step 3.b.viii
while (innerAlive) { // step 3.b.ix
var innerAlive = true; // step 6.b.viii
while (innerAlive) { // step 6.b.ix
try {
var innerNext = IteratorStep(innerIterator); // step 3.b.ix.1
var innerNext = IteratorStep(innerIterator); // step 6.b.ix.1
} catch (e) {
closeIfAbrupt(ThrowCompletion(e)); // step 3.b.ix.2
closeIfAbrupt(ThrowCompletion(e)); // step 6.b.ix.2
}
if (!innerNext) {
innerAlive = false; // step 3.b.ix.3.a
} else { // step 3.b.ix.4
innerAlive = false; // step 6.b.ix.3.a
} else { // step 6.b.ix.4
var innerValue;
try {
innerValue = IteratorValue(innerNext); // step 3.b.ix.4.a
innerValue = IteratorValue(innerNext); // step 6.b.ix.4.a
} catch (e) {
closeIfAbrupt(ThrowCompletion(e)); // step 3.b.ix.4.b
closeIfAbrupt(ThrowCompletion(e)); // step 6.b.ix.4.b
}
return innerValue; // step 3.b.ix.4.c
return innerValue; // step 6.b.ix.4.c
}
}
} finally {
counter += 1; // step 3.b.x
counter += 1; // step 6.b.x
}

@@ -91,3 +97,7 @@ // }

return CreateIteratorFromClosure(closure, 'Iterator Helper', iterHelperProto); // step 4
var result = CreateIteratorFromClosure(closure, 'Iterator Helper', iterHelperProto, ['[[UnderlyingIterator]]']); // step 7
SLOT.set(result, '[[UnderlyingIterator]]', iterated); // step 8
return result; // step 9
};

@@ -14,21 +14,27 @@ 'use strict';

var ThrowCompletion = require('es-abstract/2022/ThrowCompletion');
var Type = require('es-abstract/2022/Type');
module.exports = function forEach(fn) {
var iterated = GetIteratorDirect(this); // step 1
var O = this; // step 1
if (Type(O) !== 'Object') {
throw new $TypeError('`this` value must be an Object'); // step 2
}
if (!IsCallable(fn)) {
throw new $TypeError('`fn` must be a function'); // step 2
throw new $TypeError('`fn` must be a function'); // step 3
}
var counter = 0; // step 3
var iterated = GetIteratorDirect(O); // step 4
var counter = 0; // step 5
// eslint-disable-next-line no-constant-condition
while (true) { // step 4
var next = IteratorStep(iterated); // step 4.a
while (true) { // step 6
var next = IteratorStep(iterated); // step 6.a
if (!next) {
return void undefined; // step 4.b
return void undefined; // step 6.b
}
var value = IteratorValue(next); // step 4.c
var value = IteratorValue(next); // step 6.c
try {
Call(fn, void undefined, [value, counter]); // step 4.d
Call(fn, void undefined, [value, counter]); // step 6.d
} catch (e) {

@@ -38,8 +44,8 @@ IteratorClose(

ThrowCompletion(e)
); // steps 4.e
); // steps 6.e
throw e;
} finally {
counter += 1; // step 4.f
counter += 1; // step 6.f
}
}
};

@@ -16,2 +16,3 @@ 'use strict';

var ThrowCompletion = require('es-abstract/2022/ThrowCompletion');
var Type = require('es-abstract/2022/Type');

@@ -23,8 +24,13 @@ var iterHelperProto = require('../IteratorHelperPrototype');

module.exports = function map(mapper) {
var iterated = GetIteratorDirect(this); // step 1
var O = this; // step 1
if (Type(O) !== 'Object') {
throw new $TypeError('`this` value must be an Object'); // step 2
}
if (!IsCallable(mapper)) {
throw new $TypeError('`mapper` must be a function'); // step 2
throw new $TypeError('`mapper` must be a function'); // step 3
}
var iterated = GetIteratorDirect(O); // step 4
var closeIfAbrupt = function (abruptCompletion) {

@@ -41,23 +47,23 @@ if (!(abruptCompletion instanceof CompletionRecord)) {

var sentinel = {};
var counter = 0; // step 3.a
var counter = 0; // step 6.a
var closure = function () {
// while (true) { // step 3.b
var next = IteratorStep(iterated); // step 3.b.i
// while (true) { // step 6.b
var next = IteratorStep(iterated); // step 6.b.i
if (!next) {
// return void undefined; // step 3.b.ii
// return void undefined; // step 6.b.ii
return sentinel;
}
var value = IteratorValue(next); // step 3.b.iii
var value = IteratorValue(next); // step 6.b.iii
var mapped;
try {
mapped = Call(mapper, void undefined, [value, counter]); // step 3.b.iv
// yield mapped // step 3.b.vi
mapped = Call(mapper, void undefined, [value, counter]); // step 6.b.iv
// yield mapped // step 6.b.vi
return mapped;
} catch (e) {
// close iterator // step 3.b.v, 3.b.vii
// close iterator // step 6.b.v, 6.b.vii
closeIfAbrupt(ThrowCompletion(e));
throw e;
} finally {
counter += 1; // step 3.b.viii
counter += 1; // step 6.b.viii
}

@@ -69,3 +75,7 @@ // }

return CreateIteratorFromClosure(closure, 'Iterator Helper', iterHelperProto); // step 4
var result = CreateIteratorFromClosure(closure, 'Iterator Helper', iterHelperProto, ['[[UnderlyingIterator]]']); // step 7
SLOT.set(result, '[[UnderlyingIterator]]', iterated); // step 8
return result; // step 9
};

@@ -14,22 +14,28 @@ 'use strict';

var ThrowCompletion = require('es-abstract/2022/ThrowCompletion');
var Type = require('es-abstract/2022/Type');
module.exports = function reduce(reducer) {
var iterated = GetIteratorDirect(this); // step 1
var O = this; // step 1
if (Type(O) !== 'Object') {
throw new $TypeError('`this` value must be an Object'); // step 2
}
if (!IsCallable(reducer)) {
throw new $TypeError('`reducer` must be a function'); // step 2
throw new $TypeError('`reducer` must be a function'); // step 3
}
var iterated = GetIteratorDirect(O); // step 4
var accumulator;
var counter;
var next;
if (arguments.length < 2) { // step 3
next = IteratorStep(iterated); // step 3.a
if (arguments.length < 2) { // step 6
next = IteratorStep(iterated); // step 6.a
if (!next) {
throw new $TypeError('Reduce of empty iterator with no initial value'); // step 3.b
throw new $TypeError('Reduce of empty iterator with no initial value'); // step 6.b
}
accumulator = IteratorValue(next); // step 3.c
accumulator = IteratorValue(next); // step 6.c
counter = 1;
} else { // step 4
accumulator = arguments[1]; // step 4.a
} else { // step 7
accumulator = arguments[1]; // step 7.a
counter = 0;

@@ -39,13 +45,13 @@ }

// eslint-disable-next-line no-constant-condition
while (true) { // step 5
next = IteratorStep(iterated); // step 5.a
while (true) { // step 8
next = IteratorStep(iterated); // step 8.a
if (!next) {
return accumulator; // step 5.b
return accumulator; // step 8.b
}
var value = IteratorValue(next); // step 5.c
var value = IteratorValue(next); // step 8.c
try {
var result = Call(reducer, void undefined, [accumulator, value, counter]); // step 5.d
accumulator = result; // step 5.f
var result = Call(reducer, void undefined, [accumulator, value, counter]); // step 8.d
accumulator = result; // step 8.f
} catch (e) {
// close iterator // step 5.e
// close iterator // step 8.e
IteratorClose(

@@ -56,4 +62,4 @@ iterated,

}
counter += 1; // step 5.g
counter += 1; // step 8.g
}
};

@@ -16,24 +16,30 @@ 'use strict';

var ToBoolean = require('es-abstract/2022/ToBoolean');
var Type = require('es-abstract/2022/Type');
module.exports = function some(predicate) {
var iterated = GetIteratorDirect(this); // step 1
var O = this; // step 1
if (Type(O) !== 'Object') {
throw new $TypeError('`this` value must be an Object'); // step 2
}
if (!IsCallable(predicate)) {
throw new $TypeError('`predicate` must be a function'); // step 2
throw new $TypeError('`predicate` must be a function'); // step 3
}
var counter = 0; // step 3
var iterated = GetIteratorDirect(O); // step 4
var counter = 0; // step 5
// eslint-disable-next-line no-constant-condition
while (true) { // step 4
var next = IteratorStep(iterated); // step 4.a
while (true) { // step 6
var next = IteratorStep(iterated); // step 6.a
if (!next) {
return false; // step 4.b
return false; // step 6.b
}
var value = IteratorValue(next); // step 4.c
var value = IteratorValue(next); // step 6.c
var result;
try {
result = Call(predicate, void undefined, [value, counter]); // step 4.d
result = Call(predicate, void undefined, [value, counter]); // step 6.d
} catch (e) {
// close iterator // step 4.e
// close iterator // step 6.e
IteratorClose(

@@ -44,3 +50,3 @@ iterated,

} finally {
counter += 1; // step 4.g
counter += 1; // step 6.g
}

@@ -51,5 +57,5 @@ if (ToBoolean(result)) {

NormalCompletion(true)
); // step 4.f
); // step 6.f
}
}
};

@@ -17,2 +17,3 @@ 'use strict';

var ToNumber = require('es-abstract/2022/ToNumber');
var Type = require('es-abstract/2022/Type');

@@ -26,3 +27,6 @@ var iterHelperProto = require('../IteratorHelperPrototype');

module.exports = function take(limit) {
var iterated = GetIteratorDirect(this); // step 1
var O = this; // step 1
if (Type(O) !== 'Object') {
throw new $TypeError('`this` value must be an Object'); // step 2
}

@@ -34,5 +38,7 @@ var numLimit = ToNumber(limit); // step 2

var integerLimit = ToIntegerOrInfinity(numLimit); // step 4
var iterated = GetIteratorDirect(O); // step 4
var integerLimit = ToIntegerOrInfinity(numLimit); // step 7
if (integerLimit < 0) {
throw new $RangeError('`limit` must be a >= 0'); // step 5
throw new $RangeError('`limit` must be a >= 0'); // step 8
}

@@ -51,7 +57,7 @@

var sentinel = {};
var remaining = integerLimit; // step 6.a
var closure = function () { // step 6
// while (true) { // step 6.b
if (remaining === 0) { // step 6.b.i
return IteratorClose( // step 6.b.i.1
var remaining = integerLimit; // step 9.a
var closure = function () { // step 9
// while (true) { // step 9.b
if (remaining === 0) { // step 9.b.i
return IteratorClose( // step 9.b.i.1
iterated,

@@ -61,14 +67,14 @@ NormalCompletion(sentinel)

}
if (remaining !== Infinity) { // step 6.b.ii
remaining -= 1; // step 6.b.ii.1
if (remaining !== Infinity) { // step 9.b.ii
remaining -= 1; // step 9.b.ii.1
}
var next = IteratorStep(iterated); // step 6.b.iii
var next = IteratorStep(iterated); // step 9.b.iii
if (!next) {
// return void undefined; // step 6.b.iv
// return void undefined; // step 9.b.iv
return sentinel;
}
var value = IteratorValue(next); // step 3.b.iii
return value; // step 3.b.iv
var value = IteratorValue(next); // step 9.b.iii
return value; // step 9.b.iv
// }

@@ -79,3 +85,7 @@ };

return CreateIteratorFromClosure(closure, 'Iterator Helper', iterHelperProto); // step 4
var result = CreateIteratorFromClosure(closure, 'Iterator Helper', iterHelperProto, ['[[UnderlyingIterator]]']); // step 7
SLOT.set(result, '[[UnderlyingIterator]]', iterated); // step 8
return result; // step 9
};
'use strict';
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
var GetIteratorDirect = require('../aos/GetIteratorDirect');
var IteratorStep = require('../aos/IteratorStep');
var IteratorValue = require('es-abstract/2022/IteratorValue');
var Type = require('es-abstract/2022/Type');
var GetIteratorDirect = require('../aos/GetIteratorDirect');
var callBound = require('call-bind/callBound');

@@ -13,15 +17,21 @@

module.exports = function toArray() {
var iterated = GetIteratorDirect(this); // step 1
var O = this; // step 1
var items = []; // step 2
if (Type(O) !== 'Object') {
throw new $TypeError('`this` value must be an Object'); // step 2
}
var iterated = GetIteratorDirect(O); // step 3
var items = []; // step 4
// eslint-disable-next-line no-constant-condition
while (true) { // step 3
var next = IteratorStep(iterated); // step 3.a
while (true) { // step 5
var next = IteratorStep(iterated); // step 5.a
if (!next) {
return items; // step 3.b
return items; // step 5.b
}
var value = IteratorValue(next); // step 3.c
$push(items, value); // step 3.d
var value = IteratorValue(next); // step 5.c
$push(items, value); // step 5.d
}
};

@@ -5,9 +5,12 @@ 'use strict';

var hasProto = require('has-proto')();
var iterProto = require('iterator.prototype');
var SLOT = require('internal-slot');
var CompletionRecord = require('es-abstract/2022/CompletionRecord');
var CreateIterResultObject = require('es-abstract/2015/CreateIterResultObject');
var GeneratorResume = require('../aos/GeneratorResume');
var GeneratorResumeAbrupt = require('../aos/GeneratorResumeAbrupt');
var IteratorClose = require('../aos/IteratorClose');
var NormalCompletion = require('es-abstract/2022/NormalCompletion');
var iterProto = require('iterator.prototype');
var implementation;

@@ -21,4 +24,17 @@ if (hasProto) {

'return': function () {
var C = new CompletionRecord('return', void undefined); // step 1
return GeneratorResumeAbrupt(this, C, 'Iterator Helper');
var O = this; // step 1
SLOT.assert(O, '[[UnderlyingIterator]]'); // step 2
SLOT.assert(O, '[[GeneratorState]]'); // step 3
if (SLOT.get(O, '[[GeneratorState]]') === 'suspendedStart') { // step 4
SLOT.set(O, '[[GeneratorState]]', 'completed'); // step 4.a
IteratorClose(SLOT.get(O, '[[UnderlyingIterator]]'), NormalCompletion('unused')); // step 4.c
return CreateIterResultObject(void undefined, true); // step 4.d
}
var C = new CompletionRecord('return', void undefined); // step 5
return GeneratorResumeAbrupt(O, C, 'Iterator Helper'); // step 6
}

@@ -25,0 +41,0 @@ };

{
"name": "es-iterator-helpers",
"version": "1.0.3",
"version": "1.0.4",
"description": "An ESnext spec-compliant iterator helpers shim/polyfill/replacement that works as far down as ES3.",

@@ -5,0 +5,0 @@ "main": "index.json",

@@ -5,3 +5,2 @@ 'use strict';

var test = require('tape');
var callBind = require('call-bind');
var functionsHaveNames = require('functions-have-names')();

@@ -39,3 +38,3 @@

test('Iterator: implementation', function (t) {
module.exports.tests(callBind(impl, null), 'Iterator', t);
module.exports.tests(impl, 'Iterator', t);

@@ -42,0 +41,0 @@ t.end();

@@ -27,3 +27,3 @@ 'use strict';

t['throws'](
function () { drop(nonIterator); },
function () { drop(nonIterator, 0); },
TypeError,

@@ -35,3 +35,3 @@ debug(nonIterator) + ' is not an Object with a callable `next` method'

t['throws'](
function () { drop(badNext); },
function () { drop(badNext, 0); },
TypeError,

@@ -88,2 +88,124 @@ debug(badNext) + ' is not an Object with a callable `next` method'

});
t.test('262: test/built-ins/Iterator/prototype/drop/return-is-forwarded', function (st) {
var returnCount = 0;
var makeBadIterator = function makeBadIterator() {
return {
next: function next() {
return {
done: false,
value: 1
};
},
'return': function () {
returnCount += 1;
return {};
}
};
};
var iter1 = drop(makeBadIterator(), 0);
st.equal(returnCount, 0, 'iter1, before return()');
iter1['return']();
st.equal(returnCount, 1, 'iter1, after return()');
var iter2 = drop(makeBadIterator(), 1);
st.equal(returnCount, 1, 'iter2, before return()');
iter2['return']();
st.equal(returnCount, 2, 'iter2, after return()');
// 5 drops (i wish i had pipeline)
var iter3 = drop(
drop(
drop(
drop(
drop(
makeBadIterator(),
1
),
1
),
1
),
1
),
1
);
st.equal(returnCount, 2, 'iter3, before return()');
iter3['return']();
st.equal(returnCount, 3, 'iter3, after return()');
st.end();
});
t.test('262: test/built-ins/Iterator/prototype/drop/return-is-not-forwarded-after-exhaustion', { skip: !hasPropertyDescriptors }, function (st) {
var makeBadIterator = function makeBadIterator() {
return {
next: function next() {
return {
done: true,
value: undefined
};
},
'return': function () {
throw new SyntaxError();
}
};
};
var iter1 = drop(makeBadIterator(), 0);
st['throws'](
function () { iter1['return'](); },
SyntaxError,
'iter1, return() throws'
);
iter1.next();
iter1['return']();
var iter2 = drop(makeBadIterator(), 1);
st['throws'](
function () { iter2['return'](); },
SyntaxError,
'iter2, return() throws'
);
iter2.next();
iter2['return']();
// 5 drops (i wish i had pipeline)
var iter3 = drop(
drop(
drop(
drop(
drop(
makeBadIterator(),
1
),
1
),
1
),
1
),
1
);
st['throws'](
function () { iter3['return'](); },
SyntaxError,
'iter3, return() throws'
);
iter3.next();
iter3['return']();
var iter4 = drop(makeBadIterator(), 10);
st['throws'](
function () { iter4['return'](); },
SyntaxError,
'iter4, return() throws'
);
iter4.next();
iter4['return']();
st.end();
});
},

@@ -90,0 +212,0 @@ index: function () {

@@ -183,2 +183,72 @@ 'use strict';

});
t.test('262: test/built-ins/Iterator/prototype/drop/return-is-forwarded', function (st) {
var returnCount = 0;
var badIterator = {
next: function next() {
return {
done: false,
value: 1
};
},
'return': function () {
returnCount += 1;
return {};
}
};
var iter1 = filter(badIterator, function () { return false; });
st.equal(returnCount, 0, 'iter1, before return()');
iter1['return']();
st.equal(returnCount, 1, 'iter1, after return()');
st.end();
});
t.test('262: test/built-ins/Iterator/prototype/drop/return-is-not-forwarded-after-exhaustion', { skip: !hasPropertyDescriptors }, function (st) {
var makeBadIterator = function makeBadIterator() {
return {
next: function next() {
return {
done: true,
value: undefined
};
},
'return': function () {
throw new SyntaxError();
}
};
};
var iter1 = filter(makeBadIterator(), function () { return true; });
st['throws'](
function () { iter1['return'](); },
SyntaxError,
'iter1, return() throws'
);
iter1.next();
iter1['return']();
// 3 filters (i wish i had pipeline)
var iter2 = filter(
filter(
filter(
makeBadIterator(),
function () { return true; }
),
function () { return true; }
),
function () { return true; }
);
st['throws'](
function () { iter2['return'](); },
SyntaxError,
'iter2, return() throws'
);
iter2.next();
iter2['return']();
st.end();
});
},

@@ -185,0 +255,0 @@ index: function () {

@@ -26,3 +26,3 @@ 'use strict';

t['throws'](
function () { take(nonIterator); },
function () { take(nonIterator, 0); },
TypeError,

@@ -34,3 +34,3 @@ debug(nonIterator) + ' is not an Object with a callable `next` method'

t['throws'](
function () { take(badNext); },
function () { take(badNext, 0); },
TypeError,

@@ -37,0 +37,0 @@ debug(badNext) + ' is not an Object with a callable `next` method'

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc