shelving
Version:
Toolkit for using data in JavaScript.
31 lines (30 loc) • 2.89 kB
TypeScript
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>;