'use strict'; const { kConnected, kSize } = require('../../core/symbols'); class CompatWeakRef { constructor(value) { this.value = value; } deref() { return this.value[kConnected] === 0 && this.value[kSize] === 0 ? undefined : this.value; } } class CompatFinalizer { constructor(finalizer) { this.finalizer = finalizer; } register(dispatcher, key) { if (dispatcher.on) { dispatcher.on('disconnect', () => { if (dispatcher[kConnected] === 0 && dispatcher[kSize] === 0) { this.finalizer(key); } }); } } unregister(key) {} } module.exports = function () { // FIXME: remove workaround when the Node bug is backported to v18 // https://github.com/nodejs/node/issues/49344#issuecomment-1741776308 if (process.env.NODE_V8_COVERAGE && process.version.startsWith('v18')) { process._rawDebug('Using compatibility WeakRef and FinalizationRegistry'); return { WeakRef: CompatWeakRef, FinalizationRegistry: CompatFinalizer, }; } return { WeakRef, FinalizationRegistry }; };