Iterable WeakMap, WeakSet and WeakValue.
npm install not-so-weak 
Social Media Photo by Pete Nuij on Unsplash
Iterable WeakMap (WKey) and WeakSet (WSet) through FinalizationRegistry and WeakRef primitives, reimplementing also the WeakValue (WValue) module, including the optional callback for collected values.
``js
// const {WSet, WKey, WValue} = require('not-so-weak');
import {WSet, WKey, WValue} from 'not-so-weak';
// class WSet
// class WKey
// class WValue
// node --expose-gc example
const ws = new WSet([{}]);
const wm = new WKey([[{}, 'value']]);
const wv = new WValue;
wv.set('value', {}, function (key) {
console.assert(this === wv);
console.assert(key === 'value');
console.log(key, 'value collected');
});
console.assert(ws.size === 1);
console.assert(wm.size === 1);
console.assert([...wm.values()][0] === 'value');
console.assert([...wv.keys()][0] === 'value');
setTimeout(() => {
gc();
console.assert(ws.size === 0);
console.assert(wm.size === 0);
console.assert(wv.size === 0);
});
`
* Weak key/value based state/store
* Server Side related tasks that can't bother with manual removal of weakly referenced entries
every case where you end up swapping to Map or Set because you realize you cannot iterate over their Weak* counterpart
* every case where you think there's a memory leak due possibly missing weakThing.delete(ref) operations
* raw performance or benchmarks against Map or SetweakThing.delete(ref)` is already handled by the library or framework logic
* every case where