Patch Changes
-
#4341
766113c
Thanks @fubhy! - ImproveDuration.decode
Handling of High-Resolution Time- Ensured Immutability: Added the
readonly
modifier to[seconds: number, nanos: number]
inDurationInput
to prevent accidental modifications. - Better Edge Case Handling: Now correctly processes special values like
-Infinity
andNaN
when they appear in the tuple representation of duration.
- Ensured Immutability: Added the
-
#4333
712277f
Thanks @gcanti! - Cron:unsafeParse
now throws a more informative error instead of a generic one -
#4387
f269122
Thanks @KhraksMamtsov! - A more precise signature has been applied forEffect.schedule
-
#4351
430c846
Thanks @tim-smart! - fix Layer.scope types to correctly use the Scope tag identifier -
#4313
a9c94c8
Thanks @gcanti! - Schema: UpdateDuration
Encoding to a Tagged Union Format.This changeset fixes the
Duration
schema to support all possible duration types, including finite, infinite, and nanosecond durations. The encoding format has been updated from a tuple (readonly [seconds: number, nanos: number]
) to a tagged union.This update introduces a change to the encoding format. The previous tuple representation is replaced with a more expressive tagged union, which accommodates all duration types:
type DurationEncoded = | { readonly _tag: "Millis" readonly millis: number } | { readonly _tag: "Nanos" readonly nanos: string } | { readonly _tag: "Infinity" }
Rationale
The
Duration
schema is primarily used to encode durations for transmission. The new tagged union format ensures clear and precise encoding for:- Finite durations, such as milliseconds.
- Infinite durations, such as
Duration.infinity
. - Nanosecond durations.
Example
import { Duration, Schema } from "effect" // Encoding a finite duration in milliseconds console.log(Schema.encodeSync(Schema.Duration)(Duration.millis(1000))) // Output: { _tag: 'Millis', millis: 1000 } // Encoding an infinite duration console.log(Schema.encodeSync(Schema.Duration)(Duration.infinity)) // Output: { _tag: 'Infinity' } // Encoding a duration in nanoseconds console.log(Schema.encodeSync(Schema.Duration)(Duration.nanos(1000n))) // Output: { _tag: 'Nanos', nanos: '1000' }
-
#4331
107e6f0
Thanks @gcanti! - Schema: Improve encoding inDefect
and add test for array-based defects. -
#4329
65c11b9
Thanks @gcanti! - Schema: UpdateitemsCount
to allow0
as a valid argument, closes #4328. -
#4330
e386d2f
Thanks @gcanti! - Add missing overload forOption.as
. -
#4352
9172efb
Thanks @tim-smart! - optimize Stream.toReadableStream