@jaypie/express 1.2.4-rc2 → 1.2.4-rc4

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.
@@ -23,11 +23,31 @@ export declare class LambdaResponseBuffered extends Writable {
23
23
  getHeaders(): OutgoingHttpHeaders;
24
24
  hasHeader(name: string): boolean;
25
25
  getHeaderNames(): string[];
26
+ /**
27
+ * Proxy for direct header access (e.g., res.headers['content-type']).
28
+ * Required for compatibility with middleware like helmet that access headers directly.
29
+ */
30
+ get headers(): Record<string, string | string[] | undefined>;
26
31
  writeHead(statusCode: number, statusMessageOrHeaders?: OutgoingHttpHeaders | string, headers?: OutgoingHttpHeaders): this;
27
32
  get headersSent(): boolean;
33
+ /**
34
+ * Express-style alias for getHeader().
35
+ * Used by middleware like decorateResponse that use res.get().
36
+ */
37
+ get(name: string): number | string | string[] | undefined;
38
+ /**
39
+ * Express-style alias for setHeader().
40
+ * Used by middleware like decorateResponse that use res.set().
41
+ */
42
+ set(name: string, value: number | string | string[]): this;
28
43
  status(code: number): this;
29
44
  json(data: unknown): this;
30
45
  send(body?: Buffer | object | string): this;
46
+ /**
47
+ * Add a field to the Vary response header.
48
+ * Used by CORS middleware to indicate response varies by Origin.
49
+ */
50
+ vary(field: string): this;
31
51
  _write(chunk: Buffer | string, encoding: BufferEncoding, // eslint-disable-line no-undef
32
52
  callback: (error?: Error | null) => void): void;
33
53
  _final(callback: (error?: Error | null) => void): void;
@@ -23,12 +23,32 @@ export declare class LambdaResponseStreaming extends Writable {
23
23
  getHeaders(): OutgoingHttpHeaders;
24
24
  hasHeader(name: string): boolean;
25
25
  getHeaderNames(): string[];
26
+ /**
27
+ * Proxy for direct header access (e.g., res.headers['content-type']).
28
+ * Required for compatibility with middleware like helmet that access headers directly.
29
+ */
30
+ get headers(): Record<string, string | string[] | undefined>;
26
31
  writeHead(statusCode: number, statusMessageOrHeaders?: OutgoingHttpHeaders | string, headers?: OutgoingHttpHeaders): this;
27
32
  get headersSent(): boolean;
28
33
  flushHeaders(): void;
34
+ /**
35
+ * Express-style alias for getHeader().
36
+ * Used by middleware like decorateResponse that use res.get().
37
+ */
38
+ get(name: string): number | string | string[] | undefined;
39
+ /**
40
+ * Express-style alias for setHeader().
41
+ * Used by middleware like decorateResponse that use res.set().
42
+ */
43
+ set(name: string, value: number | string | string[]): this;
29
44
  status(code: number): this;
30
45
  json(data: unknown): this;
31
46
  send(body?: Buffer | object | string): this;
47
+ /**
48
+ * Add a field to the Vary response header.
49
+ * Used by CORS middleware to indicate response varies by Origin.
50
+ */
51
+ vary(field: string): this;
32
52
  _write(chunk: Buffer | string, encoding: BufferEncoding, // eslint-disable-line no-undef
33
53
  callback: (error?: Error | null) => void): void;
34
54
  _final(callback: (error?: Error | null) => void): void;
@@ -235,6 +235,43 @@ class LambdaResponseBuffered extends node_stream.Writable {
235
235
  getHeaderNames() {
236
236
  return Array.from(this._headers.keys());
237
237
  }
238
+ /**
239
+ * Proxy for direct header access (e.g., res.headers['content-type']).
240
+ * Required for compatibility with middleware like helmet that access headers directly.
241
+ */
242
+ get headers() {
243
+ return new Proxy({}, {
244
+ deleteProperty: (_target, prop) => {
245
+ this.removeHeader(String(prop));
246
+ return true;
247
+ },
248
+ get: (_target, prop) => {
249
+ if (typeof prop === "symbol")
250
+ return undefined;
251
+ return this.getHeader(String(prop));
252
+ },
253
+ getOwnPropertyDescriptor: (_target, prop) => {
254
+ if (this.hasHeader(String(prop))) {
255
+ return {
256
+ configurable: true,
257
+ enumerable: true,
258
+ value: this.getHeader(String(prop)),
259
+ };
260
+ }
261
+ return undefined;
262
+ },
263
+ has: (_target, prop) => {
264
+ return this.hasHeader(String(prop));
265
+ },
266
+ ownKeys: () => {
267
+ return this.getHeaderNames();
268
+ },
269
+ set: (_target, prop, value) => {
270
+ this.setHeader(String(prop), value);
271
+ return true;
272
+ },
273
+ });
274
+ }
238
275
  writeHead(statusCode, statusMessageOrHeaders, headers) {
239
276
  this.statusCode = statusCode;
240
277
  let headersToSet;
@@ -262,6 +299,20 @@ class LambdaResponseBuffered extends node_stream.Writable {
262
299
  //
263
300
  // Express compatibility methods
264
301
  //
302
+ /**
303
+ * Express-style alias for getHeader().
304
+ * Used by middleware like decorateResponse that use res.get().
305
+ */
306
+ get(name) {
307
+ return this.getHeader(name);
308
+ }
309
+ /**
310
+ * Express-style alias for setHeader().
311
+ * Used by middleware like decorateResponse that use res.set().
312
+ */
313
+ set(name, value) {
314
+ return this.setHeader(name, value);
315
+ }
265
316
  status(code) {
266
317
  this.statusCode = code;
267
318
  return this;
@@ -278,6 +329,26 @@ class LambdaResponseBuffered extends node_stream.Writable {
278
329
  this.end(body);
279
330
  return this;
280
331
  }
332
+ /**
333
+ * Add a field to the Vary response header.
334
+ * Used by CORS middleware to indicate response varies by Origin.
335
+ */
336
+ vary(field) {
337
+ const existing = this.getHeader("vary");
338
+ if (!existing) {
339
+ this.setHeader("vary", field);
340
+ }
341
+ else {
342
+ // Append to existing Vary header if field not already present
343
+ const fields = String(existing)
344
+ .split(",")
345
+ .map((f) => f.trim().toLowerCase());
346
+ if (!fields.includes(field.toLowerCase())) {
347
+ this.setHeader("vary", `${existing}, ${field}`);
348
+ }
349
+ }
350
+ return this;
351
+ }
281
352
  //
282
353
  // Writable stream implementation
283
354
  //
@@ -394,6 +465,43 @@ class LambdaResponseStreaming extends node_stream.Writable {
394
465
  getHeaderNames() {
395
466
  return Array.from(this._headers.keys());
396
467
  }
468
+ /**
469
+ * Proxy for direct header access (e.g., res.headers['content-type']).
470
+ * Required for compatibility with middleware like helmet that access headers directly.
471
+ */
472
+ get headers() {
473
+ return new Proxy({}, {
474
+ deleteProperty: (_target, prop) => {
475
+ this.removeHeader(String(prop));
476
+ return true;
477
+ },
478
+ get: (_target, prop) => {
479
+ if (typeof prop === "symbol")
480
+ return undefined;
481
+ return this.getHeader(String(prop));
482
+ },
483
+ getOwnPropertyDescriptor: (_target, prop) => {
484
+ if (this.hasHeader(String(prop))) {
485
+ return {
486
+ configurable: true,
487
+ enumerable: true,
488
+ value: this.getHeader(String(prop)),
489
+ };
490
+ }
491
+ return undefined;
492
+ },
493
+ has: (_target, prop) => {
494
+ return this.hasHeader(String(prop));
495
+ },
496
+ ownKeys: () => {
497
+ return this.getHeaderNames();
498
+ },
499
+ set: (_target, prop, value) => {
500
+ this.setHeader(String(prop), value);
501
+ return true;
502
+ },
503
+ });
504
+ }
397
505
  writeHead(statusCode, statusMessageOrHeaders, headers) {
398
506
  if (this._headersSent) {
399
507
  return this;
@@ -445,6 +553,20 @@ class LambdaResponseStreaming extends node_stream.Writable {
445
553
  //
446
554
  // Express compatibility methods
447
555
  //
556
+ /**
557
+ * Express-style alias for getHeader().
558
+ * Used by middleware like decorateResponse that use res.get().
559
+ */
560
+ get(name) {
561
+ return this.getHeader(name);
562
+ }
563
+ /**
564
+ * Express-style alias for setHeader().
565
+ * Used by middleware like decorateResponse that use res.set().
566
+ */
567
+ set(name, value) {
568
+ return this.setHeader(name, value);
569
+ }
448
570
  status(code) {
449
571
  this.statusCode = code;
450
572
  return this;
@@ -461,6 +583,26 @@ class LambdaResponseStreaming extends node_stream.Writable {
461
583
  this.end(body);
462
584
  return this;
463
585
  }
586
+ /**
587
+ * Add a field to the Vary response header.
588
+ * Used by CORS middleware to indicate response varies by Origin.
589
+ */
590
+ vary(field) {
591
+ const existing = this.getHeader("vary");
592
+ if (!existing) {
593
+ this.setHeader("vary", field);
594
+ }
595
+ else {
596
+ // Append to existing Vary header if field not already present
597
+ const fields = String(existing)
598
+ .split(",")
599
+ .map((f) => f.trim().toLowerCase());
600
+ if (!fields.includes(field.toLowerCase())) {
601
+ this.setHeader("vary", `${existing}, ${field}`);
602
+ }
603
+ }
604
+ return this;
605
+ }
464
606
  //
465
607
  // Writable stream implementation
466
608
  //