UNPKG

tc39-weakrefs-shim

Version:
63 lines 2.64 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result["default"] = mod; return result; }; Object.defineProperty(exports, "__esModule", { value: true }); const available_js_1 = __importDefault(require("./global/available.js")); const available_js_2 = __importDefault(require("./node/available.js")); const available_js_3 = __importDefault(require("./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; } exports.available = available_js_1.default || available_js_3.default || available_js_2.default; async function shim(wrapBrokenImplementation = true) { let implementation; if (available_js_1.default) { implementation = await Promise.resolve().then(() => __importStar(require("./global/index.js"))); if (wrapBrokenImplementation && !testKnownImplementationIssues(implementation.WeakRef, implementation.FinalizationGroup)) { implementation = (await Promise.resolve().then(() => __importStar(require("./wrapper.js")))).wrap(implementation.WeakRef, implementation.FinalizationGroup, implementation.gc); } } else if (available_js_3.default) { implementation = await Promise.resolve().then(() => __importStar(require("./spidermonkey/index.js"))); } else if (available_js_2.default) { implementation = await Promise.resolve().then(() => __importStar(require("./node/index.js"))); } else { implementation = { WeakRef: undefined, FinalizationGroup: undefined }; } return implementation; } exports.shim = shim; let asyncImportPromise; // Easy use of the shim with dynamic import function then(onfulfilled, onrejected) { if (!asyncImportPromise) asyncImportPromise = shim().then(exports => (Object.assign({ shim, available: exports.available }, exports))); return asyncImportPromise.then(onfulfilled, onrejected); } exports.then = then; //# sourceMappingURL=index.js.map