import "./Map.ext"; import { Type } from "../types/type/Type"; import { WrappedType } from "../types/wrap/WrappedType"; import { DateOnly } from "../types/date-time/DateOnly"; import { DateTime } from "../types/date-time/DateTime"; import { Time } from "../types/date-time/Time"; interface IReadonlyArrayExt { single(predicate?: (item: T, index: number) => boolean): T | undefined; first(predicate?: (item: T, index: number) => boolean): T | undefined; filterAsync(predicate: (item: T, index: number) => Promise): Promise; last(predicate?: (item: T, index: number) => boolean): T | undefined; filterExists(): NonNullable[]; ofType(type: Type>): N[]; mapAsync(selector: (item: T, index: number) => Promise): Promise; mapMany(): T; mapMany(selector: (item: T, index: number) => R[]): R[]; mapManyAsync(selector: (item: T, index: number) => Promise): Promise; parallelAsync(fn: (item: T, index: number) => Promise): Promise; groupBy(keySelector: (item: T, index: number) => K): { key: K; values: T[]; }[]; groupBy(keySelector: (item: T, index: number) => K, valueSelector: (item: T, index: number) => V): { key: K; values: V[]; }[]; toMap(keySelector: (item: T, index: number) => K): Map; toMap(keySelector: (item: T, index: number) => K, valueSelector: (item: T, index: number) => V): Map; toMapAsync(keySelector: (item: T, index: number) => Promise): Promise>; toMapAsync(keySelector: (item: T, index: number) => Promise | K, valueSelector: (item: T, index: number) => Promise | V): Promise>; toArrayMap(keySelector: (item: T, index: number) => K): Map; toArrayMap(keySelector: (item: T, index: number) => K, valueSelector: (item: T, index: number) => V): Map; toSetMap(keySelector: (item: T, index: number) => K): Map>; toSetMap(keySelector: (item: T, index: number) => K, valueSelector: (item: T, index: number) => V): Map>; toMapValues(keySelector: (item: T, index: number) => K, valueSelector: (items: T[]) => V): Map; toObject(keySelector: (item: T, index: number) => string): Record; toObject(keySelector: (item: T, index: number) => string, valueSelector: (item: T, index: number) => V): Record; toTree(keyProp: K, parentKey: P): ITreeArray[]; distinct(matchAddress?: boolean): T[]; orderBy(selector?: (item: T) => string | number | DateOnly | DateTime | Time | undefined): T[]; orderByDesc(selector?: (item: T) => string | number | DateOnly | DateTime | Time | undefined): T[]; diffs

(target: P[], options?: { keys?: string[]; excludes?: string[]; }): TArrayDiffsResult[]; oneWayDiffs(orgItems: T[] | Map, keyPropNameOrFn: K | ((item: T) => K), options?: { includeSame?: boolean; excludes?: string[]; includes?: string[]; }): TArrayDiffs2Result[]; merge

(target: P[], options?: { keys?: string[]; excludes?: string[]; }): (T | P | (T & P))[]; sum(selector?: (item: T, index: number) => number): number; min(): T extends number | string ? T | undefined : never; min

(selector?: (item: T, index: number) => P): P | undefined; max(): T extends number | string ? T | undefined : never; max

(selector?: (item: T, index: number) => P): P | undefined; shuffle(): T[]; } interface IMutableArrayExt { distinctThis(matchAddress?: boolean): T[]; orderByThis(selector?: (item: T) => string | number | DateOnly | DateTime | Time | undefined): T[]; orderByDescThis(selector?: (item: T) => string | number | DateOnly | DateTime | Time | undefined): T[]; insert(index: number, ...items: T[]): this; remove(item: T): this; remove(selector: (item: T, index: number) => boolean): this; toggle(item: T): this; clear(): this; } declare global { interface ReadonlyArray extends IReadonlyArrayExt { } interface Array extends IReadonlyArrayExt, IMutableArrayExt { } } export type TArrayDiffsResult = { source: undefined; target: P; } | { source: T; target: undefined; } | { source: T; target: P; }; export type TArrayDiffs2Result = { type: "create"; item: T; orgItem: undefined; } | { type: "update"; item: T; orgItem: T; } | { type: "same"; item: T; orgItem: T; }; export type ITreeArray = T & { children: ITreeArray[]; }; export {};