UNPKG

tc39-weakrefs-shim

Version:
52 lines 1.85 kB
import globalAvailable from "./global/available.js"; import nodeAvailable from "./node/available.js"; import spidermonkeyAvailable from "./spidermonkey/available.js"; function testKnownImplementationIssues(WeakRef, FinalizationGroup) { try { const finalizationGroup = new FinalizationGroup(() => { }); if (finalizationGroup.unregister({}) !== false) return false; try { finalizationGroup.cleanupSome({}); return false; } catch (err) { } } catch (err) { return false; } return true; } export const available = globalAvailable || spidermonkeyAvailable || nodeAvailable; export async function shim(wrapBrokenImplementation = true) { let implementation; if (globalAvailable) { implementation = await import("./global/index.js"); if (wrapBrokenImplementation && !testKnownImplementationIssues(implementation.WeakRef, implementation.FinalizationGroup)) { implementation = (await import("./wrapper.js")).wrap(implementation.WeakRef, implementation.FinalizationGroup, implementation.gc); } } else if (spidermonkeyAvailable) { implementation = await import("./spidermonkey/index.js"); } else if (nodeAvailable) { implementation = await import("./node/index.js"); } else { implementation = { WeakRef: undefined, FinalizationGroup: undefined }; } return implementation; } let asyncImportPromise; // Easy use of the shim with dynamic import export function then(onfulfilled, onrejected) { if (!asyncImportPromise) asyncImportPromise = shim().then(exports => ({ shim, available, ...exports, })); return asyncImportPromise.then(onfulfilled, onrejected); } //# sourceMappingURL=index.js.map