Skip to content

Commit

Permalink
fix: handling of array values for AxiosHeaders (#5085)
Browse files Browse the repository at this point in the history
Co-authored-by: Jay <jasonsaayman@gmail.com>
  • Loading branch information
DigitalBrainJS and jasonsaayman committed Oct 13, 2022
1 parent 85740c3 commit 110ae9a
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 11 deletions.
2 changes: 1 addition & 1 deletion index.d.ts
Expand Up @@ -39,7 +39,7 @@ export class AxiosHeaders {

normalize(format: boolean): AxiosHeaders;

toJSON(): RawAxiosHeaders;
toJSON(asStrings?: boolean): RawAxiosHeaders;

static from(thing?: AxiosHeaders | RawAxiosHeaders | string): AxiosHeaders;

Expand Down
14 changes: 4 additions & 10 deletions lib/core/AxiosHeaders.js
Expand Up @@ -15,7 +15,7 @@ function normalizeValue(value) {
return value;
}

return String(value);
return utils.isArray(value) ? value.map(normalizeValue) : String(value);
}

function parseTokens(str) {
Expand Down Expand Up @@ -102,13 +102,7 @@ Object.assign(AxiosHeaders.prototype, {
return;
}

if (utils.isArray(_value)) {
_value = _value.map(normalizeValue);
} else {
_value = normalizeValue(_value);
}

self[key || _header] = _value;
self[key || _header] = normalizeValue(_value);
}

if (utils.isPlainObject(header)) {
Expand Down Expand Up @@ -222,13 +216,13 @@ Object.assign(AxiosHeaders.prototype, {
return this;
},

toJSON: function() {
toJSON: function(asStrings) {
const obj = Object.create(null);

utils.forEach(Object.assign({}, this[$defaults] || null, this),
(value, header) => {
if (value == null || value === false) return;
obj[header] = utils.isArray(value) ? value.join(', ') : value;
obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value;
});

return obj;
Expand Down
10 changes: 10 additions & 0 deletions test/unit/core/AxiosHeaders.js
Expand Up @@ -327,5 +327,15 @@ describe('AxiosHeaders', function () {
bar: '3'
});
});

it('should support array values', function () {
const headers = new AxiosHeaders({
foo: [1,2,3]
});

assert.deepStrictEqual({...headers.normalize().toJSON()}, {
foo: ['1','2','3']
});
});
});
});
30 changes: 30 additions & 0 deletions test/unit/regression/bugs.js
@@ -1,4 +1,5 @@
import assert from 'assert';
import http from 'http';
import axios from '../../../index.js';

describe('issues', function () {
Expand All @@ -10,4 +11,33 @@ describe('issues', function () {
assert.strictEqual(data.args.foo2, 'bar2');
});
});

describe('5028', function () {
it('should handle set-cookie headers as an array', async function () {
const cookie1 = 'something=else; path=/; expires=Wed, 12 Apr 2023 12:03:42 GMT; samesite=lax; secure; httponly';
const cookie2 = 'something-ssr.sig=n4MlwVAaxQAxhbdJO5XbUpDw-lA; path=/; expires=Wed, 12 Apr 2023 12:03:42 GMT; samesite=lax; secure; httponly';

const server = http.createServer((req, res) => {
//res.setHeader('Set-Cookie', 'my=value');
res.setHeader('Set-Cookie', [cookie1, cookie2]);
res.writeHead(200);
res.write('Hi there');
res.end();
}).listen(0);

const request = axios.create();

request.interceptors.response.use((res) => {
assert.deepStrictEqual(res.headers['set-cookie'], [
cookie1, cookie2
]);
});

try {
await request({url: `http://localhost:${server.address().port}`});
} finally {
server.close()
}
});
});
});

0 comments on commit 110ae9a

Please sign in to comment.