node/tools/eslint/node_modules/es6-iterator/#/chain.js
Michaël Zasso 2d441493a4 tools: update eslint to v1.10.3
PR-URL: https://github.com/nodejs/io.js/pull/2286
Reviewed-By: Roman Reiss <me@silverwind.io>
2016-01-13 23:15:39 +01:00

41 lines
1.1 KiB
JavaScript

'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);
};