@typed/fx 1.22.2 → 1.23.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.
Files changed (112) hide show
  1. package/dist/cjs/Form.js.map +1 -1
  2. package/dist/cjs/Fx.js.map +1 -1
  3. package/dist/cjs/Idle.js.map +1 -1
  4. package/dist/cjs/Match.js.map +1 -1
  5. package/dist/cjs/Pull.js.map +1 -1
  6. package/dist/cjs/Subject.js.map +1 -1
  7. package/dist/cjs/internal/core.js.map +1 -1
  8. package/dist/cjs/internal/helpers.js.map +1 -1
  9. package/dist/cjs/internal/keyed.js +1 -1
  10. package/dist/cjs/internal/keyed.js.map +1 -1
  11. package/dist/cjs/internal/share.js.map +1 -1
  12. package/dist/cjs/internal/sync-producer.js.map +1 -1
  13. package/dist/dts/AsyncData.d.ts +33 -33
  14. package/dist/dts/AsyncData.d.ts.map +1 -1
  15. package/dist/dts/Emitter.d.ts +6 -6
  16. package/dist/dts/Emitter.d.ts.map +1 -1
  17. package/dist/dts/Form.d.ts +12 -12
  18. package/dist/dts/Form.d.ts.map +1 -1
  19. package/dist/dts/FormEntry.d.ts +9 -9
  20. package/dist/dts/FormEntry.d.ts.map +1 -1
  21. package/dist/dts/Fx.d.ts +113 -113
  22. package/dist/dts/Fx.d.ts.map +1 -1
  23. package/dist/dts/Guard.d.ts +5 -5
  24. package/dist/dts/Guard.d.ts.map +1 -1
  25. package/dist/dts/Idle.d.ts +12 -12
  26. package/dist/dts/Idle.d.ts.map +1 -1
  27. package/dist/dts/Pull.d.ts +5 -5
  28. package/dist/dts/Pull.d.ts.map +1 -1
  29. package/dist/dts/Push.d.ts +20 -20
  30. package/dist/dts/Push.d.ts.map +1 -1
  31. package/dist/dts/RefArray.d.ts +33 -33
  32. package/dist/dts/RefArray.d.ts.map +1 -1
  33. package/dist/dts/RefChunk.d.ts +27 -27
  34. package/dist/dts/RefChunk.d.ts.map +1 -1
  35. package/dist/dts/RefHashMap.d.ts +17 -17
  36. package/dist/dts/RefHashMap.d.ts.map +1 -1
  37. package/dist/dts/RefHashSet.d.ts +5 -5
  38. package/dist/dts/RefHashSet.d.ts.map +1 -1
  39. package/dist/dts/RefSubject.d.ts +53 -53
  40. package/dist/dts/RefSubject.d.ts.map +1 -1
  41. package/dist/dts/Sink.d.ts +31 -31
  42. package/dist/dts/Sink.d.ts.map +1 -1
  43. package/dist/dts/Stream.d.ts +11 -11
  44. package/dist/dts/Stream.d.ts.map +1 -1
  45. package/dist/dts/Subject.d.ts +5 -5
  46. package/dist/dts/Subject.d.ts.map +1 -1
  47. package/dist/dts/Versioned.d.ts +11 -11
  48. package/dist/dts/Versioned.d.ts.map +1 -1
  49. package/dist/dts/internal/DeferredRef.d.ts +7 -7
  50. package/dist/dts/internal/core.d.ts +51 -51
  51. package/dist/dts/internal/core.d.ts.map +1 -1
  52. package/dist/dts/internal/effect-loop-operator.d.ts +4 -4
  53. package/dist/dts/internal/effect-loop-operator.d.ts.map +1 -1
  54. package/dist/dts/internal/effect-operator.d.ts +11 -11
  55. package/dist/dts/internal/effect-operator.d.ts.map +1 -1
  56. package/dist/dts/internal/effect-producer.d.ts +9 -9
  57. package/dist/dts/internal/effect-producer.d.ts.map +1 -1
  58. package/dist/dts/internal/helpers.d.ts +25 -25
  59. package/dist/dts/internal/helpers.d.ts.map +1 -1
  60. package/dist/dts/internal/protos.d.ts +9 -9
  61. package/dist/dts/internal/protos.d.ts.map +1 -1
  62. package/dist/dts/internal/provide.d.ts +10 -10
  63. package/dist/dts/internal/provide.d.ts.map +1 -1
  64. package/dist/dts/internal/share.d.ts +2 -2
  65. package/dist/dts/internal/share.d.ts.map +1 -1
  66. package/dist/dts/internal/sync-producer.d.ts +6 -6
  67. package/dist/dts/internal/sync-producer.d.ts.map +1 -1
  68. package/dist/esm/Form.js.map +1 -1
  69. package/dist/esm/FormEntry.js.map +1 -1
  70. package/dist/esm/Fx.js.map +1 -1
  71. package/dist/esm/Idle.js.map +1 -1
  72. package/dist/esm/Match.js.map +1 -1
  73. package/dist/esm/Pull.js.map +1 -1
  74. package/dist/esm/RefSubject.js.map +1 -1
  75. package/dist/esm/Subject.js.map +1 -1
  76. package/dist/esm/internal/core.js.map +1 -1
  77. package/dist/esm/internal/helpers.js.map +1 -1
  78. package/dist/esm/internal/keyed.js +1 -1
  79. package/dist/esm/internal/keyed.js.map +1 -1
  80. package/dist/esm/internal/share.js.map +1 -1
  81. package/dist/esm/internal/sync-producer.js.map +1 -1
  82. package/package.json +6 -6
  83. package/src/AsyncData.ts +86 -86
  84. package/src/Emitter.ts +9 -9
  85. package/src/Form.ts +39 -39
  86. package/src/FormEntry.ts +25 -25
  87. package/src/Fx.ts +122 -124
  88. package/src/Guard.ts +7 -7
  89. package/src/Idle.ts +23 -23
  90. package/src/Match.ts +3 -3
  91. package/src/Pull.ts +10 -10
  92. package/src/Push.ts +33 -33
  93. package/src/RefArray.ts +36 -36
  94. package/src/RefChunk.ts +30 -30
  95. package/src/RefHashMap.ts +24 -24
  96. package/src/RefHashSet.ts +6 -6
  97. package/src/RefSubject.ts +184 -184
  98. package/src/Sink.ts +91 -91
  99. package/src/Stream.ts +19 -19
  100. package/src/Subject.ts +21 -21
  101. package/src/Versioned.ts +23 -23
  102. package/src/internal/DeferredRef.ts +6 -6
  103. package/src/internal/core.ts +132 -132
  104. package/src/internal/effect-loop-operator.ts +4 -4
  105. package/src/internal/effect-operator.ts +13 -13
  106. package/src/internal/effect-producer.ts +14 -14
  107. package/src/internal/helpers.ts +36 -36
  108. package/src/internal/keyed.ts +3 -3
  109. package/src/internal/protos.ts +12 -12
  110. package/src/internal/provide.ts +10 -10
  111. package/src/internal/share.ts +4 -4
  112. package/src/internal/sync-producer.ts +12 -12
