27 lines
958 B
TypeScript
27 lines
958 B
TypeScript
import { Moment } from "moment-timezone";
|
|
|
|
type Simplify<T> = string |
|
|
T extends string ? string :
|
|
T extends number ? number :
|
|
T extends boolean ? boolean :
|
|
T extends Moment ? string :
|
|
T extends Array<infer K> ? Array<Simplify<K>> :
|
|
T extends (infer K)[] ? Simplify<K>[] :
|
|
T extends Object ? Serializable<T> : any;
|
|
|
|
export type Serializable<T> = { [K in keyof T]: Simplify<T[K]> }
|
|
export type Transformer<TFrom, TResult, TContext = never> = {
|
|
reverseTransform(subject: TResult, context?: TContext): TFrom;
|
|
} & OneWayTransformer<TFrom, TResult, TContext>
|
|
|
|
export type SerializationTransformer<T, TSerialized = Serializable<T>> = Transformer<T, TSerialized>
|
|
|
|
export type OneWayTransformer<TFrom, TResult, TContext = never> = {
|
|
transform(subject: TFrom, context?: TContext): TResult;
|
|
}
|
|
|
|
export const identityTransformer: Transformer<any, any> = {
|
|
transform: subject => subject,
|
|
reverseTransform: subject => subject
|
|
}
|