dx-server 0.5.10 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -16
- package/cjs/body.js +1 -1
- package/cjs/bodyHelpers.d.ts +2 -2
- package/cjs/bodyHelpers.js +6 -11
- package/cjs/router.d.ts +5 -16
- package/cjs/router.js +11 -40
- package/esm/body.js +1 -1
- package/esm/bodyHelpers.d.ts +2 -2
- package/esm/bodyHelpers.js +6 -8
- package/esm/router.d.ts +5 -16
- package/esm/router.js +11 -39
- package/package.json +4 -7
package/README.md
CHANGED
|
@@ -119,7 +119,7 @@ const serverChain = chain(
|
|
|
119
119
|
app.use('/public', express.static('public'))
|
|
120
120
|
}),
|
|
121
121
|
authContext.chain(), // chain context will set the context value to authContext.value in every request
|
|
122
|
-
router.post('/api', async ({next}) => {// example of catching error for all /api/* routes
|
|
122
|
+
router.post('/api/*', async ({next}) => {// example of catching error for all /api/* routes
|
|
123
123
|
try {
|
|
124
124
|
await next()
|
|
125
125
|
} catch (e) {
|
|
@@ -135,7 +135,7 @@ const serverChain = chain(
|
|
|
135
135
|
}, {status: 500})
|
|
136
136
|
}
|
|
137
137
|
}
|
|
138
|
-
}
|
|
138
|
+
}),
|
|
139
139
|
router.post({
|
|
140
140
|
'/api/sample-public-api'() { // sample POST router
|
|
141
141
|
setJson({name: 'joe'})
|
|
@@ -289,27 +289,25 @@ import {router} from 'dx-server'
|
|
|
289
289
|
|
|
290
290
|
`RouterOptions` is defined as follows:
|
|
291
291
|
```typescript
|
|
292
|
-
interface
|
|
293
|
-
end?: boolean // default true. match till end of string
|
|
294
|
-
strict?: boolean // default false. disallow trailing delimiter
|
|
295
|
-
sensitive?: boolean // default false
|
|
296
|
-
start?: boolean // default true. match from beginning of string
|
|
297
|
-
|
|
298
|
-
delimiter?: string // default '/#?'. delimiter for segments
|
|
299
|
-
endsWith?: string // default undefined. optional character that matches at the end of the string
|
|
300
|
-
encode?(value: string): string // default x => x. encode strings before inserting into RegExp
|
|
301
|
-
prefixes?: string // default `./`. List of characters to automatically consider prefixes when parsing.
|
|
302
|
-
}
|
|
303
|
-
interface RouterOptions extends RegexpToPathOptions {
|
|
292
|
+
interface RouterOptions {
|
|
304
293
|
prefix?: string
|
|
294
|
+
sensitive?: string
|
|
305
295
|
}
|
|
306
296
|
```
|
|
307
|
-
|
|
297
|
+
|
|
298
|
+
Patterns are matched using [URLPattern](https://developer.mozilla.org/en-US/docs/Web/API/URLPattern).
|
|
299
|
+
This does not always match the same as ExpressJS.
|
|
300
|
+
For example, to match any path prefixed with `/api/`, use `/api/*`.
|
|
301
|
+
Note the following:
|
|
302
|
+
- `''` matches nothing.
|
|
303
|
+
- `'/'` matches both https://example.com and https://example.com/.
|
|
304
|
+
- `'/foo'` matches https://example.com/foo but not https://example.com/foo/.
|
|
305
|
+
- `'/foo/'` matches https://example.com/foo/ but not https://example.com/foo.
|
|
308
306
|
|
|
309
307
|
`Route` is defined as follows:
|
|
310
308
|
```typescript
|
|
311
309
|
interface RouteContext {
|
|
312
|
-
matched:
|
|
310
|
+
matched: URLPatternResult // result returned from URLPattern.exec()
|
|
313
311
|
params: Record<string, string>
|
|
314
312
|
next(): any
|
|
315
313
|
}
|
package/cjs/body.js
CHANGED
|
@@ -11,4 +11,4 @@ exports.getUrlEncoded = (0, dx_js_1.makeDxContext)((options) => (0, bodyHelpers_
|
|
|
11
11
|
exports.getQuery = (0, dx_js_1.makeDxContext)((options) => (0, bodyHelpers_js_1.queryFromReq)((0, dx_js_1.getReq)(), options));
|
|
12
12
|
// to getFile use busboy
|
|
13
13
|
// https://github.com/mscdex/busboy
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9keS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9ib2R5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUE2QztBQUM3QyxxREFReUI7QUFFWixRQUFBLFNBQVMsR0FBRyxJQUFBLHFCQUFhLEVBQUMsQ0FBQyxPQUFvQyxFQUFFLEVBQUUsQ0FBQyxJQUFBLDhCQUFhLEVBQUMsSUFBQSxjQUFNLEdBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFBO0FBQ3JHLFFBQUEsT0FBTyxHQUFHLElBQUEscUJBQWEsRUFBQyxDQUFDLE9BQW9DLEVBQUUsRUFBRSxDQUFDLElBQUEsNEJBQVcsRUFBQyxJQUFBLGNBQU0sR0FBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUE7QUFDakcsUUFBQSxNQUFNLEdBQUcsSUFBQSxxQkFBYSxFQUFDLENBQUMsT0FBb0MsRUFBRSxFQUFFLENBQUMsSUFBQSwyQkFBVSxFQUFDLElBQUEsY0FBTSxHQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQTtBQUMvRixRQUFBLE9BQU8sR0FBRyxJQUFBLHFCQUFhLEVBQUMsQ0FBQyxPQUFvQyxFQUFFLEVBQUUsQ0FBQyxJQUFBLDRCQUFXLEVBQUMsSUFBQSxjQUFNLEdBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFBO0FBQ2pHLFFBQUEsYUFBYSxHQUFHLElBQUEscUJBQWEsRUFBQyxDQUFDLE9BQW9DLEVBQUUsRUFBRSxDQUFDLElBQUEsa0NBQWlCLEVBQUMsSUFBQSxjQUFNLEdBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFBO0FBQzdHLFFBQUEsUUFBUSxHQUFHLElBQUEscUJBQWEsRUFBQyxDQUFDLE9BQW9DLEVBQUUsRUFBRSxDQUFDLElBQUEsNkJBQVksRUFBQyxJQUFBLGNBQU0sR0FBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUE7QUFFaEgsd0JBQXdCO0FBQ3hCLG1DQUFtQyJ9
|
package/cjs/bodyHelpers.d.ts
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
import { IncomingMessage } from 'node:http';
|
|
4
4
|
export interface BufferBodyOptions {
|
|
5
5
|
bodyLimit: number;
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
urlEncodedParser?(search: string): any;
|
|
7
|
+
queryParser?(search: string): any;
|
|
8
8
|
}
|
|
9
9
|
export declare function setBufferBodyDefaultOptions(options: Partial<BufferBodyOptions>): void;
|
|
10
10
|
export declare function bufferFromReq(req: IncomingMessage, options?: Partial<BufferBodyOptions>): Promise<Buffer | undefined>;
|
package/cjs/bodyHelpers.js
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.queryFromReq = exports.urlFromReq = exports.urlEncodedFromReq = exports.textFromReq = exports.rawFromReq = exports.jsonFromReq = exports.bufferFromReq = exports.setBufferBodyDefaultOptions = void 0;
|
|
7
4
|
const stream_js_1 = require("./stream.js");
|
|
8
5
|
const contentType_js_1 = require("./contentType.js");
|
|
9
|
-
|
|
6
|
+
function defaultQueryParser(search) {
|
|
7
|
+
return Object.fromEntries(new URLSearchParams(search)); // support both leading ? and not
|
|
8
|
+
}
|
|
10
9
|
let bodyDefaultOptions = { bodyLimit: 100 << 10 }; // 100kb
|
|
11
10
|
function setBufferBodyDefaultOptions(options) {
|
|
12
11
|
bodyDefaultOptions = { ...bodyDefaultOptions, ...options };
|
|
@@ -87,9 +86,7 @@ async function urlEncodedFromReq(req, options) {
|
|
|
87
86
|
return;
|
|
88
87
|
const buffer = await bufferFromReq(req, options);
|
|
89
88
|
if (buffer) {
|
|
90
|
-
|
|
91
|
-
const { simplifyUrlEncodedBody } = { ...bodyDefaultOptions, ...options };
|
|
92
|
-
return simplifyUrlEncodedBody ? Object.fromEntries(new URLSearchParams(str)) : qs_1.default.parse(str);
|
|
89
|
+
return (bodyDefaultOptions.urlEncodedParser ?? options?.urlEncodedParser ?? defaultQueryParser)(buffer.toString(charset));
|
|
93
90
|
}
|
|
94
91
|
}
|
|
95
92
|
exports.urlEncodedFromReq = urlEncodedFromReq;
|
|
@@ -98,9 +95,7 @@ function urlFromReq(req) {
|
|
|
98
95
|
}
|
|
99
96
|
exports.urlFromReq = urlFromReq;
|
|
100
97
|
function queryFromReq(req, options) {
|
|
101
|
-
|
|
102
|
-
const { simplifyQuery } = { ...bodyDefaultOptions, ...options };
|
|
103
|
-
return simplifyQuery ? Object.fromEntries(new URLSearchParams(query)) : qs_1.default.parse(query);
|
|
98
|
+
return (bodyDefaultOptions.urlEncodedParser ?? options?.urlEncodedParser ?? defaultQueryParser)(urlFromReq(req).searchParams.toString());
|
|
104
99
|
}
|
|
105
100
|
exports.queryFromReq = queryFromReq;
|
|
106
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9keUhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYm9keUhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsMkNBQXdEO0FBQ3hELHFEQUFpRDtBQVFqRCxTQUFTLGtCQUFrQixDQUFDLE1BQWM7SUFDekMsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUEsQ0FBQyxpQ0FBaUM7QUFDekYsQ0FBQztBQUVELElBQUksa0JBQWtCLEdBQXNCLEVBQUMsU0FBUyxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUMsQ0FBQSxDQUFDLFFBQVE7QUFDM0UsU0FBZ0IsMkJBQTJCLENBQUMsT0FBbUM7SUFDOUUsa0JBQWtCLEdBQUcsRUFBQyxHQUFHLGtCQUFrQixFQUFFLEdBQUcsT0FBTyxFQUFDLENBQUE7QUFDekQsQ0FBQztBQUZELGtFQUVDO0FBRU0sS0FBSyxVQUFVLGFBQWEsQ0FBQyxHQUFvQixFQUFFLE9BQW9DO0lBQzdGLE1BQU0sRUFBQyxTQUFTLEVBQUMsR0FBRyxFQUFDLEdBQUcsa0JBQWtCLEVBQUUsR0FBRyxPQUFPLEVBQUMsQ0FBQTtJQUN2RDs7Ozs7T0FLRztJQUNGLCtGQUErRjtJQUNoRyxNQUFNLG1CQUFtQixHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQzdFLElBQ0MsR0FBRyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLFNBQVM7V0FDM0MsS0FBSyxDQUFDLG1CQUFtQixDQUFDO1FBQzVCLE9BQU07SUFDUixNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQTtJQUVsRixPQUFPO0lBQ1AsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDOUUsTUFBTSxNQUFNLEdBQUcsSUFBQSw0QkFBZ0IsRUFBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDOUMsT0FBTyxNQUFNLElBQUEsc0JBQVUsRUFDdEIsTUFBTSxFQUNOO1FBQ0MsTUFBTSxFQUFFLFFBQVEsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUMzRCxLQUFLLEVBQUUsU0FBUztLQUNoQixDQUNELENBQUE7QUFDRixDQUFDO0FBMUJELHNDQTBCQztBQUVELHVEQUF1RDtBQUN2RCxTQUFTLHlCQUF5QixDQUFDLEdBQW9CLEVBQUUsUUFBZ0I7SUFDeEUsTUFBTSxjQUFjLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQTtJQUNsRCxJQUFJLENBQUMsY0FBYztRQUFFLE9BQU07SUFDM0IsTUFBTSxFQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUMsR0FBRyxJQUFBLGlDQUFnQixFQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQ2hFLElBQUksU0FBUyxLQUFLLFFBQVE7UUFBRSxPQUFNO0lBRWxDLE9BQU8sVUFBVSxDQUFBO0FBQ2xCLENBQUM7QUFDRCxTQUFTLGVBQWUsQ0FBQyxHQUFvQixFQUFFLFFBQWdCO0lBQzlELE1BQU0sVUFBVSxHQUFHLHlCQUF5QixDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUMzRCxJQUFJLENBQUMsVUFBVTtRQUFFLE9BQU07SUFDdkIsc0NBQXNDO0lBQ3RDLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFvQixJQUFJLE9BQU8sQ0FBQTtJQUM5RSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixPQUFPLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFBO0lBRWxHLE9BQU8sT0FBTyxDQUFBO0FBQ2YsQ0FBQztBQUVNLEtBQUssVUFBVSxXQUFXLENBQUMsR0FBb0IsRUFBRSxPQUFvQztJQUMzRixNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsR0FBRyxFQUFFLGtCQUFrQixDQUFDLENBQUE7SUFDeEQsSUFBSSxDQUFDLE9BQU87UUFBRSxPQUFNO0lBQ3BCLE1BQU0sTUFBTSxHQUFHLE1BQU0sYUFBYSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUNoRCxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ1osTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNwQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO0lBQ3pDLENBQUM7QUFDRixDQUFDO0FBUkQsa0NBUUM7QUFFTSxLQUFLLFVBQVUsVUFBVSxDQUFDLEdBQW9CLEVBQUUsT0FBb0M7SUFDMUYsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEdBQUcsRUFBRSwwQkFBMEIsQ0FBQztRQUFFLE9BQU07SUFDdkUsT0FBTyxNQUFNLGFBQWEsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUE7QUFDekMsQ0FBQztBQUhELGdDQUdDO0FBRU0sS0FBSyxVQUFVLFdBQVcsQ0FBQyxHQUFvQixFQUFFLE9BQW9DO0lBQzNGLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUE7SUFDbEQsSUFBSSxDQUFDLE9BQU87UUFBRSxPQUFNO0lBQ3BCLE1BQU0sTUFBTSxHQUFHLE1BQU0sYUFBYSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUNoRCxJQUFJLE1BQU07UUFBRSxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUE7QUFDNUMsQ0FBQztBQUxELGtDQUtDO0FBRU0sS0FBSyxVQUFVLGlCQUFpQixDQUFDLEdBQW9CLEVBQUUsT0FBb0M7SUFDakcsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLEdBQUcsRUFBRSxtQ0FBbUMsQ0FBQyxDQUFBO0lBQ3pFLElBQUksQ0FBQyxPQUFPO1FBQUUsT0FBTTtJQUNwQixNQUFNLE1BQU0sR0FBRyxNQUFNLGFBQWEsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDaEQsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNaLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsSUFBSSxPQUFPLEVBQUUsZ0JBQWdCLElBQUksa0JBQWtCLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7SUFDMUgsQ0FBQztBQUNGLENBQUM7QUFQRCw4Q0FPQztBQUVELFNBQWdCLFVBQVUsQ0FBQyxHQUFvQjtJQUM5QyxPQUFPLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLHFCQUFxQixDQUFDLENBQUE7QUFDckQsQ0FBQztBQUZELGdDQUVDO0FBRUQsU0FBZ0IsWUFBWSxDQUFDLEdBQW9CLEVBQUUsT0FBb0M7SUFDdEYsT0FBTyxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixJQUFJLE9BQU8sRUFBRSxnQkFBZ0IsSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtBQUN6SSxDQUFDO0FBRkQsb0NBRUMifQ==
|
package/cjs/router.d.ts
CHANGED
|
@@ -1,22 +1,11 @@
|
|
|
1
|
-
import type { Key } from 'path-to-regexp';
|
|
2
1
|
import { Chainable } from './dx.js';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
strict?: boolean;
|
|
2
|
+
import 'urlpattern-polyfill';
|
|
3
|
+
interface URLPatternOptions {
|
|
6
4
|
sensitive?: boolean;
|
|
7
|
-
start?: boolean;
|
|
8
|
-
delimiter?: string;
|
|
9
|
-
endsWith?: string;
|
|
10
|
-
encode?(value: string): string;
|
|
11
|
-
prefixes?: string;
|
|
12
5
|
}
|
|
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
6
|
interface RouteContext {
|
|
18
|
-
matched:
|
|
19
|
-
params: Record<
|
|
7
|
+
matched: URLPatternResult;
|
|
8
|
+
params: Record<string, string>;
|
|
20
9
|
next(): any;
|
|
21
10
|
}
|
|
22
11
|
interface Route {
|
|
@@ -25,7 +14,7 @@ interface Route {
|
|
|
25
14
|
interface Routes {
|
|
26
15
|
[k: string]: Route;
|
|
27
16
|
}
|
|
28
|
-
interface RouterOptions extends
|
|
17
|
+
interface RouterOptions extends URLPatternOptions {
|
|
29
18
|
prefix?: string;
|
|
30
19
|
}
|
|
31
20
|
type Router = {
|
package/cjs/router.js
CHANGED
|
@@ -1,51 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.router =
|
|
4
|
-
const path_to_regexp_1 = require("path-to-regexp");
|
|
3
|
+
exports.router = void 0;
|
|
5
4
|
const dx_js_1 = require("./dx.js");
|
|
5
|
+
require("urlpattern-polyfill");
|
|
6
6
|
const bodyHelpers_js_1 = require("./bodyHelpers.js");
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const cacheKey = JSON.stringify(options);
|
|
12
|
-
const pathCache = cache[cacheKey] || (cache[cacheKey] = {});
|
|
13
|
-
if (pathCache[pattern])
|
|
14
|
-
return pathCache[pattern];
|
|
15
|
-
const keys = [];
|
|
16
|
-
const regexp = (0, path_to_regexp_1.pathToRegexp)(pattern, keys, options);
|
|
17
|
-
const result = {
|
|
18
|
-
regexp,
|
|
19
|
-
keys
|
|
20
|
-
};
|
|
21
|
-
if (cacheCount < cacheLimit) {
|
|
22
|
-
pathCache[pattern] = result;
|
|
23
|
-
cacheCount++;
|
|
24
|
-
}
|
|
25
|
-
return result;
|
|
26
|
-
}
|
|
7
|
+
// '' matches nothing
|
|
8
|
+
// '/' matches both https://example.com and https://example.com/
|
|
9
|
+
// '/foo' matches https://example.com/foo but not https://example.com/foo/
|
|
10
|
+
// '/foo/' matches https://example.com/foo/ but not https://example.com/foo
|
|
27
11
|
function matchPattern(pathname, pattern, options) {
|
|
28
|
-
|
|
29
|
-
|
|
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)
|
|
12
|
+
const matched = new URLPattern({ pathname: pattern }, undefined, options).exec({ pathname });
|
|
13
|
+
if (!matched)
|
|
38
14
|
return;
|
|
39
|
-
const [matched, ...values] = match;
|
|
40
15
|
return {
|
|
41
|
-
matched,
|
|
42
|
-
params:
|
|
43
|
-
acc[key.name] = values[index];
|
|
44
|
-
return acc;
|
|
45
|
-
}, {})
|
|
16
|
+
matched,
|
|
17
|
+
params: matched.pathname.groups
|
|
46
18
|
};
|
|
47
19
|
}
|
|
48
|
-
exports.matchPattern = matchPattern;
|
|
49
20
|
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods
|
|
50
21
|
const allMethods = [
|
|
51
22
|
'get', 'head', 'post', 'put', 'delete', 'connect', 'options', 'trace', 'patch'
|
|
@@ -81,4 +52,4 @@ exports.router = {
|
|
|
81
52
|
};
|
|
82
53
|
for (const method of allMethods)
|
|
83
54
|
exports.router[method] = exports.router.method.bind(exports.router, method);
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3JvdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBeUM7QUFFekMsK0JBQTRCO0FBQzVCLHFEQUEyQztBQU8zQyxxQkFBcUI7QUFDckIsZ0VBQWdFO0FBQ2hFLDBFQUEwRTtBQUMxRSwyRUFBMkU7QUFDM0UsU0FBUyxZQUFZLENBQ3BCLFFBQWdCLEVBQ2hCLE9BQWUsRUFDZixPQUEyQjtJQUUzQixNQUFNLE9BQU8sR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUMsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQTtJQUN4RixJQUFJLENBQUMsT0FBTztRQUFFLE9BQU07SUFFcEIsT0FBTztRQUNOLE9BQU87UUFDUCxNQUFNLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFnQjtLQUN6QyxDQUFBO0FBQ0YsQ0FBQztBQWNELDREQUE0RDtBQUM1RCxNQUFNLFVBQVUsR0FBRztJQUNsQixLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU87Q0FDckUsQ0FBQTtBQStCVixTQUFTLFVBQVUsQ0FDbEIsTUFBMEIsRUFBRSw2QkFBNkI7QUFDekQsTUFBeUMsRUFDekMsRUFBQyxNQUFNLEdBQUcsRUFBRSxFQUFFLEdBQUcsT0FBTyxLQUFtQixFQUFFO0lBRTdDLE9BQU8sSUFBSSxDQUFDLEVBQUU7UUFDYixNQUFNLEdBQUcsR0FBRyxJQUFBLGNBQU0sR0FBRSxDQUFBO1FBQ3BCLElBQUksTUFBTSxLQUFLLFNBQVMsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxXQUFXLEVBQUU7WUFBRSxPQUFPLElBQUksRUFBRSxDQUFBO1FBQzlFLEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUN6QyxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsSUFBQSwyQkFBVSxFQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLE1BQU0sR0FBRyxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQTtZQUNwRixJQUFJLEtBQUs7Z0JBQUUsT0FBTyxPQUFPLENBQUM7b0JBQ3pCLEdBQUcsS0FBSztvQkFDUixJQUFJO2lCQUNKLENBQUMsQ0FBQTtRQUNILENBQUM7UUFDRCxPQUFPLElBQUksRUFBRSxDQUFBO0lBQ2QsQ0FBQyxDQUFBO0FBQ0YsQ0FBQztBQUNZLFFBQUEsTUFBTSxHQUFXO0lBQzdCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxNQUFNO1FBQ3ZCLE9BQU8sT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUTtZQUNuQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pELENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDNUQsQ0FBQztJQUNELEdBQUcsQ0FBQyxHQUFHLE1BQU07UUFDWixPQUFPLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVE7WUFDbkMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1RCxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQy9ELENBQUM7Q0FDRCxDQUFBO0FBRUQsS0FBSyxNQUFNLE1BQU0sSUFBSSxVQUFVO0lBQUUsY0FBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLGNBQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQU0sRUFBRSxNQUFNLENBQUMsQ0FBQSJ9
|
package/esm/body.js
CHANGED
|
@@ -8,4 +8,4 @@ export const getUrlEncoded = makeDxContext((options) => urlEncodedFromReq(getReq
|
|
|
8
8
|
export const getQuery = makeDxContext((options) => queryFromReq(getReq(), options));
|
|
9
9
|
// to getFile use busboy
|
|
10
10
|
// https://github.com/mscdex/busboy
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9keS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9ib2R5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsYUFBYSxFQUFDLE1BQU0sU0FBUyxDQUFBO0FBQzdDLE9BQU8sRUFFTixhQUFhLEVBQ2IsV0FBVyxFQUNYLFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixNQUFNLGtCQUFrQixDQUFBO0FBRXpCLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsQ0FBQyxPQUFvQyxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQTtBQUNsSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLENBQUMsT0FBb0MsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUE7QUFDOUcsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxDQUFDLE9BQW9DLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFBO0FBQzVHLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsQ0FBQyxPQUFvQyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQTtBQUM5RyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsYUFBYSxDQUFDLENBQUMsT0FBb0MsRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQTtBQUMxSCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLENBQUMsT0FBb0MsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUE7QUFFaEgsd0JBQXdCO0FBQ3hCLG1DQUFtQyJ9
|
package/esm/bodyHelpers.d.ts
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
import { IncomingMessage } from 'node:http';
|
|
4
4
|
export interface BufferBodyOptions {
|
|
5
5
|
bodyLimit: number;
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
urlEncodedParser?(search: string): any;
|
|
7
|
+
queryParser?(search: string): any;
|
|
8
8
|
}
|
|
9
9
|
export declare function setBufferBodyDefaultOptions(options: Partial<BufferBodyOptions>): void;
|
|
10
10
|
export declare function bufferFromReq(req: IncomingMessage, options?: Partial<BufferBodyOptions>): Promise<Buffer | undefined>;
|
package/esm/bodyHelpers.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { getContentStream, readStream } from './stream.js';
|
|
2
2
|
import { parseContentType } from './contentType.js';
|
|
3
|
-
|
|
3
|
+
function defaultQueryParser(search) {
|
|
4
|
+
return Object.fromEntries(new URLSearchParams(search)); // support both leading ? and not
|
|
5
|
+
}
|
|
4
6
|
let bodyDefaultOptions = { bodyLimit: 100 << 10 }; // 100kb
|
|
5
7
|
export function setBufferBodyDefaultOptions(options) {
|
|
6
8
|
bodyDefaultOptions = { ...bodyDefaultOptions, ...options };
|
|
@@ -76,17 +78,13 @@ export async function urlEncodedFromReq(req, options) {
|
|
|
76
78
|
return;
|
|
77
79
|
const buffer = await bufferFromReq(req, options);
|
|
78
80
|
if (buffer) {
|
|
79
|
-
|
|
80
|
-
const { simplifyUrlEncodedBody } = { ...bodyDefaultOptions, ...options };
|
|
81
|
-
return simplifyUrlEncodedBody ? Object.fromEntries(new URLSearchParams(str)) : qs.parse(str);
|
|
81
|
+
return (bodyDefaultOptions.urlEncodedParser ?? options?.urlEncodedParser ?? defaultQueryParser)(buffer.toString(charset));
|
|
82
82
|
}
|
|
83
83
|
}
|
|
84
84
|
export function urlFromReq(req) {
|
|
85
85
|
return new URL(req.url ?? '', 'https://example.com');
|
|
86
86
|
}
|
|
87
87
|
export function queryFromReq(req, options) {
|
|
88
|
-
|
|
89
|
-
const { simplifyQuery } = { ...bodyDefaultOptions, ...options };
|
|
90
|
-
return simplifyQuery ? Object.fromEntries(new URLSearchParams(query)) : qs.parse(query);
|
|
88
|
+
return (bodyDefaultOptions.urlEncodedParser ?? options?.urlEncodedParser ?? defaultQueryParser)(urlFromReq(req).searchParams.toString());
|
|
91
89
|
}
|
|
92
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9keUhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYm9keUhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLGdCQUFnQixFQUFFLFVBQVUsRUFBQyxNQUFNLGFBQWEsQ0FBQTtBQUN4RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQTtBQVFqRCxTQUFTLGtCQUFrQixDQUFDLE1BQWM7SUFDekMsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUEsQ0FBQyxpQ0FBaUM7QUFDekYsQ0FBQztBQUVELElBQUksa0JBQWtCLEdBQXNCLEVBQUMsU0FBUyxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUMsQ0FBQSxDQUFDLFFBQVE7QUFDM0UsTUFBTSxVQUFVLDJCQUEyQixDQUFDLE9BQW1DO0lBQzlFLGtCQUFrQixHQUFHLEVBQUMsR0FBRyxrQkFBa0IsRUFBRSxHQUFHLE9BQU8sRUFBQyxDQUFBO0FBQ3pELENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLGFBQWEsQ0FBQyxHQUFvQixFQUFFLE9BQW9DO0lBQzdGLE1BQU0sRUFBQyxTQUFTLEVBQUMsR0FBRyxFQUFDLEdBQUcsa0JBQWtCLEVBQUUsR0FBRyxPQUFPLEVBQUMsQ0FBQTtJQUN2RDs7Ozs7T0FLRztJQUNGLCtGQUErRjtJQUNoRyxNQUFNLG1CQUFtQixHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQzdFLElBQ0MsR0FBRyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLFNBQVM7V0FDM0MsS0FBSyxDQUFDLG1CQUFtQixDQUFDO1FBQzVCLE9BQU07SUFDUixNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMs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
|
package/esm/router.d.ts
CHANGED
|
@@ -1,22 +1,11 @@
|
|
|
1
|
-
import type { Key } from 'path-to-regexp';
|
|
2
1
|
import { Chainable } from './dx.js';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
strict?: boolean;
|
|
2
|
+
import 'urlpattern-polyfill';
|
|
3
|
+
interface URLPatternOptions {
|
|
6
4
|
sensitive?: boolean;
|
|
7
|
-
start?: boolean;
|
|
8
|
-
delimiter?: string;
|
|
9
|
-
endsWith?: string;
|
|
10
|
-
encode?(value: string): string;
|
|
11
|
-
prefixes?: string;
|
|
12
5
|
}
|
|
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
6
|
interface RouteContext {
|
|
18
|
-
matched:
|
|
19
|
-
params: Record<
|
|
7
|
+
matched: URLPatternResult;
|
|
8
|
+
params: Record<string, string>;
|
|
20
9
|
next(): any;
|
|
21
10
|
}
|
|
22
11
|
interface Route {
|
|
@@ -25,7 +14,7 @@ interface Route {
|
|
|
25
14
|
interface Routes {
|
|
26
15
|
[k: string]: Route;
|
|
27
16
|
}
|
|
28
|
-
interface RouterOptions extends
|
|
17
|
+
interface RouterOptions extends URLPatternOptions {
|
|
29
18
|
prefix?: string;
|
|
30
19
|
}
|
|
31
20
|
type Router = {
|
package/esm/router.js
CHANGED
|
@@ -1,45 +1,17 @@
|
|
|
1
|
-
import { pathToRegexp } from 'path-to-regexp';
|
|
2
1
|
import { getReq } from './dx.js';
|
|
2
|
+
import 'urlpattern-polyfill';
|
|
3
3
|
import { urlFromReq } from './bodyHelpers.js';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const
|
|
10
|
-
if (
|
|
11
|
-
return pathCache[pattern];
|
|
12
|
-
const keys = [];
|
|
13
|
-
const regexp = pathToRegexp(pattern, keys, options);
|
|
14
|
-
const result = {
|
|
15
|
-
regexp,
|
|
16
|
-
keys
|
|
17
|
-
};
|
|
18
|
-
if (cacheCount < cacheLimit) {
|
|
19
|
-
pathCache[pattern] = result;
|
|
20
|
-
cacheCount++;
|
|
21
|
-
}
|
|
22
|
-
return result;
|
|
23
|
-
}
|
|
24
|
-
export function matchPattern(pathname, pattern, options) {
|
|
25
|
-
options = { ...options };
|
|
26
|
-
options.end ??= true;
|
|
27
|
-
options.strict ??= false;
|
|
28
|
-
options.sensitive ??= false;
|
|
29
|
-
options.start ??= true;
|
|
30
|
-
if (!pattern && pattern !== '')
|
|
31
|
-
return;
|
|
32
|
-
const { regexp, keys } = compilePath(pattern, options);
|
|
33
|
-
const match = regexp.exec(pathname);
|
|
34
|
-
if (!match)
|
|
4
|
+
// '' matches nothing
|
|
5
|
+
// '/' matches both https://example.com and https://example.com/
|
|
6
|
+
// '/foo' matches https://example.com/foo but not https://example.com/foo/
|
|
7
|
+
// '/foo/' matches https://example.com/foo/ but not https://example.com/foo
|
|
8
|
+
function matchPattern(pathname, pattern, options) {
|
|
9
|
+
const matched = new URLPattern({ pathname: pattern }, undefined, options).exec({ pathname });
|
|
10
|
+
if (!matched)
|
|
35
11
|
return;
|
|
36
|
-
const [matched, ...values] = match;
|
|
37
12
|
return {
|
|
38
|
-
matched,
|
|
39
|
-
params:
|
|
40
|
-
acc[key.name] = values[index];
|
|
41
|
-
return acc;
|
|
42
|
-
}, {})
|
|
13
|
+
matched,
|
|
14
|
+
params: matched.pathname.groups
|
|
43
15
|
};
|
|
44
16
|
}
|
|
45
17
|
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods
|
|
@@ -77,4 +49,4 @@ export const router = {
|
|
|
77
49
|
};
|
|
78
50
|
for (const method of allMethods)
|
|
79
51
|
router[method] = router.method.bind(router, method);
|
|
80
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3JvdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVksTUFBTSxFQUFDLE1BQU0sU0FBUyxDQUFBO0FBRXpDLE9BQU8scUJBQXFCLENBQUE7QUFDNUIsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGtCQUFrQixDQUFBO0FBTzNDLHFCQUFxQjtBQUNyQixnRUFBZ0U7QUFDaEUsMEVBQTBFO0FBQzFFLDJFQUEyRTtBQUMzRSxTQUFTLFlBQVksQ0FDcEIsUUFBZ0IsRUFDaEIsT0FBZSxFQUNmLE9BQTJCO0lBRTNCLE1BQU0sT0FBTyxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUMsUUFBUSxFQUFFLE9BQU8sRUFBQyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBQyxRQUFRLEVBQUMsQ0FBQyxDQUFBO0lBQ3hGLElBQUksQ0FBQyxPQUFPO1FBQUUsT0FBTTtJQUVwQixPQUFPO1FBQ04sT0FBTztRQUNQLE1BQU0sRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQWdCO0tBQ3pDLENBQUE7QUFDRixDQUFDO0FBY0QsNERBQTREO0FBQzVELE1BQU0sVUFBVSxHQUFHO0lBQ2xCLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTztDQUNyRSxDQUFBO0FBK0JWLFNBQVMsVUFBVSxDQUNsQixNQUEwQixFQUFFLDZCQUE2QjtBQUN6RCxNQUF5QyxFQUN6QyxFQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUUsR0FBRyxPQUFPLEtBQW1CLEVBQUU7SUFFN0MsT0FBTyxJQUFJLENBQUMsRUFBRTtRQUNiLE1BQU0sR0FBRyxHQUFHLE1BQU0sRUFBRSxDQUFBO1FBQ3BCLElBQUksTUFBTSxLQUFLLFNBQVMsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxXQUFXLEVBQUU7WUFBRSxPQUFPLElBQUksRUFBRSxDQUFBO1FBQzlFLEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUN6QyxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLE1BQU0sR0FBRyxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQTtZQUNwRixJQUFJLEtBQUs7Z0JBQUUsT0FBTyxPQUFPLENBQUM7b0JBQ3pCLEdBQUcsS0FBSztvQkFDUixJQUFJO2lCQUNKLENBQUMsQ0FBQTtRQUNILENBQUM7UUFDRCxPQUFPLElBQUksRUFBRSxDQUFBO0lBQ2QsQ0FBQyxDQUFBO0FBQ0YsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBVztJQUM3QixNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsTUFBTTtRQUN2QixPQUFPLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVE7WUFDbkMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6RCxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzVELENBQUM7SUFDRCxHQUFHLENBQUMsR0FBRyxNQUFNO1FBQ1osT0FBTyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRO1lBQ25DLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUQsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUMvRCxDQUFDO0NBQ0QsQ0FBQTtBQUVELEtBQUssTUFBTSxNQUFNLElBQUksVUFBVTtJQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUEifQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dx-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.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",
|
|
@@ -29,16 +29,13 @@
|
|
|
29
29
|
},
|
|
30
30
|
"license": "MIT",
|
|
31
31
|
"devDependencies": {
|
|
32
|
-
"@types/node": "^20.12.
|
|
33
|
-
"@types/path-to-regexp": "^1.7.0",
|
|
34
|
-
"@types/qs": "^6.9.15",
|
|
32
|
+
"@types/node": "^20.12.8",
|
|
35
33
|
"@types/send": "^0.17.4",
|
|
36
34
|
"typescript": "^5.4.5"
|
|
37
35
|
},
|
|
38
36
|
"dependencies": {
|
|
39
37
|
"jdefer": "^0.0.14",
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"send": "^0.18.0"
|
|
38
|
+
"send": "^0.18.0",
|
|
39
|
+
"urlpattern-polyfill": "^10.0.0"
|
|
43
40
|
}
|
|
44
41
|
}
|