UNPKG

@parcel/utils

Version:

Blazing fast, zero configuration web application bundler

58 lines (48 loc) 1.26 kB
// @flow strict-local export function unique<T>(array: Array<T>): Array<T> { return [...new Set(array)]; } export function objectSortedEntries(obj: { +[string]: mixed, ... }): Array<[string, mixed]> { return Object.entries(obj).sort(([keyA], [keyB]) => keyA.localeCompare(keyB)); } export function objectSortedEntriesDeep(object: { +[string]: mixed, ... }): Array<[string, mixed]> { let sortedEntries = objectSortedEntries(object); for (let i = 0; i < sortedEntries.length; i++) { sortedEntries[i][1] = sortEntry(sortedEntries[i][1]); } return sortedEntries; } function sortEntry(entry: mixed) { if (Array.isArray(entry)) { return entry.map(sortEntry); } if (typeof entry === 'object' && entry != null) { return objectSortedEntriesDeep(entry); } return entry; } export function setDifference<T>(a: Set<T>, b: Set<T>): Set<T> { let difference = new Set(); for (let e of a) { if (!b.has(e)) { difference.add(e); } } return difference; } export function setIntersect<T>(a: Set<T>, b: Set<T>): void { for (let entry of a) { if (!b.has(entry)) { a.delete(entry); } } } export function setUnion<T>(a: Iterable<T>, b: Iterable<T>): Set<T> { return new Set([...a, ...b]); }