UNPKG

1.23 kBJavaScriptView Raw
1'use strict';
2var $ = require('../internals/export');
3var call = require('../internals/function-call');
4var anObject = require('../internals/an-object');
5var getIteratorDirect = require('../internals/get-iterator-direct');
6var notANaN = require('../internals/not-a-nan');
7var toPositiveInteger = require('../internals/to-positive-integer');
8var createIteratorProxy = require('../internals/iterator-create-proxy');
9var IS_PURE = require('../internals/is-pure');
10
11var IteratorProxy = createIteratorProxy(function () {
12 var iterator = this.iterator;
13 var next = this.next;
14 var result, done;
15 while (this.remaining) {
16 this.remaining--;
17 result = anObject(call(next, iterator));
18 done = this.done = !!result.done;
19 if (done) return;
20 }
21 result = anObject(call(next, iterator));
22 done = this.done = !!result.done;
23 if (!done) return result.value;
24});
25
26// `Iterator.prototype.drop` method
27// https://github.com/tc39/proposal-iterator-helpers
28$({ target: 'Iterator', proto: true, real: true, forced: IS_PURE }, {
29 drop: function drop(limit) {
30 anObject(this);
31 var remaining = toPositiveInteger(notANaN(+limit));
32 return new IteratorProxy(getIteratorDirect(this), {
33 remaining: remaining
34 });
35 }
36});