$ npm i weak-mergeimport { mergeWeakMaps, mergeWeakSets } from 'weak-merge'
const [a, b, c, d] = [{}, {}, {}, {}]
const weakSet1 = new WeakSet([a, b])
const weakSet2 = new WeakSet([c])
const mergedWeakSet = mergeWeakSets(weakSet1, weakSet2)
console.log([a, b, c].map(key => mergedWeakSet.has(key)))
//=> [ true, true, true ]
mergedWeakSet.delete(a)
console.log(mergedWeakSet.has(a))
//=> false
console.log(weakSet1.has(a))
//=> true
mergedWeakSet.add(d)
console.log(mergedWeakSet.has(d))
//=> true
console.log(weakSet1.has(d))
//=> false
const weakMap1 = new WeakMap([
[a, 1],
[b, 2],
])
const weakMap2 = new WeakMap([[c, 3]])
const mergedWeakMap = mergeWeakMaps(weakMap1, weakMap2)
console.log([a, b, c].map(key => mergedWeakMap.get(key)))
//=> [ 1, 2, 3 ]
mergedWeakMap.delete(a)
console.log(mergedWeakMap.has(a))
//=> false
console.log(weakMap1.has(a))
//=> true
mergedWeakMap.set(a, 5)
console.log(mergedWeakMap.get(a))
//=> 5
console.log(weakMap1.get(a))
//=> 1See the TypeScript types for more documentation.
Merging WeakSet or WeakMap instances is not trivial because they
are not enumerable.
WeakSet instances returned from mergeWeakSets and WeakMap instances
returned from mergeWeakMaps are not as performant as native WeakSet and
WeakMap instances (due to the lack of a native way to merge or copy WeakSet
and WeakMap instances):
| Operation | Native WeakSet |
Merge of n native WeakSet instances |
|---|---|---|
add |
O(1) |
O(1) |
delete |
O(1) |
O(1) |
has |
O(1) |
O(n) |
| Operation | Native WeakMap |
Merge of n native WeakMap instances |
|---|---|---|
delete |
O(1) |
O(1) |
get |
O(1) |
O(n) |
has |
O(1) |
O(n) |
set |
O(1) |
O(1) |
Stars are always welcome!
For bugs and feature requests, please create an issue.
MIT Β©
Tomer Aberbach
Apache 2.0 Β©
Google