UNPKG

tc39-weakrefs-shim

Version:
38 lines 1.65 kB
// @ts-ignore import WeakTag from "@mhofman/weak-napi-native/weak-tag.js"; // @ts-ignore import ObjectInfo from "@mhofman/weak-napi-native/object-info.js"; import { createWeakRefClassShim } from "../internal/WeakRef.js"; import { createFinalizationGroupClassShim } from "../internal/FinalizationGroup.js"; import { createWeakRefJobsForTaskQueue } from "../internal/WeakRefJobs.js"; import { createFinalizationGroupJobsForTaskQueue } from "../internal/FinalizationGroupJobs.js"; import { setImmediate } from "../utils/tasks/setImmediate.js"; export { gc } from "./gc.js"; const tagCollector = new WeakMap(); const observedInfos = new Set(); function finalizedCallback() { if (!observedInfos.has(this)) return; observedInfos.delete(this); finalizationGroupJobs.setFinalized(this); } function getInfo(target) { let objectDetails = tagCollector.get(target); if (!objectDetails) { const info = new ObjectInfo(target, finalizedCallback); objectDetails = { info, tag: new WeakTag(info) }; tagCollector.set(target, objectDetails); } return objectDetails.info; } const finalizationGroupJobs = createFinalizationGroupJobsForTaskQueue(setImmediate, { registerObjectInfo: info => { observedInfos.add(info); }, unregisterObjectInfo: info => { observedInfos.delete(info); }, }); export const [WeakRef] = createWeakRefClassShim(createWeakRefJobsForTaskQueue(setImmediate), getInfo, info => info.target); export const FinalizationGroup = createFinalizationGroupClassShim(finalizationGroupJobs, getInfo, info => observedInfos.has(info)); //# sourceMappingURL=index.js.map