UNPKG

shelving

Version:

Toolkit for using data in JavaScript.

42 lines (41 loc) 4.21 kB
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>;