@typed/fx 1.27.2 → 1.27.4

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 (65) hide show
  1. package/dist/cjs/AsyncData.js +6 -1
  2. package/dist/cjs/AsyncData.js.map +1 -1
  3. package/dist/cjs/Emitter.js.map +1 -1
  4. package/dist/cjs/Form.js.map +1 -1
  5. package/dist/cjs/FormEntry.js.map +1 -1
  6. package/dist/cjs/Fx.js +7 -2
  7. package/dist/cjs/Fx.js.map +1 -1
  8. package/dist/cjs/Idle.js.map +1 -1
  9. package/dist/cjs/Match.js.map +1 -1
  10. package/dist/cjs/Pull.js.map +1 -1
  11. package/dist/cjs/Push.js.map +1 -1
  12. package/dist/cjs/RefArray.js.map +1 -1
  13. package/dist/cjs/RefChunk.js.map +1 -1
  14. package/dist/cjs/RefHashMap.js.map +1 -1
  15. package/dist/cjs/RefHashSet.js.map +1 -1
  16. package/dist/cjs/RefSubject.js +8 -8
  17. package/dist/cjs/RefSubject.js.map +1 -1
  18. package/dist/cjs/Sink.js.map +1 -1
  19. package/dist/cjs/Stream.js.map +1 -1
  20. package/dist/cjs/Subject.js +26 -19
  21. package/dist/cjs/Subject.js.map +1 -1
  22. package/dist/cjs/TypeId.js.map +1 -1
  23. package/dist/cjs/Typeclass.js.map +1 -1
  24. package/dist/cjs/Versioned.js.map +1 -1
  25. package/dist/cjs/index.js.map +1 -1
  26. package/dist/cjs/internal/DeferredRef.js.map +1 -1
  27. package/dist/cjs/internal/UnionToTuple.js.map +1 -1
  28. package/dist/cjs/internal/bounds.js.map +1 -1
  29. package/dist/cjs/internal/core.js.map +1 -1
  30. package/dist/cjs/internal/diff.js.map +1 -1
  31. package/dist/cjs/internal/effect-loop-operator.js.map +1 -1
  32. package/dist/cjs/internal/effect-operator.js.map +1 -1
  33. package/dist/cjs/internal/effect-producer.js.map +1 -1
  34. package/dist/cjs/internal/helpers.js.map +1 -1
  35. package/dist/cjs/internal/keyed.js.map +1 -1
  36. package/dist/cjs/internal/loop-operator.js.map +1 -1
  37. package/dist/cjs/internal/operator.js.map +1 -1
  38. package/dist/cjs/internal/protos.js.map +1 -1
  39. package/dist/cjs/internal/provide.js.map +1 -1
  40. package/dist/cjs/internal/requestIdleCallback.js.map +1 -1
  41. package/dist/cjs/internal/share.js.map +1 -1
  42. package/dist/cjs/internal/strategies.js.map +1 -1
  43. package/dist/cjs/internal/sync-operator.js.map +1 -1
  44. package/dist/cjs/internal/sync-producer.js.map +1 -1
  45. package/dist/cjs/internal/withKey.js.map +1 -1
  46. package/dist/dts/AsyncData.d.ts +4 -0
  47. package/dist/dts/AsyncData.d.ts.map +1 -1
  48. package/dist/dts/Fx.d.ts +5 -1
  49. package/dist/dts/Fx.d.ts.map +1 -1
  50. package/dist/dts/RefSubject.d.ts +5 -14
  51. package/dist/dts/RefSubject.d.ts.map +1 -1
  52. package/dist/dts/Subject.d.ts.map +1 -1
  53. package/dist/esm/AsyncData.js +4 -0
  54. package/dist/esm/AsyncData.js.map +1 -1
  55. package/dist/esm/Fx.js +4 -0
  56. package/dist/esm/Fx.js.map +1 -1
  57. package/dist/esm/RefSubject.js +8 -8
  58. package/dist/esm/RefSubject.js.map +1 -1
  59. package/dist/esm/Subject.js +28 -17
  60. package/dist/esm/Subject.js.map +1 -1
  61. package/package.json +7 -7
  62. package/src/AsyncData.ts +6 -0
  63. package/src/Fx.ts +6 -1
  64. package/src/RefSubject.ts +30 -32
  65. package/src/Subject.ts +43 -32
package/src/Subject.ts CHANGED
@@ -78,8 +78,7 @@ const DISCARD = { discard: true } as const
78
78
  * @internal
79
79
  */
