UNPKG

tc39-weakrefs-shim

Version:
44 lines 2.05 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); // @ts-ignore const weak_tag_js_1 = __importDefault(require("@mhofman/weak-napi-native/weak-tag.js")); // @ts-ignore const object_info_js_1 = __importDefault(require("@mhofman/weak-napi-native/object-info.js")); const WeakRef_js_1 = require("../internal/WeakRef.js"); const FinalizationGroup_js_1 = require("../internal/FinalizationGroup.js"); const WeakRefJobs_js_1 = require("../internal/WeakRefJobs.js"); const FinalizationGroupJobs_js_1 = require("../internal/FinalizationGroupJobs.js"); const setImmediate_js_1 = require("../utils/tasks/setImmediate.js"); var gc_js_1 = require("./gc.js"); exports.gc = gc_js_1.gc; 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 object_info_js_1.default(target, finalizedCallback); objectDetails = { info, tag: new weak_tag_js_1.default(info) }; tagCollector.set(target, objectDetails); } return objectDetails.info; } const finalizationGroupJobs = FinalizationGroupJobs_js_1.createFinalizationGroupJobsForTaskQueue(setImmediate_js_1.setImmediate, { registerObjectInfo: info => { observedInfos.add(info); }, unregisterObjectInfo: info => { observedInfos.delete(info); }, }); exports.WeakRef = WeakRef_js_1.createWeakRefClassShim(WeakRefJobs_js_1.createWeakRefJobsForTaskQueue(setImmediate_js_1.setImmediate), getInfo, info => info.target)[0]; exports.FinalizationGroup = FinalizationGroup_js_1.createFinalizationGroupClassShim(finalizationGroupJobs, getInfo, info => observedInfos.has(info)); //# sourceMappingURL=index.js.map