alinea
Version:
Headless git-based CMS
51 lines (49 loc) • 1 kB
JavaScript
import "../../chunks/chunk-NZLE2WMY.js";
// src/cli/util/Emitter.ts
function createEmitter({
onReturn,
onThrow
} = {}) {
const queue = [];
let resolve;
const push = (p) => {
queue.push(p);
if (resolve) {
resolve();
resolve = void 0;
}
};
const iterator = {
async next() {
while (!queue.length) {
await new Promise((_) => resolve = _);
}
const current = queue.pop();
switch (current.type) {
case "emit":
return { value: current.value, done: false };
case "error":
throw current.value;
case "finish":
return { value: void 0, done: true };
}
}
};
return {
emit: (value) => push({ type: "emit", value }),
throw(e) {
onThrow?.(e);
push({ type: "error", value: e });
},
return() {
onReturn?.();
push({ type: "finish" });
},
[Symbol.asyncIterator]() {
return iterator;
}
};
}
export {
createEmitter
};