@typed/fx 1.8.0 → 1.8.2

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 (120) hide show
  1. package/dist/RefSubject.d.ts.map +1 -1
  2. package/dist/RefSubject.js +4 -1
  3. package/dist/RefSubject.js.map +1 -1
  4. package/dist/catchAllCause.d.ts +1 -1
  5. package/dist/catchAllCause.d.ts.map +1 -1
  6. package/dist/catchAllCause.js +1 -1
  7. package/dist/catchAllCause.js.map +1 -1
  8. package/dist/cjs/RefSubject.d.ts.map +1 -1
  9. package/dist/cjs/RefSubject.js +3 -1
  10. package/dist/cjs/RefSubject.js.map +1 -1
  11. package/dist/cjs/catchAllCause.d.ts +1 -1
  12. package/dist/cjs/catchAllCause.d.ts.map +1 -1
  13. package/dist/cjs/catchAllCause.js +1 -1
  14. package/dist/cjs/catchAllCause.js.map +1 -1
  15. package/dist/cjs/exhaustMap.d.ts +1 -1
  16. package/dist/cjs/exhaustMap.d.ts.map +1 -1
  17. package/dist/cjs/exhaustMap.js +1 -1
  18. package/dist/cjs/exhaustMap.js.map +1 -1
  19. package/dist/cjs/exhaustMapCause.d.ts +1 -1
  20. package/dist/cjs/exhaustMapCause.d.ts.map +1 -1
  21. package/dist/cjs/exhaustMapCause.js +1 -1
  22. package/dist/cjs/exhaustMapCause.js.map +1 -1
  23. package/dist/cjs/exhaustMapLatest.d.ts +1 -1
  24. package/dist/cjs/exhaustMapLatest.d.ts.map +1 -1
  25. package/dist/cjs/exhaustMapLatest.js +1 -1
  26. package/dist/cjs/exhaustMapLatest.js.map +1 -1
  27. package/dist/cjs/exhaustMapLatestCause.d.ts +1 -1
  28. package/dist/cjs/exhaustMapLatestCause.d.ts.map +1 -1
  29. package/dist/cjs/exhaustMapLatestCause.js +1 -1
  30. package/dist/cjs/exhaustMapLatestCause.js.map +1 -1
  31. package/dist/cjs/flatMap.d.ts +1 -1
  32. package/dist/cjs/flatMap.d.ts.map +1 -1
  33. package/dist/cjs/flatMap.js +1 -1
  34. package/dist/cjs/flatMap.js.map +1 -1
  35. package/dist/cjs/fromEffect.d.ts +1 -1
  36. package/dist/cjs/fromEffect.d.ts.map +1 -1
  37. package/dist/cjs/fromEffect.js +1 -1
  38. package/dist/cjs/fromEffect.js.map +1 -1
  39. package/dist/cjs/index.d.ts +4 -0
  40. package/dist/cjs/index.d.ts.map +1 -1
  41. package/dist/cjs/index.js +4 -3
  42. package/dist/cjs/index.js.map +1 -1
  43. package/dist/cjs/reduce.d.ts +2 -1
  44. package/dist/cjs/reduce.d.ts.map +1 -1
  45. package/dist/cjs/reduce.js +5 -4
  46. package/dist/cjs/reduce.js.map +1 -1
  47. package/dist/cjs/switchMap.d.ts +1 -1
  48. package/dist/cjs/switchMap.d.ts.map +1 -1
  49. package/dist/cjs/switchMap.js +1 -1
  50. package/dist/cjs/switchMap.js.map +1 -1
  51. package/dist/cjs/switchMapCause.d.ts +1 -1
  52. package/dist/cjs/switchMapCause.d.ts.map +1 -1
  53. package/dist/cjs/switchMapCause.js +1 -1
  54. package/dist/cjs/switchMapCause.js.map +1 -1
  55. package/dist/cjs/switchMatch.d.ts +1 -1
  56. package/dist/cjs/switchMatch.d.ts.map +1 -1
  57. package/dist/cjs/switchMatch.js +1 -1
  58. package/dist/cjs/switchMatch.js.map +1 -1
  59. package/dist/exhaustMap.d.ts +1 -1
  60. package/dist/exhaustMap.d.ts.map +1 -1
  61. package/dist/exhaustMap.js +1 -1
  62. package/dist/exhaustMap.js.map +1 -1
  63. package/dist/exhaustMapCause.d.ts +1 -1
  64. package/dist/exhaustMapCause.d.ts.map +1 -1
  65. package/dist/exhaustMapCause.js +1 -1
  66. package/dist/exhaustMapCause.js.map +1 -1
  67. package/dist/exhaustMapLatest.d.ts +1 -1
  68. package/dist/exhaustMapLatest.d.ts.map +1 -1
  69. package/dist/exhaustMapLatest.js +1 -1
  70. package/dist/exhaustMapLatest.js.map +1 -1
  71. package/dist/exhaustMapLatestCause.d.ts +1 -1
  72. package/dist/exhaustMapLatestCause.d.ts.map +1 -1
  73. package/dist/exhaustMapLatestCause.js +1 -1
  74. package/dist/exhaustMapLatestCause.js.map +1 -1
  75. package/dist/flatMap.d.ts +1 -1
  76. package/dist/flatMap.d.ts.map +1 -1
  77. package/dist/flatMap.js +1 -1
  78. package/dist/flatMap.js.map +1 -1
  79. package/dist/fromEffect.d.ts +1 -1
  80. package/dist/fromEffect.d.ts.map +1 -1
  81. package/dist/fromEffect.js +1 -1
  82. package/dist/fromEffect.js.map +1 -1
  83. package/dist/index.d.ts +4 -0
  84. package/dist/index.d.ts.map +1 -1
  85. package/dist/index.js +1 -0
  86. package/dist/index.js.map +1 -1
  87. package/dist/reduce.d.ts +2 -1
  88. package/dist/reduce.d.ts.map +1 -1
  89. package/dist/reduce.js +5 -4
  90. package/dist/reduce.js.map +1 -1
  91. package/dist/switchMap.d.ts +1 -1
  92. package/dist/switchMap.d.ts.map +1 -1
  93. package/dist/switchMap.js +1 -1
  94. package/dist/switchMap.js.map +1 -1
  95. package/dist/switchMapCause.d.ts +1 -1
  96. package/dist/switchMapCause.d.ts.map +1 -1
  97. package/dist/switchMapCause.js +1 -1
  98. package/dist/switchMapCause.js.map +1 -1
  99. package/dist/switchMatch.d.ts +1 -1
  100. package/dist/switchMatch.d.ts.map +1 -1
  101. package/dist/switchMatch.js +1 -1
  102. package/dist/switchMatch.js.map +1 -1
  103. package/dist/tsconfig.cjs.build.tsbuildinfo +1 -1
  104. package/package.json +2 -2
  105. package/src/RefSubject.ts +8 -2
  106. package/src/catchAllCause.ts +1 -2
  107. package/src/exhaustMap.ts +1 -2
  108. package/src/exhaustMapCause.ts +1 -2
  109. package/src/exhaustMapLatest.ts +1 -2
  110. package/src/exhaustMapLatestCause.ts +1 -2
  111. package/src/flatMap.ts +1 -2
  112. package/src/fromEffect.ts +1 -2
  113. package/src/fromFxEffect.test.ts +16 -0
  114. package/src/gen.test.ts +29 -0
  115. package/src/index.ts +5 -0
  116. package/src/reduce.ts +14 -9
  117. package/src/switchMap.ts +1 -2
  118. package/src/switchMapCause.ts +1 -2
  119. package/src/switchMatch.ts +1 -2
  120. package/tsconfig.build.tsbuildinfo +1 -1
