dx-server 0.5.2 → 0.5.5
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 +126 -29
- package/cjs/body.js +10 -31
- package/cjs/bodyHelpers.d.ts +2 -1
- package/cjs/bodyHelpers.js +8 -4
- package/cjs/dx.d.ts +9 -0
- package/cjs/dx.js +35 -3
- package/cjs/dxHelpers.d.ts +13 -1
- package/cjs/dxHelpers.js +7 -2
- package/cjs/index.d.ts +3 -2
- package/cjs/index.js +7 -2
- package/cjs/route.d.ts +1 -3
- package/cjs/route.js +4 -3
- package/cjs/static.d.ts +3 -4
- package/cjs/static.js +18 -52
- package/cjs/staticHelpers.d.ts +5 -0
- package/cjs/staticHelpers.js +30 -0
- package/esm/body.js +10 -26
- package/esm/bodyHelpers.d.ts +2 -1
- package/esm/bodyHelpers.js +6 -3
- package/esm/dx.d.ts +9 -0
- package/esm/dx.js +32 -2
- package/esm/dxHelpers.d.ts +13 -1
- package/esm/dxHelpers.js +7 -2
- package/esm/index.d.ts +3 -2
- package/esm/index.js +4 -3
- package/esm/route.d.ts +1 -3
- package/esm/route.js +4 -3
- package/esm/static.d.ts +3 -4
- package/esm/static.js +17 -51
- package/esm/staticHelpers.d.ts +5 -0
- package/esm/staticHelpers.js +23 -0
- package/package.json +4 -2
- package/cjs/body.d.ts +0 -8
- package/esm/body.d.ts +0 -8
package/cjs/static.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
}): (next: () => any) => Promise<any>;
|
|
1
|
+
import { Chainable } from './dx.js';
|
|
2
|
+
import { SendOptions } from 'send';
|
|
3
|
+
export declare function chainStatic(prefix: string, options: SendOptions): Chainable;
|
package/cjs/static.js
CHANGED
|
@@ -1,60 +1,26 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
// @ts-nocheck
|
|
3
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.
|
|
3
|
+
exports.chainStatic = void 0;
|
|
5
4
|
const dx_js_1 = require("./dx.js");
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
const bodyHelpers_js_1 = require("./bodyHelpers.js");
|
|
6
|
+
const staticHelpers_js_1 = require("./staticHelpers.js");
|
|
7
|
+
function chainStatic(prefix, options) {
|
|
8
|
+
return next => {
|
|
8
9
|
const req = (0, dx_js_1.getReq)();
|
|
9
10
|
if (req.method !== 'GET' && req.method !== 'HEAD')
|
|
10
11
|
return next();
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
//
|
|
21
|
-
|
|
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);
|
|
12
|
+
if (!prefix.endsWith('/'))
|
|
13
|
+
prefix += '/';
|
|
14
|
+
if (!prefix.startsWith('/'))
|
|
15
|
+
prefix = '/' + prefix;
|
|
16
|
+
const { pathname } = (0, bodyHelpers_js_1.urlFromReq)(req);
|
|
17
|
+
if (!pathname.startsWith(prefix)
|
|
18
|
+
&& !pathname.endsWith('/')
|
|
19
|
+
&& pathname + '/' !== prefix)
|
|
20
|
+
return next();
|
|
21
|
+
return (0, staticHelpers_js_1.sendFile)(req, (0, dx_js_1.getRes)(), pathname.slice(prefix.length - 1), // keep the trailing slash
|
|
22
|
+
options, next);
|
|
43
23
|
};
|
|
44
24
|
}
|
|
45
|
-
exports.
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3N0YXRpYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsY0FBYzs7O0FBRWQsbUNBQThCO0FBRTlCLFNBQWdCLGdCQUFnQixDQUMvQixFQUFDLElBQUksRUFHSjtJQUVELE9BQU8sS0FBSyxFQUFFLElBQWUsRUFBRSxFQUFFO1FBQ2hDLE1BQU0sR0FBRyxHQUFHLElBQUEsY0FBTSxHQUFFLENBQUE7UUFDcEIsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLEtBQUssSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLE1BQU07WUFBRSxPQUFPLElBQUksRUFBRSxDQUFBO1FBRWhFLElBQUksWUFBWSxHQUFHLENBQUMsV0FBVyxDQUFBO1FBQy9CLElBQUksV0FBVyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDeEMsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQTtRQUVqQyxxQ0FBcUM7UUFDckMsSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDN0QsSUFBSSxHQUFHLEVBQUUsQ0FBQTtRQUNWLENBQUM7UUFFRCxxQkFBcUI7UUFDckIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFFbEMsd0JBQXdCO1FBQ3hCLE1BQU0sQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFBO1FBRW5DLHVCQUF1QjtRQUN2QixJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFBO1FBQ2pDLENBQUM7UUFFRCxvQ0FBb0M7UUFDcEMsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNqQixNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxTQUFTLE1BQU07Z0JBQ2hDLGdEQUFnRDtnQkFDaEQsWUFBWSxHQUFHLElBQUksQ0FBQTtZQUNwQixDQUFDLENBQUMsQ0FBQTtRQUNILENBQUM7UUFFRCxpQkFBaUI7UUFDakIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxLQUFLLENBQUMsR0FBRztZQUNwQyxJQUFJLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM3QyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7Z0JBQ1QsT0FBTTtZQUNQLENBQUM7WUFFRCxJQUFJLEVBQUUsQ0FBQTtRQUNQLENBQUMsQ0FBQyxDQUFBO1FBRUYsT0FBTztRQUNQLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDakIsQ0FBQyxDQUFBO0FBQ0YsQ0FBQztBQW5ERCw0Q0FtREM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLHNCQUFzQixDQUFFLEdBQVc7SUFDM0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNyQyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3hDLE1BQUs7UUFDTixDQUFDO0lBQ0YsQ0FBQztJQUVELE9BQU8sQ0FBQyxHQUFHLENBQUM7UUFDWCxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxHQUFHLENBQUE7QUFDUCxDQUFDIn0=
|
|
25
|
+
exports.chainStatic = chainStatic;
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3N0YXRpYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBaUQ7QUFFakQscURBQTJDO0FBQzNDLHlEQUEyQztBQUUzQyxTQUFnQixXQUFXLENBQzFCLE1BQWMsRUFDZCxPQUFvQjtJQUVwQixPQUFPLElBQUksQ0FBQyxFQUFFO1FBQ2IsTUFBTSxHQUFHLEdBQUcsSUFBQSxjQUFNLEdBQUUsQ0FBQTtRQUNwQixJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssS0FBSyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssTUFBTTtZQUFFLE9BQU8sSUFBSSxFQUFFLENBQUE7UUFFaEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO1lBQUUsTUFBTSxJQUFJLEdBQUcsQ0FBQTtRQUN4QyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7WUFBRSxNQUFNLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQTtRQUVsRCxNQUFNLEVBQUMsUUFBUSxFQUFDLEdBQUcsSUFBQSwyQkFBVSxFQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2xDLElBQ0MsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztlQUN6QixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO2VBQ3ZCLFFBQVEsR0FBRyxHQUFHLEtBQUssTUFBTTtZQUMzQixPQUFPLElBQUksRUFBRSxDQUFBO1FBRWYsT0FBTyxJQUFBLDJCQUFRLEVBQ2QsR0FBRyxFQUNILElBQUEsY0FBTSxHQUFFLEVBQ1IsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLDBCQUEwQjtRQUM3RCxPQUFPLEVBQ1AsSUFBSSxDQUNKLENBQUE7SUFDRixDQUFDLENBQUE7QUFDRixDQUFDO0FBMUJELGtDQTBCQyJ9
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
import { SendOptions } from 'send';
|
|
3
|
+
import { IncomingMessage, ServerResponse } from 'node:http';
|
|
4
|
+
export declare function sendFile(req: IncomingMessage, res: ServerResponse, pathname: string, // url encoded path, not plain path
|
|
5
|
+
options: SendOptions | undefined, next: () => any): Promise<void>;
|
|
@@ -0,0 +1,30 @@
|
|
|
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.sendFile = void 0;
|
|
7
|
+
const jdefer_1 = __importDefault(require("jdefer"));
|
|
8
|
+
const send_1 = __importDefault(require("send"));
|
|
9
|
+
function sendFile(req, res, pathname, // url encoded path, not plain path
|
|
10
|
+
options, next) {
|
|
11
|
+
const defer = (0, jdefer_1.default)();
|
|
12
|
+
(0, send_1.default)(req, pathname, options)
|
|
13
|
+
.on('error', async (err) => {
|
|
14
|
+
if (err.code !== 'ENOENT')
|
|
15
|
+
defer.reject(err);
|
|
16
|
+
else {
|
|
17
|
+
try {
|
|
18
|
+
defer.resolve(next());
|
|
19
|
+
}
|
|
20
|
+
catch (e) {
|
|
21
|
+
defer.reject(e);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
})
|
|
25
|
+
.on('end', () => defer.resolve())
|
|
26
|
+
.pipe(res);
|
|
27
|
+
return defer.promise;
|
|
28
|
+
}
|
|
29
|
+
exports.sendFile = sendFile;
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljSGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zdGF0aWNIZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQUE4QjtBQUM5QixnREFBc0M7QUFHdEMsU0FBZ0IsUUFBUSxDQUN2QixHQUFvQixFQUNwQixHQUFtQixFQUNuQixRQUFnQixFQUFFLG1DQUFtQztBQUNyRCxPQUFnQyxFQUNoQyxJQUFlO0lBRWYsTUFBTSxLQUFLLEdBQUcsSUFBQSxnQkFBUyxHQUFFLENBQUE7SUFDekIsSUFBQSxjQUFJLEVBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUM7U0FDMUIsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxFQUFDLEVBQUU7UUFDeEIsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLFFBQVE7WUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO2FBQ3ZDLENBQUM7WUFDTCxJQUFJLENBQUM7Z0JBQ0osS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFBO1lBQ3RCLENBQUM7WUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNaLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDaEIsQ0FBQztRQUNGLENBQUM7SUFDRixDQUFDLENBQUM7U0FDRCxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNoQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7SUFFWCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUE7QUFDckIsQ0FBQztBQXZCRCw0QkF1QkMifQ==
|
package/esm/body.js
CHANGED
|
@@ -1,27 +1,11 @@
|
|
|
1
|
-
import { getReq } from './dx.js';
|
|
1
|
+
import { getReq, makeDxContext } from './dx.js';
|
|
2
2
|
import { bufferFromReq, jsonFromReq, queryFromReq, rawFromReq, textFromReq, urlEncodedFromReq } from './bodyHelpers.js';
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const
|
|
8
|
-
export
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
export async function getRaw(options) {
|
|
13
|
-
return getReq()[rawBodySymbol] ??= rawFromReq(getReq(), options);
|
|
14
|
-
}
|
|
15
|
-
const textBodySymbol = Symbol('textBody');
|
|
16
|
-
export async function getText(options) {
|
|
17
|
-
return getReq()[textBodySymbol] ??= textFromReq(getReq(), options);
|
|
18
|
-
}
|
|
19
|
-
const urlEncodedBodySymbol = Symbol('urlencodedBody');
|
|
20
|
-
export async function getUrlEncoded(options) {
|
|
21
|
-
return getReq()[urlEncodedBodySymbol] ??= urlEncodedFromReq(getReq(), options);
|
|
22
|
-
}
|
|
23
|
-
const querySymbol = Symbol('query');
|
|
24
|
-
export async function getQuery({ simplify, ...options } = {}) {
|
|
25
|
-
return getReq()[querySymbol] ??= queryFromReq(getReq(), options);
|
|
26
|
-
}
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9keS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9ib2R5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxTQUFTLENBQUE7QUFDOUIsT0FBTyxFQUVOLGFBQWEsRUFDYixXQUFXLEVBQ1gsWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLE1BQU0sa0JBQWtCLENBQUE7QUFFekIsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUE7QUFDN0MsS0FBSyxVQUFVLFNBQVMsQ0FBQyxPQUFvQztJQUM1RCxPQUFPLE1BQU0sRUFBRSxDQUFDLGdCQUFnQixDQUFDLEtBQUssYUFBYSxDQUFDLE1BQU0sRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0FBQ3ZFLENBQUM7QUFFRCxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUE7QUFDekMsTUFBTSxDQUFDLEtBQUssVUFBVSxPQUFPLENBQUMsT0FBb0M7SUFDakUsT0FBTyxNQUFNLEVBQUUsQ0FBQyxjQUFjLENBQUMsS0FBSyxXQUFXLENBQUMsTUFBTSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUE7QUFDbkUsQ0FBQztBQUVELE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUN2QyxNQUFNLENBQUMsS0FBSyxVQUFVLE1BQU0sQ0FBQyxPQUFvQztJQUNoRSxPQUFPLE1BQU0sRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQTtBQUNqRSxDQUFDO0FBRUQsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0FBQ3pDLE1BQU0sQ0FBQyxLQUFLLFVBQVUsT0FBTyxDQUFDLE9BQW9DO0lBQ2pFLE9BQU8sTUFBTSxFQUFFLENBQUMsY0FBYyxDQUFDLEtBQUssV0FBVyxDQUFDLE1BQU0sRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0FBQ25FLENBQUM7QUFFRCxNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0FBQ3JELE1BQU0sQ0FBQyxLQUFLLFVBQVUsYUFBYSxDQUFDLE9BQW1DO0lBQ3RFLE9BQU8sTUFBTSxFQUFFLENBQUMsb0JBQW9CLENBQUMsS0FBSyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQTtBQUMvRSxDQUFDO0FBRUQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0FBQ25DLE1BQU0sQ0FBQyxLQUFLLFVBQVUsUUFBUSxDQUFDLEVBQUMsUUFBUSxFQUFFLEdBQUcsT0FBTyxLQUF1RCxFQUFFO0lBQzVHLE9BQU8sTUFBTSxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssWUFBWSxDQUFDLE1BQU0sRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0FBQ2pFLENBQUMifQ==
|
|
3
|
+
export const getBuffer = makeDxContext((options) => bufferFromReq(getReq(), options));
|
|
4
|
+
export const getJson = makeDxContext((options) => jsonFromReq(getReq(), options));
|
|
5
|
+
export const getRaw = makeDxContext((options) => rawFromReq(getReq(), options));
|
|
6
|
+
export const getText = makeDxContext((options) => textFromReq(getReq(), options));
|
|
7
|
+
export const getUrlEncoded = makeDxContext((options) => urlEncodedFromReq(getReq(), options));
|
|
8
|
+
export const getQuery = makeDxContext((options) => queryFromReq(getReq(), options));
|
|
9
|
+
// to getFile use busboy
|
|
10
|
+
// https://github.com/mscdex/busboy
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9keS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9ib2R5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsYUFBYSxFQUFDLE1BQU0sU0FBUyxDQUFBO0FBQzdDLE9BQU8sRUFFTixhQUFhLEVBQ2IsV0FBVyxFQUNYLFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixNQUFNLGtCQUFrQixDQUFBO0FBRXpCLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsQ0FBQyxPQUFvQyxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQTtBQUNsSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLENBQUMsT0FBb0MsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUE7QUFDOUcsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxDQUFDLE9BQW9DLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFBO0FBQzVHLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsQ0FBQyxPQUFvQyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQTtBQUM5RyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsYUFBYSxDQUFDLENBQUMsT0FBb0MsRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQTtBQUMxSCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLENBQUMsT0FBMkQsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUE7QUFFdkksd0JBQXdCO0FBQ3hCLG1DQUFtQyJ9
|
package/esm/bodyHelpers.d.ts
CHANGED
|
@@ -13,4 +13,5 @@ export declare function jsonFromReq(req: IncomingMessage, options?: Partial<Buff
|
|
|
13
13
|
export declare function rawFromReq(req: IncomingMessage, options?: Partial<BufferBodyOptions>): Promise<Buffer | undefined>;
|
|
14
14
|
export declare function textFromReq(req: IncomingMessage, options?: Partial<BufferBodyOptions>): Promise<string | undefined>;
|
|
15
15
|
export declare function urlEncodedFromReq(req: IncomingMessage, options?: Partial<BufferBodyOptions>): Promise<qs.ParsedQs | undefined>;
|
|
16
|
-
export declare function
|
|
16
|
+
export declare function urlFromReq(req: IncomingMessage): URL;
|
|
17
|
+
export declare function queryFromReq(req: IncomingMessage, options?: Partial<BufferBodyOptions>): qs.ParsedQs;
|
package/esm/bodyHelpers.js
CHANGED
|
@@ -81,9 +81,12 @@ export async function urlEncodedFromReq(req, options) {
|
|
|
81
81
|
return simplifyUrlEncodedBody ? Object.fromEntries(new URLSearchParams(str)) : qs.parse(str);
|
|
82
82
|
}
|
|
83
83
|
}
|
|
84
|
-
export
|
|
85
|
-
|
|
84
|
+
export function urlFromReq(req) {
|
|
85
|
+
return new URL(req.url ?? '', 'https://example.com');
|
|
86
|
+
}
|
|
87
|
+
export function queryFromReq(req, options) {
|
|
88
|
+
const query = urlFromReq(req).searchParams.toString();
|
|
86
89
|
const { simplifyQuery } = { ...bodyDefaultOptions, ...options };
|
|
87
90
|
return simplifyQuery ? Object.fromEntries(new URLSearchParams(query)) : qs.parse(query);
|
|
88
91
|
}
|
|
89
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9keUhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYm9keUhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLGdCQUFnQixFQUFFLFVBQVUsRUFBQyxNQUFNLGFBQWEsQ0FBQTtBQUN4RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQTtBQUNqRCxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUE7QUFRbkIsSUFBSSxrQkFBa0IsR0FBc0IsRUFBQyxTQUFTLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBQyxDQUFBLENBQUMsUUFBUTtBQUMzRSxNQUFNLFVBQVUsMkJBQTJCLENBQUMsT0FBbUM7SUFDOUUsa0JBQWtCLEdBQUcsRUFBQyxHQUFHLGtCQUFrQixFQUFFLEdBQUcsT0FBTyxFQUFDLENBQUE7QUFDekQsQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFVBQVUsYUFBYSxDQUFDLEdBQW9CLEVBQUUsT0FBb0M7SUFDN0YsTUFBTSxFQUFDLFNBQVMsRUFBQyxHQUFHLEVBQUMsR0FBRyxrQkFBa0IsRUFBRSxHQUFHLE9BQU8sRUFBQyxDQUFBO0lBQ3ZEOzs7OztPQUtHO0lBQ0YsK0ZBQStGO0lBQ2hHLE1BQU0sbUJBQW1CLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFDN0UsSUFDQyxHQUFHLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssU0FBUztXQUMzQyxLQUFLLENBQUMsbUJBQW1CLENBQUM7UUFDNUIsT0FBTTtJQUNSLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFBO0lBRWxGLE9BQU87SUFDUCxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENB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
|
package/esm/dx.d.ts
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
/// <reference types="node" resolution-mode="require"/>
|
|
4
4
|
import { Readable } from 'node:stream';
|
|
5
5
|
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
6
|
+
import { SendOptions } from 'send';
|
|
6
7
|
export interface Chainable<P extends any[] = any[], R = any, Next = (...np: any[]) => any> {
|
|
7
8
|
(next: Next, ...p: P): R;
|
|
8
9
|
}
|
|
@@ -18,6 +19,7 @@ export declare function setText(text: string, { status }?: {
|
|
|
18
19
|
export declare function setHtml(html: string, opts?: {
|
|
19
20
|
status?: number;
|
|
20
21
|
}): void;
|
|
22
|
+
export declare function setFile(filePath: string, options?: SendOptions): void;
|
|
21
23
|
export declare function setBuffer(buffer: Buffer, { status }?: {
|
|
22
24
|
status?: number;
|
|
23
25
|
}): void;
|
|
@@ -31,3 +33,10 @@ export declare function setJson(json: any, { status }?: {
|
|
|
31
33
|
status?: number;
|
|
32
34
|
}): void;
|
|
33
35
|
export declare function setRedirect(url: string, status: 301 | 302): void;
|
|
36
|
+
interface Context<T, Params extends any[], R = any, Next = (...np: any[]) => any> {
|
|
37
|
+
value: T;
|
|
38
|
+
chain(...params: Params): Chainable<Params, R, Next>;
|
|
39
|
+
(...params: Params): Promise<T>;
|
|
40
|
+
}
|
|
41
|
+
export declare function makeDxContext<T, Params extends any[], R = any, Next = (...np: any[]) => any>(maker: (...params: Params) => T): Context<T, Params, R, Next>;
|
|
42
|
+
export {};
|
package/esm/dx.js
CHANGED
|
@@ -21,7 +21,6 @@ export function getReq() {
|
|
|
21
21
|
export function getRes() {
|
|
22
22
|
return resStorage.getStore();
|
|
23
23
|
}
|
|
24
|
-
// todo: support setFile (with stream or with buffer)
|
|
25
24
|
export function setText(text, { status } = {}) {
|
|
26
25
|
const res = getRes();
|
|
27
26
|
const dx = dxStorage.getStore();
|
|
@@ -35,6 +34,12 @@ export function setHtml(html, opts = {}) {
|
|
|
35
34
|
const dx = dxStorage.getStore();
|
|
36
35
|
dx.type = 'html';
|
|
37
36
|
}
|
|
37
|
+
export function setFile(filePath, options) {
|
|
38
|
+
const dx = dxStorage.getStore();
|
|
39
|
+
dx.data = filePath;
|
|
40
|
+
dx.type = 'file';
|
|
41
|
+
dx.options = options;
|
|
42
|
+
}
|
|
38
43
|
export function setBuffer(buffer, { status } = {}) {
|
|
39
44
|
const res = getRes();
|
|
40
45
|
const dx = dxStorage.getStore();
|
|
@@ -74,4 +79,29 @@ export function setRedirect(url, status) {
|
|
|
74
79
|
dx.data = url;
|
|
75
80
|
dx.type = 'redirect';
|
|
76
81
|
}
|
|
77
|
-
|
|
82
|
+
export function makeDxContext(maker) {
|
|
83
|
+
const promiseSymbol = Symbol('promise');
|
|
84
|
+
const valueSymbol = Symbol('value');
|
|
85
|
+
// wrap in an async function to ensure the maker is called only once
|
|
86
|
+
const context = (...params) => getReq()[promiseSymbol] ??= (async () => {
|
|
87
|
+
try {
|
|
88
|
+
return getReq()[valueSymbol] = await maker(...params);
|
|
89
|
+
}
|
|
90
|
+
catch (e) {
|
|
91
|
+
throw e;
|
|
92
|
+
}
|
|
93
|
+
})();
|
|
94
|
+
Object.defineProperty(context, 'value', {
|
|
95
|
+
get() {
|
|
96
|
+
if (!getReq()[promiseSymbol])
|
|
97
|
+
throw new Error('value is not ready');
|
|
98
|
+
return getReq()[valueSymbol];
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
context.chain = (...params) => async (next) => {
|
|
102
|
+
await context(...params);
|
|
103
|
+
return next();
|
|
104
|
+
};
|
|
105
|
+
return context;
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZHgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDbEQsT0FBTyxFQUFpQixRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQTtBQVd2RCxNQUFNLFVBQVUsR0FBRyxJQUFJLGlCQUFpQixFQUFtQixDQUFBO0FBQzNELE1BQU0sVUFBVSxHQUFHLElBQUksaUJBQWlCLEVBQWtCLENBQUE7QUFDMUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxpQkFBaUIsRUFBYSxDQUFBO0FBQ3BELE1BQU0sVUFBVSxRQUFRLENBQ3ZCLEdBQW9CLEVBQ3BCLEdBQW1CLEVBQ25CLFVBR0ksRUFBRTtJQUVOLE9BQU8sS0FBSyxFQUFDLElBQUksRUFBQyxFQUFFO1FBQ25CLE1BQU0sRUFBRSxHQUFjLEVBQUMsR0FBRyxPQUFPLEVBQUMsQ0FBQTtRQUNsQyxNQUFNLE1BQU0sR0FBRyxNQUFNLFNBQVMsQ0FBQyxHQUFHLENBQ2pDLEVBQUUsRUFDRixHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUNuQixHQUFHLEVBQ0gsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQy9CLENBQ0QsQ0FBQTtRQUNELE1BQU0sUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFDNUIsT0FBTyxNQUFNLENBQUE7SUFDZCxDQUFDLENBQUE7QUFDRixDQUFDO0FBRUQsZUFBZTtBQUNmLGdEQUFnRDtBQUNoRCwyRkFBMkY7QUFDM0YsZ0ZBQWdGO0FBQ2hGLE1BQU0sVUFBVSxNQUFNO0lBQ3JCLE9BQU8sVUFBVSxDQUFDLFFBQVEsRUFBRyxDQUFBO0FBQzlCLENBQUM7QUFDRCxNQUFNLFVBQVUsTUFBTTtJQUNyQixPQUFPLFVBQVUsQ0FBQyxRQUFRLEVBQUcsQ0FB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
|
package/esm/dxHelpers.d.ts
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
/// <reference types="node" resolution-mode="require"/>
|
|
4
4
|
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
5
5
|
import { Readable } from 'node:stream';
|
|
6
|
+
import { SendOptions } from 'send';
|
|
6
7
|
export type DxContext = {
|
|
7
8
|
charset?: BufferEncoding;
|
|
8
9
|
jsonBeautify?: boolean;
|
|
@@ -10,23 +11,34 @@ export type DxContext = {
|
|
|
10
11
|
} & ({
|
|
11
12
|
type: 'text';
|
|
12
13
|
data: string;
|
|
14
|
+
options: undefined;
|
|
13
15
|
} | {
|
|
14
16
|
type: 'html';
|
|
15
17
|
data: string;
|
|
18
|
+
options: undefined;
|
|
16
19
|
} | {
|
|
17
20
|
type: 'buffer';
|
|
18
21
|
data: Buffer;
|
|
22
|
+
options: undefined;
|
|
19
23
|
} | {
|
|
20
24
|
type: 'json';
|
|
21
25
|
data: any;
|
|
26
|
+
options: undefined;
|
|
22
27
|
} | {
|
|
23
28
|
type: 'redirect';
|
|
24
29
|
data: string;
|
|
30
|
+
options: undefined;
|
|
25
31
|
} | {
|
|
26
32
|
type: 'nodeStream';
|
|
27
33
|
data: Readable;
|
|
34
|
+
options: undefined;
|
|
28
35
|
} | {
|
|
29
36
|
type: 'webStream';
|
|
30
37
|
data: ReadableStream;
|
|
38
|
+
options: undefined;
|
|
39
|
+
} | {
|
|
40
|
+
type: 'file';
|
|
41
|
+
data: string;
|
|
42
|
+
options?: SendOptions;
|
|
31
43
|
});
|
|
32
|
-
export declare function writeRes(req: IncomingMessage, res: ServerResponse, { type, data, charset, jsonBeautify, disableEtag }: DxContext): Promise<void>;
|
|
44
|
+
export declare function writeRes(req: IncomingMessage, res: ServerResponse, { type, data, charset, jsonBeautify, disableEtag, options }: DxContext): Promise<void>;
|
package/esm/dxHelpers.js
CHANGED
|
@@ -2,7 +2,9 @@ import { Readable } from 'node:stream';
|
|
|
2
2
|
import makeDefer from 'jdefer';
|
|
3
3
|
import { promisify } from 'node:util';
|
|
4
4
|
import { entityTag, isFreshETag } from './etag.js';
|
|
5
|
-
|
|
5
|
+
import { sendFile } from './staticHelpers.js';
|
|
6
|
+
import { getRes } from './dx.js';
|
|
7
|
+
export async function writeRes(req, res, { type, data, charset, jsonBeautify, disableEtag, options }) {
|
|
6
8
|
const setContentType = (contentType) => {
|
|
7
9
|
if (res.headersSent || res.getHeader('content-type'))
|
|
8
10
|
return;
|
|
@@ -37,6 +39,8 @@ export async function writeRes(req, res, { type, data, charset, jsonBeautify, di
|
|
|
37
39
|
res.setHeader('location', data);
|
|
38
40
|
bufferOrStream = Buffer.from('', charset);
|
|
39
41
|
break;
|
|
42
|
+
case 'file':
|
|
43
|
+
return sendFile(req, getRes(), encodeURI(data), options, () => void 0);
|
|
40
44
|
case undefined:
|
|
41
45
|
// skip response. Some middleware may handle it outside the chain. For example, express middleware
|
|
42
46
|
return;
|
|
@@ -46,6 +50,7 @@ export async function writeRes(req, res, { type, data, charset, jsonBeautify, di
|
|
|
46
50
|
throw new Error(`unsupported response type ${type}`);
|
|
47
51
|
}
|
|
48
52
|
if (res.headersSent) {
|
|
53
|
+
// for example, chainStatic or setFile send the response directly
|
|
49
54
|
if (res.writableFinished) {
|
|
50
55
|
// skipped: response is already finished
|
|
51
56
|
}
|
|
@@ -103,4 +108,4 @@ export async function writeRes(req, res, { type, data, charset, jsonBeautify, di
|
|
|
103
108
|
await promisify(res.end.bind(res))(undefined); // some express middleware, such as express-session, requires explicitly passing chunk
|
|
104
109
|
}
|
|
105
110
|
}
|
|
106
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
111
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHhIZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2R4SGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sYUFBYSxDQUFBO0FBQ3BDLE9BQU8sU0FBUyxNQUFNLFFBQVEsQ0FBQTtBQUM5QixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sV0FBVyxDQUFBO0FBQ25DLE9BQU8sRUFBQyxTQUFTLEVBQUUsV0FBVyxFQUFDLE1BQU0sV0FBVyxDQUFBO0FBRWhELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQTtBQUMzQyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sU0FBUyxDQUFBO0FBK0M5QixNQUFNLENBQUMsS0FBSyxVQUFVLFFBQVEsQ0FBQyxHQUFvQixFQUFFLEdBQW1CLEVBQUUsRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBWTtJQUM3SSxNQUFNLGNBQWMsR0FBRyxDQUFDLFdBQW1CLEVBQUUsRUFBRTtRQUM5QyxJQUFJLEdBQUcsQ0FBQyxXQUFXLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUM7WUFBRSxPQUFNO1FBQzVELEdBQUcsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLEdBQUcsV0FBVyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsYUFBYSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUN4RixDQUFDLENBQUE7SUFDRCxJQUFJLGNBQWMsQ0FBQTtJQUVsQixRQUFRLElBQUksRUFBRSxDQUFDO1FBQ2QsS0FBSyxNQUFNO1lBQ1YsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQzdCLEtBQUssTUFBTTtZQUNWLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQTtZQUMzQixtQkFBbUI7WUFDbkIsY0FBYyxHQUFHLE1BQU0s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
|
package/esm/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
export { getReq, getRes, setHtml, setNodeStream, setWebStream, setJson, setBuffer, setRedirect, setText } from './dx.js';
|
|
1
|
+
export { getReq, getRes, setHtml, setNodeStream, setWebStream, setJson, setBuffer, setRedirect, setText, setFile, makeDxContext, } from './dx.js';
|
|
2
2
|
import { dxServer } from './dx.js';
|
|
3
|
-
export { getJson, getRaw, getText, getUrlEncoded, getQuery, } from './body.js';
|
|
3
|
+
export { getBuffer, getJson, getRaw, getText, getUrlEncoded, getQuery, } from './body.js';
|
|
4
4
|
export { router } from './route.js';
|
|
5
5
|
export { connectMiddlewares } from './connect.js';
|
|
6
|
+
export { chainStatic } from './static.js';
|
|
6
7
|
export default dxServer;
|
package/esm/index.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
export { getReq, getRes, setHtml, setNodeStream, setWebStream, setJson, setBuffer, setRedirect, setText } from './dx.js';
|
|
1
|
+
export { getReq, getRes, setHtml, setNodeStream, setWebStream, setJson, setBuffer, setRedirect, setText, setFile, makeDxContext, } from './dx.js';
|
|
2
2
|
import { dxServer } from './dx.js';
|
|
3
|
-
export { getJson, getRaw, getText, getUrlEncoded, getQuery, } from './body.js';
|
|
3
|
+
export { getBuffer, getJson, getRaw, getText, getUrlEncoded, getQuery, } from './body.js';
|
|
4
4
|
export { router } from './route.js';
|
|
5
5
|
export { connectMiddlewares } from './connect.js';
|
|
6
|
+
export { chainStatic } from './static.js';
|
|
6
7
|
export default dxServer;
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLE1BQU0sRUFDTixNQUFNLEVBQ04sT0FBTyxFQUNQLGFBQWEsRUFDYixZQUFZLEVBQ1osT0FBTyxFQUNQLFNBQVMsRUFDVCxXQUFXLEVBQ1gsT0FBTyxFQUNQLE9BQU8sRUFDUCxhQUFhLEdBQ2IsTUFBTSxTQUFTLENBQUE7QUFDaEIsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFNBQVMsQ0FBQTtBQUNoQyxPQUFPLEVBQ04sU0FBUyxFQUNULE9BQU8sRUFDUCxNQUFNLEVBQ04sT0FBTyxFQUNQLGFBQWEsRUFDYixRQUFRLEdBQ1IsTUFBTSxXQUFXLENBQUE7QUFDbEIsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFlBQVksQ0FBQTtBQUNqQyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFDL0MsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGFBQWEsQ0FBQTtBQUV2QyxlQUFlLFFBQVEsQ0FBQSJ9
|
package/esm/route.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Key } from 'path-to-regexp';
|
|
2
|
+
import { Chainable } from './dx.js';
|
|
2
3
|
interface RegexpToPathOptions {
|
|
3
4
|
end?: boolean;
|
|
4
5
|
strict?: boolean;
|
|
@@ -13,9 +14,6 @@ export declare function matchPattern<Params extends Record<Key['name'], string>>
|
|
|
13
14
|
matched: any;
|
|
14
15
|
params: any;
|
|
15
16
|
} | undefined;
|
|
16
|
-
interface Chainable<P extends any[] = any[], R = any, Next = (...np: any[]) => any> {
|
|
17
|
-
(next: Next, ...p: P): R;
|
|
18
|
-
}
|
|
19
17
|
interface RouteContext {
|
|
20
18
|
matched: string;
|
|
21
19
|
next(): any;
|
package/esm/route.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { pathToRegexp } from 'path-to-regexp';
|
|
2
2
|
import { getReq } from './dx.js';
|
|
3
|
+
import { urlFromReq } from './bodyHelpers.js';
|
|
3
4
|
const cache = {};
|
|
4
5
|
const cacheLimit = 10000;
|
|
5
6
|
let cacheCount = 0;
|
|
@@ -52,7 +53,7 @@ export const router = {
|
|
|
52
53
|
if (req.method !== method.toUpperCase())
|
|
53
54
|
return next();
|
|
54
55
|
for (const [pattern, handler] of Object.entries(router)) {
|
|
55
|
-
const match = matchPattern(
|
|
56
|
+
const match = matchPattern(urlFromReq(req).pathname, `${prefix}${pattern}`, options);
|
|
56
57
|
if (match)
|
|
57
58
|
return handler({
|
|
58
59
|
...match,
|
|
@@ -66,7 +67,7 @@ export const router = {
|
|
|
66
67
|
return next => {
|
|
67
68
|
const req = getReq();
|
|
68
69
|
for (const [pattern, handler] of Object.entries(router)) {
|
|
69
|
-
const match = matchPattern(req.
|
|
70
|
+
const match = matchPattern(urlFromReq(req).pathname, `${prefix}${pattern}`, options);
|
|
70
71
|
if (match)
|
|
71
72
|
return handler({
|
|
72
73
|
...match,
|
|
@@ -79,4 +80,4 @@ export const router = {
|
|
|
79
80
|
};
|
|
80
81
|
for (const method of allMethods)
|
|
81
82
|
router[method] = router.method.bind(router, method);
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGdCQUFnQixDQUFBO0FBQzNDLE9BQU8sRUFBWSxNQUFNLEVBQUMsTUFBTSxTQUFTLENBQUE7QUFDekMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGtCQUFrQixDQUFBO0FBRTNDLE1BQU0sS0FBSyxHQUF3QixFQUFFLENBQUE7QUFDckMsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFBO0FBQ3hCLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQTtBQWNsQixTQUFTLFdBQVcsQ0FBQyxJQUFZLEVBQUUsT0FBNEI7SUFDOUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUN4QyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUE7SUFDM0QsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQUUsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUE7SUFFM0MsTUFBTSxJQUFJLEdBQVUsRUFBRSxDQUFBO0lBQ3RCLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ2hELE1BQU0sTUFBTSxHQUFHO1FBQ2QsTUFBTTtRQUNOLElBQUk7S0FDSixDQUFBO0lBRUQsSUFBSSxVQUFVLEdBQUcsVUFBVSxFQUFFLENBQUM7UUFDN0IsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQTtRQUN4QixVQUFVLEVBQUUsQ0FBQTtJQUNiLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQTtBQUNkLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUMzQixRQUFnQixFQUNoQixPQUFlLEVB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
|
package/esm/static.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
}): (next: () => any) => Promise<any>;
|
|
1
|
+
import { Chainable } from './dx.js';
|
|
2
|
+
import { SendOptions } from 'send';
|
|
3
|
+
export declare function chainStatic(prefix: string, options: SendOptions): Chainable;
|
package/esm/static.js
CHANGED
|
@@ -1,56 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { getReq, getRes } from './dx.js';
|
|
2
|
+
import { urlFromReq } from './bodyHelpers.js';
|
|
3
|
+
import { sendFile } from './staticHelpers.js';
|
|
4
|
+
export function chainStatic(prefix, options) {
|
|
5
|
+
return next => {
|
|
5
6
|
const req = getReq();
|
|
6
7
|
if (req.method !== 'GET' && req.method !== 'HEAD')
|
|
7
8
|
return next();
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
//
|
|
18
|
-
|
|
19
|
-
// add headers listener
|
|
20
|
-
if (setHeaders) {
|
|
21
|
-
stream.on('headers', setHeaders);
|
|
22
|
-
}
|
|
23
|
-
// add file listener for fallthrough
|
|
24
|
-
if (fallthrough) {
|
|
25
|
-
stream.on('file', function onFile() {
|
|
26
|
-
// once file is determined, always forward error
|
|
27
|
-
forwardError = true;
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
// forward errors
|
|
31
|
-
stream.on('error', function error(err) {
|
|
32
|
-
if (forwardError || !(err.statusCode < 500)) {
|
|
33
|
-
next(err);
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
next();
|
|
37
|
-
});
|
|
38
|
-
// pipe
|
|
39
|
-
stream.pipe(res);
|
|
9
|
+
if (!prefix.endsWith('/'))
|
|
10
|
+
prefix += '/';
|
|
11
|
+
if (!prefix.startsWith('/'))
|
|
12
|
+
prefix = '/' + prefix;
|
|
13
|
+
const { pathname } = urlFromReq(req);
|
|
14
|
+
if (!pathname.startsWith(prefix)
|
|
15
|
+
&& !pathname.endsWith('/')
|
|
16
|
+
&& pathname + '/' !== prefix)
|
|
17
|
+
return next();
|
|
18
|
+
return sendFile(req, getRes(), pathname.slice(prefix.length - 1), // keep the trailing slash
|
|
19
|
+
options, next);
|
|
40
20
|
};
|
|
41
21
|
}
|
|
42
|
-
|
|
43
|
-
* Collapse all leading slashes into a single slash
|
|
44
|
-
* @private
|
|
45
|
-
*/
|
|
46
|
-
function collapseLeadingSlashes(str) {
|
|
47
|
-
for (let i = 0; i < str.length; i++) {
|
|
48
|
-
if (str.charCodeAt(i) !== 0x2f /* / */) {
|
|
49
|
-
break;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
return i > 1
|
|
53
|
-
? '/' + str.slice(i)
|
|
54
|
-
: str;
|
|
55
|
-
}
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3N0YXRpYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjO0FBRWQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFNBQVMsQ0FBQTtBQUU5QixNQUFNLFVBQVUsZ0JBQWdCLENBQy9CLEVBQUMsSUFBSSxFQUdKO0lBRUQsT0FBTyxLQUFLLEVBQUUsSUFBZSxFQUFFLEVBQUU7UUFDaEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUE7UUFDcEIsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLEtBQUssSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLE1BQU07WUFBRSxPQUFPLElBQUksRUFBRSxDQUFBO1FBRWhFLElBQUksWUFBWSxHQUFHLENBQUMsV0FBVyxDQUFBO1FBQy9CLElBQUksV0FBVyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDeEMsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQTtRQUVqQyxxQ0FBcUM7UUFDckMsSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDN0QsSUFBSSxHQUFHLEVBQUUsQ0FBQTtRQUNWLENBQUM7UUFFRCxxQkFBcUI7UUFDckIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFFbEMsd0JBQXdCO1FBQ3hCLE1BQU0sQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFBO1FBRW5DLHVCQUF1QjtRQUN2QixJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFBO1FBQ2pDLENBQUM7UUFFRCxvQ0FBb0M7UUFDcEMsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNqQixNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxTQUFTLE1BQU07Z0JBQ2hDLGdEQUFnRDtnQkFDaEQsWUFBWSxHQUFHLElBQUksQ0FBQTtZQUNwQixDQUFDLENBQUMsQ0FBQTtRQUNILENBQUM7UUFFRCxpQkFBaUI7UUFDakIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxLQUFLLENBQUMsR0FBRztZQUNwQyxJQUFJLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM3QyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7Z0JBQ1QsT0FBTTtZQUNQLENBQUM7WUFFRCxJQUFJLEVBQUUsQ0FBQTtRQUNQLENBQUMsQ0FBQyxDQUFBO1FBRUYsT0FBTztRQUNQLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDakIsQ0FBQyxDQUFBO0FBQ0YsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsc0JBQXNCLENBQUUsR0FBVztJQUMzQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3JDLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDeEMsTUFBSztRQUNOLENBQUM7SUFDRixDQUFDO0lBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUNYLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDcEIsQ0FBQyxDQUFDLEdBQUcsQ0FBQTtBQUNQLENBQUMifQ==
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3N0YXRpYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVksTUFBTSxFQUFFLE1BQU0sRUFBQyxNQUFNLFNBQVMsQ0FBQTtBQUVqRCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDM0MsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLG9CQUFvQixDQUFBO0FBRTNDLE1BQU0sVUFBVSxXQUFXLENBQzFCLE1BQWMsRUFDZCxPQUFvQjtJQUVwQixPQUFPLElBQUksQ0FBQyxFQUFFO1FBQ2IsTUFBTSxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUE7UUFDcEIsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLEtBQUssSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLE1BQU07WUFBRSxPQUFPLElBQUksRUFBRSxDQUFBO1FBRWhFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztZQUFFLE1BQU0sSUFBSSxHQUFHLENBQUE7UUFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1lBQUUsTUFBTSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUE7UUFFbEQsTUFBTSxFQUFDLFFBQVEsRUFBQyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNsQyxJQUNDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7ZUFDekIsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztlQUN2QixRQUFRLEdBQUcsR0FBRyxLQUFLLE1BQU07WUFDM0IsT0FBTyxJQUFJLEVBQUUsQ0FBQTtRQUVmLE9BQU8sUUFBUSxDQUNkLEdBQUcsRUFDSCxNQUFNLEVBQUUsRUFDUixRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsMEJBQTBCO1FBQzdELE9BQU8sRUFDUCxJQUFJLENBQ0osQ0FBQTtJQUNGLENBQUMsQ0FBQTtBQUNGLENBQUMifQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
import { SendOptions } from 'send';
|
|
3
|
+
import { IncomingMessage, ServerResponse } from 'node:http';
|
|
4
|
+
export declare function sendFile(req: IncomingMessage, res: ServerResponse, pathname: string, // url encoded path, not plain path
|
|
5
|
+
options: SendOptions | undefined, next: () => any): Promise<void>;
|