UNPKG

tc39-weakrefs-shim

Version:
30 lines 1.08 kB
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