dx-server 0.5.2 → 0.5.5
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/README.md +126 -29
- package/cjs/body.js +10 -31
- package/cjs/bodyHelpers.d.ts +2 -1
- package/cjs/bodyHelpers.js +8 -4
- package/cjs/dx.d.ts +9 -0
- package/cjs/dx.js +35 -3
- package/cjs/dxHelpers.d.ts +13 -1
- package/cjs/dxHelpers.js +7 -2
- package/cjs/index.d.ts +3 -2
- package/cjs/index.js +7 -2
- package/cjs/route.d.ts +1 -3
- package/cjs/route.js +4 -3
- package/cjs/static.d.ts +3 -4
- package/cjs/static.js +18 -52
- package/cjs/staticHelpers.d.ts +5 -0
- package/cjs/staticHelpers.js +30 -0
- package/esm/body.js +10 -26
- package/esm/bodyHelpers.d.ts +2 -1
- package/esm/bodyHelpers.js +6 -3
- package/esm/dx.d.ts +9 -0
- package/esm/dx.js +32 -2
- package/esm/dxHelpers.d.ts +13 -1
- package/esm/dxHelpers.js +7 -2
- package/esm/index.d.ts +3 -2
- package/esm/index.js +4 -3
- package/esm/route.d.ts +1 -3
- package/esm/route.js +4 -3
- package/esm/static.d.ts +3 -4
- package/esm/static.js +17 -51
- package/esm/staticHelpers.d.ts +5 -0
- package/esm/staticHelpers.js +23 -0
- package/package.json +4 -2
- package/cjs/body.d.ts +0 -8
- package/esm/body.d.ts +0 -8
package/README.md
CHANGED
|
@@ -18,22 +18,48 @@ import dxServer, {getReq, getRes, router, setHtml, setText,} from 'dx-server'
|
|
|
18
18
|
|
|
19
19
|
new Server().on('request', (req, res) => chain(
|
|
20
20
|
dxServer(req, res),
|
|
21
|
-
next => {
|
|
22
|
-
getRes().setHeader('Cache-Control', 'no-cache')
|
|
23
|
-
console.log(getReq().method, getReq().url)
|
|
24
|
-
return next()
|
|
25
|
-
},
|
|
26
21
|
async next => {
|
|
27
|
-
try {
|
|
22
|
+
try {
|
|
23
|
+
getRes().setHeader('Cache-Control', 'no-cache')
|
|
24
|
+
console.log(getReq().method, getReq().url)
|
|
25
|
+
await next()
|
|
26
|
+
} catch (e) {
|
|
28
27
|
console.error(e)
|
|
29
|
-
setHtml('internal server error
|
|
28
|
+
setHtml('internal server error', {status: 500})
|
|
30
29
|
}
|
|
31
30
|
},
|
|
32
31
|
router.get({
|
|
33
32
|
'/'() {setHtml('hello world')},
|
|
34
33
|
'/health'() {setText('ok')}
|
|
35
34
|
}),
|
|
36
|
-
() =>
|
|
35
|
+
() => setHtml('not found', {status: 404}),
|
|
36
|
+
)()
|
|
37
|
+
).listen(3000, () => console.log('server is listening at 3000'))
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
File server:
|
|
41
|
+
|
|
42
|
+
```javascript
|
|
43
|
+
import {Server} from 'node:http'
|
|
44
|
+
import chain from 'jchain'
|
|
45
|
+
import dxServer, {chainStatic, getReq, getRes, setHtml} from 'dx-server'
|
|
46
|
+
import {resolve, dirname} from 'node:path'
|
|
47
|
+
import {fileURLToPath} from 'node:url'
|
|
48
|
+
|
|
49
|
+
new Server().on('request', (req, res) => chain(
|
|
50
|
+
dxServer(req, res),
|
|
51
|
+
async next => {
|
|
52
|
+
try {
|
|
53
|
+
getRes().setHeader('Cache-Control', 'no-cache')
|
|
54
|
+
console.log(getReq().method, getReq().url)
|
|
55
|
+
await next()
|
|
56
|
+
} catch (e) {
|
|
57
|
+
console.error(e)
|
|
58
|
+
setHtml('internal server error', {status: 500})
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
chainStatic('/', {root: resolve(dirname(fileURLToPath(import.meta.url)), 'public')}),
|
|
62
|
+
() => setHtml('not found', {status: 404}),
|
|
37
63
|
)()
|
|
38
64
|
).listen(3000, () => console.log('server is listening at 3000'))
|
|
39
65
|
```
|
|
@@ -48,14 +74,13 @@ import {promisify} from 'node:util'
|
|
|
48
74
|
import chain from 'jchain'
|
|
49
75
|
import dxServer, {
|
|
50
76
|
getReq, getRes,
|
|
51
|
-
getJson, getRaw, getText, getUrlEncoded, getQuery,
|
|
52
|
-
setHtml, setJson, setText, setBuffer, setRedirect, setNodeStream, setWebStream,
|
|
53
|
-
router, connectMiddlewares
|
|
77
|
+
getBuffer, getJson, getRaw, getText, getUrlEncoded, getQuery,
|
|
78
|
+
setHtml, setJson, setText, setBuffer, setRedirect, setNodeStream, setWebStream, setFile,
|
|
79
|
+
router, connectMiddlewares, chainStatic, makeDxContext
|
|
54
80
|
} from 'dx-server'
|
|
55
81
|
import {expressApp} from 'dx-server/express'
|
|
56
82
|
import express from 'express'
|
|
57
83
|
import morgan from 'morgan'
|
|
58
|
-
import {AsyncLocalStorage} from 'node:async_hooks'
|
|
59
84
|
|
|
60
85
|
// it is best practice to create custom error class for non-system error
|
|
61
86
|
class ServerError extends Error {
|
|
@@ -68,14 +93,12 @@ class ServerError extends Error {
|
|
|
68
93
|
}
|
|
69
94
|
}
|
|
70
95
|
|
|
71
|
-
const
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
return authStorage.run(auth, next)
|
|
75
|
-
}
|
|
96
|
+
const authContext = makeDxContext(async () => {
|
|
97
|
+
if (getReq().headers.authorization) return {id: 1, name: 'joe (private)'}
|
|
98
|
+
})
|
|
76
99
|
|
|
77
100
|
const requireAuth = () => {
|
|
78
|
-
if (!
|
|
101
|
+
if (!authContext.value) throw new ServerError('unauthorized', 401, 'unauthorized')
|
|
79
102
|
}
|
|
80
103
|
|
|
81
104
|
const serverChain = chain(
|
|
@@ -105,7 +128,7 @@ const serverChain = chain(
|
|
|
105
128
|
if (process.env.NODE_ENV !== 'production') app.set('json spaces', 2)
|
|
106
129
|
app.use('/public', express.static('public'))
|
|
107
130
|
}),
|
|
108
|
-
|
|
131
|
+
authContext.chain(), // chain context will set the context value to authContext.value in every request
|
|
109
132
|
router.post({// example of catching error for all /api/* routes
|
|
110
133
|
async '/api'({next}) {
|
|
111
134
|
try {
|
|
@@ -131,7 +154,7 @@ const serverChain = chain(
|
|
|
131
154
|
},
|
|
132
155
|
'/api/me'() { // sample private router
|
|
133
156
|
requireAuth()
|
|
134
|
-
setJson({name:
|
|
157
|
+
setJson({name: authContext.value.name})
|
|
135
158
|
},
|
|
136
159
|
}),
|
|
137
160
|
router.get({ // sample GET router
|
|
@@ -156,6 +179,7 @@ const tcpServer = new Server()
|
|
|
156
179
|
)()
|
|
157
180
|
} catch (e) {
|
|
158
181
|
console.error(e)
|
|
182
|
+
res.end()
|
|
159
183
|
}
|
|
160
184
|
})
|
|
161
185
|
|
|
@@ -163,26 +187,99 @@ await promisify(tcpServer.listen.bind(tcpServer))(3000)
|
|
|
163
187
|
console.log('server is listening at 3000')
|
|
164
188
|
```
|
|
165
189
|
|
|
166
|
-
## TODO
|
|
167
|
-
Until these middlewares are available as native dx-server middlewares, express middlewares can be used with `expressApp()`
|
|
168
|
-
- [ ] native static file serve, like 'static-serve'
|
|
169
|
-
|
|
170
190
|
## Note:
|
|
171
191
|
|
|
172
192
|
`getBuffer, getJson, getRaw, getText, getUrlEncoded, getQuery` are all synchronous functions.
|
|
173
193
|
The associated results are calculated in the first time they are called and cached for subsequent calls.
|
|
174
194
|
|
|
175
|
-
If you want to get these values synchronously,
|
|
195
|
+
If you want to get these values synchronously, chain it, like follows:
|
|
176
196
|
```javascript
|
|
177
|
-
import {AsyncLocalStorage} from 'node:async_hooks'
|
|
178
197
|
import {getJson} from 'dx-server'
|
|
179
|
-
const jsonStorage = new AsyncLocalStorage()
|
|
180
198
|
|
|
181
199
|
chain(
|
|
182
|
-
|
|
200
|
+
getJson.chain(/*option*/), // json body is parsed and stored in context in every request
|
|
201
|
+
next => {
|
|
202
|
+
console.log(getJson.value) // json body can be accessed synchronously
|
|
203
|
+
return next()
|
|
204
|
+
}
|
|
205
|
+
)
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
Context can be created using `makeDxContext` function:
|
|
209
|
+
|
|
210
|
+
```javascript
|
|
211
|
+
import {makeDxContext} from 'dx-server'
|
|
212
|
+
|
|
213
|
+
const authContext = makeDxContext(() => {
|
|
214
|
+
if (getReq().headers.authorization) return {id: 1, name: 'joe (authorized)'}
|
|
215
|
+
})
|
|
216
|
+
const requireAuth = () => {
|
|
217
|
+
if (!authContext.value) throw new Error('unauthorized')
|
|
218
|
+
}
|
|
219
|
+
chain(
|
|
220
|
+
authContext.chain(),
|
|
183
221
|
next => {
|
|
184
|
-
|
|
222
|
+
requireAuth()
|
|
223
|
+
return next()
|
|
224
|
+
}
|
|
225
|
+
)
|
|
226
|
+
// or await authContext() to lazy load the context and don't require chaining authContext.chain()
|
|
227
|
+
chain(
|
|
228
|
+
async next => {
|
|
229
|
+
console.log(await authContext())
|
|
185
230
|
return next()
|
|
186
231
|
}
|
|
187
232
|
)
|
|
188
233
|
```
|
|
234
|
+
|
|
235
|
+
# API References
|
|
236
|
+
All exported APIs:
|
|
237
|
+
```javascript
|
|
238
|
+
import dxServer, {
|
|
239
|
+
getReq, getRes, getBuffer, getJson, getRaw, getText, getUrlEncoded, getQuery,
|
|
240
|
+
setHtml, setJson, setText, setBuffer, setRedirect, setNodeStream, setWebStream, setFile,
|
|
241
|
+
router, connectMiddlewares, chainStatic, makeDxContext
|
|
242
|
+
} from 'dx-server'
|
|
243
|
+
import {expressApp, expressRouter} from 'dx-server/express' // requires express installed
|
|
244
|
+
import {
|
|
245
|
+
setBufferBodyDefaultOptions,
|
|
246
|
+
bufferFromReq, jsonFromReq, rawFromReq, textFromReq, urlEncodedFromReq, queryFromReq,
|
|
247
|
+
} from 'dx-server/helpers'
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
- `getReq()`, `getRes()`: get request and response objects from anywhere.
|
|
251
|
+
|
|
252
|
+
- `getBuffer()`, `getJson()`, `getRaw()`, `getText()`, `getUrlEncoded()`, `getQuery()`: get parsed request body, raw body, text body, url encoded body, query string from anywhere.
|
|
253
|
+
These are DX context object, can be used as follows:
|
|
254
|
+
- `const json = await getJson()`: lazily load the context, once loaded, it is cached for subsequent calls.
|
|
255
|
+
- Chain it to get the value synchronously: `chain(getJson.chain(), next => console.log(getJson.value))`. Note that the value is calculated in every request.
|
|
256
|
+
- `makeDxContext(fn)`: create a DX context object.
|
|
257
|
+
|
|
258
|
+
- `setHtml`, `setJson`, `setText`, `setBuffer`, `setRedirect`, `setNodeStream`, `setWebStream`, `setFile`: set response body.
|
|
259
|
+
|
|
260
|
+
- `router.get`, `router.post`, `router.put`, `router.delete`, `router.patch`, `router.head`, `router.options`, `router.connect`, `router.trace`: create router.
|
|
261
|
+
- `router.method(methods, routes, options)`: create router with custom methods.
|
|
262
|
+
- `router.all(routes, options)`: create router for all methods.
|
|
263
|
+
|
|
264
|
+
- `connectMiddlewares(...middlewares)`: connect middlewares. For example:
|
|
265
|
+
```javascript
|
|
266
|
+
import {connectMiddlewares} from 'dx-server'
|
|
267
|
+
import morgan from 'morgan'
|
|
268
|
+
import cors from 'cors'
|
|
269
|
+
|
|
270
|
+
connectMiddlewares(
|
|
271
|
+
morgan('common'),
|
|
272
|
+
cors(),
|
|
273
|
+
)
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
- `chainStatic(path, options)`: serve static files. For example:
|
|
277
|
+
```javascript
|
|
278
|
+
import {chainStatic} from 'dx-server'
|
|
279
|
+
import {resolve, dirname} from 'node:path'
|
|
280
|
+
import {fileURLToPath} from 'node:url'
|
|
281
|
+
|
|
282
|
+
chain(
|
|
283
|
+
chainStatic('/assets', {root: resolve(dirname(fileURLToPath(import.meta.url)), 'public')})
|
|
284
|
+
)
|
|
285
|
+
```
|
package/cjs/body.js
CHANGED
|
@@ -1,35 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getQuery = exports.getUrlEncoded = exports.getText = exports.getRaw = exports.getJson = void 0;
|
|
3
|
+
exports.getQuery = exports.getUrlEncoded = exports.getText = exports.getRaw = exports.getJson = exports.getBuffer = void 0;
|
|
4
4
|
const dx_js_1 = require("./dx.js");
|
|
5
5
|
const bodyHelpers_js_1 = require("./bodyHelpers.js");
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const rawBodySymbol = Symbol('rawBody');
|
|
16
|
-
async function getRaw(options) {
|
|
17
|
-
return (0, dx_js_1.getReq)()[rawBodySymbol] ??= (0, bodyHelpers_js_1.rawFromReq)((0, dx_js_1.getReq)(), options);
|
|
18
|
-
}
|
|
19
|
-
exports.getRaw = getRaw;
|
|
20
|
-
const textBodySymbol = Symbol('textBody');
|
|
21
|
-
async function getText(options) {
|
|
22
|
-
return (0, dx_js_1.getReq)()[textBodySymbol] ??= (0, bodyHelpers_js_1.textFromReq)((0, dx_js_1.getReq)(), options);
|
|
23
|
-
}
|
|
24
|
-
exports.getText = getText;
|
|
25
|
-
const urlEncodedBodySymbol = Symbol('urlencodedBody');
|
|
26
|
-
async function getUrlEncoded(options) {
|
|
27
|
-
return (0, dx_js_1.getReq)()[urlEncodedBodySymbol] ??= (0, bodyHelpers_js_1.urlEncodedFromReq)((0, dx_js_1.getReq)(), options);
|
|
28
|
-
}
|
|
29
|
-
exports.getUrlEncoded = getUrlEncoded;
|
|
30
|
-
const querySymbol = Symbol('query');
|
|
31
|
-
async function getQuery({ simplify, ...options } = {}) {
|
|
32
|
-
return (0, dx_js_1.getReq)()[querySymbol] ??= (0, bodyHelpers_js_1.queryFromReq)((0, dx_js_1.getReq)(), options);
|
|
33
|
-
}
|
|
34
|
-
exports.getQuery = getQuery;
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9keS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9ib2R5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUE4QjtBQUM5QixxREFReUI7QUFFekIsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUE7QUFDN0MsS0FBSyxVQUFVLFNBQVMsQ0FBQyxPQUFvQztJQUM1RCxPQUFPLElBQUEsY0FBTSxHQUFFLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxJQUFBLDhCQUFhLEVBQUMsSUFBQSxjQUFNLEdBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQTtBQUN2RSxDQUFDO0FBRUQsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0FBQ2xDLEtBQUssVUFBVSxPQUFPLENBQUMsT0FBb0M7SUFDakUsT0FBTyxJQUFBLGNBQU0sR0FBRSxDQUFDLGNBQWMsQ0FBQyxLQUFLLElBQUEsNEJBQVcsRUFBQyxJQUFBLGNBQU0sR0FBRSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0FBQ25FLENBQUM7QUFGRCwwQkFFQztBQUVELE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUNoQyxLQUFLLFVBQVUsTUFBTSxDQUFDLE9BQW9DO0lBQ2hFLE9BQU8sSUFBQSxjQUFNLEdBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxJQUFBLDJCQUFVLEVBQUMsSUFBQSxjQUFNLEdBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQTtBQUNqRSxDQUFDO0FBRkQsd0JBRUM7QUFFRCxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUE7QUFDbEMsS0FBSyxVQUFVLE9BQU8sQ0FBQyxPQUFvQztJQUNqRSxPQUFPLElBQUEsY0FBTSxHQUFFLENBQUMsY0FBYyxDQUFDLEtBQUssSUFBQSw0QkFBVyxFQUFDLElBQUEsY0FBTSxHQUFFLEVBQUUsT0FBTyxDQUFDLENBQUE7QUFDbkUsQ0FBQztBQUZELDBCQUVDO0FBRUQsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtBQUM5QyxLQUFLLFVBQVUsYUFBYSxDQUFDLE9BQW1DO0lBQ3RFLE9BQU8sSUFBQSxjQUFNLEdBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLElBQUEsa0NBQWlCLEVBQUMsSUFBQSxjQUFNLEdBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQTtBQUMvRSxDQUFDO0FBRkQsc0NBRUM7QUFFRCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUE7QUFDNUIsS0FBSyxVQUFVLFFBQVEsQ0FBQyxFQUFDLFFBQVEsRUFBRSxHQUFHLE9BQU8sS0FBdUQsRUFBRTtJQUM1RyxPQUFPLElBQUEsY0FBTSxHQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssSUFBQSw2QkFBWSxFQUFDLElBQUEsY0FBTSxHQUFFLEVBQUUsT0FBTyxDQUFDLENBQUE7QUFDakUsQ0FBQztBQUZELDRCQUVDIn0=
|
|
6
|
+
exports.getBuffer = (0, dx_js_1.makeDxContext)((options) => (0, bodyHelpers_js_1.bufferFromReq)((0, dx_js_1.getReq)(), options));
|
|
7
|
+
exports.getJson = (0, dx_js_1.makeDxContext)((options) => (0, bodyHelpers_js_1.jsonFromReq)((0, dx_js_1.getReq)(), options));
|
|
8
|
+
exports.getRaw = (0, dx_js_1.makeDxContext)((options) => (0, bodyHelpers_js_1.rawFromReq)((0, dx_js_1.getReq)(), options));
|
|
9
|
+
exports.getText = (0, dx_js_1.makeDxContext)((options) => (0, bodyHelpers_js_1.textFromReq)((0, dx_js_1.getReq)(), options));
|
|
10
|
+
exports.getUrlEncoded = (0, dx_js_1.makeDxContext)((options) => (0, bodyHelpers_js_1.urlEncodedFromReq)((0, dx_js_1.getReq)(), options));
|
|
11
|
+
exports.getQuery = (0, dx_js_1.makeDxContext)((options) => (0, bodyHelpers_js_1.queryFromReq)((0, dx_js_1.getReq)(), options));
|
|
12
|
+
// to getFile use busboy
|
|
13
|
+
// https://github.com/mscdex/busboy
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9keS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9ib2R5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUE2QztBQUM3QyxxREFReUI7QUFFWixRQUFBLFNBQVMsR0FBRyxJQUFBLHFCQUFhLEVBQUMsQ0FBQyxPQUFvQyxFQUFFLEVBQUUsQ0FBQyxJQUFBLDhCQUFhLEVBQUMsSUFBQSxjQUFNLEdBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFBO0FBQ3JHLFFBQUEsT0FBTyxHQUFHLElBQUEscUJBQWEsRUFBQyxDQUFDLE9BQW9DLEVBQUUsRUFBRSxDQUFDLElBQUEsNEJBQVcsRUFBQyxJQUFBLGNBQU0sR0FBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUE7QUFDakcsUUFBQSxNQUFNLEdBQUcsSUFBQSxxQkFBYSxFQUFDLENBQUMsT0FBb0MsRUFBRSxFQUFFLENBQUMsSUFBQSwyQkFBVSxFQUFDLElBQUEsY0FBTSxHQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQTtBQUMvRixRQUFBLE9BQU8sR0FBRyxJQUFBLHFCQUFhLEVBQUMsQ0FBQyxPQUFvQyxFQUFFLEVBQUUsQ0FBQyxJQUFBLDRCQUFXLEVBQUMsSUFBQSxjQUFNLEdBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFBO0FBQ2pHLFFBQUEsYUFBYSxHQUFHLElBQUEscUJBQWEsRUFBQyxDQUFDLE9BQW9DLEVBQUUsRUFBRSxDQUFDLElBQUEsa0NBQWlCLEVBQUMsSUFBQSxjQUFNLEdBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFBO0FBQzdHLFFBQUEsUUFBUSxHQUFHLElBQUEscUJBQWEsRUFBQyxDQUFDLE9BQTJELEVBQUUsRUFBRSxDQUFDLElBQUEsNkJBQVksRUFBQyxJQUFBLGNBQU0sR0FBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUE7QUFFdkksd0JBQXdCO0FBQ3hCLG1DQUFtQyJ9
|
package/cjs/bodyHelpers.d.ts
CHANGED
|
@@ -13,4 +13,5 @@ export declare function jsonFromReq(req: IncomingMessage, options?: Partial<Buff
|
|
|
13
13
|
export declare function rawFromReq(req: IncomingMessage, options?: Partial<BufferBodyOptions>): Promise<Buffer | undefined>;
|
|
14
14
|
export declare function textFromReq(req: IncomingMessage, options?: Partial<BufferBodyOptions>): Promise<string | undefined>;
|
|
15
15
|
export declare function urlEncodedFromReq(req: IncomingMessage, options?: Partial<BufferBodyOptions>): Promise<qs.ParsedQs | undefined>;
|
|
16
|
-
export declare function
|
|
16
|
+
export declare function urlFromReq(req: IncomingMessage): URL;
|
|
17
|
+
export declare function queryFromReq(req: IncomingMessage, options?: Partial<BufferBodyOptions>): qs.ParsedQs;
|
package/cjs/bodyHelpers.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.queryFromReq = exports.urlEncodedFromReq = exports.textFromReq = exports.rawFromReq = exports.jsonFromReq = exports.bufferFromReq = exports.setBufferBodyDefaultOptions = void 0;
|
|
6
|
+
exports.queryFromReq = exports.urlFromReq = exports.urlEncodedFromReq = exports.textFromReq = exports.rawFromReq = exports.jsonFromReq = exports.bufferFromReq = exports.setBufferBodyDefaultOptions = void 0;
|
|
7
7
|
const stream_js_1 = require("./stream.js");
|
|
8
8
|
const contentType_js_1 = require("./contentType.js");
|
|
9
9
|
const qs_1 = __importDefault(require("qs"));
|
|
@@ -93,10 +93,14 @@ async function urlEncodedFromReq(req, options) {
|
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
95
|
exports.urlEncodedFromReq = urlEncodedFromReq;
|
|
96
|
-
|
|
97
|
-
|
|
96
|
+
function urlFromReq(req) {
|
|
97
|
+
return new URL(req.url ?? '', 'https://example.com');
|
|
98
|
+
}
|
|
99
|
+
exports.urlFromReq = urlFromReq;
|
|
100
|
+
function queryFromReq(req, options) {
|
|
101
|
+
const query = urlFromReq(req).searchParams.toString();
|
|
98
102
|
const { simplifyQuery } = { ...bodyDefaultOptions, ...options };
|
|
99
103
|
return simplifyQuery ? Object.fromEntries(new URLSearchParams(query)) : qs_1.default.parse(query);
|
|
100
104
|
}
|
|
101
105
|
exports.queryFromReq = queryFromReq;
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
106
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9keUhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYm9keUhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsMkNBQXdEO0FBQ3hELHFEQUFpRDtBQUNqRCw0Q0FBbUI7QUFRbkIsSUFBSSxrQkFBa0IsR0FBc0IsRUFBQyxTQUFTLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBQyxDQUFBLENBQUMsUUFBUTtBQUMzRSxTQUFnQiwyQkFBMkIsQ0FBQyxPQUFtQztJQUM5RSxrQkFBa0IsR0FBRyxFQUFDLEdBQUcsa0JBQWtCLEVBQUUsR0FBRyxPQUFPLEVBQUMsQ0FBQTtBQUN6RCxDQUFDO0FBRkQsa0VBRUM7QUFFTSxLQUFLLFVBQVUsYUFBYSxDQUFDLEdBQW9CLEVBQUUsT0FBb0M7SUFDN0YsTUFBTSxFQUFDLFNBQVMsRUFBQyxHQUFHLEVBQUMsR0FBRyxrQkFBa0IsRUFBRSxHQUFHLE9BQU8sRUFBQyxDQUFBO0lBQ3ZEOzs7OztPQUtHO0lBQ0YsK0ZBQStGO0lBQ2hHLE1BQU0sbUJBQW1CLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFDN0UsSUFDQyxHQUFHLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssU0FBUztXQUMzQyxLQUFLLENBQUMsbUJBQW1CLENBQUM7UUFDNUIsT0FBTTtJQUNSLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFBO0lBRWxGLE9BQU87SUFDUCxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtJQUM5RSxNQUFNLE1BQU0sR0FBRyxJQUFBLDRCQUFnQixFQUFD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
|
package/cjs/dx.d.ts
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
/// <reference types="node" resolution-mode="require"/>
|
|
4
4
|
import { Readable } from 'node:stream';
|
|
5
5
|
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
6
|
+
import { SendOptions } from 'send';
|
|
6
7
|
export interface Chainable<P extends any[] = any[], R = any, Next = (...np: any[]) => any> {
|
|
7
8
|
(next: Next, ...p: P): R;
|
|
8
9
|
}
|
|
@@ -18,6 +19,7 @@ export declare function setText(text: string, { status }?: {
|
|
|
18
19
|
export declare function setHtml(html: string, opts?: {
|
|
19
20
|
status?: number;
|
|
20
21
|
}): void;
|
|
22
|
+
export declare function setFile(filePath: string, options?: SendOptions): void;
|
|
21
23
|
export declare function setBuffer(buffer: Buffer, { status }?: {
|
|
22
24
|
status?: number;
|
|
23
25
|
}): void;
|
|
@@ -31,3 +33,10 @@ export declare function setJson(json: any, { status }?: {
|
|
|
31
33
|
status?: number;
|
|
32
34
|
}): void;
|
|
33
35
|
export declare function setRedirect(url: string, status: 301 | 302): void;
|
|
36
|
+
interface Context<T, Params extends any[], R = any, Next = (...np: any[]) => any> {
|
|
37
|
+
value: T;
|
|
38
|
+
chain(...params: Params): Chainable<Params, R, Next>;
|
|
39
|
+
(...params: Params): Promise<T>;
|
|
40
|
+
}
|
|
41
|
+
export declare function makeDxContext<T, Params extends any[], R = any, Next = (...np: any[]) => any>(maker: (...params: Params) => T): Context<T, Params, R, Next>;
|
|
42
|
+
export {};
|
package/cjs/dx.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.setRedirect = exports.setJson = exports.setWebStream = exports.setNodeStream = exports.setBuffer = exports.setHtml = exports.setText = exports.getRes = exports.getReq = exports.dxServer = void 0;
|
|
3
|
+
exports.makeDxContext = exports.setRedirect = exports.setJson = exports.setWebStream = exports.setNodeStream = exports.setBuffer = exports.setFile = exports.setHtml = exports.setText = exports.getRes = exports.getReq = exports.dxServer = void 0;
|
|
4
4
|
const node_async_hooks_1 = require("node:async_hooks");
|
|
5
5
|
const dxHelpers_js_1 = require("./dxHelpers.js");
|
|
6
6
|
const reqStorage = new node_async_hooks_1.AsyncLocalStorage();
|
|
@@ -27,7 +27,6 @@ function getRes() {
|
|
|
27
27
|
return resStorage.getStore();
|
|
28
28
|
}
|
|
29
29
|
exports.getRes = getRes;
|
|
30
|
-
// todo: support setFile (with stream or with buffer)
|
|
31
30
|
function setText(text, { status } = {}) {
|
|
32
31
|
const res = getRes();
|
|
33
32
|
const dx = dxStorage.getStore();
|
|
@@ -43,6 +42,13 @@ function setHtml(html, opts = {}) {
|
|
|
43
42
|
dx.type = 'html';
|
|
44
43
|
}
|
|
45
44
|
exports.setHtml = setHtml;
|
|
45
|
+
function setFile(filePath, options) {
|
|
46
|
+
const dx = dxStorage.getStore();
|
|
47
|
+
dx.data = filePath;
|
|
48
|
+
dx.type = 'file';
|
|
49
|
+
dx.options = options;
|
|
50
|
+
}
|
|
51
|
+
exports.setFile = setFile;
|
|
46
52
|
function setBuffer(buffer, { status } = {}) {
|
|
47
53
|
const res = getRes();
|
|
48
54
|
const dx = dxStorage.getStore();
|
|
@@ -87,4 +93,30 @@ function setRedirect(url, status) {
|
|
|
87
93
|
dx.type = 'redirect';
|
|
88
94
|
}
|
|
89
95
|
exports.setRedirect = setRedirect;
|
|
90
|
-
|
|
96
|
+
function makeDxContext(maker) {
|
|
97
|
+
const promiseSymbol = Symbol('promise');
|
|
98
|
+
const valueSymbol = Symbol('value');
|
|
99
|
+
// wrap in an async function to ensure the maker is called only once
|
|
100
|
+
const context = (...params) => getReq()[promiseSymbol] ??= (async () => {
|
|
101
|
+
try {
|
|
102
|
+
return getReq()[valueSymbol] = await maker(...params);
|
|
103
|
+
}
|
|
104
|
+
catch (e) {
|
|
105
|
+
throw e;
|
|
106
|
+
}
|
|
107
|
+
})();
|
|
108
|
+
Object.defineProperty(context, 'value', {
|
|
109
|
+
get() {
|
|
110
|
+
if (!getReq()[promiseSymbol])
|
|
111
|
+
throw new Error('value is not ready');
|
|
112
|
+
return getReq()[valueSymbol];
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
context.chain = (...params) => async (next) => {
|
|
116
|
+
await context(...params);
|
|
117
|
+
return next();
|
|
118
|
+
};
|
|
119
|
+
return context;
|
|
120
|
+
}
|
|
121
|
+
exports.makeDxContext = makeDxContext;
|
|
122
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZHgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsdURBQWtEO0FBQ2xELGlEQUF1RDtBQVd2RCxNQUFNLFVBQVUsR0FBRyxJQUFJLG9DQUFpQixFQUFtQixDQUFBO0FBQzNELE1BQU0sVUFBVSxHQUFHLElBQUksb0NBQWlCLEVBQWtCLENBQUE7QUFDMUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxvQ0FBaUIsRUFBYSxDQUFBO0FBQ3BELFNBQWdCLFFBQVEsQ0FDdkIsR0FBb0IsRUFDcEIsR0FBbUIsRUFDbkIsVUFHSSxFQUFFO0lBRU4sT0FBTyxLQUFLLEVBQUMsSUFBSSxFQUFDLEVBQUU7UUFDbkIsTUFBTSxFQUFFLEdBQWMsRUFBQyxHQUFHLE9BQU8sRUFBQyxDQUFBO1FBQ2xDLE1BQU0sTUFBTSxHQUFHLE1BQU0sU0FBUyxDQUFDLEdBQUcsQ0FDakMsRUFBRSxFQUNGLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQ25CLEdBQUcsRUFDSCxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FDL0IsQ0FDRCxDQUFBO1FBQ0QsTUFBTSxJQUFBLHVCQUFRLEVBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUM1QixPQUFPLE1BQU0sQ0FBQTtJQUNkLENBQUMsQ0FBQTtBQUNGLENBQUM7QUFwQkQsNEJBb0JDO0FBRUQsZUFBZTtBQUNmLGdEQUFnRDtBQUNoRCwyRkFBMkY7QUFDM0YsZ0ZBQWdGO0FBQ2hGLFNBQWdCLE1BQU07SUFDckIsT0FBTyxVQUFVLENBQUMsUUFBUSxFQUFHLENBQUE7QUFDOUIsQ0FBQztBQUZELHdCQUVDO0FBQ0QsU0FBZ0IsTUFBTTtJQUNyQixPQUFPLFVBQVUsQ0FBQyxRQUFRLEVBQUcsQ0FBQTtBQUM5QixDQUFDO0FBRkQsd0JBRUM7QUFFRCxTQUFnQixPQUFPLENBQUMsSUFBWSxFQUFFLEVBQUMsTUFBTSxLQUF5QixFQUFFO0lBQ3ZFLE1BQU0sR0FBRyxHQUFHLE1BQU0sRUFBRSxDQUFBO0lBQ3BCLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUcsQ0FBQTtJQUNoQyxJQUFJLE1BQU07UUFBRSxHQUFHLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQTtJQUNuQyxFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtJQUNkLEVBQUUsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFBO0FBQ2pCLENBQUM7QUFORCwwQkFNQztBQUVELFNBQWdCLE9BQU8sQ0FBQyxJQUFZLEVBQUUsT0FBNEIsRUFBRTtJQUNuRSxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQ25CLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUcsQ0FBQTtJQUNoQyxFQUFFLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQTtBQUNqQixDQUFDO0FBSkQsMEJBSUM7QUFFRCxTQUFnQixPQUFPLENBQUMsUUFBZ0IsRUFBRSxPQUFxQjtJQUM5RCxNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsUUFBUSxFQUFHLENBQUE7SUFDaEMsRUFBRSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUE7SUFDbEIsRUFBRSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUE7SUFDaEIsRUFBRSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUE7QUFDckIsQ0FBQztBQUxELDBCQUtDO0FBRUQsU0FBZ0IsU0FBUyxDQUFDLE1BQWMsRUFBRSxFQUFDLE1BQU0sS0FBeUIsRUFBRTtJQUMzRSxNQUFNLEdBQUcsR0FBRyxNQUFNLEVBQUUsQ0FBQTtJQUNwQixNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsUUFBUSxFQUFHLENBQUE7SUFDaEMsSUFBSSxNQUFNO1FBQUUsR0FBRyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUE7SUFDbkMsRUFBRSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUE7SUFDaEIsRUFBRSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUE7QUFDbkIsQ0FBQztBQU5ELDhCQU1DO0FBRUQsU0FBZ0IsYUFBYSxDQUFDLE1BQWdCLEVBQUUsRUFBQyxNQUFNLEtBQXlCLEVBQUU7SUFDakYsTUFBTSxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUE7SUFDcEIsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLFFBQVEsRUFBRyxDQUFBO0lBQ2hDLElBQUksTUFBTTtRQUFFLEdBQUcsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFBO0lBQ25DLEVBQUUsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFBO0lBQ2hCLEVBQUUsQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFBO0FBQ3ZCLENBQUM7QUFORCxzQ0FNQztBQUVELFNBQWdCLFlBQVksQ0FBQyxNQUFzQixFQUFFLEVBQUMsTUFBTSxLQUF5QixFQUFFO0lBQ3RGLE1BQU0sR0FBRyxHQUFHLE1BQU0sRUFBRSxDQUFBO0lBQ3BCLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUcsQ0FBQTtJQUNoQyxJQUFJLE1BQU07UUFBRSxHQUFHLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQTtJQUNuQyxFQUFFLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQTtJQUNoQixFQUFFLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQTtBQUN0QixDQUFDO0FBTkQsb0NBTUM7QUFFRCxTQUFnQixPQUFPLENBQUMsSUFBUyxFQUFFLEVBQUMsTUFBTSxLQUF5QixFQUFFO0lBQ3BFLE1BQU0sR0FBRyxHQUFHLE1BQU0sRUFBRSxDQUFBO0lBQ3BCLElBQUksTUFBTTtRQUFFLEdBQUcsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFBO0lBRW5DLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUcsQ0FBQTtJQUNoQyxFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtJQUNkLEVBQUUsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFBO0FBQ2pCLENBQUM7QUFQRCwwQkFPQztBQUVELFNBQWdCLFdBQVcsQ0FBQyxHQUFXLEVBQUUsTUFBaUI7SUFDekQsTUFBTSxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUE7SUFDcEIsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLFFBQVEsRUFBRyxDQUFBO0lBQ2hDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFBO0lBQ3ZCLEVBQUUsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFBO0lBQ2IsRUFBRSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUE7QUFDckIsQ0FBQztBQU5ELGtDQU1DO0FBMEJELFNBQWdCLGFBQWEsQ0FLM0IsS0FBK0I7SUFDaEMsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ3ZDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNuQyxvRUFBb0U7SUFDcEUsTUFBTSxPQUFPLEdBQWdDLENBQUMsR0FBRyxNQUFjLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDM0csSUFBSSxDQUFDO1lBQ0osT0FBTyxNQUFNLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFBO1FBQ3RELENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1osTUFBTSxDQUFDLENBQUE7UUFDUixDQUFDO0lBQ0YsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUNKLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRTtRQUN2QyxHQUFHO1lBQ0YsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLGFBQWEsQ0FBQztnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUE7WUFDbkUsT0FBTyxNQUFNLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUM3QixDQUFDO0tBQ0QsQ0FBQyxDQUFBO0lBQ0YsT0FBTyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsTUFBTSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUMsSUFBSSxFQUFDLEVBQUU7UUFDM0MsTUFBTSxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQTtRQUN4QixPQUFPLElBQUksRUFBRSxDQUFBO0lBQ2QsQ0FBQyxDQUFBO0lBQ0QsT0FBTyxPQUFPLENBQUE7QUFDZixDQUFDO0FBM0JELHNDQTJCQyJ9
|
package/cjs/dxHelpers.d.ts
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
/// <reference types="node" resolution-mode="require"/>
|
|
4
4
|
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
5
5
|
import { Readable } from 'node:stream';
|
|
6
|
+
import { SendOptions } from 'send';
|
|
6
7
|
export type DxContext = {
|
|
7
8
|
charset?: BufferEncoding;
|
|
8
9
|
jsonBeautify?: boolean;
|
|
@@ -10,23 +11,34 @@ export type DxContext = {
|
|
|
10
11
|
} & ({
|
|
11
12
|
type: 'text';
|
|
12
13
|
data: string;
|
|
14
|
+
options: undefined;
|
|
13
15
|
} | {
|
|
14
16
|
type: 'html';
|
|
15
17
|
data: string;
|
|
18
|
+
options: undefined;
|
|
16
19
|
} | {
|
|
17
20
|
type: 'buffer';
|
|
18
21
|
data: Buffer;
|
|
22
|
+
options: undefined;
|
|
19
23
|
} | {
|
|
20
24
|
type: 'json';
|
|
21
25
|
data: any;
|
|
26
|
+
options: undefined;
|
|
22
27
|
} | {
|
|
23
28
|
type: 'redirect';
|
|
24
29
|
data: string;
|
|
30
|
+
options: undefined;
|
|
25
31
|
} | {
|
|
26
32
|
type: 'nodeStream';
|
|
27
33
|
data: Readable;
|
|
34
|
+
options: undefined;
|
|
28
35
|
} | {
|
|
29
36
|
type: 'webStream';
|
|
30
37
|
data: ReadableStream;
|
|
38
|
+
options: undefined;
|
|
39
|
+
} | {
|
|
40
|
+
type: 'file';
|
|
41
|
+
data: string;
|
|
42
|
+
options?: SendOptions;
|
|
31
43
|
});
|
|
32
|
-
export declare function writeRes(req: IncomingMessage, res: ServerResponse, { type, data, charset, jsonBeautify, disableEtag }: DxContext): Promise<void>;
|
|
44
|
+
export declare function writeRes(req: IncomingMessage, res: ServerResponse, { type, data, charset, jsonBeautify, disableEtag, options }: DxContext): Promise<void>;
|
package/cjs/dxHelpers.js
CHANGED
|
@@ -8,7 +8,9 @@ const node_stream_1 = require("node:stream");
|
|
|
8
8
|
const jdefer_1 = __importDefault(require("jdefer"));
|
|
9
9
|
const node_util_1 = require("node:util");
|
|
10
10
|
const etag_js_1 = require("./etag.js");
|
|
11
|
-
|
|
11
|
+
const staticHelpers_js_1 = require("./staticHelpers.js");
|
|
12
|
+
const dx_js_1 = require("./dx.js");
|
|
13
|
+
async function writeRes(req, res, { type, data, charset, jsonBeautify, disableEtag, options }) {
|
|
12
14
|
const setContentType = (contentType) => {
|
|
13
15
|
if (res.headersSent || res.getHeader('content-type'))
|
|
14
16
|
return;
|
|
@@ -43,6 +45,8 @@ async function writeRes(req, res, { type, data, charset, jsonBeautify, disableEt
|
|
|
43
45
|
res.setHeader('location', data);
|
|
44
46
|
bufferOrStream = Buffer.from('', charset);
|
|
45
47
|
break;
|
|
48
|
+
case 'file':
|
|
49
|
+
return (0, staticHelpers_js_1.sendFile)(req, (0, dx_js_1.getRes)(), encodeURI(data), options, () => void 0);
|
|
46
50
|
case undefined:
|
|
47
51
|
// skip response. Some middleware may handle it outside the chain. For example, express middleware
|
|
48
52
|
return;
|
|
@@ -52,6 +56,7 @@ async function writeRes(req, res, { type, data, charset, jsonBeautify, disableEt
|
|
|
52
56
|
throw new Error(`unsupported response type ${type}`);
|
|
53
57
|
}
|
|
54
58
|
if (res.headersSent) {
|
|
59
|
+
// for example, chainStatic or setFile send the response directly
|
|
55
60
|
if (res.writableFinished) {
|
|
56
61
|
// skipped: response is already finished
|
|
57
62
|
}
|
|
@@ -110,4 +115,4 @@ async function writeRes(req, res, { type, data, charset, jsonBeautify, disableEt
|
|
|
110
115
|
}
|
|
111
116
|
}
|
|
112
117
|
exports.writeRes = writeRes;
|
|
113
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
118
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHhIZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2R4SGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSw2Q0FBb0M7QUFDcEMsb0RBQThCO0FBQzlCLHlDQUFtQztBQUNuQyx1Q0FBZ0Q7QUFFaEQseURBQTJDO0FBQzNDLG1DQUE4QjtBQStDdkIsS0FBSyxVQUFVLFFBQVEsQ0FBQyxHQUFvQixFQUFFLEdBQW1CLEVBQUUsRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBWTtJQUM3SSxNQUFNLGNBQWMsR0FBRyxDQUFDLFdBQW1CLEVBQUUsRUFBRTtRQUM5QyxJQUFJLEdBQUcsQ0FBQyxXQUFXLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUM7WUFBRSxPQUFNO1FBQzVELEdBQUcsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLEdBQUcsV0FBVyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsYUFBYSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUN4RixDQUFDLENBQUE7SUFDRCxJQUFJLGNBQWMsQ0FBQTtJQUVsQixRQUFRLElBQUksRUFBRSxDQUFDO1FBQ2QsS0FBSyxNQUFNO1lBQ1YsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQzdCLEtBQUssTUFBTTtZQUNWLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQTtZQUMzQixtQkFBbUI7WUFDbkIsY0FBYyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBQzNDLE1BQUs7UUFDTixLQUFLLFFBQVE7WUFDWixjQUFjLENBQUMsMEJBQTBCLENBQUMsQ0FBQTtZQUMxQyxjQUFjLEdBQUcsSUFBSSxDQUFBO1lBQ3JCLE1BQUs7UUFDTixLQUFLLFlBQVk7WUFDaEIsY0FBYyxDQUFDLDBCQUEwQixD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
|
package/cjs/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
export { getReq, getRes, setHtml, setNodeStream, setWebStream, setJson, setBuffer, setRedirect, setText } from './dx.js';
|
|
1
|
+
export { getReq, getRes, setHtml, setNodeStream, setWebStream, setJson, setBuffer, setRedirect, setText, setFile, makeDxContext, } from './dx.js';
|
|
2
2
|
import { dxServer } from './dx.js';
|
|
3
|
-
export { getJson, getRaw, getText, getUrlEncoded, getQuery, } from './body.js';
|
|
3
|
+
export { getBuffer, getJson, getRaw, getText, getUrlEncoded, getQuery, } from './body.js';
|
|
4
4
|
export { router } from './route.js';
|
|
5
5
|
export { connectMiddlewares } from './connect.js';
|
|
6
|
+
export { chainStatic } from './static.js';
|
|
6
7
|
export default dxServer;
|
package/cjs/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.connectMiddlewares = exports.router = exports.getQuery = exports.getUrlEncoded = exports.getText = exports.getRaw = exports.getJson = exports.setText = exports.setRedirect = exports.setBuffer = exports.setJson = exports.setWebStream = exports.setNodeStream = exports.setHtml = exports.getRes = exports.getReq = void 0;
|
|
3
|
+
exports.chainStatic = exports.connectMiddlewares = exports.router = exports.getQuery = exports.getUrlEncoded = exports.getText = exports.getRaw = exports.getJson = exports.getBuffer = exports.makeDxContext = exports.setFile = exports.setText = exports.setRedirect = exports.setBuffer = exports.setJson = exports.setWebStream = exports.setNodeStream = exports.setHtml = exports.getRes = exports.getReq = void 0;
|
|
4
4
|
var dx_js_1 = require("./dx.js");
|
|
5
5
|
Object.defineProperty(exports, "getReq", { enumerable: true, get: function () { return dx_js_1.getReq; } });
|
|
6
6
|
Object.defineProperty(exports, "getRes", { enumerable: true, get: function () { return dx_js_1.getRes; } });
|
|
@@ -11,8 +11,11 @@ Object.defineProperty(exports, "setJson", { enumerable: true, get: function () {
|
|
|
11
11
|
Object.defineProperty(exports, "setBuffer", { enumerable: true, get: function () { return dx_js_1.setBuffer; } });
|
|
12
12
|
Object.defineProperty(exports, "setRedirect", { enumerable: true, get: function () { return dx_js_1.setRedirect; } });
|
|
13
13
|
Object.defineProperty(exports, "setText", { enumerable: true, get: function () { return dx_js_1.setText; } });
|
|
14
|
+
Object.defineProperty(exports, "setFile", { enumerable: true, get: function () { return dx_js_1.setFile; } });
|
|
15
|
+
Object.defineProperty(exports, "makeDxContext", { enumerable: true, get: function () { return dx_js_1.makeDxContext; } });
|
|
14
16
|
const dx_js_2 = require("./dx.js");
|
|
15
17
|
var body_js_1 = require("./body.js");
|
|
18
|
+
Object.defineProperty(exports, "getBuffer", { enumerable: true, get: function () { return body_js_1.getBuffer; } });
|
|
16
19
|
Object.defineProperty(exports, "getJson", { enumerable: true, get: function () { return body_js_1.getJson; } });
|
|
17
20
|
Object.defineProperty(exports, "getRaw", { enumerable: true, get: function () { return body_js_1.getRaw; } });
|
|
18
21
|
Object.defineProperty(exports, "getText", { enumerable: true, get: function () { return body_js_1.getText; } });
|
|
@@ -22,5 +25,7 @@ var route_js_1 = require("./route.js");
|
|
|
22
25
|
Object.defineProperty(exports, "router", { enumerable: true, get: function () { return route_js_1.router; } });
|
|
23
26
|
var connect_js_1 = require("./connect.js");
|
|
24
27
|
Object.defineProperty(exports, "connectMiddlewares", { enumerable: true, get: function () { return connect_js_1.connectMiddlewares; } });
|
|
28
|
+
var static_js_1 = require("./static.js");
|
|
29
|
+
Object.defineProperty(exports, "chainStatic", { enumerable: true, get: function () { return static_js_1.chainStatic; } });
|
|
25
30
|
exports.default = dx_js_2.dxServer;
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBWWdCO0FBWGYsK0ZBQUEsTUFBTSxPQUFBO0FBQ04sK0ZBQUEsTUFBTSxPQUFBO0FBQ04sZ0dBQUEsT0FBTyxPQUFBO0FBQ1Asc0dBQUEsYUFBYSxPQUFBO0FBQ2IscUdBQUEsWUFBWSxPQUFBO0FBQ1osZ0dBQUEsT0FBTyxPQUFBO0FBQ1Asa0dBQUEsU0FBUyxPQUFBO0FBQ1Qsb0dBQUEsV0FBVyxPQUFBO0FBQ1gsZ0dBQUEsT0FBTyxPQUFBO0FBQ1AsZ0dBQUEsT0FBTyxPQUFBO0FBQ1Asc0dBQUEsYUFBYSxPQUFBO0FBRWQsbUNBQWdDO0FBQ2hDLHFDQU9rQjtBQU5qQixvR0FBQSxTQUFTLE9BQUE7QUFDVCxrR0FBQSxPQUFPLE9BQUE7QUFDUCxpR0FBQSxNQUFNLE9BQUE7QUFDTixrR0FBQSxPQUFPLE9BQUE7QUFDUCx3R0FBQSxhQUFhLE9BQUE7QUFDYixtR0FBQSxRQUFRLE9BQUE7QUFFVCx1Q0FBaUM7QUFBekIsa0dBQUEsTUFBTSxPQUFBO0FBQ2QsMkNBQStDO0FBQXZDLGdIQUFBLGtCQUFrQixPQUFBO0FBQzFCLHlDQUF1QztBQUEvQix3R0FBQSxXQUFXLE9BQUE7QUFFbkIsa0JBQWUsZ0JBQVEsQ0FBQSJ9
|
package/cjs/route.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Key } from 'path-to-regexp';
|
|
2
|
+
import { Chainable } from './dx.js';
|
|
2
3
|
interface RegexpToPathOptions {
|
|
3
4
|
end?: boolean;
|
|
4
5
|
strict?: boolean;
|
|
@@ -13,9 +14,6 @@ export declare function matchPattern<Params extends Record<Key['name'], string>>
|
|
|
13
14
|
matched: any;
|
|
14
15
|
params: any;
|
|
15
16
|
} | undefined;
|
|
16
|
-
interface Chainable<P extends any[] = any[], R = any, Next = (...np: any[]) => any> {
|
|
17
|
-
(next: Next, ...p: P): R;
|
|
18
|
-
}
|
|
19
17
|
interface RouteContext {
|
|
20
18
|
matched: string;
|
|
21
19
|
next(): any;
|
package/cjs/route.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.router = exports.matchPattern = void 0;
|
|
4
4
|
const path_to_regexp_1 = require("path-to-regexp");
|
|
5
5
|
const dx_js_1 = require("./dx.js");
|
|
6
|
+
const bodyHelpers_js_1 = require("./bodyHelpers.js");
|
|
6
7
|
const cache = {};
|
|
7
8
|
const cacheLimit = 10000;
|
|
8
9
|
let cacheCount = 0;
|
|
@@ -56,7 +57,7 @@ exports.router = {
|
|
|
56
57
|
if (req.method !== method.toUpperCase())
|
|
57
58
|
return next();
|
|
58
59
|
for (const [pattern, handler] of Object.entries(router)) {
|
|
59
|
-
const match = matchPattern(
|
|
60
|
+
const match = matchPattern((0, bodyHelpers_js_1.urlFromReq)(req).pathname, `${prefix}${pattern}`, options);
|
|
60
61
|
if (match)
|
|
61
62
|
return handler({
|
|
62
63
|
...match,
|
|
@@ -70,7 +71,7 @@ exports.router = {
|
|
|
70
71
|
return next => {
|
|
71
72
|
const req = (0, dx_js_1.getReq)();
|
|
72
73
|
for (const [pattern, handler] of Object.entries(router)) {
|
|
73
|
-
const match = matchPattern(req.
|
|
74
|
+
const match = matchPattern((0, bodyHelpers_js_1.urlFromReq)(req).pathname, `${prefix}${pattern}`, options);
|
|
74
75
|
if (match)
|
|
75
76
|
return handler({
|
|
76
77
|
...match,
|
|
@@ -83,4 +84,4 @@ exports.router = {
|
|
|
83
84
|
};
|
|
84
85
|
for (const method of allMethods)
|
|
85
86
|
exports.router[method] = exports.router.method.bind(exports.router, method);
|
|
86
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsbURBQTJDO0FBQzNDLG1DQUF5QztBQUN6QyxxREFBMkM7QUFFM0MsTUFBTSxLQUFLLEdBQXdCLEVBQUUsQ0FBQTtBQUNyQyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUE7QUFDeEIsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFBO0FBY2xCLFNBQVMsV0FBVyxDQUFDLElBQVksRUFBRSxPQUE0QjtJQUM5RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3hDLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQTtJQUMzRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFBRSxPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUUzQyxNQUFNLElBQUksR0FBVSxFQUFFLENBQUE7SUFDdEIsTUFBTSxNQUFNLEdBQUcsSUFBQSw2QkFBWSxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDaEQsTUFBTSxNQUFNLEdBQUc7UUFDZCxNQUFNO1FBQ04sSUFBSTtLQUNKLENBQUE7SUFFRCxJQUFJLFVBQVUsR0FBRyxVQUFVLEVBQUUsQ0FBQztRQUM3QixTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFBO1FBQ3hCLFVBQVUsRUFBRSxDQUFBO0lBQ2IsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFBO0FBQ2QsQ0FBQztBQUVELFNBQWdCLFlBQVksQ0FDM0IsUUFBZ0IsRUFDaEIsT0FBZSxFQUNmLE9BQTZCO0lBRTdCLE9BQU8sR0FBRyxFQUFDLEdBQUcsT0FBTyxFQUFDLENBQUE7SUFDdEIsT0FBTyxDQUFDLEdBQUcsS0FBSyxJQUFJLENB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
|