@typed/fx 0.0.13 → 0.0.15

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 (123) hide show
  1. package/.eslintcache +1 -1
  2. package/cjs/Fx.d.ts +6 -3
  3. package/cjs/Fx.d.ts.map +1 -1
  4. package/cjs/Fx.js.map +1 -1
  5. package/cjs/Subject.d.ts +8 -2
  6. package/cjs/Subject.d.ts.map +1 -1
  7. package/cjs/Subject.js +26 -9
  8. package/cjs/Subject.js.map +1 -1
  9. package/cjs/filterLoop.d.ts +6 -0
  10. package/cjs/filterLoop.d.ts.map +1 -1
  11. package/cjs/filterLoop.js +6 -0
  12. package/cjs/filterLoop.js.map +1 -1
  13. package/cjs/filterMap.d.ts +6 -0
  14. package/cjs/filterMap.d.ts.map +1 -1
  15. package/cjs/filterMap.js +6 -0
  16. package/cjs/filterMap.js.map +1 -1
  17. package/cjs/flatMap.js.map +1 -1
  18. package/cjs/fromEffect.d.ts.map +1 -1
  19. package/cjs/fromEffect.js +2 -1
  20. package/cjs/fromEffect.js.map +1 -1
  21. package/cjs/fromIterable.d.ts +3 -0
  22. package/cjs/fromIterable.d.ts.map +1 -1
  23. package/cjs/fromIterable.js +3 -0
  24. package/cjs/fromIterable.js.map +1 -1
  25. package/cjs/index.d.ts +1 -0
  26. package/cjs/index.d.ts.map +1 -1
  27. package/cjs/index.js +1 -0
  28. package/cjs/index.js.map +1 -1
  29. package/cjs/mapCause.js.map +1 -1
  30. package/cjs/multicast.d.ts +3 -0
  31. package/cjs/multicast.d.ts.map +1 -1
  32. package/cjs/multicast.js +3 -0
  33. package/cjs/multicast.js.map +1 -1
  34. package/cjs/runCollect.d.ts.map +1 -1
  35. package/cjs/runCollect.js +2 -1
  36. package/cjs/runCollect.js.map +1 -1
  37. package/cjs/runDrain.d.ts.map +1 -1
  38. package/cjs/runDrain.js +2 -1
  39. package/cjs/runDrain.js.map +1 -1
  40. package/cjs/runObserve.d.ts.map +1 -1
  41. package/cjs/runObserve.js +2 -1
  42. package/cjs/runObserve.js.map +1 -1
  43. package/cjs/snapshot.d.ts +1 -1
  44. package/cjs/snapshot.d.ts.map +1 -1
  45. package/cjs/snapshot.js +1 -1
  46. package/cjs/snapshot.js.map +1 -1
  47. package/cjs/struct.d.ts +3 -0
  48. package/cjs/struct.d.ts.map +1 -0
  49. package/cjs/struct.js +9 -0
  50. package/cjs/struct.js.map +1 -0
  51. package/cjs/withEmitter.d.ts +2 -6
  52. package/cjs/withEmitter.d.ts.map +1 -1
  53. package/cjs/withEmitter.js.map +1 -1
  54. package/esm/Fx.d.ts +6 -3
  55. package/esm/Fx.d.ts.map +1 -1
  56. package/esm/Fx.js.map +1 -1
  57. package/esm/Subject.d.ts +8 -2
  58. package/esm/Subject.d.ts.map +1 -1
  59. package/esm/Subject.js +26 -9
  60. package/esm/Subject.js.map +1 -1
  61. package/esm/filterLoop.d.ts +6 -0
  62. package/esm/filterLoop.d.ts.map +1 -1
  63. package/esm/filterLoop.js +6 -0
  64. package/esm/filterLoop.js.map +1 -1
  65. package/esm/filterMap.d.ts +6 -0
  66. package/esm/filterMap.d.ts.map +1 -1
  67. package/esm/filterMap.js +6 -0
  68. package/esm/filterMap.js.map +1 -1
  69. package/esm/flatMap.js.map +1 -1
  70. package/esm/fromEffect.d.ts.map +1 -1
  71. package/esm/fromEffect.js +1 -1
  72. package/esm/fromEffect.js.map +1 -1
  73. package/esm/fromIterable.d.ts +3 -0
  74. package/esm/fromIterable.d.ts.map +1 -1
  75. package/esm/fromIterable.js +3 -0
  76. package/esm/fromIterable.js.map +1 -1
  77. package/esm/index.d.ts +1 -0
  78. package/esm/index.d.ts.map +1 -1
  79. package/esm/index.js +1 -0
  80. package/esm/index.js.map +1 -1
  81. package/esm/mapCause.js.map +1 -1
  82. package/esm/multicast.d.ts +3 -0
  83. package/esm/multicast.d.ts.map +1 -1
  84. package/esm/multicast.js +3 -0
  85. package/esm/multicast.js.map +1 -1
  86. package/esm/runCollect.d.ts.map +1 -1
  87. package/esm/runCollect.js +2 -1
  88. package/esm/runCollect.js.map +1 -1
  89. package/esm/runDrain.d.ts.map +1 -1
  90. package/esm/runDrain.js +2 -1
  91. package/esm/runDrain.js.map +1 -1
  92. package/esm/runObserve.d.ts.map +1 -1
  93. package/esm/runObserve.js +2 -1
  94. package/esm/runObserve.js.map +1 -1
  95. package/esm/snapshot.d.ts +1 -1
  96. package/esm/snapshot.d.ts.map +1 -1
  97. package/esm/snapshot.js +1 -1
  98. package/esm/snapshot.js.map +1 -1
  99. package/esm/struct.d.ts +3 -0
  100. package/esm/struct.d.ts.map +1 -0
  101. package/esm/struct.js +5 -0
  102. package/esm/struct.js.map +1 -0
  103. package/esm/withEmitter.d.ts +2 -6
  104. package/esm/withEmitter.d.ts.map +1 -1
  105. package/esm/withEmitter.js.map +1 -1
  106. package/package.json +11 -1
  107. package/src/Fx.ts +12 -4
  108. package/src/Subject.test.ts +28 -0
  109. package/src/Subject.ts +38 -12
  110. package/src/filterLoop.ts +8 -0
  111. package/src/filterMap.ts +8 -0
  112. package/src/flatMap.ts +4 -1
  113. package/src/fromEffect.ts +2 -2
  114. package/src/fromIterable.ts +4 -0
  115. package/src/index.ts +1 -0
  116. package/src/mapCause.ts +4 -1
  117. package/src/multicast.ts +4 -0
  118. package/src/runCollect.ts +2 -0
  119. package/src/runDrain.ts +2 -0
  120. package/src/runObserve.ts +2 -0
  121. package/src/snapshot.ts +5 -9
  122. package/src/struct.ts +24 -0
  123. package/src/withEmitter.ts +2 -6