80
80
  export class SubjectImpl<A, E> extends FxBase<A, E, Scope.Scope> implements Subject<A, E> {
81
- protected sinks: Set<readonly [Sink<A, E, any>, Context.Context<any>]> = new Set()
82
- protected scopes: Set<Scope.CloseableScope> = new Set()
81
+ protected sinks: Set<readonly [Sink<A, E, any>, Context.Context<any>, Scope.CloseableScope]> = new Set()
83
82
 
84
83
  constructor() {
85
84
  super()
@@ -101,16 +100,17 @@ export class SubjectImpl<A, E> extends FxBase<A, E, Scope.Scope> implements Subj
101
100
  return this.onEvent(a)
102
101
  }
103
102
 
104
- readonly interrupt = Effect.fiberIdWith((id) =>
103
+ protected interruptScopes = Effect.fiberIdWith((id) =>
105
104
  Effect.tap(
106
- Effect.forEach(this.scopes, (scope) => Scope.close(scope, Exit.interrupt(id)), DISCARD),
105
+ Effect.forEach(this.sinks, ([, , scope]) => Scope.close(scope, Exit.interrupt(id)), DISCARD),
107
106
  () => {
108
107
  this.sinks.clear()
109
- this.scopes.clear()
110
108
  }
111
109
  )
112
110
  )
113
111
 
112
+ readonly interrupt = this.interruptScopes
113
+
114
114
  protected addSink<R, B, R2>(
115
115
  sink: Sink<A, E, R>,
116
116
  f: (scope: Scope.Scope) => Effect.Effect<B, never, R2>
@@ -118,19 +118,13 @@ export class SubjectImpl<A, E> extends FxBase<A, E, Scope.Scope> implements Subj
118
118
  return withScope(
119
119
  (innerScope) =>
120
120
  Effect.contextWithEffect((ctx) => {
121
- const entry = [sink, ctx] as const
122
- const add = Effect.sync(() => {
123
- this.sinks.add(entry)
124
- this.scopes.add(innerScope)
125
- })
126
- const remove = Effect.sync(() => {
127
- this.sinks.delete(entry)
128
- this.scopes.delete(innerScope)
129
- })
121
+ const entry = [sink, ctx, innerScope] as const
122
+ this.sinks.add(entry)
123
+ const remove = Effect.sync(() => this.sinks.delete(entry))
130
124
 
131
125
  return Effect.zipRight(
132
126
  Scope.addFinalizer(innerScope, remove),
133
- Effect.zipRight(add, f(innerScope))
127
+ f(innerScope)
134
128
  )
135
129
  }),
136
130
  ExecutionStrategy.sequential
@@ -141,20 +135,41 @@ export class SubjectImpl<A, E> extends FxBase<A, E, Scope.Scope> implements Subj
141
135
 
142
136
  protected onEvent(a: A) {
143
137
  if (this.sinks.size === 0) return Effect.unit
144
- else {
145
- return Effect.forEach(this.sinks, ([sink, ctx]) => Effect.provide(sink.onSuccess(a), ctx), DISCARD)
138
+ else if (this.sinks.size === 1) {
139
+ const [sink, ctx] = this.sinks.values().next().value
140
+ return runSinkEvent(sink, ctx, a)
141
+ } else {
142
+ return Effect.forEach(
143
+ this.sinks,
144
+ ([sink, ctx]) => runSinkEvent(sink, ctx, a),
145
+ DISCARD
146
+ )
146
147
  }
147
148
  }
148
149
 
149
150
  protected onCause(cause: Cause.Cause<E>) {
150
- return Effect.forEach(
151
- this.sinks,
152
- ([sink, ctx]) => Effect.provide(sink.onFailure(cause), ctx),
153
- DISCARD
154
- )
151
+ if (this.sinks.size === 0) return Effect.unit
152
+ else if (this.sinks.size === 1) {
153
+ const [sink, ctx] = this.sinks.values().next().value
154
+ return runSinkCause(sink, ctx, cause)
155
+ } else {
156
+ return Effect.forEach(
157
+ this.sinks,
158
+ ([sink, ctx]) => runSinkCause(sink, ctx, cause),
159
+ DISCARD
160
+ )
161
+ }
155
162
  }
156
163
  }
157
164
 
165
+ function runSinkEvent<A, E>(sink: Sink<A, E, any>, ctx: Context.Context<any>, a: A) {
166
+ return Effect.provide(Effect.catchAllCause(sink.onSuccess(a), sink.onFailure), ctx)
167
+ }
168
+
169
+ function runSinkCause<A, E>(sink: Sink<A, E, any>, ctx: Context.Context<any>, cause: Cause.Cause<E>) {
170
+ return Effect.provide(Effect.catchAllCause(sink.onFailure(cause), () => Effect.unit), ctx)
171
+ }
172
+
158
173
  /**
159
174
  * @internal
160
175
  */
@@ -185,11 +200,9 @@ export class HoldSubjectImpl<A, E> extends SubjectImpl<A, E> implements Subject<
185
200
  }))
186
201
  }
187
202
 
188
- readonly interrupt = Effect.fiberIdWith((id) =>
189
- Effect.tap(
190
- Effect.forEach(this.scopes, (scope) => Scope.close(scope, Exit.interrupt(id)), DISCARD),
191
- () => MutableRef.set(this.lastValue, Option.none())
192
- )
203
+ readonly interrupt = Effect.tap(
204
+ this.interruptScopes,
205
+ () => MutableRef.set(this.lastValue, Option.none())
193
206
  )
194
207
  }
195
208
 
@@ -216,11 +229,9 @@ export class ReplaySubjectImpl<A, E> extends SubjectImpl<A, E> {
216
229
  )
217
230
  }
218
231
 
219
- readonly interrupt = Effect.fiberIdWith((id) =>
220
- Effect.tap(
221
- Effect.forEach(this.scopes, (scope) => Scope.close(scope, Exit.interrupt(id)), DISCARD),
222
- () => this.buffer.clear()
223
- )
232
+ readonly interrupt = Effect.tap(
233
+ this.interruptScopes,
234
+ () => this.buffer.clear()
224
235
  )
225
236
  }
226
237