map-transform-cjs
Version:
MapTransform with CJS support
119 lines (117 loc) • 4.13 kB
TypeScript
type DictionaryValue = string | number | boolean | null | undefined;
type DictionaryTuple = readonly [DictionaryValue, DictionaryValue];
type Dictionary = DictionaryTuple[];
interface Dictionaries {
[key: string]: Dictionary;
}
interface InitialState {
target?: unknown;
rev?: boolean;
noDefaults?: boolean;
}
interface State extends InitialState {
context: unknown[];
value: unknown;
flip?: boolean;
arr?: boolean;
iterate?: boolean;
index?: number;
untouched?: boolean;
}
interface Options {
transformers?: {
[key: string | symbol]: Transformer | AsyncTransformer;
};
pipelines?: {
[key: string | symbol]: TransformDefinition;
};
dictionaries?: Dictionaries;
nonvalues?: unknown[];
fwdAlias?: string;
revAlias?: string;
modifyOperationObject?: (operation: Record<string, unknown>) => Record<string, unknown>;
modifyGetValue?: (value: unknown, state: State, options: Options) => unknown;
}
interface DataMapper<T extends InitialState | undefined = State> {
(data: unknown, state?: T): Promise<unknown>;
}
interface AsyncDataMapperWithState {
(data: unknown, state: State): Promise<unknown>;
}
interface DataMapperWithState {
(data: unknown, state: State): unknown;
}
interface AsyncDataMapperWithOptions {
(options: Options): AsyncDataMapperWithState;
}
interface DataMapperWithOptions {
(options: Options): DataMapperWithState;
}
interface StateMapper {
(state: State): Promise<State>;
}
interface NextStateMapper {
(next: StateMapper): StateMapper;
}
interface Operation {
(options: Options): NextStateMapper;
}
type TransformerProps = Record<string, unknown>;
interface Transformer<T = TransformerProps> {
(props: T): DataMapperWithOptions;
}
interface AsyncTransformer<T = TransformerProps> {
(props: T): AsyncDataMapperWithOptions;
}
type Path = string;
interface TransformOperation extends TransformerProps {
$transform: string | symbol | DataMapperWithOptions | AsyncDataMapperWithOptions;
$iterate?: boolean;
$direction?: string;
}
interface FilterOperation extends TransformerProps {
$filter: string | symbol;
$direction?: string;
}
interface IfOperation extends TransformerProps {
$if: TransformDefinition;
$direction?: string;
then?: TransformDefinition;
else?: TransformDefinition;
}
interface ApplyOperation extends TransformerProps {
$apply: string | symbol;
$iterate?: boolean;
$direction?: string;
}
interface AltOperation extends TransformerProps {
$alt: TransformDefinition[];
$iterate?: boolean;
$direction?: string;
$undefined?: unknown[];
}
interface ConcatOperation extends TransformerProps {
$concat: TransformDefinition[];
}
interface ConcatRevOperation extends TransformerProps {
$concatRev: TransformDefinition[];
}
interface LookupOperation extends TransformerProps {
$lookup: Path;
path: Path;
}
interface LookdownOperation extends TransformerProps {
$lookdown: Path;
path: Path;
}
type OperationObject = TransformOperation | FilterOperation | IfOperation | ApplyOperation | AltOperation | ConcatOperation | ConcatRevOperation | LookupOperation | LookdownOperation;
type Pipeline = (TransformObject | Operation | OperationObject | Path | Pipeline)[];
interface TransformObject extends Record<string, unknown> {
$iterate?: boolean;
$modify?: boolean | Path;
$noDefaults?: boolean;
$flip?: boolean;
$direction?: string;
}
type TransformDefinition = TransformObject | Operation | OperationObject | Pipeline | Path | null;
export type { AltOperation, ApplyOperation, AsyncDataMapperWithOptions, AsyncDataMapperWithState, AsyncTransformer, ConcatOperation, ConcatRevOperation, DataMapper, DataMapperWithOptions, DataMapperWithState, Dictionaries, Dictionary, DictionaryTuple, DictionaryValue, FilterOperation, IfOperation, InitialState, LookdownOperation, LookupOperation, NextStateMapper, Operation, OperationObject, Options, Path, Pipeline, State, StateMapper, TransformDefinition, TransformObject, TransformOperation, Transformer, TransformerProps };