Show More
Commit Description:
merge
Commit Description:
merge
References:
File last commit:
Show/Diff file:
Action:
node_modules/es6-iterator/#/chain.js
| 40 lines
| 1.1 KiB
| application/javascript
| JavascriptLexer
|
r789 | "use strict"; | |||
var setPrototypeOf = require("es5-ext/object/set-prototype-of") | ||||
, d = require("d") | ||||
, Iterator = require("../") | ||||
, validIterable = require("../valid-iterable") | ||||
, push = Array.prototype.push | ||||
, defineProperties = Object.defineProperties | ||||
, IteratorChain; | ||||
IteratorChain = function (iterators) { | ||||
defineProperties(this, { | ||||
__iterators__: d("", iterators), | ||||
__current__: d("w", iterators.shift()) | ||||
}); | ||||
}; | ||||
if (setPrototypeOf) setPrototypeOf(IteratorChain, Iterator); | ||||
IteratorChain.prototype = Object.create(Iterator.prototype, { | ||||
constructor: d(IteratorChain), | ||||
next: d(function () { | ||||
var result; | ||||
if (!this.__current__) return { done: true, value: undefined }; | ||||
result = this.__current__.next(); | ||||
while (result.done) { | ||||
this.__current__ = this.__iterators__.shift(); | ||||
if (!this.__current__) return { done: true, value: undefined }; | ||||
result = this.__current__.next(); | ||||
} | ||||
return result; | ||||
}) | ||||
}); | ||||
module.exports = function () { | ||||
var iterators = [this]; | ||||
push.apply(iterators, arguments); | ||||
iterators.forEach(validIterable); | ||||
return new IteratorChain(iterators); | ||||
}; | ||||