diff --git a/packages/effect/src/Either.ts b/packages/effect/src/Either.ts index ae39d90ac2..9017f1efa3 100644 --- a/packages/effect/src/Either.ts +++ b/packages/effect/src/Either.ts @@ -599,6 +599,7 @@ export const getOrThrowWith: { throw onLeft(self.left) }) +// TODO(4.0): by default should throw `L` (i.e getOrThrowWith with the identity function) /** * Extracts the value of an `Either` or throws if the `Either` is `Left`. * diff --git a/packages/effect/test/Channel/constructors.test.ts b/packages/effect/test/Channel/constructors.test.ts index bfddeb2053..9d551f759e 100644 --- a/packages/effect/test/Channel/constructors.test.ts +++ b/packages/effect/test/Channel/constructors.test.ts @@ -8,15 +8,15 @@ import { describe } from "vitest" describe("Channel", () => { it.effect("succeed", () => - Effect.gen(function*($) { - const [chunk, value] = yield* $(Channel.runCollect(Channel.succeed(1))) + Effect.gen(function*() { + const [chunk, value] = yield* Channel.runCollect(Channel.succeed(1)) assertTrue(Chunk.isEmpty(chunk)) strictEqual(value, 1) })) it.effect("fail", () => - Effect.gen(function*($) { - const result = yield* $(Effect.exit(Channel.runCollect(Channel.fail("uh oh")))) + Effect.gen(function*() { + const result = yield* Effect.exit(Channel.runCollect(Channel.fail("uh oh"))) deepStrictEqual(result, Exit.fail("uh oh")) })) }) diff --git a/packages/effect/test/Channel/environment.test.ts b/packages/effect/test/Channel/environment.test.ts index 0fb34136dd..8f8ad4dd58 100644 --- a/packages/effect/test/Channel/environment.test.ts +++ b/packages/effect/test/Channel/environment.test.ts @@ -44,8 +44,8 @@ export const isNumberService = (u: unknown): u is NumberService => { describe("Channel", () => { it.effect("provide - simple", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( NumberService, Channel.provideService(NumberService, new NumberServiceImpl(100)), Channel.run @@ -54,8 +54,8 @@ describe("Channel", () => { })) it.effect("provide -> zip -> provide", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( NumberService, Channel.provideService(NumberService, new NumberServiceImpl(100)), Channel.zip( @@ -70,8 +70,8 @@ describe("Channel", () => { })) it.effect("concatMap(provide).provide", () => - Effect.gen(function*($) { - const [chunk, value] = yield* $( + Effect.gen(function*() { + const [chunk, value] = yield* pipe( Channel.fromEffect(NumberService), Channel.emitCollect, Channel.mapOut((tuple) => tuple[1]), @@ -91,7 +91,7 @@ describe("Channel", () => { })) it.effect("provide is modular", () => - Effect.gen(function*($) { + Effect.gen(function*() { const channel1 = Channel.fromEffect(NumberService) const channel2 = pipe( NumberService, @@ -99,7 +99,7 @@ describe("Channel", () => { Channel.fromEffect ) const channel3 = Channel.fromEffect(NumberService) - const [[result1, result2], result3] = yield* $( + const [[result1, result2], result3] = yield* pipe( channel1, Channel.zip(channel2), Channel.zip(channel3), diff --git a/packages/effect/test/Channel/error-handling.test.ts b/packages/effect/test/Channel/error-handling.test.ts index 5457ed3d41..1d857c90a2 100644 --- a/packages/effect/test/Channel/error-handling.test.ts +++ b/packages/effect/test/Channel/error-handling.test.ts @@ -10,7 +10,7 @@ import { describe } from "vitest" describe("Channel", () => { it.effect("catchAll - structure confusion", () => - Effect.gen(function*($) { + Effect.gen(function*() { const channel = pipe( Channel.write(8), Channel.catchAll(() => @@ -21,20 +21,20 @@ describe("Channel", () => { ), Channel.concatMap(() => Channel.fail("error2")) ) - const result = yield* $(Effect.exit(Channel.runCollect(channel))) + const result = yield* (Effect.exit(Channel.runCollect(channel))) deepStrictEqual(result, Exit.fail("error2")) })) it.effect("error cause is propagated on channel interruption", () => - Effect.gen(function*($) { - const deferred = yield* $(Deferred.make()) - const finished = yield* $(Deferred.make()) - const ref = yield* $(Ref.make>(Exit.void)) + Effect.gen(function*() { + const deferred = yield* (Deferred.make()) + const finished = yield* (Deferred.make()) + const ref = yield* (Ref.make>(Exit.void)) const effect = pipe( Deferred.succeed(deferred, void 0), Effect.zipRight(Effect.never) ) - yield* $( + yield* pipe( Channel.fromEffect(effect), Channel.runDrain, Effect.onExit((exit) => Ref.set(ref, exit as Exit.Exit)), @@ -42,15 +42,15 @@ describe("Channel", () => { Effect.race(Deferred.await(deferred)), Effect.either ) - yield* $(Deferred.await(finished)) // Note: interruption in race is now done in the background - const result = yield* $(Ref.get(ref)) + yield* (Deferred.await(finished)) // Note: interruption in race is now done in the background + const result = yield* (Ref.get(ref)) assertTrue(Exit.isInterrupted(result)) })) it.effect("scoped failures", () => - Effect.gen(function*($) { + Effect.gen(function*() { const channel = Channel.scoped(Effect.fail("error")) - const result = yield* $(Channel.runCollect(channel), Effect.exit) + const result = yield* pipe(Channel.runCollect(channel), Effect.exit) deepStrictEqual(result, Exit.fail("error")) })) }) diff --git a/packages/effect/test/Channel/finalization.test.ts b/packages/effect/test/Channel/finalization.test.ts index 355e32eff8..e26aacd446 100644 --- a/packages/effect/test/Channel/finalization.test.ts +++ b/packages/effect/test/Channel/finalization.test.ts @@ -23,8 +23,8 @@ const Second = (first: First): Second => ({ _tag: "Second", first }) describe("Channel", () => { it.effect("ensuring - prompt closure between continuations", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make>([])) + Effect.gen(function*() { + const ref = yield* (Ref.make>([])) const event = (label: string) => Ref.update(ref, (array) => [...array, label]) const channel = pipe( Channel.fromEffect(event("Acquire1")), @@ -37,7 +37,7 @@ describe("Channel", () => { ) ) ) - const result = yield* $(Channel.runDrain(channel), Effect.zipRight(Ref.get(ref))) + const result = yield* pipe(Channel.runDrain(channel), Effect.zipRight(Ref.get(ref))) deepStrictEqual(result, [ "Acquire1", "Release11", @@ -48,8 +48,8 @@ describe("Channel", () => { })) it.effect("ensuring - last finalizers are deferred to the scope", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make>([])) + Effect.gen(function*() { + const ref = yield* (Ref.make>([])) function event(label: string) { return Ref.update(ref, (array) => [...array, label]) } @@ -65,7 +65,7 @@ describe("Channel", () => { ), Channel.ensuring(event("ReleaseOuter")) ) - const [eventsInScope, eventsOutsideScope] = yield* $( + const [eventsInScope, eventsOutsideScope] = yield* pipe( Channel.toPull(channel), Effect.flatMap((pull) => pipe(Effect.exit(pull), Effect.zipRight(Ref.get(ref)))), Effect.scoped, @@ -88,8 +88,8 @@ describe("Channel", () => { })) it.effect("ensuring - mixture of concatMap and ensuring", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make>([])) + Effect.gen(function*() { + const ref = yield* (Ref.make>([])) const event = (label: string) => Ref.update(ref, (array) => [...array, label]) const channel = pipe( Channel.writeAll(1, 2, 3), @@ -109,7 +109,7 @@ describe("Channel", () => { ), Channel.ensuring(event("Second concatMap")) ) - const [[elements], events] = yield* $( + const [[elements], events] = yield* pipe( Channel.runCollect(channel), Effect.zip(Ref.get(ref)) ) @@ -132,8 +132,8 @@ describe("Channel", () => { })) it.effect("ensuring - finalizer ordering 2", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make>([])) + Effect.gen(function*() { + const ref = yield* (Ref.make>([])) const event = (label: string) => Ref.update(ref, (array) => [...array, label]) const channel = pipe( Channel.writeAll(1, 2), @@ -145,8 +145,8 @@ describe("Channel", () => { ) ) ) - yield* $(Channel.runDrain(channel)) - const result = yield* $(Ref.get(ref)) + yield* (Channel.runDrain(channel)) + const result = yield* (Ref.get(ref)) deepStrictEqual(Array.from(result), [ "pulled 1", "close 1", @@ -156,8 +156,8 @@ describe("Channel", () => { })) it.effect("ensuring - finalizer failure is propagated", () => - Effect.gen(function*(_) { - const result = yield* _( + Effect.gen(function*() { + const result = yield* pipe( Channel.void, Channel.ensuring(Effect.dieMessage("die")), Channel.ensuring(Effect.void), diff --git a/packages/effect/test/Channel/foreign.test.ts b/packages/effect/test/Channel/foreign.test.ts index fc153aa672..10cc6fff30 100644 --- a/packages/effect/test/Channel/foreign.test.ts +++ b/packages/effect/test/Channel/foreign.test.ts @@ -1,10 +1,4 @@ -import * as Channel from "effect/Channel" -import * as Context from "effect/Context" -import * as Effect from "effect/Effect" -import * as Either from "effect/Either" -import * as Exit from "effect/Exit" -import * as Option from "effect/Option" -import * as Random from "effect/Random" +import { Channel, Context, Effect, Either, Exit, Option, pipe, Random } from "effect" import { strictEqual } from "effect/test/util" import * as it from "effect/test/utils/extend" import { unify } from "effect/Unify" @@ -12,21 +6,21 @@ import { describe } from "vitest" describe("Channel.Foreign", () => { it.effect("Tag", () => - Effect.gen(function*($) { + Effect.gen(function*() { const tag = Context.GenericTag("number") - const result = yield* $(tag, Channel.run, Effect.provideService(tag, 10)) + const result = yield* pipe(tag, Channel.run, Effect.provideService(tag, 10)) strictEqual(result, 10) })) it.effect("Unify", () => - Effect.gen(function*($) { - const unifiedEffect = unify((yield* $(Random.nextInt)) > 1 ? Effect.succeed(0) : Effect.fail(1)) - const unifiedExit = unify((yield* $(Random.nextInt)) > 1 ? Exit.succeed(0) : Exit.fail(1)) - const unifiedEither = unify((yield* $(Random.nextInt)) > 1 ? Either.right(0) : Either.left(1)) - const unifiedOption = unify((yield* $(Random.nextInt)) > 1 ? Option.some(0) : Option.none()) - strictEqual(yield* $(Channel.run(unifiedEffect)), 0) - strictEqual(yield* $(Channel.run(unifiedExit)), 0) - strictEqual(yield* $(Channel.run(unifiedEither)), 0) - strictEqual(yield* $(Channel.run(unifiedOption)), 0) + Effect.gen(function*() { + const unifiedEffect = unify((yield* (Random.nextInt)) > 1 ? Effect.succeed(0) : Effect.fail(1)) + const unifiedExit = unify((yield* (Random.nextInt)) > 1 ? Exit.succeed(0) : Exit.fail(1)) + const unifiedEither = unify((yield* (Random.nextInt)) > 1 ? Either.right(0) : Either.left(1)) + const unifiedOption = unify((yield* (Random.nextInt)) > 1 ? Option.some(0) : Option.none()) + strictEqual(yield* (Channel.run(unifiedEffect)), 0) + strictEqual(yield* (Channel.run(unifiedExit)), 0) + strictEqual(yield* (Channel.run(unifiedEither)), 0) + strictEqual(yield* (Channel.run(unifiedOption)), 0) })) }) diff --git a/packages/effect/test/Channel/interruption.test.ts b/packages/effect/test/Channel/interruption.test.ts index de46217ff9..040d661583 100644 --- a/packages/effect/test/Channel/interruption.test.ts +++ b/packages/effect/test/Channel/interruption.test.ts @@ -10,11 +10,11 @@ import { describe } from "vitest" describe("Channel", () => { it.effect("interruptWhen - interrupts the current element", () => - Effect.gen(function*($) { - const interrupted = yield* $(Ref.make(false)) - const latch = yield* $(Deferred.make()) - const halt = yield* $(Deferred.make()) - const started = yield* $(Deferred.make()) + Effect.gen(function*() { + const interrupted = yield* (Ref.make(false)) + const latch = yield* (Deferred.make()) + const halt = yield* (Deferred.make()) + const started = yield* (Deferred.make()) const channel = pipe( Deferred.succeed(started, void 0), Effect.zipRight(Deferred.await(latch)), @@ -22,34 +22,34 @@ describe("Channel", () => { Channel.fromEffect, Channel.interruptWhen(Deferred.await(halt)) ) - const fiber = yield* $(Effect.fork(Channel.runDrain(channel))) - yield* $( + const fiber = yield* (Effect.fork(Channel.runDrain(channel))) + yield* pipe( Deferred.await(started), Effect.zipRight(Deferred.succeed(halt, void 0)) ) - yield* $(Fiber.await(fiber)) - const result = yield* $(Ref.get(interrupted)) + yield* (Fiber.await(fiber)) + const result = yield* (Ref.get(interrupted)) assertTrue(result) })) it.effect("interruptWhen - propagates errors", () => - Effect.gen(function*($) { - const deferred = yield* $(Deferred.make()) + Effect.gen(function*() { + const deferred = yield* (Deferred.make()) const channel = pipe( Channel.fromEffect(Effect.never), Channel.interruptWhen(Deferred.await(deferred)) ) - yield* $(Deferred.fail(deferred, "fail")) - const result = yield* $(Effect.either(Channel.runDrain(channel))) + yield* (Deferred.fail(deferred, "fail")) + const result = yield* (Effect.either(Channel.runDrain(channel))) assertLeft(result, "fail") })) it.effect("interruptWhenDeferred - interrupts the current element", () => - Effect.gen(function*($) { - const interrupted = yield* $(Ref.make(false)) - const latch = yield* $(Deferred.make()) - const halt = yield* $(Deferred.make()) - const started = yield* $(Deferred.make()) + Effect.gen(function*() { + const interrupted = yield* (Ref.make(false)) + const latch = yield* (Deferred.make()) + const halt = yield* (Deferred.make()) + const started = yield* (Deferred.make()) const channel = pipe( Deferred.succeed(started, void 0), Effect.zipRight(Deferred.await(latch)), @@ -57,31 +57,31 @@ describe("Channel", () => { Channel.fromEffect, Channel.interruptWhenDeferred(halt) ) - const fiber = yield* $(Effect.fork(Channel.runDrain(channel))) - yield* $( + const fiber = yield* (Effect.fork(Channel.runDrain(channel))) + yield* pipe( Deferred.await(started), Effect.zipRight(Deferred.succeed(halt, void 0)) ) - yield* $(Fiber.await(fiber)) - const result = yield* $(Ref.get(interrupted)) + yield* (Fiber.await(fiber)) + const result = yield* (Ref.get(interrupted)) assertTrue(result) })) it.effect("interruptWhenDeferred - propagates errors", () => - Effect.gen(function*($) { - const deferred = yield* $(Deferred.make()) + Effect.gen(function*() { + const deferred = yield* (Deferred.make()) const channel = pipe( Channel.fromEffect(Effect.never), Channel.interruptWhenDeferred(deferred) ) - yield* $(Deferred.fail(deferred, "fail")) - const result = yield* $(Effect.either(Channel.runDrain(channel))) + yield* (Deferred.fail(deferred, "fail")) + const result = yield* (Effect.either(Channel.runDrain(channel))) assertLeft(result, "fail") })) it.effect("runScoped - in uninterruptible region", () => - Effect.gen(function*(_) { - const result = yield* _(Effect.uninterruptible(Channel.run(Channel.void))) + Effect.gen(function*() { + const result = yield* Effect.uninterruptible(Channel.run(Channel.void)) strictEqual(result, undefined) })) }) diff --git a/packages/effect/test/Channel/mapping.test.ts b/packages/effect/test/Channel/mapping.test.ts index d6c971ff28..bf3633aa43 100644 --- a/packages/effect/test/Channel/mapping.test.ts +++ b/packages/effect/test/Channel/mapping.test.ts @@ -29,8 +29,8 @@ const Second = (first: First): Second => ({ _tag: "Second", first }) describe("Channel", () => { it.effect("map", () => - Effect.gen(function*($) { - const [chunk, value] = yield* $( + Effect.gen(function*() { + const [chunk, value] = yield* pipe( Channel.succeed(1), Channel.map((n) => n + 1), Channel.runCollect @@ -40,8 +40,8 @@ describe("Channel", () => { })) it.effect("mapError - structure confusion", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Channel.fail("error"), Channel.mapError(() => 1), Channel.runCollect, @@ -51,8 +51,8 @@ describe("Channel", () => { })) it.effect("mapOut - simple", () => - Effect.gen(function*($) { - const [chunk, value] = yield* $( + Effect.gen(function*() { + const [chunk, value] = yield* pipe( Channel.writeAll(1, 2, 3), Channel.mapOut((n) => n + 1), Channel.runCollect @@ -62,8 +62,8 @@ describe("Channel", () => { })) it.effect("mapOut - mixed with flatMap", () => - Effect.gen(function*($) { - const [chunk, value] = yield* $( + Effect.gen(function*() { + const [chunk, value] = yield* pipe( Channel.write(1), Channel.mapOut((n) => `${n}`), Channel.flatMap(() => Channel.write("x")), @@ -74,8 +74,8 @@ describe("Channel", () => { })) it.effect("concatMap - plain", () => - Effect.gen(function*($) { - const [result] = yield* $( + Effect.gen(function*() { + const [result] = yield* pipe( Channel.writeAll(1, 2, 3), Channel.concatMap((i) => Channel.writeAll(i, i)), Channel.runCollect @@ -84,8 +84,8 @@ describe("Channel", () => { })) it.effect("concatMap - complex", () => - Effect.gen(function*($) { - const [result] = yield* $( + Effect.gen(function*() { + const [result] = yield* pipe( Channel.writeAll(1, 2), Channel.concatMap((i) => Channel.writeAll(i, i)), Channel.mapOut(First), @@ -106,7 +106,7 @@ describe("Channel", () => { })) it.effect("concatMap - read from inner channel", () => - Effect.gen(function*($) { + Effect.gen(function*() { const source = Channel.writeAll(1, 2, 3, 4) const reader = pipe( Channel.read(), @@ -116,7 +116,7 @@ describe("Channel", () => { Channel.writeAll(void 0, void 0), Channel.concatMap(() => pipe(reader, Channel.flatMap(() => reader))) ) - const [result] = yield* $( + const [result] = yield* pipe( source, Channel.pipeTo(readers), Channel.runCollect @@ -125,8 +125,8 @@ describe("Channel", () => { })) it.effect("concatMap - downstream failure", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Channel.write(0), Channel.concatMap(() => Channel.fail("error")), Channel.runCollect, @@ -136,8 +136,8 @@ describe("Channel", () => { })) it.effect("concatMap - upstream acquireReleaseOut + downstream failure", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make>([])) + Effect.gen(function*() { + const ref = yield* (Ref.make>([])) const event = (label: string) => Ref.update(ref, (array) => [...array, label]) const effect = pipe( Channel.acquireReleaseOut(event("Acquired"), () => event("Released")), @@ -145,14 +145,14 @@ describe("Channel", () => { Channel.runDrain, Effect.exit ) - const [exit, events] = yield* $(effect, Effect.zip(Ref.get(ref))) + const [exit, events] = yield* pipe(effect, Effect.zip(Ref.get(ref))) deepStrictEqual(exit, Exit.fail("error")) deepStrictEqual(events, ["Acquired", "Released"]) })) it.effect("concatMap - multiple concatMaps with failure in first", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Channel.write(void 0), Channel.concatMap(() => Channel.write(Channel.fail("error"))), Channel.concatMap((e) => e), @@ -163,8 +163,8 @@ describe("Channel", () => { })) it.effect("concatMap - with failure then flatMap", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Channel.write(void 0), Channel.concatMap(() => Channel.fail("error")), Channel.flatMap(() => Channel.write(void 0)), @@ -175,8 +175,8 @@ describe("Channel", () => { })) it.effect("concatMap - multiple concatMaps with failure in first and catchAll in second", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Channel.write(void 0), Channel.concatMap(() => Channel.write(Channel.fail("error"))), Channel.concatMap(Channel.catchAllCause(() => Channel.fail("error2"))), @@ -187,8 +187,8 @@ describe("Channel", () => { })) it.effect("concatMap - done value combination", () => - Effect.gen(function*($) { - const [chunk, [array1, array2]] = yield* $( + Effect.gen(function*() { + const [chunk, [array1, array2]] = yield* pipe( Channel.writeAll(1, 2, 3), Channel.as(["Outer-0"]), Channel.concatMapWith( @@ -204,8 +204,8 @@ describe("Channel", () => { })) it.effect("concatMap - custom 1", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Channel.writeAll(1, 2, 3, 4), Channel.concatMapWithCustom( (x) => @@ -253,8 +253,8 @@ describe("Channel", () => { })) it.effect("concatMap - custom 2", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Channel.writeAll(1, 2, 3, 4), Channel.concatMapWithCustom( (x) => diff --git a/packages/effect/test/Channel/merging.test.ts b/packages/effect/test/Channel/merging.test.ts index de75937e2a..11b3d9ae3d 100644 --- a/packages/effect/test/Channel/merging.test.ts +++ b/packages/effect/test/Channel/merging.test.ts @@ -12,8 +12,8 @@ import { describe } from "vitest" describe("Channel", () => { it.effect("mergeWith - simple merge", () => - Effect.gen(function*($) { - const [chunk, value] = yield* $( + Effect.gen(function*() { + const [chunk, value] = yield* pipe( Channel.writeAll(1, 2, 3), Channel.mergeWith({ other: Channel.writeAll(4, 5, 6), @@ -28,7 +28,7 @@ describe("Channel", () => { })) it.effect("mergeWith - merge with different types", () => - Effect.gen(function*($) { + Effect.gen(function*() { const left = pipe( Channel.write(1), Channel.zipRight( @@ -57,7 +57,7 @@ describe("Channel", () => { ) ) ) - const [chunk, value] = yield* $( + const [chunk, value] = yield* pipe( left, Channel.mergeWith({ other: right, @@ -74,7 +74,7 @@ describe("Channel", () => { })) it.effect("mergeWith - handles polymorphic failures", () => - Effect.gen(function*($) { + Effect.gen(function*() { const left = pipe( Channel.write(1), Channel.zipRight(pipe(Channel.fail("boom"), Channel.as(true))) @@ -83,7 +83,7 @@ describe("Channel", () => { Channel.write(2), Channel.zipRight(pipe(Channel.fail(true), Channel.as(true))) ) - const result = yield* $( + const result = yield* pipe( left, Channel.mergeWith({ other: right, @@ -117,9 +117,9 @@ describe("Channel", () => { })) it.effect("mergeWith - interrupts losing side", () => - Effect.gen(function*($) { - const latch = yield* $(Deferred.make()) - const interrupted = yield* $(Ref.make(false)) + Effect.gen(function*() { + const latch = yield* (Deferred.make()) + const interrupted = yield* (Ref.make(false)) const left = Channel.zipRight( Channel.write(1), pipe( @@ -143,7 +143,7 @@ describe("Channel", () => { Effect.flatMap((isInterrupted) => isInterrupted ? Effect.void : Effect.fail(void 0)) )) }) - const result = yield* $(Effect.exit(Channel.runDrain(merged))) + const result = yield* (Effect.exit(Channel.runDrain(merged))) deepStrictEqual(result, Exit.succeed(void 0)) })) }) diff --git a/packages/effect/test/Channel/reading.test.ts b/packages/effect/test/Channel/reading.test.ts index a30a752da3..ff3b858b39 100644 --- a/packages/effect/test/Channel/reading.test.ts +++ b/packages/effect/test/Channel/reading.test.ts @@ -63,7 +63,7 @@ export const refReader = ( describe("Channel", () => { it.effect("simple reads", () => - Effect.gen(function*($) { + Effect.gen(function*() { class Whatever implements Equal.Equal { constructor(readonly i: number) {} [Hash.symbol](): number { @@ -90,7 +90,7 @@ describe("Channel", () => { ) ) ) - const result = yield* $(Channel.runCollect(channel)) + const result = yield* (Channel.runCollect(channel)) const [chunk, value] = result deepStrictEqual(Chunk.toReadonlyArray(chunk), [ new Whatever(1), @@ -102,7 +102,7 @@ describe("Channel", () => { })) it.effect("read pipelining", () => - Effect.gen(function*($) { + Effect.gen(function*() { const innerChannel = pipe( Channel.fromEffect(Ref.make>([])), Channel.flatMap((ref) => { @@ -131,14 +131,14 @@ describe("Channel", () => { Channel.pipeTo(pipe(mapper(g), Channel.concatMap((ns) => Channel.writeAll(...ns)), Channel.asVoid)), Channel.pipeTo(innerChannel) ) - const [chunk, list] = yield* $(Channel.runCollect(channel)) + const [chunk, list] = yield* (Channel.runCollect(channel)) deepStrictEqual(Chunk.toReadonlyArray(chunk), [1, 1, 2, 2]) deepStrictEqual(list, [1, 1, 2, 2]) })) it.effect("read pipelining 2", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make>([])) + Effect.gen(function*() { + const ref = yield* (Ref.make>([])) const intProducer: Channel.Channel = Channel.writeAll( 1, 2, @@ -178,13 +178,13 @@ describe("Channel", () => { ) ) ) - const result = yield* $(Channel.run(channel), Effect.zipRight(Ref.get(ref))) + const result = yield* pipe(Channel.run(channel), Effect.zipRight(Ref.get(ref))) deepStrictEqual(result, [3, 7]) })) it.effect("reading with resources", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make>([])) + Effect.gen(function*() { + const ref = yield* (Ref.make>([])) const event = (label: string) => Ref.update(ref, (array) => [...array, label]) const left = pipe( Channel.acquireReleaseOut( @@ -215,7 +215,7 @@ describe("Channel", () => { Channel.catchAll(() => Channel.void) ) const channel = pipe(left, Channel.pipeTo(right)) - const result = yield* $(Channel.runDrain(channel), Effect.zipRight(Ref.get(ref))) + const result = yield* pipe(Channel.runDrain(channel), Effect.zipRight(Ref.get(ref))) deepStrictEqual(result, [ "Acquire outer", "Acquire 1", @@ -229,11 +229,11 @@ describe("Channel", () => { })) it.effect("simple concurrent reads", () => - Effect.gen(function*($) { + Effect.gen(function*() { const capacity = 128 - const elements = yield* $(Effect.replicateEffect(Random.nextInt, capacity)) - const source = yield* $(Ref.make(Array.fromIterable(elements))) - const destination = yield* $(Ref.make>([])) + const elements = yield* (Effect.replicateEffect(Random.nextInt, capacity)) + const source = yield* (Ref.make(Array.fromIterable(elements))) + const destination = yield* (Ref.make>([])) const twoWriters = pipe( refWriter(destination), Channel.mergeWith({ @@ -242,7 +242,7 @@ describe("Channel", () => { onOtherDone: () => MergeDecision.AwaitConst(Effect.void) }) ) - const [missing, surplus] = yield* $( + const [missing, surplus] = yield* pipe( refReader(source), Channel.pipeTo(twoWriters), Channel.mapEffect(() => Ref.get(destination)), @@ -265,12 +265,12 @@ describe("Channel", () => { })) it.effect("nested concurrent reads", () => - Effect.gen(function*($) { + Effect.gen(function*() { const capacity = 128 const f = (n: number) => n + 1 - const elements = yield* $(Effect.replicateEffect(Random.nextInt, capacity)) - const source = yield* $(Ref.make(Array.fromIterable(elements))) - const destination = yield* $(Ref.make>([])) + const elements = yield* (Effect.replicateEffect(Random.nextInt, capacity)) + const source = yield* (Ref.make(Array.fromIterable(elements))) + const destination = yield* (Ref.make>([])) const twoWriters = pipe( mapper(f), Channel.pipeTo(refWriter(destination)), @@ -280,7 +280,7 @@ describe("Channel", () => { onOtherDone: () => MergeDecision.AwaitConst(Effect.void) }) ) - const [missing, surplus] = yield* $( + const [missing, surplus] = yield* pipe( refReader(source), Channel.pipeTo(twoWriters), Channel.mapEffect(() => Ref.get(destination)), diff --git a/packages/effect/test/Channel/scoping.test.ts b/packages/effect/test/Channel/scoping.test.ts index 87accb70e9..a72e4981d9 100644 --- a/packages/effect/test/Channel/scoping.test.ts +++ b/packages/effect/test/Channel/scoping.test.ts @@ -13,11 +13,11 @@ import { describe } from "vitest" describe("Channel", () => { it.it("acquireUseReleaseOut - acquire is executed uninterruptibly", async () => { const latch = Deferred.unsafeMake(FiberId.none) - const program = Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) + const program = Effect.gen(function*() { + const ref = yield* (Ref.make(0)) const acquire = Effect.zipRight(Ref.update(ref, (n) => n + 1), Effect.yieldNow()) const release = Ref.update(ref, (n) => n - 1) - yield* $( + yield* pipe( Channel.acquireReleaseOut(acquire, () => release), Channel.as(Channel.fromEffect(Deferred.await(latch))), Channel.runDrain, @@ -25,7 +25,7 @@ describe("Channel", () => { Effect.flatMap((fiber) => pipe(Effect.yieldNow(), Effect.zipRight(Fiber.interrupt(fiber)))), Effect.repeatN(1_000) ) - return yield* $(Ref.get(ref)) + return yield* (Ref.get(ref)) }) const result = await Effect.runPromise(program) await Effect.runPromise(Deferred.succeed(latch, void 0)) @@ -34,19 +34,19 @@ describe("Channel", () => { it.it("scoped closes the scope", async () => { const latch = Deferred.unsafeMake(FiberId.none) - const program = Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) + const program = Effect.gen(function*() { + const ref = yield* (Ref.make(0)) const acquire = Effect.zipRight(Ref.update(ref, (n) => n + 1), Effect.yieldNow()) const release = () => Ref.update(ref, (n) => n - 1) const scoped = Effect.acquireRelease(acquire, release) - yield* $( + yield* pipe( Channel.unwrapScoped(pipe(scoped, Effect.as(Channel.fromEffect(Deferred.await(latch))))), Channel.runDrain, Effect.fork, Effect.flatMap((fiber) => pipe(Effect.yieldNow(), Effect.zipRight(Fiber.interrupt(fiber)))), Effect.repeatN(1_000) ) - return yield* $(Ref.get(ref)) + return yield* (Ref.get(ref)) }) const result = await Effect.runPromise(program) await Effect.runPromise(Deferred.succeed(latch, void 0)) @@ -54,8 +54,8 @@ describe("Channel", () => { }, 35_000) it.effect("finalizer failure is propagated", () => - Effect.gen(function*($) { - const exit = yield* $( + Effect.gen(function*() { + const exit = yield* pipe( Channel.void, Channel.ensuring(Effect.die("ok")), Channel.ensuring(Effect.void), diff --git a/packages/effect/test/Channel/sequencing.test.ts b/packages/effect/test/Channel/sequencing.test.ts index efa4747a7b..08388d0454 100644 --- a/packages/effect/test/Channel/sequencing.test.ts +++ b/packages/effect/test/Channel/sequencing.test.ts @@ -9,7 +9,7 @@ import { describe } from "vitest" describe("Channel", () => { it.effect("flatMap - simple", () => - Effect.gen(function*($) { + Effect.gen(function*() { const channel = pipe( Channel.succeed(1), Channel.flatMap((x) => @@ -24,19 +24,19 @@ describe("Channel", () => { ) ) ) - const [chunk, value] = yield* $(Channel.runCollect(channel)) + const [chunk, value] = yield* (Channel.runCollect(channel)) assertTrue(Chunk.isEmpty(chunk)) strictEqual(value, 6) })) it.effect("flatMap - structure confusion", () => - Effect.gen(function*($) { + Effect.gen(function*() { const channel = pipe( Channel.write(Chunk.make(1, 2)), Channel.concatMap(Channel.writeAll), Channel.zipRight(Channel.fail("hello")) ) - const result = yield* $(Effect.exit(Channel.runDrain(channel))) + const result = yield* (Effect.exit(Channel.runDrain(channel))) deepStrictEqual(result, Exit.fail("hello")) })) }) diff --git a/packages/effect/test/Channel/stack-safety.test.ts b/packages/effect/test/Channel/stack-safety.test.ts index 4acae6a573..a12e40fdf5 100644 --- a/packages/effect/test/Channel/stack-safety.test.ts +++ b/packages/effect/test/Channel/stack-safety.test.ts @@ -8,9 +8,9 @@ import { describe } from "vitest" describe("Channel", () => { it.effect("mapOut is stack safe", () => - Effect.gen(function*($) { + Effect.gen(function*() { const N = 10_000 - const [chunk, value] = yield* $( + const [chunk, value] = yield* pipe( Chunk.range(1, N), Chunk.reduce( Channel.write(1), @@ -27,9 +27,9 @@ describe("Channel", () => { }), 20_000) it.effect("concatMap is stack safe", () => - Effect.gen(function*($) { + Effect.gen(function*() { const N = 10_000 - const [chunk, value] = yield* $( + const [chunk, value] = yield* pipe( Chunk.range(1, N), Chunk.reduce( Channel.write(1), @@ -47,9 +47,9 @@ describe("Channel", () => { }), 20_000) it.effect("flatMap is stack safe", () => - Effect.gen(function*($) { + Effect.gen(function*() { const N = 10_000 - const [chunk, value] = yield* $( + const [chunk, value] = yield* pipe( Chunk.range(1, N), Chunk.reduce( Channel.write(0), diff --git a/packages/effect/test/Deferred.test.ts b/packages/effect/test/Deferred.test.ts index 9076dad090..d185ddb362 100644 --- a/packages/effect/test/Deferred.test.ts +++ b/packages/effect/test/Deferred.test.ts @@ -1,156 +1,146 @@ -import { Deferred, Effect, Exit, Option, Ref } from "effect" +import { Deferred, Effect, Exit, Option, pipe, Ref } from "effect" import { assertFalse, assertTrue, deepStrictEqual, strictEqual } from "effect/test/util" import * as it from "effect/test/utils/extend" import { describe } from "vitest" describe("Deferred", () => { it.effect("complete a deferred using succeed", () => - Effect.gen(function*($) { - const deferred = yield* $(Deferred.make()) - const success = yield* $(Deferred.succeed(deferred, 32)) - const result = yield* $(Deferred.await(deferred)) + Effect.gen(function*() { + const deferred = yield* Deferred.make() + const success = yield* Deferred.succeed(deferred, 32) + const result = yield* Deferred.await(deferred) assertTrue(success) strictEqual(result, 32) })) it.effect("complete a deferred using complete", () => - Effect.gen(function*($) { - const deferred = yield* $(Deferred.make()) - const ref = yield* $(Ref.make(13)) - yield* $(Deferred.complete(deferred, Ref.updateAndGet(ref, (n) => n + 1))) - const result1 = yield* $(Deferred.await(deferred)) - const result2 = yield* $(Deferred.await(deferred)) + Effect.gen(function*() { + const deferred = yield* Deferred.make() + const ref = yield* Ref.make(13) + yield* Deferred.complete(deferred, Ref.updateAndGet(ref, (n) => n + 1)) + const result1 = yield* Deferred.await(deferred) + const result2 = yield* Deferred.await(deferred) strictEqual(result1, 14) strictEqual(result2, 14) })) it.effect("complete a deferred using completeWith", () => - Effect.gen(function*($) { - const deferred = yield* $(Deferred.make()) - const ref = yield* $(Ref.make(13)) - yield* $(Deferred.completeWith(deferred, Ref.updateAndGet(ref, (n) => n + 1))) - const result1 = yield* $(Deferred.await(deferred)) - const result2 = yield* $(Deferred.await(deferred)) + Effect.gen(function*() { + const deferred = yield* Deferred.make() + const ref = yield* Ref.make(13) + yield* Deferred.completeWith(deferred, Ref.updateAndGet(ref, (n) => n + 1)) + const result1 = yield* Deferred.await(deferred) + const result2 = yield* Deferred.await(deferred) strictEqual(result1, 14) strictEqual(result2, 15) })) it.effect("complete a deferred twice", () => - Effect.gen(function*($) { - const deferred = yield* $(Deferred.make()) - yield* $(Deferred.succeed(deferred, 1)) - const success = yield* $(Deferred.complete(deferred, Effect.succeed(9))) - const result = yield* $(Deferred.await(deferred)) + Effect.gen(function*() { + const deferred = yield* Deferred.make() + yield* Deferred.succeed(deferred, 1) + const success = yield* Deferred.complete(deferred, Effect.succeed(9)) + const result = yield* Deferred.await(deferred) assertFalse(success) strictEqual(result, 1) })) it.effect("fail a deferred using fail", () => - Effect.gen(function*($) { - const deferred = yield* $(Deferred.make()) - const success = yield* $(Deferred.fail(deferred, "error with fail")) - const result = yield* $(deferred, Deferred.await, Effect.exit) + Effect.gen(function*() { + const deferred = yield* Deferred.make() + const success = yield* Deferred.fail(deferred, "error with fail") + const result = yield* pipe(deferred, Deferred.await, Effect.exit) assertTrue(success) assertTrue(Exit.isFailure(result)) })) it.effect("fail a deferred using complete", () => - Effect.gen(function*($) { - const deferred = yield* $(Deferred.make()) - const ref = yield* $(Ref.make(["first error", "second error"])) - const success = yield* $( - Deferred.complete(deferred, Effect.flip(Ref.modify(ref, (as) => [as[0]!, as.slice(1)]))) - ) - const result1 = yield* $(deferred, Deferred.await, Effect.exit) - const result2 = yield* $(deferred, Deferred.await, Effect.exit) + Effect.gen(function*() { + const deferred = yield* Deferred.make() + const ref = yield* Ref.make(["first error", "second error"]) + const success = yield* Deferred.complete(deferred, Effect.flip(Ref.modify(ref, (as) => [as[0]!, as.slice(1)]))) + const result1 = yield* pipe(deferred, Deferred.await, Effect.exit) + const result2 = yield* pipe(deferred, Deferred.await, Effect.exit) assertTrue(success) assertTrue(Exit.isFailure(result1)) assertTrue(Exit.isFailure(result2)) })) it.effect("fail a deferred using completeWith", () => - Effect.gen(function*($) { - const deferred = yield* $(Deferred.make()) - const ref = yield* $(Ref.make(["first error", "second error"])) - const success = yield* $( - Deferred.completeWith( - deferred, - Effect.flip( - Ref.modify(ref, (as) => [as[0]!, as.slice(1)]) - ) + Effect.gen(function*() { + const deferred = yield* Deferred.make() + const ref = yield* Ref.make(["first error", "second error"]) + const success = yield* Deferred.completeWith( + deferred, + Effect.flip( + Ref.modify(ref, (as) => [as[0]!, as.slice(1)]) ) ) - const result1 = yield* $(deferred, Deferred.await, Effect.exit) - const result2 = yield* $(deferred, Deferred.await, Effect.exit) + const result1 = yield* pipe(deferred, Deferred.await, Effect.exit) + const result2 = yield* pipe(deferred, Deferred.await, Effect.exit) assertTrue(success) assertTrue(Exit.isFailure(result1)) assertTrue(Exit.isFailure(result2)) })) it.effect("is done when a deferred is completed", () => - Effect.gen(function*($) { - const deferred = yield* $(Deferred.make()) - yield* $(Deferred.succeed(deferred, 0)) - const result = yield* $(Deferred.isDone(deferred)) + Effect.gen(function*() { + const deferred = yield* Deferred.make() + yield* Deferred.succeed(deferred, 0) + const result = yield* Deferred.isDone(deferred) assertTrue(result) })) it.effect("is done when a deferred is failed", () => - Effect.gen(function*($) { - const deferred = yield* $(Deferred.make()) - yield* $(Deferred.fail(deferred, "failure")) - const result = yield* $(Deferred.isDone(deferred)) + Effect.gen(function*() { + const deferred = yield* Deferred.make() + yield* Deferred.fail(deferred, "failure") + const result = yield* Deferred.isDone(deferred) assertTrue(result) })) it.effect("should interrupt a deferred", () => - Effect.gen(function*($) { - const deferred = yield* $(Deferred.make()) - const result = yield* $(Deferred.interrupt(deferred)) + Effect.gen(function*() { + const deferred = yield* Deferred.make() + const result = yield* Deferred.interrupt(deferred) assertTrue(result) })) it.effect("poll a deferred that is not completed yet", () => - Effect.gen(function*($) { - const deferred = yield* $(Deferred.make()) - const result = yield* $(Deferred.poll(deferred)) + Effect.gen(function*() { + const deferred = yield* Deferred.make() + const result = yield* Deferred.poll(deferred) assertTrue(Option.isNone(result)) })) it.effect("poll a deferred that is completed", () => - Effect.gen(function*($) { - const deferred = yield* $(Deferred.make()) - yield* $(Deferred.succeed(deferred, 12)) - const result = yield* $( - Deferred.poll(deferred).pipe( - Effect.flatMap(Option.match({ - onNone: () => Effect.fail("fail"), - onSome: Effect.succeed - })), - Effect.flatten, - Effect.exit - ) + Effect.gen(function*() { + const deferred = yield* Deferred.make() + yield* Deferred.succeed(deferred, 12) + const result = yield* Deferred.poll(deferred).pipe( + Effect.flatMap(Option.match({ + onNone: () => Effect.fail("fail"), + onSome: Effect.succeed + })), + Effect.flatten, + Effect.exit ) deepStrictEqual(result, Exit.succeed(12)) })) it.effect("poll a deferred that is failed", () => - Effect.gen(function*($) { - const deferred = yield* $(Deferred.make()) - yield* $(Deferred.fail(deferred, "failure")) - const result = yield* $( - Deferred.poll(deferred).pipe( - Effect.flatMap(Option.match({ - onNone: () => Effect.fail("fail"), - onSome: Effect.succeed - })), - Effect.flatten, - Effect.exit - ) + Effect.gen(function*() { + const deferred = yield* Deferred.make() + yield* Deferred.fail(deferred, "failure") + const result = yield* Deferred.poll(deferred).pipe( + Effect.flatMap(Option.match({ + onNone: () => Effect.fail("fail"), + onSome: Effect.succeed + })), + Effect.flatten, + Effect.exit ) assertTrue(Exit.isFailure(result)) })) it.effect("poll a deferred that is interrupted", () => - Effect.gen(function*($) { - const deferred = yield* $(Deferred.make()) - yield* $(Deferred.interrupt(deferred)) - const result = yield* $( - Deferred.poll(deferred).pipe( - Effect.flatMap(Option.match({ - onNone: () => Effect.fail("fail"), - onSome: Effect.succeed - })), - Effect.flatten, - Effect.exit - ) + Effect.gen(function*() { + const deferred = yield* Deferred.make() + yield* Deferred.interrupt(deferred) + const result = yield* Deferred.poll(deferred).pipe( + Effect.flatMap(Option.match({ + onNone: () => Effect.fail("fail"), + onSome: Effect.succeed + })), + Effect.flatten, + Effect.exit ) assertTrue(Exit.isInterrupted(result)) })) diff --git a/packages/effect/test/Effect/acquire-release.test.ts b/packages/effect/test/Effect/acquire-release.test.ts index 3c806769a3..9c3a07e0dc 100644 --- a/packages/effect/test/Effect/acquire-release.test.ts +++ b/packages/effect/test/Effect/acquire-release.test.ts @@ -11,23 +11,23 @@ import { describe } from "vitest" describe("Effect", () => { it.effect("acquireUseRelease - happy path", () => - Effect.gen(function*($) { - const release = yield* $(Ref.make(false)) - const result = yield* $( + Effect.gen(function*() { + const release = yield* (Ref.make(false)) + const result = yield* ( Effect.acquireUseRelease( Effect.succeed(42), (n) => Effect.succeed(n + 1), () => Ref.set(release, true) ) ) - const released = yield* $(Ref.get(release)) + const released = yield* (Ref.get(release)) strictEqual(result, 43) assertTrue(released) })) it.effect("acquireUseRelease - happy path + disconnect", () => - Effect.gen(function*($) { - const release = yield* $(Ref.make(false)) - const result = yield* $( + Effect.gen(function*() { + const release = yield* (Ref.make(false)) + const result = yield* pipe( Effect.acquireUseRelease( Effect.succeed(42), (n) => Effect.succeed(n + 1), @@ -35,14 +35,14 @@ describe("Effect", () => { ), Effect.disconnect ) - const released = yield* $(Ref.get(release)) + const released = yield* (Ref.get(release)) strictEqual(result, 43) assertTrue(released) })) it.effect("acquireUseRelease - error handling", () => - Effect.gen(function*($) { + Effect.gen(function*() { const releaseDied = new Cause.RuntimeException("release died") - const exit = yield* $( + const exit = yield* pipe( Effect.acquireUseRelease( Effect.succeed(42), () => Effect.fail("use failed"), @@ -50,7 +50,7 @@ describe("Effect", () => { ), Effect.exit ) - const result = yield* $( + const result = yield* pipe( exit, Exit.matchEffect({ onFailure: Effect.succeed, onSuccess: () => Effect.fail("effect should have failed") }) ) @@ -58,9 +58,9 @@ describe("Effect", () => { assertTrue(equals(Cause.defects(result), Chunk.of(releaseDied))) })) it.effect("acquireUseRelease - error handling + disconnect", () => - Effect.gen(function*($) { + Effect.gen(function*() { const releaseDied = new Cause.RuntimeException("release died") - const exit = yield* $( + const exit = yield* pipe( Effect.acquireUseRelease( Effect.succeed(42), () => Effect.fail("use failed"), @@ -69,7 +69,7 @@ describe("Effect", () => { Effect.disconnect, Effect.exit ) - const result = yield* $( + const result = yield* pipe( exit, Exit.matchEffect({ onFailure: Effect.succeed, @@ -80,10 +80,10 @@ describe("Effect", () => { assertTrue(equals(Cause.defects(result), Chunk.of(releaseDied))) })) it.effect("acquireUseRelease - beast mode error handling + disconnect", () => - Effect.gen(function*($) { + Effect.gen(function*() { const useDied = new Cause.RuntimeException("use died") - const release = yield* $(Ref.make(false)) - const exit = yield* $( + const release = yield* (Ref.make(false)) + const exit = yield* ( pipe( Effect.acquireUseRelease( Effect.succeed(42), @@ -96,7 +96,7 @@ describe("Effect", () => { Effect.exit ) ) - const result = yield* $( + const result = yield* ( pipe( exit, Exit.matchEffect({ @@ -105,7 +105,7 @@ describe("Effect", () => { }) ) ) - const released = yield* $(Ref.get(release)) + const released = yield* (Ref.get(release)) assertTrue(equals(Cause.defects(result), Chunk.of(useDied))) assertTrue(released) })) diff --git a/packages/effect/test/Effect/applicative.test.ts b/packages/effect/test/Effect/applicative.test.ts index b3a55b9a6f..e8a1153310 100644 --- a/packages/effect/test/Effect/applicative.test.ts +++ b/packages/effect/test/Effect/applicative.test.ts @@ -1,4 +1,4 @@ -import * as Effect from "effect/Effect" +import { Effect, pipe } from "effect" import { assertLeft, strictEqual } from "effect/test/util" import * as it from "effect/test/utils/extend" import { describe } from "vitest" @@ -7,14 +7,14 @@ describe("Effect", () => { const add = (a: number) => (b: number) => a + b it.effect("two successes should succeed", () => - Effect.gen(function*($) { - const result = yield* $(Effect.succeed(add).pipe(Effect.ap(Effect.succeed(1)), Effect.ap(Effect.succeed(2)))) + Effect.gen(function*() { + const result = yield* (Effect.succeed(add).pipe(Effect.ap(Effect.succeed(1)), Effect.ap(Effect.succeed(2)))) strictEqual(result, 3) })) it.effect("one failure in data-last position should fail", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Effect.succeed(add).pipe(Effect.ap(Effect.succeed(1)), Effect.ap(Effect.fail("c"))), Effect.either ) @@ -22,8 +22,8 @@ describe("Effect", () => { })) it.effect("one failure in data-first position should fail", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Effect.succeed(add).pipe(Effect.ap(Effect.fail("b")), Effect.ap(Effect.fail("c"))), Effect.either ) @@ -31,8 +31,8 @@ describe("Effect", () => { })) it.effect("an applicative operation that starts with a failure should fail", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( (Effect.fail("a") as Effect.Effect).pipe( Effect.ap(Effect.succeed(1)), Effect.ap(Effect.succeed(2)) diff --git a/packages/effect/test/Effect/async.test.ts b/packages/effect/test/Effect/async.test.ts index 33353ae4d0..b8d78cbca3 100644 --- a/packages/effect/test/Effect/async.test.ts +++ b/packages/effect/test/Effect/async.test.ts @@ -14,15 +14,15 @@ import { describe, it } from "effect/test/utils/extend" describe("Effect", () => { it.effect("simple async must return", () => - Effect.gen(function*($) { - const result = yield* $(Effect.async((cb) => { + Effect.gen(function*() { + const result = yield* (Effect.async((cb) => { cb(Effect.succeed(42)) })) strictEqual(result, 42) })) it.effect("simple asyncEffect must return", () => - Effect.gen(function*($) { - const result = yield* $(Effect.asyncEffect((resume) => { + Effect.gen(function*() { + const result = yield* (Effect.asyncEffect((resume) => { return Effect.succeed(resume(Effect.succeed(42))) })) strictEqual(result, 42) @@ -31,7 +31,7 @@ describe("Effect", () => { // eslint-disable-next-line @typescript-eslint/no-var-requires const os = require("node:os") it.effect("deep asyncEffect doesn't block", () => - Effect.gen(function*($) { + Effect.gen(function*() { const asyncIO = (cont: Effect.Effect): Effect.Effect => { return Effect.asyncEffect((cb) => { return pipe( @@ -45,15 +45,15 @@ describe("Effect", () => { return count < 0 ? Effect.succeed(42) : asyncIO(stackIOs(count - 1)) } const procNum = Effect.sync(() => os.cpus().length) - const result = yield* $(procNum, Effect.flatMap(stackIOs)) + const result = yield* pipe(procNum, Effect.flatMap(stackIOs)) strictEqual(result, 42) })) } it.effect("interrupt of asyncEffect register", () => - Effect.gen(function*($) { - const release = yield* $(Deferred.make()) - const acquire = yield* $(Deferred.make()) - const fiber = yield* $( + Effect.gen(function*() { + const release = yield* (Deferred.make()) + const acquire = yield* (Deferred.make()) + const fiber = yield* pipe( Effect.asyncEffect(() => // This will never complete because we never call the callback Effect.acquireUseRelease( @@ -66,17 +66,17 @@ describe("Effect", () => { Effect.fork ) - yield* $(Deferred.await(acquire)) - yield* $(Fiber.interruptFork(fiber)) - const result = yield* $(Deferred.await(release)) + yield* (Deferred.await(acquire)) + yield* (Fiber.interruptFork(fiber)) + const result = yield* (Deferred.await(release)) strictEqual(result, undefined) })) it.live("async should not resume fiber twice after interruption", () => - Effect.gen(function*($) { - const step = yield* $(Deferred.make()) - const unexpectedPlace = yield* $(Ref.make(Chunk.empty())) - const runtime = yield* $(Effect.runtime()) - const fiber = yield* $( + Effect.gen(function*() { + const step = yield* (Deferred.make()) + const unexpectedPlace = yield* (Ref.make(Chunk.empty())) + const runtime = yield* (Effect.runtime()) + const fiber = yield* pipe( Effect.async((cb) => { Runtime.runCallback(runtime)(pipe( Deferred.await(step), @@ -90,17 +90,17 @@ describe("Effect", () => { Effect.ensuring(Ref.update(unexpectedPlace, Chunk.prepend(2))), Effect.forkDaemon ) - const result = yield* $(Fiber.interrupt(fiber), Effect.timeout(Duration.seconds(1)), Effect.option) - const unexpected = yield* $(Ref.get(unexpectedPlace)) + const result = yield* pipe(Fiber.interrupt(fiber), Effect.timeout(Duration.seconds(1)), Effect.option) + const unexpected = yield* (Ref.get(unexpectedPlace)) deepStrictEqual(unexpected, Chunk.empty()) assertNone(result) // the timeout should happen })) it.live("async should not resume fiber twice after synchronous result", () => - Effect.gen(function*($) { - const step = yield* $(Deferred.make()) - const unexpectedPlace = yield* $(Ref.make(Chunk.empty())) - const runtime = yield* $(Effect.runtime()) - const fiber = yield* $( + Effect.gen(function*() { + const step = yield* (Deferred.make()) + const unexpectedPlace = yield* (Ref.make(Chunk.empty())) + const runtime = yield* (Effect.runtime()) + const fiber = yield* pipe( Effect.async((resume) => { Runtime.runCallback(runtime)(pipe( Deferred.await(step), @@ -118,20 +118,20 @@ describe("Effect", () => { Effect.uninterruptible, Effect.forkDaemon ) - const result = yield* $(Fiber.interrupt(fiber), Effect.timeout(Duration.seconds(1)), Effect.option) - const unexpected = yield* $(Ref.get(unexpectedPlace)) + const result = yield* pipe(Fiber.interrupt(fiber), Effect.timeout(Duration.seconds(1)), Effect.option) + const unexpected = yield* (Ref.get(unexpectedPlace)) deepStrictEqual(unexpected, Chunk.empty()) assertNone(result) // timeout should happen })) it.effect("sleep 0 must return", () => - Effect.gen(function*($) { - const result = yield* $(Effect.sleep(Duration.zero)) + Effect.gen(function*() { + const result = yield* (Effect.sleep(Duration.zero)) strictEqual(result, undefined) })) it.effect("shallow bind of async chain", () => - Effect.gen(function*($) { + Effect.gen(function*() { const array = Array.from({ length: 10 }, (_, i) => i) - const result = yield* $(array.reduce((acc, _) => + const result = yield* (array.reduce((acc, _) => pipe( acc, Effect.flatMap((n) => @@ -143,8 +143,8 @@ describe("Effect", () => { strictEqual(result, 10) })) it.effect("asyncEffect can fail before registering", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Effect.asyncEffect((_) => { return Effect.fail("ouch") }), @@ -153,8 +153,8 @@ describe("Effect", () => { strictEqual(result, "ouch") })) it.effect("asyncEffect can defect before registering", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Effect.asyncEffect((_) => Effect.sync(() => { throw new Error("ouch") diff --git a/packages/effect/test/Effect/caching.test.ts b/packages/effect/test/Effect/caching.test.ts index a2e2318108..b67f20905e 100644 --- a/packages/effect/test/Effect/caching.test.ts +++ b/packages/effect/test/Effect/caching.test.ts @@ -9,55 +9,55 @@ import { describe } from "vitest" describe("Effect", () => { it.effect("cached - returns new instances after duration", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - const cache = yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + const cache = yield* pipe( Ref.updateAndGet(ref, (n) => n + 1), Effect.cachedWithTTL(Duration.minutes(60)) ) - const a = yield* $(cache) - yield* $(TestClock.adjust(Duration.minutes(59))) - const b = yield* $(cache) - yield* $(TestClock.adjust(Duration.minutes(1))) - const c = yield* $(cache) - yield* $(TestClock.adjust(Duration.minutes(59))) - const d = yield* $(cache) + const a = yield* cache + yield* (TestClock.adjust(Duration.minutes(59))) + const b = yield* cache + yield* (TestClock.adjust(Duration.minutes(1))) + const c = yield* cache + yield* (TestClock.adjust(Duration.minutes(59))) + const d = yield* cache strictEqual(a, b) assertTrue(b !== c) strictEqual(c, d) })) it.effect("cached - correctly handles an infinite duration time to live", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - const cached = yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + const cached = yield* pipe( Ref.modify(ref, (curr) => [curr, curr + 1]), Effect.cachedWithTTL(Duration.infinity) ) - const a = yield* $(cached) - const b = yield* $(cached) - const c = yield* $(cached) + const a = yield* cached + const b = yield* cached + const c = yield* cached strictEqual(a, 0) strictEqual(b, 0) strictEqual(c, 0) })) it.effect("cachedInvalidate - returns new instances after duration", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - const [cached, invalidate] = yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + const [cached, invalidate] = yield* ( pipe( Ref.updateAndGet(ref, (n) => n + 1), Effect.cachedInvalidateWithTTL(Duration.minutes(60)) ) ) - const a = yield* $(cached) - yield* $(TestClock.adjust(Duration.minutes(59))) - const b = yield* $(cached) - yield* $(invalidate) - const c = yield* $(cached) - yield* $(TestClock.adjust(Duration.minutes(1))) - const d = yield* $(cached) - yield* $(TestClock.adjust(Duration.minutes(59))) - const e = yield* $(cached) + const a = yield* cached + yield* (TestClock.adjust(Duration.minutes(59))) + const b = yield* cached + yield* invalidate + const c = yield* cached + yield* (TestClock.adjust(Duration.minutes(1))) + const d = yield* cached + yield* (TestClock.adjust(Duration.minutes(59))) + const e = yield* cached strictEqual(a, b) assertTrue(b !== c) strictEqual(c, d) diff --git a/packages/effect/test/Effect/cause-rendering.test.ts b/packages/effect/test/Effect/cause-rendering.test.ts index 085a619c72..6044481548 100644 --- a/packages/effect/test/Effect/cause-rendering.test.ts +++ b/packages/effect/test/Effect/cause-rendering.test.ts @@ -1,12 +1,12 @@ -import { Cause, Effect, Option } from "effect" +import { Cause, Effect, Option, pipe } from "effect" import { assertFalse, assertTrue, strictEqual } from "effect/test/util" import * as it from "effect/test/utils/extend" import { describe } from "vitest" describe("Effect", () => { it.effect("Cause should include span data", () => - Effect.gen(function*($) { - const cause = yield* $(Effect.flip(Effect.sandbox( + Effect.gen(function*() { + const cause = yield* (Effect.flip(Effect.sandbox( Effect.withSpan("spanB")( Effect.withSpan("spanA")( Effect.fail(new Error("ok")) @@ -20,7 +20,7 @@ describe("Effect", () => { assertTrue(rendered.includes("cause-rendering.test.ts:10:16")) })) it.effect("catchTag should not invalidate traces", () => - Effect.gen(function*($) { + Effect.gen(function*() { class E1 { readonly _tag = "E1" } @@ -36,7 +36,7 @@ describe("Effect", () => { }) ) ).pipe(Effect.catchTag("E2", (e) => Effect.die(e))) - const cause = yield* $(Effect.flip(Effect.sandbox(effect))) + const cause = yield* (Effect.flip(Effect.sandbox(effect))) const rendered = Cause.pretty(cause) assertTrue(rendered.includes("spanA")) assertTrue(rendered.includes("spanB")) @@ -46,7 +46,7 @@ describe("Effect", () => { assertTrue(err === Cause.originalError(obj)) })) it.effect("refail should not invalidate traces", () => - Effect.gen(function*($) { + Effect.gen(function*() { class E1 { readonly _tag = "E1" } @@ -61,13 +61,13 @@ describe("Effect", () => { }) ) ).pipe(Effect.catchAll((e) => Effect.fail(e))) - const cause = yield* $(Effect.flip(Effect.sandbox(effect))) + const cause = yield* (Effect.flip(Effect.sandbox(effect))) const rendered = Cause.pretty(cause) assertTrue(rendered.includes("spanA")) assertTrue(rendered.includes("spanB")) })) it.effect("catchTags should not invalidate traces", () => - Effect.gen(function*($) { + Effect.gen(function*() { class E1 { readonly _tag = "E1" } @@ -82,14 +82,14 @@ describe("Effect", () => { }) ) ).pipe(Effect.catchTags({ E2: (e) => Effect.die(e) })) - const cause = yield* $(Effect.flip(Effect.sandbox(effect))) + const cause = yield* (Effect.flip(Effect.sandbox(effect))) const rendered = Cause.pretty(cause) assertTrue(rendered.includes("spanA")) assertTrue(rendered.includes("spanB")) })) it.effect("shows line where error was created", () => - Effect.gen(function*($) { - const cause = yield* $( + Effect.gen(function*() { + const cause = yield* pipe( Effect.sync(() => { throw new Error("ok") }), diff --git a/packages/effect/test/Effect/collecting.test.ts b/packages/effect/test/Effect/collecting.test.ts index d6c9bbc288..3f26fec617 100644 --- a/packages/effect/test/Effect/collecting.test.ts +++ b/packages/effect/test/Effect/collecting.test.ts @@ -1,6 +1,4 @@ -import * as Cause from "effect/Cause" -import * as Effect from "effect/Effect" -import * as Ref from "effect/Ref" +import { Cause, Effect, pipe, Ref } from "effect" import { deepStrictEqual, notDeepStrictEqual } from "effect/test/util" import * as it from "effect/test/utils/extend" import { describe } from "vitest" @@ -9,16 +7,16 @@ describe("Effect", () => { describe("all", () => { describe("returns results in the same order", () => { it.effect("unbounded", () => - Effect.gen(function*($) { - const result = yield* $(Effect.all([1, 2, 3].map(Effect.succeed), { + Effect.gen(function*() { + const result = yield* (Effect.all([1, 2, 3].map(Effect.succeed), { concurrency: "unbounded" })) deepStrictEqual(Array.from(result), [1, 2, 3]) })) it.effect("concurrency > 1", () => - Effect.gen(function*($) { - const result = yield* $(Effect.all([1, 2, 3].map(Effect.succeed), { + Effect.gen(function*() { + const result = yield* (Effect.all([1, 2, 3].map(Effect.succeed), { concurrency: 2 })) deepStrictEqual(Array.from(result), [1, 2, 3]) @@ -26,17 +24,17 @@ describe("Effect", () => { }) it.effect("is referentially transparent", () => - Effect.gen(function*($) { - const counter = yield* $(Ref.make(0)) + Effect.gen(function*() { + const counter = yield* (Ref.make(0)) const op = Ref.getAndUpdate(counter, (n) => n + 1) const ops3 = Effect.all([op, op, op], { concurrency: "unbounded" }) - const result = yield* $(ops3, Effect.zip(ops3, { concurrent: true })) + const result = yield* pipe(ops3, Effect.zip(ops3, { concurrent: true })) notDeepStrictEqual(Array.from(result[0]), Array.from(result[1])) })) it.effect("preserves failures", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Effect.all(Array.from({ length: 10 }, () => Effect.fail(new Cause.RuntimeException())), { concurrency: 5, discard: true diff --git a/packages/effect/test/Effect/concurrency.test.ts b/packages/effect/test/Effect/concurrency.test.ts index b848738364..fdbb69a747 100644 --- a/packages/effect/test/Effect/concurrency.test.ts +++ b/packages/effect/test/Effect/concurrency.test.ts @@ -25,31 +25,31 @@ const concurrentFib = (n: number): Effect.Effect => { if (n <= 1) { return Effect.succeed(n) } - return Effect.gen(function*($) { - const fiber1 = yield* $(Effect.fork(concurrentFib(n - 1))) - const fiber2 = yield* $(Effect.fork(concurrentFib(n - 2))) - const v1 = yield* $(Fiber.join(fiber1)) - const v2 = yield* $(Fiber.join(fiber2)) + return Effect.gen(function*() { + const fiber1 = yield* (Effect.fork(concurrentFib(n - 1))) + const fiber2 = yield* (Effect.fork(concurrentFib(n - 2))) + const v1 = yield* (Fiber.join(fiber1)) + const v2 = yield* (Fiber.join(fiber2)) return v1 + v2 }) } describe("Effect", () => { it.effect("shallow fork/join identity", () => - Effect.gen(function*($) { - const result = yield* $(Effect.succeed(42), Effect.fork, Effect.flatMap(Fiber.join)) + Effect.gen(function*() { + const result = yield* pipe(Effect.succeed(42), Effect.fork, Effect.flatMap(Fiber.join)) strictEqual(result, 42) })) it.effect("deep fork/join identity", () => - Effect.gen(function*($) { - const result = yield* $(concurrentFib(20)) + Effect.gen(function*() { + const result = yield* (concurrentFib(20)) strictEqual(result, fib(20)) })) it.effect("asyncEffect creation is interruptible", () => - Effect.gen(function*($) { - const release = yield* $(Deferred.make()) - const acquire = yield* $(Deferred.make()) - const fiber = yield* $( + Effect.gen(function*() { + const release = yield* (Deferred.make()) + const acquire = yield* (Deferred.make()) + const fiber = yield* pipe( Effect.asyncEffect((_) => // This will never complete because the callback is never invoked Effect.acquireUseRelease( @@ -60,13 +60,13 @@ describe("Effect", () => { ), Effect.fork ) - yield* $(Deferred.await(acquire)) - yield* $(Fiber.interrupt(fiber)) - const result = yield* $(Deferred.await(release)) + yield* (Deferred.await(acquire)) + yield* (Fiber.interrupt(fiber)) + const result = yield* (Deferred.await(release)) strictEqual(result, 42) })) it.effect("daemon fiber is unsupervised", () => - Effect.gen(function*($) { + Effect.gen(function*() { const child = (ref: Ref.Ref) => { return withLatch((release) => pipe( @@ -76,15 +76,15 @@ describe("Effect", () => { ) ) } - const ref = yield* $(Ref.make(false)) - const fiber1 = yield* $(child(ref), Effect.forkDaemon, Effect.fork) - const fiber2 = yield* $(Fiber.join(fiber1)) - const result = yield* $(Ref.get(ref)) - yield* $(Fiber.interrupt(fiber2)) + const ref = yield* (Ref.make(false)) + const fiber1 = yield* pipe(child(ref), Effect.forkDaemon, Effect.fork) + const fiber2 = yield* (Fiber.join(fiber1)) + const result = yield* (Ref.get(ref)) + yield* (Fiber.interrupt(fiber2)) assertFalse(result) })) it.effect("daemon fiber race interruption", () => - Effect.gen(function*($) { + Effect.gen(function*() { const plus1 = (latch: Deferred.Deferred, finalizer: Effect.Effect) => { return pipe( Deferred.succeed(latch, void 0), @@ -92,29 +92,29 @@ describe("Effect", () => { Effect.onInterrupt(() => pipe(finalizer, Effect.map((x) => x))) ) } - const interruptionRef = yield* $(Ref.make(0)) - const latch1Start = yield* $(Deferred.make()) - const latch2Start = yield* $(Deferred.make()) + const interruptionRef = yield* (Ref.make(0)) + const latch1Start = yield* (Deferred.make()) + const latch2Start = yield* (Deferred.make()) const inc = Ref.updateAndGet(interruptionRef, (n) => n + 1) const left = plus1(latch1Start, inc) const right = plus1(latch2Start, inc) - const fiber = yield* $(left, Effect.race(right), Effect.fork) - yield* $( + const fiber = yield* pipe(left, Effect.race(right), Effect.fork) + yield* ( pipe( Deferred.await(latch1Start), Effect.zipRight(Deferred.await(latch2Start)), Effect.zipRight(Fiber.interrupt(fiber)) ) ) - const result = yield* $(Ref.get(interruptionRef)) + const result = yield* (Ref.get(interruptionRef)) strictEqual(result, 2) })) it.effect("race in daemon is executed", () => - Effect.gen(function*($) { - const latch1 = yield* $(Deferred.make()) - const latch2 = yield* $(Deferred.make()) - const deferred1 = yield* $(Deferred.make()) - const deferred2 = yield* $(Deferred.make()) + Effect.gen(function*() { + const latch1 = yield* (Deferred.make()) + const latch2 = yield* (Deferred.make()) + const deferred1 = yield* (Deferred.make()) + const deferred2 = yield* (Deferred.make()) const loser1 = Effect.acquireUseRelease( Deferred.succeed(latch1, void 0), () => Effect.never, @@ -125,22 +125,22 @@ describe("Effect", () => { () => Effect.never, () => Deferred.succeed(deferred2, void 0) ) - const fiber = yield* $(loser1, Effect.race(loser2), Effect.forkDaemon) - yield* $(Deferred.await(latch1)) - yield* $(Deferred.await(latch2)) - yield* $(Fiber.interrupt(fiber)) - const res1 = yield* $(Deferred.await(deferred1)) - const res2 = yield* $(Deferred.await(deferred2)) + const fiber = yield* pipe(loser1, Effect.race(loser2), Effect.forkDaemon) + yield* (Deferred.await(latch1)) + yield* (Deferred.await(latch2)) + yield* (Fiber.interrupt(fiber)) + const res1 = yield* (Deferred.await(deferred1)) + const res2 = yield* (Deferred.await(deferred2)) strictEqual(res1, undefined) strictEqual(res2, undefined) })) it.live("supervise fibers", () => - Effect.gen(function*($) { + Effect.gen(function*() { const makeChild = (n: number): Effect.Effect> => { return pipe(Effect.sleep(Duration.millis(20 * n)), Effect.zipRight(Effect.never), Effect.fork) } - const ref = yield* $(Ref.make(0)) - yield* $( + const ref = yield* (Ref.make(0)) + yield* pipe( makeChild(1), Effect.zipRight(makeChild(2)), Effect.ensuringChildren((fs) => @@ -155,46 +155,46 @@ describe("Effect", () => { ) ) ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) strictEqual(result, 2) })) it.effect("race of fail with success", () => - Effect.gen(function*($) { - const result = yield* $(Effect.fail(42), Effect.race(Effect.succeed(24)), Effect.either) + Effect.gen(function*() { + const result = yield* pipe(Effect.fail(42), Effect.race(Effect.succeed(24)), Effect.either) assertRight(result, 24) })) it.effect("race of terminate with success", () => - Effect.gen(function*($) { - const result = yield* $(Effect.dieSync(() => new Error()), Effect.race(Effect.succeed(24))) + Effect.gen(function*() { + const result = yield* pipe(Effect.dieSync(() => new Error()), Effect.race(Effect.succeed(24))) strictEqual(result, 24) })) it.effect("race of fail with fail", () => - Effect.gen(function*($) { - const result = yield* $(Effect.fail(42), Effect.race(Effect.fail(24)), Effect.either) + Effect.gen(function*() { + const result = yield* pipe(Effect.fail(42), Effect.race(Effect.fail(24)), Effect.either) assertLeft(result, 42) })) it.effect("race of value and never", () => - Effect.gen(function*($) { - const result = yield* $(Effect.succeed(42), Effect.race(Effect.never)) + Effect.gen(function*() { + const result = yield* pipe(Effect.succeed(42), Effect.race(Effect.never)) strictEqual(result, 42) })) it.effect("race in uninterruptible region", () => - Effect.gen(function*($) { - const latch = yield* $(Deferred.make()) - const fiber = yield* $( + Effect.gen(function*() { + const latch = yield* (Deferred.make()) + const fiber = yield* pipe( Effect.void, Effect.race(Effect.zip(Deferred.succeed(latch, true), Effect.sleep("45 seconds"))), Effect.uninterruptible, Effect.fork ) - yield* $(Deferred.await(latch)) - yield* $(adjust("30 seconds")) + yield* (Deferred.await(latch)) + yield* (adjust("30 seconds")) strictEqual(fiber.unsafePoll(), null) - yield* $(adjust("60 seconds")) + yield* (adjust("60 seconds")) assertTrue(fiber.unsafePoll() !== null) }), 20_000) it.effect("race of two forks does not interrupt winner", () => - Effect.gen(function*($) { + Effect.gen(function*() { const forkWaiter = ( interrupted: Ref.Ref, latch: Deferred.Deferred, @@ -210,15 +210,15 @@ describe("Effect", () => { ) ) } - const interrupted = yield* $(Ref.make(0)) - const latch1 = yield* $(Deferred.make()) - const latch2 = yield* $(Deferred.make()) - const done1 = yield* $(Deferred.make()) - const done2 = yield* $(Deferred.make()) + const interrupted = yield* (Ref.make(0)) + const latch1 = yield* (Deferred.make()) + const latch2 = yield* (Deferred.make()) + const done1 = yield* (Deferred.make()) + const done2 = yield* (Deferred.make()) const forkWaiter1 = forkWaiter(interrupted, latch1, done1) const forkWaiter2 = forkWaiter(interrupted, latch2, done2) - yield* $(forkWaiter1, Effect.race(forkWaiter2)) - const count = yield* $( + yield* pipe(forkWaiter1, Effect.race(forkWaiter2)) + const count = yield* ( pipe( Deferred.succeed(latch1, void 0), Effect.zipRight(Deferred.await(done1)), @@ -229,8 +229,8 @@ describe("Effect", () => { strictEqual(count, 2) })) it.effect("firstSuccessOf of values", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Effect.firstSuccessOf([ Effect.fail(0), Effect.succeed(100) @@ -240,8 +240,8 @@ describe("Effect", () => { assertRight(result, 100) })) it.live("firstSuccessOf of failures", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Effect.firstSuccessOf([ pipe(Effect.fail(0), Effect.delay(Duration.millis(10))), Effect.fail(101) @@ -252,8 +252,8 @@ describe("Effect", () => { assertLeft(result, 101) })) it.live("firstSuccessOf of failures & 1 success", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Effect.firstSuccessOf([ Effect.fail(0), pipe(Effect.succeed(102), Effect.delay(Duration.millis(1))) @@ -263,57 +263,57 @@ describe("Effect", () => { assertRight(result, 102) })) it.effect("raceFirst interrupts loser on success", () => - Effect.gen(function*($) { - const deferred = yield* $(Deferred.make()) - const effect = yield* $(Deferred.make()) + Effect.gen(function*() { + const deferred = yield* (Deferred.make()) + const effect = yield* (Deferred.make()) const winner = Either.right(void 0) const loser = Effect.acquireUseRelease( Deferred.succeed(deferred, void 0), () => Effect.never, () => Deferred.succeed(effect, 42) ) - yield* $(winner, Effect.raceFirst(loser)) - const result = yield* $(Deferred.await(effect)) + yield* pipe(winner, Effect.raceFirst(loser)) + const result = yield* (Deferred.await(effect)) strictEqual(result, 42) })) it.effect("raceFirst interrupts loser on failure", () => - Effect.gen(function*($) { - const deferred = yield* $(Deferred.make()) - const effect = yield* $(Deferred.make()) + Effect.gen(function*() { + const deferred = yield* (Deferred.make()) + const effect = yield* (Deferred.make()) const winner = pipe(Deferred.await(deferred), Effect.zipRight(Either.left(new Error()))) const loser = Effect.acquireUseRelease( Deferred.succeed(deferred, void 0), () => Effect.never, () => Deferred.succeed(effect, 42) ) - yield* $(winner, Effect.raceFirst(loser), Effect.either) - const result = yield* $(Deferred.await(effect)) + yield* pipe(winner, Effect.raceFirst(loser), Effect.either) + const result = yield* (Deferred.await(effect)) strictEqual(result, 42) })) it.effect("mergeAll", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* ( pipe(["a", "aa", "aaa", "aaaa"].map((a) => Effect.succeed(a)), Effect.mergeAll(0, (b, a) => b + a.length)) ) strictEqual(result, 10) })) it.effect("mergeAll - empty", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* ( pipe([] as ReadonlyArray>, Effect.mergeAll(0, (b, a) => b + a)) ) strictEqual(result, 0) })) it.effect("reduceEffect", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* ( pipe([2, 3, 4].map((n) => Effect.succeed(n)), Effect.reduceEffect(Effect.succeed(1), (acc, a) => acc + a)) ) strictEqual(result, 10) })) it.effect("reduceEffect - empty list", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* ( pipe( [] as ReadonlyArray>, Effect.reduceEffect(Effect.succeed(1), (acc, a) => acc + a) @@ -322,13 +322,13 @@ describe("Effect", () => { strictEqual(result, 1) })) it.effect("timeout of failure", () => - Effect.gen(function*($) { - const result = yield* $(Effect.fail("uh oh"), Effect.timeout(Duration.hours(1)), Effect.exit) + Effect.gen(function*() { + const result = yield* pipe(Effect.fail("uh oh"), Effect.timeout(Duration.hours(1)), Effect.exit) deepStrictEqual(result, Exit.fail("uh oh")) })) it.effect("timeout of terminate", () => - Effect.gen(function*($) { - const result = yield* $(Effect.die(ExampleError), Effect.timeout(Duration.hours(1)), Effect.exit) + Effect.gen(function*() { + const result = yield* pipe(Effect.die(ExampleError), Effect.timeout(Duration.hours(1)), Effect.exit) deepStrictEqual(result, Exit.die(ExampleError)) })) }) diff --git a/packages/effect/test/Effect/constructors.test.ts b/packages/effect/test/Effect/constructors.test.ts index cc98b6c119..d3e3c2a3fc 100644 --- a/packages/effect/test/Effect/constructors.test.ts +++ b/packages/effect/test/Effect/constructors.test.ts @@ -5,23 +5,23 @@ import { describe } from "vitest" describe("Effect", () => { it.effect("can lift a value to an option", () => - Effect.gen(function*($) { - const result = yield* $(Effect.succeedSome(42)) + Effect.gen(function*() { + const result = yield* Effect.succeedSome(42) assertSome(result, 42) })) it.effect("using the none value", () => - Effect.gen(function*($) { - const result = yield* $(Effect.succeedNone) + Effect.gen(function*() { + const result = yield* Effect.succeedNone assertNone(result) })) it.effect("can use .pipe for composition", () => - Effect.gen(function*(_) { - return yield* _(Effect.succeed(1)) + Effect.gen(function*() { + return yield* Effect.succeed(1) }).pipe( Effect.map((n) => n + 1), Effect.flatMap((n) => - Effect.gen(function*(_) { - return yield* _(Effect.succeed(n + 1)) + Effect.gen(function*() { + return yield* Effect.succeed(n + 1) }) ), Effect.tap((n) => @@ -33,8 +33,8 @@ describe("Effect", () => { it.effect("can pass this to generator", () => { class MyService { readonly local = 1 - compute = Effect.gen(this, function*(_) { - return yield* _(Effect.succeed(this.local + 1)) + compute = Effect.gen(this, function*() { + return yield* Effect.succeed(this.local + 1) }) } const instance = new MyService() diff --git a/packages/effect/test/Effect/destructors.test.ts b/packages/effect/test/Effect/destructors.test.ts index d658327d7d..c1bf7b5719 100644 --- a/packages/effect/test/Effect/destructors.test.ts +++ b/packages/effect/test/Effect/destructors.test.ts @@ -1,6 +1,4 @@ -import * as Cause from "effect/Cause" -import * as Effect from "effect/Effect" -import * as Option from "effect/Option" +import { Cause, Effect, Option, pipe } from "effect" import { assertFailure, assertFalse, @@ -18,74 +16,74 @@ const ExampleError = new Error("Oh noes!") describe("Effect", () => { it.effect("head - on non empty list", () => - Effect.gen(function*($) { - const result = yield* $(Effect.succeed([1, 2, 3]), Effect.head, Effect.either) + Effect.gen(function*() { + const result = yield* pipe(Effect.succeed([1, 2, 3]), Effect.head, Effect.either) assertRight(result, 1) })) it.effect("head - on empty list", () => - Effect.gen(function*($) { - const result = yield* $(Effect.succeed([] as ReadonlyArray), Effect.head, Effect.option) + Effect.gen(function*() { + const result = yield* pipe(Effect.succeed([] as ReadonlyArray), Effect.head, Effect.option) assertNone(result) })) it.effect("head - on failure", () => - Effect.gen(function*($) { - const result = yield* $(Effect.fail("fail"), Effect.head, Effect.either) + Effect.gen(function*() { + const result = yield* pipe(Effect.fail("fail"), Effect.head, Effect.either) assertLeft(result, "fail") })) it.effect("isFailure - returns true when the effect is a failure", () => - Effect.gen(function*($) { - const result = yield* $(Effect.isFailure(Effect.fail("fail"))) + Effect.gen(function*() { + const result = yield* (Effect.isFailure(Effect.fail("fail"))) assertTrue(result) })) it.effect("isFailure - returns false when the effect is a success", () => - Effect.gen(function*($) { - const result = yield* $(Effect.isFailure(Effect.succeed("succeed"))) + Effect.gen(function*() { + const result = yield* (Effect.isFailure(Effect.succeed("succeed"))) assertFalse(result) })) it.effect("isSuccess - returns false when the effect is a failure", () => - Effect.gen(function*($) { - const result = yield* $(Effect.isSuccess(Effect.fail("fail"))) + Effect.gen(function*() { + const result = yield* (Effect.isSuccess(Effect.fail("fail"))) assertFalse(result) })) it.effect("isSuccess - returns true when the effect is a success", () => - Effect.gen(function*($) { - const result = yield* $(Effect.isSuccess(Effect.succeed("succeed"))) + Effect.gen(function*() { + const result = yield* (Effect.isSuccess(Effect.succeed("succeed"))) assertTrue(result) })) it.effect("none - on Some fails with NoSuchElementException", () => - Effect.gen(function*($) { - const result = yield* $(Effect.exit(Effect.none(Effect.succeed(Option.some(1))))) + Effect.gen(function*() { + const result = yield* (Effect.exit(Effect.none(Effect.succeed(Option.some(1))))) assertFailure(result, Cause.fail(new Cause.NoSuchElementException())) })) it.effect("none - on None succeeds with undefined", () => - Effect.gen(function*($) { - const result = yield* $(Effect.none(Effect.succeed(Option.none()))) + Effect.gen(function*() { + const result = yield* (Effect.none(Effect.succeed(Option.none()))) strictEqual(result, undefined) })) it.effect("none - fails with ex when effect fails with ex", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.RuntimeException("failed task") - const result = yield* $(Effect.exit(Effect.none(Effect.fail(error)))) + const result = yield* (Effect.exit(Effect.none(Effect.fail(error)))) assertFailure(result, Cause.fail(error)) })) it.effect("option - return success in Some", () => - Effect.gen(function*($) { - const result = yield* $(Effect.option(Effect.succeed(11))) + Effect.gen(function*() { + const result = yield* (Effect.option(Effect.succeed(11))) assertSome(result, 11) })) it.effect("option - return failure as None", () => - Effect.gen(function*($) { - const result = yield* $(Effect.option(Effect.fail(123))) + Effect.gen(function*() { + const result = yield* (Effect.option(Effect.fail(123))) assertNone(result) })) it.effect("option - not catch throwable", () => - Effect.gen(function*($) { - const result = yield* $(Effect.exit(Effect.option(Effect.die(ExampleError)))) + Effect.gen(function*() { + const result = yield* (Effect.exit(Effect.option(Effect.die(ExampleError)))) assertFailure(result, Cause.die(ExampleError)) })) it.effect("option - catch throwable after sandboxing", () => - Effect.gen(function*($) { - const result = yield* $(Effect.option(Effect.sandbox(Effect.die(ExampleError)))) + Effect.gen(function*() { + const result = yield* (Effect.option(Effect.sandbox(Effect.die(ExampleError)))) assertNone(result) })) }) diff --git a/packages/effect/test/Effect/environment.test.ts b/packages/effect/test/Effect/environment.test.ts index c5dbed9f1b..a029831ac8 100644 --- a/packages/effect/test/Effect/environment.test.ts +++ b/packages/effect/test/Effect/environment.test.ts @@ -60,8 +60,8 @@ describe("Effect", () => { })) describe("and Then", () => { it.effect("effect tag", () => - Effect.gen(function*($) { - const [n, s, z] = yield* $(Effect.all([ + Effect.gen(function*() { + const [n, s, z] = yield* (Effect.all([ Effect.andThen(Effect.void, DemoTag.getNumbers), Effect.andThen(Effect.succeed("a"), DemoTag.strings), Effect.andThen(Effect.succeed("a"), DemoTag.fn) @@ -78,15 +78,15 @@ describe("Effect", () => { }))) }) it.effect("effect tag", () => - Effect.gen(function*($) { - const [n, s, z, zUnion] = yield* $(Effect.all([ + Effect.gen(function*() { + const [n, s, z, zUnion] = yield* (Effect.all([ DemoTag.getNumbers(), DemoTag.strings, DemoTag.fn("a", "b", "c"), DemoTag.fnParamsUnion(1) ])) - const s2 = yield* $(DemoTag.pipe(Effect.map((_) => _.strings))) - const s3 = yield* $(DemoTag.use((_) => _.fnGen("hello"))) + const s2 = yield* (DemoTag.pipe(Effect.map((_) => _.strings))) + const s3 = yield* (DemoTag.use((_) => _.fnGen("hello"))) deepStrictEqual(n, [0, 1]) deepStrictEqual(s, ["a", "b"]) deepStrictEqual(z, ["a", "b", "c"]) @@ -101,13 +101,13 @@ describe("Effect", () => { fnParamsUnion: (..._args) => _args }))) it.effect("effect tag with primitives", () => - Effect.gen(function*($) { - strictEqual(yield* $(DateTag.getTime()), DateTag.date.getTime()) - strictEqual(yield* $(NumberTag), 100) - deepStrictEqual(Array.from(yield* $(MapTag.keys())), []) - yield* $(MapTag.set("foo", "bar")) - deepStrictEqual(Array.from(yield* $(MapTag.keys())), ["foo"]) - strictEqual(yield* $(MapTag.get("foo")), "bar") + Effect.gen(function*() { + strictEqual(yield* (DateTag.getTime()), DateTag.date.getTime()) + strictEqual(yield* NumberTag, 100) + deepStrictEqual(Array.from(yield* (MapTag.keys())), []) + yield* (MapTag.set("foo", "bar")) + deepStrictEqual(Array.from(yield* (MapTag.keys())), ["foo"]) + strictEqual(yield* (MapTag.get("foo")), "bar") }).pipe( Effect.provide(Layer.mergeAll( DateTag.Live, @@ -116,8 +116,8 @@ describe("Effect", () => { )) )) it.effect("class tag", () => - Effect.gen(function*($) { - yield* $( + Effect.gen(function*() { + yield* ( Effect.flatMap(NumberRepo.numbers, (_) => Effect.log(`Numbers: ${_}`)).pipe( Effect.provideService(NumberRepo, { numbers: [0, 1, 2] }) ) @@ -125,15 +125,15 @@ describe("Effect", () => { })) it.effect("environment - provide is modular", () => pipe( - Effect.gen(function*($) { - const v1 = yield* $(NumberService) - const v2 = yield* $( + Effect.gen(function*() { + const v1 = yield* NumberService + const v2 = yield* ( pipe( NumberService, Effect.provide(Context.make(NumberService, { n: 2 })) ) ) - const v3 = yield* $(NumberService) + const v3 = yield* NumberService strictEqual(v1.n, 4) strictEqual(v2.n, 2) strictEqual(v3.n, 4) @@ -142,9 +142,9 @@ describe("Effect", () => { )) it.effect("environment - provideSomeContext provides context in the right order", () => pipe( - Effect.gen(function*($) { - const v1 = yield* $(NumberService) - const v2 = yield* $(StringService) + Effect.gen(function*() { + const v1 = yield* NumberService + const v2 = yield* StringService strictEqual(v1.n, 1) strictEqual(v2.s, "ok") }), @@ -153,16 +153,16 @@ describe("Effect", () => { Effect.provide(Context.make(StringService, { s: "ok" })) )) it.effect("environment - async can use environment", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Effect.async((cb) => cb(Effect.map(NumberService, ({ n }) => n))), Effect.provide(Context.make(NumberService, { n: 10 })) ) strictEqual(result, 10) })) it.effect("serviceWith - effectfully accesses a service in the environment", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Effect.flatMap(NumberService, ({ n }) => Effect.succeed(n + 3)), Effect.provide(Context.make(NumberService, { n: 0 })) ) @@ -170,8 +170,8 @@ describe("Effect", () => { })) // TODO: remove // it.effect("serviceWith - traced tag", () => - // Effect.gen(function*($) { - // const result = yield* $( + // Effect.gen(function*() { + // const result = yield* ( // Effect.flatMap(NumberService.traced(sourceLocation(new Error())), ({ n }) => Effect.succeed(n + 3)), // Effect.provide(Context.make(NumberService, { n: 0 })) // ) @@ -179,9 +179,9 @@ describe("Effect", () => { // })) it.effect("updateService - updates a service in the environment", () => pipe( - Effect.gen(function*($) { - const a = yield* $(NumberService, Effect.updateService(NumberService, ({ n }) => ({ n: n + 1 }))) - const b = yield* $(NumberService) + Effect.gen(function*() { + const a = yield* pipe(NumberService, Effect.updateService(NumberService, ({ n }) => ({ n: n + 1 }))) + const b = yield* NumberService strictEqual(a.n, 1) strictEqual(b.n, 0) }), @@ -195,8 +195,8 @@ describe("Effect", () => { const Service = Context.GenericTag("Service") const { foo } = Effect.serviceFunctions(Service) return pipe( - Effect.gen(function*(_) { - strictEqual(yield* _(foo("a", 3)), "a3") + Effect.gen(function*() { + strictEqual(yield* foo("a", 3), "a3") }), Effect.provideService( Service, @@ -214,8 +214,8 @@ describe("Effect", () => { const Service = Context.GenericTag("Service") const { baz } = Effect.serviceConstants(Service) return pipe( - Effect.gen(function*(_) { - strictEqual(yield* _(baz), "42!") + Effect.gen(function*() { + strictEqual(yield* baz, "42!") }), Effect.provideService( Service, @@ -234,9 +234,9 @@ describe("Effect", () => { const Service = Context.GenericTag("Service") const { constants, functions } = Effect.serviceMembers(Service) return pipe( - Effect.gen(function*(_) { - strictEqual(yield* _(constants.baz), "42!") - strictEqual(yield* _(functions.foo("a", 3)), "a3") + Effect.gen(function*() { + strictEqual(yield* constants.baz, "42!") + strictEqual(yield* functions.foo("a", 3), "a3") }), Effect.provideService( Service, diff --git a/packages/effect/test/Effect/error-handling.test.ts b/packages/effect/test/Effect/error-handling.test.ts index f0cead0b84..db653aee8e 100644 --- a/packages/effect/test/Effect/error-handling.test.ts +++ b/packages/effect/test/Effect/error-handling.test.ts @@ -40,8 +40,8 @@ const deepErrorFail = (n: number): Effect.Effect => { describe("Effect", () => { it.effect("attempt - error in sync effect", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Effect.try(() => { throw ExampleError }), @@ -50,26 +50,26 @@ describe("Effect", () => { deepStrictEqual(result.error, ExampleError) })) it.effect("attempt - fail", () => - Effect.gen(function*($) { + Effect.gen(function*() { const io1 = Effect.either(ExampleErrorFail) const io2 = Effect.suspend(() => Effect.either(Effect.suspend(() => ExampleErrorFail))) - const [first, second] = yield* $(io1, Effect.zip(io2)) + const [first, second] = yield* pipe(io1, Effect.zip(io2)) assertLeft(first, ExampleError) assertLeft(second, ExampleError) })) it.effect("attempt - deep attempt sync effect error", () => - Effect.gen(function*($) { - const result = yield* $(Effect.flip(deepErrorEffect(100))) + Effect.gen(function*() { + const result = yield* (Effect.flip(deepErrorEffect(100))) deepStrictEqual(result.error, ExampleError) })) it.effect("attempt - deep attempt fail error", () => - Effect.gen(function*($) { - const result = yield* $(Effect.either(deepErrorFail(100))) + Effect.gen(function*() { + const result = yield* (Effect.either(deepErrorFail(100))) assertLeft(result, ExampleError) })) it.effect("attempt - sandbox -> terminate", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Effect.sync(() => { throw ExampleError }), @@ -79,8 +79,8 @@ describe("Effect", () => { assertLeft(result, Cause.die(ExampleError)) })) it.effect("catch - sandbox terminate", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Effect.sync(() => { throw ExampleError }), @@ -90,8 +90,8 @@ describe("Effect", () => { deepStrictEqual(result, Cause.die(ExampleError)) })) it.effect("catch failing finalizers with fail", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Effect.fail(ExampleError), Effect.ensuring(Effect.sync(() => { throw InterruptError1 @@ -114,8 +114,8 @@ describe("Effect", () => { deepStrictEqual(result, Exit.failCause(expected)) })) it.effect("catch failing finalizers with terminate", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Effect.die(ExampleError), Effect.ensuring(Effect.sync(() => { throw InterruptError1 @@ -138,41 +138,41 @@ describe("Effect", () => { deepStrictEqual(result, Exit.failCause(expected)) })) it.effect("catchAllCause", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* ( pipe(Effect.succeed(42), Effect.zipRight(Effect.fail("uh oh")), Effect.catchAllCause(Effect.succeed)) ) deepStrictEqual(result, Cause.fail("uh oh")) })) it.effect("catchAllDefect - recovers from all defects", () => - Effect.gen(function*($) { + Effect.gen(function*() { const message = "division by zero" - const result = yield* $( + const result = yield* pipe( Effect.die(new Cause.IllegalArgumentException(message)), Effect.catchAllDefect((e) => Effect.succeed((e as Error).message)) ) strictEqual(result, message) })) it.effect("catchAllDefect - leaves errors", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.IllegalArgumentException("division by zero") - const result = yield* $( + const result = yield* ( pipe(Effect.fail(error), Effect.catchAllDefect((e) => Effect.succeed((e as Error).message)), Effect.exit) ) deepStrictEqual(result, Exit.fail(error)) })) it.effect("catchAllDefect - leaves values", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.IllegalArgumentException("division by zero") - const result = yield* $( + const result = yield* ( pipe(Effect.succeed(error), Effect.catchAllDefect((e) => Effect.succeed((e as Error).message))) ) deepStrictEqual(result, error) })) it.effect("catchSomeDefect - recovers from some defects", () => - Effect.gen(function*($) { + Effect.gen(function*() { const message = "division by zero" - const result = yield* $( + const result = yield* pipe( Effect.die(new Cause.IllegalArgumentException(message)), Effect.catchSomeDefect((e) => Cause.isIllegalArgumentException(e) @@ -183,9 +183,9 @@ describe("Effect", () => { strictEqual(result, message) })) it.effect("catchSomeDefect - leaves the rest", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.IllegalArgumentException("division by zero") - const result = yield* $( + const result = yield* pipe( Effect.die(error), Effect.catchSomeDefect((e) => Cause.isRuntimeException(e) ? @@ -197,9 +197,9 @@ describe("Effect", () => { deepStrictEqual(result, Exit.die(error)) })) it.effect("catchSomeDefect - leaves errors", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.IllegalArgumentException("division by zero") - const result = yield* $( + const result = yield* pipe( Effect.fail(error), Effect.catchSomeDefect((e) => Cause.isIllegalArgumentException(e) @@ -211,9 +211,9 @@ describe("Effect", () => { deepStrictEqual(result, Exit.fail(error)) })) it.effect("catchSomeDefect - leaves values", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.IllegalArgumentException("division by zero") - const result = yield* $( + const result = yield* pipe( Effect.succeed(error), Effect.catchSomeDefect((e) => Cause.isIllegalArgumentException(e) @@ -224,7 +224,7 @@ describe("Effect", () => { deepStrictEqual(result, error) })) it.effect("catch - recovers from one of several tagged errors", () => - Effect.gen(function*($) { + Effect.gen(function*() { interface ErrorA { readonly _tag: "ErrorA" } @@ -232,14 +232,14 @@ describe("Effect", () => { readonly _tag: "ErrorB" } const effect: Effect.Effect = Effect.fail({ _tag: "ErrorA" }) - const result = yield* $(Effect.catch(effect, "_tag", { + const result = yield* (Effect.catch(effect, "_tag", { failure: "ErrorA", onFailure: Effect.succeed })) deepStrictEqual(result, { _tag: "ErrorA" }) })) it.effect("catch - does not recover from one of several tagged errors", () => - Effect.gen(function*($) { + Effect.gen(function*() { interface ErrorA { readonly _tag: "ErrorA" } @@ -247,7 +247,7 @@ describe("Effect", () => { readonly _tag: "ErrorB" } const effect: Effect.Effect = Effect.fail({ _tag: "ErrorB" }) - const result = yield* $( + const result = yield* pipe( Effect.catch(effect, "_tag", { failure: "ErrorA", onFailure: Effect.succeed @@ -257,7 +257,7 @@ describe("Effect", () => { deepStrictEqual(result, Exit.fail({ _tag: "ErrorB" as const })) })) it.effect("catchIf - does not recover from one of several tagged errors", () => - Effect.gen(function*($) { + Effect.gen(function*() { interface ErrorA { readonly _tag: "ErrorA" } @@ -265,7 +265,7 @@ describe("Effect", () => { readonly _tag: "ErrorB" } const effect: Effect.Effect = Effect.fail({ _tag: "ErrorB" }) - const result = yield* $( + const result = yield* pipe( Effect.catchIf(effect, (e): e is ErrorA => e._tag === "ErrorA", Effect.succeed), Effect.exit ) @@ -273,7 +273,7 @@ describe("Effect", () => { satisfies(assertType>()(result)) })) it.effect("catchTags - recovers from one of several tagged errors", () => - Effect.gen(function*($) { + Effect.gen(function*() { interface ErrorA { readonly _tag: "ErrorA" } @@ -281,13 +281,13 @@ describe("Effect", () => { readonly _tag: "ErrorB" } const effect: Effect.Effect = Effect.fail({ _tag: "ErrorA" }) - const result = yield* $(Effect.catchTags(effect, { + const result = yield* (Effect.catchTags(effect, { ErrorA: (e) => Effect.succeed(e) })) deepStrictEqual(result, { _tag: "ErrorA" }) })) it.effect("catchTags - does not recover from one of several tagged errors", () => - Effect.gen(function*($) { + Effect.gen(function*() { interface ErrorA { readonly _tag: "ErrorA" } @@ -295,7 +295,7 @@ describe("Effect", () => { readonly _tag: "ErrorB" } const effect: Effect.Effect = Effect.fail({ _tag: "ErrorB" }) - const result = yield* $(Effect.exit( + const result = yield* (Effect.exit( Effect.catchTags(effect, { ErrorA: (e) => Effect.succeed(e) }) @@ -303,7 +303,7 @@ describe("Effect", () => { deepStrictEqual(result, Exit.fail({ _tag: "ErrorB" })) })) it.effect("catchTags - recovers from all tagged errors", () => - Effect.gen(function*($) { + Effect.gen(function*() { interface ErrorA { readonly _tag: "ErrorA" } @@ -311,15 +311,15 @@ describe("Effect", () => { readonly _tag: "ErrorB" } const effect: Effect.Effect = Effect.fail({ _tag: "ErrorB" }) - const result = yield* $(Effect.catchTags(effect, { + const result = yield* (Effect.catchTags(effect, { ErrorA: (e) => Effect.succeed(e), ErrorB: (e) => Effect.succeed(e) })) deepStrictEqual(result, { _tag: "ErrorB" }) })) it.effect("fold - sandbox -> terminate", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Effect.sync(() => { throw ExampleError }), @@ -332,40 +332,40 @@ describe("Effect", () => { deepStrictEqual(result, Option.some(Cause.die(ExampleError))) })) it.effect("ignore - return success as unit", () => - Effect.gen(function*($) { - const result = yield* $(Effect.ignore(Effect.succeed(11))) + Effect.gen(function*() { + const result = yield* (Effect.ignore(Effect.succeed(11))) strictEqual(result, undefined) })) it.effect("ignore - return failure as unit", () => - Effect.gen(function*($) { - const result = yield* $(Effect.ignore(Effect.fail(123))) + Effect.gen(function*() { + const result = yield* (Effect.ignore(Effect.fail(123))) strictEqual(result, undefined) })) it.effect("ignore - not catch throwable", () => - Effect.gen(function*($) { - const result = yield* $(Effect.exit(Effect.ignore(Effect.die(ExampleError)))) + Effect.gen(function*() { + const result = yield* (Effect.exit(Effect.ignore(Effect.die(ExampleError)))) deepStrictEqual(result, Exit.die(ExampleError)) })) it.effect("orElse - does not recover from defects", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Error("died") const fiberId = FiberId.make(0, 123) const bothCause = Cause.parallel(Cause.interrupt(fiberId), Cause.die(error)) const thenCause = Cause.sequential(Cause.interrupt(fiberId), Cause.die(error)) - const plain = yield* $(Effect.die(error), Effect.orElse(() => Effect.void), Effect.exit) - const both = yield* $(Effect.failCause(bothCause), Effect.orElse(() => Effect.void), Effect.exit) - const then = yield* $(Effect.failCause(thenCause), Effect.orElse(() => Effect.void), Effect.exit) - const fail = yield* $(Effect.fail(error), Effect.orElse(() => Effect.void), Effect.exit) + const plain = yield* pipe(Effect.die(error), Effect.orElse(() => Effect.void), Effect.exit) + const both = yield* pipe(Effect.failCause(bothCause), Effect.orElse(() => Effect.void), Effect.exit) + const then = yield* pipe(Effect.failCause(thenCause), Effect.orElse(() => Effect.void), Effect.exit) + const fail = yield* pipe(Effect.fail(error), Effect.orElse(() => Effect.void), Effect.exit) deepStrictEqual(plain, Exit.die(error)) deepStrictEqual(both, Exit.die(error)) deepStrictEqual(then, Exit.die(error)) deepStrictEqual(fail, Exit.succeed(void 0)) })) it.effect("orElse - left failed and right died with kept cause", () => - Effect.gen(function*($) { + Effect.gen(function*() { const z1 = Effect.fail(new Cause.RuntimeException("1")) const z2 = Effect.die(new Cause.RuntimeException("2")) - const result = yield* $( + const result = yield* pipe( z1, Effect.orElse(() => z2), Effect.catchAllCause((cause) => { @@ -382,10 +382,10 @@ describe("Effect", () => { assertTrue(result) })) it.effect("orElse - left failed and right failed with kept cause", () => - Effect.gen(function*($) { + Effect.gen(function*() { const z1 = Effect.fail(new Cause.RuntimeException("1")) const z2 = Effect.fail(new Cause.RuntimeException("2")) - const result = yield* $( + const result = yield* pipe( z1, Effect.orElse(() => z2), Effect.catchAllCause((cause) => { @@ -415,9 +415,9 @@ describe("Effect", () => { await fc.assert(fc.asyncProperty(exits, exits, exits, async (exit1, exit2, exit3) => { const leftEffect = pipe(exit1, Effect.orElse(() => exit2), Effect.orElse(() => exit3)) const rightEffect = pipe(exit1, Effect.orElse(() => pipe(exit2, Effect.orElse(() => exit3)))) - const program = Effect.gen(function*($) { - const left = yield* $(Effect.exit(leftEffect)) - const right = yield* $(Effect.exit(rightEffect)) + const program = Effect.gen(function*() { + const left = yield* (Effect.exit(leftEffect)) + const right = yield* (Effect.exit(rightEffect)) return { left, right } }) const { left, right } = await Effect.runPromise(program) @@ -425,42 +425,42 @@ describe("Effect", () => { })) }) it.effect("orElseFail - executes this effect and returns its value if it succeeds", () => - Effect.gen(function*($) { - const result = yield* $(Effect.succeed(true), Effect.orElseFail(constFalse)) + Effect.gen(function*() { + const result = yield* pipe(Effect.succeed(true), Effect.orElseFail(constFalse)) assertTrue(result) })) it.effect("orElseFail - otherwise fails with the specified error", () => - Effect.gen(function*($) { - const result = yield* $(Effect.fail(false), Effect.orElseFail(constTrue), Effect.flip) + Effect.gen(function*() { + const result = yield* pipe(Effect.fail(false), Effect.orElseFail(constTrue), Effect.flip) assertTrue(result) })) it.effect("orElseSucceed - executes this effect and returns its value if it succeeds", () => - Effect.gen(function*($) { - const result = yield* $(Effect.succeed(true), Effect.orElseSucceed(constFalse)) + Effect.gen(function*() { + const result = yield* pipe(Effect.succeed(true), Effect.orElseSucceed(constFalse)) assertTrue(result) })) it.effect("orElseSucceed - otherwise succeeds with the specified value", () => - Effect.gen(function*($) { - const result = yield* $(Effect.fail(false), Effect.orElseSucceed(constTrue)) + Effect.gen(function*() { + const result = yield* pipe(Effect.fail(false), Effect.orElseSucceed(constTrue)) assertTrue(result) })) it.effect("parallelErrors - one failure", () => - Effect.gen(function*($) { - const fiber1 = yield* $(Effect.fork(Effect.fail("error1"))) - const fiber2 = yield* $(Effect.fork(Effect.succeed("success1"))) - const result = yield* $(fiber1, Fiber.zip(fiber2), Fiber.join, Effect.parallelErrors, Effect.flip) + Effect.gen(function*() { + const fiber1 = yield* (Effect.fork(Effect.fail("error1"))) + const fiber2 = yield* (Effect.fork(Effect.succeed("success1"))) + const result = yield* pipe(fiber1, Fiber.zip(fiber2), Fiber.join, Effect.parallelErrors, Effect.flip) deepStrictEqual(Array.from(result), ["error1"]) })) it.effect("parallelErrors - all failures", () => - Effect.gen(function*($) { - const fiber1 = yield* $(Effect.fork(Effect.fail("error1"))) - const fiber2 = yield* $(Effect.fork(Effect.fail("error2"))) - const result = yield* $(fiber1, Fiber.zip(fiber2), Fiber.join, Effect.parallelErrors, Effect.flip) + Effect.gen(function*() { + const fiber1 = yield* (Effect.fork(Effect.fail("error1"))) + const fiber2 = yield* (Effect.fork(Effect.fail("error2"))) + const result = yield* pipe(fiber1, Fiber.zip(fiber2), Fiber.join, Effect.parallelErrors, Effect.flip) deepStrictEqual(Array.from(result), ["error1", "error2"]) })) it.effect("promise - exception does not kill fiber", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Effect.promise(() => { throw ExampleError }), @@ -469,9 +469,9 @@ describe("Effect", () => { deepStrictEqual(result, Exit.die(ExampleError)) })) it.effect("try = handles exceptions", () => - Effect.gen(function*($) { + Effect.gen(function*() { const message = "hello" - const result = yield* $( + const result = yield* pipe( Effect.try({ try: () => { throw message @@ -484,13 +484,13 @@ describe("Effect", () => { deepStrictEqual(result, Exit.fail(message)) })) it.effect("uncaught - fail", () => - Effect.gen(function*($) { - const result = yield* $(Effect.exit(ExampleErrorFail)) + Effect.gen(function*() { + const result = yield* (Effect.exit(ExampleErrorFail)) deepStrictEqual(result, Exit.fail(ExampleError)) })) it.effect("uncaught - sync effect error", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Effect.sync(() => { throw ExampleError }), @@ -500,15 +500,15 @@ describe("Effect", () => { deepStrictEqual(result, Exit.die(ExampleError)) })) it.effect("uncaught - deep sync effect error", () => - Effect.gen(function*($) { - const result = yield* $(Effect.flip(deepErrorEffect(100))) + Effect.gen(function*() { + const result = yield* (Effect.flip(deepErrorEffect(100))) deepStrictEqual(result.error, ExampleError) })) it.effect("unwraps exception", () => - Effect.gen(function*($) { + Effect.gen(function*() { const failure = Effect.fail(Cause.fail(new Error("fail"))) const success = Effect.succeed(100) - const message = yield* $( + const message = yield* pipe( failure, Effect.unsandbox, Effect.matchEffect({ @@ -516,17 +516,17 @@ describe("Effect", () => { onSuccess: () => Effect.succeed("unexpected") }) ) - const result = yield* $(Effect.unsandbox(success)) + const result = yield* (Effect.unsandbox(success)) strictEqual(message, "fail") strictEqual(result, 100) })) it.effect("no information is lost during composition", () => - Effect.gen(function*($) { + Effect.gen(function*() { const cause = (effect: Effect.Effect): Effect.Effect, never, R> => { return Effect.cause(effect) } const expectedCause = Cause.fail("oh no") - const result = yield* $(cause(pipe(Effect.failCause(expectedCause), Effect.sandbox, Effect.unsandbox))) + const result = yield* (cause(pipe(Effect.failCause(expectedCause), Effect.sandbox, Effect.unsandbox))) deepStrictEqual(result, expectedCause) })) }) diff --git a/packages/effect/test/Effect/error.test.ts b/packages/effect/test/Effect/error.test.ts index 6cf81f6af2..9d13734397 100644 --- a/packages/effect/test/Effect/error.test.ts +++ b/packages/effect/test/Effect/error.test.ts @@ -1,4 +1,4 @@ -import { Cause, Data, Effect } from "effect" +import { Cause, Data, Effect, pipe } from "effect" import { assertTrue, deepStrictEqual } from "effect/test/util" import * as it from "effect/test/utils/extend" import { describe } from "vitest" @@ -7,19 +7,19 @@ class TestError extends Data.TaggedError("TestError")<{}> {} describe("Effect", () => { it.effect("TaggedError has a stack", () => - Effect.gen(function*($) { - const cause = yield* $(Effect.flip(Effect.sandbox(Effect.withSpan("A")(new TestError())))) + Effect.gen(function*() { + const cause = yield* (Effect.flip(Effect.sandbox(Effect.withSpan("A")(new TestError())))) const log = Cause.pretty(cause) assertTrue(log.includes("TestError")) if (typeof window === "undefined") { - assertTrue(log.replaceAll("\\", "/").includes("test/Effect/error.test.ts:11:78")) + assertTrue(log.replaceAll("\\", "/").includes("test/Effect/error.test.ts:11:77")) } assertTrue(log.includes("at A")) })) it.effect("tryPromise", () => - Effect.gen(function*($) { - const cause = yield* $( + Effect.gen(function*() { + const cause = yield* pipe( Effect.tryPromise({ try: () => Promise.reject("fail"), catch: () => new TestError() @@ -36,12 +36,12 @@ describe("Effect", () => { })) it.effect("allow message prop", () => - Effect.gen(function*($) { + Effect.gen(function*() { class MessageError extends Data.TaggedError("MessageError")<{ readonly name: string readonly message: string }> {} - const cause = yield* $( + const cause = yield* pipe( Effect.tryPromise({ try: () => Promise.reject("fail"), catch: () => new MessageError({ name: "Failure", message: "some message" }) diff --git a/packages/effect/test/Effect/filtering.test.ts b/packages/effect/test/Effect/filtering.test.ts index a90792a4b7..921143d973 100644 --- a/packages/effect/test/Effect/filtering.test.ts +++ b/packages/effect/test/Effect/filtering.test.ts @@ -11,45 +11,45 @@ const exactlyOnce = ( value: A, f: (_: Effect.Effect) => Effect.Effect ): Effect.Effect => { - return Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - const res = yield* $(f(pipe(Ref.update(ref, (n) => n + 1), Effect.zipRight(Effect.succeed(value))))) - const count = yield* $(Ref.get(ref)) - yield* $(count !== 1 ? Effect.fail("Accessed more than once") : Effect.void) + return Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + const res = yield* (f(pipe(Ref.update(ref, (n) => n + 1), Effect.zipRight(Effect.succeed(value))))) + const count = yield* (Ref.get(ref)) + yield* (count !== 1 ? Effect.fail("Accessed more than once") : Effect.void) return res }) } describe("Effect", () => { it.effect("filter - filters a collection using an effectual predicate", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make>([])) - const results = yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make>([])) + const results = yield* ( pipe( [2, 4, 6, 3, 5, 6], Effect.filter((n) => pipe(Ref.update(ref, (ns) => [n, ...ns]), Effect.as(n % 2 === 0))) ) ) - const effects = yield* $(Ref.get(ref)) + const effects = yield* (Ref.get(ref)) deepStrictEqual(Array.from(results), [2, 4, 6, 6]) deepStrictEqual(Array.from(effects), [2, 4, 6, 3, 5, 6]) })) it.effect("filter/negate - filters a collection using an effectual predicate, removing all elements that satisfy the predicate", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make>([])) - const results = yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make>([])) + const results = yield* ( pipe( [2, 4, 6, 3, 5, 6], Effect.filter((n) => pipe(Ref.update(ref, (ns) => [n, ...ns]), Effect.as(n % 2 === 0)), { negate: true }) ) ) - const effects = yield* $(Ref.get(ref)) + const effects = yield* (Ref.get(ref)) deepStrictEqual(Array.from(results), [3, 5]) deepStrictEqual(Array.from(effects), [2, 4, 6, 3, 5, 6]) })) it.effect("filter/concurrency - filters a collection in parallel using an effectual predicate", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* ( pipe( [2, 4, 6, 3, 5, 6, 10, 11, 15, 17, 20, 22, 23, 25, 28], Effect.filter((n) => Effect.succeed(n % 2 === 0), { concurrency: "unbounded" }) @@ -58,8 +58,8 @@ describe("Effect", () => { deepStrictEqual(Array.from(result), [2, 4, 6, 6, 10, 20, 22, 28]) })) it.effect("filter/concurrency+negate - filters a collection in parallel using an effectual predicate, removing all elements that satisfy the predicate", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* ( pipe( [2, 4, 6, 3, 5, 6, 10, 11, 15, 17, 20, 22, 23, 25, 28], Effect.filter((n) => Effect.succeed(n % 2 === 0), { @@ -71,8 +71,8 @@ describe("Effect", () => { deepStrictEqual(Array.from(result), [3, 5, 11, 15, 17, 23, 25]) })) it.effect("filterOrElse - returns checked failure from held value", () => - Effect.gen(function*($) { - const goodCase = yield* $( + Effect.gen(function*() { + const goodCase = yield* pipe( exactlyOnce(0, (effect) => pipe( effect, @@ -84,7 +84,7 @@ describe("Effect", () => { Effect.sandbox, Effect.either ) - const badCase = yield* $( + const badCase = yield* pipe( exactlyOnce(1, (effect) => pipe( effect, @@ -101,8 +101,8 @@ describe("Effect", () => { assertLeft(badCase, Either.left("1 was not 0")) })) it.effect("filterOrElse - returns checked failure ignoring value", () => - Effect.gen(function*($) { - const goodCase = yield* $( + Effect.gen(function*() { + const goodCase = yield* pipe( exactlyOnce(0, (effect) => pipe( effect, @@ -114,7 +114,7 @@ describe("Effect", () => { Effect.sandbox, Effect.either ) - const badCase = yield* $( + const badCase = yield* pipe( exactlyOnce(1, (effect) => pipe( effect, @@ -131,8 +131,8 @@ describe("Effect", () => { assertLeft(badCase, Either.left("predicate failed!")) })) it.effect("filterOrFail - returns failure ignoring value", () => - Effect.gen(function*($) { - const goodCase = yield* $( + Effect.gen(function*() { + const goodCase = yield* pipe( exactlyOnce(0, (effect) => pipe( effect, @@ -144,7 +144,7 @@ describe("Effect", () => { Effect.sandbox, Effect.either ) - const badCase = yield* $( + const badCase = yield* pipe( exactlyOnce(1, (effect) => pipe( effect, @@ -161,8 +161,8 @@ describe("Effect", () => { assertLeft(badCase, Either.left("predicate failed!")) })) it.effect("filterOrFail - returns failure", () => - Effect.gen(function*($) { - const goodCase = yield* $( + Effect.gen(function*() { + const goodCase = yield* pipe( exactlyOnce(0, (effect) => pipe( effect, @@ -174,7 +174,7 @@ describe("Effect", () => { Effect.sandbox, Effect.either ) - const badCase = yield* $( + const badCase = yield* pipe( exactlyOnce(1, (effect) => pipe( effect, @@ -191,15 +191,15 @@ describe("Effect", () => { assertLeft(badCase, Either.left("predicate failed, got 1!")) })) it.effect("filterOrFail - without orFailWith", () => - Effect.gen(function*($) { - const goodCase = yield* $( + Effect.gen(function*() { + const goodCase = yield* pipe( Effect.succeed(0), Effect.filterOrFail((n) => n === 0) ) - const goodCaseDataFirst = yield* $( + const goodCaseDataFirst = yield* pipe( Effect.filterOrFail(Effect.succeed(0), (n) => n === 0) ) - const badCase = yield* $( + const badCase = yield* pipe( Effect.succeed(1), Effect.filterOrFail((n) => n === 0), Effect.flip diff --git a/packages/effect/test/Effect/finalization.test.ts b/packages/effect/test/Effect/finalization.test.ts index 590acbe345..3690634b10 100644 --- a/packages/effect/test/Effect/finalization.test.ts +++ b/packages/effect/test/Effect/finalization.test.ts @@ -29,9 +29,9 @@ const asyncVoid = (): Effect.Effect => { describe("Effect", () => { it.effect("fail ensuring", () => - Effect.gen(function*($) { + Effect.gen(function*() { let finalized = false - const result = yield* $( + const result = yield* pipe( Effect.fail(ExampleError), Effect.ensuring(Effect.sync(() => { finalized = true @@ -42,9 +42,9 @@ describe("Effect", () => { assertTrue(finalized) })) it.effect("fail on error", () => - Effect.gen(function*($) { + Effect.gen(function*() { let finalized = false - const result = yield* $( + const result = yield* pipe( Effect.fail(ExampleError), Effect.onError(() => Effect.sync(() => { @@ -57,10 +57,10 @@ describe("Effect", () => { assertTrue(finalized) })) it.effect("finalizer errors not caught", () => - Effect.gen(function*($) { + Effect.gen(function*() { const e2 = new Error("e2") const e3 = new Error("e3") - const result = yield* $( + const result = yield* ( pipe( Effect.fail(ExampleError), Effect.ensuring(Effect.die(e2)), @@ -74,9 +74,9 @@ describe("Effect", () => { deepStrictEqual(result, expected) })) it.effect("finalizer errors reported", () => - Effect.gen(function*($) { + Effect.gen(function*() { let reported: Exit.Exit | undefined - const result = yield* $( + const result = yield* ( pipe( Effect.succeed(42), Effect.ensuring(Effect.die(ExampleError)), @@ -97,8 +97,8 @@ describe("Effect", () => { assertFalse(reported !== undefined && Exit.isSuccess(reported)) })) it.effect("acquireUseRelease exit.effect() is usage result", () => - Effect.gen(function*($) { - const result = yield* $(Effect.acquireUseRelease( + Effect.gen(function*() { + const result = yield* (Effect.acquireUseRelease( Effect.void, () => Effect.succeed(42), () => Effect.void @@ -106,8 +106,8 @@ describe("Effect", () => { strictEqual(result, 42) })) it.effect("error in just acquisition", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* ( pipe( Effect.acquireUseRelease( Effect.fail(ExampleError), @@ -120,8 +120,8 @@ describe("Effect", () => { deepStrictEqual(result, Exit.fail(ExampleError)) })) it.effect("error in just release", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* ( pipe( Effect.acquireUseRelease( Effect.void, @@ -134,8 +134,8 @@ describe("Effect", () => { deepStrictEqual(result, Exit.die(ExampleError)) })) it.effect("error in just usage", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* ( pipe( Effect.acquireUseRelease( Effect.void, @@ -148,8 +148,8 @@ describe("Effect", () => { deepStrictEqual(result, Exit.fail(ExampleError)) })) it.effect("rethrown caught error in acquisition", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Effect.acquireUseRelease( Effect.fail(ExampleError), () => Effect.void, @@ -162,8 +162,8 @@ describe("Effect", () => { deepStrictEqual(result, ExampleError) })) it.effect("rethrown caught error in release", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* ( pipe( Effect.acquireUseRelease( Effect.void, @@ -176,8 +176,8 @@ describe("Effect", () => { deepStrictEqual(result, Exit.die(ExampleError)) })) it.effect("rethrown caught error in usage", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Effect.acquireUseRelease( Effect.void, () => Effect.fail(ExampleError), @@ -188,7 +188,7 @@ describe("Effect", () => { deepStrictEqual(result, Exit.fail(ExampleError)) })) it.effect("test eval of async fail", () => - Effect.gen(function*($) { + Effect.gen(function*() { const io1 = Effect.acquireUseRelease( Effect.void, () => asyncExampleError(), @@ -199,25 +199,25 @@ describe("Effect", () => { () => asyncExampleError(), () => asyncVoid() ) - const a1 = yield* $(Effect.exit(io1)) - const a2 = yield* $(Effect.exit(io2)) - const a3 = yield* $(io1, Effect.exit) - const a4 = yield* $(io2, Effect.exit) + const a1 = yield* (Effect.exit(io1)) + const a2 = yield* (Effect.exit(io2)) + const a3 = yield* pipe(io1, Effect.exit) + const a4 = yield* pipe(io2, Effect.exit) deepStrictEqual(a1, Exit.fail(ExampleError)) deepStrictEqual(a2, Exit.fail(ExampleError)) deepStrictEqual(a3, Exit.fail(ExampleError)) deepStrictEqual(a4, Exit.fail(ExampleError)) })) it.live("acquireUseRelease regression 1", () => - Effect.gen(function*($) { + Effect.gen(function*() { const makeLogger = (ref: Ref.Ref>) => { return (line: string): Effect.Effect => { return Ref.update(ref, Chunk.prepend(line)) } } - const ref = yield* $(Ref.make(Chunk.empty())) + const ref = yield* (Ref.make(Chunk.empty())) const log = makeLogger(ref) - const fiber = yield* $( + const fiber = yield* pipe( Effect.acquireUseRelease( Effect.acquireUseRelease( Effect.void, @@ -239,18 +239,18 @@ describe("Effect", () => { ), Effect.fork ) - yield* $( + yield* pipe( Ref.get(ref), Effect.zipLeft(Effect.sleep(Duration.millis(1))), Effect.repeat({ until: (list) => pipe(list, Array.findFirst((s) => s === "start 1"), Option.isSome) }) ) - yield* $(Fiber.interrupt(fiber)) - yield* $( + yield* (Fiber.interrupt(fiber)) + yield* pipe( Ref.get(ref), Effect.zipLeft(Effect.sleep(Duration.millis(1))), Effect.repeat({ until: (list) => pipe(list, Array.findFirst((s) => s === "release 2"), Option.isSome) }) ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) assertTrue(pipe( result, Array.findFirst((s) => s === "start 1"), @@ -265,11 +265,11 @@ describe("Effect", () => { assertTrue(pipe(result, Array.findFirst((s) => s === "release 2"), Option.isSome)) })) it.live("interrupt waits for finalizer", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(false)) - const deferred1 = yield* $(Deferred.make()) - const deferred2 = yield* $(Deferred.make()) - const fiber = yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(false)) + const deferred1 = yield* (Deferred.make()) + const deferred2 = yield* (Deferred.make()) + const fiber = yield* ( pipe( Deferred.succeed(deferred1, void 0), Effect.zipRight(Deferred.await(deferred2)), @@ -277,28 +277,28 @@ describe("Effect", () => { Effect.fork ) ) - yield* $(Deferred.await(deferred1)) - yield* $(Fiber.interrupt(fiber)) - const result = yield* $(Ref.get(ref)) + yield* (Deferred.await(deferred1)) + yield* (Fiber.interrupt(fiber)) + const result = yield* (Ref.get(ref)) assertTrue(result) })) it.effect("onExit - executes that a cleanup function runs when effect succeeds", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(false)) - yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(false)) + yield* pipe( Effect.void, Effect.onExit(Exit.match({ onFailure: () => Effect.void, onSuccess: () => Ref.set(ref, true) })) ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) assertTrue(result) })) it.effect("onExit - ensures that a cleanup function runs when an effect fails", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(false)) - yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(false)) + yield* pipe( Effect.die(Cause.RuntimeException), Effect.onExit((exit) => Exit.isFailure(exit) && Cause.isDie(exit.effect_instruction_i0) ? @@ -308,14 +308,14 @@ describe("Effect", () => { Effect.sandbox, Effect.ignore ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) assertTrue(result) })) it.effect("onExit - ensures that a cleanup function runs when an effect is interrupted", () => - Effect.gen(function*($) { - const latch1 = yield* $(Deferred.make()) - const latch2 = yield* $(Deferred.make()) - const fiber = yield* $( + Effect.gen(function*() { + const latch1 = yield* (Deferred.make()) + const latch2 = yield* (Deferred.make()) + const fiber = yield* ( pipe( Deferred.succeed(latch1, void 0), Effect.zipRight(Effect.never), @@ -327,9 +327,9 @@ describe("Effect", () => { Effect.fork ) ) - yield* $(Deferred.await(latch1)) - yield* $(Fiber.interrupt(fiber)) - const result = yield* $(Deferred.await(latch2)) + yield* (Deferred.await(latch1)) + yield* (Fiber.interrupt(fiber)) + const result = yield* (Deferred.await(latch2)) strictEqual(result, undefined) })) }) diff --git a/packages/effect/test/Effect/foreign.test.ts b/packages/effect/test/Effect/foreign.test.ts index 5d0de72250..3f069c9437 100644 --- a/packages/effect/test/Effect/foreign.test.ts +++ b/packages/effect/test/Effect/foreign.test.ts @@ -1,9 +1,4 @@ -import * as Cause from "effect/Cause" -import * as Context from "effect/Context" -import * as Effect from "effect/Effect" -import * as Either from "effect/Either" -import * as Exit from "effect/Exit" -import * as Option from "effect/Option" +import { Cause, Context, Effect, Either, Exit, Option, pipe } from "effect" import { nextInt } from "effect/Random" import { assertLeft, deepStrictEqual } from "effect/test/util" import * as it from "effect/test/utils/extend" @@ -12,27 +7,27 @@ import { describe } from "vitest" describe("Foreign", () => { it.effect("Unify", () => - Effect.gen(function*($) { - const unifiedEffect = unify((yield* $(nextInt)) > 1 ? Effect.succeed(0) : Effect.fail(1)) - const unifiedExit = unify((yield* $(nextInt)) > 1 ? Exit.succeed(0) : Exit.fail(1)) - const unifiedEither = unify((yield* $(nextInt)) > 1 ? Either.right(0) : Either.left(1)) - const unifiedOption = unify((yield* $(nextInt)) > 1 ? Option.some(0) : Option.none()) - deepStrictEqual(yield* $(unifiedEffect), 0) - deepStrictEqual(yield* $(unifiedExit), 0) - deepStrictEqual(yield* $(unifiedEither), 0) - deepStrictEqual(yield* $(unifiedOption), 0) + Effect.gen(function*() { + const unifiedEffect = unify((yield* nextInt) > 1 ? Effect.succeed(0) : Effect.fail(1)) + const unifiedExit = unify((yield* nextInt) > 1 ? Exit.succeed(0) : Exit.fail(1)) + const unifiedEither = unify((yield* nextInt) > 1 ? Either.right(0) : Either.left(1)) + const unifiedOption = unify((yield* nextInt) > 1 ? Option.some(0) : Option.none()) + deepStrictEqual(yield* unifiedEffect, 0) + deepStrictEqual(yield* unifiedExit, 0) + deepStrictEqual(yield* unifiedEither, 0) + deepStrictEqual(yield* unifiedOption, 0) })) it.effect("Tag", () => - Effect.gen(function*($) { + Effect.gen(function*() { const tag = Context.GenericTag("number") - const result = yield* $(tag, Effect.provideService(tag, 10)) + const result = yield* pipe(tag, Effect.provideService(tag, 10)) deepStrictEqual(result, 10) })) it.effect("Either", () => - Effect.gen(function*($) { - const a = yield* $(Either.right(10)) - const b = yield* $(Effect.either(Either.left(10))) - const c = yield* $( + Effect.gen(function*() { + const a = yield* (Either.right(10)) + const b = yield* (Effect.either(Either.left(10))) + const c = yield* pipe( Either.right(2), Effect.flatMap( (n) => Effect.succeed(n + 1) @@ -43,10 +38,10 @@ describe("Foreign", () => { deepStrictEqual(c, 3) })) it.effect("Option", () => - Effect.gen(function*($) { - const a = yield* $(Option.some(10)) - const b = yield* $(Effect.either(Option.none())) - const c = yield* $( + Effect.gen(function*() { + const a = yield* (Option.some(10)) + const b = yield* (Effect.either(Option.none())) + const c = yield* pipe( Option.some(2), Effect.flatMap( (n) => Effect.succeed(n + 1) diff --git a/packages/effect/test/Effect/forking.test.ts b/packages/effect/test/Effect/forking.test.ts index 6505438665..8310cc2379 100644 --- a/packages/effect/test/Effect/forking.test.ts +++ b/packages/effect/test/Effect/forking.test.ts @@ -12,29 +12,29 @@ import { describe } from "vitest" describe("Effect", () => { it.effect("fork - propagates interruption", () => - Effect.gen(function*($) { - const result = yield* $(Effect.never, Effect.fork, Effect.flatMap(Fiber.interrupt)) + Effect.gen(function*() { + const result = yield* pipe(Effect.never, Effect.fork, Effect.flatMap(Fiber.interrupt)) assertTrue(Exit.isInterrupted(result)) })) it.effect("fork - propagates interruption with zip of defect", () => - Effect.gen(function*($) { - const latch = yield* $(Deferred.make()) - const fiber = yield* $( + Effect.gen(function*() { + const latch = yield* (Deferred.make()) + const fiber = yield* pipe( Deferred.succeed(latch, void 0), Effect.zipRight(Effect.die(new Error())), Effect.zip(Effect.never, { concurrent: true }), Effect.fork ) - yield* $(Deferred.await(latch)) - const result = yield* $(Fiber.interrupt(fiber), Effect.map(Exit.mapErrorCause((cause) => cause))) + yield* (Deferred.await(latch)) + const result = yield* pipe(Fiber.interrupt(fiber), Effect.map(Exit.mapErrorCause((cause) => cause))) assertTrue(Exit.isInterrupted(result)) })) it.effect("fork - interruption status is heritable", () => - Effect.gen(function*($) { - const latch = yield* $(Deferred.make()) - const ref = yield* $(Ref.make(true)) - yield* $( + Effect.gen(function*() { + const latch = yield* (Deferred.make()) + const ref = yield* (Ref.make(true)) + yield* pipe( Effect.checkInterruptible((isInterruptible) => pipe(Ref.set(ref, isInterruptible), Effect.zipRight(Deferred.succeed(latch, void 0))) ), @@ -43,27 +43,27 @@ describe("Effect", () => { Effect.uninterruptible ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) assertFalse(result) })) it.effect("forkWithErrorHandler - calls provided function when task fails", () => - Effect.gen(function*($) { - const deferred = yield* $(Deferred.make()) - yield* $( + Effect.gen(function*() { + const deferred = yield* (Deferred.make()) + yield* pipe( Effect.fail(void 0), Effect.forkWithErrorHandler((e) => pipe(Deferred.succeed(deferred, e), Effect.asVoid)) ) - const result = yield* $(Deferred.await(deferred)) + const result = yield* (Deferred.await(deferred)) strictEqual(result, undefined) })) it.effect("forkAll - returns the list of results in the same order", () => - Effect.gen(function*($) { - const result = yield* $([1, 2, 3].map(Effect.succeed), Effect.forkAll(), Effect.flatMap(Fiber.join)) + Effect.gen(function*() { + const result = yield* pipe([1, 2, 3].map(Effect.succeed), Effect.forkAll(), Effect.flatMap(Fiber.join)) deepStrictEqual(Array.from(result), [1, 2, 3]) })) it.effect("forkAll - happy-path", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Array.from({ length: 1000 }, (_, i) => i + 1).map(Effect.succeed), Effect.forkAll(), Effect.flatMap(Fiber.join) @@ -74,55 +74,55 @@ describe("Effect", () => { ) })) it.effect("forkAll - empty input", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* ( pipe([] as ReadonlyArray>, Effect.forkAll(), Effect.flatMap(Fiber.join)) ) strictEqual(result.length, 0) })) it.effect("forkAll - propagate failures", () => - Effect.gen(function*($) { + Effect.gen(function*() { const boom = new Error() const fail = Effect.fail(boom) - const result = yield* $([fail], Effect.forkAll(), Effect.flatMap((fiber) => Effect.flip(Fiber.join(fiber)))) + const result = yield* pipe([fail], Effect.forkAll(), Effect.flatMap((fiber) => Effect.flip(Fiber.join(fiber)))) strictEqual(result, boom) })) it.effect("forkAll - propagates defects", () => - Effect.gen(function*($) { + Effect.gen(function*() { const boom = new Error("boom") const die = Effect.die(boom) const joinDefect = (fiber: Fiber.Fiber) => { return pipe(fiber, Fiber.join, Effect.sandbox, Effect.flip) } - const fiber1 = yield* $(Effect.forkAll([die])) - const fiber2 = yield* $(Effect.forkAll([die, Effect.succeed(42)])) - const fiber3 = yield* $(Effect.forkAll([die, Effect.succeed(42), Effect.never])) - const result1 = yield* $(joinDefect(fiber1), Effect.map((cause) => cause)) - const result2 = yield* $(joinDefect(fiber2), Effect.map((cause) => cause)) - const result3 = yield* $(joinDefect(fiber3), Effect.map((cause) => cause)) + const fiber1 = yield* (Effect.forkAll([die])) + const fiber2 = yield* (Effect.forkAll([die, Effect.succeed(42)])) + const fiber3 = yield* (Effect.forkAll([die, Effect.succeed(42), Effect.never])) + const result1 = yield* pipe(joinDefect(fiber1), Effect.map((cause) => cause)) + const result2 = yield* pipe(joinDefect(fiber2), Effect.map((cause) => cause)) + const result3 = yield* pipe(joinDefect(fiber3), Effect.map((cause) => cause)) deepStrictEqual(Cause.dieOption(result1), Option.some(boom)) deepStrictEqual(Cause.dieOption(result2), Option.some(boom)) deepStrictEqual(Cause.dieOption(result3), Option.some(boom)) assertTrue(Cause.isInterrupted(result3)) })) it.effect("forkAll - infers correctly", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) const worker = Effect.never const workers = Array.from({ length: 4 }, () => worker) - const fiber = yield* $(Effect.forkAll(workers)) - yield* $(Fiber.interrupt(fiber)) - const result = yield* $(Ref.get(ref)) + const fiber = yield* (Effect.forkAll(workers)) + yield* (Fiber.interrupt(fiber)) + const result = yield* (Ref.get(ref)) strictEqual(result, 0) })) it.effect("forkAll - infers correctly with error type", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) const worker = Effect.forever(Effect.fail(new Cause.RuntimeException("fail"))) const workers = Array.from({ length: 4 }, () => worker) - const fiber = yield* $(Effect.forkAll(workers)) - yield* $(Fiber.interrupt(fiber)) - const result = yield* $(Ref.get(ref)) + const fiber = yield* (Effect.forkAll(workers)) + yield* (Fiber.interrupt(fiber)) + const result = yield* (Ref.get(ref)) strictEqual(result, 0) })) }) diff --git a/packages/effect/test/Effect/interruption.test.ts b/packages/effect/test/Effect/interruption.test.ts index da85465c76..83a6c5059a 100644 --- a/packages/effect/test/Effect/interruption.test.ts +++ b/packages/effect/test/Effect/interruption.test.ts @@ -21,37 +21,37 @@ import { describe } from "vitest" describe("Effect", () => { it.effect("sync forever is interruptible", () => - Effect.gen(function*($) { - const fiber = yield* $(Effect.succeed(1), Effect.forever, Effect.fork) - const result = yield* $(Fiber.interrupt(fiber)) + Effect.gen(function*() { + const fiber = yield* pipe(Effect.succeed(1), Effect.forever, Effect.fork) + const result = yield* (Fiber.interrupt(fiber)) assertTrue(Exit.isFailure(result) && Cause.isInterruptedOnly(result.effect_instruction_i0)) })) it.effect("interrupt of never is interrupted with cause", () => - Effect.gen(function*($) { - const fiber = yield* $(Effect.never, Effect.fork) - const result = yield* $(Fiber.interrupt(fiber)) + Effect.gen(function*() { + const fiber = yield* pipe(Effect.never, Effect.fork) + const result = yield* (Fiber.interrupt(fiber)) assertTrue(Exit.isFailure(result) && Cause.isInterruptedOnly(result.effect_instruction_i0)) })) it.effect("asyncEffect is interruptible", () => - Effect.gen(function*($) { - const fiber = yield* $( + Effect.gen(function*() { + const fiber = yield* ( pipe(Effect.asyncEffect(() => Effect.never), Effect.fork) ) - const result = yield* $(Fiber.interrupt(fiber)) + const result = yield* (Fiber.interrupt(fiber)) assertTrue(Exit.isFailure(result) && Cause.isInterruptedOnly(result.effect_instruction_i0)) })) it.effect("async is interruptible", () => - Effect.gen(function*($) { - const fiber = yield* $(Effect.async(constVoid), Effect.fork) - const result = yield* $(Fiber.interrupt(fiber)) + Effect.gen(function*() { + const fiber = yield* pipe(Effect.async(constVoid), Effect.fork) + const result = yield* (Fiber.interrupt(fiber)) assertTrue(Exit.isFailure(result) && Cause.isInterruptedOnly(result.effect_instruction_i0)) })) it.effect("acquireUseRelease - acquire is uninterruptible", () => - Effect.gen(function*($) { + Effect.gen(function*() { const awaiter = Deferred.unsafeMake(FiberId.none) - const program = Effect.gen(function*($) { - const deferred = yield* $(Deferred.make()) - const fiber = yield* $( + const program = Effect.gen(function*() { + const deferred = yield* (Deferred.make()) + const fiber = yield* ( pipe( Effect.acquireUseRelease( pipe(Deferred.succeed(deferred, void 0), Effect.zipLeft(Deferred.await(awaiter))), @@ -61,7 +61,7 @@ describe("Effect", () => { Effect.forkDaemon ) ) - return yield* $( + return yield* ( pipe( Deferred.await(deferred), Effect.zipRight(pipe( @@ -76,13 +76,13 @@ describe("Effect", () => { ) ) }) - const result = yield* $(program) - yield* $(Deferred.succeed(awaiter, void 0)) + const result = yield* program + yield* (Deferred.succeed(awaiter, void 0)) strictEqual(result, 42) })) it.effect("acquireUseRelease - use is interruptible", () => - Effect.gen(function*($) { - const fiber = yield* $( + Effect.gen(function*() { + const fiber = yield* ( Effect.fork( Effect.acquireUseRelease( Effect.void, @@ -91,14 +91,14 @@ describe("Effect", () => { ) ) ) - const result = yield* $(Fiber.interrupt(fiber)) + const result = yield* (Fiber.interrupt(fiber)) assertTrue(Exit.isInterrupted(result)) })) it.effect("acquireUseRelease - release is called on interrupt", () => - Effect.gen(function*($) { - const deferred1 = yield* $(Deferred.make()) - const deferred2 = yield* $(Deferred.make()) - const fiber = yield* $( + Effect.gen(function*() { + const deferred1 = yield* (Deferred.make()) + const deferred2 = yield* (Deferred.make()) + const fiber = yield* pipe( Effect.fork( Effect.acquireUseRelease( Effect.void, @@ -107,9 +107,9 @@ describe("Effect", () => { ) ) ) - yield* $(Deferred.await(deferred1)) - yield* $(Fiber.interrupt(fiber)) - const result = yield* $( + yield* (Deferred.await(deferred1)) + yield* (Fiber.interrupt(fiber)) + const result = yield* pipe( Deferred.await(deferred2), Effect.timeoutTo({ onTimeout: () => 42, @@ -120,11 +120,11 @@ describe("Effect", () => { strictEqual(result, 0) })) it.effect("acquireUseRelease acquire returns immediately on interrupt", () => - Effect.gen(function*($) { - const deferred1 = yield* $(Deferred.make()) - const deferred2 = yield* $(Deferred.make()) - const deferred3 = yield* $(Deferred.make()) - const fiber = yield* $( + Effect.gen(function*() { + const deferred1 = yield* (Deferred.make()) + const deferred2 = yield* (Deferred.make()) + const deferred3 = yield* (Deferred.make()) + const fiber = yield* ( pipe( Effect.acquireUseRelease( pipe(Deferred.succeed(deferred1, void 0), Effect.zipRight(Deferred.await(deferred2))), @@ -135,14 +135,14 @@ describe("Effect", () => { Effect.fork ) ) - yield* $(Deferred.await(deferred1)) - const result = yield* $(Fiber.interrupt(fiber)) - yield* $(Deferred.succeed(deferred3, void 0)) + yield* (Deferred.await(deferred1)) + const result = yield* (Fiber.interrupt(fiber)) + yield* (Deferred.succeed(deferred3, void 0)) assertTrue(Exit.isInterrupted(result)) })) it.effect("acquireUseRelease disconnect use is interruptible", () => - Effect.gen(function*($) { - const fiber = yield* $( + Effect.gen(function*() { + const fiber = yield* pipe( Effect.acquireUseRelease( Effect.void, () => Effect.never, @@ -151,14 +151,14 @@ describe("Effect", () => { Effect.disconnect, Effect.fork ) - const result = yield* $(Fiber.interrupt(fiber)) + const result = yield* (Fiber.interrupt(fiber)) assertTrue(Exit.isInterrupted(result)) })) it.effect("acquireUseRelease disconnect release called on interrupt in separate fiber", () => - Effect.gen(function*($) { - const deferred1 = yield* $(Deferred.make()) - const deferred2 = yield* $(Deferred.make()) - const fiber = yield* $( + Effect.gen(function*() { + const deferred1 = yield* (Deferred.make()) + const deferred2 = yield* (Deferred.make()) + const fiber = yield* ( pipe( Effect.acquireUseRelease( Effect.void, @@ -169,9 +169,9 @@ describe("Effect", () => { Effect.fork ) ) - yield* $(Deferred.await(deferred1)) - yield* $(Fiber.interrupt(fiber)) - const result = yield* $( + yield* (Deferred.await(deferred1)) + yield* (Fiber.interrupt(fiber)) + const result = yield* ( pipe( Deferred.await(deferred2), Effect.timeoutTo({ @@ -184,10 +184,10 @@ describe("Effect", () => { assertTrue(result) })) it.effect("catchAll + ensuring + interrupt", () => - Effect.gen(function*($) { - const latch = yield* $(Deferred.make()) - const deferred = yield* $(Deferred.make()) - const fiber = yield* $( + Effect.gen(function*() { + const latch = yield* (Deferred.make()) + const deferred = yield* (Deferred.make()) + const fiber = yield* ( pipe( Deferred.succeed(latch, void 0), Effect.zipRight(Effect.never), @@ -196,16 +196,16 @@ describe("Effect", () => { Effect.fork ) ) - yield* $(Deferred.await(latch)) - yield* $(Fiber.interrupt(fiber)) - const result = yield* $(Deferred.await(deferred)) + yield* (Deferred.await(latch)) + yield* (Fiber.interrupt(fiber)) + const result = yield* (Deferred.await(deferred)) assertTrue(result) })) it.effect("finalizer can detect interruption", () => - Effect.gen(function*($) { - const deferred1 = yield* $(Deferred.make()) - const deferred2 = yield* $(Deferred.make()) - const fiber = yield* $( + Effect.gen(function*() { + const deferred1 = yield* (Deferred.make()) + const deferred2 = yield* (Deferred.make()) + const fiber = yield* ( pipe( Deferred.succeed(deferred2, void 0), Effect.zipRight(Effect.never), @@ -218,20 +218,20 @@ describe("Effect", () => { Effect.fork ) ) - yield* $(Deferred.await(deferred2)) - yield* $(Fiber.interrupt(fiber)) - const result = yield* $(Deferred.await(deferred1)) + yield* (Deferred.await(deferred2)) + yield* (Fiber.interrupt(fiber)) + const result = yield* (Deferred.await(deferred1)) assertTrue(result) })) it.effect("interrupted cause persists after catching", () => - Effect.gen(function*($) { + Effect.gen(function*() { const process = (list: Chunk.Chunk>): Chunk.Chunk> => { return pipe(list, Chunk.map(Exit.mapErrorCause((cause) => cause))) } - const latch1 = yield* $(Deferred.make()) - const latch2 = yield* $(Deferred.make()) - const exits = yield* $(Ref.make(Chunk.empty>())) - const fiber = yield* $( + const latch1 = yield* (Deferred.make()) + const latch2 = yield* (Deferred.make()) + const exits = yield* (Ref.make(Chunk.empty>())) + const fiber = yield* pipe( Effect.uninterruptibleMask((restore) => pipe( restore(pipe( @@ -249,8 +249,8 @@ describe("Effect", () => { ), Effect.fork ) - yield* $(Deferred.await(latch1), Effect.zipRight(Fiber.interrupt(fiber))) - const result = yield* $(Ref.get(exits), Effect.map(process)) + yield* pipe(Deferred.await(latch1), Effect.zipRight(Fiber.interrupt(fiber))) + const result = yield* pipe(Ref.get(exits), Effect.map(process)) strictEqual(Chunk.size(result), 2) assertTrue(pipe( result, @@ -259,10 +259,10 @@ describe("Effect", () => { )) })) it.effect("interruption of raced", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - const latch1 = yield* $(Deferred.make()) - const latch2 = yield* $(Deferred.make()) + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + const latch1 = yield* (Deferred.make()) + const latch2 = yield* (Deferred.make()) const make = (deferred: Deferred.Deferred) => { return pipe( Deferred.succeed(deferred, void 0), @@ -270,16 +270,16 @@ describe("Effect", () => { Effect.onInterrupt(() => Ref.update(ref, (n) => n + 1)) ) } - const raced = yield* $(make(latch1), Effect.race(make(latch2)), Effect.fork) - yield* $(Deferred.await(latch1), Effect.zipRight(Deferred.await(latch2))) - yield* $(Fiber.interrupt(raced)) - const result = yield* $(Ref.get(ref)) + const raced = yield* pipe(make(latch1), Effect.race(make(latch2)), Effect.fork) + yield* pipe(Deferred.await(latch1), Effect.zipRight(Deferred.await(latch2))) + yield* (Fiber.interrupt(raced)) + const result = yield* (Ref.get(ref)) strictEqual(result, 2) })) it.effect("recovery of error in finalizer", () => - Effect.gen(function*($) { - const recovered = yield* $(Ref.make(false)) - const fiber = yield* $(withLatch((release) => + Effect.gen(function*() { + const recovered = yield* (Ref.make(false)) + const fiber = yield* (withLatch((release) => pipe( release, Effect.zipRight(Effect.never), @@ -291,14 +291,14 @@ describe("Effect", () => { Effect.fork ) )) - yield* $(Fiber.interrupt(fiber)) - const result = yield* $(Ref.get(recovered)) + yield* (Fiber.interrupt(fiber)) + const result = yield* (Ref.get(recovered)) assertTrue(result) })) it.effect("recovery of interruptible", () => - Effect.gen(function*($) { - const recovered = yield* $(Ref.make(false)) - const fiber = yield* $(withLatch((release) => + Effect.gen(function*() { + const recovered = yield* (Ref.make(false)) + const fiber = yield* (withLatch((release) => pipe( release, Effect.zipRight(pipe(Effect.never, Effect.interruptible)), @@ -310,14 +310,14 @@ describe("Effect", () => { Effect.fork ) )) - yield* $(Fiber.interrupt(fiber)) - const result = yield* $(Ref.get(recovered)) + yield* (Fiber.interrupt(fiber)) + const result = yield* (Ref.get(recovered)) assertTrue(result) })) it.effect("sandbox of interruptible", () => - Effect.gen(function*($) { - const recovered = yield* $(Ref.make>>(Option.none())) - const fiber = yield* $(withLatch((release) => + Effect.gen(function*() { + const recovered = yield* (Ref.make>>(Option.none())) + const fiber = yield* (withLatch((release) => pipe( release, Effect.zipRight(pipe(Effect.never, Effect.interruptible)), @@ -330,14 +330,14 @@ describe("Effect", () => { Effect.fork ) )) - yield* $(Fiber.interrupt(fiber)) - const result = yield* $(Ref.get(recovered)) + yield* (Fiber.interrupt(fiber)) + const result = yield* (Ref.get(recovered)) assertSome(result, Either.left(true)) })) it.effect("run of interruptible", () => - Effect.gen(function*($) { - const recovered = yield* $(Ref.make>(Option.none())) - const fiber = yield* $(withLatch((release) => + Effect.gen(function*() { + const recovered = yield* (Ref.make>(Option.none())) + const fiber = yield* (withLatch((release) => pipe( release, Effect.zipRight(pipe(Effect.never, Effect.interruptible)), @@ -347,14 +347,14 @@ describe("Effect", () => { Effect.fork ) )) - yield* $(Fiber.interrupt(fiber)) - const result = yield* $(Ref.get(recovered)) + yield* (Fiber.interrupt(fiber)) + const result = yield* (Ref.get(recovered)) assertSome(result, true) })) it.effect("alternating interruptibility", () => - Effect.gen(function*($) { - const counter = yield* $(Ref.make(0)) - const fiber = yield* $(withLatch((release) => + Effect.gen(function*() { + const counter = yield* (Ref.make(0)) + const fiber = yield* (withLatch((release) => pipe( release, Effect.zipRight(pipe(Effect.never, Effect.interruptible, Effect.exit)), @@ -367,14 +367,14 @@ describe("Effect", () => { Effect.fork ) )) - yield* $(Fiber.interrupt(fiber)) - const result = yield* $(Ref.get(counter)) + yield* (Fiber.interrupt(fiber)) + const result = yield* (Ref.get(counter)) strictEqual(result, 2) })) it.effect("interruption after defect", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(false)) - const fiber = yield* $(withLatch((release) => + Effect.gen(function*() { + const ref = yield* (Ref.make(false)) + const fiber = yield* (withLatch((release) => pipe( Effect.try(() => { throw new Error() @@ -386,14 +386,14 @@ describe("Effect", () => { Effect.fork ) )) - yield* $(Fiber.interrupt(fiber)) - const result = yield* $(Ref.get(ref)) + yield* (Fiber.interrupt(fiber)) + const result = yield* (Ref.get(ref)) assertTrue(result) })) it.effect("interruption after defect 2", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(false)) - const fiber = yield* $(withLatch((release) => + Effect.gen(function*() { + const ref = yield* (Ref.make(false)) + const fiber = yield* (withLatch((release) => pipe( Effect.try(() => { throw new Error() @@ -405,14 +405,14 @@ describe("Effect", () => { Effect.fork ) )) - yield* $(Fiber.interrupt(fiber)) - const result = yield* $(Ref.get(ref)) + yield* (Fiber.interrupt(fiber)) + const result = yield* (Ref.get(ref)) assertTrue(result) })) it.effect("disconnect returns immediately on interrupt", () => - Effect.gen(function*($) { - const deferred = yield* $(Deferred.make()) - const fiber = yield* $( + Effect.gen(function*() { + const deferred = yield* (Deferred.make()) + const fiber = yield* ( pipe( Deferred.succeed(deferred, void 0), Effect.zipRight(Effect.never), @@ -421,16 +421,16 @@ describe("Effect", () => { Effect.fork ) ) - yield* $(Deferred.await(deferred)) - const result = yield* $(Fiber.interrupt(fiber)) + yield* (Deferred.await(deferred)) + const result = yield* (Fiber.interrupt(fiber)) assertTrue(Exit.isInterrupted(result)) })) it.live("disconnected effect that is then interrupted eventually performs interruption", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(false)) - const deferred1 = yield* $(Deferred.make()) - const deferred2 = yield* $(Deferred.make()) - const fiber = yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(false)) + const deferred1 = yield* (Deferred.make()) + const deferred2 = yield* (Deferred.make()) + const fiber = yield* ( pipe( Deferred.succeed(deferred1, void 0), Effect.zipRight(Effect.never), @@ -445,24 +445,24 @@ describe("Effect", () => { Effect.fork ) ) - yield* $(Deferred.await(deferred1)) - yield* $(Fiber.interrupt(fiber)) - yield* $(Deferred.await(deferred2)) - const result = yield* $(Ref.get(ref)) + yield* (Deferred.await(deferred1)) + yield* (Fiber.interrupt(fiber)) + yield* (Deferred.await(deferred2)) + const result = yield* (Ref.get(ref)) assertTrue(result) })) it.effect("cause reflects interruption", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( withLatch((release) => pipe(release, Effect.zipRight(Effect.fail("foo")), Effect.fork)), Effect.flatMap(Fiber.interrupt) ) deepStrictEqual(result, Exit.fail("foo")) })) it.live("acquireRelease use inherits interrupt status", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(false)) - const fiber = yield* $(withLatchAwait((release2, await2) => + Effect.gen(function*() { + const ref = yield* (Ref.make(false)) + const fiber = yield* (withLatchAwait((release2, await2) => pipe( withLatch((release1) => pipe( @@ -483,16 +483,16 @@ describe("Effect", () => { Effect.zipLeft(release2) ) )) - yield* $(Fiber.interrupt(fiber)) - const result = yield* $(Ref.get(ref)) + yield* (Fiber.interrupt(fiber)) + const result = yield* (Ref.get(ref)) assertTrue(result) })) it.live("acquireRelease use inherits interrupt status 2", () => - Effect.gen(function*($) { - const latch1 = yield* $(Deferred.make()) - const latch2 = yield* $(Deferred.make()) - const ref = yield* $(Ref.make(false)) - const fiber = yield* $( + Effect.gen(function*() { + const latch1 = yield* (Deferred.make()) + const latch2 = yield* (Deferred.make()) + const ref = yield* (Ref.make(false)) + const fiber = yield* pipe( Effect.acquireUseRelease( Deferred.succeed(latch1, void 0), () => @@ -507,16 +507,16 @@ describe("Effect", () => { Effect.uninterruptible, Effect.fork ) - yield* $(Deferred.await(latch1)) - yield* $(Deferred.succeed(latch2, void 0)) - yield* $(Fiber.interrupt(fiber)) - const result = yield* $(Ref.get(ref)) + yield* (Deferred.await(latch1)) + yield* (Deferred.succeed(latch2, void 0)) + yield* (Fiber.interrupt(fiber)) + const result = yield* (Ref.get(ref)) assertTrue(result) })) it.live("async can be uninterruptible", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(false)) - const fiber = yield* $(withLatch((release) => + Effect.gen(function*() { + const ref = yield* (Ref.make(false)) + const fiber = yield* (withLatch((release) => pipe( release, Effect.zipRight(Effect.sleep(Duration.millis(10))), @@ -525,28 +525,28 @@ describe("Effect", () => { Effect.fork ) )) - yield* $(Fiber.interrupt(fiber)) - const result = yield* $(Ref.get(ref)) + yield* (Fiber.interrupt(fiber)) + const result = yield* (Ref.get(ref)) assertTrue(result) })) it.live("closing scope is uninterruptible", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(false)) - const deferred = yield* $(Deferred.make()) + Effect.gen(function*() { + const ref = yield* (Ref.make(false)) + const deferred = yield* (Deferred.make()) const child = pipe( Deferred.succeed(deferred, void 0), Effect.zipRight(Effect.sleep(Duration.millis(10))), Effect.zipRight(Ref.set(ref, true)) ) const parent = pipe(child, Effect.uninterruptible, Effect.fork, Effect.zipRight(Deferred.await(deferred))) - const fiber = yield* $(Effect.fork(parent)) - yield* $(Deferred.await(deferred)) - yield* $(Fiber.interrupt(fiber)) - const result = yield* $(Ref.get(ref)) + const fiber = yield* (Effect.fork(parent)) + yield* (Deferred.await(deferred)) + yield* (Fiber.interrupt(fiber)) + const result = yield* (Ref.get(ref)) assertTrue(result) })) it.effect("async cancelation", () => - Effect.gen(function*($) { + Effect.gen(function*() { const ref = MutableRef.make(0) const effect = Effect.async(() => { pipe(ref, MutableRef.set(MutableRef.get(ref) + 1)) @@ -554,15 +554,15 @@ describe("Effect", () => { pipe(ref, MutableRef.set(MutableRef.get(ref) - 1)) }) }) - yield* $(Effect.void, Effect.race(effect)) + yield* pipe(Effect.void, Effect.race(effect)) const result = MutableRef.get(ref) strictEqual(result, 0) })) it.effect("interruption status is inheritable", () => - Effect.gen(function*($) { - const latch = yield* $(Deferred.make()) - const ref = yield* $(Ref.make(true)) - yield* $( + Effect.gen(function*() { + const latch = yield* (Deferred.make()) + const ref = yield* (Ref.make(true)) + yield* pipe( Effect.checkInterruptible((isInterruptible) => pipe(Ref.set(ref, isInterruptible), Effect.zipRight(Deferred.succeed(latch, void 0))) ), @@ -570,39 +570,39 @@ describe("Effect", () => { Effect.zipRight(Deferred.await(latch)), Effect.uninterruptible ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) assertFalse(result) })) it.effect("running an effect preserves interruption status", () => - Effect.gen(function*($) { - const deferred = yield* $(Deferred.make()) - const fiber = yield* $( + Effect.gen(function*() { + const deferred = yield* (Deferred.make()) + const fiber = yield* ( pipe(Deferred.succeed(deferred, void 0), Effect.zipRight(Effect.never), Effect.fork) ) - yield* $(Deferred.await(deferred)) - const result = yield* $(Fiber.interrupt(fiber)) + yield* (Deferred.await(deferred)) + const result = yield* (Fiber.interrupt(fiber)) assertTrue( Exit.isFailure(result) && Exit.isInterrupted(result) && Cause.isInterruptedOnly(result.effect_instruction_i0) ) })) it.effect("running an effect swallows inner interruption", () => - Effect.gen(function*($) { - const deferred = yield* $(Deferred.make()) - yield* $(Effect.interrupt, Effect.exit, Effect.zipRight(Deferred.succeed(deferred, 42))) - const result = yield* $(Deferred.await(deferred)) + Effect.gen(function*() { + const deferred = yield* (Deferred.make()) + yield* pipe(Effect.interrupt, Effect.exit, Effect.zipRight(Deferred.succeed(deferred, 42))) + const result = yield* (Deferred.await(deferred)) strictEqual(result, 42) })) it.effect("AbortSignal is aborted", () => - Effect.gen(function*($) { + Effect.gen(function*() { let signal: AbortSignal - const fiber = yield* $( + const fiber = yield* pipe( Effect.async((_cb, signal_) => { signal = signal_ }), Effect.fork ) - yield* $(Effect.yieldNow()) - yield* $(Fiber.interrupt(fiber)) + yield* (Effect.yieldNow()) + yield* (Fiber.interrupt(fiber)) strictEqual(signal!.aborted, true) })) }) diff --git a/packages/effect/test/Effect/join-order.test.ts b/packages/effect/test/Effect/join-order.test.ts index 207afec674..8ab8a51d78 100644 --- a/packages/effect/test/Effect/join-order.test.ts +++ b/packages/effect/test/Effect/join-order.test.ts @@ -8,15 +8,15 @@ import { describe } from "vitest" describe("Effect", () => { it.effect("zip/all joins fibers in the correct order", () => - Effect.gen(function*($) { - const ref = yield* $(FiberRef.make(5)) - const fiber = yield* $(Effect.fork(Effect.zip( + Effect.gen(function*() { + const ref = yield* FiberRef.make(5) + const fiber = yield* Effect.fork(Effect.zip( FiberRef.set(ref, 10).pipe(Effect.delay("2 seconds")), FiberRef.set(ref, 15), { concurrent: true } - ))) - yield* $(TestClock.adjust("3 seconds")) - yield* $(Fiber.join(fiber)) - strictEqual(yield* $(FiberRef.get(ref)), 10) + )) + yield* TestClock.adjust("3 seconds") + yield* Fiber.join(fiber) + strictEqual(yield* FiberRef.get(ref), 10) }).pipe(Effect.scoped)) }) diff --git a/packages/effect/test/Effect/mapping.test.ts b/packages/effect/test/Effect/mapping.test.ts index fb04302888..3c1f5c1f20 100644 --- a/packages/effect/test/Effect/mapping.test.ts +++ b/packages/effect/test/Effect/mapping.test.ts @@ -26,23 +26,23 @@ const fib = (n: number): number => { describe("Effect", () => { it.effect("flip must make error into value", () => - Effect.gen(function*($) { - const result = yield* $(Effect.flip(Effect.fail(ExampleError))) + Effect.gen(function*() { + const result = yield* (Effect.flip(Effect.fail(ExampleError))) deepStrictEqual(result, ExampleError) })) it.effect("flip must make value into error", () => - Effect.gen(function*($) { - const result = yield* $(Effect.either(Effect.flip(Effect.succeed(42)))) + Effect.gen(function*() { + const result = yield* (Effect.either(Effect.flip(Effect.succeed(42)))) assertLeft(result, 42) })) it.effect("flipping twice returns the identical value", () => - Effect.gen(function*($) { - const result = yield* $(Effect.flip(Effect.flip(Effect.succeed(42)))) + Effect.gen(function*() { + const result = yield* (Effect.flip(Effect.flip(Effect.succeed(42)))) strictEqual(result, 42) })) it.effect("mapBoth - maps over both error and value channels", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Effect.fail(10), Effect.mapBoth({ onFailure: (n) => n.toString(), @@ -53,37 +53,41 @@ describe("Effect", () => { assertLeft(result, "10") })) it.effect("mapAccum", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* ( Effect.mapAccum(["a", "b"], "", (prev, cur, i) => Effect.succeed([prev + cur + i, cur])) ) deepStrictEqual(result, ["a0b1", ["a", "b"]]) })) it.effect("tryMap - returns an effect whose success is mapped by the specified side effecting function", () => - Effect.gen(function*($) { - const result = yield* $(Effect.succeed("123"), Effect.tryMap({ try: parseInt, catch: identity })) + Effect.gen(function*() { + const result = yield* pipe(Effect.succeed("123"), Effect.tryMap({ try: parseInt, catch: identity })) strictEqual(result, 123) })) it.effect("tryMap - translates any thrown exceptions into typed failed effects", () => - Effect.gen(function*($) { - const result = yield* $(Effect.succeed("hello"), Effect.tryMap({ try: parseInt, catch: identity }), Effect.exit) + Effect.gen(function*() { + const result = yield* pipe( + Effect.succeed("hello"), + Effect.tryMap({ try: parseInt, catch: identity }), + Effect.exit + ) deepStrictEqual(result, Exit.fail(new Cause.IllegalArgumentException())) })) it.effect("negate - on true returns false", () => - Effect.gen(function*($) { - const result = yield* $(Effect.negate(Effect.succeed(true))) + Effect.gen(function*() { + const result = yield* (Effect.negate(Effect.succeed(true))) assertFalse(result) })) it.effect("negate - on false returns true", () => - Effect.gen(function*($) { - const result = yield* $(Effect.negate(Effect.succeed(false))) + Effect.gen(function*() { + const result = yield* (Effect.negate(Effect.succeed(false))) assertTrue(result) })) it.effect("summarized - returns summary and value", () => - Effect.gen(function*($) { - const counter = yield* $(Ref.make(0)) + Effect.gen(function*() { + const counter = yield* (Ref.make(0)) const increment = Ref.updateAndGet(counter, (n) => n + 1) - const [[start, end], value] = yield* $( + const [[start, end], value] = yield* ( pipe(increment, Effect.summarized(increment, (start, end) => [start, end] as const)) ) strictEqual(start, 1) @@ -91,29 +95,29 @@ describe("Effect", () => { strictEqual(end, 3) })) it.effect("point, bind, map", () => - Effect.gen(function*($) { + Effect.gen(function*() { const fibEffect = (n: number): Effect.Effect => { if (n <= 1) { return Effect.succeed(n) } return pipe(fibEffect(n - 1), Effect.zipWith(fibEffect(n - 2), (a, b) => a + b)) } - const result = yield* $(fibEffect(10)) + const result = yield* (fibEffect(10)) strictEqual(result, fib(10)) })) it.effect("effect, bind, map", () => - Effect.gen(function*($) { + Effect.gen(function*() { const fibEffect = (n: number): Effect.Effect => { if (n <= 1) { return Effect.try(() => n) } return pipe(fibEffect(n - 1), Effect.zipWith(fibEffect(n - 2), (a, b) => a + b)) } - const result = yield* $(fibEffect(10)) + const result = yield* (fibEffect(10)) strictEqual(result, fib(10)) })) it.effect("effect, bind, map, redeem", () => - Effect.gen(function*($) { + Effect.gen(function*() { const fibEffect = (n: number): Effect.Effect => { if (n <= 1) { return pipe( @@ -125,7 +129,7 @@ describe("Effect", () => { } return pipe(fibEffect(n - 1), Effect.zipWith(fibEffect(n - 2), (a, b) => a + b)) } - const result = yield* $(fibEffect(10)) + const result = yield* (fibEffect(10)) strictEqual(result, fib(10)) })) }) diff --git a/packages/effect/test/Effect/memoization.test.ts b/packages/effect/test/Effect/memoization.test.ts index 4c20cf25e8..a151c5a3d0 100644 --- a/packages/effect/test/Effect/memoization.test.ts +++ b/packages/effect/test/Effect/memoization.test.ts @@ -9,40 +9,40 @@ import { describe } from "vitest" describe("Effect", () => { it.effect("non-memoized returns new instances on repeated calls", () => - it.flakyTest(Effect.gen(function*($) { + it.flakyTest(Effect.gen(function*() { const random = Random.nextInt - const [first, second] = yield* $(random, Effect.zip(random)) + const [first, second] = yield* pipe(random, Effect.zip(random)) notStrictEqual(first, second) }))) it.effect("memoized returns the same instance on repeated calls", () => - it.flakyTest(Effect.gen(function*($) { + it.flakyTest(Effect.gen(function*() { const memo = Effect.cached(Random.nextInt) - const [first, second] = yield* $(memo, Effect.flatMap((effect) => pipe(effect, Effect.zip(effect)))) + const [first, second] = yield* pipe(memo, Effect.flatMap((effect) => pipe(effect, Effect.zip(effect)))) strictEqual(first, second) }))) it.effect("memoized function returns the same instance on repeated calls", () => - it.flakyTest(Effect.gen(function*($) { + it.flakyTest(Effect.gen(function*() { const randomNumber = (n: number) => Random.nextIntBetween(n, n + n + 1) - const memoized = yield* $(Effect.cachedFunction(randomNumber)) - const a = yield* $(memoized(10)) - const b = yield* $(memoized(10)) - const c = yield* $(memoized(11)) - const d = yield* $(memoized(11)) + const memoized = yield* (Effect.cachedFunction(randomNumber)) + const a = yield* (memoized(10)) + const b = yield* (memoized(10)) + const c = yield* (memoized(11)) + const d = yield* (memoized(11)) strictEqual(a, b) notStrictEqual(b, c) strictEqual(c, d) }))) it.effect("once returns an effect that will only be executed once", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - const effect: Effect.Effect = yield* $(Ref.update(ref, (n) => n + 1), Effect.once) - yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + const effect: Effect.Effect = yield* pipe(Ref.update(ref, (n) => n + 1), Effect.once) + yield* ( Effect.all(Effect.replicate(effect, 100), { concurrency: "unbounded", discard: true }) ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) strictEqual(result, 1) })) }) diff --git a/packages/effect/test/Effect/provide-runtime.test.ts b/packages/effect/test/Effect/provide-runtime.test.ts index 55fbac89cc..768a974dfe 100644 --- a/packages/effect/test/Effect/provide-runtime.test.ts +++ b/packages/effect/test/Effect/provide-runtime.test.ts @@ -3,6 +3,7 @@ import * as Effect from "effect/Effect" import * as Equal from "effect/Equal" import * as Exit from "effect/Exit" import * as FiberRef from "effect/FiberRef" +import { pipe } from "effect/Function" import * as Layer from "effect/Layer" import * as RuntimeFlags from "effect/RuntimeFlags" import * as Scope from "effect/Scope" @@ -31,11 +32,11 @@ describe("Effect", () => { readonly _: unique symbol } const SomeService = Context.GenericTag("SomeService") - return Effect.gen(function*(_) { - const rt = yield* _(Layer.succeedContext(Context.empty()), Layer.toRuntime) - const pre = yield* _(Effect.context()) - yield* _(Effect.provide(Effect.void, rt)) - const post = yield* _(Effect.context()) + return Effect.gen(function*() { + const rt = yield* pipe(Layer.succeedContext(Context.empty()), Layer.toRuntime) + const pre = yield* Effect.context() + yield* Effect.provide(Effect.void, rt) + const post = yield* Effect.context() assertTrue(Equal.equals(pre, post)) }).pipe( Effect.scoped, @@ -54,17 +55,17 @@ describe("Effect", () => { const all = await Effect.runPromise(Effect.all( [ Effect.provide( - Effect.gen(function*($) { - const a = yield* $(FiberRef.get(ref)) - const b = yield* $(A) - const c = RuntimeFlags.isEnabled(yield* $(Effect.getRuntimeFlags), RuntimeFlags.OpSupervision) + Effect.gen(function*() { + const a = yield* FiberRef.get(ref) + const b = yield* A + const c = RuntimeFlags.isEnabled(yield* pipe(Effect.getRuntimeFlags), RuntimeFlags.OpSupervision) return { a, b, c } }), runtime ), - Effect.gen(function*($) { - const a = yield* $(FiberRef.get(ref)) - const c = RuntimeFlags.isEnabled(yield* $(Effect.getRuntimeFlags), RuntimeFlags.OpSupervision) + Effect.gen(function*() { + const a = yield* FiberRef.get(ref) + const c = RuntimeFlags.isEnabled(yield* pipe(Effect.getRuntimeFlags), RuntimeFlags.OpSupervision) return { a, c } }) ] diff --git a/packages/effect/test/Effect/query-deadlock.test.ts b/packages/effect/test/Effect/query-deadlock.test.ts index 0afba379b5..78b903dfd3 100644 --- a/packages/effect/test/Effect/query-deadlock.test.ts +++ b/packages/effect/test/Effect/query-deadlock.test.ts @@ -1,5 +1,6 @@ import * as Effect from "effect/Effect" import * as Exit from "effect/Exit" +import { pipe } from "effect/Function" import * as Request from "effect/Request" import * as Resolver from "effect/RequestResolver" import * as it from "effect/test/utils/extend" @@ -27,8 +28,8 @@ const getAllUserNames = Effect.forEach([1, 1], getUserNameById, { batching: true describe("Effect", () => { it.it("requests are executed correctly", () => Effect.runPromise( - Effect.gen(function*($) { - yield* $( + Effect.gen(function*() { + yield* pipe( getAllUserNames, Effect.withRequestCaching(true), Effect.withRequestBatching(true) diff --git a/packages/effect/test/Effect/query-nested.test.ts b/packages/effect/test/Effect/query-nested.test.ts index a18b6c4527..a799dc5daa 100644 --- a/packages/effect/test/Effect/query-nested.test.ts +++ b/packages/effect/test/Effect/query-nested.test.ts @@ -137,10 +137,10 @@ const EnvLive = Layer.mergeAll( describe("Effect", () => { it.effect("nested queries are batched", () => - Effect.gen(function*($) { - const parents = yield* $(getAllParents) + Effect.gen(function*() { + const parents = yield* getAllParents - yield* $(Effect.forEach( + yield* Effect.forEach( parents, (parent) => Effect.flatMap( @@ -167,10 +167,10 @@ describe("Effect", () => { concurrency: "inherit", batching: "inherit" } - )) + ) - const count = yield* $(Counter) - const requests = yield* $(Requests) + const count = yield* Counter + const requests = yield* Requests strictEqual(count.count, 3) strictEqual(requests.count, 7) diff --git a/packages/effect/test/Effect/query-repro.test.ts b/packages/effect/test/Effect/query-repro.test.ts index 305a45054f..371978f867 100644 --- a/packages/effect/test/Effect/query-repro.test.ts +++ b/packages/effect/test/Effect/query-repro.test.ts @@ -35,13 +35,13 @@ const getItems = getSub("test_1") describe("interruption", () => { it.live("forEach interrupts residual requests", () => - Effect.gen(function*($) { - const exit = yield* $(getItems.pipe( + Effect.gen(function*() { + const exit = yield* getItems.pipe( Effect.timeout("10 millis"), Effect.catchAll(() => getItems), Effect.provide(Svc.Live), Effect.exit - )) + ) strictEqual(exit._tag, "Success") })) }) diff --git a/packages/effect/test/Effect/query.test.ts b/packages/effect/test/Effect/query.test.ts index a78723d01d..dfe181b557 100644 --- a/packages/effect/test/Effect/query.test.ts +++ b/packages/effect/test/Effect/query.test.ts @@ -179,9 +179,9 @@ describe("Effect", () => { })) it.effect("requests are executed correctly", () => provideEnv( - Effect.gen(function*($) { - const names = yield* $(getAllUserNames) - const count = yield* $(Counter) + Effect.gen(function*() { + const names = yield* getAllUserNames + const count = yield* Counter strictEqual(count.count, 3) assertTrue(names.length > 2) deepStrictEqual(names, userIds.map((id) => userNames.get(id))) @@ -189,9 +189,9 @@ describe("Effect", () => { )) it.effect("requests with dual syntax are executed correctly", () => provideEnv( - Effect.gen(function*($) { - const names = yield* $(getAllUserNamesPiped) - const count = yield* $(Counter) + Effect.gen(function*() { + const names = yield* getAllUserNamesPiped + const count = yield* Counter strictEqual(count.count, 3) assertTrue(names.length > 2) deepStrictEqual(names, userIds.map((id) => userNames.get(id))) @@ -199,9 +199,9 @@ describe("Effect", () => { )) it.effect("requests are executed correctly with fromEffectTagged", () => provideEnv( - Effect.gen(function*($) { - const names = yield* $(getAllUserNamesTagged) - const count = yield* $(Counter) + Effect.gen(function*() { + const names = yield* getAllUserNamesTagged + const count = yield* Counter strictEqual(count.count, 3) assertTrue(names.length > 2) deepStrictEqual(names, userIds.map((id) => userNames.get(id))) @@ -209,14 +209,14 @@ describe("Effect", () => { )) it.effect("batching composes", () => provideEnv( - Effect.gen(function*($) { - const cache = yield* $(FiberRef.get(FiberRef.currentRequestCache)) - yield* $(cache.invalidateAll) - const names = yield* $(Effect.zip(getAllUserNames, getAllUserNames, { + Effect.gen(function*() { + const cache = yield* (FiberRef.get(FiberRef.currentRequestCache)) + yield* (cache.invalidateAll) + const names = yield* (Effect.zip(getAllUserNames, getAllUserNames, { concurrent: true, batching: true })) - const count = yield* $(Counter) + const count = yield* Counter strictEqual(count.count, 3) assertTrue(names[0].length > 2) deepStrictEqual(names[0], userIds.map((id) => userNames.get(id))) @@ -225,8 +225,8 @@ describe("Effect", () => { )) it.effect("withSpan doesn't break batching", () => provideEnv( - Effect.gen(function*($) { - yield* $( + Effect.gen(function*() { + yield* pipe( Effect.zip( getAllUserIds.pipe(Effect.withSpan("A")), getAllUserIds.pipe(Effect.withSpan("B")), @@ -234,15 +234,15 @@ describe("Effect", () => { ), Effect.withRequestCaching(false) ) - const count = yield* $(Counter) + const count = yield* Counter strictEqual(count.count, 1) }) )) it.effect("batching is independent from parallelism", () => provideEnv( - Effect.gen(function*($) { - const names = yield* $(getAllUserNamesN(5)) - const count = yield* $(Counter) + Effect.gen(function*() { + const names = yield* (getAllUserNamesN(5)) + const count = yield* Counter strictEqual(count.count, 3) assertTrue(names.length > 2) deepStrictEqual(names, userIds.map((id) => userNames.get(id))) @@ -251,8 +251,8 @@ describe("Effect", () => { it.effect("batching doesn't break interruption", () => Effect.locally(interrupts, { interrupts: 0 })( provideEnv( - Effect.gen(function*($) { - const exit = yield* $( + Effect.gen(function*() { + const exit = yield* pipe( getAllUserNames, Effect.zipLeft(Effect.interrupt, { concurrent: true, @@ -264,53 +264,53 @@ describe("Effect", () => { if (exit._tag === "Failure") { assertTrue(Cause.isInterruptedOnly(exit.cause)) } - const cache = yield* $(FiberRef.get(FiberRef.currentRequestCache)) - const values = yield* $(cache.values) + const cache = yield* (FiberRef.get(FiberRef.currentRequestCache)) + const values = yield* (cache.values) strictEqual(values[0].handle.state.current._tag, "Done") - deepStrictEqual(yield* $(Counter), { count: 0 }) - deepStrictEqual(yield* $(FiberRef.get(interrupts)), { interrupts: 1 }) + deepStrictEqual(yield* Counter, { count: 0 }) + deepStrictEqual(yield* (FiberRef.get(interrupts)), { interrupts: 1 }) }) ) )) it.effect("requests dont't break interruption", () => Effect.locally(interrupts, { interrupts: 0 })( provideEnv( - Effect.gen(function*($) { - const fiber = yield* $(getAllUserNames, Effect.fork) - yield* $(Effect.yieldNow()) - yield* $(Fiber.interrupt(fiber)) - const exit = yield* $(Fiber.await(fiber)) + Effect.gen(function*() { + const fiber = yield* pipe(getAllUserNames, Effect.fork) + yield* (Effect.yieldNow()) + yield* (Fiber.interrupt(fiber)) + const exit = yield* (Fiber.await(fiber)) strictEqual(exit._tag, "Failure") if (exit._tag === "Failure") { assertTrue(Cause.isInterruptedOnly(exit.cause)) } - deepStrictEqual(yield* $(Counter), { count: 0 }) - deepStrictEqual(yield* $(FiberRef.get(interrupts)), { interrupts: 1 }) + deepStrictEqual(yield* Counter, { count: 0 }) + deepStrictEqual(yield* (FiberRef.get(interrupts)), { interrupts: 1 }) }) ) )) it.effect("requests work with uninterruptible", () => Effect.locally(interrupts, { interrupts: 0 })( provideEnv( - Effect.gen(function*($) { - const fiber = yield* $(getAllUserNames, Effect.uninterruptible, Effect.fork) - yield* $(Effect.yieldNow()) - yield* $(Fiber.interrupt(fiber)) - const exit = yield* $(Fiber.await(fiber)) + Effect.gen(function*() { + const fiber = yield* pipe(getAllUserNames, Effect.uninterruptible, Effect.fork) + yield* (Effect.yieldNow()) + yield* (Fiber.interrupt(fiber)) + const exit = yield* (Fiber.await(fiber)) strictEqual(exit._tag, "Failure") if (exit._tag === "Failure") { assertTrue(Cause.isInterruptedOnly(exit.cause)) } - deepStrictEqual(yield* $(Counter), { count: 3 }) - deepStrictEqual(yield* $(FiberRef.get(interrupts)), { interrupts: 0 }) + deepStrictEqual(yield* Counter, { count: 3 }) + deepStrictEqual(yield* (FiberRef.get(interrupts)), { interrupts: 0 }) }) ) )) it.effect("batching doesn't break interruption when limited", () => Effect.locally(interrupts, { interrupts: 0 })( provideEnv( - Effect.gen(function*($) { - const exit = yield* $( + Effect.gen(function*() { + const exit = yield* pipe( getAllUserNames, Effect.zipLeft(Effect.interrupt, { concurrent: true, @@ -322,15 +322,15 @@ describe("Effect", () => { if (exit._tag === "Failure") { assertTrue(Cause.isInterruptedOnly(exit.cause)) } - deepStrictEqual(yield* $(Counter), { count: 0 }) - deepStrictEqual(yield* $(FiberRef.get(interrupts)), { interrupts: 1 }) + deepStrictEqual(yield* Counter, { count: 0 }) + deepStrictEqual(yield* (FiberRef.get(interrupts)), { interrupts: 1 }) }) ) )) it.effect("zip/parallel is not batched when specified", () => provideEnv( - Effect.gen(function*($) { - const [a, b] = yield* $( + Effect.gen(function*() { + const [a, b] = yield* pipe( Effect.zip( getUserNameById(userIds[0]), getUserNameById(userIds[1]), @@ -341,7 +341,7 @@ describe("Effect", () => { ), Effect.withRequestBatching(true) ) - const count = yield* $(Counter) + const count = yield* Counter strictEqual(count.count, 2) deepStrictEqual(a, userNames.get(userIds[0])) deepStrictEqual(b, userNames.get(userIds[1])) @@ -349,8 +349,8 @@ describe("Effect", () => { )) it.effect("zip/parallel is batched by default", () => provideEnv( - Effect.gen(function*($) { - const [a, b] = yield* $( + Effect.gen(function*() { + const [a, b] = yield* ( Effect.zip( getUserNameById(userIds[0]), getUserNameById(userIds[1]), @@ -360,7 +360,7 @@ describe("Effect", () => { } ) ) - const count = yield* $(Counter) + const count = yield* Counter strictEqual(count.count, 1) deepStrictEqual(a, userNames.get(userIds[0])) deepStrictEqual(b, userNames.get(userIds[1])) @@ -368,54 +368,54 @@ describe("Effect", () => { )) it.effect("cache respects ttl", () => provideEnv( - Effect.gen(function*($) { - yield* $(getAllUserIds) - yield* $(getAllUserIds) - deepStrictEqual(yield* $(Counter), { count: 1 }) - yield* $(TestClock.adjust(seconds(10))) - yield* $(getAllUserIds) - yield* $(getAllUserIds) - deepStrictEqual(yield* $(Counter), { count: 1 }) - yield* $(TestClock.adjust(seconds(60))) - yield* $(getAllUserIds) - yield* $(getAllUserIds) - deepStrictEqual(yield* $(Counter), { count: 2 }) + Effect.gen(function*() { + yield* getAllUserIds + yield* getAllUserIds + deepStrictEqual(yield* Counter, { count: 1 }) + yield* (TestClock.adjust(seconds(10))) + yield* getAllUserIds + yield* getAllUserIds + deepStrictEqual(yield* Counter, { count: 1 }) + yield* (TestClock.adjust(seconds(60))) + yield* getAllUserIds + yield* getAllUserIds + deepStrictEqual(yield* Counter, { count: 2 }) }) )) it.effect("cache can be warmed up", () => provideEnv( - Effect.gen(function*($) { - yield* $(Effect.cacheRequestResult(GetAllIds({}), Exit.succeed(userIds))) - yield* $(getAllUserIds) - yield* $(getAllUserIds) - deepStrictEqual(yield* $(Counter), { count: 0 }) - yield* $(TestClock.adjust(seconds(65))) - yield* $(getAllUserIds) - yield* $(getAllUserIds) - deepStrictEqual(yield* $(Counter), { count: 1 }) + Effect.gen(function*() { + yield* (Effect.cacheRequestResult(GetAllIds({}), Exit.succeed(userIds))) + yield* getAllUserIds + yield* getAllUserIds + deepStrictEqual(yield* Counter, { count: 0 }) + yield* (TestClock.adjust(seconds(65))) + yield* getAllUserIds + yield* getAllUserIds + deepStrictEqual(yield* Counter, { count: 1 }) }) )) it.effect("cache can be disabled", () => provideEnv( - Effect.withRequestCaching(false)(Effect.gen(function*($) { - yield* $(getAllUserIds) - yield* $(getAllUserIds) - deepStrictEqual(yield* $(Counter), { count: 2 }) - yield* $(TestClock.adjust(seconds(10))) - yield* $(getAllUserIds) - yield* $(getAllUserIds) - deepStrictEqual(yield* $(Counter), { count: 4 }) - yield* $(TestClock.adjust(seconds(60))) - yield* $(getAllUserIds) - yield* $(getAllUserIds) - deepStrictEqual(yield* $(Counter), { count: 6 }) + Effect.withRequestCaching(false)(Effect.gen(function*() { + yield* getAllUserIds + yield* getAllUserIds + deepStrictEqual(yield* Counter, { count: 2 }) + yield* (TestClock.adjust(seconds(10))) + yield* getAllUserIds + yield* getAllUserIds + deepStrictEqual(yield* Counter, { count: 4 }) + yield* (TestClock.adjust(seconds(60))) + yield* getAllUserIds + yield* getAllUserIds + deepStrictEqual(yield* Counter, { count: 6 }) })) )) it.effect("batching preserves individual & identical requests", () => provideEnv( - Effect.gen(function*($) { - yield* $( + Effect.gen(function*() { + yield* pipe( Effect.all([getUserNameById(userIds[0]), getUserNameById(userIds[0])], { concurrency: "unbounded", batching: true, @@ -423,8 +423,8 @@ describe("Effect", () => { }), Effect.withRequestCaching(false) ) - const requests = yield* $(Requests) - const invocations = yield* $(Counter) + const requests = yield* Requests + const invocations = yield* Counter deepStrictEqual(requests.count, 2) deepStrictEqual(invocations.count, 1) }) diff --git a/packages/effect/test/Effect/racing.test.ts b/packages/effect/test/Effect/racing.test.ts index f11be811e8..6ecd6016f9 100644 --- a/packages/effect/test/Effect/racing.test.ts +++ b/packages/effect/test/Effect/racing.test.ts @@ -7,13 +7,13 @@ import { describe } from "vitest" describe("Effect", () => { it.effect("returns first success", () => - Effect.gen(function*($) { - const result = yield* $(Effect.raceAll([Effect.fail("fail"), Effect.succeed(24)])) + Effect.gen(function*() { + const result = yield* (Effect.raceAll([Effect.fail("fail"), Effect.succeed(24)])) strictEqual(result, 24) })) it.live("returns last failure", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* ( pipe( Effect.raceAll([pipe(Effect.sleep(Duration.millis(100)), Effect.zipRight(Effect.fail(24))), Effect.fail(25)]), Effect.flip @@ -22,8 +22,8 @@ describe("Effect", () => { strictEqual(result, 24) })) it.live("returns success when it happens after failure", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* ( Effect.raceAll([ Effect.fail(42), pipe(Effect.succeed(24), Effect.zipLeft(Effect.sleep(Duration.millis(100)))) diff --git a/packages/effect/test/Effect/rendezvous.test.ts b/packages/effect/test/Effect/rendezvous.test.ts index eeca876e1e..eeeff6d558 100644 --- a/packages/effect/test/Effect/rendezvous.test.ts +++ b/packages/effect/test/Effect/rendezvous.test.ts @@ -8,36 +8,36 @@ import { describe } from "vitest" describe("Effect", () => { it.effect("bounded 0 is rendezvous", () => - Effect.gen(function*(_) { - const rendevous = yield* _(Queue.bounded(0)) + Effect.gen(function*() { + const rendevous = yield* Queue.bounded(0) const logs: Array = [] - const fiber = yield* _( + const fiber = yield* ( Effect.fork( - Effect.gen(function*(_) { - yield* _(Effect.sleep("50 millis")) + Effect.gen(function*() { + yield* Effect.sleep("50 millis") logs.push("sending message") - yield* _(Queue.offer(rendevous, "Hello World")) + yield* Queue.offer(rendevous, "Hello World") logs.push("sent message") }) ) ) - const fiber2 = yield* _( + const fiber2 = yield* ( Effect.fork( - Effect.gen(function*(_) { - yield* _(Effect.sleep("100 millis")) + Effect.gen(function*() { + yield* Effect.sleep("100 millis") logs.push("receiving message") - const message = yield* _(Queue.take(rendevous)) + const message = yield* Queue.take(rendevous) logs.push("received message") logs.push(message) }) ) ) - yield* _(TestClock.adjust("200 millis")) + yield* TestClock.adjust("200 millis") - yield* _(Fiber.join(Fiber.zip(fiber, fiber2))) + yield* Fiber.join(Fiber.zip(fiber, fiber2)) deepStrictEqual(logs, [ "sending message", diff --git a/packages/effect/test/Effect/repeating.test.ts b/packages/effect/test/Effect/repeating.test.ts index 0ae2864b14..c7815316f0 100644 --- a/packages/effect/test/Effect/repeating.test.ts +++ b/packages/effect/test/Effect/repeating.test.ts @@ -8,7 +8,7 @@ import { describe } from "vitest" describe("Effect", () => { it.effect("succeeds eventually", () => - Effect.gen(function*($) { + Effect.gen(function*() { const effect = (ref: Ref.Ref) => { return pipe( Ref.get(ref), @@ -19,28 +19,28 @@ describe("Effect", () => { ) ) } - const ref = yield* $(Ref.make(0)) - const result = yield* $(Effect.eventually(effect(ref))) + const ref = yield* (Ref.make(0)) + const result = yield* (Effect.eventually(effect(ref))) strictEqual(result, 10) })) it.effect("repeat/until - repeats until condition is true", () => - Effect.gen(function*($) { - const input = yield* $(Ref.make(10)) - const output = yield* $(Ref.make(0)) - yield* $( + Effect.gen(function*() { + const input = yield* (Ref.make(10)) + const output = yield* (Ref.make(0)) + yield* pipe( Ref.updateAndGet(input, (n) => n - 1), Effect.zipLeft(Ref.update(output, (n) => n + 1)), Effect.repeat({ until: (n) => n === 0 }) ) - const result = yield* $(Ref.get(output)) + const result = yield* (Ref.get(output)) strictEqual(result, 10) })) it.effect("repeat/until - preserves return value", () => - Effect.gen(function*($) { - const input = yield* $(Ref.make(10)) - const result = yield* $( + Effect.gen(function*() { + const input = yield* (Ref.make(10)) + const result = yield* pipe( Ref.updateAndGet(input, (n) => n - 1), Effect.repeat({ until: (n) => n === 0 }) ) @@ -48,111 +48,111 @@ describe("Effect", () => { })) it.effect("repeat/until - always evaluates effect at least once", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - yield* $(Ref.update(ref, (n) => n + 1), Effect.repeat({ until: constTrue })) - const result = yield* $(Ref.get(ref)) + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + yield* pipe(Ref.update(ref, (n) => n + 1), Effect.repeat({ until: constTrue })) + const result = yield* (Ref.get(ref)) strictEqual(result, 1) })) it.effect("repeat/until - repeats until the effectful condition is true", () => - Effect.gen(function*($) { - const input = yield* $(Ref.make(10)) - const output = yield* $(Ref.make(0)) - yield* $( + Effect.gen(function*() { + const input = yield* (Ref.make(10)) + const output = yield* (Ref.make(0)) + yield* pipe( Ref.updateAndGet(input, (n) => n - 1), Effect.zipLeft(Ref.update(output, (n) => n + 1)), Effect.repeat({ until: (n) => Effect.succeed(n === 0) }) ) - const result = yield* $(Ref.get(output)) + const result = yield* (Ref.get(output)) strictEqual(result, 10) })) it.effect("repeat/until - always evaluates the effect at least once", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - yield* $(Ref.update(ref, (n) => n + 1), Effect.repeat({ until: () => Effect.succeed(true) })) - const result = yield* $(Ref.get(ref)) + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + yield* pipe(Ref.update(ref, (n) => n + 1), Effect.repeat({ until: () => Effect.succeed(true) })) + const result = yield* (Ref.get(ref)) strictEqual(result, 1) })) it.effect("repeat/while - repeats while the condition is true", () => - Effect.gen(function*($) { - const input = yield* $(Ref.make(10)) - const output = yield* $(Ref.make(0)) - yield* $( + Effect.gen(function*() { + const input = yield* (Ref.make(10)) + const output = yield* (Ref.make(0)) + yield* pipe( Ref.updateAndGet(input, (n) => n - 1), Effect.zipLeft(Ref.update(output, (n) => n + 1)), Effect.repeat({ while: (n) => n >= 0 }) ) - const result = yield* $(Ref.get(output)) + const result = yield* (Ref.get(output)) strictEqual(result, 11) })) it.effect("repeat/while - always evaluates the effect at least once", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - yield* $(Ref.update(ref, (n) => n + 1), Effect.repeat({ while: constFalse })) - const result = yield* $(Ref.get(ref)) + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + yield* pipe(Ref.update(ref, (n) => n + 1), Effect.repeat({ while: constFalse })) + const result = yield* (Ref.get(ref)) strictEqual(result, 1) })) it.effect("repeat/while - repeats while condition is true", () => - Effect.gen(function*($) { - const input = yield* $(Ref.make(10)) - const output = yield* $(Ref.make(0)) - yield* $( + Effect.gen(function*() { + const input = yield* (Ref.make(10)) + const output = yield* (Ref.make(0)) + yield* pipe( Ref.updateAndGet(input, (n) => n - 1), Effect.zipLeft(Ref.update(output, (n) => n + 1)), Effect.repeat({ while: (v) => Effect.succeed(v >= 0) }) ) - const result = yield* $(Ref.get(output)) + const result = yield* (Ref.get(output)) strictEqual(result, 11) })) it.effect("repeat/while - always evaluates effect at least once", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - yield* $(Ref.update(ref, (n) => n + 1), Effect.repeat({ while: () => Effect.succeed(false) })) - const result = yield* $(Ref.get(ref)) + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + yield* pipe(Ref.update(ref, (n) => n + 1), Effect.repeat({ while: () => Effect.succeed(false) })) + const result = yield* (Ref.get(ref)) strictEqual(result, 1) })) it.effect("repeat/schedule", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - yield* $(Ref.update(ref, (n) => n + 1), Effect.repeat(Schedule.recurs(3))) - const result = yield* $(Ref.get(ref)) + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + yield* pipe(Ref.update(ref, (n) => n + 1), Effect.repeat(Schedule.recurs(3))) + const result = yield* (Ref.get(ref)) strictEqual(result, 4) })) it.effect("repeat/schedule + until", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + yield* pipe( Ref.updateAndGet(ref, (n) => n + 1), Effect.repeat({ schedule: Schedule.recurs(3), until: (n) => n === 3 }) ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) strictEqual(result, 3) })) it.effect("repeat/schedule + while", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + yield* pipe( Ref.updateAndGet(ref, (n) => n + 1), Effect.repeat({ schedule: Schedule.recurs(3), while: (n) => n < 3 }) ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) strictEqual(result, 3) })) it.effect("repeat/times ", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make>([])) - const effectResult = yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make>([])) + const effectResult = yield* pipe( Ref.updateAndGet(ref, (arr) => { arr.push(arr.length) return arr }), Effect.repeat({ times: 2 }) ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) deepStrictEqual(result, [0, 1, 2]) deepStrictEqual(effectResult, [0, 1, 2]) })) diff --git a/packages/effect/test/Effect/retrying.test.ts b/packages/effect/test/Effect/retrying.test.ts index 84585ff4b9..e7a808ebc8 100644 --- a/packages/effect/test/Effect/retrying.test.ts +++ b/packages/effect/test/Effect/retrying.test.ts @@ -1,5 +1,5 @@ import * as Effect from "effect/Effect" -import { constFalse, constTrue } from "effect/Function" +import { constFalse, constTrue, pipe } from "effect/Function" import * as Ref from "effect/Ref" import * as Schedule from "effect/Schedule" import { strictEqual } from "effect/test/util" @@ -8,130 +8,130 @@ import { describe } from "vitest" describe("Effect", () => { it.effect("retry/until - retries until condition is true", () => - Effect.gen(function*($) { - const input = yield* $(Ref.make(10)) - const output = yield* $(Ref.make(0)) - yield* $( + Effect.gen(function*() { + const input = yield* (Ref.make(10)) + const output = yield* (Ref.make(0)) + yield* pipe( Ref.updateAndGet(input, (n) => n - 1), Effect.zipLeft(Ref.update(output, (n) => n + 1)), Effect.flipWith(Effect.retry({ until: (n) => n === 0 })) ) - const result = yield* $(Ref.get(output)) + const result = yield* (Ref.get(output)) strictEqual(result, 10) })) it.effect("retry/until - runs at least once", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - yield* $(Ref.update(ref, (n) => n + 1), Effect.flipWith(Effect.retry({ until: constTrue }))) - const result = yield* $(Ref.get(ref)) + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + yield* pipe(Ref.update(ref, (n) => n + 1), Effect.flipWith(Effect.retry({ until: constTrue }))) + const result = yield* (Ref.get(ref)) strictEqual(result, 1) })) it.effect("retry/until - retries until condition is true", () => - Effect.gen(function*($) { - const input = yield* $(Ref.make(10)) - const output = yield* $(Ref.make(0)) - yield* $( + Effect.gen(function*() { + const input = yield* (Ref.make(10)) + const output = yield* (Ref.make(0)) + yield* pipe( Ref.updateAndGet(input, (n) => n - 1), Effect.zipLeft(Ref.update(output, (n) => n + 1)), Effect.flipWith(Effect.retry({ until: (n) => Effect.succeed(n === 0) })) ) - const result = yield* $(Ref.get(output)) + const result = yield* (Ref.get(output)) strictEqual(result, 10) })) it.effect("retry/until - runs at least once", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + yield* pipe( Ref.update(ref, (n) => n + 1), Effect.flipWith(Effect.retry({ until: () => Effect.succeed(true) })) ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) strictEqual(result, 1) })) it.effect("retry/while - retries while condition is true", () => - Effect.gen(function*($) { - const input = yield* $(Ref.make(10)) - const output = yield* $(Ref.make(0)) - yield* $( + Effect.gen(function*() { + const input = yield* (Ref.make(10)) + const output = yield* (Ref.make(0)) + yield* pipe( Ref.updateAndGet(input, (n) => n - 1), Effect.zipLeft(Ref.update(output, (n) => n + 1)), Effect.flipWith(Effect.retry({ while: (n) => n >= 0 })) ) - const result = yield* $(Ref.get(output)) + const result = yield* (Ref.get(output)) strictEqual(result, 11) })) it.effect("retry/while - runs at least once", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - yield* $(Ref.update(ref, (n) => n + 1), Effect.flipWith(Effect.retry({ while: constFalse }))) - const result = yield* $(Ref.get(ref)) + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + yield* pipe(Ref.update(ref, (n) => n + 1), Effect.flipWith(Effect.retry({ while: constFalse }))) + const result = yield* (Ref.get(ref)) strictEqual(result, 1) })) it.effect("retry/while - retries while condition is true", () => - Effect.gen(function*($) { - const input = yield* $(Ref.make(10)) - const output = yield* $(Ref.make(0)) - yield* $( + Effect.gen(function*() { + const input = yield* (Ref.make(10)) + const output = yield* (Ref.make(0)) + yield* pipe( Ref.updateAndGet(input, (n) => n - 1), Effect.zipLeft(Ref.update(output, (n) => n + 1)), Effect.flipWith(Effect.retry({ while: (n) => Effect.succeed(n >= 0) })) ) - const result = yield* $(Ref.get(output)) + const result = yield* (Ref.get(output)) strictEqual(result, 11) })) it.effect("retry/while - runs at least once", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + yield* pipe( Ref.update(ref, (n) => n + 1), Effect.flipWith(Effect.retry({ while: () => Effect.succeed(false) })) ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) strictEqual(result, 1) })) it.effect("retry/schedule", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + yield* pipe( Ref.update(ref, (n) => n + 1), Effect.flipWith(Effect.retry(Schedule.recurs(3))) ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) strictEqual(result, 4) })) it.effect("retry/schedule + until", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + yield* pipe( Ref.updateAndGet(ref, (n) => n + 1), Effect.flipWith(Effect.retry({ schedule: Schedule.recurs(3), until: (n) => n === 3 })) ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) strictEqual(result, 3) })) it.effect("retry/schedule + until effect", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + yield* pipe( Ref.updateAndGet(ref, (n) => n + 1), Effect.flipWith(Effect.retry({ schedule: Schedule.recurs(3), until: (n) => Effect.succeed(n === 3) })) ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) strictEqual(result, 3) })) it.effect("retry/schedule + until error", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - const result = yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + const result = yield* pipe( Ref.updateAndGet(ref, (n) => n + 1), Effect.flipWith(Effect.retry({ schedule: Schedule.recurs(3), @@ -142,23 +142,23 @@ describe("Effect", () => { })) it.effect("retry/schedule + while", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + yield* pipe( Ref.updateAndGet(ref, (n) => n + 1), Effect.flipWith(Effect.retry({ schedule: Schedule.recurs(3), while: (n) => n < 3 })) ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) strictEqual(result, 3) })) it.effect("retry/schedule + while error", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - const result = yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + const result = yield* pipe( Ref.updateAndGet(ref, (n) => n + 1), Effect.flipWith(Effect.retry({ schedule: Schedule.recurs(3), @@ -169,16 +169,16 @@ describe("Effect", () => { })) it.effect("retry/schedule + while effect", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + yield* pipe( Ref.updateAndGet(ref, (n) => n + 1), Effect.flipWith(Effect.retry({ schedule: Schedule.recurs(3), while: (n) => Effect.succeed(n < 3) })) ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) strictEqual(result, 3) })) }) diff --git a/packages/effect/test/Effect/runtimeFlags.test.ts b/packages/effect/test/Effect/runtimeFlags.test.ts index 583ea970e2..97b5202723 100644 --- a/packages/effect/test/Effect/runtimeFlags.test.ts +++ b/packages/effect/test/Effect/runtimeFlags.test.ts @@ -1,4 +1,5 @@ import * as Effect from "effect/Effect" +import { pipe } from "effect/Function" import * as Flags from "effect/RuntimeFlags" import * as Patch from "effect/RuntimeFlagsPatch" import { assertFalse, assertTrue } from "effect/test/util" @@ -7,19 +8,22 @@ import { describe } from "vitest" describe("Effect", () => { it.it("should enable flags in the current fiber", () => - Effect.runPromise(Effect.gen(function*($) { - const before = yield* $(Effect.getRuntimeFlags) + Effect.runPromise(Effect.gen(function*() { + const before = yield* Effect.getRuntimeFlags assertFalse(Flags.isEnabled(before, Flags.OpSupervision)) - yield* $(Effect.patchRuntimeFlags(Patch.enable(Flags.OpSupervision))) - const after = yield* $(Effect.getRuntimeFlags) + yield* Effect.patchRuntimeFlags(Patch.enable(Flags.OpSupervision)) + const after = yield* Effect.getRuntimeFlags assertTrue(Flags.isEnabled(after, Flags.OpSupervision)) }))) it.it("should enable flags in the wrapped effect", () => - Effect.runPromise(Effect.gen(function*($) { - const before = yield* $(Effect.getRuntimeFlags) + Effect.runPromise(Effect.gen(function*() { + const before = yield* Effect.getRuntimeFlags assertFalse(Flags.isEnabled(before, Flags.OpSupervision)) - const inside = yield* $(Effect.getRuntimeFlags, Effect.withRuntimeFlagsPatch(Patch.enable(Flags.OpSupervision))) - const after = yield* $(Effect.getRuntimeFlags) + const inside = yield* pipe( + Effect.getRuntimeFlags, + Effect.withRuntimeFlagsPatch(Patch.enable(Flags.OpSupervision)) + ) + const after = yield* Effect.getRuntimeFlags assertFalse(Flags.isEnabled(after, Flags.OpSupervision)) assertTrue(Flags.isEnabled(inside, Flags.OpSupervision)) }))) diff --git a/packages/effect/test/Effect/scheduler.test.ts b/packages/effect/test/Effect/scheduler.test.ts index 898c28a46a..b082c035c6 100644 --- a/packages/effect/test/Effect/scheduler.test.ts +++ b/packages/effect/test/Effect/scheduler.test.ts @@ -1,4 +1,5 @@ import * as Effect from "effect/Effect" +import { pipe } from "effect/Function" import * as Scheduler from "effect/Scheduler" import { deepStrictEqual } from "effect/test/util" import * as it from "effect/test/utils/extend" @@ -6,7 +7,7 @@ import { describe } from "vitest" describe("Effect", () => { it.effect("matrix schedules according to priority", () => - Effect.gen(function*($) { + Effect.gen(function*() { const ps000: Array = [] const ps100: Array = [] const ps200: Array = [] @@ -39,33 +40,33 @@ describe("Effect", () => { }) ] ) - yield* $( + yield* pipe( Effect.yieldNow(), Effect.withScheduler(scheduler) ) deepStrictEqual(ps000, [0]) - yield* $( + yield* pipe( Effect.yieldNow({ priority: 50 }), Effect.withScheduler(scheduler) ) deepStrictEqual(ps000, [0, 0]) - yield* $( + yield* pipe( Effect.yieldNow({ priority: 100 }), Effect.withScheduler(scheduler) ) deepStrictEqual(ps100, [100]) - yield* $( + yield* pipe( Effect.yieldNow({ priority: 150 }), Effect.withScheduler(scheduler) ) deepStrictEqual(ps100, [100, 100]) - yield* $( + yield* pipe( Effect.yieldNow({ priority: 200 }), Effect.withScheduler(scheduler) ) deepStrictEqual(ps100, [100, 100]) deepStrictEqual(ps200, [200]) - yield* $( + yield* pipe( Effect.yieldNow({ priority: 300 }), Effect.withScheduler(scheduler) ) diff --git a/packages/effect/test/Effect/scheduling.test.ts b/packages/effect/test/Effect/scheduling.test.ts index 91f22ca3a5..375cac7e54 100644 --- a/packages/effect/test/Effect/scheduling.test.ts +++ b/packages/effect/test/Effect/scheduling.test.ts @@ -11,16 +11,16 @@ import { describe } from "vitest" describe("Effect", () => { it.effect("schedule - runs effect for each recurrence of the schedule", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make>([])) + Effect.gen(function*() { + const ref = yield* Ref.make>([]) const effect = pipe( Clock.currentTimeMillis, Effect.flatMap((duration) => Ref.update(ref, (array) => [...array, Duration.millis(duration)])) ) const schedule = pipe(Schedule.spaced(Duration.seconds(1)), Schedule.intersect(Schedule.recurs(5))) - yield* $(effect, Effect.schedule(schedule), Effect.fork) - yield* $(TestClock.adjust(Duration.seconds(5))) - const value = yield* $(Ref.get(ref)) + yield* pipe(effect, Effect.schedule(schedule), Effect.fork) + yield* TestClock.adjust(Duration.seconds(5)) + const value = yield* Ref.get(ref) const expected = [1, 2, 3, 4, 5].map(Duration.seconds) deepStrictEqual(value, expected) })) diff --git a/packages/effect/test/Effect/scope-ref.test.ts b/packages/effect/test/Effect/scope-ref.test.ts index 8550a2a03d..7f0ea02b3a 100644 --- a/packages/effect/test/Effect/scope-ref.test.ts +++ b/packages/effect/test/Effect/scope-ref.test.ts @@ -1,6 +1,7 @@ import { GenericTag } from "effect/Context" import * as Effect from "effect/Effect" import * as FiberRef from "effect/FiberRef" +import { pipe } from "effect/Function" import * as Layer from "effect/Layer" import * as List from "effect/List" import * as Logger from "effect/Logger" @@ -14,15 +15,15 @@ const env = GenericTag<"context", number>("context") const withValue = (value: string) => Effect.locallyWith(ref, List.prepend(value)) const logRef = (msg: string) => - Effect.gen(function*($) { - const stack = yield* $(FiberRef.get(ref)) - const value = yield* $(env) - yield* $(Effect.log(`${value} | ${msg} | ${List.toArray(stack).join(" > ")}`)) + Effect.gen(function*() { + const stack = yield* FiberRef.get(ref) + const value = yield* env + yield* Effect.log(`${value} | ${msg} | ${List.toArray(stack).join(" > ")}`) }) describe("Effect", () => { it.effect("scoped ref", () => - Effect.gen(function*($) { + Effect.gen(function*() { const messages: Array = [] const layer = Layer.mergeAll( Logger.replace( @@ -34,7 +35,7 @@ describe("Effect", () => { Layer.succeed(env, 1) ) - yield* $( + yield* pipe( Effect.acquireRelease( withValue("A")(logRef("acquire")), () => withValue("R")(logRef("release")) diff --git a/packages/effect/test/Effect/semaphore.test.ts b/packages/effect/test/Effect/semaphore.test.ts index 9d01566ce2..87912a1966 100644 --- a/packages/effect/test/Effect/semaphore.test.ts +++ b/packages/effect/test/Effect/semaphore.test.ts @@ -7,22 +7,20 @@ import { describe } from "vitest" describe("Effect", () => { it.effect("semaphore works", () => - Effect.gen(function*($) { - const sem = yield* $(Effect.makeSemaphore(4)) + Effect.gen(function*() { + const sem = yield* Effect.makeSemaphore(4) const messages: Array = [] - yield* $( - Effect.fork(Effect.all( - [0, 1, 2, 3].map((n) => - sem.withPermits(2)(Effect.delay(D.seconds(2))(Effect.sync(() => messages.push(`process: ${n}`)))) - ), - { concurrency: "unbounded", discard: true } - )) - ) - yield* $(TestClock.adjust(D.seconds(3))) + yield* Effect.fork(Effect.all( + [0, 1, 2, 3].map((n) => + sem.withPermits(2)(Effect.delay(D.seconds(2))(Effect.sync(() => messages.push(`process: ${n}`)))) + ), + { concurrency: "unbounded", discard: true } + )) + yield* (TestClock.adjust(D.seconds(3))) strictEqual(messages.length, 2) - yield* $(TestClock.adjust(D.seconds(3))) + yield* (TestClock.adjust(D.seconds(3))) strictEqual(messages.length, 4) - yield* $( + yield* ( Effect.fork(Effect.all( [0, 1, 2, 3].map((n) => sem.withPermits(2)(Effect.delay(D.seconds(2))(Effect.sync(() => messages.push(`process: ${n}`)))) @@ -30,17 +28,17 @@ describe("Effect", () => { { concurrency: "unbounded", discard: true } )) ) - yield* $(TestClock.adjust(D.seconds(3))) + yield* (TestClock.adjust(D.seconds(3))) strictEqual(messages.length, 6) - yield* $(TestClock.adjust(D.seconds(3))) + yield* (TestClock.adjust(D.seconds(3))) strictEqual(messages.length, 8) })) it.effect("releaseAll", () => - Effect.gen(function*(_) { - const sem = yield* _(Effect.makeSemaphore(4)) - yield* _(sem.take(4)) - yield* _(sem.releaseAll) - yield* _(sem.take(1)) + Effect.gen(function*() { + const sem = yield* (Effect.makeSemaphore(4)) + yield* (sem.take(4)) + yield* (sem.releaseAll) + yield* (sem.take(1)) })) }) diff --git a/packages/effect/test/Effect/sequencing.test.ts b/packages/effect/test/Effect/sequencing.test.ts index b5cbbf0abf..e61b484d0f 100644 --- a/packages/effect/test/Effect/sequencing.test.ts +++ b/packages/effect/test/Effect/sequencing.test.ts @@ -14,7 +14,7 @@ import { describe } from "vitest" describe("Effect", () => { it.effect("andThen", () => - Effect.gen(function*($) { + Effect.gen(function*() { const a0 = Effect.andThen(Effect.succeed(0), Effect.succeed(1)) const a1 = Effect.succeed(0).pipe(Effect.andThen(Effect.succeed(1))) const a2 = Effect.andThen(Effect.succeed(0), (n) => Effect.succeed(n + 1)) @@ -25,16 +25,16 @@ describe("Effect", () => { const a7 = Effect.andThen(Effect.succeed(0), "ok") const a8 = Effect.andThen(Effect.succeed(0), () => Promise.resolve("ok")) const a9 = Effect.andThen(Effect.succeed(0), Promise.resolve("ok")) - strictEqual(yield* $(a0), 1) - strictEqual(yield* $(a1), 1) - strictEqual(yield* $(a2), 1) - strictEqual(yield* $(a3), 1) - strictEqual(yield* $(a4), "ok") - strictEqual(yield* $(a5), "ok") - strictEqual(yield* $(a6), "ok") - strictEqual(yield* $(a7), "ok") - strictEqual(yield* $(a8), "ok") - strictEqual(yield* $(a9), "ok") + strictEqual(yield* a0, 1) + strictEqual(yield* a1, 1) + strictEqual(yield* a2, 1) + strictEqual(yield* a3, 1) + strictEqual(yield* a4, "ok") + strictEqual(yield* a5, "ok") + strictEqual(yield* a6, "ok") + strictEqual(yield* a7, "ok") + strictEqual(yield* a8, "ok") + strictEqual(yield* a9, "ok") })) it.effect("tap", () => Effect.gen(function*() { @@ -66,16 +66,16 @@ describe("Effect", () => { strictEqual(yield* a12, 0) })) it.effect("flattens nested effects", () => - Effect.gen(function*($) { + Effect.gen(function*() { const effect = Effect.succeed(Effect.succeed("test")) - const flatten1 = yield* $(Effect.flatten(effect)) - const flatten2 = yield* $(Effect.flatten(effect)) + const flatten1 = yield* (Effect.flatten(effect)) + const flatten2 = yield* (Effect.flatten(effect)) strictEqual(flatten1, "test") strictEqual(flatten2, "test") })) it.effect("if - runs `onTrue` if result of `b` is `true`", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( true, Effect.if({ onTrue: () => Effect.succeed(true), @@ -85,8 +85,8 @@ describe("Effect", () => { assertTrue(result) })) it.effect("if - runs `onFalse` if result of `b` is `false`", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Effect.succeed(false), Effect.if({ onFalse: () => Effect.succeed(true), @@ -97,69 +97,69 @@ describe("Effect", () => { })) describe("", () => { it.effect("tapErrorCause - effectually peeks at the cause of the failure of this effect", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(false)) - const result = yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(false)) + const result = yield* ( pipe(Effect.dieMessage("die"), Effect.tapErrorCause(() => Ref.set(ref, true)), Effect.exit) ) - const effect = yield* $(Ref.get(ref)) + const effect = yield* (Ref.get(ref)) assertTrue(Exit.isFailure(result) && Option.isSome(Cause.dieOption(result.effect_instruction_i0))) assertTrue(effect) })) }) it.effect("tapDefect - effectually peeks at defects", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(false)) - const result = yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(false)) + const result = yield* pipe( Effect.dieMessage("die"), Effect.tapDefect(() => Ref.set(ref, true)), Effect.exit ) - const effect = yield* $(Ref.get(ref)) + const effect = yield* (Ref.get(ref)) assertTrue(Exit.isFailure(result) && Option.isSome(Cause.dieOption(result.effect_instruction_i0))) assertTrue(effect) })) it.effect("tapDefect - leaves failures", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(false)) - const result = yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(false)) + const result = yield* pipe( Effect.fail("fail"), Effect.tapDefect(() => Ref.set(ref, true)), Effect.exit ) - const effect = yield* $(Ref.get(ref)) + const effect = yield* (Ref.get(ref)) deepStrictEqual(result, Exit.fail("fail")) assertFalse(effect) })) it.effect("unless - executes correct branch only", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - yield* $(Ref.set(ref, 1), Effect.unless(constTrue)) - const v1 = yield* $(Ref.get(ref)) - yield* $(Ref.set(ref, 2), Effect.unless(constFalse)) - const v2 = yield* $(Ref.get(ref)) + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + yield* pipe(Ref.set(ref, 1), Effect.unless(constTrue)) + const v1 = yield* (Ref.get(ref)) + yield* pipe(Ref.set(ref, 2), Effect.unless(constFalse)) + const v2 = yield* (Ref.get(ref)) const failure = new Error("expected") - yield* $(Effect.fail(failure), Effect.unless(constTrue)) - const failed = yield* $(Effect.fail(failure), Effect.unless(constFalse), Effect.either) + yield* pipe(Effect.fail(failure), Effect.unless(constTrue)) + const failed = yield* pipe(Effect.fail(failure), Effect.unless(constFalse), Effect.either) strictEqual(v1, 0) strictEqual(v2, 2) assertLeft(failed, failure) })) it.effect("unlessEffect - executes condition effect and correct branch", () => - Effect.gen(function*($) { - const effectRef = yield* $(Ref.make(0)) - const conditionRef = yield* $(Ref.make(0)) + Effect.gen(function*() { + const effectRef = yield* (Ref.make(0)) + const conditionRef = yield* (Ref.make(0)) const conditionTrue = pipe(Ref.update(conditionRef, (n) => n + 1), Effect.as(true)) const conditionFalse = pipe(Ref.update(conditionRef, (n) => n + 1), Effect.as(false)) - yield* $(Ref.set(effectRef, 1), Effect.unlessEffect(conditionTrue)) - const v1 = yield* $(Ref.get(effectRef)) - const c1 = yield* $(Ref.get(conditionRef)) - yield* $(Ref.set(effectRef, 2), Effect.unlessEffect(conditionFalse)) - const v2 = yield* $(Ref.get(effectRef)) - const c2 = yield* $(Ref.get(conditionRef)) + yield* pipe(Ref.set(effectRef, 1), Effect.unlessEffect(conditionTrue)) + const v1 = yield* (Ref.get(effectRef)) + const c1 = yield* (Ref.get(conditionRef)) + yield* pipe(Ref.set(effectRef, 2), Effect.unlessEffect(conditionFalse)) + const v2 = yield* (Ref.get(effectRef)) + const c2 = yield* (Ref.get(conditionRef)) const failure = new Error("expected") - yield* $(Effect.fail(failure), Effect.unlessEffect(conditionTrue)) - const failed = yield* $(Effect.fail(failure), Effect.unlessEffect(conditionFalse), Effect.either) + yield* pipe(Effect.fail(failure), Effect.unlessEffect(conditionTrue)) + const failed = yield* pipe(Effect.fail(failure), Effect.unlessEffect(conditionFalse), Effect.either) strictEqual(v1, 0) strictEqual(c1, 1) strictEqual(v2, 2) @@ -167,34 +167,34 @@ describe("Effect", () => { assertLeft(failed, failure) })) it.effect("when - executes correct branch only", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - yield* $(Ref.set(ref, 1), Effect.when(constFalse)) - const v1 = yield* $(Ref.get(ref)) - yield* $(Ref.set(ref, 2), Effect.when(constTrue)) - const v2 = yield* $(Ref.get(ref)) + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + yield* pipe(Ref.set(ref, 1), Effect.when(constFalse)) + const v1 = yield* (Ref.get(ref)) + yield* pipe(Ref.set(ref, 2), Effect.when(constTrue)) + const v2 = yield* (Ref.get(ref)) const failure = new Error("expected") - yield* $(Effect.fail(failure), Effect.when(constFalse)) - const failed = yield* $(Effect.fail(failure), Effect.when(constTrue), Effect.either) + yield* pipe(Effect.fail(failure), Effect.when(constFalse)) + const failed = yield* pipe(Effect.fail(failure), Effect.when(constTrue), Effect.either) strictEqual(v1, 0) strictEqual(v2, 2) assertLeft(failed, failure) })) it.effect("whenEffect - executes condition effect and correct branch", () => - Effect.gen(function*($) { - const effectRef = yield* $(Ref.make(0)) - const conditionRef = yield* $(Ref.make(0)) + Effect.gen(function*() { + const effectRef = yield* (Ref.make(0)) + const conditionRef = yield* (Ref.make(0)) const conditionTrue = pipe(Ref.update(conditionRef, (n) => n + 1), Effect.as(true)) const conditionFalse = pipe(Ref.update(conditionRef, (n) => n + 1), Effect.as(false)) - yield* $(Ref.set(effectRef, 1), Effect.whenEffect(conditionFalse)) - const v1 = yield* $(Ref.get(effectRef)) - const c1 = yield* $(Ref.get(conditionRef)) - yield* $(Ref.set(effectRef, 2), Effect.whenEffect(conditionTrue)) - const v2 = yield* $(Ref.get(effectRef)) - const c2 = yield* $(Ref.get(conditionRef)) + yield* pipe(Ref.set(effectRef, 1), Effect.whenEffect(conditionFalse)) + const v1 = yield* (Ref.get(effectRef)) + const c1 = yield* (Ref.get(conditionRef)) + yield* pipe(Ref.set(effectRef, 2), Effect.whenEffect(conditionTrue)) + const v2 = yield* (Ref.get(effectRef)) + const c2 = yield* (Ref.get(conditionRef)) const failure = new Error("expected") - yield* $(Effect.fail(failure), Effect.whenEffect(conditionFalse)) - const failed = yield* $(Effect.fail(failure), Effect.whenEffect(conditionTrue), Effect.either) + yield* pipe(Effect.fail(failure), Effect.whenEffect(conditionFalse)) + const failed = yield* pipe(Effect.fail(failure), Effect.whenEffect(conditionTrue), Effect.either) strictEqual(v1, 0) strictEqual(c1, 1) strictEqual(v2, 2) @@ -202,8 +202,8 @@ describe("Effect", () => { assertLeft(failed, failure) })) it.effect("zip/parallel - combines results", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Effect.succeed(1), Effect.zip(Effect.succeed(2), { concurrent: true }), Effect.flatMap((tuple) => Effect.succeed(tuple[0] + tuple[1])), @@ -212,8 +212,8 @@ describe("Effect", () => { assertTrue(result) })) it.effect("zip/parallel - does not swallow exit causes of loser", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* ( pipe( Effect.interrupt, Effect.zip(Effect.interrupt, { concurrent: true }), @@ -226,8 +226,8 @@ describe("Effect", () => { assertTrue(HashSet.size(result) > 0) })) it.effect("zip/parallel - does not report failure when interrupting loser after it succeeded", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* ( pipe( Effect.interrupt, Effect.zip(Effect.succeed(1), { concurrent: true }), @@ -239,7 +239,7 @@ describe("Effect", () => { assertLeft(result, true) })) it.effect("zip/parallel - paralellizes simple success values", () => - Effect.gen(function*($) { + Effect.gen(function*() { const countdown = (n: number): Effect.Effect => { return n === 0 ? Effect.succeed(0) @@ -249,15 +249,15 @@ describe("Effect", () => { Effect.flatMap((tuple) => pipe(countdown(n - 1), Effect.map((y) => tuple[0] + tuple[1] + y))) ) } - const result = yield* $(countdown(50)) + const result = yield* (countdown(50)) strictEqual(result, 150) })) it.effect("zip/parallel - does not kill fiber when forked on parent scope", () => - Effect.gen(function*($) { - const latch1 = yield* $(Deferred.make()) - const latch2 = yield* $(Deferred.make()) - const latch3 = yield* $(Deferred.make()) - const ref = yield* $(Ref.make(false)) + Effect.gen(function*() { + const latch1 = yield* (Deferred.make()) + const latch2 = yield* (Deferred.make()) + const latch3 = yield* (Deferred.make()) + const ref = yield* (Ref.make(false)) const left = Effect.uninterruptibleMask((restore) => pipe( Deferred.succeed(latch2, void 0), @@ -266,18 +266,18 @@ describe("Effect", () => { ) ) const right = pipe(Deferred.succeed(latch3, void 0), Effect.as(42)) - yield* $( + yield* pipe( Deferred.await(latch2), Effect.zipRight(Deferred.await(latch3)), Effect.zipRight(Deferred.succeed(latch1, void 0)), Effect.fork ) - const result = yield* $(Effect.fork(left), Effect.zip(right, { concurrent: true })) + const result = yield* pipe(Effect.fork(left), Effect.zip(right, { concurrent: true })) const leftInnerFiber = result[0] const rightResult = result[1] - const leftResult = yield* $(Fiber.await(leftInnerFiber)) - const interrupted = yield* $(Ref.get(ref)) + const leftResult = yield* (Fiber.await(leftInnerFiber)) + const interrupted = yield* (Ref.get(ref)) assertFalse(interrupted) deepStrictEqual(leftResult, Exit.succeed("foo")) strictEqual(rightResult, 42) diff --git a/packages/effect/test/Effect/stack-safety.test.ts b/packages/effect/test/Effect/stack-safety.test.ts index c0579d4dd0..460cbf438a 100644 --- a/packages/effect/test/Effect/stack-safety.test.ts +++ b/packages/effect/test/Effect/stack-safety.test.ts @@ -17,21 +17,21 @@ const deepMapEffect = (n: number): Effect.Effect => { describe("Effect", () => { it.effect("deep map of sync effect", () => - Effect.gen(function*($) { - const result = yield* $(deepMapEffect(10000)) + Effect.gen(function*() { + const result = yield* (deepMapEffect(10000)) strictEqual(result, 10000) })) it.effect("deep attempt", () => - Effect.gen(function*($) { + Effect.gen(function*() { const array = Array.from({ length: 10000 }, (_, i) => i) - const result = yield* $(array.reduce( + const result = yield* (array.reduce( (acc, _) => pipe(Effect.orDie(acc), Effect.either, Effect.asVoid), Effect.orDie(Effect.try(constVoid)) )) strictEqual(result, undefined) })) it.effect("deep flatMap", () => - Effect.gen(function*($) { + Effect.gen(function*() { const fib = ( n: number, a: BigInt = BigInt("0"), @@ -42,24 +42,24 @@ describe("Effect", () => { Effect.flatMap((b2) => n > 0 ? fib(n - 1, b, b2) : Effect.succeed(b2)) ) } - const result = yield* $(fib(1000)) + const result = yield* (fib(1000)) const expected = BigInt( "113796925398360272257523782552224175572745930353730513145086634176691092536145985470146129334641866902783673042322088625863396052888690096969577173696370562180400527049497109023054114771394568040040412172632376" ) deepStrictEqual(result, expected) })) it.effect("deep absolve/attempt is identity", () => - Effect.gen(function*($) { + Effect.gen(function*() { const array = Array.from({ length: 100 }, (_, i) => i) - const result = yield* $( + const result = yield* ( array.reduce((acc, _) => Effect.flatMap(Effect.either(acc), identity), Effect.succeed(42)) ) strictEqual(result, 42) })) it.effect("deep async absolve/attempt is identity", () => - Effect.gen(function*($) { + Effect.gen(function*() { const array = Array.from({ length: 1000 }, (_, i) => i) - const result = yield* $(array.reduce( + const result = yield* (array.reduce( (acc, _) => Effect.flatMap(Effect.either(acc), identity), Effect.async((cb) => { cb(Effect.succeed(42)) @@ -68,7 +68,7 @@ describe("Effect", () => { strictEqual(result, 42) })) it.effect("deep effects", () => - Effect.gen(function*($) { + Effect.gen(function*() { const incLeft = (n: number, ref: Ref.Ref): Effect.Effect => { if (n <= 0) { return Ref.get(ref) @@ -83,7 +83,7 @@ describe("Effect", () => { } const left = pipe(Ref.make(0), Effect.flatMap((ref) => incLeft(100, ref)), Effect.map((n) => n === 0)) const right = pipe(Ref.make(0), Effect.flatMap((ref) => incRight(1000, ref)), Effect.map((n) => n === 1000)) - const result = yield* $(left, Effect.zipWith(right, (a, b) => a && b)) + const result = yield* pipe(left, Effect.zipWith(right, (a, b) => a && b)) assertTrue(result) })) }) diff --git a/packages/effect/test/Effect/structural.test.ts b/packages/effect/test/Effect/structural.test.ts index c1593c2cd1..0f160f76b5 100644 --- a/packages/effect/test/Effect/structural.test.ts +++ b/packages/effect/test/Effect/structural.test.ts @@ -1,5 +1,6 @@ import * as Effect from "effect/Effect" import * as Either from "effect/Either" +import { pipe } from "effect/Function" import * as Option from "effect/Option" import { assertLeft, assertNone, assertRight, assertSome, deepStrictEqual } from "effect/test/util" import * as it from "effect/test/utils/extend" @@ -9,27 +10,27 @@ import { describe } from "vitest" describe("Effect", () => { describe("all", () => { it.effect("should work with one array argument", () => - Effect.gen(function*($) { - const res = yield* $(Effect.all([Effect.succeed(0), Effect.succeed(1)])) + Effect.gen(function*() { + const res = yield* (Effect.all([Effect.succeed(0), Effect.succeed(1)])) deepStrictEqual(res, [0, 1]) satisfies(assertType<[number, number]>()(res)) })) it.effect("should work with one empty array argument", () => - Effect.gen(function*($) { - const x = yield* $(Effect.all([])) + Effect.gen(function*() { + const x = yield* (Effect.all([])) deepStrictEqual(x, []) satisfies(assertType<[]>()(x)) })) it.effect("should work with an array argument", () => - Effect.gen(function*($) { + Effect.gen(function*() { const y = Effect.all([0, 1, 2].map((n) => Effect.succeed(n + 1))) - const x = yield* $(y) + const x = yield* y deepStrictEqual(x, [1, 2, 3]) satisfies(assertType>()(x)) })) it.effect("should work with one record argument", () => - Effect.gen(function*($) { - const result = yield* $(Effect.all({ a: Effect.succeed(0), b: Effect.succeed(1) })) + Effect.gen(function*() { + const result = yield* (Effect.all({ a: Effect.succeed(0), b: Effect.succeed(1) })) const { a, b } = result deepStrictEqual(a, 0) deepStrictEqual(b, 1) @@ -41,38 +42,38 @@ describe("Effect", () => { ) })) it.effect("should work with one iterable argument", () => - Effect.gen(function*($) { - const result = yield* $(Effect.all(new Set([Effect.succeed(0), Effect.succeed(1)]))) + Effect.gen(function*() { + const result = yield* (Effect.all(new Set([Effect.succeed(0), Effect.succeed(1)]))) deepStrictEqual(result, [0, 1]) satisfies(assertType>()(result)) })) it.effect("should work with one empty record", () => - Effect.gen(function*($) { - const x = yield* $(Effect.all({})) + Effect.gen(function*() { + const x = yield* (Effect.all({})) deepStrictEqual(x, {}) satisfies(assertType<{}>()(x)) })) }) describe("all/ concurrency", () => { it.effect("should work with one array argument", () => - Effect.gen(function*($) { - const res = yield* $(Effect.all([Effect.succeed(0), Effect.succeed(1)], { + Effect.gen(function*() { + const res = yield* (Effect.all([Effect.succeed(0), Effect.succeed(1)], { concurrency: "unbounded" })) deepStrictEqual(res, [0, 1]) satisfies(assertType<[number, number]>()(res)) })) it.effect("should work with one empty array argument", () => - Effect.gen(function*($) { - const x = yield* $(Effect.all([], { + Effect.gen(function*() { + const x = yield* (Effect.all([], { concurrency: "unbounded" })) deepStrictEqual(x, []) satisfies(assertType<[]>()(x)) })) it.effect("should work with one record argument", () => - Effect.gen(function*($) { - const result = yield* $(Effect.all({ a: Effect.succeed(0), b: Effect.succeed(1) }, { + Effect.gen(function*() { + const result = yield* (Effect.all({ a: Effect.succeed(0), b: Effect.succeed(1) }, { concurrency: "unbounded" })) const { a, b } = result @@ -86,28 +87,28 @@ describe("Effect", () => { ) })) it.effect("should work with one empty record", () => - Effect.gen(function*($) { - const x = yield* $(Effect.all({}, { concurrency: "unbounded" })) + Effect.gen(function*() { + const x = yield* (Effect.all({}, { concurrency: "unbounded" })) deepStrictEqual(x, {}) satisfies(assertType<{}>()(x)) })) }) describe("all/ validate mode", () => { it.effect("should work with one array argument", () => - Effect.gen(function*($) { - const res = yield* $(Effect.all([Effect.succeed(0), Effect.succeed(1)], { mode: "validate" })) + Effect.gen(function*() { + const res = yield* (Effect.all([Effect.succeed(0), Effect.succeed(1)], { mode: "validate" })) deepStrictEqual(res, [0, 1]) satisfies(assertType<[number, number]>()(res)) })) it.effect("failure should work with one array argument", () => - Effect.gen(function*($) { - const res = yield* $(Effect.flip(Effect.all([Effect.fail(0), Effect.succeed(1)], { mode: "validate" }))) + Effect.gen(function*() { + const res = yield* (Effect.flip(Effect.all([Effect.fail(0), Effect.succeed(1)], { mode: "validate" }))) deepStrictEqual(res, [Option.some(0), Option.none()]) satisfies(assertType<[Option.Option, Option.Option]>()(res)) })) it.effect("should work with one record argument", () => - Effect.gen(function*($) { - const result = yield* $(Effect.all({ a: Effect.succeed(0), b: Effect.succeed(1) }, { mode: "validate" })) + Effect.gen(function*() { + const result = yield* (Effect.all({ a: Effect.succeed(0), b: Effect.succeed(1) }, { mode: "validate" })) const { a, b } = result deepStrictEqual(a, 0) deepStrictEqual(b, 1) @@ -119,8 +120,8 @@ describe("Effect", () => { ) })) it.effect("failure should work with one record argument", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* ( Effect.flip(Effect.all({ a: Effect.fail(0), b: Effect.succeed(1) }, { mode: "validate" })) ) const { a, b } = result @@ -134,28 +135,28 @@ describe("Effect", () => { ) })) it.effect("should work with one iterable argument", () => - Effect.gen(function*($) { - const result = yield* $(Effect.all(new Set([Effect.succeed(0), Effect.succeed(1)]), { mode: "validate" })) + Effect.gen(function*() { + const result = yield* (Effect.all(new Set([Effect.succeed(0), Effect.succeed(1)]), { mode: "validate" })) deepStrictEqual(result, [0, 1]) satisfies(assertType>()(result)) })) }) describe("all/ either mode", () => { it.effect("should work with one array argument", () => - Effect.gen(function*($) { - const res = yield* $(Effect.all([Effect.succeed(0), Effect.succeed(1)], { mode: "either" })) + Effect.gen(function*() { + const res = yield* (Effect.all([Effect.succeed(0), Effect.succeed(1)], { mode: "either" })) deepStrictEqual(res, [Either.right(0), Either.right(1)]) satisfies(assertType<[Either.Either, Either.Either]>()(res)) })) it.effect("failure should work with one array argument", () => - Effect.gen(function*($) { - const res = yield* $(Effect.all([Effect.fail(0), Effect.succeed(1)], { mode: "either" })) + Effect.gen(function*() { + const res = yield* (Effect.all([Effect.fail(0), Effect.succeed(1)], { mode: "either" })) deepStrictEqual(res, [Either.left(0), Either.right(1)]) satisfies(assertType<[Either.Either, Either.Either]>()(res)) })) it.effect("should work with one record argument", () => - Effect.gen(function*($) { - const result = yield* $(Effect.all({ a: Effect.succeed(0), b: Effect.succeed(1) }, { mode: "either" })) + Effect.gen(function*() { + const result = yield* (Effect.all({ a: Effect.succeed(0), b: Effect.succeed(1) }, { mode: "either" })) const { a, b } = result assertRight(a, 0) assertRight(b, 1) @@ -167,8 +168,8 @@ describe("Effect", () => { ) })) it.effect("failure should work with one record argument", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* ( Effect.all({ a: Effect.fail(0), b: Effect.succeed(1) }, { mode: "either" }) ) const { a, b } = result @@ -182,16 +183,16 @@ describe("Effect", () => { ) })) it.effect("should work with one iterable argument", () => - Effect.gen(function*($) { - const result = yield* $(Effect.all(new Set([Effect.succeed(0), Effect.succeed(1)]), { mode: "either" })) + Effect.gen(function*() { + const result = yield* (Effect.all(new Set([Effect.succeed(0), Effect.succeed(1)]), { mode: "either" })) deepStrictEqual(result, [Either.right(0), Either.right(1)]) satisfies(assertType>>()(result)) })) }) describe("allWith", () => { it.effect("should work with one array argument", () => - Effect.gen(function*($) { - const res = yield* $( + Effect.gen(function*() { + const res = yield* pipe( [Effect.succeed(0), Effect.succeed(1)] as const, Effect.allWith() ) diff --git a/packages/effect/test/Effect/sync.test.ts b/packages/effect/test/Effect/sync.test.ts index be193c12cb..2277465bc5 100644 --- a/packages/effect/test/Effect/sync.test.ts +++ b/packages/effect/test/Effect/sync.test.ts @@ -25,14 +25,14 @@ describe("Effect", () => { } }) it.effect("sync - effect", () => - Effect.gen(function*($) { + Effect.gen(function*() { const sumEffect = (n: number): Effect.Effect => { if (n < 0) { return Effect.sync(() => 0) } return pipe(Effect.sync(() => n), Effect.flatMap((b) => pipe(sumEffect(n - 1), Effect.map((a) => a + b)))) } - const result = yield* $(sumEffect(1000)) + const result = yield* (sumEffect(1000)) strictEqual(result, sum(1000)) })) it.it("sync - must be lazy", async () => { @@ -62,9 +62,9 @@ describe("Effect", () => { assertTrue(result) }) it.effect("suspend - must catch throwable", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Error("woops") - const result = yield* $( + const result = yield* pipe( Effect.suspend(() => { throw error }), @@ -73,14 +73,14 @@ describe("Effect", () => { deepStrictEqual(result, Exit.die(error)) })) it.effect("suspendSucceed - must be evaluatable", () => - Effect.gen(function*($) { - const result = yield* $(Effect.suspend(() => Effect.succeed(42))) + Effect.gen(function*() { + const result = yield* (Effect.suspend(() => Effect.succeed(42))) strictEqual(result, 42) })) it.effect("suspendSucceed - must not catch throwable", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Error("woops") - const result = yield* $( + const result = yield* pipe( Effect.suspend(() => { throw error }), diff --git a/packages/effect/test/Effect/timeout.test.ts b/packages/effect/test/Effect/timeout.test.ts index 7ca71a7616..e3c7fa9ba8 100644 --- a/packages/effect/test/Effect/timeout.test.ts +++ b/packages/effect/test/Effect/timeout.test.ts @@ -27,8 +27,8 @@ describe("Effect", () => { ) })) it.live("timeout a long computation", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* ( pipe( Effect.sleep(Duration.seconds(5)), Effect.zipRight(Effect.succeed(true)), @@ -42,9 +42,9 @@ describe("Effect", () => { deepStrictEqual(result, Exit.fail(false)) })) it.live("timeout a long computation with a cause", () => - Effect.gen(function*($) { + Effect.gen(function*() { const cause = Cause.die(new Error("boom")) - const result = yield* $( + const result = yield* ( pipe( Effect.sleep(Duration.seconds(5)), Effect.zipRight(Effect.succeed(true)), @@ -59,25 +59,25 @@ describe("Effect", () => { deepStrictEqual(result, cause) })) it.live("timeout repetition of uninterruptible effect", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* ( pipe(Effect.void, Effect.uninterruptible, Effect.forever, Effect.timeout(Duration.millis(10)), Effect.option) ) assertNone(result) })) it.effect("timeout in uninterruptible region", () => - Effect.gen(function*($) { - const result = yield* $(Effect.void, Effect.timeout(Duration.seconds(20)), Effect.uninterruptible) + Effect.gen(function*() { + const result = yield* pipe(Effect.void, Effect.timeout(Duration.seconds(20)), Effect.uninterruptible) deepStrictEqual(result, void 0) })) it.effect("timeout - disconnect - returns with the produced value if the effect completes before the timeout elapses", () => - Effect.gen(function*($) { - const result = yield* $(Effect.void, Effect.disconnect, Effect.timeout(Duration.millis(100))) + Effect.gen(function*() { + const result = yield* pipe(Effect.void, Effect.disconnect, Effect.timeout(Duration.millis(100))) deepStrictEqual(result, void 0) })) it.effect("timeout - disconnect - returns `NoSuchElementException` otherwise", () => - Effect.gen(function*($) { - const fiber = yield* $( + Effect.gen(function*() { + const fiber = yield* ( pipe( Effect.never, Effect.uninterruptible, @@ -87,8 +87,8 @@ describe("Effect", () => { Effect.fork ) ) - yield* $(TestClock.adjust(Duration.millis(100))) - const result = yield* $(Fiber.join(fiber)) + yield* (TestClock.adjust(Duration.millis(100))) + const result = yield* (Fiber.join(fiber)) assertNone(result) })) }) diff --git a/packages/effect/test/Effect/traversing.test.ts b/packages/effect/test/Effect/traversing.test.ts index b062793881..89c580d8d9 100644 --- a/packages/effect/test/Effect/traversing.test.ts +++ b/packages/effect/test/Effect/traversing.test.ts @@ -13,8 +13,8 @@ import { describe } from "vitest" describe("Effect", () => { it.effect("dropWhile - happy path", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* ( pipe( [1, 2, 3, 4, 5], Effect.dropWhile((n) => Effect.succeed(n % 2 === 1)) @@ -32,10 +32,10 @@ describe("Effect", () => { assertLeft(result, "Ouch") })) it.effect("exists - determines whether any element satisfies the effectual predicate", () => - Effect.gen(function*($) { + Effect.gen(function*() { const array = [1, 2, 3, 4, 5] - const result1 = yield* $(array, Effect.exists((n) => Effect.succeed(n > 3))) - const result2 = yield* $( + const result1 = yield* pipe(array, Effect.exists((n) => Effect.succeed(n > 3))) + const result2 = yield* pipe( array, Effect.exists((n) => Effect.succeed(n > 5), { concurrency: "unbounded" @@ -45,70 +45,70 @@ describe("Effect", () => { assertFalse(result2) })) it.effect("forAll - determines whether all elements satisfy the effectual predicate", () => - Effect.gen(function*($) { + Effect.gen(function*() { const array = [1, 2, 3, 4, 5, 6] - const result1 = yield* $(array, Effect.every((n) => Effect.succeed(n > 3))) - const result2 = yield* $(array, Effect.every((n) => Effect.succeed(n > 0))) + const result1 = yield* pipe(array, Effect.every((n) => Effect.succeed(n > 3))) + const result2 = yield* pipe(array, Effect.every((n) => Effect.succeed(n > 0))) assertFalse(result1) assertTrue(result2) })) it.effect("iterate - iterates with the specified effectual function", () => - Effect.gen(function*($) { - const result = yield* $(Effect.iterate(100, { + Effect.gen(function*() { + const result = yield* (Effect.iterate(100, { while: (n) => n > 0, body: (n) => Effect.succeed(n - 1) })) strictEqual(result, 0) })) it.effect("loop - loops with the specified effectual function", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Array.empty())) - yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(Array.empty())) + yield* ( Effect.loop(0, { while: (n) => n < 5, step: (n) => n + 1, body: (n) => Ref.update(ref, Array.append(n)) }) ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) deepStrictEqual(result, [0, 1, 2, 3, 4]) })) it.effect("loop/discard - loops with the specified effectual function", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Array.empty())) - yield* $(Effect.loop(0, { + Effect.gen(function*() { + const ref = yield* (Ref.make(Array.empty())) + yield* (Effect.loop(0, { while: (n) => n < 5, step: (n) => n + 1, body: (n) => Ref.update(ref, Array.append(n)), discard: true })) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) deepStrictEqual(result, [0, 1, 2, 3, 4]) })) it.effect("replicate - zero", () => - Effect.gen(function*($) { - const result = yield* $(Effect.all(pipe(Effect.succeed(12), Effect.replicate(0)))) + Effect.gen(function*() { + const result = yield* (Effect.all(pipe(Effect.succeed(12), Effect.replicate(0)))) strictEqual(result.length, 0) })) it.effect("replicate - negative", () => - Effect.gen(function*($) { - const result = yield* $(Effect.all(pipe(Effect.succeed(12), Effect.replicate(-2)))) + Effect.gen(function*() { + const result = yield* (Effect.all(pipe(Effect.succeed(12), Effect.replicate(-2)))) strictEqual(result.length, 0) })) it.effect("replicate - positive", () => - Effect.gen(function*($) { - const result = yield* $(Effect.all(pipe(Effect.succeed(12), Effect.replicate(2)))) + Effect.gen(function*() { + const result = yield* (Effect.all(pipe(Effect.succeed(12), Effect.replicate(2)))) deepStrictEqual(result, [12, 12]) })) it.effect(" - returns the list of results", () => - Effect.gen(function*($) { - const result = yield* $([1, 2, 3, 4, 5, 6], Effect.forEach((n) => Effect.succeed(n + 1))) + Effect.gen(function*() { + const result = yield* pipe([1, 2, 3, 4, 5, 6], Effect.forEach((n) => Effect.succeed(n + 1))) deepStrictEqual(result, [2, 3, 4, 5, 6, 7]) })) it.effect("forEach - both evaluates effects and returns results in the same order", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Chunk.empty())) - const result = yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(Chunk.empty())) + const result = yield* pipe( Chunk.make("1", "2", "3"), Effect.forEach((s) => pipe( @@ -117,13 +117,13 @@ describe("Effect", () => { ) ) ) - const effects = yield* $(Ref.get(ref), Effect.map(Chunk.reverse)) + const effects = yield* pipe(Ref.get(ref), Effect.map(Chunk.reverse)) deepStrictEqual(Chunk.toReadonlyArray(effects), ["1", "2", "3"]) deepStrictEqual(result, [1, 2, 3]) })) it.effect("forEach - fails if one of the effects fails", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( ["1", "h", "3"], Effect.forEach((s) => Effect.sync(() => { @@ -140,40 +140,40 @@ describe("Effect", () => { deepStrictEqual(result, Exit.die(new Cause.IllegalArgumentException())) })) it.effect("forEach/discard - runs effects in order", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Array.empty())) - yield* $([1, 2, 3, 4, 5], Effect.forEach((n) => Ref.update(ref, Array.append(n)), { discard: true })) - const result = yield* $(Ref.get(ref)) + Effect.gen(function*() { + const ref = yield* (Ref.make(Array.empty())) + yield* pipe([1, 2, 3, 4, 5], Effect.forEach((n) => Ref.update(ref, Array.append(n)), { discard: true })) + const result = yield* (Ref.get(ref)) deepStrictEqual(result, [1, 2, 3, 4, 5]) })) it.effect("forEach/discard - can be run twice", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) const effect = pipe([1, 2, 3, 4, 5], Effect.forEach((n) => Ref.update(ref, (_) => _ + n), { discard: true })) - yield* $(effect) - yield* $(effect) - const result = yield* $(Ref.get(ref)) + yield* effect + yield* effect + const result = yield* (Ref.get(ref)) strictEqual(result, 30) })) it.effect("forEach/concurrency - runs single task", () => - Effect.gen(function*($) { - const result = yield* $([2], Effect.forEach((n) => Effect.succeed(n * 2), { concurrency: "unbounded" })) + Effect.gen(function*() { + const result = yield* pipe([2], Effect.forEach((n) => Effect.succeed(n * 2), { concurrency: "unbounded" })) deepStrictEqual(result, [4]) })) it.effect("forEach/concurrency - runs two tasks", () => - Effect.gen(function*($) { - const result = yield* $([2, 3], Effect.forEach((n) => Effect.succeed(n * 2), { concurrency: "unbounded" })) + Effect.gen(function*() { + const result = yield* pipe([2, 3], Effect.forEach((n) => Effect.succeed(n * 2), { concurrency: "unbounded" })) deepStrictEqual(result, [4, 6]) })) it.effect("forEach/concurrency - runs many tasks", () => - Effect.gen(function*($) { + Effect.gen(function*() { const array = Array.makeBy(100, (i) => i + 1) - const result = yield* $(array, Effect.forEach((n) => Effect.succeed(n * 2), { concurrency: "unbounded" })) + const result = yield* pipe(array, Effect.forEach((n) => Effect.succeed(n * 2), { concurrency: "unbounded" })) deepStrictEqual(result, array.map((n) => n * 2)) })) it.effect("forEach/concurrency - runs a task that fails", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Array.makeBy(10, (i) => i + 1), Effect.forEach((n) => n === 5 ? Effect.fail("boom") : Effect.succeed(n * 2), { concurrency: "unbounded" }), Effect.flip @@ -181,8 +181,8 @@ describe("Effect", () => { strictEqual(result, "boom") })) it.effect("forEach/concurrency - runs two failed tasks", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Array.makeBy(10, (i) => i + 1), Effect.forEach((n) => n === 5 @@ -195,8 +195,8 @@ describe("Effect", () => { assertTrue(result === "boom1" || result === "boom2") })) it.effect("forEach/concurrency - runs a task that dies", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Array.makeBy(10, (i) => i + 1), Effect.forEach((n) => n === 5 ? Effect.dieMessage("boom") : Effect.succeed(n * 2), { concurrency: "unbounded" @@ -206,8 +206,8 @@ describe("Effect", () => { assertTrue(Exit.isFailure(result) && Cause.isDie(result.effect_instruction_i0)) })) it.effect("forEach/concurrency - runs a task that is interrupted", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Array.makeBy(10, (i) => i + 1), Effect.forEach((n) => n === 5 ? Effect.interrupt : Effect.succeed(n * 2), { concurrency: "unbounded" }), Effect.exit @@ -215,8 +215,8 @@ describe("Effect", () => { assertTrue(Exit.isInterrupted(result)) })) it.effect("forEach/concurrency - runs a task that throws an unsuspended exception", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( [1], Effect.forEach((n) => Effect.sync(() => { @@ -227,29 +227,29 @@ describe("Effect", () => { deepStrictEqual(result, Exit.die(new Error("1"))) })) it.effect("forEach/concurrency - returns results in the same order", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( ["1", "2", "3"], Effect.forEach((s) => Effect.sync(() => Number.parseInt(s)), { concurrency: "unbounded" }) ) deepStrictEqual(result, [1, 2, 3]) })) it.effect("forEach/concurrency - runs effects in parallel", () => - Effect.gen(function*($) { - const deferred = yield* $(Deferred.make()) - yield* $( + Effect.gen(function*() { + const deferred = yield* (Deferred.make()) + yield* ( pipe( [Effect.never, Deferred.succeed(deferred, void 0)], Effect.forEach(identity, { concurrency: "unbounded" }), Effect.fork ) ) - const result = yield* $(Deferred.await(deferred)) + const result = yield* (Deferred.await(deferred)) strictEqual(result, undefined) })) it.effect("forEach/concurrency - propagates error", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( [1, 2, 3, 4, 5, 6], Effect.forEach((n) => n % 2 !== 0 ? Effect.succeed(n) : Effect.fail("not odd"), { concurrency: "unbounded" }), Effect.flip @@ -257,34 +257,34 @@ describe("Effect", () => { strictEqual(result, "not odd") })) it.effect("forEach/concurrency - interrupts effects on first failure", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(false)) - const deferred = yield* $(Deferred.make()) + Effect.gen(function*() { + const ref = yield* (Ref.make(false)) + const deferred = yield* (Deferred.make()) const actions = [ Effect.never, Effect.succeed(1), Effect.fail("C"), pipe(Deferred.await(deferred), Effect.zipRight(Ref.set(ref, true)), Effect.as(1)) ] - const error = yield* $(actions, Effect.forEach(identity, { concurrency: "unbounded" }), Effect.flip) - const value = yield* $(Ref.get(ref)) + const error = yield* pipe(actions, Effect.forEach(identity, { concurrency: "unbounded" }), Effect.flip) + const value = yield* (Ref.get(ref)) strictEqual(error, "C") assertFalse(value) })) it.effect("forEach/concurrency - does not kill fiber when forked on the parent scope", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - const fibers = yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + const fibers = yield* pipe( Array.makeBy(100, (i) => i + 1), Effect.forEach(() => pipe(Ref.update(ref, (_) => _ + 1), Effect.fork), { concurrency: "unbounded" }) ) - yield* $(fibers, Effect.forEach(Fiber.await)) - const result = yield* $(Ref.get(ref)) + yield* pipe(fibers, Effect.forEach(Fiber.await)) + const result = yield* (Ref.get(ref)) strictEqual(result, 100) })) it.effect("forEach/concurrency - parallelism - returns the results in the appropriate order", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* ( pipe( [1, 2, 3], Effect.forEach((n) => Effect.succeed(n.toString()), { concurrency: 2 }) @@ -293,10 +293,10 @@ describe("Effect", () => { deepStrictEqual(result, ["1", "2", "3"]) })) it.effect("forEach/concurrency - parallelism - works on large lists", () => - Effect.gen(function*($) { + Effect.gen(function*() { const parallelism = 10 const array = Array.makeBy(100000, (i) => i) - const result = yield* $( + const result = yield* ( pipe( array, Effect.forEach((n) => Effect.succeed(n), { concurrency: parallelism }) @@ -305,21 +305,21 @@ describe("Effect", () => { deepStrictEqual(result, array) })) it.effect("forEach/concurrency - parallelism - runs effects in parallel", () => - Effect.gen(function*($) { - const deferred = yield* $(Deferred.make()) - yield* $( + Effect.gen(function*() { + const deferred = yield* (Deferred.make()) + yield* ( pipe( [Effect.never, Deferred.succeed(deferred, void 0)], Effect.forEach(identity, { concurrency: 2 }), Effect.fork ) ) - const result = yield* $(Deferred.await(deferred)) + const result = yield* (Deferred.await(deferred)) strictEqual(result, undefined) })) it.effect("forEach/concurrency - parallelism - propagates error", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( [1, 2, 3, 4, 5, 6], Effect.forEach((n) => n % 2 !== 0 ? Effect.succeed(n) : Effect.fail("not odd"), { concurrency: 4 }), Effect.either @@ -327,13 +327,13 @@ describe("Effect", () => { assertLeft(result, "not odd") })) it.effect("forEach/concurrency - parallelism - interrupts effects on first failure", () => - Effect.gen(function*($) { + Effect.gen(function*() { const actions = [ Effect.never, Effect.succeed(1), Effect.fail("C") ] - const result = yield* $( + const result = yield* pipe( actions, Effect.forEach(identity, { concurrency: 4 }), Effect.either @@ -341,7 +341,7 @@ describe("Effect", () => { assertLeft(result, "C") })) it.effect("forEach/concurrency+discard - accumulates errors", () => - Effect.gen(function*($) { + Effect.gen(function*() { const task = ( started: Ref.Ref, trigger: Deferred.Deferred, @@ -359,9 +359,9 @@ describe("Effect", () => { ) ) } - const started = yield* $(Ref.make(0)) - const trigger = yield* $(Deferred.make()) - const result = yield* $( + const started = yield* (Ref.make(0)) + const trigger = yield* (Deferred.make()) + const result = yield* pipe( [1, 2, 3], Effect.forEach((n) => pipe(task(started, trigger, n), Effect.uninterruptible), { concurrency: "unbounded", @@ -375,21 +375,21 @@ describe("Effect", () => { deepStrictEqual(Chunk.toReadonlyArray(result), [1, 2, 3]) })) it.effect("forEach/concurrency+discard - runs all effects", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Chunk.empty())) - yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(Chunk.empty())) + yield* pipe( [1, 2, 3, 4, 5], Effect.forEach((n) => Ref.update(ref, Chunk.prepend(n)), { concurrency: "unbounded", discard: true }) ) - const result = yield* $(Ref.get(ref), Effect.map(Chunk.reverse)) + const result = yield* pipe(Ref.get(ref), Effect.map(Chunk.reverse)) deepStrictEqual(Chunk.toReadonlyArray(result), [1, 2, 3, 4, 5]) })) it.effect("forEach/concurrency+discard - completes on empty input", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( [], Effect.forEach(() => Effect.void, { concurrency: "unbounded", @@ -399,60 +399,63 @@ describe("Effect", () => { strictEqual(result, undefined) })) it.effect("forEach/concurrency+discard - parallelism - runs all effects", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Chunk.empty())) - yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(Chunk.empty())) + yield* pipe( [1, 2, 3, 4, 5], Effect.forEach((n) => Ref.update(ref, Chunk.prepend(n)), { concurrency: 2, discard: true }) ) - const result = yield* $(Ref.get(ref), Effect.map(Chunk.reverse)) + const result = yield* pipe(Ref.get(ref), Effect.map(Chunk.reverse)) deepStrictEqual(Chunk.toReadonlyArray(result), [1, 2, 3, 4, 5]) })) it.effect("merge - on flipped result", () => - Effect.gen(function*($) { + Effect.gen(function*() { const effect: Effect.Effect = Effect.succeed(1) - const a = yield* $(Effect.merge(effect)) - const b = yield* $(Effect.merge(Effect.flip(effect))) + const a = yield* (Effect.merge(effect)) + const b = yield* (Effect.merge(Effect.flip(effect))) strictEqual(a, b) })) it.effect("mergeAll - return zero element on empty input", () => - Effect.gen(function*($) { + Effect.gen(function*() { const zeroElement = 42 const nonZero = 43 - const result = yield* $( + const result = yield* ( pipe([] as ReadonlyArray>, Effect.mergeAll(zeroElement, () => nonZero)) ) strictEqual(result, zeroElement) })) it.effect("mergeAll - merge list using function", () => - Effect.gen(function*($) { - const result = yield* $([3, 5, 7].map(Effect.succeed), Effect.mergeAll(1, (b, a) => b + a)) + Effect.gen(function*() { + const result = yield* pipe([3, 5, 7].map(Effect.succeed), Effect.mergeAll(1, (b, a) => b + a)) strictEqual(result, 1 + 3 + 5 + 7) })) it.effect("mergeAll - should work when Z is an interable", () => - Effect.gen(function*($) { - const result = yield* $([3, 5, 7].map(Effect.succeed), Effect.mergeAll([] as Array, (b, a) => [...b, a])) + Effect.gen(function*() { + const result = yield* pipe( + [3, 5, 7].map(Effect.succeed), + Effect.mergeAll([] as Array, (b, a) => [...b, a]) + ) deepStrictEqual(result, [3, 5, 7]) })) it.effect("mergeAll - should work when Z is a function", () => - Effect.gen(function*($) { - const result = yield* $([3, 5, 7].map(Effect.succeed), Effect.mergeAll(() => 1, (_b, a) => () => a)) + Effect.gen(function*() { + const result = yield* pipe([3, 5, 7].map(Effect.succeed), Effect.mergeAll(() => 1, (_b, a) => () => a)) deepStrictEqual(result(), 7) })) it.effect("mergeAll - return error if it exists in list", () => - Effect.gen(function*($) { + Effect.gen(function*() { const effects: ReadonlyArray> = [Effect.void, Effect.fail(1)] - const result = yield* $(effects, Effect.mergeAll(void 0 as void, constVoid), Effect.exit) + const result = yield* pipe(effects, Effect.mergeAll(void 0 as void, constVoid), Effect.exit) deepStrictEqual(result, Exit.fail(1)) })) it.effect("mergeAll/concurrency - return zero element on empty input", () => - Effect.gen(function*($) { + Effect.gen(function*() { const zeroElement = 42 const nonZero = 43 - const result = yield* $( + const result = yield* ( pipe( [] as ReadonlyArray>, Effect.mergeAll(zeroElement, () => nonZero, { @@ -463,8 +466,8 @@ describe("Effect", () => { strictEqual(result, zeroElement) })) it.effect("mergeAll/concurrency - merge list using function", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( [3, 5, 7].map(Effect.succeed), Effect.mergeAll(1, (b, a) => b + a, { concurrency: "unbounded" @@ -473,9 +476,9 @@ describe("Effect", () => { strictEqual(result, 1 + 3 + 5 + 7) })) it.effect("mergeAll/concurrency - return error if it exists in list", () => - Effect.gen(function*($) { + Effect.gen(function*() { const effects: ReadonlyArray> = [Effect.void, Effect.fail(1)] - const result = yield* $( + const result = yield* pipe( effects, Effect.mergeAll(void 0 as void, constVoid, { concurrency: "unbounded" @@ -485,40 +488,40 @@ describe("Effect", () => { deepStrictEqual(result, Exit.failCause(Cause.fail(1))) })) it.effect("partition - collects only successes", () => - Effect.gen(function*($) { + Effect.gen(function*() { const array = Array.makeBy(10, (i) => i) - const [left, right] = yield* $(array, Effect.partition(Effect.succeed)) + const [left, right] = yield* pipe(array, Effect.partition(Effect.succeed)) deepStrictEqual(left, []) deepStrictEqual(right, array) })) it.effect("partition - collects only failures", () => - Effect.gen(function*($) { + Effect.gen(function*() { const array = Array.makeBy(10, () => 0) - const [left, right] = yield* $(array, Effect.partition(Effect.fail)) + const [left, right] = yield* pipe(array, Effect.partition(Effect.fail)) deepStrictEqual(left, array) deepStrictEqual(right, []) })) it.effect("partition - collects failures and successes", () => - Effect.gen(function*($) { + Effect.gen(function*() { const array = Array.makeBy(10, (i) => i) - const [left, right] = yield* $( + const [left, right] = yield* ( pipe(array, Effect.partition((n) => n % 2 === 0 ? Effect.fail(n) : Effect.succeed(n))) ) deepStrictEqual(left, [0, 2, 4, 6, 8]) deepStrictEqual(right, [1, 3, 5, 7, 9]) })) it.effect("partition - evaluates effects in correct order", () => - Effect.gen(function*($) { + Effect.gen(function*() { const array = [2, 4, 6, 3, 5, 6] - const ref = yield* $(Ref.make(Chunk.empty())) - yield* $(array, Effect.partition((n) => Ref.update(ref, Chunk.prepend(n)))) - const result = yield* $(Ref.get(ref), Effect.map(Chunk.reverse)) + const ref = yield* (Ref.make(Chunk.empty())) + yield* pipe(array, Effect.partition((n) => Ref.update(ref, Chunk.prepend(n)))) + const result = yield* pipe(Ref.get(ref), Effect.map(Chunk.reverse)) deepStrictEqual(Chunk.toReadonlyArray(result), [2, 4, 6, 3, 5, 6]) })) it.effect("partition/concurrency - collects successes", () => - Effect.gen(function*($) { + Effect.gen(function*() { const array = Array.makeBy(1000, (i) => i) - const [left, right] = yield* $( + const [left, right] = yield* pipe( array, Effect.partition(Effect.succeed, { concurrency: "unbounded" @@ -528,9 +531,9 @@ describe("Effect", () => { deepStrictEqual(right, array) })) it.effect("partition/concurrency - collects failures", () => - Effect.gen(function*($) { + Effect.gen(function*() { const array = Array.makeBy(10, () => 0) - const [left, right] = yield* $( + const [left, right] = yield* pipe( array, Effect.partition(Effect.fail, { concurrency: "unbounded" @@ -540,9 +543,9 @@ describe("Effect", () => { deepStrictEqual(right, []) })) it.effect("partition/concurrency - collects failures and successes", () => - Effect.gen(function*($) { + Effect.gen(function*() { const array = Array.makeBy(10, (i) => i) - const [left, right] = yield* $( + const [left, right] = yield* ( pipe( array, Effect.partition((n) => n % 2 === 0 ? Effect.fail(n) : Effect.succeed(n), { @@ -554,9 +557,9 @@ describe("Effect", () => { deepStrictEqual(right, [1, 3, 5, 7, 9]) })) it.effect("partition/concurrency - parallelism - collects successes", () => - Effect.gen(function*($) { + Effect.gen(function*() { const array = Array.makeBy(1000, (i) => i) - const [left, right] = yield* $( + const [left, right] = yield* pipe( array, Effect.partition(Effect.succeed, { concurrency: 3 @@ -566,9 +569,9 @@ describe("Effect", () => { deepStrictEqual(right, array) })) it.effect("partition/concurrency - parallelism - collects failures", () => - Effect.gen(function*($) { + Effect.gen(function*() { const array = Array.makeBy(10, () => 0) - const [left, right] = yield* $( + const [left, right] = yield* pipe( array, Effect.partition(Effect.fail, { concurrency: 3 }) ) @@ -576,9 +579,9 @@ describe("Effect", () => { deepStrictEqual(right, []) })) it.effect("partition/concurrency - parallelism - collects failures and successes", () => - Effect.gen(function*($) { + Effect.gen(function*() { const array = Array.makeBy(10, (i) => i) - const [left, right] = yield* $( + const [left, right] = yield* pipe( array, Effect.partition((n) => n % 2 === 0 ? Effect.fail(n) : Effect.succeed(n), { concurrency: 3 @@ -588,45 +591,45 @@ describe("Effect", () => { deepStrictEqual(right, [1, 3, 5, 7, 9]) })) it.effect("reduce - with a successful step function sums the list properly", () => - Effect.gen(function*($) { - const result = yield* $([1, 2, 3, 4, 5], Effect.reduce(0, (acc, curr) => Effect.succeed(acc + curr))) + Effect.gen(function*() { + const result = yield* pipe([1, 2, 3, 4, 5], Effect.reduce(0, (acc, curr) => Effect.succeed(acc + curr))) strictEqual(result, 15) })) it.effect("reduce - with a failing step function returns a failed IO", () => - Effect.gen(function*($) { - const result = yield* $([1, 2, 3, 4, 5], Effect.reduce(0, () => Effect.fail("fail")), Effect.exit) + Effect.gen(function*() { + const result = yield* pipe([1, 2, 3, 4, 5], Effect.reduce(0, () => Effect.fail("fail")), Effect.exit) deepStrictEqual(result, Exit.fail("fail")) })) it.effect("reduce - run sequentially from left to right", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* ( pipe([1, 2, 3, 4, 5], Effect.reduce([] as ReadonlyArray, (acc, curr) => Effect.succeed([...acc, curr]))) ) deepStrictEqual(result, [1, 2, 3, 4, 5]) })) it.effect("reduceRight - with a successful step function sums the list properly", () => - Effect.gen(function*($) { - const result = yield* $([1, 2, 3, 4, 5], Effect.reduceRight(0, (acc, curr) => Effect.succeed(acc + curr))) + Effect.gen(function*() { + const result = yield* pipe([1, 2, 3, 4, 5], Effect.reduceRight(0, (acc, curr) => Effect.succeed(acc + curr))) strictEqual(result, 15) })) it.effect("reduceRight - with a failing step function returns a failed IO", () => - Effect.gen(function*($) { - const result = yield* $([1, 2, 3, 4, 5], Effect.reduceRight(0, () => Effect.fail("fail")), Effect.exit) + Effect.gen(function*() { + const result = yield* pipe([1, 2, 3, 4, 5], Effect.reduceRight(0, () => Effect.fail("fail")), Effect.exit) deepStrictEqual(result, Exit.fail("fail")) })) it.effect("reduceRight - run sequentially from right to left", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( [1, 2, 3, 4, 5], Effect.reduceRight([] as ReadonlyArray, (curr, acc) => Effect.succeed([curr, ...acc])) ) deepStrictEqual(result, [1, 2, 3, 4, 5]) })) it.effect("reduceEffect/concurrency - return zero element on empty input", () => - Effect.gen(function*($) { + Effect.gen(function*() { const zeroElement = 42 const nonZero = 43 - const result = yield* $( + const result = yield* ( pipe( [] as ReadonlyArray>, Effect.reduceEffect(Effect.succeed(zeroElement), () => nonZero, { @@ -637,8 +640,8 @@ describe("Effect", () => { strictEqual(result, zeroElement) })) it.effect("reduceEffect/concurrency - reduce list using function", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( [3, 5, 7].map(Effect.succeed), Effect.reduceEffect(Effect.succeed(1), (acc, a) => acc + a, { concurrency: "unbounded" @@ -647,8 +650,8 @@ describe("Effect", () => { strictEqual(result, 1 + 3 + 5 + 7) })) it.effect("reduceEffect/concurrency - return error if zero is an error", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* ( pipe( [Effect.void, Effect.void], Effect.reduceEffect(Effect.fail(1), constVoid, { @@ -660,9 +663,9 @@ describe("Effect", () => { deepStrictEqual(result, Exit.failCause(Cause.fail(1))) })) it.effect("reduceEffect/concurrency - return error if it exists in list", () => - Effect.gen(function*($) { + Effect.gen(function*() { const effects: ReadonlyArray> = [Effect.void, Effect.fail(1)] - const result = yield* $( + const result = yield* ( pipe( effects, Effect.reduceEffect(Effect.void as Effect.Effect, constVoid, { @@ -674,8 +677,8 @@ describe("Effect", () => { deepStrictEqual(result, Exit.failCause(Cause.fail(1))) })) it.effect("takeUntil - happy path", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* ( Effect.takeUntil( [1, 2, 3, 4, 5], (n) => Effect.succeed(n >= 3) @@ -684,8 +687,8 @@ describe("Effect", () => { deepStrictEqual(result, [1, 2, 3]) })) it.effect("takeUntil - error", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* ( pipe( [1, 1, 1], Effect.takeUntil(() => Effect.fail("Ouch")), @@ -695,8 +698,8 @@ describe("Effect", () => { assertLeft(result, "Ouch") })) it.effect("takeWhile - happy path", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* ( pipe( [1, 2, 3, 4, 5], Effect.takeWhile((n) => Effect.succeed(n % 2 === 1)) @@ -705,8 +708,8 @@ describe("Effect", () => { deepStrictEqual(result, [1]) })) it.effect("takeWhile - error", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* ( pipe( [1, 1, 1], Effect.takeWhile(() => Effect.fail("Ouch")), diff --git a/packages/effect/test/Effect/validation.test.ts b/packages/effect/test/Effect/validation.test.ts index 45c3b307f0..c18e213ba8 100644 --- a/packages/effect/test/Effect/validation.test.ts +++ b/packages/effect/test/Effect/validation.test.ts @@ -9,8 +9,8 @@ import { describe } from "vitest" describe("Effect", () => { it.effect("validate - fails", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* ( pipe( Effect.succeed(1), Effect.validate(Effect.fail(2)), @@ -21,8 +21,8 @@ describe("Effect", () => { assertLeft(result, Cause.fail(2)) })) it.effect("validate - combines both cause", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* ( pipe( Effect.fail(1), Effect.validate(Effect.fail(2)), @@ -33,46 +33,46 @@ describe("Effect", () => { deepStrictEqual(result, Either.left(Cause.sequential(Cause.fail(1), Cause.fail(2)))) })) it.effect("validateWith - succeeds", () => - Effect.gen(function*($) { - const result = yield* $(Effect.succeed(1), Effect.validateWith(Effect.succeed(2), (a, b) => a + b)) + Effect.gen(function*() { + const result = yield* pipe(Effect.succeed(1), Effect.validateWith(Effect.succeed(2), (a, b) => a + b)) strictEqual(result, 3) })) it.effect("validateAll - accumulate successes", () => - Effect.gen(function*($) { + Effect.gen(function*() { const array = Array.from({ length: 10 }, (_, i) => i) - const result = yield* $(array, Effect.validateAll(Effect.succeed)) + const result = yield* pipe(array, Effect.validateAll(Effect.succeed)) deepStrictEqual(Array.from(result), array) })) it.effect("validateAll - returns all errors if never valid", () => - Effect.gen(function*($) { + Effect.gen(function*() { const array = Array.from({ length: 10 }, () => 0) - const result = yield* $(array, Effect.validateAll(Effect.fail), Effect.flip) + const result = yield* pipe(array, Effect.validateAll(Effect.fail), Effect.flip) deepStrictEqual(Array.from(result), array) })) it.effect("validateAll - accumulate errors and ignore successes", () => - Effect.gen(function*($) { + Effect.gen(function*() { const array = Array.from({ length: 10 }, (_, i) => i) - const result = yield* $( + const result = yield* ( pipe(array, Effect.validateAll((n) => n % 2 === 0 ? Effect.succeed(n) : Effect.fail(n)), Effect.flip) ) deepStrictEqual(Array.from(result), [1, 3, 5, 7, 9]) })) it.effect("validateAll/discard - returns all errors if never valid", () => - Effect.gen(function*($) { + Effect.gen(function*() { const array = Array.from({ length: 10 }, () => 0) - const result = yield* $(array, Effect.validateAll(Effect.fail, { discard: true }), Effect.flip) + const result = yield* pipe(array, Effect.validateAll(Effect.fail, { discard: true }), Effect.flip) deepStrictEqual(Array.from(result), array) })) it.effect("validateAll/concurrency - returns all errors if never valid", () => - Effect.gen(function*($) { + Effect.gen(function*() { const array = Array.from({ length: 1000 }, () => 0) - const result = yield* $(array, Effect.validateAll(Effect.fail, { concurrency: "unbounded" }), Effect.flip) + const result = yield* pipe(array, Effect.validateAll(Effect.fail, { concurrency: "unbounded" }), Effect.flip) deepStrictEqual(Array.from(result), array) })) it.effect("validateAll/concurrency - accumulate errors and ignore successes", () => - Effect.gen(function*($) { + Effect.gen(function*() { const array = Array.from({ length: 10 }, (_, i) => i) - const result = yield* $( + const result = yield* ( pipe( array, Effect.validateAll((n) => n % 2 === 0 ? Effect.succeed(n) : Effect.fail(n), { @@ -84,15 +84,15 @@ describe("Effect", () => { deepStrictEqual(Array.from(result), [1, 3, 5, 7, 9]) })) it.effect("validateAll/concurrency - accumulate successes", () => - Effect.gen(function*($) { + Effect.gen(function*() { const array = Array.from({ length: 10 }, (_, i) => i) - const result = yield* $(array, Effect.validateAll(Effect.succeed, { concurrency: "unbounded" })) + const result = yield* pipe(array, Effect.validateAll(Effect.succeed, { concurrency: "unbounded" })) deepStrictEqual(Array.from(result), array) })) it.effect("validateAll/concurrency+discard - returns all errors if never valid", () => - Effect.gen(function*($) { + Effect.gen(function*() { const array = Array.from({ length: 10 }, () => 0) - const result = yield* $( + const result = yield* pipe( array, Effect.validateAll(Effect.fail, { concurrency: "unbounded", @@ -103,24 +103,24 @@ describe("Effect", () => { deepStrictEqual(Array.from(result), array) })) it.effect("validateFirst - returns all errors if never valid", () => - Effect.gen(function*($) { + Effect.gen(function*() { const array = Array.from({ length: 10 }, () => 0) - const result = yield* $(array, Effect.validateFirst(Effect.fail), Effect.flip) + const result = yield* pipe(array, Effect.validateFirst(Effect.fail), Effect.flip) deepStrictEqual(Array.from(result), array) })) it.effect("validateFirst - returns [] as error if the input is empty", () => - Effect.gen(function*($) { - const result = yield* $([], Effect.validateFirst(Effect.succeed), Effect.flip) + Effect.gen(function*() { + const result = yield* pipe([], Effect.validateFirst(Effect.succeed), Effect.flip) deepStrictEqual(result, []) })) it.effect("validateFirst - runs sequentially and short circuits on first success validation", () => - Effect.gen(function*($) { + Effect.gen(function*() { const f = (n: number): Effect.Effect => { return n === 6 ? Effect.succeed(n) : Effect.fail(n) } const array = Array.from({ length: 10 }, (_, i) => i + 1) - const counter = yield* $(Ref.make(0)) - const result = yield* $( + const counter = yield* (Ref.make(0)) + const result = yield* ( pipe( array, Effect.validateFirst((n) => @@ -131,29 +131,29 @@ describe("Effect", () => { ) ) ) - const count = yield* $(Ref.get(counter)) + const count = yield* (Ref.get(counter)) strictEqual(result, 6) strictEqual(count, 6) })) it.effect("validateFirst - returns errors in correct order", () => - Effect.gen(function*($) { - const result = yield* $([2, 4, 6, 3, 5, 6], Effect.validateFirst(Effect.fail), Effect.flip) + Effect.gen(function*() { + const result = yield* pipe([2, 4, 6, 3, 5, 6], Effect.validateFirst(Effect.fail), Effect.flip) deepStrictEqual(Array.from(result), [2, 4, 6, 3, 5, 6]) })) describe("", () => { it.effect("validateFirst/concurrency - returns all errors if never valid", () => - Effect.gen(function*($) { + Effect.gen(function*() { const array = Array.from({ length: 1000 }, () => 0) - const result = yield* $(array, Effect.validateFirst(Effect.fail, { concurrency: "unbounded" }), Effect.flip) + const result = yield* pipe(array, Effect.validateFirst(Effect.fail, { concurrency: "unbounded" }), Effect.flip) deepStrictEqual(Array.from(result), array) })) it.effect("validateFirst/concurrency - returns success if valid", () => - Effect.gen(function*($) { + Effect.gen(function*() { const f = (n: number): Effect.Effect => { return n === 6 ? Effect.succeed(n) : Effect.fail(n) } const array = Array.from({ length: 10 }, (_, i) => i + 1) - const result = yield* $(array, Effect.validateFirst(f, { concurrency: "unbounded" })) + const result = yield* pipe(array, Effect.validateFirst(f, { concurrency: "unbounded" })) strictEqual(result, 6) })) }) diff --git a/packages/effect/test/Either.test.ts b/packages/effect/test/Either.test.ts index ce9414265c..903d94e2e5 100644 --- a/packages/effect/test/Either.test.ts +++ b/packages/effect/test/Either.test.ts @@ -38,9 +38,10 @@ describe("Either", () => { const f = Either.gen(function*() { yield* Either.left("err") }) - const g = Either.gen({ context: "testContext" as const }, function*($) { - return yield* $(Either.right(this.context)) + const g = Either.gen({ context: "testContext" as const }, function*() { + return yield* Either.right(this.context) }) + // TODO(4.0) remove this test // test adapter const h = Either.gen(function*($) { const x = yield* $(Either.right(1)) diff --git a/packages/effect/test/Fiber.test.ts b/packages/effect/test/Fiber.test.ts index c24c267ed0..4086997483 100644 --- a/packages/effect/test/Fiber.test.ts +++ b/packages/effect/test/Fiber.test.ts @@ -22,10 +22,10 @@ const fibers = Array.makeBy(10000, () => Fiber.void) describe("Fiber", () => { it.effect("should track blockingOn in await", () => - Effect.gen(function*($) { - const fiber1 = yield* $(Effect.never, Effect.fork) - const fiber2 = yield* $(Fiber.await(fiber1), Effect.fork) - const blockingOn = yield* $( + Effect.gen(function*() { + const fiber1 = yield* pipe(Effect.never, Effect.fork) + const fiber2 = yield* pipe(Fiber.await(fiber1), Effect.fork) + const blockingOn = yield* pipe( Fiber.status(fiber2), Effect.flatMap((status) => FiberStatus.isSuspended(status) @@ -37,9 +37,9 @@ describe("Fiber", () => { deepStrictEqual(blockingOn, Fiber.id(fiber1)) })) it.effect("should track blockingOn in race", () => - Effect.gen(function*($) { - const fiber = yield* $(Effect.never, Effect.race(Effect.never), Effect.fork) - const blockingOn = yield* $( + Effect.gen(function*() { + const fiber = yield* pipe(Effect.never, Effect.race(Effect.never), Effect.fork) + const blockingOn = yield* pipe( Fiber.status(fiber), Effect.flatMap( (status) => FiberStatus.isSuspended(status) ? Effect.succeed(status.blockingOn) : Effect.fail(void 0 as void) @@ -49,65 +49,65 @@ describe("Fiber", () => { strictEqual(HashSet.size(FiberId.toSet(blockingOn)), 2) })) it.scoped("inheritLocals works for Fiber created using map", () => - Effect.gen(function*($) { - const fiberRef = yield* $(FiberRef.make(initial)) - const child = yield* $( - withLatch((release) => FiberRef.set(fiberRef, update).pipe(Effect.zipRight(release), Effect.fork)) + Effect.gen(function*() { + const fiberRef = yield* FiberRef.make(initial) + const child = yield* withLatch((release) => + FiberRef.set(fiberRef, update).pipe(Effect.zipRight(release), Effect.fork) ) - yield* $(child, Fiber.map(constVoid), Fiber.inheritAll) - const result = yield* $(FiberRef.get(fiberRef)) + yield* pipe(child, Fiber.map(constVoid), Fiber.inheritAll) + const result = yield* FiberRef.get(fiberRef) strictEqual(result, update) })) it.scoped("inheritLocals works for Fiber created using orElse", () => - Effect.gen(function*($) { - const fiberRef = yield* $(FiberRef.make(initial)) - const latch1 = yield* $(Deferred.make()) - const latch2 = yield* $(Deferred.make()) - const child1 = yield* $( + Effect.gen(function*() { + const fiberRef = yield* FiberRef.make(initial) + const latch1 = yield* Deferred.make() + const latch2 = yield* Deferred.make() + const child1 = yield* pipe( FiberRef.set(fiberRef, "child1"), Effect.zipRight(Deferred.succeed(latch1, void 0)), Effect.fork ) - const child2 = yield* $( + const child2 = yield* pipe( FiberRef.set(fiberRef, "child2"), Effect.zipRight(Deferred.succeed(latch2, void 0)), Effect.fork ) - yield* $(Deferred.await(latch1), Effect.zipRight(Deferred.await(latch2))) - yield* $(child1, Fiber.orElse(child2), Fiber.inheritAll) - const result = yield* $(FiberRef.get(fiberRef)) + yield* pipe(Deferred.await(latch1), Effect.zipRight(Deferred.await(latch2))) + yield* pipe(child1, Fiber.orElse(child2), Fiber.inheritAll) + const result = yield* FiberRef.get(fiberRef) strictEqual(result, "child1") })) it.scoped("inheritLocals works for Fiber created using zip", () => - Effect.gen(function*($) { - const fiberRef = yield* $(FiberRef.make(initial)) - const latch1 = yield* $(Deferred.make()) - const latch2 = yield* $(Deferred.make()) - const child1 = yield* $( + Effect.gen(function*() { + const fiberRef = yield* FiberRef.make(initial) + const latch1 = yield* Deferred.make() + const latch2 = yield* Deferred.make() + const child1 = yield* pipe( FiberRef.set(fiberRef, "child1"), Effect.zipRight(Deferred.succeed(latch1, void 0)), Effect.fork ) - const child2 = yield* $( + const child2 = yield* pipe( FiberRef.set(fiberRef, "child2"), Effect.zipRight(Deferred.succeed(latch2, void 0)), Effect.fork ) - yield* $(Deferred.await(latch1), Effect.zipRight(Deferred.await(latch2))) - yield* $(child1, Fiber.zip(child2), Fiber.inheritAll) - const result = yield* $(FiberRef.get(fiberRef)) + yield* pipe(Deferred.await(latch1), Effect.zipRight(Deferred.await(latch2))) + yield* pipe(child1, Fiber.zip(child2), Fiber.inheritAll) + const result = yield* FiberRef.get(fiberRef) strictEqual(result, "child1") })) it.effect("join on interrupted Fiber is an inner interruption", () => - Effect.gen(function*($) { + Effect.gen(function*() { const fiberId = FiberId.make(0, 123) - const result = yield* $(Fiber.interrupted(fiberId), Fiber.join, Effect.exit) + const result = yield* pipe(Fiber.interrupted(fiberId), Fiber.join, Effect.exit) deepStrictEqual(result, Exit.interrupt(fiberId)) })) it.effect("scoped should create a new Fiber and scope it", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(false)) - const fiber = yield* $(withLatch((release) => + Effect.gen(function*() { + const ref = yield* Ref.make(false) + const fiber = yield* withLatch((release) => Effect.fork( Effect.acquireUseRelease( Effect.asVoid(release), @@ -115,14 +115,14 @@ describe("Fiber", () => { () => Ref.set(ref, true) ) ) - )) - yield* $(Effect.scoped(Fiber.scoped(fiber))) - yield* $(Fiber.await(fiber)) - const result = yield* $(Ref.get(ref)) + ) + yield* Effect.scoped(Fiber.scoped(fiber)) + yield* Fiber.await(fiber) + const result = yield* Ref.get(ref) assertTrue(result) })) it.effect("shard example", () => - Effect.gen(function*($) { + Effect.gen(function*() { const shard = ( queue: Queue.Queue, n: number, @@ -145,86 +145,82 @@ describe("Fiber", () => { } return pipe(Queue.offer(queue, n), Effect.asVoid) } - const queue = yield* $(Queue.unbounded()) - yield* $(Queue.offerAll(queue, Array.range(1, 100))) - const result = yield* $(Effect.exit(shard(queue, 4, worker))) - yield* $(Queue.shutdown(queue)) + const queue = yield* Queue.unbounded() + yield* Queue.offerAll(queue, Array.range(1, 100)) + const result = yield* Effect.exit(shard(queue, 4, worker)) + yield* Queue.shutdown(queue) assertTrue(Exit.isFailure(result)) })) it.effect("child becoming interruptible is interrupted due to auto-supervision of uninterruptible parent", () => - Effect.gen(function*($) { - const latch = yield* $(Deferred.make()) + Effect.gen(function*() { + const latch = yield* Deferred.make() const child = pipe( Effect.interruptible(Effect.never), Effect.onInterrupt(() => Deferred.succeed(latch, void 0)), Effect.fork ) - yield* $(Effect.uninterruptible(Effect.fork(child))) - const result = yield* $(Deferred.await(latch)) + yield* Effect.uninterruptible(Effect.fork(child)) + const result = yield* Deferred.await(latch) strictEqual(result, undefined) })) it.effect("dual roots", () => - Effect.gen(function*($) { + Effect.gen(function*() { const rootContains = (fiber: Fiber.RuntimeFiber): Effect.Effect => { return pipe(Fiber.roots, Effect.map(Chunk.unsafeFromArray), Effect.map(Array.contains(fiber))) } - const fiber1 = yield* $(Effect.forkDaemon(Effect.never)) - const fiber2 = yield* $(Effect.forkDaemon(Effect.never)) - yield* $( + const fiber1 = yield* Effect.forkDaemon(Effect.never) + const fiber2 = yield* Effect.forkDaemon(Effect.never) + yield* pipe( rootContains(fiber1), Effect.flatMap((a) => a ? rootContains(fiber2) : Effect.succeed(false)), Effect.repeat({ until: (_) => _ }) ) - const result = yield* $(Fiber.interrupt(fiber1), Effect.zipRight(Fiber.interrupt(fiber2))) + const result = yield* pipe(Fiber.interrupt(fiber1), Effect.zipRight(Fiber.interrupt(fiber2))) assertTrue(Exit.isInterrupted(result)) })) it.effect("interruptAll interrupts fibers in parallel", () => - Effect.gen(function*($) { - const deferred1 = yield* $(Deferred.make()) - const deferred2 = yield* $(Deferred.make()) - const fiber1 = yield* $( - pipe(Deferred.succeed(deferred1, void 0), Effect.zipRight(Effect.never), Effect.forkDaemon) - ) - const fiber2 = yield* $( - pipe( - Deferred.succeed(deferred2, void 0), - Effect.zipRight(Fiber.await(fiber1)), - Effect.uninterruptible, - Effect.forkDaemon - ) + Effect.gen(function*() { + const deferred1 = yield* Deferred.make() + const deferred2 = yield* Deferred.make() + const fiber1 = yield* pipe(Deferred.succeed(deferred1, void 0), Effect.zipRight(Effect.never), Effect.forkDaemon) + const fiber2 = yield* pipe( + Deferred.succeed(deferred2, void 0), + Effect.zipRight(Fiber.await(fiber1)), + Effect.uninterruptible, + Effect.forkDaemon ) - yield* $(Deferred.await(deferred1)) - yield* $(Deferred.await(deferred2)) - yield* $(Fiber.interruptAll([fiber2, fiber1])) - const result = yield* $(Fiber.await(fiber2)) + yield* Deferred.await(deferred1) + yield* Deferred.await(deferred2) + yield* Fiber.interruptAll([fiber2, fiber1]) + const result = yield* Fiber.await(fiber2) assertTrue(Exit.isInterrupted(result)) })) it.effect("await does not return until all fibers have completed execution", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - const fiber = yield* $(Effect.forkAll(Array.makeBy(100, () => Ref.set(ref, 10)))) - yield* $(Fiber.interrupt(fiber)) - yield* $(Ref.set(ref, -1)) - const result = yield* $(Ref.get(ref)) + Effect.gen(function*() { + const ref = yield* Ref.make(0) + const fiber = yield* Effect.forkAll(Array.makeBy(100, () => Ref.set(ref, 10))) + yield* Fiber.interrupt(fiber) + yield* Ref.set(ref, -1) + const result = yield* Ref.get(ref) strictEqual(result, -1) })) it.effect("awaitAll - stack safety", () => - Effect.gen(function*($) { - const result = yield* $(Fiber.awaitAll(fibers)) + Effect.gen(function*() { + const result = yield* Fiber.awaitAll(fibers) assertTrue(Array.isArray(result)) assertTrue(result.length === fibers.length) result.forEach((_) => assertTrue(Exit.isSuccess(_) && _.value === undefined)) }), 10000) it.effect("joinAll - stack safety", () => - Effect.gen(function*($) { - const result = yield* $(Fiber.joinAll(fibers)) + Effect.gen(function*() { + const result = yield* Fiber.joinAll(fibers) assertTrue(Array.isArray(result)) assertTrue(result.length === fibers.length) result.forEach((x) => strictEqual(x, undefined)) }), 10000) it.effect("all - stack safety", () => - Effect.gen(function*($) { - const result = yield* $(Fiber.join(Fiber.all(fibers)), Effect.asVoid) + Effect.gen(function*() { + const result = yield* pipe(Fiber.join(Fiber.all(fibers)), Effect.asVoid) strictEqual(result, undefined) }), 10000) it.effect("is subtype of Effect", () => diff --git a/packages/effect/test/FiberHandle.test.ts b/packages/effect/test/FiberHandle.test.ts index b8b4e08afe..89f9a4fa5e 100644 --- a/packages/effect/test/FiberHandle.test.ts +++ b/packages/effect/test/FiberHandle.test.ts @@ -1,77 +1,77 @@ -import { Deferred, Effect, Exit, Fiber, FiberHandle, Ref } from "effect" +import { Deferred, Effect, Exit, Fiber, FiberHandle, pipe, Ref } from "effect" import { assertFalse, assertTrue, strictEqual } from "effect/test/util" import * as it from "effect/test/utils/extend" import { describe } from "vitest" describe("FiberHandle", () => { it.effect("interrupts fibers", () => - Effect.gen(function*(_) { - const ref = yield* _(Ref.make(0)) - yield* _( - Effect.gen(function*(_) { - const handle = yield* _(FiberHandle.make()) - yield* _(FiberHandle.run(handle, Effect.onInterrupt(Effect.never, () => Ref.update(ref, (n) => n + 1)))) - yield* _(Effect.yieldNow()) + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + yield* pipe( + Effect.gen(function*() { + const handle = yield* (FiberHandle.make()) + yield* (FiberHandle.run(handle, Effect.onInterrupt(Effect.never, () => Ref.update(ref, (n) => n + 1)))) + yield* (Effect.yieldNow()) }), Effect.scoped ) - strictEqual(yield* _(Ref.get(ref)), 1) + strictEqual(yield* (Ref.get(ref)), 1) })) it.effect("runtime", () => - Effect.gen(function*(_) { - const ref = yield* _(Ref.make(0)) - yield* _( - Effect.gen(function*(_) { - const handle = yield* _(FiberHandle.make()) - const run = yield* _(FiberHandle.runtime(handle)()) + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + yield* pipe( + Effect.gen(function*() { + const handle = yield* (FiberHandle.make()) + const run = yield* (FiberHandle.runtime(handle)()) run(Effect.onInterrupt(Effect.never, () => Ref.update(ref, (n) => n + 1))) - yield* _(Effect.yieldNow()) + yield* (Effect.yieldNow()) run(Effect.onInterrupt(Effect.never, () => Ref.update(ref, (n) => n + 1))) - yield* _(Effect.yieldNow()) + yield* (Effect.yieldNow()) run(Effect.onInterrupt(Effect.never, () => Ref.update(ref, (n) => n + 1)), { onlyIfMissing: true }) - yield* _(Effect.yieldNow()) - strictEqual(yield* _(Ref.get(ref)), 1) + yield* (Effect.yieldNow()) + strictEqual(yield* (Ref.get(ref)), 1) }), Effect.scoped ) - strictEqual(yield* _(Ref.get(ref)), 2) + strictEqual(yield* (Ref.get(ref)), 2) })) it.scoped("join", () => - Effect.gen(function*(_) { - const handle = yield* _(FiberHandle.make()) + Effect.gen(function*() { + const handle = yield* (FiberHandle.make()) FiberHandle.unsafeSet(handle, Effect.runFork(Effect.void)) FiberHandle.unsafeSet(handle, Effect.runFork(Effect.fail("fail"))) - const result = yield* _(FiberHandle.join(handle), Effect.flip) + const result = yield* pipe(FiberHandle.join(handle), Effect.flip) strictEqual(result, "fail") })) it.scoped("onlyIfMissing", () => - Effect.gen(function*(_) { - const handle = yield* _(FiberHandle.make()) - const fiberA = yield* _(FiberHandle.run(handle, Effect.never)) - const fiberB = yield* _(FiberHandle.run(handle, Effect.never, { onlyIfMissing: true })) - const fiberC = yield* _(FiberHandle.run(handle, Effect.never, { onlyIfMissing: true })) - yield* _(Effect.yieldNow()) - assertTrue(Exit.isInterrupted(yield* _(fiberB.await))) - assertTrue(Exit.isInterrupted(yield* _(fiberC.await))) + Effect.gen(function*() { + const handle = yield* (FiberHandle.make()) + const fiberA = yield* (FiberHandle.run(handle, Effect.never)) + const fiberB = yield* (FiberHandle.run(handle, Effect.never, { onlyIfMissing: true })) + const fiberC = yield* (FiberHandle.run(handle, Effect.never, { onlyIfMissing: true })) + yield* (Effect.yieldNow()) + assertTrue(Exit.isInterrupted(yield* (fiberB.await))) + assertTrue(Exit.isInterrupted(yield* (fiberC.await))) strictEqual(fiberA.unsafePoll(), null) })) it.scoped("runtime onlyIfMissing", () => - Effect.gen(function*(_) { - const run = yield* _(FiberHandle.makeRuntime()) + Effect.gen(function*() { + const run = yield* (FiberHandle.makeRuntime()) const fiberA = run(Effect.never) const fiberB = run(Effect.never, { onlyIfMissing: true }) const fiberC = run(Effect.never, { onlyIfMissing: true }) - yield* _(Effect.yieldNow()) - assertTrue(Exit.isInterrupted(yield* _(fiberB.await))) - assertTrue(Exit.isInterrupted(yield* _(fiberC.await))) + yield* (Effect.yieldNow()) + assertTrue(Exit.isInterrupted(yield* (fiberB.await))) + assertTrue(Exit.isInterrupted(yield* (fiberC.await))) strictEqual(fiberA.unsafePoll(), null) })) diff --git a/packages/effect/test/FiberMap.test.ts b/packages/effect/test/FiberMap.test.ts index 45c5ede1a0..905aaeb198 100644 --- a/packages/effect/test/FiberMap.test.ts +++ b/packages/effect/test/FiberMap.test.ts @@ -1,16 +1,16 @@ -import { Array, Deferred, Effect, Exit, Fiber, FiberMap, Ref, Scope } from "effect" +import { Array, Deferred, Effect, Exit, Fiber, FiberMap, pipe, Ref, Scope } from "effect" import { assertFalse, assertTrue, strictEqual } from "effect/test/util" import * as it from "effect/test/utils/extend" import { describe } from "vitest" describe("FiberMap", () => { it.effect("interrupts fibers", () => - Effect.gen(function*(_) { - const ref = yield* _(Ref.make(0)) - yield* _( - Effect.gen(function*(_) { - const map = yield* _(FiberMap.make()) - yield* _( + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + yield* pipe( + Effect.gen(function*() { + const map = yield* (FiberMap.make()) + yield* ( Effect.forEach(Array.range(1, 10), (i) => Effect.onInterrupt( Effect.never, @@ -19,21 +19,21 @@ describe("FiberMap", () => { FiberMap.run(map, i) )) ) - yield* _(Effect.yieldNow()) + yield* (Effect.yieldNow()) }), Effect.scoped ) - strictEqual(yield* _(Ref.get(ref)), 10) + strictEqual(yield* (Ref.get(ref)), 10) })) it.effect("runtime", () => - Effect.gen(function*(_) { - const ref = yield* _(Ref.make(0)) - yield* _( - Effect.gen(function*(_) { - const map = yield* _(FiberMap.make()) - const run = yield* _(FiberMap.runtime(map)()) + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + yield* pipe( + Effect.gen(function*() { + const map = yield* (FiberMap.make()) + const run = yield* (FiberMap.runtime(map)()) Array.range(1, 10).forEach((i) => run( i, @@ -43,57 +43,57 @@ describe("FiberMap", () => { ) ) ) - yield* _(Effect.yieldNow()) + yield* (Effect.yieldNow()) }), Effect.scoped ) - strictEqual(yield* _(Ref.get(ref)), 10) + strictEqual(yield* (Ref.get(ref)), 10) })) it.scoped("join", () => - Effect.gen(function*(_) { - const map = yield* _(FiberMap.make()) + Effect.gen(function*() { + const map = yield* (FiberMap.make()) FiberMap.unsafeSet(map, "a", Effect.runFork(Effect.void)) FiberMap.unsafeSet(map, "b", Effect.runFork(Effect.void)) FiberMap.unsafeSet(map, "c", Effect.runFork(Effect.fail("fail"))) FiberMap.unsafeSet(map, "d", Effect.runFork(Effect.fail("ignored"))) - const result = yield* _(FiberMap.join(map), Effect.flip) + const result = yield* pipe(FiberMap.join(map), Effect.flip) strictEqual(result, "fail") })) it.effect("size", () => - Effect.gen(function*(_) { - const scope = yield* _(Scope.make()) - const set = yield* _(FiberMap.make(), Scope.extend(scope)) + Effect.gen(function*() { + const scope = yield* (Scope.make()) + const set = yield* pipe(FiberMap.make(), Scope.extend(scope)) FiberMap.unsafeSet(set, "a", Effect.runFork(Effect.never)) FiberMap.unsafeSet(set, "b", Effect.runFork(Effect.never)) - strictEqual(yield* _(FiberMap.size(set)), 2) - yield* _(Scope.close(scope, Exit.void)) - strictEqual(yield* _(FiberMap.size(set)), 0) + strictEqual(yield* (FiberMap.size(set)), 2) + yield* (Scope.close(scope, Exit.void)) + strictEqual(yield* (FiberMap.size(set)), 0) })) it.scoped("onlyIfMissing", () => - Effect.gen(function*(_) { - const handle = yield* _(FiberMap.make()) - const fiberA = yield* _(FiberMap.run(handle, "a", Effect.never)) - const fiberB = yield* _(FiberMap.run(handle, "a", Effect.never, { onlyIfMissing: true })) - const fiberC = yield* _(FiberMap.run(handle, "a", Effect.never, { onlyIfMissing: true })) - yield* _(Effect.yieldNow()) - assertTrue(Exit.isInterrupted(yield* _(fiberB.await))) - assertTrue(Exit.isInterrupted(yield* _(fiberC.await))) + Effect.gen(function*() { + const handle = yield* (FiberMap.make()) + const fiberA = yield* (FiberMap.run(handle, "a", Effect.never)) + const fiberB = yield* (FiberMap.run(handle, "a", Effect.never, { onlyIfMissing: true })) + const fiberC = yield* (FiberMap.run(handle, "a", Effect.never, { onlyIfMissing: true })) + yield* (Effect.yieldNow()) + assertTrue(Exit.isInterrupted(yield* (fiberB.await))) + assertTrue(Exit.isInterrupted(yield* (fiberC.await))) strictEqual(fiberA.unsafePoll(), null) })) it.scoped("runtime onlyIfMissing", () => - Effect.gen(function*(_) { - const run = yield* _(FiberMap.makeRuntime()) + Effect.gen(function*() { + const run = yield* (FiberMap.makeRuntime()) const fiberA = run("a", Effect.never) const fiberB = run("a", Effect.never, { onlyIfMissing: true }) const fiberC = run("a", Effect.never, { onlyIfMissing: true }) - yield* _(Effect.yieldNow()) - assertTrue(Exit.isInterrupted(yield* _(fiberB.await))) - assertTrue(Exit.isInterrupted(yield* _(fiberC.await))) + yield* (Effect.yieldNow()) + assertTrue(Exit.isInterrupted(yield* (fiberB.await))) + assertTrue(Exit.isInterrupted(yield* (fiberC.await))) strictEqual(fiberA.unsafePoll(), null) })) diff --git a/packages/effect/test/FiberRef.test.ts b/packages/effect/test/FiberRef.test.ts index 6cda954fc0..0e5942ab25 100644 --- a/packages/effect/test/FiberRef.test.ts +++ b/packages/effect/test/FiberRef.test.ts @@ -5,7 +5,7 @@ import * as Duration from "effect/Duration" import * as Effect from "effect/Effect" import * as Fiber from "effect/Fiber" import * as FiberRef from "effect/FiberRef" -import { constant, constTrue, identity } from "effect/Function" +import { constant, constTrue, identity, pipe } from "effect/Function" import * as Option from "effect/Option" import * as Runtime from "effect/Runtime" import { assertTrue, strictEqual } from "effect/test/util" @@ -26,239 +26,236 @@ const loseTimeAndCpu: Effect.Effect = Effect.yieldNow().pipe( describe("FiberRef", () => { it.scoped("get returns the current value", () => - Effect.gen(function*($) { - const fiberRef = yield* $(FiberRef.make(initial)) - const result = yield* $(FiberRef.get(fiberRef)) + Effect.gen(function*() { + const fiberRef = yield* FiberRef.make(initial) + const result = yield* FiberRef.get(fiberRef) strictEqual(result, initial) })) it.scoped("get returns the correct value for a child", () => - Effect.gen(function*($) { - const fiberRef = yield* $(FiberRef.make(initial)) - const fiber = yield* $(Effect.fork(FiberRef.get(fiberRef))) - const result = yield* $(Fiber.join(fiber)) + Effect.gen(function*() { + const fiberRef = yield* FiberRef.make(initial) + const fiber = yield* Effect.fork(FiberRef.get(fiberRef)) + const result = yield* Fiber.join(fiber) strictEqual(result, initial) })) it.scoped("getAndUpdate - changing the value", () => - Effect.gen(function*($) { - const fiberRef = yield* $(FiberRef.make(initial)) - const value1 = yield* $(FiberRef.getAndUpdate(fiberRef, () => update)) - const value2 = yield* $(FiberRef.get(fiberRef)) + Effect.gen(function*() { + const fiberRef = yield* FiberRef.make(initial) + const value1 = yield* FiberRef.getAndUpdate(fiberRef, () => update) + const value2 = yield* FiberRef.get(fiberRef) strictEqual(value1, initial) strictEqual(value2, update) })) it.scoped("getAndUpdateSome - changing the value", () => - Effect.gen(function*($) { - const fiberRef = yield* $(FiberRef.make(initial)) - const value1 = yield* $(FiberRef.getAndUpdateSome(fiberRef, () => Option.some(update))) - const value2 = yield* $(FiberRef.get(fiberRef)) + Effect.gen(function*() { + const fiberRef = yield* FiberRef.make(initial) + const value1 = yield* FiberRef.getAndUpdateSome(fiberRef, () => Option.some(update)) + const value2 = yield* FiberRef.get(fiberRef) strictEqual(value1, initial) strictEqual(value2, update) })) it.scoped("getAndUpdateSome - not changing value", () => - Effect.gen(function*($) { - const fiberRef = yield* $(FiberRef.make(initial)) - const value1 = yield* $(FiberRef.getAndUpdateSome(fiberRef, () => Option.none())) - const value2 = yield* $(FiberRef.get(fiberRef)) + Effect.gen(function*() { + const fiberRef = yield* FiberRef.make(initial) + const value1 = yield* FiberRef.getAndUpdateSome(fiberRef, () => Option.none()) + const value2 = yield* FiberRef.get(fiberRef) strictEqual(value1, initial) strictEqual(value2, initial) })) it.scoped("set updates the current value", () => - Effect.gen(function*($) { - const fiberRef = yield* $(FiberRef.make(initial)) - yield* $(FiberRef.set(fiberRef, update)) - const result = yield* $(FiberRef.get(fiberRef)) + Effect.gen(function*() { + const fiberRef = yield* FiberRef.make(initial) + yield* FiberRef.set(fiberRef, update) + const result = yield* FiberRef.get(fiberRef) strictEqual(result, update) })) it.scoped("set by a child doesn't update parent's value", () => - Effect.gen(function*($) { - const fiberRef = yield* $(FiberRef.make(initial)) - const deferred = yield* $(Deferred.make()) - yield* $( - FiberRef.set(fiberRef, update).pipe( - Effect.zipRight(Deferred.succeed(deferred, void 0)), - Effect.fork - ) + Effect.gen(function*() { + const fiberRef = yield* FiberRef.make(initial) + const deferred = yield* Deferred.make() + yield* FiberRef.set(fiberRef, update).pipe( + Effect.zipRight(Deferred.succeed(deferred, void 0)), + Effect.fork ) - yield* $(Deferred.await(deferred)) - const result = yield* $(FiberRef.get(fiberRef)) + yield* Deferred.await(deferred) + const result = yield* FiberRef.get(fiberRef) strictEqual(result, initial) })) it.scoped("modify - changing the value", () => - Effect.gen(function*($) { - const fiberRef = yield* $(FiberRef.make(initial)) - const value1 = yield* $(FiberRef.modify(fiberRef, () => [1, update])) - const value2 = yield* $(FiberRef.get(fiberRef)) + Effect.gen(function*() { + const fiberRef = yield* FiberRef.make(initial) + const value1 = yield* FiberRef.modify(fiberRef, () => [1, update]) + const value2 = yield* FiberRef.get(fiberRef) strictEqual(value1, 1) strictEqual(value2, update) })) it.scoped("modifySome - not changing the value", () => - Effect.gen(function*($) { - const fiberRef = yield* $(FiberRef.make(initial)) - const value1 = yield* $(FiberRef.modifySome(fiberRef, 2, () => Option.none())) - const value2 = yield* $(FiberRef.get(fiberRef)) + Effect.gen(function*() { + const fiberRef = yield* FiberRef.make(initial) + const value1 = yield* FiberRef.modifySome(fiberRef, 2, () => Option.none()) + const value2 = yield* FiberRef.get(fiberRef) strictEqual(value1, 2) strictEqual(value2, initial) })) it.scoped("updateAndGet - changing the value", () => - Effect.gen(function*($) { - const fiberRef = yield* $(FiberRef.make(initial)) - const value1 = yield* $(FiberRef.updateAndGet(fiberRef, () => update)) - const value2 = yield* $(FiberRef.get(fiberRef)) + Effect.gen(function*() { + const fiberRef = yield* FiberRef.make(initial) + const value1 = yield* FiberRef.updateAndGet(fiberRef, () => update) + const value2 = yield* FiberRef.get(fiberRef) strictEqual(value1, update) strictEqual(value2, update) })) it.scoped("updateSomeAndGet - changing the value", () => - Effect.gen(function*($) { - const fiberRef = yield* $(FiberRef.make(initial)) - const value1 = yield* $(FiberRef.updateSomeAndGet(fiberRef, () => Option.some(update))) - const value2 = yield* $(FiberRef.get(fiberRef)) + Effect.gen(function*() { + const fiberRef = yield* FiberRef.make(initial) + const value1 = yield* FiberRef.updateSomeAndGet(fiberRef, () => Option.some(update)) + const value2 = yield* FiberRef.get(fiberRef) strictEqual(value1, update) strictEqual(value2, update) })) it.scoped("updateSomeAndGet - not changing the value", () => - Effect.gen(function*($) { - const fiberRef = yield* $(FiberRef.make(initial)) - const value1 = yield* $(FiberRef.updateSomeAndGet(fiberRef, () => Option.none())) - const value2 = yield* $(FiberRef.get(fiberRef)) + Effect.gen(function*() { + const fiberRef = yield* FiberRef.make(initial) + const value1 = yield* FiberRef.updateSomeAndGet(fiberRef, () => Option.none()) + const value2 = yield* FiberRef.get(fiberRef) strictEqual(value1, initial) strictEqual(value2, initial) })) it.scoped("restores the original value", () => - Effect.gen(function*($) { - const fiberRef = yield* $(FiberRef.make(initial)) - yield* $(FiberRef.set(fiberRef, update)) - yield* $(FiberRef.delete(fiberRef)) - const result = yield* $(FiberRef.get(fiberRef)) + Effect.gen(function*() { + const fiberRef = yield* FiberRef.make(initial) + yield* FiberRef.set(fiberRef, update) + yield* FiberRef.delete(fiberRef) + const result = yield* FiberRef.get(fiberRef) strictEqual(result, initial) })) it.scoped("locally - restores original value", () => - Effect.gen(function*($) { - const fiberRef = yield* $(FiberRef.make(initial)) - const local = yield* $(Effect.locally(fiberRef, update)(FiberRef.get(fiberRef))) - const value = yield* $(FiberRef.get(fiberRef)) + Effect.gen(function*() { + const fiberRef = yield* FiberRef.make(initial) + const local = yield* Effect.locally(fiberRef, update)(FiberRef.get(fiberRef)) + const value = yield* FiberRef.get(fiberRef) strictEqual(local, update) strictEqual(value, initial) })) it.scoped("locally - restores parent's value", () => - Effect.gen(function*($) { - const fiberRef = yield* $(FiberRef.make(initial)) - const child = yield* $(Effect.locally(fiberRef, update)(FiberRef.get(fiberRef).pipe(Effect.fork))) - const local = yield* $(Fiber.join(child)) - const value = yield* $(FiberRef.get(fiberRef)) + Effect.gen(function*() { + const fiberRef = yield* FiberRef.make(initial) + const child = yield* Effect.locally(fiberRef, update)(FiberRef.get(fiberRef).pipe(Effect.fork)) + const local = yield* Fiber.join(child) + const value = yield* FiberRef.get(fiberRef) strictEqual(local, update) strictEqual(value, initial) })) it.scoped("locally - restores undefined value", () => - Effect.gen(function*($) { - const child = yield* $(Effect.fork(FiberRef.make(initial)) // Don't use join as it inherits values from child - ) + Effect.gen(function*() { + const child = yield* Effect.fork(FiberRef.make(initial)) // Don't use join as it inherits values from child // Don't use join as it inherits values from child - const fiberRef = yield* $(Fiber.await(child), Effect.flatten) - const localValue = yield* $(Effect.locally(fiberRef, update)(FiberRef.get(fiberRef))) - const value = yield* $(FiberRef.get(fiberRef)) + const fiberRef = yield* pipe(Fiber.await(child), Effect.flatten) + const localValue = yield* Effect.locally(fiberRef, update)(FiberRef.get(fiberRef)) + const value = yield* FiberRef.get(fiberRef) strictEqual(localValue, update) strictEqual(value, initial) })) it.scoped("initial value is inherited on join", () => - Effect.gen(function*($) { - const fiberRef = yield* $(FiberRef.make(initial)) - const child = yield* $(Effect.fork(FiberRef.set(fiberRef, update))) - yield* $(Fiber.join(child)) - const result = yield* $(FiberRef.get(fiberRef)) + Effect.gen(function*() { + const fiberRef = yield* FiberRef.make(initial) + const child = yield* Effect.fork(FiberRef.set(fiberRef, update)) + yield* Fiber.join(child) + const result = yield* FiberRef.get(fiberRef) strictEqual(result, update) })) it.scoped("initial value is always available", () => - Effect.gen(function*($) { - const child = yield* $(Effect.fork(FiberRef.make(initial))) - const fiberRef = yield* $(Fiber.await(child), Effect.flatten) - const result = yield* $(FiberRef.get(fiberRef)) + Effect.gen(function*() { + const child = yield* Effect.fork(FiberRef.make(initial)) + const fiberRef = yield* pipe(Fiber.await(child), Effect.flatten) + const result = yield* FiberRef.get(fiberRef) strictEqual(result, initial) })) it.scoped("fork function is applied on fork - 1", () => - Effect.gen(function*($) { - const fiberRef = yield* $(FiberRef.make(0, { fork: increment })) - const child = yield* $(Effect.fork(Effect.void)) - yield* $(Fiber.join(child)) - const result = yield* $(FiberRef.get(fiberRef)) + Effect.gen(function*() { + const fiberRef = yield* FiberRef.make(0, { fork: increment }) + const child = yield* Effect.fork(Effect.void) + yield* Fiber.join(child) + const result = yield* FiberRef.get(fiberRef) strictEqual(result, 1) })) it.scoped("fork function is applied on fork - 2", () => - Effect.gen(function*($) { - const fiberRef = yield* $(FiberRef.make(0, { fork: increment })) - const child = yield* $(Effect.void, Effect.fork, Effect.flatMap(Fiber.join), Effect.fork) - yield* $(Fiber.join(child)) - const result = yield* $(FiberRef.get(fiberRef)) + Effect.gen(function*() { + const fiberRef = yield* FiberRef.make(0, { fork: increment }) + const child = yield* pipe(Effect.void, Effect.fork, Effect.flatMap(Fiber.join), Effect.fork) + yield* Fiber.join(child) + const result = yield* FiberRef.get(fiberRef) strictEqual(result, 2) })) it.scoped("join function is applied on join - 1", () => - Effect.gen(function*($) { - const fiberRef = yield* $(FiberRef.make(0, { fork: identity, join: Math.max })) - const child = yield* $(Effect.fork(FiberRef.update(fiberRef, increment))) - yield* $(Fiber.join(child)) - const result = yield* $(FiberRef.get(fiberRef)) + Effect.gen(function*() { + const fiberRef = yield* FiberRef.make(0, { fork: identity, join: Math.max }) + const child = yield* Effect.fork(FiberRef.update(fiberRef, increment)) + yield* Fiber.join(child) + const result = yield* FiberRef.get(fiberRef) strictEqual(result, 1) })) it.scoped("join function is applied on join - 2", () => - Effect.gen(function*($) { - const fiberRef = yield* $(FiberRef.make(0, { fork: identity, join: Math.max })) - const child = yield* $(Effect.fork(FiberRef.update(fiberRef, increment))) - yield* $(FiberRef.update(fiberRef, (n) => n + 2)) - yield* $(Fiber.join(child)) - const result = yield* $(FiberRef.get(fiberRef)) + Effect.gen(function*() { + const fiberRef = yield* FiberRef.make(0, { fork: identity, join: Math.max }) + const child = yield* Effect.fork(FiberRef.update(fiberRef, increment)) + yield* FiberRef.update(fiberRef, (n) => n + 2) + yield* Fiber.join(child) + const result = yield* FiberRef.get(fiberRef) strictEqual(result, 2) })) it.scopedLive("the value of the loser is inherited in zipPar", () => - Effect.gen(function*($) { - const fiberRef = yield* $(FiberRef.make(initial)) - const latch = yield* $(Deferred.make()) + Effect.gen(function*() { + const fiberRef = yield* FiberRef.make(initial) + const latch = yield* Deferred.make() const winner = FiberRef.set(fiberRef, update1).pipe(Effect.zipRight(Deferred.succeed(latch, void 0))) const loser = Deferred.await(latch).pipe( Effect.zipRight(Clock.sleep(Duration.millis(1))), Effect.zipRight(FiberRef.set(fiberRef, update2)) ) - yield* $(winner, Effect.zip(loser, { concurrent: true })) - const result = yield* $(FiberRef.get(fiberRef)) + yield* pipe(winner, Effect.zip(loser, { concurrent: true })) + const result = yield* FiberRef.get(fiberRef) strictEqual(result, update2) })) it.scoped("nothing gets inherited with a failure in zipPar", () => - Effect.gen(function*($) { - const fiberRef = yield* $(FiberRef.make(initial)) + Effect.gen(function*() { + const fiberRef = yield* FiberRef.make(initial) const success = FiberRef.set(fiberRef, update) const failure1 = FiberRef.set(fiberRef, update).pipe(Effect.zipRight(Effect.fail(":-("))) const failure2 = FiberRef.set(fiberRef, update).pipe(Effect.zipRight(Effect.fail(":-O"))) - yield* $( + yield* pipe( success, Effect.zip(failure1.pipe(Effect.zip(failure2, { concurrent: true })), { concurrent: true }), Effect.orElse(() => Effect.void) ) - const result = yield* $(FiberRef.get(fiberRef)) + const result = yield* FiberRef.get(fiberRef) assertTrue(result.includes(initial)) })) it.scoped("the value of all fibers in inherited when running many effects with collectAllPar", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 1000 - const fiberRef = yield* $(FiberRef.make(0, { + const fiberRef = yield* FiberRef.make(0, { fork: constant(0), join: (a, b) => a + b - })) - yield* $(Effect.all(Array.from({ length: n }, () => FiberRef.update(fiberRef, (n) => n + 1)), { + }) + yield* Effect.all(Array.from({ length: n }, () => FiberRef.update(fiberRef, (n) => n + 1)), { concurrency: "unbounded", discard: true - })) - const result = yield* $(FiberRef.get(fiberRef)) + }) + const result = yield* FiberRef.get(fiberRef) strictEqual(result, n) })) it.scoped("its value is inherited after simple race", () => - Effect.gen(function*($) { - const fiberRef = yield* $(FiberRef.make(initial)) - yield* $(FiberRef.set(fiberRef, update1), Effect.race(FiberRef.set(fiberRef, update2))) - const result = yield* $(FiberRef.get(fiberRef)) + Effect.gen(function*() { + const fiberRef = yield* FiberRef.make(initial) + yield* pipe(FiberRef.set(fiberRef, update1), Effect.race(FiberRef.set(fiberRef, update2))) + const result = yield* FiberRef.get(fiberRef) assertTrue(new RegExp(`${update1}|${update2}`).test(result)) })) it.scopedLive("its value is inherited after a race with a bad winner", () => - Effect.gen(function*($) { - const fiberRef = yield* $(FiberRef.make(initial)) - const latch = yield* $(Deferred.make()) + Effect.gen(function*() { + const fiberRef = yield* FiberRef.make(initial) + const latch = yield* Deferred.make() const badWinner = FiberRef.set(fiberRef, update1).pipe( Effect.zipRight(Effect.fail("ups").pipe(Effect.ensuring(Deferred.succeed(latch, void 0)))) ) @@ -266,30 +263,30 @@ describe("FiberRef", () => { Effect.zipRight(Deferred.await(latch)), Effect.zipRight(Effect.sleep(Duration.seconds(1))) ) - yield* $(badWinner, Effect.race(goodLoser)) - const result = yield* $(FiberRef.get(fiberRef)) + yield* pipe(badWinner, Effect.race(goodLoser)) + const result = yield* FiberRef.get(fiberRef) strictEqual(result, update2) })) it.scoped("its value is not inherited after a race of losers", () => - Effect.gen(function*($) { - const fiberRef = yield* $(FiberRef.make(initial)) + Effect.gen(function*() { + const fiberRef = yield* FiberRef.make(initial) const loser1 = FiberRef.set(fiberRef, update1).pipe(Effect.zipRight(Effect.fail("ups1"))) const loser2 = FiberRef.set(fiberRef, update2).pipe(Effect.zipRight(Effect.fail("ups2"))) - yield* $(loser1, Effect.race(loser2), Effect.ignore) - const result = yield* $(FiberRef.get(fiberRef)) + yield* pipe(loser1, Effect.race(loser2), Effect.ignore) + const result = yield* FiberRef.get(fiberRef) strictEqual(result, initial) })) it.scoped("its value is inherited in a trivial race", () => - Effect.gen(function*($) { - const fiberRef = yield* $(FiberRef.make(initial)) - yield* $(Effect.raceAll([FiberRef.set(fiberRef, update)])) - const result = yield* $(FiberRef.get(fiberRef)) + Effect.gen(function*() { + const fiberRef = yield* FiberRef.make(initial) + yield* Effect.raceAll([FiberRef.set(fiberRef, update)]) + const result = yield* FiberRef.get(fiberRef) strictEqual(result, update) })) it.scoped("the value of the winner is inherited when racing two effects with raceAll", () => - Effect.gen(function*($) { - const fiberRef = yield* $(FiberRef.make(initial)) - const latch = yield* $(Deferred.make()) + Effect.gen(function*() { + const fiberRef = yield* FiberRef.make(initial) + const latch = yield* Deferred.make() const winner1 = FiberRef.set(fiberRef, update1).pipe( Effect.zipRight(Deferred.succeed(latch, void 0)) ) @@ -297,20 +294,20 @@ describe("FiberRef", () => { Effect.zipRight(FiberRef.set(fiberRef, update2)), Effect.zipRight(loseTimeAndCpu) ) - yield* $(Effect.raceAll([loser1, winner1])) - const value1 = yield* $(FiberRef.get(fiberRef), Effect.zipLeft(FiberRef.set(fiberRef, initial))) + yield* Effect.raceAll([loser1, winner1]) + const value1 = yield* pipe(FiberRef.get(fiberRef), Effect.zipLeft(FiberRef.set(fiberRef, initial))) const winner2 = FiberRef.set(fiberRef, update1) const loser2 = FiberRef.set(fiberRef, update2).pipe(Effect.zipRight(Effect.fail(":-O"))) - yield* $(Effect.raceAll([loser2, winner2])) - const value2 = yield* $(FiberRef.get(fiberRef), Effect.zipLeft(FiberRef.set(fiberRef, initial))) + yield* Effect.raceAll([loser2, winner2]) + const value2 = yield* pipe(FiberRef.get(fiberRef), Effect.zipLeft(FiberRef.set(fiberRef, initial))) strictEqual(value1, update1) strictEqual(value2, update1) })) it.scoped("the value of the winner is inherited when racing many effects with raceAll", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 63 - const fiberRef = yield* $(FiberRef.make(initial)) - const latch = yield* $(Deferred.make()) + const fiberRef = yield* FiberRef.make(initial) + const latch = yield* Deferred.make() const winner1 = FiberRef.set(fiberRef, update1).pipe( Effect.zipRight(Deferred.succeed(latch, void 0)), Effect.asVoid @@ -320,46 +317,42 @@ describe("FiberRef", () => { Effect.zipRight(loseTimeAndCpu), Effect.replicate(n) ) - yield* $(Chunk.unsafeFromArray(losers1), Chunk.prepend(winner1), Effect.raceAll) - const value1 = yield* $(FiberRef.get(fiberRef), Effect.zipLeft(FiberRef.set(fiberRef, initial))) + yield* pipe(Chunk.unsafeFromArray(losers1), Chunk.prepend(winner1), Effect.raceAll) + const value1 = yield* pipe(FiberRef.get(fiberRef), Effect.zipLeft(FiberRef.set(fiberRef, initial))) const winner2 = FiberRef.set(fiberRef, update1) const losers2 = FiberRef.set(fiberRef, update1).pipe(Effect.zipRight(Effect.fail(":-O")), Effect.replicate(n)) - yield* $(Chunk.unsafeFromArray(losers2), Chunk.prepend(winner2), Effect.raceAll) - const value2 = yield* $(FiberRef.get(fiberRef), Effect.zipLeft(FiberRef.set(fiberRef, initial))) + yield* pipe(Chunk.unsafeFromArray(losers2), Chunk.prepend(winner2), Effect.raceAll) + const value2 = yield* pipe(FiberRef.get(fiberRef), Effect.zipLeft(FiberRef.set(fiberRef, initial))) strictEqual(value1, update1) strictEqual(value2, update1) })) it.scoped("nothing gets inherited when racing failures with raceAll", () => - Effect.gen(function*($) { - const fiberRef = yield* $(FiberRef.make(initial)) + Effect.gen(function*() { + const fiberRef = yield* FiberRef.make(initial) const loser = FiberRef.set(fiberRef, update).pipe(Effect.zipRight(Effect.fail("darn"))) - yield* $(Effect.raceAll([loser, ...Array.from({ length: 63 }, () => loser)]), Effect.orElse(() => Effect.void)) - const result = yield* $(FiberRef.get(fiberRef)) + yield* pipe(Effect.raceAll([loser, ...Array.from({ length: 63 }, () => loser)]), Effect.orElse(() => Effect.void)) + const result = yield* FiberRef.get(fiberRef) strictEqual(result, initial) })) it.scoped("fork patch is applied when a fiber is unsafely run", () => - Effect.gen(function*($) { - const fiberRef = yield* $(FiberRef.make(true, { fork: constTrue })) - const deferred = yield* $(Deferred.make()) - const runtime: Runtime.Runtime = yield* $( - Effect.runtime().pipe(Effect.locally(fiberRef, false)) - ) - yield* $( - Effect.sync(() => FiberRef.get(fiberRef).pipe(Effect.intoDeferred(deferred), Runtime.runCallback(runtime))) - ) - const result = yield* $(Deferred.await(deferred)) + Effect.gen(function*() { + const fiberRef = yield* FiberRef.make(true, { fork: constTrue }) + const deferred = yield* Deferred.make() + const runtime: Runtime.Runtime = yield* Effect.runtime().pipe(Effect.locally(fiberRef, false)) + yield* Effect.sync(() => FiberRef.get(fiberRef).pipe(Effect.intoDeferred(deferred), Runtime.runCallback(runtime))) + const result = yield* Deferred.await(deferred) assertTrue(result) })) it.scoped("fork patch is applied when a fiber is unsafely forked", () => - Effect.gen(function*($) { - const fiberRef = yield* $(FiberRef.make(true, { fork: constTrue })) - const deferred = yield* $(Deferred.make()) - const runtime: Runtime.Runtime = yield* $(Effect.locally(Effect.runtime(), fiberRef, false)) - const fiber = yield* $( - Effect.sync(() => Runtime.runFork(runtime)(Effect.intoDeferred(FiberRef.get(fiberRef), deferred))) + Effect.gen(function*() { + const fiberRef = yield* FiberRef.make(true, { fork: constTrue }) + const deferred = yield* Deferred.make() + const runtime: Runtime.Runtime = yield* Effect.locally(Effect.runtime(), fiberRef, false) + const fiber = yield* Effect.sync(() => + Runtime.runFork(runtime)(Effect.intoDeferred(FiberRef.get(fiberRef), deferred)) ) - yield* $(Fiber.join(fiber)) - const result = yield* $(Deferred.await(deferred)) + yield* Fiber.join(fiber) + const result = yield* Deferred.await(deferred) assertTrue(result) })) it.scoped("is subtype of Effect", () => diff --git a/packages/effect/test/FiberRefs.test.ts b/packages/effect/test/FiberRefs.test.ts index a9725424dc..b15e33e92f 100644 --- a/packages/effect/test/FiberRefs.test.ts +++ b/packages/effect/test/FiberRefs.test.ts @@ -5,6 +5,7 @@ import * as Fiber from "effect/Fiber" import * as FiberId from "effect/FiberId" import * as FiberRef from "effect/FiberRef" import * as FiberRefs from "effect/FiberRefs" +import { pipe } from "effect/Function" import * as HashMap from "effect/HashMap" import * as Option from "effect/Option" import * as Queue from "effect/Queue" @@ -15,22 +16,22 @@ import { describe } from "vitest" describe("FiberRefs", () => { it.scoped("propagate FiberRef values across fiber boundaries", () => - Effect.gen(function*($) { - const fiberRef = yield* $(FiberRef.make(false)) - const queue = yield* $(Queue.unbounded()) - const producer = yield* $( + Effect.gen(function*() { + const fiberRef = yield* FiberRef.make(false) + const queue = yield* Queue.unbounded() + const producer = yield* pipe( FiberRef.set(fiberRef, true).pipe( Effect.zipRight(Effect.getFiberRefs.pipe(Effect.flatMap((a) => Queue.offer(queue, a)))), Effect.fork ) ) - const consumer = yield* $( + const consumer = yield* pipe( Queue.take(queue), Effect.flatMap((fiberRefs) => Effect.setFiberRefs(fiberRefs).pipe(Effect.zipRight(FiberRef.get(fiberRef)))), Effect.fork ) - yield* $(Fiber.join(producer)) - const result = yield* $(Fiber.join(consumer)) + yield* Fiber.join(producer) + const result = yield* Fiber.join(consumer) assertTrue(result) })) it.it("interruptedCause", () => { diff --git a/packages/effect/test/FiberSet.test.ts b/packages/effect/test/FiberSet.test.ts index a3dba8bf2f..53335a5340 100644 --- a/packages/effect/test/FiberSet.test.ts +++ b/packages/effect/test/FiberSet.test.ts @@ -1,37 +1,37 @@ -import { Array, Deferred, Effect, Exit, Fiber, FiberSet, Ref, Scope } from "effect" +import { Array, Deferred, Effect, Exit, Fiber, FiberSet, pipe, Ref, Scope } from "effect" import { assertFalse, assertTrue, strictEqual } from "effect/test/util" import * as it from "effect/test/utils/extend" import { describe } from "vitest" describe("FiberSet", () => { it.effect("interrupts fibers", () => - Effect.gen(function*(_) { - const ref = yield* _(Ref.make(0)) - yield* _( - Effect.gen(function*(_) { - const set = yield* _(FiberSet.make()) - yield* _( + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + yield* pipe( + Effect.gen(function*() { + const set = yield* (FiberSet.make()) + yield* pipe( Effect.onInterrupt( Effect.never, () => Ref.update(ref, (n) => n + 1) ).pipe(FiberSet.run(set)), Effect.replicateEffect(10) ) - yield* _(Effect.yieldNow()) + yield* (Effect.yieldNow()) }), Effect.scoped ) - strictEqual(yield* _(Ref.get(ref)), 10) + strictEqual(yield* (Ref.get(ref)), 10) })) it.effect("runtime", () => - Effect.gen(function*(_) { - const ref = yield* _(Ref.make(0)) - yield* _( - Effect.gen(function*(_) { - const set = yield* _(FiberSet.make()) - const run = yield* _(FiberSet.runtime(set)()) + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + yield* pipe( + Effect.gen(function*() { + const set = yield* (FiberSet.make()) + const run = yield* (FiberSet.runtime(set)()) Array.range(1, 10).forEach(() => run( Effect.onInterrupt( @@ -40,33 +40,33 @@ describe("FiberSet", () => { ) ) ) - yield* _(Effect.yieldNow()) + yield* (Effect.yieldNow()) }), Effect.scoped ) - strictEqual(yield* _(Ref.get(ref)), 10) + strictEqual(yield* (Ref.get(ref)), 10) })) it.scoped("join", () => - Effect.gen(function*(_) { - const set = yield* _(FiberSet.make()) + Effect.gen(function*() { + const set = yield* (FiberSet.make()) FiberSet.unsafeAdd(set, Effect.runFork(Effect.void)) FiberSet.unsafeAdd(set, Effect.runFork(Effect.void)) FiberSet.unsafeAdd(set, Effect.runFork(Effect.fail("fail"))) - const result = yield* _(FiberSet.join(set), Effect.flip) + const result = yield* pipe(FiberSet.join(set), Effect.flip) strictEqual(result, "fail") })) it.effect("size", () => - Effect.gen(function*(_) { - const scope = yield* _(Scope.make()) - const set = yield* _(FiberSet.make(), Scope.extend(scope)) + Effect.gen(function*() { + const scope = yield* (Scope.make()) + const set = yield* pipe(FiberSet.make(), Scope.extend(scope)) FiberSet.unsafeAdd(set, Effect.runFork(Effect.never)) FiberSet.unsafeAdd(set, Effect.runFork(Effect.never)) - strictEqual(yield* _(FiberSet.size(set)), 2) - yield* _(Scope.close(scope, Exit.void)) - strictEqual(yield* _(FiberSet.size(set)), 0) + strictEqual(yield* (FiberSet.size(set)), 2) + yield* (Scope.close(scope, Exit.void)) + strictEqual(yield* (FiberSet.size(set)), 0) })) it.scoped("propagateInterruption false", () => diff --git a/packages/effect/test/KeyedPool.test.ts b/packages/effect/test/KeyedPool.test.ts index 5372b7bffe..a330b039e7 100644 --- a/packages/effect/test/KeyedPool.test.ts +++ b/packages/effect/test/KeyedPool.test.ts @@ -13,20 +13,18 @@ import { describe } from "vitest" describe("KeyedPool", () => { it.scoped("acquire release many successfully while other key is blocked", () => - Effect.gen(function*($) { + Effect.gen(function*() { const N = 10 - const pool = yield* $(KeyedPool.make({ + const pool = yield* KeyedPool.make({ acquire: (key: string) => Effect.succeed(key), size: 4 - })) - yield* $( - pool.pipe( - KeyedPool.get("key1"), - Effect.repeatN(3), - Effect.asVoid - ) + }) + yield* pool.pipe( + KeyedPool.get("key1"), + Effect.repeatN(3), + Effect.asVoid ) - const fiber = yield* $(Effect.fork( + const fiber = yield* Effect.fork( Effect.forEach( Array.range(1, N), () => @@ -38,21 +36,21 @@ describe("KeyedPool", () => { ), { concurrency: "unbounded", discard: true } ) - )) - yield* $(TestClock.adjust(Duration.millis(10 * N))) - const result = yield* $(Fiber.join(fiber)) + ) + yield* TestClock.adjust(Duration.millis(10 * N)) + const result = yield* Fiber.join(fiber) strictEqual(result, undefined) })) it.scoped("acquire release many with invalidates", () => - Effect.gen(function*($) { + Effect.gen(function*() { const N = 10 - const counter = yield* $(Ref.make(0)) - const pool = yield* $(KeyedPool.make({ + const counter = yield* Ref.make(0) + const pool = yield* KeyedPool.make({ acquire: (key) => Ref.modify(counter, (n) => [`${key}-${n}`, n + 1] as const), size: 4 - })) - const fiber = yield* $(Effect.fork( + }) + const fiber = yield* Effect.fork( Effect.forEach( Array.range(1, N), () => @@ -73,9 +71,9 @@ describe("KeyedPool", () => { )), { concurrency: "unbounded", discard: true } ) - )) - yield* $(TestClock.adjust(Duration.millis(15 * N))) - const result = yield* $(Fiber.join(fiber)) + ) + yield* TestClock.adjust(Duration.millis(15 * N)) + const result = yield* Fiber.join(fiber) strictEqual(result, undefined) })) }) diff --git a/packages/effect/test/Layer.test.ts b/packages/effect/test/Layer.test.ts index 8d85717b10..580bd4d105 100644 --- a/packages/effect/test/Layer.test.ts +++ b/packages/effect/test/Layer.test.ts @@ -6,7 +6,7 @@ import * as Effect from "effect/Effect" import * as Exit from "effect/Exit" import * as Fiber from "effect/Fiber" import * as FiberRef from "effect/FiberRef" -import { identity } from "effect/Function" +import { identity, pipe } from "effect/Function" import * as Layer from "effect/Layer" import * as Ref from "effect/Ref" import * as Schedule from "effect/Schedule" @@ -24,9 +24,9 @@ export const release3 = "Releasing Module 3" describe("Layer", () => { it.effect("layers can be acquired in parallel", () => - Effect.gen(function*($) { + Effect.gen(function*() { const BoolTag = Context.GenericTag("boolean") - const deferred = yield* $(Deferred.make()) + const deferred = yield* Deferred.make() const layer1 = Layer.effectContext(Effect.never) const layer2 = Layer.scopedContext( Effect.acquireRelease( @@ -37,15 +37,15 @@ describe("Layer", () => { ) ) const env = layer1.pipe(Layer.merge(layer2), Layer.build) - const fiber = yield* $(Effect.scoped(env), Effect.forkDaemon) - yield* $(Deferred.await(deferred)) - const result = yield* $(Fiber.interrupt(fiber), Effect.asVoid) + const fiber = yield* pipe(Effect.scoped(env), Effect.forkDaemon) + yield* Deferred.await(deferred) + const result = yield* pipe(Fiber.interrupt(fiber), Effect.asVoid) strictEqual(result, undefined) })) it.effect("preserves identity of acquired resources", () => - Effect.gen(function*($) { + Effect.gen(function*() { const ChunkTag = Context.GenericTag>>("Ref.Ref>") - const testRef = yield* $(Ref.make>(Chunk.empty())) + const testRef = yield* Ref.make>(Chunk.empty()) const layer = Layer.scoped( ChunkTag, Effect.acquireRelease( @@ -58,7 +58,7 @@ describe("Layer", () => { Effect.tap(() => Effect.void) ) ) - yield* $( + yield* pipe( Layer.build(layer), Effect.flatMap((context) => Ref.update( @@ -68,43 +68,43 @@ describe("Layer", () => { ), Effect.scoped ) - const result = yield* $(Ref.get(testRef)) + const result = yield* Ref.get(testRef) deepStrictEqual(Array.from(result), ["test"]) })) it.effect("sharing with merge", () => - Effect.gen(function*($) { - const ref = yield* $(makeRef()) + Effect.gen(function*() { + const ref = yield* makeRef() const layer = makeLayer1(ref) const env = layer.pipe(Layer.merge(layer), Layer.build) - yield* $(Effect.scoped(env)) - const result = yield* $(Ref.get(ref)) + yield* Effect.scoped(env) + const result = yield* Ref.get(ref) deepStrictEqual(Array.from(result), [acquire1, release1]) })) it.scoped("sharing itself with merge", () => - Effect.gen(function*($) { + Effect.gen(function*() { const service1 = new Service1() const layer = Layer.succeed(Service1Tag, service1) const env = layer.pipe(Layer.merge(layer), Layer.merge(layer), Layer.build) - const result = yield* $( - env.pipe(Effect.flatMap((context) => Effect.try(() => context.pipe(Context.get(Service1Tag))))) + const result = yield* env.pipe( + Effect.flatMap((context) => Effect.try(() => context.pipe(Context.get(Service1Tag)))) ) strictEqual(result, service1) })) it.effect("finalizers", () => - Effect.gen(function*($) { - const ref = yield* $(makeRef()) + Effect.gen(function*() { + const ref = yield* makeRef() const layer1 = makeLayer1(ref) const layer2 = makeLayer2(ref) const env = layer1.pipe(Layer.merge(layer2), Layer.build) - yield* $(Effect.scoped(env)) - const result = yield* $(Ref.get(ref)) + yield* Effect.scoped(env) + const result = yield* Ref.get(ref) assertTrue(Array.from(result).slice(0, 2).find((s) => s === acquire1) !== undefined) assertTrue(Array.from(result).slice(0, 2).find((s) => s === acquire2) !== undefined) assertTrue(Array.from(result).slice(2, 4).find((s) => s === release1) !== undefined) assertTrue(Array.from(result).slice(2, 4).find((s) => s === release2) !== undefined) })) it.effect("caching values in dependencies", () => - Effect.gen(function*($) { + Effect.gen(function*() { class Config { constructor(readonly value: number) {} } @@ -132,7 +132,7 @@ describe("Layer", () => { Layer.provideMerge(aLayer), Layer.provide(Layer.succeed(ConfigTag, new Config(2))) ) - const result = yield* $( + const result = yield* pipe( fedB, Layer.merge(fedC), Layer.build, @@ -148,17 +148,17 @@ describe("Layer", () => { strictEqual(result[1].value, 1) })) it.effect("orElse - uses an alternative layer", () => - Effect.gen(function*($) { - const ref = yield* $(makeRef()) + Effect.gen(function*() { + const ref = yield* makeRef() const layer1 = makeLayer1(ref) const layer2 = makeLayer2(ref) const env = Layer.fail("failed!").pipe(Layer.provideMerge(layer1), Layer.orElse(() => layer2), Layer.build) - yield* $(Effect.scoped(env)) - const result = yield* $(Ref.get(ref)) + yield* Effect.scoped(env) + const result = yield* Ref.get(ref) deepStrictEqual(Array.from(result), [acquire1, release1, acquire2, release2]) })) it.effect("handles errors gracefully", () => - Effect.gen(function*($) { + Effect.gen(function*() { interface Bar { readonly bar: string } @@ -183,46 +183,46 @@ describe("Layer", () => { Layer.provide(Layer.merge(layer2, layer3)) ) ) - const result = yield* $(Effect.void, Effect.provide(layer), Effect.exit) + const result = yield* pipe(Effect.void, Effect.provide(layer), Effect.exit) assertTrue(Exit.isFailure(result)) })) it.effect("fresh with merge", () => - Effect.gen(function*($) { - const ref = yield* $(makeRef()) + Effect.gen(function*() { + const ref = yield* makeRef() const layer = makeLayer1(ref) const env = layer.pipe(Layer.merge(Layer.fresh(layer)), Layer.build) - yield* $(Effect.scoped(env)) - const result = yield* $(Ref.get(ref)) + yield* Effect.scoped(env) + const result = yield* Ref.get(ref) deepStrictEqual(Array.from(result), [acquire1, acquire1, release1, release1]) })) it.effect("fresh with to provideTo", () => - Effect.gen(function*($) { - const ref = yield* $(makeRef()) + Effect.gen(function*() { + const ref = yield* makeRef() const layer = makeLayer1(ref) const env = Layer.fresh(layer).pipe( Layer.provide(layer), Layer.build ) - yield* $(Effect.scoped(env)) - const result = yield* $(Ref.get(ref)) + yield* Effect.scoped(env) + const result = yield* Ref.get(ref) deepStrictEqual(Array.from(result), [acquire1, acquire1, release1, release1]) })) it.effect("with multiple layers", () => - Effect.gen(function*($) { - const ref = yield* $(makeRef()) + Effect.gen(function*() { + const ref = yield* makeRef() const layer = makeLayer1(ref) const env = layer.pipe( Layer.merge(layer), Layer.merge(layer.pipe(Layer.merge(layer), Layer.fresh)), Layer.build ) - yield* $(Effect.scoped(env)) - const result = yield* $(Ref.get(ref)) + yield* Effect.scoped(env) + const result = yield* Ref.get(ref) deepStrictEqual(Array.from(result), [acquire1, acquire1, release1, release1]) })) it.effect("with identical fresh layers", () => - Effect.gen(function*($) { - const ref = yield* $(makeRef()) + Effect.gen(function*() { + const ref = yield* makeRef() const layer1 = makeLayer1(ref) const layer2 = makeLayer2(ref) const layer3 = makeLayer3(ref) @@ -236,8 +236,8 @@ describe("Layer", () => { Layer.provide(Layer.fresh(layer1)), Layer.build ) - yield* $(Effect.scoped(env)) - const result = yield* $(Ref.get(ref)) + yield* Effect.scoped(env) + const result = yield* Ref.get(ref) deepStrictEqual(Array.from(result), [ acquire1, acquire2, @@ -250,14 +250,14 @@ describe("Layer", () => { ]) })) it.effect("interruption with merge", () => - Effect.gen(function*($) { - const ref = yield* $(makeRef()) + Effect.gen(function*() { + const ref = yield* makeRef() const layer1 = makeLayer1(ref) const layer2 = makeLayer2(ref) const env = layer1.pipe(Layer.merge(layer2), Layer.build) - const fiber = yield* $(Effect.scoped(env), Effect.fork) - yield* $(Fiber.interrupt(fiber)) - const result = yield* $(Ref.get(ref), Effect.map((chunk) => Array.from(chunk))) + const fiber = yield* pipe(Effect.scoped(env), Effect.fork) + yield* Fiber.interrupt(fiber) + const result = yield* pipe(Ref.get(ref), Effect.map((chunk) => Array.from(chunk))) if (result.find((s) => s === acquire1) !== undefined) { assertTrue(result.some((s) => s === release1)) } @@ -266,14 +266,14 @@ describe("Layer", () => { } })) it.effect("interruption with provideTo", () => - Effect.gen(function*($) { - const ref = yield* $(makeRef()) + Effect.gen(function*() { + const ref = yield* makeRef() const layer1 = makeLayer1(ref) const layer2 = makeLayer2(ref) const env = layer2.pipe(Layer.provide(layer1), Layer.build) - const fiber = yield* $(Effect.scoped(env), Effect.fork) - yield* $(Fiber.interrupt(fiber)) - const result = yield* $(Ref.get(ref), Effect.map((chunk) => Array.from(chunk))) + const fiber = yield* pipe(Effect.scoped(env), Effect.fork) + yield* Fiber.interrupt(fiber) + const result = yield* pipe(Ref.get(ref), Effect.map((chunk) => Array.from(chunk))) if (result.find((s) => s === acquire1) !== undefined) { assertTrue(result.some((s) => s === release1)) } @@ -282,8 +282,8 @@ describe("Layer", () => { } })) it.effect("interruption with multiple layers", () => - Effect.gen(function*($) { - const ref = yield* $(makeRef()) + Effect.gen(function*() { + const ref = yield* makeRef() const layer1 = makeLayer1(ref) const layer2 = makeLayer2(ref) const layer3 = makeLayer3(ref) @@ -293,9 +293,9 @@ describe("Layer", () => { Layer.provide(layer1), Layer.build ) - const fiber = yield* $(Effect.scoped(env), Effect.fork) - yield* $(Fiber.interrupt(fiber)) - const result = yield* $(Ref.get(ref), Effect.map((chunk) => Array.from(chunk))) + const fiber = yield* pipe(Effect.scoped(env), Effect.fork) + yield* Fiber.interrupt(fiber) + const result = yield* pipe(Ref.get(ref), Effect.map((chunk) => Array.from(chunk))) if (result.find((s) => s === acquire1) !== undefined) { assertTrue(result.some((s) => s === release1)) } @@ -307,7 +307,7 @@ describe("Layer", () => { } })) it.effect("can map a layer to an unrelated type", () => - Effect.gen(function*($) { + Effect.gen(function*() { interface ServiceA { readonly name: string readonly value: number @@ -325,14 +325,14 @@ describe("Layer", () => { Layer.map(layer1, (context) => Context.make(StringTag, context.pipe(Context.get(ServiceATag)).name)) ) ) - const result = yield* $(ServiceBTag, Effect.provide(live)) + const result = yield* pipe(ServiceBTag, Effect.provide(live)) strictEqual(result.name, "name") })) it.effect("memoizes acquisition of resources", () => - Effect.gen(function*($) { - const ref = yield* $(makeRef()) + Effect.gen(function*() { + const ref = yield* makeRef() const memoized = Layer.memoize(makeLayer1(ref)) - yield* $( + yield* pipe( memoized, Effect.flatMap((layer) => Effect.context().pipe( @@ -342,12 +342,12 @@ describe("Layer", () => { ), Effect.scoped ) - const result = yield* $(Ref.get(ref)) + const result = yield* Ref.get(ref) deepStrictEqual(Array.from(result), [acquire1, release1]) })) it.scoped("fiberRef changes are memoized", () => - Effect.gen(function*($) { - const fiberRef = yield* $(FiberRef.make(false)) + Effect.gen(function*() { + const fiberRef = yield* FiberRef.make(false) const tag = Context.GenericTag("boolean") const layer1 = Layer.scopedDiscard(Effect.locallyScoped(fiberRef, true)) const layer2 = Layer.effect(tag, FiberRef.get(fiberRef)) @@ -355,23 +355,23 @@ describe("Layer", () => { Layer.provide(layer1), Layer.merge(layer1) ) - const result = yield* $(Layer.build(layer3)) + const result = yield* Layer.build(layer3) assertTrue(result.pipe(Context.unsafeGet(tag))) })) it.effect("provides a partial environment to an effect", () => - Effect.gen(function*($) { + Effect.gen(function*() { const NumberTag = Context.GenericTag("number") const StringTag = Context.GenericTag("string") const needsNumberAndString = Effect.all([NumberTag, StringTag]) const providesNumber = Layer.succeed(NumberTag, 10) const providesString = Layer.succeed(StringTag, "hi") const needsString = needsNumberAndString.pipe(Effect.provide(providesNumber)) - const result = yield* $(needsString, Effect.provide(providesString)) + const result = yield* pipe(needsString, Effect.provide(providesString)) strictEqual(result[0], 10) strictEqual(result[1], "hi") })) it.effect("to provides a partial environment to another layer", () => - Effect.gen(function*($) { + Effect.gen(function*() { const StringTag = Context.GenericTag("string") const NumberRefTag = Context.GenericTag>("Ref.Ref") interface FooService { @@ -400,12 +400,12 @@ describe("Layer", () => { const provideString = Layer.succeed(StringTag, "hi") const needsString = fooBuilder.pipe(Layer.provide(provideNumberRef)) const layer = needsString.pipe(Layer.provide(provideString)) - const result = yield* $(Effect.flatMap(FooTag, (_) => _.get), Effect.provide(layer)) + const result = yield* pipe(Effect.flatMap(FooTag, (_) => _.get), Effect.provide(layer)) strictEqual(result[0], 10) strictEqual(result[1], "hi") })) it.effect("andTo provides a partial environment to another layer", () => - Effect.gen(function*($) { + Effect.gen(function*() { const StringTag = Context.GenericTag("string") const NumberRefTag = Context.GenericTag>("Ref.Ref") interface FooService { @@ -434,7 +434,7 @@ describe("Layer", () => { const provideString = Layer.succeed(StringTag, "hi") const needsString = fooBuilder.pipe(Layer.provideMerge(provideNumberRef)) const layer = needsString.pipe(Layer.provideMerge(provideString)) - const result = yield* $( + const result = yield* pipe( Effect.flatMap(FooTag, (foo) => foo.get), Effect.flatMap(([i1, s]) => NumberRefTag.pipe(Effect.flatMap(Ref.get), Effect.map((i2) => [i1, i2, s] as const)) @@ -446,7 +446,7 @@ describe("Layer", () => { strictEqual(result[2], "hi") })) it.effect("passthrough passes the inputs through to the next layer", () => - Effect.gen(function*($) { + Effect.gen(function*() { interface NumberService { readonly value: number } @@ -459,7 +459,7 @@ describe("Layer", () => { value: numberService.value.toString() })) const live = Layer.passthrough(layer).pipe(Layer.provide(Layer.succeed(NumberTag, { value: 1 }))) - const { i, s } = yield* $( + const { i, s } = yield* pipe( Effect.all({ i: NumberTag, s: ToStringTag @@ -470,7 +470,7 @@ describe("Layer", () => { strictEqual(s.value, "1") })) it.effect("project", () => - Effect.gen(function*($) { + Effect.gen(function*() { interface PersonService { readonly name: string readonly age: number @@ -481,21 +481,21 @@ describe("Layer", () => { const AgeTag = Context.GenericTag("AgeService") const personLayer = Layer.succeed(PersonTag, { name: "User", age: 42 }) const ageLayer = personLayer.pipe(Layer.project(PersonTag, AgeTag, (_) => ({ age: _.age }))) - const { age } = yield* $(AgeTag, Effect.provide(ageLayer)) + const { age } = yield* pipe(AgeTag, Effect.provide(ageLayer)) strictEqual(age, 42) })) it.effect("sharing with provideTo", () => - Effect.gen(function*($) { - const ref = yield* $(makeRef()) + Effect.gen(function*() { + const ref = yield* makeRef() const layer = makeLayer1(ref) const env = layer.pipe(Layer.provide(layer), Layer.build) - yield* $(Effect.scoped(env)) - const result = yield* $(Ref.get(ref)) + yield* Effect.scoped(env) + const result = yield* Ref.get(ref) deepStrictEqual(Array.from(result), [acquire1, release1]) })) it.effect("sharing with multiple layers with provideTo", () => - Effect.gen(function*($) { - const ref = yield* $(makeRef()) + Effect.gen(function*() { + const ref = yield* makeRef() const layer1 = makeLayer1(ref) const layer2 = makeLayer2(ref) const layer3 = makeLayer3(ref) @@ -504,8 +504,8 @@ describe("Layer", () => { Layer.merge(layer2.pipe(Layer.provide(layer1))), Layer.build ) - yield* $(Effect.scoped(env)) - const result = yield* $(Ref.get(ref), Effect.map((chunk) => Array.from(chunk))) + yield* Effect.scoped(env) + const result = yield* pipe(Ref.get(ref), Effect.map((chunk) => Array.from(chunk))) strictEqual(result[0], acquire1) assertTrue(result.slice(1, 3).some((s) => s === acquire2)) assertTrue(result.slice(1, 3).some((s) => s === acquire3)) @@ -514,38 +514,38 @@ describe("Layer", () => { strictEqual(result[5], release1) })) it.effect("finalizers with provideTo", () => - Effect.gen(function*($) { - const ref = yield* $(makeRef()) + Effect.gen(function*() { + const ref = yield* makeRef() const layer1 = makeLayer1(ref) const layer2 = makeLayer2(ref) const env = layer2.pipe(Layer.provide(layer1), Layer.build) - yield* $(Effect.scoped(env)) - const result = yield* $(Ref.get(ref)) + yield* Effect.scoped(env) + const result = yield* Ref.get(ref) deepStrictEqual(Array.from(result), [acquire1, acquire2, release2, release1]) })) it.effect("finalizers with multiple layers with provideTo", () => - Effect.gen(function*($) { - const ref = yield* $(makeRef()) + Effect.gen(function*() { + const ref = yield* makeRef() const layer1 = makeLayer1(ref) const layer2 = makeLayer2(ref) const layer3 = makeLayer3(ref) const env = layer3.pipe(Layer.provide(layer2), Layer.provide(layer1), Layer.build) - yield* $(Effect.scoped(env)) - const result = yield* $(Ref.get(ref)) + yield* Effect.scoped(env) + const result = yield* Ref.get(ref) deepStrictEqual(Array.from(result), [acquire1, acquire2, acquire3, release3, release2, release1]) })) it.effect("retry", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) + Effect.gen(function*() { + const ref = yield* Ref.make(0) const effect = ref.pipe(Ref.update((n) => n + 1), Effect.zipRight(Effect.fail("fail"))) const layer = Layer.effectContext(effect).pipe(Layer.retry(Schedule.recurs(3))) - yield* $(Effect.ignore(Effect.scoped(Layer.build(layer)))) - const result = yield* $(Ref.get(ref)) + yield* Effect.ignore(Effect.scoped(Layer.build(layer))) + const result = yield* Ref.get(ref) strictEqual(result, 4) })) it.effect("map does not interfere with sharing", () => - Effect.gen(function*($) { - const ref = yield* $(makeRef()) + Effect.gen(function*() { + const ref = yield* makeRef() const layer1 = makeLayer1(ref) const layer2 = makeLayer2(ref) const layer3 = makeLayer3(ref) @@ -555,8 +555,8 @@ describe("Layer", () => { Layer.provide(Layer.map(layer1, identity)), Layer.build ) - yield* $(Effect.scoped(env)) - const result = yield* $(Ref.get(ref), Effect.map((chunk) => Array.from(chunk))) + yield* Effect.scoped(env) + const result = yield* pipe(Ref.get(ref), Effect.map((chunk) => Array.from(chunk))) strictEqual(result[0], acquire1) assertTrue(result.slice(1, 3).some((s) => s === acquire2)) assertTrue(result.slice(1, 3).some((s) => s === acquire3)) @@ -565,8 +565,8 @@ describe("Layer", () => { strictEqual(result[5], release1) })) it.effect("mapError does not interfere with sharing", () => - Effect.gen(function*($) { - const ref = yield* $(makeRef()) + Effect.gen(function*() { + const ref = yield* makeRef() const layer1 = makeLayer1(ref) const layer2 = makeLayer2(ref) const layer3 = makeLayer3(ref) @@ -576,8 +576,8 @@ describe("Layer", () => { Layer.provide(Layer.mapError(layer1, identity)), Layer.build ) - yield* $(Effect.scoped(env)) - const result = yield* $(Ref.get(ref), Effect.map((chunk) => Array.from(chunk))) + yield* Effect.scoped(env) + const result = yield* pipe(Ref.get(ref), Effect.map((chunk) => Array.from(chunk))) strictEqual(result[0], acquire1) assertTrue(result.slice(1, 3).some((s) => s === acquire2)) assertTrue(result.slice(1, 3).some((s) => s === acquire3)) @@ -586,8 +586,8 @@ describe("Layer", () => { strictEqual(result[5], release1) })) it.effect("orDie does not interfere with sharing", () => - Effect.gen(function*($) { - const ref = yield* $(makeRef()) + Effect.gen(function*() { + const ref = yield* makeRef() const layer1 = makeLayer1(ref) const layer2 = makeLayer2(ref) const layer3 = makeLayer3(ref) @@ -597,8 +597,8 @@ describe("Layer", () => { Layer.provide(Layer.orDie(layer1)), Layer.build ) - yield* $(Effect.scoped(env)) - const result = yield* $(Ref.get(ref), Effect.map((chunk) => Array.from(chunk))) + yield* Effect.scoped(env) + const result = yield* pipe(Ref.get(ref), Effect.map((chunk) => Array.from(chunk))) strictEqual(result[0], acquire1) assertTrue(result.slice(1, 3).some((s) => s === acquire2)) assertTrue(result.slice(1, 3).some((s) => s === acquire3)) @@ -607,21 +607,21 @@ describe("Layer", () => { strictEqual(result[5], release1) })) it.effect("tap peeks at an acquired resource", () => - Effect.gen(function*($) { + Effect.gen(function*() { interface BarService { readonly bar: string } const BarTag = Context.GenericTag("BarService") - const ref: Ref.Ref = yield* $(Ref.make("foo")) + const ref: Ref.Ref = yield* Ref.make("foo") const layer = Layer.succeed(BarTag, { bar: "bar" }).pipe( Layer.tap((context) => Ref.set(ref, context.pipe(Context.get(BarTag)).bar)) ) - yield* $(Effect.scoped(Layer.build(layer))) - const result = yield* $(Ref.get(ref)) + yield* Effect.scoped(Layer.build(layer)) + const result = yield* Ref.get(ref) strictEqual(result, "bar") })) it.effect("locally", () => - Effect.gen(function*($) { + Effect.gen(function*() { interface BarService { readonly bar: string } @@ -636,12 +636,12 @@ describe("Layer", () => { ) ) ) - const env = yield* $(Effect.scoped(Layer.build(layer))) + const env = yield* Effect.scoped(Layer.build(layer)) const result = Context.get(env, BarTag) strictEqual(result.bar, "bar: 100") })) it.effect("locallyWith", () => - Effect.gen(function*($) { + Effect.gen(function*() { interface BarService { readonly bar: string } @@ -656,50 +656,50 @@ describe("Layer", () => { ) ) ) - const env = yield* $(Effect.scoped(Layer.build(layer))) + const env = yield* Effect.scoped(Layer.build(layer)) const result = Context.get(env, BarTag) strictEqual(result.bar, "bar: 1") })) describe("MemoMap", () => { it.effect("memoizes layer across builds", () => - Effect.gen(function*($) { - const ref = yield* $(makeRef()) + Effect.gen(function*() { + const ref = yield* makeRef() const layer1 = makeLayer1(ref) const layer2 = makeLayer2(ref).pipe( Layer.provide(layer1) ) - const memoMap = yield* $(Layer.makeMemoMap) - const scope1 = yield* $(Scope.make()) - const scope2 = yield* $(Scope.make()) + const memoMap = yield* Layer.makeMemoMap + const scope1 = yield* Scope.make() + const scope2 = yield* Scope.make() - yield* $(Layer.buildWithMemoMap(layer1, memoMap, scope1)) - yield* $(Layer.buildWithMemoMap(layer2, memoMap, scope2)) - yield* $(Scope.close(scope2, Exit.void)) - yield* $(Layer.buildWithMemoMap(layer2, memoMap, scope1)) - yield* $(Scope.close(scope1, Exit.void)) + yield* Layer.buildWithMemoMap(layer1, memoMap, scope1) + yield* Layer.buildWithMemoMap(layer2, memoMap, scope2) + yield* Scope.close(scope2, Exit.void) + yield* Layer.buildWithMemoMap(layer2, memoMap, scope1) + yield* Scope.close(scope1, Exit.void) - const result = yield* $(Ref.get(ref)) + const result = yield* Ref.get(ref) deepStrictEqual(Array.from(result), [acquire1, acquire2, release2, acquire2, release2, release1]) })) it.effect("layers are not released early", () => - Effect.gen(function*($) { - const ref = yield* $(makeRef()) + Effect.gen(function*() { + const ref = yield* makeRef() const layer1 = makeLayer1(ref) const layer2 = makeLayer2(ref).pipe( Layer.provide(layer1) ) - const memoMap = yield* $(Layer.makeMemoMap) - const scope1 = yield* $(Scope.make()) - const scope2 = yield* $(Scope.make()) + const memoMap = yield* Layer.makeMemoMap + const scope1 = yield* Scope.make() + const scope2 = yield* Scope.make() - yield* $(Layer.buildWithMemoMap(layer1, memoMap, scope1)) - yield* $(Layer.buildWithMemoMap(layer2, memoMap, scope2)) - yield* $(Scope.close(scope1, Exit.void)) - yield* $(Scope.close(scope2, Exit.void)) + yield* Layer.buildWithMemoMap(layer1, memoMap, scope1) + yield* Layer.buildWithMemoMap(layer2, memoMap, scope2) + yield* Scope.close(scope1, Exit.void) + yield* Scope.close(scope2, Exit.void) - const result = yield* $(Ref.get(ref)) + const result = yield* Ref.get(ref) deepStrictEqual(Array.from(result), [acquire1, acquire2, release2, release1]) })) }) diff --git a/packages/effect/test/Metric.test.ts b/packages/effect/test/Metric.test.ts index db89e64bb8..a376a9cc93 100644 --- a/packages/effect/test/Metric.test.ts +++ b/packages/effect/test/Metric.test.ts @@ -33,19 +33,20 @@ const nextName = () => `m${++nameCount}` describe("Metric", () => { describe("Counter", () => { it.effect("custom increment as aspect", () => - Effect.gen(function*($) { + Effect.gen(function*() { const id = nextName() const counter = Metric.counter(id).pipe(Metric.taggedWithLabels(labels), Metric.withConstantInput(1)) - const result = yield* $( - counter(Effect.void).pipe(Effect.zipRight(counter(Effect.void)), Effect.zipRight(Metric.value(counter))) + const result = yield* counter(Effect.void).pipe( + Effect.zipRight(counter(Effect.void)), + Effect.zipRight(Metric.value(counter)) ) deepStrictEqual(result, MetricState.counter(2)) })) it.effect("direct increment", () => - Effect.gen(function*($) { + Effect.gen(function*() { const id = nextName() const counter = Metric.counter(id).pipe(Metric.taggedWithLabels(labels)) - const result = yield* $( + const result = yield* pipe( Metric.increment(counter).pipe( Effect.zipRight(Metric.increment(counter)), Effect.zipRight(Metric.value(counter)) @@ -55,192 +56,172 @@ describe("Metric", () => { })) it.effect("direct increment bigint", () => - Effect.gen(function*($) { + Effect.gen(function*() { const name = nextName() const counter = Metric.counter(name, { bigint: true }).pipe(Metric.taggedWithLabels(labels)) - const result = yield* $( - Metric.increment(counter).pipe( - Effect.zipRight(Metric.increment(counter)), - Effect.zipRight(Metric.value(counter)) - ) + const result = yield* Metric.increment(counter).pipe( + Effect.zipRight(Metric.increment(counter)), + Effect.zipRight(Metric.value(counter)) ) deepStrictEqual(result, MetricState.counter(BigInt(2))) })) it.effect("cannot decrement incremental", () => - Effect.gen(function*($) { + Effect.gen(function*() { const name = nextName() const counter = Metric.counter(name, { incremental: true }).pipe(Metric.taggedWithLabels(labels)) - const result = yield* $( - Metric.increment(counter).pipe( - Effect.zipRight(Metric.increment(counter)), - Effect.zipRight(Metric.incrementBy(counter, -1)), - Effect.zipRight(Metric.value(counter)) - ) + const result = yield* Metric.increment(counter).pipe( + Effect.zipRight(Metric.increment(counter)), + Effect.zipRight(Metric.incrementBy(counter, -1)), + Effect.zipRight(Metric.value(counter)) ) deepStrictEqual(result, MetricState.counter(2)) })) it.effect("cannot decrement incremental bigint", () => - Effect.gen(function*($) { + Effect.gen(function*() { const name = nextName() const counter = Metric.counter(name, { incremental: true, bigint: true }).pipe(Metric.taggedWithLabels(labels)) - const result = yield* $( - Metric.increment(counter).pipe( - Effect.zipRight(Metric.increment(counter)), - Effect.zipRight(Metric.incrementBy(counter, BigInt(-1))), - Effect.zipRight(Metric.value(counter)) - ) + const result = yield* Metric.increment(counter).pipe( + Effect.zipRight(Metric.increment(counter)), + Effect.zipRight(Metric.incrementBy(counter, BigInt(-1))), + Effect.zipRight(Metric.value(counter)) ) deepStrictEqual(result, MetricState.counter(BigInt(2))) })) it.effect("custom increment by value as aspect", () => - Effect.gen(function*($) { + Effect.gen(function*() { const name = nextName() const counter = Metric.counter(name).pipe(Metric.taggedWithLabels(labels)) - const result = yield* $( - counter(Effect.succeed(10)).pipe( - Effect.zipRight(counter(Effect.succeed(5))), - Effect.zipRight(Metric.value(counter)) - ) + const result = yield* counter(Effect.succeed(10)).pipe( + Effect.zipRight(counter(Effect.succeed(5))), + Effect.zipRight(Metric.value(counter)) ) deepStrictEqual(result, MetricState.counter(15)) })) it.effect("custom increment by bigint value as aspect", () => - Effect.gen(function*($) { + Effect.gen(function*() { const name = nextName() const counter = Metric.counter(name, { bigint: true }).pipe(Metric.taggedWithLabels(labels)) - const result = yield* $( - counter(Effect.succeed(BigInt(10))).pipe( - Effect.zipRight(counter(Effect.succeed(BigInt(5)))), - Effect.zipRight(Metric.value(counter)) - ) + const result = yield* counter(Effect.succeed(BigInt(10))).pipe( + Effect.zipRight(counter(Effect.succeed(BigInt(5)))), + Effect.zipRight(Metric.value(counter)) ) deepStrictEqual(result, MetricState.counter(BigInt(15))) })) it.effect("direct increment referential transparency", () => - Effect.gen(function*($) { + Effect.gen(function*() { const name = nextName() - const result = yield* $( - pipe( - Effect.void, - Effect.withMetric( - Metric.counter(name).pipe( + const result = yield* pipe( + Effect.void, + Effect.withMetric( + Metric.counter(name).pipe( + Metric.taggedWithLabels(labels), + Metric.withConstantInput(1) + ) + ), + Effect.zipRight( + pipe( + Effect.void, + Effect.withMetric(pipe( + Metric.counter(name), Metric.taggedWithLabels(labels), Metric.withConstantInput(1) - ) - ), - Effect.zipRight( - pipe( - Effect.void, - Effect.withMetric(pipe( - Metric.counter(name), - Metric.taggedWithLabels(labels), - Metric.withConstantInput(1) - )) - ) - ), - Effect.zipRight(pipe( - Metric.counter(name), - Metric.taggedWithLabels(labels), - Metric.withConstantInput(1), - Metric.value - )) - ) + )) + ) + ), + Effect.zipRight(pipe( + Metric.counter(name), + Metric.taggedWithLabels(labels), + Metric.withConstantInput(1), + Metric.value + )) ) deepStrictEqual(result, MetricState.counter(2)) })) it.effect("custom increment referential transparency", () => - Effect.gen(function*($) { + Effect.gen(function*() { const name = nextName() - const result = yield* $( - pipe( - Effect.succeed(10), - Effect.withMetric(pipe(Metric.counter(name), Metric.taggedWithLabels(labels))), - Effect.zipRight( - pipe(Effect.succeed(5), Effect.withMetric(pipe(Metric.counter(name), Metric.taggedWithLabels(labels)))) - ), - Effect.zipRight(pipe(Metric.counter(name), Metric.taggedWithLabels(labels), Metric.value)) - ) + const result = yield* pipe( + Effect.succeed(10), + Effect.withMetric(pipe(Metric.counter(name), Metric.taggedWithLabels(labels))), + Effect.zipRight( + pipe(Effect.succeed(5), Effect.withMetric(pipe(Metric.counter(name), Metric.taggedWithLabels(labels)))) + ), + Effect.zipRight(pipe(Metric.counter(name), Metric.taggedWithLabels(labels), Metric.value)) ) deepStrictEqual(result, MetricState.counter(15)) })) it.effect("custom increment with mapInput", () => - Effect.gen(function*($) { + Effect.gen(function*() { const name = nextName() - const result = yield* $( - pipe( - Effect.succeed("hello"), - Effect.withMetric( - pipe( - Metric.counter(name), - Metric.taggedWithLabels(labels), - Metric.mapInput((input: string) => input.length) - ) - ), - Effect.zipRight( - pipe( - Effect.succeed("!"), - Effect.withMetric( - pipe( - Metric.counter(name), - Metric.taggedWithLabels(labels), - Metric.mapInput((input: string) => input.length) - ) + const result = yield* pipe( + Effect.succeed("hello"), + Effect.withMetric( + pipe( + Metric.counter(name), + Metric.taggedWithLabels(labels), + Metric.mapInput((input: string) => input.length) + ) + ), + Effect.zipRight( + pipe( + Effect.succeed("!"), + Effect.withMetric( + pipe( + Metric.counter(name), + Metric.taggedWithLabels(labels), + Metric.mapInput((input: string) => input.length) ) ) - ), - Effect.zipRight(pipe(Metric.counter(name), Metric.taggedWithLabels(labels), Metric.value)) - ) + ) + ), + Effect.zipRight(pipe(Metric.counter(name), Metric.taggedWithLabels(labels), Metric.value)) ) deepStrictEqual(result, MetricState.counter(6)) })) it.effect("does not count errors", () => - Effect.gen(function*($) { + Effect.gen(function*() { const name = nextName() const counter = pipe(Metric.counter(name), Metric.withConstantInput(1)) - const result = yield* $( - pipe( - Effect.void, - Effect.withMetric(counter), - Effect.zipRight(pipe(Effect.fail("error"), Effect.withMetric(counter), Effect.ignore)), - Effect.zipRight(Metric.value(counter)) - ) + const result = yield* pipe( + Effect.void, + Effect.withMetric(counter), + Effect.zipRight(pipe(Effect.fail("error"), Effect.withMetric(counter), Effect.ignore)), + Effect.zipRight(Metric.value(counter)) ) deepStrictEqual(result, MetricState.counter(1)) })) it.effect("count + taggedWith", () => - Effect.gen(function*($) { + Effect.gen(function*() { const name = nextName() const base = pipe(Metric.counter(name), Metric.tagged("static", "0"), Metric.withConstantInput(1)) const counter = pipe( base, Metric.taggedWithLabelsInput((input: string) => [MetricLabel.make("dyn", input)]) ) - const result = yield* $( - pipe( - Effect.succeed("hello"), - Effect.withMetric(counter), - Effect.zipRight(pipe(Effect.succeed("!"), Effect.withMetric(counter))), - Effect.zipRight(pipe(Effect.succeed("!"), Effect.withMetric(counter))), - Effect.zipRight(pipe(base, Metric.tagged("dyn", "!"), Metric.value)) - ) + const result = yield* pipe( + Effect.succeed("hello"), + Effect.withMetric(counter), + Effect.zipRight(pipe(Effect.succeed("!"), Effect.withMetric(counter))), + Effect.zipRight(pipe(Effect.succeed("!"), Effect.withMetric(counter))), + Effect.zipRight(pipe(base, Metric.tagged("dyn", "!"), Metric.value)) ) deepStrictEqual(result, MetricState.counter(2)) })) it.effect("tags are a region setting", () => - Effect.gen(function*($) { + Effect.gen(function*() { const name = nextName() const counter = Metric.counter(name) - const result = yield* $( + const result = yield* pipe( Metric.increment(counter), Effect.tagMetrics({ key: "value" }), Effect.zipRight( @@ -256,74 +237,66 @@ describe("Metric", () => { }) describe("Frequency", () => { it.effect("custom occurrences as aspect", () => - Effect.gen(function*($) { + Effect.gen(function*() { const name = nextName() const frequency = pipe(Metric.frequency(name), Metric.taggedWithLabels(labels)) - const result = yield* $( - pipe( - Effect.succeed("hello"), - Effect.withMetric(frequency), - Effect.zipRight(pipe(Effect.succeed("hello"), Effect.withMetric(frequency))), - Effect.zipRight(pipe(Effect.succeed("world"), Effect.withMetric(frequency))), - Effect.zipRight(Metric.value(frequency)) - ) + const result = yield* pipe( + Effect.succeed("hello"), + Effect.withMetric(frequency), + Effect.zipRight(pipe(Effect.succeed("hello"), Effect.withMetric(frequency))), + Effect.zipRight(pipe(Effect.succeed("world"), Effect.withMetric(frequency))), + Effect.zipRight(Metric.value(frequency)) ) deepStrictEqual(result.occurrences, new Map([["hello", 2] as const, ["world", 1] as const])) })) it.effect("direct occurrences", () => - Effect.gen(function*($) { + Effect.gen(function*() { const name = nextName() const frequency = pipe(Metric.frequency(name), Metric.taggedWithLabels(labels)) - const result = yield* $( - pipe( - frequency, - Metric.update("hello"), - Effect.zipRight(pipe(frequency, Metric.update("hello"))), - Effect.zipRight(pipe(frequency, Metric.update("world"))), - Effect.zipRight(Metric.value(frequency)) - ) + const result = yield* pipe( + frequency, + Metric.update("hello"), + Effect.zipRight(pipe(frequency, Metric.update("hello"))), + Effect.zipRight(pipe(frequency, Metric.update("world"))), + Effect.zipRight(Metric.value(frequency)) ) deepStrictEqual(result.occurrences, new Map([["hello", 2] as const, ["world", 1] as const])) })) it.effect("custom occurrences with mapInput", () => - Effect.gen(function*($) { + Effect.gen(function*() { const name = nextName() const frequency = pipe( Metric.frequency(name), Metric.taggedWithLabels(labels), Metric.mapInput((n: number) => `${n}`) ) - const result = yield* $( - pipe( - Effect.succeed(1), - Effect.withMetric(frequency), - Effect.zipRight(pipe(Effect.succeed(1), Effect.withMetric(frequency))), - Effect.zipRight(pipe(Effect.succeed(2), Effect.withMetric(frequency))), - Effect.zipRight(Metric.value(frequency)) - ) + const result = yield* pipe( + Effect.succeed(1), + Effect.withMetric(frequency), + Effect.zipRight(pipe(Effect.succeed(1), Effect.withMetric(frequency))), + Effect.zipRight(pipe(Effect.succeed(2), Effect.withMetric(frequency))), + Effect.zipRight(Metric.value(frequency)) ) deepStrictEqual(result.occurrences, new Map([["1", 2] as const, ["2", 1] as const])) })) it.effect("occurences + taggedWith", () => - Effect.gen(function*($) { + Effect.gen(function*() { const name = nextName() const base = pipe(Metric.frequency(name), Metric.taggedWithLabels(labels)) const frequency = pipe( base, Metric.taggedWithLabelsInput((s: string) => [MetricLabel.make("dyn", s)]) ) - const { result1, result2, result3 } = yield* $( - pipe( - Effect.succeed("hello"), - Effect.withMetric(frequency), - Effect.zipRight(pipe(Effect.succeed("hello"), Effect.withMetric(frequency))), - Effect.zipRight(pipe(Effect.succeed("world"), Effect.withMetric(frequency))), - Effect.zipRight(Effect.all({ - result1: Metric.value(base), - result2: pipe(base, Metric.tagged("dyn", "hello"), Metric.value), - result3: pipe(base, Metric.tagged("dyn", "world"), Metric.value) - })) - ) + const { result1, result2, result3 } = yield* pipe( + Effect.succeed("hello"), + Effect.withMetric(frequency), + Effect.zipRight(pipe(Effect.succeed("hello"), Effect.withMetric(frequency))), + Effect.zipRight(pipe(Effect.succeed("world"), Effect.withMetric(frequency))), + Effect.zipRight(Effect.all({ + result1: Metric.value(base), + result2: pipe(base, Metric.tagged("dyn", "hello"), Metric.value), + result3: pipe(base, Metric.tagged("dyn", "world"), Metric.value) + })) ) strictEqual(result1.occurrences.size, 0) deepStrictEqual(result2.occurrences, new Map([["hello", 2] as const])) @@ -332,25 +305,26 @@ describe("Metric", () => { }) describe("Gauge", () => { it.effect("custom set as aspect", () => - Effect.gen(function*($) { + Effect.gen(function*() { const name = nextName() const gauge = pipe(Metric.gauge(name), Metric.taggedWithLabels(labels)) - const result = yield* $( - pipe( - Effect.succeed(1), - Effect.withMetric(gauge), - Effect.zipRight(pipe(Effect.succeed(3), Effect.withMetric(gauge))), - Effect.zipRight(Metric.value(gauge)) - ) + const result = yield* pipe( + Effect.succeed(1), + Effect.withMetric(gauge), + Effect.zipRight(pipe(Effect.succeed(3), Effect.withMetric(gauge))), + Effect.zipRight(Metric.value(gauge)) ) deepStrictEqual(result, MetricState.gauge(3)) })) it.effect("direct set", () => - Effect.gen(function*($) { + Effect.gen(function*() { const name = nextName() const gauge = pipe(Metric.gauge(name), Metric.taggedWithLabels(labels)) - const result = yield* $( - pipe(gauge, Metric.set(1), Effect.zipRight(pipe(gauge, Metric.set(3))), Effect.zipRight(Metric.value(gauge))) + const result = yield* pipe( + gauge, + Metric.set(1), + Effect.zipRight(pipe(gauge, Metric.set(3))), + Effect.zipRight(Metric.value(gauge)) ) deepStrictEqual(result, MetricState.gauge(3)) })) @@ -363,52 +337,46 @@ describe("Metric", () => { deepStrictEqual(result, MetricState.gauge(100)) })) it.effect("custom set with mapInput", () => - Effect.gen(function*($) { + Effect.gen(function*() { const name = nextName() const gauge = pipe(Metric.gauge(name), Metric.taggedWithLabels(labels), Metric.mapInput((n: number) => n * 2)) - const result = yield* $( - pipe( - Effect.succeed(1), - Effect.withMetric(gauge), - Effect.zipRight(pipe(Effect.succeed(3), Effect.withMetric(gauge))), - Effect.zipRight(Metric.value(gauge)) - ) + const result = yield* pipe( + Effect.succeed(1), + Effect.withMetric(gauge), + Effect.zipRight(pipe(Effect.succeed(3), Effect.withMetric(gauge))), + Effect.zipRight(Metric.value(gauge)) ) deepStrictEqual(result, MetricState.gauge(6)) })) it.effect("gauge + taggedWith", () => - Effect.gen(function*($) { + Effect.gen(function*() { const name = nextName() const base = pipe(Metric.gauge(name), Metric.tagged("static", "0"), Metric.mapInput((s: string) => s.length)) const gauge = pipe( base, Metric.taggedWithLabelsInput((input: string) => [MetricLabel.make("dyn", input)]) ) - const result = yield* $( - pipe( - Effect.succeed("hello"), - Effect.withMetric(gauge), - Effect.zipRight(pipe(Effect.succeed("!"), Effect.withMetric(gauge))), - Effect.zipRight(pipe(Effect.succeed("!"), Effect.withMetric(gauge))), - Effect.zipRight(pipe(base, Metric.tagged("dyn", "!"), Metric.value)) - ) + const result = yield* pipe( + Effect.succeed("hello"), + Effect.withMetric(gauge), + Effect.zipRight(pipe(Effect.succeed("!"), Effect.withMetric(gauge))), + Effect.zipRight(pipe(Effect.succeed("!"), Effect.withMetric(gauge))), + Effect.zipRight(pipe(base, Metric.tagged("dyn", "!"), Metric.value)) ) deepStrictEqual(result, MetricState.gauge(1)) })) }) describe("Histogram", () => { it.effect("custom observe as aspect", () => - Effect.gen(function*($) { + Effect.gen(function*() { const name = nextName() const boundaries = MetricBoundaries.linear({ start: 0, width: 1, count: 10 }) const histogram = pipe(Metric.histogram(name, boundaries), Metric.taggedWithLabels(labels)) - const result = yield* $( - pipe( - Effect.succeed(1), - Effect.withMetric(histogram), - Effect.zipRight(pipe(Effect.succeed(3), Effect.withMetric(histogram))), - Effect.zipRight(Metric.value(histogram)) - ) + const result = yield* pipe( + Effect.succeed(1), + Effect.withMetric(histogram), + Effect.zipRight(pipe(Effect.succeed(3), Effect.withMetric(histogram))), + Effect.zipRight(Metric.value(histogram)) ) strictEqual(result.count, 2) strictEqual(result.sum, 4) @@ -416,17 +384,15 @@ describe("Metric", () => { strictEqual(result.max, 3) })) it.effect("direct observe", () => - Effect.gen(function*($) { + Effect.gen(function*() { const name = nextName() const boundaries = MetricBoundaries.linear({ start: 0, width: 1, count: 10 }) const histogram = pipe(Metric.histogram(name, boundaries), Metric.taggedWithLabels(labels)) - const result = yield* $( - pipe( - histogram, - Metric.update(1), - Effect.zipRight(pipe(histogram, Metric.update(3))), - Effect.zipRight(Metric.value(histogram)) - ) + const result = yield* pipe( + histogram, + Metric.update(1), + Effect.zipRight(pipe(histogram, Metric.update(3))), + Effect.zipRight(Metric.value(histogram)) ) strictEqual(result.count, 2) strictEqual(result.sum, 4) @@ -434,7 +400,7 @@ describe("Metric", () => { strictEqual(result.max, 3) })) it.flakyTest( - Effect.gen(function*($) { + Effect.gen(function*() { const name = nextName() const boundaries = MetricBoundaries.linear({ start: 0, width: 1, count: 10 }) const histogram = pipe( @@ -443,12 +409,12 @@ describe("Metric", () => { Metric.mapInput((duration: Duration.Duration) => Duration.toMillis(duration) / 1000) ) // NOTE: trackDuration always uses the **real** Clock - const start = yield* $(Effect.sync(() => Date.now())) - yield* $(Effect.sleep(Duration.millis(100)), Metric.trackDuration(histogram)) - yield* $(Effect.sleep(Duration.millis(300)), Metric.trackDuration(histogram)) - const end = yield* $(Effect.sync(() => Date.now())) + const start = yield* Effect.sync(() => Date.now()) + yield* pipe(Effect.sleep(Duration.millis(100)), Metric.trackDuration(histogram)) + yield* pipe(Effect.sleep(Duration.millis(300)), Metric.trackDuration(histogram)) + const end = yield* Effect.sync(() => Date.now()) const elapsed = end - start - const result = yield* $(Metric.value(histogram)) + const result = yield* Metric.value(histogram) strictEqual(result.count, 2) assertTrue(result.sum > 0.39) assertTrue(result.sum <= elapsed) @@ -459,7 +425,7 @@ describe("Metric", () => { }) ) it.effect("custom observe with mapInput", () => - Effect.gen(function*($) { + Effect.gen(function*() { const name = nextName() const boundaries = MetricBoundaries.linear({ start: 0, width: 1, count: 10 }) const histogram = pipe( @@ -467,13 +433,11 @@ describe("Metric", () => { Metric.taggedWithLabels(labels), Metric.mapInput((s: string) => s.length) ) - const result = yield* $( - pipe( - Effect.succeed("x"), - Effect.withMetric(histogram), - Effect.zipRight(pipe(Effect.succeed("xyz"), Effect.withMetric(histogram))), - Effect.zipRight(Metric.value(histogram)) - ) + const result = yield* pipe( + Effect.succeed("x"), + Effect.withMetric(histogram), + Effect.zipRight(pipe(Effect.succeed("xyz"), Effect.withMetric(histogram))), + Effect.zipRight(Metric.value(histogram)) ) strictEqual(result.count, 2) strictEqual(result.sum, 4) @@ -481,7 +445,7 @@ describe("Metric", () => { strictEqual(result.max, 3) })) it.effect("observe + taggedWith", () => - Effect.gen(function*($) { + Effect.gen(function*() { const name = nextName() const boundaries = MetricBoundaries.linear({ start: 0, width: 1, count: 10 }) const base = pipe( @@ -492,7 +456,7 @@ describe("Metric", () => { const histogram = base.pipe( Metric.taggedWithLabelsInput((input: string) => [MetricLabel.make("dyn", input)]) ) - const { result1, result2, result3 } = yield* $( + const { result1, result2, result3 } = yield* pipe( Effect.succeed("x"), Effect.withMetric(histogram), Effect.zipRight(pipe(Effect.succeed("xyz"), Effect.withMetric(histogram))), @@ -509,7 +473,7 @@ describe("Metric", () => { }) describe("Summary", () => { it.effect("custom observe as aspect", () => - Effect.gen(function*($) { + Effect.gen(function*() { const name = nextName() const summary = Metric.summary({ name, @@ -520,7 +484,7 @@ describe("Metric", () => { }).pipe( Metric.taggedWithLabels(labels) ) - const result = yield* $( + const result = yield* pipe( Effect.succeed(1), Effect.withMetric(summary), Effect.zipRight(pipe(Effect.succeed(3), Effect.withMetric(summary))), @@ -532,7 +496,7 @@ describe("Metric", () => { strictEqual(result.max, 3) })) it.effect("direct observe", () => - Effect.gen(function*($) { + Effect.gen(function*() { const name = nextName() const summary = Metric.summary({ name, @@ -543,7 +507,7 @@ describe("Metric", () => { }).pipe( Metric.taggedWithLabels(labels) ) - const result = yield* $( + const result = yield* pipe( summary, Metric.update(1), Effect.zipRight(pipe(summary, Metric.update(3))), @@ -555,7 +519,7 @@ describe("Metric", () => { strictEqual(result.max, 3) })) it.effect("custom observe with mapInput", () => - Effect.gen(function*($) { + Effect.gen(function*() { const name = nextName() const summary = Metric.summary({ name, @@ -567,7 +531,7 @@ describe("Metric", () => { Metric.taggedWithLabels(labels), Metric.mapInput((s: string) => s.length) ) - const result = yield* $( + const result = yield* pipe( Effect.succeed("x"), Effect.withMetric(summary), Effect.zipRight(pipe(Effect.succeed("xyz"), Effect.withMetric(summary))), @@ -579,7 +543,7 @@ describe("Metric", () => { strictEqual(result.max, 3) })) it.effect("observeSummaryWith + taggedWith", () => - Effect.gen(function*($) { + Effect.gen(function*() { const name = nextName() const base = Metric.summary({ name, @@ -594,7 +558,7 @@ describe("Metric", () => { const summary = base.pipe( Metric.taggedWithLabelsInput((input: string) => [MetricLabel.make("dyn", input)]) ) - const { result1, result2, result3 } = yield* $( + const { result1, result2, result3 } = yield* pipe( Effect.succeed("x"), Effect.withMetric(summary), Effect.zipRight(pipe(Effect.succeed("xyz"), Effect.withMetric(summary))), @@ -611,63 +575,63 @@ describe("Metric", () => { }) describe("Polling", () => { it.scopedLive("launch should be interruptible", () => - Effect.gen(function*($) { - const name = yield* $(Clock.currentTimeMillis, Effect.map((now) => `gauge-${now}`)) + Effect.gen(function*() { + const name = yield* pipe(Clock.currentTimeMillis, Effect.map((now) => `gauge-${now}`)) const [gauge, metric] = makePollingGauge(name, 1) const schedule = pipe(Schedule.forever, Schedule.delayed(() => Duration.millis(250))) - const fiber = yield* $(metric, MetricPolling.launch(schedule)) - yield* $(Fiber.interrupt(fiber)) - const result = yield* $(Metric.value(gauge)) + const fiber = yield* pipe(metric, MetricPolling.launch(schedule)) + yield* Fiber.interrupt(fiber) + const result = yield* Metric.value(gauge) strictEqual(result.value, 0) })) it.scoped("launch should update the internal metric using the provided Schedule", () => - Effect.gen(function*($) { - const name = yield* $(Clock.currentTimeMillis, Effect.map((now) => `gauge-${now}`)) + Effect.gen(function*() { + const name = yield* pipe(Clock.currentTimeMillis, Effect.map((now) => `gauge-${now}`)) const [gauge, metric] = makePollingGauge(name, 1) - const fiber = yield* $(metric, MetricPolling.launch(Schedule.once)) - yield* $(Fiber.join(fiber)) - const result = yield* $(Metric.value(gauge)) + const fiber = yield* pipe(metric, MetricPolling.launch(Schedule.once)) + yield* Fiber.join(fiber) + const result = yield* Metric.value(gauge) strictEqual(result.value, 1) })) it.scoped("collectAll should generate a metric that polls all the provided metrics", () => - Effect.gen(function*($) { + Effect.gen(function*() { const gaugeIncrement1 = 1 const gaugeIncrement2 = 2 const pollingCount = 2 - const name1 = yield* $(Clock.currentTimeMillis, Effect.map((now) => `gauge1-${now}`)) - const name2 = yield* $(Clock.currentTimeMillis, Effect.map((now) => `gauge2-${now}`)) + const name1 = yield* pipe(Clock.currentTimeMillis, Effect.map((now) => `gauge1-${now}`)) + const name2 = yield* pipe(Clock.currentTimeMillis, Effect.map((now) => `gauge2-${now}`)) const [gauge1, metric1] = makePollingGauge(name1, gaugeIncrement1) const [gauge2, metric2] = makePollingGauge(name2, gaugeIncrement2) const metric = MetricPolling.collectAll([metric1, metric2]) - const fiber = yield* $(metric, MetricPolling.launch(Schedule.recurs(pollingCount))) - yield* $(Fiber.join(fiber)) - const result1 = yield* $(Metric.value(gauge1)) - const result2 = yield* $(Metric.value(gauge2)) + const fiber = yield* pipe(metric, MetricPolling.launch(Schedule.recurs(pollingCount))) + yield* Fiber.join(fiber) + const result1 = yield* Metric.value(gauge1) + const result2 = yield* Metric.value(gauge2) strictEqual(result1.value, gaugeIncrement1 * pollingCount) strictEqual(result2.value, gaugeIncrement2 * pollingCount) })) }) it.effect("with a description", () => - Effect.gen(function*(_) { + Effect.gen(function*() { const name = "counterName" const counter1 = Metric.counter(name) const counter2 = Metric.counter(name, { description: "description1" }) const counter3 = Metric.counter(name, { description: "description2" }) - yield* _(Metric.update(counter1, 1)) - yield* _(Metric.update(counter2, 1)) - yield* _(Metric.update(counter3, 1)) + yield* (Metric.update(counter1, 1)) + yield* (Metric.update(counter2, 1)) + yield* (Metric.update(counter3, 1)) - const result1 = yield* _(Metric.value(counter1)) - const result2 = yield* _(Metric.value(counter2)) - const result3 = yield* _(Metric.value(counter3)) + const result1 = yield* (Metric.value(counter1)) + const result2 = yield* (Metric.value(counter2)) + const result3 = yield* (Metric.value(counter3)) - const snapshot = yield* _(Metric.snapshot) - const pair1 = yield* _( + const snapshot = yield* (Metric.snapshot) + const pair1 = yield* ( Array.findFirst(snapshot, (key) => Equal.equals(key.metricKey, MetricKey.counter(name))) ) - const pair2 = yield* _( + const pair2 = yield* ( Array.findFirst(snapshot, (key) => Equal.equals( key.metricKey, @@ -676,7 +640,7 @@ describe("Metric", () => { }) )) ) - const pair3 = yield* _( + const pair3 = yield* ( Array.findFirst(snapshot, (key) => Equal.equals( key.metricKey, @@ -708,10 +672,10 @@ describe("Metric", () => { })) it.effect(".register()", () => - Effect.gen(function*(_) { + Effect.gen(function*() { const id = nextName() Metric.counter(id).register() - const snapshot = yield* _(Metric.snapshot) + const snapshot = yield* (Metric.snapshot) const value = pipe( Array.fromIterable(snapshot), Array.findFirst((_) => _.metricKey.name === id) diff --git a/packages/effect/test/Option.test.ts b/packages/effect/test/Option.test.ts index f6d8cf0f32..f0c8540df8 100644 --- a/packages/effect/test/Option.test.ts +++ b/packages/effect/test/Option.test.ts @@ -33,6 +33,7 @@ describe("Option", () => { const g = Option.gen({ ctx: "testContext" as const }, function*() { return yield* Option.some(this.ctx) }) + // TODO(4.0) remove this test // test adapter const h = Option.gen(function*($) { const x = yield* $(Option.some(1)) diff --git a/packages/effect/test/Pool.test.ts b/packages/effect/test/Pool.test.ts index 8394285889..be53cfd2ec 100644 --- a/packages/effect/test/Pool.test.ts +++ b/packages/effect/test/Pool.test.ts @@ -1,4 +1,4 @@ -import { Deferred, Duration, Effect, Exit, Fiber, Pool, Ref, Scope, TestClock, TestServices } from "effect" +import { Deferred, Duration, Effect, Exit, Fiber, pipe, Pool, Ref, Scope, TestClock, TestServices } from "effect" import { assertNone, deepStrictEqual, strictEqual } from "effect/test/util" import { describe, it } from "effect/test/utils/extend" @@ -58,21 +58,21 @@ describe("Pool", () => { })) it.scoped("acquire one item", () => - Effect.gen(function*($) { - const count = yield* $(Ref.make(0)) + Effect.gen(function*() { + const count = yield* Ref.make(0) const get = Effect.acquireRelease( Ref.updateAndGet(count, (n) => n + 1), () => Ref.update(count, (n) => n - 1) ) - const pool = yield* $(Pool.make({ acquire: get, size: 10 })) - yield* $(Effect.repeat(Ref.get(count), { until: (n) => n === 10 })) - const item = yield* $(Pool.get(pool)) + const pool = yield* Pool.make({ acquire: get, size: 10 }) + yield* Effect.repeat(Ref.get(count), { until: (n) => n === 10 }) + const item = yield* Pool.get(pool) strictEqual(item, 1) })) it.scoped("reports failures via get", () => - Effect.gen(function*($) { - const count = yield* $(Ref.make(0)) + Effect.gen(function*() { + const count = yield* Ref.make(0) const get = Effect.acquireRelease( Effect.flatMap( Ref.updateAndGet(count, (n) => n + 1), @@ -80,41 +80,41 @@ describe("Pool", () => { ), () => Ref.update(count, (n) => n - 1) ) - const pool = yield* $(Pool.make({ acquire: get, size: 10 })) - const values = yield* $(Effect.all(Effect.replicate(9)(Effect.flip(Pool.get(pool))))) + const pool = yield* Pool.make({ acquire: get, size: 10 }) + const values = yield* Effect.all(Effect.replicate(9)(Effect.flip(Pool.get(pool)))) deepStrictEqual(Array.from(values), [1, 2, 3, 4, 5, 6, 7, 8, 9]) })) it.scoped("blocks when item not available", () => - Effect.gen(function*($) { - const count = yield* $(Ref.make(0)) + Effect.gen(function*() { + const count = yield* Ref.make(0) const get = Effect.acquireRelease( Ref.updateAndGet(count, (n) => n + 1), () => Ref.update(count, (n) => n - 1) ) - const pool = yield* $(Pool.make({ acquire: get, size: 10 })) - yield* $(Effect.repeat(Ref.get(count), { until: (n) => n === 10 })) - yield* $(Effect.all(Effect.replicate(10)(Pool.get(pool)))) - const result = yield* $(TestServices.provideLive( + const pool = yield* Pool.make({ acquire: get, size: 10 }) + yield* Effect.repeat(Ref.get(count), { until: (n) => n === 10 }) + yield* Effect.all(Effect.replicate(10)(Pool.get(pool))) + const result = yield* TestServices.provideLive( Effect.scoped(Pool.get(pool)).pipe( Effect.disconnect, Effect.timeout(Duration.millis(1)), Effect.option ) - )) + ) assertNone(result) })) it.scoped("reuse released items", () => - Effect.gen(function*($) { - const count = yield* $(Ref.make(0)) + Effect.gen(function*() { + const count = yield* Ref.make(0) const get = Effect.acquireRelease( Ref.updateAndGet(count, (n) => n + 1), () => Ref.update(count, (n) => n - 1) ) - const pool = yield* $(Pool.make({ acquire: get, size: 10 })) - yield* $(Effect.repeatN(99)(Effect.scoped(Pool.get(pool)))) - const result = yield* $(Ref.get(count)) + const pool = yield* Pool.make({ acquire: get, size: 10 }) + yield* Effect.repeatN(99)(Effect.scoped(Pool.get(pool))) + const result = yield* Ref.get(count) strictEqual(result, 10) })) @@ -136,30 +136,30 @@ describe("Pool", () => { })) it.scoped("invalidate all items in pool and check that pool.get doesn't hang forever", () => - Effect.gen(function*($) { - const allocated = yield* $(Ref.make(0)) - const finalized = yield* $(Ref.make(0)) + Effect.gen(function*() { + const allocated = yield* Ref.make(0) + const finalized = yield* Ref.make(0) const get = Effect.acquireRelease( Ref.updateAndGet(allocated, (n) => n + 1), () => Ref.update(finalized, (n) => n + 1) ) - const pool = yield* $(Pool.make({ acquire: get, size: 2 })) - yield* $(Effect.repeat(Ref.get(allocated), { until: (n) => n === 2 })) - yield* $(Pool.invalidate(pool, 1)) - yield* $(Pool.invalidate(pool, 2)) - const result = yield* $(Effect.scoped(Pool.get(pool))) - const allocatedCount = yield* $(Ref.get(allocated)) - const finalizedCount = yield* $(Ref.get(finalized)) + const pool = yield* Pool.make({ acquire: get, size: 2 }) + yield* Effect.repeat(Ref.get(allocated), { until: (n) => n === 2 }) + yield* Pool.invalidate(pool, 1) + yield* Pool.invalidate(pool, 2) + const result = yield* Effect.scoped(Pool.get(pool)) + const allocatedCount = yield* Ref.get(allocated) + const finalizedCount = yield* Ref.get(finalized) strictEqual(result, 3) strictEqual(allocatedCount, 4) strictEqual(finalizedCount, 2) })) it.scoped("retry on failed acquire should not exhaust pool", () => - Effect.gen(function*($) { + Effect.gen(function*() { const acquire = Effect.as(Effect.fail("error"), 1) - const pool = yield* $(Pool.makeWithTTL({ acquire, min: 0, max: 1, timeToLive: Duration.infinity })) - const result = yield* $( + const pool = yield* Pool.makeWithTTL({ acquire, min: 0, max: 1, timeToLive: Duration.infinity }) + const result = yield* pipe( Effect.scoped(Effect.retry(Pool.get(pool), { times: 5 })), Effect.timeoutFail({ onTimeout: () => "timeout", @@ -172,35 +172,35 @@ describe("Pool", () => { })) it.scoped("compositional retry", () => - Effect.gen(function*($) { + Effect.gen(function*() { const cond = (i: number) => (i <= 10 ? Effect.fail(i) : Effect.succeed(i)) - const count = yield* $(Ref.make(0)) + const count = yield* Ref.make(0) const get = Effect.acquireRelease( Ref.updateAndGet(count, (n) => n + 1).pipe( Effect.flatMap(cond) ), () => Ref.update(count, (n) => n - 1) ) - const pool = yield* $(Pool.make({ acquire: get, size: 10 })) - const result = yield* $(Effect.eventually(Effect.scoped(Pool.get(pool)))) + const pool = yield* Pool.make({ acquire: get, size: 10 }) + const result = yield* Effect.eventually(Effect.scoped(Pool.get(pool))) strictEqual(result, 11) })) it.scoped("max pool size", () => - Effect.gen(function*($) { - const deferred = yield* $(Deferred.make()) - const count = yield* $(Ref.make(0)) + Effect.gen(function*() { + const deferred = yield* Deferred.make() + const count = yield* Ref.make(0) const acquire = Effect.acquireRelease( Ref.updateAndGet(count, (n) => n + 1), () => Ref.update(count, (n) => n - 1) ) - const pool = yield* $(Pool.makeWithTTL({ + const pool = yield* Pool.makeWithTTL({ acquire, min: 10, max: 15, timeToLive: Duration.seconds(60) - })) - yield* $( + }) + yield* pipe( Effect.scoped(Effect.zipRight( Pool.get(pool), Deferred.await(deferred) @@ -208,31 +208,31 @@ describe("Pool", () => { Effect.fork, Effect.repeatN(14) ) - yield* $(Effect.repeat(Ref.get(count), { until: (n) => n === 15 })) - yield* $(Deferred.succeed(deferred, void 0)) - const max = yield* $(Ref.get(count)) - yield* $(TestClock.adjust(Duration.seconds(60))) - const min = yield* $(Ref.get(count)) + yield* Effect.repeat(Ref.get(count), { until: (n) => n === 15 }) + yield* Deferred.succeed(deferred, void 0) + const max = yield* Ref.get(count) + yield* TestClock.adjust(Duration.seconds(60)) + const min = yield* Ref.get(count) strictEqual(min, 10) strictEqual(max, 15) })) it.scoped("max pool size with concurrency: 3", () => - Effect.gen(function*($) { - const deferred = yield* $(Deferred.make()) - const count = yield* $(Ref.make(0)) + Effect.gen(function*() { + const deferred = yield* Deferred.make() + const count = yield* Ref.make(0) const acquire = Effect.acquireRelease( Ref.updateAndGet(count, (n) => n + 1), () => Ref.update(count, (n) => n - 1) ) - const pool = yield* $(Pool.makeWithTTL({ + const pool = yield* Pool.makeWithTTL({ acquire, min: 10, max: 15, concurrency: 3, timeToLive: Duration.seconds(60) - })) - yield* $( + }) + yield* pipe( Effect.scoped(Effect.zipRight( Pool.get(pool), Deferred.await(deferred) @@ -240,11 +240,11 @@ describe("Pool", () => { Effect.fork, Effect.repeatN(14 * 3) ) - yield* $(Effect.repeat(Ref.get(count), { until: (n) => n === 15 })) - yield* $(Deferred.succeed(deferred, void 0)) - const max = yield* $(Ref.get(count)) - yield* $(TestClock.adjust(Duration.seconds(60))) - const min = yield* $(Ref.get(count)) + yield* Effect.repeat(Ref.get(count), { until: (n) => n === 15 }) + yield* Deferred.succeed(deferred, void 0) + const max = yield* Ref.get(count) + yield* TestClock.adjust(Duration.seconds(60)) + const min = yield* Ref.get(count) strictEqual(min, 10) strictEqual(max, 15) })) @@ -277,21 +277,21 @@ describe("Pool", () => { })) it.scoped("scale to zero", () => - Effect.gen(function*($) { - const deferred = yield* $(Deferred.make()) - const count = yield* $(Ref.make(0)) + Effect.gen(function*() { + const deferred = yield* Deferred.make() + const count = yield* Ref.make(0) const acquire = Effect.acquireRelease( Ref.updateAndGet(count, (n) => n + 1), () => Ref.update(count, (n) => n - 1) ) - const pool = yield* $(Pool.makeWithTTL({ + const pool = yield* Pool.makeWithTTL({ acquire, min: 0, max: 10, concurrency: 3, timeToLive: Duration.seconds(60) - })) - yield* $( + }) + yield* pipe( Effect.scoped(Effect.zipRight( Pool.get(pool), Deferred.await(deferred) @@ -299,106 +299,106 @@ describe("Pool", () => { Effect.fork, Effect.repeatN(29) ) - yield* $(Effect.repeat(Ref.get(count), { until: (n) => n === 10 })) - yield* $(Deferred.succeed(deferred, void 0)) - const max = yield* $(Ref.get(count)) - yield* $(TestClock.adjust(Duration.seconds(60))) - const min = yield* $(Ref.get(count)) + yield* Effect.repeat(Ref.get(count), { until: (n) => n === 10 }) + yield* Deferred.succeed(deferred, void 0) + const max = yield* Ref.get(count) + yield* TestClock.adjust(Duration.seconds(60)) + const min = yield* Ref.get(count) strictEqual(min, 0) strictEqual(max, 10) })) it.scoped("max pool size creation strategy", () => - Effect.gen(function*($) { - const invalidated = yield* $(Ref.make(0)) + Effect.gen(function*() { + const invalidated = yield* Ref.make(0) const acquire = Effect.acquireRelease( Effect.succeed("resource"), () => Ref.update(invalidated, (n) => n + 1) ) - const pool = yield* $(Pool.makeWithTTL({ + const pool = yield* Pool.makeWithTTL({ acquire, min: 10, max: 15, timeToLive: Duration.seconds(60), timeToLiveStrategy: "creation" - })) + }) const scope = yield* Scope.make() yield* Pool.get(pool).pipe( Effect.repeatN(14), Scope.extend(scope) ) - const one = yield* $(Ref.get(invalidated)) - yield* $(TestClock.adjust(Duration.seconds(60))) - const two = yield* $(Ref.get(invalidated)) + const one = yield* Ref.get(invalidated) + yield* TestClock.adjust(Duration.seconds(60)) + const two = yield* Ref.get(invalidated) yield* Scope.close(scope, Exit.void) - const three = yield* $(Ref.get(invalidated)) + const three = yield* Ref.get(invalidated) strictEqual(one, 0) strictEqual(two, 0) strictEqual(three, 15) })) it.scoped("shutdown robustness", () => - Effect.gen(function*($) { - const count = yield* $(Ref.make(0)) + Effect.gen(function*() { + const count = yield* Ref.make(0) const get = Effect.acquireRelease( Ref.updateAndGet(count, (n) => n + 1), () => Ref.update(count, (n) => n - 1) ) - const scope = yield* $(Scope.make()) - const pool = yield* $(Scope.extend(Pool.make({ acquire: get, size: 10 }), scope)) - yield* $( + const scope = yield* Scope.make() + const pool = yield* Scope.extend(Pool.make({ acquire: get, size: 10 }), scope) + yield* pipe( Effect.scoped(Pool.get(pool)), Effect.fork, Effect.repeatN(99) ) - yield* $(Scope.close(scope, Exit.succeed(void 0))) - const result = yield* $(Effect.repeat(Ref.get(count), { until: (n) => n === 0 })) + yield* Scope.close(scope, Exit.succeed(void 0)) + const result = yield* Effect.repeat(Ref.get(count), { until: (n) => n === 0 }) strictEqual(result, 0) })) it.scoped("shutdown with pending takers", () => - Effect.gen(function*($) { - const count = yield* $(Ref.make(0)) + Effect.gen(function*() { + const count = yield* Ref.make(0) const get = Effect.acquireRelease( Ref.updateAndGet(count, (n) => n + 1), () => Ref.update(count, (n) => n - 1) ) - const scope = yield* $(Scope.make()) - const pool = yield* $(Scope.extend(Pool.make({ acquire: get, size: 10 }), scope)) - yield* $( + const scope = yield* Scope.make() + const pool = yield* Scope.extend(Pool.make({ acquire: get, size: 10 }), scope) + yield* pipe( Pool.get(pool), Scope.extend(scope), Effect.fork, Effect.repeatN(99) ) - yield* $(Scope.close(scope, Exit.succeed(void 0))) - const result = yield* $(Effect.repeat(Ref.get(count), { until: (n) => n === 0 })) + yield* Scope.close(scope, Exit.succeed(void 0)) + const result = yield* Effect.repeat(Ref.get(count), { until: (n) => n === 0 }) strictEqual(result, 0) })) it.scoped("get is interruptible", () => - Effect.gen(function*($) { - const count = yield* $(Ref.make(0)) + Effect.gen(function*() { + const count = yield* Ref.make(0) const get = Effect.acquireRelease( Ref.updateAndGet(count, (n) => n + 1), () => Ref.update(count, (n) => n - 1) ) - const fiberId = yield* $(Effect.fiberId) - const pool = yield* $(Pool.make({ acquire: get, size: 10 })) - yield* $(Effect.repeatN(Pool.get(pool), 9)) - const fiber = yield* $(Effect.fork(Pool.get(pool))) - const result = yield* $(Fiber.interrupt(fiber)) + const fiberId = yield* Effect.fiberId + const pool = yield* Pool.make({ acquire: get, size: 10 }) + yield* Effect.repeatN(Pool.get(pool), 9) + const fiber = yield* Effect.fork(Pool.get(pool)) + const result = yield* Fiber.interrupt(fiber) deepStrictEqual(result, Exit.interrupt(fiberId)) })) it.scoped("get is interruptible with dynamic size", () => - Effect.gen(function*($) { + Effect.gen(function*() { const get = Effect.never.pipe(Effect.forkScoped) - const fiberId = yield* $(Effect.fiberId) - const pool = yield* $(Pool.makeWithTTL({ acquire: get, min: 0, max: 10, timeToLive: Duration.infinity })) - yield* $(Effect.repeatN(Pool.get(pool), 9)) - const fiber = yield* $(Effect.fork(Pool.get(pool))) - const result = yield* $(Fiber.interrupt(fiber)) + const fiberId = yield* Effect.fiberId + const pool = yield* Pool.makeWithTTL({ acquire: get, min: 0, max: 10, timeToLive: Duration.infinity }) + yield* Effect.repeatN(Pool.get(pool), 9) + const fiber = yield* Effect.fork(Pool.get(pool)) + const result = yield* Fiber.interrupt(fiber) deepStrictEqual(result, Exit.interrupt(fiberId)) })) diff --git a/packages/effect/test/PubSub.test.ts b/packages/effect/test/PubSub.test.ts index 0b97511fc1..3e98414def 100644 --- a/packages/effect/test/PubSub.test.ts +++ b/packages/effect/test/PubSub.test.ts @@ -9,12 +9,12 @@ describe("PubSub", () => { return PubSub.bounded(2).pipe( Effect.flatMap((pubsub) => Effect.scoped( - Effect.gen(function*(_) { - const dequeue1 = yield* _(PubSub.subscribe(pubsub)) - const dequeue2 = yield* _(PubSub.subscribe(pubsub)) - yield* _(PubSub.publishAll(pubsub, messages)) - const takes1 = yield* _(Queue.takeAll(dequeue1)) - const takes2 = yield* _(Queue.takeAll(dequeue2)) + Effect.gen(function*() { + const dequeue1 = yield* (PubSub.subscribe(pubsub)) + const dequeue2 = yield* (PubSub.subscribe(pubsub)) + yield* (PubSub.publishAll(pubsub, messages)) + const takes1 = yield* (Queue.takeAll(dequeue1)) + const takes2 = yield* (Queue.takeAll(dequeue2)) deepStrictEqual([...takes1], messages) deepStrictEqual([...takes2], messages) }) @@ -27,12 +27,12 @@ describe("PubSub", () => { return PubSub.bounded(4).pipe( Effect.flatMap((pubsub) => Effect.scoped( - Effect.gen(function*(_) { - const dequeue1 = yield* _(PubSub.subscribe(pubsub)) - const dequeue2 = yield* _(PubSub.subscribe(pubsub)) - yield* _(PubSub.publishAll(pubsub, messages)) - const takes1 = yield* _(Queue.takeAll(dequeue1)) - const takes2 = yield* _(Queue.takeAll(dequeue2)) + Effect.gen(function*() { + const dequeue1 = yield* (PubSub.subscribe(pubsub)) + const dequeue2 = yield* (PubSub.subscribe(pubsub)) + yield* (PubSub.publishAll(pubsub, messages)) + const takes1 = yield* (Queue.takeAll(dequeue1)) + const takes2 = yield* (Queue.takeAll(dequeue2)) deepStrictEqual([...takes1], messages) deepStrictEqual([...takes2], messages) }) @@ -45,12 +45,12 @@ describe("PubSub", () => { return PubSub.bounded(3).pipe( Effect.flatMap((pubsub) => Effect.scoped( - Effect.gen(function*(_) { - const dequeue1 = yield* _(PubSub.subscribe(pubsub)) - const dequeue2 = yield* _(PubSub.subscribe(pubsub)) - yield* _(PubSub.publishAll(pubsub, messages)) - const takes1 = yield* _(Queue.takeAll(dequeue1)) - const takes2 = yield* _(Queue.takeAll(dequeue2)) + Effect.gen(function*() { + const dequeue1 = yield* (PubSub.subscribe(pubsub)) + const dequeue2 = yield* (PubSub.subscribe(pubsub)) + yield* (PubSub.publishAll(pubsub, messages)) + const takes1 = yield* (Queue.takeAll(dequeue1)) + const takes2 = yield* (Queue.takeAll(dequeue2)) deepStrictEqual([...takes1], messages) deepStrictEqual([...takes2], messages) }) @@ -59,81 +59,75 @@ describe("PubSub", () => { ) }) it.effect("sequential publishers and subscribers with one publisher and one subscriber", () => - Effect.gen(function*($) { + Effect.gen(function*() { const values = Array.range(0, 9) - const deferred1 = yield* $(Deferred.make()) - const deferred2 = yield* $(Deferred.make()) - const pubsub = yield* $(PubSub.bounded(10)) - const subscriber = yield* $( - pipe( - PubSub.subscribe(pubsub), - Effect.flatMap((subscription) => - pipe( - Deferred.succeed(deferred1, void 0), - Effect.zipRight(Deferred.await(deferred2)), - Effect.zipRight(pipe(values, Effect.forEach(() => Queue.take(subscription)))) - ) - ), - Effect.scoped, - Effect.fork - ) + const deferred1 = yield* Deferred.make() + const deferred2 = yield* Deferred.make() + const pubsub = yield* PubSub.bounded(10) + const subscriber = yield* pipe( + PubSub.subscribe(pubsub), + Effect.flatMap((subscription) => + pipe( + Deferred.succeed(deferred1, void 0), + Effect.zipRight(Deferred.await(deferred2)), + Effect.zipRight(pipe(values, Effect.forEach(() => Queue.take(subscription)))) + ) + ), + Effect.scoped, + Effect.fork ) - yield* $(Deferred.await(deferred1)) - yield* $(values, Effect.forEach((n) => PubSub.publish(pubsub, n))) - yield* $(Deferred.succeed(deferred2, void 0)) - const result = yield* $(Fiber.join(subscriber)) + yield* Deferred.await(deferred1) + yield* pipe(values, Effect.forEach((n) => PubSub.publish(pubsub, n))) + yield* Deferred.succeed(deferred2, void 0) + const result = yield* Fiber.join(subscriber) deepStrictEqual(result, values) })) it.effect("sequential publishers and subscribers with one publisher and two subscribers", () => - Effect.gen(function*($) { + Effect.gen(function*() { const values = Array.range(0, 9) - const deferred1 = yield* $(Deferred.make()) - const deferred2 = yield* $(Deferred.make()) - const deferred3 = yield* $(Deferred.make()) - const pubsub = yield* $(PubSub.bounded(10)) - const subscriber1 = yield* $( - pubsub.pipe( - PubSub.subscribe, - Effect.flatMap((subscription) => - pipe( - Deferred.succeed(deferred1, void 0), - Effect.zipRight(Deferred.await(deferred3)), - Effect.zipRight(pipe(values, Effect.forEach(() => Queue.take(subscription)))) - ) - ), - Effect.scoped, - Effect.fork - ) + const deferred1 = yield* Deferred.make() + const deferred2 = yield* Deferred.make() + const deferred3 = yield* Deferred.make() + const pubsub = yield* PubSub.bounded(10) + const subscriber1 = yield* pubsub.pipe( + PubSub.subscribe, + Effect.flatMap((subscription) => + pipe( + Deferred.succeed(deferred1, void 0), + Effect.zipRight(Deferred.await(deferred3)), + Effect.zipRight(pipe(values, Effect.forEach(() => Queue.take(subscription)))) + ) + ), + Effect.scoped, + Effect.fork ) - const subscriber2 = yield* $( - pubsub.pipe( - PubSub.subscribe, - Effect.flatMap((subscription) => - pipe( - Deferred.succeed(deferred2, void 0), - Effect.zipRight(Deferred.await(deferred3)), - Effect.zipRight(pipe(values, Effect.forEach(() => Queue.take(subscription)))) - ) - ), - Effect.scoped, - Effect.fork - ) + const subscriber2 = yield* pubsub.pipe( + PubSub.subscribe, + Effect.flatMap((subscription) => + pipe( + Deferred.succeed(deferred2, void 0), + Effect.zipRight(Deferred.await(deferred3)), + Effect.zipRight(pipe(values, Effect.forEach(() => Queue.take(subscription)))) + ) + ), + Effect.scoped, + Effect.fork ) - yield* $(Deferred.await(deferred1)) - yield* $(Deferred.await(deferred2)) - yield* $(values, Effect.forEach((n) => PubSub.publish(pubsub, n))) - yield* $(Deferred.succeed(deferred3, undefined)) - const result1 = yield* $(Fiber.join(subscriber1)) - const result2 = yield* $(Fiber.join(subscriber2)) + yield* Deferred.await(deferred1) + yield* Deferred.await(deferred2) + yield* pipe(values, Effect.forEach((n) => PubSub.publish(pubsub, n))) + yield* Deferred.succeed(deferred3, undefined) + const result1 = yield* Fiber.join(subscriber1) + const result2 = yield* Fiber.join(subscriber2) deepStrictEqual(result1, values) deepStrictEqual(result2, values) })) it.effect("backpressured concurrent publishers and subscribers - one to one", () => - Effect.gen(function*($) { + Effect.gen(function*() { const values = Array.range(0, 64) - const deferred = yield* $(Deferred.make()) - const pubsub = yield* $(PubSub.bounded(64)) - const subscriber = yield* $( + const deferred = yield* Deferred.make() + const pubsub = yield* PubSub.bounded(64) + const subscriber = yield* pipe( PubSub.subscribe(pubsub), Effect.flatMap((subscription) => pipe( @@ -144,22 +138,22 @@ describe("PubSub", () => { Effect.scoped, Effect.fork ) - yield* $(Deferred.await(deferred)) - yield* $( + yield* Deferred.await(deferred) + yield* pipe( values, Effect.forEach((n) => PubSub.publish(pubsub, n)), Effect.fork ) - const result = yield* $(Fiber.join(subscriber)) + const result = yield* Fiber.join(subscriber) deepStrictEqual(result, values) })) it.effect("backpressured concurrent publishers and subscribers - one to many", () => - Effect.gen(function*($) { + Effect.gen(function*() { const values = Array.range(0, 64) - const deferred1 = yield* $(Deferred.make()) - const deferred2 = yield* $(Deferred.make()) - const pubsub = yield* $(PubSub.bounded(64)) - const subscriber1 = yield* $( + const deferred1 = yield* Deferred.make() + const deferred2 = yield* Deferred.make() + const pubsub = yield* PubSub.bounded(64) + const subscriber1 = yield* pipe( PubSub.subscribe(pubsub), Effect.flatMap((subscription) => pipe( @@ -170,7 +164,7 @@ describe("PubSub", () => { Effect.scoped, Effect.fork ) - const subscriber2 = yield* $( + const subscriber2 = yield* pipe( PubSub.subscribe(pubsub), Effect.flatMap((subscription) => pipe( @@ -181,25 +175,25 @@ describe("PubSub", () => { Effect.scoped, Effect.fork ) - yield* $(Deferred.await(deferred1)) - yield* $(Deferred.await(deferred2)) - yield* $( + yield* Deferred.await(deferred1) + yield* Deferred.await(deferred2) + yield* pipe( values, Effect.forEach((n) => PubSub.publish(pubsub, n)), Effect.fork ) - const result1 = yield* $(Fiber.join(subscriber1)) - const result2 = yield* $(Fiber.join(subscriber2)) + const result1 = yield* Fiber.join(subscriber1) + const result2 = yield* Fiber.join(subscriber2) deepStrictEqual(result1, values) deepStrictEqual(result2, values) })) it.effect("backpressured concurrent publishers and subscribers - many to many", () => - Effect.gen(function*($) { + Effect.gen(function*() { const values = Array.range(1, 64) - const deferred1 = yield* $(Deferred.make()) - const deferred2 = yield* $(Deferred.make()) - const pubsub = yield* $(PubSub.bounded(64 * 2)) - const subscriber1 = yield* $( + const deferred1 = yield* Deferred.make() + const deferred2 = yield* Deferred.make() + const pubsub = yield* PubSub.bounded(64 * 2) + const subscriber1 = yield* pipe( PubSub.subscribe(pubsub), Effect.flatMap((subscription) => pipe( @@ -214,7 +208,7 @@ describe("PubSub", () => { Effect.scoped, Effect.fork ) - const subscriber2 = yield* $( + const subscriber2 = yield* pipe( PubSub.subscribe(pubsub), Effect.flatMap((subscription) => pipe( @@ -229,17 +223,17 @@ describe("PubSub", () => { Effect.scoped, Effect.fork ) - yield* $(Deferred.await(deferred1)) - yield* $(Deferred.await(deferred2)) - const fiber = yield* $( + yield* Deferred.await(deferred1) + yield* Deferred.await(deferred2) + const fiber = yield* pipe( values, Effect.forEach((n) => PubSub.publish(pubsub, n)), Effect.fork ) - yield* $(values, Array.map((n) => -n), Effect.forEach((n) => PubSub.publish(pubsub, n)), Effect.fork) - const result1 = yield* $(Fiber.join(subscriber1)) - const result2 = yield* $(Fiber.join(subscriber2)) - yield* $(Fiber.join(fiber)) + yield* pipe(values, Array.map((n) => -n), Effect.forEach((n) => PubSub.publish(pubsub, n)), Effect.fork) + const result1 = yield* Fiber.join(subscriber1) + const result2 = yield* Fiber.join(subscriber2) + yield* Fiber.join(fiber) deepStrictEqual(pipe(result1, Array.filter((n) => n > 0)), values) deepStrictEqual( pipe(result1, Array.filter((n) => n < 0)), @@ -252,11 +246,11 @@ describe("PubSub", () => { ) })) it.effect("dropping concurrent publishers and subscribers - one to one", () => - Effect.gen(function*($) { + Effect.gen(function*() { const values = Array.range(0, 64) - const deferred = yield* $(Deferred.make()) - const pubsub = yield* $(PubSub.dropping(64)) - const subscriber = yield* $( + const deferred = yield* Deferred.make() + const pubsub = yield* PubSub.dropping(64) + const subscriber = yield* pipe( PubSub.subscribe(pubsub), Effect.flatMap((subscription) => pipe( @@ -267,22 +261,22 @@ describe("PubSub", () => { Effect.scoped, Effect.fork ) - yield* $(Deferred.await(deferred)) - yield* $( + yield* Deferred.await(deferred) + yield* pipe( values, Effect.forEach((n) => PubSub.publish(pubsub, n)), Effect.fork ) - const result = yield* $(Fiber.join(subscriber)) + const result = yield* Fiber.join(subscriber) deepStrictEqual(result, values) })) it.effect("dropping concurrent publishers and subscribers - one to many", () => - Effect.gen(function*($) { + Effect.gen(function*() { const values = Array.range(0, 64) - const deferred1 = yield* $(Deferred.make()) - const deferred2 = yield* $(Deferred.make()) - const pubsub = yield* $(PubSub.dropping(64)) - const subscriber1 = yield* $( + const deferred1 = yield* Deferred.make() + const deferred2 = yield* Deferred.make() + const pubsub = yield* PubSub.dropping(64) + const subscriber1 = yield* pipe( PubSub.subscribe(pubsub), Effect.flatMap((subscription) => pipe( @@ -293,7 +287,7 @@ describe("PubSub", () => { Effect.scoped, Effect.fork ) - const subscriber2 = yield* $( + const subscriber2 = yield* pipe( PubSub.subscribe(pubsub), Effect.flatMap((subscription) => pipe( @@ -304,25 +298,25 @@ describe("PubSub", () => { Effect.scoped, Effect.fork ) - yield* $(Deferred.await(deferred1)) - yield* $(Deferred.await(deferred2)) - yield* $( + yield* Deferred.await(deferred1) + yield* Deferred.await(deferred2) + yield* pipe( values, Effect.forEach((n) => PubSub.publish(pubsub, n)), Effect.fork ) - const result1 = yield* $(Fiber.join(subscriber1)) - const result2 = yield* $(Fiber.join(subscriber2)) + const result1 = yield* Fiber.join(subscriber1) + const result2 = yield* Fiber.join(subscriber2) deepStrictEqual(result1, values) deepStrictEqual(result2, values) })) it.effect("dropping concurrent publishers and subscribers - many to many", () => - Effect.gen(function*($) { + Effect.gen(function*() { const values = Array.range(1, 64) - const deferred1 = yield* $(Deferred.make()) - const deferred2 = yield* $(Deferred.make()) - const pubsub = yield* $(PubSub.dropping(64 * 2)) - const subscriber1 = yield* $( + const deferred1 = yield* Deferred.make() + const deferred2 = yield* Deferred.make() + const pubsub = yield* PubSub.dropping(64 * 2) + const subscriber1 = yield* pipe( PubSub.subscribe(pubsub), Effect.flatMap((subscription) => pipe( @@ -337,7 +331,7 @@ describe("PubSub", () => { Effect.scoped, Effect.fork ) - const subscriber2 = yield* $( + const subscriber2 = yield* pipe( PubSub.subscribe(pubsub), Effect.flatMap((subscription) => pipe( @@ -352,17 +346,17 @@ describe("PubSub", () => { Effect.scoped, Effect.fork ) - yield* $(Deferred.await(deferred1)) - yield* $(Deferred.await(deferred2)) - const fiber = yield* $( + yield* Deferred.await(deferred1) + yield* Deferred.await(deferred2) + const fiber = yield* pipe( values, Effect.forEach((n) => PubSub.publish(pubsub, n)), Effect.fork ) - yield* $(values, Array.map((n) => -n), Effect.forEach((n) => PubSub.publish(pubsub, n)), Effect.fork) - const result1 = yield* $(Fiber.join(subscriber1)) - const result2 = yield* $(Fiber.join(subscriber2)) - yield* $(Fiber.join(fiber)) + yield* pipe(values, Array.map((n) => -n), Effect.forEach((n) => PubSub.publish(pubsub, n)), Effect.fork) + const result1 = yield* Fiber.join(subscriber1) + const result2 = yield* Fiber.join(subscriber2) + yield* Fiber.join(fiber) deepStrictEqual(pipe(result1, Array.filter((n) => n > 0)), values) deepStrictEqual( pipe(result1, Array.filter((n) => n < 0)), @@ -375,11 +369,11 @@ describe("PubSub", () => { ) })) it.effect("sliding concurrent publishers and subscribers - one to one", () => - Effect.gen(function*($) { + Effect.gen(function*() { const values = Array.range(0, 64) - const deferred = yield* $(Deferred.make()) - const pubsub = yield* $(PubSub.sliding(64)) - const subscriber = yield* $( + const deferred = yield* Deferred.make() + const pubsub = yield* PubSub.sliding(64) + const subscriber = yield* pipe( PubSub.subscribe(pubsub), Effect.flatMap((subscription) => pipe( @@ -390,22 +384,22 @@ describe("PubSub", () => { Effect.scoped, Effect.fork ) - yield* $(Deferred.await(deferred)) - yield* $( + yield* Deferred.await(deferred) + yield* pipe( values, Effect.forEach((n) => PubSub.publish(pubsub, n)), Effect.fork ) - const result = yield* $(Fiber.join(subscriber)) + const result = yield* Fiber.join(subscriber) deepStrictEqual(result, values) })) it.effect("sliding concurrent publishers and subscribers - one to many", () => - Effect.gen(function*($) { + Effect.gen(function*() { const values = Array.range(0, 64) - const deferred1 = yield* $(Deferred.make()) - const deferred2 = yield* $(Deferred.make()) - const pubsub = yield* $(PubSub.sliding(64)) - const subscriber1 = yield* $( + const deferred1 = yield* Deferred.make() + const deferred2 = yield* Deferred.make() + const pubsub = yield* PubSub.sliding(64) + const subscriber1 = yield* pipe( PubSub.subscribe(pubsub), Effect.flatMap((subscription) => pipe( @@ -416,7 +410,7 @@ describe("PubSub", () => { Effect.scoped, Effect.fork ) - const subscriber2 = yield* $( + const subscriber2 = yield* pipe( PubSub.subscribe(pubsub), Effect.flatMap((subscription) => pipe( @@ -427,25 +421,25 @@ describe("PubSub", () => { Effect.scoped, Effect.fork ) - yield* $(Deferred.await(deferred1)) - yield* $(Deferred.await(deferred2)) - yield* $( + yield* Deferred.await(deferred1) + yield* Deferred.await(deferred2) + yield* pipe( values, Effect.forEach((n) => PubSub.publish(pubsub, n)), Effect.fork ) - const result1 = yield* $(Fiber.join(subscriber1)) - const result2 = yield* $(Fiber.join(subscriber2)) + const result1 = yield* Fiber.join(subscriber1) + const result2 = yield* Fiber.join(subscriber2) deepStrictEqual(result1, values) deepStrictEqual(result2, values) })) it.effect("sliding concurrent publishers and subscribers - many to many", () => - Effect.gen(function*($) { + Effect.gen(function*() { const values = Array.range(1, 64) - const deferred1 = yield* $(Deferred.make()) - const deferred2 = yield* $(Deferred.make()) - const pubsub = yield* $(PubSub.sliding(64 * 2)) - const subscriber1 = yield* $( + const deferred1 = yield* Deferred.make() + const deferred2 = yield* Deferred.make() + const pubsub = yield* PubSub.sliding(64 * 2) + const subscriber1 = yield* pipe( PubSub.subscribe(pubsub), Effect.flatMap((subscription) => pipe( @@ -460,7 +454,7 @@ describe("PubSub", () => { Effect.scoped, Effect.fork ) - const subscriber2 = yield* $( + const subscriber2 = yield* pipe( PubSub.subscribe(pubsub), Effect.flatMap((subscription) => pipe( @@ -475,17 +469,17 @@ describe("PubSub", () => { Effect.scoped, Effect.fork ) - yield* $(Deferred.await(deferred1)) - yield* $(Deferred.await(deferred2)) - const fiber = yield* $( + yield* Deferred.await(deferred1) + yield* Deferred.await(deferred2) + const fiber = yield* pipe( values, Effect.forEach((n) => PubSub.publish(pubsub, n)), Effect.fork ) - yield* $(values, Array.map((n) => -n), Effect.forEach((n) => PubSub.publish(pubsub, n)), Effect.fork) - const result1 = yield* $(Fiber.join(subscriber1)) - const result2 = yield* $(Fiber.join(subscriber2)) - yield* $(Fiber.join(fiber)) + yield* pipe(values, Array.map((n) => -n), Effect.forEach((n) => PubSub.publish(pubsub, n)), Effect.fork) + const result1 = yield* Fiber.join(subscriber1) + const result2 = yield* Fiber.join(subscriber2) + yield* Fiber.join(fiber) deepStrictEqual(pipe(result1, Array.filter((n) => n > 0)), values) deepStrictEqual( pipe(result1, Array.filter((n) => n < 0)), @@ -498,11 +492,11 @@ describe("PubSub", () => { ) })) it.effect("unbounded concurrent publishers and subscribers - one to one", () => - Effect.gen(function*($) { + Effect.gen(function*() { const values = Array.range(0, 64) - const deferred = yield* $(Deferred.make()) - const pubsub = yield* $(PubSub.unbounded()) - const subscriber = yield* $( + const deferred = yield* Deferred.make() + const pubsub = yield* PubSub.unbounded() + const subscriber = yield* pipe( PubSub.subscribe(pubsub), Effect.flatMap((subscription) => pipe( @@ -513,23 +507,23 @@ describe("PubSub", () => { Effect.scoped, Effect.fork ) - yield* $(Deferred.await(deferred)) - yield* $( + yield* Deferred.await(deferred) + yield* pipe( values, Effect.forEach((n) => PubSub.publish(pubsub, n)), Effect.fork ) - const result = yield* $(Fiber.join(subscriber)) + const result = yield* Fiber.join(subscriber) deepStrictEqual(result, values) })) it.effect("unbounded concurrent publishers and subscribers - one to many", () => - Effect.gen(function*($) { + Effect.gen(function*() { const values = Array.range(0, 64) - const deferred1 = yield* $(Deferred.make()) - const deferred2 = yield* $(Deferred.make()) - const pubsub = yield* $(PubSub.unbounded()) - const subscriber1 = yield* $( + const deferred1 = yield* Deferred.make() + const deferred2 = yield* Deferred.make() + const pubsub = yield* PubSub.unbounded() + const subscriber1 = yield* pipe( PubSub.subscribe(pubsub), Effect.flatMap((subscription) => pipe( @@ -540,7 +534,7 @@ describe("PubSub", () => { Effect.scoped, Effect.fork ) - const subscriber2 = yield* $( + const subscriber2 = yield* pipe( PubSub.subscribe(pubsub), Effect.flatMap((subscription) => pipe( @@ -551,25 +545,25 @@ describe("PubSub", () => { Effect.scoped, Effect.fork ) - yield* $(Deferred.await(deferred1)) - yield* $(Deferred.await(deferred2)) - yield* $( + yield* Deferred.await(deferred1) + yield* Deferred.await(deferred2) + yield* pipe( values, Effect.forEach((n) => PubSub.publish(pubsub, n)), Effect.fork ) - const result1 = yield* $(Fiber.join(subscriber1)) - const result2 = yield* $(Fiber.join(subscriber2)) + const result1 = yield* Fiber.join(subscriber1) + const result2 = yield* Fiber.join(subscriber2) deepStrictEqual(result1, values) deepStrictEqual(result2, values) })) it.effect("unbounded concurrent publishers and subscribers - many to many", () => - Effect.gen(function*($) { + Effect.gen(function*() { const values = Array.range(1, 64) - const deferred1 = yield* $(Deferred.make()) - const deferred2 = yield* $(Deferred.make()) - const pubsub = yield* $(PubSub.unbounded()) - const subscriber1 = yield* $( + const deferred1 = yield* Deferred.make() + const deferred2 = yield* Deferred.make() + const pubsub = yield* PubSub.unbounded() + const subscriber1 = yield* pipe( PubSub.subscribe(pubsub), Effect.flatMap((subscription) => pipe( @@ -585,7 +579,7 @@ describe("PubSub", () => { Effect.fork ) - const subscriber2 = yield* $( + const subscriber2 = yield* pipe( PubSub.subscribe(pubsub), Effect.flatMap((subscription) => pipe( @@ -600,17 +594,17 @@ describe("PubSub", () => { Effect.scoped, Effect.fork ) - yield* $(Deferred.await(deferred1)) - yield* $(Deferred.await(deferred2)) - const fiber = yield* $( + yield* Deferred.await(deferred1) + yield* Deferred.await(deferred2) + const fiber = yield* pipe( values, Effect.forEach((n) => PubSub.publish(pubsub, n)), Effect.fork ) - yield* $(values, Array.map((n) => -n), Effect.forEach((n) => PubSub.publish(pubsub, n)), Effect.fork) - const result1 = yield* $(Fiber.join(subscriber1)) - const result2 = yield* $(Fiber.join(subscriber2)) - yield* $(Fiber.join(fiber)) + yield* pipe(values, Array.map((n) => -n), Effect.forEach((n) => PubSub.publish(pubsub, n)), Effect.fork) + const result1 = yield* Fiber.join(subscriber1) + const result2 = yield* Fiber.join(subscriber2) + yield* Fiber.join(fiber) deepStrictEqual(Array.filter(result1, (n) => n > 0), values) deepStrictEqual( Array.filter(result1, (n) => n < 0), diff --git a/packages/effect/test/Queue.test.ts b/packages/effect/test/Queue.test.ts index aee2ad34a3..590b42dc80 100644 --- a/packages/effect/test/Queue.test.ts +++ b/packages/effect/test/Queue.test.ts @@ -21,315 +21,315 @@ export const waitForSize = (queue: Queue.Queue, size: number): Effect.Effe describe("Queue", () => { it.effect("bounded - offerAll returns true when there is enough space", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(5)) - const result = yield* $(Queue.offerAll(queue, [1, 2, 3])) + Effect.gen(function*() { + const queue = yield* Queue.bounded(5) + const result = yield* Queue.offerAll(queue, [1, 2, 3]) assertTrue(result) })) it.effect("dropping - with offerAll", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.dropping(4)) - const result1 = yield* $(Queue.offerAll(queue, [1, 2, 3, 4, 5])) - const result2 = yield* $(Queue.takeAll(queue)) + Effect.gen(function*() { + const queue = yield* Queue.dropping(4) + const result1 = yield* Queue.offerAll(queue, [1, 2, 3, 4, 5]) + const result2 = yield* Queue.takeAll(queue) assertFalse(result1) deepStrictEqual(Chunk.toReadonlyArray(result2), [1, 2, 3, 4]) })) it.effect("dropping - with offerAll, check offer returns false", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.dropping(2)) - const result1 = yield* $(Queue.offerAll(queue, [1, 2, 3, 4, 5, 6])) - const result2 = yield* $(Queue.takeAll(queue)) + Effect.gen(function*() { + const queue = yield* Queue.dropping(2) + const result1 = yield* Queue.offerAll(queue, [1, 2, 3, 4, 5, 6]) + const result2 = yield* Queue.takeAll(queue) assertFalse(result1) deepStrictEqual(Chunk.toReadonlyArray(result2), [1, 2]) })) it.effect("dropping - with offerAll, check ordering", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.dropping(128)) - const result1 = yield* $(Queue.offerAll(queue, Array.makeBy(256, (i) => i + 1))) - const result2 = yield* $(Queue.takeAll(queue)) + Effect.gen(function*() { + const queue = yield* Queue.dropping(128) + const result1 = yield* Queue.offerAll(queue, Array.makeBy(256, (i) => i + 1)) + const result2 = yield* Queue.takeAll(queue) assertFalse(result1) deepStrictEqual(Chunk.toReadonlyArray(result2), Array.makeBy(128, (i) => i + 1)) })) it.effect("dropping - with pending taker", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.dropping(2)) - const fiber = yield* $(Effect.fork(Queue.take(queue))) - yield* $(waitForSize(queue, -1)) - const result1 = yield* $(Queue.offerAll(queue, [1, 2, 3, 4])) - const result2 = yield* $(Fiber.join(fiber)) + Effect.gen(function*() { + const queue = yield* Queue.dropping(2) + const fiber = yield* Effect.fork(Queue.take(queue)) + yield* waitForSize(queue, -1) + const result1 = yield* Queue.offerAll(queue, [1, 2, 3, 4]) + const result2 = yield* Fiber.join(fiber) assertFalse(result1) strictEqual(result2, 1) })) it.effect("sliding - with offer", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.sliding(2)) - yield* $(Queue.offer(queue, 1)) - const result1 = yield* $(Queue.offer(queue, 2)) - const result2 = yield* $(Queue.offer(queue, 3)) - const result3 = yield* $(Queue.takeAll(queue)) + Effect.gen(function*() { + const queue = yield* Queue.sliding(2) + yield* Queue.offer(queue, 1) + const result1 = yield* Queue.offer(queue, 2) + const result2 = yield* Queue.offer(queue, 3) + const result3 = yield* Queue.takeAll(queue) assertTrue(result1) assertTrue(result2) deepStrictEqual(Chunk.toReadonlyArray(result3), [2, 3]) })) it.effect("sliding - with offerAll", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.sliding(2)) - const result1 = yield* $(Queue.offerAll(queue, [1, 2, 3])) - const result2 = yield* $(Queue.size(queue)) + Effect.gen(function*() { + const queue = yield* Queue.sliding(2) + const result1 = yield* Queue.offerAll(queue, [1, 2, 3]) + const result2 = yield* Queue.size(queue) assertTrue(result1) strictEqual(result2, 2) })) it.effect("sliding - with enough capacity", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.sliding(100)) - yield* $(Queue.offer(queue, 1)) - yield* $(Queue.offer(queue, 2)) - yield* $(Queue.offer(queue, 3)) - const result = yield* $(Queue.takeAll(queue)) + Effect.gen(function*() { + const queue = yield* Queue.sliding(100) + yield* Queue.offer(queue, 1) + yield* Queue.offer(queue, 2) + yield* Queue.offer(queue, 3) + const result = yield* Queue.takeAll(queue) deepStrictEqual(Chunk.toReadonlyArray(result), [1, 2, 3]) })) it.effect("sliding - with offerAll and takeAll", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.sliding(2)) - const result1 = yield* $(Queue.offerAll(queue, [1, 2, 3, 4, 5, 6])) - const result2 = yield* $(Queue.takeAll(queue)) + Effect.gen(function*() { + const queue = yield* Queue.sliding(2) + const result1 = yield* Queue.offerAll(queue, [1, 2, 3, 4, 5, 6]) + const result2 = yield* Queue.takeAll(queue) assertTrue(result1) deepStrictEqual(Chunk.toReadonlyArray(result2), [5, 6]) })) it.effect("sliding - with pending taker", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.sliding(2)) - yield* $(Effect.fork(Queue.take(queue))) - yield* $(waitForSize(queue, -1)) - const result1 = yield* $(Queue.offerAll(queue, [1, 2, 3, 4])) - const result2 = yield* $(Queue.take(queue)) + Effect.gen(function*() { + const queue = yield* Queue.sliding(2) + yield* Effect.fork(Queue.take(queue)) + yield* waitForSize(queue, -1) + const result1 = yield* Queue.offerAll(queue, [1, 2, 3, 4]) + const result2 = yield* Queue.take(queue) assertTrue(result1) strictEqual(result2, 3) })) it.effect("sliding - check offerAll returns true", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.sliding(5)) - const result = yield* $(Queue.offerAll(queue, [1, 2, 3])) + Effect.gen(function*() { + const queue = yield* Queue.sliding(5) + const result = yield* Queue.offerAll(queue, [1, 2, 3]) assertTrue(result) })) it.effect("awaitShutdown - once", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(3)) - const deferred = yield* $(Deferred.make()) - yield* $(Queue.awaitShutdown(queue), Effect.zipRight(Deferred.succeed(deferred, true)), Effect.fork) - yield* $(Queue.shutdown(queue)) - const result = yield* $(Deferred.await(deferred)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(3) + const deferred = yield* Deferred.make() + yield* pipe(Queue.awaitShutdown(queue), Effect.zipRight(Deferred.succeed(deferred, true)), Effect.fork) + yield* Queue.shutdown(queue) + const result = yield* Deferred.await(deferred) assertTrue(result) })) it.effect("awaitShutdown - multiple", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(3)) - const deferred1 = yield* $(Deferred.make()) - const deferred2 = yield* $(Deferred.make()) - yield* $(Queue.awaitShutdown(queue), Effect.zipRight(Deferred.succeed(deferred1, true)), Effect.fork) - yield* $(Queue.awaitShutdown(queue), Effect.zipRight(Deferred.succeed(deferred2, true)), Effect.fork) - yield* $(Queue.shutdown(queue)) - const result1 = yield* $(Deferred.await(deferred1)) - const result2 = yield* $(Deferred.await(deferred2)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(3) + const deferred1 = yield* Deferred.make() + const deferred2 = yield* Deferred.make() + yield* pipe(Queue.awaitShutdown(queue), Effect.zipRight(Deferred.succeed(deferred1, true)), Effect.fork) + yield* pipe(Queue.awaitShutdown(queue), Effect.zipRight(Deferred.succeed(deferred2, true)), Effect.fork) + yield* Queue.shutdown(queue) + const result1 = yield* Deferred.await(deferred1) + const result2 = yield* Deferred.await(deferred2) assertTrue(result1) assertTrue(result2) })) it.effect("offers are suspended by back pressure", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(10)) - const ref = yield* $(Ref.make(true)) - yield* $(queue.offer(1), Effect.repeatN(9)) - const fiber = yield* $(Queue.offer(queue, 2), Effect.zipRight(Ref.set(ref, false)), Effect.fork) - yield* $(waitForSize(queue, 11)) - const result = yield* $(Ref.get(ref)) - yield* $(Fiber.interrupt(fiber)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(10) + const ref = yield* Ref.make(true) + yield* pipe(queue.offer(1), Effect.repeatN(9)) + const fiber = yield* pipe(Queue.offer(queue, 2), Effect.zipRight(Ref.set(ref, false)), Effect.fork) + yield* waitForSize(queue, 11) + const result = yield* Ref.get(ref) + yield* Fiber.interrupt(fiber) assertTrue(result) })) it.effect("back pressured offers are retrieved", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(10)) - const ref = yield* $(Ref.make>([])) + Effect.gen(function*() { + const queue = yield* Queue.bounded(10) + const ref = yield* Ref.make>([]) const values = Array.makeBy(10, (i) => i + 1) - const fiber = yield* $(Effect.forkAll(values.map((n) => Queue.offer(queue, n)))) - yield* $(waitForSize(queue, 10)) - yield* $( + const fiber = yield* Effect.forkAll(values.map((n) => Queue.offer(queue, n))) + yield* waitForSize(queue, 10) + yield* pipe( Queue.take(queue), Effect.flatMap((n) => Ref.update(ref, (values) => [...values, n])), Effect.repeatN(9) ) - const result = yield* $(Ref.get(ref)) - yield* $(Fiber.join(fiber)) + const result = yield* Ref.get(ref) + yield* Fiber.join(fiber) deepStrictEqual(result, values) })) it.effect("back-pressured offer completes after take", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(2)) - yield* $(Queue.offerAll(queue, [1, 2])) - const fiber = yield* $(Queue.offer(queue, 3), Effect.fork) - yield* $(waitForSize(queue, 3)) - const result1 = yield* $(Queue.take(queue)) - const result2 = yield* $(Queue.take(queue)) - yield* $(Fiber.join(fiber)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(2) + yield* Queue.offerAll(queue, [1, 2]) + const fiber = yield* pipe(Queue.offer(queue, 3), Effect.fork) + yield* waitForSize(queue, 3) + const result1 = yield* Queue.take(queue) + const result2 = yield* Queue.take(queue) + yield* Fiber.join(fiber) strictEqual(result1, 1) strictEqual(result2, 2) })) it.effect("back-pressured offer completes after takeAll", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(2)) - yield* $(Queue.offerAll(queue, [1, 2])) - const fiber = yield* $(Queue.offer(queue, 3), Effect.fork) - yield* $(waitForSize(queue, 3)) - const result = yield* $(Queue.takeAll(queue)) - yield* $(Fiber.join(fiber)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(2) + yield* Queue.offerAll(queue, [1, 2]) + const fiber = yield* pipe(Queue.offer(queue, 3), Effect.fork) + yield* waitForSize(queue, 3) + const result = yield* Queue.takeAll(queue) + yield* Fiber.join(fiber) deepStrictEqual(Chunk.toReadonlyArray(result), [1, 2]) })) it.effect("back-pressured offer completes after takeUpTo", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(2)) - yield* $(Queue.offerAll(queue, [1, 2])) - const fiber = yield* $(Queue.offer(queue, 3), Effect.fork) - yield* $(waitForSize(queue, 3)) - const result = yield* $(Queue.takeUpTo(queue, 2)) - yield* $(Fiber.join(fiber)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(2) + yield* Queue.offerAll(queue, [1, 2]) + const fiber = yield* pipe(Queue.offer(queue, 3), Effect.fork) + yield* waitForSize(queue, 3) + const result = yield* Queue.takeUpTo(queue, 2) + yield* Fiber.join(fiber) deepStrictEqual(Chunk.toReadonlyArray(result), [1, 2]) })) it.effect("back-pressured offerAll completes after takeAll", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(2)) - yield* $(Queue.offerAll(queue, [1, 2])) - const fiber = yield* $(Queue.offerAll(queue, [3, 4, 5]), Effect.fork) - yield* $(waitForSize(queue, 5)) - const result1 = yield* $(Queue.takeAll(queue)) - const result2 = yield* $(Queue.takeAll(queue)) - const result3 = yield* $(Queue.takeAll(queue)) - yield* $(Fiber.join(fiber)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(2) + yield* Queue.offerAll(queue, [1, 2]) + const fiber = yield* pipe(Queue.offerAll(queue, [3, 4, 5]), Effect.fork) + yield* waitForSize(queue, 5) + const result1 = yield* Queue.takeAll(queue) + const result2 = yield* Queue.takeAll(queue) + const result3 = yield* Queue.takeAll(queue) + yield* Fiber.join(fiber) deepStrictEqual(Chunk.toReadonlyArray(result1), [1, 2]) deepStrictEqual(Chunk.toReadonlyArray(result2), [3, 4]) deepStrictEqual(Chunk.toReadonlyArray(result3), [5]) })) it.effect("take interruption", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(100)) - const fiber = yield* $(Effect.fork(Queue.take(queue))) - yield* $(waitForSize(queue, -1)) - yield* $(Fiber.interrupt(fiber)) - const result = yield* $(Queue.size(queue)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(100) + const fiber = yield* Effect.fork(Queue.take(queue)) + yield* waitForSize(queue, -1) + yield* Fiber.interrupt(fiber) + const result = yield* Queue.size(queue) strictEqual(result, 0) })) it.effect("offer interruption", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(2)) - yield* $(Queue.offer(queue, 1)) - yield* $(Queue.offer(queue, 1)) - const fiber = yield* $(Queue.offer(queue, 1), Effect.fork) - yield* $(waitForSize(queue, 3)) - yield* $(Fiber.interrupt(fiber)) - const result = yield* $(Queue.size(queue)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(2) + yield* Queue.offer(queue, 1) + yield* Queue.offer(queue, 1) + const fiber = yield* pipe(Queue.offer(queue, 1), Effect.fork) + yield* waitForSize(queue, 3) + yield* Fiber.interrupt(fiber) + const result = yield* Queue.size(queue) strictEqual(result, 2) })) it.effect("offerAll with takeAll", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(10)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(10) const values = Array.range(1, 10) - yield* $(Queue.offerAll(queue, values)) - yield* $(waitForSize(queue, 10)) - const result = yield* $(Queue.takeAll(queue)) + yield* Queue.offerAll(queue, values) + yield* waitForSize(queue, 10) + const result = yield* Queue.takeAll(queue) deepStrictEqual(Chunk.toReadonlyArray(result), Array.range(1, 10)) })) it.effect("offerAll with takeAll and back pressure", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(2)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(2) const values = Array.range(1, 3) - const fiber = yield* $(Queue.offerAll(queue, values), Effect.fork) - const size = yield* $(waitForSize(queue, 3)) - const result = yield* $(Queue.takeAll(queue)) - yield* $(Fiber.interrupt(fiber)) + const fiber = yield* pipe(Queue.offerAll(queue, values), Effect.fork) + const size = yield* waitForSize(queue, 3) + const result = yield* Queue.takeAll(queue) + yield* Fiber.interrupt(fiber) strictEqual(size, 3) deepStrictEqual(Chunk.toReadonlyArray(result), [1, 2]) })) it.effect("offerAll with takeAll and back pressure + interruption", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(2)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(2) const values1 = Array.range(1, 2) const values2 = Array.range(3, 4) - yield* $(Queue.offerAll(queue, values1)) - const fiber = yield* $(Queue.offerAll(queue, values2), Effect.fork) - yield* $(waitForSize(queue, 4)) - yield* $(Fiber.interrupt(fiber)) - const result1 = yield* $(Queue.takeAll(queue)) - const result2 = yield* $(Queue.takeAll(queue)) + yield* Queue.offerAll(queue, values1) + const fiber = yield* pipe(Queue.offerAll(queue, values2), Effect.fork) + yield* waitForSize(queue, 4) + yield* Fiber.interrupt(fiber) + const result1 = yield* Queue.takeAll(queue) + const result2 = yield* Queue.takeAll(queue) deepStrictEqual(Chunk.toReadonlyArray(result1), values1) assertTrue(Chunk.isEmpty(result2)) })) it.effect("offerAll with takeAll and back pressure, check ordering", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(64)) - const fiber = yield* $(Queue.offerAll(queue, Array.makeBy(128, (i) => i + 1)), Effect.fork) - yield* $(waitForSize(queue, 128)) - const result = yield* $(Queue.takeAll(queue)) - yield* $(Fiber.interrupt(fiber)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(64) + const fiber = yield* pipe(Queue.offerAll(queue, Array.makeBy(128, (i) => i + 1)), Effect.fork) + yield* waitForSize(queue, 128) + const result = yield* Queue.takeAll(queue) + yield* Fiber.interrupt(fiber) deepStrictEqual(Chunk.toReadonlyArray(result), Array.range(1, 64)) })) it.effect("offerAll with pending takers", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(50)) - const takers = yield* $(Effect.forkAll(Array.makeBy(100, () => Queue.take(queue)))) - yield* $(waitForSize(queue, -100)) - yield* $(queue.offerAll(Array.makeBy(100, (i) => i + 1))) - const result = yield* $(Fiber.join(takers)) - const size = yield* $(Queue.size(queue)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(50) + const takers = yield* pipe(Effect.forkAll(Array.makeBy(100, () => Queue.take(queue)))) + yield* waitForSize(queue, -100) + yield* queue.offerAll(Array.makeBy(100, (i) => i + 1)) + const result = yield* Fiber.join(takers) + const size = yield* Queue.size(queue) strictEqual(size, 0) deepStrictEqual(result, Array.range(1, 100)) })) it.effect("offerAll with pending takers, check ordering", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(256)) - const takers = yield* $(Effect.forkAll(Array.makeBy(64, () => Queue.take(queue)))) - yield* $(waitForSize(queue, -64)) - yield* $(Queue.offerAll(queue, Array.makeBy(128, (i) => i + 1))) - const result = yield* $(Fiber.join(takers)) - const size = yield* $(Queue.size(queue)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(256) + const takers = yield* pipe(Effect.forkAll(Array.makeBy(64, () => Queue.take(queue)))) + yield* waitForSize(queue, -64) + yield* Queue.offerAll(queue, Array.makeBy(128, (i) => i + 1)) + const result = yield* Fiber.join(takers) + const size = yield* Queue.size(queue) strictEqual(size, 64) deepStrictEqual(result, Array.range(1, 64)) })) it.effect("offerAll with pending takers, check ordering of taker resolution", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(200)) - const takers = yield* $(Effect.forkAll(Array.makeBy(100, () => Queue.take(queue)))) - yield* $(waitForSize(queue, -100)) - const fiber = yield* $(Effect.forkAll(Array.makeBy(100, () => Queue.take(queue)))) - yield* $(waitForSize(queue, -200)) - yield* $(Queue.offerAll(queue, Array.makeBy(100, (i) => i + 1))) - const result = yield* $(Fiber.join(takers)) - const size = yield* $(Queue.size(queue)) - yield* $(Fiber.interrupt(fiber)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(200) + const takers = yield* pipe(Effect.forkAll(Array.makeBy(100, () => Queue.take(queue)))) + yield* waitForSize(queue, -100) + const fiber = yield* pipe(Effect.forkAll(Array.makeBy(100, () => Queue.take(queue)))) + yield* waitForSize(queue, -200) + yield* Queue.offerAll(queue, Array.makeBy(100, (i) => i + 1)) + const result = yield* Fiber.join(takers) + const size = yield* Queue.size(queue) + yield* Fiber.interrupt(fiber) strictEqual(size, -100) deepStrictEqual(result, Array.range(1, 100)) })) it.effect("offerAll with take and back pressure", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(2)) - yield* $(Queue.offerAll(queue, [1, 2, 3]), Effect.fork) - yield* $(waitForSize(queue, 3)) - const result1 = yield* $(Queue.take(queue)) - const result2 = yield* $(Queue.take(queue)) - const result3 = yield* $(Queue.take(queue)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(2) + yield* pipe(Queue.offerAll(queue, [1, 2, 3]), Effect.fork) + yield* waitForSize(queue, 3) + const result1 = yield* Queue.take(queue) + const result2 = yield* Queue.take(queue) + const result3 = yield* Queue.take(queue) strictEqual(result1, 1) strictEqual(result2, 2) strictEqual(result3, 3) })) it.effect("offerAll multiple with back pressure", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(2)) - yield* $(Queue.offerAll(queue, [1, 2, 3]), Effect.fork) - yield* $(waitForSize(queue, 3)) - yield* $(Queue.offerAll(queue, [4, 5]), Effect.fork) - yield* $(waitForSize(queue, 5)) - const result1 = yield* $(Queue.take(queue)) - const result2 = yield* $(Queue.take(queue)) - const result3 = yield* $(Queue.take(queue)) - const result4 = yield* $(Queue.take(queue)) - const result5 = yield* $(Queue.take(queue)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(2) + yield* pipe(Queue.offerAll(queue, [1, 2, 3]), Effect.fork) + yield* waitForSize(queue, 3) + yield* pipe(Queue.offerAll(queue, [4, 5]), Effect.fork) + yield* waitForSize(queue, 5) + const result1 = yield* Queue.take(queue) + const result2 = yield* Queue.take(queue) + const result3 = yield* Queue.take(queue) + const result4 = yield* Queue.take(queue) + const result5 = yield* Queue.take(queue) strictEqual(result1, 1) strictEqual(result2, 2) strictEqual(result3, 3) @@ -337,430 +337,428 @@ describe("Queue", () => { strictEqual(result5, 5) })) it.effect("offerAll with takeAll, check ordering", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(1000)) - yield* $(Queue.offer(queue, 1)) - yield* $(Queue.offerAll(queue, Array.range(2, 1000))) - yield* $(waitForSize(queue, 1000)) - const result = yield* $(Queue.takeAll(queue)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(1000) + yield* Queue.offer(queue, 1) + yield* Queue.offerAll(queue, Array.range(2, 1000)) + yield* waitForSize(queue, 1000) + const result = yield* Queue.takeAll(queue) deepStrictEqual(Chunk.toReadonlyArray(result), Array.range(1, 1000)) })) it.effect("offerAll combination of offer, offerAll, take, takeAll", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(32)) - yield* $(Queue.offer(queue, 1)) - yield* $(Queue.offer(queue, 2)) - yield* $(Queue.offerAll(queue, Array.range(3, 35)), Effect.fork) - yield* $(waitForSize(queue, 35)) - const result1 = yield* $(Queue.takeAll(queue)) - const result2 = yield* $(Queue.take(queue)) - const result3 = yield* $(Queue.take(queue)) - const result4 = yield* $(Queue.take(queue)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(32) + yield* Queue.offer(queue, 1) + yield* Queue.offer(queue, 2) + yield* pipe(Queue.offerAll(queue, Array.range(3, 35)), Effect.fork) + yield* waitForSize(queue, 35) + const result1 = yield* Queue.takeAll(queue) + const result2 = yield* Queue.take(queue) + const result3 = yield* Queue.take(queue) + const result4 = yield* Queue.take(queue) deepStrictEqual(Chunk.toReadonlyArray(result1), Array.range(1, 32)) strictEqual(result2, 33) strictEqual(result3, 34) strictEqual(result4, 35) })) it.effect("parallel takes and sequential offers", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(100)) - const fiber = yield* $(Effect.forkAll(Array.makeBy(10, () => Queue.take(queue)))) - yield* $( - Array.makeBy(10, (i) => Queue.offer(queue, i + 1)) - .reduce((acc, curr) => pipe(acc, Effect.zipRight(curr)), Effect.succeed(false)) - ) - const result = yield* $(Fiber.join(fiber)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(100) + const fiber = yield* Effect.forkAll(Array.makeBy(10, () => Queue.take(queue))) + yield* Array.makeBy(10, (i) => Queue.offer(queue, i + 1)) + .reduce((acc, curr) => pipe(acc, Effect.zipRight(curr)), Effect.succeed(false)) + const result = yield* Fiber.join(fiber) deepStrictEqual(result, Array.range(1, 10)) })) it.effect("parallel offers and sequential takes", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(10)) - const fiber = yield* $(Effect.forkAll(Array.makeBy(10, (i) => Queue.offer(queue, i + 1)))) - yield* $(waitForSize(queue, 10)) - const ref = yield* $(Ref.make>([])) - yield* $( + Effect.gen(function*() { + const queue = yield* Queue.bounded(10) + const fiber = yield* Effect.forkAll(Array.makeBy(10, (i) => Queue.offer(queue, i + 1))) + yield* waitForSize(queue, 10) + const ref = yield* Ref.make>([]) + yield* pipe( Queue.take(queue), Effect.flatMap((n) => Ref.update(ref, (ns) => [...ns, n])), Effect.repeatN(9) ) - const result = yield* $(Ref.get(ref)) - yield* $(Fiber.join(fiber)) + const result = yield* Ref.get(ref) + yield* Fiber.join(fiber) deepStrictEqual(result, Array.makeBy(10, (i) => i + 1)) })) it.effect("sequential offer and take", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(100)) - const offer1 = yield* $(Queue.offer(queue, 10)) - const result1 = yield* $(Queue.take(queue)) - const offer2 = yield* $(Queue.offer(queue, 20)) - const result2 = yield* $(Queue.take(queue)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(100) + const offer1 = yield* Queue.offer(queue, 10) + const result1 = yield* Queue.take(queue) + const offer2 = yield* Queue.offer(queue, 20) + const result2 = yield* Queue.take(queue) assertTrue(offer1) strictEqual(result1, 10) assertTrue(offer2) strictEqual(result2, 20) })) it.effect("sequential take and offer", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(100)) - const fiber = yield* $(Queue.take(queue), Effect.zipWith(Queue.take(queue), (a, b) => a + b), Effect.fork) - yield* $(Queue.offer(queue, "don't "), Effect.zipRight(Queue.offer(queue, "give up :D"))) - const result = yield* $(Fiber.join(fiber)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(100) + const fiber = yield* pipe(Queue.take(queue), Effect.zipWith(Queue.take(queue), (a, b) => a + b), Effect.fork) + yield* pipe(Queue.offer(queue, "don't "), Effect.zipRight(Queue.offer(queue, "give up :D"))) + const result = yield* Fiber.join(fiber) strictEqual(result, "don't give up :D") })) it.effect("poll on empty queue", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(5)) - const result = yield* $(Queue.poll(queue)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(5) + const result = yield* Queue.poll(queue) assertNone(result) })) it.effect("poll on queue just emptied", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(5)) - yield* $(Queue.offerAll(queue, [1, 2, 3, 4])) - yield* $(Queue.takeAll(queue)) - const result = yield* $(Queue.poll(queue)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(5) + yield* Queue.offerAll(queue, [1, 2, 3, 4]) + yield* Queue.takeAll(queue) + const result = yield* Queue.poll(queue) assertNone(result) })) it.effect("multiple polls", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(5)) - yield* $(Queue.offerAll(queue, [1, 2])) - const result1 = yield* $(Queue.poll(queue)) - const result2 = yield* $(Queue.poll(queue)) - const result3 = yield* $(Queue.poll(queue)) - const result4 = yield* $(Queue.poll(queue)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(5) + yield* Queue.offerAll(queue, [1, 2]) + const result1 = yield* Queue.poll(queue) + const result2 = yield* Queue.poll(queue) + const result3 = yield* Queue.poll(queue) + const result4 = yield* Queue.poll(queue) assertSome(result1, 1) assertSome(result2, 2) assertNone(result3) assertNone(result4) })) it.effect("shutdown with take fiber", () => - Effect.gen(function*($) { - const fiberId = yield* $(Effect.fiberId) - const queue = yield* $(Queue.bounded(3)) - const fiber = yield* $(Effect.fork(Queue.take(queue))) - yield* $(waitForSize(queue, -1)) - yield* $(Queue.shutdown(queue)) - const result = yield* $(Effect.either(Effect.sandbox(Fiber.join(fiber)))) + Effect.gen(function*() { + const fiberId = yield* Effect.fiberId + const queue = yield* Queue.bounded(3) + const fiber = yield* Effect.fork(Queue.take(queue)) + yield* waitForSize(queue, -1) + yield* Queue.shutdown(queue) + const result = yield* Effect.either(Effect.sandbox(Fiber.join(fiber))) assertLeft(result, Cause.interrupt(fiberId)) })) it.effect("shutdown with offer fiber", () => - Effect.gen(function*($) { - const fiberId = yield* $(Effect.fiberId) - const queue = yield* $(Queue.bounded(2)) - yield* $(Queue.offer(queue, 1)) - yield* $(Queue.offer(queue, 1)) - const fiber = yield* $(Queue.offer(queue, 1), Effect.fork) - yield* $(waitForSize(queue, 3)) - yield* $(Queue.shutdown(queue)) - const result = yield* $(Effect.either(Effect.sandbox(Fiber.join(fiber)))) + Effect.gen(function*() { + const fiberId = yield* Effect.fiberId + const queue = yield* Queue.bounded(2) + yield* Queue.offer(queue, 1) + yield* Queue.offer(queue, 1) + const fiber = yield* pipe(Queue.offer(queue, 1), Effect.fork) + yield* waitForSize(queue, 3) + yield* Queue.shutdown(queue) + const result = yield* Effect.either(Effect.sandbox(Fiber.join(fiber))) assertLeft(result, Cause.interrupt(fiberId)) })) it.effect("shutdown with offer", () => - Effect.gen(function*($) { - const fiberId = yield* $(Effect.fiberId) - const queue = yield* $(Queue.bounded(1)) - yield* $(Queue.shutdown(queue)) - const result = yield* $(Queue.offer(queue, 1), Effect.sandbox, Effect.either) + Effect.gen(function*() { + const fiberId = yield* Effect.fiberId + const queue = yield* Queue.bounded(1) + yield* Queue.shutdown(queue) + const result = yield* pipe(Queue.offer(queue, 1), Effect.sandbox, Effect.either) assertLeft(result, Cause.interrupt(fiberId)) })) it.effect("shutdown with take", () => - Effect.gen(function*($) { - const fiberId = yield* $(Effect.fiberId) - const queue = yield* $(Queue.bounded(1)) - yield* $(Queue.shutdown(queue)) - const result = yield* $(Queue.take(queue), Effect.sandbox, Effect.either) + Effect.gen(function*() { + const fiberId = yield* Effect.fiberId + const queue = yield* Queue.bounded(1) + yield* Queue.shutdown(queue) + const result = yield* pipe(Queue.take(queue), Effect.sandbox, Effect.either) assertLeft(result, Cause.interrupt(fiberId)) })) it.effect("shutdown with takeAll", () => - Effect.gen(function*($) { - const fiberId = yield* $(Effect.fiberId) - const queue = yield* $(Queue.bounded(1)) - yield* $(Queue.shutdown(queue)) - const result = yield* $(Queue.takeAll(queue), Effect.sandbox, Effect.either) + Effect.gen(function*() { + const fiberId = yield* Effect.fiberId + const queue = yield* Queue.bounded(1) + yield* Queue.shutdown(queue) + const result = yield* pipe(Queue.takeAll(queue), Effect.sandbox, Effect.either) assertLeft(result, Cause.interrupt(fiberId)) })) it.effect("shutdown with takeUpTo", () => - Effect.gen(function*($) { - const fiberId = yield* $(Effect.fiberId) - const queue = yield* $(Queue.bounded(1)) - yield* $(Queue.shutdown(queue)) - const result = yield* $(Queue.takeUpTo(queue, 1), Effect.sandbox, Effect.either) + Effect.gen(function*() { + const fiberId = yield* Effect.fiberId + const queue = yield* Queue.bounded(1) + yield* Queue.shutdown(queue) + const result = yield* pipe(Queue.takeUpTo(queue, 1), Effect.sandbox, Effect.either) assertLeft(result, Cause.interrupt(fiberId)) })) it.effect("shutdown with size", () => - Effect.gen(function*($) { - const fiberId = yield* $(Effect.fiberId) - const queue = yield* $(Queue.bounded(1)) - yield* $(Queue.shutdown(queue)) - const result = yield* $(Queue.size(queue), Effect.sandbox, Effect.either) + Effect.gen(function*() { + const fiberId = yield* Effect.fiberId + const queue = yield* Queue.bounded(1) + yield* Queue.shutdown(queue) + const result = yield* pipe(Queue.size(queue), Effect.sandbox, Effect.either) assertLeft(result, Cause.interrupt(fiberId)) })) it.effect("shutdown race condition with offer", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(2)) - const fiber = yield* $(Queue.offer(queue, 1), Effect.forever, Effect.fork) - yield* $(Queue.shutdown(queue)) - const result = yield* $(Fiber.await(fiber)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(2) + const fiber = yield* pipe(Queue.offer(queue, 1), Effect.forever, Effect.fork) + yield* Queue.shutdown(queue) + const result = yield* Fiber.await(fiber) assertTrue(Exit.isFailure(result)) })) it.effect("shutdown race condition with take", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(2)) - yield* $(Queue.offer(queue, 1)) - yield* $(Queue.offer(queue, 1)) - const fiber = yield* $(Queue.take(queue), Effect.forever, Effect.fork) - yield* $(Queue.shutdown(queue)) - const result = yield* $(Fiber.await(fiber)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(2) + yield* Queue.offer(queue, 1) + yield* Queue.offer(queue, 1) + const fiber = yield* pipe(Queue.take(queue), Effect.forever, Effect.fork) + yield* Queue.shutdown(queue) + const result = yield* Fiber.await(fiber) assertTrue(Exit.isFailure(result)) })) it.effect("isShutdown indicates shutdown status", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(5)) - const result1 = yield* $(Queue.isShutdown(queue)) - yield* $(Queue.offer(queue, 1)) - const result2 = yield* $(Queue.isShutdown(queue)) - yield* $(Queue.takeAll(queue)) - const result3 = yield* $(Queue.isShutdown(queue)) - yield* $(Queue.shutdown(queue)) - const result4 = yield* $(Queue.isShutdown(queue)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(5) + const result1 = yield* Queue.isShutdown(queue) + yield* Queue.offer(queue, 1) + const result2 = yield* Queue.isShutdown(queue) + yield* Queue.takeAll(queue) + const result3 = yield* Queue.isShutdown(queue) + yield* Queue.shutdown(queue) + const result4 = yield* Queue.isShutdown(queue) assertFalse(result1) assertFalse(result2) assertFalse(result3) assertTrue(result4) })) it.effect("takeAll returns all values from a non-empty queue", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.unbounded()) - yield* $(Queue.offer(queue, 1)) - yield* $(Queue.offer(queue, 2)) - yield* $(Queue.offer(queue, 3)) - const result = yield* $(Queue.takeAll(queue)) + Effect.gen(function*() { + const queue = yield* Queue.unbounded() + yield* Queue.offer(queue, 1) + yield* Queue.offer(queue, 2) + yield* Queue.offer(queue, 3) + const result = yield* Queue.takeAll(queue) deepStrictEqual(Chunk.toReadonlyArray(result), Array.range(1, 3)) })) it.effect("elements can be enqueued syncroniously when there is space", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.unbounded()) + Effect.gen(function*() { + const queue = yield* Queue.unbounded() Queue.unsafeOffer(queue, 1) Queue.unsafeOffer(queue, 2) Queue.unsafeOffer(queue, 3) - const result = yield* $(Queue.takeAll(queue)) + const result = yield* Queue.takeAll(queue) deepStrictEqual(Chunk.toReadonlyArray(result), Array.range(1, 3)) })) it.effect("takeAll returns all values from an empty queue", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.unbounded()) - const result1 = yield* $(Queue.takeAll(queue)) - yield* $(Queue.offer(queue, 1)) - yield* $(Queue.take(queue)) - const result2 = yield* $(Queue.takeAll(queue)) + Effect.gen(function*() { + const queue = yield* Queue.unbounded() + const result1 = yield* Queue.takeAll(queue) + yield* Queue.offer(queue, 1) + yield* Queue.take(queue) + const result2 = yield* Queue.takeAll(queue) assertTrue(Chunk.isEmpty(result1)) assertTrue(Chunk.isEmpty(result2)) })) it.effect("takeAll does not return more than the queue size", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(4)) - yield* $( + Effect.gen(function*() { + const queue = yield* Queue.bounded(4) + yield* pipe( [1, 2, 3, 4] .map((n) => Queue.offer(queue, n)) .reduce((acc, curr) => pipe(acc, Effect.zipRight(curr)), Effect.succeed(false)) ) - yield* $(Queue.offer(queue, 5), Effect.fork) - yield* $(waitForSize(queue, 5)) - const result1 = yield* $(Queue.takeAll(queue)) - const result2 = yield* $(Queue.take(queue)) + yield* pipe(Queue.offer(queue, 5), Effect.fork) + yield* waitForSize(queue, 5) + const result1 = yield* Queue.takeAll(queue) + const result2 = yield* Queue.take(queue) deepStrictEqual(Chunk.toReadonlyArray(result1), Array.range(1, 4)) strictEqual(result2, 5) })) it.effect("takeBetween returns immediately if there is enough elements", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(100)) - yield* $(Queue.offer(queue, 1)) - yield* $(Queue.offer(queue, 2)) - yield* $(Queue.offer(queue, 3)) - const result = yield* $(Queue.takeBetween(queue, 2, 5)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(100) + yield* Queue.offer(queue, 1) + yield* Queue.offer(queue, 2) + yield* Queue.offer(queue, 3) + const result = yield* Queue.takeBetween(queue, 2, 5) deepStrictEqual(Chunk.toReadonlyArray(result), Array.range(1, 3)) })) it.effect("takeBetween returns an empty list if boundaries are inverted", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(100)) - yield* $(Queue.offer(queue, 1)) - yield* $(Queue.offer(queue, 2)) - yield* $(Queue.offer(queue, 3)) - const result = yield* $(Queue.takeBetween(queue, 5, 2)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(100) + yield* Queue.offer(queue, 1) + yield* Queue.offer(queue, 2) + yield* Queue.offer(queue, 3) + const result = yield* Queue.takeBetween(queue, 5, 2) assertTrue(Chunk.isEmpty(result)) })) it.effect("takeBetween returns an empty list if boundaries are negative", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(100)) - yield* $(Queue.offer(queue, 1)) - yield* $(Queue.offer(queue, 2)) - yield* $(Queue.offer(queue, 3)) - const result = yield* $(Queue.takeBetween(queue, -5, -2)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(100) + yield* Queue.offer(queue, 1) + yield* Queue.offer(queue, 2) + yield* Queue.offer(queue, 3) + const result = yield* Queue.takeBetween(queue, -5, -2) assertTrue(Chunk.isEmpty(result)) })) it.effect("takeBetween blocks until a required minimum of elements is collected", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(100)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(100) const updater = pipe(Queue.offer(queue, 10), Effect.forever) const getter = Queue.takeBetween(queue, 5, 10) - const result = yield* $(getter, Effect.race(updater)) + const result = yield* pipe(getter, Effect.race(updater)) assertTrue(result.length >= 5) })) it.effect("takeBetween returns elements in the correct order", () => - Effect.gen(function*($) { + Effect.gen(function*() { const values = [-10, -7, -4, -1, 5, 10] - const queue = yield* $(Queue.bounded(100)) - const fiber = yield* $(values, Effect.forEach((n) => Queue.offer(queue, n)), Effect.fork) - const result = yield* $(Queue.takeBetween(queue, values.length, values.length)) - yield* $(Fiber.interrupt(fiber)) + const queue = yield* Queue.bounded(100) + const fiber = yield* pipe(values, Effect.forEach((n) => Queue.offer(queue, n)), Effect.fork) + const result = yield* Queue.takeBetween(queue, values.length, values.length) + yield* Fiber.interrupt(fiber) deepStrictEqual(Array.fromIterable(result), values) })) it.effect("takeN returns immediately if there is enough elements", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(100)) - yield* $(Queue.offerAll(queue, [1, 2, 3, 4, 5])) - const result = yield* $(Queue.takeN(queue, 3)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(100) + yield* Queue.offerAll(queue, [1, 2, 3, 4, 5]) + const result = yield* Queue.takeN(queue, 3) deepStrictEqual(Chunk.toReadonlyArray(result), Array.range(1, 3)) })) it.effect("takeN returns an empty list if a negative number or zero is specified", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(100)) - yield* $(Queue.offerAll(queue, [1, 2, 3])) - const result1 = yield* $(Queue.takeN(queue, -3)) - const result2 = yield* $(Queue.takeN(queue, 0)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(100) + yield* Queue.offerAll(queue, [1, 2, 3]) + const result1 = yield* Queue.takeN(queue, -3) + const result2 = yield* Queue.takeN(queue, 0) assertTrue(Chunk.isEmpty(result1)) assertTrue(Chunk.isEmpty(result2)) })) it.effect("takeN blocks until the required number of elements is available", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(100)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(100) const updater = pipe(Queue.offer(queue, 10), Effect.forever) const getter = Queue.takeN(queue, 5) - const result = yield* $(getter, Effect.race(updater)) + const result = yield* pipe(getter, Effect.race(updater)) strictEqual(result.length, 5) })) it.effect("should return the specified number of elements from a non-empty queue", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(100)) - yield* $(Queue.offer(queue, 1)) - yield* $(Queue.offer(queue, 2)) - const result = yield* $(Queue.takeUpTo(queue, 2)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(100) + yield* Queue.offer(queue, 1) + yield* Queue.offer(queue, 2) + const result = yield* Queue.takeUpTo(queue, 2) deepStrictEqual(Chunk.toReadonlyArray(result), Array.range(1, 2)) })) it.effect("should return an empty collection from an empty queue", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(100)) - const result = yield* $(Queue.takeUpTo(queue, 2)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(100) + const result = yield* Queue.takeUpTo(queue, 2) assertTrue(Chunk.isEmpty(result)) })) it.effect("should handle an empty queue with max higher than queue size", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(100)) - const result = yield* $(Queue.takeUpTo(queue, 101)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(100) + const result = yield* Queue.takeUpTo(queue, 101) assertTrue(Chunk.isEmpty(result)) })) it.effect("should leave behind elements if necessary", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(100)) - yield* $(Queue.offer(queue, 1)) - yield* $(Queue.offer(queue, 2)) - yield* $(Queue.offer(queue, 3)) - yield* $(Queue.offer(queue, 4)) - const result = yield* $(Queue.takeUpTo(queue, 2)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(100) + yield* Queue.offer(queue, 1) + yield* Queue.offer(queue, 2) + yield* Queue.offer(queue, 3) + yield* Queue.offer(queue, 4) + const result = yield* Queue.takeUpTo(queue, 2) deepStrictEqual(Chunk.toReadonlyArray(result), Array.range(1, 2)) })) it.effect("should handle not enough items", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(100)) - yield* $(Queue.offer(queue, 1)) - yield* $(Queue.offer(queue, 2)) - yield* $(Queue.offer(queue, 3)) - yield* $(Queue.offer(queue, 4)) - const result = yield* $(Queue.takeUpTo(queue, 10)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(100) + yield* Queue.offer(queue, 1) + yield* Queue.offer(queue, 2) + yield* Queue.offer(queue, 3) + yield* Queue.offer(queue, 4) + const result = yield* Queue.takeUpTo(queue, 10) deepStrictEqual(Chunk.toReadonlyArray(result), Array.range(1, 4)) })) it.effect("should handle taking up to 0 items", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(100)) - yield* $(Queue.offer(queue, 1)) - yield* $(Queue.offer(queue, 2)) - yield* $(Queue.offer(queue, 3)) - yield* $(Queue.offer(queue, 4)) - const result = yield* $(Queue.takeUpTo(queue, 0)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(100) + yield* Queue.offer(queue, 1) + yield* Queue.offer(queue, 2) + yield* Queue.offer(queue, 3) + yield* Queue.offer(queue, 4) + const result = yield* Queue.takeUpTo(queue, 0) assertTrue(Chunk.isEmpty(result)) })) it.effect("should handle taking up to -1 items", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(100)) - yield* $(Queue.offer(queue, 1)) - yield* $(Queue.offer(queue, 2)) - yield* $(Queue.offer(queue, 3)) - yield* $(Queue.offer(queue, 4)) - const result = yield* $(Queue.takeUpTo(queue, -1)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(100) + yield* Queue.offer(queue, 1) + yield* Queue.offer(queue, 2) + yield* Queue.offer(queue, 3) + yield* Queue.offer(queue, 4) + const result = yield* Queue.takeUpTo(queue, -1) assertTrue(Chunk.isEmpty(result)) })) it.effect("should handle taking up to Number.POSITIVE_INFINITY items", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(100)) - yield* $(Queue.offer(queue, 1)) - const result = yield* $(Queue.takeUpTo(queue, Number.POSITIVE_INFINITY)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(100) + yield* Queue.offer(queue, 1) + const result = yield* Queue.takeUpTo(queue, Number.POSITIVE_INFINITY) deepStrictEqual(Chunk.toReadonlyArray(result), [1]) })) it.effect("multiple take up to calls", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(100)) - yield* $(Queue.offer(queue, 1)) - yield* $(Queue.offer(queue, 2)) - const result1 = yield* $(Queue.takeUpTo(queue, 2)) - yield* $(Queue.offer(queue, 3)) - yield* $(Queue.offer(queue, 4)) - const result2 = yield* $(Queue.takeUpTo(queue, 2)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(100) + yield* Queue.offer(queue, 1) + yield* Queue.offer(queue, 2) + const result1 = yield* Queue.takeUpTo(queue, 2) + yield* Queue.offer(queue, 3) + yield* Queue.offer(queue, 4) + const result2 = yield* Queue.takeUpTo(queue, 2) deepStrictEqual(Chunk.toReadonlyArray(result1), Array.range(1, 2)) deepStrictEqual(Chunk.toReadonlyArray(result2), Array.range(3, 4)) })) it.effect("consecutive take up to calls", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(100)) - yield* $(Queue.offer(queue, 1)) - yield* $(Queue.offer(queue, 2)) - yield* $(Queue.offer(queue, 3)) - yield* $(Queue.offer(queue, 4)) - const result1 = yield* $(Queue.takeUpTo(queue, 2)) - const result2 = yield* $(Queue.takeUpTo(queue, 2)) + Effect.gen(function*() { + const queue = yield* Queue.bounded(100) + yield* Queue.offer(queue, 1) + yield* Queue.offer(queue, 2) + yield* Queue.offer(queue, 3) + yield* Queue.offer(queue, 4) + const result1 = yield* Queue.takeUpTo(queue, 2) + const result2 = yield* Queue.takeUpTo(queue, 2) deepStrictEqual(Chunk.toReadonlyArray(result1), Array.range(1, 2)) deepStrictEqual(Chunk.toReadonlyArray(result2), Array.range(3, 4)) })) it.effect("does not return back-pressured offers", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(4)) - yield* $( + Effect.gen(function*() { + const queue = yield* Queue.bounded(4) + yield* pipe( [1, 2, 3, 4] .map((n) => Queue.offer(queue, n)) .reduce((acc, curr) => pipe(acc, Effect.zipRight(curr)), Effect.succeed(false)) ) - const fiber = yield* $(Queue.offer(queue, 5), Effect.fork) - yield* $(waitForSize(queue, 5)) - const result = yield* $(Queue.takeUpTo(queue, 5)) - yield* $(Fiber.interrupt(fiber)) + const fiber = yield* pipe(Queue.offer(queue, 5), Effect.fork) + yield* waitForSize(queue, 5) + const result = yield* Queue.takeUpTo(queue, 5) + yield* Fiber.interrupt(fiber) deepStrictEqual(Chunk.toReadonlyArray(result), Array.range(1, 4)) })) it.effect("rts - handles falsy values", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.unbounded()) - yield* $(Queue.offer(queue, 0)) - const result = yield* $(Queue.take(queue)) + Effect.gen(function*() { + const queue = yield* Queue.unbounded() + yield* Queue.offer(queue, 0) + const result = yield* Queue.take(queue) strictEqual(result, 0) })) it.effect("rts - queue is ordered", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.unbounded()) - yield* $(Queue.offer(queue, 1)) - yield* $(Queue.offer(queue, 2)) - yield* $(Queue.offer(queue, 3)) - const result1 = yield* $(Queue.take(queue)) - const result2 = yield* $(Queue.take(queue)) - const result3 = yield* $(Queue.take(queue)) + Effect.gen(function*() { + const queue = yield* Queue.unbounded() + yield* Queue.offer(queue, 1) + yield* Queue.offer(queue, 2) + yield* Queue.offer(queue, 3) + const result1 = yield* Queue.take(queue) + const result2 = yield* Queue.take(queue) + const result3 = yield* Queue.take(queue) strictEqual(result1, 1) strictEqual(result2, 2) strictEqual(result3, 3) @@ -768,8 +766,8 @@ describe("Queue", () => { it.effect( ".pipe", () => - Effect.gen(function*(_) { - const queue = yield* _(Queue.unbounded()) + Effect.gen(function*() { + const queue = yield* Queue.unbounded() strictEqual(queue.pipe(identity), queue) }) ) diff --git a/packages/effect/test/RateLimiter.test.ts b/packages/effect/test/RateLimiter.test.ts index 4a6989c1a1..0c43245202 100644 --- a/packages/effect/test/RateLimiter.test.ts +++ b/packages/effect/test/RateLimiter.test.ts @@ -1,4 +1,4 @@ -import { Array, Clock, Deferred, Effect, Fiber, Function, Option, RateLimiter, Ref, TestClock } from "effect" +import { Array, Clock, Deferred, Effect, Fiber, Function, Option, pipe, RateLimiter, Ref, TestClock } from "effect" import { assertFalse, assertLeft, assertTrue, deepStrictEqual, strictEqual } from "effect/test/util" import * as it from "effect/test/utils/extend" import { describe } from "vitest" @@ -8,31 +8,31 @@ describe("RateLimiter", () => { RateLimiterTestSuite("fixed-window") it.scoped("will use the provided cost", () => - Effect.gen(function*(_) { - const rl = yield* _(RateLimiter.make({ + Effect.gen(function*() { + const rl = yield* (RateLimiter.make({ limit: 100, interval: "1 seconds", algorithm: "fixed-window" })) - const now = yield* _(Clock.currentTimeMillis) - const fib = yield* _( + const now = yield* (Clock.currentTimeMillis) + const fib = yield* ( Effect.replicateEffect(rl(Clock.currentTimeMillis).pipe(RateLimiter.withCost(10)), 20).pipe( Effect.fork ) ) - yield* _(TestClock.adjust("1 seconds")) - const nowAfter1Second = yield* _(Clock.currentTimeMillis) + yield* (TestClock.adjust("1 seconds")) + const nowAfter1Second = yield* (Clock.currentTimeMillis) - const times = yield* _(Fiber.join(fib)) + const times = yield* (Fiber.join(fib)) assertTrue(times.slice(0, 10).every((t) => t === now)) assertTrue(times.slice(10).every((t) => t === nowAfter1Second)) })) it.scoped("will respect different costs per effect and interleave them.", () => - Effect.gen(function*(_) { - const rl = yield* _(RateLimiter.make({ + Effect.gen(function*() { + const rl = yield* (RateLimiter.make({ limit: 10, interval: "1 seconds", algorithm: "fixed-window" @@ -40,7 +40,7 @@ describe("RateLimiter", () => { const rl1 = Function.compose(rl, RateLimiter.withCost(7)) const rl2 = Function.compose(rl, RateLimiter.withCost(3)) - const start = yield* _(Clock.currentTimeMillis) + const start = yield* (Clock.currentTimeMillis) const tasks = [ rl1(Clock.currentTimeMillis).pipe(Effect.map((x) => ["rl1", x] as const)), @@ -49,14 +49,14 @@ describe("RateLimiter", () => { rl2(Clock.currentTimeMillis).pipe(Effect.map((x) => ["rl2", x] as const)) ] - const fib = yield* _( + const fib = yield* ( Effect.all(tasks, { concurrency: "unbounded" }).pipe(Effect.fork) ) - yield* _(TestClock.adjust("1 seconds")) - const after1Second = yield* _(Clock.currentTimeMillis) + yield* (TestClock.adjust("1 seconds")) + const after1Second = yield* (Clock.currentTimeMillis) - const times = yield* _(Fiber.join(fib)) + const times = yield* (Fiber.join(fib)) deepStrictEqual( times, @@ -70,15 +70,15 @@ describe("RateLimiter", () => { })) it.scoped("will be composable with other `RateLimiters`", () => - Effect.gen(function*(_) { + Effect.gen(function*() { // Max 30 calls per minute - const rl1 = yield* _(RateLimiter.make({ + const rl1 = yield* (RateLimiter.make({ limit: 30, interval: "1 minutes", algorithm: "fixed-window" })) // Max 2 calls per second - const rl2 = yield* _(RateLimiter.make({ + const rl2 = yield* (RateLimiter.make({ limit: 2, interval: "1 seconds", algorithm: "fixed-window" @@ -87,24 +87,24 @@ describe("RateLimiter", () => { // and the 2 calls per second constraints. const rl = Function.compose(rl1, rl2) - const now = yield* _(Clock.currentTimeMillis) + const now = yield* (Clock.currentTimeMillis) // 32 calls should take 1 minute to complete based on the constraints // of the rate limiter defined above. // First 30 calls should trigger in the first 15 seconds // and the next 2 calls should trigger at the 1 minute mark. - const fib = yield* _( + const fib = yield* ( Effect.replicateEffect(rl(Clock.currentTimeMillis), 32).pipe(Effect.fork) ) - const timestamps = yield* _( + const timestamps = yield* ( Effect.replicateEffect( Effect.zipRight(TestClock.adjust("1 seconds"), Clock.currentTimeMillis), 60 ) ) - const times = yield* _(Fiber.join(fib)) + const times = yield* (Fiber.join(fib)) assertTrue(timestamps.length === 60) assertTrue(times.length === 32) @@ -124,47 +124,47 @@ describe("RateLimiter", () => { RateLimiterTestSuite("token-bucket") it.scoped("uses the token-bucket algorithm for token replenishment", () => - Effect.scoped(Effect.gen(function*(_) { + Effect.scoped(Effect.gen(function*() { // The limiter below should allow be to execute 10 requests immediately, // prevent further requests from being executed, and then after 100 ms // allow execution of another request. - const limit = yield* _(RateLimiter.make({ + const limit = yield* (RateLimiter.make({ limit: 10, interval: "1 seconds", algorithm: "token-bucket" })) - const deferred = yield* _(Deferred.make()) + const deferred = yield* (Deferred.make()) // Use up all of the available tokens - yield* _(Effect.forEach(Array.range(1, 10), () => limit(Effect.void))) + yield* (Effect.forEach(Array.range(1, 10), () => limit(Effect.void))) // Make an additional request when there are no tokens available - yield* _( + yield* pipe( limit(Effect.void), Effect.zipRight(Deferred.succeed(deferred, void 0)), Effect.fork ) - assertFalse(yield* _(Deferred.isDone(deferred))) + assertFalse(yield* (Deferred.isDone(deferred))) // Ensure that the request is successful once a token is replenished - yield* _(TestClock.adjust("100 millis")) - yield* _(Effect.yieldNow()) + yield* (TestClock.adjust("100 millis")) + yield* (Effect.yieldNow()) - assertTrue(yield* _(Deferred.isDone(deferred))) + assertTrue(yield* (Deferred.isDone(deferred))) }))) }) }) const RateLimiterTestSuite = (algorithm: "fixed-window" | "token-bucket") => { it.scoped(`${algorithm} - execute up to max calls immediately`, () => - Effect.gen(function*(_) { - const limit = yield* _(RateLimiter.make({ + Effect.gen(function*() { + const limit = yield* (RateLimiter.make({ limit: 10, interval: "1 seconds", algorithm })) - const now = yield* _(Clock.currentTimeMillis) - const times = yield* _(Effect.forEach( + const now = yield* (Clock.currentTimeMillis) + const times = yield* (Effect.forEach( Array.range(1, 10), () => limit(Clock.currentTimeMillis) )) @@ -173,49 +173,49 @@ const RateLimiterTestSuite = (algorithm: "fixed-window" | "token-bucket") => { })) it.scoped(`${algorithm} - is not affected by stream chunk size`, () => - Effect.gen(function*(_) { - const limiter = yield* _(RateLimiter.make({ + Effect.gen(function*() { + const limiter = yield* (RateLimiter.make({ limit: 10, interval: "1 seconds", algorithm })) - const now = yield* _(Clock.currentTimeMillis) - const times1 = yield* _(Effect.forEach( + const now = yield* (Clock.currentTimeMillis) + const times1 = yield* (Effect.forEach( Array.range(1, 5), () => limiter(Clock.currentTimeMillis), { concurrency: "unbounded" } )) - const fibers = yield* _(Effect.forEach( + const fibers = yield* (Effect.forEach( Array.range(1, 15), () => Effect.fork(limiter(Clock.currentTimeMillis)), { concurrency: "unbounded" } )) - yield* _(TestClock.adjust("1 seconds")) - const times2 = yield* _(Effect.forEach(fibers, Fiber.join, { concurrency: "unbounded" })) + yield* (TestClock.adjust("1 seconds")) + const times2 = yield* (Effect.forEach(fibers, Fiber.join, { concurrency: "unbounded" })) const times = Array.appendAll(times1, times2) const result = Array.filter(times, (time) => time === now) strictEqual(result.length, 10) })) it.scoped(`${algorithm} - succeed with the result of the call`, () => - Effect.gen(function*(_) { - const limit = yield* _(RateLimiter.make({ + Effect.gen(function*() { + const limit = yield* (RateLimiter.make({ limit: 10, interval: "1 seconds", algorithm })) - const result = yield* _(limit(Effect.succeed(3))) + const result = yield* (limit(Effect.succeed(3))) strictEqual(result, 3) })) it.scoped(`${algorithm} - fail with the result of a failed call`, () => - Effect.gen(function*(_) { - const limit = yield* _(RateLimiter.make({ + Effect.gen(function*() { + const limit = yield* (RateLimiter.make({ limit: 10, interval: "1 seconds", algorithm })) - const result = yield* _(limit(Effect.either(Effect.fail(Option.none())))) + const result = yield* (limit(Effect.either(Effect.fail(Option.none())))) assertLeft(result, Option.none()) })) @@ -231,16 +231,16 @@ const RateLimiterTestSuite = (algorithm: "fixed-window" | "token-bucket") => { })) it.scoped(`${algorithm} - holds back up calls after the max`, () => - Effect.gen(function*(_) { - const limit = yield* _(RateLimiter.make({ + Effect.gen(function*() { + const limit = yield* (RateLimiter.make({ limit: 10, interval: "1 seconds", algorithm })) - const now = yield* _(Clock.currentTimeMillis) + const now = yield* (Clock.currentTimeMillis) - const fiber = yield* _( + const fiber = yield* pipe( Effect.replicateEffect( limit(Clock.currentTimeMillis), 20 @@ -248,98 +248,98 @@ const RateLimiterTestSuite = (algorithm: "fixed-window" | "token-bucket") => { Effect.fork ) - yield* _(TestClock.adjust("1 seconds")) + yield* (TestClock.adjust("1 seconds")) - const times = yield* _(Fiber.join(fiber)) - const later = yield* _(Clock.currentTimeMillis) + const times = yield* (Fiber.join(fiber)) + const later = yield* (Clock.currentTimeMillis) assertTrue(times.slice(0, 10).every((x) => x === now)) assertTrue(times.slice(10).every((x) => x > now && x <= later)) })) it.scoped(`${algorithm} - will interrupt the effect when a call is interrupted`, () => - Effect.gen(function*(_) { - const limit = yield* _(RateLimiter.make({ + Effect.gen(function*() { + const limit = yield* (RateLimiter.make({ limit: 10, interval: "1 seconds", algorithm })) - const latch = yield* _(Deferred.make()) - const interrupted = yield* _(Deferred.make()) - const fib = yield* _( + const latch = yield* (Deferred.make()) + const interrupted = yield* (Deferred.make()) + const fib = yield* pipe( Deferred.succeed(latch, void 0), Effect.zipRight(Effect.never), Effect.onInterrupt(() => Deferred.succeed(interrupted, void 0)), limit, Effect.fork ) - yield* _(Deferred.await(latch)) - yield* _(Fiber.interrupt(fib)) - yield* _(Deferred.await(interrupted)) + yield* (Deferred.await(latch)) + yield* (Fiber.interrupt(fib)) + yield* (Deferred.await(interrupted)) })) it.scoped(`${algorithm} - will not start execution of an effect when it is interrupted before getting its turn to execute`, () => - Effect.gen(function*(_) { - const count = yield* _(Ref.make(0)) - const limit = yield* _(RateLimiter.make({ + Effect.gen(function*() { + const count = yield* (Ref.make(0)) + const limit = yield* (RateLimiter.make({ limit: 1, interval: "1 seconds", algorithm })) - yield* _(limit(Effect.void)) - const fiber = yield* _(Effect.fork(limit(Ref.set(count, 1)))) - const interruption = yield* _(Effect.fork(Fiber.interrupt(fiber))) - yield* _(Fiber.join(interruption)) - strictEqual(yield* _(Ref.get(count)), 0) + yield* (limit(Effect.void)) + const fiber = yield* (Effect.fork(limit(Ref.set(count, 1)))) + const interruption = yield* (Effect.fork(Fiber.interrupt(fiber))) + yield* (Fiber.join(interruption)) + strictEqual(yield* (Ref.get(count)), 0) })) it.scoped(`${algorithm} - will wait for interruption to complete of an effect that is already executing`, () => - Effect.gen(function*(_) { - const limit = yield* _(RateLimiter.make({ + Effect.gen(function*() { + const limit = yield* (RateLimiter.make({ limit: 1, interval: "1 seconds", algorithm })) - const latch = yield* _(Deferred.make()) - const effectInterrupted = yield* _(Ref.make(0)) - const fiber = yield* _( + const latch = yield* (Deferred.make()) + const effectInterrupted = yield* (Ref.make(0)) + const fiber = yield* pipe( Deferred.succeed(latch, void 0), Effect.zipRight(Effect.never), Effect.onInterrupt(() => Ref.set(effectInterrupted, 1)), limit, Effect.fork ) - yield* _(Deferred.await(latch)) - yield* _(Fiber.interrupt(fiber)) - const interruptions = yield* _(Ref.get(effectInterrupted)) + yield* (Deferred.await(latch)) + yield* (Fiber.interrupt(fiber)) + const interruptions = yield* (Ref.get(effectInterrupted)) strictEqual(interruptions, 1) })) it.scoped(`${algorithm} - will make effects wait for interrupted effects to pass through the rate limiter`, () => - Effect.gen(function*(_) { - const limit = yield* _(RateLimiter.make({ + Effect.gen(function*() { + const limit = yield* (RateLimiter.make({ limit: 1, interval: "1 seconds", algorithm })) - yield* _(limit(Effect.void)) - const fiber1 = yield* _(Effect.fork(limit(Effect.void))) - yield* _(TestClock.adjust("1 seconds")) - yield* _(Fiber.interrupt(fiber1)) - const fiber2 = yield* _(Effect.fork(limit(Clock.currentTimeMillis))) - yield* _(TestClock.adjust("1 seconds")) - const lastExecutionTime = yield* _(Fiber.join(fiber2)) + yield* (limit(Effect.void)) + const fiber1 = yield* (Effect.fork(limit(Effect.void))) + yield* (TestClock.adjust("1 seconds")) + yield* (Fiber.interrupt(fiber1)) + const fiber2 = yield* (Effect.fork(limit(Clock.currentTimeMillis))) + yield* (TestClock.adjust("1 seconds")) + const lastExecutionTime = yield* (Fiber.join(fiber2)) strictEqual(lastExecutionTime, 2000) })) it.scoped("will not include interrupted effects in the throttling", () => - Effect.gen(function*(_) { + Effect.gen(function*() { const rate = 10 - const limit = yield* _(RateLimiter.make({ limit: rate, interval: "1 seconds", algorithm })) - const latch = yield* _(Deferred.make()) - const latched = yield* _(Ref.make(0)) - const wait = yield* _(Deferred.make()) - yield* _( + const limit = yield* (RateLimiter.make({ limit: rate, interval: "1 seconds", algorithm })) + const latch = yield* (Deferred.make()) + const latched = yield* (Ref.make(0)) + const wait = yield* (Deferred.make()) + yield* pipe( Deferred.succeed(latch, void 0), Effect.whenEffect(latched.pipe( Ref.updateAndGet((x) => x + 1), @@ -350,29 +350,29 @@ const RateLimiterTestSuite = (algorithm: "fixed-window" | "token-bucket") => { Effect.fork, Effect.replicateEffect(rate) ) - yield* _(Deferred.await(latch)) - const fibers = yield* _( + yield* (Deferred.await(latch)) + const fibers = yield* pipe( Effect.fork(limit(Effect.void)), Effect.replicateEffect(1000) ) - yield* _(Fiber.interruptAll(fibers)) - const fiber = yield* _(Effect.fork(limit(Effect.void))) - yield* _(TestClock.adjust("1 seconds")) - yield* _(Fiber.join(fiber)) + yield* (Fiber.interruptAll(fibers)) + const fiber = yield* (Effect.fork(limit(Effect.void))) + yield* (TestClock.adjust("1 seconds")) + yield* (Fiber.join(fiber)) }), 10_000) it.scoped(`${algorithm} - will not drop tokens if interrupted`, () => - Effect.gen(function*(_) { - const limit = yield* _(RateLimiter.make({ + Effect.gen(function*() { + const limit = yield* (RateLimiter.make({ limit: 10, interval: "1 seconds", algorithm })) - yield* _(limit(Effect.void)) - const fiber = yield* _(limit(Effect.void), RateLimiter.withCost(10), Effect.fork) - yield* _(Effect.yieldNow()) - yield* _(Fiber.interrupt(fiber)) - yield* _(limit(Effect.void), RateLimiter.withCost(9)) + yield* (limit(Effect.void)) + const fiber = yield* pipe(limit(Effect.void), RateLimiter.withCost(10), Effect.fork) + yield* (Effect.yieldNow()) + yield* (Fiber.interrupt(fiber)) + yield* pipe(limit(Effect.void), RateLimiter.withCost(9)) })) } diff --git a/packages/effect/test/Ref.test.ts b/packages/effect/test/Ref.test.ts index 0f347c723c..4b331992ed 100644 --- a/packages/effect/test/Ref.test.ts +++ b/packages/effect/test/Ref.test.ts @@ -1,4 +1,4 @@ -import { Effect, Option, Readable, Ref } from "effect" +import { Effect, Option, pipe, Readable, Ref } from "effect" import { assertTrue, deepStrictEqual, strictEqual } from "effect/test/util" import * as it from "effect/test/utils/extend" import { describe } from "vitest" @@ -30,15 +30,15 @@ const isClosed = (self: State): boolean => self._tag === "Closed" describe("Ref", () => { it.effect("implements Readable", () => - Effect.gen(function*(_) { - const ref = yield* _(Ref.make(123)) + Effect.gen(function*() { + const ref = yield* Ref.make(123) assertTrue(Readable.isReadable(ref)) strictEqual(yield* ref, 123) })) it.effect("get", () => - Effect.gen(function*($) { - const result = yield* $(Ref.make(current), Effect.flatMap(Ref.get)) + Effect.gen(function*() { + const result = yield* pipe(Ref.make(current), Effect.flatMap(Ref.get)) strictEqual(result, current) })) it.effect("getAndSet", () => @@ -51,148 +51,137 @@ describe("Ref", () => { strictEqual(result2, update) })) it.effect("getAndUpdate", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(current)) - const result1 = yield* $(Ref.getAndUpdate(ref, () => update)) + Effect.gen(function*() { + const ref = yield* Ref.make(current) + const result1 = yield* Ref.getAndUpdate(ref, () => update) const result2 = yield* ref strictEqual(result1, current) strictEqual(result2, update) })) it.effect("getAndUpdateSome - once", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Active)) - const result1 = yield* $( - Ref.getAndUpdateSome(ref, (state) => isClosed(state) ? Option.some(Changed) : Option.none()) + Effect.gen(function*() { + const ref = yield* Ref.make(Active) + const result1 = yield* Ref.getAndUpdateSome( + ref, + (state) => isClosed(state) ? Option.some(Changed) : Option.none() ) - const result2 = yield* $(Ref.get(ref)) + const result2 = yield* Ref.get(ref) strictEqual(result1, Active) strictEqual(result2, Active) })) it.effect("getAndUpdateSome - twice", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Active)) - const result1 = yield* $( - Ref.getAndUpdateSome(ref, (state) => isActive(state) ? Option.some(Changed) : Option.none()) - ) - const result2 = yield* $( - Ref.getAndUpdateSome(ref, (state) => - isActive(state) ? - Option.some(Changed) : - isChanged(state) ? - Option.some(Closed) : - Option.none()) + Effect.gen(function*() { + const ref = yield* Ref.make(Active) + const result1 = yield* Ref.getAndUpdateSome( + ref, + (state) => isActive(state) ? Option.some(Changed) : Option.none() ) - const result3 = yield* $(Ref.get(ref)) + const result2 = yield* Ref.getAndUpdateSome(ref, (state) => + isActive(state) ? + Option.some(Changed) : + isChanged(state) ? + Option.some(Closed) : + Option.none()) + const result3 = yield* Ref.get(ref) strictEqual(result1, Active) strictEqual(result2, Changed) strictEqual(result3, Closed) })) it.effect("set", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(current)) - yield* $(Ref.set(ref, update)) - const result = yield* $(Ref.get(ref)) + Effect.gen(function*() { + const ref = yield* Ref.make(current) + yield* Ref.set(ref, update) + const result = yield* Ref.get(ref) strictEqual(result, update) })) it.effect("update", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(current)) - yield* $(Ref.update(ref, () => update)) - const result = yield* $(Ref.get(ref)) + Effect.gen(function*() { + const ref = yield* Ref.make(current) + yield* Ref.update(ref, () => update) + const result = yield* Ref.get(ref) strictEqual(result, update) })) it.effect("updateAndGet", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(current)) - const result = yield* $(Ref.updateAndGet(ref, () => update)) + Effect.gen(function*() { + const ref = yield* Ref.make(current) + const result = yield* Ref.updateAndGet(ref, () => update) strictEqual(result, update) })) it.effect("updateSome - once", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Active)) - yield* $(Ref.updateSome(ref, (state) => isClosed(state) ? Option.some(Changed) : Option.none())) - const result = yield* $(Ref.get(ref)) + Effect.gen(function*() { + const ref = yield* Ref.make(Active) + yield* Ref.updateSome(ref, (state) => isClosed(state) ? Option.some(Changed) : Option.none()) + const result = yield* Ref.get(ref) deepStrictEqual(result, Active) })) it.effect("updateSome - twice", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Active)) - yield* $(Ref.updateSome(ref, (state) => isActive(state) ? Option.some(Changed) : Option.none())) - const result1 = yield* $(Ref.get(ref)) - yield* $( - Ref.updateSome(ref, (state) => - isActive(state) ? - Option.some(Changed) : - isChanged(state) ? - Option.some(Closed) : - Option.none()) - ) - const result2 = yield* $(Ref.get(ref)) + Effect.gen(function*() { + const ref = yield* Ref.make(Active) + yield* Ref.updateSome(ref, (state) => isActive(state) ? Option.some(Changed) : Option.none()) + const result1 = yield* Ref.get(ref) + yield* Ref.updateSome(ref, (state) => + isActive(state) ? + Option.some(Changed) : + isChanged(state) ? + Option.some(Closed) : + Option.none()) + const result2 = yield* Ref.get(ref) deepStrictEqual(result1, Changed) deepStrictEqual(result2, Closed) })) it.effect("updateSomeAndGet - once", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Active)) - const result = yield* $( - Ref.updateSomeAndGet(ref, (state) => isClosed(state) ? Option.some(Changed) : Option.none()) - ) + Effect.gen(function*() { + const ref = yield* Ref.make(Active) + const result = yield* Ref.updateSomeAndGet(ref, (state) => isClosed(state) ? Option.some(Changed) : Option.none()) strictEqual(result, Active) })) it.effect("updateSomeAndGet - twice", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Active)) - const result1 = yield* $( - Ref.updateSomeAndGet(ref, (state) => isActive(state) ? Option.some(Changed) : Option.none()) - ) - const result2 = yield* $( - Ref.updateSomeAndGet(ref, (state): Option.Option => { - return isActive(state) ? - Option.some(Changed) : - isChanged(state) ? - Option.some(Closed) : - Option.none() - }) + Effect.gen(function*() { + const ref = yield* Ref.make(Active) + const result1 = yield* Ref.updateSomeAndGet( + ref, + (state) => isActive(state) ? Option.some(Changed) : Option.none() ) + const result2 = yield* Ref.updateSomeAndGet(ref, (state): Option.Option => { + return isActive(state) ? + Option.some(Changed) : + isChanged(state) ? + Option.some(Closed) : + Option.none() + }) deepStrictEqual(result1, Changed) deepStrictEqual(result2, Closed) })) it.effect("modify", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(current)) - const result1 = yield* $(Ref.modify(ref, () => ["hello", update])) - const result2 = yield* $(Ref.get(ref)) + Effect.gen(function*() { + const ref = yield* Ref.make(current) + const result1 = yield* Ref.modify(ref, () => ["hello", update]) + const result2 = yield* Ref.get(ref) strictEqual(result1, "hello") strictEqual(result2, update) })) it.effect("modifySome - once", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Active)) - const result = yield* $( - Ref.modifySome(ref, "state does not change", (state) => - isClosed(state) ? - Option.some(["active", Active]) : - Option.none()) - ) + Effect.gen(function*() { + const ref = yield* Ref.make(Active) + const result = yield* Ref.modifySome(ref, "state does not change", (state) => + isClosed(state) ? + Option.some(["active", Active]) : + Option.none()) strictEqual(result, "state does not change") })) it.effect("modifySome - twice", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Active)) - const result1 = yield* $( - Ref.modifySome(ref, "state does not change", (state) => - isActive(state) ? - Option.some(["changed", Changed]) : - Option.none()) - ) - const result2 = yield* $( - Ref.modifySome(ref, "state does not change", (state) => - isActive(state) ? - Option.some(["changed", Changed]) : - isChanged(state) ? - Option.some(["closed", Closed]) : - Option.none()) - ) + Effect.gen(function*() { + const ref = yield* Ref.make(Active) + const result1 = yield* Ref.modifySome(ref, "state does not change", (state) => + isActive(state) ? + Option.some(["changed", Changed]) : + Option.none()) + const result2 = yield* Ref.modifySome(ref, "state does not change", (state) => + isActive(state) ? + Option.some(["changed", Changed]) : + isChanged(state) ? + Option.some(["closed", Closed]) : + Option.none()) strictEqual(result1, "changed") strictEqual(result2, "closed") })) diff --git a/packages/effect/test/Reloadable.test.ts b/packages/effect/test/Reloadable.test.ts index 4a87e197e9..bba8bf67d0 100644 --- a/packages/effect/test/Reloadable.test.ts +++ b/packages/effect/test/Reloadable.test.ts @@ -19,23 +19,23 @@ const Tag = Context.GenericTag("DummyService") describe("Reloadable", () => { it.effect("initialization", () => - Effect.gen(function*($) { - const counter = yield* $(Counter.make()) + Effect.gen(function*() { + const counter = yield* Counter.make() const layer = Reloadable.manual(Tag, { layer: Layer.scoped(Tag, pipe(counter.acquire(), Effect.as(DummyService))) }) - yield* $(Reloadable.get(Tag), Effect.provide(layer)) - const acquired = yield* $(counter.acquired()) + yield* pipe(Reloadable.get(Tag), Effect.provide(layer)) + const acquired = yield* counter.acquired() strictEqual(acquired, 1) })) it.effect("reload", () => - Effect.gen(function*($) { - const counter = yield* $(Counter.make()) + Effect.gen(function*() { + const counter = yield* Counter.make() const layer = Reloadable.manual(Tag, { layer: Layer.scoped(Tag, pipe(counter.acquire(), Effect.as(DummyService))) }) - yield* $(Reloadable.reload(Tag), Effect.provide(layer)) - const acquired = yield* $(counter.acquired()) + yield* pipe(Reloadable.reload(Tag), Effect.provide(layer)) + const acquired = yield* counter.acquired() strictEqual(acquired, 2) })) }) diff --git a/packages/effect/test/Resource.test.ts b/packages/effect/test/Resource.test.ts index a9b16c5fbb..67673211a3 100644 --- a/packages/effect/test/Resource.test.ts +++ b/packages/effect/test/Resource.test.ts @@ -6,44 +6,40 @@ import { describe } from "vitest" describe("Resource", () => { it.scoped("manual", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - const cached = yield* $(Resource.manual(Ref.get(ref))) - const resul1 = yield* $(Resource.get(cached)) - const result2 = yield* $( - pipe(Ref.set(ref, 1), Effect.zipRight(Resource.refresh(cached)), Effect.zipRight(Resource.get(cached))) + Effect.gen(function*() { + const ref = yield* Ref.make(0) + const cached = yield* Resource.manual(Ref.get(ref)) + const resul1 = yield* Resource.get(cached) + const result2 = yield* pipe( + Ref.set(ref, 1), + Effect.zipRight(Resource.refresh(cached)), + Effect.zipRight(Resource.get(cached)) ) strictEqual(resul1, 0) strictEqual(result2, 1) })) it.scoped("auto", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - const cached = yield* $(Resource.auto(Ref.get(ref), Schedule.spaced(Duration.millis(4)))) - const result1 = yield* $(Resource.get(cached)) - const result2 = yield* $( - pipe( - Ref.set(ref, 1), - Effect.zipRight(TestClock.adjust(Duration.millis(5))), - Effect.zipRight(Resource.get(cached)) - ) + Effect.gen(function*() { + const ref = yield* Ref.make(0) + const cached = yield* Resource.auto(Ref.get(ref), Schedule.spaced(Duration.millis(4))) + const result1 = yield* Resource.get(cached) + const result2 = yield* pipe( + Ref.set(ref, 1), + Effect.zipRight(TestClock.adjust(Duration.millis(5))), + Effect.zipRight(Resource.get(cached)) ) strictEqual(result1, 0) strictEqual(result2, 1) })) it.scopedLive("failed refresh doesn't affect cached value", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make>(Either.right(0))) - const cached = yield* $( - Resource.auto(Effect.flatMap(Ref.get(ref), identity), Schedule.spaced(Duration.millis(4))) - ) - const result1 = yield* $(Resource.get(cached)) - const result2 = yield* $( - pipe( - Ref.set(ref, Either.left("Uh oh!")), - Effect.zipRight(Effect.sleep(Duration.millis(5))), - Effect.zipRight(Resource.get(cached)) - ) + Effect.gen(function*() { + const ref = yield* Ref.make>(Either.right(0)) + const cached = yield* Resource.auto(Effect.flatMap(Ref.get(ref), identity), Schedule.spaced(Duration.millis(4))) + const result1 = yield* Resource.get(cached) + const result2 = yield* pipe( + Ref.set(ref, Either.left("Uh oh!")), + Effect.zipRight(Effect.sleep(Duration.millis(5))), + Effect.zipRight(Resource.get(cached)) ) strictEqual(result1, 0) strictEqual(result2, 0) diff --git a/packages/effect/test/Runtime.test.ts b/packages/effect/test/Runtime.test.ts index a4844d8b48..46a6fa8261 100644 --- a/packages/effect/test/Runtime.test.ts +++ b/packages/effect/test/Runtime.test.ts @@ -1,11 +1,11 @@ -import { Effect, Exit, FiberRef, Layer, Runtime } from "effect" +import { Effect, Exit, FiberRef, Layer, pipe, Runtime } from "effect" import { assertTrue, deepStrictEqual, strictEqual } from "effect/test/util" import { describe } from "vitest" import * as it from "./utils/extend.js" describe("Runtime", () => { it.effect("setFiberRef", () => - Effect.gen(function*(_) { + Effect.gen(function*() { const ref = FiberRef.unsafeMake(0) const runtime = Runtime.defaultRuntime.pipe( Runtime.setFiberRef(ref, 1) @@ -13,14 +13,14 @@ describe("Runtime", () => { let result = Runtime.runSync(runtime)(FiberRef.get(ref)) strictEqual(result, 1) - result = yield* _(FiberRef.get(ref), Effect.provide(runtime)) + result = yield* pipe(FiberRef.get(ref), Effect.provide(runtime)) strictEqual(result, 1) })) it.scoped("deleteFiberRef", () => - Effect.gen(function*(_) { + Effect.gen(function*() { const ref = FiberRef.unsafeMake({ value: 0 }) - const runtime = yield* _(Layer.toRuntime(Layer.effectDiscard(FiberRef.set(ref, { value: 1 })))) + const runtime = yield* (Layer.toRuntime(Layer.effectDiscard(FiberRef.set(ref, { value: 1 })))) let result = Runtime.runSync(runtime)(FiberRef.get(ref)) deepStrictEqual(result, { value: 1 }) diff --git a/packages/effect/test/STM.test.ts b/packages/effect/test/STM.test.ts index b872660d3f..4297fcc1ef 100644 --- a/packages/effect/test/STM.test.ts +++ b/packages/effect/test/STM.test.ts @@ -167,7 +167,7 @@ describe("STM", () => { })) it.effect("collectAll - ordering", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TQueue.bounded(3), STM.tap((queue) => pipe(queue, TQueue.offer(1))), @@ -175,12 +175,12 @@ describe("STM", () => { STM.tap((queue) => pipe(queue, TQueue.offer(3))), STM.flatMap((queue) => STM.all(Array.from({ length: 3 }, () => TQueue.take(queue)))) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(Array.from(result), [1, 2, 3]) })) it.effect("catchSome - catches matched errors", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( STM.fail(new Cause.RuntimeException("Ouch")), STM.tap(() => STM.succeed("everything is fine")), @@ -190,12 +190,12 @@ describe("STM", () => { Option.none() ) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(result, "gotcha") })) it.effect("catchSome - lets the error pass", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.RuntimeException("Ouch") const transaction = pipe( STM.fail(error), @@ -206,16 +206,16 @@ describe("STM", () => { Option.none() ) ) - const result = yield* $(Effect.exit(STM.commit(transaction))) + const result = yield* (Effect.exit(STM.commit(transaction))) deepStrictEqual(result, Exit.fail(error)) })) it.effect("collectAll - collects a list of transactional effects to a single transaction", () => - Effect.gen(function*($) { + Effect.gen(function*() { const chunk: Chunk.Chunk = Chunk.range(1, 100) - const iterable = yield* $(Effect.succeed(pipe(chunk, Chunk.map(TRef.make)))) - const refs = yield* $(STM.all(iterable)) - const result = yield* $( + const iterable = yield* (Effect.succeed(pipe(chunk, Chunk.map(TRef.make)))) + const refs = yield* (STM.all(iterable)) + const result = yield* ( Effect.forEach(refs, TRef.get, { concurrency: "unbounded" }) @@ -224,22 +224,22 @@ describe("STM", () => { })) it.effect("either - convert a successful computation into a Right", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = STM.either(STM.succeed(42)) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(result, Either.right(42)) })) it.effect("either - convert a failed computation into a Left", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = STM.either(STM.fail("Ouch")) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(result, Either.left("Ouch")) })) it.effect("environment - access and provide outside transaction", () => - Effect.gen(function*($) { - const result = yield* $(pipe( + Effect.gen(function*() { + const result = yield* (pipe( makeSTMEnv(0), Effect.flatMap((env) => pipe( @@ -254,8 +254,8 @@ describe("STM", () => { })) it.effect("environment - access and provide inside transaction", () => - Effect.gen(function*($) { - const result = yield* $(pipe( + Effect.gen(function*() { + const result = yield* (pipe( makeSTMEnv(0), Effect.flatMap((env) => pipe( @@ -269,7 +269,7 @@ describe("STM", () => { })) it.effect("eventually - succeeds", () => - Effect.gen(function*($) { + Effect.gen(function*() { const f = (ref: TRef.TRef) => STM.gen(function*() { const n = yield* TRef.get(ref) @@ -281,189 +281,189 @@ describe("STM", () => { TRef.make(0), STM.flatMap((ref) => STM.eventually(f(ref))) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) strictEqual(result, 10) })) it.effect("fail", () => - Effect.gen(function*($) { - const result = yield* $(Effect.exit(STM.commit(STM.fail("Ouch")))) + Effect.gen(function*() { + const result = yield* (Effect.exit(STM.commit(STM.fail("Ouch")))) deepStrictEqual(result, Exit.fail("Ouch")) })) it.effect("filter - filters a collection using an effectual predicate", () => - Effect.gen(function*($) { + Effect.gen(function*() { const array = [2, 4, 6, 3, 5, 6] - const transaction = STM.gen(function*($) { - const ref = yield* $(TRef.make(Chunk.empty())) - const results = yield* $(pipe( + const transaction = STM.gen(function*() { + const ref = yield* (TRef.make(Chunk.empty())) + const results = yield* (pipe( array, STM.filter((n) => pipe(ref, TRef.update(Chunk.append(n)), STM.as(n % 2 === 0))) )) - const effects = yield* $(TRef.get(ref)) + const effects = yield* (TRef.get(ref)) return { results, effects } }) - const { effects, results } = yield* $(STM.commit(transaction)) + const { effects, results } = yield* (STM.commit(transaction)) deepStrictEqual(Array.from(results), [2, 4, 6, 6]) deepStrictEqual(Array.from(effects), array) })) it.effect("filterOrDie - dies when predicate fails", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.RuntimeException("Ouch") const transaction = pipe( STM.succeed(1), STM.filterOrDie((n) => n !== 1, () => error) ) - const result = yield* $(Effect.exit(STM.commit(transaction))) + const result = yield* (Effect.exit(STM.commit(transaction))) deepStrictEqual(result, Exit.die(error)) })) it.effect("filterOrDieMessage - dies with message when predicate fails", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( STM.succeed(1), STM.filterOrDieMessage((n) => n !== 1, "Ouch") ) - const result = yield* $(Effect.exit(STM.commit(transaction))) + const result = yield* (Effect.exit(STM.commit(transaction))) deepStrictEqual(result, Exit.die(new Cause.RuntimeException("Ouch"))) })) it.effect("filterOrElse - returns checked failure", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( STM.succeed(1), STM.filterOrElse((n) => n === 1, () => STM.succeed(2)) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) strictEqual(result, 1) })) it.effect("filterOrElse - returns held value", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( STM.succeed(1), STM.filterOrElse((n) => n !== 1, () => STM.succeed(2)) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) strictEqual(result, 2) })) it.effect("filterOrElse - returns checked failure", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( STM.succeed(1), STM.filterOrElse((n) => n === 1, (n) => STM.succeed(n + 1)) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) strictEqual(result, 1) })) it.effect("filterOrElse - returns held value", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( STM.succeed(1), STM.filterOrElse((n) => n !== 1, (n) => STM.succeed(n + 1)) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) strictEqual(result, 2) })) it.effect("filterOrElse - returns error", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.RuntimeException("Ouch") const transaction = pipe( STM.fail(error), STM.zipRight(STM.succeed(1)), STM.filterOrElse((n) => n === 1, (n) => STM.succeed(n + 1)) ) - const result = yield* $(Effect.exit(STM.commit(transaction))) + const result = yield* (Effect.exit(STM.commit(transaction))) deepStrictEqual(result, Exit.fail(error)) })) it.effect("filterOrFail - returns failure when predicate fails", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.RuntimeException("Ouch") const transaction = pipe( STM.succeed(1), STM.filterOrFail((n) => n !== 1, () => error) ) - const result = yield* $(Effect.exit(STM.commit(transaction))) + const result = yield* (Effect.exit(STM.commit(transaction))) deepStrictEqual(result, Exit.fail(error)) })) it.effect("flatten", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = STM.flatten(STM.succeed(STM.succeed("test"))) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) strictEqual(result, "test") })) it.effect("forEach - performs an action on each chunk element and return a single transaction", () => - Effect.gen(function*($) { - const ref = yield* $(TRef.make(0)) + Effect.gen(function*() { + const ref = yield* (TRef.make(0)) const chunk = Chunk.range(1, 5) - yield* $(pipe(chunk, STM.forEach((n) => pipe(ref, TRef.update((i) => i + n))))) + yield* (pipe(chunk, STM.forEach((n) => pipe(ref, TRef.update((i) => i + n))))) const expected = pipe(chunk, Chunk.reduceRight(0, (acc, curr) => acc + curr)) - const result = yield* $(TRef.get(ref)) + const result = yield* (TRef.get(ref)) strictEqual(result, expected) })) it.effect("forEach - performs an action on each chunk element", () => - Effect.gen(function*($) { - const ref = yield* $(TRef.make(0)) + Effect.gen(function*() { + const ref = yield* (TRef.make(0)) const chunk = Chunk.range(1, 5) - yield* $(STM.forEach(chunk, (n) => pipe(ref, TRef.update((i) => i + n)), { discard: true })) + yield* (STM.forEach(chunk, (n) => pipe(ref, TRef.update((i) => i + n)), { discard: true })) const expected = pipe(chunk, Chunk.reduceRight(0, (acc, curr) => acc + curr)) - const result = yield* $(TRef.get(ref)) + const result = yield* (TRef.get(ref)) strictEqual(result, expected) })) it.effect("fold - handles both failure and success", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = STM.all({ success: pipe(STM.succeed("yes"), STM.match({ onFailure: () => -1, onSuccess: () => 1 })), failure: pipe(STM.fail("no"), STM.match({ onFailure: () => -1, onSuccess: () => 1 })) }) - const { failure, success } = yield* $(STM.commit(transaction)) + const { failure, success } = yield* (STM.commit(transaction)) strictEqual(success, 1) strictEqual(failure, -1) })) it.effect("foldSTM - folds over the `STM` effect, and handle failure and success", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = STM.all({ success: pipe(STM.succeed("yes"), STM.matchSTM({ onFailure: () => STM.succeed("no"), onSuccess: STM.succeed })), failure: pipe(STM.fail("no"), STM.matchSTM({ onFailure: STM.succeed, onSuccess: () => STM.succeed("yes") })) }) - const { failure, success } = yield* $(STM.commit(transaction)) + const { failure, success } = yield* (STM.commit(transaction)) strictEqual(failure, "no") strictEqual(success, "yes") })) it.effect("head - extracts the first value from an iterable", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = STM.head(STM.succeed([1, 2])) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) strictEqual(result, 1) })) it.effect("head - returns None if the iterable is empty", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = STM.head(STM.succeed([])) - const result = yield* $(Effect.exit(STM.commit(transaction))) + const result = yield* (Effect.exit(STM.commit(transaction))) assertFailure(result, Cause.fail(Option.none())) })) it.effect("head - returns Some if there is an error", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = STM.head(STM.fail("Ouch")) - const result = yield* $(Effect.exit(STM.commit(transaction))) + const result = yield* (Effect.exit(STM.commit(transaction))) assertFailure(result, Cause.fail(Option.some("Ouch"))) })) it.effect("if - runs `onTrue` if result is `true`", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( STM.succeed(true), STM.if({ @@ -471,12 +471,12 @@ describe("STM", () => { onTrue: STM.succeed(1) }) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) strictEqual(result, 1) })) it.effect("if - runs `onFalse` if result is `false`", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( STM.succeed(false), STM.if({ @@ -484,295 +484,295 @@ describe("STM", () => { onTrue: STM.succeed(1) }) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) strictEqual(result, -1) })) it.effect("mapBoth - success value", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe(STM.succeed(1), STM.mapBoth({ onFailure: () => -1, onSuccess: (n) => `${n} as string` })) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) strictEqual(result, "1 as string") })) it.effect("mapBoth - success value", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe(STM.fail(-1), STM.mapBoth({ onFailure: (n) => `${n} as string`, onSuccess: () => 0 })) - const result = yield* $(Effect.exit(STM.commit(transaction))) + const result = yield* (Effect.exit(STM.commit(transaction))) deepStrictEqual(result, Exit.fail("-1 as string")) })) it.effect("mapError - map from one error to another", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe(STM.fail(-1), STM.mapError(() => "Ouch")) - const result = yield* $(Effect.exit(STM.commit(transaction))) + const result = yield* (Effect.exit(STM.commit(transaction))) deepStrictEqual(result, Exit.fail("Ouch")) })) it.effect("merge - on error", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = STM.merge(STM.fromEither(Either.left(1))) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) strictEqual(result, 1) })) it.effect("merge - on success", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = STM.merge(STM.fromEither(Either.right(1))) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) strictEqual(result, 1) })) it.effect("mergeAll - return zero element on empty input", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( Chunk.empty>(), STM.mergeAll(42, () => 43) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) strictEqual(result, 42) })) it.effect("mergeAll - merge iterable using function", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( [3, 5, 7].map((n) => STM.succeed(n)), STM.mergeAll(1, (acc, curr) => acc + curr) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) strictEqual(result, 1 + 3 + 5 + 7) })) it.effect("mergeAll - return error if it exists in list", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( [STM.void, STM.fail(1)] as Array>, STM.mergeAll(void 0 as void, constVoid) ) - const result = yield* $(Effect.exit(STM.commit(transaction))) + const result = yield* (Effect.exit(STM.commit(transaction))) deepStrictEqual(result, Exit.fail(1)) })) it.effect("none - on None", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = STM.none(STM.succeed(Option.none())) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) strictEqual(result, undefined) })) it.effect("none - on Some", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = STM.none(STM.succeed(Option.some(1))) - const result = yield* $(Effect.exit(STM.commit(transaction))) + const result = yield* (Effect.exit(STM.commit(transaction))) assertFailure(result, Cause.fail(Option.none())) })) it.effect("none - on error", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.RuntimeException("Ouch") const transaction = STM.none(STM.fail(error)) - const result = yield* $(Effect.exit(STM.commit(transaction))) + const result = yield* (Effect.exit(STM.commit(transaction))) assertFailure(result, Cause.fail(Option.some(error))) })) it.effect("option - success converts to Some", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = STM.option(STM.succeed(42)) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) assertSome(result, 42) })) it.effect("option - failure converts to None", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = STM.option(STM.fail("Ouch")) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) assertNone(result) })) it.effect("orElse - succeeds if left succeeds", () => - Effect.gen(function*($) { + Effect.gen(function*() { const left = STM.succeed("left") const right = STM.succeed("right") - const result = yield* $(STM.commit(pipe(left, STM.orElse(() => right)))) + const result = yield* (STM.commit(pipe(left, STM.orElse(() => right)))) strictEqual(result, "left") })) it.effect("orElse - succeeds if right succeeds", () => - Effect.gen(function*($) { + Effect.gen(function*() { const left = STM.retry const right = STM.succeed("right") - const result = yield* $(STM.commit(pipe(left, STM.orElse(() => right)))) + const result = yield* (STM.commit(pipe(left, STM.orElse(() => right)))) strictEqual(result, "right") })) it.effect("orElse - tries alternative once left retries", () => - Effect.gen(function*($) { - const ref = yield* $(TRef.make(0)) + Effect.gen(function*() { + const ref = yield* (TRef.make(0)) const left = pipe(ref, TRef.update((n) => n + 100), STM.zipRight(STM.retry)) const right = pipe(ref, TRef.update((n) => n + 200)) - yield* $(pipe(left, STM.orElse(() => right))) - const result = yield* $(TRef.get(ref)) + yield* (pipe(left, STM.orElse(() => right))) + const result = yield* (TRef.get(ref)) strictEqual(result, 200) })) it.effect("orElse - tries alternative once left fails", () => - Effect.gen(function*($) { - const ref = yield* $(TRef.make(0)) + Effect.gen(function*() { + const ref = yield* (TRef.make(0)) const left = pipe(ref, TRef.update((n) => n + 100), STM.zipRight(STM.fail("boom"))) const right = pipe(ref, TRef.update((n) => n + 200)) - yield* $(pipe(left, STM.orElse(() => right))) - const result = yield* $(TRef.get(ref)) + yield* (pipe(left, STM.orElse(() => right))) + const result = yield* (TRef.get(ref)) strictEqual(result, 200) })) it.effect("orElse - fail if alternative fails", () => - Effect.gen(function*($) { + Effect.gen(function*() { const left = STM.fail("left") const right = STM.fail("right") - const result = yield* $(pipe(left, STM.orElse(() => right), Effect.exit)) + const result = yield* (pipe(left, STM.orElse(() => right), Effect.exit)) assertFailure(result, Cause.fail("right")) })) it.effect("orElseEither - orElseEither returns result of the first successful transaction", () => - Effect.gen(function*($) { - const result1 = yield* $(pipe(STM.retry, STM.orElseEither(() => STM.succeed(42)))) - const result2 = yield* $(pipe(STM.succeed(1), STM.orElseEither(() => STM.succeed("no")))) - const result3 = yield* $(pipe(STM.succeed(2), STM.orElseEither(() => STM.retry))) + Effect.gen(function*() { + const result1 = yield* (pipe(STM.retry, STM.orElseEither(() => STM.succeed(42)))) + const result2 = yield* (pipe(STM.succeed(1), STM.orElseEither(() => STM.succeed("no")))) + const result3 = yield* (pipe(STM.succeed(2), STM.orElseEither(() => STM.retry))) assertRight(result1, 42) assertLeft(result2, 1) assertLeft(result3, 2) })) it.effect("orElseFail - tries left first", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe(STM.succeed(true), STM.orElseFail(() => false)) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) assertTrue(result) })) it.effect("orElseFail - fails with the specified error once left retries", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe(STM.retry, STM.orElseFail(() => false), STM.either) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) assertLeft(result, false) })) it.effect("orElseFail - fails with the specified error once left fails", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe(STM.fail(true), STM.orElseFail(() => false), STM.either) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) assertLeft(result, false) })) it.effect("orElseSucceed - tries left first", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe(STM.succeed(true), STM.orElseSucceed(() => false)) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) assertTrue(result) })) it.effect("orElseSucceed - succeeds with the specified error once left retries", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe(STM.retry, STM.orElseSucceed(() => false)) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) assertFalse(result) })) it.effect("orElseSucceed - succeeds with the specified error once left fails", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe(STM.fail(true), STM.orElseSucceed(() => false)) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) assertFalse(result) })) it.effect("unsome - converts Some in E to error in E", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = STM.unsome(STM.fromEither(Either.left(Option.some("Ouch")))) - const result = yield* $(Effect.exit(STM.commit(transaction))) + const result = yield* (Effect.exit(STM.commit(transaction))) deepStrictEqual(result, Exit.fail("Ouch")) })) it.effect("unsome - converts None in E to None in A", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = STM.unsome(STM.fromEither(Either.left(Option.none()))) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) assertNone(result) })) it.effect("unsome - no error", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = STM.unsome(STM.fromEither(Either.right(42))) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) assertSome(result, 42) })) it.effect("orDie - when failure should die", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.RuntimeException("Ouch") const transaction = STM.orDie(STM.fail(error)) - const result = yield* $(Effect.exit(STM.commit(transaction))) + const result = yield* (Effect.exit(STM.commit(transaction))) deepStrictEqual(result, Exit.die(error)) })) it.effect("orDie - when succeed should keep going", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = STM.orDie(STM.succeed(1)) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) strictEqual(result, 1) })) it.effect("orDieWith - when failure should die", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.RuntimeException("Ouch") const transaction = pipe(STM.fail("-1"), STM.orDieWith(() => error)) - const result = yield* $(Effect.exit(STM.commit(transaction))) + const result = yield* (Effect.exit(STM.commit(transaction))) deepStrictEqual(result, Exit.die(error)) })) it.effect("orDieWith - when succeed should keep going", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.RuntimeException("Ouch") const transaction = pipe(STM.succeed(1), STM.orDieWith(() => error)) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) strictEqual(result, 1) })) it.effect("partition - collects only successes", () => - Effect.gen(function*($) { + Effect.gen(function*() { const input = Chunk.range(0, 9) const transaction = pipe(input, STM.partition(STM.succeed)) - const [left, right] = yield* $(STM.commit(transaction)) + const [left, right] = yield* (STM.commit(transaction)) assertTrue(left.length === 0) deepStrictEqual(Array.from(right), Array.from(input)) })) it.effect("partition - collects only failures", () => - Effect.gen(function*($) { + Effect.gen(function*() { const input = Chunk.range(0, 9) const transaction = pipe(input, STM.partition(STM.fail)) - const [left, right] = yield* $(STM.commit(transaction)) + const [left, right] = yield* (STM.commit(transaction)) assertTrue(right.length === 0) deepStrictEqual(Array.from(left), Array.from(input)) })) it.effect("partition - collects successes and failures", () => - Effect.gen(function*($) { + Effect.gen(function*() { const input = Chunk.range(0, 9) const transaction = pipe(input, STM.partition((n) => n % 2 === 0 ? STM.fail(n) : STM.succeed(n))) - const [left, right] = yield* $(STM.commit(transaction)) + const [left, right] = yield* (STM.commit(transaction)) deepStrictEqual(Array.from(left), [0, 2, 4, 6, 8]) deepStrictEqual(Array.from(right), [1, 3, 5, 7, 9]) })) it.effect("partition - evaluates effects in the correct order", () => - Effect.gen(function*($) { + Effect.gen(function*() { const input = [2, 4, 6, 3, 5, 6] - const transaction = STM.gen(function*($) { - const ref = yield* $(TRef.make(Chunk.empty())) - yield* $(pipe(input, STM.partition((n) => pipe(ref, TRef.update(Chunk.append(n)))))) - return yield* $(TRef.get(ref)) + const transaction = STM.gen(function*() { + const ref = yield* (TRef.make(Chunk.empty())) + yield* (pipe(input, STM.partition((n) => pipe(ref, TRef.update(Chunk.append(n)))))) + return yield* (TRef.get(ref)) }) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(Array.from(result), input) })) @@ -804,22 +804,22 @@ describe("STM", () => { }))) it.effect("reduceAll", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( [2, 3, 4].map((n) => STM.succeed(n)), STM.reduceAll(STM.succeed(1), (a, b) => a + b) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) strictEqual(result, 10) })) it.effect("reduceAll - empty iterable", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( Chunk.empty>(), STM.reduceAll(STM.succeed(1), (a, b) => a + b) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) strictEqual(result, 1) })) @@ -851,47 +851,47 @@ describe("STM", () => { }))) it.effect("reject - doesnt collect value", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( STM.succeed(0), STM.reject((n) => n !== 0 ? Option.some("Ouch") : Option.none()) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) strictEqual(result, 0) })) it.effect("reject - returns failure ignoring value", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( STM.succeed(1), STM.reject((n) => n !== 0 ? Option.some("Ouch") : Option.none()) ) - const result = yield* $(Effect.exit(STM.commit(transaction))) + const result = yield* (Effect.exit(STM.commit(transaction))) deepStrictEqual(result, Exit.fail("Ouch")) })) it.effect("rejectSTM - doesnt collect value", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( STM.succeed(0), STM.rejectSTM((n) => n !== 0 ? Option.some(STM.succeed("Ouch")) : Option.none()) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) strictEqual(result, 0) })) it.effect("rejectSTM - returns failure ignoring value", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( STM.succeed(1), STM.rejectSTM((n) => n !== 0 ? Option.some(STM.succeed("Ouch")) : Option.none()) ) - const result = yield* $(Effect.exit(STM.commit(transaction))) + const result = yield* (Effect.exit(STM.commit(transaction))) deepStrictEqual(result, Exit.fail("Ouch")) })) it.effect("repeatWhile - runs effect while it satisfies predicate", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TQueue.bounded(5), STM.tap((queue) => pipe(queue, TQueue.offerAll([0, 0, 0, 1, 2]))), @@ -902,12 +902,12 @@ describe("STM", () => { ) ) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) strictEqual(result, 1) })) it.effect("repeatUntil - runs effect until it satisfies predicate", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TQueue.bounded(5), STM.tap((queue) => pipe(queue, TQueue.offerAll([0, 0, 0, 1, 2]))), @@ -918,56 +918,56 @@ describe("STM", () => { ) ) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) strictEqual(result, 1) })) it.effect("replicate - zero", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = STM.all(STM.replicate(STM.succeed(12), 0)) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(Array.from(result), []) })) it.effect("replicate - negative", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = STM.all(STM.replicate(STM.succeed(12), -1)) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(Array.from(result), []) })) it.effect("replicate - positive", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = STM.all(STM.replicate(STM.succeed(12), 2)) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(Array.from(result), [12, 12]) })) it.effect("some - extracts the value from Some", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = STM.some(STM.succeed(Option.some(1))) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) strictEqual(result, 1) })) it.effect("some - fails on None", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = STM.some(STM.succeed(Option.none())) - const result = yield* $(Effect.exit(STM.commit(transaction))) + const result = yield* (Effect.exit(STM.commit(transaction))) assertFailure(result, Cause.fail(Option.none())) })) it.effect("some - fails on error", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.RuntimeException("Ouch") const transaction = STM.some(STM.fail(error)) - const result = yield* $(Effect.exit(STM.commit(transaction))) + const result = yield* (Effect.exit(STM.commit(transaction))) assertFailure(result, Cause.fail(Option.some(error))) })) it.effect("succeed", () => - Effect.gen(function*($) { - const result = yield* $(STM.commit(STM.succeed("test"))) + Effect.gen(function*() { + const result = yield* (STM.commit(STM.succeed("test"))) strictEqual(result, "test") })) @@ -978,22 +978,22 @@ describe("STM", () => { })) it.effect("summarized - returns summary and value", () => - Effect.gen(function*($) { - const transaction = STM.gen(function*($) { - const ref = yield* $(TRef.make(0)) + Effect.gen(function*() { + const transaction = STM.gen(function*() { + const ref = yield* (TRef.make(0)) const increment = pipe(ref, TRef.updateAndGet((n) => n + 1)) - const result = yield* $(pipe( + const result = yield* (pipe( increment, STM.summarized(increment, (before, after) => [before, after] as const) )) return [result[0][0], result[1], result[0][1]] as const }) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(result, [1, 2, 3]) })) it.effect("tap - applies the function to the result preserving the original result", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( STM.all([TRef.make(10), TRef.make(0)]), STM.flatMap(([refA, refB]) => @@ -1003,36 +1003,36 @@ describe("STM", () => { }) ) ) - const { result1, result2 } = yield* $(STM.commit(transaction)) + const { result1, result2 } = yield* (STM.commit(transaction)) strictEqual(result1, 10) strictEqual(result2, 11) })) it.effect("tapBoth - applies the function to success values preserving the original result", () => - Effect.gen(function*($) { - const transaction = STM.gen(function*($) { - const tapSuccess = yield* $(TDeferred.make()) - const tapError = yield* $(TDeferred.make()) - const result = yield* $(pipe( + Effect.gen(function*() { + const transaction = STM.gen(function*() { + const tapSuccess = yield* (TDeferred.make()) + const tapError = yield* (TDeferred.make()) + const result = yield* (pipe( STM.succeed(42), STM.tapBoth({ onFailure: (e: string) => pipe(tapError, TDeferred.succeed(e)), onSuccess: (n) => pipe(tapSuccess, TDeferred.succeed(n)) }) )) - const success = yield* $(TDeferred.await(tapSuccess)) + const success = yield* (TDeferred.await(tapSuccess)) return [result, success] as const }) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(result, [42, 42]) })) it.effect("tapBoth - applies the function to error values preserving the original error", () => - Effect.gen(function*($) { - const transaction = STM.gen(function*($) { - const tapSuccess = yield* $(TDeferred.make()) - const tapError = yield* $(TDeferred.make()) - const result = yield* $(pipe( + Effect.gen(function*() { + const transaction = STM.gen(function*() { + const tapSuccess = yield* (TDeferred.make()) + const tapError = yield* (TDeferred.make()) + const result = yield* (pipe( STM.fail("error"), STM.tapBoth({ onFailure: (e) => pipe(tapError, TDeferred.succeed(e)), @@ -1040,35 +1040,35 @@ describe("STM", () => { }), STM.either )) - const error = yield* $(TDeferred.await(tapError)) + const error = yield* (TDeferred.await(tapError)) return [result, error] as const }) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(result, [Either.left("error"), "error"]) })) it.effect("tapError - should apply the function to the error result preserving the original error", () => - Effect.gen(function*($) { - const transaction = STM.gen(function*($) { - const errorRef = yield* $(TDeferred.make()) - const result = yield* $(pipe( + Effect.gen(function*() { + const transaction = STM.gen(function*() { + const errorRef = yield* (TDeferred.make()) + const result = yield* (pipe( STM.fail("error"), STM.zipRight(STM.succeed(0)), STM.tapError((e) => pipe(errorRef, TDeferred.succeed(e))), STM.either )) - const error = yield* $(TDeferred.await(errorRef)) + const error = yield* (TDeferred.await(errorRef)) return [result, error] }) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(result, [Either.left("error"), "error"]) })) it.effect("validateAll - returns all errors if never valid", () => - Effect.gen(function*($) { + Effect.gen(function*() { const input = Array.from({ length: 10 }, () => 0) const transaction = pipe(input, STM.validateAll(STM.fail)) - const result = yield* $(pipe( + const result = yield* (pipe( STM.commit(transaction), Effect.mapError((chunk) => Array.from(chunk)), Effect.exit @@ -1077,10 +1077,10 @@ describe("STM", () => { })) it.effect("validateAll - accumulate errors and ignore successes", () => - Effect.gen(function*($) { + Effect.gen(function*() { const input = Chunk.range(0, 9) const transaction = pipe(input, STM.validateAll((n) => n % 2 === 0 ? STM.succeed(n) : STM.fail(n))) - const result = yield* $(pipe( + const result = yield* (pipe( STM.commit(transaction), Effect.mapError((chunk) => Array.from(chunk)), Effect.exit @@ -1089,10 +1089,10 @@ describe("STM", () => { })) it.effect("validateAll - accumulate successes", () => - Effect.gen(function*($) { + Effect.gen(function*() { const input = Array.from({ length: 10 }, () => 0) const transaction = pipe(input, STM.validateAll(STM.succeed)) - const result = yield* $(pipe( + const result = yield* (pipe( STM.commit(transaction), Effect.map((chunk) => Array.from(chunk)) )) @@ -1100,10 +1100,10 @@ describe("STM", () => { })) it.effect("validateFirst - returns all errors if never valid", () => - Effect.gen(function*($) { + Effect.gen(function*() { const input = Array.from({ length: 10 }, () => 0) const transaction = pipe(input, STM.validateFirst(STM.fail)) - const result = yield* $(pipe( + const result = yield* (pipe( STM.commit(transaction), Effect.mapError((chunk) => Array.from(chunk)), Effect.exit @@ -1112,27 +1112,27 @@ describe("STM", () => { })) it.effect("validateFirst - runs sequentially and short circuits on first success validation", () => - Effect.gen(function*($) { + Effect.gen(function*() { const input = Chunk.range(1, 9) const f = (n: number) => n === 6 ? STM.succeed(n) : STM.fail(n) - const transaction = STM.gen(function*($) { - const ref = yield* $(TRef.make(0)) - const result = yield* $(pipe( + const transaction = STM.gen(function*() { + const ref = yield* (TRef.make(0)) + const result = yield* (pipe( input, STM.validateFirst((n) => pipe(ref, TRef.update((n) => n + 1), STM.zipRight(f(n)))) )) - const counter = yield* $(TRef.get(ref)) + const counter = yield* (TRef.get(ref)) return [result, counter] as const }) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(result, [6, 6]) })) it.effect("validateFirst - returns errors in correct order", () => - Effect.gen(function*($) { + Effect.gen(function*() { const input = [2, 4, 6, 3, 5, 6] const transaction = pipe(input, STM.validateFirst(STM.fail)) - const result = yield* $(pipe( + const result = yield* (pipe( STM.commit(transaction), Effect.mapError((chunk) => Array.from(chunk)), Effect.exit @@ -1141,34 +1141,34 @@ describe("STM", () => { })) it.effect("when - true", () => - Effect.gen(function*($) { - const ref = yield* $(TRef.make(false)) + Effect.gen(function*() { + const ref = yield* (TRef.make(false)) const transaction = pipe( ref, TRef.set(true), STM.when(constTrue), STM.zipRight(TRef.get(ref)) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) assertTrue(result) })) it.effect("when - false", () => - Effect.gen(function*($) { - const ref = yield* $(TRef.make(false)) + Effect.gen(function*() { + const ref = yield* (TRef.make(false)) const transaction = pipe( ref, TRef.set(true), STM.when(constFalse), STM.zipRight(TRef.get(ref)) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) assertFalse(result) })) it.effect("whenSTM - true", () => - Effect.gen(function*($) { - const ref = yield* $(TRef.make(0)) + Effect.gen(function*() { + const ref = yield* (TRef.make(0)) const isZero = pipe(TRef.get(ref), STM.map((n) => n === 0)) const transaction = pipe( ref, @@ -1176,13 +1176,13 @@ describe("STM", () => { STM.whenSTM(isZero), STM.zipRight(TRef.get(ref)) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) strictEqual(result, 1) })) it.effect("whenSTM - false", () => - Effect.gen(function*($) { - const ref = yield* $(TRef.make(0)) + Effect.gen(function*() { + const ref = yield* (TRef.make(0)) const isZero = pipe(TRef.get(ref), STM.map((n) => n !== 0)) const transaction = pipe( ref, @@ -1190,29 +1190,29 @@ describe("STM", () => { STM.whenSTM(isZero), STM.zipRight(TRef.get(ref)) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) strictEqual(result, 0) })) it.effect("zip - return a tuple of two computations", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe(STM.succeed(1), STM.zip(STM.succeed("A"))) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(result, [1, "A"]) })) it.effect("zipWith - perform an action on two computations", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe(STM.succeed(578), STM.zipWith(STM.succeed(2), (a, b) => a + b)) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) strictEqual(result, 580) })) it.effect("stack-safety - long orElse chains", () => - Effect.gen(function*($) { - const transaction = STM.gen(function*($) { - const ref = yield* $(TRef.make(0)) - const value = yield* $(STM.loop(10_000, { + Effect.gen(function*() { + const transaction = STM.gen(function*() { + const ref = yield* (TRef.make(0)) + const value = yield* (STM.loop(10_000, { while: (n) => n > 0, step: (n) => n - 1, body: () => @@ -1223,58 +1223,58 @@ describe("STM", () => { discard: true })) strictEqual(value, void 0) - return yield* $(TRef.get(ref)) + return yield* (TRef.get(ref)) }) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) strictEqual(result, 10_000) })) it.effect("stack-safety - long map chains", () => - Effect.gen(function*($) { - const result = yield* $(chain(10_000)(STM.map((n) => n + 1))) + Effect.gen(function*() { + const result = yield* (chain(10_000)(STM.map((n) => n + 1))) strictEqual(result, 10_000) })) it.effect("stack-safety - long collect chains", () => - Effect.gen(function*($) { - const result = yield* $(chain(10_000)(STM.collect((n) => Option.some(n + 1)))) + Effect.gen(function*() { + const result = yield* (chain(10_000)(STM.collect((n) => Option.some(n + 1)))) strictEqual(result, 10_000) })) it.effect("stack-safety - long collectSTM chains", () => - Effect.gen(function*($) { - const result = yield* $(chain(10_000)(STM.collectSTM((n) => Option.some(STM.succeed(n + 1))))) + Effect.gen(function*() { + const result = yield* (chain(10_000)(STM.collectSTM((n) => Option.some(STM.succeed(n + 1))))) strictEqual(result, 10_000) })) it.effect("stack-safety - long flatMap chains", () => - Effect.gen(function*($) { - const result = yield* $(chain(10_000)(STM.flatMap((n) => STM.succeed(n + 1)))) + Effect.gen(function*() { + const result = yield* (chain(10_000)(STM.flatMap((n) => STM.succeed(n + 1)))) strictEqual(result, 10_000) })) it.effect("stack-safety - long fold chains", () => - Effect.gen(function*($) { - const result = yield* $(chain(10_000)(STM.match({ onFailure: () => 0, onSuccess: (n) => n + 1 }))) + Effect.gen(function*() { + const result = yield* (chain(10_000)(STM.match({ onFailure: () => 0, onSuccess: (n) => n + 1 }))) strictEqual(result, 10_000) })) it.effect("stack-safety - long foldSTM chains", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* ( chain(10_000)(STM.matchSTM({ onFailure: () => STM.succeed(0), onSuccess: (n) => STM.succeed(n + 1) })) ) strictEqual(result, 10_000) })) it.effect("stack-safety - long mapError chains", () => - Effect.gen(function*($) { - const result = yield* $(Effect.exit(chainError(10_000))) + Effect.gen(function*() { + const result = yield* (Effect.exit(chainError(10_000))) deepStrictEqual(result, Exit.fail(10_000)) })) it.effect("stack-safety - long orElse chains", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TRef.make(0), STM.tap((ref) => @@ -1287,21 +1287,21 @@ describe("STM", () => { ), STM.flatMap(TRef.get) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) strictEqual(result, 10_000) })) it.effect("stack-safety - long provideEnvironment chains", () => - Effect.gen(function*($) { - const result = yield* $(chain(10_000)(STM.provideContext(Context.empty()))) + Effect.gen(function*() { + const result = yield* (chain(10_000)(STM.provideContext(Context.empty()))) strictEqual(result, 0) })) it.effect("ZIO STM (Issue #2073)", () => - Effect.gen(function*($) { - const ref0 = yield* $(TRef.make(0)) - const ref1 = yield* $(TRef.make(0)) - const fiber = yield* $(pipe( + Effect.gen(function*() { + const ref0 = yield* (TRef.make(0)) + const ref1 = yield* (TRef.make(0)) + const fiber = yield* (pipe( TRef.get(ref0), STM.flatMap((value0) => pipe( @@ -1312,45 +1312,45 @@ describe("STM", () => { STM.commit, Effect.fork )) - yield* $(pipe( + yield* (pipe( ref0, TRef.update((n) => n + 1), STM.flatMap(() => pipe(ref1, TRef.update((n) => n + 1))), STM.commit )) - const result = yield* $(Fiber.join(fiber)) + const result = yield* (Fiber.join(fiber)) assertTrue(result === 0 || result === 2) })) describe("concurrent computations", () => { it.effect("increment `TRef` 100 times in 100 fibers", () => - Effect.gen(function*($) { - const ref = yield* $(TRef.make(0)) - const fiber = yield* $(Effect.forkAll( + Effect.gen(function*() { + const ref = yield* (TRef.make(0)) + const fiber = yield* (Effect.forkAll( Array.from({ length: 10 }, () => incrementTRefN(99, ref)) )) - yield* $(Fiber.join(fiber)) - const result = yield* $(TRef.get(ref)) + yield* (Fiber.join(fiber)) + const result = yield* (TRef.get(ref)) strictEqual(result, 1_000) })) it.effect("compute a `TRef` from 2 variables, increment the first `TRef` and decrement the second `TRef` in different fibers", () => - Effect.gen(function*($) { - const refs = yield* $(STM.all([TRef.make(10_000), TRef.make(0), TRef.make(0)])) - const fiber = yield* $(Effect.forkAll( + Effect.gen(function*() { + const refs = yield* (STM.all([TRef.make(10_000), TRef.make(0), TRef.make(0)])) + const fiber = yield* (Effect.forkAll( Array.from({ length: 10 }, () => compute3TRefN(99, refs[0], refs[1], refs[2])) )) - yield* $(Fiber.join(fiber)) - const result = yield* $(TRef.get(refs[2])) + yield* (Fiber.join(fiber)) + const result = yield* (TRef.get(refs[2])) strictEqual(result, 10_000) })) }) it.effect("condition locks - resume directly when the condition is already satisfied", () => - Effect.gen(function*($) { - const ref1 = yield* $(TRef.make(10)) - const ref2 = yield* $(TRef.make("failed")) - const result = yield* $(pipe( + Effect.gen(function*() { + const ref1 = yield* (TRef.make(10)) + const ref2 = yield* (TRef.make("failed")) + const result = yield* (pipe( TRef.get(ref1), STM.tap((n) => STM.check(() => n > 0)), STM.tap(() => pipe(ref2, TRef.set("success"))), @@ -1361,25 +1361,25 @@ describe("STM", () => { })) it.effect("condition locks - resume directly when the condition is already satisfied and change the ref with non-satisfying value", () => - Effect.gen(function*($) { - const ref = yield* $(TRef.make(42)) - const result = yield* $(pipe( + Effect.gen(function*() { + const ref = yield* (TRef.make(42)) + const result = yield* (pipe( TRef.get(ref), STM.retryUntil((n) => n === 42), STM.commit )) - yield* $(pipe(ref, TRef.set(9), STM.commit)) - const value = yield* $(TRef.get(ref)) + yield* (pipe(ref, TRef.set(9), STM.commit)) + const value = yield* (TRef.get(ref)) strictEqual(result, 42) strictEqual(value, 9) })) it.effect("condition locks - resume after satisfying the condition", () => { const barrier = new UnpureBarrier() - return Effect.gen(function*($) { - const done = yield* $(Deferred.make()) - const ref1 = yield* $(TRef.make(0)) - const ref2 = yield* $(TRef.make("failed")) + return Effect.gen(function*() { + const done = yield* (Deferred.make()) + const ref1 = yield* (TRef.make(0)) + const ref2 = yield* (TRef.make("failed")) const transaction = pipe( TRef.get(ref1), STM.tap(() => STM.sync(() => barrier.open())), @@ -1387,95 +1387,95 @@ describe("STM", () => { STM.tap(() => pipe(ref2, TRef.set("success"))), STM.zipRight(TRef.get(ref2)) ) - const fiber = yield* $(pipe( + const fiber = yield* (pipe( STM.commit(transaction), Effect.zipLeft(pipe(done, Deferred.succeed(void 0))), Effect.fork )) - yield* $(barrier.await()) - const oldValue = yield* $(TRef.get(ref2)) - yield* $(pipe(ref1, TRef.set(43))) - yield* $(Deferred.await(done)) - const newValue = yield* $(TRef.get(ref2)) - const result = yield* $(Fiber.join(fiber)) + yield* (barrier.await()) + const oldValue = yield* (TRef.get(ref2)) + yield* (pipe(ref1, TRef.set(43))) + yield* (Deferred.await(done)) + const newValue = yield* (TRef.get(ref2)) + const result = yield* (Fiber.join(fiber)) strictEqual(oldValue, "failed") strictEqual(newValue, result) }) }) it.effect("condition locks - resume directly when the condition is already satisfied", () => - Effect.gen(function*($) { - const sender = yield* $(TRef.make(100)) - const receiver = yield* $(TRef.make(0)) - yield* $(Effect.fork(transfer(receiver, sender, 150))) - yield* $(pipe(sender, TRef.update((n) => n + 100))) - yield* $(pipe(TRef.get(sender), STM.retryUntil((n) => n === 50))) - const senderValue = yield* $(TRef.get(sender)) - const receiverValue = yield* $(TRef.get(receiver)) + Effect.gen(function*() { + const sender = yield* (TRef.make(100)) + const receiver = yield* (TRef.make(0)) + yield* (Effect.fork(transfer(receiver, sender, 150))) + yield* (pipe(sender, TRef.update((n) => n + 100))) + yield* (pipe(TRef.get(sender), STM.retryUntil((n) => n === 50))) + const senderValue = yield* (TRef.get(sender)) + const receiverValue = yield* (TRef.get(receiver)) strictEqual(senderValue, 50) strictEqual(receiverValue, 150) })) it.effect("condition locks - run both transactions sequentially", () => - Effect.gen(function*($) { - const sender = yield* $(TRef.make(100)) - const receiver = yield* $(TRef.make(0)) + Effect.gen(function*() { + const sender = yield* (TRef.make(100)) + const receiver = yield* (TRef.make(0)) const toReceiver = transfer(receiver, sender, 150) const toSender = transfer(sender, receiver, 150) - const fiber = yield* $(pipe( + const fiber = yield* (pipe( Array.from({ length: 10 }, () => pipe(toReceiver, Effect.zipRight(toSender))), Effect.forkAll() )) - yield* $(pipe(sender, TRef.update((n) => n + 50))) - yield* $(Fiber.join(fiber)) - const senderValue = yield* $(TRef.get(sender)) - const receiverValue = yield* $(TRef.get(receiver)) + yield* (pipe(sender, TRef.update((n) => n + 50))) + yield* (Fiber.join(fiber)) + const senderValue = yield* (TRef.get(sender)) + const receiverValue = yield* (TRef.get(receiver)) strictEqual(senderValue, 150) strictEqual(receiverValue, 0) })) it.effect("condition locks - run both transactions concurrently #1", () => - Effect.gen(function*($) { - const sender = yield* $(TRef.make(50)) - const receiver = yield* $(TRef.make(0)) + Effect.gen(function*() { + const sender = yield* (TRef.make(50)) + const receiver = yield* (TRef.make(0)) const toReceiver = transfer(receiver, sender, 100) const toSender = transfer(sender, receiver, 100) - const fiber1 = yield* $(pipe( + const fiber1 = yield* (pipe( Array.from({ length: 10 }, () => toReceiver), Effect.forkAll() )) - const fiber2 = yield* $(pipe( + const fiber2 = yield* (pipe( Array.from({ length: 10 }, () => toSender), Effect.forkAll() )) - yield* $(pipe(sender, TRef.update((n) => n + 50))) - yield* $(Fiber.join(fiber1)) - yield* $(Fiber.join(fiber2)) - const senderValue = yield* $(TRef.get(sender)) - const receiverValue = yield* $(TRef.get(receiver)) + yield* (pipe(sender, TRef.update((n) => n + 50))) + yield* (Fiber.join(fiber1)) + yield* (Fiber.join(fiber2)) + const senderValue = yield* (TRef.get(sender)) + const receiverValue = yield* (TRef.get(receiver)) strictEqual(senderValue, 100) strictEqual(receiverValue, 0) })) it.effect("condition locks - run both transactions concurrently #2", () => - Effect.gen(function*($) { - const sender = yield* $(TRef.make(50)) - const receiver = yield* $(TRef.make(0)) + Effect.gen(function*() { + const sender = yield* (TRef.make(50)) + const receiver = yield* (TRef.make(0)) const toReceiver = pipe(transfer(receiver, sender, 100), Effect.repeatN(9)) const toSender = pipe(transfer(sender, receiver, 100), Effect.repeatN(9)) - const fiber = yield* $(pipe(toReceiver, Effect.zip(toSender, { concurrent: true }), Effect.fork)) - yield* $(pipe(sender, TRef.update((n) => n + 50))) - yield* $(Fiber.join(fiber)) - const senderValue = yield* $(TRef.get(sender)) - const receiverValue = yield* $(TRef.get(receiver)) + const fiber = yield* (pipe(toReceiver, Effect.zip(toSender, { concurrent: true }), Effect.fork)) + yield* (pipe(sender, TRef.update((n) => n + 50))) + yield* (Fiber.join(fiber)) + const senderValue = yield* (TRef.get(sender)) + const receiverValue = yield* (TRef.get(receiver)) strictEqual(senderValue, 100) strictEqual(receiverValue, 0) })) it.effect("condition locks - atomically run a transaction with a TRef for 20 fibers, each one checking and incrementing the value", () => - Effect.gen(function*($) { - const ref = yield* $(TRef.make(1)) - const fiber = yield* $(pipe( + Effect.gen(function*() { + const ref = yield* (TRef.make(1)) + const fiber = yield* (pipe( Chunk.range(1, 20), Chunk.map((i) => pipe( @@ -1487,16 +1487,16 @@ describe("STM", () => { ), Effect.forkAll() )) - yield* $(Fiber.join(fiber)) - const result = yield* $(TRef.get(ref)) + yield* (Fiber.join(fiber)) + const result = yield* (TRef.get(ref)) strictEqual(result, 21) })) it.effect("condition locks - atomically run a transaction that could not be satisfied", () => { const barrier = new UnpureBarrier() - return Effect.gen(function*($) { - const ref = yield* $(TRef.make(0)) - const fiber = yield* $(pipe( + return Effect.gen(function*() { + const ref = yield* (TRef.make(0)) + const fiber = yield* (pipe( TRef.get(ref), STM.tap(() => STM.sync(() => barrier.open())), STM.tap((n) => STM.check(() => n > 0)), @@ -1504,19 +1504,19 @@ describe("STM", () => { STM.commit, Effect.fork )) - yield* $(barrier.await()) - yield* $(Fiber.interrupt(fiber)) - yield* $(pipe(ref, TRef.set(10))) - const result = yield* $(pipe(Effect.yieldNow(), Effect.zipRight(TRef.get(ref)))) + yield* (barrier.await()) + yield* (Fiber.interrupt(fiber)) + yield* (pipe(ref, TRef.set(10))) + const result = yield* (pipe(Effect.yieldNow(), Effect.zipRight(TRef.get(ref)))) strictEqual(result, 10) }) }) it.effect("condition locks - interrupt one fiber executing a transaction should terminate all transactions", () => { const barrier = new UnpureBarrier() - return Effect.gen(function*($) { - const ref = yield* $(TRef.make(0)) - const fiber = yield* $(pipe( + return Effect.gen(function*() { + const ref = yield* (TRef.make(0)) + const fiber = yield* (pipe( Array.from({ length: 100 }, () => pipe( TRef.get(ref), @@ -1527,26 +1527,26 @@ describe("STM", () => { )), Effect.forkAll() )) - yield* $(barrier.await()) - yield* $(Fiber.interrupt(fiber)) - yield* $(pipe(ref, TRef.set(-1))) - const result = yield* $(pipe(Effect.yieldNow(), Effect.zipRight(TRef.get(ref)))) + yield* (barrier.await()) + yield* (Fiber.interrupt(fiber)) + yield* (pipe(ref, TRef.set(-1))) + const result = yield* (pipe(Effect.yieldNow(), Effect.zipRight(TRef.get(ref)))) strictEqual(result, -1) }) }) it.effect("condition locks - interrupt fiber and observe it", () => - Effect.gen(function*($) { - const fiberId = yield* $(Effect.fiberId) - const ref = yield* $(TRef.make(1)) - const fiber = yield* $(pipe( + Effect.gen(function*() { + const fiberId = yield* (Effect.fiberId) + const ref = yield* (TRef.make(1)) + const fiber = yield* (pipe( TRef.get(ref), STM.flatMap((n) => STM.check(() => n === 0)), STM.commit, Effect.fork )) - yield* $(Fiber.interrupt(fiber)) - const result = yield* $(pipe(Fiber.join(fiber), Effect.sandbox, Effect.either)) + yield* (Fiber.interrupt(fiber)) + const result = yield* (pipe(Fiber.join(fiber), Effect.sandbox, Effect.either)) assertTrue( Either.isLeft(result) && pipe( @@ -1557,29 +1557,29 @@ describe("STM", () => { })) it.effect("permutations - permutes two variables", () => - Effect.gen(function*($) { - const ref1 = yield* $(TRef.make(1)) - const ref2 = yield* $(TRef.make(2)) - yield* $(permutation(ref1, ref2)) - const result1 = yield* $(TRef.get(ref1)) - const result2 = yield* $(TRef.get(ref2)) + Effect.gen(function*() { + const ref1 = yield* (TRef.make(1)) + const ref2 = yield* (TRef.make(2)) + yield* (permutation(ref1, ref2)) + const result1 = yield* (TRef.get(ref1)) + const result2 = yield* (TRef.get(ref2)) strictEqual(result1, 2) strictEqual(result2, 1) })) it.effect("permutations - permutes two variables in 100 fibers", () => - Effect.gen(function*($) { - const ref1 = yield* $(TRef.make(1)) - const ref2 = yield* $(TRef.make(2)) - const oldValue1 = yield* $(TRef.get(ref1)) - const oldValue2 = yield* $(TRef.get(ref2)) - const fiber = yield* $(pipe( + Effect.gen(function*() { + const ref1 = yield* (TRef.make(1)) + const ref2 = yield* (TRef.make(2)) + const oldValue1 = yield* (TRef.get(ref1)) + const oldValue2 = yield* (TRef.get(ref2)) + const fiber = yield* (pipe( Array.from({ length: 100 }, () => STM.commit(permutation(ref1, ref2))), Effect.forkAll() )) - yield* $(Fiber.join(fiber)) - const result1 = yield* $(TRef.get(ref1)) - const result2 = yield* $(TRef.get(ref2)) + yield* (Fiber.join(fiber)) + const result1 = yield* (TRef.get(ref1)) + const result2 = yield* (TRef.get(ref2)) strictEqual(result1, oldValue1) strictEqual(result2, oldValue2) })) diff --git a/packages/effect/test/Schedule.test.ts b/packages/effect/test/Schedule.test.ts index 2c316f2cb8..c6b3a741b1 100644 --- a/packages/effect/test/Schedule.test.ts +++ b/packages/effect/test/Schedule.test.ts @@ -9,6 +9,7 @@ import { Exit, Fiber, Option, + pipe, Ref, Schedule, ScheduleDecision, @@ -22,61 +23,61 @@ import { describe } from "vitest" describe("Schedule", () => { it.effect("collect all inputs into a list as long as the condition f holds", () => - Effect.gen(function*($) { - const result = yield* $(repeat(Schedule.collectWhile((n) => n < 10))) + Effect.gen(function*() { + const result = yield* repeat(Schedule.collectWhile((n) => n < 10)) deepStrictEqual(Chunk.toReadonlyArray(result), Array.range(1, 9)) })) it.effect("collect all inputs into a list as long as the effectful condition f holds", () => - Effect.gen(function*($) { - const result = yield* $(repeat(Schedule.collectWhileEffect((n) => Effect.succeed(n > 10)))) + Effect.gen(function*() { + const result = yield* repeat(Schedule.collectWhileEffect((n) => Effect.succeed(n > 10))) assertTrue(Chunk.isEmpty(result)) })) it.effect("collect all inputs into a list until the effectful condition f fails", () => - Effect.gen(function*($) { - const result = yield* $(repeat(Schedule.collectUntil((n) => n < 10 && n > 1))) + Effect.gen(function*() { + const result = yield* repeat(Schedule.collectUntil((n) => n < 10 && n > 1)) deepStrictEqual(Chunk.toReadonlyArray(result), [1]) })) it.effect("collect all inputs into a list until the effectful condition f fails", () => - Effect.gen(function*($) { - const result = yield* $(repeat(Schedule.collectUntilEffect((n) => Effect.succeed(n > 10)))) + Effect.gen(function*() { + const result = yield* repeat(Schedule.collectUntilEffect((n) => Effect.succeed(n > 10))) deepStrictEqual(Chunk.toReadonlyArray(result), Array.range(1, 10)) })) it.effect("union composes", () => - Effect.gen(function*($) { + Effect.gen(function*() { const monday = Schedule.dayOfMonth(1) const wednesday = Schedule.dayOfMonth(3) const friday = Schedule.dayOfMonth(5) const mondayOrWednesday = monday.pipe(Schedule.union(wednesday)) const wednesdayOrFriday = wednesday.pipe(Schedule.union(friday)) const alsoWednesday = mondayOrWednesday.pipe(Schedule.intersect(wednesdayOrFriday)) - const now = yield* $(Effect.sync(() => Date.now())) + const now = yield* Effect.sync(() => Date.now()) const input = Array.range(1, 5) - const actual = yield* $(alsoWednesday, Schedule.delays, Schedule.run(now, input)) - const expected = yield* $(wednesday, Schedule.delays, Schedule.run(now, input)) + const actual = yield* pipe(alsoWednesday, Schedule.delays, Schedule.run(now, input)) + const expected = yield* pipe(wednesday, Schedule.delays, Schedule.run(now, input)) deepStrictEqual(Chunk.toReadonlyArray(actual), Chunk.toReadonlyArray(expected)) })) it.effect("either should not wait if neither schedule wants to continue", () => - Effect.gen(function*($) { + Effect.gen(function*() { const schedule = Schedule.stop.pipe( Schedule.union(Schedule.spaced("2 seconds").pipe(Schedule.intersect(Schedule.stop))), Schedule.compose(Schedule.elapsed) ) const input = Array.makeBy(4, constVoid) - const result = yield* $(runCollect(schedule, input)) + const result = yield* runCollect(schedule, input) deepStrictEqual(Chunk.toReadonlyArray(result), [Duration.zero]) })) it.effect("perform log for each recurrence of effect", () => - Effect.gen(function*($) { + Effect.gen(function*() { const schedule = (ref: Ref.Ref) => { return Schedule.recurs(3).pipe(Schedule.onDecision(() => Ref.update(ref, (n) => n + 1))) } - const ref = yield* $(Ref.make(0)) - yield* $(Ref.getAndUpdate(ref, (n) => n + 1), Effect.repeat(schedule(ref))) - const result = yield* $(Ref.get(ref)) + const ref = yield* Ref.make(0) + yield* pipe(Ref.getAndUpdate(ref, (n) => n + 1), Effect.repeat(schedule(ref))) + const result = yield* Ref.get(ref) strictEqual(result, 8) })) it.effect("reset after some inactivity", () => - Effect.gen(function*($) { + Effect.gen(function*() { const io = (ref: Ref.Ref, latch: Deferred.Deferred): Effect.Effect => { return Ref.updateAndGet(ref, (n) => n + 1).pipe( Effect.flatMap((retries) => { @@ -95,38 +96,38 @@ describe("Schedule", () => { ) } const schedule = Schedule.recurs(5).pipe(Schedule.resetAfter("5 seconds")) - const retriesCounter = yield* $(Ref.make(-1)) - const latch = yield* $(Deferred.make()) - const fiber = yield* $(io(retriesCounter, latch), Effect.retry(schedule), Effect.fork) - yield* $(Deferred.await(latch)) - yield* $(TestClock.adjust("10 seconds")) - yield* $(Fiber.join(fiber)) - const retries = yield* $(Ref.get(retriesCounter)) + const retriesCounter = yield* Ref.make(-1) + const latch = yield* Deferred.make() + const fiber = yield* pipe(io(retriesCounter, latch), Effect.retry(schedule), Effect.fork) + yield* Deferred.await(latch) + yield* TestClock.adjust("10 seconds") + yield* Fiber.join(fiber) + const retries = yield* Ref.get(retriesCounter) strictEqual(retries, 10) })) it.effect("union of two schedules should continue as long as either wants to continue", () => - Effect.gen(function*($) { + Effect.gen(function*() { const schedule = Schedule.recurWhile((b: boolean) => b).pipe(Schedule.union(Schedule.fixed("1 seconds"))) const input = Chunk.make(true, false, false, false, false) - const result = yield* $(runCollect(schedule.pipe(Schedule.compose(Schedule.elapsed)), input)) + const result = yield* runCollect(schedule.pipe(Schedule.compose(Schedule.elapsed)), input) const expected = [0, 0, 1, 2, 3].map(Duration.seconds) deepStrictEqual(Chunk.toReadonlyArray(result), expected) })) it.effect("Schedule.fixed should compute delays correctly", () => - Effect.gen(function*($) { + Effect.gen(function*() { const inputs = Chunk.make([0, undefined] as const, [6500, undefined] as const) - const result = yield* $( + const result = yield* pipe( runManually(Schedule.fixed("5 seconds"), inputs), Effect.map((output) => output[0].pipe(Chunk.map((tuple) => tuple[0]))) ) deepStrictEqual(result, Chunk.make(5000, 10000)) })) it.effect("intersection of schedules recurring in bounded intervals", () => - Effect.gen(function*($) { + Effect.gen(function*() { const schedule = Schedule.hourOfDay(4).pipe(Schedule.intersect(Schedule.minuteOfHour(20))) - const now = yield* $(Effect.sync(() => Date.now())) + const now = yield* Effect.sync(() => Date.now()) const input = Array.range(1, 5) - const delays = yield* $(Schedule.delays(schedule), Schedule.run(now, input)) + const delays = yield* pipe(Schedule.delays(schedule), Schedule.run(now, input)) const actual = Chunk.toReadonlyArray(scanLeft(delays, now, (now, delay) => now + Duration.toMillis(delay))).slice( 1 ) @@ -134,18 +135,18 @@ describe("Schedule", () => { assertTrue(actual.map((n) => new Date(n).getMinutes()).every((n) => n === 20)) })) it.effect("passthrough", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - const result = yield* $( - Ref.getAndUpdate(ref, (n) => n + 1).pipe(Effect.repeat(Schedule.recurs(10).pipe(Schedule.passthrough))) + Effect.gen(function*() { + const ref = yield* Ref.make(0) + const result = yield* Ref.getAndUpdate(ref, (n) => n + 1).pipe( + Effect.repeat(Schedule.recurs(10).pipe(Schedule.passthrough)) ) strictEqual(result, 10) })) describe("simulate a schedule", () => { it.effect("without timing out", () => - Effect.gen(function*($) { + Effect.gen(function*() { const schedule = Schedule.exponential("1 minutes") - const result = yield* $( + const result = yield* pipe( Clock.currentTimeMillis, Effect.flatMap((now) => schedule.pipe(Schedule.run(now, Array.makeBy(5, constVoid)))) ) @@ -158,12 +159,10 @@ describe("Schedule", () => { ]) })) it.effect("respect Schedule.recurs even if more input is provided than needed", () => - Effect.gen(function*($) { + Effect.gen(function*() { const schedule = Schedule.recurs(2).pipe(Schedule.intersect(Schedule.exponential("1 minutes"))) - const result = yield* $( - Clock.currentTimeMillis.pipe( - Effect.flatMap((now) => schedule.pipe(Schedule.run(now, Array.range(1, 10)))) - ) + const result = yield* Clock.currentTimeMillis.pipe( + Effect.flatMap((now) => schedule.pipe(Schedule.run(now, Array.range(1, 10)))) ) deepStrictEqual(Chunk.toReadonlyArray(result), [ [0, Duration.minutes(1)], @@ -172,201 +171,197 @@ describe("Schedule", () => { ]) })) it.effect("respect Schedule.upTo even if more input is provided than needed", () => - Effect.gen(function*($) { + Effect.gen(function*() { const schedule = Schedule.spaced("1 seconds").pipe(Schedule.upTo("5 seconds")) - const result = yield* $( - Clock.currentTimeMillis.pipe( - Effect.flatMap((now) => schedule.pipe(Schedule.run(now, Array.range(1, 10)))) - ) + const result = yield* Clock.currentTimeMillis.pipe( + Effect.flatMap((now) => schedule.pipe(Schedule.run(now, Array.range(1, 10)))) ) deepStrictEqual(Chunk.toReadonlyArray(result), [0, 1, 2, 3, 4, 5]) })) }) describe("repeat an action a single time", () => { it.effect("repeat on failure does not actually repeat", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - const result = yield* $(Effect.flip(alwaysFail(ref))) + Effect.gen(function*() { + const ref = yield* Ref.make(0) + const result = yield* Effect.flip(alwaysFail(ref)) strictEqual(result, "Error: 1") })) it.effect("repeat a scheduled repeat repeats the whole number", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 42 - const ref = yield* $(Ref.make(0)) + const ref = yield* Ref.make(0) const effect = ref.pipe(Ref.update((n) => n + 1), Effect.repeat(Schedule.recurs(n))) - yield* $(effect, Effect.repeat(Schedule.recurs(1))) - const result = yield* $(Ref.get(ref)) + yield* pipe(effect, Effect.repeat(Schedule.recurs(1))) + const result = yield* Ref.get(ref) strictEqual(result, (n + 1) * 2) })) }) describe("repeat an action two times and call ensuring should", () => { it.effect("run the specified finalizer as soon as the schedule is complete", () => - Effect.gen(function*($) { - const deferred = yield* $(Deferred.make()) - const ref = yield* $(Ref.make(0)) - yield* $( + Effect.gen(function*() { + const deferred = yield* Deferred.make() + const ref = yield* Ref.make(0) + yield* pipe( Ref.update(ref, (n) => n + 2), Effect.repeat(Schedule.recurs(2)), Effect.ensuring(Deferred.succeed(deferred, void 0)) ) - const value = yield* $(Ref.get(ref)) - const finalizerValue = yield* $(Deferred.poll(deferred)) + const value = yield* Ref.get(ref) + const finalizerValue = yield* Deferred.poll(deferred) strictEqual(value, 6) assertTrue(Option.isSome(finalizerValue)) })) }) describe("repeat on success according to a provided strategy", () => { it.effect("for 'recurs(a negative number)' repeats 0 additional time", () => - Effect.gen(function*($) { + Effect.gen(function*() { // A repeat with a negative number of times should not repeat the action at all - const result = yield* $(repeat(Schedule.recurs(-5))) + const result = yield* repeat(Schedule.recurs(-5)) strictEqual(result, 0) })) it.effect("for 'recurs(0)' does repeat 0 additional time", () => - Effect.gen(function*($) { + Effect.gen(function*() { // A repeat with 0 number of times should not repeat the action at all - const result = yield* $(repeat(Schedule.recurs(0))) + const result = yield* repeat(Schedule.recurs(0)) strictEqual(result, 0) })) it.effect("for 'recurs(1)' does repeat 1 additional time", () => - Effect.gen(function*($) { - const result = yield* $(repeat(Schedule.recurs(1))) + Effect.gen(function*() { + const result = yield* repeat(Schedule.recurs(1)) strictEqual(result, 1) })) it.effect("for 'once' will repeat 1 additional time", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - yield* $(Ref.update(ref, (n) => n + 1), Effect.repeat(Schedule.once)) - const result = yield* $(Ref.get(ref)) + Effect.gen(function*() { + const ref = yield* Ref.make(0) + yield* pipe(Ref.update(ref, (n) => n + 1), Effect.repeat(Schedule.once)) + const result = yield* Ref.get(ref) strictEqual(result, 2) })) it.effect("for 'recurs(a positive given number)' repeats that additional number of time", () => - Effect.gen(function*($) { - const result = yield* $(repeat(Schedule.recurs(42))) + Effect.gen(function*() { + const result = yield* repeat(Schedule.recurs(42)) strictEqual(result, 42) })) it.effect("for 'recurWhile(cond)' repeats while the cond still holds", () => - Effect.gen(function*($) { - const result = yield* $(repeat(Schedule.recurWhile((n) => n < 10))) + Effect.gen(function*() { + const result = yield* repeat(Schedule.recurWhile((n) => n < 10)) strictEqual(result, 10) })) it.effect("for 'recurWhileEffect(cond)' repeats while the effectful cond still holds", () => - Effect.gen(function*($) { - const result = yield* $(repeat(Schedule.recurWhileEffect((n) => Effect.succeed(n > 10)))) + Effect.gen(function*() { + const result = yield* repeat(Schedule.recurWhileEffect((n) => Effect.succeed(n > 10))) strictEqual(result, 1) })) it.effect("for 'recurUntil(cond)' repeats until the cond is satisfied", () => - Effect.gen(function*($) { - const result = yield* $(repeat(Schedule.recurUntil((n) => n < 10))) + Effect.gen(function*() { + const result = yield* repeat(Schedule.recurUntil((n) => n < 10)) strictEqual(result, 1) })) it.effect("for 'recurUntilEffect(cond)' repeats until the effectful cond is satisfied", () => - Effect.gen(function*($) { - const result = yield* $(repeat(Schedule.recurUntilEffect((n) => Effect.succeed(n > 10)))) + Effect.gen(function*() { + const result = yield* repeat(Schedule.recurUntilEffect((n) => Effect.succeed(n > 10))) strictEqual(result, 11) })) }) describe("delays", () => { it.effect("duration", () => - Effect.gen(function*($) { - const [actual, expected] = yield* $(checkDelays(Schedule.duration("1 seconds"))) + Effect.gen(function*() { + const [actual, expected] = yield* checkDelays(Schedule.duration("1 seconds")) deepStrictEqual(actual, expected) })) it.effect("exponential", () => - Effect.gen(function*($) { - const [actual, expected] = yield* $(checkDelays(Schedule.exponential("1 seconds"))) + Effect.gen(function*() { + const [actual, expected] = yield* checkDelays(Schedule.exponential("1 seconds")) deepStrictEqual(actual, expected) })) it.effect("fibonacci", () => - Effect.gen(function*($) { - const [actual, expected] = yield* $(checkDelays(Schedule.fibonacci("1 seconds"))) + Effect.gen(function*() { + const [actual, expected] = yield* checkDelays(Schedule.fibonacci("1 seconds")) deepStrictEqual(actual, expected) })) it.effect("fromDelay", () => - Effect.gen(function*($) { - const [actual, expected] = yield* $(checkDelays(Schedule.fromDelay("1 seconds"))) + Effect.gen(function*() { + const [actual, expected] = yield* checkDelays(Schedule.fromDelay("1 seconds")) deepStrictEqual(actual, expected) })) it.effect("fromDelays", () => - Effect.gen(function*($) { - const [actual, expected] = yield* $( - checkDelays( - Schedule.fromDelays("1 seconds", "2 seconds", "3 seconds", "4 seconds") - ) + Effect.gen(function*() { + const [actual, expected] = yield* checkDelays( + Schedule.fromDelays("1 seconds", "2 seconds", "3 seconds", "4 seconds") ) deepStrictEqual(actual, expected) })) it.effect("linear", () => - Effect.gen(function*($) { - const [actual, expected] = yield* $(checkDelays(Schedule.linear("1 seconds"))) + Effect.gen(function*() { + const [actual, expected] = yield* checkDelays(Schedule.linear("1 seconds")) deepStrictEqual(actual, expected) })) }) describe("repetitions", () => { it.effect("forever", () => - Effect.gen(function*($) { - const [actual, expected] = yield* $(checkRepetitions(Schedule.repeatForever)) + Effect.gen(function*() { + const [actual, expected] = yield* checkRepetitions(Schedule.repeatForever) deepStrictEqual(actual, expected) })) it.effect("count", () => - Effect.gen(function*($) { - const [actual, expected] = yield* $(checkRepetitions(Schedule.count)) + Effect.gen(function*() { + const [actual, expected] = yield* checkRepetitions(Schedule.count) deepStrictEqual(actual, expected) })) it.effect("dayOfMonth", () => - Effect.gen(function*($) { - const [actual, expected] = yield* $(checkRepetitions(Schedule.dayOfMonth(1))) + Effect.gen(function*() { + const [actual, expected] = yield* checkRepetitions(Schedule.dayOfMonth(1)) deepStrictEqual(actual, expected) })) it.effect("dayOfWeek", () => - Effect.gen(function*($) { - const [actual, expected] = yield* $(checkRepetitions(Schedule.dayOfWeek(1))) + Effect.gen(function*() { + const [actual, expected] = yield* checkRepetitions(Schedule.dayOfWeek(1)) deepStrictEqual(actual, expected) })) it.effect("hourOfDay", () => - Effect.gen(function*($) { - const [actual, expected] = yield* $(checkRepetitions(Schedule.hourOfDay(1))) + Effect.gen(function*() { + const [actual, expected] = yield* checkRepetitions(Schedule.hourOfDay(1)) deepStrictEqual(actual, expected) })) it.effect("minuteOfHour", () => - Effect.gen(function*($) { - const [actual, expected] = yield* $(checkRepetitions(Schedule.minuteOfHour(1))) + Effect.gen(function*() { + const [actual, expected] = yield* checkRepetitions(Schedule.minuteOfHour(1)) deepStrictEqual(actual, expected) })) it.effect("secondOfMinute", () => - Effect.gen(function*($) { - const [actual, expected] = yield* $(checkRepetitions(Schedule.secondOfMinute(1))) + Effect.gen(function*() { + const [actual, expected] = yield* checkRepetitions(Schedule.secondOfMinute(1)) deepStrictEqual(actual, expected) })) it.effect("fixed", () => - Effect.gen(function*($) { - const [actual, expected] = yield* $(checkRepetitions(Schedule.fixed("1 seconds"))) + Effect.gen(function*() { + const [actual, expected] = yield* checkRepetitions(Schedule.fixed("1 seconds")) deepStrictEqual(actual, expected) })) it.effect("repeatForever", () => - Effect.gen(function*($) { - const [actual, expected] = yield* $(checkRepetitions(Schedule.repeatForever)) + Effect.gen(function*() { + const [actual, expected] = yield* checkRepetitions(Schedule.repeatForever) deepStrictEqual(actual, expected) })) it.effect("recurs", () => - Effect.gen(function*($) { - const [actual, expected] = yield* $(checkRepetitions(Schedule.recurs(2))) + Effect.gen(function*() { + const [actual, expected] = yield* checkRepetitions(Schedule.recurs(2)) deepStrictEqual(actual, expected) })) it.effect("spaced", () => - Effect.gen(function*($) { - const [actual, expected] = yield* $(checkRepetitions(Schedule.spaced("1 seconds"))) + Effect.gen(function*() { + const [actual, expected] = yield* checkRepetitions(Schedule.spaced("1 seconds")) deepStrictEqual(actual, expected) })) it.effect("windowed", () => - Effect.gen(function*($) { - const [actual, expected] = yield* $(checkRepetitions(Schedule.windowed("1 seconds"))) + Effect.gen(function*() { + const [actual, expected] = yield* checkRepetitions(Schedule.windowed("1 seconds")) deepStrictEqual(actual, expected) })) }) describe("retries", () => { it.effect("for up to 10 times", () => - Effect.gen(function*($) { + Effect.gen(function*() { let i = 0 const strategy = Schedule.recurs(10) const io = Effect.sync(() => { @@ -374,76 +369,68 @@ describe("Schedule", () => { }).pipe( Effect.flatMap(() => i < 5 ? Effect.fail("KeepTryingError") : Effect.succeed(i)) ) - const result = yield* $(io, Effect.retry(strategy)) + const result = yield* pipe(io, Effect.retry(strategy)) strictEqual(result, 5) })) it.effect("retry exactly one time for `once` when second time succeeds - retryOrElse", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - const result = yield* $(failOn0(ref), Effect.retryOrElse(Schedule.once, ioFail)) + Effect.gen(function*() { + const ref = yield* Ref.make(0) + const result = yield* pipe(failOn0(ref), Effect.retryOrElse(Schedule.once, ioFail)) strictEqual(result, 2) })) it.effect("if fallback succeeded - retryOrElse", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - const result = yield* $(alwaysFail(ref), Effect.retryOrElse(Schedule.once, ioSucceed)) + Effect.gen(function*() { + const ref = yield* Ref.make(0) + const result = yield* pipe(alwaysFail(ref), Effect.retryOrElse(Schedule.once, ioSucceed)) strictEqual(result, "OrElse") })) it.effect("if fallback failed - retryOrElse", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - const result = yield* $( - alwaysFail(ref).pipe( - Effect.retryOrElse(Schedule.once, ioFail), - Effect.flip - ) + Effect.gen(function*() { + const ref = yield* Ref.make(0) + const result = yield* alwaysFail(ref).pipe( + Effect.retryOrElse(Schedule.once, ioFail), + Effect.flip ) strictEqual(result, "OrElseFailed") })) it.effect("retry 0 time for `once` when first time succeeds", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - yield* $(Ref.update(ref, (n) => n + 1), Effect.retry(Schedule.once)) - const result = yield* $(Ref.get(ref)) + Effect.gen(function*() { + const ref = yield* Ref.make(0) + yield* pipe(Ref.update(ref, (n) => n + 1), Effect.retry(Schedule.once)) + const result = yield* Ref.get(ref) strictEqual(result, 1) })) it.effect("retry 0 time for `recurs(0)`", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - const result = yield* $( - alwaysFail(ref).pipe( - Effect.retry(Schedule.recurs(0)), - Effect.flip - ) + Effect.gen(function*() { + const ref = yield* Ref.make(0) + const result = yield* alwaysFail(ref).pipe( + Effect.retry(Schedule.recurs(0)), + Effect.flip ) strictEqual(result, "Error: 1") })) it.effect("retry exactly one time for `once` when second time succeeds", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0) // One retry on failure - ) + Effect.gen(function*() { + const ref = yield* Ref.make(0) // One retry on failure // One retry on failure - yield* $(failOn0(ref), Effect.retry(Schedule.once)) - const result = yield* $(Ref.get(ref)) + yield* pipe(failOn0(ref), Effect.retry(Schedule.once)) + const result = yield* Ref.get(ref) strictEqual(result, 2) })) it.effect("retry exactly one time for `once` even if still in error", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0) // No more than one retry on retry `once` - ) + Effect.gen(function*() { + const ref = yield* Ref.make(0) // No more than one retry on retry `once` // No more than one retry on retry `once` - const result = yield* $( - alwaysFail(ref).pipe( - Effect.retry(Schedule.once), - Effect.flip - ) + const result = yield* alwaysFail(ref).pipe( + Effect.retry(Schedule.once), + Effect.flip ) strictEqual(result, "Error: 2") })) it.effect("retry exactly 'n' times after failure", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - const result = yield* $(alwaysFail(ref), Effect.retry({ times: 3 }), Effect.flip) + Effect.gen(function*() { + const ref = yield* Ref.make(0) + const result = yield* pipe(alwaysFail(ref), Effect.retry({ times: 3 }), Effect.flip) strictEqual(result, "Error: 4") })) // TODO(Max): after TestRandom @@ -463,7 +450,7 @@ describe("Schedule", () => { // assertTrue() // }).unsafeRunPromise() it.effect("fixed delay with error predicate", () => - Effect.gen(function*($) { + Effect.gen(function*() { let i = 0 const effect = Effect.sync(() => { i = i + 1 @@ -477,77 +464,77 @@ describe("Schedule", () => { Effect.retryOrElse(strategy, (s, n) => TestClock.currentTimeMillis.pipe(Effect.map((now) => [Duration.millis(now), s, n] as const))) ) - const result = yield* $(run(program)) + const result = yield* run(program) deepStrictEqual(result, [Duration.millis(800), "GiveUpError", 4] as const) })) it.effect("fibonacci delay", () => - Effect.gen(function*($) { + Effect.gen(function*() { const schedule = Schedule.fibonacci("100 millis").pipe(Schedule.compose(Schedule.elapsed)) - const result = yield* $(runCollect(schedule, Array.makeBy(5, constVoid))) + const result = yield* runCollect(schedule, Array.makeBy(5, constVoid)) const expected = [0, 100, 200, 400, 700].map(Duration.millis) deepStrictEqual(Chunk.toReadonlyArray(result), expected) })) it.effect("linear delay", () => - Effect.gen(function*($) { + Effect.gen(function*() { const schedule = Schedule.linear("100 millis").pipe(Schedule.compose(Schedule.elapsed)) - const result = yield* $(runCollect(schedule, Array.makeBy(5, constVoid))) + const result = yield* runCollect(schedule, Array.makeBy(5, constVoid)) const expected = [0, 100, 300, 600, 1000].map(Duration.millis) deepStrictEqual(Chunk.toReadonlyArray(result), expected) })) it.effect("spaced delay", () => - Effect.gen(function*($) { + Effect.gen(function*() { const schedule = Schedule.spaced("100 millis").pipe(Schedule.compose(Schedule.elapsed)) - const result = yield* $(runCollect(schedule, Array.makeBy(5, constVoid))) + const result = yield* runCollect(schedule, Array.makeBy(5, constVoid)) const expected = [0, 100, 200, 300, 400].map(Duration.millis) deepStrictEqual(Chunk.toReadonlyArray(result), expected) })) it.effect("fixed delay", () => - Effect.gen(function*($) { + Effect.gen(function*() { const schedule = Schedule.fixed("100 millis").pipe(Schedule.compose(Schedule.elapsed)) - const result = yield* $(runCollect(schedule, Array.makeBy(5, constVoid))) + const result = yield* runCollect(schedule, Array.makeBy(5, constVoid)) const expected = [0, 100, 200, 300, 400].map(Duration.millis) deepStrictEqual(Chunk.toReadonlyArray(result), expected) })) it.effect("fixed delay with zero delay", () => - Effect.gen(function*($) { + Effect.gen(function*() { const schedule = Schedule.fixed(Duration.zero).pipe(Schedule.compose(Schedule.elapsed)) - const result = yield* $(runCollect(schedule, Array.makeBy(5, constVoid))) + const result = yield* runCollect(schedule, Array.makeBy(5, constVoid)) const expected = Array.makeBy(5, () => Duration.zero) deepStrictEqual(Chunk.toReadonlyArray(result), expected) })) it.effect("windowed", () => - Effect.gen(function*($) { + Effect.gen(function*() { const schedule = Schedule.windowed("100 millis").pipe(Schedule.compose(Schedule.elapsed)) - const result = yield* $(runCollect(schedule, Array.makeBy(5, constVoid))) + const result = yield* runCollect(schedule, Array.makeBy(5, constVoid)) const expected = [0, 100, 200, 300, 400].map(Duration.millis) deepStrictEqual(Chunk.toReadonlyArray(result), expected) })) it.effect("modified linear delay", () => - Effect.gen(function*($) { + Effect.gen(function*() { const schedule = Schedule.linear("100 millis").pipe( Schedule.modifyDelayEffect((_, duration) => Effect.succeed(duration.pipe(Duration.times(2)))), Schedule.compose(Schedule.elapsed) ) - const result = yield* $(runCollect(schedule, Array.makeBy(5, constVoid))) + const result = yield* runCollect(schedule, Array.makeBy(5, constVoid)) const expected = [0, 200, 600, 1200, 2000].map(Duration.millis) deepStrictEqual(Chunk.toReadonlyArray(result), expected) })) it.effect("exponential delay with default factor", () => - Effect.gen(function*($) { + Effect.gen(function*() { const schedule = Schedule.exponential("100 millis").pipe(Schedule.compose(Schedule.elapsed)) - const result = yield* $(runCollect(schedule, Array.makeBy(5, constVoid))) + const result = yield* runCollect(schedule, Array.makeBy(5, constVoid)) const expected = [0, 100, 300, 700, 1500].map(Duration.millis) deepStrictEqual(Chunk.toReadonlyArray(result), expected) })) it.effect("exponential delay with other factor", () => - Effect.gen(function*($) { + Effect.gen(function*() { const schedule = Schedule.exponential("100 millis", 3).pipe(Schedule.compose(Schedule.elapsed)) - const result = yield* $(runCollect(schedule, Array.makeBy(5, constVoid))) + const result = yield* runCollect(schedule, Array.makeBy(5, constVoid)) const expected = [0, 100, 400, 1300, 4000].map(Duration.millis) deepStrictEqual(Chunk.toReadonlyArray(result), expected) })) it.effect("fromDelays", () => - Effect.gen(function*($) { + Effect.gen(function*() { const delays = Schedule.fromDelays( "4 seconds", "7 seconds", @@ -555,39 +542,37 @@ describe("Schedule", () => { "19 seconds" ) const schedule = delays.pipe(Schedule.compose(Schedule.elapsed)) - const result = yield* $(runCollect(schedule, Array.makeBy(5, constVoid))) + const result = yield* runCollect(schedule, Array.makeBy(5, constVoid)) const expected = [0, 4, 11, 23, 42].map(Duration.seconds) deepStrictEqual(Chunk.toReadonlyArray(result), expected) })) it.effect("retry a failed action 2 times and call `ensuring` should run the specified finalizer as soon as the schedule is complete", () => - Effect.gen(function*($) { - const deferred = yield* $(Deferred.make()) - const value = yield* $( - Effect.fail("oh no").pipe( - Effect.retry(Schedule.recurs(2)), - Effect.ensuring(Deferred.succeed(deferred, void 0)), - Effect.option - ) - ) - const finalizerValue = yield* $(Deferred.poll(deferred)) + Effect.gen(function*() { + const deferred = yield* Deferred.make() + const value = yield* Effect.fail("oh no").pipe( + Effect.retry(Schedule.recurs(2)), + Effect.ensuring(Deferred.succeed(deferred, void 0)), + Effect.option + ) + const finalizerValue = yield* Deferred.poll(deferred) assertTrue(Option.isNone(value)) assertTrue(Option.isSome(finalizerValue)) })) }) describe("cron-like scheduling - repeats at point of time (minute of hour, day of week, ...)", () => { it.effect("recur every second minute using cron", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make>([])) - yield* $(TestClock.setTime(new Date(2024, 0, 1, 0, 0, 35).getTime())) + Effect.gen(function*() { + const ref = yield* Ref.make>([]) + yield* TestClock.setTime(new Date(2024, 0, 1, 0, 0, 35).getTime()) const schedule = Schedule.cron("*/2 * * * *") - yield* $( + yield* pipe( TestClock.currentTimeMillis, Effect.tap((instant) => Ref.update(ref, Array.append(format(instant)))), Effect.repeat(schedule), Effect.fork ) - yield* $(TestClock.adjust("8 minutes")) - const result = yield* $(Ref.get(ref)) + yield* TestClock.adjust("8 minutes") + const result = yield* Ref.get(ref) const expected = [ "Mon Jan 01 2024 00:00:35", "Mon Jan 01 2024 00:02:00", @@ -598,19 +583,19 @@ describe("Schedule", () => { deepStrictEqual(result, expected) })) it.effect("recur at time matching cron expression", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make>([])) - yield* $(TestClock.setTime(new Date(2024, 0, 1, 0, 0, 0).getTime())) + Effect.gen(function*() { + const ref = yield* Ref.make>([]) + yield* TestClock.setTime(new Date(2024, 0, 1, 0, 0, 0).getTime()) // At 04:30 on day-of-month 5 and 15 and on Wednesday. const schedule = Schedule.cron("30 4 5,15 * WED") - yield* $( + yield* pipe( TestClock.currentTimeMillis, Effect.tap((instant) => Ref.update(ref, Array.append(format(instant)))), Effect.repeat(schedule), Effect.fork ) - yield* $(TestClock.adjust("4 weeks")) - const result = yield* $(Ref.get(ref)) + yield* TestClock.adjust("4 weeks") + const result = yield* Ref.get(ref) const expected = [ "Mon Jan 01 2024 00:00:00", "Wed Jan 03 2024 04:30:00", @@ -623,18 +608,18 @@ describe("Schedule", () => { deepStrictEqual(result, expected) })) it.effect("recur at time matching cron expression (second granularity)", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make>([])) - yield* $(TestClock.setTime(new Date(2024, 0, 1, 0, 0, 0).getTime())) + Effect.gen(function*() { + const ref = yield* Ref.make>([]) + yield* TestClock.setTime(new Date(2024, 0, 1, 0, 0, 0).getTime()) const schedule = Schedule.cron("*/3 * * * * *") - yield* $( + yield* pipe( TestClock.currentTimeMillis, Effect.tap((instant) => Ref.update(ref, Array.append(format(instant)))), Effect.repeat(schedule), Effect.fork ) - yield* $(TestClock.adjust("30 seconds")) - const result = yield* $(Ref.get(ref)) + yield* TestClock.adjust("30 seconds") + const result = yield* Ref.get(ref) const expected = [ "Mon Jan 01 2024 00:00:00", "Mon Jan 01 2024 00:00:03", @@ -651,7 +636,7 @@ describe("Schedule", () => { deepStrictEqual(result, expected) })) it.effect("recur at 01 second of each minute", () => - Effect.gen(function*($) { + Effect.gen(function*() { const originOffset = new Date(new Date(new Date().setMinutes(0)).setSeconds(0)).setMilliseconds(0) const inTimeSecondMillis = new Date(new Date(originOffset).setSeconds(1)).setMilliseconds(1) const inTimeSecond = new Date(originOffset).setSeconds(1) @@ -660,7 +645,7 @@ describe("Schedule", () => { const input = Chunk.make(inTimeSecondMillis, inTimeSecond, beforeTime, afterTime).pipe( Chunk.map((n) => [n, void 0] as const) ) - const result = yield* $( + const result = yield* pipe( runManually(Schedule.secondOfMinute(1), input), Effect.map((output) => output[0].pipe(Chunk.map((tuple) => tuple[0]))) ) @@ -671,7 +656,7 @@ describe("Schedule", () => { deepStrictEqual(result, expectedOutput) })) it.effect("recur at 01 minute of each hour", () => - Effect.gen(function*($) { + Effect.gen(function*() { const originOffset = new Date(new Date(new Date().setHours(0)).setSeconds(0)).setMilliseconds(0) const inTimeMinuteMillis = new Date(new Date(originOffset).setMinutes(1)).setMilliseconds(1) const inTimeMinute = new Date(originOffset).setMinutes(1) @@ -680,7 +665,7 @@ describe("Schedule", () => { const input = Chunk.make(inTimeMinuteMillis, inTimeMinute, beforeTime, afterTime).pipe( Chunk.map((n) => [n, void 0] as const) ) - const result = yield* $( + const result = yield* pipe( runManually(Schedule.minuteOfHour(1), input), Effect.map((output) => output[0].pipe(Chunk.map((tuple) => tuple[0]))) ) @@ -690,7 +675,7 @@ describe("Schedule", () => { deepStrictEqual(result, expectedOutput) })) it.effect("recur at 01 hour of each day", () => - Effect.gen(function*($) { + Effect.gen(function*() { const originOffset = roundToNearestHour(new Date()) const inTimeHourSecond = new Date(new Date(originOffset).setHours(1)).setSeconds(1) const inTimeHour = new Date(originOffset).setHours(1) @@ -699,7 +684,7 @@ describe("Schedule", () => { const input = Chunk.make(inTimeHourSecond, inTimeHour, beforeTime, afterTime).pipe( Chunk.map((n) => [n, void 0] as const) ) - const result = yield* $( + const result = yield* pipe( runManually(Schedule.hourOfDay(1), input), Effect.map((output) => output[0].pipe(Chunk.map((tuple) => tuple[0]))) ) @@ -710,7 +695,7 @@ describe("Schedule", () => { deepStrictEqual(result, expectedOutput) })) it.effect("recur at Tuesday of each week", () => - Effect.gen(function*($) { + Effect.gen(function*() { const withDayOfWeek = (now: number, dayOfWeek: number): number => { const date = new Date(now) return date.setDate(date.getDate() + (7 + dayOfWeek - date.getDay()) % 7) @@ -723,7 +708,7 @@ describe("Schedule", () => { const input = Chunk.make(tuesdayHour, tuesday.getTime(), monday, wednesday).pipe( Chunk.map((n) => [n, void 0] as const) ) - const result = yield* $( + const result = yield* pipe( runManually(Schedule.dayOfWeek(2), input), Effect.map((output) => output[0].pipe(Chunk.map((tuple) => tuple[0]))) ) @@ -738,14 +723,14 @@ describe("Schedule", () => { deepStrictEqual(result, expectedOutput) })) it.effect("recur in the 2nd day of each month", () => - Effect.gen(function*($) { + Effect.gen(function*() { const originOffset = new Date(2020, 0, 1, 0, 0, 0).getTime() const inTimeDate1 = new Date(new Date(originOffset).setDate(2)).setHours(1) const inTimeDate2 = new Date(originOffset).setDate(2) const before = new Date(originOffset).setDate(1) const after = new Date(originOffset).setDate(2) const input = Chunk.make(inTimeDate1, inTimeDate2, before, after).pipe(Chunk.map((n) => [n, void 0] as const)) - const result = yield* $( + const result = yield* pipe( runManually(Schedule.dayOfMonth(2), input), Effect.map((output) => output[0].pipe(Chunk.map((tuple) => tuple[0]))) ) @@ -759,10 +744,10 @@ describe("Schedule", () => { deepStrictEqual(result, expected) })) it.effect("recur only in months containing valid number of days", () => - Effect.gen(function*($) { + Effect.gen(function*() { const originOffset = new Date(2020, 0, 31, 0, 0, 0).getTime() const input = Chunk.of([originOffset, void 0] as const) - const result = yield* $( + const result = yield* pipe( runManually(Schedule.dayOfMonth(30), input), Effect.map((output) => output[0].pipe(Chunk.map((tuple) => tuple[0]))) ) @@ -770,61 +755,61 @@ describe("Schedule", () => { deepStrictEqual(result, expected) })) it.effect("union with cron like schedules", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make>([])) - yield* $(TestClock.adjust("5 seconds")) + Effect.gen(function*() { + const ref = yield* Ref.make>([]) + yield* TestClock.adjust("5 seconds") const schedule = Schedule.spaced("20 seconds").pipe(Schedule.union(Schedule.secondOfMinute(30))) - yield* $( + yield* pipe( TestClock.currentTimeMillis, Effect.tap((instant) => Ref.update(ref, (seconds) => [...seconds, instant / 1000])), Effect.repeat(schedule), Effect.fork ) - yield* $(TestClock.adjust("2 minutes")) - const result = yield* $(Ref.get(ref)) + yield* TestClock.adjust("2 minutes") + const result = yield* Ref.get(ref) const expected = [5, 25, 30, 50, 70, 90, 110] deepStrictEqual(result, expected) })) it.effect("throw IllegalArgumentException on invalid `second` argument of `secondOfMinute`", () => - Effect.gen(function*($) { + Effect.gen(function*() { const input = Chunk.of(Date.now()) - const exit = yield* $(Effect.exit(runCollect(Schedule.secondOfMinute(60), input))) + const exit = yield* Effect.exit(runCollect(Schedule.secondOfMinute(60), input)) const exception = new Cause.IllegalArgumentException( "Invalid argument in: secondOfMinute(60). Must be in range 0...59" ) deepStrictEqual(exit, Exit.die(exception)) })) it.effect("throw IllegalArgumentException on invalid `minute` argument of `minuteOfHour`", () => - Effect.gen(function*($) { + Effect.gen(function*() { const input = Chunk.of(Date.now()) - const exit = yield* $(Effect.exit(runCollect(Schedule.minuteOfHour(60), input))) + const exit = yield* Effect.exit(runCollect(Schedule.minuteOfHour(60), input)) const exception = new Cause.IllegalArgumentException( "Invalid argument in: minuteOfHour(60). Must be in range 0...59" ) deepStrictEqual(exit, Exit.die(exception)) })) it.effect("throw IllegalArgumentException on invalid `hour` argument of `hourOfDay`", () => - Effect.gen(function*($) { + Effect.gen(function*() { const input = Chunk.of(Date.now()) - const exit = yield* $(Effect.exit(runCollect(Schedule.hourOfDay(24), input))) + const exit = yield* Effect.exit(runCollect(Schedule.hourOfDay(24), input)) const exception = new Cause.IllegalArgumentException( "Invalid argument in: hourOfDay(24). Must be in range 0...23" ) deepStrictEqual(exit, Exit.die(exception)) })) it.effect("throw IllegalArgumentException on invalid `day` argument of `dayOfWeek`", () => - Effect.gen(function*($) { + Effect.gen(function*() { const input = Chunk.of(Date.now()) - const exit = yield* $(Effect.exit(runCollect(Schedule.dayOfWeek(8), input))) + const exit = yield* Effect.exit(runCollect(Schedule.dayOfWeek(8), input)) const exception = new Cause.IllegalArgumentException( "Invalid argument in: dayOfWeek(8). Must be in range 1 (Monday)...7 (Sunday)" ) deepStrictEqual(exit, Exit.die(exception)) })) it.effect("throw IllegalArgumentException on invalid `day` argument of `dayOfMonth`", () => - Effect.gen(function*($) { + Effect.gen(function*() { const input = Chunk.of(Date.now()) - const exit = yield* $(Effect.exit(runCollect(Schedule.dayOfMonth(32), input))) + const exit = yield* Effect.exit(runCollect(Schedule.dayOfMonth(32), input)) const exception = new Cause.IllegalArgumentException( "Invalid argument in: dayOfMonth(32). Must be in range 1...31" ) @@ -844,9 +829,9 @@ const format = (value: number): string => { const ioSucceed = () => Effect.succeed("OrElse") const ioFail = () => Effect.fail("OrElseFailed") const failOn0 = (ref: Ref.Ref): Effect.Effect => { - return Effect.gen(function*($) { - const i = yield* $(Ref.updateAndGet(ref, (n) => n + 1)) - return yield* $(i <= 1 ? Effect.fail(`Error: ${i}`) : Effect.succeed(i)) + return Effect.gen(function*() { + const i = yield* Ref.updateAndGet(ref, (n) => n + 1) + return yield* i <= 1 ? Effect.fail(`Error: ${i}`) : Effect.succeed(i) }) } const alwaysFail = (ref: Ref.Ref): Effect.Effect => { @@ -872,11 +857,11 @@ const checkDelays = ( never, Env > => { - return Effect.gen(function*($) { - const now = yield* $(Effect.sync(() => Date.now())) + return Effect.gen(function*() { + const now = yield* Effect.sync(() => Date.now()) const input = Array.range(1, 5) - const actual = yield* $(schedule, Schedule.run(now, input)) - const expected = yield* $(Schedule.delays(schedule), Schedule.run(now, input)) + const actual = yield* pipe(schedule, Schedule.run(now, input)) + const expected = yield* pipe(Schedule.delays(schedule), Schedule.run(now, input)) return [actual, expected] as const }) } @@ -888,11 +873,11 @@ const checkRepetitions = (schedule: Schedule.Schedule) never, Env > => { - return Effect.gen(function*($) { - const now = yield* $(Effect.sync(() => Date.now())) + return Effect.gen(function*() { + const now = yield* Effect.sync(() => Date.now()) const input = Array.range(1, 5) - const actual = yield* $(schedule, Schedule.run(now, input)) - const expected = yield* $(Schedule.repetitions(schedule), Schedule.run(now, input)) + const actual = yield* pipe(schedule, Schedule.run(now, input)) + const expected = yield* pipe(Schedule.repetitions(schedule), Schedule.run(now, input)) return [actual, expected] as const }) } diff --git a/packages/effect/test/Schema/ParseResultFormatter.test.ts b/packages/effect/test/Schema/ParseResultFormatter.test.ts index 467d05e43e..366b7f73a6 100644 --- a/packages/effect/test/Schema/ParseResultFormatter.test.ts +++ b/packages/effect/test/Schema/ParseResultFormatter.test.ts @@ -1299,8 +1299,8 @@ it("Effect as message", () => { const Name = S.NonEmptyString.annotations({ message: () => - Effect.gen(function*(_) { - const service = yield* _(Effect.serviceOption(Translator)) + Effect.gen(function*() { + const service = yield* Effect.serviceOption(Translator) return Option.match(service, { onNone: () => "Invalid string", onSome: (translator) => translator.translations[translator.locale] diff --git a/packages/effect/test/Scope.test.ts b/packages/effect/test/Scope.test.ts index 25a859281a..7cefff6882 100644 --- a/packages/effect/test/Scope.test.ts +++ b/packages/effect/test/Scope.test.ts @@ -49,19 +49,19 @@ const resource = (id: number, ref: Ref.Ref>): Effect.Effec describe("Scope", () => { it.effect("runs finalizers when the scope is closed", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make>([])) - yield* $(Effect.scoped(pipe( + Effect.gen(function*() { + const ref = yield* Ref.make>([]) + yield* Effect.scoped(pipe( resource(1, ref), Effect.flatMap((id) => Ref.update(ref, (actions) => [...actions, use(id)])) - ))) - const result = yield* $(Ref.get(ref)) + )) + const result = yield* Ref.get(ref) deepStrictEqual(result, [acquire(1), use(1), release(1)]) })) it.effect("runs finalizers in parallel", () => - Effect.gen(function*($) { - const deferred = yield* $(Deferred.make()) - const result = yield* $( + Effect.gen(function*() { + const deferred = yield* Deferred.make() + const result = yield* pipe( Effect.addFinalizer(() => Deferred.succeed(deferred, void 0)), Effect.zipRight(Effect.addFinalizer(() => Deferred.await(deferred)), { concurrent: true, @@ -73,23 +73,21 @@ describe("Scope", () => { strictEqual(result, undefined) })) it.effect("runs finalizers in parallel when the scope is closed", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make>([])) - yield* $( - Effect.scoped( - pipe( - Effect.parallelFinalizers(resource(1, ref)), - Effect.zip(resource(2, ref), { concurrent: true, concurrentFinalizers: true }), - Effect.flatMap(([resource1, resource2]) => - pipe( - Ref.update(ref, (actions) => [...actions, use(resource1)]), - Effect.zip(Ref.update(ref, (actions) => [...actions, use(resource2)]), { concurrent: true }) - ) + Effect.gen(function*() { + const ref = yield* Ref.make>([]) + yield* Effect.scoped( + pipe( + Effect.parallelFinalizers(resource(1, ref)), + Effect.zip(resource(2, ref), { concurrent: true, concurrentFinalizers: true }), + Effect.flatMap(([resource1, resource2]) => + pipe( + Ref.update(ref, (actions) => [...actions, use(resource1)]), + Effect.zip(Ref.update(ref, (actions) => [...actions, use(resource2)]), { concurrent: true }) ) ) ) ) - const result = yield* $(Ref.get(ref)) + const result = yield* Ref.get(ref) assertTrue(result.slice(0, 2).some((action) => isAcquire(action) && action.id === 1)) assertTrue(result.slice(0, 2).some((action) => isAcquire(action) && action.id === 2)) assertTrue(result.slice(2, 4).some((action) => isUse(action) && action.id === 1)) @@ -98,12 +96,12 @@ describe("Scope", () => { assertTrue(result.slice(4, 6).some((action) => isRelease(action) && action.id === 2)) })) it.effect("preserves order of nested sequential finalizers", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make>([])) + Effect.gen(function*() { + const ref = yield* Ref.make>([]) const left = Effect.sequentialFinalizers(pipe(resource(1, ref), Effect.zipRight(resource(2, ref)))) const right = Effect.sequentialFinalizers(pipe(resource(3, ref), Effect.zipRight(resource(4, ref)))) - yield* $(Effect.scoped(Effect.parallelFinalizers(pipe(left, Effect.zip(right, { concurrent: true }))))) - const actions = yield* $(Ref.get(ref)) + yield* Effect.scoped(Effect.parallelFinalizers(pipe(left, Effect.zip(right, { concurrent: true })))) + const actions = yield* Ref.get(ref) const action1Index = actions.findIndex((action) => action.op === OP_RELEASE && action.id === 1) const action2Index = actions.findIndex((action) => action.op === OP_RELEASE && action.id === 2) const action3Index = actions.findIndex((action) => action.op === OP_RELEASE && action.id === 3) @@ -112,21 +110,21 @@ describe("Scope", () => { assertTrue(action4Index < action3Index) })) it.scoped("withEarlyRelease", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make>([])) + Effect.gen(function*() { + const ref = yield* Ref.make>([]) const left = resource(1, ref) const right = Effect.withEarlyRelease(resource(2, ref)) - yield* $(left, Effect.zipRight(pipe(right, Effect.flatMap(([release, _]) => release)))) - const actions = yield* $(Ref.get(ref)) + yield* pipe(left, Effect.zipRight(pipe(right, Effect.flatMap(([release, _]) => release)))) + const actions = yield* Ref.get(ref) deepStrictEqual(actions[0], acquire(1)) deepStrictEqual(actions[1], acquire(2)) deepStrictEqual(actions[2], release(2)) })) it.effect("using", () => - Effect.gen(function*($) { - const ref1 = yield* $(Ref.make>([])) - const ref2 = yield* $(Ref.make>([])) - yield* $( + Effect.gen(function*() { + const ref1 = yield* Ref.make>([]) + const ref2 = yield* Ref.make>([]) + yield* pipe( resource(1, ref1), Effect.using(() => pipe(Ref.update(ref1, (actions) => [...actions, use(1)]), Effect.zipRight(resource(2, ref2))) @@ -134,16 +132,16 @@ describe("Scope", () => { Effect.zipRight(Ref.update(ref2, (actions) => [...actions, use(2)])), Effect.scoped ) - const actions1 = yield* $(Ref.get(ref1)) - const actions2 = yield* $(Ref.get(ref2)) + const actions1 = yield* Ref.get(ref1) + const actions2 = yield* Ref.get(ref2) deepStrictEqual(actions1, [acquire(1), use(1), release(1)]) deepStrictEqual(actions2, [acquire(2), use(2), release(2)]) })) it.effect( ".pipe", () => - Effect.gen(function*(_) { - const scope = yield* _(Scope.make()) + Effect.gen(function*() { + const scope = yield* Scope.make() strictEqual(scope.pipe(identity), scope) }) ) diff --git a/packages/effect/test/ScopedCache.test.ts b/packages/effect/test/ScopedCache.test.ts index 6c254265c6..7f3a771e37 100644 --- a/packages/effect/test/ScopedCache.test.ts +++ b/packages/effect/test/ScopedCache.test.ts @@ -49,14 +49,14 @@ describe("ScopedCache", () => { it.it("cacheStats - should correctly keep track of cache size, hits and misses", () => fc.assert( fc.asyncProperty(fc.integer(), async (salt) => { - const program = Effect.gen(function*($) { + const program = Effect.gen(function*() { const capacity = 10 const scopedCache = ScopedCache.make({ lookup: hashEffect(salt), capacity, timeToLive: Duration.infinity }) - const { hits, misses, size } = yield* $( + const { hits, misses, size } = yield* pipe( scopedCache, Effect.flatMap((cache) => pipe( @@ -78,9 +78,9 @@ describe("ScopedCache", () => { )) it.effect("invalidate - should properly remove and clean a resource from the cache", () => - Effect.gen(function*($) { + Effect.gen(function*() { const capacity = 100 - const observablesResources = yield* $( + const observablesResources = yield* ( Effect.forEach( Array.range(0, capacity - 1), () => ObservableResource.makeVoid() @@ -91,18 +91,18 @@ describe("ScopedCache", () => { timeToLive: Duration.infinity, lookup: (key: number) => observablesResources[key].scoped }) - yield* $(Effect.scoped(Effect.gen(function*($) { - const cache = yield* $(scopedCache) - yield* $(Effect.forEach( + yield* (Effect.scoped(Effect.gen(function*() { + const cache = yield* scopedCache + yield* (Effect.forEach( Array.range(0, capacity - 1), (n) => Effect.scoped(Effect.zipRight(cache.get(n), Effect.void)), { concurrency: "unbounded", discard: true } )) - yield* $(cache.invalidate(42)) - const cacheContainsKey42 = yield* $(cache.contains(42)) - const { hits, misses, size } = yield* $(cache.cacheStats) - yield* $(observablesResources[42].assertAcquiredOnceAndCleaned()) - yield* $(Effect.forEach( + yield* (cache.invalidate(42)) + const cacheContainsKey42 = yield* (cache.contains(42)) + const { hits, misses, size } = yield* (cache.cacheStats) + yield* (observablesResources[42].assertAcquiredOnceAndCleaned()) + yield* (Effect.forEach( pipe( observablesResources, Array.filter((_, index) => index !== 42) @@ -117,32 +117,32 @@ describe("ScopedCache", () => { })) it.effect("invalidate - should not invalidate anything before effect is evaluated", () => - Effect.gen(function*($) { - const observablesResource = yield* $(ObservableResource.makeVoid()) + Effect.gen(function*() { + const observablesResource = yield* (ObservableResource.makeVoid()) const scopedCache = ScopedCache.make({ capacity: 4, timeToLive: Duration.infinity, lookup: () => observablesResource.scoped }) - yield* $(Effect.scoped(Effect.gen(function*($) { - const cache = yield* $(scopedCache) - yield* $(Effect.scoped(Effect.zipRight(cache.get(void 0), Effect.void))) + yield* (Effect.scoped(Effect.gen(function*() { + const cache = yield* scopedCache + yield* (Effect.scoped(Effect.zipRight(cache.get(void 0), Effect.void))) const invalidateEffect = cache.invalidate(void 0) - const cacheContainsKey42BeforeInvalidate = yield* $(cache.contains(void 0)) - yield* $(observablesResource.assertAcquiredOnceAndNotCleaned()) - yield* $(Effect.scoped(Effect.zipRight(cache.get(void 0), Effect.void))) - yield* $(invalidateEffect) - const cacheContainsKey42AfterInvalidate = yield* $(cache.contains(void 0)) - yield* $(observablesResource.assertAcquiredOnceAndCleaned()) + const cacheContainsKey42BeforeInvalidate = yield* (cache.contains(void 0)) + yield* (observablesResource.assertAcquiredOnceAndNotCleaned()) + yield* (Effect.scoped(Effect.zipRight(cache.get(void 0), Effect.void))) + yield* invalidateEffect + const cacheContainsKey42AfterInvalidate = yield* (cache.contains(void 0)) + yield* (observablesResource.assertAcquiredOnceAndCleaned()) assertTrue(cacheContainsKey42BeforeInvalidate) assertFalse(cacheContainsKey42AfterInvalidate) }))) })) it.effect("invalidateAll - should properly remove and clean all resource from the cache", () => - Effect.gen(function*($) { + Effect.gen(function*() { const capacity = 100 - const observablesResources = yield* $( + const observablesResources = yield* ( Effect.forEach( Array.range(0, capacity - 1), () => ObservableResource.makeVoid() @@ -153,15 +153,15 @@ describe("ScopedCache", () => { timeToLive: Duration.infinity, lookup: (key: number) => observablesResources[key].scoped }) - yield* $(Effect.scoped(Effect.gen(function*($) { - const cache = yield* $(scopedCache) - yield* $(Effect.forEach( + yield* (Effect.scoped(Effect.gen(function*() { + const cache = yield* scopedCache + yield* (Effect.forEach( Array.range(0, capacity - 1), (n) => Effect.scoped(Effect.zipRight(cache.get(n), Effect.void)), { concurrency: "unbounded", discard: true } )) - yield* $(cache.invalidateAll) - const contains = yield* $( + yield* (cache.invalidateAll) + const contains = yield* pipe( Effect.forEach( Array.range(0, capacity - 1), (n) => Effect.scoped(cache.contains(n)), @@ -169,8 +169,8 @@ describe("ScopedCache", () => { ), Effect.map((_) => _.every(identity)) ) - const { hits, misses, size } = yield* $(cache.cacheStats) - yield* $(Effect.forEach( + const { hits, misses, size } = yield* (cache.cacheStats) + yield* (Effect.forEach( observablesResources, (observableResource) => observableResource.assertAcquiredOnceAndCleaned() )) @@ -182,35 +182,35 @@ describe("ScopedCache", () => { })) it.effect("get - should not put anything in the cache before the scoped effect returned by get is used", () => - Effect.gen(function*($) { - const observablesResource = yield* $(ObservableResource.makeVoid()) + Effect.gen(function*() { + const observablesResource = yield* (ObservableResource.makeVoid()) const scopedCache = ScopedCache.make({ capacity: 1, timeToLive: Duration.seconds(60), lookup: () => observablesResource.scoped }) - yield* $(Effect.scoped(Effect.gen(function*($) { - const cache = yield* $(scopedCache) - yield* $(observablesResource.assertNotAcquired()) + yield* (Effect.scoped(Effect.gen(function*() { + const cache = yield* scopedCache + yield* (observablesResource.assertNotAcquired()) // Not actually retreiving from the cache cache.get(void 0) - yield* $(observablesResource.assertNotAcquired()) - const contains = yield* $(cache.contains(void 0)) + yield* (observablesResource.assertNotAcquired()) + const contains = yield* (cache.contains(void 0)) assertFalse(contains) }))) })) it.it("get - when used sequentially, should properly call correct lookup", () => fc.assert(fc.asyncProperty(fc.integer(), (salt) => { - const program = Effect.gen(function*($) { + const program = Effect.gen(function*() { const scopedCache = ScopedCache.make({ capacity: 10, timeToLive: Duration.infinity, lookup: hashEffect(salt) }) - yield* $(Effect.scoped(Effect.gen(function*($) { - const cache = yield* $(scopedCache) - const actual = yield* $( + yield* (Effect.scoped(Effect.gen(function*() { + const cache = yield* scopedCache + const actual = yield* ( Effect.forEach( Array.range(1, 10), (n) => Effect.scoped(Effect.flatMap(cache.get(n), Effect.succeed)) @@ -225,15 +225,15 @@ describe("ScopedCache", () => { it.it("get - when used concurrently, should properly call correct lookup", () => fc.assert(fc.asyncProperty(fc.integer(), (salt) => { - const program = Effect.gen(function*($) { + const program = Effect.gen(function*() { const scopedCache = ScopedCache.make({ capacity: 10, timeToLive: Duration.infinity, lookup: hashEffect(salt) }) - yield* $(Effect.scoped(Effect.gen(function*($) { - const cache = yield* $(scopedCache) - const actual = yield* $( + yield* (Effect.scoped(Effect.gen(function*() { + const cache = yield* scopedCache + const actual = yield* ( Effect.forEach( Array.range(1, 10), (n) => Effect.scoped(Effect.flatMap(cache.get(n), Effect.succeed)), @@ -249,22 +249,22 @@ describe("ScopedCache", () => { it.it("get - should clean and remove old resource to respect cache capacity", () => fc.assert(fc.asyncProperty(fc.integer(), (salt) => { - const program = Effect.gen(function*($) { + const program = Effect.gen(function*() { const scopedCache = ScopedCache.make({ capacity: 5, timeToLive: Duration.infinity, lookup: hashEffect(salt) }) - yield* $(Effect.scoped(Effect.gen(function*($) { - const cache = yield* $(scopedCache) - const actual = yield* $( + yield* (Effect.scoped(Effect.gen(function*() { + const cache = yield* scopedCache + const actual = yield* ( Effect.forEach( Array.range(1, 10), (n) => Effect.scoped(Effect.flatMap(cache.get(n), Effect.succeed)) ) ) const expected = Array.map(Array.range(1, 10), hash(salt)) - const cacheStats = yield* $(cache.cacheStats) + const cacheStats = yield* (cache.cacheStats) deepStrictEqual(actual, expected) strictEqual(cacheStats.size, 5) }))) @@ -273,48 +273,48 @@ describe("ScopedCache", () => { }))) it.effect("get - sequential use of the scoped effect returned by a single call to get should create only one resource", () => - Effect.gen(function*($) { - const subResource = yield* $(ObservableResource.makeVoid()) + Effect.gen(function*() { + const subResource = yield* (ObservableResource.makeVoid()) const scopedCache = ScopedCache.make({ capacity: 1, timeToLive: Duration.seconds(60), lookup: (_: void) => subResource.scoped }) - yield* $(Effect.scoped(Effect.gen(function*($) { - const cache = yield* $(scopedCache) - yield* $(subResource.assertNotAcquired()) + yield* (Effect.scoped(Effect.gen(function*() { + const cache = yield* scopedCache + yield* (subResource.assertNotAcquired()) const resourceScopedProxy = cache.get(void 0) - yield* $(subResource.assertNotAcquired()) - yield* $(Effect.scoped(resourceScopedProxy)) - yield* $(subResource.assertAcquiredOnceAndNotCleaned()) - yield* $(Effect.scoped(resourceScopedProxy)) - yield* $(subResource.assertAcquiredOnceAndNotCleaned()) + yield* (subResource.assertNotAcquired()) + yield* (Effect.scoped(resourceScopedProxy)) + yield* (subResource.assertAcquiredOnceAndNotCleaned()) + yield* (Effect.scoped(resourceScopedProxy)) + yield* (subResource.assertAcquiredOnceAndNotCleaned()) }))) - yield* $(subResource.assertAcquiredOnceAndCleaned()) + yield* (subResource.assertAcquiredOnceAndCleaned()) })) it.effect("get - sequential use should create only one resource", () => - Effect.gen(function*($) { - const subResource = yield* $(ObservableResource.makeVoid()) + Effect.gen(function*() { + const subResource = yield* (ObservableResource.makeVoid()) const scopedCache = ScopedCache.make({ capacity: 1, timeToLive: Duration.seconds(60), lookup: (_: void) => subResource.scoped }) - yield* $(Effect.scoped(Effect.gen(function*($) { - const cache = yield* $(scopedCache) - yield* $(subResource.assertNotAcquired()) - yield* $(Effect.scoped(cache.get(void 0))) - yield* $(subResource.assertAcquiredOnceAndNotCleaned()) - yield* $(Effect.scoped(cache.get(void 0))) - yield* $(subResource.assertAcquiredOnceAndNotCleaned()) + yield* (Effect.scoped(Effect.gen(function*() { + const cache = yield* scopedCache + yield* (subResource.assertNotAcquired()) + yield* (Effect.scoped(cache.get(void 0))) + yield* (subResource.assertAcquiredOnceAndNotCleaned()) + yield* (Effect.scoped(cache.get(void 0))) + yield* (subResource.assertAcquiredOnceAndNotCleaned()) }))) - yield* $(subResource.assertAcquiredOnceAndCleaned()) + yield* (subResource.assertAcquiredOnceAndCleaned()) })) it.effect("get - sequential use of a failing scoped effect should cache the error and immediately call the resource finalizer", () => - Effect.gen(function*($) { - const watchableLookup = yield* $( + Effect.gen(function*() { + const watchableLookup = yield* ( WatchableLookup.makeEffect(() => Effect.fail(new Cause.RuntimeException("fail")) ) @@ -324,50 +324,50 @@ describe("ScopedCache", () => { timeToLive: Duration.seconds(60), lookup: (key: void) => watchableLookup(key) }) - yield* $(Effect.scoped(Effect.gen(function*($) { - const cache = yield* $(scopedCache) - yield* $(watchableLookup.assertCalledTimes(void 0, (n) => strictEqual(n, 0))) + yield* (Effect.scoped(Effect.gen(function*() { + const cache = yield* scopedCache + yield* (watchableLookup.assertCalledTimes(void 0, (n) => strictEqual(n, 0))) const resourceScopedProxy = cache.get(void 0) - yield* $(watchableLookup.assertCalledTimes(void 0, (n) => strictEqual(n, 0))) - yield* $(Effect.either(Effect.scoped(resourceScopedProxy))) - yield* $(watchableLookup.assertAllCleanedForKey(void 0)) - yield* $(Effect.either(Effect.scoped(resourceScopedProxy))) - yield* $(watchableLookup.assertCalledTimes(void 0, (n) => strictEqual(n, 1))) + yield* (watchableLookup.assertCalledTimes(void 0, (n) => strictEqual(n, 0))) + yield* (Effect.either(Effect.scoped(resourceScopedProxy))) + yield* (watchableLookup.assertAllCleanedForKey(void 0)) + yield* (Effect.either(Effect.scoped(resourceScopedProxy))) + yield* (watchableLookup.assertCalledTimes(void 0, (n) => strictEqual(n, 1))) }))) })) it.effect("get - concurrent use of the scoped effect returned by a single call to get should create only one resource", () => - Effect.gen(function*($) { - const subResource = yield* $(ObservableResource.makeVoid()) + Effect.gen(function*() { + const subResource = yield* (ObservableResource.makeVoid()) const scopedCache = ScopedCache.make({ capacity: 1, timeToLive: Duration.seconds(60), lookup: (_: void) => subResource.scoped }) - yield* $(Effect.scoped(Effect.gen(function*($) { - const cache = yield* $(scopedCache) + yield* (Effect.scoped(Effect.gen(function*() { + const cache = yield* scopedCache const scoped = cache.get(void 0) - const scope1 = yield* $(Scope.make()) - const scope2 = yield* $(Scope.make()) + const scope1 = yield* (Scope.make()) + const scope2 = yield* (Scope.make()) const acquire1 = Effect.provide(scoped, Context.make(Scope.Scope, scope1)) const release1: Scope.Scope.Finalizer = (exit) => Scope.close(scope1, exit) const acquire2 = Effect.provide(scoped, Context.make(Scope.Scope, scope2)) const release2: Scope.Scope.Finalizer = (exit) => Scope.close(scope2, exit) - yield* $(subResource.assertNotAcquired()) - yield* $(acquire2) - yield* $(subResource.assertAcquiredOnceAndNotCleaned()) - yield* $(acquire1) - yield* $(subResource.assertAcquiredOnceAndNotCleaned()) - yield* $(release2(Exit.void)) - yield* $(release1(Exit.void)) - yield* $(subResource.assertAcquiredOnceAndNotCleaned()) + yield* (subResource.assertNotAcquired()) + yield* acquire2 + yield* (subResource.assertAcquiredOnceAndNotCleaned()) + yield* acquire1 + yield* (subResource.assertAcquiredOnceAndNotCleaned()) + yield* (release2(Exit.void)) + yield* (release1(Exit.void)) + yield* (subResource.assertAcquiredOnceAndNotCleaned()) }))) - yield* $(subResource.assertAcquiredOnceAndCleaned()) + yield* (subResource.assertAcquiredOnceAndCleaned()) })) it.effect("get - concurrent use on a failing scoped effect should cache the error and immediately call the resource finalizer", () => - Effect.gen(function*($) { - const watchableLookup = yield* $( + Effect.gen(function*() { + const watchableLookup = yield* ( WatchableLookup.makeEffect(() => Effect.fail(new Cause.RuntimeException("fail")) ) @@ -377,38 +377,38 @@ describe("ScopedCache", () => { timeToLive: Duration.seconds(60), lookup: (key: void) => watchableLookup(key) }) - yield* $(Effect.scoped(Effect.gen(function*($) { - const cache = yield* $(scopedCache) - yield* $(watchableLookup.assertCalledTimes(void 0, (n) => strictEqual(n, 0))) + yield* (Effect.scoped(Effect.gen(function*() { + const cache = yield* scopedCache + yield* (watchableLookup.assertCalledTimes(void 0, (n) => strictEqual(n, 0))) const resourceScopedProxy = cache.get(void 0) - yield* $(watchableLookup.assertCalledTimes(void 0, (n) => strictEqual(n, 0))) - yield* $(Effect.zip( + yield* (watchableLookup.assertCalledTimes(void 0, (n) => strictEqual(n, 0))) + yield* (Effect.zip( Effect.either(Effect.scoped(resourceScopedProxy)), Effect.either(Effect.scoped(resourceScopedProxy)), { concurrent: true } )) - yield* $(watchableLookup.assertAllCleanedForKey(void 0)) - yield* $(watchableLookup.assertCalledTimes(void 0, (n) => strictEqual(n, 1))) + yield* (watchableLookup.assertAllCleanedForKey(void 0)) + yield* (watchableLookup.assertCalledTimes(void 0, (n) => strictEqual(n, 1))) }))) })) it.effect("get - when two scoped effects returned by two calls to get live longer than the cache, the resource should be cleaned only when it is not in use anymore", () => - Effect.gen(function*($) { - const subResource = yield* $(ObservableResource.makeVoid()) + Effect.gen(function*() { + const subResource = yield* (ObservableResource.makeVoid()) const scopedCache = ScopedCache.make({ capacity: 1, timeToLive: Duration.seconds(60), lookup: (_: void) => subResource.scoped }) - const scope1 = yield* $(Scope.make()) - const scope2 = yield* $(Scope.make()) - const [release1, release2] = yield* $(Effect.scoped(Effect.gen(function*($) { - const cache = yield* $(scopedCache) - yield* $(Effect.provide( + const scope1 = yield* (Scope.make()) + const scope2 = yield* (Scope.make()) + const [release1, release2] = yield* (Effect.scoped(Effect.gen(function*() { + const cache = yield* scopedCache + yield* (Effect.provide( cache.get(void 0), Context.make(Scope.Scope, scope1) )) - yield* $(Effect.provide( + yield* (Effect.provide( cache.get(void 0), Context.make(Scope.Scope, scope2) )) @@ -416,37 +416,37 @@ describe("ScopedCache", () => { const release2: Scope.Scope.Finalizer = (exit) => Scope.close(scope2, exit) return [release1, release2] as const }))) - yield* $(subResource.assertAcquiredOnceAndNotCleaned()) - yield* $(release1(Exit.void)) - yield* $(subResource.assertAcquiredOnceAndNotCleaned()) - yield* $(release2(Exit.void)) - yield* $(subResource.assertAcquiredOnceAndCleaned()) + yield* (subResource.assertAcquiredOnceAndNotCleaned()) + yield* (release1(Exit.void)) + yield* (subResource.assertAcquiredOnceAndNotCleaned()) + yield* (release2(Exit.void)) + yield* (subResource.assertAcquiredOnceAndCleaned()) })) it.effect("get - when two scoped effects obtained by a single scoped effect returned by a single call to get live longer than the cache, the resource should be cleaned only when it is not in use anymore", () => - Effect.gen(function*($) { - const subResource = yield* $(ObservableResource.makeVoid()) + Effect.gen(function*() { + const subResource = yield* (ObservableResource.makeVoid()) const scopedCache = ScopedCache.make({ capacity: 1, timeToLive: Duration.seconds(60), lookup: (_: void) => subResource.scoped }) - const scope1 = yield* $(Scope.make()) - const scope2 = yield* $(Scope.make()) - const [release1, release2] = yield* $(Effect.scoped(Effect.gen(function*($) { - const cache = yield* $(scopedCache) + const scope1 = yield* (Scope.make()) + const scope2 = yield* (Scope.make()) + const [release1, release2] = yield* (Effect.scoped(Effect.gen(function*() { + const cache = yield* scopedCache const scoped = cache.get(void 0) - yield* $(Effect.provide(scoped, Context.make(Scope.Scope, scope1))) - yield* $(Effect.provide(scoped, Context.make(Scope.Scope, scope2))) + yield* (Effect.provide(scoped, Context.make(Scope.Scope, scope1))) + yield* (Effect.provide(scoped, Context.make(Scope.Scope, scope2))) const release1: Scope.Scope.Finalizer = (exit) => Scope.close(scope1, exit) const release2: Scope.Scope.Finalizer = (exit) => Scope.close(scope2, exit) return [release1, release2] as const }))) - yield* $(subResource.assertAcquiredOnceAndNotCleaned()) - yield* $(release1(Exit.void)) - yield* $(subResource.assertAcquiredOnceAndNotCleaned()) - yield* $(release2(Exit.void)) - yield* $(subResource.assertAcquiredOnceAndCleaned()) + yield* (subResource.assertAcquiredOnceAndNotCleaned()) + yield* (release1(Exit.void)) + yield* (subResource.assertAcquiredOnceAndNotCleaned()) + yield* (release2(Exit.void)) + yield* (subResource.assertAcquiredOnceAndCleaned()) })) it.it("get - should clean old resources if the cache size is exceeded", () => { @@ -455,23 +455,23 @@ describe("ScopedCache", () => { .map((numCreatedKey) => [cacheSize, numCreatedKey] as const) ) return fc.assert(fc.asyncProperty(arb, ([cacheSize, numCreatedKey]) => { - const program = Effect.gen(function*($) { - const watchableLookup = yield* $(WatchableLookup.make(() => void 0)) + const program = Effect.gen(function*() { + const watchableLookup = yield* (WatchableLookup.make(() => void 0)) const scopedCache = ScopedCache.make({ capacity: cacheSize, timeToLive: Duration.seconds(60), lookup: (key: number) => watchableLookup(key) }) - yield* $(Effect.scoped(Effect.gen(function*($) { - const cache = yield* $(scopedCache) - yield* $( + yield* (Effect.scoped(Effect.gen(function*() { + const cache = yield* scopedCache + yield* ( Effect.forEach( Array.range(0, numCreatedKey - 1), (key) => Effect.scoped(Effect.asVoid(cache.get(key))), { discard: true } ) ) - const createdResources = yield* $(watchableLookup.createdResources()) + const createdResources = yield* (watchableLookup.createdResources()) const cleanedAssertions = numCreatedKey - cacheSize - 1 const oldestResourceCleaned = cleanedAssertions <= 0 ? Array.empty() @@ -480,13 +480,13 @@ describe("ScopedCache", () => { Array.flatMap((key) => Chunk.toReadonlyArray(HashMap.unsafeGet(createdResources, key))), Array.map((resource) => resource.assertAcquiredOnceAndCleaned()) ) - yield* $(Effect.all(oldestResourceCleaned, { discard: true })) + yield* (Effect.all(oldestResourceCleaned, { discard: true })) const newestResourceNotCleanedYet = pipe( Array.range(numCreatedKey - cacheSize, numCreatedKey - 1), Array.flatMap((key) => Chunk.toReadonlyArray(HashMap.unsafeGet(createdResources, key))), Array.map((resource) => resource.assertAcquiredOnceAndNotCleaned()) ) - yield* $(Effect.all(newestResourceNotCleanedYet, { discard: true })) + yield* (Effect.all(newestResourceNotCleanedYet, { discard: true })) }))) }) return Effect.runPromise(program) @@ -494,130 +494,130 @@ describe("ScopedCache", () => { }) it.effect("get - the scoped effect returned by get should recall lookup function if resource is too old and release the previous resource", () => - Effect.gen(function*($) { - const watchableLookup = yield* $(WatchableLookup.makeVoid()) - yield* $(Effect.scoped(Effect.gen(function*($) { - const cache = yield* $(ScopedCache.make({ + Effect.gen(function*() { + const watchableLookup = yield* (WatchableLookup.makeVoid()) + yield* (Effect.scoped(Effect.gen(function*() { + const cache = yield* (ScopedCache.make({ capacity: 10, timeToLive: Duration.seconds(10), lookup: (key: void) => watchableLookup(key) })) const scoped = cache.get(void 0) - yield* $(Effect.scoped(Effect.asVoid(scoped))) - yield* $(TestClock.adjust(Duration.seconds(5))) - yield* $(Effect.scoped(Effect.asVoid(scoped))) - yield* $(watchableLookup.assertCalledTimes(void 0, (n) => strictEqual(n, 1))) - yield* $(TestClock.adjust(Duration.seconds(4))) - yield* $(Effect.scoped(Effect.asVoid(scoped))) - yield* $(watchableLookup.assertCalledTimes(void 0, (n) => strictEqual(n, 1))) - yield* $(TestClock.adjust(Duration.seconds(2))) - yield* $(Effect.scoped(Effect.asVoid(scoped))) - yield* $(watchableLookup.assertCalledTimes(void 0, (n) => strictEqual(n, 2))) - yield* $(watchableLookup.assertFirstNCreatedResourcesCleaned(void 0, 1)) + yield* (Effect.scoped(Effect.asVoid(scoped))) + yield* (TestClock.adjust(Duration.seconds(5))) + yield* (Effect.scoped(Effect.asVoid(scoped))) + yield* (watchableLookup.assertCalledTimes(void 0, (n) => strictEqual(n, 1))) + yield* (TestClock.adjust(Duration.seconds(4))) + yield* (Effect.scoped(Effect.asVoid(scoped))) + yield* (watchableLookup.assertCalledTimes(void 0, (n) => strictEqual(n, 1))) + yield* (TestClock.adjust(Duration.seconds(2))) + yield* (Effect.scoped(Effect.asVoid(scoped))) + yield* (watchableLookup.assertCalledTimes(void 0, (n) => strictEqual(n, 2))) + yield* (watchableLookup.assertFirstNCreatedResourcesCleaned(void 0, 1)) }))) })) it.effect("get - should recall lookup function if resource is too old and release old resource when using the scoped effect multiple times", () => - Effect.gen(function*($) { - const watchableLookup = yield* $(WatchableLookup.makeVoid()) - yield* $(Effect.scoped(Effect.gen(function*($) { - const cache = yield* $(ScopedCache.make({ + Effect.gen(function*() { + const watchableLookup = yield* (WatchableLookup.makeVoid()) + yield* (Effect.scoped(Effect.gen(function*() { + const cache = yield* (ScopedCache.make({ capacity: 10, timeToLive: Duration.seconds(10), lookup: (key: void) => watchableLookup(key) })) const scoped = Effect.scoped(Effect.asVoid(cache.get(void 0))) - yield* $(scoped) - yield* $(TestClock.adjust(Duration.seconds(5))) - yield* $(scoped) - yield* $(watchableLookup.assertCalledTimes(void 0, (n) => strictEqual(n, 1))) - yield* $(TestClock.adjust(Duration.seconds(4))) - yield* $(scoped) - yield* $(watchableLookup.assertCalledTimes(void 0, (n) => strictEqual(n, 1))) - yield* $(TestClock.adjust(Duration.seconds(2))) - yield* $(scoped) - yield* $(watchableLookup.assertCalledTimes(void 0, (n) => strictEqual(n, 2))) - yield* $(watchableLookup.assertFirstNCreatedResourcesCleaned(void 0, 1)) + yield* scoped + yield* (TestClock.adjust(Duration.seconds(5))) + yield* scoped + yield* (watchableLookup.assertCalledTimes(void 0, (n) => strictEqual(n, 1))) + yield* (TestClock.adjust(Duration.seconds(4))) + yield* scoped + yield* (watchableLookup.assertCalledTimes(void 0, (n) => strictEqual(n, 1))) + yield* (TestClock.adjust(Duration.seconds(2))) + yield* scoped + yield* (watchableLookup.assertCalledTimes(void 0, (n) => strictEqual(n, 2))) + yield* (watchableLookup.assertFirstNCreatedResourcesCleaned(void 0, 1)) }))) })) it.effect("get - when resource is expired but still used it should wait until resource is not cleaned anymore to clean immediately", () => - Effect.gen(function*($) { - const watchableLookup = yield* $(WatchableLookup.makeVoid()) - yield* $(Effect.scoped(Effect.gen(function*($) { - const cache = yield* $(ScopedCache.make({ + Effect.gen(function*() { + const watchableLookup = yield* (WatchableLookup.makeVoid()) + yield* (Effect.scoped(Effect.gen(function*() { + const cache = yield* (ScopedCache.make({ capacity: 10, timeToLive: Duration.seconds(10), lookup: (key: void) => watchableLookup(key) })) - const scope = yield* $(Scope.make()) + const scope = yield* (Scope.make()) const acquire = Effect.provide( cache.get(void 0), Context.make(Scope.Scope, scope) ) const release: Scope.Scope.Finalizer = (exit) => Scope.close(scope, exit) - yield* $(acquire) - yield* $(TestClock.adjust(Duration.seconds(11))) - yield* $(Effect.scoped(Effect.asVoid(cache.get(void 0)))) - yield* $(watchableLookup.assertCalledTimes(void 0, (n) => strictEqual(n, 2))) - const firstCreatedResource = yield* $(watchableLookup.firstCreatedResource(void 0)) - yield* $(firstCreatedResource.assertAcquiredOnceAndNotCleaned()) - yield* $(release(Exit.void)) - yield* $(firstCreatedResource.assertAcquiredOnceAndCleaned()) + yield* acquire + yield* (TestClock.adjust(Duration.seconds(11))) + yield* (Effect.scoped(Effect.asVoid(cache.get(void 0)))) + yield* (watchableLookup.assertCalledTimes(void 0, (n) => strictEqual(n, 2))) + const firstCreatedResource = yield* (watchableLookup.firstCreatedResource(void 0)) + yield* (firstCreatedResource.assertAcquiredOnceAndNotCleaned()) + yield* (release(Exit.void)) + yield* (firstCreatedResource.assertAcquiredOnceAndCleaned()) }))) })) it.effect("getOption - should return None if resource is not in cache", () => - Effect.scoped(Effect.gen(function*(_) { - const scopedCache = yield* _(ScopedCache.make({ + Effect.scoped(Effect.gen(function*() { + const scopedCache = yield* (ScopedCache.make({ capacity: 1, timeToLive: Duration.infinity, lookup: (i: number) => Effect.succeed(i) })) - const option = yield* _(scopedCache.getOption(1)) + const option = yield* (scopedCache.getOption(1)) assertNone(option) }))) it.effect("getOption - should return Some if pending", () => - Effect.scoped(Effect.gen(function*(_) { - const scopedCache = yield* _(ScopedCache.make({ + Effect.scoped(Effect.gen(function*() { + const scopedCache = yield* (ScopedCache.make({ capacity: 1, timeToLive: Duration.infinity, lookup: (i: number) => TestServices.provideLive(Effect.delay(Effect.succeed(i), Duration.millis(10))) })) - yield* _(scopedCache.get(1), Effect.scoped, Effect.fork) - yield* _(TestServices.provideLive(Effect.sleep(Duration.millis(5)))) - const option = yield* _(scopedCache.getOption(1), Effect.scoped) + yield* pipe(scopedCache.get(1), Effect.scoped, Effect.fork) + yield* (TestServices.provideLive(Effect.sleep(Duration.millis(5)))) + const option = yield* pipe(scopedCache.getOption(1), Effect.scoped) assertSome(option, 1) }))) it.effect("getOptionComplete - should return None if pending", () => - Effect.scoped(Effect.gen(function*(_) { - const scopedCache = yield* _(ScopedCache.make({ + Effect.scoped(Effect.gen(function*() { + const scopedCache = yield* (ScopedCache.make({ capacity: 1, timeToLive: Duration.infinity, lookup: (i: number) => Effect.delay(Effect.succeed(i), Duration.millis(10)) })) - yield* _(scopedCache.get(1), Effect.scoped, Effect.fork) - yield* _(TestClock.adjust(Duration.millis(9))) - const option = yield* _(scopedCache.getOptionComplete(1), Effect.scoped) + yield* pipe(scopedCache.get(1), Effect.scoped, Effect.fork) + yield* (TestClock.adjust(Duration.millis(9))) + const option = yield* pipe(scopedCache.getOptionComplete(1), Effect.scoped) assertNone(option) }))) it.effect("getOptionComplete - should return Some if complete", () => - Effect.scoped(Effect.gen(function*(_) { - const scopedCache = yield* _(ScopedCache.make({ + Effect.scoped(Effect.gen(function*() { + const scopedCache = yield* (ScopedCache.make({ capacity: 1, timeToLive: Duration.infinity, lookup: (i: number) => TestServices.provideLive(Effect.delay(Effect.succeed(i), Duration.millis(10))) })) - yield* _(scopedCache.get(1), Effect.scoped) - const option = yield* _(scopedCache.getOptionComplete(1), Effect.scoped) + yield* pipe(scopedCache.get(1), Effect.scoped) + const option = yield* pipe(scopedCache.getOptionComplete(1), Effect.scoped) assertSome(option, 1) }))) it.effect("refresh - should update the cache with a new value", () => - Effect.gen(function*($) { + Effect.gen(function*() { const inc = (n: number) => n * 10 const retrieve = (multiplier: Ref.Ref) => (key: number) => pipe( @@ -626,18 +626,18 @@ describe("ScopedCache", () => { ) const seed = 1 const key = 123 - const ref = yield* $(Ref.make(seed)) + const ref = yield* (Ref.make(seed)) const scopedCache = ScopedCache.make({ capacity: 1, timeToLive: Duration.infinity, lookup: retrieve(ref) }) - const [val1, val2, val3] = yield* $(Effect.scoped(Effect.gen(function*($) { - const cache = yield* $(scopedCache) - const val1 = yield* $(cache.get(key)) - yield* $(cache.refresh(key)) - const val2 = yield* $(cache.get(key)) - const val3 = yield* $(cache.get(key)) + const [val1, val2, val3] = yield* (Effect.scoped(Effect.gen(function*() { + const cache = yield* scopedCache + const val1 = yield* (cache.get(key)) + yield* (cache.refresh(key)) + const val2 = yield* (cache.get(key)) + const val3 = yield* (cache.get(key)) return [val1, val2, val3] as const }))) strictEqual(val2, val3) @@ -645,28 +645,28 @@ describe("ScopedCache", () => { })) it.effect("refresh - should clean old resource when making a new one", () => - Effect.gen(function*($) { - const watchableLookup = yield* $(WatchableLookup.makeVoid()) + Effect.gen(function*() { + const watchableLookup = yield* (WatchableLookup.makeVoid()) const scopedCache = ScopedCache.make({ capacity: 1, timeToLive: Duration.infinity, lookup: (key: void) => watchableLookup(key) }) - yield* $(Effect.scoped(Effect.gen(function*($) { - const cache = yield* $(scopedCache) - yield* $(Effect.scoped(cache.get(void 0))) - yield* $(cache.refresh(void 0)) - const createdResources = yield* $( + yield* (Effect.scoped(Effect.gen(function*() { + const cache = yield* scopedCache + yield* (Effect.scoped(cache.get(void 0))) + yield* (cache.refresh(void 0)) + const createdResources = yield* pipe( watchableLookup.createdResources(), Effect.map(HashMap.unsafeGet(void 0)) ) - yield* $(Chunk.unsafeHead(createdResources).assertAcquiredOnceAndCleaned()) - yield* $(Chunk.unsafeGet(createdResources, 1).assertAcquiredOnceAndNotCleaned()) + yield* (Chunk.unsafeHead(createdResources).assertAcquiredOnceAndCleaned()) + yield* (Chunk.unsafeGet(createdResources, 1).assertAcquiredOnceAndNotCleaned()) }))) })) it.effect("refresh - should update the cache with a new value even if the last get or refresh failed", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.RuntimeException("Must be a multiple of 3") const inc = (n: number) => n + 1 const retrieve = (number: Ref.Ref) => (key: number) => @@ -680,21 +680,21 @@ describe("ScopedCache", () => { ) const seed = 2 const key = 1 - const ref = yield* $(Ref.make(seed)) + const ref = yield* (Ref.make(seed)) const scopedCache = ScopedCache.make({ capacity: 1, timeToLive: Duration.infinity, lookup: retrieve(ref) }) - const result = yield* $(Effect.scoped(Effect.gen(function*($) { - const cache = yield* $(scopedCache) - const failure1 = yield* $(Effect.either(cache.get(key))) - yield* $(cache.refresh(key)) - const value1 = yield* $(Effect.either(cache.get(key))) - yield* $(cache.refresh(key)) - const failure2 = yield* $(Effect.either(cache.refresh(key))) - yield* $(cache.refresh(key)) - const value2 = yield* $(Effect.either(cache.get(key))) + const result = yield* (Effect.scoped(Effect.gen(function*() { + const cache = yield* scopedCache + const failure1 = yield* (Effect.either(cache.get(key))) + yield* (cache.refresh(key)) + const value1 = yield* (Effect.either(cache.get(key))) + yield* (cache.refresh(key)) + const failure2 = yield* (Effect.either(cache.refresh(key))) + yield* (cache.refresh(key)) + const value2 = yield* (Effect.either(cache.get(key))) return { failure1, value1, failure2, value2 } }))) assertLeft(result.failure1, error) @@ -704,18 +704,18 @@ describe("ScopedCache", () => { })) it.effect("refresh - should create and acquire subresource if the key doesn't exist in the cache", () => - Effect.gen(function*($) { + Effect.gen(function*() { const capacity = 100 const scopedCache = ScopedCache.make({ capacity, timeToLive: Duration.infinity, lookup: (_: number) => Effect.void }) - yield* $(Effect.scoped(Effect.gen(function*($) { - const cache = yield* $(scopedCache) - const count0 = yield* $(cache.size) - yield* $(Effect.forEach(Array.range(1, capacity), (key) => cache.refresh(key), { discard: true })) - const count1 = yield* $(cache.size) + yield* (Effect.scoped(Effect.gen(function*() { + const cache = yield* scopedCache + const count0 = yield* (cache.size) + yield* (Effect.forEach(Array.range(1, capacity), (key) => cache.refresh(key), { discard: true })) + const count1 = yield* (cache.size) strictEqual(count0, 0) strictEqual(count1, capacity) }))) @@ -727,21 +727,21 @@ describe("ScopedCache", () => { .map((numCreatedKey) => [cacheSize, numCreatedKey] as const) ) return fc.assert(fc.asyncProperty(arb, ([cacheSize, numCreatedKey]) => { - const program = Effect.gen(function*($) { - const watchableLookup = yield* $(WatchableLookup.make(() => void 0)) + const program = Effect.gen(function*() { + const watchableLookup = yield* (WatchableLookup.make(() => void 0)) const scopedCache = ScopedCache.make({ capacity: cacheSize, timeToLive: Duration.seconds(60), lookup: (key: number) => watchableLookup(key) }) - yield* $(Effect.scoped(Effect.gen(function*($) { - const cache = yield* $(scopedCache) - yield* $(Effect.forEach( + yield* (Effect.scoped(Effect.gen(function*() { + const cache = yield* scopedCache + yield* (Effect.forEach( Array.range(0, numCreatedKey - 1), (key) => cache.refresh(key), { discard: true } )) - const createdResources = yield* $(watchableLookup.createdResources()) + const createdResources = yield* (watchableLookup.createdResources()) const cleanedAssertions = numCreatedKey - cacheSize - 1 const oldestResourceCleaned = cleanedAssertions <= 0 ? Array.empty() @@ -750,13 +750,13 @@ describe("ScopedCache", () => { Array.flatMap((key) => Chunk.toReadonlyArray(HashMap.unsafeGet(createdResources, key))), Array.map((resource) => resource.assertAcquiredOnceAndCleaned()) ) - yield* $(Effect.all(oldestResourceCleaned, { discard: true })) + yield* (Effect.all(oldestResourceCleaned, { discard: true })) const newestResourceNotCleanedYet = pipe( Array.range(numCreatedKey - cacheSize, numCreatedKey - 1), Array.flatMap((key) => Chunk.toReadonlyArray(HashMap.unsafeGet(createdResources, key))), Array.map((resource) => resource.assertAcquiredOnceAndNotCleaned()) ) - yield* $(Effect.all(newestResourceNotCleanedYet, { discard: true })) + yield* (Effect.all(newestResourceNotCleanedYet, { discard: true })) }))) }) return Effect.runPromise(program) @@ -764,19 +764,19 @@ describe("ScopedCache", () => { }) it.effect("refresh - should not clean the resource if it's not yet expired until the new resource is ready", () => - Effect.gen(function*($) { - const watchableLookup = yield* $(WatchableLookup.makeVoid()) - yield* $(Effect.scoped(Effect.gen(function*($) { - const cache = yield* $(ScopedCache.make({ + Effect.gen(function*() { + const watchableLookup = yield* (WatchableLookup.makeVoid()) + yield* (Effect.scoped(Effect.gen(function*() { + const cache = yield* (ScopedCache.make({ capacity: 10, timeToLive: Duration.seconds(10), lookup: watchableLookup })) - yield* $(Effect.scoped(Effect.asVoid(cache.get(void 0)))) - yield* $(TestClock.adjust(Duration.seconds(9))) - yield* $(watchableLookup.lock()) - const refreshFiber = yield* $(Effect.fork(cache.refresh(void 0))) - yield* $( + yield* (Effect.scoped(Effect.asVoid(cache.get(void 0)))) + yield* (TestClock.adjust(Duration.seconds(9))) + yield* (watchableLookup.lock()) + const refreshFiber = yield* (Effect.fork(cache.refresh(void 0))) + yield* pipe( watchableLookup.getCalledTimes(void 0), Effect.repeat(pipe( Schedule.recurWhile((calledTimes) => calledTimes < 2), @@ -784,30 +784,30 @@ describe("ScopedCache", () => { Schedule.whileOutput((elapsed) => Duration.lessThan(elapsed, Duration.millis(100))) )) ) - yield* $(TestServices.provideLive(Effect.sleep(Duration.millis(100)))) - yield* $(watchableLookup.assertCalledTimes(void 0, (n) => strictEqual(n, 2))) - const firstCreatedResource = yield* $(watchableLookup.firstCreatedResource(void 0)) - yield* $(firstCreatedResource.assertAcquiredOnceAndNotCleaned()) - yield* $(watchableLookup.unlock()) - yield* $(Fiber.join(refreshFiber)) - yield* $(firstCreatedResource.assertAcquiredOnceAndCleaned()) + yield* (TestServices.provideLive(Effect.sleep(Duration.millis(100)))) + yield* (watchableLookup.assertCalledTimes(void 0, (n) => strictEqual(n, 2))) + const firstCreatedResource = yield* (watchableLookup.firstCreatedResource(void 0)) + yield* (firstCreatedResource.assertAcquiredOnceAndNotCleaned()) + yield* (watchableLookup.unlock()) + yield* (Fiber.join(refreshFiber)) + yield* (firstCreatedResource.assertAcquiredOnceAndCleaned()) }))) })) it.effect("refresh - should clean the resource if it's expired and not in used", () => - Effect.gen(function*($) { - const watchableLookup = yield* $(WatchableLookup.makeVoid()) - yield* $(Effect.scoped(Effect.gen(function*($) { - const cache = yield* $(ScopedCache.make({ + Effect.gen(function*() { + const watchableLookup = yield* (WatchableLookup.makeVoid()) + yield* (Effect.scoped(Effect.gen(function*() { + const cache = yield* (ScopedCache.make({ capacity: 10, timeToLive: Duration.seconds(10), lookup: watchableLookup })) - yield* $(Effect.scoped(Effect.asVoid(cache.get(void 0)))) - yield* $(TestClock.adjust(Duration.seconds(11))) - yield* $(watchableLookup.lock()) - const refreshFiber = yield* $(Effect.fork(cache.refresh(void 0))) - yield* $( + yield* (Effect.scoped(Effect.asVoid(cache.get(void 0)))) + yield* (TestClock.adjust(Duration.seconds(11))) + yield* (watchableLookup.lock()) + const refreshFiber = yield* (Effect.fork(cache.refresh(void 0))) + yield* pipe( watchableLookup.getCalledTimes(void 0), Effect.repeat(pipe( Schedule.recurWhile((calledTimes) => calledTimes < 1), @@ -815,42 +815,42 @@ describe("ScopedCache", () => { Schedule.whileOutput((elapsed) => Duration.lessThan(elapsed, Duration.millis(100))) )) ) - yield* $(TestServices.provideLive(Effect.sleep(Duration.millis(100)))) - yield* $(watchableLookup.assertCalledTimes(void 0, (n) => strictEqual(n, 2))) - yield* $(watchableLookup.assertFirstNCreatedResourcesCleaned(void 0, 1)) - yield* $(watchableLookup.unlock()) - yield* $(Fiber.join(refreshFiber)) + yield* (TestServices.provideLive(Effect.sleep(Duration.millis(100)))) + yield* (watchableLookup.assertCalledTimes(void 0, (n) => strictEqual(n, 2))) + yield* (watchableLookup.assertFirstNCreatedResourcesCleaned(void 0, 1)) + yield* (watchableLookup.unlock()) + yield* (Fiber.join(refreshFiber)) }))) })) it.effect("refresh - should wait to clean expired resource until it's not in use anymore", () => - Effect.gen(function*($) { - const watchableLookup = yield* $(WatchableLookup.makeVoid()) - yield* $(Effect.scoped(Effect.gen(function*($) { - const cache = yield* $(ScopedCache.make({ + Effect.gen(function*() { + const watchableLookup = yield* (WatchableLookup.makeVoid()) + yield* (Effect.scoped(Effect.gen(function*() { + const cache = yield* (ScopedCache.make({ capacity: 10, timeToLive: Duration.seconds(10), lookup: watchableLookup })) - const scope = yield* $(Scope.make()) + const scope = yield* (Scope.make()) const acquire = Effect.provide( cache.get(void 0), Context.make(Scope.Scope, scope) ) const release: Scope.Scope.Finalizer = (exit) => Scope.close(scope, exit) - yield* $(acquire) - yield* $(TestClock.adjust(Duration.seconds(11))) - yield* $(cache.refresh(void 0)) - yield* $(watchableLookup.assertCalledTimes(void 0, (n) => strictEqual(n, 2))) - const firstCreatedResource = yield* $(watchableLookup.firstCreatedResource(void 0)) - yield* $(firstCreatedResource.assertAcquiredOnceAndNotCleaned()) - yield* $(release(Exit.void)) - yield* $(firstCreatedResource.assertAcquiredOnceAndCleaned()) + yield* acquire + yield* (TestClock.adjust(Duration.seconds(11))) + yield* (cache.refresh(void 0)) + yield* (watchableLookup.assertCalledTimes(void 0, (n) => strictEqual(n, 2))) + const firstCreatedResource = yield* (watchableLookup.firstCreatedResource(void 0)) + yield* (firstCreatedResource.assertAcquiredOnceAndNotCleaned()) + yield* (release(Exit.void)) + yield* (firstCreatedResource.assertAcquiredOnceAndCleaned()) }))) })) it.effect(".pipe", () => - Effect.gen(function*(_) { - const cache = yield* _( + Effect.gen(function*() { + const cache = yield* pipe( ScopedCache.make({ capacity: 10, timeToLive: Duration.seconds(10), diff --git a/packages/effect/test/ScopedRef.test.ts b/packages/effect/test/ScopedRef.test.ts index 7c5a4c81bd..c40b84c170 100644 --- a/packages/effect/test/ScopedRef.test.ts +++ b/packages/effect/test/ScopedRef.test.ts @@ -6,58 +6,58 @@ import { describe } from "vitest" describe("ScopedRef", () => { it.scoped("single set", () => - Effect.gen(function*($) { - const counter = yield* $(Counter.make()) - const ref = yield* $(ScopedRef.make(() => 0)) - yield* $(ScopedRef.set(ref, counter.acquire())) - const result = yield* $(ScopedRef.get(ref)) + Effect.gen(function*() { + const counter = yield* (Counter.make()) + const ref = yield* (ScopedRef.make(() => 0)) + yield* (ScopedRef.set(ref, counter.acquire())) + const result = yield* (ScopedRef.get(ref)) strictEqual(result, 1) })) it.scoped("dual set", () => - Effect.gen(function*($) { - const counter = yield* $(Counter.make()) - const ref = yield* $(ScopedRef.make(() => 0)) - yield* $( + Effect.gen(function*() { + const counter = yield* (Counter.make()) + const ref = yield* (ScopedRef.make(() => 0)) + yield* pipe( ScopedRef.set(ref, counter.acquire()), Effect.zipRight(ScopedRef.set(ref, counter.acquire())) ) - const result = yield* $(ScopedRef.get(ref)) + const result = yield* (ScopedRef.get(ref)) strictEqual(result, 2) })) it.scoped("release on swap", () => - Effect.gen(function*($) { - const counter = yield* $(Counter.make()) - const ref = yield* $(ScopedRef.make(() => 0)) - yield* $( + Effect.gen(function*() { + const counter = yield* (Counter.make()) + const ref = yield* (ScopedRef.make(() => 0)) + yield* pipe( ScopedRef.set(ref, counter.acquire()), Effect.zipRight(ScopedRef.set(ref, counter.acquire())) ) - const acquired = yield* $(counter.acquired()) - const released = yield* $(counter.released()) + const acquired = yield* (counter.acquired()) + const released = yield* (counter.released()) strictEqual(acquired, 2) strictEqual(released, 1) })) it.scoped("double release on double swap", () => - Effect.gen(function*($) { - const counter = yield* $(Counter.make()) - const ref = yield* $(ScopedRef.make(() => 0)) - yield* $( + Effect.gen(function*() { + const counter = yield* (Counter.make()) + const ref = yield* (ScopedRef.make(() => 0)) + yield* ( pipe( ScopedRef.set(ref, counter.acquire()), Effect.zipRight(ScopedRef.set(ref, counter.acquire())), Effect.zipRight(ScopedRef.set(ref, counter.acquire())) ) ) - const acquired = yield* $(counter.acquired()) - const released = yield* $(counter.released()) + const acquired = yield* (counter.acquired()) + const released = yield* (counter.released()) strictEqual(acquired, 3) strictEqual(released, 2) })) it.effect("full release", () => - Effect.gen(function*($) { - const counter = yield* $(Counter.make()) - yield* $( + Effect.gen(function*() { + const counter = yield* (Counter.make()) + yield* pipe( ScopedRef.make(() => 0), Effect.flatMap((ref) => pipe( @@ -68,14 +68,14 @@ describe("ScopedRef", () => { ), Effect.scoped ) - const acquired = yield* $(counter.acquired()) - const released = yield* $(counter.released()) + const acquired = yield* (counter.acquired()) + const released = yield* (counter.released()) strictEqual(acquired, 3) strictEqual(released, 3) })) it.effect("full release", () => - Effect.gen(function*(_) { - const ref = yield* _(Effect.scoped(ScopedRef.make(() => 0))) + Effect.gen(function*() { + const ref = yield* Effect.scoped(ScopedRef.make(() => 0)) strictEqual(ref.pipe(identity), ref) })) it.scoped("subtype of Effect", () => diff --git a/packages/effect/test/Sink/collecting.test.ts b/packages/effect/test/Sink/collecting.test.ts index f62ca6dffb..25fad7b7be 100644 --- a/packages/effect/test/Sink/collecting.test.ts +++ b/packages/effect/test/Sink/collecting.test.ts @@ -10,12 +10,12 @@ import { describe } from "vitest" describe("Sink", () => { it.effect("collectAllN - respects the given limit", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = pipe( Stream.fromChunk(Chunk.make(1, 2, 3, 4)), Stream.transduce(Sink.collectAllN(3)) ) - const result = yield* $(Stream.runCollect(stream)) + const result = yield* (Stream.runCollect(stream)) deepStrictEqual( Array.from(Chunk.map(result, (chunk) => Array.from(chunk))), [[1, 2, 3], [4]] @@ -23,12 +23,12 @@ describe("Sink", () => { })) it.effect("collectAllN - produces empty trailing chunks", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = pipe( Stream.fromChunk(Chunk.make(1, 2, 3, 4)), Stream.transduce(Sink.collectAllN(4)) ) - const result = yield* $(Stream.runCollect(stream)) + const result = yield* (Stream.runCollect(stream)) deepStrictEqual( Array.from(Chunk.map(result, (chunk) => Array.from(chunk))), [[1, 2, 3, 4], []] @@ -36,12 +36,12 @@ describe("Sink", () => { })) it.effect("collectAllN - produces empty trailing chunks", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = pipe( Stream.fromChunk(Chunk.empty()), Stream.transduce(Sink.collectAllN(3)) ) - const result = yield* $(Stream.runCollect(stream)) + const result = yield* (Stream.runCollect(stream)) deepStrictEqual( Array.from(Chunk.map(result, (chunk) => Array.from(chunk))), [[]] @@ -49,19 +49,19 @@ describe("Sink", () => { })) it.effect("collectAllToSet", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = Stream.make(1, 2, 3, 3, 4) - const result = yield* $(stream, Stream.run(Sink.collectAllToSet())) + const result = yield* pipe(stream, Stream.run(Sink.collectAllToSet())) deepStrictEqual(Array.from(result), [1, 2, 3, 4]) })) it.effect("collectAllToSetN - respects the given limit", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = pipe( Stream.fromChunks(Chunk.make(1, 2, 1), Chunk.make(2, 3, 3, 4)), Stream.transduce(Sink.collectAllToSetN(3)) ) - const result = yield* $(Stream.runCollect(stream)) + const result = yield* (Stream.runCollect(stream)) deepStrictEqual( Array.from(Chunk.map(result, (set) => Array.from(set))), [[1, 2, 3], [4]] @@ -69,12 +69,12 @@ describe("Sink", () => { })) it.effect("collectAllToSetN - handles empty input", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = pipe( Stream.fromChunk(Chunk.empty()), Stream.transduce(Sink.collectAllToSetN(3)) ) - const result = yield* $(Stream.runCollect(stream)) + const result = yield* (Stream.runCollect(stream)) deepStrictEqual( Array.from(Chunk.map(result, (set) => Array.from(set))), [[]] @@ -82,8 +82,8 @@ describe("Sink", () => { })) it.effect("collectAllToMap", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.range(0, 9), Stream.run(Sink.collectAllToMap( (n) => n % 3, @@ -97,8 +97,8 @@ describe("Sink", () => { })) it.effect("collectAllToMapN - respects the given limit", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 1, 2, 2, 3, 2, 4, 5), Stream.transduce(Sink.collectAllToMapN( 2, @@ -114,8 +114,8 @@ describe("Sink", () => { })) it.effect("collectAllToMapN - collects as long as map size doesn't exceed the limit", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.fromChunks(Chunk.make(0, 1, 2), Chunk.make(3, 4, 5), Chunk.make(6, 7, 8, 9)), Stream.transduce(Sink.collectAllToMapN( 3, @@ -131,8 +131,8 @@ describe("Sink", () => { })) it.effect("collectAllToMapN - handles empty input", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.fromChunk(Chunk.empty()), Stream.transduce(Sink.collectAllToMapN( 3, @@ -148,7 +148,7 @@ describe("Sink", () => { })) it.effect("collectAllUntil", () => - Effect.gen(function*($) { + Effect.gen(function*() { const sink = Sink.collectAllUntil((n) => n > 4) const input = Chunk.make( Chunk.make(3, 4, 5, 6, 7, 2), @@ -156,7 +156,7 @@ describe("Sink", () => { Chunk.make(3, 4, 5, 6, 5, 4, 3, 2), Chunk.empty() ) - const result = yield* $(Stream.fromChunks(...input), Stream.transduce(sink), Stream.runCollect) + const result = yield* pipe(Stream.fromChunks(...input), Stream.transduce(sink), Stream.runCollect) deepStrictEqual( Array.from(result).map((chunk) => Array.from(chunk)), [[3, 4, 5], [6], [7], [2, 3, 4, 5], [6], [5], [4, 3, 2]] @@ -164,7 +164,7 @@ describe("Sink", () => { })) it.effect("collectAllUntilEffect", () => - Effect.gen(function*($) { + Effect.gen(function*() { const sink = Sink.collectAllUntilEffect((n: number) => Effect.succeed(n > 4)) const input = Chunk.make( Chunk.make(3, 4, 5, 6, 7, 2), @@ -172,7 +172,7 @@ describe("Sink", () => { Chunk.make(3, 4, 5, 6, 5, 4, 3, 2), Chunk.empty() ) - const result = yield* $(Stream.fromChunks(...input), Stream.transduce(sink), Stream.runCollect) + const result = yield* pipe(Stream.fromChunks(...input), Stream.transduce(sink), Stream.runCollect) deepStrictEqual( Array.from(result).map((chunk) => Array.from(chunk)), [[3, 4, 5], [6], [7], [2, 3, 4, 5], [6], [5], [4, 3, 2]] @@ -180,7 +180,7 @@ describe("Sink", () => { })) it.effect("collectAllWhile", () => - Effect.gen(function*($) { + Effect.gen(function*() { const sink = pipe( Sink.collectAllWhile((n) => n < 5), Sink.zipLeft(Sink.collectAllWhile((n) => n >= 5)) @@ -191,7 +191,7 @@ describe("Sink", () => { Chunk.make(3, 4, 5, 6, 5, 4, 3, 2), Chunk.empty() ) - const result = yield* $(Stream.fromChunks(...input), Stream.transduce(sink), Stream.runCollect) + const result = yield* pipe(Stream.fromChunks(...input), Stream.transduce(sink), Stream.runCollect) deepStrictEqual( Array.from(result).map((chunk) => Array.from(chunk)), [[3, 4], [2, 3, 4], [4, 3, 2]] @@ -199,7 +199,7 @@ describe("Sink", () => { })) it.effect("collectAllWhileEffect", () => - Effect.gen(function*($) { + Effect.gen(function*() { const sink = pipe( Sink.collectAllWhileEffect((n: number) => Effect.succeed(n < 5)), Sink.zipLeft(Sink.collectAllWhileEffect((n: number) => Effect.succeed(n >= 5))) @@ -210,7 +210,7 @@ describe("Sink", () => { Chunk.make(3, 4, 5, 6, 5, 4, 3, 2), Chunk.empty() ) - const result = yield* $(Stream.fromChunks(...input), Stream.transduce(sink), Stream.runCollect) + const result = yield* pipe(Stream.fromChunks(...input), Stream.transduce(sink), Stream.runCollect) deepStrictEqual( Array.from(result).map((chunk) => Array.from(chunk)), [[3, 4], [2, 3, 4], [4, 3, 2]] @@ -218,7 +218,7 @@ describe("Sink", () => { })) it.effect("collectAllWhileWith - example 1", () => - Effect.gen(function*($) { + Effect.gen(function*() { const program = (chunkSize: number) => pipe( Stream.fromChunk(Chunk.range(1, 10)), @@ -232,16 +232,16 @@ describe("Sink", () => { }) )) ) - const result1 = yield* $(program(1)) - const result2 = yield* $(program(3)) - const result3 = yield* $(program(20)) + const result1 = yield* (program(1)) + const result2 = yield* (program(3)) + const result3 = yield* (program(20)) strictEqual(result1, 54) strictEqual(result2, 54) strictEqual(result3, 54) })) it.effect("collectAllWhileWith - example 2", () => - Effect.gen(function*($) { + Effect.gen(function*() { const sink = pipe( Sink.head(), Sink.collectAllWhileWith({ @@ -254,7 +254,7 @@ describe("Sink", () => { }) ) const stream = pipe(Stream.fromChunk(Chunk.range(1, 100))) - const result = yield* $( + const result = yield* pipe( stream, Stream.concat(stream), Stream.rechunk(3), diff --git a/packages/effect/test/Sink/constructors.test.ts b/packages/effect/test/Sink/constructors.test.ts index 6d473acecc..83ccae191e 100644 --- a/packages/effect/test/Sink/constructors.test.ts +++ b/packages/effect/test/Sink/constructors.test.ts @@ -20,46 +20,46 @@ import { describe } from "vitest" describe("Sink", () => { it.effect("drain - fails if upstream fails", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = pipe( Stream.make(1), Stream.mapEffect(() => Effect.fail("boom!")) ) - const result = yield* $(stream, Stream.run(Sink.drain), Effect.exit) + const result = yield* pipe(stream, Stream.run(Sink.drain), Effect.exit) deepStrictEqual(result, Exit.fail("boom!")) })) it.effect("fromEffect", () => - Effect.gen(function*($) { + Effect.gen(function*() { const sink = Sink.fromEffect(Effect.succeed("ok")) - const result = yield* $(Stream.make(1, 2, 3), Stream.run(sink)) + const result = yield* pipe(Stream.make(1, 2, 3), Stream.run(sink)) deepStrictEqual(result, "ok") })) it.effect("fromQueue - should enqueue all elements", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.unbounded()) - yield* $(Stream.make(1, 2, 3), Stream.run(Sink.fromQueue(queue))) - const result = yield* $(Queue.takeAll(queue)) + Effect.gen(function*() { + const queue = yield* (Queue.unbounded()) + yield* pipe(Stream.make(1, 2, 3), Stream.run(Sink.fromQueue(queue))) + const result = yield* (Queue.takeAll(queue)) deepStrictEqual(Array.from(result), [1, 2, 3]) })) it.effect("fromQueueWithShutdown - should enqueue all elements and shutdown the queue", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.unbounded(), Effect.map(createQueueSpy)) - yield* $(Stream.make(1, 2, 3), Stream.run(Sink.fromQueue(queue, { shutdown: true }))) - const enqueuedValues = yield* $(Queue.takeAll(queue)) - const isShutdown = yield* $(Queue.isShutdown(queue)) + Effect.gen(function*() { + const queue = yield* pipe(Queue.unbounded(), Effect.map(createQueueSpy)) + yield* pipe(Stream.make(1, 2, 3), Stream.run(Sink.fromQueue(queue, { shutdown: true }))) + const enqueuedValues = yield* (Queue.takeAll(queue)) + const isShutdown = yield* (Queue.isShutdown(queue)) deepStrictEqual(Array.from(enqueuedValues), [1, 2, 3]) assertTrue(isShutdown) })) it.effect("fromPubSub - should publish all elements", () => - Effect.gen(function*($) { - const deferred1 = yield* $(Deferred.make()) - const deferred2 = yield* $(Deferred.make()) - const pubsub = yield* $(PubSub.unbounded()) - const fiber = yield* $( + Effect.gen(function*() { + const deferred1 = yield* (Deferred.make()) + const deferred2 = yield* (Deferred.make()) + const pubsub = yield* (PubSub.unbounded()) + const fiber = yield* pipe( PubSub.subscribe(pubsub), Effect.flatMap((subscription) => pipe( @@ -71,18 +71,18 @@ describe("Sink", () => { Effect.scoped, Effect.fork ) - yield* $(Deferred.await(deferred1)) - yield* $(Stream.make(1, 2, 3), Stream.run(Sink.fromPubSub(pubsub))) - yield* $(Deferred.succeed(deferred2, void 0)) - const result = yield* $(Fiber.join(fiber)) + yield* (Deferred.await(deferred1)) + yield* pipe(Stream.make(1, 2, 3), Stream.run(Sink.fromPubSub(pubsub))) + yield* (Deferred.succeed(deferred2, void 0)) + const result = yield* (Fiber.join(fiber)) deepStrictEqual(Array.from(result), [1, 2, 3]) })) it.effect("fromPubSub(_, { shutdown: true }) - should shutdown the pubsub", () => - Effect.gen(function*($) { - const pubsub = yield* $(PubSub.unbounded()) - yield* $(Stream.make(1, 2, 3), Stream.run(Sink.fromPubSub(pubsub, { shutdown: true }))) - const isShutdown = yield* $(PubSub.isShutdown(pubsub)) + Effect.gen(function*() { + const pubsub = yield* (PubSub.unbounded()) + yield* pipe(Stream.make(1, 2, 3), Stream.run(Sink.fromPubSub(pubsub, { shutdown: true }))) + const isShutdown = yield* (PubSub.isShutdown(pubsub)) assertTrue(isShutdown) })) }) diff --git a/packages/effect/test/Sink/dropping.test.ts b/packages/effect/test/Sink/dropping.test.ts index d12d95578d..7735fd8e20 100644 --- a/packages/effect/test/Sink/dropping.test.ts +++ b/packages/effect/test/Sink/dropping.test.ts @@ -1,5 +1,6 @@ import * as Effect from "effect/Effect" import * as Either from "effect/Either" +import { pipe } from "effect/Function" import * as Sink from "effect/Sink" import * as Stream from "effect/Stream" import { deepStrictEqual } from "effect/test/util" @@ -8,8 +9,8 @@ import { describe } from "vitest" describe("Sink", () => { it.effect("dropUntil", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 2, 3, 4, 5, 1, 2, 3, 4, 5), Stream.pipeThrough(Sink.dropUntil((n) => n >= 3)), Stream.runCollect @@ -18,8 +19,8 @@ describe("Sink", () => { })) it.effect("dropUntilEffect - happy path", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 2, 3, 4, 5, 1, 2, 3, 4, 5), Stream.pipeThrough(Sink.dropUntilEffect((n) => Effect.succeed(n >= 3))), Stream.runCollect @@ -28,8 +29,8 @@ describe("Sink", () => { })) it.effect("dropUntilEffect - error", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 2, 3), Stream.concat(Stream.fail("Aie")), Stream.concat(Stream.make(5, 1, 2, 3, 4, 5)), @@ -41,8 +42,8 @@ describe("Sink", () => { })) it.effect("dropWhile", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 2, 3, 4, 5, 1, 2, 3, 4, 5), Stream.pipeThrough(Sink.dropWhile((n) => n < 3)), Stream.runCollect @@ -51,8 +52,8 @@ describe("Sink", () => { })) it.effect("dropWhileEffect - happy path", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 2, 3, 4, 5, 1, 2, 3, 4, 5), Stream.pipeThrough(Sink.dropWhileEffect((n) => Effect.succeed(n < 3))), Stream.runCollect @@ -61,8 +62,8 @@ describe("Sink", () => { })) it.effect("dropWhileEffect - error", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.concat( Stream.make(1, 2, 3), Stream.fail("Aie") diff --git a/packages/effect/test/Sink/elements.test.ts b/packages/effect/test/Sink/elements.test.ts index e818062809..d78c468349 100644 --- a/packages/effect/test/Sink/elements.test.ts +++ b/packages/effect/test/Sink/elements.test.ts @@ -9,10 +9,10 @@ import { describe } from "vitest" describe("Sink", () => { it.effect("every", () => - Effect.gen(function*($) { + Effect.gen(function*() { const chunk = Chunk.make(1, 2, 3, 4, 5) const predicate = (n: number) => n < 6 - const result = yield* $( + const result = yield* pipe( Stream.fromChunk(chunk), Stream.run(Sink.every(predicate)) ) @@ -20,8 +20,8 @@ describe("Sink", () => { })) it.effect("head", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.fromChunks(Chunk.range(1, 10), Chunk.range(1, 3), Chunk.range(2, 5)), Stream.run(Sink.head()) ) @@ -29,8 +29,8 @@ describe("Sink", () => { })) it.effect("last", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.fromChunks(Chunk.range(1, 10), Chunk.range(1, 3), Chunk.range(2, 5)), Stream.run(Sink.last()) ) @@ -38,8 +38,8 @@ describe("Sink", () => { })) it.effect("take - repeats until the source is exhausted", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.fromChunks( Chunk.make(1, 2), Chunk.make(3, 4, 5), @@ -56,10 +56,10 @@ describe("Sink", () => { })) it.effect("some", () => - Effect.gen(function*($) { + Effect.gen(function*() { const chunk = Chunk.make(1, 2, 3, 4, 5) const predicate = (n: number) => n === 3 - const result = yield* $( + const result = yield* pipe( Stream.fromChunk(chunk), Stream.run(Sink.some(predicate)) ) @@ -67,8 +67,8 @@ describe("Sink", () => { })) it.effect("sum", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.fromChunks( Chunk.make(1, 2), Chunk.make(3, 4, 5), @@ -85,7 +85,7 @@ describe("Sink", () => { })) it.effect("take", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 4 const chunks = Chunk.make( Chunk.make(1, 2), @@ -94,7 +94,7 @@ describe("Sink", () => { Chunk.make(6, 7), Chunk.make(8, 9) ) - const [chunk, leftover] = yield* $( + const [chunk, leftover] = yield* pipe( Stream.fromChunks(...chunks), Stream.peel(Sink.take(n)), Effect.flatMap(([chunk, stream]) => diff --git a/packages/effect/test/Sink/environment.test.ts b/packages/effect/test/Sink/environment.test.ts index f330cee07d..c46111f9d6 100644 --- a/packages/effect/test/Sink/environment.test.ts +++ b/packages/effect/test/Sink/environment.test.ts @@ -9,13 +9,13 @@ import { describe } from "vitest" describe("Sink", () => { it.effect("contextWithSink", () => - Effect.gen(function*($) { + Effect.gen(function*() { const tag = Context.GenericTag("string") const sink = pipe( Sink.contextWithSink((env: Context.Context) => Sink.succeed(pipe(env, Context.get(tag)))), Sink.provideContext(pipe(Context.empty(), Context.add(tag, "use this"))) ) - const result = yield* $(Stream.make("ignore this"), Stream.run(sink)) + const result = yield* pipe(Stream.make("ignore this"), Stream.run(sink)) strictEqual(result, "use this") })) }) diff --git a/packages/effect/test/Sink/error-handling.test.ts b/packages/effect/test/Sink/error-handling.test.ts index d23da226da..8631923432 100644 --- a/packages/effect/test/Sink/error-handling.test.ts +++ b/packages/effect/test/Sink/error-handling.test.ts @@ -9,11 +9,11 @@ import { describe } from "vitest" describe("Sink", () => { it.effect("propagates errors", () => - Effect.gen(function*($) { + Effect.gen(function*() { const ErrorStream = "ErrorStream" as const const ErrorMapped = "ErrorMapped" as const const ErrorSink = "ErrorSink" as const - const result = yield* $( + const result = yield* pipe( Stream.fail(ErrorStream), Stream.mapError(() => ErrorMapped), Stream.run( diff --git a/packages/effect/test/Sink/filtering.test.ts b/packages/effect/test/Sink/filtering.test.ts index 577e651151..1fbe2361d9 100644 --- a/packages/effect/test/Sink/filtering.test.ts +++ b/packages/effect/test/Sink/filtering.test.ts @@ -8,8 +8,8 @@ import { describe } from "vitest" describe("Sink", () => { it.effect("filterInput", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.range(1, 9), Stream.run(pipe(Sink.collectAll(), Sink.filterInput((n) => n % 2 === 0))) ) @@ -17,8 +17,8 @@ describe("Sink", () => { })) it.effect("filterInputEffect - happy path", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.range(1, 9), Stream.run(pipe( Sink.collectAll(), @@ -29,8 +29,8 @@ describe("Sink", () => { })) it.effect("filterInputEffect - error", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.range(1, 9), Stream.run(pipe( Sink.collectAll(), diff --git a/packages/effect/test/Sink/finalization.test.ts b/packages/effect/test/Sink/finalization.test.ts index 2c12c641a4..b563160b12 100644 --- a/packages/effect/test/Sink/finalization.test.ts +++ b/packages/effect/test/Sink/finalization.test.ts @@ -9,25 +9,25 @@ import { describe } from "vitest" describe("Sink", () => { it.effect("ensuring - happy path", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(false)) - yield* $( + Effect.gen(function*() { + const ref = yield* Ref.make(false) + yield* pipe( Stream.make(1, 2, 3, 4, 5), Stream.run(pipe(Sink.drain, Sink.ensuring(Ref.set(ref, true)))) ) - const result = yield* $(Ref.get(ref)) + const result = yield* Ref.get(ref) assertTrue(result) })) it.effect("ensuring - error", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(false)) - yield* $( + Effect.gen(function*() { + const ref = yield* Ref.make(false) + yield* pipe( Stream.fail("boom!"), Stream.run(pipe(Sink.drain, Sink.ensuring(Ref.set(ref, true)))), Effect.ignore ) - const result = yield* $(Ref.get(ref)) + const result = yield* Ref.get(ref) assertTrue(result) })) }) diff --git a/packages/effect/test/Sink/folding.test.ts b/packages/effect/test/Sink/folding.test.ts index 9b72ed2939..da1303aafa 100644 --- a/packages/effect/test/Sink/folding.test.ts +++ b/packages/effect/test/Sink/folding.test.ts @@ -11,8 +11,8 @@ import { describe } from "vitest" describe("Sink", () => { it.effect("fold - empty", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.empty, Stream.transduce(Sink.fold(0, constTrue, (x, y) => x + y)), Stream.runCollect @@ -21,8 +21,8 @@ describe("Sink", () => { })) it.effect("fold - termination in the middle", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.range(1, 9), Stream.run(Sink.fold(0, (n) => n <= 5, (x, y) => x + y)) ) @@ -30,8 +30,8 @@ describe("Sink", () => { })) it.effect("fold - immediate termination", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.range(1, 9), Stream.run(Sink.fold(0, (n) => n <= -1, (x, y) => x + y)) ) @@ -39,8 +39,8 @@ describe("Sink", () => { })) it.effect("fold - no termination", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.range(1, 9), Stream.run(Sink.fold(0, (n) => n <= 500, (x, y) => x + y)) ) @@ -48,22 +48,22 @@ describe("Sink", () => { })) it.effect("foldLeft equivalence with Chunk.reduce", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = Stream.range(1, 9) - const result1 = yield* $(stream, Stream.run(Sink.foldLeft("", (s, n) => s + `${n}`))) - const result2 = yield* $(stream, Stream.runCollect, Effect.map(Chunk.reduce("", (s, n) => s + `${n}`))) + const result1 = yield* pipe(stream, Stream.run(Sink.foldLeft("", (s, n) => s + `${n}`))) + const result2 = yield* pipe(stream, Stream.runCollect, Effect.map(Chunk.reduce("", (s, n) => s + `${n}`))) strictEqual(result1, result2) })) it.effect("foldEffect - empty", () => - Effect.gen(function*($) { + Effect.gen(function*() { const sink = Sink.foldEffect(0, constTrue, (x, y: number) => Effect.succeed(x + y)) - const result = yield* $(Stream.empty, Stream.transduce(sink), Stream.runCollect) + const result = yield* pipe(Stream.empty, Stream.transduce(sink), Stream.runCollect) deepStrictEqual(Array.from(result), [0]) })) it.effect("foldEffect - short circuits", () => - Effect.gen(function*($) { + Effect.gen(function*() { const empty: Stream.Stream = Stream.empty const single = Stream.make(1) const double = Stream.make(1, 2) @@ -90,10 +90,10 @@ describe("Sink", () => { ), Effect.exit ) - const result1 = yield* $(run(empty)) - const result2 = yield* $(run(single)) - const result3 = yield* $(run(double)) - const result4 = yield* $(run(failed)) + const result1 = yield* run(empty) + const result2 = yield* run(single) + const result3 = yield* run(double) + const result4 = yield* run(failed) deepStrictEqual(result1, Exit.succeed([[0], []])) deepStrictEqual(result2, Exit.succeed([[30], [1]])) deepStrictEqual(result3, Exit.succeed([[30], [1, 2]])) @@ -101,8 +101,8 @@ describe("Sink", () => { })) it.effect("foldUntil", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 1, 1, 1, 1, 1), Stream.transduce(Sink.foldUntil(0, 3, (x, y) => x + y)), Stream.runCollect @@ -111,8 +111,8 @@ describe("Sink", () => { })) it.effect("foldUntilEffect", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 1, 1, 1, 1, 1), Stream.transduce(Sink.foldUntilEffect(0, 3, (x, y) => Effect.succeed(x + y))), Stream.runCollect @@ -121,8 +121,8 @@ describe("Sink", () => { })) it.effect("foldWeighted", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 5, 2, 3), Stream.transduce(Sink.foldWeighted({ initial: Chunk.empty(), @@ -139,8 +139,8 @@ describe("Sink", () => { })) it.effect("foldWeightedDecompose - empty", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.empty, Stream.transduce(Sink.foldWeightedDecompose({ initial: 0, @@ -155,8 +155,8 @@ describe("Sink", () => { })) it.effect("foldWeightedDecompose - simple", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 5, 1), Stream.transduce(Sink.foldWeightedDecompose({ initial: Chunk.empty(), @@ -174,8 +174,8 @@ describe("Sink", () => { })) it.effect("foldWeightedEffect", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 5, 2, 3), Stream.transduce(Sink.foldWeightedEffect({ initial: Chunk.empty(), @@ -192,8 +192,8 @@ describe("Sink", () => { })) it.effect("foldWeightedDecomposeEffect - empty", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.empty, Stream.transduce(Sink.foldWeightedDecomposeEffect({ initial: 0, @@ -208,8 +208,8 @@ describe("Sink", () => { })) it.effect("foldWeightedDecomposeEffect - simple", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 5, 1), Stream.transduce(Sink.foldWeightedDecomposeEffect({ initial: Chunk.empty(), @@ -227,7 +227,7 @@ describe("Sink", () => { })) it.effect("foldSink - handles leftovers", () => - Effect.gen(function*($) { + Effect.gen(function*() { const sink = pipe( Sink.fail("boom"), Sink.foldSink({ @@ -239,7 +239,7 @@ describe("Sink", () => { onSuccess: (_) => absurd, string], number, never, string>>(_) }) ) - const result = yield* $( + const result = yield* pipe( Stream.make(1, 2, 3), Stream.run(sink) ) diff --git a/packages/effect/test/Sink/foreign.test.ts b/packages/effect/test/Sink/foreign.test.ts index 3466affb6c..2c4e7b11ab 100644 --- a/packages/effect/test/Sink/foreign.test.ts +++ b/packages/effect/test/Sink/foreign.test.ts @@ -2,6 +2,7 @@ import * as Context from "effect/Context" import * as Effect from "effect/Effect" import * as Either from "effect/Either" import * as Exit from "effect/Exit" +import { pipe } from "effect/Function" import * as Option from "effect/Option" import * as Random from "effect/Random" import type * as Sink from "effect/Sink" @@ -15,21 +16,21 @@ const runSink = (sink: Sink.Sink) => Stream. describe("Channel.Foreign", () => { it.effect("Tag", () => - Effect.gen(function*($) { + Effect.gen(function*() { const tag = Context.GenericTag("number") - const result = yield* $(tag, runSink, Effect.provideService(tag, 10)) + const result = yield* pipe(tag, runSink, Effect.provideService(tag, 10)) deepStrictEqual(result, 10) })) it.effect("Unify", () => - Effect.gen(function*($) { - const unifiedEffect = unify((yield* $(Random.nextInt)) > 1 ? Effect.succeed(0) : Effect.fail(1)) - const unifiedExit = unify((yield* $(Random.nextInt)) > 1 ? Exit.succeed(0) : Exit.fail(1)) - const unifiedEither = unify((yield* $(Random.nextInt)) > 1 ? Either.right(0) : Either.left(1)) - const unifiedOption = unify((yield* $(Random.nextInt)) > 1 ? Option.some(0) : Option.none()) - deepStrictEqual(yield* $(runSink(unifiedEffect)), 0) - deepStrictEqual(yield* $(runSink(unifiedExit)), 0) - deepStrictEqual(yield* $(runSink(unifiedEither)), 0) - deepStrictEqual(yield* $(runSink(unifiedOption)), 0) + Effect.gen(function*() { + const unifiedEffect = unify((yield* (Random.nextInt)) > 1 ? Effect.succeed(0) : Effect.fail(1)) + const unifiedExit = unify((yield* (Random.nextInt)) > 1 ? Exit.succeed(0) : Exit.fail(1)) + const unifiedEither = unify((yield* (Random.nextInt)) > 1 ? Either.right(0) : Either.left(1)) + const unifiedOption = unify((yield* (Random.nextInt)) > 1 ? Option.some(0) : Option.none()) + deepStrictEqual(yield* (runSink(unifiedEffect)), 0) + deepStrictEqual(yield* (runSink(unifiedExit)), 0) + deepStrictEqual(yield* (runSink(unifiedEither)), 0) + deepStrictEqual(yield* (runSink(unifiedOption)), 0) })) }) diff --git a/packages/effect/test/Sink/mapping.test.ts b/packages/effect/test/Sink/mapping.test.ts index f45d324f47..623a35d08a 100644 --- a/packages/effect/test/Sink/mapping.test.ts +++ b/packages/effect/test/Sink/mapping.test.ts @@ -10,8 +10,8 @@ import { describe } from "vitest" describe("Sink", () => { it.effect("as", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.range(1, 9), Stream.run(pipe(Sink.succeed(1), Sink.as("as"))) ) @@ -19,67 +19,67 @@ describe("Sink", () => { })) it.effect("mapInput - happy path", () => - Effect.gen(function*($) { + Effect.gen(function*() { const sink = pipe( Sink.collectAll(), Sink.mapInput((input: string) => Number.parseInt(input)) ) - const result = yield* $(Stream.make("1", "2", "3"), Stream.run(sink)) + const result = yield* pipe(Stream.make("1", "2", "3"), Stream.run(sink)) deepStrictEqual(Array.from(result), [1, 2, 3]) })) it.effect("mapInput - error", () => - Effect.gen(function*($) { + Effect.gen(function*() { const sink = pipe( Sink.fail("Ouch"), Sink.mapInput((input: string) => Number.parseInt(input)) ) - const result = yield* $(Stream.make("1", "2", "3"), Stream.run(sink), Effect.either) + const result = yield* pipe(Stream.make("1", "2", "3"), Stream.run(sink), Effect.either) assertLeft(result, "Ouch") })) it.effect("mapInputChunks - happy path", () => - Effect.gen(function*($) { + Effect.gen(function*() { const sink = pipe( Sink.collectAll(), Sink.mapInputChunks(Chunk.map((_) => Number.parseInt(_))) ) - const result = yield* $(Stream.make("1", "2", "3"), Stream.run(sink)) + const result = yield* pipe(Stream.make("1", "2", "3"), Stream.run(sink)) deepStrictEqual(Array.from(result), [1, 2, 3]) })) it.effect("mapInputChunks - error", () => - Effect.gen(function*($) { + Effect.gen(function*() { const sink = pipe( Sink.fail("Ouch"), Sink.mapInputChunks(Chunk.map(Number.parseInt)) ) - const result = yield* $(Stream.make("1", "2", "3"), Stream.run(sink), Effect.either) + const result = yield* pipe(Stream.make("1", "2", "3"), Stream.run(sink), Effect.either) assertLeft(result, "Ouch") })) it.effect("mapInputEffect - happy path", () => - Effect.gen(function*($) { + Effect.gen(function*() { const sink = pipe( Sink.collectAll(), Sink.mapInputEffect((s: string) => Effect.try(() => Number.parseInt(s))) ) - const result = yield* $(Stream.make("1", "2", "3"), Stream.run(sink)) + const result = yield* pipe(Stream.make("1", "2", "3"), Stream.run(sink)) deepStrictEqual(Array.from(result), [1, 2, 3]) })) it.effect("mapInputEffect - error", () => - Effect.gen(function*($) { + Effect.gen(function*() { const sink = pipe( Sink.fail("Ouch"), Sink.mapInputEffect((s: string) => Effect.try(() => Number.parseInt(s))) ) - const result = yield* $(Stream.make("1", "2", "3"), Stream.run(sink), Effect.either) + const result = yield* pipe(Stream.make("1", "2", "3"), Stream.run(sink), Effect.either) assertLeft(result, "Ouch") })) it.effect("mapInputEffect - error in transformation", () => - Effect.gen(function*($) { + Effect.gen(function*() { const sink = pipe( Sink.collectAll(), Sink.mapInputEffect((s: string) => @@ -92,12 +92,12 @@ describe("Sink", () => { }) ) ) - const result = yield* $(Stream.make("1", "a"), Stream.run(sink), Effect.flip) + const result = yield* pipe(Stream.make("1", "a"), Stream.run(sink), Effect.flip) deepStrictEqual(result.error, new Cause.RuntimeException("Cannot parse \"a\" to an integer")) })) it.effect("mapInputChunksEffect - happy path", () => - Effect.gen(function*($) { + Effect.gen(function*() { const sink = pipe( Sink.collectAll(), Sink.mapInputChunksEffect((chunk: Chunk.Chunk) => @@ -108,12 +108,12 @@ describe("Sink", () => { ) ) ) - const result = yield* $(Stream.make("1", "2", "3"), Stream.run(sink)) + const result = yield* pipe(Stream.make("1", "2", "3"), Stream.run(sink)) deepStrictEqual(Array.from(result), [1, 2, 3]) })) it.effect("mapInputChunksEffect - error", () => - Effect.gen(function*($) { + Effect.gen(function*() { const sink = pipe( Sink.fail("Ouch"), Sink.mapInputChunksEffect((chunk: Chunk.Chunk) => @@ -124,12 +124,12 @@ describe("Sink", () => { ) ) ) - const result = yield* $(Stream.make("1", "2", "3"), Stream.run(sink), Effect.either) + const result = yield* pipe(Stream.make("1", "2", "3"), Stream.run(sink), Effect.either) assertLeft(result, "Ouch") })) it.effect("mapInputChunksEffect - error in transformation", () => - Effect.gen(function*($) { + Effect.gen(function*() { const sink = pipe( Sink.collectAll(), Sink.mapInputChunksEffect((chunk: Chunk.Chunk) => @@ -148,13 +148,13 @@ describe("Sink", () => { ) ) ) - const result = yield* $(Stream.make("1", "a"), Stream.run(sink), Effect.flip) + const result = yield* pipe(Stream.make("1", "a"), Stream.run(sink), Effect.flip) deepStrictEqual(result.error, new Cause.RuntimeException("Cannot parse \"a\" to an integer")) })) it.effect("map", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.range(1, 9), Stream.run(pipe(Sink.succeed(1), Sink.map((n) => `${n}`))) ) @@ -162,8 +162,8 @@ describe("Sink", () => { })) it.effect("mapEffect - happy path", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.range(1, 9), Stream.run(pipe(Sink.succeed(1), Sink.mapEffect((n) => Effect.succeed(n + 1)))) ) @@ -171,8 +171,8 @@ describe("Sink", () => { })) it.effect("mapEffect - error", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.range(1, 9), Stream.run(pipe(Sink.succeed(1), Sink.mapEffect(() => Effect.fail("fail")))), Effect.flip @@ -181,8 +181,8 @@ describe("Sink", () => { })) it.effect("mapError", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.range(1, 9), Stream.run(pipe(Sink.fail("fail"), Sink.mapError((s) => s + "!"))), Effect.either diff --git a/packages/effect/test/Sink/racing.test.ts b/packages/effect/test/Sink/racing.test.ts index c7a12ebf91..3b659cfee8 100644 --- a/packages/effect/test/Sink/racing.test.ts +++ b/packages/effect/test/Sink/racing.test.ts @@ -51,23 +51,23 @@ const sinkRaceLaw = ( describe("Sink", () => { it.effect("raceBoth", () => - Effect.gen(function*($) { - const ints = yield* $(unfoldEffect( + Effect.gen(function*() { + const ints = yield* unfoldEffect( 0, (n) => Effect.map( Random.nextIntBetween(0, 10), (i) => n <= 20 ? Option.some([i, n + 1] as const) : Option.none() ) - )) - const success1 = yield* $(Random.nextBoolean) - const success2 = yield* $(Random.nextBoolean) + ) + const success1 = yield* (Random.nextBoolean) + const success2 = yield* (Random.nextBoolean) const chunk = pipe( Chunk.unsafeFromArray(ints), Chunk.appendAll(success1 ? Chunk.of(20) : Chunk.empty()), Chunk.appendAll(success2 ? Chunk.of(40) : Chunk.empty()) ) - const result = yield* $( + const result = yield* ( sinkRaceLaw( Stream.fromIterableEffect(Random.shuffle(chunk)), findSink(20), diff --git a/packages/effect/test/Sink/refining.test.ts b/packages/effect/test/Sink/refining.test.ts index 0fe7f1eb0d..0af3de4a91 100644 --- a/packages/effect/test/Sink/refining.test.ts +++ b/packages/effect/test/Sink/refining.test.ts @@ -11,7 +11,7 @@ import { describe } from "vitest" describe("Sink", () => { it.effect("refineOrDie", () => - Effect.gen(function*($) { + Effect.gen(function*() { const exception = new Cause.RuntimeException() const refinedTo = "refined" const sink = pipe( @@ -22,12 +22,12 @@ describe("Sink", () => { Option.none() ) ) - const result = yield* $(Stream.make(1, 2, 3), Stream.run(sink), Effect.exit) + const result = yield* pipe(Stream.make(1, 2, 3), Stream.run(sink), Effect.exit) deepStrictEqual(result, Exit.fail(refinedTo)) })) it.effect("refineOrDieWith - refines", () => - Effect.gen(function*($) { + Effect.gen(function*() { const exception = new Cause.RuntimeException() const refinedTo = "refined" const sink = pipe( @@ -37,12 +37,12 @@ describe("Sink", () => { Option.some(refinedTo) : Option.none(), (error) => error.message) ) - const result = yield* $(Stream.make(1, 2, 3), Stream.run(sink), Effect.exit) + const result = yield* pipe(Stream.make(1, 2, 3), Stream.run(sink), Effect.exit) deepStrictEqual(result, Exit.fail(refinedTo)) })) it.effect("refineOrDieWith - dies", () => - Effect.gen(function*($) { + Effect.gen(function*() { const exception = new Cause.RuntimeException() const refinedTo = "refined" const sink = pipe( @@ -52,7 +52,7 @@ describe("Sink", () => { Option.some(refinedTo) : Option.none(), (error) => error.message) ) - const result = yield* $(Stream.make(1, 2, 3), Stream.run(sink), Effect.exit) + const result = yield* pipe(Stream.make(1, 2, 3), Stream.run(sink), Effect.exit) deepStrictEqual(result, Exit.die("")) })) }) diff --git a/packages/effect/test/Sink/scoping.test.ts b/packages/effect/test/Sink/scoping.test.ts index 58d47d6674..d740dc9666 100644 --- a/packages/effect/test/Sink/scoping.test.ts +++ b/packages/effect/test/Sink/scoping.test.ts @@ -9,8 +9,8 @@ import { describe } from "vitest" describe("Sink", () => { it.effect("unwrapScoped - happy path", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(false)) + Effect.gen(function*() { + const ref = yield* (Ref.make(false)) const resource = Effect.acquireRelease( Effect.succeed(100), () => Ref.set(ref, true) @@ -30,23 +30,23 @@ describe("Sink", () => { ), Sink.unwrapScoped ) - const [result, state] = yield* $(Stream.make(1, 2, 3), Stream.run(sink)) - const finalState = yield* $(Ref.get(ref)) + const [result, state] = yield* pipe(Stream.make(1, 2, 3), Stream.run(sink)) + const finalState = yield* (Ref.get(ref)) strictEqual(result, 103) assertFalse(state) assertTrue(finalState) })) it.effect("unwrapScoped - error", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(false)) + Effect.gen(function*() { + const ref = yield* (Ref.make(false)) const resource = Effect.acquireRelease( Effect.succeed(100), () => Ref.set(ref, true) ) const sink = pipe(resource, Effect.as(Sink.succeed("ok")), Sink.unwrapScoped) - const result = yield* $(Stream.fail("fail"), Stream.run(sink)) - const finalState = yield* $(Ref.get(ref)) + const result = yield* pipe(Stream.fail("fail"), Stream.run(sink)) + const finalState = yield* (Ref.get(ref)) strictEqual(result, "ok") assertTrue(finalState) })) diff --git a/packages/effect/test/Sink/sequencing.test.ts b/packages/effect/test/Sink/sequencing.test.ts index b4afd88956..5f1d991f11 100644 --- a/packages/effect/test/Sink/sequencing.test.ts +++ b/packages/effect/test/Sink/sequencing.test.ts @@ -10,21 +10,21 @@ import { describe } from "vitest" describe("Sink", () => { it.effect("flatMap - empty input", () => - Effect.gen(function*($) { + Effect.gen(function*() { const sink = pipe(Sink.head(), Sink.flatMap(Sink.succeed)) - const result = yield* $(Stream.empty, Stream.run(sink)) + const result = yield* pipe(Stream.empty, Stream.run(sink)) assertNone(result) })) it.effect("flatMap - non-empty input", () => - Effect.gen(function*($) { + Effect.gen(function*() { const sink = pipe(Sink.head(), Sink.flatMap(Sink.succeed)) - const result = yield* $(Stream.make(1, 2, 3), Stream.run(sink)) + const result = yield* pipe(Stream.make(1, 2, 3), Stream.run(sink)) assertSome(result, 1) })) it.effect("flatMap - with leftovers", () => - Effect.gen(function*($) { + Effect.gen(function*() { const chunks = Chunk.make( Chunk.make(1, 2), Chunk.make(3, 4, 5), @@ -40,7 +40,7 @@ describe("Sink", () => { ) ) ) - const [option, count] = yield* $(Stream.fromChunks(...chunks), Stream.run(sink)) + const [option, count] = yield* pipe(Stream.fromChunks(...chunks), Stream.run(sink)) deepStrictEqual(option, Chunk.head(Chunk.flatten(chunks))) strictEqual( count + Option.match(option, { diff --git a/packages/effect/test/Sink/traversing.test.ts b/packages/effect/test/Sink/traversing.test.ts index f530085224..7d6aab6c02 100644 --- a/packages/effect/test/Sink/traversing.test.ts +++ b/packages/effect/test/Sink/traversing.test.ts @@ -11,7 +11,7 @@ import { describe } from "vitest" describe("Sink", () => { it.effect("findEffect - with head sink", () => - Effect.gen(function*($) { + Effect.gen(function*() { const sink = pipe( Sink.head(), Sink.findEffect(Option.match({ @@ -19,7 +19,7 @@ describe("Sink", () => { onSome: (n) => Effect.succeed(n >= 10) })) ) - const result = yield* $( + const result = yield* pipe( [1, 3, 7, 20], Effect.forEach((n) => pipe( @@ -34,12 +34,12 @@ describe("Sink", () => { })) it.effect("findEffect - take sink across multiple chunks", () => - Effect.gen(function*($) { + Effect.gen(function*() { const sink = pipe( Sink.take(4), Sink.findEffect((chunk) => Effect.succeed(pipe(chunk, Chunk.reduce(0, (x, y) => x + y)) > 10)) ) - const result = yield* $( + const result = yield* pipe( Stream.fromIterable(Chunk.range(1, 8)), Stream.rechunk(2), Stream.run(sink), @@ -49,12 +49,12 @@ describe("Sink", () => { })) it.effect("findEffect - empty stream terminates with none", () => - Effect.gen(function*($) { + Effect.gen(function*() { const sink = pipe( Sink.sum, Sink.findEffect((n) => Effect.succeed(n > 0)) ) - const result = yield* $( + const result = yield* pipe( Stream.fromIterable([]), Stream.run(sink) ) @@ -62,7 +62,7 @@ describe("Sink", () => { })) it.effect("findEffect - unsatisfied condition terminates with none", () => - Effect.gen(function*($) { + Effect.gen(function*() { const sink = pipe( Sink.head(), Sink.findEffect(Option.match({ @@ -70,7 +70,7 @@ describe("Sink", () => { onSome: (n) => Effect.succeed(n >= 3) })) ) - const result = yield* $( + const result = yield* pipe( Stream.fromIterable([1, 2]), Stream.run(sink) ) @@ -78,8 +78,8 @@ describe("Sink", () => { })) it.effect("forEachWhile - handles leftovers", () => - Effect.gen(function*($) { - const [result, value] = yield* $( + Effect.gen(function*() { + const [result, value] = yield* pipe( Stream.range(1, 4), Stream.run(pipe( Sink.forEachWhile((n: number) => Effect.succeed(n <= 3)), @@ -91,9 +91,9 @@ describe("Sink", () => { })) it.effect("splitWhere - should split a stream on a predicate and run each part into the sink", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = Stream.make(1, 2, 3, 4, 5, 6, 7, 8) - const result = yield* $( + const result = yield* pipe( stream, Stream.transduce(pipe(Sink.collectAll(), Sink.splitWhere((n) => n % 2 === 0))), Stream.runCollect @@ -105,9 +105,9 @@ describe("Sink", () => { })) it.effect("splitWhere - should split a stream on a predicate and run each part into the sink, in several chunks", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = Stream.fromChunks(Chunk.make(1, 2, 3, 4), Chunk.make(5, 6, 7, 8)) - const result = yield* $( + const result = yield* pipe( stream, Stream.transduce(pipe(Sink.collectAll(), Sink.splitWhere((n) => n % 2 === 0))), Stream.runCollect @@ -119,9 +119,9 @@ describe("Sink", () => { })) it.effect("splitWhere - should not yield an empty sink if split on the first element", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = Stream.make(1, 2, 3, 4, 5, 6, 7, 8) - const result = yield* $( + const result = yield* pipe( stream, Stream.transduce(pipe(Sink.collectAll(), Sink.splitWhere((n) => n % 2 !== 0))), Stream.runCollect diff --git a/packages/effect/test/Sink/zipping.test.ts b/packages/effect/test/Sink/zipping.test.ts index 2a3dc4e1d8..6e262b84eb 100644 --- a/packages/effect/test/Sink/zipping.test.ts +++ b/packages/effect/test/Sink/zipping.test.ts @@ -45,8 +45,8 @@ const zipParLaw = ( describe("Sink", () => { it.effect("zipParLeft", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 2, 3), Stream.run(pipe( Sink.head(), @@ -57,8 +57,8 @@ describe("Sink", () => { })) it.effect("zipParRight", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 2, 3), Stream.run(pipe( Sink.head(), @@ -69,20 +69,20 @@ describe("Sink", () => { })) it.effect("zipWithPar - coherence", () => - Effect.gen(function*($) { - const ints = yield* $(unfoldEffect(0, (n) => + Effect.gen(function*() { + const ints = yield* (unfoldEffect(0, (n) => pipe( Random.nextIntBetween(0, 10), Effect.map((i) => n < 20 ? Option.some([i, n + 1] as const) : Option.none()) ))) - const success1 = yield* $(Random.nextBoolean) - const success2 = yield* $(Random.nextBoolean) + const success1 = yield* (Random.nextBoolean) + const success2 = yield* (Random.nextBoolean) const chunk = pipe( Chunk.unsafeFromArray(ints), Chunk.appendAll(success1 ? Chunk.of(20) : Chunk.empty()), Chunk.appendAll(success2 ? Chunk.of(40) : Chunk.empty()) ) - const result = yield* $( + const result = yield* ( zipParLaw( Stream.fromIterableEffect(Random.shuffle(chunk)), findSink(20), diff --git a/packages/effect/test/Stream/aggregation.test.ts b/packages/effect/test/Stream/aggregation.test.ts index a3de13a781..a461fe4d28 100644 --- a/packages/effect/test/Stream/aggregation.test.ts +++ b/packages/effect/test/Stream/aggregation.test.ts @@ -23,8 +23,8 @@ import { describe } from "vitest" describe("Stream", () => { it.effect("aggregate - simple example", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 1, 1, 1), Stream.aggregate( Sink.foldUntil(Chunk.empty(), 3, Chunk.prepend) @@ -36,9 +36,9 @@ describe("Stream", () => { })) it.effect("aggregate - error propagation #1", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.RuntimeException("Boom") - const result = yield* $( + const result = yield* pipe( Stream.make(1, 1, 1, 1), Stream.aggregate(Sink.die(error)), Stream.runCollect, @@ -48,9 +48,9 @@ describe("Stream", () => { })) it.effect("aggregate - error propagation #2", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.RuntimeException("Boom") - const result = yield* $( + const result = yield* pipe( Stream.make(1, 1), Stream.aggregate( Sink.foldLeftEffect(Chunk.empty(), () => Effect.die(error)) @@ -62,9 +62,9 @@ describe("Stream", () => { })) it.effect("aggregate - interruption propagation #1", () => - Effect.gen(function*($) { - const latch = yield* $(Deferred.make()) - const ref = yield* $(Ref.make(false)) + Effect.gen(function*() { + const latch = yield* (Deferred.make()) + const ref = yield* (Ref.make(false)) const sink = Sink.foldEffect(Chunk.empty(), constTrue, (acc, curr) => { if (curr === 1) { return Effect.succeed(Chunk.prepend(acc, curr)) @@ -75,43 +75,43 @@ describe("Stream", () => { Effect.onInterrupt(() => Ref.set(ref, true)) ) }) - const fiber = yield* $( + const fiber = yield* pipe( Stream.make(1, 1, 2), Stream.aggregate(sink), Stream.runCollect, Effect.fork ) - yield* $(Deferred.await(latch)) - yield* $(Fiber.interrupt(fiber)) - const result = yield* $(Ref.get(ref)) + yield* (Deferred.await(latch)) + yield* (Fiber.interrupt(fiber)) + const result = yield* (Ref.get(ref)) assertTrue(result) })) it.effect("aggregate - interruption propagation #2", () => - Effect.gen(function*($) { - const latch = yield* $(Deferred.make()) - const ref = yield* $(Ref.make(false)) + Effect.gen(function*() { + const latch = yield* (Deferred.make()) + const ref = yield* (Ref.make(false)) const sink = Sink.fromEffect(pipe( Deferred.succeed(latch, void 0), Effect.zipRight(Effect.never), Effect.onInterrupt(() => Ref.set(ref, true)) )) - const fiber = yield* $( + const fiber = yield* pipe( Stream.make(1, 1, 2), Stream.aggregate(sink), Stream.runCollect, Effect.fork ) - yield* $(Deferred.await(latch)) - yield* $(Fiber.interrupt(fiber)) - const result = yield* $(Ref.get(ref)) + yield* (Deferred.await(latch)) + yield* (Fiber.interrupt(fiber)) + const result = yield* (Ref.get(ref)) assertTrue(result) })) it.effect("aggregate - leftover handling", () => - Effect.gen(function*($) { + Effect.gen(function*() { const input = [1, 2, 2, 3, 2, 3] - const result = yield* $( + const result = yield* pipe( Stream.fromIterable(input), Stream.aggregate(Sink.foldWeighted({ initial: Chunk.empty(), @@ -125,8 +125,8 @@ describe("Stream", () => { })) it.effect("aggregate - ZIO issue 6395", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 2, 3), Stream.aggregate(Sink.collectAllN(2)), Stream.runCollect @@ -139,9 +139,9 @@ describe("Stream", () => { // Explicitly uses live Clock it.effect("issue from zio-kafka", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.unbounded>()) - const fiber = yield* $( + Effect.gen(function*() { + const queue = yield* (Queue.unbounded>()) + const fiber = yield* pipe( Stream.fromQueue(queue), Stream.flattenTake, Stream.aggregate( @@ -150,14 +150,14 @@ describe("Stream", () => { Stream.runCollect, Effect.fork ) - yield* $(TestServices.provideLive(Effect.sleep(Duration.seconds(1)))) - yield* $(Queue.offer(queue, Take.chunk(Chunk.make(1, 2, 3, 4, 5)))) - yield* $(TestServices.provideLive(Effect.sleep(Duration.seconds(1)))) - yield* $(Queue.offer(queue, Take.chunk(Chunk.make(6, 7, 8, 9, 10)))) - yield* $(TestServices.provideLive(Effect.sleep(Duration.seconds(1)))) - yield* $(Queue.offer(queue, Take.chunk(Chunk.make(11, 12, 13, 14, 15)))) - yield* $(Queue.offer(queue, Take.end)) - const result = yield* $( + yield* (TestServices.provideLive(Effect.sleep(Duration.seconds(1)))) + yield* (Queue.offer(queue, Take.chunk(Chunk.make(1, 2, 3, 4, 5)))) + yield* (TestServices.provideLive(Effect.sleep(Duration.seconds(1)))) + yield* (Queue.offer(queue, Take.chunk(Chunk.make(6, 7, 8, 9, 10)))) + yield* (TestServices.provideLive(Effect.sleep(Duration.seconds(1)))) + yield* (Queue.offer(queue, Take.chunk(Chunk.make(11, 12, 13, 14, 15)))) + yield* (Queue.offer(queue, Take.end)) + const result = yield* pipe( Fiber.join(fiber), Effect.map(Chunk.filter(Chunk.isNonEmpty)) ) @@ -168,13 +168,13 @@ describe("Stream", () => { })) it.effect("aggregateWithin - child fiber handling", () => - Effect.gen(function*($) { - const coordination = yield* $(chunkCoordination([ + Effect.gen(function*() { + const coordination = yield* (chunkCoordination([ Chunk.of(1), Chunk.of(2), Chunk.of(3) ])) - const fiber = yield* $( + const fiber = yield* pipe( Stream.fromQueue(coordination.queue), Stream.map(Take.make), Stream.tap(() => coordination.proceed), @@ -188,19 +188,19 @@ describe("Stream", () => { Stream.runCollect, Effect.fork ) - yield* $( + yield* pipe( coordination.offer, Effect.zipRight(TestClock.adjust(Duration.millis(100))), Effect.zipRight(coordination.awaitNext), Effect.repeatN(3) ) - const results = yield* $(Fiber.join(fiber), Effect.map(Chunk.compact)) + const results = yield* pipe(Fiber.join(fiber), Effect.map(Chunk.compact)) deepStrictEqual(Array.from(results), [2, 3]) })) it.effect("aggregateWithinEither - simple example", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 1, 1, 1, 2, 2), Stream.aggregateWithinEither( pipe( @@ -227,9 +227,9 @@ describe("Stream", () => { })) it.effect("aggregateWithinEither - fails fast", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.unbounded()) - yield* $( + Effect.gen(function*() { + const queue = yield* (Queue.unbounded()) + yield* pipe( Stream.range(1, 9), Stream.tap((n) => pipe( @@ -245,15 +245,15 @@ describe("Stream", () => { Stream.runDrain, Effect.catchAll(() => Effect.succeed(void 0)) ) - const result = yield* $(Queue.takeAll(queue)) - yield* $(Queue.shutdown(queue)) + const result = yield* (Queue.takeAll(queue)) + yield* (Queue.shutdown(queue)) deepStrictEqual(Array.from(result), [1, 2, 3, 4, 5]) })) it.effect("aggregateWithinEither - error propagation #1", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.RuntimeException("Boom") - const result = yield* $( + const result = yield* pipe( Stream.make(1, 1, 1, 1), Stream.aggregateWithinEither( Sink.die(error), @@ -266,9 +266,9 @@ describe("Stream", () => { })) it.effect("aggregateWithinEither - error propagation #2", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.RuntimeException("Boom") - const result = yield* $( + const result = yield* pipe( Stream.make(1, 1), Stream.aggregateWithinEither( Sink.foldEffect(Chunk.empty(), constTrue, () => Effect.die(error)), @@ -281,9 +281,9 @@ describe("Stream", () => { })) it.effect("aggregateWithinEither - interruption propagation #1", () => - Effect.gen(function*($) { - const latch = yield* $(Deferred.make()) - const ref = yield* $(Ref.make(false)) + Effect.gen(function*() { + const latch = yield* (Deferred.make()) + const ref = yield* (Ref.make(false)) const sink = Sink.foldEffect(Chunk.empty(), constTrue, (acc, curr) => { if (curr === 1) { return Effect.succeed(Chunk.prepend(acc, curr)) @@ -294,43 +294,43 @@ describe("Stream", () => { Effect.onInterrupt(() => Ref.set(ref, true)) ) }) - const fiber = yield* $( + const fiber = yield* pipe( Stream.make(1, 1, 2), Stream.aggregateWithinEither(sink, Schedule.spaced(Duration.minutes(30))), Stream.runCollect, Effect.fork ) - yield* $(Deferred.await(latch)) - yield* $(Fiber.interrupt(fiber)) - const result = yield* $(Ref.get(ref)) + yield* (Deferred.await(latch)) + yield* (Fiber.interrupt(fiber)) + const result = yield* (Ref.get(ref)) assertTrue(result) })) it.effect("aggregateWithinEither - interruption propagation #2", () => - Effect.gen(function*($) { - const latch = yield* $(Deferred.make()) - const ref = yield* $(Ref.make(false)) + Effect.gen(function*() { + const latch = yield* (Deferred.make()) + const ref = yield* (Ref.make(false)) const sink = Sink.fromEffect(pipe( Deferred.succeed(latch, void 0), Effect.zipRight(Effect.never), Effect.onInterrupt(() => Ref.set(ref, true)) )) - const fiber = yield* $( + const fiber = yield* pipe( Stream.make(1, 1, 2), Stream.aggregateWithinEither(sink, Schedule.spaced(Duration.minutes(30))), Stream.runCollect, Effect.fork ) - yield* $(Deferred.await(latch)) - yield* $(Fiber.interrupt(fiber)) - const result = yield* $(Ref.get(ref)) + yield* (Deferred.await(latch)) + yield* (Fiber.interrupt(fiber)) + const result = yield* (Ref.get(ref)) assertTrue(result) })) it.effect("aggregateWithinEither - leftover handling", () => - Effect.gen(function*($) { + Effect.gen(function*() { const input = [1, 2, 2, 3, 2, 3] - const fiber = yield* $( + const fiber = yield* pipe( Stream.fromIterable(input), Stream.aggregateWithinEither( Sink.foldWeighted({ @@ -350,8 +350,8 @@ describe("Stream", () => { Effect.map(Chunk.flatten), Effect.fork ) - yield* $(TestClock.adjust(Duration.minutes(31))) - const result = yield* $(Fiber.join(fiber)) + yield* (TestClock.adjust(Duration.minutes(31))) + const result = yield* (Fiber.join(fiber)) deepStrictEqual(Array.from(result), input) })) }) diff --git a/packages/effect/test/Stream/async.test.ts b/packages/effect/test/Stream/async.test.ts index 1e32039ea1..4a729a68f0 100644 --- a/packages/effect/test/Stream/async.test.ts +++ b/packages/effect/test/Stream/async.test.ts @@ -15,9 +15,9 @@ import { describe } from "vitest" describe("Stream", () => { it.effect("async", () => - Effect.gen(function*($) { + Effect.gen(function*() { const array = [1, 2, 3, 4, 5] - const result = yield* $( + const result = yield* pipe( Stream.async((emit) => { array.forEach((n) => { emit(Effect.succeed(Chunk.of(n))) @@ -30,10 +30,10 @@ describe("Stream", () => { })) it.effect("async - with cleanup", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(false)) - const latch = yield* $(Deferred.make()) - const fiber = yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(false)) + const latch = yield* (Deferred.make()) + const fiber = yield* pipe( Stream.async((emit) => { emit.chunk(Chunk.of(void 0)) return Ref.set(ref, true) @@ -42,15 +42,15 @@ describe("Stream", () => { Stream.runDrain, Effect.fork ) - yield* $(Deferred.await(latch)) - yield* $(Fiber.interrupt(fiber)) - const result = yield* $(Ref.get(ref)) + yield* (Deferred.await(latch)) + yield* (Fiber.interrupt(fiber)) + const result = yield* (Ref.get(ref)) assertTrue(result) })) it.effect("async - signals the end of the stream", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.async((emit) => { emit.end() return Effect.void @@ -61,9 +61,9 @@ describe("Stream", () => { })) it.effect("async - handles errors", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.RuntimeException("boom") - const result = yield* $( + const result = yield* pipe( Stream.async((emit) => { emit.fromEffect(Effect.fail(error)) return Effect.void @@ -75,9 +75,9 @@ describe("Stream", () => { })) it.effect("async - handles defects", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.RuntimeException("boom") - const result = yield* $( + const result = yield* pipe( Stream.async(() => { throw error }), @@ -88,9 +88,9 @@ describe("Stream", () => { })) it.effect("async - backpressure", () => - Effect.gen(function*($) { - const refCount = yield* $(Ref.make(0)) - const refDone = yield* $(Ref.make(false)) + Effect.gen(function*() { + const refCount = yield* (Ref.make(0)) + const refDone = yield* (Ref.make(false)) const stream = Stream.async>((emit) => { Promise.all( // 1st consumed by sink, 2-6 – in queue, 7th – back pressured @@ -113,18 +113,18 @@ describe("Stream", () => { return Effect.void }, 5) const sink = pipe(Sink.take(1), Sink.zipRight(Sink.never)) - const fiber = yield* $(stream, Stream.run(sink), Effect.fork) - yield* $(Ref.get(refCount), Effect.repeat({ while: (n) => n !== 7 })) - const result = yield* $(Ref.get(refDone)) - yield* $(Fiber.interrupt(fiber), Effect.exit) + const fiber = yield* pipe(stream, Stream.run(sink), Effect.fork) + yield* pipe(Ref.get(refCount), Effect.repeat({ while: (n) => n !== 7 })) + const result = yield* (Ref.get(refDone)) + yield* pipe(Fiber.interrupt(fiber), Effect.exit) assertFalse(result) })) it.effect("asyncEffect - simple example", () => - Effect.gen(function*($) { + Effect.gen(function*() { const array = [1, 2, 3, 4, 5] - const latch = yield* $(Deferred.make()) - const fiber = yield* $( + const latch = yield* (Deferred.make()) + const fiber = yield* pipe( Stream.asyncEffect((emit) => { array.forEach((n) => { emit(Effect.succeed(Chunk.of(n))) @@ -138,15 +138,15 @@ describe("Stream", () => { Stream.runCollect, Effect.fork ) - yield* $(Deferred.await(latch)) - const result = yield* $(Fiber.join(fiber)) + yield* (Deferred.await(latch)) + const result = yield* (Fiber.join(fiber)) deepStrictEqual(Array.from(result), array) })) it.effect("asyncEffect - handles errors", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.RuntimeException("boom") - const result = yield* $( + const result = yield* pipe( Stream.asyncEffect((emit) => { emit.fromEffect(Effect.fail(error)) return Effect.void @@ -158,9 +158,9 @@ describe("Stream", () => { })) it.effect("asyncEffect - handles defects", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.RuntimeException("boom") - const result = yield* $( + const result = yield* pipe( Stream.asyncEffect(() => { throw error }), @@ -171,8 +171,8 @@ describe("Stream", () => { })) it.effect("asyncEffect - signals the end of the stream", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.asyncEffect((emit) => { emit(Effect.fail(Option.none())) return Effect.void @@ -183,9 +183,9 @@ describe("Stream", () => { })) it.effect("asyncEffect - backpressure", () => - Effect.gen(function*($) { - const refCount = yield* $(Ref.make(0)) - const refDone = yield* $(Ref.make(false)) + Effect.gen(function*() { + const refCount = yield* (Ref.make(0)) + const refDone = yield* (Ref.make(false)) const stream = Stream.asyncEffect>((emit) => { Promise.all( // 1st consumed by sink, 2-6 – in queue, 7th – back pressured @@ -208,16 +208,16 @@ describe("Stream", () => { return Effect.void }, 5) const sink = pipe(Sink.take(1), Sink.zipRight(Sink.never)) - const fiber = yield* $(stream, Stream.run(sink), Effect.fork) - yield* $(Ref.get(refCount), Effect.repeat({ while: (n) => n !== 7 })) - const result = yield* $(Ref.get(refDone)) - yield* $(Fiber.interrupt(fiber)) + const fiber = yield* pipe(stream, Stream.run(sink), Effect.fork) + yield* pipe(Ref.get(refCount), Effect.repeat({ while: (n) => n !== 7 })) + const result = yield* (Ref.get(refDone)) + yield* (Fiber.interrupt(fiber)) assertFalse(result) })) // it.effect("asyncOption - signals the end of the stream", () => - // Effect.gen(function*($) { - // const result = yield* $( + // Effect.gen(function*() { + // const result = yield* ( // Stream.asyncOption((emit) => { // emit(Effect.fail(Option.none())) // return Option.none() @@ -228,9 +228,9 @@ describe("Stream", () => { // })) // it.effect("asyncOption - some", () => - // Effect.gen(function*($) { + // Effect.gen(function*() { // const chunk = Chunk.range(1, 5) - // const result = yield* $( + // const result = yield* ( // Stream.asyncOption(() => Option.some(Stream.fromChunk(chunk))), // Stream.runCollect // ) @@ -238,9 +238,9 @@ describe("Stream", () => { // })) // it.effect("asyncOption - none", () => - // Effect.gen(function*($) { + // Effect.gen(function*() { // const array = [1, 2, 3, 4, 5] - // const result = yield* $( + // const result = yield* ( // Stream.asyncOption((emit) => { // array.forEach((n) => { // emit(Effect.succeed(Chunk.of(n))) @@ -254,9 +254,9 @@ describe("Stream", () => { // })) // it.effect("asyncOption - handles errors", () => - // Effect.gen(function*($) { + // Effect.gen(function*() { // const error = new Cause.RuntimeException("boom") - // const result = yield* $( + // const result = yield* ( // Stream.asyncOption((emit) => { // emit.fromEffect(Effect.fail(error)) // return Option.none() @@ -268,9 +268,9 @@ describe("Stream", () => { // })) // it.effect("asyncOption - handles defects", () => - // Effect.gen(function*($) { + // Effect.gen(function*() { // const error = new Cause.RuntimeException("boom") - // const result = yield* $( + // const result = yield* ( // Stream.asyncOption(() => { // throw error // }), @@ -281,9 +281,9 @@ describe("Stream", () => { // })) // it.effect("asyncOption - backpressure", () => - // Effect.gen(function*($) { - // const refCount = yield* $(Ref.make(0)) - // const refDone = yield* $(Ref.make(false)) + // Effect.gen(function*() { + // const refCount = yield* (Ref.make(0)) + // const refDone = yield* (Ref.make(false)) // const stream = Stream.asyncOption>((emit) => { // Promise.all( // // 1st consumed by sink, 2-6 – in queue, 7th – back pressured @@ -306,18 +306,18 @@ describe("Stream", () => { // return Option.none() // }, 5) // const sink = pipe(Sink.take(1), Sink.zipRight(Sink.never)) - // const fiber = yield* $(stream, Stream.run(sink), Effect.fork) - // yield* $(Ref.get(refCount), Effect.repeat({ while: (n) => n !== 7 })) - // const result = yield* $(Ref.get(refDone)) - // yield* $(Fiber.interrupt(fiber), Effect.exit) + // const fiber = yield* (stream, Stream.run(sink), Effect.fork) + // yield* (Ref.get(refCount), Effect.repeat({ while: (n) => n !== 7 })) + // const result = yield* (Ref.get(refDone)) + // yield* (Fiber.interrupt(fiber), Effect.exit) // assertFalse(result) // })) it.effect("asyncScoped", () => - Effect.gen(function*($) { + Effect.gen(function*() { const array = [1, 2, 3, 4, 5] - const latch = yield* $(Deferred.make()) - const fiber = yield* $( + const latch = yield* (Deferred.make()) + const fiber = yield* pipe( Stream.asyncScoped((cb) => { array.forEach((n) => { cb(Effect.succeed(Chunk.of(n))) @@ -331,14 +331,14 @@ describe("Stream", () => { Stream.run(Sink.collectAll()), Effect.fork ) - yield* $(Deferred.await(latch)) - const result = yield* $(Fiber.join(fiber)) + yield* (Deferred.await(latch)) + const result = yield* (Fiber.join(fiber)) deepStrictEqual(Array.from(result), array) })) it.effect("asyncScoped - signals the end of the stream", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.asyncScoped((cb) => { cb(Effect.fail(Option.none())) return Effect.void @@ -349,9 +349,9 @@ describe("Stream", () => { })) it.effect("asyncScoped - handles errors", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.RuntimeException("boom") - const result = yield* $( + const result = yield* pipe( Stream.asyncScoped((cb) => { cb(Effect.fail(Option.some(error))) return Effect.void @@ -363,9 +363,9 @@ describe("Stream", () => { })) it.effect("asyncScoped - handles defects", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.RuntimeException("boom") - const result = yield* $( + const result = yield* pipe( Stream.asyncScoped(() => { throw error }), @@ -376,9 +376,9 @@ describe("Stream", () => { })) it.effect("asyncScoped - backpressure", () => - Effect.gen(function*($) { - const refCount = yield* $(Ref.make(0)) - const refDone = yield* $(Ref.make(false)) + Effect.gen(function*() { + const refCount = yield* (Ref.make(0)) + const refDone = yield* (Ref.make(false)) const stream = Stream.asyncScoped>((cb) => { Promise.all( // 1st consumed by sink, 2-6 – in queue, 7th – back pressured @@ -401,10 +401,10 @@ describe("Stream", () => { return Effect.void }, 5) const sink = pipe(Sink.take(1), Sink.zipRight(Sink.never)) - const fiber = yield* $(stream, Stream.run(sink), Effect.fork) - yield* $(Ref.get(refCount), Effect.repeat({ while: (n) => n !== 7 })) - const result = yield* $(Ref.get(refDone)) - yield* $(Fiber.interrupt(fiber), Effect.exit) + const fiber = yield* pipe(stream, Stream.run(sink), Effect.fork) + yield* pipe(Ref.get(refCount), Effect.repeat({ while: (n) => n !== 7 })) + const result = yield* (Ref.get(refDone)) + yield* pipe(Fiber.interrupt(fiber), Effect.exit) assertFalse(result) })) diff --git a/packages/effect/test/Stream/broadcasting.test.ts b/packages/effect/test/Stream/broadcasting.test.ts index 4867b2b9ed..cf3b0df09f 100644 --- a/packages/effect/test/Stream/broadcasting.test.ts +++ b/packages/effect/test/Stream/broadcasting.test.ts @@ -14,8 +14,8 @@ import { describe } from "vitest" describe("Stream", () => { it.effect("broadcast - values", () => - Effect.gen(function*($) { - const { result1, result2 } = yield* $( + Effect.gen(function*() { + const { result1, result2 } = yield* pipe( Stream.range(0, 4), Stream.broadcast(2, 12), Effect.flatMap((streams) => @@ -32,8 +32,8 @@ describe("Stream", () => { })) it.effect("broadcast - errors", () => - Effect.gen(function*($) { - const { result1, result2 } = yield* $( + Effect.gen(function*() { + const { result1, result2 } = yield* pipe( Stream.make(0), Stream.concat(Stream.fail("boom")), Stream.broadcast(2, 12), @@ -50,16 +50,16 @@ describe("Stream", () => { })) it.effect("broadcast - backpressure", () => - Effect.gen(function*($) { - const { result1, result2 } = yield* $( + Effect.gen(function*() { + const { result1, result2 } = yield* pipe( Stream.range(0, 4), Stream.flatMap(Stream.succeed), Stream.broadcast(2, 2), Effect.flatMap((streams) => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Chunk.empty())) - const latch = yield* $(Deferred.make()) - const fiber = yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(Chunk.empty())) + const latch = yield* (Deferred.make()) + const fiber = yield* pipe( streams[0], Stream.tap((n) => pipe( @@ -73,11 +73,11 @@ describe("Stream", () => { Stream.runDrain, Effect.fork ) - yield* $(Deferred.await(latch)) - const result1 = yield* $(Ref.get(ref)) - yield* $(Stream.runDrain(streams[1])) - yield* $(Fiber.await(fiber)) - const result2 = yield* $(Ref.get(ref)) + yield* (Deferred.await(latch)) + const result1 = yield* (Ref.get(ref)) + yield* (Stream.runDrain(streams[1])) + yield* (Fiber.await(fiber)) + const result2 = yield* (Ref.get(ref)) return { result1, result2 } }) ), @@ -88,8 +88,8 @@ describe("Stream", () => { })) it.effect("broadcast - unsubscribe", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.range(0, 4), Stream.broadcast(2, 2), Effect.flatMap((streams) => diff --git a/packages/effect/test/Stream/buffering.test.ts b/packages/effect/test/Stream/buffering.test.ts index f030a19431..0524c8a872 100644 --- a/packages/effect/test/Stream/buffering.test.ts +++ b/packages/effect/test/Stream/buffering.test.ts @@ -12,13 +12,13 @@ import { describe } from "vitest" describe("Stream", () => { it.effect("buffer - maintains elements and ordering", () => - Effect.gen(function*($) { + Effect.gen(function*() { const chunks = Chunk.make( Chunk.range(0, 3), Chunk.range(2, 5), Chunk.range(3, 7) ) - const result = yield* $( + const result = yield* pipe( Stream.fromChunks(...chunks), Stream.buffer({ capacity: 2 }), Stream.runCollect @@ -27,9 +27,9 @@ describe("Stream", () => { })) it.effect("buffer - buffers a stream with a failure", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.RuntimeException("boom") - const result = yield* $( + const result = yield* pipe( Stream.range(0, 9), Stream.concat(Stream.fail(error)), Stream.buffer({ capacity: 2 }), @@ -40,9 +40,9 @@ describe("Stream", () => { })) it.effect("buffer - fast producer progresses independently", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Chunk.empty())) - const latch = yield* $(Deferred.make()) + Effect.gen(function*() { + const ref = yield* (Ref.make(Chunk.empty())) + const latch = yield* (Deferred.make()) const stream = pipe( Stream.range(1, 4), Stream.tap((n) => @@ -56,21 +56,21 @@ describe("Stream", () => { ), Stream.buffer({ capacity: 2 }) ) - const result1 = yield* $(stream, Stream.take(2), Stream.runCollect) - yield* $(Deferred.await(latch)) - const result2 = yield* $(Ref.get(ref)) + const result1 = yield* pipe(stream, Stream.take(2), Stream.runCollect) + yield* (Deferred.await(latch)) + const result2 = yield* (Ref.get(ref)) deepStrictEqual(Array.from(result1), [1, 2]) deepStrictEqual(Array.from(result2), [1, 2, 3, 4]) })) it.effect("bufferChunks - maintains elements and ordering", () => - Effect.gen(function*($) { + Effect.gen(function*() { const chunks = Chunk.make( Chunk.range(0, 3), Chunk.range(2, 5), Chunk.range(3, 7) ) - const result = yield* $( + const result = yield* pipe( Stream.fromChunks(...chunks), Stream.bufferChunks({ capacity: 2 }), Stream.runCollect @@ -79,9 +79,9 @@ describe("Stream", () => { })) it.effect("bufferChunks - buffers a stream with a failure", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.RuntimeException("boom") - const result = yield* $( + const result = yield* pipe( Stream.range(0, 9), Stream.concat(Stream.fail(error)), Stream.bufferChunks({ capacity: 2 }), @@ -92,9 +92,9 @@ describe("Stream", () => { })) it.effect("bufferChunks - fast producer progresses independently", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Chunk.empty())) - const latch = yield* $(Deferred.make()) + Effect.gen(function*() { + const ref = yield* (Ref.make(Chunk.empty())) + const latch = yield* (Deferred.make()) const stream = pipe( Stream.range(1, 4), Stream.tap((n) => @@ -108,17 +108,17 @@ describe("Stream", () => { ), Stream.bufferChunks({ capacity: 2 }) ) - const result1 = yield* $(stream, Stream.take(2), Stream.runCollect) - yield* $(Deferred.await(latch)) - const result2 = yield* $(Ref.get(ref)) + const result1 = yield* pipe(stream, Stream.take(2), Stream.runCollect) + yield* (Deferred.await(latch)) + const result2 = yield* (Ref.get(ref)) deepStrictEqual(Array.from(result1), [1, 2]) deepStrictEqual(Array.from(result2), [1, 2, 3, 4]) })) it.effect("bufferChunksDropping - buffers a stream with a failure", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.RuntimeException("boom") - const result = yield* $( + const result = yield* pipe( Stream.range(1, 1_000), Stream.concat(Stream.fail(error)), Stream.concat(Stream.range(1_001, 2_000)), @@ -130,12 +130,12 @@ describe("Stream", () => { })) it.effect("bufferChunksDropping - fast producer progress independently", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Chunk.empty())) - const latch1 = yield* $(Deferred.make()) - const latch2 = yield* $(Deferred.make()) - const latch3 = yield* $(Deferred.make()) - const latch4 = yield* $(Deferred.make()) + Effect.gen(function*() { + const ref = yield* (Ref.make(Chunk.empty())) + const latch1 = yield* (Deferred.make()) + const latch2 = yield* (Deferred.make()) + const latch3 = yield* (Deferred.make()) + const latch4 = yield* (Deferred.make()) const stream1 = pipe( Stream.make(0), Stream.concat( @@ -168,14 +168,14 @@ describe("Stream", () => { Stream.concat(stream3), Stream.bufferChunks({ capacity: 8, strategy: "dropping" }) ) - const { result1, result2, result3 } = yield* $( + const { result1, result2, result3 } = yield* pipe( Stream.toPull(stream), Effect.flatMap((pull) => - Effect.gen(function*($) { - const result1 = yield* $(pull) - yield* $(Deferred.succeed(latch1, void 0)) - yield* $(Deferred.await(latch2)) - yield* $( + Effect.gen(function*() { + const result1 = yield* pull + yield* (Deferred.succeed(latch1, void 0)) + yield* (Deferred.await(latch2)) + yield* pipe( pull, Effect.flatMap((chunk) => pipe( @@ -184,15 +184,15 @@ describe("Stream", () => { ), Effect.repeatN(7) ) - const result2 = yield* $(Ref.get(ref)) - yield* $(Deferred.succeed(latch3, void 0)) - yield* $(Deferred.await(latch4)) - yield* $( + const result2 = yield* (Ref.get(ref)) + yield* (Deferred.succeed(latch3, void 0)) + yield* (Deferred.await(latch4)) + yield* pipe( pull, Effect.flatMap((chunk) => Ref.update(ref, Chunk.appendAll(chunk))), Effect.repeatN(7) ) - const result3 = yield* $(Ref.get(ref)) + const result3 = yield* (Ref.get(ref)) return { result1, result2, result3 } }) ), @@ -207,9 +207,9 @@ describe("Stream", () => { })) it.effect("bufferChunksSliding - buffers a stream with a failure", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.RuntimeException("boom") - const result = yield* $( + const result = yield* pipe( Stream.range(1, 1_000), Stream.concat(Stream.fail(error)), Stream.concat(Stream.range(1_001, 2_000)), @@ -221,13 +221,13 @@ describe("Stream", () => { })) it.effect("bufferChunksSliding - fast producer progress independently", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Chunk.empty())) - const latch1 = yield* $(Deferred.make()) - const latch2 = yield* $(Deferred.make()) - const latch3 = yield* $(Deferred.make()) - const latch4 = yield* $(Deferred.make()) - const latch5 = yield* $(Deferred.make()) + Effect.gen(function*() { + const ref = yield* (Ref.make(Chunk.empty())) + const latch1 = yield* (Deferred.make()) + const latch2 = yield* (Deferred.make()) + const latch3 = yield* (Deferred.make()) + const latch4 = yield* (Deferred.make()) + const latch5 = yield* (Deferred.make()) const stream1 = pipe( Stream.make(0), Stream.concat( @@ -263,27 +263,27 @@ describe("Stream", () => { Stream.concat(stream3), Stream.bufferChunks({ capacity: 8, strategy: "sliding" }) ) - const { result1, result2, result3 } = yield* $( + const { result1, result2, result3 } = yield* pipe( Stream.toPull(stream), Effect.flatMap((pull) => - Effect.gen(function*($) { - const result1 = yield* $(pull) - yield* $(Deferred.succeed(latch1, void 0)) - yield* $(Deferred.await(latch2)) - yield* $( + Effect.gen(function*() { + const result1 = yield* pull + yield* (Deferred.succeed(latch1, void 0)) + yield* (Deferred.await(latch2)) + yield* pipe( pull, Effect.flatMap((chunk) => Ref.update(ref, Chunk.appendAll(chunk))), Effect.repeatN(7) ) - const result2 = yield* $(Ref.get(ref)) - yield* $(Deferred.succeed(latch3, void 0)) - yield* $(Deferred.await(latch4)) - yield* $( + const result2 = yield* (Ref.get(ref)) + yield* (Deferred.succeed(latch3, void 0)) + yield* (Deferred.await(latch4)) + yield* pipe( pull, Effect.flatMap((chunk) => Ref.update(ref, Chunk.appendAll(chunk))), Effect.repeatN(7) ) - const result3 = yield* $(Ref.get(ref)) + const result3 = yield* (Ref.get(ref)) return { result1, result2, result3 } }) ), @@ -298,9 +298,9 @@ describe("Stream", () => { })) it.effect("bufferDropping - buffers a stream with a failure", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.RuntimeException("boom") - const result = yield* $( + const result = yield* pipe( Stream.range(1, 1_000), Stream.concat(Stream.fail(error)), Stream.concat(Stream.range(1_000, 2_000)), @@ -312,12 +312,12 @@ describe("Stream", () => { })) it.effect("bufferDropping - fast producer progress independently", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Chunk.empty())) - const latch1 = yield* $(Deferred.make()) - const latch2 = yield* $(Deferred.make()) - const latch3 = yield* $(Deferred.make()) - const latch4 = yield* $(Deferred.make()) + Effect.gen(function*() { + const ref = yield* (Ref.make(Chunk.empty())) + const latch1 = yield* (Deferred.make()) + const latch2 = yield* (Deferred.make()) + const latch3 = yield* (Deferred.make()) + const latch4 = yield* (Deferred.make()) const stream1 = pipe( Stream.make(0), Stream.concat( @@ -350,14 +350,14 @@ describe("Stream", () => { Stream.concat(stream3), Stream.buffer({ capacity: 8, strategy: "dropping" }) ) - const { result1, result2, result3 } = yield* $( + const { result1, result2, result3 } = yield* pipe( Stream.toPull(stream), Effect.flatMap((pull) => - Effect.gen(function*($) { - const result1 = yield* $(pull) - yield* $(Deferred.succeed(latch1, void 0)) - yield* $(Deferred.await(latch2)) - yield* $( + Effect.gen(function*() { + const result1 = yield* pull + yield* (Deferred.succeed(latch1, void 0)) + yield* (Deferred.await(latch2)) + yield* pipe( pull, Effect.flatMap((chunk) => pipe( @@ -366,15 +366,15 @@ describe("Stream", () => { ), Effect.repeatN(7) ) - const result2 = yield* $(Ref.get(ref)) - yield* $(Deferred.succeed(latch3, void 0)) - yield* $(Deferred.await(latch4)) - yield* $( + const result2 = yield* (Ref.get(ref)) + yield* (Deferred.succeed(latch3, void 0)) + yield* (Deferred.await(latch4)) + yield* pipe( pull, Effect.flatMap((chunk) => Ref.update(ref, Chunk.appendAll(chunk))), Effect.repeatN(7) ) - const result3 = yield* $(Ref.get(ref)) + const result3 = yield* (Ref.get(ref)) return { result1, result2, result3 } }) ), @@ -389,9 +389,9 @@ describe("Stream", () => { })) it.effect("bufferSliding - buffers a stream with a failure", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.RuntimeException("boom") - const result = yield* $( + const result = yield* pipe( Stream.range(1, 1_000), Stream.concat(Stream.fail(error)), Stream.concat(Stream.range(1_001, 2_000)), @@ -403,12 +403,12 @@ describe("Stream", () => { })) it.effect("bufferSliding - fast producer progress independently", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Chunk.empty())) - const latch1 = yield* $(Deferred.make()) - const latch2 = yield* $(Deferred.make()) - const latch3 = yield* $(Deferred.make()) - const latch4 = yield* $(Deferred.make()) + Effect.gen(function*() { + const ref = yield* (Ref.make(Chunk.empty())) + const latch1 = yield* (Deferred.make()) + const latch2 = yield* (Deferred.make()) + const latch3 = yield* (Deferred.make()) + const latch4 = yield* (Deferred.make()) const stream1 = pipe( Stream.make(0), Stream.concat( @@ -441,27 +441,27 @@ describe("Stream", () => { Stream.concat(stream3), Stream.buffer({ capacity: 8, strategy: "sliding" }) ) - const { result1, result2, result3 } = yield* $( + const { result1, result2, result3 } = yield* pipe( Stream.toPull(stream), Effect.flatMap((pull) => - Effect.gen(function*($) { - const result1 = yield* $(pull) - yield* $(Deferred.succeed(latch1, void 0)) - yield* $(Deferred.await(latch2)) - yield* $( + Effect.gen(function*() { + const result1 = yield* pull + yield* (Deferred.succeed(latch1, void 0)) + yield* (Deferred.await(latch2)) + yield* pipe( pull, Effect.flatMap((chunk) => Ref.update(ref, Chunk.appendAll(chunk))), Effect.repeatN(7) ) - const result2 = yield* $(Ref.get(ref)) - yield* $(Deferred.succeed(latch3, void 0)) - yield* $(Deferred.await(latch4)) - yield* $( + const result2 = yield* (Ref.get(ref)) + yield* (Deferred.succeed(latch3, void 0)) + yield* (Deferred.await(latch4)) + yield* pipe( pull, Effect.flatMap((chunk) => Ref.update(ref, Chunk.appendAll(chunk))), Effect.repeatN(7) ) - const result3 = yield* $(Ref.get(ref)) + const result3 = yield* (Ref.get(ref)) return { result1, result2, result3 } }) ), @@ -476,8 +476,8 @@ describe("Stream", () => { })) it.effect("bufferSliding - propagates defects", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.fromEffect(Effect.dieMessage("boom")), Stream.buffer({ capacity: 1, strategy: "sliding" }), Stream.runDrain, @@ -487,9 +487,9 @@ describe("Stream", () => { })) it.effect("bufferUnbounded - buffers the stream", () => - Effect.gen(function*($) { + Effect.gen(function*() { const chunk = Chunk.range(0, 10) - const result = yield* $( + const result = yield* pipe( Stream.fromIterable(chunk), Stream.buffer({ capacity: "unbounded" }), Stream.runCollect @@ -498,9 +498,9 @@ describe("Stream", () => { })) it.effect("bufferUnbounded - buffers a stream with a failure", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.RuntimeException("boom") - const result = yield* $( + const result = yield* pipe( Stream.range(0, 9), Stream.concat(Stream.fail(error)), Stream.buffer({ capacity: "unbounded" }), @@ -511,9 +511,9 @@ describe("Stream", () => { })) it.effect("bufferUnbounded - fast producer progress independently", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Chunk.empty())) - const latch = yield* $(Deferred.make()) + Effect.gen(function*() { + const ref = yield* (Ref.make(Chunk.empty())) + const latch = yield* (Deferred.make()) const stream = pipe( Stream.range(1, 999), Stream.tap((n) => @@ -525,9 +525,9 @@ describe("Stream", () => { Stream.rechunk(999), Stream.buffer({ capacity: "unbounded" }) ) - const result1 = yield* $(stream, Stream.take(2), Stream.runCollect) - yield* $(Deferred.await(latch)) - const result2 = yield* $(Ref.get(ref)) + const result1 = yield* pipe(stream, Stream.take(2), Stream.runCollect) + yield* (Deferred.await(latch)) + const result2 = yield* (Ref.get(ref)) deepStrictEqual(Array.from(result1), [1, 2]) deepStrictEqual(Array.from(result2), Array.from(Chunk.range(1, 999))) })) diff --git a/packages/effect/test/Stream/changing.test.ts b/packages/effect/test/Stream/changing.test.ts index 96211cfd98..b6585a7b0e 100644 --- a/packages/effect/test/Stream/changing.test.ts +++ b/packages/effect/test/Stream/changing.test.ts @@ -1,5 +1,6 @@ import * as Chunk from "effect/Chunk" import * as Effect from "effect/Effect" +import { pipe } from "effect/Function" import * as Stream from "effect/Stream" import { deepStrictEqual } from "effect/test/util" import * as it from "effect/test/utils/extend" @@ -7,14 +8,14 @@ import { describe } from "vitest" describe("Stream", () => { it.effect("changes", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = Stream.range(0, 19) - const result = yield* $( + const result = yield* pipe( stream, Stream.changes, Stream.runCollect ) - const expected = yield* $( + const expected = yield* pipe( stream, Stream.runCollect, Effect.map(Chunk.reduce(Chunk.empty(), (acc, n) => @@ -24,18 +25,22 @@ describe("Stream", () => { })) it.effect("changesWithEffect", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = Stream.range(0, 19) - const result = yield* $( + const result = yield* pipe( stream, Stream.changesWithEffect((left, right) => Effect.succeed(left === right)), Stream.runCollect ) - const expected = yield* $( + const expected = yield* pipe( stream, Stream.runCollect, - Effect.map(Chunk.reduce(Chunk.empty(), (acc, n) => - acc.length === 0 || Chunk.unsafeGet(acc, 0) !== n ? Chunk.append(acc, n) : acc)) + Effect.map( + Chunk.reduce( + Chunk.empty(), + (acc, n) => acc.length === 0 || Chunk.unsafeGet(acc, 0) !== n ? Chunk.append(acc, n) : acc + ) + ) ) deepStrictEqual(Array.from(result), Array.from(expected)) })) diff --git a/packages/effect/test/Stream/collecting.test.ts b/packages/effect/test/Stream/collecting.test.ts index bc7d3c4714..d68af9b808 100644 --- a/packages/effect/test/Stream/collecting.test.ts +++ b/packages/effect/test/Stream/collecting.test.ts @@ -1,7 +1,7 @@ import * as Chunk from "effect/Chunk" import * as Effect from "effect/Effect" import * as Either from "effect/Either" -import { identity } from "effect/Function" +import { identity, pipe } from "effect/Function" import * as Option from "effect/Option" import * as Stream from "effect/Stream" import { assertLeft, assertRight, deepStrictEqual } from "effect/test/util" @@ -10,8 +10,8 @@ import { describe } from "vitest" describe("Stream", () => { it.effect("collect", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(Either.left(1), Either.right(2), Either.left(3)), Stream.filterMap((either) => Either.isRight(either) ? @@ -24,8 +24,8 @@ describe("Stream", () => { })) it.effect("collectEffect - simple example", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(Either.left(1), Either.right(2), Either.left(3)), Stream.filterMapEffect((either) => Either.isRight(either) ? @@ -38,12 +38,12 @@ describe("Stream", () => { })) it.effect("collectEffect - multiple chunks", () => - Effect.gen(function*($) { + Effect.gen(function*() { const chunks = Chunk.make( Chunk.make(Either.left(1), Either.right(2)), Chunk.make(Either.right(3), Either.left(4)) ) - const result = yield* $( + const result = yield* pipe( Stream.fromChunks(...chunks), Stream.filterMapEffect((either) => Either.isRight(either) ? @@ -56,8 +56,8 @@ describe("Stream", () => { })) it.effect("collectEffect - handles failures", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(Either.left(1), Either.right(2), Either.left(3)), Stream.filterMapEffect(() => Option.some(Effect.fail("Ouch"))), Stream.runDrain, @@ -67,8 +67,8 @@ describe("Stream", () => { })) it.effect("collectEffect - laziness on chunks", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 2, 3), Stream.filterMapEffect((n) => n === 3 ? @@ -85,8 +85,8 @@ describe("Stream", () => { })) it.effect("collectWhile - simple example", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(Option.some(1), Option.some(2), Option.none(), Option.some(4)), Stream.filterMapWhile(identity), Stream.runCollect @@ -95,8 +95,8 @@ describe("Stream", () => { })) it.effect("collectWhile - short circuits", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(Option.some(1)), Stream.concat(Stream.fail("Ouch")), Stream.filterMapWhile((option) => Option.isNone(option) ? Option.some(1) : Option.none()), @@ -107,8 +107,8 @@ describe("Stream", () => { })) it.effect("collectWhileEffect - simple example", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(Option.some(1), Option.some(2), Option.none(), Option.some(4)), Stream.filterMapWhileEffect((option) => Option.isSome(option) ? @@ -121,8 +121,8 @@ describe("Stream", () => { })) it.effect("collectWhileEffect - short circuits", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(Option.some(1)), Stream.concat(Stream.fail("Ouch")), Stream.filterMapWhileEffect((option) => @@ -137,8 +137,8 @@ describe("Stream", () => { })) it.effect("collectWhileEffect - fails", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(Option.some(1), Option.some(2), Option.none(), Option.some(3)), Stream.filterMapWhileEffect(() => Option.some(Effect.fail("Ouch"))), Stream.runDrain, @@ -148,8 +148,8 @@ describe("Stream", () => { })) it.effect("collectWhileEffect - laziness on chunks", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 2, 3, 4), Stream.filterMapWhileEffect((n) => n === 3 ? diff --git a/packages/effect/test/Stream/concatenation.test.ts b/packages/effect/test/Stream/concatenation.test.ts index 5decc52d03..3160b0fad9 100644 --- a/packages/effect/test/Stream/concatenation.test.ts +++ b/packages/effect/test/Stream/concatenation.test.ts @@ -9,10 +9,10 @@ import { describe } from "vitest" describe("Stream", () => { it.effect("concat - simple example", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream1 = Stream.make(1, 2, 3) const stream2 = Stream.make(4, 5, 6) - const { result1, result2 } = yield* $(Effect.all({ + const { result1, result2 } = yield* (Effect.all({ result1: pipe( stream1, Stream.runCollect, @@ -31,14 +31,14 @@ describe("Stream", () => { })) it.effect("concat - finalizer ordering", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Chunk.empty())) - yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(Chunk.empty())) + yield* pipe( Stream.finalizer(Ref.update(ref, Chunk.append("Second"))), Stream.concat(Stream.finalizer(Ref.update(ref, Chunk.append("First")))), Stream.runDrain ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) deepStrictEqual(Array.from(result), ["Second", "First"]) })) }) diff --git a/packages/effect/test/Stream/conditionals.test.ts b/packages/effect/test/Stream/conditionals.test.ts index 126a71675f..d76d91c256 100644 --- a/packages/effect/test/Stream/conditionals.test.ts +++ b/packages/effect/test/Stream/conditionals.test.ts @@ -10,9 +10,9 @@ import { describe } from "vitest" describe("Stream", () => { it.effect("when - returns the stream if the condition is satisfied", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = Stream.make(1, 2, 3, 4, 5) - const { result1, result2 } = yield* $(Effect.all({ + const { result1, result2 } = yield* (Effect.all({ result1: pipe(stream, Stream.when(constTrue), Stream.runCollect), result2: Stream.runCollect(stream) })) @@ -20,8 +20,8 @@ describe("Stream", () => { })) it.effect("when - returns an empty stream if the condition is not satisfied", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 2, 3, 4, 5), Stream.when(constFalse), Stream.runCollect @@ -30,9 +30,9 @@ describe("Stream", () => { })) it.effect("when - dies if the condition throws an exception", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.RuntimeException("boom") - const result = yield* $( + const result = yield* pipe( Stream.make(1, 2, 3), Stream.when(() => { throw error @@ -44,8 +44,8 @@ describe("Stream", () => { })) it.effect("whenCase - returns the resulting stream if the given partial function is defined for the given value", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.whenCase( () => Option.some(1), (option) => @@ -59,8 +59,8 @@ describe("Stream", () => { })) it.effect("whenCase - returns an empty stream if the given partial function is not defined for the given value", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.whenCase( () => Option.none(), (option) => @@ -74,9 +74,9 @@ describe("Stream", () => { })) it.effect("whenCase - dies if evaluating the given value throws an exception", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.RuntimeException("boom") - const result = yield* $( + const result = yield* pipe( Stream.whenCase( () => { throw error @@ -90,9 +90,9 @@ describe("Stream", () => { })) it.effect("whenCase - dies if the partial function throws an exception", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.RuntimeException("boom") - const result = yield* $( + const result = yield* pipe( Stream.whenCase( constVoid, (): Option.Option> => { @@ -106,8 +106,8 @@ describe("Stream", () => { })) it.effect("whenCaseEffect - returns the resulting stream if the given partial function is defined for the given effectful value", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Effect.succeed(Option.some(1)), Stream.whenCaseEffect( (option) => @@ -121,8 +121,8 @@ describe("Stream", () => { })) it.effect("whenCaseEffect - returns an empty stream if the given partial function is not defined for the given effectful value", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Effect.succeed>(Option.none()), Stream.whenCaseEffect( (option) => @@ -136,9 +136,9 @@ describe("Stream", () => { })) it.effect("whenCaseEffect - fails if the effectful value is a failure", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.RuntimeException("boom") - const result = yield* $( + const result = yield* pipe( Effect.fail(error), Stream.whenCaseEffect(() => Option.some(Stream.empty)), Stream.runCollect, @@ -148,9 +148,9 @@ describe("Stream", () => { })) it.effect("whenCaseEffect - dies if the given partial function throws an exception", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.RuntimeException("boom") - const result = yield* $( + const result = yield* pipe( Effect.void, Stream.whenCaseEffect((): Option.Option> => { throw error @@ -162,8 +162,8 @@ describe("Stream", () => { })) it.effect("whenEffect - returns the stream if the effectful condition is satisfied", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 2, 3, 4, 5), Stream.whenEffect(Effect.succeed(true)), Stream.runCollect @@ -172,8 +172,8 @@ describe("Stream", () => { })) it.effect("whenEffect - returns an empty stream if the effectful condition is not satisfied", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 2, 3, 4, 5), Stream.whenEffect(Effect.succeed(false)), Stream.runCollect @@ -182,9 +182,9 @@ describe("Stream", () => { })) it.effect("whenEffect - fails if the effectful condition fails", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.RuntimeException("boom") - const result = yield* $( + const result = yield* pipe( Stream.make(1, 2, 3), Stream.whenEffect(Effect.fail(error)), Stream.runDrain, diff --git a/packages/effect/test/Stream/constructors.test.ts b/packages/effect/test/Stream/constructors.test.ts index 5190be9cb8..7753d2822d 100644 --- a/packages/effect/test/Stream/constructors.test.ts +++ b/packages/effect/test/Stream/constructors.test.ts @@ -44,9 +44,9 @@ describe("Stream", () => { }))) it.effect("finalizer - happy path", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Chunk.empty())) - yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(Chunk.empty())) + yield* pipe( Stream.acquireRelease( Ref.update(ref, Chunk.append("Acquire")), () => Ref.update(ref, Chunk.append("Release")) @@ -55,19 +55,19 @@ describe("Stream", () => { Stream.ensuring(Ref.update(ref, Chunk.append("Ensuring"))), Stream.runDrain ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) deepStrictEqual(Array.from(result), ["Acquire", "Use", "Release", "Ensuring"]) })) it.effect("finalizer - finalizer is not run if stream is not pulled", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(false)) - yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(false)) + yield* pipe( Stream.finalizer(Ref.set(ref, true)), Stream.toPull, Effect.scoped ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) assertFalse(result) })) @@ -89,9 +89,9 @@ describe("Stream", () => { }))) it.effect("fromChunks - discards empty chunks", () => - Effect.gen(function*($) { + Effect.gen(function*() { const chunks = [Chunk.of(1), Chunk.empty(), Chunk.of(1)] - const result = yield* $( + const result = yield* pipe( Stream.fromChunks(...chunks), Stream.toPull, Effect.flatMap((pull) => @@ -110,8 +110,8 @@ describe("Stream", () => { })) it.effect("fromEffect - failure", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.fromEffect(Effect.fail("error")), Stream.runCollect, Effect.either @@ -120,8 +120,8 @@ describe("Stream", () => { })) it.effect("fromEffectOption - emit one element with success", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.fromEffectOption(Effect.succeed(5)), Stream.runCollect ) @@ -129,8 +129,8 @@ describe("Stream", () => { })) it.effect("fromEffectOption - emit one element with failure", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.fromEffectOption(Effect.fail(Option.some(5))), Stream.runCollect, Effect.either @@ -139,8 +139,8 @@ describe("Stream", () => { })) it.effect("fromEffectOption - do not emit any element", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.fromEffectOption(Effect.fail(Option.none())), Stream.runCollect ) @@ -148,18 +148,18 @@ describe("Stream", () => { })) it.effect("fromSchedule", () => - Effect.gen(function*($) { + Effect.gen(function*() { const schedule = pipe( Schedule.exponential(Duration.seconds(1)), Schedule.zipLeft(Schedule.recurs(5)) ) - const fiber = yield* $( + const fiber = yield* pipe( Stream.fromSchedule(schedule), Stream.runCollect, Effect.fork ) - yield* $(TestClock.adjust(Duration.seconds(62))) - const result = yield* $(Fiber.join(fiber)) + yield* (TestClock.adjust(Duration.seconds(62))) + const result = yield* (Fiber.join(fiber)) const expected = [ Duration.seconds(1), Duration.seconds(2), @@ -171,9 +171,9 @@ describe("Stream", () => { })) it.effect("fromQueue - emits queued elements", () => - Effect.gen(function*($) { - const coordination = yield* $(chunkCoordination([Chunk.make(1, 2)])) - const fiber = yield* $( + Effect.gen(function*() { + const coordination = yield* (chunkCoordination([Chunk.make(1, 2)])) + const fiber = yield* pipe( Stream.fromQueue(coordination.queue), Stream.filterMapWhile(Exit.match({ onFailure: Option.none, @@ -184,16 +184,16 @@ describe("Stream", () => { Stream.runCollect, Effect.fork ) - yield* $(coordination.offer) - const result = yield* $(Fiber.join(fiber)) + yield* (coordination.offer) + const result = yield* (Fiber.join(fiber)) deepStrictEqual(Array.from(result), [1, 2]) })) it.effect("fromQueue - chunks up to the max chunk size", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.unbounded()) - yield* $(Queue.offerAll(queue, [1, 2, 3, 4, 5, 6, 7])) - const result = yield* $( + Effect.gen(function*() { + const queue = yield* (Queue.unbounded()) + yield* (Queue.offerAll(queue, [1, 2, 3, 4, 5, 6, 7])) + const result = yield* pipe( Stream.fromQueue(queue, { maxChunkSize: 2 }), Stream.mapChunks((chunk) => Chunk.of(Array.from(chunk))), Stream.take(3), @@ -203,7 +203,7 @@ describe("Stream", () => { })) it.effect("fromAsyncIterable", () => - Effect.gen(function*($) { + Effect.gen(function*() { async function* asyncIterable() { yield 1 yield 2 @@ -211,12 +211,12 @@ describe("Stream", () => { } const stream = Stream.fromAsyncIterable(asyncIterable(), identity) - const result = yield* $(Stream.runCollect(stream)) + const result = yield* (Stream.runCollect(stream)) deepStrictEqual(Array.from(result), [1, 2, 3]) })) it.effect("fromReadableStream", () => - Effect.gen(function*($) { + Effect.gen(function*() { class FromReadableStreamError { readonly _tag = "FromReadableStreamError" constructor(readonly error: unknown) {} @@ -229,7 +229,7 @@ describe("Stream", () => { } } - const result = yield* $( + const result = yield* pipe( Stream.fromReadableStream({ evaluate: () => new ReadableStream(new NumberSource()), onError: (error) => new FromReadableStreamError(error) @@ -242,8 +242,8 @@ describe("Stream", () => { })) it.effect("iterate", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.iterate(1, (n) => n + 1), Stream.take(10), Stream.runCollect @@ -252,14 +252,14 @@ describe("Stream", () => { })) it.effect("range - includes both endpoints", () => - Effect.gen(function*($) { - const result = yield* $(Stream.runCollect(Stream.range(1, 2))) + Effect.gen(function*() { + const result = yield* (Stream.runCollect(Stream.range(1, 2))) deepStrictEqual(Array.from(result), [1, 2]) })) it.effect("range - two large ranges can be concatenated", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.range(1, 1_000), Stream.concat(Stream.range(1_001, 2_000)), Stream.runCollect @@ -268,8 +268,8 @@ describe("Stream", () => { })) it.effect("range - two small ranges can be concatenated", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.range(1, 10), Stream.concat(Stream.range(11, 20)), Stream.runCollect @@ -278,8 +278,8 @@ describe("Stream", () => { })) it.effect("range - emits no values when start > end", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.range(2, 1), Stream.runCollect ) @@ -287,8 +287,8 @@ describe("Stream", () => { })) it.effect("range - emits 1 value when start === end", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.range(1, 1), Stream.runCollect ) @@ -296,8 +296,8 @@ describe("Stream", () => { })) it.effect("range - emits values in chunks of chunkSize", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.range(1, 9, 2), Stream.mapChunks((chunk) => Chunk.make(pipe(chunk, Chunk.reduce(0, (x, y) => x + y)))), Stream.runCollect @@ -326,8 +326,8 @@ describe("Stream", () => { )) it.effect("unfold", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.unfold(0, (n) => n < 10 ? Option.some([n, n + 1] as const) : @@ -338,8 +338,8 @@ describe("Stream", () => { })) it.effect("unfoldChunk", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.unfoldChunk(0, (n) => n < 10 ? Option.some([Chunk.make(n, n + 1), n + 2] as const) : @@ -350,8 +350,8 @@ describe("Stream", () => { })) it.effect("unfoldChunkEffect", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.unfoldChunkEffect(0, (n) => n < 10 ? Effect.succeed(Option.some([Chunk.make(n, n + 1), n + 2] as const)) : @@ -362,8 +362,8 @@ describe("Stream", () => { })) it.effect("unfoldEffect", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.unfoldEffect(0, (n) => n < 10 ? Effect.succeed(Option.some([n, n + 1] as const)) : diff --git a/packages/effect/test/Stream/conversions.test.ts b/packages/effect/test/Stream/conversions.test.ts index 3d72004508..09783f044f 100644 --- a/packages/effect/test/Stream/conversions.test.ts +++ b/packages/effect/test/Stream/conversions.test.ts @@ -12,13 +12,13 @@ import { describe } from "vitest" describe("Stream", () => { it.effect("toQueue", () => - Effect.gen(function*($) { + Effect.gen(function*() { const chunk = Chunk.make(1, 2, 3) const stream = pipe( Stream.fromChunk(chunk), Stream.flatMap(Stream.succeed) ) - const result = yield* $( + const result = yield* pipe( stream, Stream.toQueue({ capacity: 1_000 }), Effect.flatMap((queue) => @@ -39,13 +39,13 @@ describe("Stream", () => { })) it.effect("toQueueUnbounded", () => - Effect.gen(function*($) { + Effect.gen(function*() { const chunk = Chunk.make(1, 2, 3) const stream = pipe( Stream.fromChunk(chunk), Stream.flatMap(Stream.succeed) ) - const result = yield* $( + const result = yield* pipe( Stream.toQueue(stream, { strategy: "unbounded" }), Effect.flatMap((queue) => pipe( @@ -65,8 +65,8 @@ describe("Stream", () => { })) it.effect("toQueueOfElements - propagates defects", () => - Effect.gen(function*($) { - const queue = yield* $( + Effect.gen(function*() { + const queue = yield* pipe( Stream.dieMessage("die"), Stream.toQueueOfElements({ capacity: 1 }), Effect.flatMap(Queue.take), diff --git a/packages/effect/test/Stream/distributing.test.ts b/packages/effect/test/Stream/distributing.test.ts index 772dbcc29d..7eea4d115b 100644 --- a/packages/effect/test/Stream/distributing.test.ts +++ b/packages/effect/test/Stream/distributing.test.ts @@ -10,8 +10,8 @@ import { describe } from "vitest" describe("Stream", () => { it.effect("distributedWithDynamic - ensures no race between subscription and stream end", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.empty, Stream.distributedWithDynamic({ maximumLag: 1, diff --git a/packages/effect/test/Stream/draining.test.ts b/packages/effect/test/Stream/draining.test.ts index 03a2ceb06f..b71c94557e 100644 --- a/packages/effect/test/Stream/draining.test.ts +++ b/packages/effect/test/Stream/draining.test.ts @@ -12,37 +12,37 @@ import { describe } from "vitest" describe("Stream", () => { it.effect("drain - simple example", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Chunk.empty())) - yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(Chunk.empty())) + yield* pipe( Stream.range(0, 9), Stream.mapEffect((n) => Ref.update(ref, Chunk.append(n))), Stream.drain, Stream.runDrain ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) deepStrictEqual(Array.from(result), Array.from(Chunk.range(0, 9))) })) it.effect("drain - is not too eager", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - const result1 = yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + const result1 = yield* pipe( Stream.make(1), Stream.tap((n) => Ref.set(ref, n)), Stream.concat(Stream.fail("fail")), Stream.runDrain, Effect.either ) - const result2 = yield* $(Ref.get(ref)) + const result2 = yield* (Ref.get(ref)) assertLeft(result1, "fail") strictEqual(result2, 1) })) it.effect("drainFork - runs the other stream in the background", () => - Effect.gen(function*($) { - const latch = yield* $(Deferred.make()) - const result = yield* $( + Effect.gen(function*() { + const latch = yield* (Deferred.make()) + const result = yield* pipe( Stream.fromEffect(Deferred.await(latch)), Stream.drainFork(Stream.fromEffect(Deferred.succeed(latch, void 0))), Stream.runDrain @@ -51,10 +51,10 @@ describe("Stream", () => { })) it.effect("drainFork - interrupts the background stream when the foreground exits", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(false)) - const latch = yield* $(Deferred.make()) - yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(false)) + const latch = yield* (Deferred.make()) + yield* pipe( Stream.make(1, 2, 3), Stream.concat(Stream.drain(Stream.fromEffect(Deferred.await(latch)))), Stream.drainFork( @@ -67,13 +67,13 @@ describe("Stream", () => { ), Stream.runDrain ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) assertTrue(result) })) it.effect("drainFork - fails the foreground stream if the background fails with a typed error", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.never, Stream.drainFork(Stream.fail("boom")), Stream.runDrain, @@ -83,9 +83,9 @@ describe("Stream", () => { })) it.effect("drainFork - fails the foreground stream if the background fails with a defect", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.RuntimeException("boom") - const result = yield* $( + const result = yield* pipe( Stream.never, Stream.drainFork(Stream.die(error)), Stream.runDrain, diff --git a/packages/effect/test/Stream/dropping.test.ts b/packages/effect/test/Stream/dropping.test.ts index 954c36a55f..b14c10fd53 100644 --- a/packages/effect/test/Stream/dropping.test.ts +++ b/packages/effect/test/Stream/dropping.test.ts @@ -8,10 +8,10 @@ import { describe } from "vitest" describe("Stream", () => { it.effect("drop - simple example", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 2 const stream = Stream.make(1, 2, 3, 4, 5) - const { result1, result2 } = yield* $(Effect.all({ + const { result1, result2 } = yield* (Effect.all({ result1: pipe(stream, Stream.drop(n), Stream.runCollect), result2: pipe(stream, Stream.runCollect, Effect.map(Chunk.drop(n))) })) @@ -19,8 +19,8 @@ describe("Stream", () => { })) it.effect("drop - does not swallow errors", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.fail("Ouch"), Stream.concat(Stream.make(1)), Stream.drop(1), @@ -31,10 +31,10 @@ describe("Stream", () => { })) it.effect("dropRight - simple example", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 2 const stream = Stream.make(1, 2, 3, 4, 5) - const { result1, result2 } = yield* $(Effect.all({ + const { result1, result2 } = yield* (Effect.all({ result1: pipe(stream, Stream.dropRight(n), Stream.runCollect), result2: pipe(stream, Stream.runCollect, Effect.map(Chunk.dropRight(n))) })) @@ -42,8 +42,8 @@ describe("Stream", () => { })) it.effect("dropRight - does not swallow errors", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1), Stream.concat(Stream.fail("Ouch")), Stream.dropRight(1), @@ -54,10 +54,10 @@ describe("Stream", () => { })) it.effect("dropUntil", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = Stream.make(1, 2, 3, 4, 5) const f = (n: number) => n < 3 - const { result1, result2 } = yield* $(Effect.all({ + const { result1, result2 } = yield* (Effect.all({ result1: pipe(stream, Stream.dropUntil(f), Stream.runCollect), result2: pipe( Stream.runCollect(stream), @@ -68,10 +68,10 @@ describe("Stream", () => { })) it.effect("dropWhile", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = Stream.make(1, 2, 3, 4, 5) const f = (n: number) => n < 3 - const { result1, result2 } = yield* $(Effect.all({ + const { result1, result2 } = yield* (Effect.all({ result1: pipe(stream, Stream.dropWhile(f), Stream.runCollect), result2: pipe(stream, Stream.runCollect, Effect.map(Chunk.dropWhile(f))) })) @@ -79,8 +79,8 @@ describe("Stream", () => { })) it.effect("dropWhile - short circuits", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1), Stream.concat(Stream.fail("Ouch")), Stream.take(1), diff --git a/packages/effect/test/Stream/encoding.test.ts b/packages/effect/test/Stream/encoding.test.ts index c8414f1c49..c91cc4da72 100644 --- a/packages/effect/test/Stream/encoding.test.ts +++ b/packages/effect/test/Stream/encoding.test.ts @@ -1,5 +1,6 @@ import * as Chunk from "effect/Chunk" import * as Effect from "effect/Effect" +import { pipe } from "effect/Function" import * as Stream from "effect/Stream" import { deepStrictEqual, strictEqual } from "effect/test/util" import * as it from "effect/test/utils/extend" @@ -7,15 +8,15 @@ import { describe } from "vitest" describe("Stream", () => { it.effect("decodeText/encodeText round trip", () => - Effect.gen(function*(_) { + Effect.gen(function*() { const items = ["a", "b", "c", "d", "e", "f", "g", "h", "i"] - const encoded = yield* _( + const encoded = yield* pipe( Stream.fromIterable(items), Stream.encodeText, Stream.runCollect ) strictEqual(encoded.length, 9) - const decoded = yield* _( + const decoded = yield* pipe( Stream.fromChunk(encoded), Stream.decodeText(), Stream.runCollect diff --git a/packages/effect/test/Stream/environment.test.ts b/packages/effect/test/Stream/environment.test.ts index 3bf0240400..c1734a812e 100644 --- a/packages/effect/test/Stream/environment.test.ts +++ b/packages/effect/test/Stream/environment.test.ts @@ -19,12 +19,12 @@ const StringService = Context.GenericTag("string") describe("Stream", () => { it.effect("context", () => - Effect.gen(function*($) { + Effect.gen(function*() { const context = pipe( Context.empty(), Context.add(StringService, { string: "test" }) ) - const result = yield* $( + const result = yield* pipe( Stream.context(), Stream.map(Context.get(StringService)), Stream.provideContext(context), @@ -34,8 +34,8 @@ describe("Stream", () => { })) it.effect("contextWith", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( StringService, Stream.provideContext( pipe( @@ -50,8 +50,8 @@ describe("Stream", () => { })) it.effect("contextWithEffect - success", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.contextWithEffect((context: Context.Context) => Effect.succeed(pipe(context, Context.get(StringService))) ), @@ -68,8 +68,8 @@ describe("Stream", () => { })) it.effect("contextWithEffect - fails", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.contextWithEffect((_: Context.Context) => Effect.fail("boom")), Stream.provideContext( pipe( @@ -84,8 +84,8 @@ describe("Stream", () => { })) it.effect("contextWithStream - success", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.contextWithStream((context: Context.Context) => Stream.succeed(pipe(context, Context.get(StringService))) ), @@ -102,8 +102,8 @@ describe("Stream", () => { })) it.effect("contextWithStream - fails", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.contextWithStream((_: Context.Context) => Stream.fail("boom")), Stream.provideContext( pipe( @@ -118,10 +118,10 @@ describe("Stream", () => { })) it.effect("provide", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = StringService const layer = Layer.succeed(StringService, { string: "test" }) - const result = yield* $( + const result = yield* pipe( stream, Stream.provideLayer(layer), Stream.map((s) => s.string), @@ -131,10 +131,10 @@ describe("Stream", () => { })) it.effect("provideServiceStream", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = StringService const service = Stream.succeed({ string: "test" }) - const result = yield* $( + const result = yield* pipe( stream, Stream.provideServiceStream(StringService, service), Stream.map((s) => s.string), @@ -144,8 +144,8 @@ describe("Stream", () => { })) it.effect("serviceWith", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.map(StringService, (service) => service.string), Stream.provideLayer(Layer.succeed(StringService, { string: "test" })), Stream.runCollect @@ -154,8 +154,8 @@ describe("Stream", () => { })) it.effect("serviceWithEffect", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.mapEffect(StringService, (service) => Effect.succeed(service.string)), Stream.provideLayer(Layer.succeed(StringService, { string: "test" })), Stream.runCollect @@ -164,8 +164,8 @@ describe("Stream", () => { })) it.effect("serviceWithStream", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.flatMap(StringService, (service) => Stream.succeed(service.string)), Stream.provideLayer(Layer.succeed(StringService, { string: "test" })), Stream.runCollect @@ -174,7 +174,7 @@ describe("Stream", () => { })) it.effect("deep provide", () => - Effect.gen(function*($) { + Effect.gen(function*() { const messages: Array = [] const effect = Effect.acquireRelease( pipe(StringService, Effect.tap((s) => Effect.sync(() => messages.push(s.string)))), @@ -189,13 +189,13 @@ describe("Stream", () => { Stream.concat(pipe(Stream.scoped(effect), Stream.provideSomeLayer(L2))), Stream.provideSomeLayer(L0) ) - yield* $(Stream.runDrain(stream)) + yield* (Stream.runDrain(stream)) deepStrictEqual(messages, ["test1", "test1", "test2", "test2"]) })) it.effect("withSpan", () => - Effect.gen(function*(_) { - const spans = yield* _( + Effect.gen(function*() { + const spans = yield* pipe( Stream.make(1, 2, 3), Stream.mapEffect((i) => Effect.withSpan( diff --git a/packages/effect/test/Stream/error-handling.test.ts b/packages/effect/test/Stream/error-handling.test.ts index d7e66f9142..b86c1cc123 100644 --- a/packages/effect/test/Stream/error-handling.test.ts +++ b/packages/effect/test/Stream/error-handling.test.ts @@ -13,9 +13,9 @@ import { describe } from "vitest" describe("Stream", () => { it.effect("absolve - happy path", () => - Effect.gen(function*($) { + Effect.gen(function*() { const chunk = Chunk.range(1, 10) - const result = yield* $( + const result = yield* pipe( chunk, Chunk.map(Either.right), Stream.fromIterable, @@ -26,8 +26,8 @@ describe("Stream", () => { })) it.effect("absolve - failure", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.fromIterable(pipe(Chunk.range(1, 10), Chunk.map(Either.right))), Stream.concat(Stream.succeed(Either.left("Ouch"))), Stream.mapEffect(identity), @@ -38,10 +38,10 @@ describe("Stream", () => { })) it.effect("absolve - round trip #1", () => - Effect.gen(function*($) { + Effect.gen(function*() { const xss = Stream.fromIterable(pipe(Chunk.range(1, 10), Chunk.map(Either.right))) const stream = pipe(xss, Stream.concat(Stream.succeed(Either.left("Ouch"))), Stream.concat(xss)) - const { result1, result2 } = yield* $(Effect.all({ + const { result1, result2 } = yield* (Effect.all({ result1: Stream.runCollect(stream), result2: pipe(Stream.mapEffect(stream, identity), Stream.either, Stream.runCollect) })) @@ -52,10 +52,10 @@ describe("Stream", () => { })) it.effect("absolve - round trip #2", () => - Effect.gen(function*($) { + Effect.gen(function*() { const xss = Stream.fromIterable(pipe(Chunk.range(1, 10), Chunk.map(Either.right))) const stream = pipe(xss, Stream.concat(Stream.fail("Ouch"))) - const { result1, result2 } = yield* $(Effect.all({ + const { result1, result2 } = yield* (Effect.all({ result1: Effect.exit(Stream.runCollect(stream)), result2: pipe(stream, Stream.either, Stream.mapEffect(identity), Stream.runCollect, Effect.exit) })) @@ -64,10 +64,10 @@ describe("Stream", () => { })) it.effect("catchAllCause - recovery from errors", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream1 = pipe(Stream.make(1, 2), Stream.concat(Stream.fail("boom"))) const stream2 = Stream.make(3, 4) - const result = yield* $( + const result = yield* pipe( stream1, Stream.catchAllCause(() => stream2), Stream.runCollect @@ -76,10 +76,10 @@ describe("Stream", () => { })) it.effect("catchAllCause - recovery from defects", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream1 = pipe(Stream.make(1, 2), Stream.concat(Stream.dieMessage("boom"))) const stream2 = Stream.make(3, 4) - const result = yield* $( + const result = yield* pipe( stream1, Stream.catchAllCause(() => stream2), Stream.runCollect @@ -88,10 +88,10 @@ describe("Stream", () => { })) it.effect("catchAllCause - happy path", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream1 = Stream.make(1, 2) const stream2 = Stream.make(3, 4) - const result = yield* $( + const result = yield* pipe( stream1, Stream.catchAllCause(() => stream2), Stream.runCollect @@ -100,8 +100,8 @@ describe("Stream", () => { })) it.effect("catchAllCause - executes finalizers", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Chunk.empty())) + Effect.gen(function*() { + const ref = yield* (Ref.make(Chunk.empty())) const stream1 = pipe( Stream.make(1, 2), Stream.concat(Stream.fail("boom")), @@ -112,26 +112,26 @@ describe("Stream", () => { Stream.concat(Stream.fail("boom")), Stream.ensuring(Ref.update(ref, Chunk.append("s2"))) ) - yield* $( + yield* pipe( stream1, Stream.catchAllCause(() => stream2), Stream.runCollect, Effect.exit ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) deepStrictEqual(Array.from(result), ["s1", "s2"]) })) it.effect("catchAllCause - releases all resources by the time the failover stream has started", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Chunk.empty())) + Effect.gen(function*() { + const ref = yield* (Ref.make(Chunk.empty())) const stream = pipe( Stream.finalizer(Ref.update(ref, Chunk.append(1))), Stream.crossRight(Stream.finalizer(Ref.update(ref, Chunk.append(2)))), Stream.crossRight(Stream.finalizer(Ref.update(ref, Chunk.append(3)))), Stream.crossRight(Stream.fail("boom")) ) - const result = yield* $( + const result = yield* pipe( Stream.drain(stream), Stream.catchAllCause(() => Stream.fromEffect(Ref.get(ref))), Stream.runCollect @@ -140,9 +140,9 @@ describe("Stream", () => { })) it.effect("catchAllCause - propagates the right Exit value to the failing stream (ZIO #3609)", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make>(Exit.void)) - yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make>(Exit.void)) + yield* pipe( Stream.acquireRelease( Effect.void, (_, exit) => Ref.set(ref, exit) @@ -152,18 +152,18 @@ describe("Stream", () => { Stream.runDrain, Effect.exit ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) deepStrictEqual(result, Exit.fail("boom")) })) it.effect("catchSome - recovery from some errors", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream1 = pipe( Stream.make(1, 2), Stream.concat(Stream.fail("boom")) ) const stream2 = Stream.make(3, 4) - const result = yield* $( + const result = yield* pipe( stream1, Stream.catchSome((error) => error === "boom" ? Option.some(stream2) : Option.none()), Stream.runCollect @@ -172,13 +172,13 @@ describe("Stream", () => { })) it.effect("catchSome - fails stream when partial function does not match", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream1 = pipe( Stream.make(1, 2), Stream.concat(Stream.fail("boom")) ) const stream2 = Stream.make(3, 4) - const result = yield* $( + const result = yield* pipe( stream1, Stream.catchSome((error) => error === "boomer" ? Option.some(stream2) : Option.none()), Stream.runCollect, @@ -188,13 +188,13 @@ describe("Stream", () => { })) it.effect("catchSomeCause - recovery from some errors", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream1 = pipe( Stream.make(1, 2), Stream.concat(Stream.failCause(Cause.fail("boom"))) ) const stream2 = Stream.make(3, 4) - const result = yield* $( + const result = yield* pipe( stream1, Stream.catchSomeCause((cause) => Cause.isFailType(cause) && cause.error === "boom" ? @@ -207,13 +207,13 @@ describe("Stream", () => { })) it.effect("catchSomeCause - fails stream when partial function does not match", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream1 = pipe( Stream.make(1, 2), Stream.concat(Stream.fail("boom")) ) const stream2 = Stream.make(3, 4) - const result = yield* $( + const result = yield* pipe( stream1, Stream.catchSomeCause((cause) => Cause.isEmpty(cause) ? @@ -227,7 +227,7 @@ describe("Stream", () => { })) it.effect("catchTag", () => - Effect.gen(function*(_) { + Effect.gen(function*() { class ErrorA { readonly _tag = "ErrorA" } @@ -235,13 +235,13 @@ describe("Stream", () => { readonly _tag = "ErrorB" } - const result1 = yield* _( + const result1 = yield* pipe( Stream.fail(new ErrorA()), Stream.catchTag("ErrorA", () => Stream.make(1, 2)), Stream.runCollect ) - const result2 = yield* _( + const result2 = yield* pipe( Stream.fail(new ErrorA()), Stream.flatMap(() => Stream.fail(new ErrorB())), Stream.catchTag("ErrorB", () => Stream.make(1, 2)), @@ -254,27 +254,27 @@ describe("Stream", () => { })) it.effect("onError", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(false)) - const exit = yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(false)) + const exit = yield* pipe( Stream.fail("boom"), Stream.onError(() => Ref.set(ref, true)), Stream.runDrain, Effect.exit ) - const called = yield* $(Ref.get(ref)) + const called = yield* (Ref.get(ref)) deepStrictEqual(exit, Exit.fail("boom")) assertTrue(called) })) it.effect("orElse", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream1 = pipe( Stream.make(1, 2, 3), Stream.concat(Stream.fail("boom")) ) const stream2 = Stream.make(4, 5, 6) - const result = yield* $( + const result = yield* pipe( stream1, Stream.orElse(() => stream2), Stream.runCollect @@ -283,13 +283,13 @@ describe("Stream", () => { })) it.effect("orElseEither", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream1 = pipe( Stream.make(1), Stream.concat(Stream.fail("boom")) ) const stream2 = Stream.make(2) - const result = yield* $( + const result = yield* pipe( stream1, Stream.orElseEither(() => stream2), Stream.runCollect @@ -298,9 +298,9 @@ describe("Stream", () => { })) it.effect("orElseFail", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = pipe(Stream.succeed(1), Stream.concat(Stream.fail("boom"))) - const result = yield* $( + const result = yield* pipe( stream, Stream.orElseFail(() => "boomer"), Stream.runCollect, @@ -310,8 +310,8 @@ describe("Stream", () => { })) it.effect("orElseIfEmpty - produce default value if stream is empty", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.empty, Stream.orElseIfEmpty(() => 0), Stream.runCollect @@ -320,8 +320,8 @@ describe("Stream", () => { })) it.effect("orElseIfEmpty - ignores default value when stream is not empty", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1), Stream.orElseIfEmpty(() => 0), Stream.runCollect @@ -330,8 +330,8 @@ describe("Stream", () => { })) it.effect("orElseIfEmptyStream - consume default stream if stream is empty", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.empty, Stream.orElseIfEmptyStream(() => Stream.range(0, 4)), Stream.runCollect @@ -340,8 +340,8 @@ describe("Stream", () => { })) it.effect("orElseIfEmptyStream - should throw the correct error from the default stream", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.empty, Stream.orElseIfEmptyStream(() => Stream.fail("Ouch")), Stream.runCollect, @@ -351,9 +351,9 @@ describe("Stream", () => { })) it.effect("orElseSucceed", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = pipe(Stream.succeed(1), Stream.concat(Stream.fail("boom"))) - const result = yield* $( + const result = yield* pipe( stream, Stream.orElseSucceed(() => 2), Stream.runCollect diff --git a/packages/effect/test/Stream/filtering.test.ts b/packages/effect/test/Stream/filtering.test.ts index 0e275f546a..f516610e3d 100644 --- a/packages/effect/test/Stream/filtering.test.ts +++ b/packages/effect/test/Stream/filtering.test.ts @@ -9,10 +9,10 @@ import { describe } from "vitest" describe("Stream", () => { it.effect("filter", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = Stream.make(1, 2, 3, 4, 5) const f = (n: number) => n % 2 === 0 - const { result1, result2 } = yield* $(Effect.all({ + const { result1, result2 } = yield* (Effect.all({ result1: pipe(stream, Stream.filter(f), Stream.runCollect), result2: pipe(stream, Stream.runCollect, Effect.map(Chunk.filter(f))) })) @@ -20,10 +20,10 @@ describe("Stream", () => { })) it.effect("filterEffect - simple example", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = Stream.make(1, 2, 3, 4, 5) const f = (n: number) => Effect.succeed(n % 2 === 0) - const { result1, result2 } = yield* $(Effect.all({ + const { result1, result2 } = yield* (Effect.all({ result1: pipe(stream, Stream.filterEffect(f), Stream.runCollect), result2: pipe(stream, Stream.runCollect, Effect.flatMap(Effect.filter(f))) })) @@ -31,8 +31,8 @@ describe("Stream", () => { })) it.effect("filterEffect - laziness on chunks", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 2, 3), Stream.filterEffect((n) => n === 3 ? diff --git a/packages/effect/test/Stream/finding.test.ts b/packages/effect/test/Stream/finding.test.ts index 4fd2ae9782..82ec3a280a 100644 --- a/packages/effect/test/Stream/finding.test.ts +++ b/packages/effect/test/Stream/finding.test.ts @@ -10,10 +10,10 @@ import { describe } from "vitest" describe("Stream", () => { it.effect("find", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = Stream.make(1, 2, 3, 4, 5) const f = (n: number) => n === 4 - const { result1, result2 } = yield* $(Effect.all({ + const { result1, result2 } = yield* (Effect.all({ result1: pipe(stream, Stream.find(f), Stream.runCollect), result2: pipe( stream, @@ -29,10 +29,10 @@ describe("Stream", () => { })) it.effect("findEffect - simple example", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = Stream.make(1, 2, 3, 4, 5) const f = (n: number) => Effect.succeed(n === 4) - const { result1, result2 } = yield* $(Effect.all({ + const { result1, result2 } = yield* (Effect.all({ result1: pipe(stream, Stream.findEffect(f), Stream.runCollect), result2: pipe( Stream.runCollect(stream), @@ -51,8 +51,8 @@ describe("Stream", () => { })) it.effect("findEffect - throws correct error", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 2, 3), Stream.findEffect((n) => n === 3 ? diff --git a/packages/effect/test/Stream/foreign.test.ts b/packages/effect/test/Stream/foreign.test.ts index f3c7f1a246..2fc9cebb8c 100644 --- a/packages/effect/test/Stream/foreign.test.ts +++ b/packages/effect/test/Stream/foreign.test.ts @@ -4,6 +4,7 @@ import * as Context from "effect/Context" import * as Effect from "effect/Effect" import * as Either from "effect/Either" import * as Exit from "effect/Exit" +import { pipe } from "effect/Function" import * as Option from "effect/Option" import * as Random from "effect/Random" import * as Stream from "effect/Stream" @@ -14,9 +15,9 @@ import { describe } from "vitest" describe("Stream.Foreign", () => { it.effect("Tag", () => - Effect.gen(function*($) { + Effect.gen(function*() { const tag = Context.GenericTag("number") - const result = yield* $( + const result = yield* pipe( tag, Stream.runCollect, Effect.map(Chunk.toReadonlyArray), @@ -26,22 +27,22 @@ describe("Stream.Foreign", () => { })) it.effect("Unify", () => - Effect.gen(function*($) { - const unifiedEffect = unify((yield* $(Random.nextInt)) > 1 ? Effect.succeed(0) : Effect.fail(1)) - const unifiedExit = unify((yield* $(Random.nextInt)) > 1 ? Exit.succeed(0) : Exit.fail(1)) - const unifiedEither = unify((yield* $(Random.nextInt)) > 1 ? Either.right(0) : Either.left(1)) - const unifiedOption = unify((yield* $(Random.nextInt)) > 1 ? Option.some(0) : Option.none()) - deepStrictEqual(Chunk.toReadonlyArray(yield* $(Stream.runCollect(unifiedEffect))), [0]) - deepStrictEqual(Chunk.toReadonlyArray(yield* $(Stream.runCollect(unifiedExit))), [0]) - deepStrictEqual(Chunk.toReadonlyArray(yield* $(Stream.runCollect(unifiedEither))), [0]) - deepStrictEqual(Chunk.toReadonlyArray(yield* $(Stream.runCollect(unifiedOption))), [0]) + Effect.gen(function*() { + const unifiedEffect = unify((yield* (Random.nextInt)) > 1 ? Effect.succeed(0) : Effect.fail(1)) + const unifiedExit = unify((yield* (Random.nextInt)) > 1 ? Exit.succeed(0) : Exit.fail(1)) + const unifiedEither = unify((yield* (Random.nextInt)) > 1 ? Either.right(0) : Either.left(1)) + const unifiedOption = unify((yield* (Random.nextInt)) > 1 ? Option.some(0) : Option.none()) + deepStrictEqual(Chunk.toReadonlyArray(yield* (Stream.runCollect(unifiedEffect))), [0]) + deepStrictEqual(Chunk.toReadonlyArray(yield* (Stream.runCollect(unifiedExit))), [0]) + deepStrictEqual(Chunk.toReadonlyArray(yield* (Stream.runCollect(unifiedEither))), [0]) + deepStrictEqual(Chunk.toReadonlyArray(yield* (Stream.runCollect(unifiedOption))), [0]) })) it.effect("Either.right", () => - Effect.gen(function*($) { + Effect.gen(function*() { const tag = Context.GenericTag("number") - const result = yield* $( + const result = yield* pipe( Either.right(10), Stream.runCollect, Effect.map(Chunk.toReadonlyArray), @@ -51,9 +52,9 @@ describe("Stream.Foreign", () => { })) it.effect("Either.left", () => - Effect.gen(function*($) { + Effect.gen(function*() { const tag = Context.GenericTag("number") - const result = yield* $( + const result = yield* pipe( Either.left(10), Stream.runCollect, Effect.either, @@ -63,9 +64,9 @@ describe("Stream.Foreign", () => { })) it.effect("Option.some", () => - Effect.gen(function*($) { + Effect.gen(function*() { const tag = Context.GenericTag("number") - const result = yield* $( + const result = yield* pipe( Option.some(10), Stream.runCollect, Effect.map(Chunk.toReadonlyArray), @@ -75,9 +76,9 @@ describe("Stream.Foreign", () => { })) it.effect("Option.none", () => - Effect.gen(function*($) { + Effect.gen(function*() { const tag = Context.GenericTag("number") - const result = yield* $( + const result = yield* pipe( Option.none(), Stream.runCollect, Effect.either, @@ -87,9 +88,9 @@ describe("Stream.Foreign", () => { })) it.effect("Effect.fail", () => - Effect.gen(function*($) { + Effect.gen(function*() { const tag = Context.GenericTag("number") - const result = yield* $( + const result = yield* pipe( Effect.fail("ok"), Stream.runCollect, Effect.either, @@ -99,9 +100,9 @@ describe("Stream.Foreign", () => { })) it.effect("Effect.succeed", () => - Effect.gen(function*($) { + Effect.gen(function*() { const tag = Context.GenericTag("number") - const result = yield* $( + const result = yield* pipe( Effect.succeed("ok"), Stream.runCollect, Effect.map(Chunk.toReadonlyArray), diff --git a/packages/effect/test/Stream/fromEventListener.test.ts b/packages/effect/test/Stream/fromEventListener.test.ts index 4d594f3ca7..9e9299e9f8 100644 --- a/packages/effect/test/Stream/fromEventListener.test.ts +++ b/packages/effect/test/Stream/fromEventListener.test.ts @@ -1,4 +1,4 @@ -import { Effect, Stream } from "effect" +import { Effect, pipe, Stream } from "effect" import * as it from "effect/test/utils/extend" import { describe } from "vitest" @@ -10,10 +10,10 @@ class TestTarget extends EventTarget { describe("Stream.fromEventListener", () => { it.effect("emitted count", (ctx) => - Effect.gen(function*(_) { + Effect.gen(function*() { const target = new TestTarget() - const count = yield* _( + const count = yield* pipe( Stream.fromEventListener(target, "test-event"), Stream.interruptWhen(Effect.sync(() => target.emit()).pipe(Effect.repeatN(2))), Stream.runCount diff --git a/packages/effect/test/Stream/getters.test.ts b/packages/effect/test/Stream/getters.test.ts index a026c9bd20..c9d3187760 100644 --- a/packages/effect/test/Stream/getters.test.ts +++ b/packages/effect/test/Stream/getters.test.ts @@ -1,4 +1,5 @@ import * as Effect from "effect/Effect" +import { pipe } from "effect/Function" import * as Option from "effect/Option" import * as Stream from "effect/Stream" import { assertLeft, deepStrictEqual } from "effect/test/util" @@ -7,8 +8,8 @@ import { describe } from "vitest" describe("Stream", () => { it.effect("some", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.succeed(Option.some(1)), Stream.concat(Stream.succeed(Option.none())), Stream.some, @@ -19,8 +20,8 @@ describe("Stream", () => { })) it.effect("some", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.succeed(Option.some(1)), Stream.concat(Stream.succeed(Option.none())), Stream.someOrElse(() => -1), @@ -30,8 +31,8 @@ describe("Stream", () => { })) it.effect("someOrFail", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.succeed(Option.some(1)), Stream.concat(Stream.succeed(Option.none())), Stream.someOrFail(() => -1), diff --git a/packages/effect/test/Stream/grouping.test.ts b/packages/effect/test/Stream/grouping.test.ts index 9a77f90748..24c67cda18 100644 --- a/packages/effect/test/Stream/grouping.test.ts +++ b/packages/effect/test/Stream/grouping.test.ts @@ -18,13 +18,13 @@ import { describe } from "vitest" describe("Stream", () => { it.effect("groupBy - values", () => - Effect.gen(function*($) { + Effect.gen(function*() { const words = pipe( Chunk.makeBy(() => Chunk.range(0, 99))(100), Chunk.flatten, Chunk.map((n) => String(n)) ) - const result = yield* $( + const result = yield* pipe( Stream.fromIterable(words), Stream.groupByKey(identity, { bufferSize: 8192 }), GroupBy.evaluate((key, stream) => @@ -43,13 +43,13 @@ describe("Stream", () => { })) it.effect("groupBy - first", () => - Effect.gen(function*($) { + Effect.gen(function*() { const words = pipe( Chunk.makeBy(() => Chunk.range(0, 99))(1_000), Chunk.flatten, Chunk.map((n) => String(n)) ) - const result = yield* $( + const result = yield* pipe( Stream.fromIterable(words), Stream.groupByKey(identity, { bufferSize: 1050 }), GroupBy.first(2), @@ -66,9 +66,9 @@ describe("Stream", () => { })) it.effect("groupBy - filter", () => - Effect.gen(function*($) { + Effect.gen(function*() { const words = Array.from({ length: 100 }, () => Array.from({ length: 100 }, (_, i) => i)).flat() - const result = yield* $( + const result = yield* pipe( Stream.fromIterable(words), Stream.groupByKey(identity, { bufferSize: 1050 }), GroupBy.filter((n) => n <= 5), @@ -92,9 +92,9 @@ describe("Stream", () => { })) it.effect("groupBy - outer errors", () => - Effect.gen(function*($) { + Effect.gen(function*() { const words = ["abc", "test", "test", "foo"] - const result = yield* $( + const result = yield* pipe( Stream.fromIterable(words), Stream.concat(Stream.fail("boom")), Stream.groupByKey(identity), @@ -106,8 +106,8 @@ describe("Stream", () => { })) it.effect("grouped - sanity check", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 2, 3, 4, 5), Stream.grouped(2), Stream.runCollect @@ -119,8 +119,8 @@ describe("Stream", () => { })) it.effect("grouped - group size is correct", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.range(0, 99), Stream.grouped(10), Stream.map(Chunk.size), @@ -133,8 +133,8 @@ describe("Stream", () => { })) it.effect("grouped - does not emit empty chunks", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.fromIterable(Chunk.empty()), Stream.grouped(5), Stream.runCollect @@ -143,28 +143,28 @@ describe("Stream", () => { })) it.effect("grouped - emits elements properly when a failure occurs", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Chunk.empty>())) + Effect.gen(function*() { + const ref = yield* (Ref.make(Chunk.empty>())) const streamChunks = Stream.fromChunks(Chunk.range(1, 4), Chunk.range(5, 7), Chunk.of(8)) const stream = pipe( streamChunks, Stream.concat(Stream.fail("Ouch")), Stream.grouped(3) ) - const either = yield* $( + const either = yield* pipe( stream, Stream.mapEffect((chunk) => Ref.update(ref, Chunk.append(Array.from(chunk)))), Stream.runCollect, Effect.either ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) assertLeft(either, "Ouch") deepStrictEqual(Array.from(result), [[1, 2, 3], [4, 5, 6], [7, 8]]) })) it.effect("groupedWithin - group based on time passed", () => - Effect.gen(function*($) { - const coordination = yield* $(chunkCoordination([ + Effect.gen(function*() { + const coordination = yield* (chunkCoordination([ Chunk.make(1, 2), Chunk.make(3, 4), Chunk.of(5) @@ -179,19 +179,19 @@ describe("Stream", () => { Stream.groupedWithin(10, Duration.seconds(2)), Stream.tap(() => coordination.proceed) ) - const fiber = yield* $(Effect.fork(Stream.runCollect(stream))) - yield* $( + const fiber = yield* (Effect.fork(Stream.runCollect(stream))) + yield* pipe( coordination.offer, Effect.zipRight(TestClock.adjust(Duration.seconds(2))), Effect.zipRight(coordination.awaitNext) ) - yield* $( + yield* pipe( coordination.offer, Effect.zipRight(TestClock.adjust(Duration.seconds(2))), Effect.zipRight(coordination.awaitNext) ) - yield* $(coordination.offer) - const result = yield* $(Fiber.join(fiber)) + yield* (coordination.offer) + const result = yield* (Fiber.join(fiber)) deepStrictEqual( Array.from(result).map((chunk) => Array.from(chunk)), [[1, 2], [3, 4], [5]] @@ -199,15 +199,15 @@ describe("Stream", () => { })) it.effect("groupedWithin - group based on time passed (ZIO Issue #5013)", () => - Effect.gen(function*($) { - const coordination = yield* $( + Effect.gen(function*() { + const coordination = yield* pipe( Chunk.range(1, 29), Chunk.map(Chunk.of), chunkCoordination ) - const latch = yield* $(Handoff.make()) - const ref = yield* $(Ref.make(0)) - const fiber = yield* $( + const latch = yield* (Handoff.make()) + const ref = yield* (Ref.make(0)) + const fiber = yield* pipe( Stream.fromQueue(coordination.queue), Stream.filterMapWhile(Exit.match({ onSuccess: Option.some, @@ -225,66 +225,66 @@ describe("Stream", () => { Stream.run(Sink.take(5)), Effect.fork ) - yield* $( + yield* pipe( coordination.offer, Effect.zipRight(TestClock.adjust(Duration.seconds(1))), Effect.zipRight(coordination.awaitNext) ) - yield* $( + yield* pipe( coordination.offer, Effect.zipRight(TestClock.adjust(Duration.seconds(1))), Effect.zipRight(coordination.awaitNext) ) - yield* $( + yield* pipe( coordination.offer, Effect.zipRight(TestClock.adjust(Duration.seconds(1))), Effect.zipRight(coordination.awaitNext) ) - const result1 = yield* $( + const result1 = yield* pipe( Handoff.take(latch), Effect.zipRight(Ref.get(ref)) ) - yield* $( + yield* pipe( coordination.offer, Effect.zipRight(TestClock.adjust(Duration.seconds(1))), Effect.zipRight(coordination.awaitNext) ) - yield* $( + yield* pipe( coordination.offer, Effect.zipRight(TestClock.adjust(Duration.seconds(1))), Effect.zipRight(coordination.awaitNext) ) - yield* $( + yield* pipe( coordination.offer, Effect.zipRight(TestClock.adjust(Duration.seconds(1))), Effect.zipRight(coordination.awaitNext) ) - const result2 = yield* $( + const result2 = yield* pipe( Handoff.take(latch), Effect.zipRight(Ref.get(ref)) ) - yield* $( + yield* pipe( coordination.offer, Effect.zipRight(TestClock.adjust(Duration.seconds(1))), Effect.zipRight(coordination.awaitNext) ) - yield* $( + yield* pipe( coordination.offer, Effect.zipRight(TestClock.adjust(Duration.seconds(1))), Effect.zipRight(coordination.awaitNext) ) - yield* $( + yield* pipe( coordination.offer, Effect.zipRight(TestClock.adjust(Duration.seconds(1))), Effect.zipRight(coordination.awaitNext) ) - const result3 = yield* $( + const result3 = yield* pipe( Handoff.take(latch), Effect.zipRight(Ref.get(ref)) ) // This part is to make sure schedule clock is being restarted when the // specified amount of elements has been reached. - yield* $( + yield* pipe( TestClock.adjust(Duration.seconds(2)), Effect.zipRight( pipe( @@ -294,11 +294,11 @@ describe("Stream", () => { ) ) ) - const result4 = yield* $( + const result4 = yield* pipe( Handoff.take(latch), Effect.zipRight(Ref.get(ref)) ) - yield* $( + yield* pipe( coordination.offer, Effect.zipRight(coordination.awaitNext), Effect.zipRight(TestClock.adjust(Duration.seconds(2))), @@ -310,11 +310,11 @@ describe("Stream", () => { ) ) ) - const result5 = yield* $( + const result5 = yield* pipe( Handoff.take(latch), Effect.zipRight(Ref.get(ref)) ) - const result = yield* $(Fiber.join(fiber)) + const result = yield* (Fiber.join(fiber)) deepStrictEqual( Array.from(result).map((chunk) => Array.from(chunk)), [ @@ -333,8 +333,8 @@ describe("Stream", () => { })) it.effect("groupedWithin - group immediately when chunk size is reached", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 2, 3, 4), Stream.groupedWithin(2, Duration.seconds(10)), Stream.runCollect @@ -346,8 +346,8 @@ describe("Stream", () => { })) it.effect("groupAdjacentBy - one big chunk", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.fromIterable([ { code: 1, message: "A" }, { code: 1, message: "B" }, @@ -373,8 +373,8 @@ describe("Stream", () => { })) it.effect("groupAdjacentBy - several single element chunks", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.fromChunks( Chunk.make({ code: 1, message: "A" }), Chunk.make({ code: 1, message: "B" }), @@ -400,8 +400,8 @@ describe("Stream", () => { })) it.effect("groupAdjacentBy - group across chunks", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.fromChunks( Chunk.make({ code: 1, message: "A" }, { code: 1, message: "B" }), Chunk.make({ code: 1, message: "D" }, { code: 2, message: "C" }) diff --git a/packages/effect/test/Stream/halting.test.ts b/packages/effect/test/Stream/halting.test.ts index 2d37c7d3dc..3ab8a4bc85 100644 --- a/packages/effect/test/Stream/halting.test.ts +++ b/packages/effect/test/Stream/halting.test.ts @@ -4,6 +4,7 @@ import * as Duration from "effect/Duration" import * as Effect from "effect/Effect" import * as Exit from "effect/Exit" import * as Fiber from "effect/Fiber" +import { pipe } from "effect/Function" import * as Option from "effect/Option" import * as Queue from "effect/Queue" import * as Ref from "effect/Ref" @@ -16,11 +17,11 @@ import { describe } from "vitest" describe("Stream", () => { it.effect("haltWhen - halts after the current element", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(false)) - const latch = yield* $(Deferred.make()) - const halt = yield* $(Deferred.make()) - yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(false)) + const latch = yield* (Deferred.make()) + const halt = yield* (Deferred.make()) + yield* pipe( Deferred.await(latch), Effect.onInterrupt(() => Ref.set(ref, true)), Stream.fromEffect, @@ -28,17 +29,17 @@ describe("Stream", () => { Stream.runDrain, Effect.fork ) - yield* $(Deferred.succeed(halt, void 0)) - yield* $(Deferred.succeed(latch, void 0)) - const result = yield* $(Ref.get(ref)) + yield* (Deferred.succeed(halt, void 0)) + yield* (Deferred.succeed(latch, void 0)) + const result = yield* (Ref.get(ref)) assertFalse(result) })) it.effect("haltWhen - propagates errors", () => - Effect.gen(function*($) { - const halt = yield* $(Deferred.make()) - yield* $(Deferred.fail(halt, "fail")) - const result = yield* $( + Effect.gen(function*() { + const halt = yield* (Deferred.make()) + yield* (Deferred.fail(halt, "fail")) + const result = yield* pipe( Stream.make(0), Stream.forever, Stream.haltWhen(Deferred.await(halt)), @@ -49,11 +50,11 @@ describe("Stream", () => { })) it.effect("haltWhenDeferred - halts after the current element", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(false)) - const latch = yield* $(Deferred.make()) - const halt = yield* $(Deferred.make()) - yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(false)) + const latch = yield* (Deferred.make()) + const halt = yield* (Deferred.make()) + yield* pipe( Deferred.await(latch), Effect.onInterrupt(() => Ref.set(ref, true)), Stream.fromEffect, @@ -61,17 +62,17 @@ describe("Stream", () => { Stream.runDrain, Effect.fork ) - yield* $(Deferred.succeed(halt, void 0)) - yield* $(Deferred.succeed(latch, void 0)) - const result = yield* $(Ref.get(ref)) + yield* (Deferred.succeed(halt, void 0)) + yield* (Deferred.succeed(latch, void 0)) + const result = yield* (Ref.get(ref)) assertFalse(result) })) it.effect("haltWhenDeferred - propagates errors", () => - Effect.gen(function*($) { - const halt = yield* $(Deferred.make()) - yield* $(Deferred.fail(halt, "fail")) - const result = yield* $( + Effect.gen(function*() { + const halt = yield* (Deferred.make()) + yield* (Deferred.fail(halt, "fail")) + const result = yield* pipe( Stream.make(1), Stream.haltWhenDeferred(halt), Stream.runDrain, @@ -81,14 +82,14 @@ describe("Stream", () => { })) it.effect("haltAfter - halts after the given duration", () => - Effect.gen(function*($) { - const coordination = yield* $(chunkCoordination([ + Effect.gen(function*() { + const coordination = yield* (chunkCoordination([ Chunk.of(1), Chunk.of(2), Chunk.of(3), Chunk.of(4) ])) - const fiber = yield* $( + const fiber = yield* pipe( Stream.fromQueue(coordination.queue), Stream.filterMapWhile(Exit.match({ onFailure: Option.none, @@ -99,23 +100,23 @@ describe("Stream", () => { Stream.runCollect, Effect.fork ) - yield* $( + yield* pipe( coordination.offer, Effect.zipRight(TestClock.adjust(Duration.seconds(3))), Effect.zipRight(coordination.awaitNext) ) - yield* $( + yield* pipe( coordination.offer, Effect.zipRight(TestClock.adjust(Duration.seconds(3))), Effect.zipRight(coordination.awaitNext) ) - yield* $( + yield* pipe( coordination.offer, Effect.zipRight(TestClock.adjust(Duration.seconds(3))), Effect.zipRight(coordination.awaitNext) ) - yield* $(coordination.offer) - const result = yield* $(Fiber.join(fiber)) + yield* (coordination.offer) + const result = yield* (Fiber.join(fiber)) deepStrictEqual( Array.from(result).map((chunk) => Array.from(chunk)), [[1], [2], [3]] @@ -123,17 +124,17 @@ describe("Stream", () => { })) it.effect("haltAfter - will process first chunk", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.unbounded()) - const fiber = yield* $( + Effect.gen(function*() { + const queue = yield* (Queue.unbounded()) + const fiber = yield* pipe( Stream.fromQueue(queue), Stream.haltAfter(Duration.seconds(5)), Stream.runCollect, Effect.fork ) - yield* $(TestClock.adjust(Duration.seconds(6))) - yield* $(Queue.offer(queue, 1)) - const result = yield* $(Fiber.join(fiber)) + yield* (TestClock.adjust(Duration.seconds(6))) + yield* (Queue.offer(queue, 1)) + const result = yield* (Fiber.join(fiber)) deepStrictEqual(Array.from(result), [1]) })) }) diff --git a/packages/effect/test/Stream/interleaving.test.ts b/packages/effect/test/Stream/interleaving.test.ts index faa851fdc9..b299b0e1fe 100644 --- a/packages/effect/test/Stream/interleaving.test.ts +++ b/packages/effect/test/Stream/interleaving.test.ts @@ -9,10 +9,10 @@ import { describe } from "vitest" describe("Stream", () => { it.effect("interleave", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream1 = Stream.make(2, 3) const stream2 = Stream.make(5, 6, 7) - const result = yield* $( + const result = yield* pipe( stream1, Stream.interleave(stream2), Stream.runCollect @@ -21,7 +21,7 @@ describe("Stream", () => { })) it.effect("interleaveWith", () => - Effect.gen(function*($) { + Effect.gen(function*() { const interleave = ( bools: Chunk.Chunk, numbers1: Chunk.Chunk, @@ -62,14 +62,14 @@ describe("Stream", () => { const boolStream = Stream.make(true, true, false, true, false) const stream1 = Stream.make(1, 2, 3, 4, 5) const stream2 = Stream.make(4, 5, 6, 7, 8) - const interleavedStream = yield* $( + const interleavedStream = yield* pipe( stream1, Stream.interleaveWith(stream2, boolStream), Stream.runCollect ) - const bools = yield* $(Stream.runCollect(boolStream)) - const numbers1 = yield* $(Stream.runCollect(stream1)) - const numbers2 = yield* $(Stream.runCollect(stream2)) + const bools = yield* (Stream.runCollect(boolStream)) + const numbers1 = yield* (Stream.runCollect(stream1)) + const numbers2 = yield* (Stream.runCollect(stream2)) const interleavedChunks = interleave(bools, numbers1, numbers2) deepStrictEqual(Array.from(interleavedStream), Array.from(interleavedChunks)) })) diff --git a/packages/effect/test/Stream/interrupting.test.ts b/packages/effect/test/Stream/interrupting.test.ts index e19089ab8d..bffbad6a79 100644 --- a/packages/effect/test/Stream/interrupting.test.ts +++ b/packages/effect/test/Stream/interrupting.test.ts @@ -18,14 +18,14 @@ import { describe } from "vitest" describe("Stream", () => { it.effect("interruptWhen - preserves the scope of inner fibers", () => - Effect.gen(function*($) { - const deferred = yield* $(Deferred.make()) - const queue1 = yield* $(Queue.unbounded>()) - const queue2 = yield* $(Queue.unbounded>()) - yield* $(Queue.offer(queue1, Chunk.of(1))) - yield* $(Queue.offer(queue2, Chunk.of(2))) - yield* $(Queue.offer(queue1, Chunk.of(3)), Effect.fork) - yield* $(Queue.offer(queue2, Chunk.of(4)), Effect.fork) + Effect.gen(function*() { + const deferred = yield* (Deferred.make()) + const queue1 = yield* (Queue.unbounded>()) + const queue2 = yield* (Queue.unbounded>()) + yield* (Queue.offer(queue1, Chunk.of(1))) + yield* (Queue.offer(queue2, Chunk.of(2))) + yield* pipe(Queue.offer(queue1, Chunk.of(3)), Effect.fork) + yield* pipe(Queue.offer(queue2, Chunk.of(4)), Effect.fork) const stream1 = Stream.fromChunkQueue(queue1) const stream2 = Stream.fromChunkQueue(queue2) const stream = pipe( @@ -34,17 +34,17 @@ describe("Stream", () => { Stream.interruptWhen(Deferred.await(deferred)), Stream.take(3) ) - const result = yield* $(Stream.runDrain(stream)) + const result = yield* (Stream.runDrain(stream)) strictEqual(result, undefined) })) it.effect("interruptWhen - interrupts the current element", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(false)) - const latch = yield* $(Deferred.make()) - const halt = yield* $(Deferred.make()) - const started = yield* $(Deferred.make()) - const fiber = yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(false)) + const latch = yield* (Deferred.make()) + const halt = yield* (Deferred.make()) + const started = yield* (Deferred.make()) + const fiber = yield* pipe( Stream.fromEffect(pipe( Deferred.succeed(started, void 0), Effect.zipRight(Deferred.await(latch)), @@ -54,20 +54,20 @@ describe("Stream", () => { Stream.runDrain, Effect.fork ) - yield* $( + yield* pipe( Deferred.await(started), Effect.zipRight(Deferred.succeed(halt, void 0)) ) - yield* $(Fiber.await(fiber)) - const result = yield* $(Ref.get(ref)) + yield* (Fiber.await(fiber)) + const result = yield* (Ref.get(ref)) assertTrue(result) })) it.effect("interruptWhen - propagates errors", () => - Effect.gen(function*($) { - const halt = yield* $(Deferred.make()) - yield* $(Deferred.fail(halt, "fail")) - const result = yield* $( + Effect.gen(function*() { + const halt = yield* (Deferred.make()) + yield* (Deferred.fail(halt, "fail")) + const result = yield* pipe( Stream.never, Stream.interruptWhen(Deferred.await(halt)), Stream.runDrain, @@ -77,12 +77,12 @@ describe("Stream", () => { })) it.effect("interruptWhenDeferred - interrupts the current element", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(false)) - const latch = yield* $(Deferred.make()) - const halt = yield* $(Deferred.make()) - const started = yield* $(Deferred.make()) - const fiber = yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(false)) + const latch = yield* (Deferred.make()) + const halt = yield* (Deferred.make()) + const started = yield* (Deferred.make()) + const fiber = yield* pipe( Stream.fromEffect(pipe( Deferred.succeed(started, void 0), Effect.zipRight(Deferred.await(latch)), @@ -92,20 +92,20 @@ describe("Stream", () => { Stream.runDrain, Effect.fork ) - yield* $( + yield* pipe( Deferred.await(started), Effect.zipRight(Deferred.succeed(halt, void 0)) ) - yield* $(Fiber.await(fiber)) - const result = yield* $(Ref.get(ref)) + yield* (Fiber.await(fiber)) + const result = yield* (Ref.get(ref)) assertTrue(result) })) it.effect("interruptWhenDeferred - propagates errors", () => - Effect.gen(function*($) { - const halt = yield* $(Deferred.make()) - yield* $(Deferred.fail(halt, "fail")) - const result = yield* $( + Effect.gen(function*() { + const halt = yield* (Deferred.make()) + yield* (Deferred.fail(halt, "fail")) + const result = yield* pipe( Stream.never, Stream.interruptWhenDeferred(halt), Stream.runDrain, @@ -115,14 +115,14 @@ describe("Stream", () => { })) it.effect("interruptAfter - halts after the given duration", () => - Effect.gen(function*($) { - const coordination = yield* $(chunkCoordination([ + Effect.gen(function*() { + const coordination = yield* (chunkCoordination([ Chunk.of(1), Chunk.of(2), Chunk.of(3), Chunk.of(4) ])) - const fiber = yield* $( + const fiber = yield* pipe( Stream.fromQueue(coordination.queue), Stream.filterMapWhile(Exit.match({ onFailure: Option.none, @@ -133,18 +133,18 @@ describe("Stream", () => { Stream.runCollect, Effect.fork ) - yield* $( + yield* pipe( coordination.offer, Effect.zipRight(TestClock.adjust(Duration.seconds(3))), Effect.zipRight(coordination.awaitNext) ) - yield* $( + yield* pipe( coordination.offer, Effect.zipRight(TestClock.adjust(Duration.seconds(3))), Effect.zipRight(coordination.awaitNext) ) - yield* $(coordination.offer) - const result = yield* $(Fiber.join(fiber)) + yield* (coordination.offer) + const result = yield* (Fiber.join(fiber)) deepStrictEqual( Array.from(result).map((chunk) => Array.from(chunk)), [[1], [2]] @@ -152,17 +152,17 @@ describe("Stream", () => { })) it.effect("interruptAfter - will process first chunk", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.unbounded()) - const fiber = yield* $( + Effect.gen(function*() { + const queue = yield* (Queue.unbounded()) + const fiber = yield* pipe( Stream.fromQueue(queue), Stream.interruptAfter(Duration.seconds(5)), Stream.runCollect, Effect.fork ) - yield* $(TestClock.adjust(Duration.seconds(6))) - yield* $(Queue.offer(queue, 1)) - const result = yield* $(Fiber.join(fiber)) + yield* (TestClock.adjust(Duration.seconds(6))) + yield* (Queue.offer(queue, 1)) + const result = yield* (Fiber.join(fiber)) deepStrictEqual(Array.from(result), []) })) diff --git a/packages/effect/test/Stream/interspersing.test.ts b/packages/effect/test/Stream/interspersing.test.ts index 74b867e114..8324758009 100644 --- a/packages/effect/test/Stream/interspersing.test.ts +++ b/packages/effect/test/Stream/interspersing.test.ts @@ -1,5 +1,6 @@ import * as Chunk from "effect/Chunk" import * as Effect from "effect/Effect" +import { pipe } from "effect/Function" import * as Stream from "effect/Stream" import { deepStrictEqual } from "effect/test/util" import * as it from "effect/test/utils/extend" @@ -7,8 +8,8 @@ import { describe } from "vitest" describe("Stream", () => { it.effect("intersperse - several values", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 2, 3, 4), Stream.map(String), Stream.intersperse("."), @@ -18,8 +19,8 @@ describe("Stream", () => { })) it.effect("intersperseAffixes - several values", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 2, 3, 4), Stream.map(String), Stream.intersperseAffixes({ start: "[", middle: ".", end: "]" }), @@ -29,8 +30,8 @@ describe("Stream", () => { })) it.effect("intersperse - single value", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1), Stream.map(String), Stream.intersperse("."), @@ -40,8 +41,8 @@ describe("Stream", () => { })) it.effect("intersperseAffixes - single value", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1), Stream.map(String), Stream.intersperseAffixes({ start: "[", middle: ".", end: "]" }), @@ -51,8 +52,8 @@ describe("Stream", () => { })) it.effect("intersperse - several from repeat effect (ZIO #3729)", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.repeatEffect(Effect.succeed(42)), Stream.map(String), Stream.take(4), @@ -63,8 +64,8 @@ describe("Stream", () => { })) it.effect("intersperse - several from repeat effect chunk single element (ZIO #3729)", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.repeatEffectChunk(Effect.succeed(Chunk.of(42))), Stream.map(String), Stream.intersperse("."), diff --git a/packages/effect/test/Stream/lifecycle.test.ts b/packages/effect/test/Stream/lifecycle.test.ts index 84910c9877..ad58854493 100644 --- a/packages/effect/test/Stream/lifecycle.test.ts +++ b/packages/effect/test/Stream/lifecycle.test.ts @@ -1,4 +1,5 @@ import * as Effect from "effect/Effect" +import { pipe } from "effect/Function" import * as Stream from "effect/Stream" import { deepStrictEqual, strictEqual } from "effect/test/util" import * as it from "effect/test/utils/extend" @@ -6,9 +7,9 @@ import { describe } from "vitest" describe("Stream", () => { it.effect("onStart", () => - Effect.gen(function*($) { + Effect.gen(function*() { let counter = 0 - const result = yield* $( + const result = yield* pipe( Stream.make(1, 1), Stream.onStart(Effect.sync(() => counter++)), Stream.runCollect @@ -18,9 +19,9 @@ describe("Stream", () => { })) it.effect("onEnd", () => - Effect.gen(function*($) { + Effect.gen(function*() { let counter = 0 - const result = yield* $( + const result = yield* pipe( Stream.make(1, 2, 3), Stream.onEnd(Effect.sync(() => counter++)), Stream.runCollect diff --git a/packages/effect/test/Stream/mapping.test.ts b/packages/effect/test/Stream/mapping.test.ts index 0e0f6ea4c0..87103ba8e5 100644 --- a/packages/effect/test/Stream/mapping.test.ts +++ b/packages/effect/test/Stream/mapping.test.ts @@ -17,10 +17,10 @@ import { describe } from "vitest" describe("Stream", () => { it.effect("map", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = Stream.make(1, 2, 3, 4, 5) const f = (n: number) => n * 2 - const { result1, result2 } = yield* $(Effect.all({ + const { result1, result2 } = yield* (Effect.all({ result1: pipe(stream, Stream.map(f), Stream.runCollect), result2: pipe(Stream.runCollect(stream), Effect.map(Chunk.map(f))) })) @@ -28,8 +28,8 @@ describe("Stream", () => { })) it.effect("mapAccum", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 1, 1), Stream.mapAccum(0, (acc, curr) => [acc + curr, acc + curr]), Stream.runCollect @@ -38,8 +38,8 @@ describe("Stream", () => { })) it.effect("mapAccumEffect - happy path", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 1, 1), Stream.mapAccumEffect(0, (acc, curr) => Effect.succeed([acc + curr, acc + curr])), Stream.runCollect @@ -48,8 +48,8 @@ describe("Stream", () => { })) it.effect("mapAccumEffect - error", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 1, 1), Stream.mapAccumEffect(0, () => Effect.fail("Ouch")), Stream.runCollect, @@ -59,8 +59,8 @@ describe("Stream", () => { })) it.effect("mapAccumEffect - laziness on chunks", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 2, 3), Stream.mapAccumEffect(void 0, (_, n) => n === 3 ? @@ -76,10 +76,10 @@ describe("Stream", () => { })) it.effect("mapConcat", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = Stream.make(1, 2, 3, 4, 5) const f = (n: number) => Chunk.of(n) - const { result1, result2 } = yield* $(Effect.all({ + const { result1, result2 } = yield* (Effect.all({ result1: pipe(stream, Stream.mapConcat(f), Stream.runCollect), result2: pipe(Stream.runCollect(stream), Effect.map(Chunk.flatMap((n) => f(n)))) })) @@ -87,10 +87,10 @@ describe("Stream", () => { })) it.effect("mapConcatChunk", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = Stream.make(1, 2, 3, 4, 5) const f = (n: number) => Chunk.of(n) - const { result1, result2 } = yield* $(Effect.all({ + const { result1, result2 } = yield* (Effect.all({ result1: pipe(stream, Stream.mapConcatChunk(f), Stream.runCollect), result2: pipe(Stream.runCollect(stream), Effect.map(Chunk.flatMap((n) => f(n)))) })) @@ -98,10 +98,10 @@ describe("Stream", () => { })) it.effect("mapConcatChunkEffect - happy path", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = Stream.make(1, 2, 3, 4, 5) const f = (n: number) => Chunk.of(n) - const { result1, result2 } = yield* $(Effect.all({ + const { result1, result2 } = yield* (Effect.all({ result1: pipe(stream, Stream.mapConcatChunkEffect((n) => Effect.succeed(f(n))), Stream.runCollect), result2: pipe(Stream.runCollect(stream), Effect.map(Chunk.flatMap((n) => f(n)))) })) @@ -109,8 +109,8 @@ describe("Stream", () => { })) it.effect("mapConcatChunkEffect - error", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 2, 3), Stream.mapConcatChunkEffect(() => Effect.fail("Ouch")), Stream.runCollect, @@ -120,10 +120,10 @@ describe("Stream", () => { })) it.effect("mapConcatEffect - happy path", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = Stream.make(1, 2, 3, 4, 5) const f = (n: number) => Chunk.of(n) - const { result1, result2 } = yield* $(Effect.all({ + const { result1, result2 } = yield* (Effect.all({ result1: pipe(stream, Stream.mapConcatEffect((n) => Effect.succeed(f(n))), Stream.runCollect), result2: pipe(Stream.runCollect(stream), Effect.map(Chunk.flatMap((n) => f(n)))) })) @@ -131,8 +131,8 @@ describe("Stream", () => { })) it.effect("mapConcatEffect - error", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 2, 3), Stream.mapConcatEffect(() => Effect.fail("Ouch")), Stream.runCollect, @@ -142,8 +142,8 @@ describe("Stream", () => { })) it.effect("mapError", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.fail("123"), Stream.mapError((n) => Number.parseInt(n)), Stream.runCollect, @@ -153,8 +153,8 @@ describe("Stream", () => { })) it.effect("mapErrorCause", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.failCause(Cause.fail("123")), Stream.mapErrorCause(Cause.map((s) => Number.parseInt(s))), Stream.runCollect, @@ -164,11 +164,11 @@ describe("Stream", () => { })) it.effect("mapEffect - Effect.forEach equivalence", () => - Effect.gen(function*($) { + Effect.gen(function*() { const chunk = Chunk.make(1, 2, 3, 4, 5) const stream = Stream.fromIterable(chunk) const f = (n: number) => Effect.succeed(n * 2) - const { result1, result2 } = yield* $(Effect.all({ + const { result1, result2 } = yield* (Effect.all({ result1: pipe(stream, Stream.mapEffect(f), Stream.runCollect), result2: pipe(chunk, Effect.forEach(f)) })) @@ -176,8 +176,8 @@ describe("Stream", () => { })) it.effect("mapEffect - laziness on chunks", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 2, 3), Stream.mapEffect((n) => n === 3 ? @@ -194,12 +194,12 @@ describe("Stream", () => { })) it.effect("mapEffectPar - Effect.forEachParN equivalence", () => - Effect.gen(function*($) { + Effect.gen(function*() { const concurrency = 8 const chunk = Chunk.make(1, 2, 3, 4, 5) const stream = Stream.fromIterable(chunk) const f = (n: number) => Effect.succeed(n * 2) - const { result1, result2 } = yield* $(Effect.all({ + const { result1, result2 } = yield* (Effect.all({ result1: pipe(stream, Stream.mapEffect(f, { concurrency }), Stream.runCollect), result2: Effect.forEach(chunk, f, { concurrency }) })) @@ -207,22 +207,22 @@ describe("Stream", () => { })) it.effect("mapEffectPar - ordering when parallelism is 1", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.unbounded()) - yield* $( + Effect.gen(function*() { + const queue = yield* (Queue.unbounded()) + yield* pipe( Stream.range(0, 8), Stream.mapEffect((n) => pipe(Queue.offer(queue, n)), { concurrency: 1 }), Stream.runDrain ) - const result = yield* $(Queue.takeAll(queue)) + const result = yield* (Queue.takeAll(queue)) deepStrictEqual(Array.from(result), [0, 1, 2, 3, 4, 5, 6, 7, 8]) })) it.effect("mapEffectPar - interruption propagation", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(false)) - const latch = yield* $(Deferred.make()) - const fiber = yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(false)) + const latch = yield* (Deferred.make()) + const fiber = yield* pipe( Stream.make(void 0), Stream.mapEffect(() => pipe( @@ -233,18 +233,18 @@ describe("Stream", () => { Stream.runDrain, Effect.fork ) - yield* $(Deferred.await(latch)) - yield* $(Fiber.interrupt(fiber)) - const result = yield* $(Ref.get(ref)) + yield* (Deferred.await(latch)) + yield* (Fiber.interrupt(fiber)) + const result = yield* (Ref.get(ref)) assertTrue(result) })) it.effect("mapEffectPar - guarantees ordering", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 4096 const chunk = Chunk.make(1, 2, 3, 4, 5) const stream = Stream.fromChunk(chunk) - const { result1, result2 } = yield* $(Effect.all({ + const { result1, result2 } = yield* (Effect.all({ result1: pipe(stream, Stream.mapEffect(Effect.succeed), Stream.runCollect), result2: pipe(stream, Stream.mapEffect(Effect.succeed, { concurrency: n }), Stream.runCollect) })) @@ -252,8 +252,8 @@ describe("Stream", () => { })) it.effect("mapEffectPar - awaits child fibers properly", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.fromIterable(Chunk.range(0, 10)), Stream.interruptWhen(Effect.never), Stream.mapEffect(() => pipe(Effect.succeed(1), Effect.repeatN(200)), { concurrency: 8 }), @@ -264,11 +264,11 @@ describe("Stream", () => { })) it.effect("mapEffectPar - interrupts pending tasks when one of the tasks fails", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - const latch1 = yield* $(Deferred.make()) - const latch2 = yield* $(Deferred.make()) - const result = yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + const latch1 = yield* (Deferred.make()) + const latch2 = yield* (Deferred.make()) + const result = yield* pipe( Stream.make(1, 2, 3), Stream.mapEffect( (n) => @@ -294,14 +294,14 @@ describe("Stream", () => { Stream.runDrain, Effect.exit ) - const count = yield* $(Ref.get(ref)) + const count = yield* (Ref.get(ref)) strictEqual(count, 2) deepStrictEqual(result, Exit.fail("boom")) })) it.effect("mapEffectPar - propagates the correct error with subsequent calls to mapEffectPar (ZIO #4514)", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.fromIterable(Chunk.range(1, 50)), Stream.mapEffect((n) => n < 10 ? Effect.succeed(n) : Effect.fail("boom"), { concurrency: 20 }), Stream.mapEffect((n) => Effect.succeed(n), { concurrency: 20 }), @@ -312,22 +312,22 @@ describe("Stream", () => { })) it.effect("mapEffectPar - propagates the error of the original stream", () => - Effect.gen(function*($) { - const fiber = yield* $( + Effect.gen(function*() { + const fiber = yield* pipe( Stream.range(1, 10), Stream.concat(Stream.fail(new Cause.RuntimeException("boom"))), Stream.mapEffect(() => Effect.sleep(Duration.seconds(1)), { concurrency: 2 }), Stream.runDrain, Effect.fork ) - yield* $(TestClock.adjust(Duration.seconds(5))) - const exit = yield* $(Fiber.await(fiber)) + yield* (TestClock.adjust(Duration.seconds(5))) + const exit = yield* (Fiber.await(fiber)) deepStrictEqual(exit, Exit.fail(new Cause.RuntimeException("boom"))) })) it.effect("mapEffectParUnordered - mapping with failure is failure", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.fromIterable(Chunk.range(0, 3)), Stream.mapEffect(() => Effect.fail("fail"), { concurrency: 10, unordered: true }), Stream.runDrain, @@ -337,14 +337,14 @@ describe("Stream", () => { })) it.effect("mapEffect with key", () => - Effect.gen(function*(_) { - const fiber = yield* _( + Effect.gen(function*() { + const fiber = yield* pipe( Stream.make(10, 20, 30, 40), Stream.mapEffect((n) => Effect.delay(Effect.succeed(n), n), { key: identity }), Stream.runCollect, Effect.fork ) - yield* _(TestClock.adjust(40)) + yield* TestClock.adjust(40) const exit = fiber.unsafePoll() assertTrue(Exit.isExit(exit)) assertTrue(Exit.isSuccess(exit)) diff --git a/packages/effect/test/Stream/merging.test.ts b/packages/effect/test/Stream/merging.test.ts index 8cdc4c9b2f..9e4384716c 100644 --- a/packages/effect/test/Stream/merging.test.ts +++ b/packages/effect/test/Stream/merging.test.ts @@ -15,13 +15,13 @@ import { describe } from "vitest" describe("Stream", () => { it.effect("merge - slower stream", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream1 = Stream.make(1, 2, 3, 4) const stream2 = Stream.tap( Stream.make(5, 6, 7, 8), () => TestServices.provideLive(Effect.sleep(Duration.millis(10))) ) - const result = yield* $( + const result = yield* pipe( Stream.merge(stream1, stream2), Stream.runCollect ) @@ -29,8 +29,8 @@ describe("Stream", () => { })) it.effect("mergeAll - short circuiting", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.mergeAll([Stream.never, Stream.make(1)], { concurrency: 2 }), Stream.take(1), Stream.runCollect @@ -53,30 +53,30 @@ describe("Stream", () => { })) it.effect("mergeHaltLeft - terminates as soon as the first stream terminates", () => - Effect.gen(function*($) { - const queue1 = yield* $(Queue.unbounded()) - const queue2 = yield* $(Queue.unbounded()) + Effect.gen(function*() { + const queue1 = yield* (Queue.unbounded()) + const queue2 = yield* (Queue.unbounded()) const stream1 = Stream.fromQueue(queue1) const stream2 = Stream.fromQueue(queue2) - const fiber = yield* $( + const fiber = yield* pipe( stream1, Stream.merge(stream2, { haltStrategy: "left" }), Stream.runCollect, Effect.fork ) - yield* $(Queue.offer(queue1, 1), Effect.zipRight(TestClock.adjust(Duration.seconds(1)))) - yield* $(Queue.offer(queue1, 2), Effect.zipRight(TestClock.adjust(Duration.seconds(1)))) - yield* $(Queue.shutdown(queue1), Effect.zipRight(TestClock.adjust(Duration.seconds(1)))) - yield* $(Queue.offer(queue2, 3)) - const result = yield* $(Fiber.join(fiber)) + yield* pipe(Queue.offer(queue1, 1), Effect.zipRight(TestClock.adjust(Duration.seconds(1)))) + yield* pipe(Queue.offer(queue1, 2), Effect.zipRight(TestClock.adjust(Duration.seconds(1)))) + yield* pipe(Queue.shutdown(queue1), Effect.zipRight(TestClock.adjust(Duration.seconds(1)))) + yield* (Queue.offer(queue2, 3)) + const result = yield* (Fiber.join(fiber)) deepStrictEqual(Array.from(result), [1, 2]) })) it.effect("mergeHaltEither - interrupts pulling on finish", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream1 = Stream.make(1, 2, 3) const stream2 = Stream.fromEffect(pipe(Effect.sleep(Duration.seconds(5)), Effect.as(4))) - const result = yield* $( + const result = yield* pipe( stream1, Stream.merge(stream2, { haltStrategy: "left" }), Stream.runCollect @@ -85,49 +85,49 @@ describe("Stream", () => { })) it.effect("mergeHaltRight - terminates as soon as the second stream terminates", () => - Effect.gen(function*($) { - const queue1 = yield* $(Queue.unbounded()) - const queue2 = yield* $(Queue.unbounded()) + Effect.gen(function*() { + const queue1 = yield* (Queue.unbounded()) + const queue2 = yield* (Queue.unbounded()) const stream1 = Stream.fromQueue(queue1) const stream2 = Stream.fromQueue(queue2) - const fiber = yield* $( + const fiber = yield* pipe( stream1, Stream.merge(stream2, { haltStrategy: "right" }), Stream.runCollect, Effect.fork ) - yield* $(Queue.offer(queue2, 1), Effect.zipRight(TestClock.adjust(Duration.seconds(1)))) - yield* $(Queue.offer(queue2, 2), Effect.zipRight(TestClock.adjust(Duration.seconds(1)))) - yield* $(Queue.shutdown(queue2), Effect.zipRight(TestClock.adjust(Duration.seconds(1)))) - yield* $(Queue.offer(queue1, 3)) - const result = yield* $(Fiber.join(fiber)) + yield* pipe(Queue.offer(queue2, 1), Effect.zipRight(TestClock.adjust(Duration.seconds(1)))) + yield* pipe(Queue.offer(queue2, 2), Effect.zipRight(TestClock.adjust(Duration.seconds(1)))) + yield* pipe(Queue.shutdown(queue2), Effect.zipRight(TestClock.adjust(Duration.seconds(1)))) + yield* (Queue.offer(queue1, 3)) + const result = yield* (Fiber.join(fiber)) deepStrictEqual(Array.from(result), [1, 2]) })) it.effect("mergeHaltEither - terminates as soon as either stream terminates", () => - Effect.gen(function*($) { - const queue1 = yield* $(Queue.unbounded()) - const queue2 = yield* $(Queue.unbounded()) + Effect.gen(function*() { + const queue1 = yield* (Queue.unbounded()) + const queue2 = yield* (Queue.unbounded()) const stream1 = Stream.fromQueue(queue1) const stream2 = Stream.fromQueue(queue2) - const fiber = yield* $( + const fiber = yield* pipe( stream1, Stream.merge(stream2, { haltStrategy: "either" }), Stream.runCollect, Effect.fork ) - yield* $(Queue.shutdown(queue1)) - yield* $(TestClock.adjust(Duration.seconds(1))) - yield* $(Queue.offer(queue2, 1)) - const result = yield* $(Fiber.join(fiber)) + yield* (Queue.shutdown(queue1)) + yield* (TestClock.adjust(Duration.seconds(1))) + yield* (Queue.offer(queue2, 1)) + const result = yield* (Fiber.join(fiber)) assertTrue(Chunk.isEmpty(result)) })) it.effect("merge - equivalence with set union", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream1 = Stream.make(1, 2, 3, 4) const stream2 = Stream.make(5, 6, 7, 8) - const { result1, result2 } = yield* $(Effect.all({ + const { result1, result2 } = yield* (Effect.all({ result1: pipe( stream1, Stream.merge(stream2), @@ -147,8 +147,8 @@ describe("Stream", () => { })) it.effect("merge - fails as soon as one stream fails", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 2, 3), Stream.merge(Stream.fail(void 0)), Stream.runCollect, @@ -158,10 +158,10 @@ describe("Stream", () => { })) it.effect("mergeWith - prioritizes failures", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream1 = Stream.never const stream2 = Stream.fail("Ouch") - const result = yield* $( + const result = yield* pipe( stream1, Stream.mergeWith(stream2, { onSelf: constVoid, onOther: constVoid }), Stream.runCollect, diff --git a/packages/effect/test/Stream/pagination.test.ts b/packages/effect/test/Stream/pagination.test.ts index aeb845a0bd..874b84e71a 100644 --- a/packages/effect/test/Stream/pagination.test.ts +++ b/packages/effect/test/Stream/pagination.test.ts @@ -1,5 +1,6 @@ import * as Chunk from "effect/Chunk" import * as Effect from "effect/Effect" +import { pipe } from "effect/Function" import * as Option from "effect/Option" import * as Stream from "effect/Stream" import { deepStrictEqual } from "effect/test/util" @@ -8,9 +9,9 @@ import { describe } from "vitest" describe("Stream", () => { it.effect("paginate", () => - Effect.gen(function*($) { + Effect.gen(function*() { const s: readonly [number, Array] = [0, [1, 2, 3]] - const result = yield* $( + const result = yield* pipe( Stream.paginate(s, ([n, nums]) => nums.length === 0 ? [n, Option.none()] as const : @@ -21,9 +22,9 @@ describe("Stream", () => { })) it.effect("paginateEffect", () => - Effect.gen(function*($) { + Effect.gen(function*() { const s: readonly [number, Array] = [0, [1, 2, 3]] - const result = yield* $( + const result = yield* pipe( Stream.paginateEffect( s, ( @@ -39,10 +40,10 @@ describe("Stream", () => { })) it.effect("paginateChunk", () => - Effect.gen(function*($) { + Effect.gen(function*() { const s: readonly [Chunk.Chunk, Array] = [Chunk.of(0), [1, 2, 3, 4, 5]] const pageSize = 2 - const result = yield* $( + const result = yield* pipe( Stream.paginateChunk(s, ([chunk, nums]) => nums.length === 0 ? [chunk, Option.none()] as const : @@ -61,10 +62,10 @@ describe("Stream", () => { })) it.effect("paginateChunkEffect", () => - Effect.gen(function*($) { + Effect.gen(function*() { const s: readonly [Chunk.Chunk, Array] = [Chunk.of(0), [1, 2, 3, 4, 5]] const pageSize = 2 - const result = yield* $( + const result = yield* pipe( Stream.paginateChunkEffect(s, ([chunk, nums]) => nums.length === 0 ? Effect.succeed([chunk, Option.none, Array]>()] as const) : diff --git a/packages/effect/test/Stream/partitioning.test.ts b/packages/effect/test/Stream/partitioning.test.ts index 040c858cad..0cc2722d9d 100644 --- a/packages/effect/test/Stream/partitioning.test.ts +++ b/packages/effect/test/Stream/partitioning.test.ts @@ -12,7 +12,7 @@ import { describe } from "vitest" describe("Stream", () => { it.effect("partitionEither - allows repeated runs without hanging", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = pipe( Stream.fromIterable(Chunk.empty()), Stream.partitionEither((n) => Effect.succeed(n % 2 === 0 ? Either.left(n) : Either.right(n))), @@ -20,7 +20,7 @@ describe("Stream", () => { Effect.flatMap(Stream.runCollect), Effect.scoped ) - const result = yield* $( + const result = yield* pipe( Effect.all(Array.from({ length: 100 }, () => stream)), Effect.as(0) ) @@ -28,8 +28,8 @@ describe("Stream", () => { })) it.effect("partition - values", () => - Effect.gen(function*($) { - const { result1, result2 } = yield* $( + Effect.gen(function*() { + const { result1, result2 } = yield* pipe( Stream.range(0, 5), Stream.partition((n) => n % 2 === 0), Effect.flatMap(([odds, evens]) => @@ -45,8 +45,8 @@ describe("Stream", () => { })) it.effect("partition - errors", () => - Effect.gen(function*($) { - const { result1, result2 } = yield* $( + Effect.gen(function*() { + const { result1, result2 } = yield* pipe( Stream.make(0), Stream.concat(Stream.fail("boom")), Stream.partition((n) => n % 2 === 0), @@ -63,15 +63,15 @@ describe("Stream", () => { })) it.effect("partition - backpressure", () => - Effect.gen(function*($) { - const { result1, result2, result3 } = yield* $( + Effect.gen(function*() { + const { result1, result2, result3 } = yield* pipe( Stream.range(0, 5), Stream.partition((n) => (n % 2 === 0), { bufferSize: 1 }), Effect.flatMap(([odds, evens]) => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Chunk.empty())) - const latch = yield* $(Deferred.make()) - const fiber = yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(Chunk.empty())) + const latch = yield* (Deferred.make()) + const fiber = yield* pipe( evens, Stream.tap((n) => pipe( @@ -87,11 +87,11 @@ describe("Stream", () => { Stream.runDrain, Effect.fork ) - yield* $(Deferred.await(latch)) - const result1 = yield* $(Ref.get(ref)) - const result2 = yield* $(Stream.runCollect(odds)) - yield* $(Fiber.await(fiber)) - const result3 = yield* $(Ref.get(ref)) + yield* (Deferred.await(latch)) + const result1 = yield* (Ref.get(ref)) + const result2 = yield* (Stream.runCollect(odds)) + yield* (Fiber.await(fiber)) + const result3 = yield* (Ref.get(ref)) return { result1, result2, result3 } }) ), diff --git a/packages/effect/test/Stream/peeling.test.ts b/packages/effect/test/Stream/peeling.test.ts index 6410a6af27..8c67e55854 100644 --- a/packages/effect/test/Stream/peeling.test.ts +++ b/packages/effect/test/Stream/peeling.test.ts @@ -10,9 +10,9 @@ import { describe } from "vitest" describe("Stream", () => { it.effect("peel", () => - Effect.gen(function*($) { + Effect.gen(function*() { const sink = Sink.take(3) - const [peeled, rest] = yield* $( + const [peeled, rest] = yield* pipe( Stream.fromChunks(Chunk.range(1, 3), Chunk.range(4, 6)), Stream.peel(sink), Effect.flatMap(([peeled, rest]) => @@ -28,14 +28,14 @@ describe("Stream", () => { })) it.effect("peel - propagates errors", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = Stream.repeatEffect(Effect.fail("fail")) const sink = Sink.fold, number>( Chunk.empty(), constTrue, Chunk.append ) - const result = yield* $( + const result = yield* pipe( stream, Stream.peel(sink), Effect.exit, diff --git a/packages/effect/test/Stream/racing.test.ts b/packages/effect/test/Stream/racing.test.ts index cd5c44e4c2..3ec9b6b837 100644 --- a/packages/effect/test/Stream/racing.test.ts +++ b/packages/effect/test/Stream/racing.test.ts @@ -1,6 +1,7 @@ import * as Chunk from "effect/Chunk" import * as Effect from "effect/Effect" import * as Fiber from "effect/Fiber" +import { pipe } from "effect/Function" import * as Schedule from "effect/Schedule" import * as Stream from "effect/Stream" import { deepStrictEqual } from "effect/test/util" @@ -10,8 +11,8 @@ import { describe } from "vitest" describe("Stream", () => { it.effect("raceAll sync", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.raceAll( Stream.make(0, 1, 2, 3), Stream.make(4, 5, 6, 7), @@ -24,8 +25,8 @@ describe("Stream", () => { })) it.effect("raceAll async", () => - Effect.gen(function*($) { - const fiber = yield* $( + Effect.gen(function*() { + const fiber = yield* pipe( Stream.raceAll( Stream.fromSchedule(Schedule.spaced("1 second")), Stream.fromSchedule(Schedule.spaced("2 second")) @@ -41,8 +42,8 @@ describe("Stream", () => { })) it.effect("raceAll combined async + sync", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.raceAll( Stream.fromSchedule(Schedule.spaced("1 second")), Stream.make(0, 1, 2, 3) @@ -54,8 +55,8 @@ describe("Stream", () => { })) it.effect("raceAll combined sync + async", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.raceAll( Stream.make(0, 1, 2, 3), Stream.fromSchedule(Schedule.spaced("1 second")) diff --git a/packages/effect/test/Stream/repeating.test.ts b/packages/effect/test/Stream/repeating.test.ts index 026cfeb561..30804eee35 100644 --- a/packages/effect/test/Stream/repeating.test.ts +++ b/packages/effect/test/Stream/repeating.test.ts @@ -18,20 +18,20 @@ import { describe } from "vitest" describe("Stream", () => { it.effect("forever", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + yield* pipe( Stream.make(1), Stream.forever, Stream.runForEachWhile(() => Ref.modify(ref, (sum) => [sum >= 9 ? false : true, sum + 1] as const)) ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) strictEqual(result, 10) })) it.effect("repeat", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1), Stream.repeat(Schedule.recurs(4)), Stream.runCollect @@ -40,38 +40,38 @@ describe("Stream", () => { })) it.effect("tick", () => - Effect.gen(function*($) { - const fiber = yield* $( + Effect.gen(function*() { + const fiber = yield* pipe( Stream.tick("10 millis"), Stream.take(2), Stream.runCollect, Effect.fork ) - yield* $(TestClock.adjust(Duration.millis(50))) - const result = yield* $(Fiber.join(fiber)) + yield* (TestClock.adjust(Duration.millis(50))) + const result = yield* (Fiber.join(fiber)) deepStrictEqual(Array.from(result), [undefined, undefined]) })) it.effect("repeat - short circuits", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Chunk.empty())) - const fiber = yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(Chunk.empty())) + const fiber = yield* pipe( Stream.fromEffect(Ref.update(ref, Chunk.prepend(1))), Stream.repeat(Schedule.spaced(Duration.millis(10))), Stream.take(2), Stream.runDrain, Effect.fork ) - yield* $(TestClock.adjust(Duration.millis(50))) - yield* $(Fiber.join(fiber)) - const result = yield* $(Ref.get(ref)) + yield* (TestClock.adjust(Duration.millis(50))) + yield* (Fiber.join(fiber)) + const result = yield* (Ref.get(ref)) deepStrictEqual(Array.from(result), [1, 1]) })) it.effect("repeat - does not swallow errors on a repetition", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - const result = yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + const result = yield* pipe( Stream.fromEffect(pipe( Ref.getAndUpdate(ref, (n) => n + 1), Effect.flatMap((n) => n <= 2 ? Effect.succeed(n) : Effect.fail("boom")) @@ -84,8 +84,8 @@ describe("Stream", () => { })) it.effect("repeatEither", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1), Stream.repeatEither(Schedule.recurs(4)), Stream.runCollect @@ -104,8 +104,8 @@ describe("Stream", () => { })) it.effect("repeatEffectOption - emit elements", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.repeatEffectOption(Effect.succeed(1)), Stream.take(2), Stream.runCollect @@ -114,9 +114,9 @@ describe("Stream", () => { })) it.effect("repeatEffectOption - emit elements until pull fails with None", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - const result = yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + const result = yield* pipe( Stream.repeatEffectOption( pipe( Ref.updateAndGet(ref, (n) => n + 1), @@ -134,9 +134,9 @@ describe("Stream", () => { })) it.effect("repeatEffectOption - stops evaluating the effect once it fails with None", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + yield* pipe( Stream.repeatEffectOption(pipe( Ref.updateAndGet(ref, (n) => n + 1), Effect.zipRight(Effect.fail(Option.none())) @@ -150,14 +150,14 @@ describe("Stream", () => { ), Effect.scoped ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) strictEqual(result, 1) })) it.effect("repeatEffectWithSchedule", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Chunk.empty())) - const fiber = yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(Chunk.empty())) + const fiber = yield* pipe( Stream.repeatEffectWithSchedule( Ref.update(ref, Chunk.append(1)), Schedule.spaced(Duration.millis(10)) @@ -166,16 +166,16 @@ describe("Stream", () => { Stream.runDrain, Effect.fork ) - yield* $(TestClock.adjust(Duration.millis(50))) - yield* $(Fiber.join(fiber)) - const result = yield* $(Ref.get(ref)) + yield* (TestClock.adjust(Duration.millis(50))) + yield* (Fiber.join(fiber)) + const result = yield* (Ref.get(ref)) deepStrictEqual(Array.from(result), [1, 1]) }), 10000) it.it("repeatEffectWithSchedule - allow schedule to rely on effect value", () => fc.assert(fc.asyncProperty(fc.integer({ min: 1, max: 100 }), async (length) => { - const effect = Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) + const effect = Effect.gen(function*() { + const ref = yield* (Ref.make(0)) const effect = pipe( Ref.getAndUpdate(ref, (n) => n + 1), Effect.filterOrFail( @@ -188,7 +188,7 @@ describe("Stream", () => { Schedule.whileOutput((n) => n < length) ) const stream = Stream.repeatEffectWithSchedule(effect, schedule) - return yield* $( + return yield* pipe( Stream.runCollect(stream), Effect.provide(TestEnvironment.TestContext) ) @@ -198,8 +198,8 @@ describe("Stream", () => { }))) it.effect("repeatEffectWithSchedule - should perform repetitions in addition to the first execution (one repetition)", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.repeatEffectWithSchedule(Effect.succeed(1), Schedule.once), Stream.runCollect ) @@ -207,8 +207,8 @@ describe("Stream", () => { })) it.effect("repeatEffectWithSchedule - should perform repetitions in addition to the first execution (zero repetitions)", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.repeatEffectWithSchedule(Effect.succeed(1), Schedule.stop), Stream.runCollect ) @@ -216,43 +216,43 @@ describe("Stream", () => { })) it.effect("repeatEffectWithSchedule - emits before delaying according to the schedule", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) const schedule = Schedule.spaced(Duration.seconds(1)) - const fiber = yield* $( + const fiber = yield* pipe( Stream.repeatEffectWithSchedule(Effect.void, schedule), Stream.tap(() => Ref.update(ref, (n) => n + 1)), Stream.runDrain, Effect.fork ) - yield* $(TestClock.adjust(Duration.seconds(0))) - const result1 = yield* $(Ref.get(ref)) - yield* $(TestClock.adjust(Duration.seconds(1))) - const result2 = yield* $(Ref.get(ref)) - yield* $(Fiber.interrupt(fiber)) + yield* (TestClock.adjust(Duration.seconds(0))) + const result1 = yield* (Ref.get(ref)) + yield* (TestClock.adjust(Duration.seconds(1))) + const result2 = yield* (Ref.get(ref)) + yield* (Fiber.interrupt(fiber)) strictEqual(result1, 1) strictEqual(result2, 2) })) it.effect("repeatEither - short circuits", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Chunk.empty())) - const fiber = yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(Chunk.empty())) + const fiber = yield* pipe( Stream.fromEffect(Ref.update(ref, Chunk.prepend(1))), Stream.repeatEither(Schedule.spaced(Duration.millis(10))), Stream.take(3), // take one of the schedule outputs Stream.runDrain, Effect.fork ) - yield* $(TestClock.adjust(Duration.millis(50))) - yield* $(Fiber.join(fiber)) - const result = yield* $(Ref.get(ref)) + yield* (TestClock.adjust(Duration.millis(50))) + yield* (Fiber.join(fiber)) + const result = yield* (Ref.get(ref)) deepStrictEqual(Array.from(result), [1, 1]) })) it.effect("repeatElements - simple", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make("A", "B", "C"), Stream.repeatElements(Schedule.once), Stream.runCollect @@ -261,8 +261,8 @@ describe("Stream", () => { })) it.effect("repeatElements - short circuits in a schedule", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make("A", "B", "C"), Stream.repeatElements(Schedule.once), Stream.take(4), @@ -272,8 +272,8 @@ describe("Stream", () => { })) it.effect("repeatElements - short circuits after schedule", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make("A", "B", "C"), Stream.repeatElements(Schedule.once), Stream.take(3), @@ -283,12 +283,12 @@ describe("Stream", () => { })) it.effect("repeatElementsWith", () => - Effect.gen(function*($) { + Effect.gen(function*() { const schedule = pipe( Schedule.recurs(0), Schedule.zipRight(Schedule.fromFunction(() => 123)) ) - const result = yield* $( + const result = yield* pipe( Stream.make("A", "B", "C"), Stream.repeatElementsWith(schedule, { onElement: identity, onSchedule: String }), Stream.runCollect diff --git a/packages/effect/test/Stream/retrying.test.ts b/packages/effect/test/Stream/retrying.test.ts index 4e6b73c8cf..fd1c306587 100644 --- a/packages/effect/test/Stream/retrying.test.ts +++ b/packages/effect/test/Stream/retrying.test.ts @@ -15,13 +15,13 @@ import { describe } from "vitest" describe("Stream", () => { it.effect("retry - retries a failing stream", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) + Effect.gen(function*() { + const ref = yield* Ref.make(0) const stream = pipe( Stream.fromEffect(Ref.getAndUpdate(ref, (n) => n + 1)), Stream.concat(Stream.fail(Option.none())) ) - const result = yield* $( + const result = yield* pipe( stream, Stream.retry(Schedule.forever), Stream.take(2), @@ -31,8 +31,8 @@ describe("Stream", () => { })) it.effect("retry - cleans up resources before restarting the stream", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) + Effect.gen(function*() { + const ref = yield* Ref.make(0) const stream = pipe( Effect.addFinalizer(() => Ref.getAndUpdate(ref, (n) => n + 1)), Effect.as( @@ -43,7 +43,7 @@ describe("Stream", () => { ), Stream.unwrapScoped ) - const result = yield* $( + const result = yield* pipe( stream, Stream.retry(Schedule.forever), Stream.take(2), @@ -53,8 +53,8 @@ describe("Stream", () => { })) it.effect("retry - retries a failing stream according to a schedule", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Chunk.empty())) + Effect.gen(function*() { + const ref = yield* Ref.make(Chunk.empty()) const stream = pipe( Stream.fromEffect( pipe( @@ -64,24 +64,24 @@ describe("Stream", () => { ), Stream.flatMap(() => Stream.fail(Option.none())) ) - const fiber = yield* $( + const fiber = yield* pipe( stream, Stream.retry(Schedule.exponential(Duration.seconds(1))), Stream.take(3), Stream.runDrain, Effect.fork ) - yield* $(TestClock.adjust(Duration.seconds(1))) - yield* $(TestClock.adjust(Duration.seconds(2))) - yield* $(Fiber.interrupt(fiber)) - const result = yield* $(Ref.get(ref), Effect.map(Chunk.map((n) => new Date(n).getSeconds()))) + yield* TestClock.adjust(Duration.seconds(1)) + yield* TestClock.adjust(Duration.seconds(2)) + yield* Fiber.interrupt(fiber) + const result = yield* pipe(Ref.get(ref), Effect.map(Chunk.map((n) => new Date(n).getSeconds()))) deepStrictEqual(Array.from(result), [3, 1, 0]) })) it.effect("retry - reset the schedule after a successful pull", () => - Effect.gen(function*($) { - const times = yield* $(Ref.make(Chunk.empty())) - const ref = yield* $(Ref.make(0)) + Effect.gen(function*() { + const times = yield* Ref.make(Chunk.empty()) + const ref = yield* Ref.make(0) const effect = pipe( Clock.currentTimeMillis, Effect.flatMap((time) => @@ -100,18 +100,18 @@ describe("Stream", () => { ), Stream.forever ) - const fiber = yield* $( + const fiber = yield* pipe( stream, Stream.retry(Schedule.exponential(Duration.seconds(1))), Stream.take(2), Stream.runDrain, Effect.fork ) - yield* $(TestClock.adjust(Duration.seconds(1))) - yield* $(TestClock.adjust(Duration.seconds(2))) - yield* $(TestClock.adjust(Duration.seconds(1))) - yield* $(Fiber.join(fiber)) - const result = yield* $(Ref.get(times)) + yield* TestClock.adjust(Duration.seconds(1)) + yield* TestClock.adjust(Duration.seconds(2)) + yield* TestClock.adjust(Duration.seconds(1)) + yield* Fiber.join(fiber) + const result = yield* Ref.get(times) deepStrictEqual(Array.from(result), [4, 3, 3, 1, 0]) })) }) diff --git a/packages/effect/test/Stream/running.test.ts b/packages/effect/test/Stream/running.test.ts index bf27482da7..aca297581e 100644 --- a/packages/effect/test/Stream/running.test.ts +++ b/packages/effect/test/Stream/running.test.ts @@ -10,8 +10,8 @@ import { describe } from "vitest" describe("Stream", () => { it.effect("runFoldWhile", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 1, 1, 1, 1), Stream.runFoldWhile(0, (n) => n < 3, (x, y) => x + y) ) @@ -19,32 +19,32 @@ describe("Stream", () => { })) it.effect("runForEach - with a small data set", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + yield* pipe( Stream.make(1, 1, 1, 1, 1), Stream.runForEach((i) => Ref.update(ref, (n) => n + i)) ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) strictEqual(result, 5) })) it.effect("runForEach - with a bigger data set", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + yield* pipe( Stream.fromIterable(Array.from({ length: 1_000 }, () => 1)), Stream.runForEach((i) => Ref.update(ref, (n) => n + i)) ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) strictEqual(result, 1_000) })) it.effect("runForEachWhile - with a small data set", () => - Effect.gen(function*($) { + Effect.gen(function*() { const expected = 3 - const ref = yield* $(Ref.make(0)) - yield* $( + const ref = yield* (Ref.make(0)) + yield* pipe( Stream.make(1, 1, 1, 1, 1, 1), Stream.runForEachWhile((n) => pipe( @@ -55,15 +55,15 @@ describe("Stream", () => { ) ) ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) strictEqual(result, expected) })) it.effect("runForEachWhile - with a bigger data set", () => - Effect.gen(function*($) { + Effect.gen(function*() { const expected = 500 - const ref = yield* $(Ref.make(0)) - yield* $( + const ref = yield* (Ref.make(0)) + yield* pipe( Stream.fromIterable(Array.from({ length: 1_000 }, () => 1)), Stream.runForEachWhile((n) => Ref.modify(ref, (sum) => @@ -72,38 +72,38 @@ describe("Stream", () => { [true, sum + n] as const) ) ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) strictEqual(result, expected) })) it.effect("runForEachWhile - short circuits", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(true)) - yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(true)) + yield* pipe( Stream.make(true, true, false), Stream.concat(Stream.drain(Stream.fromEffect(Ref.set(ref, false)))), Stream.runForEachWhile(Effect.succeed) ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) assertTrue(result) })) it.effect("runHead - non-empty stream", () => - Effect.gen(function*($) { - const result = yield* $(Stream.runHead(Stream.make(1, 2, 3, 4))) + Effect.gen(function*() { + const result = yield* (Stream.runHead(Stream.make(1, 2, 3, 4))) assertSome(result, 1) })) it.effect("runHead - empty stream", () => - Effect.gen(function*($) { - const result = yield* $(Stream.runHead(Stream.empty)) + Effect.gen(function*() { + const result = yield* (Stream.runHead(Stream.empty)) assertNone(result) })) it.effect("runHead - pulls up to the first non-empty chunk", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Chunk.empty())) - const head = yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(Chunk.empty())) + const head = yield* pipe( Stream.make( Stream.drain(Stream.fromEffect(Ref.update(ref, Chunk.prepend(1)))), Stream.drain(Stream.fromEffect(Ref.update(ref, Chunk.prepend(2)))), @@ -113,14 +113,14 @@ describe("Stream", () => { Stream.flatten(), Stream.runHead ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) assertSome(head, 1) deepStrictEqual(Array.from(result), [2, 1]) })) it.effect("runLast - non-empty stream", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 2, 3, 4), Stream.runLast ) @@ -128,26 +128,26 @@ describe("Stream", () => { })) it.effect("runLast - empty stream", () => - Effect.gen(function*($) { - const result = yield* $(Stream.empty, Stream.runLast) + Effect.gen(function*() { + const result = yield* pipe(Stream.empty, Stream.runLast) assertNone(result) })) it.effect("runScoped - properly closes resources", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(false)) + Effect.gen(function*() { + const ref = yield* (Ref.make(false)) const resource = Effect.acquireRelease( Effect.succeed(1), () => Ref.set(ref, true) ) const stream = pipe(Stream.scoped(resource), Stream.flatMap((a) => Stream.make(a, a, a))) - const [result, state] = yield* $( + const [result, state] = yield* pipe( stream, Stream.runScoped(Sink.collectAll()), Effect.flatMap((chunk) => pipe(Ref.get(ref), Effect.map((closed) => [chunk, closed] as const))), Effect.scoped ) - const finalState = yield* $(Ref.get(ref)) + const finalState = yield* (Ref.get(ref)) deepStrictEqual(Array.from(result), [1, 1, 1]) assertFalse(state) assertTrue(finalState) diff --git a/packages/effect/test/Stream/scanning.test.ts b/packages/effect/test/Stream/scanning.test.ts index 30605b33c5..467fa1c0e3 100644 --- a/packages/effect/test/Stream/scanning.test.ts +++ b/packages/effect/test/Stream/scanning.test.ts @@ -9,9 +9,9 @@ import { describe } from "vitest" describe("Stream", () => { it.effect("scan", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = Stream.make(1, 2, 3, 4, 5) - const { result1, result2 } = yield* $(Effect.all({ + const { result1, result2 } = yield* Effect.all({ result1: pipe(stream, Stream.scan(0, (acc, curr) => acc + curr), Stream.runCollect), result2: pipe( Stream.runCollect(stream), @@ -22,14 +22,14 @@ describe("Stream", () => { ) ) ) - })) + }) deepStrictEqual(Chunk.toReadonlyArray(result1), result2) })) it.effect("scanReduce", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = Stream.make(1, 2, 3, 4, 5) - const result = yield* $( + const result = yield* pipe( stream, Stream.scanReduce((acc, curr) => acc + curr), Stream.runCollect diff --git a/packages/effect/test/Stream/scheduling.test.ts b/packages/effect/test/Stream/scheduling.test.ts index da4d0d2e4d..d3f4153124 100644 --- a/packages/effect/test/Stream/scheduling.test.ts +++ b/packages/effect/test/Stream/scheduling.test.ts @@ -12,9 +12,9 @@ import { describe } from "vitest" describe("Stream", () => { it.effect("schedule", () => - Effect.gen(function*($) { - const start = yield* $(Clock.currentTimeMillis) - const fiber = yield* $( + Effect.gen(function*() { + const start = yield* Clock.currentTimeMillis + const fiber = yield* pipe( Stream.range(1, 8), Stream.schedule(Schedule.fixed(Duration.millis(100))), Stream.mapEffect((n) => @@ -26,8 +26,8 @@ describe("Stream", () => { Stream.runCollect, Effect.fork ) - yield* $(TestClock.adjust(Duration.millis(800))) - const result = yield* $(Fiber.join(fiber)) + yield* TestClock.adjust(Duration.millis(800)) + const result = yield* Fiber.join(fiber) deepStrictEqual(Array.from(result), [ [1, 100], [2, 200], @@ -41,12 +41,12 @@ describe("Stream", () => { })) it.effect("scheduleWith", () => - Effect.gen(function*($) { + Effect.gen(function*() { const schedule = pipe( Schedule.recurs(2), Schedule.zipRight(Schedule.fromFunction(() => "Done")) ) - const result = yield* $( + const result = yield* pipe( Stream.make("A", "B", "C", "A", "B", "C"), Stream.scheduleWith(schedule, { onElement: (s) => s.toLowerCase(), onSchedule: identity }), Stream.runCollect diff --git a/packages/effect/test/Stream/sequencing.test.ts b/packages/effect/test/Stream/sequencing.test.ts index bacdbd3796..95913d78bc 100644 --- a/packages/effect/test/Stream/sequencing.test.ts +++ b/packages/effect/test/Stream/sequencing.test.ts @@ -22,8 +22,8 @@ const withPermitsScoped = (permits: number) => (semaphore: Effect.Semaphore) => describe("Stream", () => { it.effect("branchAfter - switches streams", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.fromChunk(Chunk.range(0, 5)), Stream.branchAfter(1, (values) => { if (Equal.equals(values, Chunk.make(0))) { @@ -37,8 +37,8 @@ describe("Stream", () => { })) it.effect("branchAfter - emits data if less than n elements are collected", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.fromChunk(Chunk.range(1, 5)), Stream.branchAfter(6, (chunk) => Stream.prepend(Stream.identity(), chunk)), Stream.runCollect @@ -47,8 +47,8 @@ describe("Stream", () => { })) it.effect("branchAfter - applies the new stream once on remaining upstream", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.fromIterable(Chunk.range(1, 5)), Stream.rechunk(2), Stream.branchAfter(1, (chunk) => Stream.prepend(Stream.identity(), chunk)), @@ -58,15 +58,15 @@ describe("Stream", () => { })) it.effect("execute", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Chunk.empty())) - yield* $(Stream.runDrain(Stream.execute(Ref.set(ref, Chunk.fromIterable([1]))))) - const result = yield* $(Ref.get(ref)) + Effect.gen(function*() { + const ref = yield* (Ref.make(Chunk.empty())) + yield* (Stream.runDrain(Stream.execute(Ref.set(ref, Chunk.fromIterable([1]))))) + const result = yield* (Ref.get(ref)) deepStrictEqual(Array.from(result), [1]) })) it.effect("flatMap - deep flatMap stack safety", () => - Effect.gen(function*($) { + Effect.gen(function*() { const fib = (n: number): Stream.Stream => n <= 1 ? Stream.succeed(n) : @@ -79,14 +79,14 @@ describe("Stream", () => { ) ) ) - const result = yield* $(Stream.runCollect(fib(10))) + const result = yield* (Stream.runCollect(fib(10))) deepStrictEqual(Array.from(result), [55]) })) it.effect("flatMap - left identity", () => - Effect.gen(function*($) { + Effect.gen(function*() { const f = (n: number) => Stream.succeed(n * 2) - const { result1, result2 } = yield* $(Effect.all({ + const { result1, result2 } = yield* (Effect.all({ result1: pipe(Stream.make(1), Stream.flatMap(f), Stream.runCollect), result2: Stream.runCollect(f(1)) })) @@ -94,8 +94,8 @@ describe("Stream", () => { })) it.effect("flatMap - right identity", () => - Effect.gen(function*($) { - const { result1, result2 } = yield* $(Effect.all({ + Effect.gen(function*() { + const { result1, result2 } = yield* (Effect.all({ result1: pipe(Stream.make(1), Stream.flatMap((n) => Stream.make(n)), Stream.runCollect), result2: Stream.runCollect(Stream.make(1)) })) @@ -103,11 +103,11 @@ describe("Stream", () => { })) it.effect("flatMap - associativity", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = Stream.range(0, 4) const f = (n: number) => Stream.succeed(n * 2) const g = (n: number) => Stream.succeed(String(n)) - const { result1, result2 } = yield* $(Effect.all({ + const { result1, result2 } = yield* (Effect.all({ result1: pipe(stream, Stream.flatMap(f), Stream.flatMap(g), Stream.runCollect), result2: pipe(stream, Stream.flatMap((n) => pipe(f(n), Stream.flatMap(g))), Stream.runCollect) })) @@ -115,11 +115,11 @@ describe("Stream", () => { })) it.effect("flatMap - inner finalizers", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Chunk.empty())) + Effect.gen(function*() { + const ref = yield* (Ref.make(Chunk.empty())) const push = (n: number) => Ref.update(ref, Chunk.append(n)) - const latch = yield* $(Deferred.make()) - const fiber = yield* $( + const latch = yield* (Deferred.make()) + const fiber = yield* pipe( Stream.make( Stream.acquireRelease(push(1), () => push(1)), Stream.fromEffect(push(2)), @@ -135,18 +135,18 @@ describe("Stream", () => { Stream.runDrain, Effect.fork ) - yield* $(Deferred.await(latch)) - yield* $(Fiber.interrupt(fiber)) - const result = yield* $(Ref.get(ref)) + yield* (Deferred.await(latch)) + yield* (Fiber.interrupt(fiber)) + const result = yield* (Ref.get(ref)) deepStrictEqual(Array.from(result), [1, 1, 2, 3, 3]) })) it.effect("flatMap - finalizer ordering #1", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Chunk.empty())) + Effect.gen(function*() { + const ref = yield* (Ref.make(Chunk.empty())) const push = (message: string) => Ref.update(ref, Chunk.append(message)) const chunks = Chunk.make(Chunk.of(void 0), Chunk.of(void 0)) - yield* $( + yield* pipe( Stream.acquireRelease(push("open 1"), () => push("close 1")), Stream.flatMap(() => pipe( @@ -169,7 +169,7 @@ describe("Stream", () => { ), Stream.runDrain ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) deepStrictEqual(Array.from(result), [ "open 1", "use 2", @@ -190,17 +190,17 @@ describe("Stream", () => { })) it.effect("flatMap - finalizer ordering #2", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Chunk.empty())) + Effect.gen(function*() { + const ref = yield* (Ref.make(Chunk.empty())) const push = (message: string) => Ref.update(ref, Chunk.append(message)) const chunks = Chunk.make(Chunk.of(1), Chunk.of(2)) - yield* $( + yield* pipe( Stream.fromChunks(...chunks), Stream.tap(() => push("use 1")), Stream.flatMap(() => Stream.acquireRelease(push("open 2"), () => push("close 2"))), Stream.runDrain ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) deepStrictEqual(Array.from(result), [ "use 1", "open 2", @@ -212,8 +212,8 @@ describe("Stream", () => { })) it.effect("flatMap - exit signal", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(false)) + Effect.gen(function*() { + const ref = yield* (Ref.make(false)) const inner = pipe( Stream.acquireRelease(Effect.void, (_, exit) => Exit.match(exit, { @@ -222,40 +222,40 @@ describe("Stream", () => { })), Stream.flatMap(() => Stream.fail("Ouch")) ) - yield* $( + yield* pipe( Stream.succeed(void 0), Stream.flatMap(() => inner), Stream.runDrain, Effect.either ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) assertTrue(result) })) it.effect("flatMap - finalizers are registered in the proper order", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Chunk.empty())) + Effect.gen(function*() { + const ref = yield* (Ref.make(Chunk.empty())) const push = (n: number) => Ref.update(ref, Chunk.prepend(n)) - yield* $( + yield* pipe( Stream.finalizer(push(1)), Stream.flatMap(() => Stream.finalizer(push(2))), Stream.toPull, Effect.flatten, Effect.scoped ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) deepStrictEqual(Array.from(result), [1, 2]) })) it.effect("flatMap - early release finalizer concatenation is preserved", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Chunk.empty())) + Effect.gen(function*() { + const ref = yield* (Ref.make(Chunk.empty())) const push = (n: number) => Ref.update(ref, Chunk.prepend(n)) const stream = pipe( Stream.finalizer(push(1)), Stream.flatMap(() => Stream.finalizer(push(2))) ) - const result = yield* $( + const result = yield* pipe( Scope.make(), Effect.flatMap((scope) => pipe( @@ -274,9 +274,9 @@ describe("Stream", () => { })) it.effect("flatMapPar - guarantee ordering", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = Stream.fromIterable([1, 2, 3, 4, 5]) - const { result1, result2 } = yield* $(Effect.all({ + const { result1, result2 } = yield* (Effect.all({ result1: pipe(stream, Stream.flatMap((n) => Stream.make(n, n)), Stream.runCollect), result2: pipe(stream, Stream.flatMap((n) => Stream.make(n, n), { concurrency: 2 }), Stream.runCollect) })) @@ -284,9 +284,9 @@ describe("Stream", () => { })) it.effect("flatMapPar - consistency with flatMap", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = Stream.fromIterable([1, 2, 3, 4, 5]) - const { result1, result2 } = yield* $(Effect.all({ + const { result1, result2 } = yield* (Effect.all({ result1: pipe( stream, Stream.flatMap((n) => Stream.make(n, n)), @@ -302,10 +302,10 @@ describe("Stream", () => { })) it.effect("flatMapPar - interruption propagation", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(false)) - const latch = yield* $(Deferred.make()) - const fiber = yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(false)) + const latch = yield* (Deferred.make()) + const fiber = yield* pipe( Stream.make(void 0), Stream.flatMap(() => pipe( @@ -317,17 +317,17 @@ describe("Stream", () => { Stream.runDrain, Effect.fork ) - yield* $(Deferred.await(latch)) - yield* $(Fiber.interrupt(fiber)) - const result = yield* $(Ref.get(ref)) + yield* (Deferred.await(latch)) + yield* (Fiber.interrupt(fiber)) + const result = yield* (Ref.get(ref)) assertTrue(result) })) it.effect("flatMap - inner errors interrupt all fibers", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(false)) - const latch = yield* $(Deferred.make()) - const result = yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(false)) + const latch = yield* (Deferred.make()) + const result = yield* pipe( Stream.make( Stream.fromEffect( pipe( @@ -347,16 +347,16 @@ describe("Stream", () => { Stream.runDrain, Effect.either ) - const cancelled = yield* $(Ref.get(ref)) + const cancelled = yield* (Ref.get(ref)) assertTrue(cancelled) assertLeft(result, "Ouch") })) it.effect("flatMapPar - outer errors interrupt all fiberrs", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(false)) - const latch = yield* $(Deferred.make()) - const result = yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(false)) + const latch = yield* (Deferred.make()) + const result = yield* pipe( Stream.make(void 0), Stream.concat(Stream.fromEffect(pipe( Deferred.await(latch), @@ -372,17 +372,17 @@ describe("Stream", () => { Stream.runDrain, Effect.either ) - const cancelled = yield* $(Ref.get(ref)) + const cancelled = yield* (Ref.get(ref)) assertTrue(cancelled) assertLeft(result, "Ouch") })) it.effect("flatMapPar - inner defects interrupt all fibers", () => - Effect.gen(function*($) { + Effect.gen(function*() { const defect = new Cause.RuntimeException("Ouch") - const ref = yield* $(Ref.make(false)) - const latch = yield* $(Deferred.make()) - const result = yield* $( + const ref = yield* (Ref.make(false)) + const latch = yield* (Deferred.make()) + const result = yield* pipe( Stream.make( Stream.fromEffect(pipe( Deferred.succeed(latch, void 0), @@ -398,17 +398,17 @@ describe("Stream", () => { Stream.runDrain, Effect.exit ) - const cancelled = yield* $(Ref.get(ref)) + const cancelled = yield* (Ref.get(ref)) assertTrue(cancelled) deepStrictEqual(result, Exit.die(defect)) })) it.effect("flatMapPar - outer defects interrupt all fibers", () => - Effect.gen(function*($) { + Effect.gen(function*() { const defect = new Cause.RuntimeException("Ouch") - const ref = yield* $(Ref.make(false)) - const latch = yield* $(Deferred.make()) - const result = yield* $( + const ref = yield* (Ref.make(false)) + const latch = yield* (Deferred.make()) + const result = yield* pipe( Stream.make(void 0), Stream.concat(Stream.fromEffect(pipe( Deferred.await(latch), @@ -424,17 +424,17 @@ describe("Stream", () => { Stream.runDrain, Effect.exit ) - const cancelled = yield* $(Ref.get(ref)) + const cancelled = yield* (Ref.get(ref)) assertTrue(cancelled) deepStrictEqual(result, Exit.die(defect)) })) it.effect("flatMapPar - finalizer ordering", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Chunk.empty())) + Effect.gen(function*() { + const ref = yield* (Ref.make(Chunk.empty())) const push = (message: string) => Ref.update(ref, Chunk.append(message)) const inner = Stream.acquireRelease(push("Inner Acquire"), () => push("Inner Release")) - yield* $( + yield* pipe( Stream.acquireRelease( pipe( push("Outer Acquire"), @@ -445,7 +445,7 @@ describe("Stream", () => { Stream.flatMap(identity, { concurrency: 2 }), Stream.runDrain ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) deepStrictEqual(Array.from(result), [ "Outer Acquire", "Inner Acquire", @@ -455,10 +455,10 @@ describe("Stream", () => { })) it.effect("flatMapParSwitch - guarantee ordering no parallelism", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(false)) - const semaphore = yield* $(Effect.makeSemaphore(1)) - yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(false)) + const semaphore = yield* (Effect.makeSemaphore(1)) + yield* pipe( Stream.make(1, 2, 3, 4), Stream.flatMap((n) => { if (n > 3) { @@ -474,15 +474,15 @@ describe("Stream", () => { }, { concurrency: 1, switch: true }), Stream.runDrain ) - const result = yield* $(semaphore.withPermits(1)(Ref.get(ref))) + const result = yield* (semaphore.withPermits(1)(Ref.get(ref))) assertTrue(result) })) it.effect("flatMapParSwitch - guarantee ordering with parallelism", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - const semaphore = yield* $(Effect.makeSemaphore(4)) - yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + const semaphore = yield* (Effect.makeSemaphore(4)) + yield* pipe( Stream.range(1, 12), Stream.flatMap((n) => { if (n > 8) { @@ -501,7 +501,7 @@ describe("Stream", () => { }, { concurrency: 4, switch: true }), Stream.runDrain ) - const result = yield* $( + const result = yield* pipe( Ref.get(ref), semaphore.withPermits(4) ) @@ -509,8 +509,8 @@ describe("Stream", () => { })) it.effect("flatMapParSwitch - short circuiting", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(Stream.never, Stream.make(1)), Stream.flatMap(identity, { concurrency: 2, switch: true }), Stream.take(1), @@ -520,10 +520,10 @@ describe("Stream", () => { })) it.effect("flatMapParSwitch - interruption propagation", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(false)) - const latch = yield* $(Deferred.make()) - const fiber = yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(false)) + const latch = yield* (Deferred.make()) + const fiber = yield* pipe( Stream.make(void 0), Stream.flatMap(() => pipe( @@ -535,17 +535,17 @@ describe("Stream", () => { Stream.runCollect, Effect.fork ) - yield* $(Deferred.await(latch)) - yield* $(Fiber.interrupt(fiber)) - const result = yield* $(Ref.get(ref)) + yield* (Deferred.await(latch)) + yield* (Fiber.interrupt(fiber)) + const result = yield* (Ref.get(ref)) assertTrue(result) })) it.effect("flatMapParSwitch - inner errors interrupt all fibers", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(false)) - const latch = yield* $(Deferred.make()) - const result = yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(false)) + const latch = yield* (Deferred.make()) + const result = yield* pipe( Stream.make( Stream.fromEffect( pipe( @@ -565,16 +565,16 @@ describe("Stream", () => { Stream.runDrain, Effect.either ) - const cancelled = yield* $(Ref.get(ref)) + const cancelled = yield* (Ref.get(ref)) assertTrue(cancelled) assertLeft(result, "Ouch") })) it.effect("flatMapParSwitch - outer errors interrupt all fibers", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(false)) - const latch = yield* $(Deferred.make()) - const result = yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(false)) + const latch = yield* (Deferred.make()) + const result = yield* pipe( Stream.make(void 0), Stream.concat(Stream.fromEffect(pipe( Deferred.await(latch), @@ -590,17 +590,17 @@ describe("Stream", () => { Stream.runDrain, Effect.either ) - const cancelled = yield* $(Ref.get(ref)) + const cancelled = yield* (Ref.get(ref)) assertTrue(cancelled) assertLeft(result, "Ouch") })) it.effect("flatMapParSwitch - inner defects interrupt all fibers", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.RuntimeException("Ouch") - const ref = yield* $(Ref.make(false)) - const latch = yield* $(Deferred.make()) - const result = yield* $( + const ref = yield* (Ref.make(false)) + const latch = yield* (Deferred.make()) + const result = yield* pipe( Stream.make( Stream.fromEffect( pipe( @@ -620,17 +620,17 @@ describe("Stream", () => { Stream.runDrain, Effect.exit ) - const cancelled = yield* $(Ref.get(ref)) + const cancelled = yield* (Ref.get(ref)) assertTrue(cancelled) deepStrictEqual(result, Exit.die(error)) })) it.effect("flatMapParSwitch - outer defects interrupt all fibers", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.RuntimeException("Ouch") - const ref = yield* $(Ref.make(false)) - const latch = yield* $(Deferred.make()) - const result = yield* $( + const ref = yield* (Ref.make(false)) + const latch = yield* (Deferred.make()) + const result = yield* pipe( Stream.make(void 0), Stream.concat(Stream.fromEffect(pipe( Deferred.await(latch), @@ -646,17 +646,17 @@ describe("Stream", () => { Stream.runDrain, Effect.exit ) - const cancelled = yield* $(Ref.get(ref)) + const cancelled = yield* (Ref.get(ref)) assertTrue(cancelled) deepStrictEqual(result, Exit.die(error)) })) it.effect("flatMapParSwitch - finalizer ordering", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Chunk.empty())) + Effect.gen(function*() { + const ref = yield* (Ref.make(Chunk.empty())) const push = (message: string) => Ref.update(ref, Chunk.append(message)) const inner = Stream.acquireRelease(push("Inner Acquire"), () => push("Inner Release")) - yield* $( + yield* pipe( Stream.acquireRelease( pipe( push("Outer Acquire"), @@ -667,7 +667,7 @@ describe("Stream", () => { Stream.flatMap(identity, { concurrency: 2, switch: true }), Stream.runDrain ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) deepStrictEqual(Array.from(result), [ "Outer Acquire", "Inner Acquire", @@ -677,9 +677,9 @@ describe("Stream", () => { })) it.effect("flattenChunks", () => - Effect.gen(function*($) { + Effect.gen(function*() { const chunks = Chunk.make(Chunk.make(1, 2), Chunk.make(3, 4), Chunk.make(5, 6)) - const result = yield* $( + const result = yield* pipe( Stream.fromChunks(chunks), Stream.flattenChunks, Stream.chunks, @@ -692,8 +692,8 @@ describe("Stream", () => { })) it.effect("flattenExitOption - happy path", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.range(0, 9), Stream.toQueue({ capacity: 1 }), Effect.flatMap((queue) => @@ -713,9 +713,9 @@ describe("Stream", () => { })) it.effect("flattenExitOption - failure", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.RuntimeException("boom") - const result = yield* $( + const result = yield* pipe( Stream.range(0, 9), Stream.concat(Stream.fail(error)), Stream.toQueue({ capacity: 1 }), @@ -734,9 +734,9 @@ describe("Stream", () => { })) it.effect("flattenIterables", () => - Effect.gen(function*($) { + Effect.gen(function*() { const iterables = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] - const result = yield* $( + const result = yield* pipe( Stream.fromIterable(iterables), Stream.flattenIterables, Stream.runCollect @@ -745,9 +745,9 @@ describe("Stream", () => { })) it.effect("flattenTake - happy path", () => - Effect.gen(function*($) { + Effect.gen(function*() { const chunks = Chunk.make(Chunk.range(0, 3), Chunk.range(4, 8)) - const result = yield* $( + const result = yield* pipe( Stream.fromChunks(...chunks), Stream.mapChunks((chunk) => Chunk.of(Take.chunk(chunk))), Stream.flattenTake, @@ -757,8 +757,8 @@ describe("Stream", () => { })) it.effect("flattenTake - stop collecting on Exit.Failure", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make( Take.chunk(Chunk.make(1, 2)), Take.of(3), @@ -771,8 +771,8 @@ describe("Stream", () => { })) it.effect("flattenTake - works with empty chunks", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make( Take.chunk(Chunk.empty()), Take.chunk(Chunk.empty()) @@ -784,8 +784,8 @@ describe("Stream", () => { })) it.effect("flattenTake - works with empty streams", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.fromIterable>([]), Stream.flattenTake, Stream.runCollect diff --git a/packages/effect/test/Stream/sliding.test.ts b/packages/effect/test/Stream/sliding.test.ts index 474a72a536..947f1cd749 100644 --- a/packages/effect/test/Stream/sliding.test.ts +++ b/packages/effect/test/Stream/sliding.test.ts @@ -9,7 +9,7 @@ import { describe } from "vitest" describe("Stream", () => { it.effect("sliding - returns a sliding window", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream0 = Stream.fromChunks( Chunk.empty(), Chunk.make(1), @@ -35,27 +35,27 @@ describe("Stream", () => { Stream.concat(Stream.fromChunk(Chunk.make(2))), Stream.concat(Stream.make(3, 4, 5)) ) - const result1 = yield* $( + const result1 = yield* pipe( Stream.make(1, 2, 3, 4, 5), Stream.sliding(2), Stream.runCollect ) - const result2 = yield* $( + const result2 = yield* pipe( stream0, Stream.sliding(2), Stream.runCollect ) - const result3 = yield* $( + const result3 = yield* pipe( stream1, Stream.sliding(2), Stream.runCollect ) - const result4 = yield* $( + const result4 = yield* pipe( stream2, Stream.sliding(2), Stream.runCollect ) - const result5 = yield* $( + const result5 = yield* pipe( stream3, Stream.sliding(2), Stream.runCollect @@ -69,8 +69,8 @@ describe("Stream", () => { })) it.effect("sliding - returns all elements if chunkSize is greater than the size of the stream", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.range(1, 5), Stream.sliding(6), Stream.runCollect @@ -79,9 +79,9 @@ describe("Stream", () => { })) it.effect("sliding - is mostly equivalent to ZStream#grouped when stepSize and chunkSize are equal", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = Stream.range(1, 5) - const { result1, result2 } = yield* $(Effect.all({ + const { result1, result2 } = yield* (Effect.all({ result1: pipe(stream, Stream.slidingSize(3, 3), Stream.runCollect), result2: pipe(stream, Stream.grouped(3), Stream.runCollect) })) @@ -92,8 +92,8 @@ describe("Stream", () => { })) it.effect("sliding - fails if upstream produces an error", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 2, 3), Stream.concat(Stream.fail("Ouch")), Stream.concat(Stream.make(4, 5)), @@ -105,14 +105,14 @@ describe("Stream", () => { })) it.effect("sliding - should return an empty chunk when the stream is empty", () => - Effect.gen(function*($) { - const result = yield* $(Stream.empty, Stream.sliding(2), Stream.runCollect) + Effect.gen(function*() { + const result = yield* pipe(Stream.empty, Stream.sliding(2), Stream.runCollect) deepStrictEqual(Array.from(result), []) })) it.effect("sliding - emits elements properly when a failure occurs", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(Chunk.empty>())) + Effect.gen(function*() { + const ref = yield* (Ref.make(Chunk.empty>())) const streamChunks = Stream.fromChunks( Chunk.range(1, 4), Chunk.range(5, 7), @@ -123,13 +123,13 @@ describe("Stream", () => { Stream.concat(Stream.fail("Ouch")), Stream.slidingSize(3, 3) ) - const either = yield* $( + const either = yield* pipe( stream, Stream.mapEffect((chunk) => Ref.update(ref, Chunk.append(chunk))), Stream.runCollect, Effect.either ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) assertLeft(either, "Ouch") deepStrictEqual( Array.from(result).map((chunk) => Array.from(chunk)), diff --git a/packages/effect/test/Stream/splitting.test.ts b/packages/effect/test/Stream/splitting.test.ts index 58ac7b6f9a..a953a6abf4 100644 --- a/packages/effect/test/Stream/splitting.test.ts +++ b/packages/effect/test/Stream/splitting.test.ts @@ -31,7 +31,7 @@ const testSplitLines = ( describe("Stream", () => { it.effect("split - should split properly", () => - Effect.gen(function*($) { + Effect.gen(function*() { const chunks = Chunk.make( Chunk.range(1, 2), Chunk.range(3, 4), @@ -39,7 +39,7 @@ describe("Stream", () => { Chunk.make(7, 8, 9), Chunk.of(10) ) - const { result1, result2 } = yield* $(Effect.all({ + const { result1, result2 } = yield* (Effect.all({ result1: pipe( Stream.range(0, 9), Stream.split((n) => n % 4 === 0), @@ -62,9 +62,9 @@ describe("Stream", () => { })) it.effect("split - is equivalent to identity when the predicate is not satisfied", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = Stream.range(1, 10) - const { result1, result2 } = yield* $(Effect.all({ + const { result1, result2 } = yield* (Effect.all({ result1: pipe(stream, Stream.split((n) => n % 11 === 0), Stream.runCollect), result2: pipe( Stream.runCollect(stream), @@ -82,8 +82,8 @@ describe("Stream", () => { })) it.effect("split - should output empty chunk when stream is empty", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.empty, Stream.split((n: number) => n % 11 === 0), Stream.runCollect @@ -92,7 +92,7 @@ describe("Stream", () => { })) it.effect("splitOnChunk - consecutive delimiter yields empty Chunk", () => - Effect.gen(function*($) { + Effect.gen(function*() { const input = Stream.make( Chunk.make(1, 2), Chunk.of(1), @@ -100,7 +100,7 @@ describe("Stream", () => { Chunk.make(1, 2) ) const splitSequence = Chunk.make(1, 2) - const result = yield* $( + const result = yield* pipe( Stream.flattenChunks(input), Stream.splitOnChunk(splitSequence), Stream.map(Chunk.size), @@ -110,10 +110,10 @@ describe("Stream", () => { })) it.effect("splitOnChunk - preserves data", () => - Effect.gen(function*($) { + Effect.gen(function*() { const splitSequence = Chunk.make(0, 1) const stream = Stream.make(1, 1, 1, 1, 1, 1) - const result = yield* $( + const result = yield* pipe( stream, Stream.splitOnChunk(splitSequence), Stream.runCollect, @@ -123,9 +123,9 @@ describe("Stream", () => { })) it.effect("splitOnChunk - handles leftovers", () => - Effect.gen(function*($) { + Effect.gen(function*() { const splitSequence = Chunk.make(0, 1) - const result = yield* $( + const result = yield* pipe( Stream.fromChunks(Chunk.make(1, 0, 2, 0, 1, 2), Chunk.of(2)), Stream.splitOnChunk(splitSequence), Stream.runCollect @@ -137,9 +137,9 @@ describe("Stream", () => { })) it.effect("splitOnChunk - works", () => - Effect.gen(function*($) { + Effect.gen(function*() { const splitSequence = Chunk.make(0, 1) - const result = yield* $( + const result = yield* pipe( Stream.make(1, 2, 0, 1, 3, 4, 0, 1, 5, 6, 5, 6), Stream.splitOnChunk(splitSequence), Stream.runCollect @@ -151,9 +151,9 @@ describe("Stream", () => { })) it.effect("splitOnChunk - works from Chunks", () => - Effect.gen(function*($) { + Effect.gen(function*() { const splitSequence = Chunk.make(0, 1) - const result = yield* $( + const result = yield* pipe( Stream.fromChunks( Chunk.make(1, 2), splitSequence, @@ -172,8 +172,8 @@ describe("Stream", () => { })) it.effect("splitOnChunk - single delimiter edge case", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(0), Stream.splitOnChunk(Chunk.make(0)), Stream.runCollect @@ -185,8 +185,8 @@ describe("Stream", () => { })) it.effect("splitOnChunk - no delimiter in data", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.fromChunks(Chunk.make(1, 2), Chunk.make(1, 2), Chunk.make(1, 2)), Stream.splitOnChunk(Chunk.make(1, 1)), Stream.runCollect @@ -198,8 +198,8 @@ describe("Stream", () => { })) it.effect("splitOnChunk - delimiter on the boundary", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.fromChunks(Chunk.make(1, 2), Chunk.make(1, 2)), Stream.splitOnChunk(Chunk.make(2, 1)), Stream.runCollect @@ -236,58 +236,58 @@ describe("Stream", () => { // // }, it.effect("splitLines - handles leftovers", () => - Effect.gen(function*($) { + Effect.gen(function*() { const chunks = [Chunk.of("abc\nbc")] - const [expected, result] = yield* $(testSplitLines(chunks)) + const [expected, result] = yield* (testSplitLines(chunks)) deepStrictEqual(expected, result) })) it.effect("splitLines - handles leftovers 2", () => - Effect.gen(function*($) { + Effect.gen(function*() { const chunks = [ Chunk.make("aa", "bb"), Chunk.make("\nbbc\n", "ddb", "bd"), Chunk.make("abc", "\n"), Chunk.of("abc") ] - const [expected, result] = yield* $(testSplitLines(chunks)) + const [expected, result] = yield* (testSplitLines(chunks)) deepStrictEqual(expected, result) })) it.effect("splitLines - aggregates chunks", () => - Effect.gen(function*($) { + Effect.gen(function*() { const chunks = [Chunk.make("abc", "\n", "bc", "\n", "bcd", "bcd")] - const [expected, result] = yield* $(testSplitLines(chunks)) + const [expected, result] = yield* (testSplitLines(chunks)) deepStrictEqual(expected, result) })) it.effect("splitLines - single newline edge case", () => - Effect.gen(function*($) { + Effect.gen(function*() { const chunks = [Chunk.of("\n")] - const [, result] = yield* $(testSplitLines(chunks)) + const [, result] = yield* (testSplitLines(chunks)) // JavaScript arrays split `"\n"` into `["", ""]`, so we manually assert // that the output should be the empty string here deepStrictEqual([""], result) })) it.effect("splitLines - no newlines", () => - Effect.gen(function*($) { + Effect.gen(function*() { const chunks = [Chunk.make("abc", "abc", "abc")] - const [expected, result] = yield* $(testSplitLines(chunks)) + const [expected, result] = yield* (testSplitLines(chunks)) deepStrictEqual(expected, result) })) it.effect("splitLines - \\r\\n on the boundary", () => - Effect.gen(function*($) { + Effect.gen(function*() { const chunks = [Chunk.make("abc\r", "\nabc")] - const [expected, result] = yield* $(testSplitLines(chunks)) + const [expected, result] = yield* (testSplitLines(chunks)) deepStrictEqual(expected, result) })) it.effect("splitLines - ZIO issue #6360", () => - Effect.gen(function*($) { + Effect.gen(function*() { const chunks = [Chunk.make("AAAAABBBB#\r\r\r\n", "test")] - const [_, result] = yield* $(testSplitLines(chunks)) + const [_, result] = yield* (testSplitLines(chunks)) deepStrictEqual(["AAAAABBBB#\r\r", "test"], result) })) }) diff --git a/packages/effect/test/Stream/streamable.test.ts b/packages/effect/test/Stream/streamable.test.ts index 1d772f46f1..23d295f32a 100644 --- a/packages/effect/test/Stream/streamable.test.ts +++ b/packages/effect/test/Stream/streamable.test.ts @@ -9,7 +9,7 @@ describe("Streamable", () => { it.effect( "allows creating custom Stream types", () => - Effect.gen(function*($) { + Effect.gen(function*() { class MyStream extends Streamable.Class { toStream() { return Stream.fromIterable([1, 2, 3]) @@ -17,7 +17,7 @@ describe("Streamable", () => { } const stream = new MyStream() - const values = Array.from(yield* $(Stream.runCollect(stream))) + const values = Array.from(yield* Stream.runCollect(stream)) deepStrictEqual(values, [1, 2, 3]) }) diff --git a/packages/effect/test/Stream/taking.test.ts b/packages/effect/test/Stream/taking.test.ts index 10ed90cf6e..eb40e413bb 100644 --- a/packages/effect/test/Stream/taking.test.ts +++ b/packages/effect/test/Stream/taking.test.ts @@ -10,10 +10,10 @@ import { describe } from "vitest" describe("Stream", () => { it.effect("take", () => - Effect.gen(function*($) { + Effect.gen(function*() { const take = 3 const stream = Stream.range(1, 5) - const { result1, result2 } = yield* $(Effect.all({ + const { result1, result2 } = yield* (Effect.all({ result1: pipe(stream, Stream.take(take), Stream.runCollect), result2: pipe(Stream.runCollect(stream), Effect.map(Chunk.take(take))) })) @@ -21,27 +21,27 @@ describe("Stream", () => { })) it.effect("take - short circuits", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(false)) + Effect.gen(function*() { + const ref = yield* (Ref.make(false)) const stream = pipe( Stream.make(1), Stream.concat(Stream.drain(Stream.fromEffect(Ref.set(ref, true)))), Stream.take(0) ) - yield* $(Stream.runDrain(stream)) - const result = yield* $(Ref.get(ref)) + yield* (Stream.runDrain(stream)) + const result = yield* (Ref.get(ref)) assertFalse(result) })) it.effect("take - taking 0 short circuits", () => - Effect.gen(function*($) { - const result = yield* $(Stream.never, Stream.take(0), Stream.runCollect) + Effect.gen(function*() { + const result = yield* pipe(Stream.never, Stream.take(0), Stream.runCollect) deepStrictEqual(Array.from(result), []) })) it.effect("take - taking 1 short circuits", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1), Stream.concat(Stream.never), Stream.take(1), @@ -51,10 +51,10 @@ describe("Stream", () => { })) it.effect("takeRight", () => - Effect.gen(function*($) { + Effect.gen(function*() { const take = 3 const stream = Stream.range(1, 5) - const { result1, result2 } = yield* $(Effect.all({ + const { result1, result2 } = yield* (Effect.all({ result1: pipe(stream, Stream.takeRight(take), Stream.runCollect), result2: pipe(Stream.runCollect(stream), Effect.map(Chunk.takeRight(take))) })) @@ -62,10 +62,10 @@ describe("Stream", () => { })) it.effect("takeUntil", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = Stream.range(1, 5) const f = (n: number) => n % 3 === 0 - const { result1, result2 } = yield* $(Effect.all({ + const { result1, result2 } = yield* (Effect.all({ result1: pipe(stream, Stream.takeUntil(f), Stream.runCollect), result2: pipe( Stream.runCollect(stream), @@ -82,10 +82,10 @@ describe("Stream", () => { })) it.effect("takeUntilEffect", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = Stream.range(1, 5) const f = (n: number) => Effect.succeed(n % 3 === 0) - const { result1, result2 } = yield* $(Effect.all({ + const { result1, result2 } = yield* (Effect.all({ result1: pipe(stream, Stream.takeUntilEffect(f), Stream.runCollect), result2: pipe( Stream.runCollect(stream), @@ -111,8 +111,8 @@ describe("Stream", () => { })) it.effect("takeUntilEffect - laziness on chunks", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 2, 3), Stream.takeUntilEffect((n) => n === 2 ? @@ -126,10 +126,10 @@ describe("Stream", () => { })) it.effect("takeWhile", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = Stream.range(1, 5) const f = (n: number) => n <= 3 - const { result1, result2 } = yield* $(Effect.all({ + const { result1, result2 } = yield* (Effect.all({ result1: pipe(stream, Stream.takeWhile(f), Stream.runCollect), result2: pipe(Stream.runCollect(stream), Effect.map(Chunk.takeWhile(f))) })) @@ -137,8 +137,8 @@ describe("Stream", () => { })) it.effect("takeWhile - does not stop when hitting an empty chunk (ZIO #4272)", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.fromChunks(Chunk.of(1), Chunk.of(2), Chunk.of(3)), Stream.mapChunks(Chunk.flatMap((n) => n === 2 ? @@ -152,8 +152,8 @@ describe("Stream", () => { })) it.effect("takeWhile - short circuits", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1), Stream.concat(Stream.fail("Ouch")), Stream.takeWhile(constFalse), diff --git a/packages/effect/test/Stream/tapping.test.ts b/packages/effect/test/Stream/tapping.test.ts index 2d2879eb11..8ca2d20a37 100644 --- a/packages/effect/test/Stream/tapping.test.ts +++ b/packages/effect/test/Stream/tapping.test.ts @@ -11,21 +11,21 @@ import { describe } from "vitest" describe("Stream", () => { it.effect("tap", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) - const result = yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) + const result = yield* pipe( Stream.make(1, 1), Stream.tap((i) => Ref.update(ref, (n) => i + n)), Stream.runCollect ) - const sum = yield* $(Ref.get(ref)) + const sum = yield* (Ref.get(ref)) strictEqual(sum, 2) deepStrictEqual(Array.from(result), [1, 1]) })) it.effect("tap - laziness on chunks", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 2, 3), Stream.tap((n) => pipe(Effect.fail("error"), Effect.when(() => n === 3))), Stream.either, @@ -39,10 +39,10 @@ describe("Stream", () => { })) it.effect("tapBoth - just tap values", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) const values = Chunk.make(1, 1) - const result = yield* $( + const result = yield* pipe( Stream.fromChunk(values), Stream.tapBoth({ onSuccess: (v) => Ref.update(ref, (_) => _ + v), @@ -52,13 +52,13 @@ describe("Stream", () => { ) deepStrictEqual(Array.from(result), Array.from(values)) - strictEqual(yield* $(Ref.get(ref)), 2) + strictEqual(yield* (Ref.get(ref)), 2) })) it.effect("tapBoth - just tap an error", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make("")) - const result = yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make("")) + const result = yield* pipe( Stream.fail("Ouch"), Stream.tapBoth({ onSuccess: (v) => Effect.die(`Unexpected attempt to tap a value ${v}`), @@ -69,15 +69,15 @@ describe("Stream", () => { ) assertLeft(result, "Ouch") - strictEqual(yield* $(Ref.get(ref)), "Ouch") + strictEqual(yield* (Ref.get(ref)), "Ouch") })) it.effect("tapBoth - tap values and then error", () => - Effect.gen(function*($) { - const error = yield* $(Ref.make("")) - const sum = yield* $(Ref.make(0)) + Effect.gen(function*() { + const error = yield* (Ref.make("")) + const sum = yield* (Ref.make(0)) const values = Chunk.make(1, 1) - const result = yield* $( + const result = yield* pipe( Stream.fromChunk(values), Stream.concat(Stream.fail("Ouch")), Stream.tapBoth({ @@ -89,13 +89,13 @@ describe("Stream", () => { ) assertLeft(result, "Ouch") - strictEqual(yield* $(Ref.get(error)), "Ouch") - strictEqual(yield* $(Ref.get(sum)), 2) + strictEqual(yield* (Ref.get(error)), "Ouch") + strictEqual(yield* (Ref.get(sum)), 2) })) it.effect("tapBoth - tap chunks lazily", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 2, 3), Stream.tapBoth({ onSuccess: (n) => @@ -117,9 +117,9 @@ describe("Stream", () => { })) it.effect("tapError", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make("")) - const result = yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make("")) + const result = yield* pipe( Stream.make(1, 1), Stream.concat(Stream.fail("Ouch")), Stream.tapError((e) => Ref.update(ref, (s) => s + e)), @@ -130,42 +130,42 @@ describe("Stream", () => { })) it.effect("tapSink - sink that is done after stream", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) const sink = Sink.forEach((i: number) => Ref.update(ref, (n) => i + n)) - const result = yield* $( + const result = yield* pipe( Stream.make(1, 1, 2, 3, 5, 8), Stream.tapSink(sink), Stream.runCollect ) - const sum = yield* $(Ref.get(ref)) + const sum = yield* (Ref.get(ref)) strictEqual(sum, 20) deepStrictEqual(Array.from(result), [1, 1, 2, 3, 5, 8]) })) it.effect("tapSink - sink that is done before stream", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) const sink = pipe( Sink.take(3), Sink.map(Chunk.reduce(0, (x, y) => x + y)), Sink.mapEffect((i) => Ref.update(ref, (n) => n + i)) ) - const result = yield* $( + const result = yield* pipe( Stream.make(1, 1, 2, 3, 5, 8), Stream.rechunk(1), Stream.tapSink(sink), Stream.runCollect ) - const sum = yield* $(Ref.get(ref)) + const sum = yield* (Ref.get(ref)) strictEqual(sum, 4) deepStrictEqual(Array.from(result), [1, 1, 2, 3, 5, 8]) })) it.effect("tapSink - sink that fails before stream", () => - Effect.gen(function*($) { + Effect.gen(function*() { const sink = Sink.fail("error") - const result = yield* $( + const result = yield* pipe( Stream.never, Stream.tapSink(sink), Stream.runCollect, @@ -175,10 +175,10 @@ describe("Stream", () => { })) it.effect("tapSink - does not read ahead", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(0)) + Effect.gen(function*() { + const ref = yield* (Ref.make(0)) const sink = Sink.forEach((i: number) => Ref.update(ref, (n) => i + n)) - yield* $( + yield* pipe( Stream.make(1, 2, 3, 4, 5), Stream.rechunk(1), Stream.forever, @@ -186,7 +186,7 @@ describe("Stream", () => { Stream.take(3), Stream.runDrain ) - const result = yield* $(Ref.get(ref)) + const result = yield* (Ref.get(ref)) strictEqual(result, 6) })) }) diff --git a/packages/effect/test/Stream/throttling.test.ts b/packages/effect/test/Stream/throttling.test.ts index 0594662cd9..77f236df4d 100644 --- a/packages/effect/test/Stream/throttling.test.ts +++ b/packages/effect/test/Stream/throttling.test.ts @@ -19,8 +19,8 @@ import { describe } from "vitest" describe("Stream", () => { it.effect("throttleEnforce - free elements", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 2, 3, 4), Stream.throttle({ cost: () => 0, units: 0, duration: Duration.infinity, strategy: "enforce" }), Stream.runCollect @@ -29,8 +29,8 @@ describe("Stream", () => { })) it.effect("throttleEnforce - no bandwidth", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 2, 3, 4), Stream.throttle({ cost: () => 1, units: 0, duration: Duration.infinity, strategy: "enforce" }), Stream.runCollect @@ -39,23 +39,23 @@ describe("Stream", () => { })) it.effect("throttleEnforce - refill bucket tokens", () => - Effect.gen(function*(_) { - const fiber = yield* _( + Effect.gen(function*() { + const fiber = yield* pipe( Stream.fromSchedule(Schedule.spaced(Duration.millis(100))), Stream.take(10), Stream.throttle({ cost: () => 1, units: 1, duration: Duration.millis(200), strategy: "enforce" }), Stream.runCollect, Effect.fork ) - yield* _(TestClock.adjust(Duration.seconds(1))) - const result = yield* _(Fiber.join(fiber)) + yield* TestClock.adjust(Duration.seconds(1)) + const result = yield* Fiber.join(fiber) deepStrictEqual(Array.from(result), [0, 2, 4, 6, 8]) })) it.effect("throttleShape", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(10)) - const fiber = yield* $( + Effect.gen(function*() { + const queue = yield* (Queue.bounded(10)) + const fiber = yield* pipe( Stream.fromQueue(queue), Stream.throttle({ strategy: "shape", @@ -65,29 +65,29 @@ describe("Stream", () => { }), Stream.toPull, Effect.flatMap((pull) => - Effect.gen(function*($) { - yield* $(Queue.offer(queue, 1)) - const result1 = yield* $(pull) - yield* $(Queue.offer(queue, 2)) - const result2 = yield* $(pull) - yield* $(Effect.sleep(Duration.seconds(4))) - yield* $(Queue.offer(queue, 3)) - const result3 = yield* $(pull) + Effect.gen(function*() { + yield* (Queue.offer(queue, 1)) + const result1 = yield* pull + yield* (Queue.offer(queue, 2)) + const result2 = yield* pull + yield* (Effect.sleep(Duration.seconds(4))) + yield* (Queue.offer(queue, 3)) + const result3 = yield* pull return [Array.from(result1), Array.from(result2), Array.from(result3)] as const }) ), Effect.scoped, Effect.fork ) - yield* $(TestClock.adjust(Duration.seconds(8))) - const result = yield* $(Fiber.join(fiber)) + yield* (TestClock.adjust(Duration.seconds(8))) + const result = yield* (Fiber.join(fiber)) deepStrictEqual(result, [[1], [2], [3]]) })) it.effect("throttleShape - infinite bandwidth", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(10)) - const result = yield* $( + Effect.gen(function*() { + const queue = yield* (Queue.bounded(10)) + const result = yield* pipe( Stream.fromQueue(queue), Stream.throttle({ strategy: "shape", @@ -97,12 +97,12 @@ describe("Stream", () => { }), Stream.toPull, Effect.flatMap((pull) => - Effect.gen(function*($) { - yield* $(Queue.offer(queue, 1)) - const result1 = yield* $(pull) - yield* $(Queue.offer(queue, 2)) - const result2 = yield* $(pull) - const elapsed = yield* $(Clock.currentTimeMillis) + Effect.gen(function*() { + yield* (Queue.offer(queue, 1)) + const result1 = yield* pull + yield* (Queue.offer(queue, 2)) + const result2 = yield* pull + const elapsed = yield* (Clock.currentTimeMillis) return [Array.from(result1), Array.from(result2), elapsed] as const }) ), @@ -112,9 +112,9 @@ describe("Stream", () => { })) it.effect("throttleShape - with burst", () => - Effect.gen(function*($) { - const queue = yield* $(Queue.bounded(10)) - const fiber = yield* $( + Effect.gen(function*() { + const queue = yield* (Queue.bounded(10)) + const fiber = yield* pipe( Stream.fromQueue(queue), Stream.throttle({ strategy: "shape", @@ -125,28 +125,28 @@ describe("Stream", () => { }), Stream.toPull, Effect.flatMap((pull) => - Effect.gen(function*($) { - yield* $(Queue.offer(queue, 1)) - const result1 = yield* $(pull) - yield* $(TestClock.adjust(Duration.seconds(2))) - yield* $(Queue.offer(queue, 2)) - const result2 = yield* $(pull) - yield* $(TestClock.adjust(Duration.seconds(4))) - yield* $(Queue.offer(queue, 3)) - const result3 = yield* $(pull) + Effect.gen(function*() { + yield* (Queue.offer(queue, 1)) + const result1 = yield* pull + yield* (TestClock.adjust(Duration.seconds(2))) + yield* (Queue.offer(queue, 2)) + const result2 = yield* pull + yield* (TestClock.adjust(Duration.seconds(4))) + yield* (Queue.offer(queue, 3)) + const result3 = yield* pull return [Array.from(result1), Array.from(result2), Array.from(result3)] as const }) ), Effect.scoped, Effect.fork ) - const result = yield* $(Fiber.join(fiber)) + const result = yield* (Fiber.join(fiber)) deepStrictEqual(result, [[1], [2], [3]]) })) it.effect("throttleShape - free elements", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 2, 3, 4), Stream.throttle({ strategy: "shape", @@ -160,8 +160,8 @@ describe("Stream", () => { })) it.effect("debounce - should drop earlier chunks within waitTime", () => - Effect.gen(function*($) { - const coordination = yield* $(chunkCoordination([ + Effect.gen(function*() { + const coordination = yield* (chunkCoordination([ Chunk.of(1), Chunk.make(3, 4), Chunk.of(5), @@ -176,25 +176,25 @@ describe("Stream", () => { Stream.debounce(Duration.seconds(1)), Stream.tap(() => coordination.proceed) ) - const fiber = yield* $(stream, Stream.runCollect, Effect.fork) - yield* $(Effect.fork(coordination.offer)) - yield* $( + const fiber = yield* pipe(stream, Stream.runCollect, Effect.fork) + yield* (Effect.fork(coordination.offer)) + yield* pipe( Effect.sleep(Duration.millis(500)), Effect.zipRight(coordination.offer), Effect.fork ) - yield* $( + yield* pipe( Effect.sleep(Duration.seconds(2)), Effect.zipRight(coordination.offer), Effect.fork ) - yield* $( + yield* pipe( Effect.sleep(Duration.millis(2500)), Effect.zipRight(coordination.offer), Effect.fork ) - yield* $(TestClock.adjust(Duration.millis(3500))) - const result = yield* $(Fiber.join(fiber)) + yield* (TestClock.adjust(Duration.millis(3500))) + const result = yield* (Fiber.join(fiber)) deepStrictEqual( Array.from(result).map((chunk) => Array.from(chunk)), [[3, 4], [6, 7]] @@ -202,8 +202,8 @@ describe("Stream", () => { })) it.effect("debounce - should take latest chunk within waitTime", () => - Effect.gen(function*($) { - const coordination = yield* $(chunkCoordination([ + Effect.gen(function*() { + const coordination = yield* (chunkCoordination([ Chunk.make(1, 2), Chunk.make(3, 4), Chunk.make(5, 6) @@ -214,14 +214,14 @@ describe("Stream", () => { Stream.debounce(Duration.seconds(1)), Stream.tap(() => coordination.proceed) ) - const fiber = yield* $(stream, Stream.runCollect, Effect.fork) - yield* $( + const fiber = yield* pipe(stream, Stream.runCollect, Effect.fork) + yield* pipe( coordination.offer, Effect.zipRight(coordination.offer), Effect.zipRight(coordination.offer) ) - yield* $(TestClock.adjust(Duration.seconds(1))) - const result = yield* $(Fiber.join(fiber)) + yield* (TestClock.adjust(Duration.seconds(1))) + const result = yield* (Fiber.join(fiber)) deepStrictEqual( Array.from(result).map((chunk) => Array.from(chunk)), [[5, 6]] @@ -229,8 +229,8 @@ describe("Stream", () => { })) it.effect("debounce - should work properly with parallelization", () => - Effect.gen(function*($) { - const coordination = yield* $(chunkCoordination([ + Effect.gen(function*() { + const coordination = yield* (chunkCoordination([ Chunk.of(1), Chunk.of(2), Chunk.of(3) @@ -241,14 +241,14 @@ describe("Stream", () => { Stream.debounce(Duration.seconds(1)), Stream.tap(() => coordination.proceed) ) - const fiber = yield* $(stream, Stream.runCollect, Effect.fork) - yield* $(Effect.all([ + const fiber = yield* pipe(stream, Stream.runCollect, Effect.fork) + yield* (Effect.all([ coordination.offer, coordination.offer, coordination.offer ], { concurrency: 3, discard: true })) - yield* $(TestClock.adjust(Duration.seconds(1))) - const result = yield* $(Fiber.join(fiber)) + yield* (TestClock.adjust(Duration.seconds(1))) + const result = yield* (Fiber.join(fiber)) deepStrictEqual( Array.from(result).map((chunk) => Array.from(chunk)), [[3]] @@ -256,22 +256,22 @@ describe("Stream", () => { })) it.effect("debounce - should handle empty chunks properly", () => - Effect.gen(function*($) { - const fiber = yield* $( + Effect.gen(function*() { + const fiber = yield* pipe( Stream.make(1, 2, 3), Stream.schedule(Schedule.fixed(Duration.millis(500))), Stream.debounce(Duration.seconds(1)), Stream.runCollect, Effect.fork ) - yield* $(TestClock.adjust(Duration.seconds(3))) - const result = yield* $(Fiber.join(fiber)) + yield* (TestClock.adjust(Duration.seconds(3))) + const result = yield* (Fiber.join(fiber)) deepStrictEqual(Array.from(result), [3]) })) it.effect("debounce - should fail immediately", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.fromEffect(Effect.fail(Option.none())), Stream.debounce(Duration.infinity), Stream.runCollect, @@ -281,8 +281,8 @@ describe("Stream", () => { })) it.effect("debounce - should work with empty streams", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.empty, Stream.debounce(Duration.seconds(5)), Stream.runCollect @@ -291,26 +291,26 @@ describe("Stream", () => { })) it.effect("debounce - should pick last element from every chunk", () => - Effect.gen(function*($) { - const fiber = yield* $( + Effect.gen(function*() { + const fiber = yield* pipe( Stream.make(1, 2, 3), Stream.debounce(Duration.seconds(1)), Stream.runCollect, Effect.fork ) - yield* $(TestClock.adjust(Duration.seconds(1))) - const result = yield* $(Fiber.join(fiber)) + yield* (TestClock.adjust(Duration.seconds(1))) + const result = yield* (Fiber.join(fiber)) deepStrictEqual(Array.from(result), [3]) })) it.effect("debounce - should interrupt fibers properly", () => - Effect.gen(function*($) { - const coordination = yield* $(chunkCoordination([ + Effect.gen(function*() { + const coordination = yield* (chunkCoordination([ Chunk.of(1), Chunk.of(2), Chunk.of(3) ])) - const fiber = yield* $( + const fiber = yield* pipe( Stream.fromQueue(coordination.queue), Stream.tap(() => coordination.proceed), // TODO: remove @@ -322,21 +322,21 @@ describe("Stream", () => { Stream.runCollect, Effect.fork ) - yield* $( + yield* pipe( coordination.offer, Effect.zipRight(TestClock.adjust(Duration.millis(100))), Effect.zipRight(coordination.awaitNext), Effect.repeatN(3) ) - yield* $(TestClock.adjust(Duration.millis(100))) - const result = yield* $(Fiber.join(fiber)) + yield* (TestClock.adjust(Duration.millis(100))) + const result = yield* (Fiber.join(fiber)) deepStrictEqual(Array.from(result), [3]) })) it.effect("debounce - should interrupt children fiber on stream interruption", () => - Effect.gen(function*($) { - const ref = yield* $(Ref.make(false)) - const fiber = yield* $( + Effect.gen(function*() { + const ref = yield* (Ref.make(false)) + const fiber = yield* pipe( Stream.fromEffect(Effect.void), Stream.concat(Stream.fromEffect(pipe( Effect.never, @@ -346,9 +346,9 @@ describe("Stream", () => { Stream.runDrain, Effect.fork ) - yield* $(TestClock.adjust(Duration.minutes(1))) - yield* $(Fiber.interrupt(fiber)) - const result = yield* $(Ref.get(ref)) + yield* (TestClock.adjust(Duration.minutes(1))) + yield* (Fiber.interrupt(fiber)) + const result = yield* (Ref.get(ref)) assertTrue(result) })) }) diff --git a/packages/effect/test/Stream/timeouts.test.ts b/packages/effect/test/Stream/timeouts.test.ts index 17f97a8d69..c7f4d8992b 100644 --- a/packages/effect/test/Stream/timeouts.test.ts +++ b/packages/effect/test/Stream/timeouts.test.ts @@ -4,6 +4,7 @@ import * as Duration from "effect/Duration" import * as Effect from "effect/Effect" import * as Exit from "effect/Exit" import * as Fiber from "effect/Fiber" +import { pipe } from "effect/Function" import * as Option from "effect/Option" import * as Queue from "effect/Queue" import * as Stream from "effect/Stream" @@ -15,8 +16,8 @@ import { describe } from "vitest" describe("Stream", () => { it.effect("timeout - succeed", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.succeed(1), Stream.timeout(Duration.infinity), Stream.runCollect @@ -25,8 +26,8 @@ describe("Stream", () => { })) it.effect("timeout - should end the stream", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.range(0, 4), Stream.tap(() => Effect.sleep(Duration.infinity)), Stream.timeout(Duration.zero), @@ -36,8 +37,8 @@ describe("Stream", () => { })) it.effect("timeoutFail - succeed", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.range(0, 4), Stream.tap(() => Effect.sleep(Duration.infinity)), Stream.timeoutFail(() => false, Duration.zero), @@ -49,8 +50,8 @@ describe("Stream", () => { })) it.effect("timeoutFail - failures", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.fail("original"), Stream.timeoutFail(() => "timeout", Duration.minutes(15)), Stream.runDrain, @@ -60,9 +61,9 @@ describe("Stream", () => { })) it.effect("timeoutFailCause", () => - Effect.gen(function*($) { + Effect.gen(function*() { const error = new Cause.RuntimeException("boom") - const result = yield* $( + const result = yield* pipe( Stream.range(0, 4), Stream.tap(() => Effect.sleep(Duration.infinity)), Stream.timeoutFailCause(() => Cause.die(error), Duration.zero), @@ -74,8 +75,8 @@ describe("Stream", () => { })) it.effect("timeoutTo - succeed", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.range(0, 4), Stream.timeoutTo(Duration.infinity, Stream.succeed(-1)), Stream.runCollect @@ -84,13 +85,13 @@ describe("Stream", () => { })) it.effect("timeoutTo - should switch streams", () => - Effect.gen(function*($) { - const coordination = yield* $(chunkCoordination([ + Effect.gen(function*() { + const coordination = yield* chunkCoordination([ Chunk.of(1), Chunk.of(2), Chunk.of(3) - ])) - const fiber = yield* $( + ]) + const fiber = yield* pipe( Stream.fromQueue(coordination.queue), Stream.filterMapWhile(Exit.match({ onSuccess: Option.some, onFailure: Option.none })), Stream.flattenChunks, @@ -99,51 +100,51 @@ describe("Stream", () => { Stream.runCollect, Effect.fork ) - yield* $( + yield* pipe( coordination.offer, Effect.zipRight(TestClock.adjust(Duration.seconds(1))), Effect.zipRight(coordination.awaitNext) ) - yield* $( + yield* pipe( coordination.offer, Effect.zipRight(TestClock.adjust(Duration.seconds(3))), Effect.zipRight(coordination.awaitNext) ) - yield* $(coordination.offer) - const result = yield* $(Fiber.join(fiber)) + yield* coordination.offer + const result = yield* Fiber.join(fiber) deepStrictEqual(Array.from(result), [1, 2, 4]) })) it.effect("timeoutTo - should not apply timeout after switch", () => - Effect.gen(function*($) { - const queue1 = yield* $(Queue.unbounded()) - const queue2 = yield* $(Queue.unbounded()) + Effect.gen(function*() { + const queue1 = yield* Queue.unbounded() + const queue2 = yield* Queue.unbounded() const stream1 = Stream.fromQueue(queue1) const stream2 = Stream.fromQueue(queue2) - const fiber = yield* $( + const fiber = yield* pipe( stream1, Stream.timeoutTo(Duration.seconds(2), stream2), Stream.runCollect, Effect.fork ) - yield* $( + yield* pipe( Queue.offer(queue1, 1), Effect.zipRight(TestClock.adjust(Duration.seconds(1))) ) - yield* $( + yield* pipe( Queue.offer(queue1, 2), Effect.zipRight(TestClock.adjust(Duration.seconds(3))) ) - yield* $(Queue.offer(queue1, 3)) - yield* $( + yield* Queue.offer(queue1, 3) + yield* pipe( Queue.offer(queue2, 4), Effect.zipRight(TestClock.adjust(Duration.seconds(3))) ) - yield* $( + yield* pipe( Queue.offer(queue2, 5), Effect.zipRight(Queue.shutdown(queue2)) ) - const result = yield* $(Fiber.join(fiber)) + const result = yield* Fiber.join(fiber) deepStrictEqual(Array.from(result), [1, 2, 4, 5]) })) }) diff --git a/packages/effect/test/Stream/transducing.test.ts b/packages/effect/test/Stream/transducing.test.ts index b11c392ef8..99d447aa26 100644 --- a/packages/effect/test/Stream/transducing.test.ts +++ b/packages/effect/test/Stream/transducing.test.ts @@ -9,8 +9,8 @@ import { describe } from "vitest" describe("Stream", () => { it.effect("transduce - simple example", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make("1", "2", ",", "3", "4"), Stream.transduce( pipe( @@ -25,8 +25,8 @@ describe("Stream", () => { })) it.effect("transduce - no remainder", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 2, 3, 4), Stream.transduce(Sink.fold(100, (n) => n % 2 === 0, (acc, n) => acc + n)), Stream.runCollect @@ -35,8 +35,8 @@ describe("Stream", () => { })) it.effect("transduce - with a sink that always signals more", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 2, 3), Stream.transduce(Sink.fold(0, constTrue, (acc, n) => acc + n)), Stream.runCollect @@ -45,8 +45,8 @@ describe("Stream", () => { })) it.effect("transduce - propagates scope error", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 2, 3), Stream.transduce(Sink.fail("Woops")), Stream.runCollect, diff --git a/packages/effect/test/Stream/zipping.test.ts b/packages/effect/test/Stream/zipping.test.ts index 9cd7d1c340..01a5e68e51 100644 --- a/packages/effect/test/Stream/zipping.test.ts +++ b/packages/effect/test/Stream/zipping.test.ts @@ -80,13 +80,13 @@ describe("Stream", () => { }) it.effect("zip - does not pull too much when one of the streams is done", () => - Effect.gen(function*($) { + Effect.gen(function*() { const left = pipe( Stream.fromChunks(Chunk.make(1, 2), Chunk.make(3, 4), Chunk.of(5)), Stream.concat(Stream.fail("boom")) ) const right = Stream.fromChunks(Chunk.make("a", "b"), Chunk.of("c")) - const result = yield* $(left, Stream.zip(right), Stream.runCollect) + const result = yield* pipe(left, Stream.zip(right), Stream.runCollect) deepStrictEqual(Array.from(result), [[1, "a"], [2, "b"], [3, "c"]]) })) @@ -107,8 +107,8 @@ describe("Stream", () => { )) it.effect("zip - terminate in uninterruptible region", () => - Effect.gen(function*(_) { - const result = yield* _( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1), Stream.zip(Stream.make(2)), Stream.runDrain, @@ -118,8 +118,8 @@ describe("Stream", () => { })) it.effect("zipWith - prioritizes failures", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.never, Stream.zipWith(Stream.fail("Ouch"), () => Option.none()), Stream.runCollect, @@ -129,8 +129,8 @@ describe("Stream", () => { })) it.effect("zipWith - dies if one of the streams throws an exception", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1), Stream.flatMap(() => Stream.sync(() => { @@ -177,8 +177,8 @@ describe("Stream", () => { // ))) it.effect("zipAll - prioritizes failures", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.never, Stream.zipAll({ other: Stream.fail("Ouch"), @@ -192,37 +192,37 @@ describe("Stream", () => { })) it.effect("zipWithIndex", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream = Stream.make(1, 2, 3, 4, 5) - const { result1, result2 } = yield* $(Effect.all({ + const { result1, result2 } = yield* Effect.all({ result1: Stream.runCollect(Stream.zipWithIndex(stream)), result2: pipe(Stream.runCollect(stream), Effect.map(Chunk.map((a, i) => [a, i] as const))) - })) + }) deepStrictEqual(Array.from(result1), Array.from(result2)) })) it.effect("zipLatest", () => - Effect.gen(function*($) { - const left = yield* $(Queue.unbounded>()) - const right = yield* $(Queue.unbounded>()) - const output = yield* $(Queue.bounded>(1)) - yield* $( + Effect.gen(function*() { + const left = yield* Queue.unbounded>() + const right = yield* Queue.unbounded>() + const output = yield* Queue.bounded>(1) + yield* pipe( Stream.fromChunkQueue(left), Stream.zipLatest(Stream.fromChunkQueue(right)), Stream.runIntoQueue(output), Effect.fork ) - yield* $(Queue.offer(left, Chunk.make(0))) - yield* $(Queue.offerAll(right, [Chunk.make(0), Chunk.make(1)])) - const chunk1 = yield* $( + yield* Queue.offer(left, Chunk.make(0)) + yield* Queue.offerAll(right, [Chunk.make(0), Chunk.make(1)]) + const chunk1 = yield* pipe( Queue.take(output), Effect.flatMap(Take.done), Effect.replicateEffect(2), Effect.map(Chunk.unsafeFromArray), Effect.map(Chunk.flatten) ) - yield* $(Queue.offerAll(left, [Chunk.make(1), Chunk.make(2)])) - const chunk2 = yield* $( + yield* Queue.offerAll(left, [Chunk.make(1), Chunk.make(2)]) + const chunk2 = yield* pipe( Queue.take(output), Effect.flatMap(Take.done), Effect.replicateEffect(2), @@ -234,16 +234,16 @@ describe("Stream", () => { })) it.effect("zipLatestWith - handles empty pulls properly", () => - Effect.gen(function*($) { + Effect.gen(function*() { const stream0 = Stream.fromChunks( Chunk.empty(), Chunk.empty(), Chunk.make(2) ) const stream1 = Stream.fromChunks(Chunk.make(1), Chunk.make(1)) - const deferred = yield* $(Deferred.make()) - const latch = yield* $(Deferred.make()) - const fiber = yield* $( + const deferred = yield* Deferred.make() + const latch = yield* Deferred.make() + const fiber = yield* pipe( stream0, Stream.concat(Stream.fromEffect(Deferred.await(deferred))), Stream.concat(Stream.make(2)), @@ -259,15 +259,15 @@ describe("Stream", () => { Stream.runCollect, Effect.fork ) - yield* $(Deferred.await(latch)) - yield* $(Deferred.succeed(deferred, 2)) - const result = yield* $(Fiber.join(fiber)) + yield* Deferred.await(latch) + yield* Deferred.succeed(deferred, 2) + const result = yield* Fiber.join(fiber) deepStrictEqual(Array.from(result), [1, 1, 1]) })) it.effect("zipLatestWith - handles empty pulls properly (JVM Only - LOL)", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.unfold(0, (n) => Option.some( [ @@ -307,8 +307,8 @@ describe("Stream", () => { }) it.effect("zipWithNext", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 2, 3), Stream.zipWithNext, Stream.runCollect @@ -321,8 +321,8 @@ describe("Stream", () => { })) it.effect("zipWithNext - should work with multiple chunks", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.fromChunks(Chunk.of(1), Chunk.of(2), Chunk.of(3)), Stream.zipWithNext, Stream.runCollect @@ -335,8 +335,8 @@ describe("Stream", () => { })) it.effect("zipWithNext - should work with an empty stream", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.empty, Stream.zipWithNext, Stream.runCollect @@ -365,8 +365,8 @@ describe("Stream", () => { }))) it.effect("zipWithPrevious - should zip with previous element for a single chunk", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 2, 3), Stream.zipWithPrevious, Stream.runCollect @@ -379,8 +379,8 @@ describe("Stream", () => { })) it.effect("zipWithPrevious - should work with multiple chunks", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.fromChunks(Chunk.of(1), Chunk.of(2), Chunk.of(3)), Stream.zipWithPrevious, Stream.runCollect @@ -393,8 +393,8 @@ describe("Stream", () => { })) it.effect("zipWithPrevious - should work with an empty stream", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.empty, Stream.zipWithPrevious, Stream.runCollect @@ -422,8 +422,8 @@ describe("Stream", () => { }))) it.effect("zipWithPreviousAndNext", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.make(1, 2, 3), Stream.zipWithPreviousAndNext, Stream.runCollect @@ -468,8 +468,8 @@ describe("Stream", () => { }))) it.effect("zipLatestAll", () => - Effect.gen(function*($) { - const result = yield* $( + Effect.gen(function*() { + const result = yield* pipe( Stream.zipLatestAll( Stream.make(1, 2, 3).pipe(Stream.rechunk(1)), Stream.make("a", "b", "c").pipe(Stream.rechunk(1)), diff --git a/packages/effect/test/SubscriptionRef.test.ts b/packages/effect/test/SubscriptionRef.test.ts index e4101d02f5..aee446d669 100644 --- a/packages/effect/test/SubscriptionRef.test.ts +++ b/packages/effect/test/SubscriptionRef.test.ts @@ -5,65 +5,65 @@ import { describe } from "vitest" describe("SubscriptionRef", () => { it.effect("multiple subscribers can receive changes", () => - Effect.gen(function*($) { - const subscriptionRef = yield* $(SubscriptionRef.make(0)) - const deferred1 = yield* $(Deferred.make()) - const deferred2 = yield* $(Deferred.make()) - const subscriber1 = yield* $( + Effect.gen(function*() { + const subscriptionRef = yield* (SubscriptionRef.make(0)) + const deferred1 = yield* (Deferred.make()) + const deferred2 = yield* (Deferred.make()) + const subscriber1 = yield* pipe( subscriptionRef.changes, Stream.tap(() => Deferred.succeed(deferred1, void 0)), Stream.take(3), Stream.runCollect, Effect.fork ) - yield* $(Deferred.await(deferred1)) - yield* $(SubscriptionRef.update(subscriptionRef, (n) => n + 1)) - const subscriber2 = yield* $( + yield* (Deferred.await(deferred1)) + yield* (SubscriptionRef.update(subscriptionRef, (n) => n + 1)) + const subscriber2 = yield* pipe( subscriptionRef.changes, Stream.tap(() => Deferred.succeed(deferred2, void 0)), Stream.take(2), Stream.runCollect, Effect.fork ) - yield* $(Deferred.await(deferred2)) - yield* $(SubscriptionRef.update(subscriptionRef, (n) => n + 1)) - const result1 = yield* $(Fiber.join(subscriber1)) - const result2 = yield* $(Fiber.join(subscriber2)) + yield* (Deferred.await(deferred2)) + yield* (SubscriptionRef.update(subscriptionRef, (n) => n + 1)) + const result1 = yield* (Fiber.join(subscriber1)) + const result2 = yield* (Fiber.join(subscriber2)) deepStrictEqual(Array.from(result1), [0, 1, 2]) deepStrictEqual(Array.from(result2), [1, 2]) })) it.effect("subscriptions are interruptible", () => - Effect.gen(function*($) { - const subscriptionRef = yield* $(SubscriptionRef.make(0)) - const deferred1 = yield* $(Deferred.make()) - const deferred2 = yield* $(Deferred.make()) - const subscriber1 = yield* $( + Effect.gen(function*() { + const subscriptionRef = yield* (SubscriptionRef.make(0)) + const deferred1 = yield* (Deferred.make()) + const deferred2 = yield* (Deferred.make()) + const subscriber1 = yield* pipe( subscriptionRef.changes, Stream.tap(() => Deferred.succeed(deferred1, void 0)), Stream.take(5), Stream.runCollect, Effect.fork ) - yield* $(Deferred.await(deferred1)) - yield* $(SubscriptionRef.update(subscriptionRef, (n) => n + 1)) - const subscriber2 = yield* $( + yield* (Deferred.await(deferred1)) + yield* (SubscriptionRef.update(subscriptionRef, (n) => n + 1)) + const subscriber2 = yield* pipe( subscriptionRef.changes, Stream.tap(() => Deferred.succeed(deferred2, void 0)), Stream.take(2), Stream.runCollect, Effect.fork ) - yield* $(Deferred.await(deferred2)) - yield* $(SubscriptionRef.update(subscriptionRef, (n) => n + 1)) - const result1 = yield* $(Fiber.interrupt(subscriber1)) - const result2 = yield* $(Fiber.join(subscriber2)) + yield* (Deferred.await(deferred2)) + yield* (SubscriptionRef.update(subscriptionRef, (n) => n + 1)) + const result1 = yield* (Fiber.interrupt(subscriber1)) + const result2 = yield* (Fiber.join(subscriber2)) assertTrue(Exit.isInterrupted(result1)) deepStrictEqual(Array.from(result2), [1, 2]) })) it.effect("concurrent subscribes and unsubscribes are handled correctly", () => - Effect.gen(function*($) { + Effect.gen(function*() { const subscriber = (subscriptionRef: SubscriptionRef.SubscriptionRef) => pipe( Random.nextIntBetween(0, 200), @@ -75,13 +75,13 @@ describe("SubscriptionRef", () => { ) ) ) - const subscriptionRef = yield* $(SubscriptionRef.make(0)) - const fiber = yield* $( + const subscriptionRef = yield* (SubscriptionRef.make(0)) + const fiber = yield* pipe( SubscriptionRef.update(subscriptionRef, (n) => n + 1), Effect.forever, Effect.fork ) - const result = yield* $( + const result = yield* ( Effect.map( Effect.all( Array.from({ length: 2 }, () => subscriber(subscriptionRef)), @@ -90,7 +90,7 @@ describe("SubscriptionRef", () => { Chunk.unsafeFromArray ) ) - yield* $(Fiber.interrupt(fiber)) + yield* (Fiber.interrupt(fiber)) const isSorted = Chunk.every(result, (chunk) => Equal.equals(chunk, Chunk.sort(chunk, Number.Order))) assertTrue(isSorted) })) diff --git a/packages/effect/test/SynchronizedRef.test.ts b/packages/effect/test/SynchronizedRef.test.ts index 504058dbd0..fd5d78d3e8 100644 --- a/packages/effect/test/SynchronizedRef.test.ts +++ b/packages/effect/test/SynchronizedRef.test.ts @@ -1,4 +1,4 @@ -import { Deferred, Effect, Exit, Fiber, Option, SynchronizedRef } from "effect" +import { Deferred, Effect, Exit, Fiber, Option, pipe, SynchronizedRef } from "effect" import { deepStrictEqual, strictEqual } from "effect/test/util" import * as it from "effect/test/utils/extend" import { describe } from "vitest" @@ -31,8 +31,8 @@ const isClosed = (self: State): boolean => self._tag === "Closed" describe("SynchronizedRef", () => { it.effect("get", () => - Effect.gen(function*($) { - const result = yield* $(SynchronizedRef.make(current), Effect.flatMap(SynchronizedRef.get)) + Effect.gen(function*() { + const result = yield* pipe(SynchronizedRef.make(current), Effect.flatMap(SynchronizedRef.get)) strictEqual(result, current) })) it.effect("getAndUpdateEffect - happy path", () => @@ -44,44 +44,44 @@ describe("SynchronizedRef", () => { strictEqual(result2, update) })) it.effect("getAndUpdateEffect - with failure", () => - Effect.gen(function*($) { - const ref = yield* $(SynchronizedRef.make(current)) - const result = yield* $(SynchronizedRef.getAndUpdateEffect(ref, (_) => Effect.fail(failure)), Effect.exit) + Effect.gen(function*() { + const ref = yield* SynchronizedRef.make(current) + const result = yield* pipe(SynchronizedRef.getAndUpdateEffect(ref, (_) => Effect.fail(failure)), Effect.exit) deepStrictEqual(result, Exit.fail(failure)) })) it.effect("getAndUpdateSomeEffect - happy path", () => - Effect.gen(function*($) { - const ref = yield* $(SynchronizedRef.make(Active)) - const result1 = yield* $(SynchronizedRef.getAndUpdateSomeEffect(ref, (state) => + Effect.gen(function*() { + const ref = yield* SynchronizedRef.make(Active) + const result1 = yield* (SynchronizedRef.getAndUpdateSomeEffect(ref, (state) => isClosed(state) ? Option.some(Effect.succeed(Changed)) : Option.none())) - const result2 = yield* $(SynchronizedRef.get(ref)) + const result2 = yield* SynchronizedRef.get(ref) deepStrictEqual(result1, Active) deepStrictEqual(result2, Active) })) it.effect("getAndUpdateSomeEffect - twice", () => - Effect.gen(function*($) { - const ref = yield* $(SynchronizedRef.make(Active)) - const result1 = yield* $(SynchronizedRef.getAndUpdateSomeEffect(ref, (state) => + Effect.gen(function*() { + const ref = yield* SynchronizedRef.make(Active) + const result1 = yield* SynchronizedRef.getAndUpdateSomeEffect(ref, (state) => isActive(state) ? Option.some(Effect.succeed(Changed)) : - Option.none())) - const result2 = yield* $(SynchronizedRef.getAndUpdateSomeEffect(ref, (state) => + Option.none()) + const result2 = yield* SynchronizedRef.getAndUpdateSomeEffect(ref, (state) => isClosed(state) ? Option.some(Effect.succeed(Active)) : isChanged(state) ? Option.some(Effect.succeed(Closed)) - : Option.none())) + : Option.none()) const result3 = yield* ref deepStrictEqual(result1, Active) deepStrictEqual(result2, Changed) deepStrictEqual(result3, Closed) })) it.effect("getAndUpdateSomeEffect - with failure", () => - Effect.gen(function*($) { - const ref = yield* $(SynchronizedRef.make(Active)) - const result = yield* $( + Effect.gen(function*() { + const ref = yield* SynchronizedRef.make(Active) + const result = yield* pipe( SynchronizedRef.getAndUpdateSomeEffect(ref, (state) => isActive(state) ? Option.some(Effect.fail(failure)) : @@ -91,16 +91,16 @@ describe("SynchronizedRef", () => { deepStrictEqual(result, Exit.fail(failure)) })) it.effect("getAndUpdateSomeEffect - interrupt parent fiber and update", () => - Effect.gen(function*($) { - const deferred = yield* $(Deferred.make>()) - const latch = yield* $(Deferred.make()) + Effect.gen(function*() { + const deferred = yield* Deferred.make>() + const latch = yield* Deferred.make() const makeAndWait = Deferred.complete(deferred, SynchronizedRef.make(Active)).pipe( Effect.zipRight(Deferred.await(latch)) ) - const fiber = yield* $(Effect.fork(makeAndWait)) - const ref = yield* $(Deferred.await(deferred)) - yield* $(Fiber.interrupt(fiber)) - const result = yield* $(SynchronizedRef.updateAndGetEffect(ref, (_) => Effect.succeed(Closed))) + const fiber = yield* Effect.fork(makeAndWait) + const ref = yield* Deferred.await(deferred) + yield* Fiber.interrupt(fiber) + const result = yield* SynchronizedRef.updateAndGetEffect(ref, (_) => Effect.succeed(Closed)) deepStrictEqual(result, Closed) })) }) diff --git a/packages/effect/test/TArray.test.ts b/packages/effect/test/TArray.test.ts index cfe8efe5e1..2ee318f011 100644 --- a/packages/effect/test/TArray.test.ts +++ b/packages/effect/test/TArray.test.ts @@ -31,10 +31,10 @@ const valuesOf = (array: TArray.TArray): STM.STM> => describe("TArray", () => { it.effect("collectFirst - finds and transforms correctly", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStairWithHoles(n)) - const result = yield* $(pipe( + const array = yield* (makeStairWithHoles(n)) + const result = yield* (pipe( array, TArray.collectFirst((option) => Option.isSome(option) && option.value > 2 ? @@ -46,17 +46,17 @@ describe("TArray", () => { })) it.effect("collectFirst - succeeds for empty array", () => - Effect.gen(function*($) { - const array = yield* $(makeTArray>(0, Option.none())) - const result = yield* $(pipe(array, TArray.collectFirst(identity))) + Effect.gen(function*() { + const array = yield* (makeTArray>(0, Option.none())) + const result = yield* (pipe(array, TArray.collectFirst(identity))) assertNone(result) })) it.effect("collectFirst - fails to find absent", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStairWithHoles(n)) - const result = yield* $(pipe( + const array = yield* (makeStairWithHoles(n)) + const result = yield* (pipe( array, TArray.collectFirst((option) => Option.isSome(option) && option.value > n ? @@ -68,10 +68,10 @@ describe("TArray", () => { })) it.effect("collectFirst - is atomic", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 1_000 - const array = yield* $(makeStairWithHoles(n)) - const fiber = yield* $(pipe( + const array = yield* (makeStairWithHoles(n)) + const fiber = yield* (pipe( array, TArray.collectFirst((option) => Option.isSome(option) && option.value % largePrime === 0 ? @@ -80,11 +80,11 @@ describe("TArray", () => { ), Effect.fork )) - yield* $(pipe( + yield* (pipe( Chunk.range(0, n - 1), STM.forEach((n) => pipe(array, TArray.update(n, () => Option.some(1)))) )) - const result = yield* $(Fiber.join(fiber)) + const result = yield* (Fiber.join(fiber)) assertTrue( (Option.isSome(result) && result.value === String(largePrime)) || Option.isNone(result) @@ -92,10 +92,10 @@ describe("TArray", () => { })) it.effect("collectFirstSTM - finds and transforms correctly", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStairWithHoles(n)) - const result = yield* $(pipe( + const array = yield* (makeStairWithHoles(n)) + const result = yield* (pipe( array, TArray.collectFirstSTM((option) => Option.isSome(option) && option.value > 2 ? @@ -107,9 +107,9 @@ describe("TArray", () => { })) it.effect("collectFirstSTM - succeeds for empty array", () => - Effect.gen(function*($) { - const array = yield* $(makeTArray>(0, Option.none())) - const result = yield* $(pipe( + Effect.gen(function*() { + const array = yield* (makeTArray>(0, Option.none())) + const result = yield* (pipe( array, TArray.collectFirstSTM((option) => Option.isSome(option) ? @@ -121,10 +121,10 @@ describe("TArray", () => { })) it.effect("collectFirstSTM - fails to find absent", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStairWithHoles(n)) - const result = yield* $(pipe( + const array = yield* (makeStairWithHoles(n)) + const result = yield* (pipe( array, TArray.collectFirstSTM((option) => Option.isSome(option) && option.value > n ? @@ -136,10 +136,10 @@ describe("TArray", () => { })) it.effect("collectFirstSTM - is atomic", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 1_000 - const array = yield* $(makeStairWithHoles(n)) - const fiber = yield* $(pipe( + const array = yield* (makeStairWithHoles(n)) + const fiber = yield* (pipe( array, TArray.collectFirstSTM((option) => Option.isSome(option) && option.value % largePrime === 0 ? @@ -148,11 +148,11 @@ describe("TArray", () => { ), Effect.fork )) - yield* $(pipe( + yield* (pipe( Chunk.range(0, n - 1), STM.forEach((n) => pipe(array, TArray.update(n, () => Option.some(1)))) )) - const result = yield* $(Fiber.join(fiber)) + const result = yield* (Fiber.join(fiber)) assertTrue( (Option.isSome(result) && result.value === String(largePrime)) || Option.isNone(result) @@ -160,10 +160,10 @@ describe("TArray", () => { })) it.effect("collectFirstSTM - fails on errors before result found", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStairWithHoles(n)) - const result = yield* $(pipe( + const array = yield* (makeStairWithHoles(n)) + const result = yield* (pipe( array, TArray.collectFirstSTM((option) => Option.isSome(option) && option.value > 2 ? @@ -176,10 +176,10 @@ describe("TArray", () => { })) it.effect("collectFirstSTM - succeeds on errors after result found", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStairWithHoles(n)) - const result = yield* $(pipe( + const array = yield* (makeStairWithHoles(n)) + const result = yield* (pipe( array, TArray.collectFirstSTM((option) => Option.isSome(option) ? @@ -195,125 +195,125 @@ describe("TArray", () => { })) it.effect("contains - true when in the array", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe(array, TArray.contains(3))) + const array = yield* (makeStair(n)) + const result = yield* (pipe(array, TArray.contains(3))) assertTrue(result) })) it.effect("contains - false when not in the array", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe(array, TArray.contains(n + 1))) + const array = yield* (makeStair(n)) + const result = yield* (pipe(array, TArray.contains(n + 1))) assertFalse(result) })) it.effect("contains - false for empty array", () => - Effect.gen(function*($) { - const array = yield* $(TArray.empty()) - const result = yield* $(pipe(array, TArray.contains(0))) + Effect.gen(function*() { + const array = yield* (TArray.empty()) + const result = yield* (pipe(array, TArray.contains(0))) assertFalse(result) })) it.effect("count - computes correct sum", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe(array, TArray.count((n) => n % 2 === 0))) + const array = yield* (makeStair(n)) + const result = yield* (pipe(array, TArray.count((n) => n % 2 === 0))) strictEqual(result, 5) })) it.effect("count - zero when the predicate does not match", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe(array, TArray.count((i) => i > n))) + const array = yield* (makeStair(n)) + const result = yield* (pipe(array, TArray.count((i) => i > n))) strictEqual(result, 0) })) it.effect("count - zero for empty array", () => - Effect.gen(function*($) { - const array = yield* $(TArray.empty()) - const result = yield* $(pipe(array, TArray.count(constTrue))) + Effect.gen(function*() { + const array = yield* (TArray.empty()) + const result = yield* (pipe(array, TArray.count(constTrue))) strictEqual(result, 0) })) it.effect("countSTM - computes correct sum", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe(array, TArray.countSTM((n) => STM.succeed(n % 2 === 0)))) + const array = yield* (makeStair(n)) + const result = yield* (pipe(array, TArray.countSTM((n) => STM.succeed(n % 2 === 0)))) strictEqual(result, 5) })) it.effect("countSTM - zero when the predicate does not match", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe(array, TArray.countSTM((i) => STM.succeed(i > n)))) + const array = yield* (makeStair(n)) + const result = yield* (pipe(array, TArray.countSTM((i) => STM.succeed(i > n)))) strictEqual(result, 0) })) it.effect("countSTM - zero for empty array", () => - Effect.gen(function*($) { - const array = yield* $(TArray.empty()) - const result = yield* $(pipe(array, TArray.countSTM(() => STM.succeed(true)))) + Effect.gen(function*() { + const array = yield* (TArray.empty()) + const result = yield* (pipe(array, TArray.countSTM(() => STM.succeed(true)))) strictEqual(result, 0) })) it.effect("every - detects satisfaction", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe(array, TArray.every((i) => i < n + 1))) + const array = yield* (makeStair(n)) + const result = yield* (pipe(array, TArray.every((i) => i < n + 1))) assertTrue(result) })) it.effect("every - detects lack of satisfaction", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe(array, TArray.every((i) => i < n - 1))) + const array = yield* (makeStair(n)) + const result = yield* (pipe(array, TArray.every((i) => i < n - 1))) assertFalse(result) })) it.effect("every - detects lack of satisfaction", () => - Effect.gen(function*($) { - const array = yield* $(TArray.empty()) - const result = yield* $(pipe(array, TArray.every(constFalse))) + Effect.gen(function*() { + const array = yield* (TArray.empty()) + const result = yield* (pipe(array, TArray.every(constFalse))) assertTrue(result) })) it.effect("everySTM - detects satisfaction", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe(array, TArray.everySTM((i) => STM.succeed(i < n + 1)))) + const array = yield* (makeStair(n)) + const result = yield* (pipe(array, TArray.everySTM((i) => STM.succeed(i < n + 1)))) assertTrue(result) })) it.effect("everySTM - detects lack of satisfaction", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe(array, TArray.everySTM((i) => STM.succeed(i < n - 1)))) + const array = yield* (makeStair(n)) + const result = yield* (pipe(array, TArray.everySTM((i) => STM.succeed(i < n - 1)))) assertFalse(result) })) it.effect("everySTM - detects lack of satisfaction", () => - Effect.gen(function*($) { - const array = yield* $(TArray.empty()) - const result = yield* $(pipe(array, TArray.everySTM(() => STM.succeed(false)))) + Effect.gen(function*() { + const array = yield* (TArray.empty()) + const result = yield* (pipe(array, TArray.everySTM(() => STM.succeed(false)))) assertTrue(result) })) it.effect("everySTM - fails for errors before counterexample", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe( + const array = yield* (makeStair(n)) + const result = yield* (pipe( array, TArray.everySTM((n) => n === 4 ? STM.fail("boom") : STM.succeed(n !== 5)), STM.flip @@ -322,10 +322,10 @@ describe("TArray", () => { })) it.effect("everySTM - fails for errors after counterexample", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe( + const array = yield* (makeStair(n)) + const result = yield* (pipe( array, TArray.everySTM((n) => n === 6 ? STM.fail("boom") : STM.succeed(n === 5)), STM.flip @@ -334,8 +334,8 @@ describe("TArray", () => { })) it.effect("get - happy path", () => - Effect.gen(function*($) { - const result = yield* $(pipe( + Effect.gen(function*() { + const result = yield* (pipe( makeTArray(1, 42), STM.flatMap(TArray.get(0)) )) @@ -343,42 +343,42 @@ describe("TArray", () => { })) it.effect("findFirst - is correct", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe(array, TArray.findFirst((n) => n % 5 === 0))) + const array = yield* (makeStair(n)) + const result = yield* (pipe(array, TArray.findFirst((n) => n % 5 === 0))) assertSome(result, 5) })) it.effect("findFirst - succeeds for empty array", () => - Effect.gen(function*($) { - const array = yield* $(TArray.empty()) - const result = yield* $(pipe(array, TArray.findFirst(constTrue))) + Effect.gen(function*() { + const array = yield* (TArray.empty()) + const result = yield* (pipe(array, TArray.findFirst(constTrue))) assertNone(result) })) it.effect("findFirst - fails to find absent", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe(array, TArray.findFirst((i) => i > n))) + const array = yield* (makeStair(n)) + const result = yield* (pipe(array, TArray.findFirst((i) => i > n))) assertNone(result) })) it.effect("findFirst - is atomic", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 1_000 - const array = yield* $(makeStair(n)) - const fiber = yield* $(pipe( + const array = yield* (makeStair(n)) + const fiber = yield* (pipe( array, TArray.findFirst((n) => n % largePrime === 0), Effect.fork )) - yield* $(pipe( + yield* (pipe( Chunk.range(1, n - 1), STM.forEach((n) => pipe(array, TArray.update(n, () => 1))) )) - const result = yield* $(Fiber.join(fiber)) + const result = yield* (Fiber.join(fiber)) assertTrue( (Option.isSome(result) && result.value === largePrime) || Option.isNone(result) @@ -386,91 +386,91 @@ describe("TArray", () => { })) it.effect("findFirstIndex - correct index if in array", () => - Effect.gen(function*($) { - const array = yield* $(makeRepeats(3, 3)) - const result = yield* $(pipe(array, TArray.findFirstIndex(2))) + Effect.gen(function*() { + const array = yield* (makeRepeats(3, 3)) + const result = yield* (pipe(array, TArray.findFirstIndex(2))) assertSome(result, 1) })) it.effect("findFirstIndex - none for empty array", () => - Effect.gen(function*($) { - const array = yield* $(TArray.empty()) - const result = yield* $(pipe(array, TArray.findFirstIndex(1))) + Effect.gen(function*() { + const array = yield* (TArray.empty()) + const result = yield* (pipe(array, TArray.findFirstIndex(1))) assertNone(result) })) it.effect("findFirstIndex - none if absent", () => - Effect.gen(function*($) { - const array = yield* $(makeRepeats(3, 3)) - const result = yield* $(pipe(array, TArray.findFirstIndex(4))) + Effect.gen(function*() { + const array = yield* (makeRepeats(3, 3)) + const result = yield* (pipe(array, TArray.findFirstIndex(4))) assertNone(result) })) it.effect("findFirstIndexFrom - correct index if in array, with offset", () => - Effect.gen(function*($) { - const array = yield* $(makeRepeats(3, 3)) - const result = yield* $(pipe(array, TArray.findFirstIndexFrom(2, 2))) + Effect.gen(function*() { + const array = yield* (makeRepeats(3, 3)) + const result = yield* (pipe(array, TArray.findFirstIndexFrom(2, 2))) assertSome(result, 4) })) it.effect("findFirstIndexFrom - none if absent after offset", () => - Effect.gen(function*($) { - const array = yield* $(makeRepeats(3, 3)) - const result = yield* $(pipe(array, TArray.findFirstIndexFrom(1, 7))) + Effect.gen(function*() { + const array = yield* (makeRepeats(3, 3)) + const result = yield* (pipe(array, TArray.findFirstIndexFrom(1, 7))) assertNone(result) })) it.effect("findFirstIndexFrom - none for a negative offset", () => - Effect.gen(function*($) { - const array = yield* $(makeRepeats(3, 3)) - const result = yield* $(pipe(array, TArray.findFirstIndexFrom(1, -1))) + Effect.gen(function*() { + const array = yield* (makeRepeats(3, 3)) + const result = yield* (pipe(array, TArray.findFirstIndexFrom(1, -1))) assertNone(result) })) it.effect("findFirstIndexFrom - none for an offset that is too large", () => - Effect.gen(function*($) { - const array = yield* $(makeRepeats(3, 3)) - const result = yield* $(pipe(array, TArray.findFirstIndexFrom(1, 9))) + Effect.gen(function*() { + const array = yield* (makeRepeats(3, 3)) + const result = yield* (pipe(array, TArray.findFirstIndexFrom(1, 9))) assertNone(result) })) it.effect("findFirstIndexWhere - determines the correct index", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe(array, TArray.findFirstIndexWhere((n) => n % 5 === 0))) + const array = yield* (makeStair(n)) + const result = yield* (pipe(array, TArray.findFirstIndexWhere((n) => n % 5 === 0))) assertSome(result, 4) })) it.effect("findFirstIndexWhere - none for empty array", () => - Effect.gen(function*($) { - const array = yield* $(TArray.empty()) - const result = yield* $(pipe(array, TArray.findFirstIndexWhere(constTrue))) + Effect.gen(function*() { + const array = yield* (TArray.empty()) + const result = yield* (pipe(array, TArray.findFirstIndexWhere(constTrue))) assertNone(result) })) it.effect("findFirstIndexWhere - none for empty array", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe(array, TArray.findFirstIndexWhere((i) => i > n))) + const array = yield* (makeStair(n)) + const result = yield* (pipe(array, TArray.findFirstIndexWhere((i) => i > n))) assertNone(result) })) it.effect("findFirstIndexWhere - is atomic", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 1_000 - const array = yield* $(makeStair(n)) - const fiber = yield* $(pipe( + const array = yield* (makeStair(n)) + const fiber = yield* (pipe( array, TArray.findFirstIndexWhere((n) => n % largePrime === 0), Effect.fork )) - yield* $(pipe( + yield* (pipe( Chunk.range(0, n - 1), STM.forEach((n) => pipe(array, TArray.update(n, () => 1))) )) - const result = yield* $(Fiber.join(fiber)) + const result = yield* (Fiber.join(fiber)) assertTrue( (Option.isSome(result) && result.value === largePrime - 1) || Option.isNone(result) @@ -478,74 +478,74 @@ describe("TArray", () => { })) it.effect("findFirstIndexWhereFrom - determines the correct index, with offset", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe(array, TArray.findFirstIndexWhereFrom((n) => n % 2 === 0, 5))) + const array = yield* (makeStair(n)) + const result = yield* (pipe(array, TArray.findFirstIndexWhereFrom((n) => n % 2 === 0, 5))) assertSome(result, 5) })) it.effect("findFirstIndexWhereFrom - none if absent after offset", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe(array, TArray.findFirstIndexWhereFrom((n) => n % 7 === 0, 7))) + const array = yield* (makeStair(n)) + const result = yield* (pipe(array, TArray.findFirstIndexWhereFrom((n) => n % 7 === 0, 7))) assertNone(result) })) it.effect("findFirstIndexWhereFrom - none for a negative offset", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe(array, TArray.findFirstIndexWhereFrom(constTrue, -1))) + const array = yield* (makeStair(n)) + const result = yield* (pipe(array, TArray.findFirstIndexWhereFrom(constTrue, -1))) assertNone(result) })) it.effect("findFirstIndexWhereFrom - none for an offset that is too large", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe(array, TArray.findFirstIndexWhereFrom(constTrue, n + 1))) + const array = yield* (makeStair(n)) + const result = yield* (pipe(array, TArray.findFirstIndexWhereFrom(constTrue, n + 1))) assertNone(result) })) it.effect("findFirstIndexWhereSTM - determines the correct index", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe(array, TArray.findFirstIndexWhereSTM((n) => STM.succeed(n % 5 === 0)))) + const array = yield* (makeStair(n)) + const result = yield* (pipe(array, TArray.findFirstIndexWhereSTM((n) => STM.succeed(n % 5 === 0)))) assertSome(result, 4) })) it.effect("findFirstIndexWhereSTM - none for empty array", () => - Effect.gen(function*($) { - const array = yield* $(TArray.empty()) - const result = yield* $(pipe(array, TArray.findFirstIndexWhereSTM(() => STM.succeed(true)))) + Effect.gen(function*() { + const array = yield* (TArray.empty()) + const result = yield* (pipe(array, TArray.findFirstIndexWhereSTM(() => STM.succeed(true)))) assertNone(result) })) it.effect("findFirstIndexWhereSTM - none for empty array", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe(array, TArray.findFirstIndexWhereSTM((i) => STM.succeed(i > n)))) + const array = yield* (makeStair(n)) + const result = yield* (pipe(array, TArray.findFirstIndexWhereSTM((i) => STM.succeed(i > n)))) assertNone(result) })) it.effect("findFirstIndexWhereSTM - is atomic", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 1_000 - const array = yield* $(makeStair(n)) - const fiber = yield* $(pipe( + const array = yield* (makeStair(n)) + const fiber = yield* (pipe( array, TArray.findFirstIndexWhereSTM((n) => STM.succeed(n % largePrime === 0)), Effect.fork )) - yield* $(pipe( + yield* (pipe( Chunk.range(0, n - 1), STM.forEach((n) => pipe(array, TArray.update(n, () => 1))) )) - const result = yield* $(Fiber.join(fiber)) + const result = yield* (Fiber.join(fiber)) assertTrue( (Option.isSome(result) && result.value === largePrime - 1) || Option.isNone(result) @@ -553,10 +553,10 @@ describe("TArray", () => { })) it.effect("findFirstIndexWhereSTM - fails on errors before result found", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe( + const array = yield* (makeStair(n)) + const result = yield* (pipe( array, TArray.findFirstIndexWhereSTM((n) => n === 4 ? STM.fail("boom") : STM.succeed(n % 5 === 0)), STM.flip @@ -565,10 +565,10 @@ describe("TArray", () => { })) it.effect("findFirstIndexWhereSTM - succeeds on errors after result found", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe( + const array = yield* (makeStair(n)) + const result = yield* (pipe( array, TArray.findFirstIndexWhereSTM((n) => n === 6 ? STM.fail("boom") : STM.succeed(n % 5 === 0)) )) @@ -576,42 +576,42 @@ describe("TArray", () => { })) it.effect("findFirstIndexWhereFromSTM - determines the correct index, with offset", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe(array, TArray.findFirstIndexWhereFromSTM((n) => STM.succeed(n % 2 === 0), 5))) + const array = yield* (makeStair(n)) + const result = yield* (pipe(array, TArray.findFirstIndexWhereFromSTM((n) => STM.succeed(n % 2 === 0), 5))) assertSome(result, 5) })) it.effect("findFirstIndexWhereFromSTM - none if absent after offset", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe(array, TArray.findFirstIndexWhereFromSTM((n) => STM.succeed(n % 7 === 0), 7))) + const array = yield* (makeStair(n)) + const result = yield* (pipe(array, TArray.findFirstIndexWhereFromSTM((n) => STM.succeed(n % 7 === 0), 7))) assertNone(result) })) it.effect("findFirstIndexWhereFromSTM - none for a negative offset", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe(array, TArray.findFirstIndexWhereFromSTM(() => STM.succeed(true), -1))) + const array = yield* (makeStair(n)) + const result = yield* (pipe(array, TArray.findFirstIndexWhereFromSTM(() => STM.succeed(true), -1))) assertNone(result) })) it.effect("findFirstIndexWherFromeSTM - none for an offset that is too large", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe(array, TArray.findFirstIndexWhereFromSTM(() => STM.succeed(true), n + 1))) + const array = yield* (makeStair(n)) + const result = yield* (pipe(array, TArray.findFirstIndexWhereFromSTM(() => STM.succeed(true), n + 1))) assertNone(result) })) it.effect("findFirstIndexWhereFromSTM - succeeds when error excluded by offset", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe( + const array = yield* (makeStair(n)) + const result = yield* (pipe( array, TArray.findFirstIndexWhereFromSTM((n) => n === 1 @@ -622,42 +622,42 @@ describe("TArray", () => { })) it.effect("findFirstSTM - is correct", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe(array, TArray.findFirstSTM((n) => STM.succeed(n % 5 === 0)))) + const array = yield* (makeStair(n)) + const result = yield* (pipe(array, TArray.findFirstSTM((n) => STM.succeed(n % 5 === 0)))) assertSome(result, 5) })) it.effect("findFirstSTM - succeeds for empty array", () => - Effect.gen(function*($) { - const array = yield* $(TArray.empty()) - const result = yield* $(pipe(array, TArray.findFirstSTM(() => STM.succeed(true)))) + Effect.gen(function*() { + const array = yield* (TArray.empty()) + const result = yield* (pipe(array, TArray.findFirstSTM(() => STM.succeed(true)))) assertNone(result) })) it.effect("findFirstSTM - fails to find absent", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe(array, TArray.findFirstSTM((i) => STM.succeed(i > n)))) + const array = yield* (makeStair(n)) + const result = yield* (pipe(array, TArray.findFirstSTM((i) => STM.succeed(i > n)))) assertNone(result) })) it.effect("findFirstSTM - is atomic", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 1_000 - const array = yield* $(makeStair(n)) - const fiber = yield* $(pipe( + const array = yield* (makeStair(n)) + const fiber = yield* (pipe( array, TArray.findFirstSTM((n) => STM.succeed(n % largePrime === 0)), Effect.fork )) - yield* $(pipe( + yield* (pipe( Chunk.range(1, n - 1), STM.forEach((n) => pipe(array, TArray.update(n, () => 1))) )) - const result = yield* $(Fiber.join(fiber)) + const result = yield* (Fiber.join(fiber)) assertTrue( (Option.isSome(result) && result.value === largePrime) || Option.isNone(result) @@ -665,10 +665,10 @@ describe("TArray", () => { })) it.effect("findFirstSTM - fails on errors before result found", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe( + const array = yield* (makeStair(n)) + const result = yield* (pipe( array, TArray.findFirstSTM((n) => n === 4 ? STM.fail("boom") : STM.succeed(n % 5 === 0)), STM.flip @@ -677,10 +677,10 @@ describe("TArray", () => { })) it.effect("findFirstSTM - succeeds on errors after result found", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe( + const array = yield* (makeStair(n)) + const result = yield* (pipe( array, TArray.findFirstSTM((n) => n === 6 ? STM.fail("boom") : STM.succeed(n % 5 === 0)) )) @@ -688,42 +688,42 @@ describe("TArray", () => { })) it.effect("findLast - is correct", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe(array, TArray.findLast((n) => n % 5 === 0))) + const array = yield* (makeStair(n)) + const result = yield* (pipe(array, TArray.findLast((n) => n % 5 === 0))) assertSome(result, 10) })) it.effect("findLast - succeeds for empty array", () => - Effect.gen(function*($) { - const array = yield* $(TArray.empty()) - const result = yield* $(pipe(array, TArray.findLast(constTrue))) + Effect.gen(function*() { + const array = yield* (TArray.empty()) + const result = yield* (pipe(array, TArray.findLast(constTrue))) assertNone(result) })) it.effect("findLast - fails to find absent", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe(array, TArray.findLast((i) => i > n))) + const array = yield* (makeStair(n)) + const result = yield* (pipe(array, TArray.findLast((i) => i > n))) assertNone(result) })) it.effect("findLast - is atomic", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 1_000 - const array = yield* $(makeStair(n)) - const fiber = yield* $(pipe( + const array = yield* (makeStair(n)) + const fiber = yield* (pipe( array, TArray.findLast((n) => n % largePrime === 0), Effect.fork )) - yield* $(pipe( + yield* (pipe( Chunk.range(1, n - 1), STM.forEach((n) => pipe(array, TArray.update(n, () => 1))) )) - const result = yield* $(Fiber.join(fiber)) + const result = yield* (Fiber.join(fiber)) assertTrue( (Option.isSome(result) && result.value === largePrime) || Option.isNone(result) @@ -731,91 +731,91 @@ describe("TArray", () => { })) it.effect("findLastIndex - correct index if in array", () => - Effect.gen(function*($) { - const array = yield* $(makeRepeats(3, 3)) - const result = yield* $(pipe(array, TArray.findLastIndex(2))) + Effect.gen(function*() { + const array = yield* (makeRepeats(3, 3)) + const result = yield* (pipe(array, TArray.findLastIndex(2))) assertSome(result, 7) })) it.effect("findLastIndex - none for empty array", () => - Effect.gen(function*($) { - const array = yield* $(TArray.empty()) - const result = yield* $(pipe(array, TArray.findLastIndex(1))) + Effect.gen(function*() { + const array = yield* (TArray.empty()) + const result = yield* (pipe(array, TArray.findLastIndex(1))) assertNone(result) })) it.effect("findLastIndex - none if absent", () => - Effect.gen(function*($) { - const array = yield* $(makeRepeats(3, 3)) - const result = yield* $(pipe(array, TArray.findLastIndex(4))) + Effect.gen(function*() { + const array = yield* (makeRepeats(3, 3)) + const result = yield* (pipe(array, TArray.findLastIndex(4))) assertNone(result) })) it.effect("findLastIndexFrom - correct index if in array, with limit", () => - Effect.gen(function*($) { - const array = yield* $(makeRepeats(3, 3)) - const result = yield* $(pipe(array, TArray.findLastIndexFrom(2, 6))) + Effect.gen(function*() { + const array = yield* (makeRepeats(3, 3)) + const result = yield* (pipe(array, TArray.findLastIndexFrom(2, 6))) assertSome(result, 4) })) it.effect("findLastIndexFrom - none if absent before limit", () => - Effect.gen(function*($) { - const array = yield* $(makeRepeats(3, 3)) - const result = yield* $(pipe(array, TArray.findLastIndexFrom(3, 1))) + Effect.gen(function*() { + const array = yield* (makeRepeats(3, 3)) + const result = yield* (pipe(array, TArray.findLastIndexFrom(3, 1))) assertNone(result) })) it.effect("findLastIndexFrom - none for a negative limit", () => - Effect.gen(function*($) { - const array = yield* $(makeRepeats(3, 3)) - const result = yield* $(pipe(array, TArray.findLastIndexFrom(2, -1))) + Effect.gen(function*() { + const array = yield* (makeRepeats(3, 3)) + const result = yield* (pipe(array, TArray.findLastIndexFrom(2, -1))) assertNone(result) })) it.effect("findLastIndexFrom - none for a limit that is too large", () => - Effect.gen(function*($) { - const array = yield* $(makeRepeats(3, 3)) - const result = yield* $(pipe(array, TArray.findLastIndexFrom(2, 9))) + Effect.gen(function*() { + const array = yield* (makeRepeats(3, 3)) + const result = yield* (pipe(array, TArray.findLastIndexFrom(2, 9))) assertNone(result) })) it.effect("findLastSTM - is correct", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe(array, TArray.findLastSTM((n) => STM.succeed(n % 5 === 0)))) + const array = yield* (makeStair(n)) + const result = yield* (pipe(array, TArray.findLastSTM((n) => STM.succeed(n % 5 === 0)))) assertSome(result, 10) })) it.effect("findLastSTM - succeeds for empty array", () => - Effect.gen(function*($) { - const array = yield* $(TArray.empty()) - const result = yield* $(pipe(array, TArray.findLastSTM(() => STM.succeed(true)))) + Effect.gen(function*() { + const array = yield* (TArray.empty()) + const result = yield* (pipe(array, TArray.findLastSTM(() => STM.succeed(true)))) assertNone(result) })) it.effect("findLastSTM - fails to find absent", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe(array, TArray.findLastSTM((i) => STM.succeed(i > n)))) + const array = yield* (makeStair(n)) + const result = yield* (pipe(array, TArray.findLastSTM((i) => STM.succeed(i > n)))) assertNone(result) })) it.effect("findLastSTM - is atomic", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 1_000 - const array = yield* $(makeStair(n)) - const fiber = yield* $(pipe( + const array = yield* (makeStair(n)) + const fiber = yield* (pipe( array, TArray.findLastSTM((n) => STM.succeed(n % largePrime === 0)), Effect.fork )) - yield* $(pipe( + yield* (pipe( Chunk.range(1, n - 1), STM.forEach((n) => pipe(array, TArray.update(n, () => 1))) )) - const result = yield* $(Fiber.join(fiber)) + const result = yield* (Fiber.join(fiber)) assertTrue( (Option.isSome(result) && result.value === largePrime) || Option.isNone(result) @@ -823,10 +823,10 @@ describe("TArray", () => { })) it.effect("findLastSTM - succeeds on errors before result found", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe( + const array = yield* (makeStair(n)) + const result = yield* (pipe( array, TArray.findLastSTM((n) => n === 4 ? STM.fail("boom") : STM.succeed(n % 7 === 0)) )) @@ -834,10 +834,10 @@ describe("TArray", () => { })) it.effect("findLastSTM - fails on errors after result found", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe( + const array = yield* (makeStair(n)) + const result = yield* (pipe( array, TArray.findLastSTM((n) => n === 8 ? STM.fail("boom") : STM.succeed(n % 7 === 0)), STM.flip @@ -846,23 +846,23 @@ describe("TArray", () => { })) it.effect("forEach - side-effect is transactional", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const ref = yield* $(TRef.make(0)) - const array = yield* $(makeTArray(n, 1)) - const fiber = yield* $(pipe( + const ref = yield* (TRef.make(0)) + const array = yield* (makeTArray(n, 1)) + const fiber = yield* (pipe( array, TArray.forEach((n) => pipe(ref, TRef.update((i) => i + n))), Effect.fork )) - const result = yield* $(TRef.get(ref)) - yield* $(Fiber.join(fiber)) + const result = yield* (TRef.get(ref)) + yield* (Fiber.join(fiber)) assertTrue(result === 0 || result === n) })) it.effect("get - should fail when the index is out of bounds", () => - Effect.gen(function*($) { - const result = yield* $(pipe( + Effect.gen(function*() { + const result = yield* (pipe( makeTArray(1, 42), STM.flatMap(TArray.get(-1)), Effect.exit @@ -871,110 +871,110 @@ describe("TArray", () => { })) it.effect("headOption - retrieves the first item in the array", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(TArray.headOption(array)) + const array = yield* (makeStair(n)) + const result = yield* (TArray.headOption(array)) assertSome(result, 1) })) it.effect("headOption - is none for an empty array", () => - Effect.gen(function*($) { - const array = yield* $(TArray.empty()) - const result = yield* $(TArray.headOption(array)) + Effect.gen(function*() { + const array = yield* (TArray.empty()) + const result = yield* (TArray.headOption(array)) assertNone(result) })) it.effect("lastOption - retrieves the last entry", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(TArray.lastOption(array)) + const array = yield* (makeStair(n)) + const result = yield* (TArray.lastOption(array)) assertSome(result, n) })) it.effect("lastOption - is none for an empty array", () => - Effect.gen(function*($) { - const array = yield* $(TArray.empty()) - const result = yield* $(TArray.lastOption(array)) + Effect.gen(function*() { + const array = yield* (TArray.empty()) + const result = yield* (TArray.lastOption(array)) assertNone(result) })) it.effect("maxOption - computes correct maximum", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe(array, TArray.maxOption(Number.Order))) + const array = yield* (makeStair(n)) + const result = yield* (pipe(array, TArray.maxOption(Number.Order))) assertSome(result, n) })) it.effect("maxOption - returns none for an empty array", () => - Effect.gen(function*($) { - const array = yield* $(TArray.empty()) - const result = yield* $(pipe(array, TArray.maxOption(Number.Order))) + Effect.gen(function*() { + const array = yield* (TArray.empty()) + const result = yield* (pipe(array, TArray.maxOption(Number.Order))) assertNone(result) })) it.effect("minOption - computes correct minimum", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe(array, TArray.minOption(Number.Order))) + const array = yield* (makeStair(n)) + const result = yield* (pipe(array, TArray.minOption(Number.Order))) assertSome(result, 1) })) it.effect("minOption - returns none for an empty array", () => - Effect.gen(function*($) { - const array = yield* $(TArray.empty()) - const result = yield* $(pipe(array, TArray.maxOption(Number.Order))) + Effect.gen(function*() { + const array = yield* (TArray.empty()) + const result = yield* (pipe(array, TArray.maxOption(Number.Order))) assertNone(result) })) it.effect("reduce - is atomic", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 1_000 - const array = yield* $(makeTArray(n, 0)) - const fiber = yield* $(pipe(array, TArray.reduce(0, (x, y) => x + y), Effect.fork)) - yield* $(pipe( + const array = yield* (makeTArray(n, 0)) + const fiber = yield* (pipe(array, TArray.reduce(0, (x, y) => x + y), Effect.fork)) + yield* (pipe( Chunk.range(0, n - 1), STM.forEach((n) => pipe(array, TArray.update(n, (n) => n + 1))) )) - const result = yield* $(Fiber.join(fiber)) + const result = yield* (Fiber.join(fiber)) assertTrue(result === 0 || result === n) })) it.effect("reduceOption - reduces correctly", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe(array, TArray.reduceOption((x, y) => x + y))) + const array = yield* (makeStair(n)) + const result = yield* (pipe(array, TArray.reduceOption((x, y) => x + y))) assertSome(result, (n * (n + 1)) / 2) })) it.effect("reduceOption - single entry", () => - Effect.gen(function*($) { - const array = yield* $(makeTArray(1, 1)) - const result = yield* $(pipe(array, TArray.reduceOption((x, y) => x + y))) + Effect.gen(function*() { + const array = yield* (makeTArray(1, 1)) + const result = yield* (pipe(array, TArray.reduceOption((x, y) => x + y))) assertSome(result, 1) })) it.effect("reduceOption - none for empty array", () => - Effect.gen(function*($) { - const array = yield* $(TArray.empty()) - const result = yield* $(pipe(array, TArray.reduceOption((x, y) => x + y))) + Effect.gen(function*() { + const array = yield* (TArray.empty()) + const result = yield* (pipe(array, TArray.reduceOption((x, y) => x + y))) assertNone(result) })) it.effect("reduceOption - is atomic", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 1_000 - const array = yield* $(makeStair(n)) - const fiber = yield* $(pipe(array, TArray.reduceOption((x, y) => x + y), Effect.fork)) - yield* $(pipe( + const array = yield* (makeStair(n)) + const fiber = yield* (pipe(array, TArray.reduceOption((x, y) => x + y), Effect.fork)) + yield* (pipe( Chunk.range(0, n - 1), STM.forEach((n) => pipe(array, TArray.update(n, () => 1))) )) - const result = yield* $(Fiber.join(fiber)) + const result = yield* (Fiber.join(fiber)) assertTrue( Option.isSome(result) && (result.value === (n * (n + 1)) / 2 || result.value === n) @@ -982,37 +982,37 @@ describe("TArray", () => { })) it.effect("reduceOptionSTM - reduces correctly", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe(array, TArray.reduceOptionSTM((x, y) => STM.succeed(x + y)))) + const array = yield* (makeStair(n)) + const result = yield* (pipe(array, TArray.reduceOptionSTM((x, y) => STM.succeed(x + y)))) assertSome(result, (n * (n + 1)) / 2) })) it.effect("reduceOptionSTM - single entry", () => - Effect.gen(function*($) { - const array = yield* $(makeTArray(1, 1)) - const result = yield* $(pipe(array, TArray.reduceOptionSTM((x, y) => STM.succeed(x + y)))) + Effect.gen(function*() { + const array = yield* (makeTArray(1, 1)) + const result = yield* (pipe(array, TArray.reduceOptionSTM((x, y) => STM.succeed(x + y)))) assertSome(result, 1) })) it.effect("reduceOptionSTM - none for empty array", () => - Effect.gen(function*($) { - const array = yield* $(TArray.empty()) - const result = yield* $(pipe(array, TArray.reduceOptionSTM((x, y) => STM.succeed(x + y)))) + Effect.gen(function*() { + const array = yield* (TArray.empty()) + const result = yield* (pipe(array, TArray.reduceOptionSTM((x, y) => STM.succeed(x + y)))) assertNone(result) })) it.effect("reduceOptionSTM - is atomic", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 1_000 - const array = yield* $(makeStair(n)) - const fiber = yield* $(pipe(array, TArray.reduceOptionSTM((x, y) => STM.succeed(x + y)), Effect.fork)) - yield* $(pipe( + const array = yield* (makeStair(n)) + const fiber = yield* (pipe(array, TArray.reduceOptionSTM((x, y) => STM.succeed(x + y)), Effect.fork)) + yield* (pipe( Chunk.range(0, n - 1), STM.forEach((n) => pipe(array, TArray.update(n, () => 1))) )) - const result = yield* $(Fiber.join(fiber)) + const result = yield* (Fiber.join(fiber)) assertTrue( Option.isSome(result) && (result.value === (n * (n + 1)) / 2 || result.value === n) @@ -1020,10 +1020,10 @@ describe("TArray", () => { })) it.effect("reduceOptionSTM - fails on errors", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe( + const array = yield* (makeStair(n)) + const result = yield* (pipe( array, TArray.reduceOptionSTM((x, y) => y === 4 ? STM.fail("boom") : STM.succeed(x + y)), STM.flip @@ -1032,87 +1032,87 @@ describe("TArray", () => { })) it.effect("reduceSTM - is atomic", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 1_000 - const array = yield* $(makeTArray(n, 0)) - const fiber = yield* $(pipe(array, TArray.reduceSTM(0, (x, y) => STM.succeed(x + y)), Effect.fork)) - yield* $(pipe( + const array = yield* (makeTArray(n, 0)) + const fiber = yield* (pipe(array, TArray.reduceSTM(0, (x, y) => STM.succeed(x + y)), Effect.fork)) + yield* (pipe( Chunk.range(0, n - 1), STM.forEach((n) => pipe(array, TArray.update(n, (n) => n + 1))) )) - const result = yield* $(Fiber.join(fiber)) + const result = yield* (Fiber.join(fiber)) assertTrue(result === 0 || result === n) })) it.effect("reduceSTM - returns failures", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 1_000 const failInTheMiddle = (acc: number, n: number): STM.STM => acc === Math.floor(n / 2) ? STM.fail("boom") : STM.succeed(acc + n) - const array = yield* $(makeTArray(n, 1)) - const result = yield* $(pipe(array, TArray.reduceSTM(0, failInTheMiddle), STM.either)) + const array = yield* (makeTArray(n, 1)) + const result = yield* (pipe(array, TArray.reduceSTM(0, failInTheMiddle), STM.either)) assertLeft(result, "boom") })) it.effect("size - returns the correct size", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) + const array = yield* (makeStair(n)) const result = TArray.size(array) strictEqual(result, n) })) it.effect("some - detects satisfaction", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe(array, TArray.some((n) => n % 2 === 0))) + const array = yield* (makeStair(n)) + const result = yield* (pipe(array, TArray.some((n) => n % 2 === 0))) assertTrue(result) })) it.effect("some - detects lack of satisfaction", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe(array, TArray.some((n) => n % 11 === 0))) + const array = yield* (makeStair(n)) + const result = yield* (pipe(array, TArray.some((n) => n % 11 === 0))) assertFalse(result) })) it.effect("some - false for empty array", () => - Effect.gen(function*($) { - const array = yield* $(TArray.empty()) - const result = yield* $(pipe(array, TArray.some(constTrue))) + Effect.gen(function*() { + const array = yield* (TArray.empty()) + const result = yield* (pipe(array, TArray.some(constTrue))) assertFalse(result) })) it.effect("someSTM - detects satisfaction", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe(array, TArray.someSTM((n) => STM.succeed(n % 2 === 0)))) + const array = yield* (makeStair(n)) + const result = yield* (pipe(array, TArray.someSTM((n) => STM.succeed(n % 2 === 0)))) assertTrue(result) })) it.effect("someSTM - detects lack of satisfaction", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe(array, TArray.someSTM((n) => STM.succeed(n % 11 === 0)))) + const array = yield* (makeStair(n)) + const result = yield* (pipe(array, TArray.someSTM((n) => STM.succeed(n % 11 === 0)))) assertFalse(result) })) it.effect("someSTM - false for empty array", () => - Effect.gen(function*($) { - const array = yield* $(TArray.empty()) - const result = yield* $(pipe(array, TArray.someSTM(() => STM.succeed(true)))) + Effect.gen(function*() { + const array = yield* (TArray.empty()) + const result = yield* (pipe(array, TArray.someSTM(() => STM.succeed(true)))) assertFalse(result) })) it.effect("someSTM - fails for errors before witness", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe( + const array = yield* (makeStair(n)) + const result = yield* (pipe( array, TArray.someSTM((n) => n === 4 ? STM.fail("boom") : STM.succeed(n === 5)), STM.flip @@ -1121,10 +1121,10 @@ describe("TArray", () => { })) it.effect("someSTM - fails for errors after witness", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeStair(n)) - const result = yield* $(pipe( + const array = yield* (makeStair(n)) + const result = yield* (pipe( array, TArray.someSTM((n) => n === 6 ? STM.fail("boom") : STM.succeed(n === 5)), STM.flip @@ -1133,17 +1133,17 @@ describe("TArray", () => { })) it.effect("transform - updates values atomically", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 1_000 - const array = yield* $(makeTArray(n, "a")) - const fiber = yield* $(pipe(array, TArray.transform((s) => s + "+b"), Effect.fork)) - yield* $(pipe( + const array = yield* (makeTArray(n, "a")) + const fiber = yield* (pipe(array, TArray.transform((s) => s + "+b"), Effect.fork)) + yield* (pipe( Chunk.range(0, n - 1), STM.forEach((n) => pipe(array, TArray.update(n, (s) => s + "+c"))) )) - yield* $(Fiber.join(fiber)) - const first = yield* $(pipe(array, TArray.get(0))) - const last = yield* $(pipe(array, TArray.get(n - 1))) + yield* (Fiber.join(fiber)) + const first = yield* (pipe(array, TArray.get(0))) + const last = yield* (pipe(array, TArray.get(n - 1))) assertTrue( (first === "a+b+c" && last === "a+b+c") || (first === "a+c+b" && last === "a+c+b") @@ -1151,17 +1151,17 @@ describe("TArray", () => { })) it.effect("transformSTM - updates values atomically", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 1_000 - const array = yield* $(makeTArray(n, "a")) - const fiber = yield* $(pipe(array, TArray.transformSTM((s) => STM.succeed(s + "+b")), Effect.fork)) - yield* $(pipe( + const array = yield* (makeTArray(n, "a")) + const fiber = yield* (pipe(array, TArray.transformSTM((s) => STM.succeed(s + "+b")), Effect.fork)) + yield* (pipe( Chunk.range(0, n - 1), STM.forEach((n) => pipe(array, TArray.update(n, (s) => s + "+c"))) )) - yield* $(Fiber.join(fiber)) - const first = yield* $(pipe(array, TArray.get(0))) - const last = yield* $(pipe(array, TArray.get(n - 1))) + yield* (Fiber.join(fiber)) + const first = yield* (pipe(array, TArray.get(0))) + const last = yield* (pipe(array, TArray.get(n - 1))) assertTrue( (first === "a+b+c" && last === "a+b+c") || (first === "a+c+b" && last === "a+c+b") @@ -1169,24 +1169,24 @@ describe("TArray", () => { })) it.effect("transformSTM - updates all or nothing", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 1_000 - const array = yield* $(makeTArray(n, 0)) - yield* $(pipe(array, TArray.update(Math.floor(n / 2), () => 1))) - const result = yield* $(pipe( + const array = yield* (makeTArray(n, 0)) + yield* (pipe(array, TArray.update(Math.floor(n / 2), () => 1))) + const result = yield* (pipe( array, TArray.transformSTM((n) => n === 0 ? STM.succeed(42) : STM.fail("boom")), STM.either )) - const first = yield* $(pipe(array, TArray.get(0))) + const first = yield* (pipe(array, TArray.get(0))) strictEqual(first, 0) assertLeft(result, "boom") })) it.effect("update - happy path", () => - Effect.gen(function*($) { - const array = yield* $(makeTArray(1, 42)) - const result = yield* $(pipe( + Effect.gen(function*() { + const array = yield* (makeTArray(1, 42)) + const result = yield* (pipe( array, TArray.update(0, (n) => -n), STM.zipRight(valuesOf(array)) @@ -1195,16 +1195,16 @@ describe("TArray", () => { })) it.effect("update - dies with index out of bounds", () => - Effect.gen(function*($) { - const array = yield* $(makeTArray(1, 42)) - const result = yield* $(pipe(array, TArray.update(-1, identity), Effect.exit)) + Effect.gen(function*() { + const array = yield* (makeTArray(1, 42)) + const result = yield* (pipe(array, TArray.update(-1, identity), Effect.exit)) deepStrictEqual(result, Exit.die(new Cause.RuntimeException("Index out of bounds"))) })) it.effect("updateSTM - happy path", () => - Effect.gen(function*($) { - const array = yield* $(makeTArray(1, 42)) - const result = yield* $(pipe( + Effect.gen(function*() { + const array = yield* (makeTArray(1, 42)) + const result = yield* (pipe( array, TArray.updateSTM(0, (n) => STM.succeed(-n)), STM.zipRight(valuesOf(array)) @@ -1213,17 +1213,17 @@ describe("TArray", () => { })) it.effect("updateSTM - dies with index out of bounds", () => - Effect.gen(function*($) { - const array = yield* $(makeTArray(1, 42)) - const result = yield* $(pipe(array, TArray.updateSTM(-1, (n) => STM.succeed(n)), Effect.exit)) + Effect.gen(function*() { + const array = yield* (makeTArray(1, 42)) + const result = yield* (pipe(array, TArray.updateSTM(-1, (n) => STM.succeed(n)), Effect.exit)) deepStrictEqual(result, Exit.die(new Cause.RuntimeException("Index out of bounds"))) })) it.effect("updateSTM - handles failures", () => - Effect.gen(function*($) { + Effect.gen(function*() { const n = 10 - const array = yield* $(makeTArray(n, 0)) - const result = yield* $(pipe( + const array = yield* (makeTArray(n, 0)) + const result = yield* (pipe( array, TArray.updateSTM(0, (_: number) => STM.fail("boom")), STM.commit, @@ -1233,9 +1233,9 @@ describe("TArray", () => { })) it.effect("toChunk", () => - Effect.gen(function*($) { - const array = yield* $(TArray.make(1, 2, 3, 4, 5)) - const result = yield* $(TArray.toArray(array)) + Effect.gen(function*() { + const array = yield* (TArray.make(1, 2, 3, 4, 5)) + const result = yield* (TArray.toArray(array)) deepStrictEqual(Array.from(result), [1, 2, 3, 4, 5]) })) }) diff --git a/packages/effect/test/TMap.test.ts b/packages/effect/test/TMap.test.ts index 0f12f84fd5..b2603315a1 100644 --- a/packages/effect/test/TMap.test.ts +++ b/packages/effect/test/TMap.test.ts @@ -22,82 +22,82 @@ const mapEntriesArb: fc.Arbitrary> = fc.uniqueA describe("TMap", () => { it.effect("empty", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TMap.empty(), STM.flatMap(TMap.isEmpty) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) assertTrue(result) })) it.effect("fromIterable", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TMap.fromIterable([["a", 1], ["b", 2], ["c", 2], ["b", 3]]), STM.flatMap(TMap.toArray) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(result, [["a", 1], ["b", 3], ["c", 2]]) })) it.effect("get - existing element", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TMap.make(["a", 1], ["b", 2]), STM.flatMap(TMap.get("a")) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) assertSome(result, 1) })) it.effect("get - non-existing element", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TMap.empty(), STM.flatMap(TMap.get("a")) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) assertNone(result) })) it.effect("getOrElse - existing element", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TMap.make(["a", 1], ["b", 2]), STM.flatMap(TMap.getOrElse("a", () => 10)) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(result, 1) })) it.effect("getOrElse - non-existing element", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TMap.empty(), STM.flatMap(TMap.getOrElse("a", () => 10)) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(result, 10) })) it.effect("has - existing element", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TMap.make(["a", 1], ["b", 2]), STM.flatMap(TMap.has("a")) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) assertTrue(result) })) it.effect("has - non-existing element", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TMap.empty(), STM.flatMap(TMap.has("a")) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) assertFalse(result) })) @@ -114,7 +114,7 @@ describe("TMap", () => { }))) it.effect("merge", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TMap.make(["a", 1]), STM.flatMap((map) => @@ -124,153 +124,153 @@ describe("TMap", () => { }) ) ) - const { result1, result2 } = yield* $(STM.commit(transaction)) + const { result1, result2 } = yield* (STM.commit(transaction)) strictEqual(result1, 3) strictEqual(result2, 2) })) it.effect("reduce - non-empty map", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TMap.make(["a", 1], ["b", 2], ["c", 3]), STM.flatMap(TMap.reduce(0, (acc, value) => acc + value)) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) strictEqual(result, 6) })) it.effect("reduce - empty map", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TMap.empty(), STM.flatMap(TMap.reduce(0, (acc, value) => acc + value)) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) strictEqual(result, 0) })) it.effect("reduceSTM - non-empty map", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TMap.make(["a", 1], ["b", 2], ["c", 3]), STM.flatMap(TMap.reduceSTM(0, (acc, value) => STM.succeed(acc + value))) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) strictEqual(result, 6) })) it.effect("reduceSTM - empty map", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TMap.empty(), STM.flatMap(TMap.reduceSTM(0, (acc, value) => STM.succeed(acc + value))) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) strictEqual(result, 0) })) it.effect("remove - remove an existing element", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TMap.make(["a", 1], ["b", 2]), STM.tap(TMap.remove("a")), STM.flatMap(TMap.get("a")) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) assertNone(result) })) it.effect("remove - remove an non-existing element", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TMap.empty(), STM.tap(TMap.remove("a")), STM.flatMap(TMap.get("a")) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) assertNone(result) })) it.effect("removeIf", () => - Effect.gen(function*($) { - const transaction = STM.gen(function*($) { - const map = yield* $(TMap.make(["a", 1], ["aa", 2], ["aaa", 3])) - const removed = yield* $(pipe(map, TMap.removeIf((_, value) => value > 1))) - const a = yield* $(pipe(map, TMap.has("a"))) - const aa = yield* $(pipe(map, TMap.has("aa"))) - const aaa = yield* $(pipe(map, TMap.has("aaa"))) + Effect.gen(function*() { + const transaction = STM.gen(function*() { + const map = yield* (TMap.make(["a", 1], ["aa", 2], ["aaa", 3])) + const removed = yield* (pipe(map, TMap.removeIf((_, value) => value > 1))) + const a = yield* (pipe(map, TMap.has("a"))) + const aa = yield* (pipe(map, TMap.has("aa"))) + const aaa = yield* (pipe(map, TMap.has("aaa"))) return [removed, a, aa, aaa] as const }) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(result, [[["aaa", 3], ["aa", 2]], true, false, false]) })) it.effect("removeIf > { discard: true }", () => - Effect.gen(function*($) { - const transaction = STM.gen(function*($) { - const map = yield* $(TMap.make(["a", 1], ["aa", 2], ["aaa", 3])) - yield* $(pipe(map, TMap.removeIf((key) => key === "aa", { discard: true }))) - const a = yield* $(pipe(map, TMap.has("a"))) - const aa = yield* $(pipe(map, TMap.has("aa"))) - const aaa = yield* $(pipe(map, TMap.has("aaa"))) + Effect.gen(function*() { + const transaction = STM.gen(function*() { + const map = yield* (TMap.make(["a", 1], ["aa", 2], ["aaa", 3])) + yield* (pipe(map, TMap.removeIf((key) => key === "aa", { discard: true }))) + const a = yield* (pipe(map, TMap.has("a"))) + const aa = yield* (pipe(map, TMap.has("aa"))) + const aaa = yield* (pipe(map, TMap.has("aaa"))) return [a, aa, aaa] as const }) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(result, [true, false, true]) })) it.effect("retainIf", () => - Effect.gen(function*($) { - const transaction = STM.gen(function*($) { - const map = yield* $(TMap.make(["a", 1], ["aa", 2], ["aaa", 3])) - const removed = yield* $(pipe(map, TMap.retainIf((key) => key === "aa"))) - const a = yield* $(pipe(map, TMap.has("a"))) - const aa = yield* $(pipe(map, TMap.has("aa"))) - const aaa = yield* $(pipe(map, TMap.has("aaa"))) + Effect.gen(function*() { + const transaction = STM.gen(function*() { + const map = yield* (TMap.make(["a", 1], ["aa", 2], ["aaa", 3])) + const removed = yield* (pipe(map, TMap.retainIf((key) => key === "aa"))) + const a = yield* (pipe(map, TMap.has("a"))) + const aa = yield* (pipe(map, TMap.has("aa"))) + const aaa = yield* (pipe(map, TMap.has("aaa"))) return [removed, a, aa, aaa] as const }) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(result, [[["aaa", 3], ["a", 1]], false, true, false]) })) it.effect("retainIf > { discard: true }", () => - Effect.gen(function*($) { - const transaction = STM.gen(function*($) { - const map = yield* $(TMap.make(["a", 1], ["aa", 2], ["aaa", 3])) - yield* $(pipe(map, TMap.retainIf((key) => key === "aa", { discard: true }))) - const a = yield* $(pipe(map, TMap.has("a"))) - const aa = yield* $(pipe(map, TMap.has("aa"))) - const aaa = yield* $(pipe(map, TMap.has("aaa"))) + Effect.gen(function*() { + const transaction = STM.gen(function*() { + const map = yield* (TMap.make(["a", 1], ["aa", 2], ["aaa", 3])) + yield* (pipe(map, TMap.retainIf((key) => key === "aa", { discard: true }))) + const a = yield* (pipe(map, TMap.has("a"))) + const aa = yield* (pipe(map, TMap.has("aa"))) + const aaa = yield* (pipe(map, TMap.has("aaa"))) return [a, aa, aaa] as const }) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(result, [false, true, false]) })) it.effect("set - adds new element", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TMap.empty(), STM.tap(TMap.set("a", 1)), STM.flatMap(TMap.get("a")) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) assertSome(result, 1) })) it.effect("set - overwrites an existing element", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TMap.make(["a", 1], ["b", 2]), STM.tap(TMap.set("a", 10)), STM.flatMap(TMap.get("a")) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) assertSome(result, 10) })) it.effect("set - add many keys with negative hash codes", () => - Effect.gen(function*($) { + Effect.gen(function*() { const entries = Array.makeBy(1_000, (i) => i + 1) .map((i) => [new HashContainer(i), i] as const) const transaction = pipe( @@ -278,32 +278,32 @@ describe("TMap", () => { STM.tap((map) => STM.all(entries.map((entry) => pipe(map, TMap.set(entry[0], entry[1]))))), STM.flatMap(TMap.toArray) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) strictEqual(pipe(result, Array.differenceWith(equivalentElements())(entries)).length, 0) strictEqual(pipe(entries, Array.differenceWith(equivalentElements())(result)).length, 0) })) it.effect("setIfAbsent", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TMap.make(["a", 1]), STM.tap(TMap.setIfAbsent("b", 2)), STM.tap(TMap.setIfAbsent("a", 10)), STM.flatMap(TMap.toArray) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) const expected = [["a", 1], ["b", 2]] strictEqual(pipe(result, Array.differenceWith(equivalentElements())(expected)).length, 0) strictEqual(pipe(expected, Array.differenceWith(equivalentElements())(result)).length, 0) })) it.effect("size", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TMap.fromIterable([["a", 1], ["b", 2]]), STM.flatMap(TMap.size) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) strictEqual(result, 2) })) @@ -342,117 +342,117 @@ describe("TMap", () => { }))) it.effect("transform", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TMap.make(["a", 1], ["aa", 2], ["aaa", 3]), STM.tap((map) => TMap.transform(map, (key, value) => [key.replaceAll("a", "b"), value * 2])), STM.flatMap(TMap.toArray) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) const expected = [["b", 2], ["bb", 4], ["bbb", 6]] strictEqual(pipe(result, Array.differenceWith(equivalentElements())(expected)).length, 0) strictEqual(pipe(expected, Array.differenceWith(equivalentElements())(result)).length, 0) })) it.effect("transform - handles keys with negative hash codes", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TMap.make([new HashContainer(-1), 1], [new HashContainer(-2), 2], [new HashContainer(-3), 3]), STM.tap((map) => TMap.transform(map, (key, value) => [new HashContainer(key.i * -2), value * 2])), STM.flatMap(TMap.toArray) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) const expected = [[new HashContainer(2), 2], [new HashContainer(4), 4], [new HashContainer(6), 6]] strictEqual(pipe(result, Array.differenceWith(equivalentElements())(expected)).length, 0) strictEqual(pipe(expected, Array.differenceWith(equivalentElements())(result)).length, 0) })) it.effect("transform - and shrink", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TMap.make(["a", 1], ["aa", 2], ["aaa", 3]), STM.tap((map) => TMap.transform(map, (_, value) => ["key", value * 2])), STM.flatMap(TMap.toArray) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(result, [["key", 6]]) })) it.effect("transformSTM", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TMap.make(["a", 1], ["aa", 2], ["aaa", 3]), STM.tap((map) => TMap.transformSTM(map, (key, value) => STM.succeed([key.replaceAll("a", "b"), value * 2]))), STM.flatMap(TMap.toArray) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) const expected = [["b", 2], ["bb", 4], ["bbb", 6]] strictEqual(pipe(result, Array.differenceWith(equivalentElements())(expected)).length, 0) strictEqual(pipe(expected, Array.differenceWith(equivalentElements())(result)).length, 0) })) it.effect("transformSTM - and shrink", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TMap.make(["a", 1], ["aa", 2], ["aaa", 3]), STM.tap((map) => TMap.transformSTM(map, (_, value) => STM.succeed(["key", value * 2]))), STM.flatMap(TMap.toArray) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(result, [["key", 6]]) })) it.effect("transformValues", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TMap.make(["a", 1], ["aa", 2], ["aaa", 3]), STM.tap((map) => TMap.transformValues(map, (value) => value * 2)), STM.flatMap(TMap.toArray) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) const expected = [["a", 2], ["aa", 4], ["aaa", 6]] strictEqual(pipe(result, Array.differenceWith(equivalentElements())(expected)).length, 0) strictEqual(pipe(expected, Array.differenceWith(equivalentElements())(result)).length, 0) })) it.effect("transformValues - parallel", () => - Effect.gen(function*($) { - const map = yield* $(TMap.make(["a", 0])) + Effect.gen(function*() { + const map = yield* (TMap.make(["a", 0])) const effect = pipe( map, TMap.transformValues((n) => n + 1), STM.commit, Effect.repeatN(999) ) - yield* $(Effect.replicateEffect(effect, 2)) - const result = yield* $(pipe(map, TMap.get("a"))) + yield* (Effect.replicateEffect(effect, 2)) + const result = yield* (pipe(map, TMap.get("a"))) assertSome(result, 2_000) })) it.effect("transformValuesSTM", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TMap.make(["a", 1], ["aa", 2], ["aaa", 3]), STM.tap((map) => TMap.transformValuesSTM(map, (value) => STM.succeed(value * 2))), STM.flatMap(TMap.toArray) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) const expected = [["a", 2], ["aa", 4], ["aaa", 6]] strictEqual(pipe(result, Array.differenceWith(equivalentElements())(expected)).length, 0) strictEqual(pipe(expected, Array.differenceWith(equivalentElements())(result)).length, 0) })) it.effect("updateWith", () => - Effect.gen(function*($) { - const transaction = STM.gen(function*($) { - const map = yield* $(TMap.make(["a", 1], ["b", 2])) - yield* $(pipe(map, TMap.updateWith("a", Option.map((n) => n + 1)))) - yield* $(pipe(map, TMap.updateWith("b", () => Option.none()))) - yield* $(pipe(map, TMap.updateWith("c", () => Option.some(3)))) - yield* $(pipe(map, TMap.updateWith("d", () => Option.none()))) - return yield* $(TMap.toArray(map)) + Effect.gen(function*() { + const transaction = STM.gen(function*() { + const map = yield* (TMap.make(["a", 1], ["b", 2])) + yield* (pipe(map, TMap.updateWith("a", Option.map((n) => n + 1)))) + yield* (pipe(map, TMap.updateWith("b", () => Option.none()))) + yield* (pipe(map, TMap.updateWith("c", () => Option.some(3)))) + yield* (pipe(map, TMap.updateWith("d", () => Option.none()))) + return yield* (TMap.toArray(map)) }) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(result, [["a", 2], ["c", 3]]) })) @@ -469,10 +469,10 @@ describe("TMap", () => { }))) it.effect("avoid issues due to race conditions (ZIO Issue #4648)", () => - Effect.gen(function*($) { + Effect.gen(function*() { const keys = Array.range(0, 10) - const map = yield* $(TMap.fromIterable(Array.map(keys, (n, i) => [n, i]))) - const result = yield* $(pipe( + const map = yield* (TMap.fromIterable(Array.map(keys, (n, i) => [n, i]))) + const result = yield* (pipe( Effect.forEach(keys, (key) => pipe( TMap.remove(map, key), diff --git a/packages/effect/test/TPubSub.test.ts b/packages/effect/test/TPubSub.test.ts index 7c185271a7..3060607438 100644 --- a/packages/effect/test/TPubSub.test.ts +++ b/packages/effect/test/TPubSub.test.ts @@ -19,11 +19,11 @@ const sort: (array: ReadonlyArray) => ReadonlyArray = Arr.sort(n describe("TPubSub", () => { it.it("sequential publishers and subscribers - with one publisher and one subscriber", () => fc.assert(fc.asyncProperty(fc.integer({ min: 1 }), fc.array(fc.integer()), async (n, as) => { - const program = Effect.gen(function*($) { - const deferred1 = yield* $(Deferred.make()) - const deferred2 = yield* $(Deferred.make()) - const pubsub = yield* $(TPubSub.bounded(n)) - const subscriber = yield* $(pipe( + const program = Effect.gen(function*() { + const deferred1 = yield* (Deferred.make()) + const deferred2 = yield* (Deferred.make()) + const pubsub = yield* (TPubSub.bounded(n)) + const subscriber = yield* (pipe( TPubSub.subscribeScoped(pubsub), Effect.flatMap((subscription) => pipe( @@ -39,13 +39,13 @@ describe("TPubSub", () => { Effect.scoped, Effect.fork )) - yield* $(Deferred.await(deferred1)) - yield* $(pipe( + yield* (Deferred.await(deferred1)) + yield* (pipe( as.slice(0, n), Effect.forEach((n) => pipe(pubsub, TPubSub.publish(n))) )) - yield* $(pipe(deferred2, Deferred.succeed(void 0))) - return yield* $(Fiber.join(subscriber)) + yield* (pipe(deferred2, Deferred.succeed(void 0))) + return yield* (Fiber.join(subscriber)) }) const result = await Effect.runPromise(program) deepStrictEqual(Array.from(result), as.slice(0, n)) @@ -53,12 +53,12 @@ describe("TPubSub", () => { it.it("sequential publishers and subscribers - with one publisher and two subscribers", () => fc.assert(fc.asyncProperty(fc.integer({ min: 1 }), fc.array(fc.integer()), async (n, as) => { - const program = Effect.gen(function*($) { - const deferred1 = yield* $(Deferred.make()) - const deferred2 = yield* $(Deferred.make()) - const deferred3 = yield* $(Deferred.make()) - const pubsub = yield* $(TPubSub.bounded(n)) - const subscriber1 = yield* $(pipe( + const program = Effect.gen(function*() { + const deferred1 = yield* (Deferred.make()) + const deferred2 = yield* (Deferred.make()) + const deferred3 = yield* (Deferred.make()) + const pubsub = yield* (TPubSub.bounded(n)) + const subscriber1 = yield* (pipe( TPubSub.subscribeScoped(pubsub), Effect.flatMap((subscription) => pipe( @@ -74,7 +74,7 @@ describe("TPubSub", () => { Effect.scoped, Effect.fork )) - const subscriber2 = yield* $(pipe( + const subscriber2 = yield* (pipe( TPubSub.subscribeScoped(pubsub), Effect.flatMap((subscription) => pipe( @@ -90,15 +90,15 @@ describe("TPubSub", () => { Effect.scoped, Effect.fork )) - yield* $(Deferred.await(deferred1)) - yield* $(Deferred.await(deferred2)) - yield* $(pipe( + yield* (Deferred.await(deferred1)) + yield* (Deferred.await(deferred2)) + yield* (pipe( as.slice(0, n), Effect.forEach((n) => pipe(pubsub, TPubSub.publish(n))) )) - yield* $(pipe(deferred3, Deferred.succeed(void 0))) - const result1 = yield* $(Fiber.join(subscriber1)) - const result2 = yield* $(Fiber.join(subscriber2)) + yield* (pipe(deferred3, Deferred.succeed(void 0))) + const result1 = yield* (Fiber.join(subscriber1)) + const result2 = yield* (Fiber.join(subscriber2)) return { result1, result2 } }) const { result1, result2 } = await Effect.runPromise(program) @@ -108,10 +108,10 @@ describe("TPubSub", () => { it.it("concurrent publishers and subscribers - one to one", () => fc.assert(fc.asyncProperty(fc.integer({ min: 1 }), fc.array(fc.integer()), async (n, as) => { - const program = Effect.gen(function*($) { - const deferred = yield* $(Deferred.make()) - const pubsub = yield* $(TPubSub.bounded(n)) - const subscriber = yield* $(pipe( + const program = Effect.gen(function*() { + const deferred = yield* (Deferred.make()) + const pubsub = yield* (TPubSub.bounded(n)) + const subscriber = yield* (pipe( TPubSub.subscribeScoped(pubsub), Effect.flatMap((subscription) => pipe( @@ -122,13 +122,13 @@ describe("TPubSub", () => { ), Effect.fork )) - yield* $(Deferred.await(deferred)) - yield* $(pipe( + yield* (Deferred.await(deferred)) + yield* (pipe( as.slice(0, n), Effect.forEach((n) => pipe(pubsub, TPubSub.publish(n))), Effect.fork )) - return yield* $(Fiber.join(subscriber)) + return yield* (Fiber.join(subscriber)) }) const result = await Effect.runPromise(Effect.scoped(program)) deepStrictEqual(Array.from(result), as.slice(0, n)) @@ -136,11 +136,11 @@ describe("TPubSub", () => { it.it("concurrent publishers and subscribers - one to many", () => fc.assert(fc.asyncProperty(fc.integer({ min: 1 }), fc.array(fc.integer()), async (n, as) => { - const program = Effect.gen(function*($) { - const deferred1 = yield* $(Deferred.make()) - const deferred2 = yield* $(Deferred.make()) - const pubsub = yield* $(TPubSub.bounded(n)) - const subscriber1 = yield* $(pipe( + const program = Effect.gen(function*() { + const deferred1 = yield* (Deferred.make()) + const deferred2 = yield* (Deferred.make()) + const pubsub = yield* (TPubSub.bounded(n)) + const subscriber1 = yield* (pipe( TPubSub.subscribeScoped(pubsub), Effect.flatMap((subscription) => pipe( @@ -151,7 +151,7 @@ describe("TPubSub", () => { ), Effect.fork )) - const subscriber2 = yield* $(pipe( + const subscriber2 = yield* (pipe( TPubSub.subscribeScoped(pubsub), Effect.flatMap((subscription) => pipe( @@ -162,15 +162,15 @@ describe("TPubSub", () => { ), Effect.fork )) - yield* $(Deferred.await(deferred1)) - yield* $(Deferred.await(deferred2)) - yield* $(pipe( + yield* (Deferred.await(deferred1)) + yield* (Deferred.await(deferred2)) + yield* (pipe( as.slice(0, n), Effect.forEach((n) => pipe(pubsub, TPubSub.publish(n))), Effect.fork )) - const result1 = yield* $(Fiber.join(subscriber1)) - const result2 = yield* $(Fiber.join(subscriber2)) + const result1 = yield* (Fiber.join(subscriber1)) + const result2 = yield* (Fiber.join(subscriber2)) return { result1, result2 } }) const { result1, result2 } = await Effect.runPromise(Effect.scoped(program)) @@ -180,11 +180,11 @@ describe("TPubSub", () => { it.it("concurrent publishers and subscribers - many to many", () => fc.assert(fc.asyncProperty(fc.integer({ min: 1 }), fc.array(fc.integer({ min: 1 })), async (n, as) => { - const program = Effect.gen(function*($) { - const deferred1 = yield* $(Deferred.make()) - const deferred2 = yield* $(Deferred.make()) - const pubsub = yield* $(TPubSub.bounded(n * 2)) - const subscriber1 = yield* $(pipe( + const program = Effect.gen(function*() { + const deferred1 = yield* (Deferred.make()) + const deferred2 = yield* (Deferred.make()) + const pubsub = yield* (TPubSub.bounded(n * 2)) + const subscriber1 = yield* (pipe( TPubSub.subscribeScoped(pubsub), Effect.flatMap((subscription) => pipe( @@ -199,7 +199,7 @@ describe("TPubSub", () => { Effect.scoped, Effect.fork )) - const subscriber2 = yield* $(pipe( + const subscriber2 = yield* (pipe( TPubSub.subscribeScoped(pubsub), Effect.flatMap((subscription) => pipe( @@ -214,20 +214,20 @@ describe("TPubSub", () => { Effect.scoped, Effect.fork )) - yield* $(Deferred.await(deferred1)) - yield* $(Deferred.await(deferred2)) - yield* $(pipe( + yield* (Deferred.await(deferred1)) + yield* (Deferred.await(deferred2)) + yield* (pipe( as.slice(0, n), Effect.forEach((n) => pipe(pubsub, TPubSub.publish(n))), Effect.fork )) - yield* $(pipe( + yield* (pipe( as.slice(0, n).map((n) => n !== 0 ? -n : n), Effect.forEach((n) => pipe(pubsub, TPubSub.publish(n))), Effect.fork )) - const result1 = yield* $(Fiber.join(subscriber1)) - const result2 = yield* $(Fiber.join(subscriber2)) + const result1 = yield* (Fiber.join(subscriber1)) + const result2 = yield* (Fiber.join(subscriber2)) return { result1, result2 } }) const { result1, result2 } = await Effect.runPromise(program) @@ -251,10 +251,10 @@ describe("TPubSub", () => { it.it("back pressure - one to one", () => fc.assert(fc.asyncProperty(fc.integer({ min: 1 }), fc.array(fc.integer({ min: 1 })), async (n, as) => { - const program = Effect.gen(function*($) { - const deferred = yield* $(Deferred.make()) - const pubsub = yield* $(TPubSub.bounded(n)) - const subscriber = yield* $(pipe( + const program = Effect.gen(function*() { + const deferred = yield* (Deferred.make()) + const pubsub = yield* (TPubSub.bounded(n)) + const subscriber = yield* (pipe( TPubSub.subscribeScoped(pubsub), Effect.flatMap((subscription) => pipe( @@ -266,9 +266,9 @@ describe("TPubSub", () => { Effect.scoped, Effect.fork )) - yield* $(Deferred.await(deferred)) - yield* $(pipe(as, Effect.forEach((n) => pipe(pubsub, TPubSub.publish(n))), Effect.fork)) - return yield* $(Fiber.join(subscriber)) + yield* (Deferred.await(deferred)) + yield* (pipe(as, Effect.forEach((n) => pipe(pubsub, TPubSub.publish(n))), Effect.fork)) + return yield* (Fiber.join(subscriber)) }) const result = await Effect.runPromise(program) deepStrictEqual(Array.from(result), as) @@ -276,11 +276,11 @@ describe("TPubSub", () => { it.it("back pressure - one to many", () => fc.assert(fc.asyncProperty(fc.integer({ min: 1 }), fc.array(fc.integer({ min: 1 })), async (n, as) => { - const program = Effect.gen(function*($) { - const deferred1 = yield* $(Deferred.make()) - const deferred2 = yield* $(Deferred.make()) - const pubsub = yield* $(TPubSub.bounded(n)) - const subscriber1 = yield* $(pipe( + const program = Effect.gen(function*() { + const deferred1 = yield* (Deferred.make()) + const deferred2 = yield* (Deferred.make()) + const pubsub = yield* (TPubSub.bounded(n)) + const subscriber1 = yield* (pipe( TPubSub.subscribeScoped(pubsub), Effect.flatMap((subscription) => pipe( @@ -292,7 +292,7 @@ describe("TPubSub", () => { Effect.scoped, Effect.fork )) - const subscriber2 = yield* $(pipe( + const subscriber2 = yield* (pipe( TPubSub.subscribeScoped(pubsub), Effect.flatMap((subscription) => pipe( @@ -304,11 +304,11 @@ describe("TPubSub", () => { Effect.scoped, Effect.fork )) - yield* $(Deferred.await(deferred1)) - yield* $(Deferred.await(deferred2)) - yield* $(pipe(as, Effect.forEach((n) => pipe(pubsub, TPubSub.publish(n))), Effect.fork)) - const result1 = yield* $(Fiber.join(subscriber1)) - const result2 = yield* $(Fiber.join(subscriber2)) + yield* (Deferred.await(deferred1)) + yield* (Deferred.await(deferred2)) + yield* (pipe(as, Effect.forEach((n) => pipe(pubsub, TPubSub.publish(n))), Effect.fork)) + const result1 = yield* (Fiber.join(subscriber1)) + const result2 = yield* (Fiber.join(subscriber2)) return { result1, result2 } }) const { result1, result2 } = await Effect.runPromise(program) @@ -318,11 +318,11 @@ describe("TPubSub", () => { it.it("back pressure - many to many", () => fc.assert(fc.asyncProperty(fc.integer({ min: 1 }), fc.array(fc.integer({ min: 1 })), async (n, as) => { - const program = Effect.gen(function*($) { - const deferred1 = yield* $(Deferred.make()) - const deferred2 = yield* $(Deferred.make()) - const pubsub = yield* $(TPubSub.bounded(n * 2)) - const subscriber1 = yield* $(pipe( + const program = Effect.gen(function*() { + const deferred1 = yield* (Deferred.make()) + const deferred2 = yield* (Deferred.make()) + const pubsub = yield* (TPubSub.bounded(n * 2)) + const subscriber1 = yield* (pipe( TPubSub.subscribeScoped(pubsub), Effect.flatMap((subscription) => pipe( @@ -337,7 +337,7 @@ describe("TPubSub", () => { Effect.scoped, Effect.fork )) - const subscriber2 = yield* $(pipe( + const subscriber2 = yield* (pipe( TPubSub.subscribeScoped(pubsub), Effect.flatMap((subscription) => pipe( @@ -352,20 +352,20 @@ describe("TPubSub", () => { Effect.scoped, Effect.fork )) - yield* $(Deferred.await(deferred1)) - yield* $(Deferred.await(deferred2)) - yield* $(pipe( + yield* (Deferred.await(deferred1)) + yield* (Deferred.await(deferred2)) + yield* (pipe( as, Effect.forEach((n) => pipe(pubsub, TPubSub.publish(n))), Effect.fork )) - yield* $(pipe( + yield* (pipe( as.map((n) => -n), Effect.forEach((n) => pipe(pubsub, TPubSub.publish(n))), Effect.fork )) - const result1 = yield* $(Fiber.join(subscriber1)) - const result2 = yield* $(Fiber.join(subscriber2)) + const result1 = yield* (Fiber.join(subscriber1)) + const result2 = yield* (Fiber.join(subscriber2)) return { result1, result2 } }) const { result1, result2 } = await Effect.runPromise(program) @@ -377,10 +377,10 @@ describe("TPubSub", () => { it.it("dropping - one to one", () => fc.assert(fc.asyncProperty(fc.integer({ min: 1 }), fc.array(fc.integer({ min: 1 })), async (n, as) => { - const program = Effect.gen(function*($) { - const deferred = yield* $(Deferred.make()) - const pubsub = yield* $(TPubSub.dropping(n)) - const subscriber = yield* $(pipe( + const program = Effect.gen(function*() { + const deferred = yield* (Deferred.make()) + const pubsub = yield* (TPubSub.dropping(n)) + const subscriber = yield* (pipe( TPubSub.subscribeScoped(pubsub), Effect.flatMap((subscription) => pipe( @@ -395,9 +395,9 @@ describe("TPubSub", () => { Effect.scoped, Effect.fork )) - yield* $(Deferred.await(deferred)) - yield* $(pipe(as, Effect.forEach((n) => pipe(pubsub, TPubSub.publish(n))), Effect.fork)) - return yield* $(Fiber.join(subscriber)) + yield* (Deferred.await(deferred)) + yield* (pipe(as, Effect.forEach((n) => pipe(pubsub, TPubSub.publish(n))), Effect.fork)) + return yield* (Fiber.join(subscriber)) }) const result = await Effect.runPromise(program) deepStrictEqual(Array.from(result), as.slice(0, n)) @@ -405,11 +405,11 @@ describe("TPubSub", () => { it.it("dropping - one to many", () => fc.assert(fc.asyncProperty(fc.integer({ min: 1 }), fc.array(fc.integer({ min: 1 })), async (n, as) => { - const program = Effect.gen(function*($) { - const deferred1 = yield* $(Deferred.make()) - const deferred2 = yield* $(Deferred.make()) - const pubsub = yield* $(TPubSub.dropping(n)) - const subscriber1 = yield* $(pipe( + const program = Effect.gen(function*() { + const deferred1 = yield* (Deferred.make()) + const deferred2 = yield* (Deferred.make()) + const pubsub = yield* (TPubSub.dropping(n)) + const subscriber1 = yield* (pipe( TPubSub.subscribeScoped(pubsub), Effect.flatMap((subscription) => pipe( @@ -424,7 +424,7 @@ describe("TPubSub", () => { Effect.scoped, Effect.fork )) - const subscriber2 = yield* $(pipe( + const subscriber2 = yield* (pipe( TPubSub.subscribeScoped(pubsub), Effect.flatMap((subscription) => pipe( @@ -439,11 +439,11 @@ describe("TPubSub", () => { Effect.scoped, Effect.fork )) - yield* $(Deferred.await(deferred1)) - yield* $(Deferred.await(deferred2)) - yield* $(pipe(as, Effect.forEach((n) => pipe(pubsub, TPubSub.publish(n))), Effect.fork)) - const result1 = yield* $(Fiber.join(subscriber1)) - const result2 = yield* $(Fiber.join(subscriber2)) + yield* (Deferred.await(deferred1)) + yield* (Deferred.await(deferred2)) + yield* (pipe(as, Effect.forEach((n) => pipe(pubsub, TPubSub.publish(n))), Effect.fork)) + const result1 = yield* (Fiber.join(subscriber1)) + const result2 = yield* (Fiber.join(subscriber2)) return { result1, result2 } }) const { result1, result2 } = await Effect.runPromise(program) @@ -453,11 +453,11 @@ describe("TPubSub", () => { it.it("dropping - many to many", () => fc.assert(fc.asyncProperty(fc.integer({ min: 1 }), fc.array(fc.integer({ min: 1 })), async (n, as) => { - const program = Effect.gen(function*($) { - const deferred1 = yield* $(Deferred.make()) - const deferred2 = yield* $(Deferred.make()) - const pubsub = yield* $(TPubSub.dropping(n * 2)) - const subscriber1 = yield* $(pipe( + const program = Effect.gen(function*() { + const deferred1 = yield* (Deferred.make()) + const deferred2 = yield* (Deferred.make()) + const pubsub = yield* (TPubSub.dropping(n * 2)) + const subscriber1 = yield* (pipe( TPubSub.subscribeScoped(pubsub), Effect.flatMap((subscription) => pipe( @@ -472,7 +472,7 @@ describe("TPubSub", () => { Effect.scoped, Effect.fork )) - const subscriber2 = yield* $(pipe( + const subscriber2 = yield* (pipe( TPubSub.subscribeScoped(pubsub), Effect.flatMap((subscription) => pipe( @@ -487,20 +487,20 @@ describe("TPubSub", () => { Effect.scoped, Effect.fork )) - yield* $(Deferred.await(deferred1)) - yield* $(Deferred.await(deferred2)) - yield* $(pipe( + yield* (Deferred.await(deferred1)) + yield* (Deferred.await(deferred2)) + yield* (pipe( as, Effect.forEach((n) => pipe(pubsub, TPubSub.publish(n))), Effect.fork )) - yield* $(pipe( + yield* (pipe( as.map((n) => -n), Effect.forEach((n) => pipe(pubsub, TPubSub.publish(n))), Effect.fork )) - const result1 = yield* $(Fiber.join(subscriber1)) - const result2 = yield* $(Fiber.join(subscriber2)) + const result1 = yield* (Fiber.join(subscriber1)) + const result2 = yield* (Fiber.join(subscriber2)) return { result1, result2 } }) const { result1, result2 } = await Effect.runPromise(program) @@ -524,10 +524,10 @@ describe("TPubSub", () => { it.it("sliding - one to one", () => fc.assert(fc.asyncProperty(fc.integer({ min: 1 }), fc.array(fc.integer({ min: 1 })), async (n, as) => { - const program = Effect.gen(function*($) { - const deferred = yield* $(Deferred.make()) - const pubsub = yield* $(TPubSub.sliding(n)) - const subscriber = yield* $(pipe( + const program = Effect.gen(function*() { + const deferred = yield* (Deferred.make()) + const pubsub = yield* (TPubSub.sliding(n)) + const subscriber = yield* (pipe( TPubSub.subscribeScoped(pubsub), Effect.flatMap((subscription) => pipe( @@ -542,10 +542,10 @@ describe("TPubSub", () => { Effect.scoped, Effect.fork )) - yield* $(Deferred.await(deferred)) - const publisher = yield* $(pipe(sort(as), Effect.forEach((n) => pipe(pubsub, TPubSub.publish(n))), Effect.fork)) - yield* $(Fiber.join(publisher)) - return yield* $(Fiber.join(subscriber)) + yield* (Deferred.await(deferred)) + const publisher = yield* (pipe(sort(as), Effect.forEach((n) => pipe(pubsub, TPubSub.publish(n))), Effect.fork)) + yield* (Fiber.join(publisher)) + return yield* (Fiber.join(subscriber)) }) const result = await Effect.runPromise(program) deepStrictEqual(Array.from(result), sort(Array.from(result))) @@ -553,11 +553,11 @@ describe("TPubSub", () => { it.it("sliding - one to many", () => fc.assert(fc.asyncProperty(fc.integer({ min: 1 }), fc.array(fc.integer({ min: 1 })), async (n, as) => { - const program = Effect.gen(function*($) { - const deferred1 = yield* $(Deferred.make()) - const deferred2 = yield* $(Deferred.make()) - const pubsub = yield* $(TPubSub.sliding(n)) - const subscriber1 = yield* $(pipe( + const program = Effect.gen(function*() { + const deferred1 = yield* (Deferred.make()) + const deferred2 = yield* (Deferred.make()) + const pubsub = yield* (TPubSub.sliding(n)) + const subscriber1 = yield* (pipe( TPubSub.subscribeScoped(pubsub), Effect.flatMap((subscription) => pipe( @@ -572,7 +572,7 @@ describe("TPubSub", () => { Effect.scoped, Effect.fork )) - const subscriber2 = yield* $(pipe( + const subscriber2 = yield* (pipe( TPubSub.subscribeScoped(pubsub), Effect.flatMap((subscription) => pipe( @@ -587,11 +587,11 @@ describe("TPubSub", () => { Effect.scoped, Effect.fork )) - yield* $(Deferred.await(deferred1)) - yield* $(Deferred.await(deferred2)) - yield* $(pipe(sort(as), Effect.forEach((n) => pipe(pubsub, TPubSub.publish(n))), Effect.fork)) - const result1 = yield* $(Fiber.join(subscriber1)) - const result2 = yield* $(Fiber.join(subscriber2)) + yield* (Deferred.await(deferred1)) + yield* (Deferred.await(deferred2)) + yield* (pipe(sort(as), Effect.forEach((n) => pipe(pubsub, TPubSub.publish(n))), Effect.fork)) + const result1 = yield* (Fiber.join(subscriber1)) + const result2 = yield* (Fiber.join(subscriber2)) return { result1, result2 } }) const { result1, result2 } = await Effect.runPromise(program) @@ -601,11 +601,11 @@ describe("TPubSub", () => { it.it("sliding - many to many", () => fc.assert(fc.asyncProperty(fc.integer({ min: 1 }), fc.array(fc.integer({ min: 1 })), async (n, as) => { - const program = Effect.gen(function*($) { - const deferred1 = yield* $(Deferred.make()) - const deferred2 = yield* $(Deferred.make()) - const pubsub = yield* $(TPubSub.sliding(n * 2)) - const subscriber1 = yield* $(pipe( + const program = Effect.gen(function*() { + const deferred1 = yield* (Deferred.make()) + const deferred2 = yield* (Deferred.make()) + const pubsub = yield* (TPubSub.sliding(n * 2)) + const subscriber1 = yield* (pipe( TPubSub.subscribeScoped(pubsub), Effect.flatMap((subscription) => pipe( @@ -620,7 +620,7 @@ describe("TPubSub", () => { Effect.scoped, Effect.fork )) - const subscriber2 = yield* $(pipe( + const subscriber2 = yield* (pipe( TPubSub.subscribeScoped(pubsub), Effect.flatMap((subscription) => pipe( @@ -635,20 +635,20 @@ describe("TPubSub", () => { Effect.scoped, Effect.fork )) - yield* $(Deferred.await(deferred1)) - yield* $(Deferred.await(deferred2)) - yield* $(pipe( + yield* (Deferred.await(deferred1)) + yield* (Deferred.await(deferred2)) + yield* (pipe( sort(as), Effect.forEach((n) => pipe(pubsub, TPubSub.publish(n))), Effect.fork )) - yield* $(pipe( + yield* (pipe( sort(as.map((n) => -n)), Effect.forEach((n) => pipe(pubsub, TPubSub.publish(n))), Effect.fork )) - const result1 = yield* $(Fiber.join(subscriber1)) - const result2 = yield* $(Fiber.join(subscriber2)) + const result1 = yield* (Fiber.join(subscriber1)) + const result2 = yield* (Fiber.join(subscriber2)) return { result1, result2 } }) const { result1, result2 } = await Effect.runPromise(program) @@ -672,10 +672,10 @@ describe("TPubSub", () => { it.it("unbounded - one to one", () => fc.assert(fc.asyncProperty(fc.array(fc.integer({ min: 1 })), async (as) => { - const program = Effect.gen(function*($) { - const deferred = yield* $(Deferred.make()) - const pubsub = yield* $(TPubSub.unbounded()) - const subscriber = yield* $(pipe( + const program = Effect.gen(function*() { + const deferred = yield* (Deferred.make()) + const pubsub = yield* (TPubSub.unbounded()) + const subscriber = yield* (pipe( STM.commit(TPubSub.subscribe(pubsub)), Effect.flatMap((subscription) => pipe( @@ -687,9 +687,9 @@ describe("TPubSub", () => { Effect.scoped, Effect.fork )) - yield* $(Deferred.await(deferred)) - yield* $(pipe(as, Effect.forEach((n) => pipe(pubsub, TPubSub.publish(n))), Effect.fork)) - return yield* $(Fiber.join(subscriber)) + yield* (Deferred.await(deferred)) + yield* (pipe(as, Effect.forEach((n) => pipe(pubsub, TPubSub.publish(n))), Effect.fork)) + return yield* (Fiber.join(subscriber)) }) const result = await Effect.runPromise(program) deepStrictEqual(Array.from(result), as) @@ -697,11 +697,11 @@ describe("TPubSub", () => { it.it("unbounded - one to many", () => fc.assert(fc.asyncProperty(fc.array(fc.integer({ min: 1 })), async (as) => { - const program = Effect.gen(function*($) { - const deferred1 = yield* $(Deferred.make()) - const deferred2 = yield* $(Deferred.make()) - const pubsub = yield* $(TPubSub.unbounded()) - const subscriber1 = yield* $(pipe( + const program = Effect.gen(function*() { + const deferred1 = yield* (Deferred.make()) + const deferred2 = yield* (Deferred.make()) + const pubsub = yield* (TPubSub.unbounded()) + const subscriber1 = yield* (pipe( TPubSub.subscribeScoped(pubsub), Effect.flatMap((subscription) => pipe( @@ -713,7 +713,7 @@ describe("TPubSub", () => { Effect.scoped, Effect.fork )) - const subscriber2 = yield* $(pipe( + const subscriber2 = yield* (pipe( TPubSub.subscribeScoped(pubsub), Effect.flatMap((subscription) => pipe( @@ -725,11 +725,11 @@ describe("TPubSub", () => { Effect.scoped, Effect.fork )) - yield* $(Deferred.await(deferred1)) - yield* $(Deferred.await(deferred2)) - yield* $(pipe(as, Effect.forEach((n) => pipe(pubsub, TPubSub.publish(n))), Effect.fork)) - const result1 = yield* $(Fiber.join(subscriber1)) - const result2 = yield* $(Fiber.join(subscriber2)) + yield* (Deferred.await(deferred1)) + yield* (Deferred.await(deferred2)) + yield* (pipe(as, Effect.forEach((n) => pipe(pubsub, TPubSub.publish(n))), Effect.fork)) + const result1 = yield* (Fiber.join(subscriber1)) + const result2 = yield* (Fiber.join(subscriber2)) return { result1, result2 } }) const { result1, result2 } = await Effect.runPromise(program) @@ -739,11 +739,11 @@ describe("TPubSub", () => { it.it("unbounded - many to many", () => fc.assert(fc.asyncProperty(fc.array(fc.integer({ min: 1 })), async (as) => { - const program = Effect.gen(function*($) { - const deferred1 = yield* $(Deferred.make()) - const deferred2 = yield* $(Deferred.make()) - const pubsub = yield* $(TPubSub.unbounded()) - const subscriber1 = yield* $(pipe( + const program = Effect.gen(function*() { + const deferred1 = yield* (Deferred.make()) + const deferred2 = yield* (Deferred.make()) + const pubsub = yield* (TPubSub.unbounded()) + const subscriber1 = yield* (pipe( TPubSub.subscribeScoped(pubsub), Effect.flatMap((subscription) => pipe( @@ -758,7 +758,7 @@ describe("TPubSub", () => { Effect.scoped, Effect.fork )) - const subscriber2 = yield* $(pipe( + const subscriber2 = yield* (pipe( TPubSub.subscribeScoped(pubsub), Effect.flatMap((subscription) => pipe( @@ -773,20 +773,20 @@ describe("TPubSub", () => { Effect.scoped, Effect.fork )) - yield* $(Deferred.await(deferred1)) - yield* $(Deferred.await(deferred2)) - yield* $(pipe( + yield* (Deferred.await(deferred1)) + yield* (Deferred.await(deferred2)) + yield* (pipe( as, Effect.forEach((n) => pipe(pubsub, TPubSub.publish(n))), Effect.fork )) - yield* $(pipe( + yield* (pipe( as.map((n) => -n), Effect.forEach((n) => pipe(pubsub, TPubSub.publish(n))), Effect.fork )) - const result1 = yield* $(Fiber.join(subscriber1)) - const result2 = yield* $(Fiber.join(subscriber2)) + const result1 = yield* (Fiber.join(subscriber1)) + const result2 = yield* (Fiber.join(subscriber2)) return { result1, result2 } }) const { result1, result2 } = await Effect.runPromise(program) @@ -797,12 +797,12 @@ describe("TPubSub", () => { }))) it.effect("unbounded - undefined/null values", () => - Effect.gen(function*($) { + Effect.gen(function*() { const as = [null, undefined, null, undefined] - const deferred1 = yield* $(Deferred.make()) - const deferred2 = yield* $(Deferred.make()) - const pubsub = yield* $(TPubSub.unbounded()) - const subscriber1 = yield* $(pipe( + const deferred1 = yield* (Deferred.make()) + const deferred2 = yield* (Deferred.make()) + const pubsub = yield* (TPubSub.unbounded()) + const subscriber1 = yield* (pipe( TPubSub.subscribeScoped(pubsub), Effect.flatMap((subscription) => pipe( @@ -814,7 +814,7 @@ describe("TPubSub", () => { Effect.scoped, Effect.fork )) - const subscriber2 = yield* $(pipe( + const subscriber2 = yield* (pipe( TPubSub.subscribeScoped(pubsub), Effect.flatMap((subscription) => pipe( @@ -826,22 +826,22 @@ describe("TPubSub", () => { Effect.scoped, Effect.fork )) - yield* $(Deferred.await(deferred1)) - yield* $(Deferred.await(deferred2)) - yield* $(pipe(as, Effect.forEach((n) => pipe(pubsub, TPubSub.publish(n))), Effect.fork)) - const result1 = yield* $(Fiber.join(subscriber1)) - const result2 = yield* $(Fiber.join(subscriber2)) + yield* (Deferred.await(deferred1)) + yield* (Deferred.await(deferred2)) + yield* (pipe(as, Effect.forEach((n) => pipe(pubsub, TPubSub.publish(n))), Effect.fork)) + const result1 = yield* (Fiber.join(subscriber1)) + const result2 = yield* (Fiber.join(subscriber2)) deepStrictEqual(result1, as) deepStrictEqual(result2, as) })) it.effect("bounded - undefined/null values", () => - Effect.gen(function*($) { + Effect.gen(function*() { const as = [null, undefined] - const deferred1 = yield* $(Deferred.make()) - const deferred2 = yield* $(Deferred.make()) - const pubsub = yield* $(TPubSub.bounded(2)) - const subscriber1 = yield* $(pipe( + const deferred1 = yield* (Deferred.make()) + const deferred2 = yield* (Deferred.make()) + const pubsub = yield* (TPubSub.bounded(2)) + const subscriber1 = yield* (pipe( TPubSub.subscribeScoped(pubsub), Effect.flatMap((subscription) => pipe( @@ -853,7 +853,7 @@ describe("TPubSub", () => { Effect.scoped, Effect.fork )) - const subscriber2 = yield* $(pipe( + const subscriber2 = yield* (pipe( TPubSub.subscribeScoped(pubsub), Effect.flatMap((subscription) => pipe( @@ -865,22 +865,22 @@ describe("TPubSub", () => { Effect.scoped, Effect.fork )) - yield* $(Deferred.await(deferred1)) - yield* $(Deferred.await(deferred2)) - yield* $(pipe(as, Effect.forEach((n) => pipe(pubsub, TPubSub.publish(n))), Effect.fork)) - const result1 = yield* $(Fiber.join(subscriber1)) - const result2 = yield* $(Fiber.join(subscriber2)) + yield* (Deferred.await(deferred1)) + yield* (Deferred.await(deferred2)) + yield* (pipe(as, Effect.forEach((n) => pipe(pubsub, TPubSub.publish(n))), Effect.fork)) + const result1 = yield* (Fiber.join(subscriber1)) + const result2 = yield* (Fiber.join(subscriber2)) deepStrictEqual(result1, as) deepStrictEqual(result2, as) })) it.effect("dropping - undefined/null values", () => - Effect.gen(function*($) { + Effect.gen(function*() { const as = [null, undefined, null, undefined] const n = 2 - const deferred = yield* $(Deferred.make()) - const pubsub = yield* $(TPubSub.dropping(n)) - const subscriber = yield* $(pipe( + const deferred = yield* (Deferred.make()) + const pubsub = yield* (TPubSub.dropping(n)) + const subscriber = yield* (pipe( TPubSub.subscribeScoped(pubsub), Effect.flatMap((subscription) => pipe( @@ -895,9 +895,9 @@ describe("TPubSub", () => { Effect.scoped, Effect.fork )) - yield* $(Deferred.await(deferred)) - yield* $(pipe(as, Effect.forEach((n) => pipe(pubsub, TPubSub.publish(n))), Effect.fork)) - const result = yield* $(Fiber.join(subscriber)) + yield* (Deferred.await(deferred)) + yield* (pipe(as, Effect.forEach((n) => pipe(pubsub, TPubSub.publish(n))), Effect.fork)) + const result = yield* (Fiber.join(subscriber)) deepStrictEqual(result, as.slice(0, n)) })) }) diff --git a/packages/effect/test/TQueue.test.ts b/packages/effect/test/TQueue.test.ts index 4856eb1f9a..10c1d9c55c 100644 --- a/packages/effect/test/TQueue.test.ts +++ b/packages/effect/test/TQueue.test.ts @@ -5,15 +5,15 @@ import { describe } from "vitest" describe("TQueue", () => { it.effect("bounded", () => - Effect.gen(function*($) { + Effect.gen(function*() { const capacity = 5 - const result = yield* $(pipe(TQueue.bounded(capacity), STM.map(TQueue.capacity))) + const result = yield* (pipe(TQueue.bounded(capacity), STM.map(TQueue.capacity))) strictEqual(result, capacity) })) it.effect("unbounded", () => - Effect.gen(function*($) { - const result = yield* $(pipe( + Effect.gen(function*() { + const result = yield* (pipe( TQueue.unbounded(), STM.map(TQueue.capacity), STM.commit @@ -22,146 +22,146 @@ describe("TQueue", () => { })) it.effect("offer & take", () => - Effect.gen(function*($) { - const queue = yield* $(TQueue.bounded(5)) - yield* $(pipe(queue, TQueue.offer(1))) - yield* $(pipe(queue, TQueue.offer(2))) - yield* $(pipe(queue, TQueue.offer(3))) - const result1 = yield* $(TQueue.take(queue)) - const result2 = yield* $(TQueue.take(queue)) - const result3 = yield* $(TQueue.take(queue)) + Effect.gen(function*() { + const queue = yield* (TQueue.bounded(5)) + yield* (pipe(queue, TQueue.offer(1))) + yield* (pipe(queue, TQueue.offer(2))) + yield* (pipe(queue, TQueue.offer(3))) + const result1 = yield* (TQueue.take(queue)) + const result2 = yield* (TQueue.take(queue)) + const result3 = yield* (TQueue.take(queue)) strictEqual(result1, 1) strictEqual(result2, 2) strictEqual(result3, 3) })) it.effect("offer & take undefined", () => - Effect.gen(function*($) { - const queue = yield* $(TQueue.bounded(5)) - yield* $(pipe(queue, TQueue.offer(undefined))) - yield* $(pipe(queue, TQueue.offer(undefined))) - const result1 = yield* $(TQueue.take(queue)) - const result2 = yield* $(TQueue.take(queue)) + Effect.gen(function*() { + const queue = yield* (TQueue.bounded(5)) + yield* (pipe(queue, TQueue.offer(undefined))) + yield* (pipe(queue, TQueue.offer(undefined))) + const result1 = yield* (TQueue.take(queue)) + const result2 = yield* (TQueue.take(queue)) strictEqual(result1, undefined) strictEqual(result2, undefined) })) it.effect("offerAll & takeAll", () => - Effect.gen(function*($) { + Effect.gen(function*() { const array = [1, 2, 3, 4, 5] - const queue = yield* $(TQueue.bounded(5)) - yield* $(pipe(queue, TQueue.offerAll(array))) - const result = yield* $(TQueue.takeAll(queue)) + const queue = yield* (TQueue.bounded(5)) + yield* (pipe(queue, TQueue.offerAll(array))) + const result = yield* (TQueue.takeAll(queue)) deepStrictEqual(Array.from(result), array) })) it.effect("takeUpTo", () => - Effect.gen(function*($) { - const queue = yield* $(TQueue.bounded(5)) - yield* $(pipe(queue, TQueue.offerAll([1, 2, 3, 4, 5]))) - const result = yield* $(pipe(queue, TQueue.takeUpTo(3))) - const size = yield* $(TQueue.size(queue)) + Effect.gen(function*() { + const queue = yield* (TQueue.bounded(5)) + yield* (pipe(queue, TQueue.offerAll([1, 2, 3, 4, 5]))) + const result = yield* (pipe(queue, TQueue.takeUpTo(3))) + const size = yield* (TQueue.size(queue)) deepStrictEqual(Array.from(result), [1, 2, 3]) strictEqual(size, 2) })) it.effect("takeUpTo - larger than queue", () => - Effect.gen(function*($) { + Effect.gen(function*() { const array = [1, 2, 3, 4, 5] - const queue = yield* $(TQueue.bounded(5)) - yield* $(pipe(queue, TQueue.offerAll(array))) - const result = yield* $(pipe(queue, TQueue.takeUpTo(7))) - const size = yield* $(TQueue.size(queue)) + const queue = yield* (TQueue.bounded(5)) + yield* (pipe(queue, TQueue.offerAll(array))) + const result = yield* (pipe(queue, TQueue.takeUpTo(7))) + const size = yield* (TQueue.size(queue)) deepStrictEqual(Array.from(result), array) strictEqual(size, 0) })) it.effect("poll", () => - Effect.gen(function*($) { - const queue = yield* $(TQueue.bounded(5)) - yield* $(pipe(queue, TQueue.offerAll([1, 2, 3]))) - const result = yield* $(TQueue.poll(queue)) + Effect.gen(function*() { + const queue = yield* (TQueue.bounded(5)) + yield* (pipe(queue, TQueue.offerAll([1, 2, 3]))) + const result = yield* (TQueue.poll(queue)) assertSome(result, 1) })) it.effect("poll undefined", () => - Effect.gen(function*($) { - const queue = yield* $(TQueue.bounded(5)) - yield* $(pipe(queue, TQueue.offerAll([undefined, undefined, undefined]))) - const result = yield* $(TQueue.poll(queue)) + Effect.gen(function*() { + const queue = yield* (TQueue.bounded(5)) + yield* (pipe(queue, TQueue.offerAll([undefined, undefined, undefined]))) + const result = yield* (TQueue.poll(queue)) assertSome(result, undefined) })) it.effect("poll - empty queue", () => - Effect.gen(function*($) { - const queue = yield* $(TQueue.bounded(5)) - const result = yield* $(TQueue.poll(queue)) + Effect.gen(function*() { + const queue = yield* (TQueue.bounded(5)) + const result = yield* (TQueue.poll(queue)) assertNone(result) })) it.effect("seek", () => - Effect.gen(function*($) { - const queue = yield* $(TQueue.bounded(5)) - yield* $(pipe(queue, TQueue.offerAll([1, 2, 3, 4, 5]))) - const result = yield* $(pipe(queue, TQueue.seek((n) => n === 3))) - const size = yield* $(TQueue.size(queue)) + Effect.gen(function*() { + const queue = yield* (TQueue.bounded(5)) + yield* (pipe(queue, TQueue.offerAll([1, 2, 3, 4, 5]))) + const result = yield* (pipe(queue, TQueue.seek((n) => n === 3))) + const size = yield* (TQueue.size(queue)) strictEqual(result, 3) strictEqual(size, 2) })) it.effect("size", () => - Effect.gen(function*($) { - const queue = yield* $(TQueue.unbounded()) - yield* $(pipe(queue, TQueue.offerAll([1, 2, 3, 4, 5]))) - const result = yield* $(TQueue.size(queue)) + Effect.gen(function*() { + const queue = yield* (TQueue.unbounded()) + yield* (pipe(queue, TQueue.offerAll([1, 2, 3, 4, 5]))) + const result = yield* (TQueue.size(queue)) strictEqual(result, 5) })) it.effect("peek", () => - Effect.gen(function*($) { - const queue = yield* $(TQueue.unbounded()) - yield* $(pipe(queue, TQueue.offerAll([1, 2, 3, 4, 5]))) - const result = yield* $(TQueue.peek(queue)) - const size = yield* $(TQueue.size(queue)) + Effect.gen(function*() { + const queue = yield* (TQueue.unbounded()) + yield* (pipe(queue, TQueue.offerAll([1, 2, 3, 4, 5]))) + const result = yield* (TQueue.peek(queue)) + const size = yield* (TQueue.size(queue)) strictEqual(result, 1) strictEqual(size, 5) })) it.effect("peekOption", () => - Effect.gen(function*($) { - const queue = yield* $(TQueue.unbounded()) - yield* $(pipe(queue, TQueue.offerAll([1, 2, 3, 4, 5]))) - const result = yield* $(TQueue.peekOption(queue)) - const size = yield* $(TQueue.size(queue)) + Effect.gen(function*() { + const queue = yield* (TQueue.unbounded()) + yield* (pipe(queue, TQueue.offerAll([1, 2, 3, 4, 5]))) + const result = yield* (TQueue.peekOption(queue)) + const size = yield* (TQueue.size(queue)) assertSome(result, 1) strictEqual(size, 5) })) it.effect("peekOption - empty queu", () => - Effect.gen(function*($) { - const queue = yield* $(TQueue.unbounded()) - const result = yield* $(TQueue.peekOption(queue)) + Effect.gen(function*() { + const queue = yield* (TQueue.unbounded()) + const result = yield* (TQueue.peekOption(queue)) assertNone(result) })) it.effect("isEmpty", () => - Effect.gen(function*($) { - const queue1 = yield* $(TQueue.unbounded()) - const queue2 = yield* $(TQueue.unbounded()) - yield* $(pipe(queue1, TQueue.offerAll([1, 2, 3, 4, 5]))) - const result1 = yield* $(TQueue.isEmpty(queue1)) - const result2 = yield* $(TQueue.isEmpty(queue2)) + Effect.gen(function*() { + const queue1 = yield* (TQueue.unbounded()) + const queue2 = yield* (TQueue.unbounded()) + yield* (pipe(queue1, TQueue.offerAll([1, 2, 3, 4, 5]))) + const result1 = yield* (TQueue.isEmpty(queue1)) + const result2 = yield* (TQueue.isEmpty(queue2)) assertFalse(result1) assertTrue(result2) })) it.effect("isFull", () => - Effect.gen(function*($) { - const queue1 = yield* $(TQueue.bounded(5)) - const queue2 = yield* $(TQueue.bounded(5)) - yield* $(pipe(queue1, TQueue.offerAll([1, 2, 3, 4, 5]))) - const result1 = yield* $(TQueue.isFull(queue1)) - const result2 = yield* $(TQueue.isFull(queue2)) + Effect.gen(function*() { + const queue1 = yield* (TQueue.bounded(5)) + const queue2 = yield* (TQueue.bounded(5)) + yield* (pipe(queue1, TQueue.offerAll([1, 2, 3, 4, 5]))) + const result1 = yield* (TQueue.isFull(queue1)) + const result2 = yield* (TQueue.isFull(queue2)) assertTrue(result1) assertFalse(result2) })) diff --git a/packages/effect/test/TReentrantLock.test.ts b/packages/effect/test/TReentrantLock.test.ts index dc9e25c956..1eb7529c7e 100644 --- a/packages/effect/test/TReentrantLock.test.ts +++ b/packages/effect/test/TReentrantLock.test.ts @@ -25,9 +25,9 @@ const pollSchedule = (): Schedule.Schedule>, describe("TReentrantLock", () => { it.effect("one read lock", () => - Effect.gen(function*($) { - const lock = yield* $(TReentrantLock.make) - const result = yield* $(pipe( + Effect.gen(function*() { + const lock = yield* (TReentrantLock.make) + const result = yield* (pipe( TReentrantLock.readLock(lock), Effect.flatMap(Effect.succeed), Effect.scoped @@ -36,9 +36,9 @@ describe("TReentrantLock", () => { })) it.effect("two read locks from the same fiber", () => - Effect.gen(function*($) { - const lock = yield* $(TReentrantLock.make) - const result = yield* $(pipe( + Effect.gen(function*() { + const lock = yield* (TReentrantLock.make) + const result = yield* (pipe( TReentrantLock.readLock(lock), Effect.flatMap(() => pipe( @@ -53,12 +53,12 @@ describe("TReentrantLock", () => { })) it.effect("two read locks from different fibers", () => - Effect.gen(function*($) { - const lock = yield* $(TReentrantLock.make) - const rLatch = yield* $(Deferred.make()) - const mLatch = yield* $(Deferred.make()) - const wLatch = yield* $(Deferred.make()) - yield* $(pipe( + Effect.gen(function*() { + const lock = yield* (TReentrantLock.make) + const rLatch = yield* (Deferred.make()) + const mLatch = yield* (Deferred.make()) + const wLatch = yield* (Deferred.make()) + yield* (pipe( TReentrantLock.readLock(lock), Effect.flatMap((count) => pipe( @@ -71,8 +71,8 @@ describe("TReentrantLock", () => { Effect.scoped, Effect.fork )) - yield* $(Deferred.await(mLatch)) - const fiber = yield* $(pipe( + yield* (Deferred.await(mLatch)) + const fiber = yield* (pipe( TReentrantLock.readLock(lock), Effect.flatMap((count) => pipe( @@ -84,18 +84,18 @@ describe("TReentrantLock", () => { Effect.scoped, Effect.fork )) - yield* $(Deferred.await(wLatch)) - const result = yield* $(Fiber.join(fiber)) + yield* (Deferred.await(wLatch)) + const result = yield* (Fiber.join(fiber)) strictEqual(result, 1) })) it.effect("one write lock, then one read lock, different fibers", () => - Effect.gen(function*($) { - const lock = yield* $(TReentrantLock.make) - const rLatch = yield* $(Deferred.make()) - const mLatch = yield* $(Deferred.make()) - const wLatch = yield* $(Deferred.make()) - yield* $(pipe( + Effect.gen(function*() { + const lock = yield* (TReentrantLock.make) + const rLatch = yield* (Deferred.make()) + const mLatch = yield* (Deferred.make()) + const wLatch = yield* (Deferred.make()) + yield* (pipe( TReentrantLock.writeLock(lock), Effect.flatMap((count) => pipe( @@ -108,35 +108,35 @@ describe("TReentrantLock", () => { Effect.scoped, Effect.fork )) - yield* $(Deferred.await(rLatch)) - const fiber = yield* $(pipe( + yield* (Deferred.await(rLatch)) + const fiber = yield* (pipe( mLatch, Deferred.succeed(void 0), Effect.zipRight(Effect.scoped(TReentrantLock.readLock(lock))), Effect.fork )) - yield* $(Deferred.await(mLatch)) - const locks = yield* $(pipe( + yield* (Deferred.await(mLatch)) + const locks = yield* (pipe( TReentrantLock.readLocks(lock), STM.zipWith(TReentrantLock.writeLocks(lock), (x, y) => x + y), STM.commit )) - const option = yield* $(pipe( + const option = yield* (pipe( Fiber.poll(fiber), Effect.repeat(pollSchedule()) )) - yield* $(pipe(wLatch, Deferred.succeed(void 0))) - const readerCount = yield* $(Fiber.join(fiber)) + yield* (pipe(wLatch, Deferred.succeed(void 0))) + const readerCount = yield* (Fiber.join(fiber)) strictEqual(locks, 1) assertNone(option) strictEqual(readerCount, 1) })) it.effect("write lock followed by read lock from the same fiber", () => - Effect.gen(function*($) { - const lock = yield* $(TReentrantLock.make) - const ref = yield* $(Ref.make(0)) - const readerCount = yield* $(pipe( + Effect.gen(function*() { + const lock = yield* (TReentrantLock.make) + const ref = yield* (Ref.make(0)) + const readerCount = yield* (pipe( TReentrantLock.writeLock(lock), Effect.flatMap(() => pipe( @@ -153,16 +153,16 @@ describe("TReentrantLock", () => { ), Effect.scoped )) - const writerCount = yield* $(Ref.get(ref)) + const writerCount = yield* (Ref.get(ref)) strictEqual(readerCount, 1) strictEqual(writerCount, 1) })) it.effect("upgrade read lock to write lock from the same fiber", () => - Effect.gen(function*($) { - const lock = yield* $(TReentrantLock.make) - const ref = yield* $(Ref.make(0)) - const readerCount = yield* $(pipe( + Effect.gen(function*() { + const lock = yield* (TReentrantLock.make) + const ref = yield* (Ref.make(0)) + const readerCount = yield* (pipe( TReentrantLock.readLock(lock), Effect.flatMap(() => pipe( @@ -179,18 +179,18 @@ describe("TReentrantLock", () => { ), Effect.scoped )) - const writerCount = yield* $(Ref.get(ref)) + const writerCount = yield* (Ref.get(ref)) strictEqual(readerCount, 1) strictEqual(writerCount, 1) })) it.effect("read to writer upgrade with other readers", () => - Effect.gen(function*($) { - const lock = yield* $(TReentrantLock.make) - const rLatch = yield* $(Deferred.make()) - const mLatch = yield* $(Deferred.make()) - const wLatch = yield* $(Deferred.make()) - yield* $(pipe( + Effect.gen(function*() { + const lock = yield* (TReentrantLock.make) + const rLatch = yield* (Deferred.make()) + const mLatch = yield* (Deferred.make()) + const wLatch = yield* (Deferred.make()) + yield* (pipe( TReentrantLock.readLock(lock), Effect.flatMap((count) => pipe( @@ -203,8 +203,8 @@ describe("TReentrantLock", () => { Effect.scoped, Effect.fork )) - yield* $(Deferred.await(mLatch)) - const fiber = yield* $(pipe( + yield* (Deferred.await(mLatch)) + const fiber = yield* (pipe( TReentrantLock.readLock(lock), Effect.flatMap(() => pipe( @@ -222,10 +222,10 @@ describe("TReentrantLock", () => { Effect.scoped, Effect.fork )) - yield* $(Deferred.await(wLatch)) - const option = yield* $(pipe(Fiber.poll(fiber), Effect.repeat(pollSchedule()))) - yield* $(pipe(rLatch, Deferred.succeed(void 0))) - const count = yield* $(Fiber.join(fiber)) + yield* (Deferred.await(wLatch)) + const option = yield* (pipe(Fiber.poll(fiber), Effect.repeat(pollSchedule()))) + yield* (pipe(rLatch, Deferred.succeed(void 0))) + const count = yield* (Fiber.join(fiber)) assertNone(option) strictEqual(count, 1) })) diff --git a/packages/effect/test/TSet.test.ts b/packages/effect/test/TSet.test.ts index ddb6782fe0..f34b38dd37 100644 --- a/packages/effect/test/TSet.test.ts +++ b/packages/effect/test/TSet.test.ts @@ -9,292 +9,292 @@ import { describe } from "vitest" describe("TSet", () => { it.effect("add - new element", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TSet.empty(), STM.tap(TSet.add(1)), STM.flatMap(TSet.toReadonlySet) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(result, new Set([1])) })) it.effect("add - duplicate element", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TSet.make(1), STM.tap(TSet.add(1)), STM.flatMap(TSet.toReadonlySet) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(result, new Set([1])) })) it.effect("difference", () => - Effect.gen(function*($) { - const transaction = STM.gen(function*($) { - const set1 = yield* $(TSet.make(1, 2, 3)) - const set2 = yield* $(TSet.make(1, 4, 5)) - yield* $(pipe(set1, TSet.difference(set2))) - return yield* $(TSet.toArray(set1)) + Effect.gen(function*() { + const transaction = STM.gen(function*() { + const set1 = yield* (TSet.make(1, 2, 3)) + const set2 = yield* (TSet.make(1, 4, 5)) + yield* (pipe(set1, TSet.difference(set2))) + return yield* (TSet.toArray(set1)) }) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(result, [2, 3]) })) it.effect("empty", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TSet.empty(), STM.flatMap(TSet.isEmpty) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) assertTrue(result) })) it.effect("fromIterable", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TSet.fromIterable([1, 2, 2, 3]), STM.flatMap(TSet.toReadonlySet) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(result, new Set([1, 2, 3])) })) it.effect("has - existing element", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TSet.make(1, 2, 3, 4), STM.flatMap(TSet.has(1)) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) assertTrue(result) })) it.effect("has - non-existing element", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TSet.empty(), STM.flatMap(TSet.has(1)) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) assertFalse(result) })) it.effect("intersection", () => - Effect.gen(function*($) { - const transaction = STM.gen(function*($) { - const set1 = yield* $(TSet.make(1, 2, 3)) - const set2 = yield* $(TSet.make(1, 4, 5)) - yield* $(pipe(set1, TSet.intersection(set2))) - return yield* $(TSet.toArray(set1)) + Effect.gen(function*() { + const transaction = STM.gen(function*() { + const set1 = yield* (TSet.make(1, 2, 3)) + const set2 = yield* (TSet.make(1, 4, 5)) + yield* (pipe(set1, TSet.intersection(set2))) + return yield* (TSet.toArray(set1)) }) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(result, [1]) })) it.effect("make", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TSet.make(1, 2, 2, 3), STM.flatMap(TSet.toReadonlySet) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(result, new Set([1, 2, 3])) })) it.effect("reduce - non-empty set", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TSet.make(1, 2, 3), STM.flatMap(TSet.reduce(0, (x, y) => x + y)) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) strictEqual(result, 6) })) it.effect("reduce - empty set", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TSet.empty(), STM.flatMap(TSet.reduce(0, (x, y) => x + y)) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) strictEqual(result, 0) })) it.effect("reduceSTM - non-empty set", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TSet.make(1, 2, 3), STM.flatMap(TSet.reduceSTM(0, (x, y) => STM.succeed(x + y))) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) strictEqual(result, 6) })) it.effect("reduceSTM - empty set", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TSet.empty(), STM.flatMap(TSet.reduceSTM(0, (x, y) => STM.succeed(x + y))) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) strictEqual(result, 0) })) it.effect("remove - existing element", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TSet.make(1, 2), STM.tap(TSet.remove(1)), STM.flatMap(TSet.toReadonlySet) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(result, new Set([2])) })) it.effect("remove - non-existing element", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TSet.make(1, 2), STM.tap(TSet.remove(3)), STM.flatMap(TSet.toReadonlySet) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(result, new Set([1, 2])) })) it.effect("retainIf", () => - Effect.gen(function*($) { - const transaction = STM.gen(function*($) { - const set = yield* $(TSet.make("a", "aa", "aaa")) - const removed = yield* $(pipe(set, TSet.retainIf((s) => s === "aa"))) - const a = yield* $(pipe(set, TSet.has("a"))) - const aa = yield* $(pipe(set, TSet.has("aa"))) - const aaa = yield* $(pipe(set, TSet.has("aaa"))) + Effect.gen(function*() { + const transaction = STM.gen(function*() { + const set = yield* (TSet.make("a", "aa", "aaa")) + const removed = yield* (pipe(set, TSet.retainIf((s) => s === "aa"))) + const a = yield* (pipe(set, TSet.has("a"))) + const aa = yield* (pipe(set, TSet.has("aa"))) + const aaa = yield* (pipe(set, TSet.has("aaa"))) return [Array.from(removed), a, aa, aaa] }) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(result, [["aaa", "a"], false, true, false]) })) it.effect("retainIf > { discard: true }", () => - Effect.gen(function*($) { - const transaction = STM.gen(function*($) { - const set = yield* $(TSet.make("a", "aa", "aaa")) - yield* $(pipe(set, TSet.retainIf((s) => s === "aa", { discard: true }))) - const a = yield* $(pipe(set, TSet.has("a"))) - const aa = yield* $(pipe(set, TSet.has("aa"))) - const aaa = yield* $(pipe(set, TSet.has("aaa"))) + Effect.gen(function*() { + const transaction = STM.gen(function*() { + const set = yield* (TSet.make("a", "aa", "aaa")) + yield* (pipe(set, TSet.retainIf((s) => s === "aa", { discard: true }))) + const a = yield* (pipe(set, TSet.has("a"))) + const aa = yield* (pipe(set, TSet.has("aa"))) + const aaa = yield* (pipe(set, TSet.has("aaa"))) return [a, aa, aaa] }) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(result, [false, true, false]) })) it.effect("removeIf", () => - Effect.gen(function*($) { - const transaction = STM.gen(function*($) { - const set = yield* $(TSet.make("a", "aa", "aaa")) - const removed = yield* $(pipe(set, TSet.removeIf((s) => s === "aa"))) - const a = yield* $(pipe(set, TSet.has("a"))) - const aa = yield* $(pipe(set, TSet.has("aa"))) - const aaa = yield* $(pipe(set, TSet.has("aaa"))) + Effect.gen(function*() { + const transaction = STM.gen(function*() { + const set = yield* (TSet.make("a", "aa", "aaa")) + const removed = yield* (pipe(set, TSet.removeIf((s) => s === "aa"))) + const a = yield* (pipe(set, TSet.has("a"))) + const aa = yield* (pipe(set, TSet.has("aa"))) + const aaa = yield* (pipe(set, TSet.has("aaa"))) return [Array.from(removed), a, aa, aaa] }) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(result, [["aa"], true, false, true]) })) it.effect("removeIf > { discard: true }", () => - Effect.gen(function*($) { - const transaction = STM.gen(function*($) { - const set = yield* $(TSet.make("a", "aa", "aaa")) - yield* $(pipe(set, TSet.removeIf((s) => s === "aa", { discard: true }))) - const a = yield* $(pipe(set, TSet.has("a"))) - const aa = yield* $(pipe(set, TSet.has("aa"))) - const aaa = yield* $(pipe(set, TSet.has("aaa"))) + Effect.gen(function*() { + const transaction = STM.gen(function*() { + const set = yield* (TSet.make("a", "aa", "aaa")) + yield* (pipe(set, TSet.removeIf((s) => s === "aa", { discard: true }))) + const a = yield* (pipe(set, TSet.has("a"))) + const aa = yield* (pipe(set, TSet.has("aa"))) + const aaa = yield* (pipe(set, TSet.has("aaa"))) return [a, aa, aaa] }) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(result, [true, false, true]) })) it.effect("transform", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TSet.make(1, 2, 3), STM.tap((set) => TSet.transform(set, (n) => n * 2)), STM.flatMap(TSet.toArray) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(result, [2, 4, 6]) })) it.effect("transform - and shrink", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TSet.make(1, 2, 3), STM.tap(TSet.transform(() => 1)), STM.flatMap(TSet.toArray) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(result, [1]) })) it.effect("transformSTM", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TSet.make(1, 2, 3), STM.tap((set) => TSet.transformSTM(set, (n) => STM.succeed(n * 2))), STM.flatMap(TSet.toArray) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(result, [2, 4, 6]) })) it.effect("transformSTM - and shrink", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TSet.make(1, 2, 3), STM.tap(TSet.transformSTM(() => STM.succeed(1))), STM.flatMap(TSet.toArray) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(result, [1]) })) it.effect("size", () => - Effect.gen(function*($) { + Effect.gen(function*() { const transaction = pipe( TSet.make(1, 2, 3, 4), STM.flatMap(TSet.size) ) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) strictEqual(result, 4) })) it.effect("union", () => - Effect.gen(function*($) { - const transaction = STM.gen(function*($) { - const set1 = yield* $(TSet.make(1, 2, 3)) - const set2 = yield* $(TSet.make(1, 4, 5)) - yield* $(pipe(set1, TSet.union(set2))) - return yield* $(TSet.toArray(set1)) + Effect.gen(function*() { + const transaction = STM.gen(function*() { + const set1 = yield* (TSet.make(1, 2, 3)) + const set2 = yield* (TSet.make(1, 4, 5)) + yield* (pipe(set1, TSet.union(set2))) + return yield* (TSet.toArray(set1)) }) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(result, [1, 2, 3, 4, 5]) })) it.effect("toChunk", () => - Effect.gen(function*($) { - const transaction = STM.gen(function*($) { - const set = yield* $(TSet.make(1, 2, 3)) - return yield* $(TSet.toChunk(set)) + Effect.gen(function*() { + const transaction = STM.gen(function*() { + const set = yield* (TSet.make(1, 2, 3)) + return yield* (TSet.toChunk(set)) }) - const result = yield* $(STM.commit(transaction)) + const result = yield* (STM.commit(transaction)) deepStrictEqual(result, Chunk.make(1, 2, 3)) })) }) diff --git a/packages/effect/test/TSubscriptionRef.test.ts b/packages/effect/test/TSubscriptionRef.test.ts index 324bc89b90..a85605f97a 100644 --- a/packages/effect/test/TSubscriptionRef.test.ts +++ b/packages/effect/test/TSubscriptionRef.test.ts @@ -7,32 +7,32 @@ import { describe } from "vitest" describe.concurrent("TSubscriptionRef", () => { it.effect("only emits comitted values", () => - Effect.gen(function*($) { - const subscriptionRef = yield* $(TSubscriptionRef.make(0)) + Effect.gen(function*() { + const subscriptionRef = yield* (TSubscriptionRef.make(0)) const transaction = pipe( TSubscriptionRef.update(subscriptionRef, (n) => n + 1), STM.tap(() => TSubscriptionRef.update(subscriptionRef, (n) => n + 1)) ) - const subscriber = yield* $(pipe( + const subscriber = yield* (pipe( TSubscriptionRef.changesStream(subscriptionRef), Stream.take(1), Stream.runCollect, Effect.fork )) // stream doesn't work properly without a yield, it will drop values - yield* $(Effect.yieldNow()) - yield* $(STM.commit(transaction)) - yield* $(Effect.yieldNow()) - const result = yield* $(Fiber.join(subscriber)) + yield* (Effect.yieldNow()) + yield* (STM.commit(transaction)) + yield* (Effect.yieldNow()) + const result = yield* (Fiber.join(subscriber)) deepStrictEqual(Array.from(result), [2]) })) it.effect("emits every comitted value", () => - Effect.gen(function*($) { - const subscriptionRef = yield* $(TSubscriptionRef.make(0)) + Effect.gen(function*() { + const subscriptionRef = yield* (TSubscriptionRef.make(0)) const transaction = pipe( TSubscriptionRef.update(subscriptionRef, (n) => n + 1), @@ -42,80 +42,80 @@ describe.concurrent("TSubscriptionRef", () => { Effect.flatMap(() => TSubscriptionRef.update(subscriptionRef, (n) => n + 1)) ) - const subscriber = yield* $(pipe( + const subscriber = yield* (pipe( TSubscriptionRef.changesStream(subscriptionRef), Stream.take(2), Stream.runCollect, Effect.fork )) // stream doesn't work properly without a yield, it will drop the first value without this - yield* $(Effect.yieldNow()) - yield* $(transaction) - const result = yield* $(Fiber.join(subscriber)) + yield* (Effect.yieldNow()) + yield* transaction + const result = yield* (Fiber.join(subscriber)) deepStrictEqual(Array.from(result), [1, 2]) })) it.effect("multiple subscribers can receive committed values", () => - Effect.gen(function*($) { - const subscriptionRef = yield* $(TSubscriptionRef.make(0)) - const deferred1 = yield* $(Deferred.make()) - const deferred2 = yield* $(Deferred.make()) - const subscriber1 = yield* $(pipe( + Effect.gen(function*() { + const subscriptionRef = yield* (TSubscriptionRef.make(0)) + const deferred1 = yield* (Deferred.make()) + const deferred2 = yield* (Deferred.make()) + const subscriber1 = yield* (pipe( TSubscriptionRef.changesStream(subscriptionRef), Stream.tap(() => Deferred.succeed(deferred1, void 0)), Stream.take(3), Stream.runCollect, Effect.fork )) - yield* $(Deferred.await(deferred1)) - yield* $(TSubscriptionRef.update(subscriptionRef, (n) => n + 1)) - const subscriber2 = yield* $(pipe( + yield* (Deferred.await(deferred1)) + yield* (TSubscriptionRef.update(subscriptionRef, (n) => n + 1)) + const subscriber2 = yield* (pipe( TSubscriptionRef.changesStream(subscriptionRef), Stream.tap(() => Deferred.succeed(deferred2, void 0)), Stream.take(2), Stream.runCollect, Effect.fork )) - yield* $(Deferred.await(deferred2)) - yield* $(TSubscriptionRef.update(subscriptionRef, (n) => n + 1)) - const result1 = yield* $(Fiber.join(subscriber1)) - const result2 = yield* $(Fiber.join(subscriber2)) + yield* (Deferred.await(deferred2)) + yield* (TSubscriptionRef.update(subscriptionRef, (n) => n + 1)) + const result1 = yield* (Fiber.join(subscriber1)) + const result2 = yield* (Fiber.join(subscriber2)) deepStrictEqual(Array.from(result1), [0, 1, 2]) deepStrictEqual(Array.from(result2), [1, 2]) })) it.effect("subscriptions are interruptible", () => - Effect.gen(function*($) { - const ref = yield* $(TSubscriptionRef.make(0)) - const deferred1 = yield* $(Deferred.make()) - const deferred2 = yield* $(Deferred.make()) - const subscriber1 = yield* $( + Effect.gen(function*() { + const ref = yield* (TSubscriptionRef.make(0)) + const deferred1 = yield* (Deferred.make()) + const deferred2 = yield* (Deferred.make()) + const subscriber1 = yield* pipe( TSubscriptionRef.changesStream(ref), Stream.tap(() => Deferred.succeed(deferred1, void 0)), Stream.take(5), Stream.runCollect, Effect.fork ) - yield* $(Deferred.await(deferred1)) - yield* $(TSubscriptionRef.update(ref, (n) => n + 1)) - const subscriber2 = yield* $( + yield* (Deferred.await(deferred1)) + yield* (TSubscriptionRef.update(ref, (n) => n + 1)) + const subscriber2 = yield* pipe( TSubscriptionRef.changesStream(ref), Stream.tap(() => Deferred.succeed(deferred2, void 0)), Stream.take(2), Stream.runCollect, Effect.fork ) - yield* $(Deferred.await(deferred2)) - yield* $(TSubscriptionRef.update(ref, (n) => n + 1)) - const result1 = yield* $(Fiber.interrupt(subscriber1)) - const result2 = yield* $(Fiber.join(subscriber2)) + yield* (Deferred.await(deferred2)) + yield* (TSubscriptionRef.update(ref, (n) => n + 1)) + const result1 = yield* (Fiber.interrupt(subscriber1)) + const result2 = yield* (Fiber.join(subscriber2)) assertTrue(Exit.isInterrupted(result1)) deepStrictEqual(Array.from(result2), [1, 2]) })) it.effect("concurrent subscribes and unsubscribes are handled correctly", () => - Effect.gen(function*($) { + Effect.gen(function*() { const subscriber = (subscriptionRef: TSubscriptionRef.TSubscriptionRef) => pipe( Random.nextIntBetween(0, 200), @@ -127,13 +127,13 @@ describe.concurrent("TSubscriptionRef", () => { ) ) ) - const ref = yield* $(TSubscriptionRef.make(0)) - const fiber = yield* $( + const ref = yield* (TSubscriptionRef.make(0)) + const fiber = yield* pipe( TSubscriptionRef.update(ref, (n) => n + 1), Effect.forever, Effect.fork ) - const result = yield* $( + const result = yield* ( Effect.map( Effect.all( Array.from({ length: 2 }, () => subscriber(ref)), @@ -142,7 +142,7 @@ describe.concurrent("TSubscriptionRef", () => { Chunk.unsafeFromArray ) ) - yield* $(Fiber.interrupt(fiber)) + yield* (Fiber.interrupt(fiber)) const isSorted = Chunk.every(result, (chunk) => Equal.equals(chunk, Chunk.sort(chunk, Number.Order))) assertTrue(isSorted) })) diff --git a/packages/effect/test/Tracer.test.ts b/packages/effect/test/Tracer.test.ts index 68af7cc957..afa754278e 100644 --- a/packages/effect/test/Tracer.test.ts +++ b/packages/effect/test/Tracer.test.ts @@ -1,4 +1,4 @@ -import { Cause, Context, Duration, Effect, Fiber, FiberId, Layer, Option, TestClock, Tracer } from "effect" +import { Cause, Context, Duration, Effect, Fiber, FiberId, Layer, Option, pipe, TestClock, Tracer } from "effect" import type { NativeSpan } from "effect/internal/tracer" import { assertNone, assertTrue, deepStrictEqual, strictEqual } from "effect/test/util" import * as it from "effect/test/utils/extend" @@ -45,8 +45,8 @@ describe("Tracer", () => { })) it.effect("parent", () => - Effect.gen(function*($) { - const span = yield* $( + Effect.gen(function*() { + const span = yield* ( Effect.withSpan("B")( Effect.withSpan("A")(Effect.currentSpan) ) @@ -57,8 +57,8 @@ describe("Tracer", () => { })) it.effect("parent when root is set", () => - Effect.gen(function*($) { - const span = yield* $( + Effect.gen(function*() { + const span = yield* ( Effect.withSpan("B")(Effect.withSpan("A", { root: true })(Effect.currentSpan)) ) @@ -67,8 +67,8 @@ describe("Tracer", () => { })) it.effect("external parent", () => - Effect.gen(function*($) { - const span = yield* $( + Effect.gen(function*() { + const span = yield* ( Effect.withSpan("A", { parent: { _tag: "ExternalSpan", @@ -84,14 +84,14 @@ describe("Tracer", () => { })) it.effect("correct time", () => - Effect.gen(function*($) { - const spanFiber = yield* $( + Effect.gen(function*() { + const spanFiber = yield* ( Effect.fork(Effect.withSpan("A")(Effect.delay(Duration.seconds(1))(Effect.currentSpan))) ) - yield* $(TestClock.adjust(Duration.seconds(2))) + yield* (TestClock.adjust(Duration.seconds(2))) - const span = yield* $(Fiber.join(spanFiber)) + const span = yield* (Fiber.join(spanFiber)) deepStrictEqual(span.name, "A") deepStrictEqual(span.status.startTime, 0n) @@ -101,8 +101,8 @@ describe("Tracer", () => { }) it.effect("annotateSpans", () => - Effect.gen(function*($) { - const span = yield* $( + Effect.gen(function*() { + const span = yield* ( Effect.annotateSpans( Effect.withSpan("A")(Effect.currentSpan), "key", @@ -116,8 +116,8 @@ describe("Tracer", () => { })) it.effect("annotateSpans record", () => - Effect.gen(function*($) { - const span = yield* $( + Effect.gen(function*() { + const span = yield* ( Effect.annotateSpans( Effect.withSpan("A")(Effect.currentSpan), { key: "value", key2: "value2" } @@ -129,10 +129,10 @@ describe("Tracer", () => { })) it.effect("logger", () => - Effect.gen(function*($) { - yield* $(TestClock.adjust(Duration.millis(0.01))) + Effect.gen(function*() { + yield* (TestClock.adjust(Duration.millis(0.01))) - const [span, fiberId] = yield* $( + const [span, fiberId] = yield* pipe( Effect.log("event"), Effect.zipRight(Effect.all([Effect.currentSpan, Effect.fiberId])), Effect.withSpan("A") @@ -147,10 +147,10 @@ describe("Tracer", () => { })) it.effect("withTracerTiming false", () => - Effect.gen(function*($) { - yield* $(TestClock.adjust(Duration.millis(1))) + Effect.gen(function*() { + yield* (TestClock.adjust(Duration.millis(1))) - const span = yield* $( + const span = yield* pipe( Effect.withSpan("A")(Effect.currentSpan), Effect.withTracerTiming(false) ) @@ -166,17 +166,17 @@ describe("Tracer", () => { })) it.effect("annotateCurrentSpan", () => - Effect.gen(function*(_) { - yield* _(Effect.annotateCurrentSpan("key", "value")) - const span = yield* _(Effect.currentSpan) + Effect.gen(function*() { + yield* (Effect.annotateCurrentSpan("key", "value")) + const span = yield* (Effect.currentSpan) deepStrictEqual(span.attributes.get("key"), "value") }).pipe( Effect.withSpan("A") )) it.effect("withParentSpan", () => - Effect.gen(function*(_) { - const span = yield* _(Effect.currentSpan) + Effect.gen(function*() { + const span = yield* (Effect.currentSpan) deepStrictEqual( span.parent.pipe( Option.map((_) => _.spanId) @@ -224,9 +224,9 @@ describe("Tracer", () => { )) it.effect("Layer.span onEnd", () => - Effect.gen(function*(_) { + Effect.gen(function*() { let onEndCalled = false - const span = yield* _( + const span = yield* pipe( Effect.currentSpan, Effect.provide(Layer.span("span", { onEnd: (span, _exit) => @@ -241,10 +241,10 @@ describe("Tracer", () => { })) it.effect("linkSpans", () => - Effect.gen(function*(_) { - const childA = yield* _(Effect.makeSpan("childA")) - const childB = yield* _(Effect.makeSpan("childB")) - const currentSpan = yield* _( + Effect.gen(function*() { + const childA = yield* (Effect.makeSpan("childA")) + const childB = yield* (Effect.makeSpan("childB")) + const currentSpan = yield* pipe( Effect.currentSpan, Effect.withSpan("A", { links: [{ _tag: "SpanLink", span: childB, attributes: {} }] }), Effect.linkSpans(childA) @@ -256,7 +256,7 @@ describe("Tracer", () => { })) it.effect("Layer.withSpan", () => - Effect.gen(function*(_) { + Effect.gen(function*() { let onEndCalled = false const layer = Layer.effectDiscard(Effect.gen(function*() { const span = yield* Effect.currentSpan @@ -272,7 +272,7 @@ describe("Tracer", () => { }) ) - const span = yield* _(Effect.currentSpan, Effect.provide(layer), Effect.option) + const span = yield* pipe(Effect.currentSpan, Effect.provide(layer), Effect.option) assertNone(span) strictEqual(onEndCalled, true) @@ -280,13 +280,13 @@ describe("Tracer", () => { }) it.effect("withTracerEnabled", () => - Effect.gen(function*($) { - const span = yield* $( + Effect.gen(function*() { + const span = yield* pipe( Effect.currentSpan, Effect.withSpan("A"), Effect.withTracerEnabled(false) ) - const spanB = yield* $( + const spanB = yield* pipe( Effect.currentSpan, Effect.withSpan("B"), Effect.withTracerEnabled(true) diff --git a/packages/effect/test/utils/cache/ObservableResource.ts b/packages/effect/test/utils/cache/ObservableResource.ts index 601273ba5e..bbb3b14df1 100644 --- a/packages/effect/test/utils/cache/ObservableResource.ts +++ b/packages/effect/test/utils/cache/ObservableResource.ts @@ -55,15 +55,15 @@ export const makeEffect = ( Ref.get(resourceAcquisitionReleasing) ) const scoped = Effect.uninterruptibleMask((restore) => - Effect.gen(function*($) { - const parent = yield* $(Effect.scope) - const child = yield* $(Scope.fork(parent, ExecutionStrategy.sequential)) - yield* $(Ref.update(resourceAcquisitionCount, (n) => n + 1)) - yield* $(Scope.addFinalizer(child, Ref.update(resourceAcquisitionReleasing, (n) => n + 1))) - return yield* $(Effect.acquireReleaseInterruptible( + Effect.gen(function*() { + const parent = yield* Effect.scope + const child = yield* Scope.fork(parent, ExecutionStrategy.sequential) + yield* Ref.update(resourceAcquisitionCount, (n) => n + 1) + yield* Scope.addFinalizer(child, Ref.update(resourceAcquisitionReleasing, (n) => n + 1)) + return yield* Effect.acquireReleaseInterruptible( restore(effect), (exit) => Scope.close(child, exit) - )) + ) }) ) return new ObservableResourceImpl(scoped, getState) diff --git a/packages/effect/test/utils/cache/WatchableLookup.ts b/packages/effect/test/utils/cache/WatchableLookup.ts index 3fa48dcecb..94c12cfc72 100644 --- a/packages/effect/test/utils/cache/WatchableLookup.ts +++ b/packages/effect/test/utils/cache/WatchableLookup.ts @@ -46,21 +46,21 @@ export const makeEffect = ( ), ([blocked, resources]): WatchableLookup => { function lookup(key: Key): Effect.Effect { - return Effect.flatten(Effect.gen(function*($) { - const observableResource = yield* $(ObservableResource.makeEffect(concreteLookup(key))) - yield* $(Ref.update(resources, (resourceMap) => { + return Effect.flatten(Effect.gen(function*() { + const observableResource = yield* ObservableResource.makeEffect(concreteLookup(key)) + yield* Ref.update(resources, (resourceMap) => { const newResource = pipe( HashMap.get(resourceMap, key), Option.getOrElse(() => Chunk.empty>()), Chunk.append(observableResource) ) return HashMap.set(resourceMap, key, newResource) - })) + }) const schedule = Schedule.intersect( Schedule.recurWhile(identity), Schedule.exponential(Duration.millis(10), 2.0) ) - yield* $( + yield* pipe( Ref.get(blocked), Effect.repeat(schedule), TestServices.provideLive diff --git a/packages/effect/test/utils/coordination.ts b/packages/effect/test/utils/coordination.ts index ac4a48b29b..eeadbf16fc 100644 --- a/packages/effect/test/utils/coordination.ts +++ b/packages/effect/test/utils/coordination.ts @@ -16,11 +16,11 @@ export interface ChunkCoordination { export const chunkCoordination = ( _chunks: Iterable> ): Effect.Effect> => - Effect.gen(function*($) { + Effect.gen(function*() { const chunks = Chunk.fromIterable(_chunks) - const queue = yield* $(Queue.unbounded, Option.Option>>()) - const ps = yield* $(Queue.unbounded()) - const ref = yield* $(Ref.make, Option.Option>>>>( + const queue = yield* Queue.unbounded, Option.Option>>() + const ps = yield* Queue.unbounded() + const ref = yield* Ref.make, Option.Option>>>>( pipe( chunks, Chunk.dropRight(1), @@ -41,7 +41,7 @@ export const chunkCoordination = ( ) ) ) - )) + ) return { queue, offer: pipe( diff --git a/packages/effect/test/utils/latch.ts b/packages/effect/test/utils/latch.ts index 9fca8c86a7..1dd324670b 100644 --- a/packages/effect/test/utils/latch.ts +++ b/packages/effect/test/utils/latch.ts @@ -17,18 +17,16 @@ export const withLatch = ( export const withLatchAwait = ( f: (release: Effect.Effect, wait: Effect.Effect) => Effect.Effect ): Effect.Effect => { - return Effect.gen(function*($) { - const ref = yield* $(Ref.make(true)) - const latch = yield* $(Deferred.make()) - const result = yield* $( - f( - pipe(Deferred.succeed(latch, void 0), Effect.asVoid), - Effect.uninterruptibleMask((restore) => - pipe(Ref.set(ref, false), Effect.zipRight(restore(Deferred.await(latch)))) - ) + return Effect.gen(function*() { + const ref = yield* Ref.make(true) + const latch = yield* Deferred.make() + const result = yield* f( + pipe(Deferred.succeed(latch, void 0), Effect.asVoid), + Effect.uninterruptibleMask((restore) => + pipe(Ref.set(ref, false), Effect.zipRight(restore(Deferred.await(latch)))) ) ) - yield* $(Deferred.await(latch), Effect.whenEffect(Ref.get(ref))) + yield* Deferred.await(latch), Effect.whenEffect(Ref.get(ref)) return result }) }