Skip to content

Effect

4.0.0-beta.11

Patch Changes

  • #1429 88659ed Thanks @tim-smart! - Add grouped subcommand support to Command.withSubcommands, including help output sections for named groups while keeping ungrouped commands under SUBCOMMANDS.

  • #1426 f2915e8 Thanks @tim-smart! - Add Effect.validate for validating collections while accumulating all failures, equivalent to the v3 Effect.validateAll behavior.

  • #1430 eb71ace Thanks @tim-smart! - Add Command.withExamples to attach concrete usage examples to CLI commands, expose them through HelpDoc.examples, and render them in the default help formatter.

  • #1415 2a16999 Thanks @mikearnaldi! - HashMap: compare HAMT bit positions as unsigned to preserve entry lookup when bit 31 is set

  • #1417 d42dd52 Thanks @mikearnaldi! - unstable/http Headers: hide inspectable prototype methods from for..in iteration to avoid invalid header names in runtime fetch polyfills

  • #1418 339adaf Thanks @mikearnaldi! - runtime: guard keepAlive setInterval / clearInterval so Effect.runPromise works in runtimes that block timer APIs

  • #1416 de19645 Thanks @mikearnaldi! - Queue.collect: stop duplicating drained messages by appending each batch once

  • #1413 9b1dc3b Thanks @gcanti! - Fix Schema.TupleWithRest incorrectly accepting inputs with missing post-rest elements, closes #1410.

  • #1409 e4cb2f5 Thanks @tim-smart! - add ErrorReporter module

  • #1427 8bced95 Thanks @tim-smart! - Add Command.annotate and Command.annotateMerge to unstable CLI commands, and include command annotations in HelpDoc so custom help formatters can access command metadata.

  • #1401 9431420 Thanks @tim-smart! - Add WorkflowEngine.layer, an in-memory layer for the unstable workflow engine.

  • #1428 948dca2 Thanks @tim-smart! - Add Command.withShortDescription and use short descriptions for CLI subcommand listings, with fallback to the full command description.

  • #1405 d18e327 Thanks @candrewlee14! - Strip resolved tool approval artifacts from prompt before sending to provider, preventing errors when providers reject pre-resolved approval requests.

  • #1424 ab512f7 Thanks @tim-smart! - expose more atom Node properties

4.0.0-beta.10

Patch Changes

  • #1396 371acab Thanks @gcanti! - Add unstable/encoding subpath export.

  • #1392 856d774 Thanks @tim-smart! - Fix a race in Semaphore.take where interruption could leak permits after a waiter was resumed.

  • #1388 b9e9202 Thanks @tim-smart! - Export Effect do notation APIs (Do, bindTo, bind, and let) from effect/Effect and add runtime and type-level coverage.

  • #1387 1d1a974 Thanks @tim-smart! - short circuit when Fiber.joinAll is called with an empty iterable

  • #1386 6bfe2a6 Thanks @tim-smart! - simplify http logger disabling

  • #1381 b12c811 Thanks @tim-smart! - Fix UrlParams.Input usage to accept interface-typed records in HTTP client and server helpers while keeping coercion constraints for url parameter values.

  • #1383 d17d98a Thanks @tim-smart! - Rename HttpClient.retryTransient option mode to retryOn and rename "both" to "errors-and-responses".

  • #1399 68c3c7c Thanks @tim-smart! - Add Random.shuffle to shuffle iterables with seeded randomness support.

4.0.0-beta.9

Patch Changes

  • #1376 3386557 Thanks @gcanti! - HttpApiEndpoint: relax params, query, and headers constraints to accept a full schema in addition to a record of fields.

  • #1379 b6666e3 Thanks @tim-smart! - Fix AtomHttpApi.query to forward v4 params / query request fields to HttpApiClient at runtime. Also align AtomHttpApi endpoint type inference with v4 HttpApiEndpoint params/query naming and add a regression test.

4.0.0-beta.8

