effect-lens 0.1.4 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -28,7 +28,7 @@ Lens<
28
28
  A, // Type of the value the lens is focused on
29
29
  ER, // Errors that can happen when reading
30
30
  EW, // Errors that can happen when writing
31
- RE, // Requirements for reading
31
+ RR, // Requirements for reading
32
32
  RW // Requirements for writing
33
33
  >
34
34
  ```
@@ -36,13 +36,13 @@ Lens<
36
36
 
37
37
  ### Creating a Lens
38
38
 
39
- #### From an exisiting type
39
+ #### From an existing type
40
40
  We provide a few helpers to create Lenses from some Effect types:
41
41
  ```typescript
42
42
  // The ref is the data source
43
43
  const ref = yield* SubscriptionRef.make([12, 87, 69])
44
44
 
45
- // The lens acts as a proxy that allows reading, subscribing from and writing to that
45
+ // The lens acts as a proxy that allows reading, subscribing to and writing to that
46
46
  // data source with a similar API to Effect's SubscriptionRef
47
47
  const lens = Lens.fromSubscriptionRef(ref)
48
48
  // ^ Lens.Lens<number[], never, never, never, never>
@@ -54,12 +54,15 @@ yield* Lens.update(lens, Array.replace(1, 1664))
54
54
 
55
55
  Currently available:
56
56
  - `fromSubscriptionRef`
