expediate 1.0.4 → 1.0.5
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/LICENSE +16 -16
- package/README.md +417 -30
- package/dist/apis.d.ts +138 -21
- package/dist/apis.d.ts.map +1 -1
- package/dist/apis.js +172 -79
- package/dist/apis.js.map +1 -1
- package/dist/cjs/apis.js +327 -0
- package/dist/cjs/git.js +293 -0
- package/dist/cjs/index.js +2583 -0
- package/dist/cjs/jwt-auth.js +532 -0
- package/dist/cjs/middleware.js +511 -0
- package/dist/cjs/mimetypes.json +1 -0
- package/dist/cjs/misc.js +787 -0
- package/dist/cjs/openapi.js +485 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/router.js +898 -0
- package/dist/cjs/static.js +669 -0
- package/dist/git.d.ts +71 -8
- package/dist/git.d.ts.map +1 -1
- package/dist/git.js +127 -72
- package/dist/git.js.map +1 -1
- package/dist/index.d.ts +17 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -24
- package/dist/index.js.map +1 -1
- package/dist/jwt-auth.d.ts +147 -57
- package/dist/jwt-auth.d.ts.map +1 -1
- package/dist/jwt-auth.js +445 -205
- package/dist/jwt-auth.js.map +1 -1
- package/dist/middleware.d.ts +476 -0
- package/dist/middleware.d.ts.map +1 -0
- package/dist/middleware.js +647 -0
- package/dist/middleware.js.map +1 -0
- package/dist/mimetypes.json +1 -1
- package/dist/misc.d.ts +112 -5
- package/dist/misc.d.ts.map +1 -1
- package/dist/misc.js +235 -102
- package/dist/misc.js.map +1 -1
- package/dist/openapi.d.ts +290 -0
- package/dist/openapi.d.ts.map +1 -0
- package/dist/openapi.js +481 -0
- package/dist/openapi.js.map +1 -0
- package/dist/router.d.ts +405 -46
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +658 -153
- package/dist/router.js.map +1 -1
- package/dist/static.d.ts +1 -1
- package/dist/static.d.ts.map +1 -1
- package/dist/static.js +88 -84
- package/dist/static.js.map +1 -1
- package/package.json +21 -4
- package/.npmignore +0 -16
package/dist/misc.js
CHANGED
|
@@ -19,18 +19,8 @@
|
|
|
19
19
|
* DEALINGS IN THE SOFTWARE.
|
|
20
20
|
*/
|
|
21
21
|
'use strict';
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
};
|
|
25
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.extractCharset = extractCharset;
|
|
27
|
-
exports.readReqBody = readReqBody;
|
|
28
|
-
exports.json = json;
|
|
29
|
-
exports.formData = formData;
|
|
30
|
-
exports.parseBody = parseBody;
|
|
31
|
-
exports.logger = logger;
|
|
32
|
-
exports.cors = cors;
|
|
33
|
-
const zlib_1 = __importDefault(require("zlib"));
|
|
22
|
+
import { Readable } from 'stream';
|
|
23
|
+
import zlib from 'zlib';
|
|
34
24
|
// ---------------------------------------------------------------------------
|
|
35
25
|
// Decompression algorithm registry
|
|
36
26
|
// ---------------------------------------------------------------------------
|
|
@@ -39,8 +29,8 @@ const zlib_1 = __importDefault(require("zlib"));
|
|
|
39
29
|
* decompression function. Only `gzip` and `deflate` are supported.
|
|
40
30
|
*/
|
|
41
31
|
const DECOMPRESS_ALGO = {
|
|
42
|
-
gzip:
|
|
43
|
-
deflate:
|
|
32
|
+
gzip: zlib.gunzip,
|
|
33
|
+
deflate: zlib.inflate,
|
|
44
34
|
};
|
|
45
35
|
// ---------------------------------------------------------------------------
|
|
46
36
|
// Internal utilities
|
|
@@ -112,10 +102,7 @@ function splitBuffer(buffer, delimiter) {
|
|
|
112
102
|
* (e.g. `'text/plain; charset=iso-8859-1'`).
|
|
113
103
|
* @returns A Node.js-compatible encoding name (e.g. `'utf8'`, `'iso-8859-1'`).
|
|
114
104
|
*/
|
|
115
|
-
function extractCharset(contentType) {
|
|
116
|
-
// BUG FIX: the original regex `'s+$` was a literal quote followed by `s+$`
|
|
117
|
-
// instead of `\s+$`. The trim therefore left leading/trailing whitespace on
|
|
118
|
-
// every parameter, breaking charset detection. Corrected to `\s+$`.
|
|
105
|
+
export function extractCharset(contentType) {
|
|
119
106
|
const param = contentType
|
|
120
107
|
.split(';')
|
|
121
108
|
.map((s) => s.replace(/^\s+|\s+$/g, ''))
|
|
@@ -137,7 +124,7 @@ function extractCharset(contentType) {
|
|
|
137
124
|
*
|
|
138
125
|
* Callers that need to pass control to the next middleware when there is no
|
|
139
126
|
* body should rely on the `next()` call that this function makes when
|
|
140
|
-
* `Content-Length` is `0` or absent
|
|
127
|
+
* `Content-Length` is `0` or absent and `Transfer-Encoding` is not `chunked`.
|
|
141
128
|
*
|
|
142
129
|
* @param req - The incoming request.
|
|
143
130
|
* @param res - The outgoing response.
|
|
@@ -150,11 +137,15 @@ function extractCharset(contentType) {
|
|
|
150
137
|
*/
|
|
151
138
|
function readBody(req, res, opts, mimetype, next, callback) {
|
|
152
139
|
const length = parseInt(req.headers['content-length'] ?? '0', 10);
|
|
153
|
-
//
|
|
154
|
-
|
|
140
|
+
// Detect chunked transfer encoding — no Content-Length is present in this case.
|
|
141
|
+
const isChunked = req.headers['transfer-encoding']
|
|
142
|
+
?.split(',').map((v) => v.trim()).some((v) => v.toLowerCase() === 'chunked') ?? false;
|
|
143
|
+
// No body declared and not chunked — skip to next middleware.
|
|
144
|
+
if (!isChunked && (!length || length === 0))
|
|
155
145
|
return next();
|
|
156
146
|
const maxLength = readSize(opts.limit) || 102_400;
|
|
157
|
-
|
|
147
|
+
// For requests with a known Content-Length we can reject upfront.
|
|
148
|
+
if (!isChunked && length > maxLength)
|
|
158
149
|
return void res.status(413).send('Content Too Large');
|
|
159
150
|
// Compression handling.
|
|
160
151
|
const encoding = req.headers['content-encoding'];
|
|
@@ -171,10 +162,6 @@ function readBody(req, res, opts, mimetype, next, callback) {
|
|
|
171
162
|
req.on('data', (chunk) => {
|
|
172
163
|
if (data === null)
|
|
173
164
|
return; // already aborted
|
|
174
|
-
// BUG FIX: the size check must happen AFTER concatenating the new chunk,
|
|
175
|
-
// not before. Checking before allowed a stream of (maxLength-1)-byte chunks
|
|
176
|
-
// to bypass the limit entirely.
|
|
177
|
-
// BUG FIX: the original code referenced `chink` (typo) instead of `chunk`.
|
|
178
165
|
const next_ = Buffer.concat([data, chunk]);
|
|
179
166
|
if (next_.length > maxLength) {
|
|
180
167
|
data = null;
|
|
@@ -196,14 +183,18 @@ function readBody(req, res, opts, mimetype, next, callback) {
|
|
|
196
183
|
});
|
|
197
184
|
}
|
|
198
185
|
// TODO
|
|
199
|
-
function readReqBody(req, opts, mimetype) {
|
|
186
|
+
export function readReqBody(req, opts, mimetype) {
|
|
200
187
|
return new Promise((resolve, reject) => {
|
|
201
188
|
const length = parseInt(req.headers['content-length'] ?? '0', 10);
|
|
202
|
-
//
|
|
203
|
-
|
|
189
|
+
// Detect chunked transfer encoding — no Content-Length is present in this case.
|
|
190
|
+
const isChunked = req.headers['transfer-encoding']
|
|
191
|
+
?.split(',').map((v) => v.trim()).some((v) => v.toLowerCase() === 'chunked') ?? false;
|
|
192
|
+
// No body declared and not chunked — resolve with null.
|
|
193
|
+
if (!isChunked && (!length || length === 0))
|
|
204
194
|
return resolve(null);
|
|
205
195
|
const maxLength = readSize(opts.limit) || 102_400;
|
|
206
|
-
|
|
196
|
+
// For requests with a known Content-Length we can reject upfront.
|
|
197
|
+
if (!isChunked && length > maxLength)
|
|
207
198
|
return reject({ status: 413, message: 'Content Too Large' });
|
|
208
199
|
// Compression handling.
|
|
209
200
|
const encoding = req.headers['content-encoding'];
|
|
@@ -220,10 +211,6 @@ function readReqBody(req, opts, mimetype) {
|
|
|
220
211
|
req.on('data', (chunk) => {
|
|
221
212
|
if (data === null)
|
|
222
213
|
return; // already aborted
|
|
223
|
-
// BUG FIX: the size check must happen AFTER concatenating the new chunk,
|
|
224
|
-
// not before. Checking before allowed a stream of (maxLength-1)-byte chunks
|
|
225
|
-
// to bypass the limit entirely.
|
|
226
|
-
// BUG FIX: the original code referenced `chink` (typo) instead of `chunk`.
|
|
227
214
|
const next_ = Buffer.concat([data, chunk]);
|
|
228
215
|
if (next_.length > maxLength) {
|
|
229
216
|
data = null;
|
|
@@ -288,20 +275,26 @@ function readBodyAsPlainText(req, res, next, contentType, data) {
|
|
|
288
275
|
function readBodyAsJson(req, res, next, opts, contentType, data) {
|
|
289
276
|
const charset = extractCharset(contentType);
|
|
290
277
|
try {
|
|
291
|
-
|
|
278
|
+
const parsed = JSON.parse(data.toString(charset), opts.reviver ?? undefined);
|
|
279
|
+
// FIX-10: strict mode — reject bare primitives (strings, numbers, booleans)
|
|
280
|
+
// at the top level; only objects and arrays are accepted.
|
|
281
|
+
if (opts.strict && (typeof parsed !== 'object' || parsed === null)) {
|
|
282
|
+
return void res.status(400).send('Bad Request: JSON body must be an object or array');
|
|
283
|
+
}
|
|
284
|
+
req.body = parsed;
|
|
292
285
|
next();
|
|
293
286
|
}
|
|
294
287
|
catch (ex) {
|
|
295
|
-
|
|
288
|
+
// Invalid JSON is a client error (400), not a server error.
|
|
289
|
+
res.status(400).send('Bad Request: ' + ex.message);
|
|
296
290
|
}
|
|
297
291
|
}
|
|
298
292
|
/**
|
|
299
|
-
* Parse a
|
|
300
|
-
*
|
|
301
|
-
* an array of {@link FormPart} objects to `req.body`.
|
|
293
|
+
* Parse a raw `multipart/form-data` body buffer into an array of
|
|
294
|
+
* {@link FormPart} objects.
|
|
302
295
|
*
|
|
303
|
-
*
|
|
304
|
-
*
|
|
296
|
+
* This is the shared parsing kernel used by both the {@link formData}
|
|
297
|
+
* middleware and the `req.formData()` extension method on the request object.
|
|
305
298
|
*
|
|
306
299
|
* **Multipart wire format recap:**
|
|
307
300
|
* ```
|
|
@@ -316,68 +309,118 @@ function readBodyAsJson(req, res, next, opts, contentType, data) {
|
|
|
316
309
|
* The boundary string in `Content-Type` does **not** include the leading `--`;
|
|
317
310
|
* actual part delimiters on the wire are `\r\n--boundary`.
|
|
318
311
|
*
|
|
319
|
-
* @param req - The incoming request (mutated: `req.body` is set).
|
|
320
|
-
* @param res - The outgoing response.
|
|
321
|
-
* @param next - Called on successful parsing.
|
|
322
312
|
* @param contentType - The raw `Content-Type` header value (must include
|
|
323
313
|
* `boundary=<value>`).
|
|
324
|
-
* @param data - The raw body buffer.
|
|
314
|
+
* @param data - The fully-collected raw body buffer.
|
|
315
|
+
* @returns An array of parsed {@link FormPart} objects.
|
|
316
|
+
* @throws `{ status: 400, message }` when the `boundary` parameter is absent.
|
|
325
317
|
*/
|
|
326
|
-
function
|
|
327
|
-
// BUG FIX: the original regex used `'s+$` (literal quote) instead of `\s+$`.
|
|
318
|
+
export function parseMultipartBody(contentType, data) {
|
|
328
319
|
const boundary = contentType
|
|
329
320
|
.split(';')
|
|
330
321
|
.map((s) => s.replace(/^\s+|\s+$/g, ''))
|
|
331
322
|
.find((s) => s.startsWith('boundary='))
|
|
332
323
|
?.substring('boundary='.length);
|
|
333
324
|
if (!boundary)
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
325
|
+
throw { status: 400, message: 'Bad Request: missing multipart boundary' };
|
|
326
|
+
// Wire-level delimiter: each part (after the preamble) is preceded by
|
|
327
|
+
// \r\n--boundary. We split on this sequence so every resulting slice is
|
|
328
|
+
// the raw content of one part (headers + blank line + body), without any
|
|
329
|
+
// leading delimiter bytes.
|
|
330
|
+
const delimiter = Buffer.from(`\r\n--${boundary}`);
|
|
331
|
+
// Prepend \r\n so the very first part is also cleanly split.
|
|
332
|
+
const normalized = Buffer.concat([Buffer.from('\r\n'), data]);
|
|
333
|
+
const rawParts = splitBuffer(normalized, delimiter);
|
|
334
|
+
const parts = [];
|
|
335
|
+
for (const part of rawParts) {
|
|
336
|
+
// The closing delimiter ends with '--'; skip it.
|
|
337
|
+
if (part.toString('utf8', 0, 2) === '--')
|
|
338
|
+
continue;
|
|
339
|
+
// Each part begins with \r\n (from after the delimiter), then headers,
|
|
340
|
+
// then \r\n\r\n (blank line), then content.
|
|
341
|
+
// Skip the leading \r\n.
|
|
342
|
+
const partContent = part.slice(2);
|
|
343
|
+
const blankLine = Buffer.from('\r\n\r\n');
|
|
344
|
+
const blankIdx = partContent.indexOf(blankLine);
|
|
345
|
+
if (blankIdx === -1)
|
|
346
|
+
continue; // malformed part — skip
|
|
347
|
+
const headerSection = partContent.slice(0, blankIdx).toString('utf8');
|
|
348
|
+
const content = partContent.slice(blankIdx + blankLine.length);
|
|
349
|
+
const headers = {};
|
|
350
|
+
for (const line of headerSection.split('\r\n')) {
|
|
351
|
+
if (!line)
|
|
352
|
+
continue;
|
|
353
|
+
const colonIdx = line.indexOf(':');
|
|
354
|
+
if (colonIdx === -1)
|
|
352
355
|
continue;
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
356
|
+
const key = line.substring(0, colonIdx).replace(/^\s+|\s+$/g, '').toLowerCase();
|
|
357
|
+
const value = line.substring(colonIdx + 1).replace(/^\s+|\s+$/g, '');
|
|
358
|
+
headers[key] = value;
|
|
359
|
+
}
|
|
360
|
+
parts.push({ headers, content });
|
|
361
|
+
}
|
|
362
|
+
return parts;
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Parse a collected body buffer as `multipart/form-data`, split it on the
|
|
366
|
+
* boundary declared in `contentType`, parse each part's headers, and assign
|
|
367
|
+
* an array of {@link FormPart} objects to `req.body`.
|
|
368
|
+
*
|
|
369
|
+
* On success, calls `next()`. On failure (missing boundary, malformed parts),
|
|
370
|
+
* sends the appropriate HTTP error.
|
|
371
|
+
*
|
|
372
|
+
* @param req - The incoming request (mutated: `req.body` is set).
|
|
373
|
+
* @param res - The outgoing response.
|
|
374
|
+
* @param next - Called on successful parsing.
|
|
375
|
+
* @param contentType - The raw `Content-Type` header value (must include
|
|
376
|
+
* `boundary=<value>`).
|
|
377
|
+
* @param data - The raw body buffer.
|
|
378
|
+
*/
|
|
379
|
+
function readBodyAsFormData(req, res, next, contentType, data) {
|
|
380
|
+
try {
|
|
381
|
+
req.body = parseMultipartBody(contentType, data);
|
|
382
|
+
next();
|
|
383
|
+
}
|
|
384
|
+
catch (ex) {
|
|
385
|
+
const status = ex.status ?? 500;
|
|
386
|
+
res.status(status).send(ex.message ?? String(ex));
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* Parse a collected body buffer as `application/x-www-form-urlencoded` and
|
|
391
|
+
* assign the result to `req.body`.
|
|
392
|
+
*
|
|
393
|
+
* Repeated keys (e.g. `tags=a&tags=b`) produce an array value:
|
|
394
|
+
* `{ tags: ['a', 'b'] }`. Single-occurrence keys produce a plain string.
|
|
395
|
+
*
|
|
396
|
+
* @param req - The incoming request (mutated: `req.body` is set).
|
|
397
|
+
* @param res - The outgoing response.
|
|
398
|
+
* @param next - Called on successful parsing.
|
|
399
|
+
* @param contentType - The raw `Content-Type` header value.
|
|
400
|
+
* @param data - The raw body buffer.
|
|
401
|
+
*/
|
|
402
|
+
function readBodyAsFormEncoded(req, res, next, contentType, data) {
|
|
403
|
+
const charset = extractCharset(contentType);
|
|
404
|
+
try {
|
|
405
|
+
const params = new URLSearchParams(data.toString(charset));
|
|
406
|
+
const result = {};
|
|
407
|
+
for (const [key, value] of params.entries()) {
|
|
408
|
+
const existing = result[key];
|
|
409
|
+
if (existing === undefined) {
|
|
410
|
+
result[key] = value;
|
|
411
|
+
}
|
|
412
|
+
else if (Array.isArray(existing)) {
|
|
413
|
+
existing.push(value);
|
|
414
|
+
}
|
|
415
|
+
else {
|
|
416
|
+
result[key] = [existing, value];
|
|
373
417
|
}
|
|
374
|
-
parts.push({ headers, content });
|
|
375
418
|
}
|
|
376
|
-
req.body =
|
|
419
|
+
req.body = result;
|
|
377
420
|
next();
|
|
378
421
|
}
|
|
379
422
|
catch (ex) {
|
|
380
|
-
res.status(
|
|
423
|
+
res.status(400).send('Bad Request: ' + ex.message);
|
|
381
424
|
}
|
|
382
425
|
}
|
|
383
426
|
/**
|
|
@@ -387,6 +430,7 @@ function readBodyAsFormData(req, res, next, contentType, data) {
|
|
|
387
430
|
const BODY_READERS = {
|
|
388
431
|
'multipart/form-data': (req, res, next, _opts, ct, data) => readBodyAsFormData(req, res, next, ct, data),
|
|
389
432
|
'application/json': (req, res, next, opts, ct, data) => readBodyAsJson(req, res, next, opts, ct, data),
|
|
433
|
+
'application/x-www-form-urlencoded': (req, res, next, _opts, ct, data) => readBodyAsFormEncoded(req, res, next, ct, data),
|
|
390
434
|
'text/plain': (req, res, next, _opts, ct, data) => readBodyAsPlainText(req, res, next, ct, data),
|
|
391
435
|
};
|
|
392
436
|
// ---------------------------------------------------------------------------
|
|
@@ -415,7 +459,7 @@ const BODY_READERS = {
|
|
|
415
459
|
* @param opts - Optional configuration (see {@link BodyOptions}).
|
|
416
460
|
* @returns An Express-compatible middleware function.
|
|
417
461
|
*/
|
|
418
|
-
function json(opts) {
|
|
462
|
+
export function json(opts) {
|
|
419
463
|
const resolved = {
|
|
420
464
|
inflate: true,
|
|
421
465
|
limit: '100kb',
|
|
@@ -452,7 +496,7 @@ function json(opts) {
|
|
|
452
496
|
* @param opts - Optional configuration (see {@link BodyOptions}).
|
|
453
497
|
* @returns An Express-compatible middleware function.
|
|
454
498
|
*/
|
|
455
|
-
function formData(opts) {
|
|
499
|
+
export function formData(opts) {
|
|
456
500
|
const resolved = {
|
|
457
501
|
inflate: true,
|
|
458
502
|
limit: '100kb',
|
|
@@ -466,23 +510,64 @@ function formData(opts) {
|
|
|
466
510
|
});
|
|
467
511
|
};
|
|
468
512
|
}
|
|
513
|
+
/**
|
|
514
|
+
* Middleware factory that parses an `application/x-www-form-urlencoded`
|
|
515
|
+
* request body and assigns the decoded fields to `req.body`.
|
|
516
|
+
*
|
|
517
|
+
* Repeated keys (e.g. `tags=a&tags=b`) produce an array value:
|
|
518
|
+
* `{ tags: ['a', 'b'] }`. Single-occurrence keys produce a plain string.
|
|
519
|
+
*
|
|
520
|
+
* Behaviour:
|
|
521
|
+
* - Requests without a body are passed through to `next()`.
|
|
522
|
+
* - Bodies larger than `opts.limit` receive **413 Content Too Large**.
|
|
523
|
+
* - Bodies whose `Content-Type` is not `application/x-www-form-urlencoded`
|
|
524
|
+
* receive **415 Unsupported Media Type**.
|
|
525
|
+
* - Parse errors receive **400 Bad Request**.
|
|
526
|
+
*
|
|
527
|
+
* @param opts - Optional configuration (see {@link BodyOptions}).
|
|
528
|
+
* @returns An Express-compatible middleware function.
|
|
529
|
+
*
|
|
530
|
+
* @example
|
|
531
|
+
* ```ts
|
|
532
|
+
* app.post('/form', formEncoded(), (req, res) => {
|
|
533
|
+
* const { username, tags } = req.body as any;
|
|
534
|
+
* res.json({ username, tags }); // tags may be string | string[]
|
|
535
|
+
* });
|
|
536
|
+
* ```
|
|
537
|
+
*/
|
|
538
|
+
export function formEncoded(opts) {
|
|
539
|
+
const resolved = {
|
|
540
|
+
inflate: true,
|
|
541
|
+
limit: '100kb',
|
|
542
|
+
reviver: null,
|
|
543
|
+
strict: true,
|
|
544
|
+
...opts,
|
|
545
|
+
};
|
|
546
|
+
return (req, res, next) => {
|
|
547
|
+
readBody(req, res, resolved, 'application/x-www-form-urlencoded', next, (contentType, body) => {
|
|
548
|
+
readBodyAsFormEncoded(req, res, next, contentType, body);
|
|
549
|
+
});
|
|
550
|
+
};
|
|
551
|
+
}
|
|
469
552
|
/**
|
|
470
553
|
* Middleware factory that auto-detects the `Content-Type` of the request body
|
|
471
554
|
* and parses it using the appropriate parser.
|
|
472
555
|
*
|
|
473
556
|
* Supported MIME types:
|
|
474
|
-
* - `application/json`
|
|
475
|
-
* - `multipart/form-data`
|
|
476
|
-
* - `
|
|
557
|
+
* - `application/json` → parsed as JSON; result is a JS value.
|
|
558
|
+
* - `multipart/form-data` → parsed as multipart; result is `FormPart[]`.
|
|
559
|
+
* - `application/x-www-form-urlencoded` → decoded as key/value pairs; result is
|
|
560
|
+
* `Record<string, string | string[]>`.
|
|
561
|
+
* - `text/plain` → decoded as text; result is a string.
|
|
477
562
|
*
|
|
478
563
|
* Requests with an unsupported MIME type receive **415 Unsupported Media Type**.
|
|
479
|
-
* All other error conditions behave identically to {@link json}
|
|
480
|
-
* {@link
|
|
564
|
+
* All other error conditions behave identically to {@link json}, {@link formData},
|
|
565
|
+
* and {@link formEncoded}.
|
|
481
566
|
*
|
|
482
567
|
* @param opts - Optional configuration (see {@link BodyOptions}).
|
|
483
568
|
* @returns An Express-compatible middleware function.
|
|
484
569
|
*/
|
|
485
|
-
function parseBody(opts) {
|
|
570
|
+
export function parseBody(opts) {
|
|
486
571
|
const resolved = {
|
|
487
572
|
inflate: true,
|
|
488
573
|
limit: '100kb',
|
|
@@ -499,6 +584,56 @@ function parseBody(opts) {
|
|
|
499
584
|
});
|
|
500
585
|
};
|
|
501
586
|
}
|
|
587
|
+
/**
|
|
588
|
+
* Async generator that yields each part of a `multipart/form-data` request
|
|
589
|
+
* body as a {@link FormPartStream} object.
|
|
590
|
+
*
|
|
591
|
+
* Unlike {@link formData} (which must be installed as middleware before a
|
|
592
|
+
* handler), `streamFormData` can be called directly inside any handler and
|
|
593
|
+
* returns an async iterable of parts:
|
|
594
|
+
*
|
|
595
|
+
* ```ts
|
|
596
|
+
* app.post('/upload', async (req, res) => {
|
|
597
|
+
* for await (const part of streamFormData(req)) {
|
|
598
|
+
* const name = part.headers['content-disposition'];
|
|
599
|
+
* const chunks: Buffer[] = [];
|
|
600
|
+
* for await (const chunk of part.stream) chunks.push(chunk);
|
|
601
|
+
* const content = Buffer.concat(chunks);
|
|
602
|
+
* // ... process content
|
|
603
|
+
* }
|
|
604
|
+
* res.send('ok');
|
|
605
|
+
* });
|
|
606
|
+
* ```
|
|
607
|
+
*
|
|
608
|
+
* **Note:** the full request body is buffered before parts are yielded,
|
|
609
|
+
* because the multipart boundary must span the entire body. For very large
|
|
610
|
+
* uploads, prefer streaming directly from the raw request.
|
|
611
|
+
*
|
|
612
|
+
* @param req - The incoming request (must be a `multipart/form-data` request).
|
|
613
|
+
* @param opts - Optional configuration — only `limit` and `inflate` are used.
|
|
614
|
+
* @throws `{ status: 400, message }` when the `boundary` parameter is absent.
|
|
615
|
+
* @throws `{ status: 413, message }` when the body exceeds the size limit.
|
|
616
|
+
*/
|
|
617
|
+
export async function* streamFormData(req, opts) {
|
|
618
|
+
const maxSize = (opts?.limit !== undefined ? readSize(opts.limit) : 0) || 102_400;
|
|
619
|
+
// Collect all chunks from the raw request stream.
|
|
620
|
+
const chunks = [];
|
|
621
|
+
let totalSize = 0;
|
|
622
|
+
for await (const chunk of req) {
|
|
623
|
+
totalSize += chunk.length;
|
|
624
|
+
if (totalSize > maxSize)
|
|
625
|
+
throw { status: 413, message: 'Content Too Large' };
|
|
626
|
+
chunks.push(chunk);
|
|
627
|
+
}
|
|
628
|
+
const body = Buffer.concat(chunks);
|
|
629
|
+
const contentType = req.headers['content-type'] ?? '';
|
|
630
|
+
const parts = parseMultipartBody(contentType, body);
|
|
631
|
+
for (const part of parts) {
|
|
632
|
+
// Expose each part's Buffer content as a Readable stream so callers can
|
|
633
|
+
// pipe, pipeline, or iterate it uniformly.
|
|
634
|
+
yield { headers: part.headers, stream: Readable.from(part.content) };
|
|
635
|
+
}
|
|
636
|
+
}
|
|
502
637
|
// ---------------------------------------------------------------------------
|
|
503
638
|
// Logger middleware
|
|
504
639
|
// ---------------------------------------------------------------------------
|
|
@@ -554,7 +689,7 @@ const ANSI_RESET = '\x1b[0m';
|
|
|
554
689
|
* }));
|
|
555
690
|
* ```
|
|
556
691
|
*/
|
|
557
|
-
function logger(opts) {
|
|
692
|
+
export function logger(opts) {
|
|
558
693
|
const options = opts ?? {};
|
|
559
694
|
const log = options.logger ?? console.log;
|
|
560
695
|
const formatter = new Intl.DateTimeFormat(options.locale ?? 'en-GB', options.dateFormat ?? {
|
|
@@ -568,9 +703,7 @@ function logger(opts) {
|
|
|
568
703
|
// even if later middleware mutates req.path (e.g. prefix stripping).
|
|
569
704
|
const timestamp = formatter.format(new Date());
|
|
570
705
|
const requestPath = req.path ?? req.url ?? '/';
|
|
571
|
-
const ip = req.
|
|
572
|
-
?? req.socket?.remoteAddress
|
|
573
|
-
?? '-';
|
|
706
|
+
const ip = req.ip ?? '';
|
|
574
707
|
const user = options.user?.(req) ?? '-';
|
|
575
708
|
const receivedAt = Date.now();
|
|
576
709
|
// Lost-request tracking.
|
|
@@ -606,7 +739,7 @@ function logger(opts) {
|
|
|
606
739
|
next();
|
|
607
740
|
};
|
|
608
741
|
}
|
|
609
|
-
function cors(opts) {
|
|
742
|
+
export function cors(opts) {
|
|
610
743
|
const options = {
|
|
611
744
|
origin: opts?.origin || '*',
|
|
612
745
|
allowHeaders: opts?.allowHeaders || 'Accept, Content-Type, Authorization',
|
|
@@ -640,5 +773,5 @@ function cors(opts) {
|
|
|
640
773
|
next();
|
|
641
774
|
};
|
|
642
775
|
}
|
|
643
|
-
|
|
776
|
+
export default { json, formData, formEncoded, parseBody, logger, cors, streamFormData };
|
|
644
777
|
//# sourceMappingURL=misc.js.map
|
package/dist/misc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"misc.js","sourceRoot":"","sources":["../src/misc.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"misc.js","sourceRoot":"","sources":["../src/misc.ts"],"names":[],"mappings":"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"}
|