UNPKG

@osmium/iterate

Version:

A powerful, type-safe iteration library for JavaScript and TypeScript with advanced mapping, parallel processing, and flow control features

114 lines (113 loc) 11 kB
export declare class Iterate<Source extends Iterate.Iterable, Mapper, MapperFlagUndefined> { protected states?: Iterate.States<Source, Mapper>; static createInstance<Source extends Iterate.Iterable, Mapper, MapperFlagUndefined>(): Iterate<Source, Mapper, MapperFlagUndefined>; iterateAsync(values: Source, cb: Iterate.Callback<Source, Mapper, MapperFlagUndefined, true>, map: Mapper | undefined, mapUndefined: boolean | undefined, iterateKeys: boolean): Promise<Mapper extends undefined ? void : Mapper>; iterateSync(values: Source, cb: Iterate.Callback<Source, Mapper, MapperFlagUndefined, false>, map: Mapper | undefined, mapUndefined: boolean | undefined, iterateKeys: boolean): Mapper extends undefined ? void : Mapper; valuesLength<T extends Iterate.Iterable>(values: T): number; getByIndex<T extends Iterate.Iterable>(index: number, values: T): { value: Iterate.ResolveValue<T>; idx: Iterate.ResolveIndex<T>; } | null; protected resolveTypes<T>(values: Iterate.Iterable, callbacks: Iterate.TypeDetectorCB<T>): T; protected iterateArrayLikeSync(): Mapper | undefined; protected iterateArrayLikeAsync(): Promise<Mapper | undefined>; protected iterateMapSync(): Mapper | undefined; protected iterateMapAsync(): Promise<Mapper | undefined>; protected iterateObjectSync(): Mapper | undefined; protected iterateObjectAsync(): Promise<Mapper | undefined>; protected iterateNumberSync(): Mapper | undefined; protected iterateNumberAsync(): Promise<Mapper | undefined>; protected iterateStringSync(): Mapper | undefined; protected iterateStringAsync(): Promise<Mapper | undefined>; protected iterateTrueSync(): Mapper | undefined; protected iterateTrueAsync(): Promise<Mapper | undefined>; } export declare namespace Iterate { export interface IterableObject { [Symbol.iterator]: Function; } export type TypeDetectorCB<T> = { isNulled: (arg: null | undefined) => T; isArray: (args: unknown[]) => T; isSet: (args: Set<unknown>) => T; isMap: (args: Map<unknown, unknown>) => T; isNumber: (args: number) => T; isTrue: (args: true) => T; isString: (args: string) => T; isObject: (args: Record<string, unknown>) => T; isUnknown: (args: unknown) => T; }; type ExtractObjectValueType<Source> = Source[keyof Source]; export class Controller<MapperIndex = unknown> implements Control<MapperIndex> { static createInstance<MapperIndex = unknown>(row: Row<MapperIndex>): Controller<MapperIndex>; row: Row<MapperIndex>; constructor(row: Row<MapperIndex>); get length(): number; break(): void; repeat(): void; skip(): void; shift(n: number): void; get mapKey(): any; set mapKey(key: any); key(key: any): void; getStates(): States; } export class Row<MapperIndex = unknown> { static createInstance<MapperIndex = unknown>(states: States, index: MapperIndex): Row<MapperIndex>; states: States; mapKey: MapperIndex; index: MapperIndex; constructor(states: States, index: MapperIndex); protected processMapper(mapperValue: ResolveValue<unknown>): boolean; static processIterationSync(states: States<any, any>, value: any, index: any): void; static processIterationAsync(states: States<any, any>, value: any, index: any): Promise<void>; } export class States<Source = any, Mapper = any> { static createInstance<Source, Mapper>(args: Partial<States<Source, Mapper>>): States<Source, Mapper>; isAsync: boolean; values: Source; cb: any; map?: Mapper; mapUndefined: boolean | undefined; mapChanged: boolean; iterateKeys: boolean; length: number; position: number; break: boolean; getStates(): States<Source, Mapper>; } export type Iterable = Array<any> | Record<any, any> | Set<any> | Map<any, any> | string | number | null | undefined | boolean; export type Mappable = Exclude<Iterable, null>; export type ResolveValue<Source> = Source extends Array<any> & ReadonlyArray<infer ArrayValueType> ? ArrayValueType : Source extends Set<any> & ReadonlySet<infer SetValueType> ? SetValueType : Source extends Map<any, any> & ReadonlyMap<any, infer MapValueType> ? MapValueType : Source extends number | true ? number : Source extends string ? string : Source extends IterableObject & Record<any, infer RecordValueType> ? RecordValueType extends (...args: any) => any ? never : RecordValueType : Source extends { [key: string]: any; } ? ExtractObjectValueType<Source> : unknown; export type ResolveIndex<SourceType> = SourceType extends Array<any> | Set<any> ? number : SourceType extends Map<any, any> & ReadonlyMap<infer MapIndexType, any> ? MapIndexType : SourceType extends number | string | true ? number : SourceType extends IterableObject ? number : SourceType extends { [key: string]: any; } ? string : unknown; export interface Control<_MapperIndex> { break: () => void; mapKey: any; key: (index: any) => void; shift: (pos: number) => void; repeat: () => void; skip: () => void; getStates: () => States; get length(): number; } export type CallbackResult<MapperValue, MapperFlagUndefined> = MapperFlagUndefined extends true ? MapperValue : MapperValue | void; export type CallbackResolve<Source, SourceValue, SourceIndex, Mapper, _MapperIndex, MapperFlagUndefined, Control, IsAsync extends boolean = false> = Source extends false | null | undefined ? (value: undefined, index: undefined, control: Control) => IsAsync extends true ? Promise<any> : any : (value: SourceValue, index: SourceIndex, control: Control) => IsAsync extends true ? Promise<CallbackResult<ResolveValue<Mapper>, MapperFlagUndefined>> : CallbackResult<ResolveValue<Mapper>, MapperFlagUndefined>; export type CallbackKeysResolve<Source, SourceIndex, SourceValue, Mapper, _MapperIndex, MapperFlagUndefined, Control, IsAsync extends boolean = false> = Source extends false | null | undefined ? (index: undefined, value: undefined, control: Control) => IsAsync extends true ? Promise<any> : any : (index: SourceIndex, value: SourceValue, control: Control) => IsAsync extends true ? Promise<CallbackResult<ResolveValue<Mapper>, MapperFlagUndefined>> : CallbackResult<ResolveValue<Mapper>, MapperFlagUndefined>; export type Callback<Source, Mapper, MapperFlagUndefined, IsAsync extends boolean = false> = CallbackResolve<Source, ResolveValue<Source>, ResolveIndex<Source>, Mapper, ResolveIndex<Mapper>, MapperFlagUndefined, Control<Mapper extends undefined ? undefined : ResolveIndex<Mapper>>, IsAsync>; export type CallbackKeys<Source, Mapper, MapperFlagUndefined, IsAsync extends boolean = false> = CallbackKeysResolve<Source, ResolveIndex<Source>, ResolveValue<Source>, Mapper, ResolveIndex<Mapper>, MapperFlagUndefined, Control<Mapper extends undefined ? undefined : ResolveIndex<Mapper>>, IsAsync>; export {}; } export declare function iterateSync<Source extends Iterate.Iterable, Mapper = undefined, MapperFlagUndefined = undefined>(values: Source, cb: Iterate.Callback<Source, Mapper, MapperFlagUndefined>, map?: Mapper & (Iterate.Mappable | undefined), mapUndefined?: MapperFlagUndefined extends boolean | undefined ? MapperFlagUndefined : undefined): Mapper extends undefined ? void : Mapper; export declare function iterateAsync<Source extends Iterate.Iterable, Mapper = undefined, MapperFlagUndefined = undefined>(values: Source, cb: Iterate.Callback<Source, Mapper, MapperFlagUndefined, true>, map?: (Mapper & Iterate.Mappable) | undefined, mapUndefined?: MapperFlagUndefined extends boolean | undefined ? MapperFlagUndefined : undefined): Promise<Mapper extends undefined ? void : Mapper>; export declare function iterate<Source extends Iterate.Iterable, Callback extends Iterate.Callback<Source, Mapper, MapperFlagUndefined, ReturnType<Callback> extends Promise<any> ? true : false>, Mapper = undefined, MapperFlagUndefined = undefined>(values: Source, cb: Callback & Iterate.Callback<Source, Mapper, MapperFlagUndefined, ReturnType<Callback> extends Promise<any> ? true : false>, map?: (Mapper & Iterate.Mappable) | undefined, mapUndefined?: MapperFlagUndefined extends boolean | undefined ? MapperFlagUndefined : undefined): any; export declare function iterateKeysSync<Source extends Iterate.Iterable, Mapper = undefined, MapperFlagUndefined = undefined>(values: Source, cb: Iterate.CallbackKeys<Source, Mapper, MapperFlagUndefined>, map?: Mapper & (Iterate.Mappable | undefined), mapUndefined?: MapperFlagUndefined extends boolean | undefined ? MapperFlagUndefined : undefined): Mapper extends undefined ? void : Mapper; export declare function iterateKeysAsync<Source extends Iterate.Iterable, Mapper = undefined, MapperFlagUndefined = undefined>(values: Source, cb: Iterate.CallbackKeys<Source, Mapper, MapperFlagUndefined, true>, map?: (Mapper & Iterate.Mappable) | undefined, mapUndefined?: MapperFlagUndefined extends boolean | undefined ? MapperFlagUndefined : undefined): Promise<Mapper extends undefined ? void : Mapper>; export declare function iterateKeys<Source extends Iterate.Iterable, Callback extends Iterate.CallbackKeys<Source, Mapper, MapperFlagUndefined, ReturnType<Callback> extends Promise<any> ? true : false>, Mapper = undefined, MapperFlagUndefined = undefined>(values: Source, cb: Callback & Iterate.CallbackKeys<Source, Mapper, MapperFlagUndefined, ReturnType<Callback> extends Promise<any> ? true : false>, map?: (Mapper & Iterate.Mappable) | undefined, mapUndefined?: MapperFlagUndefined extends boolean | undefined ? MapperFlagUndefined : undefined): any; export declare function iterateParallel<Source extends Iterate.Iterable, Mapper = undefined, MapperFlagUndefined = undefined>(values: Source, cb: Iterate.Callback<Source, Mapper, MapperFlagUndefined, true>, map?: (Mapper & Iterate.Mappable) | undefined, mapUndefined?: MapperFlagUndefined extends boolean | undefined ? MapperFlagUndefined : undefined, iterateKeys?: boolean): Promise<Mapper extends undefined ? void : Mapper>; export declare function iterateKeysParallel<Source extends Iterate.Iterable, Mapper = undefined, MapperFlagUndefined = undefined>(values: Source, cb: Iterate.CallbackKeys<Source, Mapper, MapperFlagUndefined, true>, map?: (Mapper & Iterate.Mappable) | undefined, mapUndefined?: MapperFlagUndefined extends boolean | undefined ? MapperFlagUndefined : undefined): Promise<Mapper extends undefined ? void : Mapper>; export declare function seriesPageableRange(start: number, end: number, inPage: number): [number, number][]; export declare function iterateParallelLimit<Source extends Iterate.Iterable>(limit: number, values: Source, cb: Iterate.Callback<Source, undefined, undefined, true>, iterateKeys?: boolean): Promise<void>;