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.
Files changed (106) hide show
  1. package/README.md +47 -55
  2. package/{cjs → lib}/body.d.ts +2 -3
  3. package/lib/body.js +10 -0
  4. package/{esm → lib}/bodyHelpers.d.ts +2 -4
  5. package/lib/bodyHelpers.js +89 -0
  6. package/{esm → lib}/dx.d.ts +5 -8
  7. package/lib/dx.js +127 -0
  8. package/{cjs → lib}/dxHelpers.d.ts +0 -4
  9. package/{esm → lib}/dxHelpers.js +0 -2
  10. package/{cjs → lib}/index.d.ts +0 -1
  11. package/{esm/index.d.ts → lib/index.js} +0 -1
  12. package/lib/logger.js +56 -0
  13. package/lib/router.d.ts +42 -0
  14. package/lib/router.js +43 -0
  15. package/lib/static.js +22 -0
  16. package/{cjs → lib}/staticHelpers.d.ts +0 -2
  17. package/lib/staticHelpers.js +186 -0
  18. package/{cjs → lib}/stream.d.ts +2 -7
  19. package/lib/stream.js +90 -0
  20. package/{esm → lib}/vendors/contentType.js +0 -1
  21. package/{cjs → lib}/vendors/etag.d.ts +0 -3
  22. package/lib/vendors/etag.js +104 -0
  23. package/{cjs → lib}/vendors/fresh.d.ts +2 -2
  24. package/lib/vendors/fresh.js +95 -0
  25. package/lib/vendors/mime.d.ts +1 -0
  26. package/lib/vendors/mime.js +35 -0
  27. package/{esm → lib}/vendors/mimeDb.js +0 -1
  28. package/{cjs → lib}/vendors/mimeScore.d.ts +1 -1
  29. package/lib/vendors/mimeScore.js +45 -0
  30. package/{cjs → lib}/vendors/onFinished.d.ts +1 -1
  31. package/lib/vendors/onFinished.js +231 -0
  32. package/lib/vendors/rangeParser.d.ts +20 -0
  33. package/lib/vendors/rangeParser.js +121 -0
  34. package/package.json +10 -19
  35. package/cjs/body.js +0 -14
  36. package/cjs/bodyHelpers.d.ts +0 -16
  37. package/cjs/bodyHelpers.js +0 -101
  38. package/cjs/connect.d.ts +0 -5
  39. package/cjs/connect.js +0 -44
  40. package/cjs/dx.d.ts +0 -46
  41. package/cjs/dx.js +0 -144
  42. package/cjs/dxHelpers.js +0 -123
  43. package/cjs/express.d.ts +0 -4
  44. package/cjs/express.js +0 -43
  45. package/cjs/helpers.js +0 -14
  46. package/cjs/index.js +0 -38
  47. package/cjs/logger.js +0 -61
  48. package/cjs/package.json +0 -3
  49. package/cjs/polyfillWithResolvers.d.ts +0 -1
  50. package/cjs/polyfillWithResolvers.js +0 -17
  51. package/cjs/router.js +0 -47
  52. package/cjs/static.js +0 -27
  53. package/cjs/staticHelpers.js +0 -195
  54. package/cjs/stream.js +0 -97
  55. package/cjs/vendors/contentType.js +0 -92
  56. package/cjs/vendors/etag.js +0 -136
  57. package/cjs/vendors/fresh.js +0 -102
  58. package/cjs/vendors/mime.d.ts +0 -1
  59. package/cjs/vendors/mime.js +0 -42
  60. package/cjs/vendors/mimeDb.js +0 -9417
  61. package/cjs/vendors/mimeScore.js +0 -50
  62. package/cjs/vendors/onFinished.js +0 -245
  63. package/cjs/vendors/rangeParser.d.ts +0 -10
  64. package/cjs/vendors/rangeParser.js +0 -126
  65. package/esm/body.d.ts +0 -8
  66. package/esm/body.js +0 -11
  67. package/esm/bodyHelpers.js +0 -90
  68. package/esm/connect.d.ts +0 -5
  69. package/esm/connect.js +0 -40
  70. package/esm/dx.js +0 -128
  71. package/esm/dxHelpers.d.ts +0 -49
  72. package/esm/express.d.ts +0 -4
  73. package/esm/express.js +0 -35
  74. package/esm/helpers.js +0 -3
  75. package/esm/index.js +0 -9
  76. package/esm/logger.d.ts +0 -3
  77. package/esm/logger.js +0 -57
  78. package/esm/polyfillWithResolvers.d.ts +0 -1
  79. package/esm/polyfillWithResolvers.js +0 -16
  80. package/esm/router.js +0 -44
  81. package/esm/static.d.ts +0 -5
  82. package/esm/static.js +0 -23
  83. package/esm/staticHelpers.d.ts +0 -18
  84. package/esm/staticHelpers.js +0 -188
  85. package/esm/stream.d.ts +0 -12
  86. package/esm/stream.js +0 -92
  87. package/esm/vendors/contentType.d.ts +0 -4
  88. package/esm/vendors/etag.d.ts +0 -10
  89. package/esm/vendors/etag.js +0 -105
  90. package/esm/vendors/fresh.d.ts +0 -23
  91. package/esm/vendors/fresh.js +0 -96
  92. package/esm/vendors/mime.d.ts +0 -1
  93. package/esm/vendors/mime.js +0 -35
  94. package/esm/vendors/mimeDb.d.ts +0 -9413
  95. package/esm/vendors/mimeScore.d.ts +0 -5
  96. package/esm/vendors/mimeScore.js +0 -46
  97. package/esm/vendors/onFinished.d.ts +0 -14
  98. package/esm/vendors/onFinished.js +0 -241
  99. package/esm/vendors/rangeParser.d.ts +0 -10
  100. package/esm/vendors/rangeParser.js +0 -122
  101. /package/{cjs → lib}/helpers.d.ts +0 -0
  102. /package/{esm/helpers.d.ts → lib/helpers.js} +0 -0
  103. /package/{cjs → lib}/logger.d.ts +0 -0
  104. /package/{cjs → lib}/static.d.ts +0 -0
  105. /package/{cjs → lib}/vendors/contentType.d.ts +0 -0
  106. /package/{cjs → lib}/vendors/mimeDb.d.ts +0 -0
