// cheap lodash replacements export function memoize(fn: () => T): () => T { let result: T | null = null const memoized = () => { if (result == null) { result = fn() } return result } return memoized } /** * drop-in replacement for _.without */ export function without(items: T[], item: T) { return items.filter((i) => i !== item) } export function union(itemsA: T[], itemsB: T[]) { const set = new Set() const insertItem = (item: T) => set.add(item) itemsA.forEach(insertItem) itemsB.forEach(insertItem) const result: T[] = [] set.forEach((key) => result.push(key)) return result }