iterama
Version:
Composable functional (async) iterable helpers
58 lines (41 loc) • 1.24 kB
JavaScript
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;