package/src/AsyncData.ts CHANGED
@@ -20,7 +20,7 @@ import { RefSubjectTypeId } from "./TypeId.js"
20
20
  /**
21
21
  * @since 1.20.0
22
22
  */
23
- export function asyncDataRequest<R, E, A>(effect: Effect.Effect<R, E, A>): Fx.Fx<R, never, AsyncData.AsyncData<E, A>> {
23
+ export function asyncDataRequest<A, E, R>(effect: Effect.Effect<A, E, R>): Fx.Fx<R, never, AsyncData.AsyncData<A, E>> {
24
24
  return Fx.make((sink) =>
25
25
  Effect.flatMap(
26
26
  Effect.zipRight(sink.onSuccess(AsyncData.loading()), Effect.exit(effect)),
@@ -32,23 +32,23 @@ export function asyncDataRequest<R, E, A>(effect: Effect.Effect<R, E, A>): Fx.Fx
32
32
  /**
33
33
  * @since 1.20.0
34
34
  */
35
- export interface RefAsyncData<R, E, A> extends RefSubject.RefSubject<R, never, AsyncData.AsyncData<E, A>> {}
35
+ export interface RefAsyncData<A, E, R> extends RefSubject.RefSubject<R, never, AsyncData.AsyncData<A, E>> {}
36
36
 
37
37
  /**
38
38
  * @since 1.20.0
39
39
  */
40
40
  export const runAsyncData: {
41
- <R2, E, A>(
42
- effect: Effect.Effect<R2, E, A>
43
- ): <R>(ref: RefAsyncData<R, E, A>) => Effect.Effect<R | R2, never, AsyncData.AsyncData<E, A>>
41
+ <R2, A, E>(
42
+ effect: Effect.Effect<A, E, R2>
43
+ ): <R>(ref: RefAsyncData<A, E, R>) => Effect.Effect<AsyncData.AsyncData<A, E>, never, R | R2>
44
44
  <R, E, A, R2>(
45
- ref: RefAsyncData<R, E, A>,
46
- effect: Effect.Effect<R2, E, A>
47
- ): Effect.Effect<R | R2, never, AsyncData.AsyncData<E, A>>
45
+ ref: RefAsyncData<A, E, R>,
46
+ effect: Effect.Effect<A, E, R2>
47
+ ): Effect.Effect<AsyncData.AsyncData<A, E>, never, R | R2>
48
48
  } = dual(2, function runAsyncData<R, E, A, R2>(
49
- ref: RefAsyncData<R, E, A>,
50
- effect: Effect.Effect<R2, E, A>
51
- ): Effect.Effect<R | R2, never, AsyncData.AsyncData<E, A>> {
49
+ ref: RefAsyncData<A, E, R>,
50
+ effect: Effect.Effect<A, E, R2>
51
+ ): Effect.Effect<AsyncData.AsyncData<A, E>, never, R | R2> {
52
52
  return ref.runUpdates(({ get, set }) =>
53
53
  Effect.uninterruptibleMask((restore) =>
54
54
  Effect.flatMap(
@@ -74,17 +74,17 @@ export const matchAsyncData: {
74
74
  readonly Success: (value: RefSubject.RefSubject<never, never, A>) => Fx.Fx<R5, E5, F>
75
75
  }
76
76
  ): <R, E>(
77
- fx: Fx.Fx<R, E, AsyncData.AsyncData<E1, A>>
77
+ fx: Fx.Fx<R, E, AsyncData.AsyncData<A, E1>>
78
78
  ) => Fx.Fx<R | R2 | R3 | R4 | R5, E | E2 | E3 | E4 | E5, B | C | D | F>
79
79
 
80
- <R, E, E1, A, R2, E2, B, R3, E3, C, R4, E4, D, R5, E5, F>(fx: Fx.Fx<R, E, AsyncData.AsyncData<E1, A>>, matchers: {
80
+ <R, E, E1, A, R2, E2, B, R3, E3, C, R4, E4, D, R5, E5, F>(fx: Fx.Fx<R, E, AsyncData.AsyncData<A, E1>>, matchers: {
81
81
  readonly NoData: Fx.Fx<R2, E2, B>
82
82
  readonly Loading: (progress: RefSubject.Filtered<never, never, Progress>) => Fx.Fx<R3, E3, C>
83
83
  readonly Failure: (error: RefSubject.Computed<never, never, E1>) => Fx.Fx<R4, E4, D>
84
84
  readonly Success: (value: RefSubject.RefSubject<never, never, A>) => Fx.Fx<R5, E5, F>
85
85
  }): Fx.Fx<R | R2 | R3 | R4 | R5, E | E2 | E3 | E4 | E5, B | C | D | F>
86
86
  } = dual(2, function matchAsyncData<R, E, E1, A, R2, E2, B, R3, E3, C, R4, E4, D, R5, E5, F>(
87
- fx: Fx.Fx<R, E, AsyncData.AsyncData<E1, A>>,
87
+ fx: Fx.Fx<R, E, AsyncData.AsyncData<A, E1>>,
88
88
  matchers: {
89
89
  readonly NoData: Fx.Fx<R2, E2, B>
90
90
  readonly Loading: (progress: RefSubject.Filtered<never, never, Progress>) => Fx.Fx<R3, E3, C>
@@ -94,14 +94,14 @@ export const matchAsyncData: {
94
94
  ) => Fx.Fx<R4, E4, D>
95
95
  readonly Success: (
96
96
  value: RefSubject.RefSubject<never, never, A>,
97
- data: RefSubject.RefSubject<never, never, AsyncData.Success<A> | AsyncData.Optimistic<E1, A>>
97
+ data: RefSubject.RefSubject<never, never, AsyncData.Success<A> | AsyncData.Optimistic<A, E1>>
98
98
  ) => Fx.Fx<R5, E5, F>
99
99
  }
100
100
  ): Fx.Fx<R | R2 | R3 | R4 | R5, E | E2 | E3 | E4 | E5, B | C | D | F> {
101
101
  return Fx.withKey(
102
102
  fx,
103
103
  {
104
- getKey: (a: AsyncData.AsyncData<E1, A>) => a._tag === "Optimistic" ? "Success" : a._tag,
104
+ getKey: (a: AsyncData.AsyncData<A, E1>) => a._tag === "Optimistic" ? "Success" : a._tag,
105
105
  onValue: (ref, key): Fx.Fx<R | R2 | R3 | R4 | R5, E | E2 | E3 | E4 | E5, B | C | D | F> => {
106
106
  switch (key) {
107
107
  case "NoData":
@@ -128,7 +128,7 @@ export const matchAsyncData: {
128
128
  const success = ref as RefSubject.RefSubject<
129
129
  never,
130
130
  never,
131
- AsyncData.Success<A> | AsyncData.Optimistic<E1, A>
131
+ AsyncData.Success<A> | AsyncData.Optimistic<A, E1>
132
132
  >
133
133
 
134
134
  return matchers.Success(
@@ -138,7 +138,7 @@ export const matchAsyncData: {
138
138
  (value) =>
139
139
  Effect.map(
140
140
  success,
141
- (d) => AsyncData.map(d, () => value) as AsyncData.Success<A> | AsyncData.Optimistic<E1, A>
141
+ (d) => AsyncData.map(d, () => value) as AsyncData.Success<A> | AsyncData.Optimistic<A, E1>
142
142
  )
143
143
  ),
144
144
  success
@@ -163,11 +163,11 @@ export const matchAsyncDataArray: {
163
163
  readonly Success: (value: RefSubject.RefSubject<never, never, A>, key: K) => Fx.Fx<R5, E5, F>
164
164
  }
165
165
  ): <R, E>(
166
- fx: Fx.Fx<R, E, AsyncData.AsyncData<E1, ReadonlyArray<A>>>
166
+ fx: Fx.Fx<R, E, AsyncData.AsyncData<ReadonlyArray<A>, E1>>
167
167
  ) => Fx.Fx<Scope.Scope | R | R2 | R3 | R4 | R5, E | E2 | E3 | E4 | E5, B | C | D | ReadonlyArray<F>>
168
168
 
169
169
  <R, E, E1, A, K extends PropertyKey, R2, E2, B, R3, E3, C, R4, E4, D, R5, E5, F>(
170
- fx: Fx.Fx<R, E, AsyncData.AsyncData<E1, ReadonlyArray<A>>>,
170
+ fx: Fx.Fx<R, E, AsyncData.AsyncData<ReadonlyArray<A>, E1>>,
171
171
  getKey: (a: A) => K,
172
172
  matchers: {
173
173
  readonly NoData: Fx.Fx<R2, E2, B>
@@ -179,7 +179,7 @@ export const matchAsyncDataArray: {
179
179
  } = dual(
180
180
  3,
181
181
  function matchAsyncDataArray<R, E, E1, A, K extends PropertyKey, R2, E2, B, R3, E3, C, R4, E4, D, R5, E5, F>(
182
- fx: Fx.Fx<R, E, AsyncData.AsyncData<E1, ReadonlyArray<A>>>,
182
+ fx: Fx.Fx<R, E, AsyncData.AsyncData<ReadonlyArray<A>, E1>>,
183
183
  getKey: (a: A) => K,
184
184
  matchers: {
185
185
  readonly NoData: Fx.Fx<R2, E2, B>
@@ -206,17 +206,17 @@ export const matchAsyncDataArray: {
206
206
  * @since 1.20.0
207
207
  */
208
208
  export const runIfNoData: {
209
- <R2, E, A>(
210
- effect: Effect.Effect<R2, E, A>
211
- ): <R>(ref: RefAsyncData<R, E, A>) => Effect.Effect<R | R2, never, AsyncData.AsyncData<E, A>>
209
+ <R2, A, E>(
210
+ effect: Effect.Effect<A, E, R2>
211
+ ): <R>(ref: RefAsyncData<A, E, R>) => Effect.Effect<AsyncData.AsyncData<A, E>, never, R | R2>
212
212
  <R, E, A, R2>(
213
- ref: RefAsyncData<R, E, A>,
214
- effect: Effect.Effect<R2, E, A>
215
- ): Effect.Effect<R | R2, never, AsyncData.AsyncData<E, A>>
213
+ ref: RefAsyncData<A, E, R>,
214
+ effect: Effect.Effect<A, E, R2>
215
+ ): Effect.Effect<AsyncData.AsyncData<A, E>, never, R | R2>
216
216
  } = dual(2, function runIfNoData<R, E, A, R2>(
217
- ref: RefAsyncData<R, E, A>,
218
- effect: Effect.Effect<R2, E, A>
219
- ): Effect.Effect<R | R2, never, AsyncData.AsyncData<E, A>> {
217
+ ref: RefAsyncData<A, E, R>,
218
+ effect: Effect.Effect<A, E, R2>
219
+ ): Effect.Effect<AsyncData.AsyncData<A, E>, never, R | R2> {
220
220
  return Effect.flatMap(
221
221
  ref,
222
222
  (current) => AsyncData.isNoData(current) ? runAsyncData(ref, effect) : Effect.succeed(current)
@@ -227,21 +227,21 @@ export const runIfNoData: {
227
227
  * @since 1.20.0
228
228
  */
229
229
  export const runIfExpired: {
230
- <R2, E, A>(
231
- effect: Effect.Effect<R2, E, A>,
230
+ <R2, A, E>(
231
+ effect: Effect.Effect<A, E, R2>,
232
232
  options: { readonly ttl: Duration.DurationInput; readonly now?: number }
233
- ): <R>(ref: RefAsyncData<R, E, A>) => Effect.Effect<R | R2, never, AsyncData.AsyncData<E, A>>
233
+ ): <R>(ref: RefAsyncData<A, E, R>) => Effect.Effect<AsyncData.AsyncData<A, E>, never, R | R2>
234
234
 
235
235
  <R, E, A, R2>(
236
- ref: RefAsyncData<R, E, A>,
237
- effect: Effect.Effect<R2, E, A>,
236
+ ref: RefAsyncData<A, E, R>,
237
+ effect: Effect.Effect<A, E, R2>,
238
238
  options: { readonly ttl: Duration.DurationInput; readonly now?: number }
239
- ): Effect.Effect<R | R2, never, AsyncData.AsyncData<E, A>>
239
+ ): Effect.Effect<AsyncData.AsyncData<A, E>, never, R | R2>
240
240
  } = dual(3, function runIfExpired<R, E, A, R2>(
241
- ref: RefAsyncData<R, E, A>,
242
- effect: Effect.Effect<R2, E, A>,
241
+ ref: RefAsyncData<A, E, R>,
242
+ effect: Effect.Effect<A, E, R2>,
243
243
  { now, ttl }: { readonly ttl: Duration.DurationInput; readonly now?: number }
244
- ): Effect.Effect<R | R2, never, AsyncData.AsyncData<E, A>> {
244
+ ): Effect.Effect<AsyncData.AsyncData<A, E>, never, R | R2> {
245
245
  return Effect.flatMap(
246
246
  ref,
247
247
  (current) => AsyncData.isExpired(current, ttl, now) ? runAsyncData(ref, effect) : Effect.succeed(current)
@@ -253,9 +253,9 @@ export const runIfExpired: {
253
253
  * @since 1.20.0
254
254
  * @category updates
255
255
  */
256
- export const awaitLoading = <R, E, A>(
257
- data: RefAsyncData<R, E, A>
258
- ): Effect.Effect<R | Scope.Scope, never, Exclude<AsyncData.AsyncData<E, A>, AsyncData.Loading>> =>
256
+ export const awaitLoading = <A, E, R>(
257
+ data: RefAsyncData<A, E, R>
258
+ ): Effect.Effect<Exclude<AsyncData.AsyncData<A, E>, AsyncData.Loading>, never, R | Scope.Scope> =>
259
259
  data.pipe(
260
260
  Fx.dropWhile(AsyncData.isLoading),
261
261
  Fx.take(1),
@@ -268,9 +268,9 @@ export const awaitLoading = <R, E, A>(
268
268
  * @since 1.20.0
269
269
  * @category updates
270
270
  */
271
- export const awaitLoadingOrRefreshing = <R, E, A>(
272
- data: RefAsyncData<R, E, A>
273
- ): Effect.Effect<R | Scope.Scope, never, Exclude<AsyncData.AsyncData<E, A>, AsyncData.Loading>> =>
271
+ export const awaitLoadingOrRefreshing = <A, E, R>(
272
+ data: RefAsyncData<A, E, R>
273
+ ): Effect.Effect<Exclude<AsyncData.AsyncData<A, E>, AsyncData.Loading>, never, R | Scope.Scope> =>
274
274
  data.pipe(
275
275
  Fx.dropWhile(AsyncData.isLoadingOrRefreshing),
276
276
  Fx.take(1),
@@ -283,9 +283,9 @@ export const awaitLoadingOrRefreshing = <R, E, A>(
283
283
  * @since 1.20.0
284
284
  * @category updates
285
285
  */
286
- export const startLoading: <R, E, A>(
287
- ref: RefAsyncData<R, E, A>
288
- ) => Effect.Effect<R, never, AsyncData.AsyncData<E, A>> = <R, E, A>(ref: RefAsyncData<R, E, A>) =>
286
+ export const startLoading: <A, E, R>(
287
+ ref: RefAsyncData<A, E, R>
288
+ ) => Effect.Effect<AsyncData.AsyncData<A, E>, never, R> = <A, E, R>(ref: RefAsyncData<A, E, R>) =>
289
289
  RefSubject.update(ref, AsyncData.startLoading)
290
290
 
291
291
  /**
@@ -293,9 +293,9 @@ export const startLoading: <R, E, A>(
293
293
  * @since 1.20.0
294
294
  * @category updates
295
295
  */
296
- export const stopLoading: <R, E, A>(
297
- ref: RefAsyncData<R, E, A>
298
- ) => Effect.Effect<R, never, AsyncData.AsyncData<E, A>> = <R, E, A>(ref: RefAsyncData<R, E, A>) =>
296
+ export const stopLoading: <A, E, R>(
297
+ ref: RefAsyncData<A, E, R>
298
+ ) => Effect.Effect<AsyncData.AsyncData<A, E>, never, R> = <A, E, R>(ref: RefAsyncData<A, E, R>) =>
299
299
  RefSubject.update(ref, AsyncData.stopLoading)
300
300
 
301
301
  /**
@@ -303,7 +303,7 @@ export const stopLoading: <R, E, A>(
303
303
  * @since 1.20.0
304
304
  * @category conversions
305
305
  */
306
- export const asSink = <R, E, A>(ref: RefAsyncData<R, E, A>): Sink.Sink<R, E, A> =>
306
+ export const asSink = <A, E, R>(ref: RefAsyncData<A, E, R>): Sink.Sink<R, E, A> =>
307
307
  Sink.make(
308
308
  (cause) => RefSubject.set(ref, AsyncData.failCause(cause)),
309
309
  (a) => RefSubject.set(ref, AsyncData.success(a))
@@ -314,8 +314,8 @@ export const asSink = <R, E, A>(ref: RefAsyncData<R, E, A>): Sink.Sink<R, E, A>
314
314
  * @since 1.20.0
315
315
  */
316
316
  export const mapInputEffect = <R, E, A, R2, B>(
317
- ref: RefAsyncData<R, E, A>,
318
- f: (b: B) => Effect.Effect<R2, E, A>
317
+ ref: RefAsyncData<A, E, R>,
318
+ f: (b: B) => Effect.Effect<A, E, R2>
319
319
  ): Sink.Sink<R | R2, E, B> => Sink.mapEffect(asSink(ref), f)
320
320
 
321
321
  /**
@@ -323,7 +323,7 @@ export const mapInputEffect = <R, E, A, R2, B>(
323
323
  * @since 1.20.0
324
324
  */
325
325
  export const mapInput = <R, E, A, B>(
326
- ref: RefAsyncData<R, E, A>,
326
+ ref: RefAsyncData<A, E, R>,
327
327
  f: (b: B) => A
328
328
  ): Sink.Sink<R, E, B> => Sink.map(asSink(ref), f)
329
329
 
@@ -337,15 +337,15 @@ export const failCause: {
337
337
  <E>(
338
338
  cause: Cause.Cause<E>,
339
339
  options?: AsyncData.OptionalPartial<AsyncData.FailureOptions>
340
- ): <R, A>(ref: RefAsyncData<R, E, A>) => Effect.Effect<R, never, AsyncData.AsyncData<E, A>>
340
+ ): <R, A>(ref: RefAsyncData<A, E, R>) => Effect.Effect<AsyncData.AsyncData<A, E>, never, R>
341
341
 
342
- <R, E, A>(
343
- ref: RefAsyncData<R, E, A>,
342
+ <A, E, R>(
343
+ ref: RefAsyncData<A, E, R>,
344
344
  cause: Cause.Cause<E>,
345
345
  options?: AsyncData.OptionalPartial<AsyncData.FailureOptions>
346
- ): Effect.Effect<R, never, AsyncData.AsyncData<E, A>>
347
- } = dual(isRefFirst, <R, E, A>(
348
- ref: RefAsyncData<R, E, A>,
346
+ ): Effect.Effect<AsyncData.AsyncData<A, E>, never, R>
347
+ } = dual(isRefFirst, <A, E, R>(
348
+ ref: RefAsyncData<A, E, R>,
349
349
  cause: Cause.Cause<E>,
350
350
  options?: AsyncData.OptionalPartial<AsyncData.FailureOptions>
351
351
  ) => RefSubject.set(ref, AsyncData.failCause(cause, options)))
@@ -358,15 +358,15 @@ export const fail: {
358
358
  <E>(
359
359
  error: E,
360
360
  options?: AsyncData.OptionalPartial<AsyncData.FailureOptions>
361
- ): <R, A>(ref: RefAsyncData<R, E, A>) => Effect.Effect<R, never, AsyncData.AsyncData<E, A>>
361
+ ): <R, A>(ref: RefAsyncData<A, E, R>) => Effect.Effect<AsyncData.AsyncData<A, E>, never, R>
362
362
 
363
- <R, E, A>(
364
- ref: RefAsyncData<R, E, A>,
363
+ <A, E, R>(
364
+ ref: RefAsyncData<A, E, R>,
365
365
  error: E,
366
366
  options?: AsyncData.OptionalPartial<AsyncData.FailureOptions>
367
- ): Effect.Effect<R, never, AsyncData.AsyncData<E, A>>
368
- } = dual(isRefFirst, <R, E, A>(
369
- ref: RefAsyncData<R, E, A>,
367
+ ): Effect.Effect<AsyncData.AsyncData<A, E>, never, R>
368
+ } = dual(isRefFirst, <A, E, R>(
369
+ ref: RefAsyncData<A, E, R>,
370
370
  error: E,
371
371
  options?: AsyncData.OptionalPartial<AsyncData.FailureOptions>
372
372
  ) => RefSubject.set(ref, AsyncData.fail(error, options)))
@@ -379,17 +379,17 @@ export const succeed: {
379
379
  <A>(
380
380
  value: A,
381
381
  options?: AsyncData.OptionalPartial<AsyncData.SuccessOptions>
382
- ): <R, E>(ref: RefAsyncData<R, E, A>) => Effect.Effect<R, never, AsyncData.AsyncData<E, A>>
382
+ ): <R, E>(ref: RefAsyncData<A, E, R>) => Effect.Effect<AsyncData.AsyncData<A, E>, never, R>
383
383
 
384
- <R, E, A>(
385
- ref: RefAsyncData<R, E, A>,
384
+ <A, E, R>(
385
+ ref: RefAsyncData<A, E, R>,
386
386
  value: A,
387
387
  options?: AsyncData.OptionalPartial<AsyncData.SuccessOptions>
388
- ): Effect.Effect<R, never, AsyncData.AsyncData<E, A>>
388
+ ): Effect.Effect<AsyncData.AsyncData<A, E>, never, R>
389
389
  } = dual(
390
390
  isRefFirst,
391
- <R, E, A>(
392
- ref: RefAsyncData<R, E, A>,
391
+ <A, E, R>(
392
+ ref: RefAsyncData<A, E, R>,
393
393
  value: A,
394
394
  options?: AsyncData.OptionalPartial<AsyncData.SuccessOptions>
395
395
  ) => RefSubject.set(ref, AsyncData.success(value, options))
@@ -403,17 +403,17 @@ export const optimistic: {
403
403
  <A>(
404
404
  value: A,
405
405
  options?: AsyncData.OptionalPartial<AsyncData.OptimisticOptions>
406
- ): <R, E>(ref: RefAsyncData<R, E, A>) => Effect.Effect<R, never, AsyncData.AsyncData<E, A>>
406
+ ): <R, E>(ref: RefAsyncData<A, E, R>) => Effect.Effect<AsyncData.AsyncData<A, E>, never, R>
407
407
 
408
- <R, E, A>(
409
- ref: RefAsyncData<R, E, A>,
408
+ <A, E, R>(
409
+ ref: RefAsyncData<A, E, R>,
410
410
  value: A,
411
411
  options?: AsyncData.OptionalPartial<AsyncData.OptimisticOptions>
412
- ): Effect.Effect<R, never, AsyncData.AsyncData<E, A>>
412
+ ): Effect.Effect<AsyncData.AsyncData<A, E>, never, R>
413
413
  } = dual(
414
414
  isRefFirst,
415
- <R, E, A>(
416
- ref: RefAsyncData<R, E, A>,
415
+ <A, E, R>(
416
+ ref: RefAsyncData<A, E, R>,
417
417
  value: A,
418
418
  options?: AsyncData.OptionalPartial<AsyncData.OptimisticOptions>
419
419
  ) => RefSubject.update(ref, AsyncData.optimistic(value, options))
@@ -424,13 +424,13 @@ export const optimistic: {
424
424
  * @since 1.20.0
425
425
  */
426
426
  export const done: {
427
- <E, A>(exit: Exit.Exit<E, A>): <R>(ref: RefAsyncData<R, E, A>) => Effect.Effect<R, never, AsyncData.AsyncData<E, A>>
428
- <R, E, A>(ref: RefAsyncData<R, E, A>, exit: Exit.Exit<E, A>): Effect.Effect<R, never, AsyncData.AsyncData<E, A>>
427
+ <E, A>(exit: Exit.Exit<A, E>): <R>(ref: RefAsyncData<A, E, R>) => Effect.Effect<AsyncData.AsyncData<A, E>, never, R>
428
+ <A, E, R>(ref: RefAsyncData<A, E, R>, exit: Exit.Exit<A, E>): Effect.Effect<AsyncData.AsyncData<A, E>, never, R>
429
429
  } = dual(
430
430
  2,
431
- <R, E, A>(
432
- ref: RefAsyncData<R, E, A>,
433
- exit: Exit.Exit<E, A>
431
+ <A, E, R>(
432
+ ref: RefAsyncData<A, E, R>,
433
+ exit: Exit.Exit<A, E>
434
434
  ) => RefSubject.set(ref, AsyncData.done(exit))
435
435
  )
436
436
 
@@ -438,12 +438,12 @@ export const done: {
438
438
  * @since 1.20.0
439
439
  * @category Filtered
440
440
  */
441
- export const getFailure = <R, E, A>(ref: RefAsyncData<R, E, A>): RefSubject.Filtered<R, never, E> =>
441
+ export const getFailure = <A, E, R>(ref: RefAsyncData<A, E, R>): RefSubject.Filtered<R, never, E> =>
442
442
  RefSubject.filterMap(ref, AsyncData.getFailure)
443
443
 
444
444
  /**
445
445
  * @since 1.20.0
446
446
  * @category Filtered
447
447
  */
448
- export const getSuccess = <R, E, A>(ref: RefAsyncData<R, E, A>): RefSubject.Filtered<R, never, A> =>
448
+ export const getSuccess = <A, E, R>(ref: RefAsyncData<A, E, R>): RefSubject.Filtered<R, never, A> =>
449
449
  RefSubject.filterMap(ref, AsyncData.getSuccess)
package/src/Emitter.ts CHANGED
@@ -15,11 +15,11 @@ import * as Sink from "./Sink.js"
15
15
  * @since 1.20.0
16
16
  */
17
17
  export interface Emitter<in E, in A> {
18
- readonly succeed: (value: A) => Promise<Exit.Exit<never, unknown>>
19
- readonly failCause: (cause: Cause.Cause<E>) => Promise<Exit.Exit<never, unknown>>
20
- readonly fail: (error: E) => Promise<Exit.Exit<never, unknown>>
21
- readonly die: (error: unknown) => Promise<Exit.Exit<never, unknown>>
22
- readonly end: () => Promise<Exit.Exit<never, unknown>>
18
+ readonly succeed: (value: A) => Promise<Exit.Exit<unknown>>
19
+ readonly failCause: (cause: Cause.Cause<E>) => Promise<Exit.Exit<unknown>>
20
+ readonly fail: (error: E) => Promise<Exit.Exit<unknown>>
21
+ readonly die: (error: unknown) => Promise<Exit.Exit<unknown>>
22
+ readonly end: () => Promise<Exit.Exit<unknown>>
23
23
  }
24
24
 
25
25
  /**
@@ -27,16 +27,16 @@ export interface Emitter<in E, in A> {
27
27
  */
28
28
  export function withEmitter<R, E, A, R2, B>(
29
29
  sink: Sink.Sink<R, E, A>,
30
- f: (emitter: Emitter<E, A>) => Effect.Effect<R2, E, B>
31
- ): Effect.Effect<R | R2 | Scope.Scope, never, void> {
30
+ f: (emitter: Emitter<E, A>) => Effect.Effect<B, E, R2>
31
+ ): Effect.Effect<void, never, R | R2 | Scope.Scope> {
32
32
  return withScope(
33
33
  (scope) =>
34
34
  Sink.withEarlyExit(
35
35
  sink,
36
- (sink): Effect.Effect<R | R2, E, B> => {
36
+ (sink): Effect.Effect<B, E, R | R2> => {
37
37
  return Effect.flatMap(Effect.runtime<R>(), (runtime) => {
38
38
  const runFork = Runtime.runFork(runtime)
39
- const run = <E, A>(effect: Effect.Effect<R, E, A>): Promise<Exit.Exit<E, A>> =>
39
+ const run = <E, A>(effect: Effect.Effect<A, E, R>): Promise<Exit.Exit<A, E>> =>
40
40
  new Promise((resolve) => {
41
41
  const fiber = runFork(effect, { scope })
42
42
  fiber.addObserver(resolve)
package/src/Form.ts CHANGED
@@ -63,9 +63,9 @@ export namespace Form {
63
63
  readonly entries: Entries
64
64
 
65
65
  readonly schema: S.Schema<
66
- R,
66
+ O,
67
67
  I,
68
- O
68
+ R
69
69
  >
70
70
 
71
71
  readonly get: <K extends keyof Entries>(key: K) => Entries[K]
@@ -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
- R2,
142
+ Output<Entries>,
143
143
  Error<Entries>,
144
- Output<Entries>
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
- <R, E>(fx: RefSubject.RefSubject<R, E, O>): Effect.Effect<
165
- R | Scope.Scope,
166
- never,
164
+ <R, E>(
165
+ fx: RefSubject.RefSubject<R, E, O>
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
- <R, E>(fx: Fx<R, E, O> | Effect.Effect<R, E, O>): Effect.Effect<
172
- R | Scope.Scope,
173
+ <R, E>(
174
+ fx: Fx<R, E, O> | 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
- [FormFromIO<R0, E, I, O>] extends [Form<infer R1, infer R2>] ? Form<R1, R2> : never
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
- <R, E>(fx: RefSubject.RefSubject<R, E, I>): Effect.Effect<
187
- R | Scope.Scope,
188
- never,
190
+ <R, E>(
191
+ fx: RefSubject.RefSubject<R, E, I>
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
- <R, E>(fx: Fx<R, E, I> | Effect.Effect<R, E, I>): Effect.Effect<
194
- R | Scope.Scope,
199
+ <R, E>(
200
+ fx: Fx<R, E, I> | 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
- [FormFromIO<R0, E, I, O>] extends [Form<infer R1, infer R2>] ? Form<R1, R2> : never
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<R0, I, O>): MakeForm<R0, I, O> {
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<R0, I, O>): MakeInputForm<R0, I, O> {
279
- return <R, E>(input: RefSubject.RefSubject<R, E, I> | Fx<R, E, I> | Effect.Effect<R, E, I>) =>
286
+ >(schema: S.Schema<O, I, R0>): MakeInputForm<R0, I, O> {
287
+ return <R, E>(input: RefSubject.RefSubject<R, E, I> | Fx<R, E, I> | Effect.Effect<I, E, R>) =>
280
288
  Effect.map(deriveMakeInputEntries(input, schema.ast), (entries) => {
281
289
  const form = (Form as any)(entries)
282
290
 
@@ -310,7 +318,7 @@ class FormImpl<Entries extends Form.AnyEntries> extends FxEffectBase<
310
318
  > implements Form<Form.Context<Entries>, Entries> {
311
319
  readonly [FormTypeId]: FormTypeId = FormTypeId
312
320
  private _fx: Fx<Scope.Scope, ParseError | Form.Error<Entries>, Form.Input<Entries>>
313
- readonly version: Effect.Effect<never, never, number>
321
+ readonly version: Effect.Effect<number>
314
322
 
315
323
  constructor(readonly entries: Entries) {
316
324
  super()
@@ -318,11 +326,7 @@ 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
 
@@ -340,15 +344,11 @@ class FormImpl<Entries extends Form.AnyEntries> extends FxEffectBase<
340
344
 
341
345
  run<R3>(
342
346
  sink: Sink.Sink<R3, Form.Error<Entries> | ParseError, Form.Input<Entries>>
343
- ): Effect.Effect<R3 | Scope.Scope, never, unknown> {
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.Context<Entries>, Form.Input<Entries>, Form.Output<Entries>> {
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<R, E, O> | Fx<R, E, O> | Effect.Effect<R, E, O>,
392
+ input: RefSubject.RefSubject<R, E, O> | Fx<R, E, O> | Effect.Effect<O, E, R>,
393
393
  ast: AST.AST
394
- ): Effect.Effect<R | Scope.Scope, never, DeriveEntries<R, E, I, O>> =>
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": {
@@ -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<R, E, I> | Fx<R, E, I> | Effect.Effect<R, E, I>,
442
+ input: RefSubject.RefSubject<R, E, I> | Fx<R, E, I> | Effect.Effect<I, E, R>,
443
443
  ast: AST.AST
444
- ): Effect.Effect<R | Scope.Scope, never, DeriveEntries<R, E, I, O>> =>
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": {
@@ -489,7 +489,7 @@ const propOf = <R, E, O>(
489
489
  | RefSubject.Computed<R, E, O>
490
490
  | RefSubject.Filtered<R, E, O>
491
491
  | Fx<R, E, O>
492
- | Effect.Effect<R, E, O>,
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])