dx-server 0.5.0 → 0.5.2
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 +8 -6
- package/cjs/body.d.ts +2 -9
- package/cjs/body.js +10 -99
- package/cjs/bodyHelpers.d.ts +16 -0
- package/cjs/bodyHelpers.js +102 -0
- package/cjs/connect.d.ts +4 -0
- package/cjs/connect.js +47 -0
- package/cjs/dx.d.ts +2 -4
- package/cjs/dx.js +4 -111
- package/cjs/dxHelpers.d.ts +32 -0
- package/cjs/dxHelpers.js +113 -0
- package/cjs/express.d.ts +3 -4
- package/cjs/express.js +7 -8
- package/cjs/helpers.d.ts +2 -0
- package/cjs/helpers.js +14 -0
- package/cjs/index.d.ts +2 -1
- package/cjs/index.js +4 -4
- package/esm/body.d.ts +2 -9
- package/esm/body.js +10 -97
- package/esm/bodyHelpers.d.ts +16 -0
- package/esm/bodyHelpers.js +89 -0
- package/esm/connect.d.ts +4 -0
- package/esm/connect.js +40 -0
- package/esm/dx.d.ts +2 -4
- package/esm/dx.js +4 -108
- package/esm/dxHelpers.d.ts +32 -0
- package/esm/dxHelpers.js +106 -0
- package/esm/express.d.ts +3 -4
- package/esm/express.js +6 -6
- package/esm/helpers.d.ts +2 -0
- package/esm/helpers.js +3 -0
- package/esm/index.d.ts +2 -1
- package/esm/index.js +3 -2
- package/package.json +6 -3
package/esm/dx.js
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
import makeDefer from 'jdefer';
|
|
2
|
-
import { promisify } from 'node:util';
|
|
3
|
-
import { entityTag, isFreshETag } from './etag.js';
|
|
4
|
-
import { Readable } from 'node:stream';
|
|
5
1
|
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
|
+
import { writeRes } from './dxHelpers.js';
|
|
6
3
|
const reqStorage = new AsyncLocalStorage();
|
|
7
4
|
const resStorage = new AsyncLocalStorage();
|
|
8
5
|
const dxStorage = new AsyncLocalStorage();
|
|
@@ -10,106 +7,7 @@ export function dxServer(req, res, options = {}) {
|
|
|
10
7
|
return async (next) => {
|
|
11
8
|
const dx = { ...options };
|
|
12
9
|
const result = await dxStorage.run(dx, () => reqStorage.run(req, () => resStorage.run(res, next)));
|
|
13
|
-
|
|
14
|
-
const setContentType = (contentType) => {
|
|
15
|
-
if (res.headersSent || res.getHeader('content-type'))
|
|
16
|
-
return;
|
|
17
|
-
res.setHeader('content-type', `${contentType}${charset ? `; charset=${charset}` : ''}`);
|
|
18
|
-
};
|
|
19
|
-
let bufferOrStream;
|
|
20
|
-
switch (type) {
|
|
21
|
-
case 'text':
|
|
22
|
-
setContentType('text/plain');
|
|
23
|
-
case 'html':
|
|
24
|
-
setContentType('text/html');
|
|
25
|
-
// shared with text
|
|
26
|
-
bufferOrStream = Buffer.from(data, charset);
|
|
27
|
-
break;
|
|
28
|
-
case 'buffer':
|
|
29
|
-
setContentType('application/octet-stream');
|
|
30
|
-
bufferOrStream = data;
|
|
31
|
-
break;
|
|
32
|
-
case 'nodeStream':
|
|
33
|
-
setContentType('application/octet-stream');
|
|
34
|
-
bufferOrStream = data;
|
|
35
|
-
break;
|
|
36
|
-
case 'webStream':
|
|
37
|
-
setContentType('application/octet-stream');
|
|
38
|
-
bufferOrStream = Readable.fromWeb(data);
|
|
39
|
-
break;
|
|
40
|
-
case 'json':
|
|
41
|
-
setContentType('application/json');
|
|
42
|
-
bufferOrStream = Buffer.from(jsonBeautify ? JSON.stringify(data, null, 2) : JSON.stringify(data), charset);
|
|
43
|
-
break;
|
|
44
|
-
case 'redirect':
|
|
45
|
-
res.setHeader('location', data);
|
|
46
|
-
bufferOrStream = Buffer.from('', charset);
|
|
47
|
-
break;
|
|
48
|
-
case undefined:
|
|
49
|
-
// skip response. Some middleware may handle it outside the chain. For example, express middleware
|
|
50
|
-
return result;
|
|
51
|
-
default:
|
|
52
|
-
if (!res.getHeader('content-type'))
|
|
53
|
-
res.setHeader('content-type', 'text/plain');
|
|
54
|
-
throw new Error(`unsupported response type ${type}`);
|
|
55
|
-
}
|
|
56
|
-
if (res.headersSent) {
|
|
57
|
-
if (res.writableFinished) {
|
|
58
|
-
// skipped: response is already finished
|
|
59
|
-
}
|
|
60
|
-
else if (res.writableEnded) {
|
|
61
|
-
const defer = makeDefer();
|
|
62
|
-
res.addListener('finish', defer.resolve);
|
|
63
|
-
await defer.promise;
|
|
64
|
-
// skipped: response is already ended
|
|
65
|
-
// chunk is not fully flushed yet
|
|
66
|
-
}
|
|
67
|
-
else
|
|
68
|
-
await promisify(res.end.bind(res))(undefined); // to be consistent, we end the response immediately
|
|
69
|
-
}
|
|
70
|
-
else {
|
|
71
|
-
// https://github.com/expressjs/express/blob/980d881e3b023db079de60477a2588a91f046ca5/lib/response.js#L210
|
|
72
|
-
if (res.statusCode === 204) { // No Content
|
|
73
|
-
res.removeHeader('content-type');
|
|
74
|
-
res.removeHeader('content-length');
|
|
75
|
-
res.removeHeader('transfer-encoding');
|
|
76
|
-
// write nothing
|
|
77
|
-
}
|
|
78
|
-
if (res.statusCode === 205) { // reset content. Tell client to clear the form, etc.
|
|
79
|
-
res.setHeader('content-length', 0);
|
|
80
|
-
res.removeHeader('transfer-encoding');
|
|
81
|
-
}
|
|
82
|
-
else if (req.method === 'HEAD') {
|
|
83
|
-
// write nothing
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
if (Buffer.isBuffer(bufferOrStream)) {
|
|
87
|
-
// support: 304 (etag), zipping, file etag and last modified
|
|
88
|
-
res.setHeader('content-length', bufferOrStream.length);
|
|
89
|
-
if (!disableEtag) {
|
|
90
|
-
const etag = entityTag(bufferOrStream);
|
|
91
|
-
const lastModified = res.getHeader('last-modified');
|
|
92
|
-
res.setHeader('ETag', etag);
|
|
93
|
-
if (isFreshETag(req, etag)) {
|
|
94
|
-
res.removeHeader('content-type');
|
|
95
|
-
res.removeHeader('content-length');
|
|
96
|
-
res.removeHeader('transfer-encoding');
|
|
97
|
-
res.statusCode = 304;
|
|
98
|
-
// write nothing
|
|
99
|
-
}
|
|
100
|
-
else
|
|
101
|
-
res.write(bufferOrStream);
|
|
102
|
-
}
|
|
103
|
-
else
|
|
104
|
-
res.write(bufferOrStream);
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
bufferOrStream.pipe(res);
|
|
108
|
-
}
|
|
109
|
-
// we do not support content-encoding (gzip, deflate, br) and leave it to reverse proxy or CDN
|
|
110
|
-
}
|
|
111
|
-
await promisify(res.end.bind(res))(undefined); // some express middleware, such as express-session, requires explicitly passing chunk
|
|
112
|
-
}
|
|
10
|
+
await writeRes(req, res, dx);
|
|
113
11
|
return result;
|
|
114
12
|
};
|
|
115
13
|
}
|
|
@@ -161,15 +59,13 @@ export function setWebStream(stream, { status } = {}) {
|
|
|
161
59
|
dx.data = stream;
|
|
162
60
|
dx.type = 'webStream';
|
|
163
61
|
}
|
|
164
|
-
export function setJson(json, { status
|
|
62
|
+
export function setJson(json, { status } = {}) {
|
|
165
63
|
const res = getRes();
|
|
166
64
|
if (status)
|
|
167
65
|
res.statusCode = status;
|
|
168
66
|
const dx = dxStorage.getStore();
|
|
169
67
|
dx.data = json;
|
|
170
68
|
dx.type = 'json';
|
|
171
|
-
if (beautify !== undefined)
|
|
172
|
-
dx.jsonBeautify = beautify;
|
|
173
69
|
}
|
|
174
70
|
export function setRedirect(url, status) {
|
|
175
71
|
const res = getRes();
|
|
@@ -178,4 +74,4 @@ export function setRedirect(url, status) {
|
|
|
178
74
|
dx.data = url;
|
|
179
75
|
dx.type = 'redirect';
|
|
180
76
|
}
|
|
181
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZHgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDbEQsT0FBTyxFQUFpQixRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQTtBQVV2RCxNQUFNLFVBQVUsR0FBRyxJQUFJLGlCQUFpQixFQUFtQixDQUFBO0FBQzNELE1BQU0sVUFBVSxHQUFHLElBQUksaUJBQWlCLEVBQWtCLENBQUE7QUFDMUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxpQkFBaUIsRUFBYSxDQUFBO0FBQ3BELE1BQU0sVUFBVSxRQUFRLENBQ3ZCLEdBQW9CLEVBQ3BCLEdBQW1CLEVBQ25CLFVBR0ksRUFBRTtJQUVOLE9BQU8sS0FBSyxFQUFDLElBQUksRUFBQyxFQUFFO1FBQ25CLE1BQU0sRUFBRSxHQUFjLEVBQUMsR0FBRyxPQUFPLEVBQUMsQ0FBQTtRQUNsQyxNQUFNLE1BQU0sR0FBRyxNQUFNLFNBQVMsQ0FBQyxHQUFHLENBQ2pDLEVBQUUsRUFDRixHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUNuQixHQUFHLEVBQ0gsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQy9CLENBQ0QsQ0FBQTtRQUNELE1BQU0sUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFDNUIsT0FBTyxNQUFNLENBQUE7SUFDZCxDQUFDLENBQUE7QUFDRixDQUFDO0FBRUQsZUFBZTtBQUNmLGdEQUFnRDtBQUNoRCwyRkFBMkY7QUFDM0YsZ0ZBQWdGO0FBQ2hGLE1BQU0sVUFBVSxNQUFNO0lBQ3JCLE9BQU8sVUFBVSxDQUFDLFFBQVEsRUFBRyxDQUFBO0FBQzlCLENBQUM7QUFDRCxNQUFNLFVBQVUsTUFBTTtJQUNyQixPQUFPLFVBQVUsQ0FBQyxRQUFRLEVBQUcsQ0FB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
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
3
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
4
|
+
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
5
|
+
import { Readable } from 'node:stream';
|
|
6
|
+
export type DxContext = {
|
|
7
|
+
charset?: BufferEncoding;
|
|
8
|
+
jsonBeautify?: boolean;
|
|
9
|
+
disableEtag?: boolean;
|
|
10
|
+
} & ({
|
|
11
|
+
type: 'text';
|
|
12
|
+
data: string;
|
|
13
|
+
} | {
|
|
14
|
+
type: 'html';
|
|
15
|
+
data: string;
|
|
16
|
+
} | {
|
|
17
|
+
type: 'buffer';
|
|
18
|
+
data: Buffer;
|
|
19
|
+
} | {
|
|
20
|
+
type: 'json';
|
|
21
|
+
data: any;
|
|
22
|
+
} | {
|
|
23
|
+
type: 'redirect';
|
|
24
|
+
data: string;
|
|
25
|
+
} | {
|
|
26
|
+
type: 'nodeStream';
|
|
27
|
+
data: Readable;
|
|
28
|
+
} | {
|
|
29
|
+
type: 'webStream';
|
|
30
|
+
data: ReadableStream;
|
|
31
|
+
});
|
|
32
|
+
export declare function writeRes(req: IncomingMessage, res: ServerResponse, { type, data, charset, jsonBeautify, disableEtag }: DxContext): Promise<void>;
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHhIZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2R4SGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sYUFBYSxDQUFBO0FBQ3BDLE9BQU8sU0FBUyxNQUFNLFFBQVEsQ0FBQTtBQUM5QixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sV0FBVyxDQUFBO0FBQ25DLE9BQU8sRUFBQyxTQUFTLEVBQUUsV0FBVyxFQUFDLE1BQU0sV0FBVyxDQUFBO0FBb0NoRCxNQUFNLENBQUMsS0FBSyxVQUFVLFFBQVEsQ0FBQyxHQUFvQixFQUFFLEdBQW1CLEVBQUUsRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFZO0lBQ3BJLE1BQU0sY0FBYyxHQUFHLENBQUMsV0FBbUIsRUFBRSxFQUFFO1FBQzlDLElBQUksR0FBRyxDQUFDLFdBQVcsSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQztZQUFFLE9BQU07UUFDNUQsR0FBRyxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsR0FBRyxXQUFXLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxhQUFhLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ3hGLENBQUMsQ0FBQTtJQUNELElBQUksY0FBYyxDQUFBO0lBRWxCLFFBQVEsSUFBSSxFQUFFLENBQUM7UUFDZCxLQUFLLE1BQU07WUFDVixjQUFjLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDN0IsS0FBSyxNQUFNO1lBQ1YsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1lBQzNCLG1CQUFtQjtZQUNuQixjQUFjLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDM0MsTUFBSztRQUNOLEtBQUssUUFBUTtZQUNaLGNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFBO1lBQzFDLGNBQWMsR0FBRyxJQUFJLENBQUE7WUFDckIsTUFBSztRQUNOLEtBQUssWUFBWTtZQUNoQixjQUFjLENBQUMsMEJBQTBCLENBQUMsQ0FBQTtZQUMxQyxjQUFjLEdBQUcsSUFBSSxDQUFBO1lBQ3JCLE1BQUs7UUFDTixLQUFLLFdBQVc7WUFDZixjQUFjLENBQUMsMEJBQTBCLENBQUMsQ0FBQTtZQUMxQyxjQUFjLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFnRCxDQUFDLENBQUE7WUFDbkYsTUFBSztRQUNOLEtBQUssTUFBTTtZQUNWLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO1lBQ2xDLGNBQWMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBQzFHLE1BQUs7UUFDTixLQUFLLFVBQVU7WUFDZCxHQUFHLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQTtZQUMvQixjQUFjLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDekMsTUFBSztRQUNOLEtBQUssU0FBUztZQUNiLGtHQUFrRztZQUNsRyxPQUFNO1FBQ1A7WUFDQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUM7Z0JBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLENBQUE7WUFDL0UsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUN0RCxDQUFDO0lBRUQsSUFBSSxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckIsSUFBSSxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQix3Q0FBd0M7UUFDekMsQ0FBQzthQUFNLElBQUksR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzlCLE1BQU0sS0FBSyxHQUFHLFNBQVMsRUFBUSxDQUFBO1lBQy9CLEdBQUcsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUN4QyxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUE7WUFDbkIscUNBQXFDO1lBQ3JDLGlDQUFpQztRQUNsQyxDQUFDOztZQUFNLE1BQU0sU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUEsQ0FBQyxvREFBb0Q7SUFDMUcsQ0FBQztTQUFNLENBQUM7UUFDUCwwR0FBMEc7UUFDMUcsSUFBSSxHQUFHLENBQUMsVUFBVSxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUMsYUFBYTtZQUMxQyxHQUFHLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFBO1lBQ2hDLEdBQUcsQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtZQUNsQyxHQUFHLENBQUMsWUFBWSxDQUFDLG1CQUFtQixDQUFDLENBQUE7WUFDckMsZ0JBQWdCO1FBQ2pCLENBQUM7UUFDRCxJQUFJLEdBQUcsQ0FBQyxVQUFVLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQyxxREFBcUQ7WUFDbEYsR0FBRyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsQ0FBQTtZQUNsQyxHQUFHLENBQUMsWUFBWSxDQUFDLG1CQUFtQixDQUFDLENBQUE7UUFDdEMsQ0FBQzthQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUNsQyxnQkFBZ0I7UUFDakIsQ0FBQzthQUFNLENBQUM7WUFDUCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztnQkFDckMsNERBQTREO2dCQUM1RCxHQUFHLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFFdEQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUNsQixNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUE7b0JBQ3RDLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUE7b0JBRW5ELEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFBO29CQUMzQixJQUFJLFdBQVcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQzt3QkFDNUIsR0FBRyxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQTt3QkFDaEMsR0FBRyxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO3dCQUNsQyxHQUFHLENBQUMsWUFBWSxDQUFDLG1CQUFtQixDQUFDLENBQUE7d0JBQ3JDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFBO3dCQUNwQixnQkFBZ0I7b0JBQ2pCLENBQUM7O3dCQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUE7Z0JBQ2pDLENBQUM7O29CQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUE7WUFDakMsQ0FBQztpQkFBTSxDQUFDO2dCQUNQLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDekIsQ0FBQztZQUNELDhGQUE4RjtRQUMvRixDQUFDO1FBRUQsTUFBTSxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQSxDQUFDLHNGQUFzRjtJQUNySSxDQUFDO0FBQ0YsQ0FBQyJ9
|
package/esm/express.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { type Express, type
|
|
2
|
-
export declare
|
|
3
|
-
export declare
|
|
4
|
-
export declare const expressMiddlewares: (...middlewares: Array<(req: Request, res: Response, next: () => any) => any>) => Promise<(next: any) => Promise<void>>;
|
|
1
|
+
import { type Express, type Router } from 'express';
|
|
2
|
+
export declare function expressApp(setup: (app: Express) => any): Promise<(next: any) => Promise<void>>;
|
|
3
|
+
export declare function expressRouter(setup: (router: Router) => any): Promise<(next: any) => Promise<void>>;
|
package/esm/express.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import express from 'express';
|
|
2
2
|
import makeDefer from 'jdefer';
|
|
3
3
|
import { getReq, getRes } from './dx.js';
|
|
4
|
-
export
|
|
4
|
+
export async function expressApp(setup) {
|
|
5
5
|
const symbol = Symbol('expressApp');
|
|
6
6
|
const app = express();
|
|
7
7
|
await setup(app);
|
|
@@ -14,8 +14,9 @@ export const expressApp = async (setup) => {
|
|
|
14
14
|
await defer.promise;
|
|
15
15
|
await next();
|
|
16
16
|
};
|
|
17
|
-
}
|
|
18
|
-
|
|
17
|
+
}
|
|
18
|
+
// can be used to chain existing Express app
|
|
19
|
+
export async function expressRouter(setup) {
|
|
19
20
|
const symbol = Symbol('expressRouter');
|
|
20
21
|
const router = express.Router();
|
|
21
22
|
await setup(router);
|
|
@@ -28,6 +29,5 @@ export const expressRouter = async (setup) => {
|
|
|
28
29
|
await defer.promise; // if express middleware handles the request, this will never resolve.
|
|
29
30
|
await next();
|
|
30
31
|
};
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwcmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9leHByZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sT0FBaUUsTUFBTSxTQUFTLENBQUE7QUFDdkYsT0FBTyxTQUFTLE1BQU0sUUFBUSxDQUFBO0FBQzlCLE9BQU8sRUFBQyxNQUFNLEVBQUUsTUFBTSxFQUFDLE1BQU0sU0FBUyxDQUFBO0FBRXRDLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxLQUFLLEVBQUUsS0FBNEIsRUFBRSxFQUFFO0lBQ2hFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUVuQyxNQUFNLEdBQUcsR0FBRyxPQUFPLEVBQUUsQ0FBQTtJQUNyQixNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNoQixHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFBO0lBQ3BELEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUMzRCxPQUFPLEtBQUssRUFBQyxJQUFJLEVBQUMsRUFBRTtRQUNuQixNQUFNLEtBQUssR0FBRyxTQUFTLEVBQUUsQ0FBQTtRQUN6QixNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUE7UUFDeEIsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUE7UUFDdkIsTUFBTSxLQUFLLENBQUMsT0FBTyxDQUFBO1FBQ25CLE1BQU0sSUFBSSxFQUFFLENBQUE7SUFDYixDQUFDLENBQUE7QUFDRixDQUFDLENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsS0FBSyxFQUFFLEtBQThCLEVBQUUsRUFBRTtJQUNyRSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUE7SUFFdEMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFBO0lBQy9CLE1BQU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ25CLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7SUFDdkQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO0lBQzlELE9BQU8sS0FBSyxFQUFDLElBQUksRUFBQyxFQUFFO1FBQ25CLE1BQU0sS0FBSyxHQUFHLFNBQVMsRUFBRSxDQUFBO1FBQ3pCLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQTtRQUN4QixNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQTtRQUMxQixNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUEsQ0FBQyxzRUFBc0U7UUFDMUYsTUFBTSxJQUFJLEVBQUUsQ0FBQTtJQUNiLENBQUMsQ0FBQTtBQUNGLENBQUMsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQ2pDLEdBQUcsV0FBeUUsRUFDM0UsRUFBRSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFBIn0=
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwcmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9leHByZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sT0FBaUUsTUFBTSxTQUFTLENBQUE7QUFDdkYsT0FBTyxTQUFTLE1BQU0sUUFBUSxDQUFBO0FBQzlCLE9BQU8sRUFBQyxNQUFNLEVBQUUsTUFBTSxFQUFDLE1BQU0sU0FBUyxDQUFBO0FBRXRDLE1BQU0sQ0FBQyxLQUFLLFVBQVUsVUFBVSxDQUFDLEtBQTRCO0lBQzVELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUVuQyxNQUFNLEdBQUcsR0FBRyxPQUFPLEVBQUUsQ0FBQTtJQUNyQixNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNoQixHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFBO0lBQ3BELEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUMzRCxPQUFPLEtBQUssRUFBQyxJQUFJLEVBQUMsRUFBRTtRQUNuQixNQUFNLEtBQUssR0FBRyxTQUFTLEVBQUUsQ0FBQTtRQUN6QixNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUE7UUFDeEIsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUE7UUFDdkIsTUFBTSxLQUFLLENBQUMsT0FBTyxDQUFBO1FBQ25CLE1BQU0sSUFBSSxFQUFFLENBQUE7SUFDYixDQUFDLENBQUE7QUFDRixDQUFDO0FBRUQsNENBQTRDO0FBQzVDLE1BQU0sQ0FBQyxLQUFLLFVBQVUsYUFBYSxDQUFDLEtBQThCO0lBQ2pFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQTtJQUV0QyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUE7SUFDL0IsTUFBTSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDbkIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQTtJQUN2RCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7SUFDOUQsT0FBTyxLQUFLLEVBQUMsSUFBSSxFQUFDLEVBQUU7UUFDbkIsTUFBTSxLQUFLLEdBQUcsU0FBUyxFQUFFLENBQUE7UUFDekIsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFBO1FBQ3hCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFBO1FBQzFCLE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQSxDQUFDLHNFQUFzRTtRQUMxRixNQUFNLElBQUksRUFBRSxDQUFBO0lBQ2IsQ0FBQyxDQUFBO0FBQ0YsQ0FBQyJ9
|
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,5 +1,6 @@
|
|
|
1
1
|
export { getReq, getRes, setHtml, setNodeStream, setWebStream, setJson, setBuffer, setRedirect, setText } from './dx.js';
|
|
2
2
|
import { dxServer } from './dx.js';
|
|
3
|
-
export {
|
|
3
|
+
export { getJson, getRaw, getText, getUrlEncoded, getQuery, } from './body.js';
|
|
4
4
|
export { router } from './route.js';
|
|
5
|
+
export { connectMiddlewares } from './connect.js';
|
|
5
6
|
export default dxServer;
|
package/esm/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { getReq, getRes, setHtml, setNodeStream, setWebStream, setJson, setBuffer, setRedirect, setText } from './dx.js';
|
|
2
2
|
import { dxServer } from './dx.js';
|
|
3
|
-
export {
|
|
3
|
+
export { getJson, getRaw, getText, getUrlEncoded, getQuery, } from './body.js';
|
|
4
4
|
export { router } from './route.js';
|
|
5
|
+
export { connectMiddlewares } from './connect.js';
|
|
5
6
|
export default dxServer;
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLE1BQU0sRUFDTixNQUFNLEVBQ04sT0FBTyxFQUNQLGFBQWEsRUFDYixZQUFZLEVBQ1osT0FBTyxFQUNQLFNBQVMsRUFDVCxXQUFXLEVBQ1gsT0FBTyxFQUNQLE1BQU0sU0FBUyxDQUFBO0FBQ2hCLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxTQUFTLENBQUE7QUFDaEMsT0FBTyxFQUNOLE9BQU8sRUFDUCxNQUFNLEVBQ04sT0FBTyxFQUNQLGFBQWEsRUFDYixRQUFRLEdBQ1IsTUFBTSxXQUFXLENBQUE7QUFDbEIsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFlBQVksQ0FBQTtBQUNqQyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFFL0MsZUFBZSxRQUFRLENBQUEifQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dx-server",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.2",
|
|
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",
|
|
@@ -34,6 +38,5 @@
|
|
|
34
38
|
"jdefer": "^0.0.14",
|
|
35
39
|
"path-to-regexp": "^6.2.2",
|
|
36
40
|
"qs": "^6.12.1"
|
|
37
|
-
}
|
|
38
|
-
"packageManager": "yarn@1.22.19+sha1.4ba7fc5c6e704fce2066ecbfb0b0d8976fe62447"
|
|
41
|
+
}
|
|
39
42
|
}
|