@@ -79,7 +79,7 @@ export const asLensImpl = <A, ER, EW, RR, RW>(
|
|||||||
lens: Lens<A, ER, EW, RR, RW>
|
lens: Lens<A, ER, EW, RR, RW>
|
||||||
): LensImpl<A, ER, EW, RR, RW> => {
|
): LensImpl<A, ER, EW, RR, RW> => {
|
||||||
if (!isLensImpl(lens))
|
if (!isLensImpl(lens))
|
||||||
throw new Error("Not a 'LensImpl'.")
|
throw new Error("Not a 'LensImpl'")
|
||||||
return lens as LensImpl<A, ER, EW, RR, RW>
|
return lens as LensImpl<A, ER, EW, RR, RW>
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -122,67 +122,6 @@ export const make = <A, ER, EW, RR, RW>(
|
|||||||
): Lens<A, ER, EW, RR, RW> => new LensLazyImpl(source)
|
): Lens<A, ER, EW, RR, RW> => new LensLazyImpl(source)
|
||||||
|
|
||||||
|
|
||||||
export declare namespace DerivedLensImpl {
|
|
||||||
export interface Source<
|
|
||||||
in out A,
|
|
||||||
in out B,
|
|
||||||
in out ER = never,
|
|
||||||
in out ESR = never,
|
|
||||||
in out EW = never,
|
|
||||||
in out ESW = never,
|
|
||||||
in out RR = never,
|
|
||||||
in out RSR = never,
|
|
||||||
in out RW = never,
|
|
||||||
in out RSW = never,
|
|
||||||
> {
|
|
||||||
readonly resolve: (effect: Effect.Effect<LensImpl.Resolved<B, ESW, RSW>, ESR, RSR>) => Effect.Effect<LensImpl.Resolved<A, EW, RW>, ER, RR>
|
|
||||||
readonly mapStream: (stream: Stream.Stream<B, ESR, RSR>) => Stream.Stream<A, ER, RR>
|
|
||||||
readonly mapLock: (lock: Effect.Effect<LensImpl.Lock, ESW, RSW>) => Effect.Effect<LensImpl.Lock, EW, RW>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export class DerivedLensImpl<
|
|
||||||
in out A,
|
|
||||||
in out B,
|
|
||||||
in out ER = never,
|
|
||||||
in out PER = never,
|
|
||||||
in out EW = never,
|
|
||||||
in out PEW = never,
|
|
||||||
in out RR = never,
|
|
||||||
in out PRR = never,
|
|
||||||
in out RW = never,
|
|
||||||
in out PRW = never,
|
|
||||||
>
|
|
||||||
extends LensImpl<A, ER, EW, RR, RW> {
|
|
||||||
constructor(
|
|
||||||
readonly parent: LensImpl<B, PER, PEW, PRR, PRW>,
|
|
||||||
readonly source: DerivedLensImpl.Source<A, B, ER, PER, EW, PEW, RR, PRR, RW, PRW>,
|
|
||||||
) {
|
|
||||||
super()
|
|
||||||
}
|
|
||||||
|
|
||||||
get resolve() { return this.source.resolve(this.parent.resolve) }
|
|
||||||
get changes() { return this.source.mapStream(this.parent.changes) }
|
|
||||||
get lock() { return this.source.mapLock(this.parent.lock) }
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Derives a new `Lens` by linking a step to an existing parent lens.
|
|
||||||
*/
|
|
||||||
export const derive: {
|
|
||||||
<A, B, ER, EW, RR, RW, ER2, EW2, RR2, RW2>(
|
|
||||||
self: Lens<B, ER, EW, RR, RW>,
|
|
||||||
source: DerivedLensImpl.Source<A, B, ER2, ER, EW2, EW, RR2, RR, RW2, RW>,
|
|
||||||
): Lens<A, ER2, EW2, RR2, RW2>
|
|
||||||
<A, B, ER, EW, RR, RW, ER2, EW2, RR2, RW2>(
|
|
||||||
source: DerivedLensImpl.Source<A, B, ER2, ER, EW2, EW, RR2, RR, RW2, RW>,
|
|
||||||
): (self: Lens<B, ER, EW, RR, RW>) => Lens<A, ER2, EW2, RR2, RW2>
|
|
||||||
} = Function.dual(2, <A, B, ER, EW, RR, RW, ER2, EW2, RR2, RW2>(
|
|
||||||
self: Lens<B, ER, EW, RR, RW>,
|
|
||||||
source: DerivedLensImpl.Source<A, B, ER2, ER, EW2, EW, RR2, RR, RW2, RW>,
|
|
||||||
): Lens<A, ER2, EW2, RR2, RW2> => new DerivedLensImpl(asLensImpl(self), source))
|
|
||||||
|
|
||||||
|
|
||||||
export class UnwrappedLensImpl<in out A, in out ER, in out EW, in out RR, in out RW, in out E1, in out R1>
|
export class UnwrappedLensImpl<in out A, in out ER, in out EW, in out RR, in out RW, in out E1, in out R1>
|
||||||
extends LensImpl<A, ER | E1, EW | E1, RR | R1, RW | R1> {
|
extends LensImpl<A, ER | E1, EW | E1, RR | R1, RW | R1> {
|
||||||
constructor(
|
constructor(
|
||||||
@@ -337,6 +276,67 @@ export const fromSubscriptionRef = <A>(
|
|||||||
): Lens<A, never, never, never, never> => new SubscriptionRefLensImpl(ref as SubscriptionRefLensImpl.SubscriptionRefWithInternals<A>)
|
): Lens<A, never, never, never, never> => new SubscriptionRefLensImpl(ref as SubscriptionRefLensImpl.SubscriptionRefWithInternals<A>)
|
||||||
|
|
||||||
|
|
||||||
|
export declare namespace DerivedLensImpl {
|
||||||
|
export interface Source<
|
||||||
|
in out A,
|
||||||
|
in out B,
|
||||||
|
in out ER = never,
|
||||||
|
in out ESR = never,
|
||||||
|
in out EW = never,
|
||||||
|
in out ESW = never,
|
||||||
|
in out RR = never,
|
||||||
|
in out RSR = never,
|
||||||
|
in out RW = never,
|
||||||
|
in out RSW = never,
|
||||||
|
> {
|
||||||
|
readonly resolve: (effect: Effect.Effect<LensImpl.Resolved<B, ESW, RSW>, ESR, RSR>) => Effect.Effect<LensImpl.Resolved<A, EW, RW>, ER, RR>
|
||||||
|
readonly mapStream: (stream: Stream.Stream<B, ESR, RSR>) => Stream.Stream<A, ER, RR>
|
||||||
|
readonly mapLock: (lock: Effect.Effect<LensImpl.Lock, ESW, RSW>) => Effect.Effect<LensImpl.Lock, EW, RW>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class DerivedLensImpl<
|
||||||
|
in out A,
|
||||||
|
in out B,
|
||||||
|
in out ER = never,
|
||||||
|
in out PER = never,
|
||||||
|
in out EW = never,
|
||||||
|
in out PEW = never,
|
||||||
|
in out RR = never,
|
||||||
|
in out PRR = never,
|
||||||
|
in out RW = never,
|
||||||
|
in out PRW = never,
|
||||||
|
>
|
||||||
|
extends LensImpl<A, ER, EW, RR, RW> {
|
||||||
|
constructor(
|
||||||
|
readonly parent: LensImpl<B, PER, PEW, PRR, PRW>,
|
||||||
|
readonly source: DerivedLensImpl.Source<A, B, ER, PER, EW, PEW, RR, PRR, RW, PRW>,
|
||||||
|
) {
|
||||||
|
super()
|
||||||
|
}
|
||||||
|
|
||||||
|
get resolve() { return this.source.resolve(this.parent.resolve) }
|
||||||
|
get changes() { return this.source.mapStream(this.parent.changes) }
|
||||||
|
get lock() { return this.source.mapLock(this.parent.lock) }
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Derives a new `Lens` by linking a step to an existing parent lens.
|
||||||
|
*/
|
||||||
|
export const derive: {
|
||||||
|
<A, B, ER, EW, RR, RW, ER2, EW2, RR2, RW2>(
|
||||||
|
self: Lens<B, ER, EW, RR, RW>,
|
||||||
|
source: DerivedLensImpl.Source<A, B, ER2, ER, EW2, EW, RR2, RR, RW2, RW>,
|
||||||
|
): Lens<A, ER2, EW2, RR2, RW2>
|
||||||
|
<A, B, ER, EW, RR, RW, ER2, EW2, RR2, RW2>(
|
||||||
|
source: DerivedLensImpl.Source<A, B, ER2, ER, EW2, EW, RR2, RR, RW2, RW>,
|
||||||
|
): (self: Lens<B, ER, EW, RR, RW>) => Lens<A, ER2, EW2, RR2, RW2>
|
||||||
|
} = Function.dual(2, <A, B, ER, EW, RR, RW, ER2, EW2, RR2, RW2>(
|
||||||
|
self: Lens<B, ER, EW, RR, RW>,
|
||||||
|
source: DerivedLensImpl.Source<A, B, ER2, ER, EW2, EW, RR2, RR, RW2, RW>,
|
||||||
|
): Lens<A, ER2, EW2, RR2, RW2> => new DerivedLensImpl(asLensImpl(self), source))
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Derives a new `Lens` by applying synchronous getters and setters over the focused value.
|
* Derives a new `Lens` by applying synchronous getters and setters over the focused value.
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user