@tanstack/charts
Version:
A chart grammar for TypeScript and JavaScript. Marks consume your data directly, channels describe visual encodings, and the engine compiles them into a renderer-neutral keyed scene. TanStack's compact scales cover common numeric and categorical mappings.
27 lines (26 loc) • 1.9 kB
TypeScript
import type { TransformLineage } from './transform.js';
export type FoldField<TDatum> = Extract<keyof TDatum, string>;
export interface FoldOutputNames<TKey extends string = 'key', TValue extends string = 'value'> {
readonly key: TKey;
readonly value: TValue;
}
export interface FoldOptions<TDatum, TFields extends readonly FoldField<TDatum>[] = readonly FoldField<TDatum>[], TOutputNames extends FoldOutputNames<string, string> = FoldOutputNames<'key', 'value'>> {
readonly fields: TFields;
readonly as?: TOutputNames;
}
type FoldFieldDatum<TDatum extends object, TField extends FoldField<TDatum>, TOutputNames extends FoldOutputNames<string, string>> = TField extends FoldField<TDatum> ? Omit<TDatum, keyof TransformLineage<TDatum> | TOutputNames['key'] | TOutputNames['value']> & TransformLineage<TDatum> & {
readonly [TKey in TOutputNames['key']]: TField;
} & {
readonly [TValue in TOutputNames['value']]: TDatum[TField];
} : never;
export type FoldDatum<TDatum extends object, TFields extends readonly FoldField<TDatum>[], TOutputNames extends FoldOutputNames<string, string> = FoldOutputNames<'key', 'value'>> = FoldFieldDatum<TDatum, TFields[number], TOutputNames>;
type LiteralFoldFields<TFields extends readonly string[]> = number extends TFields['length'] ? never : TFields;
export declare function fold<TDatum extends object, const TFields extends readonly FoldField<TDatum>[]>(source: Iterable<TDatum>, options: {
readonly fields: LiteralFoldFields<TFields>;
readonly as?: undefined;
}): FoldDatum<TDatum, TFields>[];
export declare function fold<TDatum extends object, const TFields extends readonly FoldField<TDatum>[], const TOutputNames extends FoldOutputNames<string, string>>(source: Iterable<TDatum>, options: {
readonly fields: LiteralFoldFields<TFields>;
readonly as: TOutputNames;
}): FoldDatum<TDatum, TFields, TOutputNames>[];
export {};