effect 3.0.3 → 3.0.5

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 (94) hide show
  1. package/dist/cjs/Cause.js.map +1 -1
  2. package/dist/cjs/Chunk.js +1 -1
  3. package/dist/cjs/Chunk.js.map +1 -1
  4. package/dist/cjs/Effect.js.map +1 -1
  5. package/dist/cjs/Either.js +4 -6
  6. package/dist/cjs/Either.js.map +1 -1
  7. package/dist/cjs/Option.js +3 -5
  8. package/dist/cjs/Option.js.map +1 -1
  9. package/dist/cjs/Order.js +15 -0
  10. package/dist/cjs/Order.js.map +1 -1
  11. package/dist/cjs/STM.js.map +1 -1
  12. package/dist/cjs/Utils.js +2 -4
  13. package/dist/cjs/Utils.js.map +1 -1
  14. package/dist/cjs/internal/core-effect.js +3 -21
  15. package/dist/cjs/internal/core-effect.js.map +1 -1
  16. package/dist/cjs/internal/core.js +10 -0
  17. package/dist/cjs/internal/core.js.map +1 -1
  18. package/dist/cjs/internal/effectable.js +4 -0
  19. package/dist/cjs/internal/effectable.js.map +1 -1
  20. package/dist/cjs/internal/fiberRuntime.js +3 -3
  21. package/dist/cjs/internal/fiberRuntime.js.map +1 -1
  22. package/dist/cjs/internal/rateLimiter.js +1 -1
  23. package/dist/cjs/internal/rateLimiter.js.map +1 -1
  24. package/dist/cjs/internal/stm/core.js +4 -0
  25. package/dist/cjs/internal/stm/core.js.map +1 -1
  26. package/dist/cjs/internal/stm/stm.js +3 -21
  27. package/dist/cjs/internal/stm/stm.js.map +1 -1
  28. package/dist/cjs/internal/version.js +1 -1
  29. package/dist/dts/Cause.d.ts +1 -0
  30. package/dist/dts/Cause.d.ts.map +1 -1
  31. package/dist/dts/Chunk.d.ts.map +1 -1
  32. package/dist/dts/Effect.d.ts +48 -40
  33. package/dist/dts/Effect.d.ts.map +1 -1
  34. package/dist/dts/Either.d.ts +1 -1
  35. package/dist/dts/Either.d.ts.map +1 -1
  36. package/dist/dts/Option.d.ts +1 -1
  37. package/dist/dts/Option.d.ts.map +1 -1
  38. package/dist/dts/Order.d.ts.map +1 -1
  39. package/dist/dts/STM.d.ts +25 -35
  40. package/dist/dts/STM.d.ts.map +1 -1
  41. package/dist/dts/Utils.d.ts +29 -25
  42. package/dist/dts/Utils.d.ts.map +1 -1
  43. package/dist/dts/index.d.ts +15 -0
  44. package/dist/dts/index.d.ts.map +1 -1
  45. package/dist/dts/internal/core.d.ts.map +1 -1
  46. package/dist/dts/internal/stm/stm.d.ts.map +1 -1
  47. package/dist/esm/Cause.js.map +1 -1
  48. package/dist/esm/Chunk.js +1 -1
  49. package/dist/esm/Chunk.js.map +1 -1
  50. package/dist/esm/Effect.js.map +1 -1
  51. package/dist/esm/Either.js +4 -6
  52. package/dist/esm/Either.js.map +1 -1
  53. package/dist/esm/Option.js +4 -6
  54. package/dist/esm/Option.js.map +1 -1
  55. package/dist/esm/Order.js +15 -0
  56. package/dist/esm/Order.js.map +1 -1
  57. package/dist/esm/STM.js.map +1 -1
  58. package/dist/esm/Utils.js +2 -4
  59. package/dist/esm/Utils.js.map +1 -1
  60. package/dist/esm/index.js +15 -0
  61. package/dist/esm/index.js.map +1 -1
  62. package/dist/esm/internal/core-effect.js +2 -20
  63. package/dist/esm/internal/core-effect.js.map +1 -1
  64. package/dist/esm/internal/core.js +10 -0
  65. package/dist/esm/internal/core.js.map +1 -1
  66. package/dist/esm/internal/effectable.js +4 -0
  67. package/dist/esm/internal/effectable.js.map +1 -1
  68. package/dist/esm/internal/fiberRuntime.js +3 -3
  69. package/dist/esm/internal/fiberRuntime.js.map +1 -1
  70. package/dist/esm/internal/rateLimiter.js +1 -1
  71. package/dist/esm/internal/rateLimiter.js.map +1 -1
  72. package/dist/esm/internal/stm/core.js +4 -0
  73. package/dist/esm/internal/stm/core.js.map +1 -1
  74. package/dist/esm/internal/stm/stm.js +2 -20
  75. package/dist/esm/internal/stm/stm.js.map +1 -1
  76. package/dist/esm/internal/version.js +1 -1
  77. package/package.json +1 -1
  78. package/src/Cause.ts +1 -0
  79. package/src/Chunk.ts +1 -2
  80. package/src/Effect.ts +61 -48
  81. package/src/Either.ts +6 -8
  82. package/src/Option.ts +6 -8
  83. package/src/Order.ts +15 -0
  84. package/src/STM.ts +26 -37
  85. package/src/Utils.ts +32 -29
  86. package/src/index.ts +15 -0
  87. package/src/internal/core-effect.ts +2 -23
  88. package/src/internal/core.ts +10 -0
  89. package/src/internal/effectable.ts +4 -0
  90. package/src/internal/fiberRuntime.ts +19 -8
  91. package/src/internal/rateLimiter.ts +1 -1
  92. package/src/internal/stm/core.ts +4 -0
  93. package/src/internal/stm/stm.ts +2 -22
  94. package/src/internal/version.ts +1 -1
