<3.0.0
, and adjust other dependencies.Fix constant evaluation analyzer error in shelf_unmodifiable_map.dart
.
Update usage of HTTP constants from the Dart SDK. Now require 2.0.0-dev.61.
Update createMiddleware
arguments to use FutureOr
.
Updated minimum Dart SDK to 1.24.0
, which added FutureOr
.
Improved formatting of the logRequests
default logger.
shelf_io
server now adds a shelf.io.connection_info
field to Request.context
, which provides access to the underlying HttpConnectionInfo
object.Give a return type to the Handler
typedef. This may cause static warnings where there previously were none, but all handlers should have already been returning a Response
or Future<Response>
.
Remove HijackCallback
and OnHijackCallback
typedefs.
Breaking: Change type of onHijack
in the Request
constructor to take an argument of StreamChannel
.
securityContext
parameter to self_io.serve()
.Go back to auto-generating a Content-Length
header when the length is known ahead-of-time and the user hasn't explicitly specified a Transfer-Encoding: chunked
.
Clarify adapter requirements around transfer codings.
Make shelf_io
consistent with the clarified adapter requirements. In particular, it removes the Transfer-Encoding
header from chunked requests, and it doesn't apply additional chunking to responses that already declare Transfer-Encoding: chunked
.
Content-Length
header.Add Request.isEmpty
and Response.isEmpty
getters which indicate whether a message has an empty body.
Don't automatically generate Content-Length
headers on messages where they may not be allowed.
User-specified Content-Length
headers now always take precedence over automatically-generated headers.
Allow List<int>
s to be passed as request or response bodies.
Requests and responses now automatically set Content-Length
headers when the body length is known ahead of time.
Work around sdk#27660 by manually setting HttpResponse.chunkedTransferEncoding
to false
for requests known to have no content.
logRequests()
.http_parser
3.0.0.Request.hijack()
now takes a callback that accepts a single StreamChannel
argument rather than separate Stream
and StreamSink
arguments. The old callback signature is still supported, but should be considered deprecated.
The HijackCallback
and OnHijackCallback
typedefs are deprecated.
http_parser
2.0.0.Content-Type
header didn‘t interact properly with the encoding
parameter for new Request()
and new Response()
if it wasn’t lowercase.shelf_io
adapter detects an error, print the request context as well as the error itself.Add a Server
interface representing an adapter that knows its own URL.
Add a ServerHandler
class that exposes a Server
backed by a Handler
.
Add an IOServer
class that implements Server
in terms of dart:io
's HttpServer
.
Map
instances and related dependencies.Request.change()
and Response.change()
are marked read whenever the original message is read, and vice-versa. This means that it's possible to read a message on which change()
has been called and to call change()
on a message more than once, as long as read()
is called on only one of those messages.http_parser
1.0.0.body
named argument to change
method on Request
and Response
.Updated minimum SDK to 1.9.0
.
Allow an empty url
parameter to be passed in to new Request()
. This fits the stated semantics of the class, and should not have been forbidden.
logRequests
outputs a better message a request has a query string.null
responses.shelf_io
now takes a "shelf.io.buffer_output"
Response.context
parameter that controls HttpResponse.bufferOutput
.
Fixed spelling errors in README and code comments.
Breaking change: The semantics of Request.scriptName
and Request.url
have been overhauled, and the former has been renamed to Request.handlerPath
. handlerPath
is now the root-relative URL path to the current handler, while url
's path is the relative path from the current handler to the requested. The new semantics are easier to describe and to understand.
Practically speaking, the main difference is that the /
at the beginning of url
's path has been moved to the end of handlerPath
. This makes url
's path easier to parse using the path
package.
Request.change
's handling of handlerPath
and url
has also changed. Instead of taking both parameters separately and requiring that the user manually maintain all the associated guarantees, it now takes a single path
parameter. This parameter is the relative path from the current handlerPath
to the next one, and sets both handlerPath
and url
on the new Request
accordingly.
Request
to support the body
model from Response
.Fixed createMiddleware
to only catch errors if errorHandler
is provided.
Updated handleRequest
in shelf_io
to more gracefully handle errors when parsing HttpRequest
.
Request.change
to include the original onHijack
callback if one exists.Added default body text for Response.forbidden
and Response.notFound
if null is provided.
Clarified documentation on a number of Response
constructors.
Updated README
links to point to latest docs on www.dartdocs.org
.
collection
package.stack_trace
.The shelf_io
adapter now sends the Date
HTTP header by default.
Fixed logic for setting Server header in shelf_io
.
Request.change
: scriptName
and url
.Add a Cascade
helper that runs handlers in sequence until one returns a response that's neither a 404 nor a 405.
Add a Request.change
method that copies a request with new header values.
Add a Request.hijack
method that allows handlers to gain access to the underlying HTTP socket.
Capture all asynchronous errors thrown by handlers if they would otherwise be top-leveled.
Add more detail to the README about handlers, middleware, and the rules for implementing an adapter.
context
map to Request
and Response
for passing data among handlers and middleware.scheduled_test
development dependency up to v0.12.0Stack
to Pipeline
.Access to headers for Request
and Response
is now case-insensitive.
The constructor for Request
has been simplified.
Request
now exposes url
which replaces pathInfo
, queryString
, and pathSegments
.
Removed old testing infrastructure.
Updated documentation address.
http_parser
package.mime
package.string_scanner
package.pubspec
details for move to Dart SDK.Response
int get contentLength
DateTime get expires
DateTime get lastModified
Request
contentLength
is now read from headers
. The constructor argument has been removed.Stream<List<int>> body
constructor argument.Stream<List<int>> read()
and Future<String> readAsString([Encoding encoding])
DateTime get ifModifiedSince
String get mimeType
Encoding get encoding
Shelf
prefix from all classes.Response
has drastically different constructors.Response
now accepts a body of either String
or Stream<List<int>>
.Response
now exposes encoding
and mimeType
.