package/src/multicast.ts CHANGED
@@ -20,6 +20,10 @@ export interface MulticastObserver<E, A> {
20
20
  }
21
21
 
22
22
  export class Multicast<R, E, A> implements Fx<R, E, A>, Emitter<never, E, A> {
23
+ readonly _R!: () => R
24
+ readonly _E!: () => E
25
+ readonly _A!: () => A
26
+
23
27
  protected observers: MulticastObserver<E, A>[] = []
24
28
  protected fiber: Fiber.Fiber<never, unknown> | undefined
25
29
 
package/src/runCollect.ts CHANGED
@@ -2,6 +2,7 @@ import * as Effect from '@effect/core/io/Effect'
2
2
  import { pipe } from '@fp-ts/data/Function'
3
3
 
4
4
  import { Fx } from './Fx.js'
5
+ import { onEarlyExitFailure } from './_internal.js'
5
6
  import { runObserve } from './runObserve.js'
6
7
 
7
8
  export function runCollect<R, E, A>(fx: Fx<R, E, A>): Effect.Effect<R, E, ReadonlyArray<A>> {
@@ -11,6 +12,7 @@ export function runCollect<R, E, A>(fx: Fx<R, E, A>): Effect.Effect<R, E, Readon
11
12
  pipe(
12
13
  fx,
13
14
  runObserve((a) => Effect.sync(() => values.push(a))),
15
+ onEarlyExitFailure(Effect.unit),
14
16
  Effect.map(() => values),
15
17
  ),
16
18
  ),
package/src/runDrain.ts CHANGED
@@ -3,6 +3,7 @@ import * as Effect from '@effect/core/io/Effect'
3
3
  import { pipe } from '@fp-ts/data/Function'
4
4
 
5
5
  import { Fx } from './Fx.js'
6
+ import { onEarlyExitFailure } from './_internal.js'
6
7
 
7
8
  export function runDrain<R, E, A>(fx: Fx<R, E, A>): Effect.Effect<R, E, void> {
8
9
  return pipe(
@@ -16,6 +17,7 @@ export function runDrain<R, E, A>(fx: Fx<R, E, A>): Effect.Effect<R, E, void> {
16
17
  }),
17
18
  Effect.forkScoped,
18
19
  Effect.zipRight(deferred.await),
20
+ onEarlyExitFailure(Effect.sync(() => deferred.succeed(undefined))),
19
21
  ),
20
22
  ),
21
23
  Effect.scoped,
package/src/runObserve.ts CHANGED
@@ -3,6 +3,7 @@ import * as Effect from '@effect/core/io/Effect'
3
3
  import { flow, pipe } from '@fp-ts/data/Function'
4
4
 
5
5
  import { Emitter, Fx } from './Fx.js'
6
+ import { onEarlyExitFailure } from './_internal.js'
6
7
 
