Effect 3.17 (Release)
Effect 3.17 has been released! This release includes a number of new features and improvements. Here’s a summary of what’s new:
Layer.mock
creates a mock layer for testing purposes. You can provide a partial
implementation of the service, and any methods not provided will
throw an UnimplementedError
defect when called.
import { Context, Effect, Layer } from "effect"
class MyService extends Context.Tag("MyService")< MyService, { one: Effect.Effect<number> two(): Effect.Effect<number> }>() {}
// Mocking a service with a partial implementationconst MyServiceTest = Layer.mock(MyService, { two: () => Effect.succeed(2)})
Create a version of the Random
service from an array of literal values.
The service will cycle through the provided values in order when generating random values.
This constructor is useful for creating deterministic sequences for testing or when specific values need to be returned.
import { Effect, Random } from "effect"
Effect.gen(function* () { console.log(yield* Random.next) // 0.2 console.log(yield* Random.next) // 0.5 console.log(yield* Random.next) // 0.8 console.log(yield* Random.next) // 0.2 (cycles back)}).pipe(Effect.withRandom(Random.fixed([0.2, 0.5, 0.8])))
These new functions allow you to ensure that the Success, Error, or Requirements of an effect are assignable to a specific type.
This is useful for ensuring that your effects have a certain return type, or that they handle errors correctly.
import { Effect } from "effect"
// Ensure that the program does not expose any unhandled errors.const program = Effect.succeed(42).pipe(Effect.ensureErrorType<never>())
Struct.entries
is a version of Object.entries
that enhances the type safety of the entries returned from an object.
import { Struct } from "effect"
const c = Symbol("c")const value = { a: "foo", b: 1, [c]: true }
// The type of `entries` is now more specificconst entries: Array<["a" | "b", string | number]> = Struct.entries(value)
HashMap.countBy
has been added, allowing you to count occurrences of elements in a collection.Array.findFirstWithIndex
has been added, enabling you to find the first element that matches a predicate along with its index.- Schedule
CurrentIterationMetadata
now includes the schedule output. - Effect runtime version mismatches are now warnings instead of errors.
There were several other smaller changes made. Take a look through the CHANGELOG to see them all: CHANGELOG.
Don’t forget to join our Discord Community to follow the last updates and discuss every tiny detail!