Effect
4.0.0-beta.81
Patch Changes
-
#2387
93cb4f8Thanks @gcanti! -Config.withDefaultnow only recovers from missing data for literal/union schemas. Invalid present values now propagate validation errors instead of using the default, closes #2384. -
#2388
60341d9Thanks @gcanti! -Config.withDefaultno longer recovers from schema filter failures. A filter failure means a present value reached refinement checks, so using the default could hide invalid configuration values. -
#2389
1105ab5Thanks @gcanti! - FixSchema.toTaggedUnion(...).isAnyOfnarrowing for custom discriminant keys, closes #2386.Previously, the type predicate always extracted union members by
_tag, even whentoTaggedUnionwas created with a different discriminant key. Runtime behavior already used the supplied key, so this aligns the type-level narrowing with the existing runtime behavior. -
#2270
4500fbfThanks @IMax153! - Add HTTP API streaming response support
4.0.0-beta.80
Patch Changes
-
#2205
d944330Thanks @lloydrichards! - add support for merging external events intoPrompt.customrender loops via an optionaleventsdequeue andreceivehandler.The prompt races user input against events from the dequeue, allowing background events to trigger re-renders without waiting for a keypress:
const eventQueue = yield * Queue.make<number>();const prompt = Prompt.custom({ count: 0 },Queue.asDequeue(eventQueue), // <-- provide the event queue as a dequeue to the prompt{render: (state) => Effect.succeed(`Count: ${state.count}`),process: (input, state) =>Effect.succeed(Match.value(input).pipe(// handle user inputMatch.tag("Input", () => Action.Submit({ value: state.count })),// handle external events from the queueMatch.tag("Event", (input) =>Action.NextFrame({ state: { count: state.count + input.value } }),),Match.exhaustive,),),clear: () => Effect.succeed(""),},); -
#2369
f48659fThanks @gcanti! - Round fractional durations symmetrically when normalizing to nanoseconds. -
#2373
7652aaaThanks @StarpTech! - Stream.fromReadableStream: swallow thereader.cancel()rejection in the finalizer. Cancelling the reader of an already-errored ReadableStream rejects with the stored error, which turned the typedonErrorfailure into a defect. -
#2371
98630b7Thanks @gcanti! - EmitSchema.ObjectKeywordas an object-or-array JSON Schema union. -
#2376
90ae23cThanks @fubhy! - AddGraph.successorsandGraph.predecessors, deprecateGraph.neighborsDirected, and fix graph algorithm edge cases around reversal, undirected edge queries, shortest-path weight validation, topological sort initials, and strongly connected components.
4.0.0-beta.79
Patch Changes
-
#2364
b9704dcThanks @mikearnaldi! - Fix module-level side effects that defeated bundler tree-shaking.Bare top-level statements cannot be
#__PURE__-annotated by the build, so bundlers must retain them and everything they reference, even in bundles that never use the code:Option: the standaloneObject.defineProperty(SomeProto, "valueOrUndefined", ...)statement anchored the wholeOptionproto chain into every bundle. It is now folded into theSomeProtoinitializer.Headers: same pattern withObject.defineProperties(Proto, ...), folded into the initializer.Logger: module-levelprocess.stdout.isTTYproperty reads (potential getters, never droppable) moved insideconsolePretty.Utils: wheninternalCallwas unused, its dropped binding left behind a retained initializer tail (standard/forcedprobe with computed property reads). The selection is now wrapped in a single pure-annotated call.
A minimal
Effect.succeed(123).pipe(Effect.runFork)bundle shrinks by ~1.3% gzipped; bundles that don’t useOptionorHeadersno longer pay for them. -
#2339
a207113Thanks @tim-smart! - Fix EntityManager defect restarts so in-flight requests are replayed instead of being dropped when the old entity scope is interrupted. -
#2362
5e9b9e2Thanks @fubhy! - Fix Graph traversal and shortest-path algorithms to traverse undirected edges independently of their stored source/target orientation. -
#2366
7c128aeThanks @IMax153! - Fix string seed encoding in Random.withSeed so short, trailing, and astral UTF-8 bytes affect deterministic streams. -
#2352
0ada457Thanks @alvarosevilla95! - Fix the RedisRateLimiterStoretoken-bucket failing with opaque errors under memory pressure: it now writes its keys with a TTL and guards against a missing refill timestamp. -
#2359
d7cc5a2Thanks @gcanti! - FixStructkey renaming andSchema.encodeKeysto support symbol keys, and reject duplicate encoded keys. -
#2365
aad63beThanks @gcanti! - FixSchemaencoding so container-level checks are validated against the decoded value instead of the encoded output.Disallow adding checks directly to
Schema.suspend(...); add the checks to the suspended schema instead.Fix
StructWithRestso index signatures do not re-parse or overwrite fixed properties. -
#2342
09809f6Thanks @gcanti! - Use generic ordered constraints for schema arbitrary derivation.Range checks such as
isGreaterThan,isLessThan, andisBetweennow populatectx.constraints.orderedinstead of type-specific range fields onnumber,date, orbigintconstraints. CustomtoArbitraryannotations that read range constraints should migrate toctx.constraints.ordered.This also fixes BigDecimal arbitrary generation by adapting decimal bounds to the generated scale, avoiding invalid fast-check bigint ranges for narrow decimal intervals.
-
#2368
2fddda5Thanks @IMax153! - Encode HTTP API client path parameters when building request URLs. -
#2348
5f21768Thanks @gcanti! - Update Schema arbitrary derivation to use the new filter metadata, candidate generation, optional derivation reports, recursion-aware generation, and the renamedOrderedConstraint<T>model.Migration from the previous v4 API:
- Replace filter annotations from
toArbitraryConstraint: constrainttoarbitrary: { constraint }. When a filter cannot be described as a constraint, usearbitrary: { candidate }to add a weighted source that is still checked by the filter. - Replace bucketed constraints with the flat
Schema.Annotations.ToArbitrary.Constraintshape:string.minLength,array.minLength, object property counts, collection sizes ->minLengthstring.maxLength,array.maxLength, object property counts, collection sizes ->maxLengthstring.patterns->patternsnumber.isInteger->integernumber.noNaN->noNaNnumber.noDefaultInfinity->noInfinitydate.noInvalidDate->validarray.comparatorfor uniqueness ->uniqueusing Effect equalityordered.min/minExcluded/max/maxExcluded->ordered.minimum/exclusiveMinimum/maximum/exclusiveMaximum
- In arbitrary hooks, read
context.constraintinstead ofcontext.constraints. Replacecontext.isSuspendwithcontext.recursion; when combining finite and recursive branches, passcontext.recursiontofc.oneofwith the finite branch first. - Generic declaration hooks now receive type parameters as
{ arbitrary, terminal }. Atomic declarations may still return a bareFastCheck.Arbitrary<T>, but generic declarations should return{ arbitrary, terminal }when they can preserve a finite terminal branch. Schema.toArbitrary(schema, { report: true })now returns{ value, report }; without{ report: true }, it keeps returning the arbitrary directly.Schema.toArbitraryLazyalways returns a lazy arbitrary.
- Replace filter annotations from
-
#2343
f27003eThanks @MohanedMashaly! - Add meta-var that shows log level and bash options in command line.
4.0.0-beta.78
Patch Changes
-
#2333
7836b8eThanks @tim-smart! - Fix Schema.Defect JSON encoding for Error values whose message property is not a string. -
#2329
35d49a3Thanks @alvarosevilla95! - Retry Redis scripts afterNOSCRIPTand declare the token bucket refill key
4.0.0-beta.77
Patch Changes
-
#2326
6e9a5caThanks @fubhy! - Prefer OTEL resource environment variables over explicitOtlpResource.fromConfigoptions. -
#2325
302f398Thanks @fubhy! - Add OTEL environment variable configuration for unstable OTLP observability.
4.0.0-beta.76
Patch Changes
-
#2320
016108aThanks @gcanti! - AddSchema.isGUIDand updateSchema.isUUIDto accept the RFC 9562 max UUID. -
#2319
95c03d2Thanks @fubhy! - Add support for configuring Scalar API reference pages with a custom fetch implementation. -
#2318
07299a3Thanks @gcanti! - Replace theSchema.ErrorandSchema.Defectschema constants with constructor functions,Schema.Error()andSchema.Defect().Unify
Schema.ErrorWithStackintoSchema.Error({ includeStack: true })andSchema.DefectWithStackintoSchema.Defect({ includeStack: true }).Error causes are encoded by default using the same JSON defect encoding semantics used by
Schema.Defect; pass{ excludeCause: true }to omit nested cause data.Equivalent
Schema.ErrorandSchema.Defectoptions are canonicalized, so repeated constructor calls with the same option values reuse the same schema.Schema.Defect()now models defects asunknownvalues with a JSON encoded form. Error-shaped JSON objects with a stringmessagedecode to JavaScriptErrorvalues, so non-Errorobjects such as{ message: "boom" }do not round-trip unchanged. Other non-Errorvalues are normalized through JSON serialization, with non-JSON values falling back to Effect’s formatted string representation.
4.0.0-beta.75
Patch Changes
-
#2294
81b187cThanks @mattiamanzati! - Align workflow tags with RPCs by changingWorkflow.maketo accept the tag as its first argument, exposing workflow tags as_tag, and supportingclass MyWorkflow extends Workflow.make(...) {}. -
#2312
ad4b535Thanks @gcanti! - ValidateSchema.StructWithRestfixed fields against rest index signatures at the type level so schemas cannot be constructed with incompatible decoded, encoded, or make shapes. This keepsStructWithResttypes sound and updates the generated OpenAI conversation-items request schema to keep accepting arbitrary additional fields under the stricter validation. -
#2314
a29c2e7Thanks @gcanti! - PreserveSchema.Redactedoptions when roundtripping through schema representations. This keepslabelvalidation anddisallowJsonEncodebehavior intact when schemas are revived from a representation or emitted through code generation. -
#2298
1fdd9aeThanks @gcanti! - Remove theTypes.MergeRecordalias. UseTypes.MergeLeftinstead. -
#2298
1fdd9aeThanks @gcanti! - Align Schema adapter failures:Schemaresult, promise, and sync adapters now surfaceSchemaError, whileSchemaParserresult, promise, and sync adapters exposeSchemaIssue.Issue. MarkSchemaParseroption adapters as internal because their error details are discarded. -
#2313
ffea4ecThanks @MohanedMashaly! - Add -v alias for version flag -
#2306
4255c9bThanks @sam-goodwin! - FixHttpApiSecuritybearer/http credential decoding
4.0.0-beta.74
Patch Changes
- #2295
b1fc6a4Thanks @jgoux! - Fix CLI parsing so command-local flags can override globals without breaking global flags before subcommands.
4.0.0-beta.73
Patch Changes
-
#2291
361ca30Thanks @tim-smart! - Add HttpApiSecurity.http for passing custom schemes -
#2289
b9598c6Thanks @tim-smart! - make EntityResource lazy by default
4.0.0-beta.72
Patch Changes
-
#2287
73e67d1Thanks @tim-smart! - Ensure ClusterWorkflowEngine routes durable clock wakeups and registered workflow deferred completions through the owning workflow’s shard group. -
#2286
01d71ecThanks @tim-smart! - Add default value support toPrompt.file. -
#2285
fcd707eThanks @tim-smart! - Add default value support to CLI integer prompts.