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.
Files changed (52) hide show
  1. package/LICENSE +16 -16
  2. package/README.md +417 -30
  3. package/dist/apis.d.ts +138 -21
  4. package/dist/apis.d.ts.map +1 -1
  5. package/dist/apis.js +172 -79
  6. package/dist/apis.js.map +1 -1
  7. package/dist/cjs/apis.js +327 -0
  8. package/dist/cjs/git.js +293 -0
  9. package/dist/cjs/index.js +2583 -0
  10. package/dist/cjs/jwt-auth.js +532 -0
  11. package/dist/cjs/middleware.js +511 -0
  12. package/dist/cjs/mimetypes.json +1 -0
  13. package/dist/cjs/misc.js +787 -0
  14. package/dist/cjs/openapi.js +485 -0
  15. package/dist/cjs/package.json +1 -0
  16. package/dist/cjs/router.js +898 -0
  17. package/dist/cjs/static.js +669 -0
  18. package/dist/git.d.ts +71 -8
  19. package/dist/git.d.ts.map +1 -1
  20. package/dist/git.js +127 -72
  21. package/dist/git.js.map +1 -1
  22. package/dist/index.d.ts +17 -13
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +14 -24
  25. package/dist/index.js.map +1 -1
  26. package/dist/jwt-auth.d.ts +147 -57
  27. package/dist/jwt-auth.d.ts.map +1 -1
  28. package/dist/jwt-auth.js +445 -205
  29. package/dist/jwt-auth.js.map +1 -1
  30. package/dist/middleware.d.ts +476 -0
  31. package/dist/middleware.d.ts.map +1 -0
  32. package/dist/middleware.js +647 -0
  33. package/dist/middleware.js.map +1 -0
  34. package/dist/mimetypes.json +1 -1
  35. package/dist/misc.d.ts +112 -5
  36. package/dist/misc.d.ts.map +1 -1
  37. package/dist/misc.js +235 -102
  38. package/dist/misc.js.map +1 -1
  39. package/dist/openapi.d.ts +290 -0
  40. package/dist/openapi.d.ts.map +1 -0
  41. package/dist/openapi.js +481 -0
  42. package/dist/openapi.js.map +1 -0
  43. package/dist/router.d.ts +405 -46
  44. package/dist/router.d.ts.map +1 -1
  45. package/dist/router.js +658 -153
  46. package/dist/router.js.map +1 -1
  47. package/dist/static.d.ts +1 -1
  48. package/dist/static.d.ts.map +1 -1
  49. package/dist/static.js +88 -84
  50. package/dist/static.js.map +1 -1
  51. package/package.json +21 -4
  52. 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
- var __importDefault = (this && this.__importDefault) || function (mod) {
23
- return (mod && mod.__esModule) ? mod : { "default": mod };
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: zlib_1.default.gunzip,
43
- deflate: zlib_1.default.inflate,
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
- // No body declaredskip to next middleware.
154
- if (!length || length === 0)
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
- if (length > maxLength)
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
- // No body declared
203
- if (!length || length === 0)
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
- if (length > maxLength)
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
- req.body = JSON.parse(data.toString(charset), opts.reviver ?? undefined);
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
- res.status(500).send(ex.message);
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 collected body buffer as `multipart/form-data`, split it on the
300
- * boundary declared in `contentType`, parse each part's headers, and assign
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
- * On success, calls `next()`. On failure (missing boundary, malformed parts),
304
- * sends a 500 Internal Server Error.
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 readBodyAsFormData(req, res, next, contentType, data) {
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
- return void res.status(400).send('Bad Request: missing multipart boundary');
335
- try {
336
- // Wire-level delimiter: each part (after the preamble) is preceded by
337
- // \r\n--boundary. We split on this sequence so every resulting slice is
338
- // the raw content of one part (headers + blank line + body), without any
339
- // leading delimiter bytes.
340
- // BUG FIX: the original code passed `buffer` (undefined) instead of `data`.
341
- const delimiter = Buffer.from(`\r\n--${boundary}`);
342
- // Prepend \r\n so the very first part is also cleanly split.
343
- const normalized = Buffer.concat([Buffer.from('\r\n'), data]);
344
- const rawParts = splitBuffer(normalized, delimiter);
345
- const parts = [];
346
- for (const part of rawParts) {
347
- // The closing delimiter ends with '--'; skip it.
348
- // BUG FIX: the original check `buf.length == 2 && buf.toString() == '--'`
349
- // was incorrect. After splitting on \r\n--boundary, the terminal entry
350
- // is '--\r\n' (or just '--'), not a 2-byte '--'. Use startsWith.
351
- if (part.toString('utf8', 0, 2) === '--')
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
- // Each part begins with \r\n (from after the delimiter), then headers,
354
- // then \r\n\r\n (blank line), then content.
355
- // Skip the leading \r\n.
356
- const partContent = part.slice(2);
357
- const blankLine = Buffer.from('\r\n\r\n');
358
- const blankIdx = partContent.indexOf(blankLine);
359
- if (blankIdx === -1)
360
- continue; // malformed part — skip
361
- const headerSection = partContent.slice(0, blankIdx).toString('utf8');
362
- const content = partContent.slice(blankIdx + blankLine.length);
363
- const headers = {};
364
- for (const line of headerSection.split('\r\n')) {
365
- if (!line)
366
- continue;
367
- const colonIdx = line.indexOf(':');
368
- if (colonIdx === -1)
369
- continue;
370
- const key = line.substring(0, colonIdx).replace(/^\s+|\s+$/g, '').toLowerCase();
371
- const value = line.substring(colonIdx + 1).replace(/^\s+|\s+$/g, '');
372
- headers[key] = value;
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 = parts;
419
+ req.body = result;
377
420
  next();
378
421
  }
379
422
  catch (ex) {
380
- res.status(500).send(ex.message);
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` → parsed as JSON; result is a JS value.
475
- * - `multipart/form-data` → parsed as multipart; result is `FormPart[]`.
476
- * - `text/plain` → decoded as text; result is a string.
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} and
480
- * {@link formData}.
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.headers['x-forwarded-for']
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
- exports.default = { json, formData, parseBody, logger, cors };
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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"}