Updated framework
This commit is contained in:
parent
8b2d9bf725
commit
1d8fb252be
5 changed files with 93 additions and 77 deletions
|
@ -3,6 +3,7 @@
|
|||
## 4.3.0
|
||||
|
||||
* Updated `container` to non nullable
|
||||
* Updated `angel` to non nullable
|
||||
|
||||
## 4.2.2
|
||||
|
||||
|
|
|
@ -45,7 +45,9 @@ class HookedService<Id, Data, T extends Service<Id, Data>>
|
|||
|
||||
HookedService(this.inner) {
|
||||
// Clone app instance
|
||||
if (inner.app != null) app = inner.app;
|
||||
if (inner.isAppActive) {
|
||||
app = inner.app;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -62,9 +64,9 @@ class HookedService<Id, Data, T extends Service<Id, Data>>
|
|||
return params['__responsectx'] as ResponseContext?;
|
||||
}
|
||||
|
||||
Map<String, dynamic>? _stripReq(Map<String, dynamic>? params) {
|
||||
Map<String, dynamic> _stripReq(Map<String, dynamic>? params) {
|
||||
if (params == null) {
|
||||
return params;
|
||||
return {};
|
||||
} else {
|
||||
return params.keys
|
||||
.where((key) => key != '__requestctx' && key != '__responsectx')
|
||||
|
@ -302,136 +304,136 @@ class HookedService<Id, Data, T extends Service<Id, Data>>
|
|||
}
|
||||
|
||||
@override
|
||||
Future<Data> read(Id id, [Map<String, dynamic>? _params]) {
|
||||
var params = _stripReq(_params);
|
||||
Future<Data> read(Id id, [Map<String, dynamic>? params]) {
|
||||
var localParams = _stripReq(params);
|
||||
return beforeRead
|
||||
._emit(HookedServiceEvent(false, _getRequest(_params),
|
||||
_getResponse(_params), inner, HookedServiceEvent.read,
|
||||
id: id, params: params))
|
||||
._emit(HookedServiceEvent(false, _getRequest(params),
|
||||
_getResponse(params), inner, HookedServiceEvent.read,
|
||||
id: id, params: localParams))
|
||||
.then((before) {
|
||||
if (before._canceled) {
|
||||
return afterRead
|
||||
._emit(HookedServiceEvent(true, _getRequest(_params),
|
||||
_getResponse(_params), inner, HookedServiceEvent.read,
|
||||
id: id, params: params, result: before.result))
|
||||
._emit(HookedServiceEvent(true, _getRequest(params),
|
||||
_getResponse(params), inner, HookedServiceEvent.read,
|
||||
id: id, params: localParams, result: before.result))
|
||||
.then((after) => after.result as Data);
|
||||
}
|
||||
|
||||
return inner.read(id, params).then((result) {
|
||||
return inner.read(id, localParams).then((result) {
|
||||
return afterRead
|
||||
._emit(HookedServiceEvent(true, _getRequest(_params),
|
||||
_getResponse(_params), inner, HookedServiceEvent.read,
|
||||
id: id, params: params, result: result))
|
||||
._emit(HookedServiceEvent(true, _getRequest(params),
|
||||
_getResponse(params), inner, HookedServiceEvent.read,
|
||||
id: id, params: localParams, result: result))
|
||||
.then((after) => after.result as Data);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Future<Data> create(Data data, [Map<String, dynamic>? _params]) {
|
||||
var params = _stripReq(_params);
|
||||
Future<Data> create(Data data, [Map<String, dynamic>? params]) {
|
||||
var localParams = _stripReq(params);
|
||||
return beforeCreated
|
||||
._emit(HookedServiceEvent(false, _getRequest(_params),
|
||||
_getResponse(_params), inner, HookedServiceEvent.created,
|
||||
data: data, params: params))
|
||||
._emit(HookedServiceEvent(false, _getRequest(params),
|
||||
_getResponse(params), inner, HookedServiceEvent.created,
|
||||
data: data, params: localParams))
|
||||
.then((before) {
|
||||
if (before._canceled) {
|
||||
return afterCreated
|
||||
._emit(HookedServiceEvent(true, _getRequest(_params),
|
||||
_getResponse(_params), inner, HookedServiceEvent.created,
|
||||
data: before.data, params: params, result: before.result))
|
||||
._emit(HookedServiceEvent(true, _getRequest(params),
|
||||
_getResponse(params), inner, HookedServiceEvent.created,
|
||||
data: before.data, params: localParams, result: before.result))
|
||||
.then((after) => after.result as Data);
|
||||
}
|
||||
|
||||
return inner.create(before.data!, params).then((result) {
|
||||
return inner.create(before.data!, localParams).then((result) {
|
||||
return afterCreated
|
||||
._emit(HookedServiceEvent(true, _getRequest(_params),
|
||||
_getResponse(_params), inner, HookedServiceEvent.created,
|
||||
data: before.data, params: params, result: result))
|
||||
._emit(HookedServiceEvent(true, _getRequest(params),
|
||||
_getResponse(params), inner, HookedServiceEvent.created,
|
||||
data: before.data, params: localParams, result: result))
|
||||
.then((after) => after.result as Data);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Future<Data> modify(Id id, Data data, [Map<String, dynamic>? _params]) {
|
||||
var params = _stripReq(_params);
|
||||
Future<Data> modify(Id id, Data data, [Map<String, dynamic>? params]) {
|
||||
var localParams = _stripReq(params);
|
||||
return beforeModified
|
||||
._emit(HookedServiceEvent(false, _getRequest(_params),
|
||||
_getResponse(_params), inner, HookedServiceEvent.modified,
|
||||
id: id, data: data, params: params))
|
||||
._emit(HookedServiceEvent(false, _getRequest(params),
|
||||
_getResponse(params), inner, HookedServiceEvent.modified,
|
||||
id: id, data: data, params: localParams))
|
||||
.then((before) {
|
||||
if (before._canceled) {
|
||||
return afterModified
|
||||
._emit(HookedServiceEvent(true, _getRequest(_params),
|
||||
_getResponse(_params), inner, HookedServiceEvent.modified,
|
||||
._emit(HookedServiceEvent(true, _getRequest(params),
|
||||
_getResponse(params), inner, HookedServiceEvent.modified,
|
||||
id: id,
|
||||
data: before.data,
|
||||
params: params,
|
||||
params: localParams,
|
||||
result: before.result))
|
||||
.then((after) => after.result as Data);
|
||||
}
|
||||
|
||||
return inner.modify(id, before.data!, params).then((result) {
|
||||
return inner.modify(id, before.data!, localParams).then((result) {
|
||||
return afterModified
|
||||
._emit(HookedServiceEvent(true, _getRequest(_params),
|
||||
_getResponse(_params), inner, HookedServiceEvent.created,
|
||||
id: id, data: before.data, params: params, result: result))
|
||||
._emit(HookedServiceEvent(true, _getRequest(params),
|
||||
_getResponse(params), inner, HookedServiceEvent.created,
|
||||
id: id, data: before.data, params: localParams, result: result))
|
||||
.then((after) => after.result as Data);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Future<Data> update(Id id, Data data, [Map<String, dynamic>? _params]) {
|
||||
var params = _stripReq(_params);
|
||||
Future<Data> update(Id id, Data data, [Map<String, dynamic>? params]) {
|
||||
var localParams = _stripReq(params);
|
||||
return beforeUpdated
|
||||
._emit(HookedServiceEvent(false, _getRequest(_params),
|
||||
_getResponse(_params), inner, HookedServiceEvent.updated,
|
||||
id: id, data: data, params: params))
|
||||
._emit(HookedServiceEvent(false, _getRequest(params),
|
||||
_getResponse(params), inner, HookedServiceEvent.updated,
|
||||
id: id, data: data, params: localParams))
|
||||
.then((before) {
|
||||
if (before._canceled) {
|
||||
return afterUpdated
|
||||
._emit(HookedServiceEvent(true, _getRequest(_params),
|
||||
_getResponse(_params), inner, HookedServiceEvent.updated,
|
||||
._emit(HookedServiceEvent(true, _getRequest(params),
|
||||
_getResponse(params), inner, HookedServiceEvent.updated,
|
||||
id: id,
|
||||
data: before.data,
|
||||
params: params,
|
||||
params: localParams,
|
||||
result: before.result))
|
||||
.then((after) => after.result as Data);
|
||||
}
|
||||
|
||||
return inner.update(id, before.data!, params).then((result) {
|
||||
return inner.update(id, before.data!, localParams).then((result) {
|
||||
return afterUpdated
|
||||
._emit(HookedServiceEvent(true, _getRequest(_params),
|
||||
_getResponse(_params), inner, HookedServiceEvent.updated,
|
||||
id: id, data: before.data, params: params, result: result))
|
||||
._emit(HookedServiceEvent(true, _getRequest(params),
|
||||
_getResponse(params), inner, HookedServiceEvent.updated,
|
||||
id: id, data: before.data, params: localParams, result: result))
|
||||
.then((after) => after.result as Data);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Future<Data> remove(Id id, [Map<String, dynamic>? _params]) {
|
||||
var params = _stripReq(_params);
|
||||
Future<Data> remove(Id id, [Map<String, dynamic>? params]) {
|
||||
var localParams = _stripReq(params);
|
||||
return beforeRemoved
|
||||
._emit(HookedServiceEvent(false, _getRequest(_params),
|
||||
_getResponse(_params), inner, HookedServiceEvent.removed,
|
||||
id: id, params: params))
|
||||
._emit(HookedServiceEvent(false, _getRequest(params),
|
||||
_getResponse(params), inner, HookedServiceEvent.removed,
|
||||
id: id, params: localParams))
|
||||
.then((before) {
|
||||
if (before._canceled) {
|
||||
return afterRemoved
|
||||
._emit(HookedServiceEvent(true, _getRequest(_params),
|
||||
_getResponse(_params), inner, HookedServiceEvent.removed,
|
||||
id: id, params: params, result: before.result))
|
||||
._emit(HookedServiceEvent(true, _getRequest(params),
|
||||
_getResponse(params), inner, HookedServiceEvent.removed,
|
||||
id: id, params: localParams, result: before.result))
|
||||
.then((after) => after.result) as Data;
|
||||
}
|
||||
|
||||
return inner.remove(id, params).then((result) {
|
||||
return inner.remove(id, localParams).then((result) {
|
||||
return afterRemoved
|
||||
._emit(HookedServiceEvent(true, _getRequest(_params),
|
||||
_getResponse(_params), inner, HookedServiceEvent.removed,
|
||||
id: id, params: params, result: result))
|
||||
._emit(HookedServiceEvent(true, _getRequest(params),
|
||||
_getResponse(params), inner, HookedServiceEvent.removed,
|
||||
id: id, params: localParams, result: result))
|
||||
.then((after) => after.result as Data);
|
||||
});
|
||||
});
|
||||
|
@ -512,7 +514,7 @@ class HookedServiceEvent<Id, Data, T extends Service<Id, Data>> {
|
|||
/// Resolves a service from the application.
|
||||
///
|
||||
/// Shorthand for `e.service.app.service(...)`.
|
||||
Service? getService(Pattern path) => service.app!.findService(path);
|
||||
Service? getService(Pattern path) => service.app.findService(path);
|
||||
|
||||
bool _canceled = false;
|
||||
final String _eventName;
|
||||
|
@ -522,7 +524,7 @@ class HookedServiceEvent<Id, Data, T extends Service<Id, Data>> {
|
|||
Map<String, dynamic>? _params;
|
||||
final RequestContext? _request;
|
||||
final ResponseContext? _response;
|
||||
var result;
|
||||
dynamic result;
|
||||
|
||||
String get eventName => _eventName;
|
||||
|
||||
|
@ -532,7 +534,7 @@ class HookedServiceEvent<Id, Data, T extends Service<Id, Data>> {
|
|||
|
||||
bool get isBefore => !isAfter;
|
||||
|
||||
Map? get params => _params;
|
||||
Map get params => _params ?? {};
|
||||
|
||||
RequestContext? get request => _request;
|
||||
|
||||
|
|
|
@ -68,7 +68,20 @@ class Service<Id, Data> extends Routable {
|
|||
List<RequestHandler> get bootstrappers => [];
|
||||
|
||||
/// The [Angel] app powering this service.
|
||||
Angel? app;
|
||||
Angel? _app;
|
||||
|
||||
Angel get app {
|
||||
if (_app == null) {
|
||||
throw ArgumentError("Angel is not initialized");
|
||||
}
|
||||
return _app!;
|
||||
}
|
||||
|
||||
set app(Angel angel) {
|
||||
_app = angel;
|
||||
}
|
||||
|
||||
bool get isAppActive => _app != null;
|
||||
|
||||
/// Closes this service, including any database connections or stream controllers.
|
||||
@override
|
||||
|
@ -223,12 +236,12 @@ class Service<Id, Data> extends Routable {
|
|||
var handlers = List<RequestHandler>.from(handlerss);
|
||||
|
||||
// Add global middleware if declared on the instance itself
|
||||
var before = getAnnotation<Middleware>(service, app!.container.reflector);
|
||||
var before = getAnnotation<Middleware>(service, app.container.reflector);
|
||||
|
||||
if (before != null) handlers.addAll(before.handlers);
|
||||
|
||||
var indexMiddleware =
|
||||
getAnnotation<Middleware>(service.index, app!.container.reflector);
|
||||
getAnnotation<Middleware>(service.index, app.container.reflector);
|
||||
get('/', (req, res) {
|
||||
return index(mergeMap([
|
||||
{'query': req.queryParameters},
|
||||
|
@ -241,7 +254,7 @@ class Service<Id, Data> extends Routable {
|
|||
]);
|
||||
|
||||
var createMiddleware =
|
||||
getAnnotation<Middleware>(service.create, app!.container.reflector);
|
||||
getAnnotation<Middleware>(service.create, app.container.reflector);
|
||||
post('/', (req, ResponseContext res) {
|
||||
return req.parseBody().then((_) async {
|
||||
return await create(
|
||||
|
@ -261,7 +274,7 @@ class Service<Id, Data> extends Routable {
|
|||
]);
|
||||
|
||||
var readMiddleware =
|
||||
getAnnotation<Middleware>(service.read, app!.container.reflector);
|
||||
getAnnotation<Middleware>(service.read, app.container.reflector);
|
||||
|
||||
get('/:id', (req, res) {
|
||||
return read(
|
||||
|
@ -277,7 +290,7 @@ class Service<Id, Data> extends Routable {
|
|||
]);
|
||||
|
||||
var modifyMiddleware =
|
||||
getAnnotation<Middleware>(service.modify, app!.container.reflector);
|
||||
getAnnotation<Middleware>(service.modify, app.container.reflector);
|
||||
|
||||
patch('/:id', (req, res) {
|
||||
return req.parseBody().then((_) async {
|
||||
|
@ -296,7 +309,7 @@ class Service<Id, Data> extends Routable {
|
|||
]);
|
||||
|
||||
var updateMiddleware =
|
||||
getAnnotation<Middleware>(service.update, app!.container.reflector);
|
||||
getAnnotation<Middleware>(service.update, app.container.reflector);
|
||||
post('/:id', (req, res) {
|
||||
return req.parseBody().then((_) async {
|
||||
return await update(
|
||||
|
@ -330,7 +343,7 @@ class Service<Id, Data> extends Routable {
|
|||
]);
|
||||
|
||||
var removeMiddleware =
|
||||
getAnnotation<Middleware>(service.remove, app!.container.reflector);
|
||||
getAnnotation<Middleware>(service.remove, app.container.reflector);
|
||||
delete('/', (req, res) {
|
||||
return remove(
|
||||
'' as Id,
|
||||
|
|
|
@ -3,7 +3,7 @@ library performance.hello;
|
|||
|
||||
import 'dart:io';
|
||||
|
||||
Future<Null> main() {
|
||||
Future<void> main() {
|
||||
return HttpServer.bind('127.0.0.1', 3000, shared: true).then((server) {
|
||||
print('Listening at http://${server.address.address}:${server.port}');
|
||||
|
||||
|
|
|
@ -135,8 +135,8 @@ void main() {
|
|||
var type = e.isBefore ? 'before' : 'after';
|
||||
print('Params to $type ${e.eventName}: ${e.params}');
|
||||
expect(e.params, isMap);
|
||||
expect(e.params?.keys, contains('provider'));
|
||||
expect(e.params?['provider'], const IsInstanceOf<Providers>());
|
||||
expect(e.params.keys, contains('provider'));
|
||||
expect(e.params['provider'], const IsInstanceOf<Providers>());
|
||||
}
|
||||
|
||||
svc
|
||||
|
|
Loading…
Reference in a new issue