dx-server 0.0.7 → 0.1.0
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 +4 -4
- package/cjs/dx.d.ts +81 -0
- package/cjs/dx.js +183 -0
- package/cjs/express.d.ts +4 -81
- package/cjs/express.js +36 -175
- package/cjs/index.d.ts +1 -2
- package/cjs/index.js +9 -13
- package/esm/dx.d.ts +81 -0
- package/esm/dx.js +170 -0
- package/esm/express.d.ts +4 -81
- package/esm/express.js +32 -167
- package/esm/index.d.ts +1 -2
- package/esm/index.js +2 -3
- package/package.json +6 -2
- package/cjs/expressApp.d.ts +0 -4
- package/cjs/expressApp.js +0 -44
- package/esm/expressApp.d.ts +0 -4
- package/esm/expressApp.js +0 -35
package/README.md
CHANGED
|
@@ -18,7 +18,7 @@ import chain from 'jchain'
|
|
|
18
18
|
import {
|
|
19
19
|
makeContext, requestContext, responseContext,
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
dxContext,
|
|
22
22
|
setHtml,
|
|
23
23
|
setJson,
|
|
24
24
|
setText,
|
|
@@ -34,9 +34,9 @@ import {
|
|
|
34
34
|
textBodyContext,
|
|
35
35
|
urlencodedBodyContext,
|
|
36
36
|
|
|
37
|
-
router
|
|
38
|
-
expressApp, expressRouter, chainExpressMiddlewares,
|
|
37
|
+
router
|
|
39
38
|
} from 'dx-server'
|
|
39
|
+
import {expressApp, expressRouter, chainExpressMiddlewares} from 'dx-server/express'
|
|
40
40
|
import express from 'express'
|
|
41
41
|
import morgan from 'morgan'
|
|
42
42
|
|
|
@@ -66,7 +66,7 @@ const requireAuth = () => {
|
|
|
66
66
|
}
|
|
67
67
|
|
|
68
68
|
const serverChain = chain(
|
|
69
|
-
|
|
69
|
+
dxContext.chain({jsonBeautify: true}), // allows to use setHtml, setJson, setRaw, setBuffer, setFile, setRedirect, etc.
|
|
70
70
|
bufferBodyContext.chain(), // use raw buffer body as Buffer use bufferBodyContext.value. This is required for jsonBodyContext, urlencodedBodyContext, textBodyContext, rawBodyContext
|
|
71
71
|
jsonBodyContext.chain(), // to get body parsed as json use jsonBodyContext.value. Only available if content-type is application/json
|
|
72
72
|
urlencodedBodyContext.chain(), // to get body parsed as urlencoded use urlencodedBodyContext.value. Only available if content-type is application/x-www-form-urlencoded
|
package/cjs/dx.d.ts
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
3
|
+
import { Readable } from 'node:stream';
|
|
4
|
+
export declare const dxContext: {
|
|
5
|
+
readonly value: {
|
|
6
|
+
charset?: BufferEncoding | undefined;
|
|
7
|
+
jsonBeautify?: boolean | undefined;
|
|
8
|
+
disableEtag?: boolean | undefined;
|
|
9
|
+
} & ({
|
|
10
|
+
type: 'text';
|
|
11
|
+
data: string;
|
|
12
|
+
} | {
|
|
13
|
+
type: 'html';
|
|
14
|
+
data: string;
|
|
15
|
+
} | {
|
|
16
|
+
type: 'buffer';
|
|
17
|
+
data: Buffer;
|
|
18
|
+
} | {
|
|
19
|
+
type: 'json';
|
|
20
|
+
data: any;
|
|
21
|
+
} | {
|
|
22
|
+
type: 'redirect';
|
|
23
|
+
data: string;
|
|
24
|
+
} | {
|
|
25
|
+
type: 'nodeStream';
|
|
26
|
+
data: Readable;
|
|
27
|
+
} | {
|
|
28
|
+
type: 'webStream';
|
|
29
|
+
data: ReadableStream;
|
|
30
|
+
});
|
|
31
|
+
chain(params_0?: {
|
|
32
|
+
jsonBeautify?: boolean | undefined;
|
|
33
|
+
disableEtag?: boolean | undefined;
|
|
34
|
+
} | undefined): <V>(next: () => V) => Promise<any>;
|
|
35
|
+
with(value: {
|
|
36
|
+
charset?: BufferEncoding | undefined;
|
|
37
|
+
jsonBeautify?: boolean | undefined;
|
|
38
|
+
disableEtag?: boolean | undefined;
|
|
39
|
+
} & ({
|
|
40
|
+
type: 'text';
|
|
41
|
+
data: string;
|
|
42
|
+
} | {
|
|
43
|
+
type: 'html';
|
|
44
|
+
data: string;
|
|
45
|
+
} | {
|
|
46
|
+
type: 'buffer';
|
|
47
|
+
data: Buffer;
|
|
48
|
+
} | {
|
|
49
|
+
type: 'json';
|
|
50
|
+
data: any;
|
|
51
|
+
} | {
|
|
52
|
+
type: 'redirect';
|
|
53
|
+
data: string;
|
|
54
|
+
} | {
|
|
55
|
+
type: 'nodeStream';
|
|
56
|
+
data: Readable;
|
|
57
|
+
} | {
|
|
58
|
+
type: 'webStream';
|
|
59
|
+
data: ReadableStream;
|
|
60
|
+
})): <V_1>(next: () => V_1) => Promise<any>;
|
|
61
|
+
};
|
|
62
|
+
export declare function setText(text: string, { status }?: {
|
|
63
|
+
status?: number;
|
|
64
|
+
}): void;
|
|
65
|
+
export declare function setHtml(html: string, opts?: {
|
|
66
|
+
status?: number;
|
|
67
|
+
}): void;
|
|
68
|
+
export declare function setBuffer(buffer: Buffer, { status }?: {
|
|
69
|
+
status?: number;
|
|
70
|
+
}): void;
|
|
71
|
+
export declare function setNodeStream(stream: Readable, { status }?: {
|
|
72
|
+
status?: number;
|
|
73
|
+
}): void;
|
|
74
|
+
export declare function setWebStream(stream: ReadableStream, { status }?: {
|
|
75
|
+
status?: number;
|
|
76
|
+
}): void;
|
|
77
|
+
export declare function setJson(json: any, { status, beautify }?: {
|
|
78
|
+
status?: number;
|
|
79
|
+
beautify?: boolean;
|
|
80
|
+
}): void;
|
|
81
|
+
export declare function setRedirect(url: string, status: 301 | 302): void;
|
package/cjs/dx.js
ADDED
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.setRedirect = exports.setJson = exports.setWebStream = exports.setNodeStream = exports.setBuffer = exports.setHtml = exports.setText = exports.dxContext = void 0;
|
|
7
|
+
const jdefer_1 = __importDefault(require("jdefer"));
|
|
8
|
+
const node_util_1 = require("node:util");
|
|
9
|
+
const etag_js_1 = require("./etag.js");
|
|
10
|
+
const context_js_1 = require("./context.js");
|
|
11
|
+
const node_stream_1 = require("node:stream");
|
|
12
|
+
exports.dxContext = (0, context_js_1.makeContext)(async ({ jsonBeautify, disableEtag } = {}) => {
|
|
13
|
+
return {
|
|
14
|
+
jsonBeautify,
|
|
15
|
+
disableEtag,
|
|
16
|
+
};
|
|
17
|
+
}, async (ret, { type, data, charset, jsonBeautify, disableEtag }) => {
|
|
18
|
+
const res = context_js_1.responseContext.value;
|
|
19
|
+
const setContentType = (contentType) => {
|
|
20
|
+
if (res.headersSent || res.getHeader('content-type'))
|
|
21
|
+
return;
|
|
22
|
+
res.setHeader('content-type', `${contentType}${charset ? `; charset=${charset}` : ''}`);
|
|
23
|
+
};
|
|
24
|
+
let bufferOrStream;
|
|
25
|
+
switch (type) {
|
|
26
|
+
case 'text':
|
|
27
|
+
setContentType('text/plain');
|
|
28
|
+
case 'html':
|
|
29
|
+
setContentType('text/html');
|
|
30
|
+
// shared with text
|
|
31
|
+
bufferOrStream = Buffer.from(data, charset);
|
|
32
|
+
break;
|
|
33
|
+
case 'buffer':
|
|
34
|
+
setContentType('application/octet-stream');
|
|
35
|
+
bufferOrStream = data;
|
|
36
|
+
break;
|
|
37
|
+
case 'nodeStream':
|
|
38
|
+
setContentType('application/octet-stream');
|
|
39
|
+
bufferOrStream = data;
|
|
40
|
+
break;
|
|
41
|
+
case 'webStream':
|
|
42
|
+
setContentType('application/octet-stream');
|
|
43
|
+
bufferOrStream = node_stream_1.Readable.fromWeb(data);
|
|
44
|
+
break;
|
|
45
|
+
case 'json':
|
|
46
|
+
setContentType('application/json');
|
|
47
|
+
bufferOrStream = Buffer.from(jsonBeautify ? JSON.stringify(data, null, 2) : JSON.stringify(data), charset);
|
|
48
|
+
break;
|
|
49
|
+
case 'redirect':
|
|
50
|
+
res.setHeader('location', data);
|
|
51
|
+
bufferOrStream = Buffer.from('', charset);
|
|
52
|
+
break;
|
|
53
|
+
case undefined:
|
|
54
|
+
// skip response. Some middleware may handle it outside the chain. For example, express middleware
|
|
55
|
+
return ret;
|
|
56
|
+
default:
|
|
57
|
+
if (!res.getHeader('content-type'))
|
|
58
|
+
res.setHeader('content-type', 'text/plain');
|
|
59
|
+
throw new Error(`unsupported response type ${type}`);
|
|
60
|
+
}
|
|
61
|
+
const req = context_js_1.requestContext.value;
|
|
62
|
+
if (res.headersSent) {
|
|
63
|
+
if (res.writableFinished) {
|
|
64
|
+
// skipped: response is already finished
|
|
65
|
+
}
|
|
66
|
+
else if (res.writableEnded) {
|
|
67
|
+
const defer = (0, jdefer_1.default)();
|
|
68
|
+
res.addListener('finish', defer.resolve);
|
|
69
|
+
await defer.promise;
|
|
70
|
+
// skipped: response is already ended
|
|
71
|
+
// chunk is not fully flushed yet
|
|
72
|
+
}
|
|
73
|
+
else
|
|
74
|
+
await (0, node_util_1.promisify)(res.end.bind(res))(undefined); // to be consistent, we end the response immediately
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
// https://github.com/expressjs/express/blob/980d881e3b023db079de60477a2588a91f046ca5/lib/response.js#L210
|
|
78
|
+
if (res.statusCode === 204) { // No Content
|
|
79
|
+
res.removeHeader('content-type');
|
|
80
|
+
res.removeHeader('content-length');
|
|
81
|
+
res.removeHeader('transfer-encoding');
|
|
82
|
+
// write nothing
|
|
83
|
+
}
|
|
84
|
+
if (res.statusCode === 205) { // reset content. Tell client to clear the form, etc.
|
|
85
|
+
res.setHeader('content-length', 0);
|
|
86
|
+
res.removeHeader('transfer-encoding');
|
|
87
|
+
}
|
|
88
|
+
else if (req.method === 'HEAD') {
|
|
89
|
+
// write nothing
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
if (Buffer.isBuffer(bufferOrStream)) {
|
|
93
|
+
// support: 304 (etag), zipping, file etag and last modified
|
|
94
|
+
res.setHeader('content-length', bufferOrStream.length);
|
|
95
|
+
if (!disableEtag) {
|
|
96
|
+
const etag = (0, etag_js_1.entityTag)(bufferOrStream);
|
|
97
|
+
const lastModified = res.getHeader('last-modified');
|
|
98
|
+
res.setHeader('ETag', etag);
|
|
99
|
+
if ((0, etag_js_1.isFreshETag)(req, etag)) {
|
|
100
|
+
res.removeHeader('content-type');
|
|
101
|
+
res.removeHeader('content-length');
|
|
102
|
+
res.removeHeader('transfer-encoding');
|
|
103
|
+
res.statusCode = 304;
|
|
104
|
+
// write nothing
|
|
105
|
+
}
|
|
106
|
+
else
|
|
107
|
+
res.write(bufferOrStream);
|
|
108
|
+
}
|
|
109
|
+
else
|
|
110
|
+
res.write(bufferOrStream);
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
bufferOrStream.pipe(res);
|
|
114
|
+
}
|
|
115
|
+
// fixme: not support content-encoding (gzip, deflate, br) for now
|
|
116
|
+
}
|
|
117
|
+
await (0, node_util_1.promisify)(res.end.bind(res))(undefined); // some express middleware, such as express-session, requires explicitly passing chunk
|
|
118
|
+
}
|
|
119
|
+
return ret;
|
|
120
|
+
});
|
|
121
|
+
// todo: support setFile (with stream or with buffer)
|
|
122
|
+
function setText(text, { status } = {}) {
|
|
123
|
+
const response = context_js_1.responseContext.value;
|
|
124
|
+
const express = exports.dxContext.value;
|
|
125
|
+
if (status)
|
|
126
|
+
response.statusCode = status;
|
|
127
|
+
express.data = text;
|
|
128
|
+
express.type = 'text';
|
|
129
|
+
}
|
|
130
|
+
exports.setText = setText;
|
|
131
|
+
function setHtml(html, opts = {}) {
|
|
132
|
+
setText(html, opts);
|
|
133
|
+
const express = exports.dxContext.value;
|
|
134
|
+
express.type = 'html';
|
|
135
|
+
}
|
|
136
|
+
exports.setHtml = setHtml;
|
|
137
|
+
function setBuffer(buffer, { status } = {}) {
|
|
138
|
+
const response = context_js_1.responseContext.value;
|
|
139
|
+
const express = exports.dxContext.value;
|
|
140
|
+
if (status)
|
|
141
|
+
response.statusCode = status;
|
|
142
|
+
express.data = buffer;
|
|
143
|
+
express.type = 'buffer';
|
|
144
|
+
}
|
|
145
|
+
exports.setBuffer = setBuffer;
|
|
146
|
+
function setNodeStream(stream, { status } = {}) {
|
|
147
|
+
const response = context_js_1.responseContext.value;
|
|
148
|
+
const express = exports.dxContext.value;
|
|
149
|
+
if (status)
|
|
150
|
+
response.statusCode = status;
|
|
151
|
+
express.data = stream;
|
|
152
|
+
express.type = 'nodeStream';
|
|
153
|
+
}
|
|
154
|
+
exports.setNodeStream = setNodeStream;
|
|
155
|
+
function setWebStream(stream, { status } = {}) {
|
|
156
|
+
const response = context_js_1.responseContext.value;
|
|
157
|
+
const express = exports.dxContext.value;
|
|
158
|
+
if (status)
|
|
159
|
+
response.statusCode = status;
|
|
160
|
+
express.data = stream;
|
|
161
|
+
express.type = 'webStream';
|
|
162
|
+
}
|
|
163
|
+
exports.setWebStream = setWebStream;
|
|
164
|
+
function setJson(json, { status, beautify } = {}) {
|
|
165
|
+
const response = context_js_1.responseContext.value;
|
|
166
|
+
if (status)
|
|
167
|
+
response.statusCode = status;
|
|
168
|
+
const express = exports.dxContext.value;
|
|
169
|
+
express.data = json;
|
|
170
|
+
express.type = 'json';
|
|
171
|
+
if (beautify !== undefined)
|
|
172
|
+
express.jsonBeautify = beautify;
|
|
173
|
+
}
|
|
174
|
+
exports.setJson = setJson;
|
|
175
|
+
function setRedirect(url, status) {
|
|
176
|
+
const response = context_js_1.responseContext.value;
|
|
177
|
+
const express = exports.dxContext.value;
|
|
178
|
+
response.statusCode = status;
|
|
179
|
+
express.data = url;
|
|
180
|
+
express.type = 'redirect';
|
|
181
|
+
}
|
|
182
|
+
exports.setRedirect = setRedirect;
|
|
183
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZHgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsb0RBQThCO0FBQzlCLHlDQUFtQztBQUNuQyx1Q0FBZ0Q7QUFDaEQsNkNBQXlFO0FBQ3pFLDZDQUFvQztBQUV2QixRQUFBLFNBQVMsR0FBRyxJQUFBLHdCQUFXLEVBQUMsS0FBSyxFQUN6QyxFQUFDLFlBQVksRUFBRSxXQUFXLEtBR3RCLEVBQUUsRUFDTCxFQUFFO0lBQ0gsT0FBTztRQUNOLFlBQVk7UUFDWixXQUFXO0tBbUNWLENBQUE7QUFDSCxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUMsRUFBRSxFQUFFO0lBQ2xFLE1BQU0sR0FBRyxHQUFHLDRCQUFlLENBQUMsS0FBSyxDQUFBO0lBQ2pDLE1BQU0sY0FBYyxHQUFHLENBQUMsV0FBbUIsRUFBRSxFQUFFO1FBQzlDLElBQUksR0FBRyxDQUFDLFdBQVcsSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQztZQUFFLE9BQU07UUFDNUQsR0FBRyxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsR0FBRyxXQUFXLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxhQUFhLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ3hGLENBQUMsQ0FBQTtJQUNELElBQUksY0FBYyxDQUFBO0lBRWxCLFFBQVEsSUFBSSxFQUFFLENBQUM7UUFDZCxLQUFLLE1BQU07WUFDVixjQUFjLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDN0IsS0FBSyxNQUFNO1lBQ1YsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1lBQzNCLG1CQUFtQjtZQUNuQixjQUFjLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFD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
|
package/cjs/express.d.ts
CHANGED
|
@@ -1,81 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export declare const
|
|
5
|
-
readonly value: {
|
|
6
|
-
charset?: BufferEncoding | undefined;
|
|
7
|
-
jsonBeautify?: boolean | undefined;
|
|
8
|
-
disableEtag?: boolean | undefined;
|
|
9
|
-
} & ({
|
|
10
|
-
type: 'text';
|
|
11
|
-
data: string;
|
|
12
|
-
} | {
|
|
13
|
-
type: 'html';
|
|
14
|
-
data: string;
|
|
15
|
-
} | {
|
|
16
|
-
type: 'buffer';
|
|
17
|
-
data: Buffer;
|
|
18
|
-
} | {
|
|
19
|
-
type: 'json';
|
|
20
|
-
data: any;
|
|
21
|
-
} | {
|
|
22
|
-
type: 'redirect';
|
|
23
|
-
data: string;
|
|
24
|
-
} | {
|
|
25
|
-
type: 'nodeStream';
|
|
26
|
-
data: Readable;
|
|
27
|
-
} | {
|
|
28
|
-
type: 'webStream';
|
|
29
|
-
data: ReadableStream;
|
|
30
|
-
});
|
|
31
|
-
chain(params_0?: {
|
|
32
|
-
jsonBeautify?: boolean | undefined;
|
|
33
|
-
disableEtag?: boolean | undefined;
|
|
34
|
-
} | undefined): <V>(next: () => V) => Promise<any>;
|
|
35
|
-
with(value: {
|
|
36
|
-
charset?: BufferEncoding | undefined;
|
|
37
|
-
jsonBeautify?: boolean | undefined;
|
|
38
|
-
disableEtag?: boolean | undefined;
|
|
39
|
-
} & ({
|
|
40
|
-
type: 'text';
|
|
41
|
-
data: string;
|
|
42
|
-
} | {
|
|
43
|
-
type: 'html';
|
|
44
|
-
data: string;
|
|
45
|
-
} | {
|
|
46
|
-
type: 'buffer';
|
|
47
|
-
data: Buffer;
|
|
48
|
-
} | {
|
|
49
|
-
type: 'json';
|
|
50
|
-
data: any;
|
|
51
|
-
} | {
|
|
52
|
-
type: 'redirect';
|
|
53
|
-
data: string;
|
|
54
|
-
} | {
|
|
55
|
-
type: 'nodeStream';
|
|
56
|
-
data: Readable;
|
|
57
|
-
} | {
|
|
58
|
-
type: 'webStream';
|
|
59
|
-
data: ReadableStream;
|
|
60
|
-
})): <V_1>(next: () => V_1) => Promise<any>;
|
|
61
|
-
};
|
|
62
|
-
export declare function setText(text: string, { status }?: {
|
|
63
|
-
status?: number;
|
|
64
|
-
}): void;
|
|
65
|
-
export declare function setHtml(html: string, opts?: {
|
|
66
|
-
status?: number;
|
|
67
|
-
}): void;
|
|
68
|
-
export declare function setBuffer(buffer: Buffer, { status }?: {
|
|
69
|
-
status?: number;
|
|
70
|
-
}): void;
|
|
71
|
-
export declare function setNodeStream(stream: Readable, { status }?: {
|
|
72
|
-
status?: number;
|
|
73
|
-
}): void;
|
|
74
|
-
export declare function setWebStream(stream: ReadableStream, { status }?: {
|
|
75
|
-
status?: number;
|
|
76
|
-
}): void;
|
|
77
|
-
export declare function setJson(json: any, { status, beautify }?: {
|
|
78
|
-
status?: number;
|
|
79
|
-
beautify?: boolean;
|
|
80
|
-
}): void;
|
|
81
|
-
export declare function setRedirect(url: string, status: 301 | 302): void;
|
|
1
|
+
import { type Express, type Request, type Response, type Router } from 'express';
|
|
2
|
+
export declare const expressApp: (setup: (app: Express) => any) => Promise<(next: any) => Promise<void>>;
|
|
3
|
+
export declare const expressRouter: (setup: (router: Router) => any) => Promise<(next: any) => Promise<void>>;
|
|
4
|
+
export declare const chainExpressMiddlewares: (...middlewares: ((req: Request, res: Response, next: () => any) => any)[]) => Promise<(next: any) => Promise<void>>;
|
package/cjs/express.js
CHANGED
|
@@ -3,181 +3,42 @@ 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.
|
|
7
|
-
const
|
|
8
|
-
const node_util_1 = require("node:util");
|
|
9
|
-
const etag_js_1 = require("./etag.js");
|
|
6
|
+
exports.chainExpressMiddlewares = exports.expressRouter = exports.expressApp = void 0;
|
|
7
|
+
const express_1 = __importDefault(require("express"));
|
|
10
8
|
const context_js_1 = require("./context.js");
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
9
|
+
const jdefer_1 = __importDefault(require("jdefer"));
|
|
10
|
+
const expressApp = async (setup) => {
|
|
11
|
+
const symbol = Symbol('expressApp');
|
|
12
|
+
const app = (0, express_1.default)();
|
|
13
|
+
await setup(app);
|
|
14
|
+
app.use((req, _res, _next) => req[symbol].resolve());
|
|
15
|
+
app.use((err, req, _res, _next) => req[symbol].reject(err));
|
|
16
|
+
return async (next) => {
|
|
17
|
+
const req = context_js_1.requestContext.value;
|
|
18
|
+
const defer = (0, jdefer_1.default)();
|
|
19
|
+
req[symbol] = defer;
|
|
20
|
+
app(req, context_js_1.responseContext.value);
|
|
21
|
+
await defer.promise;
|
|
22
|
+
await next();
|
|
16
23
|
};
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
24
|
+
};
|
|
25
|
+
exports.expressApp = expressApp;
|
|
26
|
+
const expressRouter = async (setup) => {
|
|
27
|
+
const symbol = Symbol('expressRouter');
|
|
28
|
+
const router = express_1.default.Router();
|
|
29
|
+
await setup(router);
|
|
30
|
+
router.use((req, _res, _next) => req[symbol].resolve());
|
|
31
|
+
router.use((err, req, _res, _next) => req[symbol].reject(err));
|
|
32
|
+
return async (next) => {
|
|
33
|
+
const req = context_js_1.requestContext.value;
|
|
34
|
+
const defer = (0, jdefer_1.default)();
|
|
35
|
+
req[symbol] = defer;
|
|
36
|
+
router(req, context_js_1.responseContext.value);
|
|
37
|
+
await defer.promise;
|
|
38
|
+
await next();
|
|
23
39
|
};
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
setContentType('text/html');
|
|
30
|
-
// shared with text
|
|
31
|
-
bufferOrStream = Buffer.from(data, charset);
|
|
32
|
-
break;
|
|
33
|
-
case 'buffer':
|
|
34
|
-
setContentType('application/octet-stream');
|
|
35
|
-
bufferOrStream = data;
|
|
36
|
-
break;
|
|
37
|
-
case 'nodeStream':
|
|
38
|
-
setContentType('application/octet-stream');
|
|
39
|
-
bufferOrStream = data;
|
|
40
|
-
break;
|
|
41
|
-
case 'webStream':
|
|
42
|
-
setContentType('application/octet-stream');
|
|
43
|
-
bufferOrStream = node_stream_1.Readable.fromWeb(data);
|
|
44
|
-
break;
|
|
45
|
-
case 'json':
|
|
46
|
-
setContentType('application/json');
|
|
47
|
-
bufferOrStream = Buffer.from(jsonBeautify ? JSON.stringify(data, null, 2) : JSON.stringify(data), charset);
|
|
48
|
-
break;
|
|
49
|
-
case 'redirect':
|
|
50
|
-
res.setHeader('location', data);
|
|
51
|
-
bufferOrStream = Buffer.from('', charset);
|
|
52
|
-
break;
|
|
53
|
-
case undefined:
|
|
54
|
-
// skip response. Some middleware may handle it outside the chain. For example, express middleware
|
|
55
|
-
return ret;
|
|
56
|
-
default:
|
|
57
|
-
if (!res.getHeader('content-type'))
|
|
58
|
-
res.setHeader('content-type', 'text/plain');
|
|
59
|
-
throw new Error(`unsupported response type ${type}`);
|
|
60
|
-
}
|
|
61
|
-
const req = context_js_1.requestContext.value;
|
|
62
|
-
if (res.headersSent) {
|
|
63
|
-
if (res.writableFinished) {
|
|
64
|
-
// skipped: response is already finished
|
|
65
|
-
}
|
|
66
|
-
else if (res.writableEnded) {
|
|
67
|
-
const defer = (0, jdefer_1.default)();
|
|
68
|
-
res.addListener('finish', defer.resolve);
|
|
69
|
-
await defer.promise;
|
|
70
|
-
// skipped: response is already ended
|
|
71
|
-
// chunk is not fully flushed yet
|
|
72
|
-
}
|
|
73
|
-
else
|
|
74
|
-
await (0, node_util_1.promisify)(res.end.bind(res))(undefined); // to be consistent, we end the response immediately
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
// https://github.com/expressjs/express/blob/980d881e3b023db079de60477a2588a91f046ca5/lib/response.js#L210
|
|
78
|
-
if (res.statusCode === 204) { // No Content
|
|
79
|
-
res.removeHeader('content-type');
|
|
80
|
-
res.removeHeader('content-length');
|
|
81
|
-
res.removeHeader('transfer-encoding');
|
|
82
|
-
// write nothing
|
|
83
|
-
}
|
|
84
|
-
if (res.statusCode === 205) { // reset content. Tell client to clear the form, etc.
|
|
85
|
-
res.setHeader('content-length', 0);
|
|
86
|
-
res.removeHeader('transfer-encoding');
|
|
87
|
-
}
|
|
88
|
-
else if (req.method === 'HEAD') {
|
|
89
|
-
// write nothing
|
|
90
|
-
}
|
|
91
|
-
else {
|
|
92
|
-
if (Buffer.isBuffer(bufferOrStream)) {
|
|
93
|
-
// support: 304 (etag), zipping, file etag and last modified
|
|
94
|
-
res.setHeader('content-length', bufferOrStream.length);
|
|
95
|
-
if (!disableEtag) {
|
|
96
|
-
const etag = (0, etag_js_1.entityTag)(bufferOrStream);
|
|
97
|
-
const lastModified = res.getHeader('last-modified');
|
|
98
|
-
res.setHeader('ETag', etag);
|
|
99
|
-
if ((0, etag_js_1.isFreshETag)(req, etag)) {
|
|
100
|
-
res.removeHeader('content-type');
|
|
101
|
-
res.removeHeader('content-length');
|
|
102
|
-
res.removeHeader('transfer-encoding');
|
|
103
|
-
res.statusCode = 304;
|
|
104
|
-
// write nothing
|
|
105
|
-
}
|
|
106
|
-
else
|
|
107
|
-
res.write(bufferOrStream);
|
|
108
|
-
}
|
|
109
|
-
else
|
|
110
|
-
res.write(bufferOrStream);
|
|
111
|
-
}
|
|
112
|
-
else {
|
|
113
|
-
bufferOrStream.pipe(res);
|
|
114
|
-
}
|
|
115
|
-
// fixme: not support content-encoding (gzip, deflate, br) for now
|
|
116
|
-
}
|
|
117
|
-
await (0, node_util_1.promisify)(res.end.bind(res))(undefined); // some express middleware, such as express-session, requires explicitly passing chunk
|
|
118
|
-
}
|
|
119
|
-
return ret;
|
|
120
|
-
});
|
|
121
|
-
// todo: support setFile (with stream or with buffer)
|
|
122
|
-
function setText(text, { status } = {}) {
|
|
123
|
-
const response = context_js_1.responseContext.value;
|
|
124
|
-
const express = exports.expressContext.value;
|
|
125
|
-
if (status)
|
|
126
|
-
response.statusCode = status;
|
|
127
|
-
express.data = text;
|
|
128
|
-
express.type = 'text';
|
|
129
|
-
}
|
|
130
|
-
exports.setText = setText;
|
|
131
|
-
function setHtml(html, opts = {}) {
|
|
132
|
-
setText(html, opts);
|
|
133
|
-
const express = exports.expressContext.value;
|
|
134
|
-
express.type = 'html';
|
|
135
|
-
}
|
|
136
|
-
exports.setHtml = setHtml;
|
|
137
|
-
function setBuffer(buffer, { status } = {}) {
|
|
138
|
-
const response = context_js_1.responseContext.value;
|
|
139
|
-
const express = exports.expressContext.value;
|
|
140
|
-
if (status)
|
|
141
|
-
response.statusCode = status;
|
|
142
|
-
express.data = buffer;
|
|
143
|
-
express.type = 'buffer';
|
|
144
|
-
}
|
|
145
|
-
exports.setBuffer = setBuffer;
|
|
146
|
-
function setNodeStream(stream, { status } = {}) {
|
|
147
|
-
const response = context_js_1.responseContext.value;
|
|
148
|
-
const express = exports.expressContext.value;
|
|
149
|
-
if (status)
|
|
150
|
-
response.statusCode = status;
|
|
151
|
-
express.data = stream;
|
|
152
|
-
express.type = 'nodeStream';
|
|
153
|
-
}
|
|
154
|
-
exports.setNodeStream = setNodeStream;
|
|
155
|
-
function setWebStream(stream, { status } = {}) {
|
|
156
|
-
const response = context_js_1.responseContext.value;
|
|
157
|
-
const express = exports.expressContext.value;
|
|
158
|
-
if (status)
|
|
159
|
-
response.statusCode = status;
|
|
160
|
-
express.data = stream;
|
|
161
|
-
express.type = 'webStream';
|
|
162
|
-
}
|
|
163
|
-
exports.setWebStream = setWebStream;
|
|
164
|
-
function setJson(json, { status, beautify } = {}) {
|
|
165
|
-
const response = context_js_1.responseContext.value;
|
|
166
|
-
if (status)
|
|
167
|
-
response.statusCode = status;
|
|
168
|
-
const express = exports.expressContext.value;
|
|
169
|
-
express.data = json;
|
|
170
|
-
express.type = 'json';
|
|
171
|
-
if (beautify !== undefined)
|
|
172
|
-
express.jsonBeautify = beautify;
|
|
173
|
-
}
|
|
174
|
-
exports.setJson = setJson;
|
|
175
|
-
function setRedirect(url, status) {
|
|
176
|
-
const response = context_js_1.responseContext.value;
|
|
177
|
-
const express = exports.expressContext.value;
|
|
178
|
-
response.statusCode = status;
|
|
179
|
-
express.data = url;
|
|
180
|
-
express.type = 'redirect';
|
|
181
|
-
}
|
|
182
|
-
exports.setRedirect = setRedirect;
|
|
183
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwcmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9leHByZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQUE4QjtBQUM5Qix5Q0FBbUM7QUFDbkMsdUNBQWdEO0FBQ2hELDZDQUF5RTtBQUN6RSw2Q0FBb0M7QUFFdkIsUUFBQSxjQUFjLEdBQUcsSUFBQSx3QkFBVyxFQUFDLEtBQUssRUFDOUMsRUFBQyxZQUFZLEVBQUUsV0FBVyxLQUd0QixFQUFFLEVBQ0wsRUFBRTtJQUNILE9BQU87UUFDTixZQUFZO1FBQ1osV0FBVztLQW1DVixDQUFBO0FBQ0gsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFDLEVBQUUsRUFBRTtJQUNsRSxNQUFNLEdBQUcsR0FBRyw0QkFBZSxDQUFDLEtBQUssQ0FBQTtJQUNqQyxNQUFNLGNBQWMsR0FBRyxDQUFDLFdBQW1CLEVBQUUsRUFBRTtRQUM5QyxJQUFJLEdBQUcsQ0FBQyxXQUFXLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUM7WUFBRSxPQUFNO1FBQzVELEdBQUcsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLEdBQUcsV0FBVyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsYUFBYSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUN4RixDQUFDLENBQUE7SUFDRCxJQUFJLGNBQWMsQ0FBQTtJQUVsQixRQUFRLElBQUksRUFBRSxDQUFDO1FBQ2QsS0FBSyxNQUFNO1lBQ1YsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQzdCLEtBQUssTUFBTTtZQUNWLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQTtZQUMzQixtQkFBbUI7WUFDbkIsY0FBYyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FB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
|
|
40
|
+
};
|
|
41
|
+
exports.expressRouter = expressRouter;
|
|
42
|
+
const chainExpressMiddlewares = (...middlewares) => (0, exports.expressRouter)(router => router.use(...middlewares));
|
|
43
|
+
exports.chainExpressMiddlewares = chainExpressMiddlewares;
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwcmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9leHByZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHNEQUF1RjtBQUN2Riw2Q0FBNEQ7QUFDNUQsb0RBQThCO0FBRXZCLE1BQU0sVUFBVSxHQUFHLEtBQUssRUFBRSxLQUE0QixFQUFFLEVBQUU7SUFDaEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFBO0lBRW5DLE1BQU0sR0FBRyxHQUFHLElBQUEsaUJBQU8sR0FBRSxDQUFBO0lBQ3JCLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2hCLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7SUFDcEQsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO0lBQzNELE9BQU8sS0FBSyxFQUFDLElBQUksRUFBQyxFQUFFO1FBQ25CLE1BQU0sR0FBRyxHQUFHLDJCQUFjLENBQUMsS0FBSyxDQUFBO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLElBQUEsZ0JBQVMsR0FBRSxDQUFBO1FBQ3pCLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUE7UUFDbkIsR0FBRyxDQUFDLEdBQUcsRUFBRSw0QkFBZSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQy9CLE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQTtRQUNuQixNQUFNLElBQUksRUFBRSxDQUFBO0lBQ2IsQ0FBQyxDQUFBO0FBQ0YsQ0FBQyxDQUFBO0FBZlksUUFBQSxVQUFVLGNBZXRCO0FBRU0sTUFBTSxhQUFhLEdBQUcsS0FBSyxFQUFFLEtBQThCLEVBQUUsRUFBRTtJQUNyRSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUE7SUFFdEMsTUFBTSxNQUFNLEdBQUcsaUJBQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQTtJQUMvQixNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNuQixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFBO0lBQ3ZELE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUM5RCxPQUFPLEtBQUssRUFBQyxJQUFJLEVBQUMsRUFBRTtRQUNuQixNQUFNLEdBQUcsR0FBRywyQkFBYyxDQUFDLEtBQUssQ0FBQTtRQUNoQyxNQUFNLEtBQUssR0FBRyxJQUFBLGdCQUFTLEdBQUUsQ0FBQTtRQUN6QixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFBO1FBQ25CLE1BQU0sQ0FBQyxHQUFHLEVBQUUsNEJBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNsQyxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUE7UUFDbkIsTUFBTSxJQUFJLEVBQUUsQ0FBQTtJQUNiLENBQUMsQ0FBQTtBQUNGLENBQUMsQ0FBQTtBQWZZLFFBQUEsYUFBYSxpQkFlekI7QUFFTSxNQUFNLHVCQUF1QixHQUFHLENBQ3RDLEdBQUcsV0FBeUUsRUFDM0UsRUFBRSxDQUFDLElBQUEscUJBQWEsRUFBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFBO0FBRjNDLFFBQUEsdUJBQXVCLDJCQUVvQiJ9
|
package/cjs/index.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
export { makeContext, requestContext, responseContext } from './context.js';
|
|
2
|
-
export {
|
|
2
|
+
export { dxContext, setHtml, setJson, setBuffer, setRedirect, setText } from './dx.js';
|
|
3
3
|
export { bufferBodyContext, jsonBodyContext, queryContext, rawBodyContext, textBodyContext, urlencodedBodyContext } from './body.js';
|
|
4
4
|
export { router } from './route.js';
|
|
5
|
-
export { expressApp, expressRouter, chainExpressMiddlewares } from './expressApp.js';
|