@@ -1585,7 +1585,7 @@ export const exists: {
1585
1585
  readonly batching?: boolean | "inherit" | undefined
1586
1586
  }): Effect.Effect<boolean, E, R>
1587
1587
  } = dual(
1588
- (args) => Predicate.isIterable(args[0]),
1588
+ (args) => Predicate.isIterable(args[0]) && !core.isEffect(args[0]),
1589
1589
  <A, E, R>(elements: Iterable<A>, f: (a: A, i: number) => Effect.Effect<boolean, E, R>, options?: {
1590
1590
  readonly concurrency?: Concurrency | undefined
1591
1591
  readonly batching?: boolean | "inherit" | undefined
@@ -1639,7 +1639,7 @@ export const filter = dual<
1639
1639
  readonly negate?: boolean | undefined
1640
1640
  }) => Effect.Effect<Array<A>, E, R>
1641
1641
  >(
1642
- (args) => Predicate.isIterable(args[0]),
1642
+ (args) => Predicate.isIterable(args[0]) && !core.isEffect(args[0]),
1643
1643
  <A, E, R>(elements: Iterable<A>, f: (a: NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>, options?: {
1644
1644
  readonly concurrency?: Concurrency | undefined
1645
1645
  readonly batching?: boolean | "inherit" | undefined
@@ -1883,14 +1883,16 @@ export const replicateEffect: {
1883
1883
 
1884
1884
  /* @internal */
1885
1885
  export const forEach: {
1886
- <A, B, E, R>(
1887
- f: (a: A, i: number) => Effect.Effect<B, E, R>,
1886
+ <B, E, R, S extends Iterable<any>>(
1887
+ f: (a: RA.ReadonlyArray.Infer<S>, i: number) => Effect.Effect<B, E, R>,
1888
1888
  options?: {
1889
1889
  readonly concurrency?: Concurrency | undefined
1890
1890
  readonly batching?: boolean | "inherit" | undefined
1891
1891
  readonly discard?: false | undefined
1892
- }
1893
- ): (self: Iterable<A>) => Effect.Effect<Array<B>, E, R>
1892
+ } | undefined
1893
+ ): (
1894
+ self: S
1895
+ ) => Effect.Effect<RA.ReadonlyArray.With<S, B>, E, R>
1894
1896
  <A, B, E, R>(
1895
1897
  f: (a: A, i: number) => Effect.Effect<B, E, R>,
1896
1898
  options: {
@@ -1899,6 +1901,15 @@ export const forEach: {
1899
1901
  readonly discard: true
1900
1902
  }
1901
1903
  ): (self: Iterable<A>) => Effect.Effect<void, E, R>
1904
+ <A, B, E, R>(
1905
+ self: RA.NonEmptyReadonlyArray<A>,
1906
+ f: (a: A, i: number) => Effect.Effect<B, E, R>,
1907
+ options?: {
1908
+ readonly concurrency?: Concurrency | undefined
1909
+ readonly batching?: boolean | "inherit" | undefined
1910
+ readonly discard?: false | undefined
1911
+ } | undefined
1912
+ ): Effect.Effect<RA.NonEmptyArray<B>, E, R>
1902
1913
  <A, B, E, R>(
1903
1914
  self: Iterable<A>,
1904
1915
  f: (a: A, i: number) => Effect.Effect<B, E, R>,
@@ -1906,7 +1917,7 @@ export const forEach: {
1906
1917
  readonly concurrency?: Concurrency | undefined
1907
1918
  readonly batching?: boolean | "inherit" | undefined
1908
1919
  readonly discard?: false | undefined
1909
- }
1920
+ } | undefined
1910
1921
  ): Effect.Effect<Array<B>, E, R>
1911
1922
  <A, B, E, R>(
1912
1923
  self: Iterable<A>,
@@ -2551,7 +2562,7 @@ export const reduceEffect = dual<
2551
2562
  readonly batching?: boolean | "inherit" | undefined
2552
2563
  }
2553
2564
  ) => Effect.Effect<Z, E | Effect.Effect.Error<Eff>, R | Effect.Effect.Context<Eff>>
2554
- >((args) => Predicate.isIterable(args[0]), <A, E, R, Z>(
2565
+ >((args) => Predicate.isIterable(args[0]) && !core.isEffect(args[0]), <A, E, R, Z>(
2555
2566
  elements: Iterable<Effect.Effect<A, E, R>>,
2556
2567
  zero: Effect.Effect<Z, E, R>,
2557
2568
  f: (acc: NoInfer<Z>, a: NoInfer<A>, i: number) => Z,
@@ -34,7 +34,7 @@ const tokenBucket = (limit: number, window: DurationInput): Effect.Effect<
34
34
  Effect.gen(function*(_) {
35
35
  const millisPerToken = Math.ceil(Duration.toMillis(window) / limit)
36
36
  const semaphore = yield* _(Effect.makeSemaphore(limit))
37
- const latch = yield* _(Effect.makeSemaphore(0))
37
+ const latch = yield* Effect.makeSemaphore(0)
38
38
  const refill: Effect.Effect<void> = Effect.sleep(millisPerToken).pipe(
39
39
  Effect.zipRight(latch.releaseAll),
40
40
  Effect.zipRight(semaphore.release(1)),
@@ -19,6 +19,7 @@ import { ChannelTypeId } from "../core-stream.js"
19
19
  import { withFiberRuntime } from "../core.js"
20
20
  import { effectVariance } from "../effectable.js"
21
21
  import { OP_COMMIT } from "../opCodes/effect.js"
22
+ import { SingleShotGen } from "../singleShotGen.js"
22
23
  import { SinkTypeId } from "../sink.js"
23
24
  import * as OpCodes from "./opCodes/stm.js"
24
25
  import * as TExitOpCodes from "./opCodes/tExit.js"
@@ -170,6 +171,9 @@ class STMPrimitive implements STM.STM<any, any, any> {
170
171
  [Hash.symbol](this: {}) {
171
172
  return Hash.cached(this, Hash.random(this))
172
173
  }
174
+ [Symbol.iterator]() {
175
+ return new SingleShotGen(this) as any
176
+ }
173
177
  commit(this: STM.STM<any, any, any>): Effect.Effect<any, any, any> {
174
178
  return unsafeAtomically(this, constVoid, constVoid)
175
179
  }
@@ -14,7 +14,6 @@ import * as predicate from "../../Predicate.js"
14
14
  import type * as STM from "../../STM.js"
15
15
  import type { MergeRecord } from "../../Types.js"
16
16
  import * as effectCore from "../core.js"
17
- import * as SingleShotGen from "../singleShotGen.js"
18
17
  import * as core from "./core.js"
19
18
  import * as Journal from "./stm/journal.js"
20
19
  import * as STMState from "./stm/stmState.js"
@@ -614,39 +613,20 @@ export const fromOption = <A>(option: Option.Option<A>): STM.STM<A, Option.Optio
614
613
  onSome: core.succeed
615
614
  })
616
615
 
617
- /** @internal */
618
- class STMGen {
619
- constructor(readonly value: STM.STM<any, any, any>) {}
620
- [Symbol.iterator]() {
621
- return new SingleShotGen.SingleShotGen(this)
622
- }
623
- }
624
-
625
- const adapter = function() {
626
- let x = arguments[0]
627
- for (let i = 1; i < arguments.length; i++) {
628
- x = arguments[i](x)
629
- }
630
- return new STMGen(x) as any
631
- }
632
-
633
616
  /**
634
617
  * Inspired by https://github.com/tusharmath/qio/pull/22 (revised)
635
618
  * @internal
636
619
  */
637
620
  export const gen: typeof STM.gen = (f) =>
638
621
  suspend(() => {
639
- const iterator = f(adapter)
622
+ const iterator = f(pipe)
640
623
  const state = iterator.next()
641
624
  const run = (
642
625
  state: IteratorYieldResult<any> | IteratorReturnResult<any>
643
626
  ): STM.STM<any, any, any> =>
644
627
  state.done ?
645
628
  core.succeed(state.value) :
646
- core.flatMap(
647
- state.value.value as unknown as STM.STM<any, any, any>,
648
- (val: any) => run(iterator.next(val))
649
- )
629
+ core.flatMap(state.value, (val: any) => run(iterator.next(val as never)))
650
630
  return run(state)
651
631
  })
652
632
 
@@ -1,4 +1,4 @@
1
- let moduleVersion = "3.0.3"
1
+ let moduleVersion = "3.0.5"
2
2
 
3
3
  export const getCurrentVersion = () => moduleVersion
4
4