export declare type Mutable = { -readonly [P in keyof T]: T[P]; }; export declare type Deferred = { [P in keyof T]: Promise; }; export declare type RecursivePartial = { [P in keyof T]?: T[P] extends Array ? Array> : RecursivePartial; }; export declare type MaybeArray = T | T[]; export declare type MaybePromise = T | PromiseLike; export interface Prioritizeable { readonly priority: number; readonly value: T; } export declare namespace Prioritizeable { type GetPriority = (value: T) => MaybePromise; type GetPrioritySync = (value: T) => number; function toPrioritizeable(rawValue: MaybePromise, getPriority: GetPriority): Promise>; function toPrioritizeable(rawValue: MaybePromise[], getPriority: GetPriority): Promise[]>; function toPrioritizeableSync(rawValue: T[], getPriority: GetPrioritySync): Prioritizeable[]; function prioritizeAllSync(values: T[], getPriority: GetPrioritySync): Prioritizeable[]; function prioritizeAll(values: MaybePromise[], getPriority: GetPriority): Promise[]>; function isValid(p: Prioritizeable): boolean; function compare(p: Prioritizeable, p2: Prioritizeable): number; } export declare namespace ArrayUtils { interface Head extends Array { head(): T; } interface Tail extends Array { tail(): T; } interface Children extends Array { children(): Tail; } const TailImpl: { tail(this: T[]): T; }; const HeadAndChildrenImpl: { head(this: T[]): T; children(this: T[]): Tail; }; interface HeadAndTail extends Head, Tail, Children { } function asTail(array: Array): Tail; function asHeadAndTail(array: Array): HeadAndTail; } /** * Throws when called and statically makes sure that all variants of a type were consumed. */ export declare function unreachable(_never: never, message?: string): never;