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.
- package/dist/cjs/Cause.js.map +1 -1
- package/dist/cjs/Chunk.js +1 -1
- package/dist/cjs/Chunk.js.map +1 -1
- package/dist/cjs/Effect.js.map +1 -1
- package/dist/cjs/Either.js +4 -6
- package/dist/cjs/Either.js.map +1 -1
- package/dist/cjs/Option.js +3 -5
- package/dist/cjs/Option.js.map +1 -1
- package/dist/cjs/Order.js +15 -0
- package/dist/cjs/Order.js.map +1 -1
- package/dist/cjs/STM.js.map +1 -1
- package/dist/cjs/Utils.js +2 -4
- package/dist/cjs/Utils.js.map +1 -1
- package/dist/cjs/internal/core-effect.js +3 -21
- package/dist/cjs/internal/core-effect.js.map +1 -1
- package/dist/cjs/internal/core.js +10 -0
- package/dist/cjs/internal/core.js.map +1 -1
- package/dist/cjs/internal/effectable.js +4 -0
- package/dist/cjs/internal/effectable.js.map +1 -1
- package/dist/cjs/internal/fiberRuntime.js +3 -3
- package/dist/cjs/internal/fiberRuntime.js.map +1 -1
- package/dist/cjs/internal/rateLimiter.js +1 -1
- package/dist/cjs/internal/rateLimiter.js.map +1 -1
- package/dist/cjs/internal/stm/core.js +4 -0
- package/dist/cjs/internal/stm/core.js.map +1 -1
- package/dist/cjs/internal/stm/stm.js +3 -21
- package/dist/cjs/internal/stm/stm.js.map +1 -1
- package/dist/cjs/internal/version.js +1 -1
- package/dist/dts/Cause.d.ts +1 -0
- package/dist/dts/Cause.d.ts.map +1 -1
- package/dist/dts/Chunk.d.ts.map +1 -1
- package/dist/dts/Effect.d.ts +48 -40
- package/dist/dts/Effect.d.ts.map +1 -1
- package/dist/dts/Either.d.ts +1 -1
- package/dist/dts/Either.d.ts.map +1 -1
- package/dist/dts/Option.d.ts +1 -1
- package/dist/dts/Option.d.ts.map +1 -1
- package/dist/dts/Order.d.ts.map +1 -1
- package/dist/dts/STM.d.ts +25 -35
- package/dist/dts/STM.d.ts.map +1 -1
- package/dist/dts/Utils.d.ts +29 -25
- package/dist/dts/Utils.d.ts.map +1 -1
- package/dist/dts/index.d.ts +15 -0
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/dts/internal/core.d.ts.map +1 -1
- package/dist/dts/internal/stm/stm.d.ts.map +1 -1
- package/dist/esm/Cause.js.map +1 -1
- package/dist/esm/Chunk.js +1 -1
- package/dist/esm/Chunk.js.map +1 -1
- package/dist/esm/Effect.js.map +1 -1
- package/dist/esm/Either.js +4 -6
- package/dist/esm/Either.js.map +1 -1
- package/dist/esm/Option.js +4 -6
- package/dist/esm/Option.js.map +1 -1
- package/dist/esm/Order.js +15 -0
- package/dist/esm/Order.js.map +1 -1
- package/dist/esm/STM.js.map +1 -1
- package/dist/esm/Utils.js +2 -4
- package/dist/esm/Utils.js.map +1 -1
- package/dist/esm/index.js +15 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internal/core-effect.js +2 -20
- package/dist/esm/internal/core-effect.js.map +1 -1
- package/dist/esm/internal/core.js +10 -0
- package/dist/esm/internal/core.js.map +1 -1
- package/dist/esm/internal/effectable.js +4 -0
- package/dist/esm/internal/effectable.js.map +1 -1
- package/dist/esm/internal/fiberRuntime.js +3 -3
- package/dist/esm/internal/fiberRuntime.js.map +1 -1
- package/dist/esm/internal/rateLimiter.js +1 -1
- package/dist/esm/internal/rateLimiter.js.map +1 -1
- package/dist/esm/internal/stm/core.js +4 -0
- package/dist/esm/internal/stm/core.js.map +1 -1
- package/dist/esm/internal/stm/stm.js +2 -20
- package/dist/esm/internal/stm/stm.js.map +1 -1
- package/dist/esm/internal/version.js +1 -1
- package/package.json +1 -1
- package/src/Cause.ts +1 -0
- package/src/Chunk.ts +1 -2
- package/src/Effect.ts +61 -48
- package/src/Either.ts +6 -8
- package/src/Option.ts +6 -8
- package/src/Order.ts +15 -0
- package/src/STM.ts +26 -37
- package/src/Utils.ts +32 -29
- package/src/index.ts +15 -0
- package/src/internal/core-effect.ts +2 -23
- package/src/internal/core.ts +10 -0
- package/src/internal/effectable.ts +4 -0
- package/src/internal/fiberRuntime.ts +19 -8
- package/src/internal/rateLimiter.ts +1 -1
- package/src/internal/stm/core.ts +4 -0
- package/src/internal/stm/stm.ts +2 -22
- 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
|
-
<
|
|
1887
|
-
f: (a:
|
|
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
|
-
): (
|
|
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*
|
|
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)),
|
package/src/internal/stm/core.ts
CHANGED
|
@@ -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
|
}
|
package/src/internal/stm/stm.ts
CHANGED
|
@@ -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(
|
|
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
|
|
package/src/internal/version.ts
CHANGED