@@ -1,195 +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.sendFileTrusted = void 0;
7
- require("./polyfillWithResolvers.js");
8
- const node_path_1 = __importDefault(require("node:path"));
9
- const promises_1 = require("node:fs/promises");
10
- const etag_js_1 = require("./vendors/etag.js");
11
- const mime_js_1 = require("./vendors/mime.js");
12
- const fresh_js_1 = require("./vendors/fresh.js");
13
- const rangeParser_js_1 = require("./vendors/rangeParser.js");
14
- const node_fs_1 = require("node:fs");
15
- const onFinished_js_1 = require("./vendors/onFinished.js");
16
- const node_util_1 = require("node:util");
17
- const BYTES_RANGE_REGEXP = /^ *bytes=/;
18
- const UP_PATH_REGEXP = /(?:^|[\\/])\.\.(?:[\\/]|$)/;
19
- async function sendFileTrusted(req, res, pathname, // plain path, not URI-encoded
20
- { root, allowDotfiles, start = 0, end, disableAcceptRanges, disableLastModified, etag = 'strong', disableCacheControl, maxAge = 60 * 60 * 24 * 365 * 1000, // 1 year
21
- immutable, } = {}) {
22
- // null byte(s)
23
- if (pathname.includes('\0'))
24
- throw new Error('Forbidden');
25
- let parts;
26
- if (root) {
27
- // normalize
28
- pathname = node_path_1.default.normalize(`.${node_path_1.default.sep}${pathname}`);
29
- // malicious path
30
- if (UP_PATH_REGEXP.test(pathname))
31
- throw new Error('Forbidden');
32
- // explode path parts
33
- parts = pathname.split(node_path_1.default.sep);
34
- // join / normalize from optional root dir
35
- pathname = node_path_1.default.normalize(node_path_1.default.join(root, pathname));
36
- }
37
- else {
38
- // malicious path
39
- if (UP_PATH_REGEXP.test(pathname))
40
- throw new Error('Forbidden');
41
- // explode path parts
42
- parts = node_path_1.default.normalize(pathname).split(node_path_1.default.sep);
43
- // join / normalize from optional root dir
44
- pathname = node_path_1.default.resolve(pathname);
45
- }
46
- // dotfile handling
47
- if (parts.some(part => part.length > 1 && part[0] === '.') && !allowDotfiles)
48
- throw new Error('Forbidden: dotfiles are not allowed');
49
- // pathEndsWithSep
50
- if (pathname[pathname.length - 1] === node_path_1.default.sep)
51
- throw new Error('Forbidden: directory access is not allowed');
52
- const fileStat = await (0, promises_1.stat)(pathname);
53
- // not found, check extensions
54
- // if (err.code === 'ENOENT' && !path.extname(pathname) && !pathEndsWithSep) throw err
55
- // switch (err.code) {
56
- // case 'ENAMETOOLONG':
57
- // case 'ENOENT':
58
- // case 'ENOTDIR':
59
- // default:
60
- // }
61
- if (fileStat.isDirectory())
62
- throw new Error('Forbidden: directory access is not allowed');
63
- if (res.headersSent)
64
- return;
65
- //region set header fields
66
- if (!disableAcceptRanges && !res.getHeader('Accept-Ranges'))
67
- res.setHeader('Accept-Ranges', 'bytes');
68
- if (!disableCacheControl && !res.getHeader('Cache-Control'))
69
- res.setHeader('Cache-Control', [
70
- `public, max-age=${Math.floor(maxAge / 1000)}`,
71
- immutable && 'immutable',
72
- ].filter(Boolean).join(', '));
73
- if (!disableLastModified && !res.getHeader('Last-Modified'))
74
- res.setHeader('Last-Modified', fileStat.mtime.toUTCString());
75
- if (etag !== 'disabled' && !res.getHeader('ETag'))
76
- res.setHeader('ETag', etag === 'weak' ? (0, etag_js_1.statTag)(fileStat) : await (0, etag_js_1.entityTagPath)(fileStat, pathname, false));
77
- //endregion set header fields
78
- // content-type
79
- if (!res.getHeader('Content-Type'))
80
- res.setHeader('Content-Type', (0, mime_js_1.contentTypeForExtension)(node_path_1.default.extname(pathname).slice(1)) || 'application/octet-stream');
81
- // conditional GET support
82
- // isConditionalGET
83
- if (req.headers['if-match'] || req.headers['if-unmodified-since'] || req.headers['if-none-match'] || req.headers['if-modified-since']) {
84
- //region isPreconditionFailure
85
- // if-match
86
- const match = req.headers['if-match'];
87
- if (match) {
88
- const etag = res.getHeader('ETag');
89
- if (!etag
90
- || (match !== '*' && (0, fresh_js_1.parseTokenList)(match).every(match => match !== etag && match !== 'W/' + etag && 'W/' + match !== etag)))
91
- throw new Error('Precondition Failed: request headers do not match the response');
92
- }
93
- // if-unmodified-since (ignore when using strong etag since mtime may be unreliable)
94
- if (etag === 'weak') {
95
- const unmodifiedSince = (0, fresh_js_1.parseHttpDate)(req.headers['if-unmodified-since']);
96
- if (!isNaN(unmodifiedSince)) {
97
- const lastModified = (0, fresh_js_1.parseHttpDate)(res.getHeader('Last-Modified'));
98
- if (isNaN(lastModified) || lastModified > unmodifiedSince)
99
- throw new Error('Precondition Failed: resource has been modified since the specified date');
100
- }
101
- }
102
- //endregion isPreconditionFailure
103
- // isCachable
104
- if ((res.statusCode >= 200 && res.statusCode < 300 || res.statusCode === 304)
105
- && (0, fresh_js_1.fresh)(req.headers, {
106
- etag: res.getHeader('ETag'),
107
- // Only use last-modified for freshness check when using weak Etag
108
- 'last-modified': etag === 'weak' ? res.getHeader('Last-Modified') : undefined
109
- })) {
110
- // removeContentHeaderFields
111
- res.removeHeader('Content-Encoding');
112
- res.removeHeader('Content-Language');
113
- res.removeHeader('Content-Length');
114
- res.removeHeader('Content-Range');
115
- res.removeHeader('Content-Type');
116
- res.statusCode = 304;
117
- return void await (0, node_util_1.promisify)(res.end.bind(res))();
118
- }
119
- }
120
- // adjust len to start/end options
121
- let len = fileStat.size;
122
- len = Math.max(0, len - start);
123
- if (end !== undefined) {
124
- const bytes = end - start + 1;
125
- if (len > bytes)
126
- len = bytes;
127
- }
128
- // Range support
129
- let ranges = req.headers.range;
130
- if (!disableAcceptRanges && BYTES_RANGE_REGEXP.test(ranges ?? '')) {
131
- // parse
132
- let rangesNum = (0, rangeParser_js_1.parseRange)(len, ranges, { combine: true });
133
- // If-Range support
134
- if (!isRangeFresh(req, res))
135
- rangesNum = -2;
136
- // unsatisfiable
137
- if (rangesNum === -1) {
138
- // Content-Range
139
- res.setHeader('Content-Range', contentRange('bytes', len));
140
- // 416 Requested Range Not Satisfiable
141
- throw new Error('Requested Range Not Satisfiable: requested range is not satisfiable');
142
- // return this.error(416, {
143
- // headers: {'Content-Range': res.getHeader('Content-Range')}
144
- // })
145
- }
146
- // valid (syntactically invalid/multiple ranges are treated as a regular response)
147
- if (rangesNum !== -2 && rangesNum.length === 1) {
148
- // Content-Range
149
- res.statusCode = 206;
150
- res.setHeader('Content-Range', contentRange('bytes', len, rangesNum[0]));
151
- // adjust for requested range
152
- start += rangesNum[0].start;
153
- len = rangesNum[0].end - rangesNum[0].start + 1;
154
- }
155
- }
156
- // set read options
157
- end = Math.max(start, start + len - 1);
158
- // content-length
159
- res.setHeader('Content-Length', len);
160
- // HEAD support
161
- if (req.method === 'HEAD')
162
- return void await (0, node_util_1.promisify)(res.end.bind(res))();
163
- // Weak ETag path: stream file
164
- const stream = (0, node_fs_1.createReadStream)(pathname, { start, end });
165
- stream.pipe(res);
166
- const defer = Promise.withResolvers();
167
- (0, onFinished_js_1.onFinished)(res, cleanup);
168
- stream.on('error', err => {
169
- cleanup();
170
- defer.reject(err);
171
- });
172
- stream.on('end', defer.resolve);
173
- function cleanup() {
174
- stream.destroy();
175
- }
176
- return defer.promise;
177
- }
178
- exports.sendFileTrusted = sendFileTrusted;
179
- function isRangeFresh(req, res) {
180
- const ifRange = req.headers['if-range'];
181
- if (!ifRange)
182
- return true;
183
- // if-range as etag
184
- if (ifRange.indexOf('"') !== -1) {
185
- const etag = res.getHeader('ETag');
186
- return etag && ifRange.includes(etag);
187
- }
188
- // if-range as modified date
189
- const lastModified = res.getHeader('Last-Modified');
190
- return (0, fresh_js_1.parseHttpDate)(lastModified) <= (0, fresh_js_1.parseHttpDate)(ifRange);
191
- }
192
- function contentRange(type, size, range) {
193
- return `${type} ${range ? range.start + '-' + range.end : '*'}/${size}`;
194
- }
195
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljSGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zdGF0aWNIZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLHNDQUFtQztBQUNuQywwREFBNEI7QUFDNUIsK0NBQXFDO0FBQ3JDLCtDQUF3RDtBQUN4RCwrQ0FBeUQ7QUFDekQsaURBQXVFO0FBQ3ZFLDZEQUFtRDtBQUNuRCxxQ0FBd0M7QUFDeEMsMkRBQWtEO0FBQ2xELHlDQUFtQztBQUVuQyxNQUFNLGtCQUFrQixHQUFHLFdBQVcsQ0FBQTtBQUN0QyxNQUFNLGNBQWMsR0FBRyw0QkFBNEIsQ0FBQTtBQXFCNUMsS0FBSyxVQUFVLGVBQWUsQ0FDcEMsR0FBb0IsRUFDcEIsR0FBbUIsRUFDbkIsUUFBZ0IsRUFBRSw4QkFBOEI7QUFDaEQsRUFDQyxJQUFJLEVBQUUsYUFBYSxFQUNuQixLQUFLLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFDZCxtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLElBQUksR0FBRyxRQUFRLEVBQ2YsbUJBQW1CLEVBQ25CLE1BQU0sR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxFQUFFLFNBQVM7QUFDN0MsU0FBUyxNQUNXLEVBQUU7SUFFdkIsZUFBZTtJQUNmLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBRXpELElBQUksS0FBZSxDQUFBO0lBQ25CLElBQUksSUFBSSxFQUFFLENBQUM7UUFDVixZQUFZO1FBQ1osUUFBUSxHQUFHLG1CQUFJLENBQUMsU0FBUyxDQUFDLElBQUksbUJBQUksQ0FBQyxHQUFHLEdBQUcsUUFBUSxFQUFFLENBQUMsQ0FBQTtRQUVwRCxpQkFBaUI7UUFDakIsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUFFLE1BQU0sSUFBSSxLQUFLLENB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TSxLQUFLLEdBQUcsT0FBTyxDQUFDLGFBQWEsRUFBUSxDQUFBO0lBRTNDLElBQUEsMEJBQVUsRUFBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDeEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEVBQUU7UUFDeEIsT0FBTyxFQUFFLENBQUE7UUFDVCxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2xCLENBQUMsQ0FBQyxDQUFBO0lBQ0YsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQy9CLFNBQVMsT0FBTztRQUNmLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUNqQixDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFBO0FBQ3JCLENBQUM7QUFoTUQsMENBZ01DO0FBRUQsU0FBUyxZQUFZLENBQUUsR0FBb0IsRUFBRSxHQUFtQjtJQUMvRCxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBRXZDLElBQUksQ0FBQyxPQUFPO1FBQUUsT0FBTyxJQUFJLENBQUE7SUFFekIsbUJBQW1CO0lBQ25CLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDbEMsT0FBTyxJQUFJLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUN0QyxDQUFDO0lBRUQsNEJBQTRCO0lBQzVCLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUE7SUFDbkQsT0FBTyxJQUFBLHdCQUFhLEVBQUMsWUFBWSxDQUFDLElBQUksSUFBQSx3QkFBYSxFQUFDLE9BQU8sQ0FBQyxDQUFBO0FBQzdELENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUs7SUFDdkMsT0FBTyxHQUFHLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQTtBQUN4RSxDQUFDIn0=
package/cjs/stream.js DELETED
@@ -1,97 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.readStream = exports.getContentStream = void 0;
4
- const node_zlib_1 = require("node:zlib");
5
- require("./polyfillWithResolvers.js");
6
- // note: there might be multiple encodings applied to the stream
7
- // we only support one encoding
8
- function getContentStream(req, encoding, disableInflate) {
9
- if (disableInflate && encoding !== 'identity')
10
- throw new Error(`content-encoding ${encoding} is not supported`);
11
- switch (encoding) {
12
- case 'deflate': {
13
- const stream = (0, node_zlib_1.createInflate)();
14
- req.pipe(stream);
15
- return stream;
16
- }
17
- case 'gzip': {
18
- const stream = (0, node_zlib_1.createGunzip)();
19
- req.pipe(stream);
20
- return stream;
21
- }
22
- case 'br': {
23
- const stream = (0, node_zlib_1.createBrotliDecompress)();
24
- req.pipe(stream);
25
- return stream;
26
- }
27
- case 'identity':
28
- return req;
29
- default:
30
- throw new Error(`unsupported content-encoding ${encoding}`);
31
- }
32
- }
33
- exports.getContentStream = getContentStream;
34
- // https://github.com/stream-utils/raw-body/blob/191e4b6506dcf77198eed01c8feb4b6817008342/index.js#L155
35
- async function readStream(stream, { length, limit }) {
36
- let completed = false;
37
- // check the length and limit options.
38
- // note: we intentionally leave the stream paused,
39
- // so users should handle the stream themselves.
40
- if (limit !== undefined && length !== undefined && length > limit)
41
- throw new Error('request entity too large');
42
- let received = 0;
43
- const buffers = [];
44
- const defer = Promise.withResolvers();
45
- // attach listeners
46
- stream.on('aborted', onAborted);
47
- stream.on('close', onClose);
48
- stream.on('data', onData);
49
- stream.on('end', onEnd);
50
- stream.on('error', onError);
51
- function done(err, result) {
52
- if (completed)
53
- return;
54
- completed = true;
55
- onClose();
56
- if (err) {
57
- stream.unpipe?.();
58
- stream.pause?.();
59
- defer.reject(err);
60
- }
61
- else
62
- defer.resolve(result);
63
- }
64
- function onData(chunk) {
65
- if (completed)
66
- return;
67
- received += chunk.length;
68
- if (limit !== undefined && received > limit) {
69
- done(new Error('request entity too large'));
70
- }
71
- else
72
- buffers.push(chunk);
73
- }
74
- function onError(err) {
75
- done(err);
76
- }
77
- function onEnd() {
78
- if (length !== undefined && received !== length)
79
- done(new Error('request size did not match content length'));
80
- else
81
- done(undefined, Buffer.concat(buffers));
82
- }
83
- function onAborted() {
84
- done(new Error('request aborted'));
85
- }
86
- function onClose() {
87
- buffers.splice(0, buffers.length);
88
- stream.off('aborted', onAborted);
89
- stream.off('data', onData);
90
- stream.off('end', onEnd);
91
- stream.off('error', onError);
92
- stream.off('close', onClose);
93
- }
94
- return await defer.promise;
95
- }
96
- exports.readStream = readStream;
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3N0cmVhbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFHQSx5Q0FBNkU7QUFDN0Usc0NBQW1DO0FBRW5DLGdFQUFnRTtBQUNoRSwrQkFBK0I7QUFDL0IsU0FBZ0IsZ0JBQWdCLENBQUMsR0FBb0IsRUFBRSxRQUFnQixFQUFFLGNBQXdCO0lBQ2hHLElBQUksY0FBYyxJQUFJLFFBQVEsS0FBSyxVQUFVO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsUUFBUSxtQkFBbUIsQ0FBQyxDQUFBO0lBRS9HLFFBQVEsUUFBUSxFQUFFLENBQUM7UUFDbEIsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLE1BQU0sTUFBTSxHQUFHLElBQUEseUJBQWEsR0FBRSxDQUFBO1lBQzlCLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDaEIsT0FBTyxNQUFNLENBQUE7UUFDZCxDQUFDO1FBQ0QsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ2IsTUFBTSxNQUFNLEdBQUcsSUFBQSx3QkFBWSxHQUFFLENBQUE7WUFDN0IsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUNoQixPQUFPLE1BQU0sQ0FBQTtRQUNkLENBQUM7UUFDRCxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDWCxNQUFNLE1BQU0sR0FBRyxJQUFBLGtDQUFzQixHQUFFLENBQUE7WUFDdkMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUNoQixPQUFPLE1BQU0sQ0FBQTtRQUNkLENBQUM7UUFDRCxLQUFLLFVBQVU7WUFDZCxPQUFPLEdBQUcsQ0FBQTtRQUNYO1lBQ0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsUUFBUSxFQUFFLENBQUMsQ0FBQTtJQUM3RCxDQUFDO0FBQ0YsQ0FBQztBQXhCRCw0Q0F3QkM7QUFFRCx1R0FBdUc7QUFDaEcs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
@@ -1,92 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseContentType = void 0;
4
- // https://github.com/jshttp/content-type/blob/d02574e9640bd4370f148c767b1b877b5a300070/index.js#L106
5
- /**
6
- * RegExp to match type in RFC 7231 sec 3.1.1.1
7
- *
8
- * media-type = type "/" subtype
9
- * type = token
10
- * subtype = token
11
- */
12
- const TYPE_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/;
13
- /**
14
- * RegExp to match *( ";" parameter ) in RFC 7231 sec 3.1.1.1
15
- *
16
- * parameter = token "=" ( token / quoted-string )
17
- * token = 1*tchar
18
- * tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*"
19
- * / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~"
20
- * / DIGIT / ALPHA
21
- * ; any VCHAR, except delimiters
22
- * quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE
23
- * qdtext = HTAB / SP / %x21 / %x23-5B / %x5D-7E / obs-text
24
- * obs-text = %x80-FF
25
- * quoted-pair = "\" ( HTAB / SP / VCHAR / obs-text )
26
- */
27
- const PARAM_REGEXP = /; *([!#$%&'*+.^_`|~0-9A-Za-z-]+) *= *("(?:[\u000b\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\u000b\u0020-\u00ff])*"|[!#$%&'*+.^_`|~0-9A-Za-z-]+) */g; // eslint-disable-line no-control-regex
28
- const TEXT_REGEXP = /^[\u000b\u0020-\u007e\u0080-\u00ff]+$/; // eslint-disable-line no-control-regex
29
- const TOKEN_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/;
30
- /**
31
- * RegExp to match quoted-pair in RFC 7230 sec 3.2.6
32
- *
33
- * quoted-pair = "\" ( HTAB / SP / VCHAR / obs-text )
34
- * obs-text = %x80-FF
35
- */
36
- const QESC_REGEXP = /\\([\u000b\u0020-\u00ff])/g; // eslint-disable-line no-control-regex
37
- function parseContentType(header) {
38
- let index = header.indexOf(';');
39
- const mediaType = index !== -1
40
- ? header.slice(0, index).trim()
41
- : header.trim();
42
- if (!TYPE_REGEXP.test(mediaType))
43
- throw new TypeError(`invalid media type: ${mediaType}`);
44
- const parameters = Object.create(null);
45
- // parse parameters
46
- if (index !== -1) {
47
- let key;
48
- let match;
49
- let value;
50
- const regexp = new RegExp(PARAM_REGEXP);
51
- regexp.lastIndex = index;
52
- while ((match = regexp.exec(header))) {
53
- if (match.index !== index)
54
- throw new TypeError('invalid parameter format');
55
- index += match[0].length;
56
- key = match[1].toLowerCase();
57
- value = match[2];
58
- if (value.charCodeAt(0) === 0x22 /* " */) {
59
- // remove quotes
60
- value = value.slice(1, -1);
61
- // remove escapes
62
- if (value.indexOf('\\') !== -1)
63
- value = value.replace(QESC_REGEXP, '$1');
64
- }
65
- parameters[key] = value;
66
- }
67
- if (index !== header.length)
68
- throw new TypeError('invalid parameter format');
69
- }
70
- return { mediaType, parameters };
71
- }
72
- exports.parseContentType = parseContentType;
73
- /**
74
- * RegExp to match chars that must be quoted-pair in RFC 7230 sec 3.2.6
75
- */
76
- const QUOTE_REGEXP = /([\\"])/g;
77
- function qstring(str) {
78
- // no need to quote tokens
79
- if (TOKEN_REGEXP.test(str))
80
- return str;
81
- if (str.length > 0 && !TEXT_REGEXP.test(str))
82
- throw new TypeError(`invalid parameter value: ${str}`);
83
- return `"${str.replace(QUOTE_REGEXP, '\\$1')}"`;
84
- }
85
- function formatContentType({ mediaType, parameters }) {
86
- if (!mediaType || !TYPE_REGEXP.test(mediaType))
87
- throw new TypeError(`invalid type: ${mediaType}`);
88
- return `${mediaType}${parameters
89
- ? Object.keys(parameters).sort().map(key => `; ${key}=${qstring(parameters[key])}`).join('')
90
- : ''}`;
91
- }
92
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudFR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmVuZG9ycy9jb250ZW50VHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxxR0FBcUc7QUFDckc7Ozs7OztHQU1HO0FBQ0gsTUFBTSxXQUFXLEdBQUcsNERBQTRELENBQUE7QUFDaEY7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sWUFBWSxHQUFHLGtLQUFrSyxDQUFBLENBQUMsdUNBQXVDO0FBQy9OLE1BQU0sV0FBVyxHQUFHLHVDQUF1QyxDQUFBLENBQUMsdUNBQXVDO0FBQ25HLE1BQU0sWUFBWSxHQUFHLCtCQUErQixDQUFBO0FBQ3BEOzs7OztHQUtHO0FBQ0gsTUFBTSxXQUFXLEdBQUcsNEJBQTRCLENBQUEsQ0FBQyx1Q0FBdUM7QUFFeEYsU0FBZ0IsZ0JBQWdCLENBQUUsTUFBYztJQUMvQyxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQy9CLE1BQU0sU0FBUyxHQUFHLEtBQUssS0FBSyxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRTtRQUMvQixDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFBO0lBRWhCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUFFLE1BQU0sSUFBSSxTQUFTLENBQUMsdUJBQXVCLFNBQVMsRUFBRSxDQUFDLENBQUE7SUFDekYsTUFBTSxVQUFVLEdBQTJCLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7SUFFOUQsbUJBQW1CO0lBQ25CLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbEIsSUFBSSxHQUFHLENBQUE7UUFDUCxJQUFJLEtBQUssQ0FBQTtRQUNULElBQUksS0FBSyxDQUFBO1FB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
@@ -1,136 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.isFreshModifiedSince = exports.isFreshETag = exports.statTag = exports.entityTagPath = exports.entityTag = void 0;
27
- // etag: https://github.com/jshttp/etag/blob/b9f0642256e63654287299d205bc6ced71b1a228/index.js#L39
28
- const node_crypto_1 = __importStar(require("node:crypto"));
29
- const node_fs_1 = require("node:fs");
30
- function entityTag(buf, weak) {
31
- // pre-computed empty
32
- return buf.length
33
- ? `${buf.length.toString(16)}-${node_crypto_1.default
34
- .createHash('sha1')
35
- .update(buf)
36
- .digest('base64')
37
- .substring(0, 27)}"`
38
- : `${weak ? 'W/' : ''}"0-2jmj7l5rSw0yVb/vlWAYkK/YBwk"`;
39
- // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag#directives
40
- // weak W/ vs strong eTag
41
- // same weak eTag: 2 resources might be semantically equivalent, but not byte-for-byte identical
42
- }
43
- exports.entityTag = entityTag;
44
- async function entityTagPath(fileStat, filePath, weak) {
45
- const hash = (0, node_crypto_1.createHash)('sha1');
46
- const defer = Promise.withResolvers();
47
- (0, node_fs_1.createReadStream)(filePath).pipe(hash)
48
- .on('finish', defer.resolve)
49
- .on('error', defer.reject);
50
- await defer.promise;
51
- return `${fileStat.size.toString(16)}-${hash
52
- .digest('base64')
53
- .substring(0, 27)}`;
54
- // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag#directives
55
- // weak W/ vs strong eTag
56
- // same weak eTag: 2 resources might be semantically equivalent, but not byte-for-byte identical
57
- }
58
- exports.entityTagPath = entityTagPath;
59
- const CACHE_CONTROL_NO_CACHE_REGEXP = /(?:^|,)\s*?no-cache\s*?(?:,|$)/;
60
- function statTag(stat) {
61
- const mtime = stat.mtime.getTime().toString(16);
62
- const size = stat.size.toString(16);
63
- return `"${size}-${mtime}"`;
64
- }
65
- exports.statTag = statTag;
66
- // https://github.com/jshttp/fresh/blob/05254186fd7428915224db46144fc94293a7df7d/index.js#L33
67
- function isFreshETag(req, etag) {
68
- const noneMatch = req.headers['if-none-match'];
69
- if (!noneMatch)
70
- return;
71
- // Always return stale when Cache-Control: no-cache
72
- // to support end-to-end reload requests
73
- // https://tools.ietf.org/html/rfc2616#section-14.9.4
74
- const cacheControl = req.headers['cache-control'];
75
- if (cacheControl && CACHE_CONTROL_NO_CACHE_REGEXP.test(cacheControl))
76
- return;
77
- if (noneMatch && noneMatch !== '*') {
78
- if (!etag)
79
- return;
80
- let etagStale = true;
81
- for (const match of parseTokenList(noneMatch)) {
82
- if (match === etag || match === `W/${etag}` || `W/${match}` === etag) {
83
- etagStale = false;
84
- break;
85
- }
86
- }
87
- if (etagStale)
88
- return;
89
- }
90
- return true;
91
- }
92
- exports.isFreshETag = isFreshETag;
93
- function isFreshModifiedSince(req, lastModified) {
94
- const modifiedSince = req.headers['if-modified-since'];
95
- if (!modifiedSince)
96
- return;
97
- // Always return stale when Cache-Control: no-cache
98
- // to support end-to-end reload requests
99
- // https://tools.ietf.org/html/rfc2616#section-14.9.4
100
- const cacheControl = req.headers['cache-control'];
101
- if (cacheControl && CACHE_CONTROL_NO_CACHE_REGEXP.test(cacheControl))
102
- return;
103
- if (modifiedSince && lastModified) {
104
- const lastModifiedDate = Date.parse(lastModified);
105
- const modifiedSinceDate = Date.parse(modifiedSince);
106
- return !isNaN(lastModifiedDate) && !isNaN(modifiedSinceDate) && lastModifiedDate <= modifiedSinceDate;
107
- }
108
- return true;
109
- }
110
- exports.isFreshModifiedSince = isFreshModifiedSince;
111
- function parseTokenList(str) {
112
- let end = 0;
113
- const list = [];
114
- let start = 0;
115
- // gather tokens
116
- for (let i = 0, len = str.length; i < len; i++) {
117
- switch (str.charCodeAt(i)) {
118
- case 0x20: /* */
119
- if (start === end) {
120
- start = end = i + 1;
121
- }
122
- break;
123
- case 0x2c: /* , */
124
- list.push(str.substring(start, end));
125
- start = end = i + 1;
126
- break;
127
- default:
128
- end = i + 1;
129
- break;
130
- }
131
- }
132
- // final token
133
- list.push(str.substring(start, end));
134
- return list;
135
- }
136
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXRhZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZW5kb3JzL2V0YWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxrR0FBa0c7QUFDbEcsMkRBQThDO0FBRTlDLHFDQUFvRDtBQUVwRCxTQUFnQixTQUFTLENBQUMsR0FBVyxFQUFFLElBQWM7SUFDcEQscUJBQXFCO0lBQ3JCLE9BQU8sR0FBRyxDQUFDLE1BQU07UUFDaEIsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUkscUJBQU07YUFDcEMsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixNQUFNLENBQUMsR0FBRyxDQUFDO2FBQ1gsTUFBTSxDQUFDLFFBQVEsQ0FBQzthQUNoQixTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHO1FBQ3JCLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLGlDQUFpQyxDQUFBO0lBQ3ZELDRFQUE0RTtJQUM1RSx5QkFBeUI7SUFDekIsZ0dBQWdHO0FBQ2pHLENBQUM7QUFaRCw4QkFZQztBQUVNLEtBQUssVUFBVSxhQUFhLENBQUMsUUFBZSxFQUFFLFFBQWdCLEVBQUUsSUFBYztJQUNwRixNQUFNLElBQUksR0FBRyxJQUFBLHdCQUFVLEVBQUMsTUFBTSxDQUFDLENBQUE7SUFDL0IsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLGFBQWEsRUFBVSxDQUFBO0lBQzdDLElBQUEsMEJBQWdCLEVBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztTQUNuQyxFQUFFLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUM7U0FDM0IsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDM0IsTUFBTSxLQUFLLENB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
@@ -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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