Patch Changes

  • #1371 246e672 Thanks @IMax153! - Fix ChildProcess options type and implement PgMigrator

  • #1372 807dec0 Thanks @pawelblaszczyk5! - Remove superfluous error from SqlSchema.findAll signature

4.0.0-beta.7

Patch Changes

  • #1366 a2bda6d Thanks @tim-smart! - rename SqlSchema.findOne* apis

  • #1360 1f95a2b Thanks @tim-smart! - Add Schedule.jittered to randomize schedule delays between 80% and 120% of the original delay.

  • #1364 a8d5e79 Thanks @gcanti! - Schema: avoid eager resolution for type-level helpers, closes #1332

  • #1369 a5386ba Thanks @tim-smart! - align HttpClientRequest constructors with http method names

  • #1369 a5386ba Thanks @tim-smart! - remove body restriction for HttpClientRequest’s

  • #1358 06d8a03 Thanks @tim-smart! - Add LogLevel.isEnabled for checking a log level against References.MinimumLogLevel.

  • #1363 8caac76 Thanks @tim-smart! - rename DurationInput to Duration.Input

  • #1363 8caac76 Thanks @tim-smart! - DateTime.distance now returns a Duration

  • #1367 f9e883e Thanks @tim-smart! - refactor SqlSchema apis

  • #1363 8caac76 Thanks @tim-smart! - remove rpc client nesting to improve type performance

4.0.0-beta.6

Patch Changes

  • #1338 3247da2 Thanks @Leka74! - Add showOperationId to HttpApiScalar.ScalarConfig.

  • #1326 f205705 Thanks @gcanti! - Schema: add BigDecimal schema with comparison checks (isGreaterThanBigDecimal, isGreaterThanOrEqualToBigDecimal, isLessThanBigDecimal, isLessThanOrEqualToBigDecimal, isBetweenBigDecimal).

  • #1328 f35022c Thanks @gcanti! - Schema: add DateTimeZoned, TimeZoneOffset, TimeZoneNamed, and TimeZone schemas.

  • #1325 8622721 Thanks @KhraksMamtsov! - Make Data.Class, Data.TaggedClass, and Cause.YieldableError pipeable.

  • #1323 fc660ab Thanks @KhraksMamtsov! - Port Pipeable.Class from v3.

    class MyClass extends Pipeable.Class() {
    constructor(public a: number) {
    super();
    }
    methodA() {
    return this.a;
    }
    }
    console.log(new MyClass(2).pipe((x) => x.methodA())); // 2
    class A {
    constructor(public a: number) {}
    methodA() {
    return this.a;
    }
    }
    class B extends Pipeable.Class(A) {
    constructor(private b: string) {
    super(b.length);
    }
    methodB() {
    return [this.b, this.methodA()];
    }
    }
    console.log(new B("pipe").pipe((x) => x.methodB())); // ['pipe', 4]
  • #1337 f37dc33 Thanks @IMax153! - Encoding: consolidate effect/encoding sub-modules (Base64, Base64Url, Hex, EncodingError) into a top-level Encoding module. Functions are now prefixed: encodeBase64, decodeBase64, encodeHex, decodeHex, etc. The effect/encoding sub-path export is removed.

  • #1351 3662f32 Thanks @tim-smart! - add Schema.HashSet for decoding and encoding HashSet values.

  • #1336 a7d436f Thanks @mikearnaldi! - Extract Semaphore and Latch into their own modules.

    Semaphore.make / Semaphore.makeUnsafe replace Effect.makeSemaphore / Effect.makeSemaphoreUnsafe. Latch.make / Latch.makeUnsafe replace Effect.makeLatch / Effect.makeLatchUnsafe.

    Merge PartitionedSemaphore into Semaphore as Semaphore.Partitioned, Semaphore.makePartitioned, Semaphore.makePartitionedUnsafe.

  • #1345 6856a41 Thanks @tim-smart! - allocate less effects when reading a file

  • #1350 8c417d0 Thanks @tim-smart! - Add “Previously Known As” JSDoc migration notes for the Semaphore and Latch APIs extracted from Effect.

  • #1355 5419570 Thanks @tim-smart! - ensure non-middleware http errors are correctly handled

  • #1352 449c5ed Thanks @tim-smart! - Add Schema.HashMap for decoding and encoding HashMap values.

  • #1347 4b5ec12 Thanks @tim-smart! - use .toJSON for default .toString implementations

  • #1329 df87937 Thanks @gcanti! - Schema: extract shared dateTimeUtcFromString transformation for DateTimeUtc and DateTimeUtcFromString.

  • #1318 5dbfca8 Thanks @gcanti! - Schema: rename $ suffix to $ prefix for type-level identifiers that conflict with built-in names (Array$$Array, Record$$Record, ReadonlyMap$$ReadonlyMap, ReadonlySet$$ReadonlySet).

  • #1356 e629497 Thanks @tim-smart! - allow passing void for request constructors

  • #1348 981c991 Thanks @tim-smart! - Fix Schedule.andThenResult to initialize the right schedule only after the left schedule completes. This removes the extra immediate transition tick and correctly completes when the right schedule is finite.

  • #1320 1ca2ed6 Thanks @gcanti! - Struct: add Struct.Record constructor for creating records with the given keys and value.

  • #1342 45722bd Thanks @cevr! - Schema.TaggedErrorClass, Schema.Class, and Schema.ErrorClass constructors now allow omitting the props argument when all fields have constructor defaults (e.g. new MyError() instead of new MyError({})).

  • #1322 eb2a85e Thanks @tim-smart! - Add a requireServicesAt option to PersistedCache.make so lookup-service requirements can be configured like Cache.

