Skip to content

Commit 39d5d6a

Browse files
authored
Merge pull request #49 from sckv/fix-headers-setting
fix(response-headers): fix behavior for response headers `setHeader` …
2 parents d816797 + 61f58d0 commit 39d5d6a

4 files changed

Lines changed: 45 additions & 9 deletions

File tree

README.md

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -345,13 +345,21 @@ Imperatively disables cache, does the same as `disableCache: true` in `RouteOpti
345345
346346
Imperatively sets the cache, does the same as `cache: CacheOptions` in `RouteOptions`
347347
348+
### `addHeader` (Function)
349+
350+
Adds a header outgoing header string as a (key, value) `addHeader(header, value)`. Can **not** overwrite.
351+
352+
### `addHeaders` (Function)
353+
354+
Adds outgoing headers in a "batch", merges provided headers object `{ [header: string]: value }` to already existing headers. Can **not** overwrite.
355+
348356
### `setHeader` (Function)
349357
350-
Set outgoing header as a (key, value) arguments `setHeader(header, value)`. Can overwrite
358+
Does the same as `addHeader` but overrides the value.
351359
352360
### `setHeaders` (Function)
353361
354-
Set outgoing headers in a "batch", merges provided headers object `{ [header: string]: value }` to already existing headers. Can overwrite
362+
Does the same as `addHeaders` but overrides the value.
355363
356364
### `status` (Function)
357365

src/__tests__/request.test.ts

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,15 +85,32 @@ test('Sets cache headers for no-store; max-age=0; must-revalidate', () => {
8585
expect(request.getHeader('Cache-Control')).toBe('no-store, max-age=0, must-revalidate');
8686
});
8787

88-
test('Sets response header', () => {
88+
test('Adds a response header', () => {
8989
const { request } = createRequest();
90-
request.setHeader('Vary', 'Origin');
90+
request.addHeader('Vary', 'Origin');
9191

9292
expect(request.getHeader('Vary')).toBe('Origin');
9393
});
94-
test('Sets multiple response headers', () => {
94+
95+
test('Adds a response header to already existing', () => {
96+
const { request } = createRequest();
97+
request.addHeader('Vary', 'Origin');
98+
request.addHeader('Vary', 'Destination');
99+
100+
expect(request.getHeader('Vary')).toBe('Origin, Destination');
101+
});
102+
103+
test('Overwrites a response header to already existing', () => {
104+
const { request } = createRequest();
105+
request.addHeader('Vary', 'Origin');
106+
request.setHeader('Vary', 'Destination');
107+
108+
expect(request.getHeader('Vary')).toBe('Destination');
109+
});
110+
111+
test('Adds multiple response headers', () => {
95112
const { request } = createRequest();
96-
request.setHeaders({ Vary: 'Origin', Host: 'http://barehttp.com' });
113+
request.addHeaders({ Vary: 'Origin', Host: 'http://barehttp.com' });
97114

98115
expect(request.getHeader('Vary')).toBe('Origin');
99116
expect(request.getHeader('Host')).toBe('http://barehttp.com');

src/request.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ export class BareRequest {
8181
// parsed;
8282
_originalRequest['flow'] = this; // to receive flow object later on in the route handler
8383

84-
this.setHeaders({
84+
this.addHeaders({
8585
'Content-Type': 'text/plain; charset=utf-8',
8686
'X-Request-Id': this.ID.code,
8787
});
@@ -217,7 +217,7 @@ export class BareRequest {
217217
if (cacheHeader.length > 0) this.setHeader(directive, cacheHeader);
218218
}
219219

220-
setHeader(header: string, value: string | number | string[] | number[]) {
220+
addHeader(header: string, value: string | number | string[] | number[]) {
221221
const old = this.headers[header];
222222
const parsedVal = Array.isArray(value) ? value.join(', ') : '' + value;
223223
if (old) {
@@ -227,12 +227,23 @@ export class BareRequest {
227227
}
228228
}
229229

230+
setHeader(header: string, value: string | number | string[] | number[]) {
231+
const parsedVal = Array.isArray(value) ? value.join(', ') : '' + value;
232+
this.headers[header] = parsedVal;
233+
}
234+
230235
setHeaders(headers: { [header: string]: string | number | string[] | number[] }) {
231236
for (const [header, value] of Object.entries(headers)) {
232237
this.setHeader(header, value);
233238
}
234239
}
235240

241+
addHeaders(headers: { [header: string]: string | number | string[] | number[] }) {
242+
for (const [header, value] of Object.entries(headers)) {
243+
this.addHeader(header, value);
244+
}
245+
}
246+
236247
status(status: StatusCodesUnion) {
237248
this.statusToSend = status;
238249
return this;

src/server.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,7 @@ export class BareServer<A extends IP> {
283283

284284
private registerReport() {
285285
this.setRoute('GET', '/_report', false, (flow) => {
286-
flow.setHeader('content-type', 'text/html');
286+
flow.setHeader('Content-Type', 'text/html');
287287
flow.send(generateReport(this.#routes));
288288
});
289289
}

0 commit comments

Comments
 (0)