UNPKG

iterama

Version:

Composable functional (async) iterable helpers

57 lines (41 loc) 1.04 kB
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.take = void 0; var _circularr = _interopRequireDefault(require("circularr")); var _iterate = require("./iterate"); const takeFirst = n => iterable => ({ *[Symbol.iterator]() { if (n <= 0) { return; } let i = 0; for (const value of iterable) { yield value; if (++i >= n) { break; } } } }); const takeLast = n => iterable => ({ *[Symbol.iterator]() { const last = new _circularr.default(n); let numValues = 0; for (const value of iterable) { last.shift(value); ++numValues; } const iterator = (0, _iterate.iterate)(last); const offset = last.length - numValues; for (let i = 0; i < offset; i++) { iterator.next(); } for (const value of iterator) { yield value; } } }); const take = n => n < 0 ? takeLast(-n) : takeFirst(n); exports.take = take;