package/src/RefSubject.ts CHANGED
@@ -12,6 +12,7 @@ import type { Context } from './externals.js'
12
12
  import { Effect, Fiber, MutableRef, Option, Ref } from './externals.js'
13
13
  import { hold, HoldFx } from './hold.js'
14
14
  import { map } from './map.js'
15
+ import { multicast } from './multicast.js'
15
16
  import { never } from './never.js'
16
17
  import { switchMapEffect } from './switchMap.js'
17
18
 
@@ -570,13 +571,18 @@ class ComputedImpl<R, E, A, R2, E2, B> implements Computed<R | R2, E | E2, B> {
570
571
  _A: identity,
571
572
  }
572
573
 
574
+ readonly fx: Fx<R | R2, E | E2, B>
575
+
573
576
  constructor(
574
577
  readonly computed: Computed<R, E, A>,
575
578
  readonly f: (a: A) => Effect.Effect<R2, E2, B>,
576
- ) {}
579
+ ) {
580
+ // Create a stable reference to derived Fx
581
+ this.fx = multicast(switchMapEffect(this.computed, this.f))
582
+ }
577
583
 
578
584
  run<R3>(sink: Sink<R3, E | E2, B>) {
579
- return switchMapEffect(this.computed, this.f).run(sink)
585
+ return this.fx.run(sink)
580
586
  }
581
587
 
