export declare function assert(condition: any, message: string | (() => string)): asserts condition; export declare function assertUnreachable(_: never): never; export declare class MultiMap extends Map { add(key: K, value: V): this; addAll(otherMap: MultiMap): this; } export declare class SetMultiMap extends Map> { add(key: K, value: V): this; addAll(otherMap: SetMultiMap): this; } export declare class OrderedMap { private _keys; private _values; private _compareFn; private static defaultCompareFn; constructor(compareFn?: (a: K, b: K) => number); add(key: K, value: V): void; get(key: K): V | undefined; has(key: K): boolean; get size(): number; keys(): K[]; values(): V[]; private insertKeyInOrder; [Symbol.iterator](): Generator, void, unknown>; } export declare function arrayEquals(a: readonly T[], b: readonly T[], equalFct?: (e1: T, e2: T) => boolean): boolean; export declare function isSubset(superset: Set, maybeSubset: Set): boolean; export declare function firstOf(iterable: Iterable): T | undefined; export declare function mapValues(map: ReadonlyMap): V[]; export declare function mapKeys(map: ReadonlyMap): K[]; export declare function mapEntries(map: ReadonlyMap): [K, V][]; export declare function setValues(set: ReadonlySet): V[]; export declare class MapWithCachedArrays { private readonly map; private cachedKeys?; private cachedValues?; private clearCaches; get size(): number; has(key: K): boolean; get(key: K): V | undefined; set(key: K, value: V): this; delete(key: K): boolean; clear(): void; keys(): readonly K[]; values(): readonly V[]; } export declare function copyWitNewLength(arr: T[], newLength: number): T[]; export declare function validateStringContainsBoolean(str?: string): boolean | undefined; export declare function joinStrings(toJoin: string[], sep?: string, firstSep?: string, lastSep?: string): string; export declare function printHumanReadableList(names: string[], { emptyValue, prefix, prefixPlural, lastSeparator, cutoff_output_length, }: { emptyValue?: string; prefix?: string; prefixPlural?: string; lastSeparator?: string; cutoff_output_length?: number; }): string; export type Concrete = { [Property in keyof Type]-?: Concrete; }; export declare const isDefined: (t: T | undefined) => t is T; export declare function removeArrayElement(element: T, array: T[]): boolean; export type NonEmptyArray = [T, ...T[]]; export declare function isNonEmptyArray(array: T[]): array is NonEmptyArray; export declare function findLast(array: T[], predicate: (t: T) => boolean): T | undefined; export declare function mergeMapOrNull(m1: Map | null, m2: Map | null): Map | null; export declare function composeSets(s1: Set | null, s2: Set | null): Set | null; export declare function setsEqual(s1: Set | null, s2: Set | null): boolean; //# sourceMappingURL=utils.d.ts.map