@typed/fx 1.22.2 → 1.24.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/dist/cjs/AsyncData.js.map +1 -1
- package/dist/cjs/Form.js.map +1 -1
- package/dist/cjs/FormEntry.js.map +1 -1
- package/dist/cjs/Fx.js +1 -1
- package/dist/cjs/Fx.js.map +1 -1
- package/dist/cjs/Idle.js.map +1 -1
- package/dist/cjs/Match.js.map +1 -1
- package/dist/cjs/Pull.js +5 -3
- package/dist/cjs/Pull.js.map +1 -1
- package/dist/cjs/RefArray.js.map +1 -1
- package/dist/cjs/RefChunk.js.map +1 -1
- package/dist/cjs/RefHashSet.js.map +1 -1
- package/dist/cjs/RefSubject.js +3 -2
- package/dist/cjs/RefSubject.js.map +1 -1
- package/dist/cjs/Sink.js.map +1 -1
- package/dist/cjs/Subject.js.map +1 -1
- package/dist/cjs/Versioned.js.map +1 -1
- package/dist/cjs/internal/core.js.map +1 -1
- package/dist/cjs/internal/helpers.js.map +1 -1
- package/dist/cjs/internal/keyed.js +1 -1
- package/dist/cjs/internal/keyed.js.map +1 -1
- package/dist/cjs/internal/provide.js.map +1 -1
- package/dist/cjs/internal/share.js.map +1 -1
- package/dist/cjs/internal/sync-producer.js.map +1 -1
- package/dist/dts/AsyncData.d.ts +53 -53
- package/dist/dts/AsyncData.d.ts.map +1 -1
- package/dist/dts/Emitter.d.ts +7 -7
- package/dist/dts/Emitter.d.ts.map +1 -1
- package/dist/dts/Form.d.ts +14 -14
- package/dist/dts/Form.d.ts.map +1 -1
- package/dist/dts/FormEntry.d.ts +11 -11
- package/dist/dts/FormEntry.d.ts.map +1 -1
- package/dist/dts/Fx.d.ts +417 -417
- package/dist/dts/Fx.d.ts.map +1 -1
- package/dist/dts/Guard.d.ts +21 -21
- package/dist/dts/Guard.d.ts.map +1 -1
- package/dist/dts/Idle.d.ts +12 -12
- package/dist/dts/Idle.d.ts.map +1 -1
- package/dist/dts/Match.d.ts +16 -16
- package/dist/dts/Match.d.ts.map +1 -1
- package/dist/dts/Pull.d.ts +5 -5
- package/dist/dts/Pull.d.ts.map +1 -1
- package/dist/dts/Push.d.ts +40 -40
- package/dist/dts/Push.d.ts.map +1 -1
- package/dist/dts/RefArray.d.ts +59 -59
- package/dist/dts/RefArray.d.ts.map +1 -1
- package/dist/dts/RefChunk.d.ts +45 -45
- package/dist/dts/RefChunk.d.ts.map +1 -1
- package/dist/dts/RefHashMap.d.ts +35 -35
- package/dist/dts/RefHashMap.d.ts.map +1 -1
- package/dist/dts/RefHashSet.d.ts +17 -17
- package/dist/dts/RefHashSet.d.ts.map +1 -1
- package/dist/dts/RefSubject.d.ts +136 -136
- package/dist/dts/RefSubject.d.ts.map +1 -1
- package/dist/dts/Sink.d.ts +63 -63
- package/dist/dts/Sink.d.ts.map +1 -1
- package/dist/dts/Stream.d.ts +11 -11
- package/dist/dts/Stream.d.ts.map +1 -1
- package/dist/dts/Subject.d.ts +13 -13
- package/dist/dts/Subject.d.ts.map +1 -1
- package/dist/dts/Typeclass.d.ts +1 -1
- package/dist/dts/Typeclass.d.ts.map +1 -1
- package/dist/dts/Versioned.d.ts +33 -33
- package/dist/dts/Versioned.d.ts.map +1 -1
- package/dist/dts/index.d.ts +1 -1
- package/dist/dts/internal/DeferredRef.d.ts +8 -8
- package/dist/dts/internal/DeferredRef.d.ts.map +1 -1
- package/dist/dts/internal/core.d.ts +191 -191
- package/dist/dts/internal/core.d.ts.map +1 -1
- package/dist/dts/internal/effect-loop-operator.d.ts +6 -6
- package/dist/dts/internal/effect-loop-operator.d.ts.map +1 -1
- package/dist/dts/internal/effect-operator.d.ts +16 -16
- package/dist/dts/internal/effect-operator.d.ts.map +1 -1
- package/dist/dts/internal/effect-producer.d.ts +13 -13
- package/dist/dts/internal/effect-producer.d.ts.map +1 -1
- package/dist/dts/internal/helpers.d.ts +26 -26
- package/dist/dts/internal/helpers.d.ts.map +1 -1
- package/dist/dts/internal/keyed.d.ts +1 -1
- package/dist/dts/internal/keyed.d.ts.map +1 -1
- package/dist/dts/internal/loop-operator.d.ts +2 -2
- package/dist/dts/internal/loop-operator.d.ts.map +1 -1
- package/dist/dts/internal/operator.d.ts +2 -2
- package/dist/dts/internal/operator.d.ts.map +1 -1
- package/dist/dts/internal/protos.d.ts +12 -12
- package/dist/dts/internal/protos.d.ts.map +1 -1
- package/dist/dts/internal/provide.d.ts +15 -15
- package/dist/dts/internal/provide.d.ts.map +1 -1
- package/dist/dts/internal/share.d.ts +11 -11
- package/dist/dts/internal/share.d.ts.map +1 -1
- package/dist/dts/internal/sync-operator.d.ts +2 -2
- package/dist/dts/internal/sync-operator.d.ts.map +1 -1
- package/dist/dts/internal/sync-producer.d.ts +6 -6
- package/dist/dts/internal/sync-producer.d.ts.map +1 -1
- package/dist/dts/internal/withKey.d.ts +1 -1
- package/dist/dts/internal/withKey.d.ts.map +1 -1
- package/dist/esm/AsyncData.js.map +1 -1
- package/dist/esm/Form.js.map +1 -1
- package/dist/esm/FormEntry.js.map +1 -1
- package/dist/esm/Fx.js +1 -1
- package/dist/esm/Fx.js.map +1 -1
- package/dist/esm/Idle.js.map +1 -1
- package/dist/esm/Match.js.map +1 -1
- package/dist/esm/Pull.js +3 -3
- package/dist/esm/Pull.js.map +1 -1
- package/dist/esm/RefArray.js.map +1 -1
- package/dist/esm/RefChunk.js.map +1 -1
- package/dist/esm/RefHashSet.js.map +1 -1
- package/dist/esm/RefSubject.js +3 -1
- package/dist/esm/RefSubject.js.map +1 -1
- package/dist/esm/Sink.js.map +1 -1
- package/dist/esm/Subject.js.map +1 -1
- package/dist/esm/Versioned.js.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/internal/core.js.map +1 -1
- package/dist/esm/internal/helpers.js.map +1 -1
- package/dist/esm/internal/keyed.js +1 -1
- package/dist/esm/internal/keyed.js.map +1 -1
- package/dist/esm/internal/provide.js.map +1 -1
- package/dist/esm/internal/share.js.map +1 -1
- package/dist/esm/internal/sync-producer.js.map +1 -1
- package/package.json +6 -6
- package/src/AsyncData.ts +142 -144
- package/src/Emitter.ts +13 -13
- package/src/Form.ts +55 -55
- package/src/FormEntry.ts +39 -39
- package/src/Fx.ts +788 -789
- package/src/Guard.ts +43 -43
- package/src/Idle.ts +26 -26
- package/src/Match.ts +60 -61
- package/src/Pull.ts +42 -43
- package/src/Push.ts +195 -195
- package/src/RefArray.ts +121 -119
- package/src/RefChunk.ts +98 -97
- package/src/RefHashMap.ts +79 -79
- package/src/RefHashSet.ts +40 -39
- package/src/RefSubject.ts +574 -565
- package/src/Sink.ts +303 -303
- package/src/Stream.ts +27 -27
- package/src/Subject.ts +48 -46
- package/src/Typeclass.ts +2 -2
- package/src/Versioned.ts +97 -97
- package/src/index.ts +1 -1
- package/src/internal/DeferredRef.ts +7 -7
- package/src/internal/core.ts +768 -781
- package/src/internal/effect-loop-operator.ts +7 -7
- package/src/internal/effect-operator.ts +23 -23
- package/src/internal/effect-producer.ts +38 -38
- package/src/internal/helpers.ts +51 -51
- package/src/internal/keyed.ts +21 -21
- package/src/internal/loop-operator.ts +2 -2
- package/src/internal/operator.ts +2 -2
- package/src/internal/protos.ts +15 -15
- package/src/internal/provide.ts +27 -27
- package/src/internal/share.ts +25 -25
- package/src/internal/sync-operator.ts +4 -4
- package/src/internal/sync-producer.ts +15 -15
- package/src/internal/withKey.ts +13 -13
package/src/Form.ts
CHANGED
|
@@ -56,24 +56,24 @@ export namespace Form {
|
|
|
56
56
|
* @since 1.18.0
|
|
57
57
|
*/
|
|
58
58
|
export interface Base<out R, out E, in out I, in out O, in out Entries extends Form.AnyEntries>
|
|
59
|
-
extends Versioned.Versioned<R, never,
|
|
59
|
+
extends Versioned.Versioned<R, never, I, E | ParseError, R | Scope.Scope, I, E | ParseError, R>
|
|
60
60
|
{
|
|
61
61
|
readonly [FormTypeId]: FormTypeId
|
|
62
62
|
|
|
63
63
|
readonly entries: Entries
|
|
64
64
|
|
|
65
65
|
readonly schema: S.Schema<
|
|
66
|
-
|
|
66
|
+
O,
|
|
67
67
|
I,
|
|
68
|
-
|
|
68
|
+
R
|
|
69
69
|
>
|
|
70
70
|
|
|
71
71
|
readonly get: <K extends keyof Entries>(key: K) => Entries[K]
|
|
72
72
|
|
|
73
73
|
readonly decoded: RefSubject.Computed<
|
|
74
|
-
|
|
74
|
+
O,
|
|
75
75
|
E | ParseError,
|
|
76
|
-
|
|
76
|
+
R
|
|
77
77
|
>
|
|
78
78
|
}
|
|
79
79
|
|
|
@@ -139,9 +139,9 @@ export namespace Form {
|
|
|
139
139
|
*/
|
|
140
140
|
export interface Derived<R, R2, Entries extends AnyEntries> extends Form<R, Entries> {
|
|
141
141
|
readonly persist: Effect.Effect<
|
|
142
|
-
|
|
142
|
+
Output<Entries>,
|
|
143
143
|
Error<Entries>,
|
|
144
|
-
|
|
144
|
+
R2
|
|
145
145
|
>
|
|
146
146
|
}
|
|
147
147
|
}
|
|
@@ -161,17 +161,21 @@ export type MakeForm<
|
|
|
161
161
|
I extends AnyObject,
|
|
162
162
|
O extends AnyObjectWithKeys<keyof I>
|
|
163
163
|
> = {
|
|
164
|
-
<
|
|
165
|
-
|
|
166
|
-
|
|
164
|
+
<E, R>(
|
|
165
|
+
fx: RefSubject.RefSubject<O, E, R>
|
|
166
|
+
): Effect.Effect<
|
|
167
167
|
[DerivedFromIO<R, never, E, I, O>] extends [Form.Derived<infer R, never, infer R2>] ? Form.Derived<R, never, R2>
|
|
168
|
-
: never
|
|
168
|
+
: never,
|
|
169
|
+
never,
|
|
170
|
+
R | Scope.Scope
|
|
169
171
|
>
|
|
170
172
|
|
|
171
|
-
<
|
|
172
|
-
R |
|
|
173
|
+
<E, R>(
|
|
174
|
+
fx: Fx<O, E, R> | Effect.Effect<O, E, R>
|
|
175
|
+
): Effect.Effect<
|
|
176
|
+
[FormFromIO<R0, E, I, O>] extends [Form<infer R1, infer R2>] ? Form<R1, R2> : never,
|
|
173
177
|
never,
|
|
174
|
-
|
|
178
|
+
R | Scope.Scope
|
|
175
179
|
>
|
|
176
180
|
}
|
|
177
181
|
|
|
@@ -183,17 +187,21 @@ export type MakeInputForm<
|
|
|
183
187
|
I extends AnyObject,
|
|
184
188
|
O extends AnyObjectWithKeys<keyof I>
|
|
185
189
|
> = {
|
|
186
|
-
<
|
|
187
|
-
|
|
188
|
-
|
|
190
|
+
<E, R>(
|
|
191
|
+
fx: RefSubject.RefSubject<I, E, R>
|
|
192
|
+
): Effect.Effect<
|
|
189
193
|
[DerivedFromIO<R0 | R, never, E, I, O>] extends [Form.Derived<infer R, infer _, infer R2>] ? Form.Derived<R, _, R2>
|
|
190
|
-
: never
|
|
194
|
+
: never,
|
|
195
|
+
never,
|
|
196
|
+
R | Scope.Scope
|
|
191
197
|
>
|
|
192
198
|
|
|
193
|
-
<
|
|
194
|
-
R |
|
|
199
|
+
<E, R>(
|
|
200
|
+
fx: Fx<I, E, R> | Effect.Effect<I, E, R>
|
|
201
|
+
): Effect.Effect<
|
|
202
|
+
[FormFromIO<R0, E, I, O>] extends [Form<infer R1, infer R2>] ? Form<R1, R2> : never,
|
|
195
203
|
never,
|
|
196
|
-
|
|
204
|
+
R | Scope.Scope
|
|
197
205
|
>
|
|
198
206
|
}
|
|
199
207
|
|
|
@@ -249,7 +257,7 @@ export function derive<
|
|
|
249
257
|
R0,
|
|
250
258
|
I extends Partial<Readonly<Record<PropertyKey, any>>>,
|
|
251
259
|
O extends Partial<{ readonly [K in keyof I]: any }>
|
|
252
|
-
>(schema: S.Schema<
|
|
260
|
+
>(schema: S.Schema<O, I, R0>): MakeForm<R0, I, O> {
|
|
253
261
|
return (input) =>
|
|
254
262
|
Effect.map(deriveMakeEntries(input, schema.ast), (entries) => {
|
|
255
263
|
const form = (Form as any)(entries)
|
|
@@ -275,8 +283,8 @@ export function deriveInput<
|
|
|
275
283
|
R0,
|
|
276
284
|
I extends Partial<Readonly<Record<PropertyKey, any>>>,
|
|
277
285
|
O extends Partial<AnyObjectWithKeys<keyof I>>
|
|
278
|
-
>(schema: S.Schema<
|
|
279
|
-
return <
|
|
286
|
+
>(schema: S.Schema<O, I, R0>): MakeInputForm<R0, I, O> {
|
|
287
|
+
return <E, R>(input: RefSubject.RefSubject<I, E, R> | Fx<I, E, R> | Effect.Effect<I, E, R>) =>
|
|
280
288
|
Effect.map(deriveMakeInputEntries(input, schema.ast), (entries) => {
|
|
281
289
|
const form = (Form as any)(entries)
|
|
282
290
|
|
|
@@ -301,16 +309,16 @@ function isParseError(u: unknown): u is ParseError {
|
|
|
301
309
|
const parseOptions: ParseOptions = { errors: "all", onExcessProperty: "ignore" }
|
|
302
310
|
|
|
303
311
|
class FormImpl<Entries extends Form.AnyEntries> extends FxEffectBase<
|
|
304
|
-
Form.
|
|
312
|
+
Form.Input<Entries>,
|
|
305
313
|
Form.Error<Entries> | ParseError,
|
|
314
|
+
Form.Context<Entries> | Scope.Scope,
|
|
306
315
|
Form.Input<Entries>,
|
|
307
|
-
Form.Context<Entries>,
|
|
308
316
|
Form.Error<Entries> | ParseError,
|
|
309
|
-
Form.
|
|
317
|
+
Form.Context<Entries>
|
|
310
318
|
> implements Form<Form.Context<Entries>, Entries> {
|
|
311
319
|
readonly [FormTypeId]: FormTypeId = FormTypeId
|
|
312
|
-
private _fx: Fx<
|
|
313
|
-
readonly version: Effect.Effect<
|
|
320
|
+
private _fx: Fx<Form.Input<Entries>, ParseError | Form.Error<Entries>, Scope.Scope>
|
|
321
|
+
readonly version: Effect.Effect<number>
|
|
314
322
|
|
|
315
323
|
constructor(readonly entries: Entries) {
|
|
316
324
|
super()
|
|
@@ -318,17 +326,13 @@ class FormImpl<Entries extends Form.AnyEntries> extends FxEffectBase<
|
|
|
318
326
|
this.schema = buildSchema(entries)
|
|
319
327
|
this.version = Effect.map(
|
|
320
328
|
// @ts-ignore Infinite type instantiation
|
|
321
|
-
Effect.all(Object.values(entries).map((e) => e.version)) as Effect.Effect<
|
|
322
|
-
never,
|
|
323
|
-
never,
|
|
324
|
-
ReadonlyArray<number>
|
|
325
|
-
>,
|
|
329
|
+
Effect.all(Object.values(entries).map((e) => e.version)) as Effect.Effect<ReadonlyArray<number>>,
|
|
326
330
|
(versions) => versions.reduce((a, b) => a + b, 0)
|
|
327
331
|
)
|
|
328
332
|
|
|
329
333
|
this._fx = hold(
|
|
330
334
|
core.skipRepeatsWith(
|
|
331
|
-
core.struct(this.entries as any) as Fx<
|
|
335
|
+
core.struct(this.entries as any) as Fx<Form.Input<Entries>, Form.Error<Entries> | ParseError>,
|
|
332
336
|
make(S.from(this.schema))
|
|
333
337
|
)
|
|
334
338
|
)
|
|
@@ -339,16 +343,12 @@ class FormImpl<Entries extends Form.AnyEntries> extends FxEffectBase<
|
|
|
339
343
|
schema: Form<Form.Context<Entries>, Entries>["schema"]
|
|
340
344
|
|
|
341
345
|
run<R3>(
|
|
342
|
-
sink: Sink.Sink<
|
|
343
|
-
): Effect.Effect<R3 | Scope.Scope
|
|
346
|
+
sink: Sink.Sink<Form.Input<Entries>, Form.Error<Entries> | ParseError, R3>
|
|
347
|
+
): Effect.Effect<unknown, never, R3 | Scope.Scope> {
|
|
344
348
|
return this._fx.run(sink)
|
|
345
349
|
}
|
|
346
350
|
|
|
347
|
-
toEffect(): Effect.Effect<
|
|
348
|
-
never,
|
|
349
|
-
Form.Error<Entries> | ParseError,
|
|
350
|
-
Form.Input<Entries>
|
|
351
|
-
> {
|
|
351
|
+
toEffect(): Effect.Effect<Form.Input<Entries>, Form.Error<Entries> | ParseError> {
|
|
352
352
|
return (
|
|
353
353
|
Effect.all(this.entries, { concurrency: "unbounded" }) as any
|
|
354
354
|
)
|
|
@@ -362,7 +362,7 @@ class FormImpl<Entries extends Form.AnyEntries> extends FxEffectBase<
|
|
|
362
362
|
|
|
363
363
|
function buildSchema<Entries extends Form.AnyEntries>(
|
|
364
364
|
entries: Entries
|
|
365
|
-
): S.Schema<Form.
|
|
365
|
+
): S.Schema<Form.Output<Entries>, Form.Input<Entries>, Form.Context<Entries>> {
|
|
366
366
|
const schemas: any = {}
|
|
367
367
|
|
|
368
368
|
for (const key of Reflect.ownKeys(entries)) {
|
|
@@ -389,9 +389,9 @@ const deriveMakeEntries = <
|
|
|
389
389
|
I extends Readonly<Record<PropertyKey, any>>,
|
|
390
390
|
O extends Readonly<Record<keyof I, any>>
|
|
391
391
|
>(
|
|
392
|
-
input: RefSubject.RefSubject<
|
|
392
|
+
input: RefSubject.RefSubject<O, E, R> | Fx<O, E, R> | Effect.Effect<O, E, R>,
|
|
393
393
|
ast: AST.AST
|
|
394
|
-
): Effect.Effect<
|
|
394
|
+
): Effect.Effect<DeriveEntries<R, E, I, O>, never, R | Scope.Scope> =>
|
|
395
395
|
Effect.suspend(() => {
|
|
396
396
|
switch (ast._tag) {
|
|
397
397
|
case "TypeLiteral": {
|
|
@@ -418,7 +418,7 @@ const deriveMakeEntries = <
|
|
|
418
418
|
FormEntry.derive<any, any, any>({
|
|
419
419
|
name: prop.name,
|
|
420
420
|
schema: S.make(ast)
|
|
421
|
-
})(nested as Fx<
|
|
421
|
+
})(nested as Fx<any, E, R>)
|
|
422
422
|
)
|
|
423
423
|
}
|
|
424
424
|
}
|
|
@@ -439,9 +439,9 @@ const deriveMakeInputEntries = <
|
|
|
439
439
|
I extends Readonly<Record<PropertyKey, any>>,
|
|
440
440
|
O extends Readonly<Record<keyof I, any>>
|
|
441
441
|
>(
|
|
442
|
-
input: RefSubject.RefSubject<
|
|
442
|
+
input: RefSubject.RefSubject<I, E, R> | Fx<I, E, R> | Effect.Effect<I, E, R>,
|
|
443
443
|
ast: AST.AST
|
|
444
|
-
): Effect.Effect<
|
|
444
|
+
): Effect.Effect<DeriveEntries<R, E, I, O>, never, R | Scope.Scope> =>
|
|
445
445
|
Effect.suspend(() => {
|
|
446
446
|
switch (ast._tag) {
|
|
447
447
|
case "TypeLiteral": {
|
|
@@ -468,7 +468,7 @@ const deriveMakeInputEntries = <
|
|
|
468
468
|
FormEntry.deriveInput<any, any, any>({
|
|
469
469
|
name: prop.name,
|
|
470
470
|
schema: S.make(ast)
|
|
471
|
-
})(nested as Fx<
|
|
471
|
+
})(nested as Fx<any, E, R>)
|
|
472
472
|
)
|
|
473
473
|
}
|
|
474
474
|
}
|
|
@@ -483,13 +483,13 @@ const deriveMakeInputEntries = <
|
|
|
483
483
|
}
|
|
484
484
|
})
|
|
485
485
|
|
|
486
|
-
const propOf = <
|
|
486
|
+
const propOf = <O, E, R>(
|
|
487
487
|
input:
|
|
488
|
-
| RefSubject.RefSubject<
|
|
489
|
-
| RefSubject.Computed<
|
|
490
|
-
| RefSubject.Filtered<
|
|
491
|
-
| Fx<
|
|
492
|
-
| Effect.Effect<
|
|
488
|
+
| RefSubject.RefSubject<O, E, R>
|
|
489
|
+
| RefSubject.Computed<O, E, R>
|
|
490
|
+
| RefSubject.Filtered<O, E, R>
|
|
491
|
+
| Fx<O, E, R>
|
|
492
|
+
| Effect.Effect<O, E, R>,
|
|
493
493
|
key: keyof O
|
|
494
494
|
) => {
|
|
495
495
|
if (TypeId in input) return core.map(input, (o) => o[key])
|
package/src/FormEntry.ts
CHANGED
|
@@ -16,10 +16,10 @@ import { ComputedTypeId, RefSubjectTypeId } from "./TypeId.js"
|
|
|
16
16
|
/**
|
|
17
17
|
* @since 1.18.0
|
|
18
18
|
*/
|
|
19
|
-
export interface FormEntry<out R, in out E, in out I, in out O> extends RefSubject.RefSubject<
|
|
19
|
+
export interface FormEntry<out R, in out E, in out I, in out O> extends RefSubject.RefSubject<I, E | ParseError, R> {
|
|
20
20
|
readonly name: PropertyKey
|
|
21
|
-
readonly schema: Schema.Schema<
|
|
22
|
-
readonly decoded: RefSubject.Computed<
|
|
21
|
+
readonly schema: Schema.Schema<O, I, R>
|
|
22
|
+
readonly decoded: RefSubject.Computed<O, E | ParseError, R>
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
/**
|
|
@@ -30,7 +30,7 @@ export namespace FormEntry {
|
|
|
30
30
|
* @since 1.18.0
|
|
31
31
|
*/
|
|
32
32
|
export interface Derived<R, R2, E, I, O> extends FormEntry<R, E, I, O> {
|
|
33
|
-
readonly persist: Effect.Effect<
|
|
33
|
+
readonly persist: Effect.Effect<O, E | ParseError, R2>
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
|
|
@@ -39,7 +39,7 @@ export namespace FormEntry {
|
|
|
39
39
|
*/
|
|
40
40
|
export interface FormEntryOptions<R, I, O> {
|
|
41
41
|
readonly name: PropertyKey
|
|
42
|
-
readonly schema: Schema.Schema<
|
|
42
|
+
readonly schema: Schema.Schema<O, I, R>
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
/**
|
|
@@ -50,11 +50,11 @@ export interface FormEntryOptions<R, I, O> {
|
|
|
50
50
|
* @since 1.18.0
|
|
51
51
|
*/
|
|
52
52
|
export type MakeFormEntry<R0, I, O> = {
|
|
53
|
-
<
|
|
54
|
-
ref: RefSubject.RefSubject<
|
|
55
|
-
): Effect.Effect<
|
|
56
|
-
<
|
|
57
|
-
<
|
|
53
|
+
<E, R>(
|
|
54
|
+
ref: RefSubject.RefSubject<O, E, R>
|
|
55
|
+
): Effect.Effect<FormEntry.Derived<never, R, E, I, O>, never, R0 | R | Scope.Scope>
|
|
56
|
+
<E, R>(fx: Fx.Fx<O, E, R>): Effect.Effect<FormEntry<never, E, I, O>, never, R0 | R | Scope.Scope>
|
|
57
|
+
<E, R>(effect: Effect.Effect<O, E, R>): Effect.Effect<FormEntry<never, E, I, O>, never, R0 | R | Scope.Scope>
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
/**
|
|
@@ -62,11 +62,11 @@ export type MakeFormEntry<R0, I, O> = {
|
|
|
62
62
|
* @since 1.20.0
|
|
63
63
|
*/
|
|
64
64
|
export type MakeInputFormEntry<R0, I, O> = {
|
|
65
|
-
<
|
|
66
|
-
ref: RefSubject.RefSubject<
|
|
67
|
-
): Effect.Effect<
|
|
68
|
-
<
|
|
69
|
-
<
|
|
65
|
+
<E, R>(
|
|
66
|
+
ref: RefSubject.RefSubject<I, E, R>
|
|
67
|
+
): Effect.Effect<FormEntry.Derived<R0, R, E, I, O>, never, R | Scope.Scope>
|
|
68
|
+
<E, R>(fx: Fx.Fx<I, E, R>): Effect.Effect<FormEntry<R0, E, I, O>, never, R | Scope.Scope>
|
|
69
|
+
<E, R>(effect: Effect.Effect<I, E, R>): Effect.Effect<FormEntry<R0, E, I, O>, never, R | Scope.Scope>
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
/**
|
|
@@ -75,7 +75,7 @@ export type MakeInputFormEntry<R0, I, O> = {
|
|
|
75
75
|
export function derive<R, I, O>(options: FormEntryOptions<R, I, O>): MakeFormEntry<R, I, O> {
|
|
76
76
|
const encode = Schema.encode(options.schema)
|
|
77
77
|
const decode = Schema.decode(options.schema)
|
|
78
|
-
const makeFormEntry = <R2, E>(input: RefSubject.RefSubject<
|
|
78
|
+
const makeFormEntry = <R2, E>(input: RefSubject.RefSubject<O, E, R2> | Fx.Fx<O, E, R2> | Effect.Effect<O, E, R2>) => {
|
|
79
79
|
const initial = Fx.mapEffect(Effect.isEffect(input) ? Fx.fromEffect(input) : input, (o) => encode(o, parseOptions))
|
|
80
80
|
|
|
81
81
|
return Effect.map(
|
|
@@ -83,8 +83,8 @@ export function derive<R, I, O>(options: FormEntryOptions<R, I, O>): MakeFormEnt
|
|
|
83
83
|
eq: Equivalence.make(Schema.from(options.schema))
|
|
84
84
|
}),
|
|
85
85
|
(inputRef): FormEntry<R, E, I, O> | FormEntry.Derived<R, R2, E, I, O> => {
|
|
86
|
-
if (RefSubject.isRefSubject<
|
|
87
|
-
const persist: Effect.Effect<
|
|
86
|
+
if (RefSubject.isRefSubject<O, E, R2>(input)) {
|
|
87
|
+
const persist: Effect.Effect<O, ParseError | E, R | R2> = Effect.flatMap(
|
|
88
88
|
Effect.flatMap(
|
|
89
89
|
inputRef,
|
|
90
90
|
(i) => decode(i, parseOptions)
|
|
@@ -113,17 +113,17 @@ export function derive<R, I, O>(options: FormEntryOptions<R, I, O>): MakeFormEnt
|
|
|
113
113
|
*/
|
|
114
114
|
export function deriveInput<R, I, O>(options: FormEntryOptions<R, I, O>): MakeInputFormEntry<R, I, O> {
|
|
115
115
|
const decode = Schema.decode(options.schema)
|
|
116
|
-
const makeFormEntry = <R2, E>(input: RefSubject.RefSubject<
|
|
117
|
-
const initial: Fx.Fx<
|
|
116
|
+
const makeFormEntry = <R2, E>(input: RefSubject.RefSubject<I, E, R2> | Fx.Fx<I, E, R2> | Effect.Effect<I, E, R2>) => {
|
|
117
|
+
const initial: Fx.Fx<I, E | ParseError, R2> = Effect.isEffect(input) ? Fx.fromEffect(input) : input
|
|
118
118
|
|
|
119
119
|
return Effect.map(
|
|
120
120
|
RefSubject.make(initial, { eq: Equivalence.make(Schema.from(options.schema)) }),
|
|
121
121
|
(inputRef): FormEntry<R, E, I, O> | FormEntry.Derived<R, R2, E, I, O> => {
|
|
122
122
|
if (RefSubject.isRefSubject<R2, E, O>(input)) {
|
|
123
|
-
const persist: Effect.Effect<
|
|
123
|
+
const persist: Effect.Effect<O, ParseError | E, R | R2> = Effect.flatMap(
|
|
124
124
|
Effect.flatMap(
|
|
125
125
|
inputRef,
|
|
126
|
-
(i) => RefSubject.set(input as RefSubject.RefSubject<
|
|
126
|
+
(i) => RefSubject.set(input as RefSubject.RefSubject<I, E, R2>, i)
|
|
127
127
|
),
|
|
128
128
|
(i) => decode(i, parseOptions)
|
|
129
129
|
)
|
|
@@ -149,21 +149,21 @@ const parseOptions: ParseOptions = {
|
|
|
149
149
|
onExcessProperty: "ignore"
|
|
150
150
|
}
|
|
151
151
|
|
|
152
|
-
class FromEntryImpl<R, E, I, O> extends FxEffectBase<
|
|
152
|
+
class FromEntryImpl<R, E, I, O> extends FxEffectBase<I, E | ParseError, R | Scope.Scope, I, ParseError | E, R>
|
|
153
153
|
implements FormEntry<R, E, I, O>
|
|
154
154
|
{
|
|
155
155
|
readonly [ComputedTypeId]: ComputedTypeId = ComputedTypeId
|
|
156
156
|
readonly [RefSubjectTypeId]: RefSubjectTypeId = RefSubjectTypeId
|
|
157
157
|
|
|
158
|
-
readonly decoded: RefSubject.Computed<
|
|
159
|
-
readonly version: Effect.Effect<
|
|
160
|
-
readonly subscriberCount: Effect.Effect<
|
|
161
|
-
readonly interrupt: Effect.Effect<
|
|
158
|
+
readonly decoded: RefSubject.Computed<O, ParseError | E, R>
|
|
159
|
+
readonly version: Effect.Effect<number, ParseError | E, R>
|
|
160
|
+
readonly subscriberCount: Effect.Effect<number, never, R>
|
|
161
|
+
readonly interrupt: Effect.Effect<void, never, R>
|
|
162
162
|
|
|
163
163
|
constructor(
|
|
164
|
-
readonly ref: RefSubject.RefSubject<
|
|
164
|
+
readonly ref: RefSubject.RefSubject<I, E | ParseError, R>,
|
|
165
165
|
readonly name: PropertyKey,
|
|
166
|
-
readonly schema: Schema.Schema<
|
|
166
|
+
readonly schema: Schema.Schema<O, I, R>
|
|
167
167
|
) {
|
|
168
168
|
super()
|
|
169
169
|
|
|
@@ -174,25 +174,25 @@ class FromEntryImpl<R, E, I, O> extends FxEffectBase<R | Scope.Scope, E | ParseE
|
|
|
174
174
|
this.interrupt = ref.interrupt
|
|
175
175
|
}
|
|
176
176
|
|
|
177
|
-
run<R3>(sink: Sink.Sink<
|
|
177
|
+
run<R3>(sink: Sink.Sink<I, E | ParseError, R3>): Effect.Effect<unknown, never, R | R3 | Scope.Scope> {
|
|
178
178
|
return this.ref.run(sink)
|
|
179
179
|
}
|
|
180
180
|
|
|
181
|
-
toEffect(): Effect.Effect<
|
|
181
|
+
toEffect(): Effect.Effect<I, E | ParseError, R> {
|
|
182
182
|
return this.ref
|
|
183
183
|
}
|
|
184
184
|
|
|
185
|
-
runUpdates<
|
|
186
|
-
f: (ref: RefSubject.GetSetDelete<
|
|
187
|
-
): Effect.Effect<
|
|
185
|
+
runUpdates<B, E2, R2>(
|
|
186
|
+
f: (ref: RefSubject.GetSetDelete<I, E | ParseError, R>) => Effect.Effect<B, E2, R2>
|
|
187
|
+
): Effect.Effect<B, E2, R | R2> {
|
|
188
188
|
return this.ref.runUpdates(f)
|
|
189
189
|
}
|
|
190
190
|
|
|
191
|
-
onFailure(cause: Cause<E | ParseError>): Effect.Effect<
|
|
191
|
+
onFailure(cause: Cause<E | ParseError>): Effect.Effect<unknown, never, R> {
|
|
192
192
|
return this.ref.onFailure(cause)
|
|
193
193
|
}
|
|
194
194
|
|
|
195
|
-
onSuccess(value: I): Effect.Effect<
|
|
195
|
+
onSuccess(value: I): Effect.Effect<unknown, never, R> {
|
|
196
196
|
return this.ref.onSuccess(value)
|
|
197
197
|
}
|
|
198
198
|
}
|
|
@@ -201,10 +201,10 @@ class DerivedFormEntryImpl<R, R2, E, I, O> extends FromEntryImpl<R, E, I, O>
|
|
|
201
201
|
implements FormEntry.Derived<R, R2, E, I, O>
|
|
202
202
|
{
|
|
203
203
|
constructor(
|
|
204
|
-
ref: RefSubject.RefSubject<
|
|
204
|
+
ref: RefSubject.RefSubject<I, E | ParseError>,
|
|
205
205
|
name: PropertyKey,
|
|
206
|
-
schema: Schema.Schema<
|
|
207
|
-
readonly persist: Effect.Effect<
|
|
206
|
+
schema: Schema.Schema<O, I, R>,
|
|
207
|
+
readonly persist: Effect.Effect<O, E | ParseError, R2>
|
|
208
208
|
) {
|
|
209
209
|
super(ref, name, schema)
|
|
210
210
|
}
|