dx-server 0.12.2 → 0.13.0-alpha.2
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 +417 -293
- package/{cjs → lib}/body.d.ts +2 -3
- package/lib/body.js +10 -0
- package/lib/body.js.map +1 -0
- package/{esm → lib}/bodyHelpers.d.ts +2 -4
- package/lib/bodyHelpers.js +102 -0
- package/lib/bodyHelpers.js.map +1 -0
- package/{esm → lib}/dx.d.ts +6 -9
- package/lib/dx.js +133 -0
- package/lib/dx.js.map +1 -0
- package/{cjs → lib}/dxHelpers.d.ts +2 -5
- package/lib/dxHelpers.js +135 -0
- package/lib/dxHelpers.js.map +1 -0
- package/lib/helpers.js.map +1 -0
- package/{cjs → lib}/index.d.ts +1 -2
- package/{esm/index.d.ts → lib/index.js} +1 -2
- package/lib/index.js.map +1 -0
- package/lib/logger.d.ts +4 -0
- package/lib/logger.js +64 -0
- package/lib/logger.js.map +1 -0
- package/lib/router.d.ts +42 -0
- package/lib/router.js +43 -0
- package/lib/router.js.map +1 -0
- package/lib/static.js +23 -0
- package/lib/static.js.map +1 -0
- package/{cjs → lib}/staticHelpers.d.ts +5 -3
- package/lib/staticHelpers.js +202 -0
- package/lib/staticHelpers.js.map +1 -0
- package/{cjs → lib}/stream.d.ts +3 -8
- package/lib/stream.js +96 -0
- package/lib/stream.js.map +1 -0
- package/lib/vendors/contentType.js +64 -0
- package/lib/vendors/contentType.js.map +1 -0
- package/{cjs → lib}/vendors/etag.d.ts +2 -5
- package/lib/vendors/etag.js +94 -0
- package/lib/vendors/etag.js.map +1 -0
- package/{cjs → lib}/vendors/fresh.d.ts +2 -2
- package/lib/vendors/fresh.js +88 -0
- package/lib/vendors/fresh.js.map +1 -0
- package/lib/vendors/mime.d.ts +1 -0
- package/lib/vendors/mime.js +35 -0
- package/lib/vendors/mime.js.map +1 -0
- package/{cjs → lib}/vendors/mimeDb.d.ts +2544 -2544
- package/lib/vendors/mimeDb.js +9435 -0
- package/lib/vendors/mimeDb.js.map +1 -0
- package/{cjs → lib}/vendors/mimeScore.d.ts +1 -1
- package/lib/vendors/mimeScore.js +44 -0
- package/lib/vendors/mimeScore.js.map +1 -0
- package/{cjs → lib}/vendors/onFinished.d.ts +1 -1
- package/lib/vendors/onFinished.js +231 -0
- package/lib/vendors/rangeParser.d.ts +12 -0
- package/lib/vendors/rangeParser.js +108 -0
- package/lib/vendors/rangeParser.js.map +1 -0
- package/package.json +32 -36
- package/cjs/body.js +0 -14
- package/cjs/bodyHelpers.d.ts +0 -16
- package/cjs/bodyHelpers.js +0 -101
- package/cjs/connect.d.ts +0 -5
- package/cjs/connect.js +0 -44
- package/cjs/dx.d.ts +0 -46
- package/cjs/dx.js +0 -144
- package/cjs/dxHelpers.js +0 -123
- package/cjs/express.d.ts +0 -4
- package/cjs/express.js +0 -43
- package/cjs/helpers.js +0 -14
- package/cjs/index.js +0 -38
- package/cjs/logger.d.ts +0 -3
- package/cjs/logger.js +0 -61
- package/cjs/package.json +0 -3
- package/cjs/polyfillWithResolvers.d.ts +0 -1
- package/cjs/polyfillWithResolvers.js +0 -17
- package/cjs/router.js +0 -47
- package/cjs/static.js +0 -27
- package/cjs/staticHelpers.js +0 -195
- package/cjs/stream.js +0 -97
- package/cjs/vendors/contentType.js +0 -92
- package/cjs/vendors/etag.js +0 -136
- package/cjs/vendors/fresh.js +0 -102
- package/cjs/vendors/mime.d.ts +0 -1
- package/cjs/vendors/mime.js +0 -42
- package/cjs/vendors/mimeDb.js +0 -9417
- package/cjs/vendors/mimeScore.js +0 -50
- package/cjs/vendors/onFinished.js +0 -245
- package/cjs/vendors/rangeParser.d.ts +0 -10
- package/cjs/vendors/rangeParser.js +0 -126
- package/esm/body.d.ts +0 -8
- package/esm/body.js +0 -11
- package/esm/bodyHelpers.js +0 -90
- package/esm/connect.d.ts +0 -5
- package/esm/connect.js +0 -40
- package/esm/dx.js +0 -128
- package/esm/dxHelpers.d.ts +0 -49
- package/esm/dxHelpers.js +0 -119
- package/esm/express.d.ts +0 -4
- package/esm/express.js +0 -35
- package/esm/helpers.js +0 -3
- package/esm/index.js +0 -9
- package/esm/logger.d.ts +0 -3
- package/esm/logger.js +0 -57
- package/esm/polyfillWithResolvers.d.ts +0 -1
- package/esm/polyfillWithResolvers.js +0 -16
- package/esm/router.js +0 -44
- package/esm/static.d.ts +0 -5
- package/esm/static.js +0 -23
- package/esm/staticHelpers.d.ts +0 -18
- package/esm/staticHelpers.js +0 -188
- package/esm/stream.d.ts +0 -12
- package/esm/stream.js +0 -92
- package/esm/vendors/contentType.d.ts +0 -4
- package/esm/vendors/contentType.js +0 -88
- package/esm/vendors/etag.d.ts +0 -10
- package/esm/vendors/etag.js +0 -105
- package/esm/vendors/fresh.d.ts +0 -23
- package/esm/vendors/fresh.js +0 -96
- package/esm/vendors/mime.d.ts +0 -1
- package/esm/vendors/mime.js +0 -35
- package/esm/vendors/mimeDb.d.ts +0 -9413
- package/esm/vendors/mimeDb.js +0 -9415
- package/esm/vendors/mimeScore.d.ts +0 -5
- package/esm/vendors/mimeScore.js +0 -46
- package/esm/vendors/onFinished.d.ts +0 -14
- package/esm/vendors/onFinished.js +0 -241
- package/esm/vendors/rangeParser.d.ts +0 -10
- package/esm/vendors/rangeParser.js +0 -122
- /package/{cjs → lib}/helpers.d.ts +0 -0
- /package/{esm/helpers.d.ts → lib/helpers.js} +0 -0
- /package/{cjs → lib}/static.d.ts +0 -0
- /package/{cjs → lib}/vendors/contentType.d.ts +0 -0
package/cjs/vendors/fresh.js
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.parseTokenList = exports.parseHttpDate = exports.fresh = void 0;
|
|
4
|
-
const CACHE_CONTROL_NO_CACHE_REGEXP = /(?:^|,)\s*?no-cache\s*?(?:,|$)/;
|
|
5
|
-
/**
|
|
6
|
-
* Check freshness of the response using request and response headers.
|
|
7
|
-
*
|
|
8
|
-
* @param {Object} reqHeaders
|
|
9
|
-
* @param {Object} resHeaders
|
|
10
|
-
* @return {Boolean}
|
|
11
|
-
* @public
|
|
12
|
-
*/
|
|
13
|
-
function fresh(reqHeaders, resHeaders) {
|
|
14
|
-
// fields
|
|
15
|
-
const modifiedSince = reqHeaders['if-modified-since'];
|
|
16
|
-
const noneMatch = reqHeaders['if-none-match'];
|
|
17
|
-
// unconditional request
|
|
18
|
-
if (!modifiedSince && !noneMatch) {
|
|
19
|
-
return false;
|
|
20
|
-
}
|
|
21
|
-
// Always return stale when Cache-Control: no-cache
|
|
22
|
-
// to support end-to-end reload requests
|
|
23
|
-
// https://tools.ietf.org/html/rfc2616#section-14.9.4
|
|
24
|
-
const cacheControl = reqHeaders['cache-control'];
|
|
25
|
-
if (cacheControl && CACHE_CONTROL_NO_CACHE_REGEXP.test(cacheControl)) {
|
|
26
|
-
return false;
|
|
27
|
-
}
|
|
28
|
-
// if-none-match takes precedent over if-modified-since
|
|
29
|
-
if (noneMatch) {
|
|
30
|
-
if (noneMatch === '*') {
|
|
31
|
-
return true;
|
|
32
|
-
}
|
|
33
|
-
const etag = resHeaders.etag;
|
|
34
|
-
if (!etag) {
|
|
35
|
-
return false;
|
|
36
|
-
}
|
|
37
|
-
const matches = parseTokenList(noneMatch);
|
|
38
|
-
for (let i = 0; i < matches.length; i++) {
|
|
39
|
-
const match = matches[i];
|
|
40
|
-
if (match === etag || match === 'W/' + etag || 'W/' + match === etag) {
|
|
41
|
-
return true;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
return false;
|
|
45
|
-
}
|
|
46
|
-
// if-modified-since
|
|
47
|
-
if (modifiedSince) {
|
|
48
|
-
const lastModified = resHeaders['last-modified'];
|
|
49
|
-
const modifiedStale = !lastModified || !(parseHttpDate(lastModified) <= parseHttpDate(modifiedSince));
|
|
50
|
-
if (modifiedStale) {
|
|
51
|
-
return false;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
return true;
|
|
55
|
-
}
|
|
56
|
-
exports.fresh = fresh;
|
|
57
|
-
/**
|
|
58
|
-
* Parse an HTTP Date into a number.
|
|
59
|
-
*
|
|
60
|
-
* @param {string} date
|
|
61
|
-
* @private
|
|
62
|
-
*/
|
|
63
|
-
function parseHttpDate(date) {
|
|
64
|
-
const timestamp = date && Date.parse(date);
|
|
65
|
-
// istanbul ignore next: guard against date.js Date.parse patching
|
|
66
|
-
return typeof timestamp === 'number' ? timestamp : NaN;
|
|
67
|
-
}
|
|
68
|
-
exports.parseHttpDate = parseHttpDate;
|
|
69
|
-
/**
|
|
70
|
-
* Parse a HTTP token list.
|
|
71
|
-
*
|
|
72
|
-
* @param {string} str
|
|
73
|
-
* @private
|
|
74
|
-
*/
|
|
75
|
-
function parseTokenList(str) {
|
|
76
|
-
let end = 0;
|
|
77
|
-
const list = [];
|
|
78
|
-
let start = 0;
|
|
79
|
-
// gather tokens
|
|
80
|
-
let i = 0, len = str.length;
|
|
81
|
-
for (; i < len; i++) {
|
|
82
|
-
switch (str.charCodeAt(i)) {
|
|
83
|
-
case 0x20: /* */
|
|
84
|
-
if (start === end) {
|
|
85
|
-
start = end = i + 1;
|
|
86
|
-
}
|
|
87
|
-
break;
|
|
88
|
-
case 0x2c: /* , */
|
|
89
|
-
list.push(str.substring(start, end));
|
|
90
|
-
start = end = i + 1;
|
|
91
|
-
break;
|
|
92
|
-
default:
|
|
93
|
-
end = i + 1;
|
|
94
|
-
break;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
// final token
|
|
98
|
-
list.push(str.substring(start, end));
|
|
99
|
-
return list;
|
|
100
|
-
}
|
|
101
|
-
exports.parseTokenList = parseTokenList;
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJlc2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmVuZG9ycy9mcmVzaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxNQUFNLDZCQUE2QixHQUFHLGdDQUFnQyxDQUFBO0FBRXRFOzs7Ozs7O0dBT0c7QUFFSCxTQUFnQixLQUFLLENBQUMsVUFBVSxFQUFFLFVBQVU7SUFDM0MsU0FBUztJQUNULE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO0lBQ3JELE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQTtJQUU3Qyx3QkFBd0I7SUFDeEIsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2xDLE9BQU8sS0FBSyxDQUFBO0lBQ2IsQ0FBQztJQUVELG1EQUFtRDtJQUNuRCx3Q0FBd0M7SUFDeEMscURBQXFEO0lBQ3JELE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQTtJQUNoRCxJQUFJLFlBQVksSUFBSSw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztRQUN0RSxPQUFPLEtBQUssQ0FBQTtJQUNiLENBQUM7SUFFRCx1REFBdUQ7SUFDdkQsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUNmLElBQUksU0FBUyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sSUFBSSxDQUFBO1FBQ1osQ0FBQztRQUNELE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUE7UUFFNUIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1gsT0FBTyxLQUFLLENBQUE7UUFDYixDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQ3pDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxF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
|
package/cjs/vendors/mime.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function contentTypeForExtension(extension: any): any;
|
package/cjs/vendors/mime.js
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
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.contentTypeForExtension = void 0;
|
|
7
|
-
const mimeDb_js_1 = __importDefault(require("./mimeDb.js"));
|
|
8
|
-
const mimeScore_js_1 = require("./mimeScore.js");
|
|
9
|
-
const extensionToMime = Object.create(null);
|
|
10
|
-
for (const [type, { extensions = [] }] of Object.entries(mimeDb_js_1.default))
|
|
11
|
-
for (const extension of extensions)
|
|
12
|
-
extensionToMime[extension] = preferredType(extension, type, extensionToMime[extension]);
|
|
13
|
-
function preferredType(ext, type0, type1) {
|
|
14
|
-
const score0 = type0 ? (0, mimeScore_js_1.mimeScore)(type0, mimeDb_js_1.default[type0].source) : 0;
|
|
15
|
-
const score1 = type1 ? (0, mimeScore_js_1.mimeScore)(type1, mimeDb_js_1.default[type1].source) : 0;
|
|
16
|
-
return score0 > score1 ? type0 : type1;
|
|
17
|
-
}
|
|
18
|
-
function contentTypeForExtension(extension) {
|
|
19
|
-
const mimeType = extensionToMime[extension.toLowerCase()];
|
|
20
|
-
if (!mimeType)
|
|
21
|
-
return;
|
|
22
|
-
if (!mimeType.includes('charset')) {
|
|
23
|
-
const charset = determineCharset(mimeType);
|
|
24
|
-
if (charset)
|
|
25
|
-
return mimeType + '; charset=' + charset.toLowerCase();
|
|
26
|
-
}
|
|
27
|
-
return mimeType;
|
|
28
|
-
}
|
|
29
|
-
exports.contentTypeForExtension = contentTypeForExtension;
|
|
30
|
-
const EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/;
|
|
31
|
-
const TEXT_TYPE_REGEXP = /^text\//i;
|
|
32
|
-
function determineCharset(type) {
|
|
33
|
-
// _TODO: use media-typer
|
|
34
|
-
const match = EXTRACT_TYPE_REGEXP.exec(type);
|
|
35
|
-
const mime = match && mimeDb_js_1.default[match[1].toLowerCase()];
|
|
36
|
-
if (mime?.charset)
|
|
37
|
-
return mime.charset;
|
|
38
|
-
// default text/* to utf-8
|
|
39
|
-
if (match && TEXT_TYPE_REGEXP.test(match[1]))
|
|
40
|
-
return 'UTF-8';
|
|
41
|
-
}
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZW5kb3JzL21pbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsNERBQWdDO0FBQ2hDLGlEQUF3QztBQUV4QyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFBO0FBRTNDLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxFQUFDLFVBQVUsR0FBRyxFQUFFLEVBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsbUJBQU0sQ0FBQztJQUM3RCxLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVU7UUFDakMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO0FBRXpGLFNBQVMsYUFBYSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSztJQUN2QyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUEsd0JBQVMsRUFBQyxLQUFLLEVBQUUsbUJBQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2pFLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBQSx3QkFBUyxFQUFDLEtBQUssRUFBRSxtQkFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFFakUsT0FBTyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQTtBQUN2QyxDQUFDO0FBRUQsU0FBZ0IsdUJBQXVCLENBQUMsU0FBUztJQUNoRCxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUE7SUFDekQsSUFBSSxDQUFDLFFBQVE7UUFBRSxPQUFNO0lBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDbkMsTUFBTSxPQUFPLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDMUMsSUFBSSxPQUFPO1lBQUUsT0FBTyxRQUFRLEdBQUcsWUFBWSxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQTtJQUNwRSxDQUFDO0lBQ0QsT0FBTyxRQUFRLENBQUE7QUFDaEIsQ0FBQztBQVJELDBEQVFDO0FBRUQsTUFBTSxtQkFBbUIsR0FBRyx5QkFBeUIsQ0FBQTtBQUNyRCxNQUFNLGdCQUFnQixHQUFHLFVBQVUsQ0FBQTtBQUVuQyxTQUFTLGdCQUFnQixDQUFFLElBQUk7SUFDOUIseUJBQXlCO0lBQ3pCLE1BQU0sS0FBSyxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUM1QyxNQUFNLElBQUksR0FBRyxLQUFLLElBQUksbUJBQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQTtJQUVwRCxJQUFJLElBQUksRUFBRSxPQUFPO1FBQUUsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFBO0lBRXRDLDBCQUEwQjtJQUMxQixJQUFJLEtBQUssSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQUUsT0FBTyxPQUFPLENBQUE7QUFDN0QsQ0FBQyJ9
|