Spaces:
Runtime error
Runtime error
/* istanbul ignore file: only for Node 12 */ | |
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) | |
} | |
}) | |
} | |
} | |
} | |
module.exports = function () { | |
// FIXME: remove workaround when the Node bug is fixed | |
// https://github.com/nodejs/node/issues/49344#issuecomment-1741776308 | |
if (process.env.NODE_V8_COVERAGE) { | |
return { | |
WeakRef: CompatWeakRef, | |
FinalizationRegistry: CompatFinalizer | |
} | |
} | |
return { | |
WeakRef: global.WeakRef || CompatWeakRef, | |
FinalizationRegistry: global.FinalizationRegistry || CompatFinalizer | |
} | |
} | |