dx-server 0.0.1 → 0.0.3
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 +183 -0
- package/cjs/body.d.ts +30 -0
- package/cjs/body.js +91 -0
- package/cjs/contentType.d.ts +4 -0
- package/cjs/contentType.js +92 -0
- package/cjs/context.d.ts +15 -0
- package/cjs/context.js +27 -0
- package/cjs/error.js +42 -0
- package/cjs/etag.d.ts +7 -0
- package/cjs/etag.js +100 -0
- package/cjs/express.d.ts +49 -0
- package/cjs/express.js +168 -0
- package/cjs/expressApp.d.ts +4 -0
- package/cjs/expressApp.js +44 -0
- package/cjs/file.d.ts +3 -0
- package/cjs/file.js +12 -0
- package/cjs/index.d.ts +6 -0
- package/cjs/index.js +33 -0
- package/cjs/package.json +3 -0
- package/cjs/route.d.ts +38 -0
- package/cjs/route.js +86 -0
- package/cjs/static.d.ts +4 -0
- package/cjs/static.js +60 -0
- package/cjs/stream.d.ts +11 -0
- package/cjs/stream.js +100 -0
- package/esm/body.d.ts +30 -0
- package/esm/body.js +88 -0
- package/esm/contentType.d.ts +4 -0
- package/esm/contentType.js +88 -0
- package/esm/context.d.ts +15 -0
- package/esm/context.js +23 -0
- package/esm/error.js +37 -0
- package/esm/etag.d.ts +7 -0
- package/esm/etag.js +90 -0
- package/esm/express.d.ts +49 -0
- package/esm/express.js +156 -0
- package/esm/expressApp.d.ts +4 -0
- package/esm/expressApp.js +35 -0
- package/esm/file.d.ts +3 -0
- package/esm/file.js +8 -0
- package/esm/index.d.ts +6 -0
- package/esm/index.js +7 -0
- package/esm/route.d.ts +38 -0
- package/esm/route.js +82 -0
- package/esm/static.d.ts +4 -0
- package/esm/static.js +56 -0
- package/esm/stream.d.ts +11 -0
- package/esm/stream.js +92 -0
- package/package.json +32 -5
- package/index.js +0 -1
package/cjs/express.js
ADDED
|
@@ -0,0 +1,168 @@
|
|
|
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.setStream = exports.setBuffer = exports.setHtml = exports.setText = exports.expressContext = 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
|
+
exports.expressContext = (0, context_js_1.makeContext)(async ({ jsonBeautify, disableEtag } = {}) => {
|
|
12
|
+
return {
|
|
13
|
+
jsonBeautify,
|
|
14
|
+
disableEtag,
|
|
15
|
+
};
|
|
16
|
+
}, async (ret, { type, data, charset, jsonBeautify, disableEtag }) => {
|
|
17
|
+
const res = context_js_1.responseContext.value;
|
|
18
|
+
const setContentType = (contentType) => {
|
|
19
|
+
if (res.headersSent || res.getHeader('content-type'))
|
|
20
|
+
return;
|
|
21
|
+
res.setHeader('content-type', `${contentType}${charset ? `; charset=${charset}` : ''}`);
|
|
22
|
+
};
|
|
23
|
+
let buffer;
|
|
24
|
+
switch (type) {
|
|
25
|
+
case 'text':
|
|
26
|
+
setContentType('text/plain');
|
|
27
|
+
case 'html':
|
|
28
|
+
setContentType('text/html');
|
|
29
|
+
// shared with text
|
|
30
|
+
buffer = Buffer.from(data, charset);
|
|
31
|
+
break;
|
|
32
|
+
case 'buffer':
|
|
33
|
+
setContentType('application/octet-stream');
|
|
34
|
+
buffer = data;
|
|
35
|
+
break;
|
|
36
|
+
case 'stream':
|
|
37
|
+
setContentType('application/octet-stream');
|
|
38
|
+
buffer = data;
|
|
39
|
+
break;
|
|
40
|
+
case 'json':
|
|
41
|
+
setContentType('application/json');
|
|
42
|
+
buffer = Buffer.from(jsonBeautify ? JSON.stringify(data, null, 2) : JSON.stringify(data), charset);
|
|
43
|
+
break;
|
|
44
|
+
case 'redirect':
|
|
45
|
+
buffer = Buffer.from(data, charset);
|
|
46
|
+
break;
|
|
47
|
+
case undefined:
|
|
48
|
+
// skip response. Some middleware may handle it outside the chain. For example, express middleware
|
|
49
|
+
return ret;
|
|
50
|
+
default:
|
|
51
|
+
if (!res.getHeader('content-type'))
|
|
52
|
+
res.setHeader('content-type', 'text/plain');
|
|
53
|
+
throw new Error(`unsupported response type ${type}`);
|
|
54
|
+
}
|
|
55
|
+
const req = context_js_1.requestContext.value;
|
|
56
|
+
if (res.headersSent) {
|
|
57
|
+
if (res.writableFinished) {
|
|
58
|
+
// skipped: response is already finished
|
|
59
|
+
}
|
|
60
|
+
else if (res.writableEnded) {
|
|
61
|
+
const defer = (0, jdefer_1.default)();
|
|
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 (0, node_util_1.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(buffer)) {
|
|
87
|
+
// support: 304 (etag), zipping, file etag and last modified
|
|
88
|
+
res.setHeader('content-length', buffer.length);
|
|
89
|
+
if (!disableEtag) {
|
|
90
|
+
const etag = (0, etag_js_1.entityTag)(buffer);
|
|
91
|
+
const lastModified = res.getHeader('last-modified');
|
|
92
|
+
res.setHeader('ETag', etag);
|
|
93
|
+
if ((0, etag_js_1.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(buffer);
|
|
102
|
+
}
|
|
103
|
+
else
|
|
104
|
+
res.write(buffer);
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
buffer.pipe(res);
|
|
108
|
+
}
|
|
109
|
+
// fixme: not support content-encoding (gzip, deflate, br) for now
|
|
110
|
+
}
|
|
111
|
+
await (0, node_util_1.promisify)(res.end.bind(res))(undefined); // some express middleware, such as express-session, requires explicitly passing chunk
|
|
112
|
+
}
|
|
113
|
+
return ret;
|
|
114
|
+
});
|
|
115
|
+
// todo: support setFile (with stream or with buffer)
|
|
116
|
+
function setText(text, { status } = {}) {
|
|
117
|
+
const response = context_js_1.responseContext.value;
|
|
118
|
+
const express = exports.expressContext.value;
|
|
119
|
+
if (status)
|
|
120
|
+
response.statusCode = status;
|
|
121
|
+
express.data = text;
|
|
122
|
+
express.type = 'text';
|
|
123
|
+
}
|
|
124
|
+
exports.setText = setText;
|
|
125
|
+
function setHtml(html, opts = {}) {
|
|
126
|
+
setText(html, opts);
|
|
127
|
+
const express = exports.expressContext.value;
|
|
128
|
+
express.type = 'html';
|
|
129
|
+
}
|
|
130
|
+
exports.setHtml = setHtml;
|
|
131
|
+
function setBuffer(buffer, { status } = {}) {
|
|
132
|
+
const response = context_js_1.responseContext.value;
|
|
133
|
+
const express = exports.expressContext.value;
|
|
134
|
+
if (status)
|
|
135
|
+
response.statusCode = status;
|
|
136
|
+
express.data = buffer;
|
|
137
|
+
express.type = 'buffer';
|
|
138
|
+
}
|
|
139
|
+
exports.setBuffer = setBuffer;
|
|
140
|
+
function setStream(stream, { status } = {}) {
|
|
141
|
+
const response = context_js_1.responseContext.value;
|
|
142
|
+
const express = exports.expressContext.value;
|
|
143
|
+
if (status)
|
|
144
|
+
response.statusCode = status;
|
|
145
|
+
express.data = stream;
|
|
146
|
+
express.type = 'stream';
|
|
147
|
+
}
|
|
148
|
+
exports.setStream = setStream;
|
|
149
|
+
function setJson(json, { status, beautify } = {}) {
|
|
150
|
+
const response = context_js_1.responseContext.value;
|
|
151
|
+
if (status)
|
|
152
|
+
response.statusCode = status;
|
|
153
|
+
const express = exports.expressContext.value;
|
|
154
|
+
express.data = json;
|
|
155
|
+
express.type = 'json';
|
|
156
|
+
if (beautify !== undefined)
|
|
157
|
+
express.jsonBeautify = beautify;
|
|
158
|
+
}
|
|
159
|
+
exports.setJson = setJson;
|
|
160
|
+
function setRedirect(url, status) {
|
|
161
|
+
const response = context_js_1.responseContext.value;
|
|
162
|
+
const express = exports.expressContext.value;
|
|
163
|
+
response.statusCode = status;
|
|
164
|
+
express.data = url;
|
|
165
|
+
express.type = 'redirect';
|
|
166
|
+
}
|
|
167
|
+
exports.setRedirect = setRedirect;
|
|
168
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwcmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9leHByZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQUE4QjtBQUM5Qix5Q0FBbUM7QUFDbkMsdUNBQWdEO0FBQ2hELDZDQUF5RTtBQUc1RCxRQUFBLGNBQWMsR0FBRyxJQUFBLHdCQUFXLEVBQUMsS0FBSyxFQUM5QyxFQUFDLFlBQVksRUFBRSxXQUFXLEtBR3RCLEVBQUUsRUFDTCxFQUFFO0lBQ0gsT0FBTztRQUNOLFlBQVk7UUFDWixXQUFXO0tBK0JWLENBQUE7QUFDSCxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUMsRUFBRSxFQUFFO0lBQ2xFLE1BQU0sR0FBRyxHQUFHLDRCQUFlLENBQUMsS0FBSyxDQUFBO0lBQ2pDLE1BQU0sY0FBYyxHQUFHLENBQUMsV0FBbUIsRUFBRSxFQUFFO1FBQzlDLElBQUksR0FBRyxDQUFDLFdBQVcsSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQztZQUFFLE9BQU07UUFDNUQsR0FBRyxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsR0FBRyxXQUFXLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxhQUFhLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ3hGLENBQUMsQ0FBQTtJQUNELElBQUksTUFBTSxDQUFBO0lBRVYsUUFBUSxJQUFJLEVBQUU7UUFDYixLQUFLLE1BQU07WUFDVixjQUFjLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDN0IsS0FBSyxNQUFNO1lBQ1YsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1lBQzNCLG1CQUFtQjtZQUNuQixNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDbkMsTUFBSztR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
|
|
@@ -0,0 +1,4 @@
|
|
|
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>>;
|
|
@@ -0,0 +1,44 @@
|
|
|
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.chainExpressMiddlewares = exports.expressRouter = exports.expressApp = void 0;
|
|
7
|
+
const express_1 = __importDefault(require("express"));
|
|
8
|
+
const context_js_1 = require("./context.js");
|
|
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();
|
|
23
|
+
};
|
|
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();
|
|
39
|
+
};
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwcmVzc0FwcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9leHByZXNzQXBwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHNEQUF1RjtBQUN2Riw2Q0FBNEQ7QUFDNUQsb0RBQThCO0FBRXZCLE1BQU0sVUFBVSxHQUFHLEtBQUssRUFBRSxLQUE0QixFQUFFLEVBQUU7SUFDaEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFBO0lBRW5DLE1BQU0sR0FBRyxHQUFHLElBQUEsaUJBQU8sR0FBRSxDQUFBO0lBQ3JCLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2hCLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7SUFDcEQsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO0lBQzNELE9BQU8sS0FBSyxFQUFDLElBQUksRUFBQyxFQUFFO1FBQ25CLE1BQU0sR0FBRyxHQUFHLDJCQUFjLENBQUMsS0FBSyxDQUFBO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLElBQUEsZ0JBQVMsR0FBRSxDQUFBO1FBQ3pCLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUE7UUFDbkIsR0FBRyxDQUFDLEdBQUcsRUFBRSw0QkFBZSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQy9CLE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQTtRQUNuQixNQUFNLElBQUksRUFBRSxDQUFBO0lBQ2IsQ0FBQyxDQUFBO0FBQ0YsQ0FBQyxDQUFBO0FBZlksUUFBQSxVQUFVLGNBZXRCO0FBRU0sTUFBTSxhQUFhLEdBQUcsS0FBSyxFQUFFLEtBQThCLEVBQUUsRUFBRTtJQUNyRSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUE7SUFFdEMsTUFBTSxNQUFNLEdBQUcsaUJBQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQTtJQUMvQixNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNuQixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFBO0lBQ3ZELE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUM5RCxPQUFPLEtBQUssRUFBQyxJQUFJLEVBQUMsRUFBRTtRQUNuQixNQUFNLEdBQUcsR0FBRywyQkFBYyxDQUFDLEtBQUssQ0FBQTtRQUNoQyxNQUFNLEtBQUssR0FBRyxJQUFBLGdCQUFTLEdBQUUsQ0FBQTtRQUN6QixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFBO1FBQ25CLE1BQU0sQ0FBQyxHQUFHLEVBQUUsNEJBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNsQyxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUE7UUFDbkIsTUFBTSxJQUFJLEVBQUUsQ0FBQTtJQUNiLENBQUMsQ0FBQTtBQUNGLENBQUMsQ0FBQTtBQWZZLFFBQUEsYUFBYSxpQkFlekI7QUFFTSxNQUFNLHVCQUF1QixHQUFHLENBQ3RDLEdBQUcsV0FBeUUsRUFDM0UsRUFBRSxDQUFDLElBQUEscUJBQWEsRUFBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFBO0FBRjNDLFFBQUEsdUJBQXVCLDJCQUVvQiJ9
|
package/cjs/file.d.ts
ADDED
package/cjs/file.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.serveFile = void 0;
|
|
4
|
+
const context_js_1 = require("./context.js");
|
|
5
|
+
const serveFile = ({ prefix = '' }) => next => {
|
|
6
|
+
const req = context_js_1.requestContext.value;
|
|
7
|
+
const res = context_js_1.responseContext.value;
|
|
8
|
+
if (req.method !== 'GET' && req.method !== 'HEAD')
|
|
9
|
+
return next();
|
|
10
|
+
};
|
|
11
|
+
exports.serveFile = serveFile;
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9maWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUE0RDtBQUdyRCxNQUFNLFNBQVMsR0FBRyxDQUN4QixFQUFDLE1BQU0sR0FBRyxFQUFFLEVBRVgsRUFDWSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7SUFDdkIsTUFBTSxHQUFHLEdBQUcsMkJBQWMsQ0FBQyxLQUFLLENBQUE7SUFDaEMsTUFBTSxHQUFHLEdBQUcsNEJBQWUsQ0FBQyxLQUFLLENBQUE7SUFDakMsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLEtBQUssSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLE1BQU07UUFBRSxPQUFPLElBQUksRUFBRSxDQUFBO0FBQ2pFLENBQUMsQ0FBQTtBQVJZLFFBQUEsU0FBUyxhQVFyQiJ9
|
package/cjs/index.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { makeContext, requestContext, responseContext } from './context.js';
|
|
2
|
+
export { expressContext, setHtml, setJson, setBuffer, setRedirect, setText } from './express.js';
|
|
3
|
+
export { bufferBodyContext, jsonBodyContext, queryContext, rawBodyContext, textBodyContext, urlencodedBodyContext } from './body.js';
|
|
4
|
+
export { router } from './route.js';
|
|
5
|
+
export { catchApiError, catchError, notFound, notFoundApi } from './error.js';
|
|
6
|
+
export { expressApp, expressRouter, chainExpressMiddlewares } from './expressApp.js';
|
package/cjs/index.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.chainExpressMiddlewares = exports.expressRouter = exports.expressApp = exports.notFoundApi = exports.notFound = exports.catchError = exports.catchApiError = exports.router = exports.urlencodedBodyContext = exports.textBodyContext = exports.rawBodyContext = exports.queryContext = exports.jsonBodyContext = exports.bufferBodyContext = exports.setText = exports.setRedirect = exports.setBuffer = exports.setJson = exports.setHtml = exports.expressContext = exports.responseContext = exports.requestContext = exports.makeContext = void 0;
|
|
4
|
+
var context_js_1 = require("./context.js");
|
|
5
|
+
Object.defineProperty(exports, "makeContext", { enumerable: true, get: function () { return context_js_1.makeContext; } });
|
|
6
|
+
Object.defineProperty(exports, "requestContext", { enumerable: true, get: function () { return context_js_1.requestContext; } });
|
|
7
|
+
Object.defineProperty(exports, "responseContext", { enumerable: true, get: function () { return context_js_1.responseContext; } });
|
|
8
|
+
var express_js_1 = require("./express.js");
|
|
9
|
+
Object.defineProperty(exports, "expressContext", { enumerable: true, get: function () { return express_js_1.expressContext; } });
|
|
10
|
+
Object.defineProperty(exports, "setHtml", { enumerable: true, get: function () { return express_js_1.setHtml; } });
|
|
11
|
+
Object.defineProperty(exports, "setJson", { enumerable: true, get: function () { return express_js_1.setJson; } });
|
|
12
|
+
Object.defineProperty(exports, "setBuffer", { enumerable: true, get: function () { return express_js_1.setBuffer; } });
|
|
13
|
+
Object.defineProperty(exports, "setRedirect", { enumerable: true, get: function () { return express_js_1.setRedirect; } });
|
|
14
|
+
Object.defineProperty(exports, "setText", { enumerable: true, get: function () { return express_js_1.setText; } });
|
|
15
|
+
var body_js_1 = require("./body.js");
|
|
16
|
+
Object.defineProperty(exports, "bufferBodyContext", { enumerable: true, get: function () { return body_js_1.bufferBodyContext; } });
|
|
17
|
+
Object.defineProperty(exports, "jsonBodyContext", { enumerable: true, get: function () { return body_js_1.jsonBodyContext; } });
|
|
18
|
+
Object.defineProperty(exports, "queryContext", { enumerable: true, get: function () { return body_js_1.queryContext; } });
|
|
19
|
+
Object.defineProperty(exports, "rawBodyContext", { enumerable: true, get: function () { return body_js_1.rawBodyContext; } });
|
|
20
|
+
Object.defineProperty(exports, "textBodyContext", { enumerable: true, get: function () { return body_js_1.textBodyContext; } });
|
|
21
|
+
Object.defineProperty(exports, "urlencodedBodyContext", { enumerable: true, get: function () { return body_js_1.urlencodedBodyContext; } });
|
|
22
|
+
var route_js_1 = require("./route.js");
|
|
23
|
+
Object.defineProperty(exports, "router", { enumerable: true, get: function () { return route_js_1.router; } });
|
|
24
|
+
var error_js_1 = require("./error.js");
|
|
25
|
+
Object.defineProperty(exports, "catchApiError", { enumerable: true, get: function () { return error_js_1.catchApiError; } });
|
|
26
|
+
Object.defineProperty(exports, "catchError", { enumerable: true, get: function () { return error_js_1.catchError; } });
|
|
27
|
+
Object.defineProperty(exports, "notFound", { enumerable: true, get: function () { return error_js_1.notFound; } });
|
|
28
|
+
Object.defineProperty(exports, "notFoundApi", { enumerable: true, get: function () { return error_js_1.notFoundApi; } });
|
|
29
|
+
var expressApp_js_1 = require("./expressApp.js");
|
|
30
|
+
Object.defineProperty(exports, "expressApp", { enumerable: true, get: function () { return expressApp_js_1.expressApp; } });
|
|
31
|
+
Object.defineProperty(exports, "expressRouter", { enumerable: true, get: function () { return expressApp_js_1.expressRouter; } });
|
|
32
|
+
Object.defineProperty(exports, "chainExpressMiddlewares", { enumerable: true, get: function () { return expressApp_js_1.chainExpressMiddlewares; } });
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQXlFO0FBQWpFLHlHQUFBLFdBQVcsT0FBQTtBQUFFLDRHQUFBLGNBQWMsT0FBQTtBQUFFLDZHQUFBLGVBQWUsT0FBQTtBQUNwRCwyQ0FPcUI7QUFOcEIsNEdBQUEsY0FBYyxPQUFBO0FBQ2QscUdBQUEsT0FBTyxPQUFBO0FBQ1AscUdBQUEsT0FBTyxPQUFBO0FBQ1AsdUdBQUEsU0FBUyxPQUFBO0FBQ1QseUdBQUEsV0FBVyxPQUFBO0FBQ1gscUdBQUEsT0FBTyxPQUFBO0FBRVIscUNBT2tCO0FBTmpCLDRHQUFBLGlCQUFpQixPQUFBO0FBQ2pCLDBHQUFBLGVBQWUsT0FBQTtBQUNmLHVHQUFBLFlBQVksT0FBQTtBQUNaLHlHQUFBLGNBQWMsT0FBQTtBQUNkLDBHQUFBLGVBQWUsT0FBQTtBQUNmLGdIQUFBLHFCQUFxQixPQUFBO0FBRXRCLHVDQUFpQztBQUF6QixrR0FBQSxNQUFNLE9BQUE7QUFDZCx1Q0FBMkU7QUFBbkUseUdBQUEsYUFBYSxPQUFBO0FBQUUsc0dBQUEsVUFBVSxPQUFBO0FBQUUsb0dBQUEsUUFBUSxPQUFBO0FBQUUsdUdBQUEsV0FBVyxPQUFBO0FBQ3hELGlEQUFrRjtBQUExRSwyR0FBQSxVQUFVLE9BQUE7QUFBRSw4R0FBQSxhQUFhLE9BQUE7QUFBRSx3SEFBQSx1QkFBdUIsT0FBQSJ9
|
package/cjs/package.json
ADDED
package/cjs/route.d.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { Key } from 'path-to-regexp';
|
|
2
|
+
interface RegexpToPathOptions {
|
|
3
|
+
end?: boolean;
|
|
4
|
+
strict?: boolean;
|
|
5
|
+
sensitive?: boolean;
|
|
6
|
+
start?: boolean;
|
|
7
|
+
delimiter?: string;
|
|
8
|
+
endsWith?: string;
|
|
9
|
+
encode?(value: string): string;
|
|
10
|
+
prefixes?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function matchPattern<Params extends Record<Key['name'], string>>(pathname: string, pattern: string, options?: RegexpToPathOptions): {
|
|
13
|
+
matched: any;
|
|
14
|
+
params: any;
|
|
15
|
+
} | undefined;
|
|
16
|
+
interface Chainable<P extends any[] = any[], R = any, Next = (...np: any[]) => any> {
|
|
17
|
+
(next: Next, ...p: P): R;
|
|
18
|
+
}
|
|
19
|
+
interface RouteContext {
|
|
20
|
+
matched: string;
|
|
21
|
+
next(): any;
|
|
22
|
+
params: Record<Key['name'], string>;
|
|
23
|
+
}
|
|
24
|
+
interface RouteDefinition {
|
|
25
|
+
[k: string]: (p: RouteContext) => any;
|
|
26
|
+
}
|
|
27
|
+
interface RouterOptions extends RegexpToPathOptions {
|
|
28
|
+
prefix?: string;
|
|
29
|
+
}
|
|
30
|
+
declare const allMethods: readonly ["get", "head", "post", "put", "delete", "connect", "options", "trace", "patch"];
|
|
31
|
+
type IRouter = {
|
|
32
|
+
[K in typeof allMethods[number]]: (definition: RouteDefinition, options?: RouterOptions) => Chainable;
|
|
33
|
+
} & {
|
|
34
|
+
all(definition: RouteDefinition, options?: RouterOptions): Chainable;
|
|
35
|
+
method(method: string, definition: RouteDefinition, options?: RouterOptions): Chainable;
|
|
36
|
+
};
|
|
37
|
+
export declare const router: IRouter;
|
|
38
|
+
export {};
|
package/cjs/route.js
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.router = exports.matchPattern = void 0;
|
|
4
|
+
const path_to_regexp_1 = require("path-to-regexp");
|
|
5
|
+
const context_js_1 = require("./context.js");
|
|
6
|
+
const cache = {};
|
|
7
|
+
const cacheLimit = 10000;
|
|
8
|
+
let cacheCount = 0;
|
|
9
|
+
function compilePath(path, options) {
|
|
10
|
+
const cacheKey = JSON.stringify(options);
|
|
11
|
+
const pathCache = cache[cacheKey] || (cache[cacheKey] = {});
|
|
12
|
+
if (pathCache[path])
|
|
13
|
+
return pathCache[path];
|
|
14
|
+
const keys = [];
|
|
15
|
+
const regexp = (0, path_to_regexp_1.pathToRegexp)(path, keys, options);
|
|
16
|
+
const result = {
|
|
17
|
+
regexp,
|
|
18
|
+
keys
|
|
19
|
+
};
|
|
20
|
+
if (cacheCount < cacheLimit) {
|
|
21
|
+
pathCache[path] = result;
|
|
22
|
+
cacheCount++;
|
|
23
|
+
}
|
|
24
|
+
return result;
|
|
25
|
+
}
|
|
26
|
+
function matchPattern(pathname, pattern, options) {
|
|
27
|
+
options = { ...options };
|
|
28
|
+
options.end ??= true;
|
|
29
|
+
options.strict ??= false;
|
|
30
|
+
options.sensitive ??= false;
|
|
31
|
+
options.start ??= true;
|
|
32
|
+
if (!pattern && pattern !== '')
|
|
33
|
+
return;
|
|
34
|
+
const { regexp, keys } = compilePath(pattern, options);
|
|
35
|
+
const match = regexp.exec(pathname);
|
|
36
|
+
if (!match)
|
|
37
|
+
return;
|
|
38
|
+
const [matched, ...values] = match;
|
|
39
|
+
return {
|
|
40
|
+
matched,
|
|
41
|
+
params: keys.reduce((acc, key, index) => {
|
|
42
|
+
acc[key.name] = values[index];
|
|
43
|
+
return acc;
|
|
44
|
+
}, {})
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
exports.matchPattern = matchPattern;
|
|
48
|
+
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods
|
|
49
|
+
const allMethods = [
|
|
50
|
+
'get', 'head', 'post', 'put', 'delete', 'connect', 'options', 'trace', 'patch'
|
|
51
|
+
];
|
|
52
|
+
exports.router = {
|
|
53
|
+
method(method, router, { prefix = '', ...options } = {}) {
|
|
54
|
+
return next => {
|
|
55
|
+
const req = context_js_1.requestContext.value;
|
|
56
|
+
if (req.method !== method.toUpperCase())
|
|
57
|
+
return next();
|
|
58
|
+
for (const [pattern, handler] of Object.entries(router)) {
|
|
59
|
+
const match = matchPattern(req.url ?? '', `${prefix}${pattern}`, options);
|
|
60
|
+
if (match)
|
|
61
|
+
return handler({
|
|
62
|
+
...match,
|
|
63
|
+
next,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
return next();
|
|
67
|
+
};
|
|
68
|
+
},
|
|
69
|
+
all(router, { prefix = '', ...options } = {}) {
|
|
70
|
+
return next => {
|
|
71
|
+
const req = context_js_1.requestContext.value;
|
|
72
|
+
for (const [pattern, handler] of Object.entries(router)) {
|
|
73
|
+
const match = matchPattern(req.url ?? '', `${prefix}${pattern}`, options);
|
|
74
|
+
if (match)
|
|
75
|
+
return handler({
|
|
76
|
+
...match,
|
|
77
|
+
next,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
return next();
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
for (const method of allMethods)
|
|
85
|
+
exports.router[method] = exports.router.method.bind(exports.router, method);
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsbURBQTJDO0FBQzNDLDZDQUEyQztBQUUzQyxNQUFNLEtBQUssR0FBd0IsRUFBRSxDQUFBO0FBQ3JDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQTtBQUN4QixJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUE7QUFjbEIsU0FBUyxXQUFXLENBQUMsSUFBWSxFQUFFLE9BQTRCO0lBQzlELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDeEMsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFBO0lBQzNELElBQUksU0FBUyxDQUFDLElBQUksQ0FBQztRQUFFLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBRTNDLE1BQU0sSUFBSSxHQUFVLEVBQUUsQ0FBQTtJQUN0QixNQUFNLE1BQU0sR0FBRyxJQUFBLDZCQUFZLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUNoRCxNQUFNLE1BQU0sR0FBRztRQUNkLE1BQU07UUFDTixJQUFJO0tBQ0osQ0FBQTtJQUVELElBQUksVUFBVSxHQUFHLFVBQVUsRUFBRTtRQUM1QixTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFBO1FBQ3hCLFVBQVUsRUFBRSxDQUFBO0tBQ1o7SUFDRCxPQUFPLE1BQU0sQ0FBQTtBQUNkLENBQUM7QUFFRCxTQUFnQixZQUFZLENBQzNCLFFBQWdCLEVBQ2hCLE9BQWUsRUFDZixPQUE2QjtJQUU3QixPQUFPLEdBQUcsRUFBQyxHQUFHLE9BQU8sRUFBQyxDQUFBO0lBQ3RCLE9BQU8sQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFBO0lBQ3BCLE9BQU8sQ0FBQyxNQUFN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
|
package/cjs/static.d.ts
ADDED
package/cjs/static.js
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.staticMiddleware = void 0;
|
|
4
|
+
// @ts-nocheck
|
|
5
|
+
const context_js_1 = require("./context.js");
|
|
6
|
+
function staticMiddleware({ root }) {
|
|
7
|
+
return async (next) => {
|
|
8
|
+
const req = context_js_1.requestContext.value;
|
|
9
|
+
if (req.method !== 'GET' && req.method !== 'HEAD')
|
|
10
|
+
return next();
|
|
11
|
+
var forwardError = !fallthrough;
|
|
12
|
+
var originalUrl = parseUrl.original(req);
|
|
13
|
+
var path = parseUrl(req).pathname;
|
|
14
|
+
// make sure redirect occurs at mount
|
|
15
|
+
if (path === '/' && originalUrl.pathname.substr(-1) !== '/') {
|
|
16
|
+
path = '';
|
|
17
|
+
}
|
|
18
|
+
// create send stream
|
|
19
|
+
var stream = send(req, path, opts);
|
|
20
|
+
// add directory handler
|
|
21
|
+
stream.on('directory', onDirectory);
|
|
22
|
+
// add headers listener
|
|
23
|
+
if (setHeaders) {
|
|
24
|
+
stream.on('headers', setHeaders);
|
|
25
|
+
}
|
|
26
|
+
// add file listener for fallthrough
|
|
27
|
+
if (fallthrough) {
|
|
28
|
+
stream.on('file', function onFile() {
|
|
29
|
+
// once file is determined, always forward error
|
|
30
|
+
forwardError = true;
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
// forward errors
|
|
34
|
+
stream.on('error', function error(err) {
|
|
35
|
+
if (forwardError || !(err.statusCode < 500)) {
|
|
36
|
+
next(err);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
next();
|
|
40
|
+
});
|
|
41
|
+
// pipe
|
|
42
|
+
stream.pipe(res);
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
exports.staticMiddleware = staticMiddleware;
|
|
46
|
+
/**
|
|
47
|
+
* Collapse all leading slashes into a single slash
|
|
48
|
+
* @private
|
|
49
|
+
*/
|
|
50
|
+
function collapseLeadingSlashes(str) {
|
|
51
|
+
for (let i = 0; i < str.length; i++) {
|
|
52
|
+
if (str.charCodeAt(i) !== 0x2f /* / */) {
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return i > 1
|
|
57
|
+
? '/' + str.slice(i)
|
|
58
|
+
: str;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3N0YXRpYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxjQUFjO0FBQ2QsNkNBQTJDO0FBRTNDLFNBQWdCLGdCQUFnQixDQUMvQixFQUFDLElBQUksRUFHSjtJQUVELE9BQU8sS0FBSyxFQUFFLElBQWUsRUFBRSxFQUFFO1FBQ2hDLE1BQU0sR0FBRyxHQUFHLDJCQUFjLENBQUMsS0FBSyxDQUFBO1FBQ2hDLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxLQUFLLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxNQUFNO1lBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQTtRQUVoRSxJQUFJLFlBQVksR0FBRyxDQUFDLFdBQVcsQ0FBQTtRQUMvQixJQUFJLFdBQVcsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ3hDLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUE7UUFFakMscUNBQXFDO1FBQ3JDLElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtZQUM1RCxJQUFJLEdBQUcsRUFBRSxDQUFBO1NBQ1Q7UUFFRCxxQkFBcUI7UUFDckIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFFbEMsd0JBQXdCO1FBQ3hCLE1BQU0sQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFBO1FBRW5DLHVCQUF1QjtRQUN2QixJQUFJLFVBQVUsRUFBRTtZQUNmLE1BQU0sQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFBO1NBQ2hDO1FBRUQsb0NBQW9DO1FBQ3BDLElBQUksV0FBVyxFQUFFO1lBQ2hCLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLFNBQVMsTUFBTTtnQkFDaEMsZ0RBQWdEO2dCQUNoRCxZQUFZLEdBQUcsSUFBSSxDQUFBO1lBQ3BCLENBQUMsQ0FBQyxDQUFBO1NBQ0Y7UUFFRCxpQkFBaUI7UUFDakIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxLQUFLLENBQUMsR0FBRztZQUNwQyxJQUFJLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsRUFBRTtnQkFDNUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO2dCQUNULE9BQU07YUFDTjtZQUVELElBQUksRUFBRSxDQUFBO1FBQ1AsQ0FBQyxDQUFDLENBQUE7UUFFRixPQUFPO1FBQ1AsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNqQixDQUFDLENBQUE7QUFDRixDQUFDO0FBbkRELDRDQW1EQztBQUVEOzs7R0FHRztBQUNILFNBQVMsc0JBQXNCLENBQUUsR0FBVztJQUMzQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNwQyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUN2QyxNQUFLO1NBQ0w7S0FDRDtJQUVELE9BQU8sQ0FBQyxHQUFHLENBQUM7UUFDWCxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxHQUFHLENBQUE7QUFDUCxDQUFDIn0=
|
package/cjs/stream.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
3
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
4
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
5
|
+
import type { IncomingMessage } from 'node:http';
|
|
6
|
+
import type { Readable } from 'node:stream';
|
|
7
|
+
export declare function getContentStream(req: IncomingMessage, encoding: string, disableInflate?: boolean): IncomingMessage | import("zlib").Gunzip;
|
|
8
|
+
export declare function readStream(stream: Readable, { length, limit }: {
|
|
9
|
+
length?: number;
|
|
10
|
+
limit?: number;
|
|
11
|
+
}): Promise<Buffer>;
|
package/cjs/stream.js
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
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.readStream = exports.getContentStream = void 0;
|
|
7
|
+
const node_zlib_1 = require("node:zlib");
|
|
8
|
+
const jdefer_1 = __importDefault(require("jdefer"));
|
|
9
|
+
// note: there might be multiple encodings applied to the stream
|
|
10
|
+
// we only support one encoding
|
|
11
|
+
function getContentStream(req, encoding, disableInflate) {
|
|
12
|
+
if (disableInflate && encoding !== 'identity')
|
|
13
|
+
throw new Error(`content-encoding ${encoding} is not supported`);
|
|
14
|
+
switch (encoding) {
|
|
15
|
+
case 'deflate': {
|
|
16
|
+
const stream = (0, node_zlib_1.createInflate)();
|
|
17
|
+
req.pipe(stream);
|
|
18
|
+
return stream;
|
|
19
|
+
}
|
|
20
|
+
case 'gzip': {
|
|
21
|
+
const stream = (0, node_zlib_1.createGunzip)();
|
|
22
|
+
req.pipe(stream);
|
|
23
|
+
return stream;
|
|
24
|
+
}
|
|
25
|
+
case 'br': {
|
|
26
|
+
const stream = (0, node_zlib_1.createBrotliDecompress)();
|
|
27
|
+
req.pipe(stream);
|
|
28
|
+
return stream;
|
|
29
|
+
}
|
|
30
|
+
case 'identity':
|
|
31
|
+
return req;
|
|
32
|
+
default:
|
|
33
|
+
throw new Error(`unsupported content-encoding ${encoding}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.getContentStream = getContentStream;
|
|
37
|
+
// https://github.com/stream-utils/raw-body/blob/191e4b6506dcf77198eed01c8feb4b6817008342/index.js#L155
|
|
38
|
+
async function readStream(stream, { length, limit }) {
|
|
39
|
+
let completed = false;
|
|
40
|
+
// check the length and limit options.
|
|
41
|
+
// note: we intentionally leave the stream paused,
|
|
42
|
+
// so users should handle the stream themselves.
|
|
43
|
+
if (limit !== undefined && length !== undefined && length > limit)
|
|
44
|
+
throw new Error('request entity too large');
|
|
45
|
+
let received = 0;
|
|
46
|
+
const buffers = [];
|
|
47
|
+
const defer = (0, jdefer_1.default)();
|
|
48
|
+
// attach listeners
|
|
49
|
+
stream.on('aborted', onAborted);
|
|
50
|
+
stream.on('close', onClose);
|
|
51
|
+
stream.on('data', onData);
|
|
52
|
+
stream.on('end', onEnd);
|
|
53
|
+
stream.on('error', onError);
|
|
54
|
+
function done(err, result) {
|
|
55
|
+
if (completed)
|
|
56
|
+
return;
|
|
57
|
+
completed = true;
|
|
58
|
+
onClose();
|
|
59
|
+
if (err) {
|
|
60
|
+
stream.unpipe?.();
|
|
61
|
+
stream.pause?.();
|
|
62
|
+
defer.reject(err);
|
|
63
|
+
}
|
|
64
|
+
else
|
|
65
|
+
defer.resolve(result);
|
|
66
|
+
}
|
|
67
|
+
function onData(chunk) {
|
|
68
|
+
if (completed)
|
|
69
|
+
return;
|
|
70
|
+
received += chunk.length;
|
|
71
|
+
if (limit !== undefined && received > limit) {
|
|
72
|
+
done(new Error('request entity too large'));
|
|
73
|
+
}
|
|
74
|
+
else
|
|
75
|
+
buffers.push(chunk);
|
|
76
|
+
}
|
|
77
|
+
function onError(err) {
|
|
78
|
+
done(err);
|
|
79
|
+
}
|
|
80
|
+
function onEnd() {
|
|
81
|
+
if (length !== undefined && received !== length)
|
|
82
|
+
done(new Error('request size did not match content length'));
|
|
83
|
+
else
|
|
84
|
+
done(undefined, Buffer.concat(buffers));
|
|
85
|
+
}
|
|
86
|
+
function onAborted() {
|
|
87
|
+
done(new Error('request aborted'));
|
|
88
|
+
}
|
|
89
|
+
function onClose() {
|
|
90
|
+
buffers.splice(0, buffers.length);
|
|
91
|
+
stream.off('aborted', onAborted);
|
|
92
|
+
stream.off('data', onData);
|
|
93
|
+
stream.off('end', onEnd);
|
|
94
|
+
stream.off('error', onEnd);
|
|
95
|
+
stream.off('close', onClose);
|
|
96
|
+
}
|
|
97
|
+
return await defer.promise;
|
|
98
|
+
}
|
|
99
|
+
exports.readStream = readStream;
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3N0cmVhbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFHQSx5Q0FBNkU7QUFDN0Usb0RBQThCO0FBRTlCLGdFQUFnRTtBQUNoRSwrQkFBK0I7QUFDL0IsU0FBZ0IsZ0JBQWdCLENBQUMsR0FBb0IsRUFBRSxRQUFnQixFQUFFLGNBQXdCO0lBQ2hHLElBQUksY0FBYyxJQUFJLFFBQVEsS0FBSyxVQUFVO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsUUFBUSxtQkFBbUIsQ0FBQyxDQUFBO0lBRS9HLFFBQVEsUUFBUSxFQUFFO1FBQ2pCLEtBQUssU0FBUyxDQUFDLENBQUM7WUFDZixNQUFNLE1BQU0sR0FBRyxJQUFBLHlCQUFhLEdBQUUsQ0FBQTtZQUM5QixHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQ2hCLE9BQU8sTUFBTSxDQUFBO1NBQ2I7UUFDRCxLQUFLLE1BQU0sQ0FBQyxDQUFDO1lBQ1osTUFBTSxNQUFNLEdBQUcsSUFBQSx3QkFBWSxHQUFFLENBQUE7WUFDN0IsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUNoQixPQUFPLE1BQU0sQ0FBQTtTQUNiO1FBQ0QsS0FBSyxJQUFJLENBQUMsQ0FBQztZQUNWLE1BQU0sTUFBTSxHQUFHLElBQUEsa0NBQXNCLEdBQUUsQ0FBQTtZQUN2QyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQ2hCLE9BQU8sTUFBTSxDQUFBO1NBQ2I7UUFDRCxLQUFLLFVBQVU7WUFDZCxPQUFPLEdBQUcsQ0FBQTtRQUNYO1lBQ0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsUUFBUSxFQUFFLENBQUMsQ0FBQTtLQUM1RDtBQUNGLENBQUM7QUF4QkQsNENBd0JDO0FBRUQsdUdBQXVHO0FBQ2hHLEtBQUssVUFBVSxVQUFVLENBQy9CLE1BQWdCLEVBQ2hCLEVBQUMs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
|
package/esm/body.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
/// <reference types="qs" />
|
|
3
|
+
export declare const bufferBodyContext: {
|
|
4
|
+
readonly value: Buffer | undefined;
|
|
5
|
+
chain(params_0?: {
|
|
6
|
+
limit?: number | undefined;
|
|
7
|
+
} | undefined): <V>(next: () => V) => Promise<any>;
|
|
8
|
+
};
|
|
9
|
+
export declare const jsonBodyContext: {
|
|
10
|
+
readonly value: any;
|
|
11
|
+
chain(): <V>(next: () => V) => Promise<any>;
|
|
12
|
+
};
|
|
13
|
+
export declare const rawBodyContext: {
|
|
14
|
+
readonly value: Buffer | undefined;
|
|
15
|
+
chain(): <V>(next: () => V) => Promise<any>;
|
|
16
|
+
};
|
|
17
|
+
export declare const textBodyContext: {
|
|
18
|
+
readonly value: string | undefined;
|
|
19
|
+
chain(): <V>(next: () => V) => Promise<any>;
|
|
20
|
+
};
|
|
21
|
+
export declare const urlencodedBodyContext: {
|
|
22
|
+
readonly value: import("qs").ParsedQs | undefined;
|
|
23
|
+
chain(params_0?: {
|
|
24
|
+
simplify?: boolean | undefined;
|
|
25
|
+
} | undefined): <V>(next: () => V) => Promise<any>;
|
|
26
|
+
};
|
|
27
|
+
export declare const queryContext: {
|
|
28
|
+
readonly value: import("qs").ParsedQs;
|
|
29
|
+
chain(): <V>(next: () => V) => Promise<any>;
|
|
30
|
+
};
|