UNPKG

iterama

Version:

Composable functional (async) iterable helpers

57 lines (41 loc) 1.11 kB
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.takeAsync = void 0; var _circularr = _interopRequireDefault(require("circularr")); var _iterate = require("./iterate"); const takeFirstAsync = n => iterable => ({ async *[Symbol.asyncIterator]() { if (n <= 0) { return; } let i = 0; for await (const value of iterable) { yield value; if (++i >= n) { break; } } } }); const takeLastAsync = n => iterable => ({ async *[Symbol.asyncIterator]() { const last = new _circularr.default(n); let numValues = 0; for await (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 takeAsync = n => n < 0 ? takeLastAsync(-n) : takeFirstAsync(n); exports.takeAsync = takeAsync;