tc39-weakrefs-shim
Version:
Shim for TC39 Weakrefs proposal
30 lines • 1.08 kB
JavaScript
export function createWeakRefJobs(scheduleClearKeptObjects, hooks = {}) {
const keptAliveDuringJob = new Set();
return {
keepDuringJob(object) {
if (keptAliveDuringJob.has(object))
return;
keptAliveDuringJob.add(object);
if (hooks.holdObject)
hooks.holdObject(object);
if (keptAliveDuringJob.size == 1)
scheduleClearKeptObjects();
},
clearKeptObjects() {
for (const object of keptAliveDuringJob) {
// One by one to stay consistent with releaseObject
keptAliveDuringJob.delete(object);
if (hooks.releaseObject)
hooks.releaseObject(object);
}
},
get isKeepingObjects() {
return keptAliveDuringJob.size > 0;
},
};
}
export function createWeakRefJobsForTaskQueue(setTask, hooks = {}) {
const jobs = createWeakRefJobs(() => setTask(jobs.clearKeptObjects), hooks);
return jobs;
}
//# sourceMappingURL=WeakRefJobs.js.map