github Effect-TS/effect effect@3.12.8

latest releases: @effect/vitest@0.17.5, @effect/sql@0.28.3, @effect/sql-sqlite-wasm@0.29.3...
13 hours ago

Patch Changes

  • #4341 766113c Thanks @fubhy! - Improve Duration.decode Handling of High-Resolution Time

    • Ensured Immutability: Added the readonly modifier to [seconds: number, nanos: number] in DurationInput to prevent accidental modifications.
    • Better Edge Case Handling: Now correctly processes special values like -Infinity and NaN when they appear in the tuple representation of duration.
  • #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 for Effect.schedule

  • #4351 430c846 Thanks @tim-smart! - fix Layer.scope types to correctly use the Scope tag identifier

  • #4344 7b03057 Thanks @IMax153! - Expose Schedule.isSchedule

  • #4313 a9c94c8 Thanks @gcanti! - Schema: Update Duration 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 in Defect and add test for array-based defects.

  • #4329 65c11b9 Thanks @gcanti! - Schema: Update itemsCount to allow 0 as a valid argument, closes #4328.

  • #4330 e386d2f Thanks @gcanti! - Add missing overload for Option.as.

  • #4352 9172efb Thanks @tim-smart! - optimize Stream.toReadableStream

Don't miss a new effect release

NewReleases is sending notifications on new releases.