tc39-weakrefs-shim
Version:
Shim for TC39 Weakrefs proposal
53 lines • 1.43 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
function makeTaskQueue(register, letCallbackErrorsBubble = false) {
const queue = new Array(1);
function set(callback, ...args) {
const queueId = queue.length;
queue[queueId] = { callback, args };
let error;
try {
if (!register(queueId))
error = new Error("Failed to register task");
}
catch (err) {
error = err;
}
if (error) {
delete queue[queueId];
throw error;
}
return queueId;
}
function clear(queueId) {
delete queue[queueId];
}
function processBubble(queueId) {
if (!(queueId in queue))
return;
const { callback, args } = queue[queueId];
delete queue[queueId];
callback(...args);
}
function processCatch(queueId) {
if (!(queueId in queue))
return;
const { callback, args } = queue[queueId];
delete queue[queueId];
try {
callback(...args);
}
catch (err) {
setTimeout(() => {
throw err;
}, 0);
}
}
return {
set,
clear,
process: letCallbackErrorsBubble ? processBubble : processCatch,
};
}
exports.default = makeTaskQueue;
//# sourceMappingURL=taskQueue.js.map