fuse-box
Version:
Fuse-Box a bundler that does it right
62 lines (61 loc) • 1.89 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.createInterceptor = void 0;
function createInterceptor() {
const subscriptions = new Map();
let promises = [];
// adds an interceptor
function add(key, fn) {
let fns = [];
if (!subscriptions.has(key)) {
subscriptions.set(key, fns);
}
else {
fns = subscriptions.get(key);
}
fns.push(fn);
}
const on = function (key, fn) {
add(key, fn);
};
return {
on,
promise: function (fn) {
promises.push(fn());
},
resolve: async function () {
const res = await Promise.all(promises);
promises = [];
return res;
},
send: async function (key, props) {
if (subscriptions.has(key)) {
const fns = subscriptions.get(key);
const responses = [];
for (let fn of fns) {
responses.push(await fn(props));
}
if (responses.length > 0) {
// return the latest response
return responses[responses.length - 1];
}
}
return props;
},
// sync (emit an even which should return an according props
sync: function (key, props) {
if (subscriptions.has(key)) {
const fns = subscriptions.get(key);
const responses = fns.map(fn => fn(props));
if (responses.length > 0) {
// return the latest response
return responses[responses.length - 1];
}
}
return props;
},
waitFor: on,
getPromises: () => promises,
};
}
exports.createInterceptor = createInterceptor;
;