diff --git a/CHANGELOG.md b/CHANGELOG.md index 4b925280..c6499aec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,2 +1,5 @@ +# 2.0.7 +* Minor strong mode updates to work with stricter Dart 2. + # 2.0.5 * Patch to work with `combinator@1.0.0`. \ No newline at end of file diff --git a/analysis_options.yaml b/analysis_options.yaml index 518eb901..01269123 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -1,2 +1,3 @@ analyzer: - strong-mode: true \ No newline at end of file + strong-mode: + implicit-casts: false \ No newline at end of file diff --git a/lib/browser.dart b/lib/browser.dart index e6cffb80..97ac1d34 100644 --- a/lib/browser.dart +++ b/lib/browser.dart @@ -39,7 +39,7 @@ abstract class BrowserRouter extends Router { void listen(); /// Identical to [all]. - Route on(Pattern path, handler, {List middleware}); + Route on(String path, handler, {List middleware}); } abstract class _BrowserRouterImpl extends Router implements BrowserRouter { @@ -64,7 +64,7 @@ abstract class _BrowserRouterImpl extends Router implements BrowserRouter { @override void go(Iterable linkParams) => _goTo(navigate(linkParams)); - Route on(Pattern path, handler, {List middleware}) => + Route on(String path, handler, {List middleware}) => all(path, handler, middleware: middleware); void prepareAnchors() { @@ -176,7 +176,7 @@ class _PushStateRouter extends _BrowserRouterImpl { void handleState(state) { if (state is Map && state.containsKey('path')) { - var path = state['path']; + var path = state['path'].toString(); final resolved = resolveAbsolute(path).first; if (resolved != null && resolved.route != _current) { diff --git a/lib/src/grammar.dart b/lib/src/grammar.dart index 10c67b3c..ecb6510a 100644 --- a/lib/src/grammar.dart +++ b/lib/src/grammar.dart @@ -3,34 +3,34 @@ part of angel_route.src.router; class RouteGrammar { static final RegExp rgx = new RegExp(r'\((.+)\)'); static final Parser notSlash = - match(new RegExp(r'[^/]+')).value((r) => r.span.text); + match(new RegExp(r'[^/]+')).value((r) => r.span.text); static final Parser regExp = - match(rgx).map((r) => new RegExp(r.scanner.lastMatch[1])); + match(rgx).map((r) => new RegExp(r.scanner.lastMatch[1])); static final Parser parameterName = - match(new RegExp(r':([A-Za-z0-9_]+)')) + match(new RegExp(r':([A-Za-z0-9_]+)')) .value((r) => r.span.text.substring(1)); static final Parser parameterSegment = chain([ parameterName, - match('?').value((r) => true).opt(), + match('?').value((r) => true).opt(), regExp.opt(), ]).map((r) { - var s = new ParameterSegment(r.value[0], r.value[2]); + var s = new ParameterSegment(r.value[0].toString(), r.value[2] as RegExp); return r.value[1] == true ? new OptionalSegment(s) : s; }); static final Parser wildcardSegment = - match('*').value((r) => new WildcardSegment()); + match('*').value((r) => new WildcardSegment()); static final Parser constantSegment = notSlash.map((r) => new ConstantSegment(r.value)); static final Parser routeSegment = - any([parameterSegment, wildcardSegment, constantSegment]); + any([parameterSegment, wildcardSegment, constantSegment]); static final Parser routeDefinition = routeSegment .separatedBy(match('/')) - .map((r) => new RouteDefinition(r.value ?? [])) + .map((r) => new RouteDefinition(r.value ?? [])) .surroundedBy(match('/').star().opt()); } @@ -60,7 +60,8 @@ class RouteDefinition { if (out == null) out = s.compile(isLast); else - out = s.compileNext(out.then(match('/')).index(0), isLast); + out = s.compileNext( + out.then(match('/')).index(0).cast>(), isLast); } return out; @@ -86,13 +87,13 @@ class ConstantSegment extends RouteSegment { @override Parser> compile(bool isLast) { - return match(text).value((r) => {}); + return match>(text).value((r) => {}); } @override Parser> compileNext( Parser> p, bool isLast) { - return p.then(compile(isLast)).index(0); + return p.then(compile(isLast)).index(0).cast>(); } } @@ -115,7 +116,7 @@ class WildcardSegment extends RouteSegment { @override Parser> compileNext( Parser> p, bool isLast) { - return p.then(_compile(isLast)).index(0); + return p.then(_compile(isLast)).index(0).cast>(); } } @@ -137,9 +138,11 @@ class OptionalSegment extends ParameterSegment { @override Parser> compileNext( Parser> p, bool isLast) { - return p.then(_compile().opt()).map((r) { - if (r.value[1] == null) return r.value[0]; - return r.value[0]..addAll({name: Uri.decodeComponent(r.value[1])}); + var pp = p.then(_compile().opt()); + return pp.map((r) { + if (r.value[1] == null) return r.value[0] as Map; + return (r.value[0] as Map) + ..addAll({name: Uri.decodeComponent(r.value[1].toString())}); }); } } @@ -156,9 +159,9 @@ class ParameterSegment extends RouteSegment { return 'Param: $name'; } - Parser> _compile() { + Parser _compile() { return regExp != null - ? match(regExp).value((r) => r.span.text) + ? match(regExp).value((r) => r.span.text) : RouteGrammar.notSlash; } @@ -171,7 +174,8 @@ class ParameterSegment extends RouteSegment { Parser> compileNext( Parser> p, bool isLast) { return p.then(_compile()).map((r) { - return r.value[0]..addAll({name: Uri.decodeComponent(r.value[1])}); + return (r.value[0] as Map) + ..addAll({name: Uri.decodeComponent(r.value[1].toString())}); }); } } diff --git a/lib/src/middleware_pipeline.dart b/lib/src/middleware_pipeline.dart index 267a4edc..ab22b987 100644 --- a/lib/src/middleware_pipeline.dart +++ b/lib/src/middleware_pipeline.dart @@ -18,5 +18,6 @@ class MiddlewarePipeline { return _handlers = handlers; } - MiddlewarePipeline(this.routingResults); + MiddlewarePipeline(Iterable routingResults) + : this.routingResults = routingResults.toList(); } diff --git a/lib/src/route.dart b/lib/src/route.dart index 20208b39..f342930c 100644 --- a/lib/src/route.dart +++ b/lib/src/route.dart @@ -14,7 +14,7 @@ class Route { : _routeDefinition = RouteGrammar.routeDefinition .parse(new SpanScanner(path.replaceAll(_straySlashes, ''))) .value { - if (_routeDefinition?.segments?.isNotEmpty != true) _parser = match('').value((r) => {}); + if (_routeDefinition?.segments?.isNotEmpty != true) _parser = match>('').value((r) => {}); } factory Route.join(Route a, Route b) { diff --git a/pubspec.yaml b/pubspec.yaml index ba62bdf6..ea18fd98 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: angel_route description: A powerful, isomorphic routing library for Dart. -version: 2.0.6 +version: 2.0.7 author: Tobe O homepage: https://github.com/angel-dart/angel_route environment: diff --git a/test/navigate_test.dart b/test/navigate_test.dart index befff514..7ae04bc8 100644 --- a/test/navigate_test.dart +++ b/test/navigate_test.dart @@ -8,7 +8,7 @@ main() { router.get('/user/:id', 'GET'); router.get('/first/:first/last/:last', 'GET').name = 'full_name'; - navigate(params) { + navigate(Iterable params) { final uri = router.navigate(params); print('Uri: $uri'); return uri; diff --git a/test/server_test.dart b/test/server_test.dart index 5a2ee99d..15497c7c 100644 --- a/test/server_test.dart +++ b/test/server_test.dart @@ -89,10 +89,11 @@ main() { if (pipeline.handlers.isEmpty) { res - ..statusCode = HttpStatus.NOT_FOUND + ..statusCode = 404 ..writeln('404 Not Found'); } else { - for (final handler in pipeline.handlers) { + for (bool Function(HttpRequest, HttpResponse) handler + in pipeline.handlers) { if (!await handler(req, res)) break; } }