.22
This commit is contained in:
parent
ed989984a2
commit
ba1ad07c90
4 changed files with 33 additions and 23 deletions
|
@ -1,3 +1,7 @@
|
||||||
|
# 2.0.0-alpha.22
|
||||||
|
* Update pipeline handling mechanism, and inject a `MiddlewarePipelineIterator`.
|
||||||
|
* This allows routes to know where in the resolution process they exist, at runtime.
|
||||||
|
|
||||||
# 2.0.0-alpha.21
|
# 2.0.0-alpha.21
|
||||||
* Update for `angel_route@3.0.4` compatibility.
|
* Update for `angel_route@3.0.4` compatibility.
|
||||||
* Add `readAsBytes` and `readAsString` to `UploadedFile`.
|
* Add `readAsBytes` and `readAsString` to `UploadedFile`.
|
||||||
|
|
|
@ -99,10 +99,10 @@ abstract class Driver<
|
||||||
|
|
||||||
Tuple4<List, Map<String, dynamic>, ParseResult<RouteResult>,
|
Tuple4<List, Map<String, dynamic>, ParseResult<RouteResult>,
|
||||||
MiddlewarePipeline> resolveTuple() {
|
MiddlewarePipeline> resolveTuple() {
|
||||||
Router r = app.optimizedRouter;
|
var r = app.optimizedRouter;
|
||||||
var resolved =
|
var resolved =
|
||||||
r.resolveAbsolute(path, method: req.method, strip: false);
|
r.resolveAbsolute(path, method: req.method, strip: false);
|
||||||
var pipeline = new MiddlewarePipeline(resolved);
|
var pipeline = new MiddlewarePipeline<RequestHandler>(resolved);
|
||||||
return new Tuple4(
|
return new Tuple4(
|
||||||
pipeline.handlers,
|
pipeline.handlers,
|
||||||
resolved.fold<Map<String, dynamic>>(
|
resolved.fold<Map<String, dynamic>>(
|
||||||
|
@ -116,11 +116,16 @@ abstract class Driver<
|
||||||
var tuple = app.isProduction
|
var tuple = app.isProduction
|
||||||
? app.handlerCache.putIfAbsent(cacheKey, resolveTuple)
|
? app.handlerCache.putIfAbsent(cacheKey, resolveTuple)
|
||||||
: resolveTuple();
|
: resolveTuple();
|
||||||
|
var line = tuple.item4 as MiddlewarePipeline<RequestHandler>;
|
||||||
|
var it = MiddlewarePipelineIterator<RequestHandler>(line);
|
||||||
|
|
||||||
req.params.addAll(tuple.item2);
|
req.params.addAll(tuple.item2);
|
||||||
|
|
||||||
req.container
|
req.container
|
||||||
..registerSingleton<MiddlewarePipeline>(tuple.item4)
|
..registerSingleton<MiddlewarePipeline>(tuple.item4)
|
||||||
|
..registerSingleton<MiddlewarePipeline<RequestHandler>>(line)
|
||||||
|
..registerSingleton<MiddlewarePipelineIterator>(it)
|
||||||
|
..registerSingleton<MiddlewarePipelineIterator<RequestHandler>>(it)
|
||||||
..registerSingleton<ParseResult<RouteResult>>(tuple.item3)
|
..registerSingleton<ParseResult<RouteResult>>(tuple.item3)
|
||||||
..registerSingleton<ParseResult>(tuple.item3);
|
..registerSingleton<ParseResult>(tuple.item3);
|
||||||
|
|
||||||
|
@ -129,24 +134,8 @@ abstract class Driver<
|
||||||
.registerSingleton<Stopwatch>(new Stopwatch()..start());
|
.registerSingleton<Stopwatch>(new Stopwatch()..start());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tuple.item1.isEmpty) {
|
return runPipeline(it, req, res, app)
|
||||||
print(req.uri);
|
.then((_) => sendResponse(request, response, req, res));
|
||||||
print('${req.path} => ${tuple.item1}');
|
|
||||||
}
|
|
||||||
|
|
||||||
var pipeline = tuple.item1;
|
|
||||||
var it = pipeline.iterator;
|
|
||||||
|
|
||||||
var runPipeline = pipeline.isEmpty
|
|
||||||
? null
|
|
||||||
: Future.doWhile(() => !it.moveNext()
|
|
||||||
? new Future.value(false)
|
|
||||||
: app.executeHandler(it.current, req, res));
|
|
||||||
|
|
||||||
return runPipeline == null
|
|
||||||
? sendResponse(request, response, req, res)
|
|
||||||
: runPipeline
|
|
||||||
.then((_) => sendResponse(request, response, req, res));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (useZone == false) {
|
if (useZone == false) {
|
||||||
|
@ -355,4 +344,21 @@ abstract class Driver<
|
||||||
return closeResponse(response).then(_cleanup);
|
return closeResponse(response).then(_cleanup);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Runs a [MiddlewarePipeline].
|
||||||
|
static Future<void> runPipeline<RequestContextType extends RequestContext,
|
||||||
|
ResponseContextType extends ResponseContext>(
|
||||||
|
MiddlewarePipelineIterator<RequestHandler> it,
|
||||||
|
RequestContextType req,
|
||||||
|
ResponseContextType res,
|
||||||
|
Angel app) async {
|
||||||
|
while (it.moveNext()) {
|
||||||
|
var current = it.current.handlers.iterator;
|
||||||
|
|
||||||
|
while (current.moveNext()) {
|
||||||
|
var result = await app.executeHandler(current.current, req, res);
|
||||||
|
if (result != true) break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,7 +41,7 @@ class Angel extends Routable {
|
||||||
Tuple4<List, Map<String, dynamic>, ParseResult<RouteResult>,
|
Tuple4<List, Map<String, dynamic>, ParseResult<RouteResult>,
|
||||||
MiddlewarePipeline>> handlerCache = new HashMap();
|
MiddlewarePipeline>> handlerCache = new HashMap();
|
||||||
|
|
||||||
Router _flattened;
|
Router<RequestHandler> _flattened;
|
||||||
bool _isProduction;
|
bool _isProduction;
|
||||||
Angel _parent;
|
Angel _parent;
|
||||||
|
|
||||||
|
@ -62,7 +62,7 @@ class Angel extends Routable {
|
||||||
Map<dynamic, InjectionRequest> get preContained => _preContained;
|
Map<dynamic, InjectionRequest> get preContained => _preContained;
|
||||||
|
|
||||||
/// Returns the [flatten]ed version of this router in production.
|
/// Returns the [flatten]ed version of this router in production.
|
||||||
Router get optimizedRouter => _flattened ?? this;
|
Router<RequestHandler> get optimizedRouter => _flattened ?? this;
|
||||||
|
|
||||||
/// Determines whether to allow HTTP request method overrides.
|
/// Determines whether to allow HTTP request method overrides.
|
||||||
bool allowMethodOverrides = true;
|
bool allowMethodOverrides = true;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
name: angel_framework
|
name: angel_framework
|
||||||
version: 2.0.0-alpha.21
|
version: 2.0.0-alpha.22
|
||||||
description: A high-powered HTTP server with dependency injection, routing and much more.
|
description: A high-powered HTTP server with dependency injection, routing and much more.
|
||||||
author: Tobe O <thosakwe@gmail.com>
|
author: Tobe O <thosakwe@gmail.com>
|
||||||
homepage: https://github.com/angel-dart/angel_framework
|
homepage: https://github.com/angel-dart/angel_framework
|
||||||
|
|
Loading…
Reference in a new issue