@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.
Files changed (157) hide show
  1. package/dist/cjs/AsyncData.js.map +1 -1
  2. package/dist/cjs/Form.js.map +1 -1
  3. package/dist/cjs/FormEntry.js.map +1 -1
  4. package/dist/cjs/Fx.js +1 -1
  5. package/dist/cjs/Fx.js.map +1 -1
  6. package/dist/cjs/Idle.js.map +1 -1
  7. package/dist/cjs/Match.js.map +1 -1
  8. package/dist/cjs/Pull.js +5 -3
  9. package/dist/cjs/Pull.js.map +1 -1
  10. package/dist/cjs/RefArray.js.map +1 -1
  11. package/dist/cjs/RefChunk.js.map +1 -1
  12. package/dist/cjs/RefHashSet.js.map +1 -1
  13. package/dist/cjs/RefSubject.js +3 -2
  14. package/dist/cjs/RefSubject.js.map +1 -1
  15. package/dist/cjs/Sink.js.map +1 -1
  16. package/dist/cjs/Subject.js.map +1 -1
  17. package/dist/cjs/Versioned.js.map +1 -1
  18. package/dist/cjs/internal/core.js.map +1 -1
  19. package/dist/cjs/internal/helpers.js.map +1 -1
  20. package/dist/cjs/internal/keyed.js +1 -1
  21. package/dist/cjs/internal/keyed.js.map +1 -1
  22. package/dist/cjs/internal/provide.js.map +1 -1
  23. package/dist/cjs/internal/share.js.map +1 -1
  24. package/dist/cjs/internal/sync-producer.js.map +1 -1
  25. package/dist/dts/AsyncData.d.ts +53 -53
  26. package/dist/dts/AsyncData.d.ts.map +1 -1
  27. package/dist/dts/Emitter.d.ts +7 -7
  28. package/dist/dts/Emitter.d.ts.map +1 -1
  29. package/dist/dts/Form.d.ts +14 -14
  30. package/dist/dts/Form.d.ts.map +1 -1
  31. package/dist/dts/FormEntry.d.ts +11 -11
  32. package/dist/dts/FormEntry.d.ts.map +1 -1
  33. package/dist/dts/Fx.d.ts +417 -417
  34. package/dist/dts/Fx.d.ts.map +1 -1
  35. package/dist/dts/Guard.d.ts +21 -21
  36. package/dist/dts/Guard.d.ts.map +1 -1
  37. package/dist/dts/Idle.d.ts +12 -12
  38. package/dist/dts/Idle.d.ts.map +1 -1
  39. package/dist/dts/Match.d.ts +16 -16
  40. package/dist/dts/Match.d.ts.map +1 -1
  41. package/dist/dts/Pull.d.ts +5 -5
  42. package/dist/dts/Pull.d.ts.map +1 -1
  43. package/dist/dts/Push.d.ts +40 -40
  44. package/dist/dts/Push.d.ts.map +1 -1
  45. package/dist/dts/RefArray.d.ts +59 -59
  46. package/dist/dts/RefArray.d.ts.map +1 -1
  47. package/dist/dts/RefChunk.d.ts +45 -45
  48. package/dist/dts/RefChunk.d.ts.map +1 -1
  49. package/dist/dts/RefHashMap.d.ts +35 -35
  50. package/dist/dts/RefHashMap.d.ts.map +1 -1
  51. package/dist/dts/RefHashSet.d.ts +17 -17
  52. package/dist/dts/RefHashSet.d.ts.map +1 -1
  53. package/dist/dts/RefSubject.d.ts +136 -136
  54. package/dist/dts/RefSubject.d.ts.map +1 -1
  55. package/dist/dts/Sink.d.ts +63 -63
  56. package/dist/dts/Sink.d.ts.map +1 -1
  57. package/dist/dts/Stream.d.ts +11 -11
  58. package/dist/dts/Stream.d.ts.map +1 -1
  59. package/dist/dts/Subject.d.ts +13 -13
  60. package/dist/dts/Subject.d.ts.map +1 -1
  61. package/dist/dts/Typeclass.d.ts +1 -1
  62. package/dist/dts/Typeclass.d.ts.map +1 -1
  63. package/dist/dts/Versioned.d.ts +33 -33
  64. package/dist/dts/Versioned.d.ts.map +1 -1
  65. package/dist/dts/index.d.ts +1 -1
  66. package/dist/dts/internal/DeferredRef.d.ts +8 -8
  67. package/dist/dts/internal/DeferredRef.d.ts.map +1 -1
  68. package/dist/dts/internal/core.d.ts +191 -191
  69. package/dist/dts/internal/core.d.ts.map +1 -1
  70. package/dist/dts/internal/effect-loop-operator.d.ts +6 -6
  71. package/dist/dts/internal/effect-loop-operator.d.ts.map +1 -1
  72. package/dist/dts/internal/effect-operator.d.ts +16 -16
  73. package/dist/dts/internal/effect-operator.d.ts.map +1 -1
  74. package/dist/dts/internal/effect-producer.d.ts +13 -13
  75. package/dist/dts/internal/effect-producer.d.ts.map +1 -1
  76. package/dist/dts/internal/helpers.d.ts +26 -26
  77. package/dist/dts/internal/helpers.d.ts.map +1 -1
  78. package/dist/dts/internal/keyed.d.ts +1 -1
  79. package/dist/dts/internal/keyed.d.ts.map +1 -1
  80. package/dist/dts/internal/loop-operator.d.ts +2 -2
  81. package/dist/dts/internal/loop-operator.d.ts.map +1 -1
  82. package/dist/dts/internal/operator.d.ts +2 -2
  83. package/dist/dts/internal/operator.d.ts.map +1 -1
  84. package/dist/dts/internal/protos.d.ts +12 -12
  85. package/dist/dts/internal/protos.d.ts.map +1 -1
  86. package/dist/dts/internal/provide.d.ts +15 -15
  87. package/dist/dts/internal/provide.d.ts.map +1 -1
  88. package/dist/dts/internal/share.d.ts +11 -11
  89. package/dist/dts/internal/share.d.ts.map +1 -1
  90. package/dist/dts/internal/sync-operator.d.ts +2 -2
  91. package/dist/dts/internal/sync-operator.d.ts.map +1 -1
  92. package/dist/dts/internal/sync-producer.d.ts +6 -6
  93. package/dist/dts/internal/sync-producer.d.ts.map +1 -1
  94. package/dist/dts/internal/withKey.d.ts +1 -1
  95. package/dist/dts/internal/withKey.d.ts.map +1 -1
  96. package/dist/esm/AsyncData.js.map +1 -1
  97. package/dist/esm/Form.js.map +1 -1
  98. package/dist/esm/FormEntry.js.map +1 -1
  99. package/dist/esm/Fx.js +1 -1
  100. package/dist/esm/Fx.js.map +1 -1
  101. package/dist/esm/Idle.js.map +1 -1
  102. package/dist/esm/Match.js.map +1 -1
  103. package/dist/esm/Pull.js +3 -3
  104. package/dist/esm/Pull.js.map +1 -1
  105. package/dist/esm/RefArray.js.map +1 -1
  106. package/dist/esm/RefChunk.js.map +1 -1
  107. package/dist/esm/RefHashSet.js.map +1 -1
  108. package/dist/esm/RefSubject.js +3 -1
  109. package/dist/esm/RefSubject.js.map +1 -1
  110. package/dist/esm/Sink.js.map +1 -1
  111. package/dist/esm/Subject.js.map +1 -1
  112. package/dist/esm/Versioned.js.map +1 -1
  113. package/dist/esm/index.js +1 -1
  114. package/dist/esm/internal/core.js.map +1 -1
  115. package/dist/esm/internal/helpers.js.map +1 -1
  116. package/dist/esm/internal/keyed.js +1 -1
  117. package/dist/esm/internal/keyed.js.map +1 -1
  118. package/dist/esm/internal/provide.js.map +1 -1
  119. package/dist/esm/internal/share.js.map +1 -1
  120. package/dist/esm/internal/sync-producer.js.map +1 -1
  121. package/package.json +6 -6
  122. package/src/AsyncData.ts +142 -144
  123. package/src/Emitter.ts +13 -13
  124. package/src/Form.ts +55 -55
  125. package/src/FormEntry.ts +39 -39
  126. package/src/Fx.ts +788 -789
  127. package/src/Guard.ts +43 -43
  128. package/src/Idle.ts +26 -26
  129. package/src/Match.ts +60 -61
  130. package/src/Pull.ts +42 -43
  131. package/src/Push.ts +195 -195
  132. package/src/RefArray.ts +121 -119
  133. package/src/RefChunk.ts +98 -97
  134. package/src/RefHashMap.ts +79 -79
  135. package/src/RefHashSet.ts +40 -39
  136. package/src/RefSubject.ts +574 -565
  137. package/src/Sink.ts +303 -303
  138. package/src/Stream.ts +27 -27
  139. package/src/Subject.ts +48 -46
  140. package/src/Typeclass.ts +2 -2
  141. package/src/Versioned.ts +97 -97
  142. package/src/index.ts +1 -1
  143. package/src/internal/DeferredRef.ts +7 -7
  144. package/src/internal/core.ts +768 -781
  145. package/src/internal/effect-loop-operator.ts +7 -7
  146. package/src/internal/effect-operator.ts +23 -23
  147. package/src/internal/effect-producer.ts +38 -38
  148. package/src/internal/helpers.ts +51 -51
  149. package/src/internal/keyed.ts +21 -21
  150. package/src/internal/loop-operator.ts +2 -2
  151. package/src/internal/operator.ts +2 -2
  152. package/src/internal/protos.ts +15 -15
  153. package/src/internal/provide.ts +27 -27
  154. package/src/internal/share.ts +25 -25
  155. package/src/internal/sync-operator.ts +4 -4
  156. package/src/internal/sync-producer.ts +15 -15
  157. package/src/internal/withKey.ts +13 -13
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<AsyncData.AsyncData<A, E>, never, R> {
24
24
  return Fx.make((sink) =>
25
25
  Effect.flatMap(
26
26
  Effect.zipRight(sink.onSuccess(AsyncData.loading()), Effect.exit(effect)),
@@ -32,23 +32,25 @@ 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 = never, R = never>
36
+ extends RefSubject.RefSubject<AsyncData.AsyncData<A, E>, never, R>
37
+ {}
36
38
 
37
39
  /**
38
40
  * @since 1.20.0
39
41
  */
40
42
  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>>
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>>
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>> {
43
+ <R2, A, E>(
44
+ effect: Effect.Effect<A, E, R2>
45
+ ): <R>(ref: RefAsyncData<A, E, R>) => Effect.Effect<AsyncData.AsyncData<A, E>, never, R | R2>
46
+ <A, E, R, R2>(
47
+ ref: RefAsyncData<A, E, R>,
48
+ effect: Effect.Effect<A, E, R2>
49
+ ): Effect.Effect<AsyncData.AsyncData<A, E>, never, R | R2>
50
+ } = dual(2, function runAsyncData<A, E, R, R2>(
51
+ ref: RefAsyncData<A, E, R>,
52
+ effect: Effect.Effect<A, E, R2>
53
+ ): Effect.Effect<AsyncData.AsyncData<A, E>, never, R | R2> {
52
54
  return ref.runUpdates(({ get, set }) =>
53
55
  Effect.uninterruptibleMask((restore) =>
54
56
  Effect.flatMap(
@@ -66,52 +68,52 @@ export const runAsyncData: {
66
68
  * @since 1.20.0
67
69
  */
68
70
  export const matchAsyncData: {
69
- <E1, A, R2, E2, B, R3, E3, C, R4, E4, D, R5, E5, F>(
71
+ <E1, A, B, E2, R2, C, E3, R3, D, E4, R4, F, E5, R5>(
70
72
  matchers: {
71
- readonly NoData: Fx.Fx<R2, E2, B>
72
- readonly Loading: (progress: RefSubject.Filtered<never, never, Progress>) => Fx.Fx<R3, E3, C>
73
- readonly Failure: (error: RefSubject.Computed<never, never, E1>) => Fx.Fx<R4, E4, D>
74
- readonly Success: (value: RefSubject.RefSubject<never, never, A>) => Fx.Fx<R5, E5, F>
73
+ readonly NoData: Fx.Fx<B, E2, R2>
74
+ readonly Loading: (progress: RefSubject.Filtered<Progress>) => Fx.Fx<C, E3, R3>
75
+ readonly Failure: (error: RefSubject.Computed<E1>) => Fx.Fx<D, E4, R4>
76
+ readonly Success: (value: RefSubject.RefSubject<A>) => Fx.Fx<F, E5, R5>
75
77
  }
76
- ): <R, E>(
77
- fx: Fx.Fx<R, E, AsyncData.AsyncData<E1, A>>
78
- ) => Fx.Fx<R | R2 | R3 | R4 | R5, E | E2 | E3 | E4 | E5, B | C | D | F>
78
+ ): <E, R>(
79
+ fx: Fx.Fx<AsyncData.AsyncData<A, E1>, E, R>
80
+ ) => Fx.Fx<B | C | D | F, E | E2 | E3 | E4 | E5, R | R2 | R3 | R4 | R5>
79
81
 
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: {
81
- readonly NoData: Fx.Fx<R2, E2, B>
82
- readonly Loading: (progress: RefSubject.Filtered<never, never, Progress>) => Fx.Fx<R3, E3, C>
83
- readonly Failure: (error: RefSubject.Computed<never, never, E1>) => Fx.Fx<R4, E4, D>
84
- readonly Success: (value: RefSubject.RefSubject<never, never, A>) => Fx.Fx<R5, E5, F>
85
- }): Fx.Fx<R | R2 | R3 | R4 | R5, E | E2 | E3 | E4 | E5, B | C | D | F>
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>>,
82
+ <R, E, E1, A, B, E2, R2, C, E3, R3, D, E4, R4, F, E5, R5>(fx: Fx.Fx<AsyncData.AsyncData<A, E1>, E, R>, matchers: {
83
+ readonly NoData: Fx.Fx<B, E2, R2>
84
+ readonly Loading: (progress: RefSubject.Filtered<Progress>) => Fx.Fx<C, E3, R3>
85
+ readonly Failure: (error: RefSubject.Computed<E1>) => Fx.Fx<D, E4, R4>
86
+ readonly Success: (value: RefSubject.RefSubject<A>) => Fx.Fx<F, E5, R5>
87
+ }): Fx.Fx<B | C | D | F, E | E2 | E3 | E4 | E5, R | R2 | R3 | R4 | R5>
88
+ } = dual(2, function matchAsyncData<R, E, E1, A, B, E2, R2, C, E3, R3, D, E4, R4, F, E5, R5>(
89
+ fx: Fx.Fx<AsyncData.AsyncData<A, E1>, E, R>,
88
90
  matchers: {
89
- readonly NoData: Fx.Fx<R2, E2, B>
90
- readonly Loading: (progress: RefSubject.Filtered<never, never, Progress>) => Fx.Fx<R3, E3, C>
91
+ readonly NoData: Fx.Fx<B, E2, R2>
92
+ readonly Loading: (progress: RefSubject.Filtered<Progress>) => Fx.Fx<C, E3, R3>
91
93
  readonly Failure: (
92
- error: RefSubject.Computed<never, never, E1>,
93
- failure: RefSubject.RefSubject<never, never, AsyncData.Failure<E1>>
94
- ) => Fx.Fx<R4, E4, D>
94
+ error: RefSubject.Computed<E1>,
95
+ failure: RefSubject.RefSubject<AsyncData.Failure<E1>>
96
+ ) => Fx.Fx<D, E4, R4>
95
97
  readonly Success: (
96
- value: RefSubject.RefSubject<never, never, A>,
97
- data: RefSubject.RefSubject<never, never, AsyncData.Success<A> | AsyncData.Optimistic<E1, A>>
98
- ) => Fx.Fx<R5, E5, F>
98
+ value: RefSubject.RefSubject<A>,
99
+ data: RefSubject.RefSubject<AsyncData.Success<A> | AsyncData.Optimistic<A, E1>>
100
+ ) => Fx.Fx<F, E5, R5>
99
101
  }
100
- ): Fx.Fx<R | R2 | R3 | R4 | R5, E | E2 | E3 | E4 | E5, B | C | D | F> {
102
+ ): Fx.Fx<B | C | D | F, E | E2 | E3 | E4 | E5, R | R2 | R3 | R4 | R5> {
101
103
  return Fx.withKey(
102
104
  fx,
103
105
  {
104
- getKey: (a: AsyncData.AsyncData<E1, A>) => a._tag === "Optimistic" ? "Success" : a._tag,
105
- onValue: (ref, key): Fx.Fx<R | R2 | R3 | R4 | R5, E | E2 | E3 | E4 | E5, B | C | D | F> => {
106
+ getKey: (a: AsyncData.AsyncData<A, E1>) => a._tag === "Optimistic" ? "Success" : a._tag,
107
+ onValue: (ref, key): Fx.Fx<B | C | D | F, E | E2 | E3 | E4 | E5, R | R2 | R3 | R4 | R5> => {
106
108
  switch (key) {
107
109
  case "NoData":
108
110
  return matchers.NoData
109
111
  case "Loading":
110
112
  return matchers.Loading(
111
- RefSubject.filterMap(ref as RefSubject.RefSubject<never, never, AsyncData.Loading>, (l) => l.progress)
113
+ RefSubject.filterMap(ref as RefSubject.RefSubject<AsyncData.Loading>, (l) => l.progress)
112
114
  )
113
115
  case "Failure": {
114
- const failure = ref as RefSubject.RefSubject<never, never, AsyncData.Failure<E1>>
116
+ const failure = ref as RefSubject.RefSubject<AsyncData.Failure<E1>>
115
117
  return matchers.Failure(
116
118
  RefSubject.mapEffect(
117
119
  failure,
@@ -125,11 +127,7 @@ export const matchAsyncData: {
125
127
  )
126
128
  }
127
129
  case "Success": {
128
- const success = ref as RefSubject.RefSubject<
129
- never,
130
- never,
131
- AsyncData.Success<A> | AsyncData.Optimistic<E1, A>
132
- >
130
+ const success = ref as RefSubject.RefSubject<AsyncData.Success<A> | AsyncData.Optimistic<A, E1>>
133
131
 
134
132
  return matchers.Success(
135
133
  RefSubject.transformOrFail(
@@ -138,7 +136,7 @@ export const matchAsyncData: {
138
136
  (value) =>
139
137
  Effect.map(
140
138
  success,
141
- (d) => AsyncData.map(d, () => value) as AsyncData.Success<A> | AsyncData.Optimistic<E1, A>
139
+ (d) => AsyncData.map(d, () => value) as AsyncData.Success<A> | AsyncData.Optimistic<A, E1>
142
140
  )
143
141
  ),
144
142
  success
@@ -154,43 +152,43 @@ export const matchAsyncData: {
154
152
  * @since 1.20.0
155
153
  */
156
154
  export const matchAsyncDataArray: {
157
- <E1, A, K extends PropertyKey, R2, E2, B, R3, E3, C, R4, E4, D, R5, E5, F>(
155
+ <E1, A, K extends PropertyKey, B, E2, R2, C, E3, R3, D, E4, R4, F, E5, R5>(
158
156
  getKey: (a: A) => K,
159
157
  matchers: {
160
- readonly NoData: Fx.Fx<R2, E2, B>
161
- readonly Loading: (progress: RefSubject.Filtered<never, never, Progress>) => Fx.Fx<R3, E3, C>
162
- readonly Failure: (error: RefSubject.Computed<never, never, E1>) => Fx.Fx<R4, E4, D>
163
- readonly Success: (value: RefSubject.RefSubject<never, never, A>, key: K) => Fx.Fx<R5, E5, F>
158
+ readonly NoData: Fx.Fx<B, E2, R2>
159
+ readonly Loading: (progress: RefSubject.Filtered<Progress>) => Fx.Fx<C, E3, R3>
160
+ readonly Failure: (error: RefSubject.Computed<E1>) => Fx.Fx<D, E4, R4>
161
+ readonly Success: (value: RefSubject.RefSubject<A>, key: K) => Fx.Fx<F, E5, R5>
164
162
  }
165
- ): <R, E>(
166
- fx: Fx.Fx<R, E, AsyncData.AsyncData<E1, ReadonlyArray<A>>>
167
- ) => Fx.Fx<Scope.Scope | R | R2 | R3 | R4 | R5, E | E2 | E3 | E4 | E5, B | C | D | ReadonlyArray<F>>
163
+ ): <E, R>(
164
+ fx: Fx.Fx<AsyncData.AsyncData<ReadonlyArray<A>, E1>, E, R>
165
+ ) => Fx.Fx<B | C | D | ReadonlyArray<F>, E | E2 | E3 | E4 | E5, Scope.Scope | R | R2 | R3 | R4 | R5>
168
166
 
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>>>,
167
+ <R, E, E1, A, K extends PropertyKey, B, E2, R2, C, E3, R3, D, E4, R4, F, E5, R5>(
168
+ fx: Fx.Fx<AsyncData.AsyncData<ReadonlyArray<A>, E1>, E, R>,
171
169
  getKey: (a: A) => K,
172
170
  matchers: {
173
- readonly NoData: Fx.Fx<R2, E2, B>
174
- readonly Loading: (progress: RefSubject.Filtered<never, never, Progress>) => Fx.Fx<R3, E3, C>
175
- readonly Failure: (error: RefSubject.Computed<never, never, E1>) => Fx.Fx<R4, E4, D>
176
- readonly Success: (value: RefSubject.RefSubject<never, never, A>, key: K) => Fx.Fx<R5, E5, F>
171
+ readonly NoData: Fx.Fx<B, E2, R2>
172
+ readonly Loading: (progress: RefSubject.Filtered<Progress>) => Fx.Fx<C, E3, R3>
173
+ readonly Failure: (error: RefSubject.Computed<E1>) => Fx.Fx<D, E4, R4>
174
+ readonly Success: (value: RefSubject.RefSubject<A>, key: K) => Fx.Fx<F, E5, R5>
177
175
  }
178
- ): Fx.Fx<Scope.Scope | R | R2 | R3 | R4 | R5, E | E2 | E3 | E4 | E5, B | C | D | ReadonlyArray<F>>
176
+ ): Fx.Fx<B | C | D | ReadonlyArray<F>, E | E2 | E3 | E4 | E5, Scope.Scope | R | R2 | R3 | R4 | R5>
179
177
  } = dual(
180
178
  3,
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>>>,
179
+ function matchAsyncDataArray<R, E, E1, A, K extends PropertyKey, B, E2, R2, C, E3, R3, D, E4, R4, F, E5, R5>(
180
+ fx: Fx.Fx<AsyncData.AsyncData<ReadonlyArray<A>, E1>, E, R>,
183
181
  getKey: (a: A) => K,
184
182
  matchers: {
185
- readonly NoData: Fx.Fx<R2, E2, B>
186
- readonly Loading: (progress: RefSubject.Filtered<never, never, Progress>) => Fx.Fx<R3, E3, C>
183
+ readonly NoData: Fx.Fx<B, E2, R2>
184
+ readonly Loading: (progress: RefSubject.Filtered<Progress>) => Fx.Fx<C, E3, R3>
187
185
  readonly Failure: (
188
- error: RefSubject.Computed<never, never, E1>
189
- ) => Fx.Fx<R4, E4, D>
186
+ error: RefSubject.Computed<E1>
187
+ ) => Fx.Fx<D, E4, R4>
190
188
  readonly Success: (
191
- value: RefSubject.RefSubject<never, never, A>,
189
+ value: RefSubject.RefSubject<A>,
192
190
  key: K
193
- ) => Fx.Fx<R5, E5, F>
191
+ ) => Fx.Fx<F, E5, R5>
194
192
  }
195
193
  ) {
196
194
  return matchAsyncData(fx, {
@@ -206,17 +204,17 @@ export const matchAsyncDataArray: {
206
204
  * @since 1.20.0
207
205
  */
208
206
  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>>
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>>
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>> {
207
+ <R2, A, E>(
208
+ effect: Effect.Effect<A, E, R2>
209
+ ): <R>(ref: RefAsyncData<A, E, R>) => Effect.Effect<AsyncData.AsyncData<A, E>, never, R | R2>
210
+ <A, E, R, R2>(
211
+ ref: RefAsyncData<A, E, R>,
212
+ effect: Effect.Effect<A, E, R2>
213
+ ): Effect.Effect<AsyncData.AsyncData<A, E>, never, R | R2>
214
+ } = dual(2, function runIfNoData<A, E, R, R2>(
215
+ ref: RefAsyncData<A, E, R>,
216
+ effect: Effect.Effect<A, E, R2>
217
+ ): Effect.Effect<AsyncData.AsyncData<A, E>, never, R | R2> {
220
218
  return Effect.flatMap(
221
219
  ref,
222
220
  (current) => AsyncData.isNoData(current) ? runAsyncData(ref, effect) : Effect.succeed(current)
@@ -227,21 +225,21 @@ export const runIfNoData: {
227
225
  * @since 1.20.0
228
226
  */
229
227
  export const runIfExpired: {
230
- <R2, E, A>(
231
- effect: Effect.Effect<R2, E, A>,
228
+ <R2, A, E>(
229
+ effect: Effect.Effect<A, E, R2>,
232
230
  options: { readonly ttl: Duration.DurationInput; readonly now?: number }
233
- ): <R>(ref: RefAsyncData<R, E, A>) => Effect.Effect<R | R2, never, AsyncData.AsyncData<E, A>>
231
+ ): <R>(ref: RefAsyncData<A, E, R>) => Effect.Effect<AsyncData.AsyncData<A, E>, never, R | R2>
234
232
 
235
- <R, E, A, R2>(
236
- ref: RefAsyncData<R, E, A>,
237
- effect: Effect.Effect<R2, E, A>,
233
+ <A, E, R, R2>(
234
+ ref: RefAsyncData<A, E, R>,
235
+ effect: Effect.Effect<A, E, R2>,
238
236
  options: { readonly ttl: Duration.DurationInput; readonly now?: number }
239
- ): Effect.Effect<R | R2, never, AsyncData.AsyncData<E, A>>
240
- } = dual(3, function runIfExpired<R, E, A, R2>(
241
- ref: RefAsyncData<R, E, A>,
242
- effect: Effect.Effect<R2, E, A>,
237
+ ): Effect.Effect<AsyncData.AsyncData<A, E>, never, R | R2>
238
+ } = dual(3, function runIfExpired<A, E, R, R2>(
239
+ ref: RefAsyncData<A, E, R>,
240
+ effect: Effect.Effect<A, E, R2>,
243
241
  { now, ttl }: { readonly ttl: Duration.DurationInput; readonly now?: number }
244
- ): Effect.Effect<R | R2, never, AsyncData.AsyncData<E, A>> {
242
+ ): Effect.Effect<AsyncData.AsyncData<A, E>, never, R | R2> {
245
243
  return Effect.flatMap(
246
244
  ref,
247
245
  (current) => AsyncData.isExpired(current, ttl, now) ? runAsyncData(ref, effect) : Effect.succeed(current)
@@ -253,9 +251,9 @@ export const runIfExpired: {
253
251
  * @since 1.20.0
254
252
  * @category updates
255
253
  */
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>> =>
254
+ export const awaitLoading = <A, E, R>(
255
+ data: RefAsyncData<A, E, R>
256
+ ): Effect.Effect<Exclude<AsyncData.AsyncData<A, E>, AsyncData.Loading>, never, R | Scope.Scope> =>
259
257
  data.pipe(
260
258
  Fx.dropWhile(AsyncData.isLoading),
261
259
  Fx.take(1),
@@ -268,9 +266,9 @@ export const awaitLoading = <R, E, A>(
268
266
  * @since 1.20.0
269
267
  * @category updates
270
268
  */
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>> =>
269
+ export const awaitLoadingOrRefreshing = <A, E, R>(
270
+ data: RefAsyncData<A, E, R>
271
+ ): Effect.Effect<Exclude<AsyncData.AsyncData<A, E>, AsyncData.Loading>, never, R | Scope.Scope> =>
274
272
  data.pipe(
275
273
  Fx.dropWhile(AsyncData.isLoadingOrRefreshing),
276
274
  Fx.take(1),
@@ -283,9 +281,9 @@ export const awaitLoadingOrRefreshing = <R, E, A>(
283
281
  * @since 1.20.0
284
282
  * @category updates
285
283
  */
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>) =>
284
+ export const startLoading: <A, E, R>(
285
+ ref: RefAsyncData<A, E, R>
286
+ ) => Effect.Effect<AsyncData.AsyncData<A, E>, never, R> = <A, E, R>(ref: RefAsyncData<A, E, R>) =>
289
287
  RefSubject.update(ref, AsyncData.startLoading)
290
288
 
291
289
  /**
@@ -293,9 +291,9 @@ export const startLoading: <R, E, A>(
293
291
  * @since 1.20.0
294
292
  * @category updates
295
293
  */
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>) =>
294
+ export const stopLoading: <A, E, R>(
295
+ ref: RefAsyncData<A, E, R>
296
+ ) => Effect.Effect<AsyncData.AsyncData<A, E>, never, R> = <A, E, R>(ref: RefAsyncData<A, E, R>) =>
299
297
  RefSubject.update(ref, AsyncData.stopLoading)
300
298
 
301
299
  /**
@@ -303,7 +301,7 @@ export const stopLoading: <R, E, A>(
303
301
  * @since 1.20.0
304
302
  * @category conversions
305
303
  */
306
- export const asSink = <R, E, A>(ref: RefAsyncData<R, E, A>): Sink.Sink<R, E, A> =>
304
+ export const asSink = <A, E, R>(ref: RefAsyncData<A, E, R>): Sink.Sink<A, E, R> =>
307
305
  Sink.make(
308
306
  (cause) => RefSubject.set(ref, AsyncData.failCause(cause)),
309
307
  (a) => RefSubject.set(ref, AsyncData.success(a))
@@ -313,19 +311,19 @@ export const asSink = <R, E, A>(ref: RefAsyncData<R, E, A>): Sink.Sink<R, E, A>
313
311
  * Map the input value using an Effect
314
312
  * @since 1.20.0
315
313
  */
316
- export const mapInputEffect = <R, E, A, R2, B>(
317
- ref: RefAsyncData<R, E, A>,
318
- f: (b: B) => Effect.Effect<R2, E, A>
319
- ): Sink.Sink<R | R2, E, B> => Sink.mapEffect(asSink(ref), f)
314
+ export const mapInputEffect = <A, E, R, R2, B>(
315
+ ref: RefAsyncData<A, E, R>,
316
+ f: (b: B) => Effect.Effect<A, E, R2>
317
+ ): Sink.Sink<B, E, R | R2> => Sink.mapEffect(asSink(ref), f)
320
318
 
321
319
  /**
322
320
  * Map the input value
323
321
  * @since 1.20.0
324
322
  */
325
- export const mapInput = <R, E, A, B>(
326
- ref: RefAsyncData<R, E, A>,
323
+ export const mapInput = <A, E, R, B>(
324
+ ref: RefAsyncData<A, E, R>,
327
325
  f: (b: B) => A
328
- ): Sink.Sink<R, E, B> => Sink.map(asSink(ref), f)
326
+ ): Sink.Sink<B, E, R> => Sink.map(asSink(ref), f)
329
327
 
330
328
  const isRefFirst = (args: IArguments) => args.length === 3 || RefSubjectTypeId in args[0]
331
329
 
@@ -337,15 +335,15 @@ export const failCause: {
337
335
  <E>(
338
336
  cause: Cause.Cause<E>,
339
337
  options?: AsyncData.OptionalPartial<AsyncData.FailureOptions>
340
- ): <R, A>(ref: RefAsyncData<R, E, A>) => Effect.Effect<R, never, AsyncData.AsyncData<E, A>>
338
+ ): <R, A>(ref: RefAsyncData<A, E, R>) => Effect.Effect<AsyncData.AsyncData<A, E>, never, R>
341
339
 
342
- <R, E, A>(
343
- ref: RefAsyncData<R, E, A>,
340
+ <A, E, R>(
341
+ ref: RefAsyncData<A, E, R>,
344
342
  cause: Cause.Cause<E>,
345
343
  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>,
344
+ ): Effect.Effect<AsyncData.AsyncData<A, E>, never, R>
345
+ } = dual(isRefFirst, <A, E, R>(
346
+ ref: RefAsyncData<A, E, R>,
349
347
  cause: Cause.Cause<E>,
350
348
  options?: AsyncData.OptionalPartial<AsyncData.FailureOptions>
351
349
  ) => RefSubject.set(ref, AsyncData.failCause(cause, options)))
@@ -358,15 +356,15 @@ export const fail: {
358
356
  <E>(
359
357
  error: E,
360
358
  options?: AsyncData.OptionalPartial<AsyncData.FailureOptions>
361
- ): <R, A>(ref: RefAsyncData<R, E, A>) => Effect.Effect<R, never, AsyncData.AsyncData<E, A>>
359
+ ): <R, A>(ref: RefAsyncData<A, E, R>) => Effect.Effect<AsyncData.AsyncData<A, E>, never, R>
362
360
 
363
- <R, E, A>(
364
- ref: RefAsyncData<R, E, A>,
361
+ <A, E, R>(
362
+ ref: RefAsyncData<A, E, R>,
365
363
  error: E,
366
364
  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>,
365
+ ): Effect.Effect<AsyncData.AsyncData<A, E>, never, R>
366
+ } = dual(isRefFirst, <A, E, R>(
367
+ ref: RefAsyncData<A, E, R>,
370
368
  error: E,
371
369
  options?: AsyncData.OptionalPartial<AsyncData.FailureOptions>
372
370
  ) => RefSubject.set(ref, AsyncData.fail(error, options)))
@@ -379,17 +377,17 @@ export const succeed: {
379
377
  <A>(
380
378
  value: A,
381
379
  options?: AsyncData.OptionalPartial<AsyncData.SuccessOptions>
382
- ): <R, E>(ref: RefAsyncData<R, E, A>) => Effect.Effect<R, never, AsyncData.AsyncData<E, A>>
380
+ ): <E, R>(ref: RefAsyncData<A, E, R>) => Effect.Effect<AsyncData.AsyncData<A, E>, never, R>
383
381
 
384
- <R, E, A>(
385
- ref: RefAsyncData<R, E, A>,
382
+ <A, E, R>(
383
+ ref: RefAsyncData<A, E, R>,
386
384
  value: A,
387
385
  options?: AsyncData.OptionalPartial<AsyncData.SuccessOptions>
388
- ): Effect.Effect<R, never, AsyncData.AsyncData<E, A>>
386
+ ): Effect.Effect<AsyncData.AsyncData<A, E>, never, R>
389
387
  } = dual(
390
388
  isRefFirst,
391
- <R, E, A>(
392
- ref: RefAsyncData<R, E, A>,
389
+ <A, E, R>(
390
+ ref: RefAsyncData<A, E, R>,
393
391
  value: A,
394
392
  options?: AsyncData.OptionalPartial<AsyncData.SuccessOptions>
395
393
  ) => RefSubject.set(ref, AsyncData.success(value, options))
@@ -403,17 +401,17 @@ export const optimistic: {
403
401
  <A>(
404
402
  value: A,
405
403
  options?: AsyncData.OptionalPartial<AsyncData.OptimisticOptions>
406
- ): <R, E>(ref: RefAsyncData<R, E, A>) => Effect.Effect<R, never, AsyncData.AsyncData<E, A>>
404
+ ): <E, R>(ref: RefAsyncData<A, E, R>) => Effect.Effect<AsyncData.AsyncData<A, E>, never, R>
407
405
 
408
- <R, E, A>(
409
- ref: RefAsyncData<R, E, A>,
406
+ <A, E, R>(
407
+ ref: RefAsyncData<A, E, R>,
410
408
  value: A,
411
409
  options?: AsyncData.OptionalPartial<AsyncData.OptimisticOptions>
412
- ): Effect.Effect<R, never, AsyncData.AsyncData<E, A>>
410
+ ): Effect.Effect<AsyncData.AsyncData<A, E>, never, R>
413
411
  } = dual(
414
412
  isRefFirst,
415
- <R, E, A>(
416
- ref: RefAsyncData<R, E, A>,
413
+ <A, E, R>(
414
+ ref: RefAsyncData<A, E, R>,
417
415
  value: A,
418
416
  options?: AsyncData.OptionalPartial<AsyncData.OptimisticOptions>
419
417
  ) => RefSubject.update(ref, AsyncData.optimistic(value, options))
@@ -424,13 +422,13 @@ export const optimistic: {
424
422
  * @since 1.20.0
425
423
  */
426
424
  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>>
425
+ <E, A>(exit: Exit.Exit<A, E>): <R>(ref: RefAsyncData<A, E, R>) => Effect.Effect<AsyncData.AsyncData<A, E>, never, R>
426
+ <A, E, R>(ref: RefAsyncData<A, E, R>, exit: Exit.Exit<A, E>): Effect.Effect<AsyncData.AsyncData<A, E>, never, R>
429
427
  } = dual(
430
428
  2,
431
- <R, E, A>(
432
- ref: RefAsyncData<R, E, A>,
433
- exit: Exit.Exit<E, A>
429
+ <A, E, R>(
430
+ ref: RefAsyncData<A, E, R>,
431
+ exit: Exit.Exit<A, E>
434
432
  ) => RefSubject.set(ref, AsyncData.done(exit))
435
433
  )
436
434
 
@@ -438,12 +436,12 @@ export const done: {
438
436
  * @since 1.20.0
439
437
  * @category Filtered
440
438
  */
441
- export const getFailure = <R, E, A>(ref: RefAsyncData<R, E, A>): RefSubject.Filtered<R, never, E> =>
439
+ export const getFailure = <A, E, R>(ref: RefAsyncData<A, E, R>): RefSubject.Filtered<E, never, R> =>
442
440
  RefSubject.filterMap(ref, AsyncData.getFailure)
443
441
 
444
442
  /**
445
443
  * @since 1.20.0
446
444
  * @category Filtered
447
445
  */
448
- export const getSuccess = <R, E, A>(ref: RefAsyncData<R, E, A>): RefSubject.Filtered<R, never, A> =>
446
+ export const getSuccess = <A, E, R>(ref: RefAsyncData<A, E, R>): RefSubject.Filtered<A, never, R> =>
449
447
  RefSubject.filterMap(ref, AsyncData.getSuccess)
package/src/Emitter.ts CHANGED
@@ -14,34 +14,34 @@ import * as Sink from "./Sink.js"
14
14
  /**
15
15
  * @since 1.20.0
16
16
  */
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>>
17
+ export interface Emitter<in A, in E> {
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
  /**
26
26
  * @since 1.20.0
27
27
  */
28
- export function withEmitter<R, E, A, R2, B>(
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> {
28
+ export function withEmitter<A, E, R, R2, B>(
29
+ sink: Sink.Sink<A, E, R>,
30
+ f: (emitter: Emitter<A, E>) => 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)
43
43
  })
44
- const emitter: Emitter<E, A> = {
44
+ const emitter: Emitter<A, E> = {
45
45
  succeed: (value) => run(sink.onSuccess(value)),
46
46
  failCause: (cause) => run(sink.onFailure(cause)),
47
47
  fail: (error) => run(sink.onFailure(Cause.fail(error))),