7
8
  export function runObserve<A, R2, E2, B>(f: (a: A) => Effect.Effect<R2, E2, B>) {
8
9
  return <R, E>(fx: Fx<R, E, A>): Effect.Effect<R | R2, E | E2, void> =>
@@ -26,6 +27,7 @@ export function runObserve<A, R2, E2, B>(f: (a: A) => Effect.Effect<R2, E2, B>)
26
27
  ),
27
28
  ),
28
29
  Effect.flatMap((deferred) => deferred.await),
30
+ onEarlyExitFailure(Effect.unit),
29
31
  Effect.scoped,
30
32
  )
31
33
  }
package/src/snapshot.ts CHANGED
@@ -5,24 +5,20 @@ import * as Maybe from '@tsplus/stdlib/data/Maybe'
5
5
 
6
6
  import { Emitter, Fx } from './Fx.js'
7
7
 
8
- export function snapshot<R2, E2, B, A, R3, E3, C>(sampled: Fx<R2, E2, B>, f: (b: B, a: A) => C) {
9
- return <R, E>(sampler: Fx<R, E, A>): Fx<R & R2 & R3, E | E2 | E3, C> =>
10
- snapshot_(sampler, sampled, f)
8
+ export function snapshot<R2, E2, B, A, C>(sampled: Fx<R2, E2, B>, f: (b: B, a: A) => C) {
9
+ return <R, E>(sampler: Fx<R, E, A>): Fx<R | R2, E | E2, C> => snapshot_(sampler, sampled, f)
11
10
  }
12
11
 
13
12
  export function sample<R2, E2, B>(sampled: Fx<R2, E2, B>) {
14
13
  return <R, E, A>(sampler: Fx<R, E, A>): Fx<R | R2, E | E2, readonly [A, B]> =>
15
- pipe(
16
- sampler,
17
- snapshot(sampled, (b, a) => [a, b]),
18
- )
14
+ snapshot_(sampler, sampled, (b, a) => [a, b])
19
15
  }
20
16
 
21
- function snapshot_<R, E, A, R2, E2, B, R3, E3, C>(
17
+ function snapshot_<R, E, A, R2, E2, B, C>(
22
18
  sampler: Fx<R, E, A>,
23
19
  sampled: Fx<R2, E2, B>,
24
20
  f: (b: B, a: A) => C,
25
- ): Fx<R | R2 | R3, E | E2 | E3, C> {
21
+ ): Fx<R | R2, E | E2, C> {
26
22
  return Fx((emitter) =>
27
23
  pipe(
28
24
  Effect.sync(() => new AtomicReference<Maybe.Maybe<B>>(Maybe.none)),
package/src/struct.ts ADDED
@@ -0,0 +1,24 @@
1
+ import { pipe } from '@fp-ts/data/Function'
2
+
3
+ import { Fx } from './Fx.js'
4
+ import { combineAll } from './combine.js'
5
+ import { map } from './filterMap.js'
6
+
7
+ export const struct = <Props extends Readonly<Record<string, Fx<any, any, any>>>>(
8
+ props: Props,
9
+ ): Fx<
10
+ Fx.ResourcesOf<Props[string]>,
11
+ Fx.ErrorsOf<Props[string]>,
12
+ { readonly [K in keyof Props]: Fx.OutputOf<Props[K]> }
13
+ > =>
14
+ pipe(
15
+ combineAll(
16
+ Object.entries(props).map(([key, fx]) =>
17
+ pipe(
18
+ fx,
19
+ map((value) => ({ [key]: value })),
20
+ ),
21
+ ),
22
+ ),
23
+ map((values) => Object.assign({}, ...values)),
24
+ )
@@ -1,4 +1,3 @@
1
- import { Cause } from '@effect/core/io/Cause'
2
1
  import * as Effect from '@effect/core/io/Effect'
3
2
  import * as Exit from '@effect/core/io/Exit'
4
3
  import { unsafeForkUnstarted } from '@effect/core/io/Fiber/_internal/runtime'
@@ -6,13 +5,10 @@ import { Scope } from '@effect/core/io/Scope'
6
5
  import { flow, pipe } from '@fp-ts/data/Function'
7
6
 
8
7
  import { Emitter, Fx } from './Fx.js'
8
+ import type { SubjectEmitter } from './Subject.js'
9
9
 
10
10
  export function withEmitter<R, E, A>(
11
- f: (sink: {
12
- readonly emit: (a: A) => void
13
- readonly failCause: (cause: Cause<E>) => void
14
- readonly end: () => void
15
- }) => Effect.Canceler<R>,
11
+ f: (emitter: SubjectEmitter<E, A>) => Effect.Canceler<R>,
16
12
  ): Fx<R, E, A> {
17
13
  return Fx<R, E, A>(<R2>(sink: Emitter<R2, E, A>) => {
18
14
  return Effect.withFiberRuntime<R | R2 | Scope, never, unknown>((fiber, status) => {