UNPKG

tsminilens

Version:
38 lines (37 loc) 2.17 kB
import { ChainedLensMaker, ChainedLensMakerAlias, LensMaker, LensMakerAlias } from "./lensMaker"; export declare abstract class Lens<T, TField> { set<Tx extends T = T>(obj: Tx, val: TField): Tx; castIf<TField1 extends TField>(predicate: (o: TField) => o is TField1): Lens<T, TField1>; chain<TField1, TFieldComp extends TField = TField>(lens1: Lens<TFieldComp, TField1>): Lens<T, TField1>; get then(): ChainedLensMaker<T, TField> & ChainedLensMakerAlias<T, TField>; abstract view(obj: T): TField; abstract over<Tx extends T = T>(obj: Tx, func: (val: TField) => TField): Tx; } export declare class SimpleLens<T, TField> extends Lens<T, TField> { private fields; constructor(fields: string[]); view(obj: T): TField; set<Tx extends T = T>(obj: Tx, val: TField): Tx; over<Tx extends T = T>(obj: Tx, func: (val: TField) => TField): Tx; } export declare class CastLens<T, TField, TField1 extends TField> extends Lens<T, TField1> { private inner; private predicate; constructor(inner: Lens<T, TField>, predicate: (o: TField) => o is TField1); view(obj: T): TField1; set<Tx extends T = T>(obj: Tx, val: TField1): Tx; over<Tx extends T = T>(obj: Tx, func: (val: TField1) => TField1): Tx; } export declare function castIf<T, TField, TField1 extends TField>(lens: Lens<T, TField>, predicate: (o: TField) => o is TField1): Lens<T, TField1>; export declare class ChainedLens<TRoot, TField, TField1, TFieldComp extends TField = TField> extends Lens<TRoot, TField1> { private inner1; private inner2; constructor(inner1: Lens<TRoot, TField>, inner2: Lens<TFieldComp, TField1>); view(obj: TRoot): TField1; set<Tx extends TRoot = TRoot>(obj: Tx, val: TField1): Tx; over<Tx extends TRoot = TRoot>(obj: Tx, func: (val: TField1) => TField1): Tx; } export declare function chain<T, TField, TField1, TFieldComp extends TField = TField>(lens1: Lens<T, TField>, lens2: Lens<TFieldComp, TField1>): ChainedLens<T, TField, TField1, TFieldComp>; export declare function lensFor<T>(): LensMaker<T>; export declare function lensFrom<T>(): LensMakerAlias<T>; export declare function L<T>(): LensMakerAlias<T>;