import { ObjectLike } from "./ObjectTypes"; export type ObjectValueIteratorValueGenerator, R> = (obj: T, key: keyof T, value: T[keyof T], index: number) => R; export type ObjectEntries> = [ keyof T, T[keyof T], number ]; export type IteratorStepOptions = { start?: number; end?: number; step?: number; }; /** * `ObjectValueIterator` is an iterator for objects (Stronly typed) * This is the base class for other objects iterators. * * This base takes a value generator function that is called for each value when iterating * * @example * export class ObjectEntiresIterator extends ObjectValueIterator * { * constructor(obj: T) { * // This generator returns the [key, value] as a tuple * super(obj, (obj, key, value) => [key, value]) * } * } * export class ObjectKeysIterator extends ObjectValueIterator * { * constructor(obj: T) { * // This generator returns the only the key * super(obj, (obj, key, value) => key) * } * } * * @see Also see {@link ObjectEntriesIterator}, {@link ObjectKeysIterator} and {@link ObjectValuesIterator} */ export declare class ObjectValueIterator, TReturnValue> implements Iterable { private index; private done; private end; private step; private keys; private readonly obj; private readonly valueGenerator; constructor(obj: T, valueGenerator: ObjectValueIteratorValueGenerator, stepOptions?: IteratorStepOptions); next(): IteratorResult; /** * change the start index (to skip values) * @param count * @returns */ skip(count: number): this; /** * change the end index (to stop the iterator) * @param count * @returns */ limit(count: number): this; /** * change the step (to skip values) * @param step * @returns */ stepBy(step: number): this; /** * set end index (to stop the iterator) * @param end * @returns */ stopAt(end: number): this; /** * stop the iterator * @returns */ stop(): this; /** * forEach the values of the iterator (value, key, index) * @param callback */ forEach(callback: (value: TReturnValue, index: number) => void | false): void; /** * map the values of the iterator to an array * @param mapper * @param filterNull If true, mapped null values will be filtered out [default: true] * @returns */ map(mapper: (value: TReturnValue, index: number, outArr: R[]) => R | null, filterNull?: boolean): R[]; /** * flatMap the values of the iterator to an array * @param mapper * @param filterNull * @returns */ flatMap(mapper: (value: TReturnValue, index: number, outArr: R[]) => R | R[] | null, filterNull?: boolean): R[]; /** * reduce the values of the iterator to a single value * @param init * @param reducer * @returns */ reduce(init: R, reducer: (acc: R, value: TReturnValue, index: number) => R): R; [Symbol.iterator](): ObjectValueIterator; } /** * `ObjectEntiresIterator` is an iterator for objects (Stronly typed) */ export declare class ObjectEntriesIterator> extends ObjectValueIterator { constructor(obj: T, stepOptions?: IteratorStepOptions); } /** * `ObjectKeysIterator` is an iterator for object keys (Stronly typed) */ export declare class ObjectKeysIterator> extends ObjectValueIterator { constructor(obj: T, stepOptions?: IteratorStepOptions); } /** * `ObjectValuesIterator` is an iterator for object values (Stronly typed) */ export declare class ObjectValuesIterator> extends ObjectValueIterator { constructor(obj: T, stepOptions?: IteratorStepOptions); } export declare function entries>(obj: T, stepOptions?: IteratorStepOptions): ObjectEntriesIterator; export declare function keys>(obj: T, stepOptions?: IteratorStepOptions): ObjectKeysIterator; export declare function values>(obj: T, stepOptions?: IteratorStepOptions): ObjectValuesIterator; export declare function reduce>(obj: T, acc: R, reducer: (acc: R, key: keyof T, value: T[keyof T], index: number) => R): R; export declare function reduceObj>(obj: T, reducer: (acc: R, key: keyof T, value: T[keyof T]) => R): R; export declare function map, R>(obj: T, mapper: (key: keyof T, value: T[keyof T]) => R): R[]; export declare const Iterate: { entries: typeof entries; keys: typeof keys; values: typeof values; reduce: typeof reduce; reduceObj: typeof reduceObj; map: typeof map; }; export default Iterate;