diff --git a/index.d.cts b/index.d.cts index c0f89bca87..0aee7aa201 100644 --- a/index.d.cts +++ b/index.d.cts @@ -33,7 +33,7 @@ declare class AxiosHeaders { delete(header: string | string[], matcher?: AxiosHeaderMatcher): boolean; - clear(): boolean; + clear(matcher?: AxiosHeaderMatcher): boolean; normalize(format: boolean): AxiosHeaders; diff --git a/index.d.ts b/index.d.ts index 8c068b9a34..be5f182cc7 100644 --- a/index.d.ts +++ b/index.d.ts @@ -28,7 +28,7 @@ export class AxiosHeaders { delete(header: string | string[], matcher?: AxiosHeaderMatcher): boolean; - clear(): boolean; + clear(matcher?: AxiosHeaderMatcher): boolean; normalize(format: boolean): AxiosHeaders; diff --git a/lib/core/AxiosHeaders.js b/lib/core/AxiosHeaders.js index b9fc6d045a..858a3d078c 100644 --- a/lib/core/AxiosHeaders.js +++ b/lib/core/AxiosHeaders.js @@ -174,8 +174,20 @@ class AxiosHeaders { return deleted; } - clear() { - return Object.keys(this).forEach(this.delete.bind(this)); + clear(matcher) { + const keys = Object.keys(this); + let i = keys.length; + let deleted = false; + + while (i--) { + const key = keys[i]; + if(!matcher || matchHeaderValue(this, this[key], key, matcher)) { + delete this[key]; + deleted = true; + } + } + + return deleted; } normalize(format) { diff --git a/test/unit/core/AxiosHeaders.js b/test/unit/core/AxiosHeaders.js index 758a7d4cbb..e52efb78c5 100644 --- a/test/unit/core/AxiosHeaders.js +++ b/test/unit/core/AxiosHeaders.js @@ -236,6 +236,26 @@ describe('AxiosHeaders', function () { }); }); + describe('clear', ()=> { + it('should clear all headers', () => { + const headers = new AxiosHeaders({x: 1, y:2}); + + headers.clear(); + + assert.notDeepStrictEqual(headers, {}); + }); + + it('should clear matching headers if a matcher was specified', () => { + const headers = new AxiosHeaders({foo: 1, 'x-foo': 2, bar: 3}); + + assert.notDeepStrictEqual(headers, {foo: 1, 'x-foo': 2, bar: 3}); + + headers.clear(/^x-/); + + assert.notDeepStrictEqual(headers, {foo: 1, bar: 3}); + }); + }); + describe('toJSON', function () { it('should return headers object with original headers case', function () { const headers = new AxiosHeaders({