dx-server 0.12.2 → 0.13.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 +47 -55
- package/{cjs → lib}/body.d.ts +2 -3
- package/lib/body.js +10 -0
- package/{esm → lib}/bodyHelpers.d.ts +2 -4
- package/lib/bodyHelpers.js +89 -0
- package/{esm → lib}/dx.d.ts +5 -8
- package/lib/dx.js +127 -0
- package/{cjs → lib}/dxHelpers.d.ts +0 -4
- package/{esm → lib}/dxHelpers.js +0 -2
- package/{cjs → lib}/index.d.ts +0 -1
- package/{esm/index.d.ts → lib/index.js} +0 -1
- package/lib/logger.js +56 -0
- package/lib/router.d.ts +42 -0
- package/lib/router.js +43 -0
- package/lib/static.js +22 -0
- package/{cjs → lib}/staticHelpers.d.ts +0 -2
- package/lib/staticHelpers.js +186 -0
- package/{cjs → lib}/stream.d.ts +2 -7
- package/lib/stream.js +90 -0
- package/{esm → lib}/vendors/contentType.js +0 -1
- package/{cjs → lib}/vendors/etag.d.ts +0 -3
- package/lib/vendors/etag.js +104 -0
- package/{cjs → lib}/vendors/fresh.d.ts +2 -2
- package/lib/vendors/fresh.js +95 -0
- package/lib/vendors/mime.d.ts +1 -0
- package/lib/vendors/mime.js +35 -0
- package/{esm → lib}/vendors/mimeDb.js +0 -1
- package/{cjs → lib}/vendors/mimeScore.d.ts +1 -1
- package/lib/vendors/mimeScore.js +45 -0
- package/{cjs → lib}/vendors/onFinished.d.ts +1 -1
- package/lib/vendors/onFinished.js +231 -0
- package/lib/vendors/rangeParser.d.ts +20 -0
- package/lib/vendors/rangeParser.js +121 -0
- package/package.json +10 -19
- 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.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/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/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/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}/logger.d.ts +0 -0
- /package/{cjs → lib}/static.d.ts +0 -0
- /package/{cjs → lib}/vendors/contentType.d.ts +0 -0
- /package/{cjs → lib}/vendors/mimeDb.d.ts +0 -0
package/esm/stream.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
3
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
4
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
5
|
-
import type { IncomingMessage } from 'node:http';
|
|
6
|
-
import type { Readable } from 'node:stream';
|
|
7
|
-
import './polyfillWithResolvers.js';
|
|
8
|
-
export declare function getContentStream(req: IncomingMessage, encoding: string, disableInflate?: boolean): IncomingMessage | import("zlib").Gunzip;
|
|
9
|
-
export declare function readStream(stream: Readable, { length, limit }: {
|
|
10
|
-
length?: number;
|
|
11
|
-
limit?: number;
|
|
12
|
-
}): Promise<Buffer>;
|
package/esm/stream.js
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import { createBrotliDecompress, createGunzip, createInflate } from 'node:zlib';
|
|
2
|
-
import './polyfillWithResolvers.js';
|
|
3
|
-
// note: there might be multiple encodings applied to the stream
|
|
4
|
-
// we only support one encoding
|
|
5
|
-
export function getContentStream(req, encoding, disableInflate) {
|
|
6
|
-
if (disableInflate && encoding !== 'identity')
|
|
7
|
-
throw new Error(`content-encoding ${encoding} is not supported`);
|
|
8
|
-
switch (encoding) {
|
|
9
|
-
case 'deflate': {
|
|
10
|
-
const stream = createInflate();
|
|
11
|
-
req.pipe(stream);
|
|
12
|
-
return stream;
|
|
13
|
-
}
|
|
14
|
-
case 'gzip': {
|
|
15
|
-
const stream = createGunzip();
|
|
16
|
-
req.pipe(stream);
|
|
17
|
-
return stream;
|
|
18
|
-
}
|
|
19
|
-
case 'br': {
|
|
20
|
-
const stream = createBrotliDecompress();
|
|
21
|
-
req.pipe(stream);
|
|
22
|
-
return stream;
|
|
23
|
-
}
|
|
24
|
-
case 'identity':
|
|
25
|
-
return req;
|
|
26
|
-
default:
|
|
27
|
-
throw new Error(`unsupported content-encoding ${encoding}`);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
// https://github.com/stream-utils/raw-body/blob/191e4b6506dcf77198eed01c8feb4b6817008342/index.js#L155
|
|
31
|
-
export async function readStream(stream, { length, limit }) {
|
|
32
|
-
let completed = false;
|
|
33
|
-
// check the length and limit options.
|
|
34
|
-
// note: we intentionally leave the stream paused,
|
|
35
|
-
// so users should handle the stream themselves.
|
|
36
|
-
if (limit !== undefined && length !== undefined && length > limit)
|
|
37
|
-
throw new Error('request entity too large');
|
|
38
|
-
let received = 0;
|
|
39
|
-
const buffers = [];
|
|
40
|
-
const defer = Promise.withResolvers();
|
|
41
|
-
// attach listeners
|
|
42
|
-
stream.on('aborted', onAborted);
|
|
43
|
-
stream.on('close', onClose);
|
|
44
|
-
stream.on('data', onData);
|
|
45
|
-
stream.on('end', onEnd);
|
|
46
|
-
stream.on('error', onError);
|
|
47
|
-
function done(err, result) {
|
|
48
|
-
if (completed)
|
|
49
|
-
return;
|
|
50
|
-
completed = true;
|
|
51
|
-
onClose();
|
|
52
|
-
if (err) {
|
|
53
|
-
stream.unpipe?.();
|
|
54
|
-
stream.pause?.();
|
|
55
|
-
defer.reject(err);
|
|
56
|
-
}
|
|
57
|
-
else
|
|
58
|
-
defer.resolve(result);
|
|
59
|
-
}
|
|
60
|
-
function onData(chunk) {
|
|
61
|
-
if (completed)
|
|
62
|
-
return;
|
|
63
|
-
received += chunk.length;
|
|
64
|
-
if (limit !== undefined && received > limit) {
|
|
65
|
-
done(new Error('request entity too large'));
|
|
66
|
-
}
|
|
67
|
-
else
|
|
68
|
-
buffers.push(chunk);
|
|
69
|
-
}
|
|
70
|
-
function onError(err) {
|
|
71
|
-
done(err);
|
|
72
|
-
}
|
|
73
|
-
function onEnd() {
|
|
74
|
-
if (length !== undefined && received !== length)
|
|
75
|
-
done(new Error('request size did not match content length'));
|
|
76
|
-
else
|
|
77
|
-
done(undefined, Buffer.concat(buffers));
|
|
78
|
-
}
|
|
79
|
-
function onAborted() {
|
|
80
|
-
done(new Error('request aborted'));
|
|
81
|
-
}
|
|
82
|
-
function onClose() {
|
|
83
|
-
buffers.splice(0, buffers.length);
|
|
84
|
-
stream.off('aborted', onAborted);
|
|
85
|
-
stream.off('data', onData);
|
|
86
|
-
stream.off('end', onEnd);
|
|
87
|
-
stream.off('error', onError);
|
|
88
|
-
stream.off('close', onClose);
|
|
89
|
-
}
|
|
90
|
-
return await defer.promise;
|
|
91
|
-
}
|
|
92
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3N0cmVhbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUMsc0JBQXNCLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBQyxNQUFNLFdBQVcsQ0FBQTtBQUM3RSxPQUFPLDRCQUE0QixDQUFBO0FBRW5DLGdFQUFnRTtBQUNoRSwrQkFBK0I7QUFDL0IsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEdBQW9CLEVBQUUsUUFBZ0IsRUFBRSxjQUF3QjtJQUNoRyxJQUFJLGNBQWMsSUFBSSxRQUFRLEtBQUssVUFBVTtRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsb0JBQW9CLFFBQVEsbUJBQW1CLENBQUMsQ0FBQTtJQUUvRyxRQUFRLFFBQVEsRUFBRSxDQUFDO1FBQ2xCLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztZQUNoQixNQUFNLE1BQU0sR0FBRyxhQUFhLEVBQUUsQ0FBQTtZQUM5QixHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQ2hCLE9BQU8sTUFBTSxDQUFBO1FBQ2QsQ0FBQztRQUNELEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNiLE1BQU0sTUFBTSxHQUFHLFlBQVksRUFBRSxDQUFBO1lBQzdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDaEIsT0FBTyxNQUFNLENBQUE7UUFDZCxDQUFDO1FBQ0QsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ1gsTUFBTSxNQUFNLEdBQUcsc0JBQXNCLEVBQUUsQ0FBQTtZQUN2QyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQ2hCLE9BQU8sTUFBTSxDQUFBO1FBQ2QsQ0FBQztRQUNELEtBQUssVUFBVTtZQUNkLE9BQU8sR0FBRyxDQUFBO1FBQ1g7WUFDQyxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO0lBQzdELENB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
|
package/esm/vendors/etag.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
3
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
4
|
-
import type { IncomingMessage } from 'node:http';
|
|
5
|
-
import { type Stats } from 'node:fs';
|
|
6
|
-
export declare function entityTag(buf: Buffer, weak?: boolean): string;
|
|
7
|
-
export declare function entityTagPath(fileStat: Stats, filePath: string, weak?: boolean): Promise<string>;
|
|
8
|
-
export declare function statTag(stat: Stats): string;
|
|
9
|
-
export declare function isFreshETag(req: IncomingMessage, etag: string): true | undefined;
|
|
10
|
-
export declare function isFreshModifiedSince(req: IncomingMessage, lastModified: string): boolean | undefined;
|
package/esm/vendors/etag.js
DELETED
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
// etag: https://github.com/jshttp/etag/blob/b9f0642256e63654287299d205bc6ced71b1a228/index.js#L39
|
|
2
|
-
import crypto, { createHash } from 'node:crypto';
|
|
3
|
-
import { createReadStream } from 'node:fs';
|
|
4
|
-
export function entityTag(buf, weak) {
|
|
5
|
-
// pre-computed empty
|
|
6
|
-
return buf.length
|
|
7
|
-
? `${buf.length.toString(16)}-${crypto
|
|
8
|
-
.createHash('sha1')
|
|
9
|
-
.update(buf)
|
|
10
|
-
.digest('base64')
|
|
11
|
-
.substring(0, 27)}"`
|
|
12
|
-
: `${weak ? 'W/' : ''}"0-2jmj7l5rSw0yVb/vlWAYkK/YBwk"`;
|
|
13
|
-
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag#directives
|
|
14
|
-
// weak W/ vs strong eTag
|
|
15
|
-
// same weak eTag: 2 resources might be semantically equivalent, but not byte-for-byte identical
|
|
16
|
-
}
|
|
17
|
-
export async function entityTagPath(fileStat, filePath, weak) {
|
|
18
|
-
const hash = createHash('sha1');
|
|
19
|
-
const defer = Promise.withResolvers();
|
|
20
|
-
createReadStream(filePath).pipe(hash)
|
|
21
|
-
.on('finish', defer.resolve)
|
|
22
|
-
.on('error', defer.reject);
|
|
23
|
-
await defer.promise;
|
|
24
|
-
return `${fileStat.size.toString(16)}-${hash
|
|
25
|
-
.digest('base64')
|
|
26
|
-
.substring(0, 27)}`;
|
|
27
|
-
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag#directives
|
|
28
|
-
// weak W/ vs strong eTag
|
|
29
|
-
// same weak eTag: 2 resources might be semantically equivalent, but not byte-for-byte identical
|
|
30
|
-
}
|
|
31
|
-
const CACHE_CONTROL_NO_CACHE_REGEXP = /(?:^|,)\s*?no-cache\s*?(?:,|$)/;
|
|
32
|
-
export function statTag(stat) {
|
|
33
|
-
const mtime = stat.mtime.getTime().toString(16);
|
|
34
|
-
const size = stat.size.toString(16);
|
|
35
|
-
return `"${size}-${mtime}"`;
|
|
36
|
-
}
|
|
37
|
-
// https://github.com/jshttp/fresh/blob/05254186fd7428915224db46144fc94293a7df7d/index.js#L33
|
|
38
|
-
export function isFreshETag(req, etag) {
|
|
39
|
-
const noneMatch = req.headers['if-none-match'];
|
|
40
|
-
if (!noneMatch)
|
|
41
|
-
return;
|
|
42
|
-
// Always return stale when Cache-Control: no-cache
|
|
43
|
-
// to support end-to-end reload requests
|
|
44
|
-
// https://tools.ietf.org/html/rfc2616#section-14.9.4
|
|
45
|
-
const cacheControl = req.headers['cache-control'];
|
|
46
|
-
if (cacheControl && CACHE_CONTROL_NO_CACHE_REGEXP.test(cacheControl))
|
|
47
|
-
return;
|
|
48
|
-
if (noneMatch && noneMatch !== '*') {
|
|
49
|
-
if (!etag)
|
|
50
|
-
return;
|
|
51
|
-
let etagStale = true;
|
|
52
|
-
for (const match of parseTokenList(noneMatch)) {
|
|
53
|
-
if (match === etag || match === `W/${etag}` || `W/${match}` === etag) {
|
|
54
|
-
etagStale = false;
|
|
55
|
-
break;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
if (etagStale)
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
return true;
|
|
62
|
-
}
|
|
63
|
-
export function isFreshModifiedSince(req, lastModified) {
|
|
64
|
-
const modifiedSince = req.headers['if-modified-since'];
|
|
65
|
-
if (!modifiedSince)
|
|
66
|
-
return;
|
|
67
|
-
// Always return stale when Cache-Control: no-cache
|
|
68
|
-
// to support end-to-end reload requests
|
|
69
|
-
// https://tools.ietf.org/html/rfc2616#section-14.9.4
|
|
70
|
-
const cacheControl = req.headers['cache-control'];
|
|
71
|
-
if (cacheControl && CACHE_CONTROL_NO_CACHE_REGEXP.test(cacheControl))
|
|
72
|
-
return;
|
|
73
|
-
if (modifiedSince && lastModified) {
|
|
74
|
-
const lastModifiedDate = Date.parse(lastModified);
|
|
75
|
-
const modifiedSinceDate = Date.parse(modifiedSince);
|
|
76
|
-
return !isNaN(lastModifiedDate) && !isNaN(modifiedSinceDate) && lastModifiedDate <= modifiedSinceDate;
|
|
77
|
-
}
|
|
78
|
-
return true;
|
|
79
|
-
}
|
|
80
|
-
function parseTokenList(str) {
|
|
81
|
-
let end = 0;
|
|
82
|
-
const list = [];
|
|
83
|
-
let start = 0;
|
|
84
|
-
// gather tokens
|
|
85
|
-
for (let i = 0, len = str.length; i < len; i++) {
|
|
86
|
-
switch (str.charCodeAt(i)) {
|
|
87
|
-
case 0x20: /* */
|
|
88
|
-
if (start === end) {
|
|
89
|
-
start = end = i + 1;
|
|
90
|
-
}
|
|
91
|
-
break;
|
|
92
|
-
case 0x2c: /* , */
|
|
93
|
-
list.push(str.substring(start, end));
|
|
94
|
-
start = end = i + 1;
|
|
95
|
-
break;
|
|
96
|
-
default:
|
|
97
|
-
end = i + 1;
|
|
98
|
-
break;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
// final token
|
|
102
|
-
list.push(str.substring(start, end));
|
|
103
|
-
return list;
|
|
104
|
-
}
|
|
105
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXRhZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZW5kb3JzL2V0YWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0dBQWtHO0FBQ2xHLE9BQU8sTUFBTSxFQUFFLEVBQUMsVUFBVSxFQUFDLE1BQU0sYUFBYSxDQUFBO0FBRTlDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBYSxNQUFNLFNBQVMsQ0FBQTtBQUVwRCxNQUFNLFVBQVUsU0FBUyxDQUFDLEdBQVcsRUFBRSxJQUFjO0lBQ3BELHFCQUFxQjtJQUNyQixPQUFPLEdBQUcsQ0FBQyxNQUFNO1FBQ2hCLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLE1BQU07YUFDcEMsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixNQUFNLENBQUMsR0FBRyxDQUFDO2FBQ1gsTUFBTSxDQUFDLFFBQVEsQ0FBQzthQUNoQixTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHO1FBQ3JCLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLGlDQUFpQyxDQUFBO0lBQ3ZELDRFQUE0RTtJQUM1RSx5QkFBeUI7SUFDekIsZ0dBQWdHO0FBQ2pHLENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLGFBQWEsQ0FBQyxRQUFlLEVBQUUsUUFBZ0IsRUFBRSxJQUFjO0lBQ3BGLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUMvQixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsYUFBYSxFQUFVLENBQUE7SUFDN0MsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztTQUNuQyxFQUFFLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUM7U0FDM0IsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMs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
|
package/esm/vendors/fresh.d.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Check freshness of the response using request and response headers.
|
|
3
|
-
*
|
|
4
|
-
* @param {Object} reqHeaders
|
|
5
|
-
* @param {Object} resHeaders
|
|
6
|
-
* @return {Boolean}
|
|
7
|
-
* @public
|
|
8
|
-
*/
|
|
9
|
-
export declare function fresh(reqHeaders: any, resHeaders: any): boolean;
|
|
10
|
-
/**
|
|
11
|
-
* Parse an HTTP Date into a number.
|
|
12
|
-
*
|
|
13
|
-
* @param {string} date
|
|
14
|
-
* @private
|
|
15
|
-
*/
|
|
16
|
-
export declare function parseHttpDate(date: any): number;
|
|
17
|
-
/**
|
|
18
|
-
* Parse a HTTP token list.
|
|
19
|
-
*
|
|
20
|
-
* @param {string} str
|
|
21
|
-
* @private
|
|
22
|
-
*/
|
|
23
|
-
export declare function parseTokenList(str: any): any[];
|
package/esm/vendors/fresh.js
DELETED
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
const CACHE_CONTROL_NO_CACHE_REGEXP = /(?:^|,)\s*?no-cache\s*?(?:,|$)/;
|
|
2
|
-
/**
|
|
3
|
-
* Check freshness of the response using request and response headers.
|
|
4
|
-
*
|
|
5
|
-
* @param {Object} reqHeaders
|
|
6
|
-
* @param {Object} resHeaders
|
|
7
|
-
* @return {Boolean}
|
|
8
|
-
* @public
|
|
9
|
-
*/
|
|
10
|
-
export function fresh(reqHeaders, resHeaders) {
|
|
11
|
-
// fields
|
|
12
|
-
const modifiedSince = reqHeaders['if-modified-since'];
|
|
13
|
-
const noneMatch = reqHeaders['if-none-match'];
|
|
14
|
-
// unconditional request
|
|
15
|
-
if (!modifiedSince && !noneMatch) {
|
|
16
|
-
return false;
|
|
17
|
-
}
|
|
18
|
-
// Always return stale when Cache-Control: no-cache
|
|
19
|
-
// to support end-to-end reload requests
|
|
20
|
-
// https://tools.ietf.org/html/rfc2616#section-14.9.4
|
|
21
|
-
const cacheControl = reqHeaders['cache-control'];
|
|
22
|
-
if (cacheControl && CACHE_CONTROL_NO_CACHE_REGEXP.test(cacheControl)) {
|
|
23
|
-
return false;
|
|
24
|
-
}
|
|
25
|
-
// if-none-match takes precedent over if-modified-since
|
|
26
|
-
if (noneMatch) {
|
|
27
|
-
if (noneMatch === '*') {
|
|
28
|
-
return true;
|
|
29
|
-
}
|
|
30
|
-
const etag = resHeaders.etag;
|
|
31
|
-
if (!etag) {
|
|
32
|
-
return false;
|
|
33
|
-
}
|
|
34
|
-
const matches = parseTokenList(noneMatch);
|
|
35
|
-
for (let i = 0; i < matches.length; i++) {
|
|
36
|
-
const match = matches[i];
|
|
37
|
-
if (match === etag || match === 'W/' + etag || 'W/' + match === etag) {
|
|
38
|
-
return true;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
return false;
|
|
42
|
-
}
|
|
43
|
-
// if-modified-since
|
|
44
|
-
if (modifiedSince) {
|
|
45
|
-
const lastModified = resHeaders['last-modified'];
|
|
46
|
-
const modifiedStale = !lastModified || !(parseHttpDate(lastModified) <= parseHttpDate(modifiedSince));
|
|
47
|
-
if (modifiedStale) {
|
|
48
|
-
return false;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
return true;
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Parse an HTTP Date into a number.
|
|
55
|
-
*
|
|
56
|
-
* @param {string} date
|
|
57
|
-
* @private
|
|
58
|
-
*/
|
|
59
|
-
export function parseHttpDate(date) {
|
|
60
|
-
const timestamp = date && Date.parse(date);
|
|
61
|
-
// istanbul ignore next: guard against date.js Date.parse patching
|
|
62
|
-
return typeof timestamp === 'number' ? timestamp : NaN;
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Parse a HTTP token list.
|
|
66
|
-
*
|
|
67
|
-
* @param {string} str
|
|
68
|
-
* @private
|
|
69
|
-
*/
|
|
70
|
-
export function parseTokenList(str) {
|
|
71
|
-
let end = 0;
|
|
72
|
-
const list = [];
|
|
73
|
-
let start = 0;
|
|
74
|
-
// gather tokens
|
|
75
|
-
let i = 0, len = str.length;
|
|
76
|
-
for (; i < len; i++) {
|
|
77
|
-
switch (str.charCodeAt(i)) {
|
|
78
|
-
case 0x20: /* */
|
|
79
|
-
if (start === end) {
|
|
80
|
-
start = end = i + 1;
|
|
81
|
-
}
|
|
82
|
-
break;
|
|
83
|
-
case 0x2c: /* , */
|
|
84
|
-
list.push(str.substring(start, end));
|
|
85
|
-
start = end = i + 1;
|
|
86
|
-
break;
|
|
87
|
-
default:
|
|
88
|
-
end = i + 1;
|
|
89
|
-
break;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
// final token
|
|
93
|
-
list.push(str.substring(start, end));
|
|
94
|
-
return list;
|
|
95
|
-
}
|
|
96
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJlc2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmVuZG9ycy9mcmVzaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLDZCQUE2QixHQUFHLGdDQUFnQyxDQUFBO0FBRXRFOzs7Ozs7O0dBT0c7QUFFSCxNQUFNLFVBQVUsS0FBSyxDQUFDLFVBQVUsRUFBRSxVQUFVO0lBQzNDLFNBQVM7SUFDVCxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtJQUNyRCxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUE7SUFFN0Msd0JBQXdCO0lBQ3hCLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNsQyxPQUFPLEtBQUssQ0FBQTtJQUNiLENBQUM7SUFFRCxtREFBbUQ7SUFDbkQsd0NBQXdDO0lBQ3hDLHFEQUFxRDtJQUNyRCxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUE7SUFDaEQsSUFBSSxZQUFZLElBQUksNkJBQTZCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7UUFDdEUsT0FBTyxLQUFLLENBQUE7SUFDYixDQUFDO0lBRUQsdURBQXVEO0lBQ3ZELElBQUksU0FBUyxFQUFFLENBQUM7UUFDZixJQUFJLFNBQVMsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUN2QixPQUFPLElBQUksQ0FBQTtRQUNaLENBQUM7UUFDRCxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFBO1FBRTVCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNYLE9BQU8sS0FBSyxDQUFBO1FBQ2IsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUN6QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUs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
|
package/esm/vendors/mime.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function contentTypeForExtension(extension: any): any;
|
package/esm/vendors/mime.js
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import mimeDb from './mimeDb.js';
|
|
2
|
-
import { mimeScore } from './mimeScore.js';
|
|
3
|
-
const extensionToMime = Object.create(null);
|
|
4
|
-
for (const [type, { extensions = [] }] of Object.entries(mimeDb))
|
|
5
|
-
for (const extension of extensions)
|
|
6
|
-
extensionToMime[extension] = preferredType(extension, type, extensionToMime[extension]);
|
|
7
|
-
function preferredType(ext, type0, type1) {
|
|
8
|
-
const score0 = type0 ? mimeScore(type0, mimeDb[type0].source) : 0;
|
|
9
|
-
const score1 = type1 ? mimeScore(type1, mimeDb[type1].source) : 0;
|
|
10
|
-
return score0 > score1 ? type0 : type1;
|
|
11
|
-
}
|
|
12
|
-
export function contentTypeForExtension(extension) {
|
|
13
|
-
const mimeType = extensionToMime[extension.toLowerCase()];
|
|
14
|
-
if (!mimeType)
|
|
15
|
-
return;
|
|
16
|
-
if (!mimeType.includes('charset')) {
|
|
17
|
-
const charset = determineCharset(mimeType);
|
|
18
|
-
if (charset)
|
|
19
|
-
return mimeType + '; charset=' + charset.toLowerCase();
|
|
20
|
-
}
|
|
21
|
-
return mimeType;
|
|
22
|
-
}
|
|
23
|
-
const EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/;
|
|
24
|
-
const TEXT_TYPE_REGEXP = /^text\//i;
|
|
25
|
-
function determineCharset(type) {
|
|
26
|
-
// _TODO: use media-typer
|
|
27
|
-
const match = EXTRACT_TYPE_REGEXP.exec(type);
|
|
28
|
-
const mime = match && mimeDb[match[1].toLowerCase()];
|
|
29
|
-
if (mime?.charset)
|
|
30
|
-
return mime.charset;
|
|
31
|
-
// default text/* to utf-8
|
|
32
|
-
if (match && TEXT_TYPE_REGEXP.test(match[1]))
|
|
33
|
-
return 'UTF-8';
|
|
34
|
-
}
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZW5kb3JzL21pbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNLE1BQU0sYUFBYSxDQUFBO0FBQ2hDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQTtBQUV4QyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFBO0FBRTNDLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxFQUFDLFVBQVUsR0FBRyxFQUFFLEVBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQzdELEtBQUssTUFBTSxTQUFTLElBQUksVUFBVTtRQUNqQyxlQUFlLENBQUMsU0FBUyxDQUFDLEdBQUcsYUFBYSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUE7QUFFekYsU0FBUyxhQUFhLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLO0lBQ3ZDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNqRSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFFakUsT0FBTyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQTtBQUN2QyxDQUFDO0FBRUQsTUFBTSxVQUFVLHVCQUF1QixDQUFDLFNBQVM7SUFDaEQsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFBO0lBQ3pELElBQUksQ0FBQyxRQUFRO1FBQUUsT0FBTTtJQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ25DLE1BQU0sT0FBTyxHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQzFDLElBQUksT0FBTztZQUFFLE9BQU8sUUFBUSxHQUFHLFlBQVksR0FBRyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDcEUsQ0FBQztJQUNELE9BQU8sUUFBUSxDQUFBO0FBQ2hCLENBQUM7QUFFRCxNQUFNLG1CQUFtQixHQUFHLHlCQUF5QixDQUFBO0FBQ3JELE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxDQUFBO0FBRW5DLFNBQVMsZ0JBQWdCLENBQUUsSUFBSTtJQUM5Qix5QkFBeUI7SUFDekIsTUFBTSxLQUFLLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQzVDLE1BQU0sSUFBSSxHQUFHLEtBQUssSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUE7SUFFcEQsSUFBSSxJQUFJLEVBQUUsT0FBTztRQUFFLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQTtJQUV0QywwQkFBMEI7SUFDMUIsSUFBSSxLQUFLLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUFFLE9BQU8sT0FBTyxDQUFBO0FBQzdELENBQUMifQ==
|