@simplito/privmx-webendpoint
Version:
PrivMX Web Endpoint library
50 lines (49 loc) • 1.56 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.FinalizationHelper = void 0;
const ApiStatic_1 = require("./api/ApiStatic");
class FinalizationHelper {
wasmLib;
static instance;
static wasmLib;
static init(wasmLib) {
FinalizationHelper.wasmLib = wasmLib;
}
static getInstance() {
if (!FinalizationHelper.wasmLib) {
throw new Error("Initialize first with the WASM Library object");
}
if (!this.instance) {
this.instance = new FinalizationHelper(FinalizationHelper.wasmLib);
}
return this.instance;
}
finalizationRegistry;
finalizationQueue = [];
scheduler = null;
constructor(wasmLib) {
this.wasmLib = wasmLib;
this.finalizationRegistry = new FinalizationRegistry((onCleanup) => {
const api = ApiStatic_1.ApiStatic.getInstance();
this.finalizationQueue.push(onCleanup.onFree);
this.scheduleCleanup();
});
}
scheduleCleanup() {
if (this.scheduler) {
return;
}
this.scheduler = setTimeout(async () => {
for (const freeCall of this.finalizationQueue) {
await freeCall();
}
this.finalizationQueue = [];
clearTimeout(this.scheduler);
this.scheduler = null;
}, 1000);
}
register(target, info) {
this.finalizationRegistry.register(target, info, target);
}
}
exports.FinalizationHelper = FinalizationHelper;