forked from quic-issues/427e7578-d7bf-49c8-aee9-2dd999e25316
implemented frontend including separate message system; started to implement backend
This commit is contained in:
118
yjs-poll/node_modules/lib0/map.js
generated
vendored
Normal file
118
yjs-poll/node_modules/lib0/map.js
generated
vendored
Normal file
@@ -0,0 +1,118 @@
|
||||
/**
|
||||
* Utility module to work with key-value stores.
|
||||
*
|
||||
* @module map
|
||||
*/
|
||||
|
||||
/**
|
||||
* @template K
|
||||
* @template V
|
||||
* @typedef {Map<K,V>} GlobalMap
|
||||
*/
|
||||
|
||||
/**
|
||||
* Creates a new Map instance.
|
||||
*
|
||||
* @function
|
||||
* @return {Map<any, any>}
|
||||
*
|
||||
* @function
|
||||
*/
|
||||
export const create = () => new Map()
|
||||
|
||||
/**
|
||||
* Copy a Map object into a fresh Map object.
|
||||
*
|
||||
* @function
|
||||
* @template K,V
|
||||
* @param {Map<K,V>} m
|
||||
* @return {Map<K,V>}
|
||||
*/
|
||||
export const copy = m => {
|
||||
const r = create()
|
||||
m.forEach((v, k) => { r.set(k, v) })
|
||||
return r
|
||||
}
|
||||
|
||||
/**
|
||||
* Get map property. Create T if property is undefined and set T on map.
|
||||
*
|
||||
* ```js
|
||||
* const listeners = map.setIfUndefined(events, 'eventName', set.create)
|
||||
* listeners.add(listener)
|
||||
* ```
|
||||
*
|
||||
* @function
|
||||
* @template {Map<any, any>} MAP
|
||||
* @template {MAP extends Map<any,infer V> ? function():V : unknown} CF
|
||||
* @param {MAP} map
|
||||
* @param {MAP extends Map<infer K,any> ? K : unknown} key
|
||||
* @param {CF} createT
|
||||
* @return {ReturnType<CF>}
|
||||
*/
|
||||
export const setIfUndefined = (map, key, createT) => {
|
||||
let set = map.get(key)
|
||||
if (set === undefined) {
|
||||
map.set(key, set = createT())
|
||||
}
|
||||
return set
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an Array and populates it with the content of all key-value pairs using the `f(value, key)` function.
|
||||
*
|
||||
* @function
|
||||
* @template K
|
||||
* @template V
|
||||
* @template R
|
||||
* @param {Map<K,V>} m
|
||||
* @param {function(V,K):R} f
|
||||
* @return {Array<R>}
|
||||
*/
|
||||
export const map = (m, f) => {
|
||||
const res = []
|
||||
for (const [key, value] of m) {
|
||||
res.push(f(value, key))
|
||||
}
|
||||
return res
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests whether any key-value pairs pass the test implemented by `f(value, key)`.
|
||||
*
|
||||
* @todo should rename to some - similarly to Array.some
|
||||
*
|
||||
* @function
|
||||
* @template K
|
||||
* @template V
|
||||
* @param {Map<K,V>} m
|
||||
* @param {function(V,K):boolean} f
|
||||
* @return {boolean}
|
||||
*/
|
||||
export const any = (m, f) => {
|
||||
for (const [key, value] of m) {
|
||||
if (f(value, key)) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests whether all key-value pairs pass the test implemented by `f(value, key)`.
|
||||
*
|
||||
* @function
|
||||
* @template K
|
||||
* @template V
|
||||
* @param {Map<K,V>} m
|
||||
* @param {function(V,K):boolean} f
|
||||
* @return {boolean}
|
||||
*/
|
||||
export const all = (m, f) => {
|
||||
for (const [key, value] of m) {
|
||||
if (!f(value, key)) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
Reference in New Issue
Block a user