@thisisagile/easy
Version:
Straightforward library for building domain-driven microservice architectures
88 lines (87 loc) • 4.32 kB
TypeScript
import { ArrayLike } from './Array';
import { Constructor } from './Constructor';
import type { Json } from './Json';
import { Get, GetProperty } from './Get';
import type { Id } from './Id';
import { Optional } from './Types';
import { AnyKey } from './AnyKey';
import { Indexed } from './Indexed';
type Pred<T> = (value: T, index: number, obj: T[]) => unknown;
export declare class List<T = unknown> extends Array<T> {
get ids(): List<Id>;
get indexed(): List<Indexed<T>>;
isSubSetOf(...items: ArrayLike<T>): boolean;
isSuperSetOf(...items: ArrayLike<T>): boolean;
isIntersectingWith(...items: ArrayLike<T>): boolean;
isDisjointWith(...items: ArrayLike<T>): boolean;
areEqual(...items: ArrayLike<T>): boolean;
asc(p: GetProperty<T, any>): List<T>;
desc(p: GetProperty<T, any>): List<T>;
first(p?: Pred<T>, params?: unknown): T;
firstValue<V>(f: (t: T) => V, alt?: Get<V, T>): Optional<V>;
isFirst(value: T): boolean;
next(p?: Pred<T>, params?: unknown): T;
prev(p?: Pred<T>, params?: unknown): T;
last(p?: Pred<T>, params?: unknown): T;
isLast(value: T): boolean;
overlaps(...items: ArrayLike<T>): boolean;
diff(others: ArrayLike<T>): List<T>;
diffByKey<U = T>(others: ArrayLike<U>, key: keyof T & keyof U): List<T>;
symmetricDiff(others: ArrayLike<T>): List<T>;
symmetricDiffByKey(others: ArrayLike<T>, key: keyof T): List<T>;
intersect(others: ArrayLike<T>): List<T>;
intersectByKey<U>(others: ArrayLike<U>, key: keyof T & keyof U): List<T>;
intersectBy<U>(others: ArrayLike<U>, f: (value: T, value2: U) => boolean): List<T>;
accumulate(...keys: (keyof T)[]): List<T>;
toJSON(): Json[];
map<U>(f: (value: T, index: number, array: T[]) => U, params?: unknown): List<U>;
flatMap<U, This = unknown>(f: (this: This, value: T, index: number, array: T[]) => ReadonlyArray<U> | U, params?: This): List<U>;
mapDefined<U>(f: (value: T, index: number, array: T[]) => U, params?: unknown): List<NonNullable<U>>;
mapAsync(f: (i: T) => Promise<T>): Promise<List<T>>;
mapSerial<U>(f: (i: T) => Promise<U>): Promise<List<U>>;
distinct(): List<T>;
distinctByKey(key: keyof T): List<T>;
distinctByValue(): List<T>;
filter(p: Pred<T>, params?: unknown): List<T>;
sum(p: (t: T) => number): number;
max(p: (value: T) => any): T;
max(key: keyof T): T;
min(key: keyof T): T;
min(p: (value: T) => any): T;
byId(id: Id): T;
byKey(key: keyof T, value: unknown): T;
add(...items: ArrayLike<T>): this;
concat(...items: ConcatArray<T>[]): List<T>;
concat(...items: (T | ConcatArray<T>)[]): List<T>;
reverse(): List<T>;
splice(start: number, deleteCount?: number): List<T>;
splice(start: number, deleteCount: number, ...items: T[]): List<T>;
remove(item: T): List<T>;
move(sourceId: Id, destinationId: Id): List<T>;
moveOn(key: keyof T, sourceId: Id, destinationId: Id): List<T>;
replace(key: keyof T, item: T): List<T>;
switch(item: T): List<T>;
switchOn<U = T>(item: U, on: AnyKey<U>): List<T>;
switchOn<T>(item: T, on: Pred<T>): List<T>;
defined(): List<NonNullable<T>>;
toObject(key: keyof T, options?: {
deleteKey?: boolean;
}): Record<string | number | symbol, T>;
toObjectList(key: keyof T): Record<string | number | symbol, List<T>>;
orElse(...alt: ArrayLike<T>): Optional<List<T>>;
weave(insertFrom: T[], interval: number): this;
slice(start?: number, end?: number): List<T>;
none(p: (t: T) => boolean): boolean;
chunk(chunkSize: number): List<List<T>>;
update<U = T>(p: Pred<T>, val: T | ((v: U) => T)): List<T>;
updateFirst<U = T>(p: Pred<T>, val: T | ((v: U) => T)): List<T>;
updateFirstById<U = T>(id: Id, val: T | ((v: U) => T)): List<T>;
updateById<U = T>(id: Id, val: T | ((v: U) => T)): List<T>;
groupBy(by: Pred<T>): List<List<T>>;
}
export declare const toList: <T = unknown>(...items: ArrayLike<T>) => List<T>;
export declare const isList: <T>(l?: unknown) => l is List<T>;
export declare const asList: <T>(c: Constructor<T>, items?: unknown) => List<T>;
export declare const maxValue: <T>(l: List<T>, key: keyof T) => T[keyof T] | undefined;
export declare const minValue: <T>(l: List<T>, key: keyof T) => T[keyof T] | undefined;
export {};