4.0.0-beta.5

Patch Changes

  • #1317 f6e133e Thanks @tim-smart! - support tag unions in Effect.catchTag/Reason

  • #1314 e3893cc Thanks @zeyuri! - Fix Atom.serializable encode/decode for wire transfer.

    Use Schema.toCodecJson instead of Schema.encodeSync/Schema.decodeSync directly, so that encoded values are plain JSON objects that survive serialization roundtrips (JSON, seroval, etc.). Previously, AsyncResult.Schema encode produced instances with custom prototypes that were lost after wire transfer, causing decode to fail with “Expected AsyncResult” errors during SSR hydration.

  • #1315 a88e206 Thanks @tim-smart! - add Filter.reason api

  • #1314 e3893cc Thanks @zeyuri! - Port ReactHydration to effect-smol.

    Add Hydration module to effect/unstable/reactivity with dehydrate, hydrate, and toValues for SSR state serialization. Add HydrationBoundary React component to @effect/atom-react with two-phase hydration (new atoms in render, existing atoms after commit).

4.0.0-beta.4

Patch Changes

  • #1308 c5a18ef Thanks @tim-smart! - improve Schema.TaggedUnion .match auto completion

  • #1310 bc6b885 Thanks @tim-smart! - Add Schedule.duration, a one-shot schedule that waits for the provided duration and then completes.

4.0.0-beta.3

Patch Changes

  • #1303 3a0cf36 Thanks @tim-smart! - add Result.failVoid

  • #1307 c4da328 Thanks @tim-smart! - Add HttpClientRequest.bodyFormDataRecord and HttpBody.makeFormDataRecord helpers for creating multipart form bodies from plain records.

4.0.0-beta.2

Patch Changes

  • #1302 a22ce73 Thanks @tim-smart! - allow undefined for VariantSchema.Overridable input

  • #1299 ebdabf7 Thanks @tim-smart! - Port SqlSchema.findOne from effect v3 to return Option on empty results and add SqlSchema.single for the fail-on-empty behavior.

  • #1298 8f663bb Thanks @tim-smart! - Add Effect.catchNoSuchElement, a renamed port of v3 Effect.optionFromOptional that converts NoSuchElementError failures into Option.none.