@thi.ng/transducers-async
Version:
Async versions of various highly composable transducers, reducers and iterators
32 lines (31 loc) • 730 B
JavaScript
import { compR } from "./compr.js";
import { iterator1 } from "./iterator.js";
function intercept(interceptors = [], src) {
if (src) return iterator1(intercept(interceptors), src);
const xform = (rfn) => compR(rfn, async (acc, x) => {
for (let fn of interceptors) {
const res = await fn(x);
if (res == null) return acc;
x = res;
}
return rfn[2](acc, x);
});
xform.prepend = (fn) => {
interceptors.unshift(fn);
};
xform.append = (fn) => {
interceptors.push(fn);
};
xform.remove = (fn) => {
const idx = interceptors.indexOf(fn);
if (idx >= 0) {
interceptors.splice(idx, 1);
return true;
}
return false;
};
return xform;
}
export {
intercept
};