Update `createMiddleware` arguments to use `FutureOr`. (#93)
Note: this change is not breaking for the runtime behavior, but it might
cause new errors during static analysis due the the type changes.
diff --git a/.travis.yml b/.travis.yml
index 17ebd9e..414a1de 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -3,7 +3,6 @@
dart:
- dev
- stable
- - 1.23.0
dart_task:
- test: --platform vm
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 62e48fe..50cc4eb 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,12 @@
+## 0.7.2
+
+* Update `createMiddleware` arguments to use `FutureOr`.
+
+ * Note: this change is not breaking for the runtime behavior, but it might
+ cause new errors during static analysis due the the type changes.
+
+* Updated minimum Dart SDK to `1.24.0`, which added `FutureOr`.
+
## 0.7.1
* The `shelf_io` server now adds a `shelf.io.connection_info` field to
diff --git a/lib/src/middleware.dart b/lib/src/middleware.dart
index 5a2db6b..f470893 100644
--- a/lib/src/middleware.dart
+++ b/lib/src/middleware.dart
@@ -47,9 +47,9 @@
/// does it receive [HijackException]s. It can either return a new response or
/// throw an error.
Middleware createMiddleware(
- {requestHandler(Request request),
- responseHandler(Response response),
- errorHandler(error, StackTrace stackTrace)}) {
+ {FutureOr<Response> requestHandler(Request request),
+ FutureOr<Response> responseHandler(Response response),
+ FutureOr<Response> errorHandler(error, StackTrace stackTrace)}) {
if (requestHandler == null) requestHandler = (request) => null;
if (responseHandler == null) responseHandler = (response) => response;
diff --git a/pubspec.yaml b/pubspec.yaml
index 11ff97c..f4adf23 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,10 +1,10 @@
name: shelf
-version: 0.7.1
+version: 0.7.2-dev
author: Dart Team <misc@dartlang.org>
description: Web Server Middleware for Dart
homepage: https://github.com/dart-lang/shelf
environment:
- sdk: '>=1.23.0 <2.0.0'
+ sdk: '>=1.24.0 <2.0.0'
dependencies:
async: '>=1.10.0 <3.0.0'
collection: '^1.5.0'
diff --git a/test/create_middleware_test.dart b/test/create_middleware_test.dart
index c17bcab..58da909 100644
--- a/test/create_middleware_test.dart
+++ b/test/create_middleware_test.dart
@@ -9,6 +9,11 @@
import 'test_util.dart';
+// TODO(kevmoo): remove this helper https://github.com/dart-lang/test/issues/740
+T _fail<T>(String message) {
+ fail(message);
+}
+
void main() {
test('forwards the request and response if both handlers are null', () {
var handler = const Pipeline()
@@ -71,7 +76,7 @@
test('with sync result, responseHandler is not called', () {
var middleware = createMiddleware(
requestHandler: (request) => _middlewareResponse,
- responseHandler: (response) => fail('should not be called'));
+ responseHandler: (response) => _fail('should not be called'));
var handler =
const Pipeline().addMiddleware(middleware).addHandler(syncHandler);
@@ -84,7 +89,7 @@
test('with async result, responseHandler is not called', () {
var middleware = createMiddleware(
requestHandler: (request) => new Future.value(_middlewareResponse),
- responseHandler: (response) => fail('should not be called'));
+ responseHandler: (response) => _fail('should not be called'));
var handler =
const Pipeline().addMiddleware(middleware).addHandler(syncHandler);
@@ -151,7 +156,7 @@
responseHandler: (response) {
throw 'middleware error';
},
- errorHandler: (e, s) => fail('should never get here'));
+ errorHandler: (e, s) => _fail('should never get here'));
var handler =
const Pipeline().addMiddleware(middleware).addHandler(syncHandler);
@@ -164,7 +169,7 @@
requestHandler: (request) {
throw 'middleware error';
},
- errorHandler: (e, s) => fail('should never get here'));
+ errorHandler: (e, s) => _fail('should never get here'));
var handler =
const Pipeline().addMiddleware(middleware).addHandler(syncHandler);
@@ -230,10 +235,7 @@
});
}
-Response _failHandler(Request request) {
- fail('should never get here');
- return null;
-}
+Response _failHandler(Request request) => _fail('should never get here');
final Response _middlewareResponse =
new Response.ok('middleware content', headers: {'from': 'middleware'});