@quatrain/api-server-express 1.1.13 → 1.1.14
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.
- package/dist/adapters/ExpressAdapter.d.ts +7 -5
- package/dist/adapters/ExpressAdapter.d.ts.map +1 -1
- package/dist/adapters/ExpressAdapter.js +27 -12
- package/dist/adapters/ExpressAdapter.js.map +1 -1
- package/package.json +3 -3
- package/src/adapters/ExpressAdapter.test.ts +3 -0
- package/src/adapters/ExpressAdapter.ts +41 -19
|
@@ -8,11 +8,13 @@ export declare class ExpressAdapter implements ServerAdapter {
|
|
|
8
8
|
});
|
|
9
9
|
private mapRequestResponse;
|
|
10
10
|
private wrapHandler;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
private normalizeHandler;
|
|
12
|
+
get(path: string, ...handlers: (ApiHandler | any)[]): void;
|
|
13
|
+
post(path: string, ...handlers: (ApiHandler | any)[]): void;
|
|
14
|
+
put(path: string, ...handlers: (ApiHandler | any)[]): void;
|
|
15
|
+
patch(path: string, ...handlers: (ApiHandler | any)[]): void;
|
|
16
|
+
delete(path: string, ...handlers: (ApiHandler | any)[]): void;
|
|
17
|
+
use(...args: any[]): void;
|
|
16
18
|
addMiddleware(middleware: ApiMiddleware): void;
|
|
17
19
|
createRouter(path: string): ServerAdapter;
|
|
18
20
|
start(port: number, callback?: () => void): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExpressAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/ExpressAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAA;AAC7B,OAAO,EAAE,aAAa,EAAE,UAAU,EAA2B,eAAe,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAMnI,qBAAa,cAAe,YAAW,aAAa;IAE9C,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,MAAM;gBADN,WAAW,GAAE,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,MAAkB,EAC7D,MAAM,GAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAO;IAkB9C,OAAO,CAAC,kBAAkB;IAiC1B,OAAO,CAAC,WAAW;
|
|
1
|
+
{"version":3,"file":"ExpressAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/ExpressAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAA;AAC7B,OAAO,EAAE,aAAa,EAAE,UAAU,EAA2B,eAAe,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAMnI,qBAAa,cAAe,YAAW,aAAa;IAE9C,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,MAAM;gBADN,WAAW,GAAE,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,MAAkB,EAC7D,MAAM,GAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAO;IAkB9C,OAAO,CAAC,kBAAkB;IAiC1B,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,gBAAgB;IAaxB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC,UAAU,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI;IAW1D,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC,UAAU,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI;IAW3D,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC,UAAU,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI;IAW1D,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC,UAAU,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI;IAW5D,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC,UAAU,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI;IAU7D,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IASzB,aAAa,CAAC,UAAU,EAAE,aAAa,GAAG,IAAI;IAmB9C,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa;IAYzC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,IAAI,GAAG,IAAI;IAahD,iBAAiB,IAAI,GAAG;IAYxB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,GAAE,MAAe,GAAG,IAAI;IAiBjE,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,IAAI;CAUlG"}
|
|
@@ -26,12 +26,12 @@ class ExpressAdapter {
|
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
mapRequestResponse(req, res) {
|
|
29
|
-
const apiReq = {
|
|
29
|
+
const apiReq = Object.assign(req, {
|
|
30
30
|
body: req.body,
|
|
31
31
|
params: req.params,
|
|
32
32
|
query: req.query,
|
|
33
33
|
headers: req.headers
|
|
34
|
-
};
|
|
34
|
+
});
|
|
35
35
|
const apiRes = {
|
|
36
36
|
status: (code) => {
|
|
37
37
|
res.status(code);
|
|
@@ -63,20 +63,35 @@ class ExpressAdapter {
|
|
|
63
63
|
})().catch(next);
|
|
64
64
|
};
|
|
65
65
|
}
|
|
66
|
-
|
|
67
|
-
|
|
66
|
+
normalizeHandler(handler) {
|
|
67
|
+
if (typeof handler === 'function' && handler.length >= 3) {
|
|
68
|
+
return handler;
|
|
69
|
+
}
|
|
70
|
+
return this.wrapHandler(handler);
|
|
71
|
+
}
|
|
72
|
+
get(path, ...handlers) {
|
|
73
|
+
const wrapped = handlers.map(h => this.normalizeHandler(h));
|
|
74
|
+
this.appOrRouter.get(path, ...wrapped);
|
|
75
|
+
}
|
|
76
|
+
post(path, ...handlers) {
|
|
77
|
+
const wrapped = handlers.map(h => this.normalizeHandler(h));
|
|
78
|
+
this.appOrRouter.post(path, ...wrapped);
|
|
68
79
|
}
|
|
69
|
-
|
|
70
|
-
|
|
80
|
+
put(path, ...handlers) {
|
|
81
|
+
const wrapped = handlers.map(h => this.normalizeHandler(h));
|
|
82
|
+
this.appOrRouter.put(path, ...wrapped);
|
|
71
83
|
}
|
|
72
|
-
|
|
73
|
-
|
|
84
|
+
patch(path, ...handlers) {
|
|
85
|
+
const wrapped = handlers.map(h => this.normalizeHandler(h));
|
|
86
|
+
this.appOrRouter.patch(path, ...wrapped);
|
|
74
87
|
}
|
|
75
|
-
delete(path,
|
|
76
|
-
|
|
88
|
+
delete(path, ...handlers) {
|
|
89
|
+
const wrapped = handlers.map(h => this.normalizeHandler(h));
|
|
90
|
+
this.appOrRouter.delete(path, ...wrapped);
|
|
77
91
|
}
|
|
78
|
-
use(
|
|
79
|
-
|
|
92
|
+
use(...args) {
|
|
93
|
+
;
|
|
94
|
+
this.appOrRouter.use(...args);
|
|
80
95
|
}
|
|
81
96
|
addMiddleware(middleware) {
|
|
82
97
|
const expressMiddleware = (req, res, next) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExpressAdapter.js","sourceRoot":"","sources":["../../src/adapters/ExpressAdapter.ts"],"names":[],"mappings":";;;;;;AAAA,sDAA6B;AAO7B,MAAa,cAAc;IAEb;IACA;IAFX,YACW,cAAoD,IAAA,iBAAO,GAAE,EAC7D,SAAiC,EAAE;QADnC,gBAAW,GAAX,WAAW,CAAkD;QAC7D,WAAM,GAAN,MAAM,CAA6B;QAE3C,IAAI,QAAQ,IAAI,IAAI,CAAC,WAAW,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAEhF,IAAI,CAAC,WAAmC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;YACjE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,iBAAO,CAAC,IAAI,EAAE,CAAC,CAAA;YACpC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;gBACrC,GAAG,CAAC,MAAM,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAA;gBAC9C,GAAG,CAAC,MAAM,CAAC,8BAA8B,EAAE,iCAAiC,CAAC,CAAA;gBAC7E,GAAG,CAAC,MAAM,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAA;gBAC/C,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBAC5B,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;gBAC7B,CAAC;gBACD,IAAI,EAAE,CAAA;YACT,CAAC,CAAC,CAAA;QACL,CAAC;IACJ,CAAC;IAEO,kBAAkB,CAAC,GAAoB,EAAE,GAAqB;QACnE,MAAM,MAAM,GAAe;
|
|
1
|
+
{"version":3,"file":"ExpressAdapter.js","sourceRoot":"","sources":["../../src/adapters/ExpressAdapter.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quatrain/api-server-express",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.14",
|
|
4
4
|
"description": "Express Adapter for Quatrain API Server",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -29,8 +29,8 @@
|
|
|
29
29
|
"typescript": "^5.2.2"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@quatrain/api": "^1.1.
|
|
33
|
-
"@quatrain/api-server": "^1.1.
|
|
32
|
+
"@quatrain/api": "^1.1.8",
|
|
33
|
+
"@quatrain/api-server": "^1.1.11",
|
|
34
34
|
"express": "^4.19.2"
|
|
35
35
|
},
|
|
36
36
|
"scripts": {
|
|
@@ -96,6 +96,7 @@ describe('ExpressAdapter', () => {
|
|
|
96
96
|
get: jest.fn(),
|
|
97
97
|
post: jest.fn(),
|
|
98
98
|
put: jest.fn(),
|
|
99
|
+
patch: jest.fn(),
|
|
99
100
|
delete: jest.fn()
|
|
100
101
|
}
|
|
101
102
|
const ad = new ExpressAdapter(mockRouter as any)
|
|
@@ -105,11 +106,13 @@ describe('ExpressAdapter', () => {
|
|
|
105
106
|
ad.get('/test', handler)
|
|
106
107
|
ad.post('/test', handler)
|
|
107
108
|
ad.put('/test', handler)
|
|
109
|
+
ad.patch('/test', handler)
|
|
108
110
|
ad.delete('/test', handler)
|
|
109
111
|
|
|
110
112
|
expect(mockRouter.get).toHaveBeenCalledWith('/test', expect.any(Function))
|
|
111
113
|
expect(mockRouter.post).toHaveBeenCalledWith('/test', expect.any(Function))
|
|
112
114
|
expect(mockRouter.put).toHaveBeenCalledWith('/test', expect.any(Function))
|
|
115
|
+
expect(mockRouter.patch).toHaveBeenCalledWith('/test', expect.any(Function))
|
|
113
116
|
expect(mockRouter.delete).toHaveBeenCalledWith('/test', expect.any(Function))
|
|
114
117
|
})
|
|
115
118
|
|
|
@@ -27,12 +27,12 @@ export class ExpressAdapter implements ServerAdapter {
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
private mapRequestResponse(req: express.Request, res: express.Response): { apiReq: ApiRequest; apiRes: ApiResponse } {
|
|
30
|
-
const apiReq: ApiRequest = {
|
|
30
|
+
const apiReq: ApiRequest = Object.assign(req, {
|
|
31
31
|
body: req.body,
|
|
32
32
|
params: req.params,
|
|
33
33
|
query: req.query,
|
|
34
34
|
headers: req.headers as Record<string, string | string[] | undefined>
|
|
35
|
-
}
|
|
35
|
+
})
|
|
36
36
|
|
|
37
37
|
const apiRes: ApiResponse = {
|
|
38
38
|
status: (code: number) => {
|
|
@@ -42,7 +42,7 @@ export class ExpressAdapter implements ServerAdapter {
|
|
|
42
42
|
json: (data: any) => {
|
|
43
43
|
res.json(data)
|
|
44
44
|
},
|
|
45
|
-
send: (data
|
|
45
|
+
send: (data?: any) => {
|
|
46
46
|
res.send(data)
|
|
47
47
|
},
|
|
48
48
|
setHeader: (name: string, value: string) => {
|
|
@@ -68,53 +68,75 @@ export class ExpressAdapter implements ServerAdapter {
|
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
+
private normalizeHandler(handler: any): express.RequestHandler {
|
|
72
|
+
if (typeof handler === 'function' && handler.length >= 3) {
|
|
73
|
+
return handler
|
|
74
|
+
}
|
|
75
|
+
return this.wrapHandler(handler)
|
|
76
|
+
}
|
|
77
|
+
|
|
71
78
|
/**
|
|
72
79
|
* Registers a GET endpoint.
|
|
73
80
|
*
|
|
74
81
|
* @param path - The URI path.
|
|
75
|
-
* @param
|
|
82
|
+
* @param handlers - Standard Quatrain ApiHandlers or native Express middlewares.
|
|
76
83
|
*/
|
|
77
|
-
get(path: string,
|
|
78
|
-
|
|
84
|
+
get(path: string, ...handlers: (ApiHandler | any)[]): void {
|
|
85
|
+
const wrapped = handlers.map(h => this.normalizeHandler(h))
|
|
86
|
+
;(this.appOrRouter as express.Router).get(path, ...wrapped)
|
|
79
87
|
}
|
|
80
88
|
|
|
81
89
|
/**
|
|
82
90
|
* Registers a POST endpoint.
|
|
83
91
|
*
|
|
84
92
|
* @param path - The URI path.
|
|
85
|
-
* @param
|
|
93
|
+
* @param handlers - Standard Quatrain ApiHandlers or native Express middlewares.
|
|
86
94
|
*/
|
|
87
|
-
post(path: string,
|
|
88
|
-
|
|
95
|
+
post(path: string, ...handlers: (ApiHandler | any)[]): void {
|
|
96
|
+
const wrapped = handlers.map(h => this.normalizeHandler(h))
|
|
97
|
+
;(this.appOrRouter as express.Router).post(path, ...wrapped)
|
|
89
98
|
}
|
|
90
99
|
|
|
91
100
|
/**
|
|
92
101
|
* Registers a PUT endpoint.
|
|
93
102
|
*
|
|
94
103
|
* @param path - The URI path.
|
|
95
|
-
* @param
|
|
104
|
+
* @param handlers - Standard Quatrain ApiHandlers or native Express middlewares.
|
|
105
|
+
*/
|
|
106
|
+
put(path: string, ...handlers: (ApiHandler | any)[]): void {
|
|
107
|
+
const wrapped = handlers.map(h => this.normalizeHandler(h))
|
|
108
|
+
;(this.appOrRouter as express.Router).put(path, ...wrapped)
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Registers a PATCH endpoint.
|
|
113
|
+
*
|
|
114
|
+
* @param path - The URI path.
|
|
115
|
+
* @param handlers - Standard Quatrain ApiHandlers or native Express middlewares.
|
|
96
116
|
*/
|
|
97
|
-
|
|
98
|
-
|
|
117
|
+
patch(path: string, ...handlers: (ApiHandler | any)[]): void {
|
|
118
|
+
const wrapped = handlers.map(h => this.normalizeHandler(h))
|
|
119
|
+
;(this.appOrRouter as express.Router).patch(path, ...wrapped)
|
|
99
120
|
}
|
|
100
121
|
|
|
101
122
|
/**
|
|
102
123
|
* Registers a DELETE endpoint.
|
|
103
124
|
*
|
|
104
125
|
* @param path - The URI path.
|
|
105
|
-
* @param
|
|
126
|
+
* @param handlers - Standard Quatrain ApiHandlers or native Express middlewares.
|
|
106
127
|
*/
|
|
107
|
-
delete(path: string,
|
|
108
|
-
|
|
128
|
+
delete(path: string, ...handlers: (ApiHandler | any)[]): void {
|
|
129
|
+
const wrapped = handlers.map(h => this.normalizeHandler(h))
|
|
130
|
+
;(this.appOrRouter as express.Router).delete(path, ...wrapped)
|
|
109
131
|
}
|
|
110
132
|
|
|
111
133
|
/**
|
|
112
|
-
* Attaches a native Express middleware or sub-router.
|
|
134
|
+
* Attaches a native Express middleware, path prefix, or sub-router.
|
|
113
135
|
*
|
|
114
|
-
* @param
|
|
136
|
+
* @param args - Arguments forwarded directly to express.use (e.g. path and RequestHandlers).
|
|
115
137
|
*/
|
|
116
|
-
use(
|
|
117
|
-
(this.appOrRouter as
|
|
138
|
+
use(...args: any[]): void {
|
|
139
|
+
;(this.appOrRouter as any).use(...args)
|
|
118
140
|
}
|
|
119
141
|
|
|
120
142
|
/**
|