582
588
  traced(trace: Trace): Fx<R | R2, E | E2, B> {
@@ -1,8 +1,7 @@
1
1
  import { pipe } from '@effect/data/Function'
2
2
 
3
- import { Cause, Effect, Either, Fiber, Ref } from './externals.js'
4
-
5
3
  import { Fx, Sink } from './Fx.js'
4
+ import { Cause, Effect, Either, Fiber, Ref } from './externals.js'
6
5
  import { failCause } from './failCause.js'
7
6
  import { fromEffect } from './fromEffect.js'
8
7
 
package/src/exhaustMap.ts CHANGED
@@ -1,8 +1,7 @@
1
1
  import { pipe } from '@effect/data/Function'
2
2
 
3
- import { Cause, Effect, Fiber, Ref } from './externals.js'
4
-
5
3
  import { Fx, Sink } from './Fx.js'
4
+ import { Cause, Effect, Fiber, Ref } from './externals.js'
6
5
  import { fromEffect } from './fromEffect.js'
7
6
 
8
7
  export function exhaustMap<R, E, A, R2, E2, B>(
@@ -1,8 +1,7 @@
1
1
  import { pipe } from '@effect/data/Function'
2
2
 
3
- import { Cause, Effect, Either, Fiber, Ref } from './externals.js'
4
-
5
3
  import { Fx, Sink } from './Fx.js'
4
+ import { Cause, Effect, Either, Fiber, Ref } from './externals.js'
6
5
  import { failCause } from './failCause.js'
7
6
  import { fromEffect } from './fromEffect.js'
8
7
 
@@ -2,9 +2,8 @@ import { pipe } from '@effect/data/Function'
2
2
  import * as Option from '@effect/data/Option'
3
3
  import type { Scope } from '@effect/io/Scope'
4
4
 
5
- import { Cause, Effect, Fiber, Ref } from './externals.js'
6
-
7
5
  import { Fx, Sink } from './Fx.js'
6
+ import { Cause, Effect, Fiber, Ref } from './externals.js'
8
7
  import { fromEffect } from './fromEffect.js'
9
8
 
10
9
  export function exhaustMapLatest<R, E, A, R2, E2, B>(
@@ -2,9 +2,8 @@ import { pipe } from '@effect/data/Function'
2
2
  import * as Option from '@effect/data/Option'
3
3
  import type { Scope } from '@effect/io/Scope'
4
4
 
5
- import { Cause, Effect, Either, Fiber, Ref } from './externals.js'
6
-
7
5
  import { Fx, Sink } from './Fx.js'
6
+ import { Cause, Effect, Either, Fiber, Ref } from './externals.js'
8
7
  import { failCause } from './failCause.js'
9
8
  import { fromEffect } from './fromEffect.js'
10
9
 
package/src/flatMap.ts CHANGED
@@ -1,8 +1,7 @@
1
1
  import { pipe } from '@effect/data/Function'
2
2
 
3
- import { Cause, Effect, Fiber, Ref } from './externals.js'
4
-
5
3
  import { Fx, Sink } from './Fx.js'
4
+ import { Cause, Effect, Fiber, Ref } from './externals.js'
6
5
  import { fromEffect } from './fromEffect.js'
7
6
 
8
7
  export function flatMap<R, E, A, R2, E2, B>(
package/src/fromEffect.ts CHANGED
@@ -1,6 +1,5 @@
1
- import { Effect } from './externals.js'
2
-
3
1
  import { Fx } from './Fx.js'
2
+ import { Effect } from './externals.js'
4
3
 
5
4
  export function fromEffect<R, E, A>(effect: Effect.Effect<R, E, A>): Fx<R, E, A> {
6
5
  return Fx((sink) => Effect.matchCauseEffect(effect, sink.error, sink.event))
@@ -0,0 +1,16 @@
1
+ import { describe } from 'vitest'
2
+
3
+ import { Cause, Effect } from './externals.js'
4
+ import { fromFxEffect } from './fromFxEffect.js'
5
+ import { succeed } from './succeed.js'
6
+ import { testCause, testCollectAll } from './test-utils.js'
7
+
8
+ describe(__filename, () => {
9
+ describe(fromFxEffect.name, (): void => {
10
+ const value = Math.random()
11
+
12
+ testCollectAll('returns the output', fromFxEffect(Effect.succeed(succeed(value))), [value])
13
+
14
+ testCause('fails with the given Cause', fromFxEffect(Effect.fail(value)), Cause.fail(value))
15
+ })
16
+ })
@@ -0,0 +1,29 @@
1
+ import { describe } from 'vitest'
2
+
3
+ import { Cause, Effect } from './externals.js'
4
+ import { gen } from './gen.js'
5
+ import { succeed } from './succeed.js'
6
+ import { testCause, testCollectAll } from './test-utils.js'
7
+
8
+ describe(__filename, () => {
9
+ describe(gen.name, () => {
10
+ const value = Math.random()
11
+
12
+ testCollectAll(
13
+ 'returns the output',
14
+ // eslint-disable-next-line require-yield
15
+ gen(function* () {
16
+ return succeed(value)
17
+ }),
18
+ [value],
19
+ )
20
+
21
+ testCause(
22
+ 'fails with the given Cause',
23
+ gen(function* ($) {
24
+ return yield* $(Effect.fail(value))
25
+ }),
26
+ Cause.fail(value),
27
+ )
28
+ })
29
+ })
package/src/index.ts CHANGED
@@ -537,6 +537,11 @@ export const mergeAll: <FXS extends ReadonlyArray<Fx<any, any, any>>>(
537
537
  internal.mergeAll(...fxs).traced(trace),
538
538
  )
539
539
 
540
+ export const merge: {
541
+ <R2, E2, B>(other: Fx<R2, E2, B>): <R, E, A>(fx: Fx<R, E, A>) => Fx<R | R2, E | E2, A | B>
542
+ <R, E, A, R2, E2, B>(fx: Fx<R, E, A>, other: Fx<R2, E2, B>): Fx<R | R2, E | E2, A | B>
543
+ } = dualWithTrace(2, (trace) => (fx, other) => internal.merge(fx, other).traced(trace))
544
+
540
545
  export const multicast: <R, E, A>(fx: Fx<R, E, A>) => Fx<R, E, A> = methodWithTrace(
541
546
  (trace) =>
542
547
  <R, E, A>(fx: Fx<R, E, A>): Fx<R, E, A> =>
package/src/reduce.ts CHANGED
@@ -1,12 +1,17 @@
1
- import { Fx, Sink } from './Fx.js'
2
- import { Effect } from './externals.js'
1
+ import { Fx } from './Fx.js'
2
+ import { Effect, Scope } from './externals.js'
3
+ import { observe } from './observe.js'
3
4
 
4
- export function reduce<R, E, A, B>(fx: Fx<R, E, A>, b: B, f: (b: B, a: A) => B): Fx<R, E, B> {
5
- return Fx((sink) =>
6
- Effect.suspend(() => {
7
- let acc = b
5
+ export function reduce<R, E, A, B>(
6
+ fx: Fx<R, E, A>,
7
+ b: B,
8
+ f: (b: B, a: A) => B,
9
+ ): Effect.Effect<R | Scope.Scope, E, B> {
10
+ return Effect.gen(function* ($) {
11
+ let acc = b
8
12
 
9
- return fx.run(Sink((a) => Effect.sync(() => (acc = f(acc, a))), sink.error))
10
- }),
11
- )
13
+ yield* $(observe(fx, (a) => Effect.sync(() => (acc = f(acc, a)))))
14
+
15
+ return acc
16
+ })
12
17
  }
package/src/switchMap.ts CHANGED
@@ -1,8 +1,7 @@
1
1
  import { pipe } from '@effect/data/Function'
2
2
 
3
- import { Cause, Effect, Fiber, RefS } from './externals.js'
4
-
5
3
  import { Fx, Sink } from './Fx.js'
4
+ import { Cause, Effect, Fiber, RefS } from './externals.js'
6
5
  import { fromEffect } from './fromEffect.js'
7
6
 
8
7
  export function switchMap<R, E, A, R2, E2, B>(
@@ -1,8 +1,7 @@
1
1
  import { pipe } from '@effect/data/Function'
2
2
 
3
- import { Cause, Effect, Either, Fiber, RefS } from './externals.js'
4
-
5
3
  import { Fx, Sink } from './Fx.js'
4
+ import { Cause, Effect, Either, Fiber, RefS } from './externals.js'
6
5
  import { failCause } from './failCause.js'
7
6
  import { fromEffect } from './fromEffect.js'
8
7
 
@@ -1,8 +1,7 @@
1
1
  import { pipe } from '@effect/data/Function'
2
2
 
3
- import { Cause, Effect, Either, Fiber, RefS } from './externals.js'
4
-
5
3
  import { Fx, Sink } from './Fx.js'
4
+ import { Cause, Effect, Either, Fiber, RefS } from './externals.js'
6
5
  import { failCause } from './failCause.js'
7
6
  import { fromEffect } from './fromEffect.js'
8
7