UNPKG

shelving

Version:

Toolkit for using data in JavaScript.

31 lines (30 loc) 2.89 kB
import type { ImmutableArray } from "./array.js"; import type { DictionaryItem, ImmutableDictionary } from "./dictionary.js"; import type { Entry } from "./entry.js"; import type { Arguments } from "./function.js"; import type { ImmutableObject, Prop, Value } from "./object.js"; /** 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]?: (input: I[K], ...args: A) => O[K]; }; /** 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>; /** Modify the items of an array using a transform. */ export declare function mapArray<I, O, A extends Arguments = []>(arr: Iterable<I>, transform: (v: I, ...args: A) => O, ...args: A): ImmutableArray<O>; /** Modify the _values_ of the props of an object using a transform. */ export declare function mapProps<I extends ImmutableObject, O extends ImmutableObject, A extends Arguments = []>(obj: I, transform: (prop: Prop<I>, ...args: A) => Value<O>, ...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: (item: DictionaryItem<I>, ...args: A) => O, ...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: (entry: Entry<K, I>, ...args: A) => O, ...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>;