@rmw/mdbx
Version:
Simple, efficient, scalable data store wrapper for libmdbx
41 lines • 1.1 kB
JavaScript
// this provides a weak-valued map to ensure we only have a single instance of an object per id, but can still be GC-ed
let WeakValueMap
try {
let NativeWeakValueMap = require('weakvaluemap')
let allInstances = []
WeakValueMap = function() {
let map = new NativeWeakValueMap()
allInstances.push(map)
return map
}
WeakValueMap.getStatus = function() {
let mapStats = []
for (let map of allInstances) {
let size = 0
let count = 0
for (let key of map.keys()) {
let value = map.get(key)
size += value && value.approximateSize || 100
count++
}
if (count > 0) {
mapStats.push({
name: map.name,
size,
count
})
}
}
return mapStats
}
} catch (error) {
console.warn('No weak value map available, this can be used for development, but weak value maps should be enabled for production use', error.toString())
WeakValueMap = Map
WeakValueMap.getStatus = function() {
return 'WeakValueMap failed to load'
}
WeakValueMap.prototype._keysAsArray = function() {
return Array.from(this.keys())
}
}
exports.WeakValueMap = WeakValueMap