// Copyright 2021 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only import { reduce } from './iterables'; /** * Like Lodash's `groupBy`, but returns a `Map`. */ export const groupBy = ( iterable: Iterable, fn: (value: T) => ResultT ): Map> => reduce( iterable, (result: Map>, value: T) => { const key = fn(value); const existingGroup = result.get(key); if (existingGroup) { existingGroup.push(value); } else { result.set(key, [value]); } return result; }, new Map>() ); export const isEqual = ( left: ReadonlyMap, right: ReadonlyMap ): boolean => { if (left.size !== right.size) { return false; } for (const [key, value] of left) { if (!right.has(key)) { return false; } if (right.get(key) !== value) { return false; } } return true; };