UNPKG

@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
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>; }