shelving
Version:
Toolkit for using data in JavaScript.
42 lines (41 loc) • 4.21 kB
TypeScript
import type { ArrayItem, ImmutableArray } from "./array.js";
import type { ImmutableDictionary } from "./dictionary.js";
import type { Entry } from "./entry.js";
import type { Arguments } from "./function.js";
import type { ImmutableObject, Value } from "./object.js";
/** Function that can transform an input value into an output value. */
export type Transform<I, O, A extends Arguments = []> = (input: I, ...args: A) => O;
/** Function that can transform an input value into an output value. */
export type AsyncTransform<I, O, A extends Arguments = []> = (input: I, ...args: A) => O | PromiseLike<O>;
/** Set of named transforms for a data object (or `undefined` to skip the transform). */
export type Transforms<I extends ImmutableObject, O extends ImmutableObject, A extends Arguments = []> = {
readonly [K in keyof I]?: Transform<I[K], O[K], A>;
};
/** Modify a set of items using a transform. */
export declare function mapItems<I, O, A extends Arguments = []>(items: Iterable<I>, transform: (v: I, ...args: A) => O, ...args: A): Iterable<O>;
export declare function mapItems<I, O, A extends Arguments = []>(items: Iterable<I>, transform: Transform<I, O, A>, ...args: A): Iterable<O>;
/** Modify the items of an array using a transform. */
export declare function mapArray<T extends ImmutableArray>(arr: T, transform: Transform<ArrayItem<T>, ArrayItem<T>>): T;
export declare function mapArray<I, O, A extends Arguments = []>(arr: Iterable<I>, transform: (v: I, ...args: A) => O, ...args: A): ImmutableArray<O>;
export declare function mapArray<I, O, A extends Arguments = []>(arr: Iterable<I>, transform: Transform<I, O, A>, ...args: A): ImmutableArray<O>;
/** Modify the values of the props of an object using a transform. */
export declare function mapObject<T extends ImmutableObject>(obj: T, transform: Transform<Value<T>, Value<T>>): T;
export declare function mapObject<I extends ImmutableObject, O extends ImmutableObject, A extends Arguments = []>(obj: I, transform: (v: Value<I>, ...args: A) => Value<O>, ...args: A): O;
export declare function mapObject<I extends ImmutableObject, O extends ImmutableObject, A extends Arguments = []>(obj: I, transform: Transform<Value<I>, Value<O>, A>, ...args: A): O;
/** Modify the values of a dictionary using a transform. */
export declare function mapDictionary<I, O, A extends Arguments = []>(dictionary: ImmutableDictionary<I>, transform: (v: I, ...args: A) => O, ...args: A): ImmutableDictionary<O>;
export declare function mapDictionary<I, O, A extends Arguments = []>(dictionary: ImmutableDictionary<I>, transform: Transform<I, O, A>, ...args: A): ImmutableDictionary<O>;
/** Modify the values of a set of entries using a transform. */
export declare function mapEntries<K, I, O, A extends Arguments = []>(entries: Iterable<Entry<K, I>>, transform: Transform<I, O, A>, ...args: A): Iterable<Entry<K, O>>;
/**
* Transform an object using a set of named transforms.
*
* @returns Transformed object (or same object if no changes were made).
*/
export declare function transformObject<T extends ImmutableObject, A extends Arguments = []>(obj: T, transforms: Transforms<T, T | Partial<T>, A>, ...args: A): T;
export declare function transformObject<T extends ImmutableObject, A extends Arguments = []>(obj: T | Partial<T>, transforms: Transforms<T, T | Partial<T>, A>, ...args: A): Partial<T>;
export declare function transformObject<I extends ImmutableObject, O extends ImmutableObject, A extends Arguments = []>(obj: I, transforms: Transforms<I, O | Partial<O>, A>, ...args: A): O;
export declare function transformObject<I extends ImmutableObject, O extends ImmutableObject, A extends Arguments = []>(obj: I | Partial<I>, transforms: Transforms<I, O | Partial<O>, A>, ...args: A): Partial<O>;
/** Transform items in a sequence as they are yielded using a (potentially async) transform. */
export declare function mapSequence<I, O, A extends Arguments = []>(sequence: AsyncIterable<I>, transform: (input: I, ...args: A) => O | PromiseLike<O>, ...args: A): AsyncIterable<O>;
export declare function mapSequence<I, O, A extends Arguments = []>(sequence: AsyncIterable<I>, transform: AsyncTransform<I, O, A>, ...args: A): AsyncIterable<O>;