@quatrain/api-server-express 1.1.9 → 1.1.11
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 +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;
|
|
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,WAAW;IA2CnB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI;IAU5C,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI;IAU7C,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI;IAU5C,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI;IAS/C,GAAG,CAAC,UAAU,EAAE,GAAG,GAAG,IAAI;IAS1B,aAAa,CAAC,UAAU,EAAE,aAAa,GAAG,IAAI;IA+C9C,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,8 +26,8 @@ class ExpressAdapter {
|
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
wrapHandler(handler) {
|
|
29
|
-
return
|
|
30
|
-
|
|
29
|
+
return (req, res, next) => {
|
|
30
|
+
void (async () => {
|
|
31
31
|
const apiReq = {
|
|
32
32
|
body: req.body,
|
|
33
33
|
params: req.params,
|
|
@@ -56,10 +56,7 @@ class ExpressAdapter {
|
|
|
56
56
|
}
|
|
57
57
|
};
|
|
58
58
|
await handler(apiReq, apiRes);
|
|
59
|
-
}
|
|
60
|
-
catch (err) {
|
|
61
|
-
next(err);
|
|
62
|
-
}
|
|
59
|
+
})().catch(next);
|
|
63
60
|
};
|
|
64
61
|
}
|
|
65
62
|
get(path, handler) {
|
|
@@ -78,43 +75,40 @@ class ExpressAdapter {
|
|
|
78
75
|
this.appOrRouter.use(middleware);
|
|
79
76
|
}
|
|
80
77
|
addMiddleware(middleware) {
|
|
81
|
-
const expressMiddleware =
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
78
|
+
const expressMiddleware = (req, res, next) => {
|
|
79
|
+
void (async () => {
|
|
80
|
+
const apiReq = {
|
|
81
|
+
body: req.body,
|
|
82
|
+
params: req.params,
|
|
83
|
+
query: req.query,
|
|
84
|
+
headers: req.headers
|
|
85
|
+
};
|
|
86
|
+
const apiRes = {
|
|
87
|
+
status: (code) => {
|
|
88
|
+
res.status(code);
|
|
89
|
+
return apiRes;
|
|
90
|
+
},
|
|
91
|
+
json: (data) => {
|
|
92
|
+
res.json(data);
|
|
93
|
+
},
|
|
94
|
+
send: (data) => {
|
|
95
|
+
res.send(data);
|
|
96
|
+
},
|
|
97
|
+
setHeader: (name, value) => {
|
|
98
|
+
res.setHeader(name, value);
|
|
99
|
+
},
|
|
100
|
+
write: (data) => {
|
|
101
|
+
res.write(data);
|
|
102
|
+
},
|
|
103
|
+
end: () => {
|
|
104
|
+
res.end();
|
|
105
|
+
}
|
|
106
|
+
};
|
|
110
107
|
const shouldContinue = await middleware(apiReq, apiRes);
|
|
111
108
|
if (shouldContinue) {
|
|
112
109
|
next();
|
|
113
110
|
}
|
|
114
|
-
}
|
|
115
|
-
catch (err) {
|
|
116
|
-
next(err);
|
|
117
|
-
}
|
|
111
|
+
})().catch(next);
|
|
118
112
|
};
|
|
119
113
|
this.appOrRouter.use(expressMiddleware);
|
|
120
114
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExpressAdapter.js","sourceRoot":"","sources":["../../src/adapters/ExpressAdapter.ts"],"names":[],"mappings":";;;;;;AAAA,sDAA6B;
|
|
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.11",
|
|
4
4
|
"description": "Express Adapter for Quatrain API Server",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"typescript": "^5.2.2"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@quatrain/api": "^1.1.
|
|
32
|
+
"@quatrain/api": "^1.1.5",
|
|
33
33
|
"@quatrain/api-server": "^1.1.9",
|
|
34
34
|
"express": "^4.19.2"
|
|
35
35
|
},
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import express from 'express'
|
|
2
2
|
import { ServerAdapter, ApiHandler, ApiRequest, ApiResponse, EndpointHandler, EndpointOptions, ApiMiddleware } from '@quatrain/api'
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Api Server adapter wrapping the `express` framework.
|
|
6
|
+
* Maps Quatrain's standardized `ServerAdapter` interfaces to native Express mechanisms.
|
|
7
|
+
*/
|
|
4
8
|
export class ExpressAdapter implements ServerAdapter {
|
|
5
9
|
constructor(
|
|
6
10
|
private appOrRouter: express.Application | express.Router = express(),
|
|
@@ -23,8 +27,8 @@ export class ExpressAdapter implements ServerAdapter {
|
|
|
23
27
|
}
|
|
24
28
|
|
|
25
29
|
private wrapHandler(handler: ApiHandler): express.RequestHandler {
|
|
26
|
-
return
|
|
27
|
-
|
|
30
|
+
return (req: express.Request, res: express.Response, next: express.NextFunction): void => {
|
|
31
|
+
void (async () => {
|
|
28
32
|
const apiReq: ApiRequest = {
|
|
29
33
|
body: req.body,
|
|
30
34
|
params: req.params,
|
|
@@ -55,81 +59,123 @@ export class ExpressAdapter implements ServerAdapter {
|
|
|
55
59
|
}
|
|
56
60
|
|
|
57
61
|
await handler(apiReq, apiRes)
|
|
58
|
-
}
|
|
59
|
-
next(err)
|
|
60
|
-
}
|
|
62
|
+
})().catch(next)
|
|
61
63
|
}
|
|
62
64
|
}
|
|
63
65
|
|
|
66
|
+
/**
|
|
67
|
+
* Registers a GET endpoint.
|
|
68
|
+
*
|
|
69
|
+
* @param path - The URI path.
|
|
70
|
+
* @param handler - The standard Quatrain ApiHandler.
|
|
71
|
+
*/
|
|
64
72
|
get(path: string, handler: ApiHandler): void {
|
|
65
73
|
(this.appOrRouter as express.Router).get(path, this.wrapHandler(handler))
|
|
66
74
|
}
|
|
67
75
|
|
|
76
|
+
/**
|
|
77
|
+
* Registers a POST endpoint.
|
|
78
|
+
*
|
|
79
|
+
* @param path - The URI path.
|
|
80
|
+
* @param handler - The standard Quatrain ApiHandler.
|
|
81
|
+
*/
|
|
68
82
|
post(path: string, handler: ApiHandler): void {
|
|
69
83
|
(this.appOrRouter as express.Router).post(path, this.wrapHandler(handler))
|
|
70
84
|
}
|
|
71
85
|
|
|
86
|
+
/**
|
|
87
|
+
* Registers a PUT endpoint.
|
|
88
|
+
*
|
|
89
|
+
* @param path - The URI path.
|
|
90
|
+
* @param handler - The standard Quatrain ApiHandler.
|
|
91
|
+
*/
|
|
72
92
|
put(path: string, handler: ApiHandler): void {
|
|
73
93
|
(this.appOrRouter as express.Router).put(path, this.wrapHandler(handler))
|
|
74
94
|
}
|
|
75
95
|
|
|
96
|
+
/**
|
|
97
|
+
* Registers a DELETE endpoint.
|
|
98
|
+
*
|
|
99
|
+
* @param path - The URI path.
|
|
100
|
+
* @param handler - The standard Quatrain ApiHandler.
|
|
101
|
+
*/
|
|
76
102
|
delete(path: string, handler: ApiHandler): void {
|
|
77
103
|
(this.appOrRouter as express.Router).delete(path, this.wrapHandler(handler))
|
|
78
104
|
}
|
|
79
105
|
|
|
106
|
+
/**
|
|
107
|
+
* Attaches a native Express middleware or sub-router.
|
|
108
|
+
*
|
|
109
|
+
* @param middleware - The Express RequestHandler or Router.
|
|
110
|
+
*/
|
|
80
111
|
use(middleware: any): void {
|
|
81
112
|
(this.appOrRouter as express.Router).use(middleware)
|
|
82
113
|
}
|
|
83
114
|
|
|
115
|
+
/**
|
|
116
|
+
* Injects a Quatrain-compatible API middleware into the flow.
|
|
117
|
+
*
|
|
118
|
+
* @param middleware - The Quatrain ApiMiddleware function.
|
|
119
|
+
*/
|
|
84
120
|
addMiddleware(middleware: ApiMiddleware): void {
|
|
85
|
-
const expressMiddleware =
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
121
|
+
const expressMiddleware = (req: express.Request, res: express.Response, next: express.NextFunction): void => {
|
|
122
|
+
void (async () => {
|
|
123
|
+
const apiReq: ApiRequest = {
|
|
124
|
+
body: req.body,
|
|
125
|
+
params: req.params,
|
|
126
|
+
query: req.query,
|
|
127
|
+
headers: req.headers as Record<string, string | string[] | undefined>
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
const apiRes: ApiResponse = {
|
|
131
|
+
status: (code: number) => {
|
|
132
|
+
res.status(code)
|
|
133
|
+
return apiRes
|
|
134
|
+
},
|
|
135
|
+
json: (data: any) => {
|
|
136
|
+
res.json(data)
|
|
137
|
+
},
|
|
138
|
+
send: (data: string) => {
|
|
139
|
+
res.send(data)
|
|
140
|
+
},
|
|
141
|
+
setHeader: (name: string, value: string) => {
|
|
142
|
+
res.setHeader(name, value)
|
|
143
|
+
},
|
|
144
|
+
write: (data: string) => {
|
|
145
|
+
res.write(data)
|
|
146
|
+
},
|
|
147
|
+
end: () => {
|
|
148
|
+
res.end()
|
|
149
|
+
}
|
|
112
150
|
}
|
|
113
|
-
}
|
|
114
151
|
|
|
115
|
-
try {
|
|
116
152
|
const shouldContinue = await middleware(apiReq, apiRes)
|
|
117
153
|
if (shouldContinue) {
|
|
118
154
|
next()
|
|
119
155
|
}
|
|
120
|
-
}
|
|
121
|
-
next(err)
|
|
122
|
-
}
|
|
156
|
+
})().catch(next)
|
|
123
157
|
}
|
|
124
158
|
(this.appOrRouter as express.Router).use(expressMiddleware)
|
|
125
159
|
}
|
|
126
160
|
|
|
161
|
+
/**
|
|
162
|
+
* Spawns an isolated routing scope (sub-router).
|
|
163
|
+
*
|
|
164
|
+
* @param path - The prefix path for the router.
|
|
165
|
+
* @returns A new ExpressAdapter instance controlling the sub-router.
|
|
166
|
+
*/
|
|
127
167
|
createRouter(path: string): ServerAdapter {
|
|
128
168
|
const router = express.Router()
|
|
129
169
|
;(this.appOrRouter as express.Router).use(path, router)
|
|
130
170
|
return new ExpressAdapter(router)
|
|
131
171
|
}
|
|
132
172
|
|
|
173
|
+
/**
|
|
174
|
+
* Binds the server to the network and starts listening.
|
|
175
|
+
*
|
|
176
|
+
* @param port - The network port.
|
|
177
|
+
* @param callback - Optional completion callback.
|
|
178
|
+
*/
|
|
133
179
|
start(port: number, callback?: () => void): void {
|
|
134
180
|
if ('listen' in this.appOrRouter && typeof this.appOrRouter.listen === 'function') {
|
|
135
181
|
this.appOrRouter.listen(port, callback)
|
|
@@ -138,6 +184,11 @@ export class ExpressAdapter implements ServerAdapter {
|
|
|
138
184
|
}
|
|
139
185
|
}
|
|
140
186
|
|
|
187
|
+
/**
|
|
188
|
+
* Retrieves the underlying native framework instance.
|
|
189
|
+
*
|
|
190
|
+
* @returns The raw Express Application or Router instance.
|
|
191
|
+
*/
|
|
141
192
|
getNativeInstance(): any {
|
|
142
193
|
return this.appOrRouter
|
|
143
194
|
}
|
|
@@ -160,6 +211,13 @@ export class ExpressAdapter implements ServerAdapter {
|
|
|
160
211
|
})
|
|
161
212
|
}
|
|
162
213
|
|
|
214
|
+
/**
|
|
215
|
+
* Composes and mounts a full EndpointHandler block at a specific root.
|
|
216
|
+
*
|
|
217
|
+
* @param handler - The endpoint initialization logic.
|
|
218
|
+
* @param endpointRoot - The base URI.
|
|
219
|
+
* @param options - Middlewares and operational options.
|
|
220
|
+
*/
|
|
163
221
|
addEndpoint(handler: EndpointHandler, endpointRoot: string, options: EndpointOptions = {}): void {
|
|
164
222
|
const fullPath = this.config.apiPrefix ? `${this.config.apiPrefix}${endpointRoot}` : endpointRoot
|
|
165
223
|
const router = this.createRouter(fullPath)
|