Repository navigation
Update Effect to v4.0.7 - #123
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Note
This PR body was truncated due to platform limits.
This PR contains the following updates:
4.0.6→4.0.74.0.6→4.0.74.0.6→4.0.7Release Notes
Effect-TS/effect (@effect/platform-bun)
v4.0.7Compare Source
Patch Changes
#9751
fb38ce6Thanks @effect-bot! - Allow buffered payloads and typed101response headers onHttpApiSchema.Upgradeendpoints.HttpApiSchema.Upgrade({ protocol, headers })declares101headers, encoded likeWithHeadersheaders. Clients decode them and return{ headers, socket }, and OpenAPI lists them on the101.upgradefunction instead ofsocket:upgrade(), orupgrade({ headers })when headers are declared.426 Upgrade Requiredis returned before the payload is decoded.HttpServerRequestgainsupgradeWith({ headers }), andupgradeisupgradeWith({}). Third-partyHttpServerRequestimplementations must add it. WebSocket upgrades fail when headers are given.NodeHttpServerwaits for the request body to end before writing the101. On Node 25 and older, which do not parse upgrade request bodies, it readsContent-Lengthbodies from the connection and answers chunked ones with411 Length Required.NodeMultipartfails with aMultipartErrorwhen its source stream errors, instead of waiting for more input.#9828
45c467aThanks @tim-smart! - AddRedis.reserve, which leases a dedicated connection from a pool, so blocking commands likeXREAD BLOCKandBLPOPno longer hold up other commands on the shared connection.NodeRedis,BunRedisandDenoRedislayers acceptmaxConnections,minConnections,idleTimeoutandacquireTimeoutto size the pool.Redis.makenow requires aconnectoption, and hand-writtenRedisservices need areservemember.Updated dependencies [
ac3485a,3a4c691,4f0600e,110fd22,aa58cda,8e257e7,e62a149,958307b,dcd43a5,5fbccf4,3388cdd,81b0e14,a046435,f6d8968,5741c3a,381d5c6,d47478a,383716d,46dc30a,3d5c862,93ebc4f,c7b161a,e55945d,1a53d6a,5e25cc9,9503d5c,13efb72,8ca6abb,4a09dd1,346fc92,20e5ba8,f4b237e,1dd08ee,940be42,37be245,563fde0,938cecb,cf197c1,7ca71bb,1e73219,4dd860d,4d24a11,6bbc5ac,5fd25f4,a461561,832b3c6,837e906,cd1f2d4,fb38ce6,446c7ac,b48b7d8,dc66d90,d5a3dc3,482e0d5,d84f518,d34d399,5bbd25e,14eab6b,a3bd27a,ec19ab3,af8fcb3,6b82a28,3043aea,785577e,a8dbbce,65094ac,113ec70,ad3126e,eedfb27,45c467a,c983fc1,58f164f,f6df1aa,c05355c,ae7805c,9ffc621,c97b331,15297e5,41f6738,53f9352,b72f6a2,52e1716,50c863a,f09dc43,c148d27,a11ecdd,08e338e,8450ad5,39da87a,a2adb31,a6174d5,96e6004,3ebd645,3c3c79b,8c6d2fa,1ff35d2,2b100e9,e3938e5,f90101a,306c9a1,5b69c67,a12ffe3,f6cf0fd,3541f65,d50aaa2,3731ddb,3b8090c,137757a,a658477]:Effect-TS/effect (@effect/platform-node-shared)
v4.0.7Compare Source
Patch Changes
#9795
958307bThanks @effect-bot! - FailChildProcessexit codes when astdinoradditionalFdsinput stream fails, instead of reporting a successful exit after truncated input.#9823
5fbccf4Thanks @effect-bot! - Keep waiting for a detachedChildProcessprocess group that still exists but cannot be signalled, such as on macOS when only zombie members remain, instead of treating it as gone once the leader exits.#9977
a3bd27aThanks @jpowersdev! - MakeNodeStream.toStringenforcemaxByteson the bytes read instead of the decoded text, which rejected non-UTF-8 input at the limit and accepted oversized UTF-16 input.#9798
ec19ab3Thanks @effect-bot! - FixNodeChildProcessSpawnersignalling a possibly reused process group after a non-detached child exits.#10020
f09dc43Thanks @effect-bot! - AllowFileSystem.makeTempDirectoryScopedandFileSystem.makeTempFileScopedto finalize successfully when their temporary path has already been removed.Updated dependencies [
ac3485a,3a4c691,4f0600e,110fd22,aa58cda,8e257e7,e62a149,dcd43a5,3388cdd,81b0e14,a046435,f6d8968,5741c3a,381d5c6,d47478a,383716d,46dc30a,3d5c862,93ebc4f,c7b161a,e55945d,1a53d6a,5e25cc9,9503d5c,13efb72,8ca6abb,4a09dd1,346fc92,20e5ba8,f4b237e,1dd08ee,940be42,37be245,563fde0,938cecb,cf197c1,7ca71bb,1e73219,4dd860d,4d24a11,6bbc5ac,5fd25f4,a461561,832b3c6,837e906,cd1f2d4,fb38ce6,446c7ac,b48b7d8,dc66d90,d5a3dc3,482e0d5,d84f518,d34d399,5bbd25e,14eab6b,af8fcb3,6b82a28,3043aea,785577e,a8dbbce,65094ac,113ec70,ad3126e,eedfb27,45c467a,c983fc1,58f164f,f6df1aa,c05355c,ae7805c,9ffc621,c97b331,15297e5,41f6738,53f9352,b72f6a2,52e1716,50c863a,c148d27,a11ecdd,08e338e,8450ad5,39da87a,a2adb31,a6174d5,96e6004,3ebd645,3c3c79b,8c6d2fa,1ff35d2,2b100e9,e3938e5,f90101a,306c9a1,5b69c67,a12ffe3,f6cf0fd,3541f65,d50aaa2,3731ddb,3b8090c,137757a,a658477]:Effect-TS/effect (effect)
v4.0.7Compare Source
Patch Changes
#6743
ac3485aThanks @IMax153! - Add a scopedCliOutput.Presenterservice for suppressing, redirecting, or replacing built-in CLI help, invalid-invocation, and version output.#9873
3a4c691Thanks @effect-bot! - Require tool parameter schema services inResponse.AllParts,Response.PartandResponse.StreamPart, including for toolkits with handlers, and addTool.ParametersDecodingServices.#9861
4f0600eThanks @effect-bot! - Add atoModelOutputoption toTool.makeandTool.dynamicfor sending text, images and files to the model in place of the serialized tool result. Anthropic and OpenAI Responses send native content blocks; OpenAI-compatible APIs and OpenRouter send text with a placeholder for each file, via the newPrompt.toolModelOutputToText.OpenAI Responses now sends PDF file parts given as base64, data URL or HTTP(S) URL strings instead of dropping them.
#9377
110fd22Thanks @gcanti! - Add aconcurrencyoption toArbitrary.checkEffectand global check configuration to run independent property evaluations concurrently. Results remain deterministic for deterministic generators and repeatable properties, while shrinking and replay stay sequential. The default concurrency is1.#9811
aa58cdaThanks @effect-bot! - Speed upBase64.encodeandBase64Url.encodeon large inputs and reduce the memory they allocate.#9913
8e257e7Thanks @Marve10s! - Fix duplicate interrupt reasons when interrupting a fiber insideEffect.withSpanorEffect.fn.#9846
e62a149Thanks @mkantautas! - FixChildProcessSpawnerhelpers hanging when a command fills a pipe the helper never reads.exitCodenow reads and discardsstdoutandstderruntil the process exits, andstring,lines,streamStringandstreamLinesread and discardstderrunlessincludeStderris set. A failure reading that output while the helper runs, such as from an outputSink, now fails the helper.#9794
dcd43a5Thanks @effect-bot! - Clarify thatChildProcessoutput sinks forstdout,stderrand outputadditionalFdsonly receive data while the corresponding handle stream is consumed, and that the handle stream emits the sink's results.#9921
3388cddThanks @Marve10s! - Fix Bash completion of file and directory paths containing spaces, quotes or glob characters.#9976
81b0e14Thanks @effect-bot! - AddCompletions.fromCommandtoeffect/cli. It converts an existingCommandtree into aCommandDescriptor, so build tooling can generate shell completion scripts withCompletions.generatewithout running the CLI.#9881
a046435Thanks @effect-bot! - SkipFlag.withFallbackPromptandArgument.withFallbackPromptfallbacks whenTerminalCapabilities.canPromptisfalse, failing with the originalMissingOptionorMissingArgumenterror instead of rendering a prompt or waiting for input.#9922
f6d8968Thanks @Marve10s! - Show command help for invalid global flag values instead of failing with a raw parse error.#8349
5741c3aThanks @ArjunCodess! - Add theCliError.userMessageannotation soCommand.runrenders tagged handler errors without wrapping them inCliError.UserError.#9959
381d5c6Thanks @baptisteArno! - Record ClickHouse migrations only after they succeed, so a failed migration and the ones after it are retried on the next run.#10001
d47478aThanks @tim-smart! - Stop a runner that lost a shard lock from storing the final reply of a persisted request on that shard. Before storing it, the runner refreshes its shard locks and checks that the shard is still among them. If it is not, the request is left for the shard's new owner.#10037
383716dThanks @tim-smart! - Release a frozen runner's PostgreSQL advisory shard locks aftershardLockExpiration. On PostgreSQL 14+,SqlRunnerStoragesetsidle_session_timeouton its lock connection, so a runner that stops refreshing loses its locks instead of holding them until the server drops its TCP connection.With advisory locks on PostgreSQL and MySQL,
SqlRunnerStoragerefresh now only confirms locks its current lock session holds. After the lock connection is replaced, shards held by the previous session are reported lost instead of being silently reacquired.#9817
46dc30aThanks @effect-bot! - Fix cluster shutdown waiting forentityTerminationTimeoutwhen a workflow is waiting on a persisted activity request that has not started. During runner shutdown the caller is now abandoned so the request replays under the next owner, and a durable caller abandoned this way is left for replay instead of being answered with an interrupt. WithpreemptiveShutdown: false, entities drain before the runner is marked as shutting down, so such a caller still waits forentityTerminationTimeout.#9985
3d5c862Thanks @tim-smart! - Fix a cluster workflow replay ignoring a durable deferred completion that is persisted but not yet processed by the new owner. ADurableDeferred.raceAllcould pick a different winner on replay and run the wrong branch. Workflow replays now read the stored completion from the unprocessed request when it has no reply yet.#9845
93ebc4fThanks @effect-bot! - FixClusterWorkflowEnginerunning a completed step's compensation twice wheninterruptUnsafeinterrupts a workflow during a running activity.#9938
c7b161aThanks @effect-bot! - Fix a forced shard release stalling forever when a child workflow wakes its still-running parent. The wake's cluster abandonment was retried, so it waited on the retired run and blocked the shard from being reacquired. The abandonment now interrupts the wake, so the activation unwinds, the release completes, and the parent is resumed under the next owner.#10034
e55945dThanks @jpowersdev! - FixHttpClientRequest.compressBodyreplacing the request's Content-Type with the body's content type. Compression now only updates the Content-Encoding and Content-Length headers.#10035
1a53d6aThanks @jpowersdev! - FixHttpMiddleware.compressionsending an uncompressed response whenAccept-Encodingcontains an empty list member, such asgzip,. Empty members are now ignored as RFC 9110 requires.#9769
5e25cc9Thanks @Marve10s! - FixEqual.equalsandHash.hashtreating any two same-lengthArrayBuffers as equal.ArrayBufferandSharedArrayBufferare now compared and hashed by their bytes.#9799
9503d5cThanks @effect-bot! - FixExit.hasFails,Exit.hasDies,Exit.hasInterrupts, andAsyncResult.isInterruptednarrowing away every failure when they returnfalse. They now returnboolean, like the matchingCausechecks; useExit.isFailureorAsyncResult.isFailureto narrow.#10026
13efb72Thanks @tim-smart! - Prevent laterSemaphore.takecalls from overtaking eligible queued requests while preserving mixed-size overtaking.#9767
8ca6abbThanks @Marve10s! - FixQueue.offerAll,MutableList.appendAllandMutableList.prependAllkeeping a reference to the caller's array. Changing that array afterward no longer changes the queued values.#9982
4a09dd1Thanks @jpowersdev! - FixJsonSchema.toDocumentDraft07emittingenum: [], which the Draft-07 metaschema rejects. An empty enum now becomes anallOfentry that rejects every value.#9754
346fc92Thanks @gcanti! - FixSchema.isCapitalizedandSchema.isUncapitalizedaccepting astral letters with the wrong case.#9967
20e5ba8Thanks @gcanti! - FixSchema.isULIDto reject values exceeding the 128-bit ULID limit.#9878
f4b237eThanks @Hona! - FixEffect.fnstack frames retaining call arguments. A fiber forked inside anEffect.fncall inherits the frame, which kept the arguments of that call and of every traced call above it alive for as long as the fiber ran.#9887
1dd08eeThanks @jayhemnani9910! - FixHttpClient.followRedirectsre-encoding the query of theLocationit follows (%20became+,flagbecameflag=, and invalid UTF-8 bytes were replaced with U+FFFD). The redirected request now uses the resolvedLocationURL without rewriting its query.#9948
940be42Thanks @chiefcll! - Format values with own getters inFormatter.formatJsonandCause.prettywithoutProxy, so engines that lack it no longer throw aReferenceError. Getter results stay redacted on every engine.#10029
37be245Thanks @jpowersdev! - FixHttpStaticServerdroppingContent-Location,Date,ExpiresandVaryfrom 304 responses.#9944
563fde0Thanks @effect-bot! - AddHttpApiClient.decodeResponseto decode a raw endpoint response with the endpoint's declared success and error schemas, for example after aresponseMode: "response-only"call.#9796
938cecbThanks @effect-bot! - Reject.and..path parameters inHttpApiClientso they cannot change the request path through URL normalization.#9869
cf197c1Thanks @sarankumar1325! - Describe undeclared response statuses inHttpApiClienterrors. The reason is still aDecodeError, now with the descriptionundeclared status code, so the message readsDecode: undeclared status code (418 GET ...)instead ofDecode error (418 GET ...).#9998
7ca71bbThanks @tim-smart! - MakeHttpApiClientclose the upgraded connection of anHttpApiSchema.Upgradeendpoint when the101response headers fail to decode, instead of leaving it open.#10002
1e73219Thanks @tim-smart! - MakeHttpApiClientclose the upgraded connection of anHttpApiSchema.Upgradeendpoint when it is interrupted right after taking the upgrade, before its cleanup was in place.#9941
4dd860dThanks @effect-bot! - AllowHttpApiSchema.StreamUint8ArrayandHttpApiSchema.StreamNdjsonto declare a list of content types. The first entry is the default response type, streaming payloads are accepted under every entry, and OpenAPI emits the stream under each one.#9855
4d24a11Thanks @effect-bot! - StopHttpClientErrorreasons from exposing request headers, query parameters and bodies when serialized or inspected. TheirtoJSONnow prints the request as its method and redacted URL, and the response as its status, matching the error message. The full request and response remain available through therequestandresponseproperties.#9786
6bbc5acThanks @gcanti! - Fix OpenAPI incorrectly marking optional HTTP parameters and headers as nullable.#9770
5fd25f4Thanks @Marve10s! - FixHttpRouter.prefixeddropping the leading/from the local URL when only a query string follows the prefix. A handler for/api?x=1now sees/?x=1instead of?x=1, and a router mounted under a prefix no longer returns 404 for/prefix?query.#10011
a461561Thanks @tim-smart! - FormatHttpServerErrormessages with only the request path, so query values and URL credentials can't leak into span errors or logs. The full request is still available on the error.#9994
832b3c6Thanks @tim-smart! - Redact the URL in the failure thatHttpMiddleware.tracerrecords for 5xx responses when the response ends, so exporters that read the message later no longer see query values that were only redacted during the request.#9874
837e906Thanks @john-griffin! - FixHttpApiClientmethod calls insideEffect.allwidening their required services toany, and reading services off a non-streaming method's type givingunknown.#9942
cd1f2d4Thanks @effect-bot! - Name both endpoints whenHttpApiBuilder.layerfinds twoHttpApiEndpoints with the same method and path, and document how to declare request variants of one operation as a single endpoint.#9751
fb38ce6Thanks @effect-bot! - Allow buffered payloads and typed101response headers onHttpApiSchema.Upgradeendpoints.HttpApiSchema.Upgrade({ protocol, headers })declares101headers, encoded likeWithHeadersheaders. Clients decode them and return{ headers, socket }, and OpenAPI lists them on the101.upgradefunction instead ofsocket:upgrade(), orupgrade({ headers })when headers are declared.426 Upgrade Requiredis returned before the payload is decoded.HttpServerRequestgainsupgradeWith({ headers }), andupgradeisupgradeWith({}). Third-partyHttpServerRequestimplementations must add it. WebSocket upgrades fail when headers are given.NodeHttpServerwaits for the request body to end before writing the101. On Node 25 and older, which do not parse upgrade request bodies, it readsContent-Lengthbodies from the connection and answers chunked ones with411 Length Required.NodeMultipartfails with aMultipartErrorwhen its source stream errors, instead of waiting for more input.#9815
446c7acThanks @tim-smart! - Ignoreend,attribute,event, andaddLinkscalls on spans that have already ended. Logs andEffect.annotateCurrentSpanfrom fibers that outlive their span no longer modify the ended span,OtlpTracerno longer exports a span twice whenendis called again,OtelSpanno longer triggers OpenTelemetry SDK warnings for late calls, and the DevTools tracer no longer sends events for ended spans.#10024
b48b7d8Thanks @jpowersdev! - Ignore malformed Set-Cookie Max-Age attributes instead of parsing their numeric prefixes.#8180
dc66d90Thanks @Ishkirat-Singh! -SchemaRepresentation.fromJsonSchemaDocumentnow supports$refpointers below top-level definitions, including shared and recursive schemas, and rejects circular pointer aliases during import.#9999
d5a3dc3Thanks @jpowersdev! -JsonPatch.applynow throws on malformed JSON Pointer escapes, such as/a~2or a trailing~, instead of treating them as literal keys.#10027
482e0d5Thanks @tkr109! - FixMatcharray patterns matching arrays shorter than the pattern.#8509
d84f518Thanks @IMax153! - Add acontrolMessagesoption to the JSON-RPC serializations inRpcSerialization. MCP servers disable it, so@effect/rpc/*notifications from MCP clients no longer stop stdio servers or write@effect/rpc/Pongto stdout.#9961
d34d399Thanks @effect-bot! - FixMcpServermethod-not-found, invalid-params and invalid-request errors including an internal_tagfield. Strict MCP clients such asMcpClientrejected these responses and the stdio transport stopped serving later requests.#9886
5bbd25eThanks @jayhemnani9910! - FixMultipartParserrejecting horizontal tabs in quotedContent-DispositionandContent-Typeparameters.#9768
14eab6bThanks @Marve10s! -MutableRefandRefnow compare by reference. Distinct instances with equal contents no longer compareEqualor share aHashSetorHashMapkey.#9925
af8fcb3Thanks @Marve10s! - FixOpenApi.fromApito require all stacked security middleware instead of documenting them as alternatives.#9829
6b82a28Thanks @tim-smart! - Add theeffect/observability/OtlpProxymodule, which serves OTLP routes that forward browser telemetry to a collector or vendor and keep credentialsConfiguration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about these updates again.
This PR was generated by Mend Renovate. View the repository job log.