dx-server 0.4.0 → 0.5.1
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 +33 -39
- package/cjs/body.d.ts +2 -9
- package/cjs/body.js +11 -100
- package/cjs/bodyHelpers.d.ts +16 -0
- package/cjs/bodyHelpers.js +102 -0
- package/cjs/dx.d.ts +13 -60
- package/cjs/dx.js +41 -134
- package/cjs/dxHelpers.d.ts +32 -0
- package/cjs/dxHelpers.js +113 -0
- package/cjs/etag.js +1 -1
- package/cjs/express.js +6 -8
- package/cjs/file.d.ts +1 -2
- package/cjs/file.js +4 -4
- package/cjs/helpers.d.ts +2 -0
- package/cjs/helpers.js +14 -0
- package/cjs/index.d.ts +4 -3
- package/cjs/index.js +6 -9
- package/cjs/route.js +4 -4
- package/cjs/static.js +4 -4
- package/esm/body.d.ts +2 -9
- package/esm/body.js +11 -98
- package/esm/bodyHelpers.d.ts +16 -0
- package/esm/bodyHelpers.js +89 -0
- package/esm/dx.d.ts +13 -60
- package/esm/dx.js +37 -130
- package/esm/dxHelpers.d.ts +32 -0
- package/esm/dxHelpers.js +106 -0
- package/esm/etag.js +1 -1
- package/esm/express.js +6 -8
- package/esm/file.d.ts +1 -2
- package/esm/file.js +4 -4
- package/esm/helpers.d.ts +2 -0
- package/esm/helpers.js +3 -0
- package/esm/index.d.ts +4 -3
- package/esm/index.js +5 -4
- package/esm/route.js +4 -4
- package/esm/static.js +3 -3
- package/package.json +6 -4
- package/cjs/context.d.ts +0 -19
- package/cjs/context.js +0 -32
- package/esm/context.d.ts +0 -19
- package/esm/context.js +0 -28
package/esm/dxHelpers.js
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { Readable } from 'node:stream';
|
|
2
|
+
import makeDefer from 'jdefer';
|
|
3
|
+
import { promisify } from 'node:util';
|
|
4
|
+
import { entityTag, isFreshETag } from './etag.js';
|
|
5
|
+
export async function writeRes(req, res, { type, data, charset, jsonBeautify, disableEtag }) {
|
|
6
|
+
const setContentType = (contentType) => {
|
|
7
|
+
if (res.headersSent || res.getHeader('content-type'))
|
|
8
|
+
return;
|
|
9
|
+
res.setHeader('content-type', `${contentType}${charset ? `; charset=${charset}` : ''}`);
|
|
10
|
+
};
|
|
11
|
+
let bufferOrStream;
|
|
12
|
+
switch (type) {
|
|
13
|
+
case 'text':
|
|
14
|
+
setContentType('text/plain');
|
|
15
|
+
case 'html':
|
|
16
|
+
setContentType('text/html');
|
|
17
|
+
// shared with text
|
|
18
|
+
bufferOrStream = Buffer.from(data, charset);
|
|
19
|
+
break;
|
|
20
|
+
case 'buffer':
|
|
21
|
+
setContentType('application/octet-stream');
|
|
22
|
+
bufferOrStream = data;
|
|
23
|
+
break;
|
|
24
|
+
case 'nodeStream':
|
|
25
|
+
setContentType('application/octet-stream');
|
|
26
|
+
bufferOrStream = data;
|
|
27
|
+
break;
|
|
28
|
+
case 'webStream':
|
|
29
|
+
setContentType('application/octet-stream');
|
|
30
|
+
bufferOrStream = Readable.fromWeb(data);
|
|
31
|
+
break;
|
|
32
|
+
case 'json':
|
|
33
|
+
setContentType('application/json');
|
|
34
|
+
bufferOrStream = Buffer.from(jsonBeautify ? JSON.stringify(data, null, 2) : JSON.stringify(data), charset);
|
|
35
|
+
break;
|
|
36
|
+
case 'redirect':
|
|
37
|
+
res.setHeader('location', data);
|
|
38
|
+
bufferOrStream = Buffer.from('', charset);
|
|
39
|
+
break;
|
|
40
|
+
case undefined:
|
|
41
|
+
// skip response. Some middleware may handle it outside the chain. For example, express middleware
|
|
42
|
+
return;
|
|
43
|
+
default:
|
|
44
|
+
if (!res.getHeader('content-type'))
|
|
45
|
+
res.setHeader('content-type', 'text/plain');
|
|
46
|
+
throw new Error(`unsupported response type ${type}`);
|
|
47
|
+
}
|
|
48
|
+
if (res.headersSent) {
|
|
49
|
+
if (res.writableFinished) {
|
|
50
|
+
// skipped: response is already finished
|
|
51
|
+
}
|
|
52
|
+
else if (res.writableEnded) {
|
|
53
|
+
const defer = makeDefer();
|
|
54
|
+
res.addListener('finish', defer.resolve);
|
|
55
|
+
await defer.promise;
|
|
56
|
+
// skipped: response is already ended
|
|
57
|
+
// chunk is not fully flushed yet
|
|
58
|
+
}
|
|
59
|
+
else
|
|
60
|
+
await promisify(res.end.bind(res))(undefined); // to be consistent, we end the response immediately
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
// https://github.com/expressjs/express/blob/980d881e3b023db079de60477a2588a91f046ca5/lib/response.js#L210
|
|
64
|
+
if (res.statusCode === 204) { // No Content
|
|
65
|
+
res.removeHeader('content-type');
|
|
66
|
+
res.removeHeader('content-length');
|
|
67
|
+
res.removeHeader('transfer-encoding');
|
|
68
|
+
// write nothing
|
|
69
|
+
}
|
|
70
|
+
if (res.statusCode === 205) { // reset content. Tell client to clear the form, etc.
|
|
71
|
+
res.setHeader('content-length', 0);
|
|
72
|
+
res.removeHeader('transfer-encoding');
|
|
73
|
+
}
|
|
74
|
+
else if (req.method === 'HEAD') {
|
|
75
|
+
// write nothing
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
if (Buffer.isBuffer(bufferOrStream)) {
|
|
79
|
+
// support: 304 (etag), zipping, file etag and last modified
|
|
80
|
+
res.setHeader('content-length', bufferOrStream.length);
|
|
81
|
+
if (!disableEtag) {
|
|
82
|
+
const etag = entityTag(bufferOrStream);
|
|
83
|
+
const lastModified = res.getHeader('last-modified');
|
|
84
|
+
res.setHeader('ETag', etag);
|
|
85
|
+
if (isFreshETag(req, etag)) {
|
|
86
|
+
res.removeHeader('content-type');
|
|
87
|
+
res.removeHeader('content-length');
|
|
88
|
+
res.removeHeader('transfer-encoding');
|
|
89
|
+
res.statusCode = 304;
|
|
90
|
+
// write nothing
|
|
91
|
+
}
|
|
92
|
+
else
|
|
93
|
+
res.write(bufferOrStream);
|
|
94
|
+
}
|
|
95
|
+
else
|
|
96
|
+
res.write(bufferOrStream);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
bufferOrStream.pipe(res);
|
|
100
|
+
}
|
|
101
|
+
// we do not support content-encoding (gzip, deflate, br) and leave it to reverse proxy or CDN
|
|
102
|
+
}
|
|
103
|
+
await promisify(res.end.bind(res))(undefined); // some express middleware, such as express-session, requires explicitly passing chunk
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHhIZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2R4SGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sYUFBYSxDQUFBO0FBQ3BDLE9BQU8sU0FBUyxNQUFNLFFBQVEsQ0FBQTtBQUM5QixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sV0FBVyxDQUFBO0FBQ25DLE9BQU8sRUFBQyxTQUFTLEVBQUUsV0FBVyxFQUFDLE1BQU0sV0FBVyxDQUFBO0FBb0NoRCxNQUFNLENBQUMsS0FBSyxVQUFVLFFBQVEsQ0FBQyxHQUFvQixFQUFFLEdBQW1CLEVBQUUsRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFZO0lBQ3BJLE1BQU0sY0FBYyxHQUFHLENBQUMsV0FBbUIsRUFBRSxFQUFFO1FBQzlDLElBQUksR0FBRyxDQUFDLFdBQVcsSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQztZQUFFLE9BQU07UUFDNUQsR0FBRyxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsR0FBRyxXQUFXLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxhQUFhLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ3hGLENBQUMsQ0FBQTtJQUNELElBQUksY0FBYyxDQUFBO0lBRWxCLFFBQVEsSUFBSSxFQUFFLENBQUM7UUFDZCxLQUFLLE1BQU07WUFDVixjQUFjLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDN0IsS0FBSyxNQUFNO1lBQ1YsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1lBQzNCLG1CQUFtQjtZQUNuQixjQUFjLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDM0MsTUFBSztRQUNOLEtBQUssUUFBUTtZQUNaLGNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxD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
|
package/esm/etag.js
CHANGED
|
@@ -87,4 +87,4 @@ function parseTokenList(str) {
|
|
|
87
87
|
list.push(str.substring(start, end));
|
|
88
88
|
return list;
|
|
89
89
|
}
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXRhZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9ldGFnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGtHQUFrRztBQUNsRyxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUE7QUFHaEMsTUFBTSxVQUFVLFNBQVMsQ0FBQyxHQUFXLEVBQUUsSUFBYztJQUNwRCxxQkFBcUI7SUFDckIsT0FBTyxHQUFHLENBQUMsTUFBTTtRQUNoQixDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxNQUFNO2FBQ3BDLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsTUFBTSxDQUFDLEdBQUcsQ0FBQzthQUNYLE1BQU0sQ0FBQyxRQUFRLENBQUM7YUFDaEIsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRztRQUNyQixDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxpQ0FBaUMsQ0FBQTtJQUN2RCw0RUFBNEU7SUFDNUUseUJBQXlCO0lBQ3pCLGdHQUFnRztBQUNqRyxDQUFDO0FBRUQsTUFBTSw2QkFBNkIsR0FBRyxnQ0FBZ0MsQ0FBQTtBQUN0RSxNQUFNLFVBQVUsT0FBTyxDQUFDLElBQUk7SUFDM0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDL0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUE7SUFFbkMsT0FBTyxJQUFJLElBQUksSUFBSSxLQUFLLEdBQUcsQ0FBQTtBQUM1QixDQUFDO0FBQ0QsNkZBQTZGO0FBQzdGLE1BQU0sVUFBVSxXQUFXLENBQUMsR0FBb0IsRUFBRSxJQUFZO0lBQzdELE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsZUFB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
|
package/esm/express.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import express from 'express';
|
|
2
|
-
import { reqContext, resContext } from './context.js';
|
|
3
2
|
import makeDefer from 'jdefer';
|
|
3
|
+
import { getReq, getRes } from './dx.js';
|
|
4
4
|
export const expressApp = async (setup) => {
|
|
5
5
|
const symbol = Symbol('expressApp');
|
|
6
6
|
const app = express();
|
|
@@ -8,10 +8,9 @@ export const expressApp = async (setup) => {
|
|
|
8
8
|
app.use((req, _res, _next) => req[symbol].resolve());
|
|
9
9
|
app.use((err, req, _res, _next) => req[symbol].reject(err));
|
|
10
10
|
return async (next) => {
|
|
11
|
-
const req = reqContext.value;
|
|
12
11
|
const defer = makeDefer();
|
|
13
|
-
|
|
14
|
-
app(
|
|
12
|
+
getReq()[symbol] = defer;
|
|
13
|
+
app(getReq(), getRes());
|
|
15
14
|
await defer.promise;
|
|
16
15
|
await next();
|
|
17
16
|
};
|
|
@@ -23,13 +22,12 @@ export const expressRouter = async (setup) => {
|
|
|
23
22
|
router.use((req, _res, _next) => req[symbol].resolve());
|
|
24
23
|
router.use((err, req, _res, _next) => req[symbol].reject(err));
|
|
25
24
|
return async (next) => {
|
|
26
|
-
const req = reqContext.value;
|
|
27
25
|
const defer = makeDefer();
|
|
28
|
-
|
|
29
|
-
router(
|
|
26
|
+
getReq()[symbol] = defer;
|
|
27
|
+
router(getReq(), getRes());
|
|
30
28
|
await defer.promise; // if express middleware handles the request, this will never resolve.
|
|
31
29
|
await next();
|
|
32
30
|
};
|
|
33
31
|
};
|
|
34
32
|
export const expressMiddlewares = (...middlewares) => expressRouter(router => router.use(...middlewares));
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwcmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9leHByZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sT0FBaUUsTUFBTSxTQUFTLENBQUE7QUFDdkYsT0FBTyxTQUFTLE1BQU0sUUFBUSxDQUFBO0FBQzlCLE9BQU8sRUFBQyxNQUFNLEVBQUUsTUFBTSxFQUFDLE1BQU0sU0FBUyxDQUFBO0FBRXRDLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxLQUFLLEVBQUUsS0FBNEIsRUFBRSxFQUFFO0lBQ2hFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUVuQyxNQUFNLEdBQUcsR0FBRyxPQUFPLEVBQUUsQ0FBQTtJQUNyQixNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNoQixHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFBO0lBQ3BELEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUMzRCxPQUFPLEtBQUssRUFBQyxJQUFJLEVBQUMsRUFBRTtRQUNuQixNQUFNLEtBQUssR0FBRyxTQUFTLEVBQUUsQ0FBQTtRQUN6QixNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUE7UUFDeEIsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUE7UUFDdkIsTUFBTSxLQUFLLENBQUMsT0FBTyxDQUFBO1FBQ25CLE1BQU0sSUFBSSxFQUFFLENBQUE7SUFDYixDQUFDLENBQUE7QUFDRixDQUFDLENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsS0FBSyxFQUFFLEtBQThCLEVBQUUsRUFBRTtJQUNyRSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUE7SUFFdEMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFBO0lBQy9CLE1BQU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ25CLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7SUFDdkQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO0lBQzlELE9BQU8sS0FBSyxFQUFDLElBQUksRUFBQyxFQUFFO1FBQ25CLE1BQU0sS0FBSyxHQUFHLFNBQVMsRUFBRSxDQUFBO1FBQ3pCLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQTtRQUN4QixNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQTtRQUMxQixNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUEsQ0FBQyxzRUFBc0U7UUFDMUYsTUFBTSxJQUFJLEVBQUUsQ0FBQTtJQUNiLENBQUMsQ0FBQTtBQUNGLENBQUMsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQ2pDLEdBQUcsV0FBeUUsRUFDM0UsRUFBRSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFBIn0=
|
package/esm/file.d.ts
CHANGED
package/esm/file.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getReq, getRes } from './dx.js';
|
|
2
2
|
export const serveFile = ({ prefix = '' }) => next => {
|
|
3
|
-
const req =
|
|
4
|
-
const res =
|
|
3
|
+
const req = getReq();
|
|
4
|
+
const res = getRes();
|
|
5
5
|
if (req.method !== 'GET' && req.method !== 'HEAD')
|
|
6
6
|
return next();
|
|
7
7
|
};
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9maWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsTUFBTSxFQUFDLE1BQU0sU0FBUyxDQUFBO0FBRXRDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUN4QixFQUFDLE1BQU0sR0FBRyxFQUFFLEVBRVgsRUFDQSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7SUFDWCxNQUFNLEdBQUcsR0FBRyxNQUFNLEVBQUUsQ0FBQTtJQUNwQixNQUFNLEdBQUcsR0FBRyxNQUFNLEVBQUUsQ0FBQTtJQUNwQixJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssS0FBSyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssTUFBTTtRQUFFLE9BQU8sSUFBSSxFQUFFLENBQUE7QUFDakUsQ0FBQyxDQUFBIn0=
|
package/esm/helpers.d.ts
ADDED
package/esm/helpers.js
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { writeRes } from './dxHelpers.js';
|
|
2
|
+
export { setBufferBodyDefaultOptions, bufferFromReq, jsonFromReq, rawFromReq, textFromReq, urlEncodedFromReq, queryFromReq, } from './bodyHelpers.js';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQTtBQUN2QyxPQUFPLEVBQ04sMkJBQTJCLEVBQzNCLGFBQWEsRUFDYixXQUFXLEVBQ1gsVUFBVSxFQUNWLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsWUFBWSxHQUNaLE1BQU0sa0JBQWtCLENBQUEifQ==
|
package/esm/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export {
|
|
2
|
-
|
|
3
|
-
export {
|
|
1
|
+
export { getReq, getRes, setHtml, setNodeStream, setWebStream, setJson, setBuffer, setRedirect, setText } from './dx.js';
|
|
2
|
+
import { dxServer } from './dx.js';
|
|
3
|
+
export { getJson, getRaw, getText, getUrlEncoded, getQuery, } from './body.js';
|
|
4
4
|
export { router } from './route.js';
|
|
5
|
+
export default dxServer;
|
package/esm/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
export {
|
|
2
|
-
|
|
3
|
-
export {
|
|
1
|
+
export { getReq, getRes, setHtml, setNodeStream, setWebStream, setJson, setBuffer, setRedirect, setText } from './dx.js';
|
|
2
|
+
import { dxServer } from './dx.js';
|
|
3
|
+
export { getJson, getRaw, getText, getUrlEncoded, getQuery, } from './body.js';
|
|
4
4
|
export { router } from './route.js';
|
|
5
|
-
|
|
5
|
+
export default dxServer;
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLE1BQU0sRUFDTixNQUFNLEVBQ04sT0FBTyxFQUNQLGFBQWEsRUFDYixZQUFZLEVBQ1osT0FBTyxFQUNQLFNBQVMsRUFDVCxXQUFXLEVBQ1gsT0FBTyxFQUNQLE1BQU0sU0FBUyxDQUFBO0FBQ2hCLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxTQUFTLENBQUE7QUFDaEMsT0FBTyxFQUNOLE9BQU8sRUFDUCxNQUFNLEVBQ04sT0FBTyxFQUNQLGFBQWEsRUFDYixRQUFRLEdBQ1IsTUFBTSxXQUFXLENBQUE7QUFDbEIsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFlBQVksQ0FBQTtBQUVqQyxlQUFlLFFBQVEsQ0FBQSJ9
|
package/esm/route.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { pathToRegexp } from 'path-to-regexp';
|
|
2
|
-
import {
|
|
2
|
+
import { getReq } from './dx.js';
|
|
3
3
|
const cache = {};
|
|
4
4
|
const cacheLimit = 10000;
|
|
5
5
|
let cacheCount = 0;
|
|
@@ -48,7 +48,7 @@ const allMethods = [
|
|
|
48
48
|
export const router = {
|
|
49
49
|
method(method, router, { prefix = '', ...options } = {}) {
|
|
50
50
|
return next => {
|
|
51
|
-
const req =
|
|
51
|
+
const req = getReq();
|
|
52
52
|
if (req.method !== method.toUpperCase())
|
|
53
53
|
return next();
|
|
54
54
|
for (const [pattern, handler] of Object.entries(router)) {
|
|
@@ -64,7 +64,7 @@ export const router = {
|
|
|
64
64
|
},
|
|
65
65
|
all(router, { prefix = '', ...options } = {}) {
|
|
66
66
|
return next => {
|
|
67
|
-
const req =
|
|
67
|
+
const req = getReq();
|
|
68
68
|
for (const [pattern, handler] of Object.entries(router)) {
|
|
69
69
|
const match = matchPattern(req.url ?? '', `${prefix}${pattern}`, options);
|
|
70
70
|
if (match)
|
|
@@ -79,4 +79,4 @@ export const router = {
|
|
|
79
79
|
};
|
|
80
80
|
for (const method of allMethods)
|
|
81
81
|
router[method] = router.method.bind(router, method);
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGdCQUFnQixDQUFBO0FBQzNDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxTQUFTLENBQUE7QUFFOUIsTUFBTSxLQUFLLEdBQXdCLEVBQUUsQ0FBQTtBQUNyQyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUE7QUFDeEIsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFBO0FBY2xCLFNBQVMsV0FBVyxDQUFDLElBQVksRUFBRSxPQUE0QjtJQUM5RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3hDLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQTtJQUMzRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFBRSxPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUUzQyxNQUFNLElBQUksR0FBVSxFQUFFLENBQUE7SUFDdEIsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDaEQsTUFBTSxNQUFNLEdBQUc7UUFDZCxNQUFNO1FBQ04sSUFBSTtLQUNKLENBQUE7SUFFRCxJQUFJLFVBQVUsR0FBRyxVQUFVLEVBQUUsQ0FBQztRQUM3QixTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFBO1FBQ3hCLFVBQVUsRUFBRSxDQUFBO0lBQ2IsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFBO0FBQ2QsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQzNCLFFBQWdCLEVBQ2hCLE9BQWUsRUFDZixPQUE2QjtJQUU3QixPQUFPLEdBQUcsRUFBQyxHQUFHLE9BQU8sRUFB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
|
package/esm/static.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// @ts-nocheck
|
|
2
|
-
import {
|
|
2
|
+
import { getReq } from './dx.js';
|
|
3
3
|
export function staticMiddleware({ root }) {
|
|
4
4
|
return async (next) => {
|
|
5
|
-
const req =
|
|
5
|
+
const req = getReq();
|
|
6
6
|
if (req.method !== 'GET' && req.method !== 'HEAD')
|
|
7
7
|
return next();
|
|
8
8
|
var forwardError = !fallthrough;
|
|
@@ -53,4 +53,4 @@ function collapseLeadingSlashes(str) {
|
|
|
53
53
|
? '/' + str.slice(i)
|
|
54
54
|
: str;
|
|
55
55
|
}
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3N0YXRpYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjO0FBRWQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFNBQVMsQ0FBQTtBQUU5QixNQUFNLFVBQVUsZ0JBQWdCLENBQy9CLEVBQUMsSUFBSSxFQUdKO0lBRUQsT0FBTyxLQUFLLEVBQUUsSUFBZSxFQUFFLEVBQUU7UUFDaEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUE7UUFDcEIsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLEtBQUssSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLE1BQU07WUFBRSxPQUFPLElBQUksRUFBRSxDQUFBO1FBRWhFLElBQUksWUFBWSxHQUFHLENBQUMsV0FBVyxDQUFBO1FBQy9CLElBQUksV0FBVyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDeEMsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQTtRQUVqQyxxQ0FBcUM7UUFDckMsSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDN0QsSUFBSSxHQUFHLEVBQUUsQ0FBQTtRQUNWLENBQUM7UUFFRCxxQkFBcUI7UUFDckIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFFbEMsd0JBQXdCO1FBQ3hCLE1BQU0sQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFBO1FBRW5DLHVCQUF1QjtRQUN2QixJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFBO1FBQ2pDLENBQUM7UUFFRCxvQ0FBb0M7UUFDcEMsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNqQixNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxTQUFTLE1BQU07Z0JBQ2hDLGdEQUFnRDtnQkFDaEQsWUFBWSxHQUFHLElBQUksQ0FBQTtZQUNwQixDQUFDLENBQUMsQ0FBQTtRQUNILENBQUM7UUFFRCxpQkFBaUI7UUFDakIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxLQUFLLENBQUMsR0FBRztZQUNwQyxJQUFJLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM3QyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7Z0JBQ1QsT0FBTTtZQUNQLENBQUM7WUFFRCxJQUFJLEVBQUUsQ0FBQTtRQUNQLENBQUMsQ0FBQyxDQUFBO1FBRUYsT0FBTztRQUNQLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDakIsQ0FBQyxDQUFBO0FBQ0YsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsc0JBQXNCLENBQUUsR0FBVztJQUMzQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3JDLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDeEMsTUFBSztRQUNOLENBQUM7SUFDRixDQUFDO0lBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUNYLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDcEIsQ0FBQyxDQUFDLEdBQUcsQ0FBQTtBQUNQLENBQUMifQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dx-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.1",
|
|
4
4
|
"main": "./cjs/index.js",
|
|
5
5
|
"homepage": "https://github.com/tranvansang/dx-server",
|
|
6
6
|
"repository": "https://github.com/tranvansang/dx-server",
|
|
@@ -17,6 +17,10 @@
|
|
|
17
17
|
"./express": {
|
|
18
18
|
"import": "./esm/express.js",
|
|
19
19
|
"require": "./cjs/express.js"
|
|
20
|
+
},
|
|
21
|
+
"./helpers": {
|
|
22
|
+
"import": "./esm/helpers.js",
|
|
23
|
+
"require": "./cjs/helpers.js"
|
|
20
24
|
}
|
|
21
25
|
},
|
|
22
26
|
"type": "module",
|
|
@@ -31,10 +35,8 @@
|
|
|
31
35
|
"typescript": "^5.4.5"
|
|
32
36
|
},
|
|
33
37
|
"dependencies": {
|
|
34
|
-
"jchain": "^0.0.6",
|
|
35
38
|
"jdefer": "^0.0.14",
|
|
36
39
|
"path-to-regexp": "^6.2.2",
|
|
37
40
|
"qs": "^6.12.1"
|
|
38
|
-
}
|
|
39
|
-
"packageManager": "yarn@1.22.19+sha1.4ba7fc5c6e704fce2066ecbfb0b0d8976fe62447"
|
|
41
|
+
}
|
|
40
42
|
}
|
package/cjs/context.d.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
import { IncomingMessage, ServerResponse } from 'node:http';
|
|
3
|
-
type Promisable<T> = T | PromiseLike<T>;
|
|
4
|
-
export declare const makeContext: <T, Params extends any[] = unknown[]>(maker: (...params: Params) => Promisable<T>, end?: (result: any, value: T) => any) => {
|
|
5
|
-
readonly value: T;
|
|
6
|
-
chain(...params: Params): <V>(next: () => V) => Promise<any>;
|
|
7
|
-
with(value: T): <V_1>(next: () => V_1) => Promise<any>;
|
|
8
|
-
};
|
|
9
|
-
export declare const reqContext: {
|
|
10
|
-
readonly value: IncomingMessage;
|
|
11
|
-
chain(params_0: IncomingMessage): <V>(next: () => V) => Promise<any>;
|
|
12
|
-
with(value: IncomingMessage): <V_1>(next: () => V_1) => Promise<any>;
|
|
13
|
-
};
|
|
14
|
-
export declare const resContext: {
|
|
15
|
-
readonly value: ServerResponse<IncomingMessage>;
|
|
16
|
-
chain(params_0: ServerResponse<IncomingMessage>): <V>(next: () => V) => Promise<any>;
|
|
17
|
-
with(value: ServerResponse<IncomingMessage>): <V_1>(next: () => V_1) => Promise<any>;
|
|
18
|
-
};
|
|
19
|
-
export {};
|
package/cjs/context.js
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.resContext = exports.reqContext = exports.makeContext = void 0;
|
|
4
|
-
const node_async_hooks_1 = require("node:async_hooks");
|
|
5
|
-
function identity(x) { return x; }
|
|
6
|
-
const makeContext = (maker, end = identity) => {
|
|
7
|
-
const asyncLocalStorage = new node_async_hooks_1.AsyncLocalStorage();
|
|
8
|
-
return {
|
|
9
|
-
get value() {
|
|
10
|
-
return asyncLocalStorage.getStore();
|
|
11
|
-
},
|
|
12
|
-
chain(...params) {
|
|
13
|
-
return async (next) => {
|
|
14
|
-
const value = await maker(...params);
|
|
15
|
-
return end(await asyncLocalStorage.run(value, next), value);
|
|
16
|
-
};
|
|
17
|
-
},
|
|
18
|
-
with(value) {
|
|
19
|
-
return async (next) => {
|
|
20
|
-
return end(await asyncLocalStorage.run(value, next), value);
|
|
21
|
-
};
|
|
22
|
-
},
|
|
23
|
-
};
|
|
24
|
-
};
|
|
25
|
-
exports.makeContext = makeContext;
|
|
26
|
-
// method: verb
|
|
27
|
-
// url: full url without server, protocol, port.
|
|
28
|
-
// headers: if headers are repeated, they are joined by comma. Header names are lowercased.
|
|
29
|
-
// rawHeaders: list of header name and value in a flat array. Case is preserved.
|
|
30
|
-
exports.reqContext = (0, exports.makeContext)(identity);
|
|
31
|
-
exports.resContext = (0, exports.makeContext)(identity);
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVEQUFrRDtBQUdsRCxTQUFTLFFBQVEsQ0FBSSxDQUFJLElBQUcsT0FBTyxDQUFDLENBQUEsQ0FBQSxDQUFDO0FBRzlCLE1BQU0sV0FBVyxHQUFHLENBQzFCLEtBQTJDLEVBQzNDLE1BQXNDLFFBQVEsRUFDN0MsRUFBRTtJQUNILE1BQU0saUJBQWlCLEdBQUcsSUFBSSxvQ0FBaUIsRUFBSyxDQUFBO0lBQ3BELE9BQU87UUFDTixJQUFJLEtBQUs7WUFDUixPQUFPLGlCQUFpQixDQUFDLFFBQVEsRUFBRyxDQUFBO1FBQ3JDLENBQUM7UUFDRCxLQUFLLENBQUMsR0FBRyxNQUFjO1lBQ3RCLE9BQU8sS0FBSyxFQUFLLElBQWEsRUFBRSxFQUFFO2dCQUNqQyxNQUFNLEtBQUssR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFBO2dCQUNwQyxPQUFPLEdBQUcsQ0FBQyxNQUFNLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUE7WUFDNUQsQ0FBQyxDQUFBO1FBQ0YsQ0FBQztRQUNELElBQUksQ0FBQyxLQUFRO1lBQ1osT0FBTyxLQUFLLEVBQUssSUFBYSxFQUFFLEVBQUU7Z0JBQ2pDLE9BQU8sR0FBRyxDQUFDLE1BQU0saUJBQWlCLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQTtZQUM1RCxDQUFDLENBQUE7UUFDRixDQUFDO0tBQ0QsQ0FBQTtBQUNGLENBQUMsQ0FBQTtBQXJCWSxRQUFBLFdBQVcsZUFxQnZCO0FBRUQsZUFBZTtBQUNmLGdEQUFnRDtBQUNoRCwyRkFBMkY7QUFDM0YsZ0ZBQWdGO0FBQ25FLFFBQUEsVUFBVSxHQUFHLElBQUEsbUJBQVcsRUFBcUMsUUFBUSxDQUFDLENBQUE7QUFDdEUsUUFBQSxVQUFVLEdBQUcsSUFBQSxtQkFBVyxFQUFtQyxRQUFRLENBQUMsQ0FBQSJ9
|
package/esm/context.d.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
import { IncomingMessage, ServerResponse } from 'node:http';
|
|
3
|
-
type Promisable<T> = T | PromiseLike<T>;
|
|
4
|
-
export declare const makeContext: <T, Params extends any[] = unknown[]>(maker: (...params: Params) => Promisable<T>, end?: (result: any, value: T) => any) => {
|
|
5
|
-
readonly value: T;
|
|
6
|
-
chain(...params: Params): <V>(next: () => V) => Promise<any>;
|
|
7
|
-
with(value: T): <V_1>(next: () => V_1) => Promise<any>;
|
|
8
|
-
};
|
|
9
|
-
export declare const reqContext: {
|
|
10
|
-
readonly value: IncomingMessage;
|
|
11
|
-
chain(params_0: IncomingMessage): <V>(next: () => V) => Promise<any>;
|
|
12
|
-
with(value: IncomingMessage): <V_1>(next: () => V_1) => Promise<any>;
|
|
13
|
-
};
|
|
14
|
-
export declare const resContext: {
|
|
15
|
-
readonly value: ServerResponse<IncomingMessage>;
|
|
16
|
-
chain(params_0: ServerResponse<IncomingMessage>): <V>(next: () => V) => Promise<any>;
|
|
17
|
-
with(value: ServerResponse<IncomingMessage>): <V_1>(next: () => V_1) => Promise<any>;
|
|
18
|
-
};
|
|
19
|
-
export {};
|
package/esm/context.js
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
|
-
function identity(x) { return x; }
|
|
3
|
-
export const makeContext = (maker, end = identity) => {
|
|
4
|
-
const asyncLocalStorage = new AsyncLocalStorage();
|
|
5
|
-
return {
|
|
6
|
-
get value() {
|
|
7
|
-
return asyncLocalStorage.getStore();
|
|
8
|
-
},
|
|
9
|
-
chain(...params) {
|
|
10
|
-
return async (next) => {
|
|
11
|
-
const value = await maker(...params);
|
|
12
|
-
return end(await asyncLocalStorage.run(value, next), value);
|
|
13
|
-
};
|
|
14
|
-
},
|
|
15
|
-
with(value) {
|
|
16
|
-
return async (next) => {
|
|
17
|
-
return end(await asyncLocalStorage.run(value, next), value);
|
|
18
|
-
};
|
|
19
|
-
},
|
|
20
|
-
};
|
|
21
|
-
};
|
|
22
|
-
// method: verb
|
|
23
|
-
// url: full url without server, protocol, port.
|
|
24
|
-
// headers: if headers are repeated, they are joined by comma. Header names are lowercased.
|
|
25
|
-
// rawHeaders: list of header name and value in a flat array. Case is preserved.
|
|
26
|
-
export const reqContext = makeContext(identity);
|
|
27
|
-
export const resContext = makeContext(identity);
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGtCQUFrQixDQUFBO0FBR2xELFNBQVMsUUFBUSxDQUFJLENBQUksSUFBRyxPQUFPLENBQUMsQ0FBQSxDQUFBLENBQUM7QUFHckMsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQzFCLEtBQTJDLEVBQzNDLE1BQXNDLFFBQVEsRUFDN0MsRUFBRTtJQUNILE1BQU0saUJBQWlCLEdBQUcsSUFBSSxpQkFBaUIsRUFBSyxDQUFBO0lBQ3BELE9BQU87UUFDTixJQUFJLEtBQUs7WUFDUixPQUFPLGlCQUFpQixDQUFDLFFBQVEsRUFBRyxDQUFBO1FBQ3JDLENBQUM7UUFDRCxLQUFLLENBQUMsR0FBRyxNQUFjO1lBQ3RCLE9BQU8sS0FBSyxFQUFLLElBQWEsRUFBRSxFQUFFO2dCQUNqQyxNQUFNLEtBQUssR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFBO2dCQUNwQyxPQUFPLEdBQUcsQ0FBQyxNQUFNLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUE7WUFDNUQsQ0FBQyxDQUFBO1FBQ0YsQ0FBQztRQUNELElBQUksQ0FBQyxLQUFRO1lBQ1osT0FBTyxLQUFLLEVBQUssSUFBYSxFQUFFLEVBQUU7Z0JBQ2pDLE9BQU8sR0FBRyxDQUFDLE1BQU0saUJBQWlCLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQTtZQUM1RCxDQUFDLENBQUE7UUFDRixDQUFDO0tBQ0QsQ0FBQTtBQUNGLENBQUMsQ0FBQTtBQUVELGVBQWU7QUFDZixnREFBZ0Q7QUFDaEQsMkZBQTJGO0FBQzNGLGdGQUFnRjtBQUNoRixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFxQyxRQUFRLENBQUMsQ0FBQTtBQUNuRixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFtQyxRQUFRLENBQUMsQ0FBQSJ9
|