UNPKG

iterama

Version:

Composable functional (async) iterable helpers

58 lines (41 loc) 1.24 kB
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.skipAsync = void 0; var _circularr = _interopRequireDefault(require("circularr")); var _iterateAsync = require("./iterate-async"); const skipFirstAsync = n => iterable => ({ async *[Symbol.asyncIterator]() { const asyncGenerator = (0, _iterateAsync.iterateAsync)(iterable); let i = 0; while (i < n) { const result = await asyncGenerator.next(); if (result.done) { break; } i++; } for await (const value of asyncGenerator) { yield value; } } }); const skipLastAsync = n => iterable => ({ async *[Symbol.asyncIterator]() { const asyncGenerator = (0, _iterateAsync.iterateAsync)(iterable); const last = new _circularr.default(n); for (let i = 0; i < n; i++) { const result = await asyncGenerator.next(); if (result.done) { break; } last.shift(result.value); } for await (const value of asyncGenerator) { yield last.shift(value); } } }); const skipAsync = n => n < 0 ? skipLastAsync(-n) : skipFirstAsync(n); exports.skipAsync = skipAsync;