@typed-f/lens
Version:
[![NPM Version][lens-npm-version-badge]][lens-npm] [repo-circleci-badge]: https://img.shields.io/circleci/project/github/Ailrun/typed-f/master.svg?logo=circleci [![Known Vulnerabilities][lens-snyk-badge]][lens-snyk] [![Supported TypeScript Version][repo-s
32 lines (31 loc) • 2.23 kB
TypeScript
import { Fun } from '@typed-f/function';
export declare class Lens<A, S, B = A, T = S> {
protected _get: Fun<[S], A>;
protected _set: Fun<[S], Fun<[B], T>>;
constructor(get: Fun<[S], A>, set: Fun<[S], Fun<[B], T>>);
get(): Fun<[S], A>;
set(): Fun<[S], Fun<[B], T>>;
map(): Fun<[S], Fun<[Fun<[A], B>], T>>;
compose<AA, BB = AA>(other: Lens<AA, A, BB, B>): Lens<AA, S, BB, T>;
}
export declare class LensS<A, S> extends Lens<A, S> {
constructor(get: Fun<[S], A>, set: Fun<[S], Fun<[A], S>>);
makeInner<K extends keyof A>(key: K): LensS<A[K], A>;
focusTo<K extends keyof A>(key: K): LensS<A[K], S>;
}
export declare type LensSProxy<A, S> = LensS<A, S> & {
[K in keyof A]-?: LensSProxy<A[K], S>;
};
export declare class LensGenerator<S> {
fromKey<K extends keyof S>(key: K): LensS<S[K], S>;
fromKeys(...keys: []): LensS<S, S>;
fromKeys<K0 extends keyof S>(...keys: [K0]): LensS<S[K0], S>;
fromKeys<K0 extends keyof S, K1 extends keyof S[K0]>(...keys: [K0, K1]): LensS<S[K0][K1], S>;
fromKeys<K0 extends keyof S, K1 extends keyof S[K0], K2 extends keyof S[K0][K1]>(...keys: [K0, K1, K2]): LensS<S[K0][K1][K2], S>;
fromKeys<K0 extends keyof S, K1 extends keyof S[K0], K2 extends keyof S[K0][K1], K3 extends keyof S[K0][K1][K2]>(...keys: [K0, K1, K2, K3]): LensS<S[K0][K1][K2][K3], S>;
fromKeys<K0 extends keyof S, K1 extends keyof S[K0], K2 extends keyof S[K0][K1], K3 extends keyof S[K0][K1][K2], K4 extends keyof S[K0][K1][K2][K3]>(...keys: [K0, K1, K2, K3, K4]): LensS<S[K0][K1][K2][K3][K4], S>;
fromKeys<K0 extends keyof S, K1 extends keyof S[K0], K2 extends keyof S[K0][K1], K3 extends keyof S[K0][K1][K2], K4 extends keyof S[K0][K1][K2][K3], K5 extends keyof S[K0][K1][K2][K3][K4]>(...keys: [K0, K1, K2, K3, K4, K5]): LensS<S[K0][K1][K2][K3][K4][K5], S>;
fromKeys<K0 extends keyof S, K1 extends keyof S[K0], K2 extends keyof S[K0][K1], K3 extends keyof S[K0][K1][K2], K4 extends keyof S[K0][K1][K2][K3], K5 extends keyof S[K0][K1][K2][K3][K4], K6 extends keyof S[K0][K1][K2][K3][K4][K5]>(...keys: [K0, K1, K2, K3, K4, K5, K6]): LensS<S[K0][K1][K2][K3][K4][K5][K6], S>;
fromKeys<P>(...keys: any[]): LensS<P, S>;
byProxy(): LensSProxy<S, S>;
}