tc39-weakrefs-shim
Version:
Shim for TC39 Weakrefs proposal
34 lines • 1.26 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
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;
},
};
}
exports.createWeakRefJobs = createWeakRefJobs;
function createWeakRefJobsForTaskQueue(setTask, hooks = {}) {
const jobs = createWeakRefJobs(() => setTask(jobs.clearKeptObjects), hooks);
return jobs;
}
exports.createWeakRefJobsForTaskQueue = createWeakRefJobsForTaskQueue;
//# sourceMappingURL=WeakRefJobs.js.map