dx-server 0.0.1-pre
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 +113 -0
- package/cjs/body.d.ts +29 -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.d.ts +5 -0
- package/cjs/error.js +42 -0
- package/cjs/etag.d.ts +7 -0
- package/cjs/etag.js +97 -0
- package/cjs/express.d.ts +39 -0
- package/cjs/express.js +143 -0
- package/cjs/expressApp.d.ts +2 -0
- package/cjs/expressApp.js +14 -0
- package/cjs/file.d.ts +4 -0
- package/cjs/file.js +12 -0
- package/cjs/index.d.ts +6 -0
- package/cjs/index.js +27 -0
- package/cjs/route.d.ts +33 -0
- package/cjs/route.js +87 -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 +97 -0
- package/esm/body.d.ts +28 -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.d.ts +5 -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 +21 -0
- package/esm/express.js +135 -0
- package/esm/expressApp.d.ts +2 -0
- package/esm/expressApp.js +10 -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/package.json +3 -0
- package/esm/route.d.ts +33 -0
- package/esm/route.js +83 -0
- package/esm/static.d.ts +4 -0
- package/esm/static.js +56 -0
- package/esm/stream.d.ts +10 -0
- package/esm/stream.js +92 -0
- package/package.json +35 -0
package/cjs/express.js
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setRedirect = exports.setJson = exports.setBuffer = exports.setHtml = exports.setText = exports.expressContext = void 0;
|
|
4
|
+
const jdefer_1 = require("jdefer");
|
|
5
|
+
const util_1 = require("util");
|
|
6
|
+
const etag_js_1 = require("./etag.js");
|
|
7
|
+
const context_js_1 = require("./context.js");
|
|
8
|
+
exports.expressContext = (0, context_js_1.makeContext)(async ({ jsonBeautify } = {}) => {
|
|
9
|
+
return {
|
|
10
|
+
beautify: jsonBeautify,
|
|
11
|
+
};
|
|
12
|
+
}, async (ret, { type, data, charset, beautify }) => {
|
|
13
|
+
const res = context_js_1.responseContext.value;
|
|
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 buffer;
|
|
20
|
+
switch (type) {
|
|
21
|
+
case 'text':
|
|
22
|
+
setContentType('text/plain');
|
|
23
|
+
case 'html':
|
|
24
|
+
setContentType('text/html');
|
|
25
|
+
// shared with text
|
|
26
|
+
buffer = Buffer.from(data, charset);
|
|
27
|
+
break;
|
|
28
|
+
case 'buffer':
|
|
29
|
+
setContentType('application/octet-stream');
|
|
30
|
+
buffer = data;
|
|
31
|
+
break;
|
|
32
|
+
case 'json':
|
|
33
|
+
setContentType('application/json');
|
|
34
|
+
buffer = Buffer.from(beautify ? JSON.stringify(data, null, 2) : JSON.stringify(data), charset);
|
|
35
|
+
break;
|
|
36
|
+
case 'redirect':
|
|
37
|
+
buffer = Buffer.from(data, charset);
|
|
38
|
+
break;
|
|
39
|
+
case undefined:
|
|
40
|
+
// not found
|
|
41
|
+
buffer = Buffer.from('not found', charset);
|
|
42
|
+
res.statusCode = 404;
|
|
43
|
+
break;
|
|
44
|
+
default:
|
|
45
|
+
if (!res.getHeader('content-type'))
|
|
46
|
+
res.setHeader('content-type', 'text/plain');
|
|
47
|
+
throw new Error(`unsupported response type ${type}`);
|
|
48
|
+
}
|
|
49
|
+
const req = context_js_1.requestContext.value;
|
|
50
|
+
if (res.headersSent) {
|
|
51
|
+
if (res.writableFinished) {
|
|
52
|
+
// skipped: response is already finished
|
|
53
|
+
}
|
|
54
|
+
else if (res.writableEnded) {
|
|
55
|
+
const defer = (0, jdefer_1.default)();
|
|
56
|
+
res.addListener('finish', defer.resolve);
|
|
57
|
+
await defer.promise;
|
|
58
|
+
// skipped: response is already ended
|
|
59
|
+
// chunk is not fully flushed yet
|
|
60
|
+
}
|
|
61
|
+
else
|
|
62
|
+
await (0, util_1.promisify)(res.end.bind(res))(); // to be consistent, we end the response immediately
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
// https://github.com/expressjs/express/blob/980d881e3b023db079de60477a2588a91f046ca5/lib/response.js#L210
|
|
66
|
+
if (res.statusCode === 204) { // No Content
|
|
67
|
+
res.removeHeader('content-type');
|
|
68
|
+
res.removeHeader('content-length');
|
|
69
|
+
res.removeHeader('transfer-encoding');
|
|
70
|
+
// write nothing
|
|
71
|
+
}
|
|
72
|
+
if (res.statusCode === 205) { // reset content. Tell client to clear the form, etc.
|
|
73
|
+
res.setHeader('content-length', 0);
|
|
74
|
+
res.removeHeader('transfer-encoding');
|
|
75
|
+
}
|
|
76
|
+
else if (req.method === 'HEAD') {
|
|
77
|
+
// write nothing
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
// support: 304 (etag), zipping, file etag and last modified
|
|
81
|
+
res.setHeader('content-length', buffer.length);
|
|
82
|
+
const etag = (0, etag_js_1.entityTag)(buffer);
|
|
83
|
+
const lastModified = res.getHeader('last-modified');
|
|
84
|
+
res.setHeader('ETag', etag);
|
|
85
|
+
if ((0, etag_js_1.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(buffer);
|
|
94
|
+
// fixme: not support content-encoding (gzip, deflate, br) for now
|
|
95
|
+
}
|
|
96
|
+
await (0, util_1.promisify)(res.end.bind(res))();
|
|
97
|
+
}
|
|
98
|
+
return ret;
|
|
99
|
+
});
|
|
100
|
+
function setText(text, { status } = {}) {
|
|
101
|
+
const response = context_js_1.responseContext.value;
|
|
102
|
+
const express = exports.expressContext.value;
|
|
103
|
+
if (status)
|
|
104
|
+
response.statusCode = status;
|
|
105
|
+
express.data = text;
|
|
106
|
+
express.type = 'text';
|
|
107
|
+
}
|
|
108
|
+
exports.setText = setText;
|
|
109
|
+
function setHtml(html, opts = {}) {
|
|
110
|
+
setText(html, opts);
|
|
111
|
+
const express = exports.expressContext.value;
|
|
112
|
+
express.type = 'html';
|
|
113
|
+
}
|
|
114
|
+
exports.setHtml = setHtml;
|
|
115
|
+
function setBuffer(buffer, { status } = {}) {
|
|
116
|
+
const response = context_js_1.responseContext.value;
|
|
117
|
+
const express = exports.expressContext.value;
|
|
118
|
+
if (status)
|
|
119
|
+
response.statusCode = status;
|
|
120
|
+
express.data = buffer;
|
|
121
|
+
express.type = 'buffer';
|
|
122
|
+
}
|
|
123
|
+
exports.setBuffer = setBuffer;
|
|
124
|
+
function setJson(json, { status, beautify } = {}) {
|
|
125
|
+
const response = context_js_1.responseContext.value;
|
|
126
|
+
if (status)
|
|
127
|
+
response.statusCode = status;
|
|
128
|
+
const express = exports.expressContext.value;
|
|
129
|
+
express.data = json;
|
|
130
|
+
express.type = 'json';
|
|
131
|
+
if (beautify !== undefined)
|
|
132
|
+
express.beautify = beautify;
|
|
133
|
+
}
|
|
134
|
+
exports.setJson = setJson;
|
|
135
|
+
function setRedirect(url, status) {
|
|
136
|
+
const response = context_js_1.responseContext.value;
|
|
137
|
+
const express = exports.expressContext.value;
|
|
138
|
+
response.statusCode = status;
|
|
139
|
+
express.data = url;
|
|
140
|
+
express.type = 'redirect';
|
|
141
|
+
}
|
|
142
|
+
exports.setRedirect = setRedirect;
|
|
143
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwcmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9leHByZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUE4QjtBQUM5QiwrQkFBOEI7QUFDOUIsdUNBQWdEO0FBQ2hELDZDQUF5RTtBQUU1RCxRQUFBLGNBQWMsR0FBRyxJQUFBLHdCQUFXLEVBQUMsS0FBSyxFQUM5QyxFQUFDLFlBQVksS0FFVCxFQUFFLEVBQ0wsRUFBRTtJQUNILE9BQU87UUFDTixRQUFRLEVBQUUsWUFBWTtLQTBCckIsQ0FBQTtBQUNILENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFDLEVBQUUsRUFBRTtJQUNqRCxNQUFNLEdBQUcsR0FBRyw0QkFBZSxDQUFDLEtBQUssQ0FBQTtJQUNqQyxNQUFNLGNBQWMsR0FBRyxDQUFDLFdBQW1CLEVBQUUsRUFBRTtRQUM5QyxJQUFJLEdBQUcsQ0FBQyxXQUFXLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUM7WUFBRSxPQUFNO1FBQzVELEdBQUcsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLEdBQUcsV0FBVyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsYUFBYSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUN4RixDQUFDLENBQUE7SUFDRCxJQUFJLE1BQU0sQ0FBQTtJQUVWLFFBQVEsSUFBSSxFQUFFO1FBQ2IsS0FBSyxNQUFNO1lBQ1YsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQzdCLEtBQUssTUFBTTtZQUNWLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQTtZQUMzQixtQkFBbUI7WUFDbkIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBQ25DLE1BQUs7UUFDTixLQUFLLFFBQVE7WUFDWixjQUFjLENBQUMsMEJBQTBCLENBQUMsQ0FBQTtZQUMxQyxNQUFNLEdBQUcsSUFBSSxDQUFBO1lBQ2IsTUFBSztRQUNOLEtBQUssTUFBTTtZQUNWLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO1lBQ2xDLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBQzlGLE1BQUs7UUFDTixLQUFLLFVBQVU7WUFDZCxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDbkMsTUFBSztRQUNOLEtBQUssU0FBUztZQUNiLFlBQVk7WUFDWixNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDMUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUE7WUFDcEIsTUFBSztRQUNOO1lBQ0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDO2dCQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxDQUFBO1lBQy9FLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLElBQUksRUFBRSxDQUFDLENBQUE7S0FDckQ7SUFFRCxNQUFNLEdBQUcsR0FBRywyQkFBYyxDQUFDLEtBQUssQ0FBQTtJQUVoQyxJQUFJLEdBQUcsQ0FBQyxXQUFXLEVBQUU7UUFDcEIsSUFBSSxHQUFHLENBQUMsZ0JBQWdCLEVBQUU7WUFDekIsd0NBQXdDO1NBQ3hDO2FBQU0sSUFBSSxHQUFHLENBQUMsYUFBYSxFQUFFO1lBQzdCLE1BQU0sS0FBSyxHQUFHLElBQUEsZ0JBQVMsR0FBUSxDQUFBO1lBQy9CLEdBQUcsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUN4QyxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUE7WUFDbkIscUNBQXFDO1lBQ3JDLGlDQUFpQztTQUNqQzs7WUFBTSxNQUFNLElBQUEsZ0JBQVMsRUFBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUEsQ0FBQyxvREFBb0Q7S0FDaEc7U0FBTTtRQUNOLDBHQUEwRztRQUMxRyxJQUFJLEdBQUcsQ0FBQyxVQUFVLEtBQUssR0FBRyxFQUFFLEVBQUUsYUFBYTtZQUMxQyxHQUFHLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFBO1lBQ2hDLEdBQUcsQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtZQUNsQyxHQUFHLENBQUMsWUFBWSxDQUFDLG1CQUFtQixDQUFDLENBQUE7WUFDckMsZ0JBQWdCO1NBQ2hCO1FBQ0QsSUFBSSxHQUFHLENBQUMsVUFBVSxLQUFLLEdBQUcsRUFBRSxFQUFFLHFEQUFxRDtZQUNsRixHQUFHLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFBO1lBQ2xDLEdBQUcsQ0FBQyxZQUFZLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtTQUNyQzthQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxNQUFNLEVBQUU7WUFDakMsZ0JBQWdCO1NBQ2hCO2FBQU07WUFDTiw0REFBNEQ7WUFDNUQsR0FBRyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDOUMsTUFBTSxJQUFJLEdBQUcsSUFBQSxtQkFBUyxFQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQzlCLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUE7WUFFbkQsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUE7WUFDM0IsSUFBSSxJQUFBLHFCQUFXLEVBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFO2dCQUMzQixHQUFHLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFBO2dCQUNoQyxHQUFHLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUE7Z0JBQ2xDLEdBQUcsQ0FBQyxZQUFZLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtnQkFDckMsR0FBRyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUE7Z0JBQ3BCLGdCQUFnQjthQUNoQjs7Z0JBQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUN4QixrRUFBa0U7U0FDbEU7UUFFRCxNQUFNLElBQUEsZ0JBQVMsRUFBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUE7S0FDcEM7SUFDRCxPQUFPLEdBQUcsQ0FBQTtBQUNYLENBQUMsQ0FBQyxDQUFBO0FBRUYsU0FBZ0IsT0FBTyxDQUFDLElBQVksRUFBRSxFQUFDLE1BQU0sS0FBeUIsRUFBRTtJQUN2RSxNQUFNLFFBQVEsR0FBRyw0QkFBZSxDQUFDLEtBQUssQ0FBQTtJQUN0QyxNQUFNLE9BQU8sR0FBRyxzQkFBYyxDQUFDLEtBQUssQ0FBQTtJQUNwQyxJQUFJLE1BQU07UUFBRSxRQUFRLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQTtJQUN4QyxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtJQUNuQixPQUFPLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQTtBQUN0QixDQUFDO0FBTkQsMEJBTUM7QUFFRCxTQUFnQixPQUFPLENBQUMsSUFBWSxFQUFFLE9BQTRCLEVBQUU7SUFDbkUsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUNuQixNQUFNLE9BQU8sR0FBRyxzQkFBYyxDQUFDLEtBQUssQ0FBQTtJQUNwQyxPQUFPLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQTtBQUN0QixDQUFDO0FBSkQsMEJBSUM7QUFFRCxTQUFnQixTQUFTLENBQUMsTUFBYyxFQUFFLEVBQUMsTUFBTSxLQUF5QixFQUFFO0lBQzNFLE1BQU0sUUFBUSxHQUFHLDRCQUFlLENBQUMsS0FBSyxDQUFBO0lBQ3RDLE1BQU0sT0FBTyxHQUFHLHNCQUFjLENBQUMsS0FBSyxDQUFBO0lBQ3BDLElBQUksTUFBTTtRQUFFLFFBQVEsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFBO0lBQ3hDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFBO0lBQ3JCLE9BQU8sQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFBO0FBQ3hCLENBQUM7QUFORCw4QkFNQztBQUVELFNBQWdCLE9BQU8sQ0FBQyxJQUFTLEVBQUUsRUFBQyxNQUFNLEVBQUUsUUFBUSxLQUdoRCxFQUFFO0lBQ0wsTUFBTSxRQUFRLEdBQUcsNEJBQWUsQ0FBQyxLQUFLLENBQUE7SUFDdEMsSUFBSSxNQUFNO1FBQUUsUUFBUSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUE7SUFFeEMsTUFBTSxPQUFPLEdBQUcsc0JBQWMsQ0FBQyxLQUFLLENBQUE7SUFDcEMsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7SUFDbkIsT0FBTyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUE7SUFDckIsSUFBSSxRQUFRLEtBQUssU0FBUztRQUFFLE9BQU8sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFBO0FBQ3hELENBQUM7QUFYRCwwQkFXQztBQUVELFNBQWdCLFdBQVcsQ0FBQyxHQUFXLEVBQUUsTUFBaUI7SUFDekQsTUFBTSxRQUFRLEdBQUcsNEJBQWUsQ0FBQyxLQUFLLENBQUE7SUFDdEMsTUFBTSxPQUFPLEdBQUcsc0JBQWMsQ0FBQyxLQUFLLENBQUE7SUFDcEMsUUFBUSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUE7SUFDNUIsT0FBTyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUE7SUFDbEIsT0FBTyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUE7QUFDMUIsQ0FBQztBQU5ELGtDQU1DIn0=
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.expressApp = void 0;
|
|
4
|
+
const express_1 = require("express");
|
|
5
|
+
const context_js_1 = require("./context.js");
|
|
6
|
+
const expressApp = (setup) => {
|
|
7
|
+
const app = (0, express_1.default)();
|
|
8
|
+
setup(app);
|
|
9
|
+
return async (next) => {
|
|
10
|
+
return app(context_js_1.requestContext.value, context_js_1.responseContext.value, next);
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
exports.expressApp = expressApp;
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwcmVzc0FwcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9leHByZXNzQXBwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFDQUF3QztBQUN4Qyw2Q0FBNEQ7QUFFckQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxLQUE0QixFQUFFLEVBQUU7SUFDMUQsTUFBTSxHQUFHLEdBQUcsSUFBQSxpQkFBTyxHQUFFLENBQUE7SUFDckIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ1YsT0FBTyxLQUFLLEVBQUssSUFBYSxFQUFFLEVBQUU7UUFDakMsT0FBTyxHQUFHLENBQUMsMkJBQWMsQ0FBQyxLQUFLLEVBQUUsNEJBQWUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDOUQsQ0FBQyxDQUFBO0FBQ0YsQ0FBQyxDQUFBO0FBTlksUUFBQSxVQUFVLGNBTXRCIn0=
|
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 { requestContext, responseContext } from './context.js';
|
|
2
|
+
export { expressContext, setHtml, setJson } 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 } from './expressApp.js';
|
package/cjs/index.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
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.setJson = exports.setHtml = exports.expressContext = exports.responseContext = exports.requestContext = void 0;
|
|
4
|
+
var context_js_1 = require("./context.js");
|
|
5
|
+
Object.defineProperty(exports, "requestContext", { enumerable: true, get: function () { return context_js_1.requestContext; } });
|
|
6
|
+
Object.defineProperty(exports, "responseContext", { enumerable: true, get: function () { return context_js_1.responseContext; } });
|
|
7
|
+
var express_js_1 = require("./express.js");
|
|
8
|
+
Object.defineProperty(exports, "expressContext", { enumerable: true, get: function () { return express_js_1.expressContext; } });
|
|
9
|
+
Object.defineProperty(exports, "setHtml", { enumerable: true, get: function () { return express_js_1.setHtml; } });
|
|
10
|
+
Object.defineProperty(exports, "setJson", { enumerable: true, get: function () { return express_js_1.setJson; } });
|
|
11
|
+
var body_js_1 = require("./body.js");
|
|
12
|
+
Object.defineProperty(exports, "bufferBodyContext", { enumerable: true, get: function () { return body_js_1.bufferBodyContext; } });
|
|
13
|
+
Object.defineProperty(exports, "jsonBodyContext", { enumerable: true, get: function () { return body_js_1.jsonBodyContext; } });
|
|
14
|
+
Object.defineProperty(exports, "queryContext", { enumerable: true, get: function () { return body_js_1.queryContext; } });
|
|
15
|
+
Object.defineProperty(exports, "rawBodyContext", { enumerable: true, get: function () { return body_js_1.rawBodyContext; } });
|
|
16
|
+
Object.defineProperty(exports, "textBodyContext", { enumerable: true, get: function () { return body_js_1.textBodyContext; } });
|
|
17
|
+
Object.defineProperty(exports, "urlencodedBodyContext", { enumerable: true, get: function () { return body_js_1.urlencodedBodyContext; } });
|
|
18
|
+
var route_js_1 = require("./route.js");
|
|
19
|
+
Object.defineProperty(exports, "router", { enumerable: true, get: function () { return route_js_1.router; } });
|
|
20
|
+
var error_js_1 = require("./error.js");
|
|
21
|
+
Object.defineProperty(exports, "catchApiError", { enumerable: true, get: function () { return error_js_1.catchApiError; } });
|
|
22
|
+
Object.defineProperty(exports, "catchError", { enumerable: true, get: function () { return error_js_1.catchError; } });
|
|
23
|
+
Object.defineProperty(exports, "notFound", { enumerable: true, get: function () { return error_js_1.notFound; } });
|
|
24
|
+
Object.defineProperty(exports, "notFoundApi", { enumerable: true, get: function () { return error_js_1.notFoundApi; } });
|
|
25
|
+
var expressApp_js_1 = require("./expressApp.js");
|
|
26
|
+
Object.defineProperty(exports, "expressApp", { enumerable: true, get: function () { return expressApp_js_1.expressApp; } });
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQTREO0FBQXBELDRHQUFBLGNBQWMsT0FBQTtBQUFFLDZHQUFBLGVBQWUsT0FBQTtBQUN2QywyQ0FBNkQ7QUFBckQsNEdBQUEsY0FBYyxPQUFBO0FBQUUscUdBQUEsT0FBTyxPQUFBO0FBQUUscUdBQUEsT0FBTyxPQUFBO0FBQ3hDLHFDQU9rQjtBQU5qQiw0R0FBQSxpQkFBaUIsT0FBQTtBQUNqQiwwR0FBQSxlQUFlLE9BQUE7QUFDZix1R0FBQSxZQUFZLE9BQUE7QUFDWix5R0FBQSxjQUFjLE9BQUE7QUFDZCwwR0FBQSxlQUFlLE9BQUE7QUFDZixnSEFBQSxxQkFBcUIsT0FBQTtBQUV0Qix1Q0FBaUM7QUFBekIsa0dBQUEsTUFBTSxPQUFBO0FBQ2QsdUNBQTJFO0FBQW5FLHlHQUFBLGFBQWEsT0FBQTtBQUFFLHNHQUFBLFVBQVUsT0FBQTtBQUFFLG9HQUFBLFFBQVEsT0FBQTtBQUFFLHVHQUFBLFdBQVcsT0FBQTtBQUN4RCxpREFBMEM7QUFBbEMsMkdBQUEsVUFBVSxPQUFBIn0=
|
package/cjs/route.d.ts
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { Key } from 'path-to-regexp';
|
|
2
|
+
import { IChainable } from 'jchain';
|
|
3
|
+
interface RegexpToPathOptions {
|
|
4
|
+
end?: boolean;
|
|
5
|
+
strict?: boolean;
|
|
6
|
+
sensitive?: boolean;
|
|
7
|
+
start?: boolean;
|
|
8
|
+
delimiter?: string;
|
|
9
|
+
endsWith?: string;
|
|
10
|
+
encode?(value: string): string;
|
|
11
|
+
prefixes?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function matchPattern<Params extends Record<Key['name'], string>>(pathname: string, pattern: string, options?: RegexpToPathOptions): {
|
|
14
|
+
matched: any;
|
|
15
|
+
params: any;
|
|
16
|
+
} | undefined;
|
|
17
|
+
interface RouteContext {
|
|
18
|
+
matched: string;
|
|
19
|
+
next(): any;
|
|
20
|
+
params: Record<Key['name'], string>;
|
|
21
|
+
}
|
|
22
|
+
interface RouteDefinition {
|
|
23
|
+
[k: string]: (p: RouteContext) => any;
|
|
24
|
+
}
|
|
25
|
+
declare const allMethods: readonly ["get", "head", "post", "put", "delete", "connect", "options", "trace", "patch"];
|
|
26
|
+
type IRouter = {
|
|
27
|
+
[K in typeof allMethods[number]]: (definition: RouteDefinition, options?: RegexpToPathOptions) => IChainable;
|
|
28
|
+
} & {
|
|
29
|
+
all(definition: RouteDefinition, options?: RegexpToPathOptions): IChainable;
|
|
30
|
+
method(method: string, definition: RouteDefinition, options?: RegexpToPathOptions): IChainable;
|
|
31
|
+
};
|
|
32
|
+
export declare const router: IRouter;
|
|
33
|
+
export {};
|
package/cjs/route.js
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
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 jchain_1 = require("jchain");
|
|
7
|
+
const cache = {};
|
|
8
|
+
const cacheLimit = 10000;
|
|
9
|
+
let cacheCount = 0;
|
|
10
|
+
function compilePath(path, options) {
|
|
11
|
+
const cacheKey = JSON.stringify(options);
|
|
12
|
+
const pathCache = cache[cacheKey] || (cache[cacheKey] = {});
|
|
13
|
+
if (pathCache[path])
|
|
14
|
+
return pathCache[path];
|
|
15
|
+
const keys = [];
|
|
16
|
+
const regexp = (0, path_to_regexp_1.pathToRegexp)(path, keys, options);
|
|
17
|
+
const result = {
|
|
18
|
+
regexp,
|
|
19
|
+
keys
|
|
20
|
+
};
|
|
21
|
+
if (cacheCount < cacheLimit) {
|
|
22
|
+
pathCache[path] = result;
|
|
23
|
+
cacheCount++;
|
|
24
|
+
}
|
|
25
|
+
return result;
|
|
26
|
+
}
|
|
27
|
+
function matchPattern(pathname, pattern, options) {
|
|
28
|
+
options = { ...options };
|
|
29
|
+
options.end ??= true;
|
|
30
|
+
options.strict ??= false;
|
|
31
|
+
options.sensitive ??= false;
|
|
32
|
+
options.start ??= true;
|
|
33
|
+
if (!pattern && pattern !== '')
|
|
34
|
+
return;
|
|
35
|
+
const { regexp, keys } = compilePath(pattern, options);
|
|
36
|
+
const match = regexp.exec(pathname);
|
|
37
|
+
if (!match)
|
|
38
|
+
return;
|
|
39
|
+
const [matched, ...values] = match;
|
|
40
|
+
return {
|
|
41
|
+
matched,
|
|
42
|
+
params: keys.reduce((acc, key, index) => {
|
|
43
|
+
acc[key.name] = values[index];
|
|
44
|
+
return acc;
|
|
45
|
+
}, {})
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
exports.matchPattern = matchPattern;
|
|
49
|
+
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods
|
|
50
|
+
const allMethods = [
|
|
51
|
+
'get', 'head', 'post', 'put', 'delete', 'connect', 'options', 'trace', 'patch'
|
|
52
|
+
];
|
|
53
|
+
exports.router = {
|
|
54
|
+
method(method, router, { prefix = '', ...options } = {}) {
|
|
55
|
+
return n => {
|
|
56
|
+
const req = context_js_1.requestContext.value;
|
|
57
|
+
if (req.method !== method.toUpperCase())
|
|
58
|
+
return n();
|
|
59
|
+
return (0, jchain_1.default)(...Object.entries(router).map(([pattern, handler]) => next => {
|
|
60
|
+
const match = matchPattern(req.url ?? '', `${prefix}${pattern}`, options);
|
|
61
|
+
if (!match)
|
|
62
|
+
return next();
|
|
63
|
+
return handler({
|
|
64
|
+
...match,
|
|
65
|
+
next,
|
|
66
|
+
});
|
|
67
|
+
}), n)();
|
|
68
|
+
};
|
|
69
|
+
},
|
|
70
|
+
all(router, { prefix = '', ...options } = {}) {
|
|
71
|
+
return n => {
|
|
72
|
+
const req = context_js_1.requestContext.value;
|
|
73
|
+
return (0, jchain_1.default)(...Object.entries(router).map(([pattern, handler]) => next => {
|
|
74
|
+
const match = matchPattern(req.url ?? '', `${prefix}${pattern}`, options);
|
|
75
|
+
if (!match)
|
|
76
|
+
return next();
|
|
77
|
+
return handler({
|
|
78
|
+
...match,
|
|
79
|
+
next,
|
|
80
|
+
});
|
|
81
|
+
}), n)();
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
for (const method of allMethods)
|
|
86
|
+
exports.router[method] = exports.router.method.bind(exports.router, method);
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsbURBQTJDO0FBQzNDLDZDQUEyQztBQUMzQyxtQ0FBd0M7QUFFeEMsTUFBTSxLQUFLLEdBQXdCLEVBQUUsQ0FBQTtBQUNyQyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUE7QUFDeEIsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFBO0FBY2xCLFNBQVMsV0FBVyxDQUFDLElBQVksRUFBRSxPQUE0QjtJQUM5RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3hDLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQTtJQUMzRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFBRSxPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUUzQyxNQUFNLElBQUksR0FBVSxFQUFFLENBQUE7SUFDdEIsTUFBTSxNQUFNLEdBQUcsSUFBQSw2QkFBWSxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDaEQsTUFBTSxNQUFNLEdBQUc7UUFDZCxNQUFNO1FBQ04sSUFBSTtLQUNKLENBQUE7SUFFRCxJQUFJLFVBQVUsR0FBRyxVQUFVLEVBQUU7UUFDNUIsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQTtRQUN4QixVQUFVLEVBQUUsQ0FBQTtLQUNaO0lBQ0QsT0FBTyxNQUFNLENBQUE7QUFDZCxDQUFDO0FBRUQsU0FBZ0IsWUFBWSxDQUMzQixRQUFnQixFQUNoQixPQUFlLEVBQ2YsT0FBNkI7SUFFN0IsT0FBTyxHQUFHLEVBQUMsR0FBRyxPQUFPLEVBQUMsQ0FBQTtJQUN0QixPQUFPLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQTtJQUNwQixP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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" />
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
/// <reference types="node" />
|
|
4
|
+
/// <reference types="node" />
|
|
5
|
+
import { 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,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.readStream = exports.getContentStream = void 0;
|
|
4
|
+
const node_zlib_1 = require("node:zlib");
|
|
5
|
+
const jdefer_1 = require("jdefer");
|
|
6
|
+
// note: there might be multiple encodings applied to the stream
|
|
7
|
+
// we only support one encoding
|
|
8
|
+
function getContentStream(req, encoding, disableInflate) {
|
|
9
|
+
if (disableInflate && encoding !== 'identity')
|
|
10
|
+
throw new Error(`content-encoding ${encoding} is not supported`);
|
|
11
|
+
switch (encoding) {
|
|
12
|
+
case 'deflate': {
|
|
13
|
+
const stream = (0, node_zlib_1.createInflate)();
|
|
14
|
+
req.pipe(stream);
|
|
15
|
+
return stream;
|
|
16
|
+
}
|
|
17
|
+
case 'gzip': {
|
|
18
|
+
const stream = (0, node_zlib_1.createGunzip)();
|
|
19
|
+
req.pipe(stream);
|
|
20
|
+
return stream;
|
|
21
|
+
}
|
|
22
|
+
case 'br': {
|
|
23
|
+
const stream = (0, node_zlib_1.createBrotliDecompress)();
|
|
24
|
+
req.pipe(stream);
|
|
25
|
+
return stream;
|
|
26
|
+
}
|
|
27
|
+
case 'identity':
|
|
28
|
+
return req;
|
|
29
|
+
default:
|
|
30
|
+
throw new Error(`unsupported content-encoding ${encoding}`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.getContentStream = getContentStream;
|
|
34
|
+
// https://github.com/stream-utils/raw-body/blob/191e4b6506dcf77198eed01c8feb4b6817008342/index.js#L155
|
|
35
|
+
async function readStream(stream, { length, limit }) {
|
|
36
|
+
let completed = false;
|
|
37
|
+
// check the length and limit options.
|
|
38
|
+
// note: we intentionally leave the stream paused,
|
|
39
|
+
// so users should handle the stream themselves.
|
|
40
|
+
if (limit !== undefined && length !== undefined && length > limit)
|
|
41
|
+
throw new Error('request entity too large');
|
|
42
|
+
let received = 0;
|
|
43
|
+
const buffers = [];
|
|
44
|
+
const defer = (0, jdefer_1.default)();
|
|
45
|
+
// attach listeners
|
|
46
|
+
stream.on('aborted', onAborted);
|
|
47
|
+
stream.on('close', onClose);
|
|
48
|
+
stream.on('data', onData);
|
|
49
|
+
stream.on('end', onEnd);
|
|
50
|
+
stream.on('error', onError);
|
|
51
|
+
function done(err, result) {
|
|
52
|
+
if (completed)
|
|
53
|
+
return;
|
|
54
|
+
completed = true;
|
|
55
|
+
onClose();
|
|
56
|
+
if (err) {
|
|
57
|
+
stream.unpipe?.();
|
|
58
|
+
stream.pause?.();
|
|
59
|
+
defer.reject(err);
|
|
60
|
+
}
|
|
61
|
+
else
|
|
62
|
+
defer.resolve(result);
|
|
63
|
+
}
|
|
64
|
+
function onData(chunk) {
|
|
65
|
+
if (completed)
|
|
66
|
+
return;
|
|
67
|
+
received += chunk.length;
|
|
68
|
+
if (limit !== undefined && received > limit) {
|
|
69
|
+
done(new Error('request entity too large'));
|
|
70
|
+
}
|
|
71
|
+
else
|
|
72
|
+
buffers.push(chunk);
|
|
73
|
+
}
|
|
74
|
+
function onError(err) {
|
|
75
|
+
done(err);
|
|
76
|
+
}
|
|
77
|
+
function onEnd() {
|
|
78
|
+
if (length !== undefined && received !== length)
|
|
79
|
+
done(new Error('request size did not match content length'));
|
|
80
|
+
else
|
|
81
|
+
done(undefined, Buffer.concat(buffers));
|
|
82
|
+
}
|
|
83
|
+
function onAborted() {
|
|
84
|
+
done(new Error('request aborted'));
|
|
85
|
+
}
|
|
86
|
+
function onClose() {
|
|
87
|
+
buffers.splice(0, buffers.length);
|
|
88
|
+
stream.off('aborted', onAborted);
|
|
89
|
+
stream.off('data', onData);
|
|
90
|
+
stream.off('end', onEnd);
|
|
91
|
+
stream.off('error', onEnd);
|
|
92
|
+
stream.off('close', onClose);
|
|
93
|
+
}
|
|
94
|
+
return await defer.promise;
|
|
95
|
+
}
|
|
96
|
+
exports.readStream = readStream;
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3N0cmVhbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFHQSx5Q0FBNkU7QUFDN0UsbUNBQThCO0FBRTlCLGdFQUFnRTtBQUNoRSwrQkFBK0I7QUFDL0IsU0FBZ0IsZ0JBQWdCLENBQUMsR0FBb0IsRUFBRSxRQUFnQixFQUFFLGNBQXdCO0lBQ2hHLElBQUksY0FBYyxJQUFJLFFBQVEsS0FBSyxVQUFVO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsUUFBUSxtQkFBbUIsQ0FBQyxDQUFBO0lBRS9HLFFBQVEsUUFBUSxFQUFFO1FBQ2pCLEtBQUssU0FBUyxDQUFDLENBQUM7WUFDZixNQUFNLE1BQU0sR0FBRyxJQUFBLHlCQUFhLEdBQUUsQ0FBQTtZQUM5QixHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQ2hCLE9BQU8sTUFBTSxDQUFBO1NBQ2I7UUFDRCxLQUFLLE1BQU0sQ0FBQyxDQUFDO1lBQ1osTUFBTSxNQUFNLEdBQUcsSUFBQSx3QkFBWSxHQUFFLENBQUE7WUFDN0IsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUNoQixPQUFPLE1BQU0sQ0FBQTtTQUNiO1FBQ0QsS0FBSyxJQUFJLENBQUMsQ0FBQztZQUNWLE1BQU0sTUFBTSxHQUFHLElBQUEsa0NBQXNCLEdBQUUsQ0FBQTtZQUN2QyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQ2hCLE9BQU8sTUFBTSxDQUFBO1NBQ2I7UUFDRCxLQUFLLFVBQVU7WUFDZCxPQUFPLEdBQUcsQ0FBQTtRQUNYO1lBQ0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsUUFBUSxFQUFFLENBQUMsQ0FBQTtLQUM1RDtBQUNGLENBQUM7QUF4QkQsNENBd0JDO0FBRUQsdUdBQXVHO0FBQ2hHLEtBQUssVUFBVSxVQUFVLENBQy9CLE1BQWdCLEVBQ2hCLEVBQUMsTUFB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
|
package/esm/body.d.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export declare const bufferBodyContext: {
|
|
2
|
+
readonly value: unknown;
|
|
3
|
+
chain(params_0?: {
|
|
4
|
+
limit?: number | undefined;
|
|
5
|
+
} | undefined): <V>(next: () => V) => Promise<any>;
|
|
6
|
+
};
|
|
7
|
+
export declare const jsonBodyContext: {
|
|
8
|
+
readonly value: unknown;
|
|
9
|
+
chain(): <V>(next: () => V) => Promise<any>;
|
|
10
|
+
};
|
|
11
|
+
export declare const rawBodyContext: {
|
|
12
|
+
readonly value: unknown;
|
|
13
|
+
chain(): <V>(next: () => V) => Promise<any>;
|
|
14
|
+
};
|
|
15
|
+
export declare const textBodyContext: {
|
|
16
|
+
readonly value: unknown;
|
|
17
|
+
chain(): <V>(next: () => V) => Promise<any>;
|
|
18
|
+
};
|
|
19
|
+
export declare const urlencodedBodyContext: {
|
|
20
|
+
readonly value: unknown;
|
|
21
|
+
chain(params_0?: {
|
|
22
|
+
simplify?: boolean | undefined;
|
|
23
|
+
} | undefined): <V>(next: () => V) => Promise<any>;
|
|
24
|
+
};
|
|
25
|
+
export declare const queryContext: {
|
|
26
|
+
readonly value: unknown;
|
|
27
|
+
chain(): <V>(next: () => V) => Promise<any>;
|
|
28
|
+
};
|