57
- - `fromSynchronizedRef` (note: since `SynchronizedRef` is not reactive (does not produces a stream of value changes), the resulting Lens' `changes` stream will only emit the current value of the lens when evaluated, and nothing else)
58
-
59
- More to come!
57
+ - `fromSynchronizedRef` (note: since `SynchronizedRef` is not reactive (does not produce a stream of value changes), the resulting Lens' `changes` stream will only emit the current value of the lens when evaluated, and nothing else)
58
+ - `fromRef` (returns an effect because it creates an internal lock)
60
59
 
61
60
  #### Manually
62
- You can also create Lenses manually using `make` by providing a getter, a stream of changes and either a `set` or `modify` function depending on your needs.
61
+ You can also create Lenses manually using `make` by providing:
62
+ - `get`: an effect that reads the current value,
63
+ - `changes`: a stream of value changes,
64
+ - `commit`: an effectful write primitive,
65
+ - `lock`: an effect that produces the lock used to serialize writes.
63
66
 
64
67
  You can get pretty creative! Here's an example of a Lens that points to a specific key of the browser `LocalStorage`:
65
68
  ```typescript
@@ -67,8 +70,9 @@ You can get pretty creative! Here's an example of a Lens that points to a specif
67
70
  const lens = Effect.all([
68
71
  KeyValueStore.KeyValueStore,
69
72
  Effect.succeed("someKey"),
73
+ Effect.makeSemaphore(1),
70
74
  ]).pipe(
71
- Effect.map(([kv, key]) => Lens.make({
75
+ Effect.map(([kv, key, semaphore]) => Lens.make({
72
76
  get: kv.get(key),
73
77
 
74
78
  changes: kv.get(key).pipe(
@@ -83,9 +87,11 @@ const lens = Effect.all([
83
87
  Stream.unwrap,
84
88
  ),
85
89
 
86
- set: a => Option.isSome(a)
90
+ commit: a => Option.isSome(a)
87
91
  ? kv.set(key, a.value)
88
92
  : kv.remove(key),
93
+
94
+ lock: Effect.succeed(semaphore.withPermits(1)),
89
95
  })),
90
96
 
91
97
  Effect.provide(BrowserKeyValueStore.layerLocalStorage),
@@ -110,7 +116,7 @@ Lens<{ readonly a: string, readonly b: number }, never, never, never, never>
110
116
  Lens<string, never, never, never, never>
111
117
  ```
112
118
 
113
- Focuses Lenses work just the same as a Lens that points directly to a data source and can be read, subscribed to or written to.
119
+ Focused Lenses work just the same as a Lens that points directly to a data source and can be read, subscribed to or written to.
114
120
 
115
121
  Writing to them will properly update parent Lenses or data sources. Such updates can be performed in both a mutable or an immutable manner depending on your choice.
116
122
 
@@ -137,36 +143,35 @@ const ref = yield* SubscriptionRef.make<{
137
143
 
138
144
  // \/ Lens<User, NoSuchElementException, NoSuchElementException, never, never>
139
145
  const jeanDupontLens = ref.pipe(
140
- Lens.fromSubscriptionRef, // Creates a lens that proxies the ref
141
- Lens.focusObjectField("users"), // Creates a focused lens that points to the users field
142
- Lens.focusArrayAt(0), // Creates a focused lens that points to the first entry of the user array
146
+ Lens.fromSubscriptionRef, // Creates a lens that proxies the ref
147
+ Lens.focusObjectOn("users"), // Creates a focused lens that points to the users field
148
+ Lens.focusArrayAt(0), // Creates a focused lens that points to the first entry of the user array
143
149
  )
144
- // Reading or writing from this lense can fail with NoSuchElementException
150
+ // Reading or writing from this lens can fail with NoSuchElementException
145
151
  // This is because of Lens.focusArrayAt(0), as reading and writing to an array is an unsafe operation
146
152
 
147
153
  const jeanDupont = yield* Lens.get(jeanDupontLens)
148
154
 
149
155
  yield* Lens.set(
150
156
  // You can focus even further down
151
- Lens.focusObjectField(jeanDupontLens, "age"),
157
+ Lens.focusObjectOn(jeanDupontLens, "age"),
152
158
  yield* DateTime.make("03/25/1970"),
153
159
  )
154
160
  // Mutations with the parent state are performed immutably by default
155
- // unless you use a specific mutable transform such as 'focusMutableField'
161
+ // unless you use a specific mutable transform such as 'focusObjectOnWritable'
156
162
  ```
157
163
 
158
164
  Currently available:
159
165
  | Name | Description | Parent state mutation behavior | Notes |
160
166
  | - | - | - | - |
161
- | `focusObjectField` | Focuses to the field of an object. Replaces the parent object immutably when writing to the focused field | Immutable | |
162
- | `focusObjectMutableField` | Focuses to the writable field of an object. Mutates the parent object in place via the writable field | Mutable | Type-safe: will not allow you to mutate `readonly` fields |
167
+ | `focusObjectOn` | Focuses to a field of an object. Replaces the parent object immutably when writing to the focused field | Immutable | |
168
+ | `focusObjectOnWritable` | Focuses to a writable field of an object. Mutates the parent object in place via the writable field | Mutable | Type-safe: will not allow you to mutate `readonly` fields |
163
169
  | `focusArrayAt` | Focuses to an indexed entry of an array. Replaces the parent array immutably when writing to the focused index | Immutable | |
164
170
  | `focusMutableArrayAt` | Focuses to an indexed entry of an array. Mutates the parent array in place at the focused index | Mutable | Type-safe: will not allow you to mutate `readonly` arrays |
165
171
  | `focusTupleAt` | Focuses to an indexed entry of a readonly tuple. Replaces the parent tuple immutably when writing to the focused index | Immutable | |
166
172
  | `focusMutableTupleAt` | Focuses to an indexed entry of a mutable tuple. Mutates the parent tuple in place at the focused index | Mutable | Type-safe: will not allow you to mutate `readonly` tuples |
167
173
  | `focusChunkAt` | Focuses to an indexed entry of a `Chunk`. Replaces the parent `Chunk` immutably when writing to the focused element | Immutable | |
168
-
169
- Also more to come!
174
+ | `focusOption` | Focuses to the value inside an `Option`. Wraps writes back into `Option.some` | Immutable | Reading or writing fails with `NoSuchElementException` when the parent option is `None` |
170
175
 
171
176
  #### Manually
172
177
  You can create focused Lenses by composing them manually using `map`, `mapEffect` and `unwrap`:
@@ -196,6 +201,42 @@ const benzemonstreLens = ref.pipe(
196
201
  // As you can see, this is automatically tracked by the Lens type
197
202
  ```
198
203
 
204
+ #### Low-level derived lenses
205
+ For advanced cases, you can derive a Lens manually using `derive`. This is the primitive used by the built-in transforms.
206
+
207
+ A derived Lens describes how to transform three parent channels:
208
+ - `resolve`: reads the parent and returns the focused value plus a `commit` function to rebuild the parent,
209
+ - `mapStream`: transforms the parent `changes` stream,
210
+ - `mapLock`: transforms the parent write lock.
211
+
212
+ Most custom focusing logic should use `map` or `mapEffect`, but `derive` is useful when you need full control over read, stream, lock, and write-back behavior.
213
+
214
+ ```typescript
215
+ declare const lens: Lens.Lens<User, never, never, never, never>
216
+
217
+ const nameLens = lens.pipe(
218
+ Lens.derive({
219
+ resolve: parent => Effect.map(
220
+ parent,
221
+ resolved => ({
222
+ value: resolved.value.name,
223
+ commit: next => resolved.commit(
224
+ Effect.map(next, name => ({
225
+ ...resolved.value,
226
+ name,
227
+ })),
228
+ ),
229
+ }),
230
+ ),
231
+
232
+ mapStream: Stream.map(user => user.name),
233
+
234
+ // This derived Lens does not add lock behavior, so it reuses the parent lock.
235
+ mapLock: identity,
236
+ }),
237
+ )
238
+ ```
239
+
199
240
 
200
241
  ### Subscribable
201
242
 
@@ -211,12 +252,12 @@ const someFunctionThatShouldOnlyHaveReadonlyAccessToTheState = (
211
252
  // Do whatever
212
253
  const usersCountSub = Subscribable.map(usersSub, a => a.length)
213
254
  const users = yield* usersSub.get
214
- yield* Effect.forkScoped(Stream.runForEach(users.changes, ...))
255
+ yield* Effect.forkScoped(Stream.runForEach(usersSub.changes, ...))
215
256
  })
216
257
 
217
258
  const lens = ref.pipe(
218
259
  Lens.fromSubscriptionRef,
219
- Lens.focusObjectField("users"),
260
+ Lens.focusObjectOn("users"),
220
261
  )
221
262
  yield* someFunctionThatShouldOnlyHaveReadonlyAccessToTheState(lens)
222
263
  ```
@@ -226,22 +267,25 @@ This library re-exports Effect's `Subscribable` module and adds a few transforms
226
267
  ```typescript
227
268
  import { Subscribable } from "effect-lens"
228
269
 
229
- declare const sub: Subscribabe.Subscribable<readonly { name: string }[], never, never>
270
+ declare const sub: Subscribable.Subscribable<readonly { name: string }[], never, never>
230
271
 
231
- // \/ Subscribabe.Subscribable<string, NoSuchElementException, never>
272
+ // \/ Subscribable.Subscribable<string, NoSuchElementException, never>
232
273
  const nameSub = sub.pipe(
233
274
  Subscribable.focusArrayAt(1),
234
- Subscribable.focusObjectField("name"),
275
+ Subscribable.focusObjectOn("name"),
235
276
  )
236
277
  ```
237
278
 
238
279
  Currently available:
239
280
  | Name | Description |
240
281
  | - | - |
241
- | `focusObjectField` | Focuses to the field of an object |
282
+ | `focusObjectOn` | Focuses to the field of an object |
242
283
  | `focusArrayAt` | Focuses to an indexed entry of an array |
284
+ | `focusArrayLength` | Focuses to the length of an array |
243
285
  | `focusTupleAt` | Focuses to an indexed entry of a tuple |
244
286
  | `focusChunkAt` | Focuses to an indexed entry of a `Chunk` |
287
+ | `focusChunkSize` | Focuses to the size of a `Chunk` |
288
+ | `focusIterableSize` | Focuses to the size of an iterable |
245
289
 
246
290
 
247
291
  ## Todo
package/dist/Lens.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Chunk, Effect, Option, Pipeable, Readable, Stream, type SubscriptionRef, type SynchronizedRef } from "effect";
1
+ import { Chunk, type Context, Effect, Option, Pipeable, PubSub, Readable, Ref, Stream, type SubscriptionRef, type SynchronizedRef } from "effect";
2
2
  import type { NoSuchElementException } from "effect/Cause";
3
3
  import * as Subscribable from "./Subscribable.js";
4
4
  export declare const LensTypeId: unique symbol;
@@ -12,42 +12,95 @@ export type LensTypeId = typeof LensTypeId;
12
12
  */
13
13
  export interface Lens<in out A, in out ER = never, in out EW = never, in out RR = never, in out RW = never> extends Subscribable.Subscribable<A, ER, RR> {
14
14
  readonly [LensTypeId]: LensTypeId;
15
- readonly modify: <B, E1 = never, R1 = never>(f: (a: A) => Effect.Effect<readonly [B, A], E1, R1>) => Effect.Effect<B, ER | EW | E1, RR | RW | R1>;
15
+ readonly modifyEffect: <B, E1 = never, R1 = never>(f: (a: A) => Effect.Effect<readonly [B, A], E1, R1>) => Effect.Effect<B, ER | EW | E1, RR | RW | R1>;
16
16
  }
17
- declare const LensImpl_base: Pipeable.PipeableConstructor;
18
17
  /**
19
- * Internal `Lens` implementation.
18
+ * Checks whether a value is a `Lens`.
20
19
  */
21
- export declare class LensImpl<in out A, in out ER = never, in out EW = never, in out RR = never, in out RW = never> extends LensImpl_base implements Lens<A, ER, EW, RR, RW> {
22
- readonly get: Effect.Effect<A, ER, RR>;
23
- readonly changes: Stream.Stream<A, ER, RR>;
24
- readonly modify: <B, E1 = never, R1 = never>(f: (a: A) => Effect.Effect<readonly [B, A], E1, R1>) => Effect.Effect<B, ER | EW | E1, RR | RW | R1>;
20
+ export declare const isLens: (u: unknown) => u is Lens<unknown, unknown, unknown, unknown, unknown>;
21
+ export declare const LensImplTypeId: unique symbol;
22
+ export type LensImplTypeId = typeof LensImplTypeId;
23
+ export declare namespace LensImpl {
24
+ interface Resolved<in out A, in out EW = never, in out RW = never> {
25
+ readonly value: A;
26
+ readonly commit: <E = never, R = never>(next: Effect.Effect<A, E, R>) => Effect.Effect<void, EW | E, RW | R>;
27
+ }
28
+ interface Lock {
29
+ <A1, E1, R1>(self: Effect.Effect<A1, E1, R1>): Effect.Effect<A1, E1, R1>;
30
+ }
31
+ }
32
+ declare const LensImpl_base: Pipeable.PipeableConstructor;
33
+ export declare abstract class LensImpl<in out A, in out ER = never, in out EW = never, in out RR = never, in out RW = never> extends LensImpl_base implements Lens<A, ER, EW, RR, RW> {
25
34
  readonly [Readable.TypeId]: Readable.TypeId;
26
35
  readonly [Subscribable.TypeId]: Subscribable.TypeId;
27
36
  readonly [LensTypeId]: LensTypeId;
28
- constructor(get: Effect.Effect<A, ER, RR>, changes: Stream.Stream<A, ER, RR>, modify: <B, E1 = never, R1 = never>(f: (a: A) => Effect.Effect<readonly [B, A], E1, R1>) => Effect.Effect<B, ER | EW | E1, RR | RW | R1>);
37
+ readonly [LensImplTypeId]: LensImplTypeId;
38
+ abstract readonly resolve: Effect.Effect<LensImpl.Resolved<A, EW, RW>, ER, RR>;
39
+ abstract readonly changes: Stream.Stream<A, ER, RR>;
40
+ abstract readonly lock: Effect.Effect<LensImpl.Lock, EW, RW>;
41
+ get get(): Effect.Effect<A, ER, RR>;
42
+ modifyEffect<B, E1 = never, R1 = never>(f: (a: A) => Effect.Effect<readonly [B, A], E1, R1>): Effect.Effect<B, ER | EW | E1, RR | RW | R1>;
43
+ }
44
+ export declare const isLensImpl: (u: unknown) => u is LensImpl<unknown, unknown, unknown, unknown, unknown>;
45
+ export declare const asLensImpl: <A, ER, EW, RR, RW>(lens: Lens<A, ER, EW, RR, RW>) => LensImpl<A, ER, EW, RR, RW>;
46
+ export declare namespace LensLazyImpl {
47
+ interface Source<in out A, in out ER = never, in out EW = never, in out RR = never, in out RW = never> {
48
+ readonly get: Effect.Effect<A, ER, RR>;
49
+ readonly changes: Stream.Stream<A, ER, RR>;
50
+ readonly commit: (a: A) => Effect.Effect<void, EW, RW>;
51
+ readonly lock: Effect.Effect<LensImpl.Lock, EW, RW>;
52
+ }
53
+ }
54
+ export declare class LensLazyImpl<in out A, in out ER = never, in out EW = never, in out RR = never, in out RW = never> extends LensImpl<A, ER, EW, RR, RW> {
55
+ readonly source: LensLazyImpl.Source<A, ER, EW, RR, RW>;
56
+ constructor(source: LensLazyImpl.Source<A, ER, EW, RR, RW>);
57
+ get resolve(): Effect.Effect<LensImpl.Resolved<A, EW, RW>, ER, RR>;
58
+ get changes(): Stream.Stream<A, ER, RR>;
59
+ get lock(): Effect.Effect<LensImpl.Lock, EW, RW>;
29
60
  }
30
61
  /**
31
- * Checks whether a value is a `Lens`.
62
+ * Creates a `Lens` by supplying how to read the current value, observe changes, and apply transformations.
32
63
  */
33
- export declare const isLens: (u: unknown) => u is Lens<unknown, unknown, unknown, unknown, unknown>;
64
+ export declare const make: <A, ER, EW, RR, RW>(source: LensLazyImpl.Source<A, ER, EW, RR, RW>) => Lens<A, ER, EW, RR, RW>;
65
+ export declare 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> {
66
+ readonly effect: Effect.Effect<Lens<A, ER, EW, RR, RW>, E1, R1>;
67
+ constructor(effect: Effect.Effect<Lens<A, ER, EW, RR, RW>, E1, R1>);
68
+ get resolve(): Effect.Effect<LensImpl.Resolved<A, EW | E1, RW | R1>, ER | E1, RR | R1>;
69
+ get changes(): Stream.Stream<A, ER | E1, RR | R1>;
70
+ get lock(): Effect.Effect<LensImpl.Lock, EW | E1, RW | R1>;
71
+ }
34
72
  /**
35
- * Creates a `Lens` by supplying how to read the current value, observe changes, and apply transformations.
36
- *
37
- * Either `modify` or `set` needs to be supplied.
73
+ * Flattens an effectful `Lens`.
38
74
  */
39
- export declare const make: <A, ER, EW, RR, RW>(options: {
40
- readonly get: Effect.Effect<A, ER, RR>;
41
- readonly changes: Stream.Stream<A, ER, RR>;
42
- } & ({
43
- readonly modify: <B, E1 = never, R1 = never>(f: (a: A) => Effect.Effect<readonly [B, A], E1, R1>) => Effect.Effect<B, ER | EW | E1, RR | RW | R1>;
44
- } | {
45
- readonly set: (a: A) => Effect.Effect<void, EW, RW>;
46
- })) => Lens<A, ER, EW, RR, RW>;
75
+ export declare const unwrap: <A, ER, EW, RR, RW, E1, R1>(effect: Effect.Effect<Lens<A, ER, EW, RR, RW>, E1, R1>) => Lens<A, ER | E1, EW | E1, RR | R1, RW | R1>;
76
+ export declare class RefLensImpl<in out A> extends LensImpl<A, never, never, never, never> {
77
+ readonly ref: Ref.Ref<A>;
78
+ readonly semaphore: Effect.Semaphore;
79
+ constructor(ref: Ref.Ref<A>, semaphore: Effect.Semaphore);
80
+ get resolve(): Effect.Effect<LensImpl.Resolved<A>, never, never>;
81
+ get changes(): Stream.Stream<A, never, never>;
82
+ get lock(): Effect.Effect<(<A_1, E, R>(self: Effect.Effect<A_1, E, R>) => Effect.Effect<A_1, E, R>), never, never>;
83
+ }
47
84
  /**
48
- * Creates a `Lens` that proxies a `SubscriptionRef`.
85
+ * Creates a `Lens` that proxies a `Ref`.
86
+ *
87
+ * Note: since `Ref` does not provide any kind of reactivity mechanism, the produced `Lens` will be non-reactive.
88
+ * This means its `changes` stream will only emit the current value once when evaluated and nothing else.
49
89
  */
50
- export declare const fromSubscriptionRef: <A>(ref: SubscriptionRef.SubscriptionRef<A>) => Lens<A, never, never, never, never>;
90
+ export declare const fromRef: <A>(ref: Ref.Ref<A>) => Effect.Effect<Lens<A, never, never, never, never>, never, never>;
91
+ export declare namespace SynchronizedRefLensImpl {
92
+ interface SynchronizedRefWithInternals<in out A> extends SynchronizedRef.SynchronizedRef<A> {
93
+ readonly ref: Ref.Ref<A>;
94
+ readonly withLock: LensImpl.Lock;
95
+ }
96
+ }
97
+ export declare class SynchronizedRefLensImpl<in out A> extends LensImpl<A, never, never, never, never> {
98
+ readonly ref: SynchronizedRefLensImpl.SynchronizedRefWithInternals<A>;
99
+ constructor(ref: SynchronizedRefLensImpl.SynchronizedRefWithInternals<A>);
100
+ get resolve(): Effect.Effect<LensImpl.Resolved<A>, never, never>;
101
+ get changes(): Stream.Stream<A, never, never>;
102
+ get lock(): Effect.Effect<LensImpl.Lock, never, never>;
103
+ }
51
104
  /**
52
105
  * Creates a `Lens` that proxies a `SynchronizedRef`.
53
106
  *
@@ -55,10 +108,46 @@ export declare const fromSubscriptionRef: <A>(ref: SubscriptionRef.SubscriptionR
55
108
  * This means its `changes` stream will only emit the current value once when evaluated and nothing else.
56
109
  */
57
110
  export declare const fromSynchronizedRef: <A>(ref: SynchronizedRef.SynchronizedRef<A>) => Lens<A, never, never, never, never>;
111
+ export declare namespace SubscriptionRefLensImpl {
112
+ interface SubscriptionRefWithInternals<in out A> extends SubscriptionRef.SubscriptionRef<A> {
113
+ readonly ref: Ref.Ref<A>;
114
+ readonly pubsub: PubSub.PubSub<A>;
115
+ readonly semaphore: Effect.Semaphore;
116
+ }
117
+ }
118
+ export declare class SubscriptionRefLensImpl<in out A> extends LensImpl<A, never, never, never, never> {
119
+ readonly ref: SubscriptionRefLensImpl.SubscriptionRefWithInternals<A>;
120
+ constructor(ref: SubscriptionRefLensImpl.SubscriptionRefWithInternals<A>);
121
+ get resolve(): Effect.Effect<LensImpl.Resolved<A>, never, never>;
122
+ get changes(): Stream.Stream<A, never, never>;
123
+ get lock(): Effect.Effect<(<A_1, E, R>(self: Effect.Effect<A_1, E, R>) => Effect.Effect<A_1, E, R>), never, never>;
124
+ }
58
125
  /**
59
- * Flattens an effectful `Lens`.
126
+ * Creates a `Lens` that proxies a `SubscriptionRef`.
60
127
  */
61
- export declare const unwrap: <A, ER, EW, RR, RW, E1, R1>(effect: Effect.Effect<Lens<A, ER, EW, RR, RW>, E1, R1>) => Lens<A, ER | E1, EW | E1, RR | R1, RW | R1>;
128
+ export declare const fromSubscriptionRef: <A>(ref: SubscriptionRef.SubscriptionRef<A>) => Lens<A, never, never, never, never>;
129
+ export declare namespace DerivedLensImpl {
130
+ 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> {
131
+ readonly resolve: (effect: Effect.Effect<LensImpl.Resolved<B, ESW, RSW>, ESR, RSR>) => Effect.Effect<LensImpl.Resolved<A, EW, RW>, ER, RR>;
132
+ readonly mapStream: (stream: Stream.Stream<B, ESR, RSR>) => Stream.Stream<A, ER, RR>;
133
+ readonly mapLock: (lock: Effect.Effect<LensImpl.Lock, ESW, RSW>) => Effect.Effect<LensImpl.Lock, EW, RW>;
134
+ }
135
+ }
136
+ export declare 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> {
137
+ readonly parent: LensImpl<B, PER, PEW, PRR, PRW>;
138
+ readonly source: DerivedLensImpl.Source<A, B, ER, PER, EW, PEW, RR, PRR, RW, PRW>;
139
+ constructor(parent: LensImpl<B, PER, PEW, PRR, PRW>, source: DerivedLensImpl.Source<A, B, ER, PER, EW, PEW, RR, PRR, RW, PRW>);
140
+ get resolve(): Effect.Effect<LensImpl.Resolved<A, EW, RW>, ER, RR>;
141
+ get changes(): Stream.Stream<A, ER, RR>;
142
+ get lock(): Effect.Effect<LensImpl.Lock, EW, RW>;
143
+ }
144
+ /**
145
+ * Derives a new `Lens` by linking a step to an existing parent lens.
146
+ */
147
+ export declare const derive: {
148
+ <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>;
149
+ <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>;
150
+ };
62
151
  /**
63
152
  * Derives a new `Lens` by applying synchronous getters and setters over the focused value.
64
153
  */
@@ -102,14 +191,89 @@ export declare const mapStream: {
102
191
  <A, ER, EW, RR, RW>(self: Lens<A, ER, EW, RR, RW>, f: (changes: Stream.Stream<NoInfer<A>, NoInfer<ER>, NoInfer<RR>>) => Stream.Stream<NoInfer<A>, NoInfer<ER>, NoInfer<RR>>): Lens<A, ER, EW, RR, RW>;
103
192
  <A, ER, EW, RR, RW>(f: (changes: Stream.Stream<NoInfer<A>, NoInfer<ER>, NoInfer<RR>>) => Stream.Stream<NoInfer<A>, NoInfer<ER>, NoInfer<RR>>): (self: Lens<A, ER, EW, RR, RW>) => Lens<A, ER, EW, RR, RW>;
104
193
  };
194
+ /**
195
+ * Transforms read errors of a `Lens`.
196
+ *
197
+ * Applies to `get` and `changes` while leaving `modify` unchanged.
198
+ */
199
+ export declare const mapErrorRead: {
200
+ <A, ER, EW, RR, RW, E2>(self: Lens<A, ER, EW, RR, RW>, f: (error: NoInfer<ER>) => E2): Lens<A, E2, EW, RR, RW>;
201
+ <A, ER, EW, RR, RW, E2>(f: (error: NoInfer<ER>) => E2): (self: Lens<A, ER, EW, RR, RW>) => Lens<A, E2, EW, RR, RW>;
202
+ };
203
+ /**
204
+ * Transforms modify errors of a `Lens`.
205
+ *
206
+ * Applies to the commit/rebuild portion of `modifyEffect` while leaving failures from the
207
+ * user-supplied callback unchanged.
208
+ */
209
+ export declare const mapErrorWrite: {
210
+ <A, ER, EW, RR, RW, E2>(self: Lens<A, ER, EW, RR, RW>, f: (error: NoInfer<EW>) => E2): Lens<A, ER, E2, RR, RW>;
211
+ <A, ER, EW, RR, RW, E2>(f: (error: NoInfer<EW>) => E2): (self: Lens<A, ER, EW, RR, RW>) => Lens<A, ER, E2, RR, RW>;
212
+ };
213
+ /**
214
+ * Transforms all errors of a `Lens`.
215
+ *
216
+ * Applies to `get`, `changes`, and the commit/rebuild portion of `modifyEffect` while leaving
217
+ * failures from the user-supplied callback unchanged.
218
+ */
219
+ export declare const mapError: {
220
+ <A, ER, EW, RR, RW, E2>(self: Lens<A, ER, EW, RR, RW>, f: (error: NoInfer<ER | EW>) => E2): Lens<A, E2, E2, RR, RW>;
221
+ <A, ER, EW, RR, RW, E2>(f: (error: NoInfer<ER | EW>) => E2): (self: Lens<A, ER, EW, RR, RW>) => Lens<A, E2, E2, RR, RW>;
222
+ };
223
+ /**
224
+ * Runs an effect when read failures occur.
225
+ *
226
+ * Applies to `get` and `changes` while leaving `modify` unchanged.
227
+ */
228
+ export declare const tapErrorRead: {
229
+ <A, ER, EW, RR, RW, E2, R2>(self: Lens<A, ER, EW, RR, RW>, f: (error: NoInfer<ER>) => Effect.Effect<unknown, E2, R2>): Lens<A, ER | E2, EW, RR | R2, RW>;
230
+ <A, ER, EW, RR, RW, E2, R2>(f: (error: NoInfer<ER>) => Effect.Effect<unknown, E2, R2>): (self: Lens<A, ER, EW, RR, RW>) => Lens<A, ER | E2, EW, RR | R2, RW>;
231
+ };
232
+ /**
233
+ * Runs an effect when modify failures occur.
234
+ *
235
+ * Applies to the commit/rebuild portion of `modifyEffect` while leaving failures from the
236
+ * user-supplied callback unchanged.
237
+ */
238
+ export declare const tapErrorWrite: {
239
+ <A, ER, EW, RR, RW, E2, R2>(self: Lens<A, ER, EW, RR, RW>, f: (error: NoInfer<EW>) => Effect.Effect<unknown, E2, R2>): Lens<A, ER, EW | E2, RR, RW | R2>;
240
+ <A, ER, EW, RR, RW, E2, R2>(f: (error: NoInfer<EW>) => Effect.Effect<unknown, E2, R2>): (self: Lens<A, ER, EW, RR, RW>) => Lens<A, ER, EW | E2, RR, RW | R2>;
241
+ };
242
+ /**
243
+ * Runs an effect when any `Lens` failure occurs.
244
+ *
245
+ * Applies to `get`, `changes`, and the commit/rebuild portion of `modifyEffect` while leaving
246
+ * failures from the user-supplied callback unchanged.
247
+ */
248
+ export declare const tapError: {
249
+ <A, ER, EW, RR, RW, E2, R2>(self: Lens<A, ER, EW, RR, RW>, f: (error: NoInfer<ER | EW>) => Effect.Effect<unknown, E2, R2>): Lens<A, ER | E2, EW | E2, RR | R2, RW | R2>;
250
+ <A, ER, EW, RR, RW, E2, R2>(f: (error: NoInfer<ER | EW>) => Effect.Effect<unknown, E2, R2>): (self: Lens<A, ER, EW, RR, RW>) => Lens<A, ER | E2, EW | E2, RR | R2, RW | R2>;
251
+ };
252
+ /**
253
+ * Provides a `Context` to a `Lens`, removing it from both the read and write environments.
254
+ */
255
+ export declare const provideContext: {
256
+ <A, ER, EW, RR, RW, R2>(self: Lens<A, ER, EW, RR, RW>, context: Context.Context<R2>): Lens<A, ER, EW, Exclude<RR, R2>, Exclude<RW, R2>>;
257
+ <R2>(context: Context.Context<R2>): <A, ER, EW, RR, RW>(self: Lens<A, ER, EW, RR, RW>) => Lens<A, ER, EW, Exclude<RR, R2>, Exclude<RW, R2>>;
258
+ };
259
+ /**
260
+ * Provides a single service to a `Lens`, removing it from both the read and write environments.
261
+ *
262
+ * This is the `Lens` equivalent of `Effect.provideService`: use it when a lens requires one
263
+ * `Context.Tag` and you already have the concrete service value.
264
+ */
265
+ export declare const provideService: {
266
+ <A, ER, EW, RR, RW, I, S>(self: Lens<A, ER, EW, RR, RW>, tag: Context.Tag<I, S>, service: NoInfer<S>): Lens<A, ER, EW, Exclude<RR, I>, Exclude<RW, I>>;
267
+ <I, S>(tag: Context.Tag<I, S>, service: NoInfer<S>): <A, ER, EW, RR, RW>(self: Lens<A, ER, EW, RR, RW>) => Lens<A, ER, EW, Exclude<RR, I>, Exclude<RW, I>>;
268
+ };
105
269
  /**
106
270
  * Narrows the focus to a field of an object. Replaces the object in an immutable fashion when written to.
107
271
  */
108
- export declare const focusObjectField: {
272
+ export declare const focusObjectOn: {
109
273
  <A extends object, ER, EW, RR, RW, K extends keyof A>(self: Lens<A, ER, EW, RR, RW>, key: K): Lens<A[K], ER, EW, RR, RW>;
110
274
  <A extends object, ER, EW, RR, RW, K extends keyof A>(key: K): (self: Lens<A, ER, EW, RR, RW>) => Lens<A[K], ER, EW, RR, RW>;
111
275
  };
112
- export declare namespace focusObjectMutableField {
276
+ export declare namespace focusObjectOnWritable {
113
277
  type WritableKeys<T> = {
114
278
  [K in keyof T]-?: IfEquals<{
115
279
  [P in K]: T[K];
@@ -120,11 +284,11 @@ export declare namespace focusObjectMutableField {
120
284
  type IfEquals<X, Y, A = X, B = never> = (<T>() => T extends X ? 1 : 2) extends (<T>() => T extends Y ? 1 : 2) ? A : B;
121
285
  }
122
286
  /**
123
- * Narrows the focus to a mutable field of an object. Mutates the object in place when written to.
287
+ * Narrows the focus to a writable field of an object. Mutates the object in place when written to.
124
288
  */
125
- export declare const focusObjectMutableField: {
126
- <A extends object, ER, EW, RR, RW, K extends focusObjectMutableField.WritableKeys<A>>(self: Lens<A, ER, EW, RR, RW>, key: K): Lens<A[K], ER, EW, RR, RW>;
127
- <A extends object, ER, EW, RR, RW, K extends focusObjectMutableField.WritableKeys<A>>(key: K): (self: Lens<A, ER, EW, RR, RW>) => Lens<A[K], ER, EW, RR, RW>;
289
+ export declare const focusObjectOnWritable: {
290
+ <A extends object, ER, EW, RR, RW, K extends focusObjectOnWritable.WritableKeys<A>>(self: Lens<A, ER, EW, RR, RW>, key: K): Lens<A[K], ER, EW, RR, RW>;
291
+ <A extends object, ER, EW, RR, RW, K extends focusObjectOnWritable.WritableKeys<A>>(key: K): (self: Lens<A, ER, EW, RR, RW>) => Lens<A[K], ER, EW, RR, RW>;
128
292
  };
129
293
  /**
130
294
  * Narrows the focus to an indexed element of an array. Replaces the array in an immutable fashion when written to.
@@ -161,6 +325,15 @@ export declare const focusChunkAt: {
161
325
  <A, ER, EW, RR, RW>(self: Lens<Chunk.Chunk<A>, ER, EW, RR, RW>, index: number): Lens<A, ER | NoSuchElementException, EW, RR, RW>;
162
326
  <A, ER, EW, RR, RW>(index: number): (self: Lens<Chunk.Chunk<A>, ER, EW, RR, RW>) => Lens<A, ER | NoSuchElementException, EW, RR, RW>;
163
327
  };
328
+ /**
329
+ * Narrows the focus to the value inside an `Option`.
330
+ *
331
+ * Reading or writing through this lens fails with `NoSuchElementException` when the parent option is `None`.
332
+ * Writing wraps the new focused value back into `Option.some`.
333
+ */
334
+ export declare const focusOption: {
335
+ <A, ER, EW, RR, RW>(self: Lens<Option.Option<A>, ER, EW, RR, RW>): Lens<A, ER | NoSuchElementException, EW | NoSuchElementException, RR, RW>;
336
+ };
164
337
  /**
165
338
  * Reads the current value from a `Lens`.
166
339
  */
package/dist/Lens.js CHANGED
@@ -1,77 +1,169 @@
1
- import { Array, Chunk, Effect, Function, Option, Pipeable, Predicate, Readable, Stream } from "effect";
1
+ import { Array, Chunk, Effect, Function, identity, Option, Pipeable, Predicate, PubSub, Readable, Ref, Stream } from "effect";
2
2
  import * as Subscribable from "./Subscribable.js";
3
3
  export const LensTypeId = Symbol.for("@effect-fc/Lens/Lens");
4
4
  /**
5
- * Internal `Lens` implementation.
5
+ * Checks whether a value is a `Lens`.
6
6
  */
7
+ export const isLens = (u) => Predicate.hasProperty(u, LensTypeId);
8
+ export const LensImplTypeId = Symbol.for("@effect-fc/Lens/LensImpl");
7
9
  export class LensImpl extends Pipeable.Class() {
8
- get;
9
- changes;
10
- modify;
11
10
  [Readable.TypeId] = Readable.TypeId;
12
11
  [Subscribable.TypeId] = Subscribable.TypeId;
13
12
  [LensTypeId] = LensTypeId;
14
- constructor(get, changes, modify) {
13
+ [LensImplTypeId] = LensImplTypeId;
14
+ get get() { return Effect.map(this.resolve, resolved => resolved.value); }
15
+ modifyEffect(f) {
16
+ return Effect.flatMap(this.lock, lock => lock(Effect.flatMap(this.resolve, resolved => Effect.flatMap(f(resolved.value), ([c, next]) => Effect.as(resolved.commit(Effect.succeed(next)), c)))));
17
+ }
18
+ }
19
+ export const isLensImpl = (u) => Predicate.hasProperty(u, LensImplTypeId);
20
+ export const asLensImpl = (lens) => {
21
+ if (!isLensImpl(lens))
22
+ throw new Error("Not a 'LensImpl'");
23
+ return lens;
24
+ };
25
+ export class LensLazyImpl extends LensImpl {
26
+ source;
27
+ constructor(source) {
15
28
  super();
16
- this.get = get;
17
- this.changes = changes;
18
- this.modify = modify;
29
+ this.source = source;
30
+ }
31
+ get resolve() {
32
+ return Effect.map(this.source.get, value => ({
33
+ value,
34
+ commit: next => Effect.flatMap(next, value => this.source.commit(value)),
35
+ }));
19
36
  }
37
+ get changes() { return this.source.changes; }
38
+ get lock() { return this.source.lock; }
20
39
  }
21
40
  /**
22
- * Checks whether a value is a `Lens`.
41
+ * Creates a `Lens` by supplying how to read the current value, observe changes, and apply transformations.
23
42
  */
24
- export const isLens = (u) => Predicate.hasProperty(u, LensTypeId);
43
+ export const make = (source) => new LensLazyImpl(source);
44
+ export class UnwrappedLensImpl extends LensImpl {
45
+ effect;
46
+ constructor(effect) {
47
+ super();
48
+ this.effect = effect;
49
+ }
50
+ get resolve() {
51
+ return Effect.map(Effect.flatMap(this.effect, l => asLensImpl(l).resolve), resolved => ({
52
+ value: resolved.value,
53
+ commit: next => resolved.commit(next),
54
+ }));
55
+ }
56
+ get changes() { return Stream.unwrap(Effect.map(this.effect, l => l.changes)); }
57
+ get lock() { return Effect.flatMap(this.effect, l => asLensImpl(l).lock); }
58
+ }
25
59
  /**
26
- * Creates a `Lens` by supplying how to read the current value, observe changes, and apply transformations.
27
- *
28
- * Either `modify` or `set` needs to be supplied.
60
+ * Flattens an effectful `Lens`.
29
61
  */
30
- export const make = (options) => new LensImpl(options.get, options.changes, Predicate.hasProperty(options, "modify")
31
- ? options.modify
32
- : (f) => Effect.flatMap(options.get, a => Effect.flatMap(f(a), ([b, next]) => Effect.as(options.set(next), b))));
62
+ export const unwrap = (effect) => new UnwrappedLensImpl(effect);
63
+ export class RefLensImpl extends LensImpl {
64
+ ref;
65
+ semaphore;
66
+ constructor(ref, semaphore) {
67
+ super();
68
+ this.ref = ref;
69
+ this.semaphore = semaphore;
70
+ }
71
+ get resolve() {
72
+ return Effect.map(Ref.get(this.ref), value => ({
73
+ value,
74
+ commit: next => Effect.flatMap(next, value => Ref.set(this.ref, value)),
75
+ }));
76
+ }
77
+ get changes() { return Stream.unwrap(Effect.map(Ref.get(this.ref), Stream.make)); }
78
+ get lock() { return Effect.succeed(this.semaphore.withPermits(1)); }
79
+ }
33
80
  /**
34
- * Creates a `Lens` that proxies a `SubscriptionRef`.
81
+ * Creates a `Lens` that proxies a `Ref`.
82
+ *
83
+ * Note: since `Ref` does not provide any kind of reactivity mechanism, the produced `Lens` will be non-reactive.
84
+ * This means its `changes` stream will only emit the current value once when evaluated and nothing else.
35
85
  */
36
- export const fromSubscriptionRef = (ref) => make({
37
- get get() { return ref.get; },
38
- get changes() { return ref.changes; },
39
- modify: (f) => ref.modifyEffect(f),
86
+ export const fromRef = Effect.fnUntraced(function* (ref) {
87
+ return new RefLensImpl(ref, yield* Effect.makeSemaphore(1));
40
88
  });
89
+ export class SynchronizedRefLensImpl extends LensImpl {
90
+ ref;
91
+ constructor(ref) {
92
+ super();
93
+ this.ref = ref;
94
+ }
95
+ get resolve() {
96
+ return Effect.map(Ref.get(this.ref.ref), value => ({
97
+ value,
98
+ commit: next => Effect.flatMap(next, value => Ref.set(this.ref.ref, value)),
99
+ }));
100
+ }
101
+ get changes() { return Stream.unwrap(Effect.map(Ref.get(this.ref.ref), Stream.make)); }
102
+ get lock() { return Effect.succeed(this.ref.withLock); }
103
+ }
41
104
  /**
42
105
  * Creates a `Lens` that proxies a `SynchronizedRef`.
43
106
  *
44
107
  * Note: since `SynchronizedRef` does not provide any kind of reactivity mechanism, the produced `Lens` will be non-reactive.
45
108
  * This means its `changes` stream will only emit the current value once when evaluated and nothing else.
46
109
  */
47
- export const fromSynchronizedRef = (ref) => make({
48
- get get() { return ref.get; },
49
- get changes() { return Stream.unwrap(Effect.map(ref.get, Stream.make)); },
50
- modify: (f) => ref.modifyEffect(f),
51
- });
110
+ export const fromSynchronizedRef = (ref) => new SynchronizedRefLensImpl(ref);
111
+ export class SubscriptionRefLensImpl extends LensImpl {
112
+ ref;
113
+ constructor(ref) {
114
+ super();
115
+ this.ref = ref;
116
+ }
117
+ get resolve() {
118
+ return Effect.map(this.ref.get, value => ({
119
+ value,
120
+ commit: next => Effect.flatMap(next, value => Effect.zipLeft(Ref.set(this.ref.ref, value), PubSub.publish(this.ref.pubsub, value))),
121
+ }));
122
+ }
123
+ get changes() { return this.ref.changes; }
124
+ get lock() { return Effect.succeed(this.ref.semaphore.withPermits(1)); }
125
+ }
52
126
  /**
53
- * Flattens an effectful `Lens`.
127
+ * Creates a `Lens` that proxies a `SubscriptionRef`.
54
128
  */
55
- export const unwrap = (effect) => make({
56
- get: Effect.flatMap(effect, l => l.get),
57
- changes: Stream.unwrap(Effect.map(effect, l => l.changes)),
58
- modify: (f) => Effect.flatMap(effect, l => l.modify(f)),
59
- });
129
+ export const fromSubscriptionRef = (ref) => new SubscriptionRefLensImpl(ref);
130
+ export class DerivedLensImpl extends LensImpl {
131
+ parent;
132
+ source;
133
+ constructor(parent, source) {
134
+ super();
135
+ this.parent = parent;
136
+ this.source = source;
137
+ }
138
+ get resolve() { return this.source.resolve(this.parent.resolve); }
139
+ get changes() { return this.source.mapStream(this.parent.changes); }
140
+ get lock() { return this.source.mapLock(this.parent.lock); }
141
+ }
142
+ /**
143
+ * Derives a new `Lens` by linking a step to an existing parent lens.
144
+ */
145
+ export const derive = Function.dual(2, (self, source) => new DerivedLensImpl(asLensImpl(self), source));
60
146
  /**
61
147
  * Derives a new `Lens` by applying synchronous getters and setters over the focused value.
62
148
  */
63
- export const map = Function.dual(3, (self, get, set) => make({
64
- get get() { return Effect.map(self.get, get); },
65
- get changes() { return Stream.map(self.changes, get); },
66
- modify: (f) => self.modify(a => Effect.flatMap(f(get(a)), ([c, next]) => Effect.succeed([c, set(a, next)]))),
149
+ export const map = Function.dual(3, (self, get, set) => derive(self, {
150
+ resolve: parent => Effect.map(parent, resolved => ({
151
+ value: get(resolved.value),
152
+ commit: next => resolved.commit(Effect.map(next, b => set(resolved.value, b))),
153
+ })),
154
+ mapStream: Stream.map(get),
155
+ mapLock: identity,
67
156
  }));
68
157
  /**
69
158
  * Derives a new `Lens` by applying effectful getters and setters over the focused value.
70
159
  */
71
- export const mapEffect = Function.dual(3, (self, get, set) => make({
72
- get get() { return Effect.flatMap(self.get, get); },
73
- get changes() { return Stream.mapEffect(self.changes, get); },
74
- modify: (f) => self.modify(a => Effect.flatMap(get(a), b => Effect.flatMap(f(b), ([c, bNext]) => Effect.flatMap(set(a, bNext), nextA => Effect.succeed([c, nextA]))))),
160
+ export const mapEffect = Function.dual(3, (self, get, set) => derive(self, {
161
+ resolve: parent => Effect.flatMap(parent, resolved => Effect.map(get(resolved.value), value => ({
162
+ value,
163
+ commit: next => resolved.commit(Effect.flatMap(next, b => set(resolved.value, b))),
164
+ }))),
165
+ mapStream: Stream.mapEffect(get),
166
+ mapLock: (identity),
75
167
  }));
76
168
  /**
77
169
  * Derives a new `Lens` by applying synchronous getters and setters over the value inside an `Option`.
@@ -104,19 +196,120 @@ export const mapOptionEffect = Function.dual(3, (self, get, set) => mapEffect(se
104
196
  /**
105
197
  * Allows transforming only the `changes` stream of a `Lens` while keeping the focus type intact.
106
198
  */
107
- export const mapStream = Function.dual(2, (self, f) => make({
108
- get get() { return self.get; },
109
- get changes() { return f(self.changes); },
110
- get modify() { return self.modify; },
199
+ export const mapStream = Function.dual(2, (self, f) => derive(self, {
200
+ resolve: identity,
201
+ mapStream: f,
202
+ mapLock: identity,
203
+ }));
204
+ /**
205
+ * Transforms read errors of a `Lens`.
206
+ *
207
+ * Applies to `get` and `changes` while leaving `modify` unchanged.
208
+ */
209
+ export const mapErrorRead = Function.dual(2, (self, f) => derive(self, {
210
+ resolve: Effect.mapError(f),
211
+ mapStream: Stream.mapError(f),
212
+ mapLock: identity,
213
+ }));
214
+ /**
215
+ * Transforms modify errors of a `Lens`.
216
+ *
217
+ * Applies to the commit/rebuild portion of `modifyEffect` while leaving failures from the
218
+ * user-supplied callback unchanged.
219
+ */
220
+ export const mapErrorWrite = Function.dual(2, (self, f) => derive(self, {
221
+ resolve: parent => Effect.map(parent, resolved => ({
222
+ value: resolved.value,
223
+ commit: next => Effect.flatMap(next, value => Effect.mapError(resolved.commit(Effect.succeed(value)), f)),
224
+ })),
225
+ mapStream: identity,
226
+ mapLock: Effect.mapError(f),
227
+ }));
228
+ /**
229
+ * Transforms all errors of a `Lens`.
230
+ *
231
+ * Applies to `get`, `changes`, and the commit/rebuild portion of `modifyEffect` while leaving
232
+ * failures from the user-supplied callback unchanged.
233
+ */
234
+ export const mapError = Function.dual(2, (self, f) => derive(self, {
235
+ resolve: parent => Effect.map(Effect.mapError(parent, f), resolved => ({
236
+ value: resolved.value,
237
+ commit: next => Effect.flatMap(next, value => Effect.mapError(resolved.commit(Effect.succeed(value)), f)),
238
+ })),
239
+ mapStream: Stream.mapError(f),
240
+ mapLock: Effect.mapError(f),
241
+ }));
242
+ /**
243
+ * Runs an effect when read failures occur.
244
+ *
245
+ * Applies to `get` and `changes` while leaving `modify` unchanged.
246
+ */
247
+ export const tapErrorRead = Function.dual(2, (self, f) => derive(self, {
248
+ resolve: Effect.tapError(f),
249
+ mapStream: Stream.tapError(f),
250
+ mapLock: identity,
251
+ }));
252
+ /**
253
+ * Runs an effect when modify failures occur.
254
+ *
255
+ * Applies to the commit/rebuild portion of `modifyEffect` while leaving failures from the
256
+ * user-supplied callback unchanged.
257
+ */
258
+ export const tapErrorWrite = Function.dual(2, (self, f) => derive(self, {
259
+ resolve: parent => Effect.map(parent, resolved => ({
260
+ value: resolved.value,
261
+ commit: next => Effect.flatMap(next, value => Effect.tapError(resolved.commit(Effect.succeed(value)), f)),
262
+ })),
263
+ mapStream: identity,
264
+ mapLock: Effect.tapError(f),
265
+ }));
266
+ /**
267
+ * Runs an effect when any `Lens` failure occurs.
268
+ *
269
+ * Applies to `get`, `changes`, and the commit/rebuild portion of `modifyEffect` while leaving
270
+ * failures from the user-supplied callback unchanged.
271
+ */
272
+ export const tapError = Function.dual(2, (self, f) => derive(self, {
273
+ resolve: parent => Effect.map(Effect.tapError(parent, f), resolved => ({
274
+ value: resolved.value,
275
+ commit: next => Effect.flatMap(next, value => Effect.tapError(resolved.commit(Effect.succeed(value)), f)),
276
+ })),
277
+ mapStream: Stream.tapError(f),
278
+ mapLock: Effect.tapError(f),
279
+ }));
280
+ /**
281
+ * Provides a `Context` to a `Lens`, removing it from both the read and write environments.
282
+ */
283
+ export const provideContext = Function.dual(2, (self, context) => derive(self, {
284
+ resolve: parent => Effect.map(Effect.provide(parent, context), resolved => ({
285
+ value: resolved.value,
286
+ commit: next => Effect.provide(resolved.commit(next), context),
287
+ })),
288
+ mapStream: Stream.provideSomeContext(context),
289
+ mapLock: Effect.provide(context),
290
+ }));
291
+ /**
292
+ * Provides a single service to a `Lens`, removing it from both the read and write environments.
293
+ *
294
+ * This is the `Lens` equivalent of `Effect.provideService`: use it when a lens requires one
295
+ * `Context.Tag` and you already have the concrete service value.
296
+ */
297
+ export const provideService = Function.dual(3, (self, tag, service) => derive(self, {
298
+ resolve: parent => Effect.map(Effect.provideService(parent, tag, service), resolved => ({
299
+ value: resolved.value,
300
+ commit: next => Effect.provideService(resolved.commit(next), tag, service),
301
+ })),
302
+ mapStream: Stream.provideService(tag, service),
303
+ mapLock: Effect.provideService(tag, service),
111
304
  }));
112
305
  /**
113
306
  * Narrows the focus to a field of an object. Replaces the object in an immutable fashion when written to.
114
307
  */
115
- export const focusObjectField = Function.dual(2, (self, key) => map(self, a => a[key], (a, b) => Object.setPrototypeOf({ ...a, [key]: b }, Object.getPrototypeOf(a))));
308
+ export const focusObjectOn = Function.dual(2, (self, key) => map(self, a => a[key], (a, b) => Object.setPrototypeOf({ ...a, [key]: b }, Object.getPrototypeOf(a))));
116
309
  /**
117
- * Narrows the focus to a mutable field of an object. Mutates the object in place when written to.
310
+ * Narrows the focus to a writable field of an object. Mutates the object in place when written to.
118
311
  */
119
- export const focusObjectMutableField = Function.dual(2, (self, key) => map(self, a => a[key], (a, b) => { a[key] = b; return a; }));
312
+ export const focusObjectOnWritable = Function.dual(2, (self, key) => map(self, a => a[key], (a, b) => { a[key] = b; return a; }));
120
313
  /**
121
314
  * Narrows the focus to an indexed element of an array. Replaces the array in an immutable fashion when written to.
122
315
  */
@@ -137,6 +330,13 @@ export const focusMutableTupleAt = Function.dual(2, (self, index) => map(self, A
137
330
  * Narrows the focus to an indexed element of `Chunk`. Replaces the `Chunk` in an immutable fashion when written to.
138
331
  */
139
332
  export const focusChunkAt = Function.dual(2, (self, index) => mapEffect(self, Chunk.get(index), (a, b) => Effect.succeed(Chunk.replace(a, index, b))));
333
+ /**
334
+ * Narrows the focus to the value inside an `Option`.
335
+ *
336
+ * Reading or writing through this lens fails with `NoSuchElementException` when the parent option is `None`.
337
+ * Writing wraps the new focused value back into `Option.some`.
338
+ */
339
+ export const focusOption = (self) => mapEffect(self, identity, (a, b) => Effect.map(a, () => Option.some(b)));
140
340
  /**
141
341
  * Reads the current value from a `Lens`.
142
342
  */
@@ -144,40 +344,40 @@ export const get = (self) => self.get;
144
344
  /**
145
345
  * Sets the value of a `Lens`.
146
346
  */
147
- export const set = Function.dual(2, (self, value) => self.modify(() => Effect.succeed([void 0, value])));
347
+ export const set = Function.dual(2, (self, value) => self.modifyEffect(() => Effect.succeed([void 0, value])));
148
348
  /**
149
349
  * Sets a `Lens` to a new value and returns the previous value.
150
350
  */
151
- export const getAndSet = Function.dual(2, (self, value) => self.modify(a => Effect.succeed([a, value])));
351
+ export const getAndSet = Function.dual(2, (self, value) => self.modifyEffect(a => Effect.succeed([a, value])));
152
352
  /**
153
353
  * Applies a synchronous transformation to the value of a `Lens`, discarding the previous value.
154
354
  */
155
- export const update = Function.dual(2, (self, f) => self.modify(a => Effect.succeed([void 0, f(a)])));
355
+ export const update = Function.dual(2, (self, f) => self.modifyEffect(a => Effect.succeed([void 0, f(a)])));
156
356
  /**
157
357
  * Applies an effectful transformation to the value of a `Lens`, discarding the previous value.
158
358
  */
159
- export const updateEffect = Function.dual(2, (self, f) => self.modify(a => Effect.flatMap(f(a), next => Effect.succeed([void 0, next]))));
359
+ export const updateEffect = Function.dual(2, (self, f) => self.modifyEffect(a => Effect.flatMap(f(a), next => Effect.succeed([void 0, next]))));
160
360
  /**
161
361
  * Applies a synchronous transformation the value of a `Lens` while returning the previous value.
162
362
  */
163
- export const getAndUpdate = Function.dual(2, (self, f) => self.modify(a => Effect.succeed([a, f(a)])));
363
+ export const getAndUpdate = Function.dual(2, (self, f) => self.modifyEffect(a => Effect.succeed([a, f(a)])));
164
364
  /**
165
365
  * Applies an effectful transformation the value of a `Lens` while returning the previous value.
166
366
  */
167
- export const getAndUpdateEffect = Function.dual(2, (self, f) => self.modify(a => Effect.flatMap(f(a), next => Effect.succeed([a, next]))));
367
+ export const getAndUpdateEffect = Function.dual(2, (self, f) => self.modifyEffect(a => Effect.flatMap(f(a), next => Effect.succeed([a, next]))));
168
368
  /**
169
369
  * Sets the value of a `Lens` and returns the new value.
170
370
  */
171
- export const setAndGet = Function.dual(2, (self, value) => self.modify(() => Effect.succeed([value, value])));
371
+ export const setAndGet = Function.dual(2, (self, value) => self.modifyEffect(() => Effect.succeed([value, value])));
172
372
  /**
173
373
  * Applies a synchronous update the value of a `Lens` and returns the new value.
174
374
  */
175
- export const updateAndGet = Function.dual(2, (self, f) => self.modify(a => {
375
+ export const updateAndGet = Function.dual(2, (self, f) => self.modifyEffect(a => {
176
376
  const next = f(a);
177
377
  return Effect.succeed([next, next]);
178
378
  }));
179
379
  /**
180
380
  * Applies an effectful update to the value of a `Lens` and returns the new value.
181
381
  */
182
- export const updateAndGetEffect = Function.dual(2, (self, f) => self.modify(a => Effect.flatMap(f(a), next => Effect.succeed([next, next]))));
382
+ export const updateAndGetEffect = Function.dual(2, (self, f) => self.modifyEffect(a => Effect.flatMap(f(a), next => Effect.succeed([next, next]))));
183
383
  //# sourceMappingURL=Lens.js.map
package/dist/Lens.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Lens.js","sourceRoot":"","sources":["../src/Lens.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Lens.js","sourceRoot":"","sources":["../src/Lens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAgB,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAA8C,MAAM,QAAQ,CAAA;AAEvL,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA;AAGjD,MAAM,CAAC,MAAM,UAAU,GAAkB,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;AAmB3E;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAU,EAA0D,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;AAGlI,MAAM,CAAC,MAAM,cAAc,GAAkB,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAA;AAgBnF,MAAM,OAAgB,QACtB,SAAQ,QAAQ,CAAC,KAAK,EAAE;IACX,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAoB,QAAQ,CAAC,MAAM,CAAA;IACpD,CAAC,YAAY,CAAC,MAAM,CAAC,GAAwB,YAAY,CAAC,MAAM,CAAA;IAChE,CAAC,UAAU,CAAC,GAAe,UAAU,CAAA;IACrC,CAAC,cAAc,CAAC,GAAmB,cAAc,CAAA;IAM1D,IAAI,GAAG,KAAK,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA,CAAC,CAAC;IAEzE,YAAY,CACR,CAAmD;QAEnD,OAAO,MAAM,CAAC,OAAO,CACjB,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CACvB,IAAI,CAAC,OAAO,EACZ,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CACtB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EACjB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CACrE,CACJ,CAAC,CACL,CAAA;IACL,CAAC;CACJ;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAU,EAA8D,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,EAAE,cAAc,CAAC,CAAA;AAE9I,MAAM,CAAC,MAAM,UAAU,GAAG,CACtB,IAA6B,EACF,EAAE;IAC7B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAA;IACvC,OAAO,IAAmC,CAAA;AAC9C,CAAC,CAAA;AAYD,MAAM,OAAO,YACb,SAAQ,QAA2B;IAElB;IADb,YACa,MAA8C;QAEvD,KAAK,EAAE,CAAA;QAFE,WAAM,GAAN,MAAM,CAAwC;IAG3D,CAAC;IAED,IAAI,OAAO;QACP,OAAO,MAAM,CAAC,GAAG,CACb,IAAI,CAAC,MAAM,CAAC,GAAG,EACf,KAAK,CAAC,EAAE,CAAC,CAAC;YACN,KAAK;YACL,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SAC3E,CAAC,CACL,CAAA;IACL,CAAC;IACD,IAAI,OAAO,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAA,CAAC,CAAC;IAC5C,IAAI,IAAI,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAA,CAAC,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,CAChB,MAA8C,EACvB,EAAE,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,CAAA;AAGtD,MAAM,OAAO,iBACb,SAAQ,QAA+C;IAEtC;IADb,YACa,MAAsD;QAE/D,KAAK,EAAE,CAAA;QAFE,WAAM,GAAN,MAAM,CAAgD;IAGnE,CAAC;IAED,IAAI,OAAO;QACP,OAAO,MAAM,CAAC,GAAG,CACb,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EACvD,QAAQ,CAAC,EAAE,CAAC,CAAC;YACT,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;SACxC,CAAC,CACL,CAAA;IACL,CAAC;IACD,IAAI,OAAO,KAAK,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA,CAAC,CAAC;IAC/E,IAAI,IAAI,KAAK,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA,CAAC,CAAC;CAC7E;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAClB,MAAsD,EACX,EAAE,CAAC,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAA;AAG/E,MAAM,OAAO,WACb,SAAQ,QAAuC;IAE9B;IACA;IAFb,YACa,GAAe,EACf,SAA2B;QAEpC,KAAK,EAAE,CAAA;QAHE,QAAG,GAAH,GAAG,CAAY;QACf,cAAS,GAAT,SAAS,CAAkB;IAGxC,CAAC;IAED,IAAI,OAAO;QACP,OAAO,MAAM,CAAC,GAAG,CACb,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EACjB,KAAK,CAAC,EAAE,CAAC,CAAC;YACN,KAAK;YACL,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAC1B,IAAI,EACJ,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CACpC;SACJ,CAAC,CACL,CAAA;IACL,CAAC;IACD,IAAI,OAAO,KAAK,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA,CAAC,CAAC;IAClF,IAAI,IAAI,KAAK,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC;CACtE;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAC9C,GAAe;IAEf,OAAO,IAAI,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;AAC/D,CAAC,CAAC,CAAA;AAWF,MAAM,OAAO,uBACb,SAAQ,QAAuC;IAE9B;IADb,YACa,GAA4D;QAErE,KAAK,EAAE,CAAA;QAFE,QAAG,GAAH,GAAG,CAAyD;IAGzE,CAAC;IAED,IAAI,OAAO;QACP,OAAO,MAAM,CAAC,GAAG,CACb,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EACrB,KAAK,CAAC,EAAE,CAAC,CAAC;YACN,KAAK;YACL,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAC1B,IAAI,EACJ,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CACxC;SACJ,CAAC,CACL,CAAA;IACL,CAAC;IACD,IAAI,OAAO,KAAK,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA,CAAC,CAAC;IACtF,IAAI,IAAI,KAAK,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA,CAAC,CAAC;CAC1D;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAC/B,GAAuC,EACJ,EAAE,CAAC,IAAI,uBAAuB,CAAC,GAA8D,CAAC,CAAA;AAYrI,MAAM,OAAO,uBACb,SAAQ,QAAuC;IAE9B;IADb,YACa,GAA4D;QAErE,KAAK,EAAE,CAAA;QAFE,QAAG,GAAH,GAAG,CAAyD;IAGzE,CAAC;IAED,IAAI,OAAO;QACP,OAAO,MAAM,CAAC,GAAG,CACb,IAAI,CAAC,GAAG,CAAC,GAAG,EACZ,KAAK,CAAC,EAAE,CAAC,CAAC;YACN,KAAK;YACL,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAC1B,IAAI,EACJ,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CACnB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,EAC5B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CACzC,CACJ;SACJ,CAAC,CACL,CAAA;IACL,CAAC;IACD,IAAI,OAAO,KAAK,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAA,CAAC,CAAC;IACzC,IAAI,IAAI,KAAK,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC;CAC1E;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAC/B,GAAuC,EACJ,EAAE,CAAC,IAAI,uBAAuB,CAAC,GAA8D,CAAC,CAAA;AAsBrI,MAAM,OAAO,eAYb,SAAQ,QAA2B;IAElB;IACA;IAFb,YACa,MAAuC,EACvC,MAAwE;QAEjF,KAAK,EAAE,CAAA;QAHE,WAAM,GAAN,MAAM,CAAiC;QACvC,WAAM,GAAN,MAAM,CAAkE;IAGrF,CAAC;IAED,IAAI,OAAO,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA,CAAC,CAAC;IACjE,IAAI,OAAO,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA,CAAC,CAAC;IACnE,IAAI,IAAI,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA,CAAC,CAAC;CAC9D;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAQf,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CACjB,IAA6B,EAC7B,MAAwE,EAC7C,EAAE,CAAC,IAAI,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;AAGhF;;GAEG;AACH,MAAM,CAAC,MAAM,GAAG,GAUZ,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CACjB,IAA6B,EAC7B,GAAyB,EACzB,GAAwC,EACjB,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE;IACvC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CACzB,MAAM,EACN,QAAQ,CAAC,EAAE,CAAC,CAAC;QACT,KAAK,EAAE,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC1B,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;KACjF,CAAC,CACL;IACD,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;IAC1B,OAAO,EAAE,QAAQ;CACpB,CAAC,CAAC,CAAA;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAUlB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CACjB,IAA6B,EAC7B,GAAoD,EACpD,GAAmE,EAChB,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE;IACnE,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAC7B,MAAM,EACN,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAClB,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EACnB,KAAK,CAAC,EAAE,CAAC,CAAC;QACN,KAAK;QACL,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;KACrF,CAAC,CACL,CACJ;IACD,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC;IAChC,OAAO,EAAE,CAAA,QAA4D,CAAA;CACxE,CAAC,CAAC,CAAA;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,SAAS,GAUlB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CACjB,IAA4C,EAC5C,GAAyB,EACzB,GAAwC,EACF,EAAE,CAAC,GAAG,CAC5C,IAAI,EACJ,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EACf,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;IAC/B,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/C,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE;CAC9B,CAAC,CACL,CAAC,CAAA;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAUxB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CACjB,IAA4C,EAC5C,GAAoD,EACpD,GAAmE,EACD,EAAE,CAAC,SAAS,CAC9E,IAAI,EACJ,MAAM,CAAC,KAAK,CAAC;IACT,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC;IAC5C,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;CAC9C,CAAC,EACF,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;IAC/B,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE;QAC9B,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC;QAC/C,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;KAC9C,CAAC;IACF,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;CAC9C,CAAC,CACL,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAQlB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CACjB,IAA6B,EAC7B,CAAwH,EACjG,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE;IACvC,OAAO,EAAE,QAAQ;IACjB,SAAS,EAAE,CAAC;IACZ,OAAO,EAAE,QAAQ;CACpB,CAAC,CAAC,CAAA;AAGH;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAQrB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CACjB,IAA6B,EAC7B,CAA6B,EACN,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE;IACvC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7B,OAAO,EAAE,QAAQ;CACpB,CAAC,CAAC,CAAA;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAQtB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CACjB,IAA6B,EAC7B,CAA6B,EACN,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE;IACvC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC/C,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAC1B,IAAI,EACJ,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CACtE;KACJ,CAAC,CAAC;IACH,SAAS,EAAE,QAAQ;IACnB,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;CAC9B,CAAC,CAAC,CAAA;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,QAAQ,GAQjB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CACjB,IAA6B,EAC7B,CAAkC,EACX,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE;IACvC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CACzB,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,EAC1B,QAAQ,CAAC,EAAE,CAAC,CAAC;QACT,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAC1B,IAAI,EACJ,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CACtE;KACJ,CAAC,CACL;IACD,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;CAC9B,CAAC,CAAC,CAAA;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAQrB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CACjB,IAA6B,EAC7B,CAAyD,EACxB,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE;IACjD,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7B,OAAO,EAAE,QAAQ;CACpB,CAAC,CAAC,CAAA;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAQtB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CACjB,IAA6B,EAC7B,CAAyD,EACxB,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE;IACjD,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC/C,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAC1B,IAAI,EACJ,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CACtE;KACJ,CAAC,CAAC;IACH,SAAS,EAAE,QAAQ;IACnB,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;CAC9B,CAAC,CAAC,CAAA;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,QAAQ,GAQjB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CACjB,IAA6B,EAC7B,CAA8D,EACnB,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE;IAC3D,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CACzB,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,EAC1B,QAAQ,CAAC,EAAE,CAAC,CAAC;QACT,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAC1B,IAAI,EACJ,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CACtE;KACJ,CAAC,CACL;IACD,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;CAC9B,CAAC,CAAC,CAAA;AAGH;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAQvB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CACjB,IAA6B,EAC7B,OAA4B,EACqB,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE;IACjE,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CACzB,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,QAAQ,CAAC,EAAE,CAAC,CAAC;QACT,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;KACjE,CAAC,CACL;IACD,SAAS,EAAE,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC;IAC7C,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;CACnC,CAAC,CAAC,CAAA;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAUvB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CACjB,IAA6B,EAC7B,GAAsB,EACtB,OAAmB,EAC4B,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE;IAC/D,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CACzB,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,EAC3C,QAAQ,CAAC,EAAE,CAAC,CAAC;QACT,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC;KAC7E,CAAC,CACL;IACD,SAAS,EAAE,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC;IAC9C,OAAO,EAAE,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC;CAC/C,CAAC,CAAC,CAAA;AAGH;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAQtB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CACjB,IAA6B,EAC7B,GAAM,EACoB,EAAE,CAAC,GAAG,CAChC,IAAI,EACJ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EACX,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAChF,CAAC,CAAA;AAeF;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAQ9B,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CACjB,IAA6B,EAC7B,GAAM,EACoB,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA,CAAC,CAAC,CAAC,CAAC,CAAA;AAE5F;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAQrB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CACjB,IAA6B,EAC7B,KAAa,EACoE,EAAE,CAAC,SAAS,CAC7F,IAAI,EACJ,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAChB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAQ,CACpD,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAQ5B,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CACjB,IAA+B,EAC/B,KAAa,EAC4D,EAAE,CAAC,SAAS,CACrF,IAAI,EACJ,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAChB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CACpB,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,EACnB,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAC1D,CACJ,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAQrB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CACjB,IAA6B,EAC7B,KAAQ,EACkB,EAAE,CAAC,GAAG,CAChC,IAAI,EACJ,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,EACtB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAQ,CAC9C,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAQ5B,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CACjB,IAA6B,EAC7B,KAAQ,EACkB,EAAE,CAAC,GAAG,CAChC,IAAI,EACJ,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,EACtB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA,CAAC,CAAC,CACvC,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAQrB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CACjB,IAA0C,EAC1C,KAAa,EACmC,EAAE,CAAC,SAAS,CAC5D,IAAI,EACJ,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAChB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CACxD,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAIpB,CACA,IAA4C,EAC6B,EAAE,CAAC,SAAS,CACrF,IAAI,EACJ,QAAQ,EACR,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAChD,CAAA;AAGD;;GAEG;AACH,MAAM,CAAC,MAAM,GAAG,GAAG,CAAoB,IAA6B,EAA4B,EAAE,CAAC,IAAI,CAAC,GAAG,CAAA;AAE3G;;GAEG;AACH,MAAM,CAAC,MAAM,GAAG,GAGZ,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAoB,IAA6B,EAAE,KAAQ,EAAE,EAAE,CAChF,IAAI,CAAC,YAAY,CAAqB,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,CAAU,CAAC,CAAC,CACxF,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAGlB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAoB,IAA6B,EAAE,KAAQ,EAAE,EAAE,CAChF,IAAI,CAAC,YAAY,CAAkB,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,CAAU,CAAC,CAAC,CAC/E,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAGf,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAoB,IAA6B,EAAE,CAAc,EAAE,EAAE,CACtF,IAAI,CAAC,YAAY,CAAqB,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAU,CAAC,CAAC,CACtF,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAGrB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAA0B,IAA6B,EAAE,CAAmC,EAAE,EAAE,CACjH,IAAI,CAAC,YAAY,CAAa,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAC7C,CAAC,CAAC,CAAC,CAAC,EACJ,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,CAAU,CAAC,CAClD,CAAC,CACL,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAGrB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAoB,IAA6B,EAAE,CAAc,EAAE,EAAE,CACtF,IAAI,CAAC,YAAY,CAAkB,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAU,CAAC,CAAC,CAC9E,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAG3B,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAA0B,IAA6B,EAAE,CAAmC,EAAE,EAAE,CACjH,IAAI,CAAC,YAAY,CAAU,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAC1C,CAAC,CAAC,CAAC,CAAC,EACJ,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAU,CAAC,CAC7C,CAAC,CACL,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAGlB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAoB,IAA6B,EAAE,KAAQ,EAAE,EAAE,CAChF,IAAI,CAAC,YAAY,CAAkB,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,CAAU,CAAC,CAAC,CACpF,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAGrB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAoB,IAA6B,EAAE,CAAc,EAAE,EAAE,CACtF,IAAI,CAAC,YAAY,CAAkB,CAAC,CAAC,EAAE;IACnC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IACjB,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,IAAI,CAAU,CAAC,CAAA;AAChD,CAAC,CAAC,CACL,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAG3B,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAA0B,IAA6B,EAAE,CAAmC,EAAE,EAAE,CACjH,IAAI,CAAC,YAAY,CAAU,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAC1C,CAAC,CAAC,CAAC,CAAC,EACJ,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,IAAI,CAAU,CAAC,CAChD,CAAC,CACL,CAAA"}
@@ -18,7 +18,7 @@ export declare const mapOptionEffect: {
18
18
  /**
19
19
  * Narrows the focus to a field of an object.
20
20
  */
21
- export declare const focusObjectField: {
21
+ export declare const focusObjectOn: {
22
22
  <A extends object, K extends keyof A, E, R>(self: Subscribable.Subscribable<A, E, R>, key: K): Subscribable.Subscribable<A[K], E, R>;
23
23
  <A extends object, K extends keyof A, E, R>(key: K): (self: Subscribable.Subscribable<A, E, R>) => Subscribable.Subscribable<A[K], E, R>;
24
24
  };
@@ -29,6 +29,10 @@ export declare const focusArrayAt: {
29
29
  <A extends readonly any[], E, R>(self: Subscribable.Subscribable<A, E, R>, index: number): Subscribable.Subscribable<A[number], E, R>;
30
30
  <A extends readonly any[], E, R>(index: number): (self: Subscribable.Subscribable<A, E, R>) => Subscribable.Subscribable<A[number], E | NoSuchElementException, R>;
31
31
  };
32
+ /**
33
+ * Narrows the focus to the length of an array.
34
+ */
35
+ export declare const focusArrayLength: <A extends readonly any[], E, R>(self: Subscribable.Subscribable<A, E, R>) => Subscribable.Subscribable<number, E, R>;
32
36
  /**
33
37
  * Narrows the focus to an indexed element of a readonly tuple.
34
38
  */
@@ -43,3 +47,11 @@ export declare const focusChunkAt: {
43
47
  <A, E, R>(self: Subscribable.Subscribable<Chunk.Chunk<A>, E, R>, index: number): Subscribable.Subscribable<A, E | NoSuchElementException, R>;
44
48
  <A, E, R>(index: number): (self: Subscribable.Subscribable<Chunk.Chunk<A>, E, R>) => Subscribable.Subscribable<A, E | NoSuchElementException, R>;
45
49
  };
50
+ /**
51
+ * Narrows the focus to the size of a `Chunk`.
52
+ */
53
+ export declare const focusChunkSize: <A, E, R>(self: Subscribable.Subscribable<Chunk.Chunk<A>, E, R>) => Subscribable.Subscribable<number, E, R>;
54
+ /**
55
+ * Narrows the focus to the size of a `Iterable`.
56
+ */
57
+ export declare const focusIterableSize: <A, E, R>(self: Subscribable.Subscribable<Iterable<A>, E, R>) => Subscribable.Subscribable<number, E, R>;
@@ -1,4 +1,4 @@
1
- import { Array, Chunk, Effect, Function, Option, Subscribable } from "effect";
1
+ import { Array, Chunk, Effect, Function, Iterable, Option, Subscribable } from "effect";
2
2
  export * from "effect/Subscribable";
3
3
  /**
4
4
  * Maps over an `Option` value in the `Subscribable`.
@@ -14,11 +14,15 @@ export const mapOptionEffect = Function.dual(2, (self, f) => Subscribable.mapEff
14
14
  /**
15
15
  * Narrows the focus to a field of an object.
16
16
  */
17
- export const focusObjectField = Function.dual(2, (self, key) => Subscribable.map(self, a => a[key]));
17
+ export const focusObjectOn = Function.dual(2, (self, key) => Subscribable.map(self, a => a[key]));
18
18
  /**
19
19
  * Narrows the focus to an indexed element of an array.
20
20
  */
21
21
  export const focusArrayAt = Function.dual(2, (self, index) => Subscribable.mapEffect(self, Array.get(index)));
22
+ /**
23
+ * Narrows the focus to the length of an array.
24
+ */
25
+ export const focusArrayLength = (self) => Subscribable.map(self, Array.length);
22
26
  /**
23
27
  * Narrows the focus to an indexed element of a readonly tuple.
24
28
  */
@@ -27,4 +31,12 @@ export const focusTupleAt = Function.dual(2, (self, index) => Subscribable.map(s
27
31
  * Narrows the focus to an indexed element of `Chunk`.
28
32
  */
29
33
  export const focusChunkAt = Function.dual(2, (self, index) => Subscribable.mapEffect(self, Chunk.get(index)));
34
+ /**
35
+ * Narrows the focus to the size of a `Chunk`.
36
+ */
37
+ export const focusChunkSize = (self) => Subscribable.map(self, Chunk.size);
38
+ /**
39
+ * Narrows the focus to the size of a `Iterable`.
40
+ */
41
+ export const focusIterableSize = (self) => Subscribable.map(self, Iterable.size);
30
42
  //# sourceMappingURL=Subscribable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Subscribable.js","sourceRoot":"","sources":["../src/Subscribable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAI7E,cAAc,qBAAqB,CAAA;AAEnC;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAQlB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CACjB,IAAuD,EACvD,CAAc,EACmC,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAE9F;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAQxB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CACjB,IAAuD,EACvD,CAAoC,EACkB,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC;IACnG,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC;IAC1C,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;CAC9C,CAAC,CAAC,CAAC,CAAA;AAEJ;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAQzB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CACjB,IAAwC,EACxC,GAAM,EAC+B,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;AAEhF;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAQrB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CACjB,IAAwC,EACxC,KAAa,EACsD,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAEzH;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAQrB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CACjB,IAAwC,EACxC,KAAQ,EAC6B,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAE3F;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAQrB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CACjB,IAAqD,EACrD,KAAa,EAC8C,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"Subscribable.js","sourceRoot":"","sources":["../src/Subscribable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAIvF,cAAc,qBAAqB,CAAA;AAEnC;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAQlB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CACjB,IAAuD,EACvD,CAAc,EACmC,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAE9F;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAQxB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CACjB,IAAuD,EACvD,CAAoC,EACkB,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC;IACnG,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC;IAC1C,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;CAC9C,CAAC,CAAC,CAAC,CAAA;AAEJ;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAQtB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CACjB,IAAwC,EACxC,GAAM,EAC+B,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;AAEhF;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAQrB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CACjB,IAAwC,EACxC,KAAa,EACsD,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAEzH;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC5B,IAAwC,EACD,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;AAElF;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAQrB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CACjB,IAAwC,EACxC,KAAQ,EAC6B,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAE3F;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAQrB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CACjB,IAAqD,EACrD,KAAa,EAC8C,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAEjH;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC1B,IAAqD,EACd,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;AAEhF;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC7B,IAAkD,EACX,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAA"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,2 @@
1
1
  export * as Lens from "./Lens.js";
2
- export * as PropertyPath from "./PropertyPath.js";
3
2
  export * as Subscribable from "./Subscribable.js";
package/dist/index.js CHANGED
@@ -1,4 +1,3 @@
1
1
  export * as Lens from "./Lens.js";
2
- export * as PropertyPath from "./PropertyPath.js";
3
2
  export * as Subscribable from "./Subscribable.js";
4
3
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA;AACjD,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "effect-lens",
3
3
  "description": "An effectful Lens type to easily manage nested state",
4
- "version": "0.1.4",
4
+ "version": "0.2.0",
5
5
  "type": "module",
6
6
  "files": [
7
7
  "./README.md",
@@ -21,10 +21,6 @@
21
21
  "types": "./dist/Lens.d.ts",
22
22
  "default": "./dist/Lens.js"
23
23
  },
24
- "./PropertyPath": {
25
- "types": "./dist/PropertyPath.d.ts",
26
- "default": "./dist/PropertyPath.js"
27
- },
28
24
  "./Subscribable": {
29
25
  "types": "./dist/Subscribable.d.ts",
30
26
  "default": "./dist/Subscribable.js"
@@ -1,23 +0,0 @@
1
- import { Equivalence, Option } from "effect";
2
- export type PropertyPath = readonly PropertyKey[];
3
- type Prev = readonly [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
4
- export type Paths<T, D extends number = 5, Seen = never> = readonly [] | (D extends never ? readonly [] : T extends Seen ? readonly [] : T extends readonly any[] ? {
5
- [K in keyof T as K extends number ? K : never]: readonly [K] | readonly [K, ...Paths<T[K], Prev[D], Seen | T>];
6
- } extends infer O ? O[keyof O] : never : T extends object ? {
7
- [K in keyof T as K extends string | number | symbol ? K : never]-?: NonNullable<T[K]> extends infer V ? readonly [K] | readonly [K, ...Paths<V, Prev[D], Seen>] : never;
8
- } extends infer O ? O[keyof O] : never : never);
9
- export type ValueFromPath<T, P extends readonly any[]> = P extends readonly [infer Head, ...infer Tail] ? Head extends keyof T ? ValueFromPath<T[Head], Tail> : T extends readonly any[] ? Head extends number ? ValueFromPath<T[number], Tail> : never : never : T;
10
- export declare const equivalence: Equivalence.Equivalence<PropertyPath>;
11
- export declare const unsafeGet: {
12
- <T, const P extends Paths<T>>(path: P): (self: T) => ValueFromPath<T, P>;
13
- <T, const P extends Paths<T>>(self: T, path: P): ValueFromPath<T, P>;
14
- };
15
- export declare const get: {
16
- <T, const P extends Paths<T>>(path: P): (self: T) => Option.Option<ValueFromPath<T, P>>;
17
- <T, const P extends Paths<T>>(self: T, path: P): Option.Option<ValueFromPath<T, P>>;
18
- };
19
- export declare const immutableSet: {
20
- <T, const P extends Paths<T>>(path: P, value: ValueFromPath<T, P>): (self: T) => Option.Option<T>;
21
- <T, const P extends Paths<T>>(self: T, path: P, value: ValueFromPath<T, P>): Option.Option<T>;
22
- };
23
- export {};
@@ -1,30 +0,0 @@
1
- import { Array, Equivalence, Function, Option, Predicate } from "effect";
2
- export const equivalence = Equivalence.array(Equivalence.strict());
3
- export const unsafeGet = Function.dual(2, (self, path) => path.reduce((acc, key) => acc?.[key], self));
4
- export const get = Function.dual(2, (self, path) => path.reduce((acc, key) => Option.isSome(acc)
5
- ? Predicate.hasProperty(acc.value, key)
6
- ? Option.some(acc.value[key])
7
- : Option.none()
8
- : acc, Option.some(self)));
9
- export const immutableSet = Function.dual(3, (self, path, value) => {
10
- const key = Array.head(path);
11
- if (Option.isNone(key))
12
- return Option.some(value);
13
- if (!Predicate.hasProperty(self, key.value))
14
- return Option.none();
15
- const child = immutableSet(self[key.value], Option.getOrThrow(Array.tail(path)), value);
16
- if (Option.isNone(child))
17
- return child;
18
- if (Array.isArray(self))
19
- return typeof key.value === "number"
20
- ? Option.some([
21
- ...self.slice(0, key.value),
22
- child.value,
23
- ...self.slice(key.value + 1),
24
- ])
25
- : Option.none();
26
- if (typeof self === "object")
27
- return Option.some(Object.assign(Object.create(Object.getPrototypeOf(self)), { ...self, [key.value]: child.value }));
28
- return Option.none();
29
- });
30
- //# sourceMappingURL=PropertyPath.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PropertyPath.js","sourceRoot":"","sources":["../src/PropertyPath.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAyCxE,MAAM,CAAC,MAAM,WAAW,GAA0C,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAA;AAEzG,MAAM,CAAC,MAAM,SAAS,GAGlB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAA8B,IAAO,EAAE,IAAO,EAAuB,EAAE,CACxF,IAAI,CAAC,MAAM,CAAC,CAAC,GAAQ,EAAE,GAAQ,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CACxD,CAAA;AAED,MAAM,CAAC,MAAM,GAAG,GAGZ,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAA8B,IAAO,EAAE,IAAO,EAAsC,EAAE,CACvG,IAAI,CAAC,MAAM,CACP,CAAC,GAAuB,EAAE,GAAQ,EAAsB,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;IACzE,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC;QACnC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE;IACnB,CAAC,CAAC,GAAG,EAET,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CACpB,CACJ,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAGrB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAA8B,IAAO,EAAE,IAAO,EAAE,KAA0B,EAAoB,EAAE;IACjH,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAoB,CAAC,CAAA;IAC5C,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;QAClB,OAAO,MAAM,CAAC,IAAI,CAAC,KAAU,CAAC,CAAA;IAClC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC;QACvC,OAAO,MAAM,CAAC,IAAI,EAAE,CAAA;IAExB,MAAM,KAAK,GAAG,YAAY,CAAW,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAoB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;IACjH,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QACpB,OAAO,KAAK,CAAA;IAEhB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QACnB,OAAO,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ;YAChC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;gBACV,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC;gBAC3B,KAAK,CAAC,KAAK;gBACX,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;aAC1B,CAAC;YACP,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;IAEvB,IAAI,OAAO,IAAI,KAAK,QAAQ;QACxB,OAAO,MAAM,CAAC,IAAI,CACd,MAAM,CAAC,MAAM,CACT,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAC1C,EAAE,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,CACxC,CACJ,CAAA;IAEL,OAAO,MAAM,CAAC,IAAI,EAAE,CAAA;AACxB,CAAC,CAAC,CAAA"}