dx-server 0.6.4 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/dxHelpers.js +2 -3
- package/cjs/router.js +3 -2
- package/cjs/static.d.ts +5 -1
- package/cjs/static.js +14 -13
- package/cjs/staticHelpers.js +2 -13
- package/esm/dxHelpers.js +2 -3
- package/esm/router.js +2 -2
- package/esm/static.d.ts +5 -1
- package/esm/static.js +14 -13
- package/esm/staticHelpers.js +2 -13
- package/package.json +2 -3
- package/cjs/router.d.ts +0 -44
- package/esm/router.d.ts +0 -44
package/cjs/dxHelpers.js
CHANGED
|
@@ -5,7 +5,6 @@ const node_stream_1 = require("node:stream");
|
|
|
5
5
|
const node_util_1 = require("node:util");
|
|
6
6
|
const etag_js_1 = require("./etag.js");
|
|
7
7
|
const staticHelpers_js_1 = require("./staticHelpers.js");
|
|
8
|
-
const dx_js_1 = require("./dx.js");
|
|
9
8
|
require("./polyfillWithResolvers.js");
|
|
10
9
|
async function writeRes(req, res, { type, data, charset, jsonBeautify, disableEtag, options }) {
|
|
11
10
|
const setContentType = (contentType) => {
|
|
@@ -45,7 +44,7 @@ async function writeRes(req, res, { type, data, charset, jsonBeautify, disableEt
|
|
|
45
44
|
bufferOrStream = Buffer.from('', charset);
|
|
46
45
|
break;
|
|
47
46
|
case 'file':
|
|
48
|
-
return (0, staticHelpers_js_1.sendFile)(req,
|
|
47
|
+
return (0, staticHelpers_js_1.sendFile)(req, res, encodeURI(data), options, () => void 0);
|
|
49
48
|
case undefined:
|
|
50
49
|
// skip response. Some middleware may handle it outside the chain. For example, express middleware
|
|
51
50
|
return;
|
|
@@ -114,4 +113,4 @@ async function writeRes(req, res, { type, data, charset, jsonBeautify, disableEt
|
|
|
114
113
|
}
|
|
115
114
|
}
|
|
116
115
|
exports.writeRes = writeRes;
|
|
117
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
116
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHhIZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2R4SGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSw2Q0FBb0M7QUFDcEMseUNBQW1DO0FBQ25DLHVDQUFnRDtBQUVoRCx5REFBMkM7QUFFM0Msc0NBQW1DO0FBK0M1QixLQUFLLFVBQVUsUUFBUSxDQUFDLEdBQW9CLEVBQUUsR0FBbUIsRUFBRSxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFZO0lBQzdJLE1BQU0sY0FBYyxHQUFHLENBQUMsV0FBbUIsRUFBRSxFQUFFO1FBQzlDLElBQUksR0FBRyxDQUFDLFdBQVcsSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQztZQUFFLE9BQU07UUFDNUQsR0FBRyxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsR0FBRyxXQUFXLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxhQUFhLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ3hGLENBQUMsQ0FBQTtJQUNELElBQUksY0FBYyxDQUFBO0lBRWxCLFFBQVEsSUFBSSxFQUFFLENBQUM7UUFDZCxLQUFLLE1BQU07WUFDVixjQUFjLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDN0IsS0FBSyxNQUFNO1lBQ1YsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1lBQzNCLG1CQUFtQjtZQUNuQixjQUFjLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBQ2pELE1BQUs7UUFDTixLQUFLLFFBQVE7WUFDWixjQUFjLENBQUMsMEJBQTBCLENBQUMsQ0FBQTtZQUMxQyxjQUFjLEdBQUcsSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBQ2pELE1BQUs7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
|
package/cjs/router.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.router = void 0;
|
|
3
|
+
exports.router = exports.matchPattern = void 0;
|
|
4
4
|
const dx_js_1 = require("./dx.js");
|
|
5
5
|
require("urlpattern-polyfill");
|
|
6
6
|
const bodyHelpers_js_1 = require("./bodyHelpers.js");
|
|
@@ -17,6 +17,7 @@ function matchPattern(pathname, pattern) {
|
|
|
17
17
|
params: matched.pathname.groups
|
|
18
18
|
};
|
|
19
19
|
}
|
|
20
|
+
exports.matchPattern = matchPattern;
|
|
20
21
|
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods
|
|
21
22
|
const allMethods = [
|
|
22
23
|
'get', 'head', 'post', 'put', 'delete', 'connect', 'options', 'trace', 'patch'
|
|
@@ -52,4 +53,4 @@ exports.router = {
|
|
|
52
53
|
};
|
|
53
54
|
for (const method of allMethods)
|
|
54
55
|
exports.router[method] = exports.router.method.bind(exports.router, method);
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3JvdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBeUM7QUFFekMsK0JBQTRCO0FBQzVCLHFEQUEyQztBQU8zQyxxQkFBcUI7QUFDckIsZ0VBQWdFO0FBQ2hFLDBFQUEwRTtBQUMxRSwyRUFBMkU7QUFDM0UsU0FBZ0IsWUFBWSxDQUMzQixRQUFnQixFQUNoQixPQUFlO0lBR2YsTUFBTSxPQUFPLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBQyxRQUFRLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBQyxRQUFRLEVBQUMsQ0FBQyxDQUFBO0lBQ3BFLElBQUksQ0FBQyxPQUFPO1FBQUUsT0FBTTtJQUVwQixPQUFPO1FBQ04sT0FBTztRQUNQLE1BQU0sRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQWdCO0tBQ3pDLENBQUE7QUFDRixDQUFDO0FBWkQsb0NBWUM7QUFjRCw0REFBNEQ7QUFDNUQsTUFBTSxVQUFVLEdBQUc7SUFDbEIsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPO0NBQ3JFLENBQUE7QUErQlYsU0FBUyxVQUFVLENBQ2xCLE1BQTBCLEVBQUUsNkJBQTZCO0FBQ3pELE1BQXlDLEVBQ3pDLEVBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRSxHQUFHLE9BQU8sS0FBbUIsRUFBRTtJQUU3QyxPQUFPLElBQUksQ0FBQyxFQUFFO1FBQ2IsTUFBTSxHQUFHLEdBQUcsSUFBQSxjQUFNLEdBQUUsQ0FBQTtRQUNwQixJQUFJLE1BQU0sS0FBSyxTQUFTLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsV0FBVyxFQUFFO1lBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQTtRQUM5RSxLQUFLLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksTUFBTSxFQUFFLENBQUM7WUFDekMsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLElBQUEsMkJBQVUsRUFBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxNQUFNLEdBQUcsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDcEYsSUFBSSxLQUFLO2dCQUFFLE9BQU8sT0FBTyxDQUFDO29CQUN6QixHQUFHLEtBQUs7b0JBQ1IsSUFBSTtpQkFDSixDQUFDLENBQUE7UUFDSCxDQUFDO1FBQ0QsT0FBTyxJQUFJLEVBQUUsQ0FBQTtJQUNkLENBQUMsQ0FBQTtBQUNGLENBQUM7QUFDWSxRQUFBLE1BQU0sR0FBVztJQUM3QixNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsTUFBTTtRQUN2QixPQUFPLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVE7WUFDbkMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6RCxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzVELENBQUM7SUFDRCxHQUFHLENBQUMsR0FBRyxNQUFNO1FBQ1osT0FBTyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRO1lBQ25DLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUQsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUMvRCxDQUFDO0NBQ0QsQ0FBQTtBQUVELEtBQUssTUFBTSxNQUFNLElBQUksVUFBVTtJQUFFLGNBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxjQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFNLEVBQUUsTUFBTSxDQUFDLENBQUEifQ==
|
package/cjs/static.d.ts
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
1
2
|
import { Chainable } from './dx.js';
|
|
2
3
|
import { SendOptions } from 'send';
|
|
3
|
-
|
|
4
|
+
import { IncomingMessage } from 'node:http';
|
|
5
|
+
export declare function chainStatic(pattern: string, { getPathname, ...options }: SendOptions & {
|
|
6
|
+
getPathname?: (req: IncomingMessage) => string;
|
|
7
|
+
}): Chainable;
|
package/cjs/static.js
CHANGED
|
@@ -4,23 +4,24 @@ exports.chainStatic = void 0;
|
|
|
4
4
|
const dx_js_1 = require("./dx.js");
|
|
5
5
|
const bodyHelpers_js_1 = require("./bodyHelpers.js");
|
|
6
6
|
const staticHelpers_js_1 = require("./staticHelpers.js");
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
const router_js_1 = require("./router.js");
|
|
8
|
+
function chainStatic(pattern, { getPathname, ...options }) {
|
|
9
|
+
return async (next) => {
|
|
9
10
|
const req = (0, dx_js_1.getReq)();
|
|
10
11
|
if (req.method !== 'GET' && req.method !== 'HEAD')
|
|
11
12
|
return next();
|
|
12
|
-
|
|
13
|
-
|
|
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)
|
|
13
|
+
const match = (0, router_js_1.matchPattern)((0, bodyHelpers_js_1.urlFromReq)(req).pathname, pattern);
|
|
14
|
+
if (!match)
|
|
20
15
|
return next();
|
|
21
|
-
|
|
22
|
-
|
|
16
|
+
try {
|
|
17
|
+
await (0, staticHelpers_js_1.sendFile)(req, (0, dx_js_1.getRes)(), getPathname?.(req) ?? (0, bodyHelpers_js_1.urlFromReq)(req).pathname, options, next);
|
|
18
|
+
}
|
|
19
|
+
catch (err) {
|
|
20
|
+
return next(err);
|
|
21
|
+
// if (err.code === 'ENOENT') return next()
|
|
22
|
+
// throw err
|
|
23
|
+
}
|
|
23
24
|
};
|
|
24
25
|
}
|
|
25
26
|
exports.chainStatic = chainStatic;
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3N0YXRpYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBaUQ7QUFFakQscURBQTJDO0FBQzNDLHlEQUEyQztBQUMzQywyQ0FBd0M7QUFHeEMsU0FBZ0IsV0FBVyxDQUMxQixPQUFlLEVBQ2YsRUFBQyxXQUFXLEVBQUUsR0FBRyxPQUFPLEVBR3ZCO0lBRUQsT0FBTyxLQUFLLEVBQUMsSUFBSSxFQUFDLEVBQUU7UUFDbkIsTUFBTSxHQUFHLEdBQUcsSUFBQSxjQUFNLEdBQUUsQ0FBQTtRQUNwQixJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssS0FBSyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssTUFBTTtZQUFFLE9BQU8sSUFBSSxFQUFFLENBQUE7UUFFaEUsTUFBTSxLQUFLLEdBQUcsSUFBQSx3QkFBWSxFQUFDLElBQUEsMkJBQVUsRUFBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDN0QsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLElBQUksRUFBRSxDQUFBO1FBRXpCLElBQUksQ0FBQztZQUNKLE1BQU0sSUFBQSwyQkFBUSxFQUNkLEdBQUcsRUFDSCxJQUFBLGNBQU0sR0FBRSxFQUNSLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUEsMkJBQVUsRUFBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQzlDLE9BQU8sRUFDUCxJQUFJLENBQ0osQ0FBQTtRQUNELENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDaEIsMkNBQTJDO1lBQzNDLFlBQVk7UUFDYixDQUFDO0lBQ0YsQ0FBQyxDQUFBO0FBQ0YsQ0FBQztBQTVCRCxrQ0E0QkMifQ==
|
package/cjs/staticHelpers.js
CHANGED
|
@@ -10,21 +10,10 @@ function sendFile(req, res, pathname, // url encoded path, not plain path
|
|
|
10
10
|
options, next) {
|
|
11
11
|
const defer = Promise.withResolvers();
|
|
12
12
|
(0, send_1.default)(req, pathname, options)
|
|
13
|
-
.on('error',
|
|
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
|
-
})
|
|
13
|
+
.on('error', e => defer.reject(e))
|
|
25
14
|
.on('end', () => defer.resolve())
|
|
26
15
|
.pipe(res);
|
|
27
16
|
return defer.promise;
|
|
28
17
|
}
|
|
29
18
|
exports.sendFile = sendFile;
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljSGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zdGF0aWNIZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGdEQUFzQztBQUV0QyxzQ0FBbUM7QUFFbkMsU0FBZ0IsUUFBUSxDQUN2QixHQUFvQixFQUNwQixHQUFtQixFQUNuQixRQUFnQixFQUFFLG1DQUFtQztBQUNyRCxPQUFnQyxFQUNoQyxJQUFlO0lBRWYsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFBO0lBQ3JDLElBQUEsY0FBSSxFQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDO1NBQzFCLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2pDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUVYLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQTtBQUNyQixDQUFDO0FBZEQsNEJBY0MifQ==
|
package/esm/dxHelpers.js
CHANGED
|
@@ -2,7 +2,6 @@ import { Readable } from 'node:stream';
|
|
|
2
2
|
import { promisify } from 'node:util';
|
|
3
3
|
import { entityTag, isFreshETag } from './etag.js';
|
|
4
4
|
import { sendFile } from './staticHelpers.js';
|
|
5
|
-
import { getRes } from './dx.js';
|
|
6
5
|
import './polyfillWithResolvers.js';
|
|
7
6
|
export async function writeRes(req, res, { type, data, charset, jsonBeautify, disableEtag, options }) {
|
|
8
7
|
const setContentType = (contentType) => {
|
|
@@ -42,7 +41,7 @@ export async function writeRes(req, res, { type, data, charset, jsonBeautify, di
|
|
|
42
41
|
bufferOrStream = Buffer.from('', charset);
|
|
43
42
|
break;
|
|
44
43
|
case 'file':
|
|
45
|
-
return sendFile(req,
|
|
44
|
+
return sendFile(req, res, encodeURI(data), options, () => void 0);
|
|
46
45
|
case undefined:
|
|
47
46
|
// skip response. Some middleware may handle it outside the chain. For example, express middleware
|
|
48
47
|
return;
|
|
@@ -110,4 +109,4 @@ export async function writeRes(req, res, { type, data, charset, jsonBeautify, di
|
|
|
110
109
|
await promisify(res.end.bind(res))(undefined); // some express middleware, such as express-session, requires explicitly passing chunk
|
|
111
110
|
}
|
|
112
111
|
}
|
|
113
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
112
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHhIZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2R4SGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sYUFBYSxDQUFBO0FBQ3BDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxXQUFXLENBQUE7QUFDbkMsT0FBTyxFQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUMsTUFBTSxXQUFXLENBQUE7QUFFaEQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLG9CQUFvQixDQUFBO0FBRTNDLE9BQU8sNEJBQTRCLENBQUE7QUErQ25DLE1BQU0sQ0FBQyxLQUFLLFVBQVUsUUFBUSxDQUFDLEdBQW9CLEVBQUUsR0FBbUIsRUFBRSxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFZO0lBQzdJLE1BQU0sY0FBYyxHQUFHLENBQUMsV0FBbUIsRUFBRSxFQUFFO1FBQzlDLElBQUksR0FBRyxDQUFDLFdBQVcsSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQztZQUFFLE9BQU07UUFDNUQsR0FBRyxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsR0FBRyxXQUFXLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxhQUFhLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ3hGLENBQUMsQ0FBQTtJQUNELElBQUksY0FBYyxDQUFBO0lBRWxCLFFBQVEsSUFBSSxFQUFFLENBQUM7UUFDZCxLQUFLLE1BQU07WUFDVixjQUFjLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDN0IsS0FBSyxNQUFNO1lBQ1YsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1lBQzNCLG1CQUFtQjtZQUNuQixjQUFjLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFB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
|
package/esm/router.js
CHANGED
|
@@ -5,7 +5,7 @@ import { urlFromReq } from './bodyHelpers.js';
|
|
|
5
5
|
// '/' matches both https://example.com and https://example.com/
|
|
6
6
|
// '/foo' matches https://example.com/foo but not https://example.com/foo/
|
|
7
7
|
// '/foo/' matches https://example.com/foo/ but not https://example.com/foo
|
|
8
|
-
function matchPattern(pathname, pattern) {
|
|
8
|
+
export function matchPattern(pathname, pattern) {
|
|
9
9
|
const matched = new URLPattern({ pathname: pattern }).exec({ pathname });
|
|
10
10
|
if (!matched)
|
|
11
11
|
return;
|
|
@@ -49,4 +49,4 @@ export const router = {
|
|
|
49
49
|
};
|
|
50
50
|
for (const method of allMethods)
|
|
51
51
|
router[method] = router.method.bind(router, method);
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3JvdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVksTUFBTSxFQUFDLE1BQU0sU0FBUyxDQUFBO0FBRXpDLE9BQU8scUJBQXFCLENBQUE7QUFDNUIsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGtCQUFrQixDQUFBO0FBTzNDLHFCQUFxQjtBQUNyQixnRUFBZ0U7QUFDaEUsMEVBQTBFO0FBQzFFLDJFQUEyRTtBQUMzRSxNQUFNLFVBQVUsWUFBWSxDQUMzQixRQUFnQixFQUNoQixPQUFlO0lBR2YsTUFBTSxPQUFPLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBQyxRQUFRLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBQyxRQUFRLEVBQUMsQ0FBQyxDQUFBO0lBQ3BFLElBQUksQ0FBQyxPQUFPO1FBQUUsT0FBTTtJQUVwQixPQUFPO1FBQ04sT0FBTztRQUNQLE1BQU0sRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQWdCO0tBQ3pDLENBQUE7QUFDRixDQUFDO0FBY0QsNERBQTREO0FBQzVELE1BQU0sVUFBVSxHQUFHO0lBQ2xCLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTztDQUNyRSxDQUFBO0FBK0JWLFNBQVMsVUFBVSxDQUNsQixNQUEwQixFQUFFLDZCQUE2QjtBQUN6RCxNQUF5QyxFQUN6QyxFQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUUsR0FBRyxPQUFPLEtBQW1CLEVBQUU7SUFFN0MsT0FBTyxJQUFJLENBQUMsRUFBRTtRQUNiLE1BQU0sR0FBRyxHQUFHLE1BQU0sRUFBRSxDQUFBO1FBQ3BCLElBQUksTUFBTSxLQUFLLFNBQVMsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxXQUFXLEVBQUU7WUFBRSxPQUFPLElBQUksRUFBRSxDQUFBO1FBQzlFLEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUN6QyxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLE1BQU0sR0FBRyxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQTtZQUNwRixJQUFJLEtBQUs7Z0JBQUUsT0FBTyxPQUFPLENBQUM7b0JBQ3pCLEdBQUcsS0FBSztvQkFDUixJQUFJO2lCQUNKLENBQUMsQ0FBQTtRQUNILENBQUM7UUFDRCxPQUFPLElBQUksRUFBRSxDQUFBO0lBQ2QsQ0FBQyxDQUFBO0FBQ0YsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBVztJQUM3QixNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsTUFBTTtRQUN2QixPQUFPLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVE7WUFDbkMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6RCxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzVELENBQUM7SUFDRCxHQUFHLENBQUMsR0FBRyxNQUFNO1FBQ1osT0FBTyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRO1lBQ25DLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUQsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUMvRCxDQUFDO0NBQ0QsQ0FBQTtBQUVELEtBQUssTUFBTSxNQUFNLElBQUksVUFBVTtJQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUEifQ==
|
package/esm/static.d.ts
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
1
2
|
import { Chainable } from './dx.js';
|
|
2
3
|
import { SendOptions } from 'send';
|
|
3
|
-
|
|
4
|
+
import { IncomingMessage } from 'node:http';
|
|
5
|
+
export declare function chainStatic(pattern: string, { getPathname, ...options }: SendOptions & {
|
|
6
|
+
getPathname?: (req: IncomingMessage) => string;
|
|
7
|
+
}): Chainable;
|
package/esm/static.js
CHANGED
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
import { getReq, getRes } from './dx.js';
|
|
2
2
|
import { urlFromReq } from './bodyHelpers.js';
|
|
3
3
|
import { sendFile } from './staticHelpers.js';
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
import { matchPattern } from './router.js';
|
|
5
|
+
export function chainStatic(pattern, { getPathname, ...options }) {
|
|
6
|
+
return async (next) => {
|
|
6
7
|
const req = getReq();
|
|
7
8
|
if (req.method !== 'GET' && req.method !== 'HEAD')
|
|
8
9
|
return next();
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
if (!prefix.startsWith('/'))
|
|
12
|
-
prefix = '/' + prefix;
|
|
13
|
-
const { pathname } = urlFromReq(req);
|
|
14
|
-
if (!pathname.startsWith(prefix)
|
|
15
|
-
&& !pathname.endsWith('/')
|
|
16
|
-
&& pathname + '/' !== prefix)
|
|
10
|
+
const match = matchPattern(urlFromReq(req).pathname, pattern);
|
|
11
|
+
if (!match)
|
|
17
12
|
return next();
|
|
18
|
-
|
|
19
|
-
|
|
13
|
+
try {
|
|
14
|
+
await sendFile(req, getRes(), getPathname?.(req) ?? urlFromReq(req).pathname, options, next);
|
|
15
|
+
}
|
|
16
|
+
catch (err) {
|
|
17
|
+
return next(err);
|
|
18
|
+
// if (err.code === 'ENOENT') return next()
|
|
19
|
+
// throw err
|
|
20
|
+
}
|
|
20
21
|
};
|
|
21
22
|
}
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3N0YXRpYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVksTUFBTSxFQUFFLE1BQU0sRUFBQyxNQUFNLFNBQVMsQ0FBQTtBQUVqRCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDM0MsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLG9CQUFvQixDQUFBO0FBQzNDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxhQUFhLENBQUE7QUFHeEMsTUFBTSxVQUFVLFdBQVcsQ0FDMUIsT0FBZSxFQUNmLEVBQUMsV0FBVyxFQUFFLEdBQUcsT0FBTyxFQUd2QjtJQUVELE9BQU8sS0FBSyxFQUFDLElBQUksRUFBQyxFQUFFO1FBQ25CLE1BQU0sR0FBRyxHQUFHLE1BQU0sRUFBRSxDQUFBO1FBQ3BCLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxLQUFLLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxNQUFNO1lBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQTtRQUVoRSxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUM3RCxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sSUFBSSxFQUFFLENBQUE7UUFFekIsSUFBSSxDQUFDO1lBQ0osTUFBTSxRQUFRLENBQ2QsR0FBRyxFQUNILE1BQU0sRUFBRSxFQUNSLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQzlDLE9BQU8sRUFDUCxJQUFJLENBQ0osQ0FBQTtRQUNELENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDaEIsMkNBQTJDO1lBQzNDLFlBQVk7UUFDYixDQUFDO0lBQ0YsQ0FBQyxDQUFBO0FBQ0YsQ0FBQyJ9
|
package/esm/staticHelpers.js
CHANGED
|
@@ -4,20 +4,9 @@ export function sendFile(req, res, pathname, // url encoded path, not plain path
|
|
|
4
4
|
options, next) {
|
|
5
5
|
const defer = Promise.withResolvers();
|
|
6
6
|
send(req, pathname, options)
|
|
7
|
-
.on('error',
|
|
8
|
-
if (err.code !== 'ENOENT')
|
|
9
|
-
defer.reject(err);
|
|
10
|
-
else {
|
|
11
|
-
try {
|
|
12
|
-
defer.resolve(next());
|
|
13
|
-
}
|
|
14
|
-
catch (e) {
|
|
15
|
-
defer.reject(e);
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
})
|
|
7
|
+
.on('error', e => defer.reject(e))
|
|
19
8
|
.on('end', () => defer.resolve())
|
|
20
9
|
.pipe(res);
|
|
21
10
|
return defer.promise;
|
|
22
11
|
}
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljSGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zdGF0aWNIZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBbUIsTUFBTSxNQUFNLENBQUE7QUFFdEMsT0FBTyw0QkFBNEIsQ0FBQTtBQUVuQyxNQUFNLFVBQVUsUUFBUSxDQUN2QixHQUFvQixFQUNwQixHQUFtQixFQUNuQixRQUFnQixFQUFFLG1DQUFtQztBQUNyRCxPQUFnQyxFQUNoQyxJQUFlO0lBRWYsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFBO0lBQ3JDLElBQUksQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQztTQUMxQixFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNqQyxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNoQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7SUFFWCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUE7QUFDckIsQ0FBQyJ9
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dx-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"main": "./cjs/index.js",
|
|
5
5
|
"homepage": "https://github.com/tranvansang/dx-server",
|
|
6
6
|
"repository": "https://github.com/tranvansang/dx-server",
|
|
@@ -36,6 +36,5 @@
|
|
|
36
36
|
"dependencies": {
|
|
37
37
|
"send": "^0.18.0",
|
|
38
38
|
"urlpattern-polyfill": "^10.0.0"
|
|
39
|
-
}
|
|
40
|
-
"packageManager": "yarn@1.22.19+sha1.4ba7fc5c6e704fce2066ecbfb0b0d8976fe62447"
|
|
39
|
+
}
|
|
41
40
|
}
|
package/cjs/router.d.ts
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { Chainable } from './dx.js';
|
|
2
|
-
import 'urlpattern-polyfill';
|
|
3
|
-
interface URLPatternOptions {
|
|
4
|
-
}
|
|
5
|
-
interface RouteContext {
|
|
6
|
-
matched: URLPatternResult;
|
|
7
|
-
params: Record<string, string>;
|
|
8
|
-
next(): any;
|
|
9
|
-
}
|
|
10
|
-
interface Route {
|
|
11
|
-
(context: RouteContext): any;
|
|
12
|
-
}
|
|
13
|
-
interface Routes {
|
|
14
|
-
[k: string]: Route;
|
|
15
|
-
}
|
|
16
|
-
interface RouterOptions extends URLPatternOptions {
|
|
17
|
-
prefix?: string;
|
|
18
|
-
}
|
|
19
|
-
type Router = {
|
|
20
|
-
patch(routes: Routes, options?: RouterOptions): Chainable;
|
|
21
|
-
patch(pattern: string, route: Route, options?: RouterOptions): Chainable;
|
|
22
|
-
trace(routes: Routes, options?: RouterOptions): Chainable;
|
|
23
|
-
trace(pattern: string, route: Route, options?: RouterOptions): Chainable;
|
|
24
|
-
options(routes: Routes, options?: RouterOptions): Chainable;
|
|
25
|
-
options(pattern: string, route: Route, options?: RouterOptions): Chainable;
|
|
26
|
-
connect(routes: Routes, options?: RouterOptions): Chainable;
|
|
27
|
-
connect(pattern: string, route: Route, options?: RouterOptions): Chainable;
|
|
28
|
-
delete(routes: Routes, options?: RouterOptions): Chainable;
|
|
29
|
-
delete(pattern: string, route: Route, options?: RouterOptions): Chainable;
|
|
30
|
-
put(routes: Routes, options?: RouterOptions): Chainable;
|
|
31
|
-
put(pattern: string, route: Route, options?: RouterOptions): Chainable;
|
|
32
|
-
post(routes: Routes, options?: RouterOptions): Chainable;
|
|
33
|
-
post(pattern: string, route: Route, options?: RouterOptions): Chainable;
|
|
34
|
-
head(routes: Routes, options?: RouterOptions): Chainable;
|
|
35
|
-
head(pattern: string, route: Route, options?: RouterOptions): Chainable;
|
|
36
|
-
get(routes: Routes, options?: RouterOptions): Chainable;
|
|
37
|
-
get(pattern: string, route: Route, options?: RouterOptions): Chainable;
|
|
38
|
-
all(routes: Routes, options?: RouterOptions): Chainable;
|
|
39
|
-
all(pattern: string, route: Route, options?: RouterOptions): Chainable;
|
|
40
|
-
method(method: string, routes: Routes, options?: RouterOptions): Chainable;
|
|
41
|
-
method(method: string, pattern: string, route: Route, options?: RouterOptions): Chainable;
|
|
42
|
-
};
|
|
43
|
-
export declare const router: Router;
|
|
44
|
-
export {};
|
package/esm/router.d.ts
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { Chainable } from './dx.js';
|
|
2
|
-
import 'urlpattern-polyfill';
|
|
3
|
-
interface URLPatternOptions {
|
|
4
|
-
}
|
|
5
|
-
interface RouteContext {
|
|
6
|
-
matched: URLPatternResult;
|
|
7
|
-
params: Record<string, string>;
|
|
8
|
-
next(): any;
|
|
9
|
-
}
|
|
10
|
-
interface Route {
|
|
11
|
-
(context: RouteContext): any;
|
|
12
|
-
}
|
|
13
|
-
interface Routes {
|
|
14
|
-
[k: string]: Route;
|
|
15
|
-
}
|
|
16
|
-
interface RouterOptions extends URLPatternOptions {
|
|
17
|
-
prefix?: string;
|
|
18
|
-
}
|
|
19
|
-
type Router = {
|
|
20
|
-
patch(routes: Routes, options?: RouterOptions): Chainable;
|
|
21
|
-
patch(pattern: string, route: Route, options?: RouterOptions): Chainable;
|
|
22
|
-
trace(routes: Routes, options?: RouterOptions): Chainable;
|
|
23
|
-
trace(pattern: string, route: Route, options?: RouterOptions): Chainable;
|
|
24
|
-
options(routes: Routes, options?: RouterOptions): Chainable;
|
|
25
|
-
options(pattern: string, route: Route, options?: RouterOptions): Chainable;
|
|
26
|
-
connect(routes: Routes, options?: RouterOptions): Chainable;
|
|
27
|
-
connect(pattern: string, route: Route, options?: RouterOptions): Chainable;
|
|
28
|
-
delete(routes: Routes, options?: RouterOptions): Chainable;
|
|
29
|
-
delete(pattern: string, route: Route, options?: RouterOptions): Chainable;
|
|
30
|
-
put(routes: Routes, options?: RouterOptions): Chainable;
|
|
31
|
-
put(pattern: string, route: Route, options?: RouterOptions): Chainable;
|
|
32
|
-
post(routes: Routes, options?: RouterOptions): Chainable;
|
|
33
|
-
post(pattern: string, route: Route, options?: RouterOptions): Chainable;
|
|
34
|
-
head(routes: Routes, options?: RouterOptions): Chainable;
|
|
35
|
-
head(pattern: string, route: Route, options?: RouterOptions): Chainable;
|
|
36
|
-
get(routes: Routes, options?: RouterOptions): Chainable;
|
|
37
|
-
get(pattern: string, route: Route, options?: RouterOptions): Chainable;
|
|
38
|
-
all(routes: Routes, options?: RouterOptions): Chainable;
|
|
39
|
-
all(pattern: string, route: Route, options?: RouterOptions): Chainable;
|
|
40
|
-
method(method: string, routes: Routes, options?: RouterOptions): Chainable;
|
|
41
|
-
method(method: string, pattern: string, route: Route, options?: RouterOptions): Chainable;
|
|
42
|
-
};
|
|
43
|
-
export declare const router: Router;
|
|
44
|
-
export {};
|