Repository navigation
Bump the nuget group with 14 updates - #1364
Merged
Merged
Conversation
Bumps fantomas from 8.0.4 to 8.1.0 Bumps fsharp-analyzers from 0.39.2 to 0.41.0 Bumps FSharp.Compiler.Service from 43.12.401 to 43.12.402 Bumps FSharp.Core from 10.1.401 to 10.1.402 Bumps FsUnit from 7.1.1 to 8.0.0 Bumps G-Research.FSharp.Analyzers from 0.25.0 to 0.26.0 Bumps Ionide.Analyzers from 0.19.0 to 0.20.0 Bumps Ionide.ProjInfo from 0.75.0 to 0.75.3 Bumps Microsoft.Extensions.Logging.Abstractions from 10.0.12 to 10.0.13 Bumps Microsoft.NET.Test.Sdk from 18.10.1 to 18.11.0 Bumps NUnit from 4.6.1 to 5.0.0 Bumps NUnit3TestAdapter from 6.3.0 to 6.3.1 Bumps Suave from 3.5.0 to 3.7.2 Bumps System.Text.Json from 10.0.12 to 10.0.13 --- updated-dependencies: - dependency-name: fantomas dependency-version: 8.1.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget - dependency-name: fsharp-analyzers dependency-version: 0.41.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget - dependency-name: FSharp.Compiler.Service dependency-version: 43.12.402 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget - dependency-name: FSharp.Core dependency-version: 10.1.402 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget - dependency-name: FsUnit dependency-version: 8.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget - dependency-name: NUnit dependency-version: 5.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget - dependency-name: G-Research.FSharp.Analyzers dependency-version: 0.26.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget - dependency-name: Ionide.Analyzers dependency-version: 0.20.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget - dependency-name: Ionide.ProjInfo dependency-version: 0.75.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-version: 10.0.13 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget - dependency-name: Microsoft.NET.Test.Sdk dependency-version: 18.11.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget - dependency-name: NUnit3TestAdapter dependency-version: 6.3.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget - dependency-name: Suave dependency-version: 3.7.2 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget - dependency-name: System.Text.Json dependency-version: 10.0.13 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget ... Signed-off-by: dependabot[bot] <support@github.com>
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.
Updated fantomas from 8.0.4 to 8.1.0.
Release notes
Sourced from fantomas's releases.
8.1.0
8.1.0 Umbra - 21-10-2026
Changed
Fixed
Special thanks to @mmabdpr and @nojaf!
https://www.nuget.org/packages/fantomas/8.1.0
8.0.10
8.0.10
Fixed
Special thanks to @nojaf!
https://www.nuget.org/packages/fantomas/8.0.10
8.0.9
8.0.9
Fixed
Special thanks to @nojaf!
https://www.nuget.org/packages/fantomas/8.0.9
8.0.8
8.0.8
Changed
Fixed
whenkeyword of a match clause, so a comment after it had no node on its line to attach to. The parser now records that range, and the comment stays after the keyword. #3521Special thanks to @nojaf!
https://www.nuget.org/packages/fantomas/8.0.8
8.0.7
8.0.7
Fixed
andbetween its conditions, and reverses its conditions andwhenclauses. #3516Special thanks to @nojaf!
https://www.nuget.org/packages/fantomas/8.0.7
8.0.6
8.0.6
Changed
ofkeyword in SynUnionCaseTrivia', commit 5e9647f158fe282462aba57ed83ada910a91b90e #3502Fixed
ofkeyword of a union case or exception, so a block comment after it, as inexception E of (*name*) string, was attached to the case name and printed in front ofof. The parser now records that range, and the comment stays after the keyword. #1959if,thenorelse ifkeywords. The cursor now keeps its place onif,elif,else if,then,match,match!andwith. #3387Special thanks to @knocte, @mmabdpr and @nojaf!
https://www.nuget.org/packages/fantomas/8.0.6
8.0.5
8.0.5
Changed
8.0.4, depending on hardware. The fields ofWriterEvent, returned byCodeFormatter.GetWriterEventsAsync, are renamed so that cases share them:textfor the strings,amountforIndentByandUnIndentBy,columnfor the indent and column cases, andnodeTypeandrangeforNodeEnd. #3499exceptionin SynExceptionDefnRepr', commit 349d6aaf1e4685a72e43b7f4a0708205e4104b4c #3500Fixed
exceptionkeyword, so a comment between the XML doc or attributes and the keyword was placed in front of the exception name, after the keyword. The parser now records that range, and the comment stays in front of the keyword. #3483Special thanks to @nojaf!
https://www.nuget.org/packages/fantomas/8.0.5
Commits viewable in compare view.
Updated fsharp-analyzers from 0.39.2 to 0.41.0.
Release notes
Sourced from fsharp-analyzers's releases.
0.41.0
0.41.0
Added
toolExecutionNotificationsentry and setsexecutionSuccessfultofalse. Pass--fail-on-type-errorsto also exit with code-5(TypeCheckFailed) in that case. The switch is opt-in, so a run that analyzes before building keeps its exit code. A#loador#rin a script that cannot be resolved counts as a type error too.Changed
Client.RunAnalyzersSafelyis nowClient.RunAnalyzers, and the oldClient.RunAnalyzers, which only returned the messages, is gone. It hid an analyzer that threw in the log, so a caller could not tell its messages were missing.RunAnalyzersreturns anAnalysisResultper analyzer and does not throw. To get only the messages, collect theOkoutputs.AnalysisResult.Outputis nowResult<AnalyzerMessage list, exn>instead ofResult<Message list, exn>, so a caller keeps the name, help link and short description of the analyzer behind each message. Read.Messageon each item to get theMessageas before.#loadthat cannot be resolved, is no longer logged at error level asScript ... has a diagnostic. It is logged with the type errors, as a warning underdid not type check, and each type error now names its file and error code. A warning from loading a script is still logged asScript ... has a diagnostic, but at warning level instead of error level.Fixed
--output-format githubare relative to the code root. Without a trailing separator on--code-root(or the current directory, its default), every path started with the name of the code root directory, such asrepo/src/A.fsinstead ofsrc/A.fs. A code root with a trailing separator is unaffected. GitHub code scanning re-creates open alerts once at the corrected paths, because it ties an alert to its file path.--warnaserror, whichTreatWarningsAsErrorspasses to the compiler, is ignored when type checking for the analyzers, so a warning no longer counts as a type error.toolExecutionNotificationsentry withexecutionSuccessfulset tofalse, and the CLI exits with-4(AnalysisAborted). Previously the run stopped with exit code22, without a SARIF report and without the messages of the other analyzers.Asyncnow reports its own exception, instead of aTargetInvocationExceptionwith the messageException has been thrown by the target of an invocation.Special thanks to @nojaf!
https://www.nuget.org/packages/FSharp.Analyzers.SDK/0.41.0
https://www.nuget.org/packages/FSharp.Analyzers.SDK.Testing/0.41.0
https://www.nuget.org/packages/fsharp-analyzers/0.41.0
0.40.0
0.40.0
Changed
Fixed
InlineAnnotationisAlwaysInlineagain forinlinevalues from assemblies built with F# 4.7 or older (dotnet/fsharp#20260).FileNotFoundExceptioncrashed the run and no analyzer ran at all.https://www.nuget.org/packages/FSharp.Analyzers.SDK/0.40.0
https://www.nuget.org/packages/FSharp.Analyzers.SDK.Testing/0.40.0
https://www.nuget.org/packages/fsharp-analyzers/0.40.0
Commits viewable in compare view.
Updated FSharp.Compiler.Service from 43.12.401 to 43.12.402.
Release notes
Sourced from FSharp.Compiler.Service's releases.
No release notes found for this version range.
Commits viewable in compare view.
Updated FSharp.Core from 10.1.401 to 10.1.402.
Release notes
Sourced from FSharp.Core's releases.
No release notes found for this version range.
Commits viewable in compare view.
Updated FsUnit from 7.1.1 to 8.0.0.
Release notes
Sourced from FsUnit's releases.
8.0.0
What's Changed
New Contributors
Full Changelog: fsprojects/FsUnit@7.1.1...v8.0.0
Commits viewable in compare view.
Updated G-Research.FSharp.Analyzers from 0.25.0 to 0.26.0.
Release notes
Sourced from G-Research.FSharp.Analyzers's releases.
0.26.0
0.26.0
Changed
0.41.0. #121https://www.nuget.org/packages/G-Research.FSharp.Analyzers/0.26.0
Commits viewable in compare view.
Updated Ionide.Analyzers from 0.19.0 to 0.20.0.
Release notes
Sourced from Ionide.Analyzers's releases.
0.20.0
0.20.0
Changed
0.41.0, FSharp.Compiler.Service to43.12.402, and FSharp.Core to10.1.402. Checkout the release notes for details. #214Special thanks to @nojaf!
https://www.nuget.org/packages/Ionide.Analyzers/0.20.0
Commits viewable in compare view.
Updated Ionide.ProjInfo from 0.75.0 to 0.75.3.
Release notes
Sourced from Ionide.ProjInfo's releases.
0.75.3
Fixed
0.75.2
Changed
0.75.1
Fixed
Commits viewable in compare view.
Updated Microsoft.Extensions.Logging.Abstractions from 10.0.12 to 10.0.13.
Release notes
Sourced from Microsoft.Extensions.Logging.Abstractions's releases.
No release notes found for this version range.
Commits viewable in compare view.
Updated Microsoft.NET.Test.Sdk from 18.10.1 to 18.11.0.
Release notes
Sourced from Microsoft.NET.Test.Sdk's releases.
18.11.0
What's Changed
New Contributors
Full Changelog: microsoft/vstest@v18.10.1...v18.11.0
Commits viewable in compare view.
Updated NUnit from 4.6.1 to 5.0.0.
Release notes
Sourced from NUnit's releases.
5.0.0
See release notes for details.
Commits viewable in compare view.
Updated NUnit3TestAdapter from 6.3.0 to 6.3.1.
Release notes
Sourced from NUnit3TestAdapter's releases.
6.3.1
This is a hotfix release for issue 1504
Commits viewable in compare view.
Updated Suave from 3.5.0 to 3.7.2.
Release notes
Sourced from Suave's releases.
3.7.2
startWebServerthrows theSocketExceptioninstead of returning normally, so astartWebServer cfg app; 0program exits with a non-zero code and supervisors (systemdRestart=on-failure, Docker restart policies) see the failure. WithstartWebServerAsync,listeningraises the exception instead of never completing (a program blocked on it hung for ever, even on SIGTERM) and the server task is faulted with it. With several bindings, one that fails stops the ones that did start, sostartWebServerthrows instead of carrying on with only some of them. Stopping the server by cancelling its token still completes cleanly. AddsAsyncResultCell.fail3.7.1
acceptorCount = 1, one idle TCP connection made the HTTPS site unreachable until it closed). The handshake now runs on the connection's own task instead of the accept loop, and is bounded by the new process-wideTcp.tlsHandshakeTimeout(default 10 seconds; set it before starting the server). A connection whose handshake fails or times out now has its socket closed; previously the socket was left openProxy.proxyforwards requests faithfully: the target is built fromrawPathandrawQuery(it used the decodedpathand dropped the query, so/a/b%2Fc?x=1arrived as/a/b/c), and a path on the upstream URI is kept as a prefix (proxy (Uri "http://backend/api")maps/usersto/api/users). A request path with a.or..segment (also percent-encoded) is answered with 400 instead of being able to leave that prefixProxy.proxyforwards every request header except hop-by-hop ones (RFC 9110 §7.6.1:Connection,Keep-Alive,Proxy-Connection,TE,Trailer,Transfer-Encoding,Upgrade,Proxy-Authorization,Proxy-Authenticateand any named inConnection),Host,Content-LengthandExpect; it used to forward onlyUser-Agent,Accept,Date,Content-TypeandContent-Length, soAuthorization,Cookie, API keys and the like were lost. The request body is forwarded whenever there is one (it was only forwarded for POST and PUT, so PATCH and DELETE lost theirs).multipart/form-databodies are parsed by Suave before any WebPart runs and still cannot be forwardedProxy.proxypasses any upstream status through with its reason phrase; statuses Suave has noHttpCodefor (e.g. 207, 418) used to become 502 while the upstream body was still sent. Response headers are forwarded without hop-by-hop headers and withoutDate/Server(Suave writes its own), and repeated headers such asSet-Cookieare kept as separate headers instead of being joined with commasProxy.proxyno longer trustsX-Forwarded-For,X-Forwarded-Proto,X-Forwarded-Host,ForwardedorX-Real-IPsent by the client:X-Forwarded-Foris the connection's address,-Protoand-Hostare the scheme andHostthe proxy received, andForwarded/X-Real-IPare dropped. A client could sendX-Forwarded-Proto: httpsover plain HTTP, or any address inX-Forwarded-For, and have it passed on. Behind another reverse proxy, list its address inProxyOptions.trustedProxiesto keep its headers and extend itsX-Forwarded-ForchainHttpClientshared by all proxies no longer keeps a cookie container. UpstreamSet-Cookieresponses were stored in it and sent with later proxied requests from every clientProxy.proxyWith options upstreamandProxy.defaultProxyOptions(timeout,trustedProxies,dropRequestHeaders,onError). The proxy answers 504 when the upstream has not sent its response headers within the timeout (30 seconds by default; there was none) and 502 when it cannot be reached;onErroris called with the exception first.proxyandproxyWiththrowArgumentExceptionstraight away for an upstream that is not an absolute http/https URI3.7.0
SocketTaskbeing sent with status 200 and an empty body:Files.file,Files.browse,Stream.okStream,Stream.okStreamChunked,TransferEncoding.chunked,EventSource.handShakeand custom writers now work over HTTP/2 (TLS with ALPNh2, h2c upgrade and h2c prior knowledge). Since HTTPS bindings advertiseh2first, browsers received empty static files and event streams from 3.6.1 and earlier. The HTTP/2 writer gives the task a per-stream connection: header lines the task writes join the HEADERS frame, HTTP/1.1 chunk framing is removed, and the body goes out as flow-controlled DATA frames as it is written; once the client resets the stream, writes return an errorConnection,Keep-Alive,Proxy-Connection,Transfer-Encoding,Upgrade, RFC 9113 §8.2.2);Transfer-Encoding: chunkedmade clients fail the stream with PROTOCOL_ERROR (curl exit 92)SuaveConfig.http2Enabled(defaulttrue, alsowithHttp2EnabledandHttpRuntime.http2Enabled): whenfalse, HTTPS bindings offer onlyhttp/1.1via ALPN,Upgrade: h2cis ignored and the HTTP/2 prior-knowledge preface is refused with 400. Code that buildsSuaveConfigorHttpRuntimewith a full record expression must add the field;{ defaultConfig with ... }is unaffected101 Switching Protocolsresponse, and any other 1xx response, no longer carries the defaultContent-Type: text/htmldefaultErrorHandlerno longer returns the exception message and stack trace to "local" clients; every client gets a plain500 Internal Server Error. The local check used the connection address, or anX-Forwarded-For/X-Real-IPheader the client could set to127.0.0.1; behind a reverse proxy on the same host (nginx -> 127.0.0.1) every remote client received stack traces. For development, opt in with the newdevelopmentErrorHandler({ defaultConfig with errorHandler = developmentErrorHandler }), which shows the HTML-encoded details to every clientrequest.binding; it was the defaulthttp://0.0.0.0:8080, sorequest.binding.scheme.securewasfalseandrequest.urlwas wrong for HTTPS clients that negotiated HTTP/2 (a redirect-to-HTTPS check looped for them)runtimeimage with a non-root user and a curl-free health check, shows graceful shutdown on SIGTERM, fixes the nginx WebSocket/keep-alive setup, usesX509CertificateLoader, and replaces the ASP.NET Core Module IIS example with HttpPlatformHandler; the HTTPS recipe's redirect keeps the query string and portValidation.Stringvalidators (minLength,maxLength,exactLength,lengthBetween,matches,email,alphanumeric,alpha,numeric,contains,startsWith,endsWith) returnInvalidwith "Value is required" for anullinput instead of throwingNullReferenceException, e.g. for a field System.Text.Json leftnull;notEmptyis unchangedValidationWebParts.validationErrorsToJsonwrites its output withUtf8JsonWriter, so fields and messages containing",\or control characters produce valid JSON; the shape is unchanged, the output is now compact (no spaces), and characters such as',<and non-ASCII are written as\uXXXXescapes<++>operator now preserves left-to-right order:a <++> breportsa's errors beforeb's and returnsa's value when both pass (previously the reverse).a |> andAlso bis unchangedHttpRequest.queryreturns(key, None)for a query key without a value (?flag), as documented, instead of(key, Some "");?key=is still(key, Some "").queryFlag "flag"is nowtruefor?flag, andqueryParam "flag"returnsChoice2Of2for it. Form parsing (form,formData) is unchangedpathScan,pathScanCiandSscanf.sscanfno longer wrap integers that are out of range for the target type:/items/99999999999againstpathScan "/items/%d"with aninthandler now declines instead of passing1215752191; the same applies toint16,uint16anduint32(and%x/%X/%ovalues that do not fit)CORS.defaultCORSConfigno longer allows credentials (allowCookies = false). It used to reflect anyOrigintogether withAccess-Control-Allow-Credentials: true, which lets any web site make authenticated requests as your users. To allow credentials, list the trusted origins too:{ defaultCORSConfig with allowedUris = InclusiveOption.Some [ "https://app.example.com" ]; allowCookies = true }corsaddsVary: Origin(merged into an existingVary) so caches do not serve one origin's CORS response to anothercorsno longer sendsAccess-Control-Allow-Methods: GET,for a single allowed method; methods are joined asGET, POSTCORS.withCORS config handler, which answers preflight requests with 204 itself and runshandleronly for actual requests, andCORS.corsPreflight config, which answers preflights and declines other requests (choose [ corsPreflight cfg; cors cfg >=> app ]).cors cfg >=> handlerstill lets the handler replace the preflight's 204, as documentedRateLimit.defaultKeyExtractorkeys by the connection's remote address and ignoresX-Forwarded-For/X-Real-IP, which a client could change on every request to avoid the limit. Behind a reverse proxy use the newRateLimit.trustedProxyKeyExtractor [ proxyAddress ], which readsX-Forwarded-Foronly on connections from the listed proxies.userKeyExtractorandheaderKeyExtractorfall back to the new defaultrateLimitWebPart keeps its own counters. All limiters used to share one store keyed only by the extracted key, so two limiters keyed by IP counted together, and limiters with different strategies denied every request after the first (e.g. aFixedWindowlimiter returned 429 after aSlidingWindowone had seen the same IP). Idle entries are still cleaned up.getStatsreturns the first limiter that has an entry for the keyRateLimit.defaultRateLimitConfig;RateLimit.defaultConfigis obsolete because afteropen Suave.RateLimitit shadows the server'sdefaultConfig. The obsolete alias still shadows it until it is removed; useWeb.defaultConfigmeanwhilesecurityHeadersreplaces headers of the same name already on the response instead of adding a second copy (e.g. twoCache-Controlheaders)X-XSS-Protection: 0instead of1; mode=block.strictConfigno longer sends the deprecatedblock-all-mixed-contentor HSTSpreload(opt in withwithHSTS 31536000 true true), and sendsCache-Control: no-storeinstead ofno-store, no-cacheFiles.sendFile(and sofile,browse,browseHome,browseFile) treatsRangebyte positions as inclusive:bytes=2-5is now answered withContent-Range: bytes 2-5/10and four bytes instead of three. Open-ended (bytes=5-) and suffix (bytes=-3) ranges are supported, a range past the end is clamped, a range starting at or after the end is answered with416andContent-Range: bytes */<length>, and malformed, multi-range or non-bytesheaders get the whole file. Partial responses are never compressedFiles.sendFileno longer sendsContent-Rangeon full200responses, compressed or not; it is only sent with206and416request.filesare deleted once the response has been written (or the connection ends) instead of being left in the temp folder. Move or copy an upload during the request to keep it; streaming it back withFiles.sendFilestill works. Files written by a customfilePartSinkare not touchedFiles.browse,browseHome,browseFile,browseFileHomeanddirdecline a request whose path escapes the root (such as/../secret.txt) instead of throwing, so it gets the application's 404 rather than a 500. NewFiles.tryResolvePath;resolvePathstill throwsAppContext.BaseDirectory, is read-only underdotnet fsiand in read-only containers), compressible files are served uncompressed instead of the connection being closed without a response; the failure is reported once per folder throughGlobals.writeMessagefilename=../../xDotLiquid >= 2.3.197; 3.6.1 and earlier declaredDotLiquidwith no lower bound (0.0), so NuGet picked DotLiquid 0.0.0 and the first render failed withMissingMethodException(Template.set_NamingConvention). Workaround for those versions: referenceDotLiquid2.3.197 explicitly. The DotLiquid docs now use| escapein their examples (DotLiquid does not HTML-escape output) and cover the response charset and template field namingopen Suaveno longer shadows F#'sResult.Ok/Result.Error: the parser'sScanResulttype (NeedMore | Found | Error) leaked itsErrorcase into theSuavenamespace, so bareError "x"or| Error e ->in user code resolved to it.ScanResultis now internal and requires qualified access, andHttpReader.scanMarkerandHttpReader.skip, which returned it, are now internal too. Code that matched onScanResultor called those members must useHttpReader.readUntilPatterninsteadmultipart/mixedpart is followed by another part: the parser did not wait for the rest of the outer boundary line to be skipped, so when that data had not arrived yet the request hung or lost the parts after itEventSource.dataandEventSource.sendwrite onedata:line per line of the data (split on CRLF, LF and CR), so line breaks in a message can no longer end the event and inject fields or extra events (e.g.Message.create "1" "hello\n\nevent: admin\ndata: x"produced a secondadminevent).esId,eventType,commentand the messageid/typehave CR and LF removed.sendnow writes the whole message in one writeEventSource.sendloop used to keep running forever):Connection.asyncWriteBytes,Connection.writeChunk,EventSource.send/data/comment/dispatch/…,transferStreamandtransferStreamChunkedraise the newSuave.Sockets.SocketWriteException(anIOExceptioncarrying the socketError) when a write fails, which ends the response and closes the connection. New non-throwing variants returnTask<Result<unit, Error>>:Connection.tryWriteBytes,Connection.tryFlush,Connection.tryWriteChunk,Connection.tryWriteLastChunk,EventSource.trySendandEventSource.tryComment.TcpTransport/SslTransport.writereturnErrorinstead of throwing when the socket is already shut downConnection.writeChunkwrites the raw bytes: it converted them to a UTF-8 string first, so non-UTF-8 data was corrupted and no longer matched the declared chunk length (FF FE 00was declared as 3 bytes and sent as 7). NewConnection.writeLastChunk/tryWriteLastChunkwrite the terminating0\r\n\r\nchunk (aswriteChunk [||]does)TransferEncoding.chunkedanswers 200 when the response still has the initial 404 status of a fresh response (TransferEncoding.chunked writeralone used to answer 404); any other status set before it is kept, and a chunked 404 can be sent withTransferEncoding.chunked writer >=> Writers.setStatus HTTP_404. The response headers are now flushed before the writer runs, so writers can write straight toconn.transportEventSource.handShakekeeps the headers already set on the response (it replaced them all) and no longer sendsAccess-Control-Allow-Origin: *. To allow cross-originEventSourceclients, compose it withWriters.setHeader "Access-Control-Allow-Origin" "*"(or your origin) orCORS.cors.Content-Typeis alwaystext/event-stream; charset=utf-8;Cache-Control: no-cacheandX-Accel-Buffering: noare added unless already setSuaveConfig.webSocketMaxFrameSizebytes (new field, default 16 MiB; also onHttpRuntime). A frame announcing a larger payload is answered with a Close frame carrying code 1009 and the connection is dropped before any buffer is allocated or thereadIntoByteSegmentlength function is called; previously a client could announce up to 2 GB per frame andread ()allocated it up front. Override per socket withWebSocket.maxFrameSize. Code that buildsSuaveConfigorHttpRuntimewithout{ defaultConfig with ... }/{ HttpRuntime.empty with ... }must set the new fieldhandShake,handShakeTask,handShakeWithSubprotocol) is reported throughGlobals.writeMessageand answered with a Close frame carrying code 1011 (newCloseCode.CLOSE_INTERNAL_ERROR); previously it escaped and Suave wrote anHTTP/1.1 500response, with the exception text for local clients, onto the upgraded connectionhandShakeno longer writes anHTTP/1.1 404 Not Foundresponse onto the connection when the WebSocket handler finishes, and a refused handshake now gets its400 Bad Request/405 Method Not Allowedinstead of404101 Switching Protocols(and other 1xx) responses no longer get a defaultContent-Type: text/htmlheaderOriginheader beforehandShake(cross-site WebSocket hijacking), answer Ping with Pong and Close with Close, and the broadcast recipe uses aMailboxProcessorhub that drops clients whose send fails3.6.1
.tailcalls:asynccontinuations inbind(>=>),choose,tryThen,inject,<|>, the router and others passed theHttpContextstruct on as a tail call, which went through the runtime's slow, copying tail-call helper (#865)TcpTransportno longer takes a lock to fetch the socket on every read and write (#865)benchmarks/cpu-per-request.shmeasures server CPU time per request;benchmarks/HTTP_COMPARISON.mddocuments the pinned-core andperfprofiling method (#865)3.6.0
Task;processRequestandrunkeep theirTasksignaturestask { }wrapper andAsync.StartImmediateAsTaskper request; web part errors are recovered there with the same semantics asasync.TryWithUpgrade: h2crequests, allocation-freeContent-Lengthformatting, status line and ASCII response headers written without task state orToLowerInvariant, no URL decoding of paths without escapes, and a single exact-route lookup inRouterHttpReadermembers (requestHeadReady,receive,commitReceived,tryReadRequestLineBuffered,tryReadHeadersBuffered) used by the request loop (#862)Globals.messageWriterto redirect or silence Suave's own console messages (startup banner, "Stopping TCP server", websocket disconnects); the test suite uses it to avoid a Console lock deadlock with Expecto that caused intermittent hangs (#863)_temporary_compressed_filesfolder is swept - age- and count-bounded, seeCompression.cleanupFolder- on server startup and shutdown (#655)benchmarks/HTTP_COMPARISON.md(#862)Commits viewable in compare view.
Updated System.Text.Json from 10.0.12 to 10.0.13.
Release notes
Sourced from System.Text.Json's releases.
No release notes found for this version range.
Commits viewable in compare view.
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot show <dependency name> ignore conditionswill show all of the ignore conditions of the specified dependency@dependabot ignore <dependency name> major versionwill close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)@dependabot ignore <dependency name> minor versionwill close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)@dependabot ignore <dependency name>will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)@dependabot unignore <dependency name>will remove all of the ignore conditions of the specified dependency@dependabot unignore <dependency name> <ignore condition>will remove the ignore condition of the specified dependency and ignore conditions