export function groupByArray (array: T[], keyProvider: (item: T) => K): Map { const result = new Map() array.forEach((item) => { const key = keyProvider(item) if (!result.has(key)) { result.set(key, [item]) } else { result.get(key)?.push(item) } }) return result } export function flipSet (set: Set, item: T): Set { if (set.has(item)) { set.delete(item) } else { set.add(item) } return set }