grafserv
Version:
A highly optimized server for GraphQL, powered by Grafast
67 lines • 2.09 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.mapIterator = mapIterator;
function mapIterator(iterable, cb, end, initial) {
const iterator = iterable[Symbol.asyncIterator]();
/**
* -1 - starting
* 0 - normal
* 1 - ending
* 2 - ended
*/
let status = -1;
const mappedIterator = {
async [Symbol.asyncDispose]() {
await this.return(undefined);
},
next() {
if (status === -1) {
status = 0;
if (typeof initial === "function") {
return Promise.resolve({ value: initial(), done: false });
}
}
if (status === 1) {
status = 2;
}
// NO 'else' here!
if (status === 2) {
return Promise.resolve({ value: undefined, done: true });
}
const next = iterator.next();
return next.then((v) => {
if (v.done) {
if (v.value !== undefined) {
throw new Error("Invalid assumption; tell Benjie he did bad.");
}
if (end) {
status = 1;
return { value: end(), done: false };
}
else {
status = 2;
return { value: undefined, done: true };
}
}
else {
return { value: cb(v.value), done: false };
}
});
},
return(value) {
status = 2;
iterator.return?.(value);
return Promise.resolve({ value: undefined, done: true });
},
throw(error) {
status = 2;
iterator.throw?.(error);
return Promise.reject(error);
},
[Symbol.asyncIterator]() {
return this;
},
};
return mappedIterator;
}
//# sourceMappingURL=mapIterator.js.map