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 +70 -26
- package/dist/Lens.d.ts +205 -32
- package/dist/Lens.js +257 -57
- package/dist/Lens.js.map +1 -1
- package/dist/Subscribable.d.ts +13 -1
- package/dist/Subscribable.js +14 -2
- package/dist/Subscribable.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -5
- package/dist/PropertyPath.d.ts +0 -23
- package/dist/PropertyPath.js +0 -30
- package/dist/PropertyPath.js.map +0 -1
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
141
|
-
Lens.
|
|
142
|
-
Lens.focusArrayAt(0),
|
|
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
|
|
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.
|
|
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 '
|
|
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
|
-
| `
|
|
162
|
-
| `
|
|
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(
|
|
255
|
+
yield* Effect.forkScoped(Stream.runForEach(usersSub.changes, ...))
|
|
215
256
|
})
|
|
216
257
|
|
|
217
258
|
const lens = ref.pipe(
|
|
218
259
|
Lens.fromSubscriptionRef,
|
|
219
|
-
Lens.
|
|
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:
|
|
270
|
+
declare const sub: Subscribable.Subscribable<readonly { name: string }[], never, never>
|
|
230
271
|
|
|
231
|
-
// \/
|
|
272
|
+
// \/ Subscribable.Subscribable<string, NoSuchElementException, never>
|
|
232
273
|
const nameSub = sub.pipe(
|
|
233
274
|
Subscribable.focusArrayAt(1),
|
|
234
|
-
Subscribable.
|
|
275
|
+
Subscribable.focusObjectOn("name"),
|
|
235
276
|
)
|
|
236
277
|
```
|
|
237
278
|
|
|
238
279
|
Currently available:
|
|
239
280
|
| Name | Description |
|
|
240
281
|
| - | - |
|
|
241
|
-
| `
|
|
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
|
|
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
|
-
*
|
|
18
|
+
* Checks whether a value is a `Lens`.
|
|
20
19
|
*/
|
|
21
|
-
export declare
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
-
|
|
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
|
-
*
|
|
62
|
+
* Creates a `Lens` by supplying how to read the current value, observe changes, and apply transformations.
|
|
32
63
|
*/
|
|
33
|
-
export declare const
|
|
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
|
-
*
|
|
36
|
-
*
|
|
37
|
-
* Either `modify` or `set` needs to be supplied.
|
|
73
|
+
* Flattens an effectful `Lens`.
|
|
38
74
|
*/
|
|
39
|
-
export declare const
|
|
40
|
-
|
|
41
|
-
readonly
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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 `
|
|
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
|
|
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
|
-
*
|
|
126
|
+
* Creates a `Lens` that proxies a `SubscriptionRef`.
|
|
60
127
|
*/
|
|
61
|
-
export declare const
|
|
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
|
|
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
|
|
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
|
|
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
|
|
126
|
-
<A extends object, ER, EW, RR, RW, K extends
|
|
127
|
-
<A extends object, ER, EW, RR, RW, K extends
|
|
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
|
-
*
|
|
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
|
-
|
|
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.
|
|
17
|
-
|
|
18
|
-
|
|
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
|
-
*
|
|
41
|
+
* Creates a `Lens` by supplying how to read the current value, observe changes, and apply transformations.
|
|
23
42
|
*/
|
|
24
|
-
export const
|
|
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
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* Either `modify` or `set` needs to be supplied.
|
|
60
|
+
* Flattens an effectful `Lens`.
|
|
29
61
|
*/
|
|
30
|
-
export const
|
|
31
|
-
|
|
32
|
-
|
|
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 `
|
|
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
|
|
37
|
-
|
|
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) =>
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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
|
-
*
|
|
127
|
+
* Creates a `Lens` that proxies a `SubscriptionRef`.
|
|
54
128
|
*/
|
|
55
|
-
export const
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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) =>
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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) =>
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
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) =>
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
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
|
|
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
|
|
310
|
+
* Narrows the focus to a writable field of an object. Mutates the object in place when written to.
|
|
118
311
|
*/
|
|
119
|
-
export const
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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":"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"}
|
package/dist/Subscribable.d.ts
CHANGED
|
@@ -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
|
|
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>;
|
package/dist/Subscribable.js
CHANGED
|
@@ -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
|
|
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
|
package/dist/Subscribable.js.map
CHANGED
|
@@ -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;
|
|
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
package/dist/index.js
CHANGED
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
|
|
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.
|
|
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"
|
package/dist/PropertyPath.d.ts
DELETED
|
@@ -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 {};
|
package/dist/PropertyPath.js
DELETED
|
@@ -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
|
package/dist/PropertyPath.js.map
DELETED
|
@@ -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"}
|