tc39-weakrefs-shim
Version:
Shim for TC39 Weakrefs proposal
63 lines • 2.64 kB
JavaScript
;
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