@shrub/express 0.5.47 → 0.5.48
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,15 +1,17 @@
|
|
|
1
|
-
import { RequestHandler } from "express";
|
|
1
|
+
import { NextFunction, Request, RequestHandler, Response } from "express";
|
|
2
2
|
import { PathParams } from "express-serve-static-core";
|
|
3
3
|
import { IExpressApplication } from "./app";
|
|
4
4
|
import { Constructor } from "./controller";
|
|
5
5
|
export declare type ControllerInvokerConstructor<T> = {
|
|
6
6
|
new (options: IControllerInvokerOptions): T;
|
|
7
7
|
};
|
|
8
|
+
export declare type ControllerErrorRequestHandler = (err: any, req: Request, res: Response, next: NextFunction, retry: Function) => void;
|
|
8
9
|
/** Defines options for a controller invoker. */
|
|
9
10
|
export interface IControllerInvokerOptions {
|
|
10
11
|
readonly app: IExpressApplication;
|
|
11
12
|
readonly handler?: RequestHandler;
|
|
12
13
|
readonly prepare?: RequestHandler;
|
|
14
|
+
readonly error?: ControllerErrorRequestHandler;
|
|
13
15
|
}
|
|
14
16
|
/** Defines options when creating a new controller invoker. */
|
|
15
17
|
export interface ICreateControllerInvokerOptions {
|
|
@@ -17,6 +19,11 @@ export interface ICreateControllerInvokerOptions {
|
|
|
17
19
|
readonly handler?: RequestHandler;
|
|
18
20
|
/** A handler that gets invoked prior to invoking any middleware and is useful for pre-handling a request/response. */
|
|
19
21
|
readonly prepare?: RequestHandler;
|
|
22
|
+
/**
|
|
23
|
+
* A callback that will get called when a request generates an error and allows the ability to retry a request.
|
|
24
|
+
* Note: when retrying a request there is no need to invoke 'next'; the retry attempt will rebuild the request/response and invoke the request pipeline again.
|
|
25
|
+
*/
|
|
26
|
+
readonly error?: ControllerErrorRequestHandler;
|
|
20
27
|
}
|
|
21
28
|
/** A service for creating controller invokers. */
|
|
22
29
|
export interface IControllerInvokerService {
|
|
@@ -25,28 +25,41 @@ class ControllerInvoker {
|
|
|
25
25
|
invokeAction(options) {
|
|
26
26
|
const router = controller_1.controller(options.controller);
|
|
27
27
|
return new Promise((resolve, reject) => {
|
|
28
|
-
// create the express Request object to pass down the request chain
|
|
29
|
-
const req = this.createExpressRequest(options);
|
|
30
|
-
// create the express Response object that will resovle the Promise when the response has ended (i.e. when res.end is inovked)
|
|
31
|
-
const res = this.createExpressResponse(resolve);
|
|
32
28
|
// if an error is returned at any point reject the promise
|
|
33
|
-
const nextOrReject = (err, next) => {
|
|
29
|
+
const nextOrReject = (err, req, res, next) => {
|
|
34
30
|
if (err) {
|
|
35
|
-
|
|
31
|
+
if (this.options.error) {
|
|
32
|
+
// 1) if the error handler invokes next reject using the provided error
|
|
33
|
+
// 2) there doesn't seem to be a good way to retry a request so call invokeAction to rebuild request/response and try again
|
|
34
|
+
this.options.error(err, req, res, (err2) => reject(err2), () => invokeAction());
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
reject(err);
|
|
38
|
+
}
|
|
36
39
|
}
|
|
37
40
|
else {
|
|
38
41
|
next();
|
|
39
42
|
}
|
|
40
43
|
};
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
const invokeAction = () => {
|
|
45
|
+
// create the express Request object to pass down the request chain
|
|
46
|
+
const req = this.createExpressRequest(options);
|
|
47
|
+
// create the express Response object that will resovle the Promise when the response has ended (i.e. when res.end is inovked)
|
|
48
|
+
const res = this.createExpressResponse(resolve);
|
|
49
|
+
// first invoke prepare
|
|
50
|
+
this.prepare(req, res, (err) => nextOrReject(err, req, res, () => {
|
|
51
|
+
// if successful, invoke the application middleware pipeline
|
|
52
|
+
this.options.app(req, res, (err) => nextOrReject(err, req, res, () => {
|
|
53
|
+
// next, invoke the handler prior to invoking the route/controller
|
|
54
|
+
// the router handles invoking the controller and if next is invoked assume an error or a 404
|
|
55
|
+
this.handler(req, res, (err) => nextOrReject(err, req, res, () => router(req, res, (err) => {
|
|
56
|
+
err = err || new Error(`Path ${options.path} not found.`);
|
|
57
|
+
nextOrReject(err, req, res, () => reject(new Error("Failed to process request successfully.")));
|
|
58
|
+
})));
|
|
59
|
+
}));
|
|
48
60
|
}));
|
|
49
|
-
}
|
|
61
|
+
};
|
|
62
|
+
invokeAction();
|
|
50
63
|
});
|
|
51
64
|
}
|
|
52
65
|
createExpressRequest(options) {
|
|
@@ -108,7 +121,12 @@ let ControllerInvokerService = class ControllerInvokerService {
|
|
|
108
121
|
this.app = app;
|
|
109
122
|
}
|
|
110
123
|
createControllerInvoker(ctor, options) {
|
|
111
|
-
return new ctor({
|
|
124
|
+
return new ctor({
|
|
125
|
+
app: this.app,
|
|
126
|
+
handler: options && options.handler,
|
|
127
|
+
prepare: options && options.prepare,
|
|
128
|
+
error: options && options.error
|
|
129
|
+
});
|
|
112
130
|
}
|
|
113
131
|
};
|
|
114
132
|
ControllerInvokerService = __decorate([
|
|
@@ -116,4 +134,4 @@ ControllerInvokerService = __decorate([
|
|
|
116
134
|
__param(0, app_1.IExpressApplication)
|
|
117
135
|
], ControllerInvokerService);
|
|
118
136
|
exports.ControllerInvokerService = ControllerInvokerService;
|
|
119
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
137
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbGxlci1pbnZva2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbnRyb2xsZXItaW52b2tlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxzQ0FBdUQ7QUFHdkQsK0JBQTRDO0FBQzVDLDZDQUF1RDtBQTZDMUMsUUFBQSx5QkFBeUIsR0FBRyxvQkFBYSxDQUE0Qiw0QkFBNEIsQ0FBQyxDQUFDO0FBRWhILGdGQUFnRjtBQUNoRixNQUFzQixpQkFBaUI7SUFJbkMsWUFBNkIsT0FBa0M7UUFBbEMsWUFBTyxHQUFQLE9BQU8sQ0FBMkI7UUFDM0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQzVFLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztJQUNoRixDQUFDO0lBRUQsb0hBQW9IO0lBQzFHLFlBQVksQ0FBYyxPQUErQztRQUMvRSxNQUFNLE1BQU0sR0FBRyx1QkFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ25DLDBEQUEwRDtZQUMxRCxNQUFNLFlBQVksR0FBd0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtnQkFDOUQsSUFBSSxHQUFHLEVBQUU7b0JBQ0wsSUFBSSxJQUFJLENBQUMsT0FBTyxD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
|
|
@@ -22,28 +22,41 @@ export class ControllerInvoker {
|
|
|
22
22
|
invokeAction(options) {
|
|
23
23
|
const router = controller(options.controller);
|
|
24
24
|
return new Promise((resolve, reject) => {
|
|
25
|
-
// create the express Request object to pass down the request chain
|
|
26
|
-
const req = this.createExpressRequest(options);
|
|
27
|
-
// create the express Response object that will resovle the Promise when the response has ended (i.e. when res.end is inovked)
|
|
28
|
-
const res = this.createExpressResponse(resolve);
|
|
29
25
|
// if an error is returned at any point reject the promise
|
|
30
|
-
const nextOrReject = (err, next) => {
|
|
26
|
+
const nextOrReject = (err, req, res, next) => {
|
|
31
27
|
if (err) {
|
|
32
|
-
|
|
28
|
+
if (this.options.error) {
|
|
29
|
+
// 1) if the error handler invokes next reject using the provided error
|
|
30
|
+
// 2) there doesn't seem to be a good way to retry a request so call invokeAction to rebuild request/response and try again
|
|
31
|
+
this.options.error(err, req, res, (err2) => reject(err2), () => invokeAction());
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
reject(err);
|
|
35
|
+
}
|
|
33
36
|
}
|
|
34
37
|
else {
|
|
35
38
|
next();
|
|
36
39
|
}
|
|
37
40
|
};
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
const invokeAction = () => {
|
|
42
|
+
// create the express Request object to pass down the request chain
|
|
43
|
+
const req = this.createExpressRequest(options);
|
|
44
|
+
// create the express Response object that will resovle the Promise when the response has ended (i.e. when res.end is inovked)
|
|
45
|
+
const res = this.createExpressResponse(resolve);
|
|
46
|
+
// first invoke prepare
|
|
47
|
+
this.prepare(req, res, (err) => nextOrReject(err, req, res, () => {
|
|
48
|
+
// if successful, invoke the application middleware pipeline
|
|
49
|
+
this.options.app(req, res, (err) => nextOrReject(err, req, res, () => {
|
|
50
|
+
// next, invoke the handler prior to invoking the route/controller
|
|
51
|
+
// the router handles invoking the controller and if next is invoked assume an error or a 404
|
|
52
|
+
this.handler(req, res, (err) => nextOrReject(err, req, res, () => router(req, res, (err) => {
|
|
53
|
+
err = err || new Error(`Path ${options.path} not found.`);
|
|
54
|
+
nextOrReject(err, req, res, () => reject(new Error("Failed to process request successfully.")));
|
|
55
|
+
})));
|
|
56
|
+
}));
|
|
45
57
|
}));
|
|
46
|
-
}
|
|
58
|
+
};
|
|
59
|
+
invokeAction();
|
|
47
60
|
});
|
|
48
61
|
}
|
|
49
62
|
createExpressRequest(options) {
|
|
@@ -104,7 +117,12 @@ let ControllerInvokerService = class ControllerInvokerService {
|
|
|
104
117
|
this.app = app;
|
|
105
118
|
}
|
|
106
119
|
createControllerInvoker(ctor, options) {
|
|
107
|
-
return new ctor({
|
|
120
|
+
return new ctor({
|
|
121
|
+
app: this.app,
|
|
122
|
+
handler: options && options.handler,
|
|
123
|
+
prepare: options && options.prepare,
|
|
124
|
+
error: options && options.error
|
|
125
|
+
});
|
|
108
126
|
}
|
|
109
127
|
};
|
|
110
128
|
ControllerInvokerService = __decorate([
|
|
@@ -112,4 +130,4 @@ ControllerInvokerService = __decorate([
|
|
|
112
130
|
__param(0, IExpressApplication)
|
|
113
131
|
], ControllerInvokerService);
|
|
114
132
|
export { ControllerInvokerService };
|
|
115
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
133
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbGxlci1pbnZva2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRyb2xsZXItaW52b2tlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUd2RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDNUMsT0FBTyxFQUFFLFVBQVUsRUFBZSxNQUFNLGNBQWMsQ0FBQztBQTZDdkQsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsYUFBYSxDQUE0Qiw0QkFBNEIsQ0FBQyxDQUFDO0FBRWhILGdGQUFnRjtBQUNoRixNQUFNLE9BQWdCLGlCQUFpQjtJQUluQyxZQUE2QixPQUFrQztRQUFsQyxZQUFPLEdBQVAsT0FBTyxDQUEyQjtRQUMzRCxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDNUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO0lBQ2hGLENBQUM7SUFFRCxvSEFBb0g7SUFDMUcsWUFBWSxDQUFjLE9BQStDO1FBQy9FLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDOUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNuQywwREFBMEQ7WUFDMUQsTUFBTSxZ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
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shrub/express",
|
|
3
3
|
"description": "A module that adds support for Express based apps.",
|
|
4
|
-
"version": "0.5.
|
|
4
|
+
"version": "0.5.48",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -25,12 +25,12 @@
|
|
|
25
25
|
"test": "jest"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@shrub/core": "0.5.
|
|
29
|
-
"@shrub/http": "0.5.
|
|
28
|
+
"@shrub/core": "0.5.48",
|
|
29
|
+
"@shrub/http": "0.5.48",
|
|
30
30
|
"express": "^4.17.1"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
33
|
"@types/express": "4.17.9"
|
|
34
34
|
},
|
|
35
|
-
"gitHead": "
|
|
35
|
+
"gitHead": "881c0c9aeedab585880eade8f8a3c811e7c6290b"
|
|
36
36
|
}
|