Skip to content

Commit

Permalink
Fix AxiosRequestHeaders & AxiosHeaders types; (#5482)
Browse files Browse the repository at this point in the history
  • Loading branch information
DigitalBrainJS committed Jan 21, 2023
1 parent 186ea06 commit 6486929
Show file tree
Hide file tree
Showing 8 changed files with 129 additions and 8 deletions.
2 changes: 1 addition & 1 deletion dist/axios.js.map

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/esm/axios.js.map

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/esm/axios.min.js.map

Large diffs are not rendered by default.

17 changes: 15 additions & 2 deletions index.d.cts
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
type AxiosHeaderValue = AxiosHeaders | string | string[] | number | boolean | null;
type RawAxiosHeaders = Record<string, AxiosHeaderValue>;

interface RawAxiosHeaders {
[key: string]: AxiosHeaderValue;
}

type MethodsHeaders = {
[Key in axios.Method as Lowercase<Key>]: AxiosHeaders;
Expand All @@ -23,6 +26,8 @@ declare class AxiosHeaders {
headers?: RawAxiosHeaders | AxiosHeaders
);

[key: string]: any;

set(headerName?: string, value?: AxiosHeaderValue, rewrite?: boolean | AxiosHeaderMatcher): AxiosHeaders;
set(headers?: RawAxiosHeaders | AxiosHeaders, rewrite?: boolean): AxiosHeaders;

Expand Down Expand Up @@ -66,6 +71,8 @@ declare class AxiosHeaders {
setContentEncoding: AxiosHeaderSetter;
getContentEncoding: AxiosHeaderGetter;
hasContentEncoding: AxiosHeaderTester;

[Symbol.iterator](): IterableIterator<[string, AxiosHeaderValue]>;
}

declare class AxiosError<T = unknown, D = any> extends Error {
Expand Down Expand Up @@ -194,9 +201,15 @@ type InternalAxiosError<T = unknown, D = any> = AxiosError<T, D>;
declare namespace axios {
type AxiosError<T = unknown, D = any> = InternalAxiosError<T, D>;

type CommonRequestHeadersList = 'Accept' | 'Content-Type' | 'Content-Length' | 'User-Agent'| 'Content-Encoding';

type RawCommonRequestHeaders = {
[Key in CommonRequestHeadersList]: AxiosHeaderValue;
};

type RawAxiosRequestHeaders = Partial<RawAxiosHeaders & MethodsHeaders & CommonHeaders>;

type AxiosRequestHeaders = RawAxiosRequestHeaders & AxiosHeaders;
type AxiosRequestHeaders = Partial<RawCommonRequestHeaders & RawAxiosHeaders> & AxiosHeaders;

type RawAxiosResponseHeaders = Partial<Record<string, string> & {
"set-cookie"?: string[]
Expand Down
17 changes: 15 additions & 2 deletions index.d.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
// TypeScript Version: 4.7
type AxiosHeaderValue = AxiosHeaders | string | string[] | number | boolean | null;
type RawAxiosHeaders = Record<string, AxiosHeaderValue>;

interface RawAxiosHeaders {
[key: string]: AxiosHeaderValue;
}

type MethodsHeaders = {
[Key in Method as Lowercase<Key>]: AxiosHeaders;
Expand All @@ -24,6 +27,8 @@ export class AxiosHeaders {
headers?: RawAxiosHeaders | AxiosHeaders
);

[key: string]: any;

set(headerName?: string, value?: AxiosHeaderValue, rewrite?: boolean | AxiosHeaderMatcher): AxiosHeaders;
set(headers?: RawAxiosHeaders | AxiosHeaders, rewrite?: boolean): AxiosHeaders;

Expand Down Expand Up @@ -67,11 +72,19 @@ export class AxiosHeaders {
setContentEncoding: AxiosHeaderSetter;
getContentEncoding: AxiosHeaderGetter;
hasContentEncoding: AxiosHeaderTester;

[Symbol.iterator](): IterableIterator<[string, AxiosHeaderValue]>;
}

type CommonRequestHeadersList = 'Accept' | 'Content-Type' | 'Content-Length' | 'User-Agent'| 'Content-Encoding';

type RawCommonRequestHeaders = {
[Key in CommonRequestHeadersList]: AxiosHeaderValue;
};

export type RawAxiosRequestHeaders = Partial<RawAxiosHeaders & MethodsHeaders & CommonHeaders>;

export type AxiosRequestHeaders = RawAxiosRequestHeaders & AxiosHeaders;
export type AxiosRequestHeaders = Partial<RawCommonRequestHeaders & RawAxiosHeaders> & AxiosHeaders;

export type RawAxiosResponseHeaders = Partial<Record<string, string> & {
"set-cookie"?: string[]
Expand Down
2 changes: 1 addition & 1 deletion test/module/test.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
const remove = async (file) => {
console.log(`✓ Remove entry '${file}'...`);
try {
await sleep(100);
await sleep(1000);
await fs.remove(file);
} catch (err) {
console.warn(err.message);
Expand Down
48 changes: 48 additions & 0 deletions test/module/typings/cjs/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -441,3 +441,51 @@ axios.get('/user', {
console.log(e.rate);
}
});

// AxiosHeaders

// iterator

const headers = new axios.AxiosHeaders({foo: "bar"})

for (const [header, value] of headers) {
console.log(header, value);
}

// index signature

(()=>{
const headers = new axios.AxiosHeaders({x:1});

headers.y = 2;
})();


// AxiosRequestHeaders

(()=>{
const headers:axios.AxiosRequestHeaders = new axios.AxiosHeaders({x:1});

headers.y = 2;

headers.get('x');
})();

// AxiosHeaders instance assigment

{
const requestInterceptorId: number = axios.interceptors.request.use(
async (config) => {
config.headers.Accept ="foo";
config.headers.setAccept("foo");
config.headers = new axios.AxiosHeaders({x:1});
config.headers.foo = "1";
config.headers.set('bar', '2');
config.headers.set({myHeader: "myValue"})
config.headers = new axios.AxiosHeaders({myHeader: "myValue"});
config.headers = {...config.headers} as axios.AxiosRequestHeaders;
return config;
},
(error: any) => Promise.reject(error)
);
}
47 changes: 47 additions & 0 deletions test/module/typings/esm/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -569,3 +569,50 @@ axios.get('/user', {
axios.get('/user', {
adapter: ['xhr', 'http']
});

// AxiosHeaders

// iterator

const headers = new AxiosHeaders({foo: "bar"})

for (const [header, value] of headers) {
console.log(header, value);
}

// index signature

(()=>{
const headers = new AxiosHeaders({x:1});

headers.y = 2;
})();

// AxiosRequestHeaders

(()=>{
const headers:AxiosRequestHeaders = new AxiosHeaders({x:1});

headers.y = 2;

headers.get('x');
})();

// AxiosHeaders instance assigment

{
const requestInterceptorId: number = axios.interceptors.request.use(
async (config) => {
config.headers.Accept ="foo";
config.headers.setAccept("foo");
config.headers = new AxiosHeaders({x:1});
config.headers.foo = "1";
config.headers.set('bar', '2');
config.headers.set({myHeader: "myValue"})
config.headers = new axios.AxiosHeaders({myHeader: "myValue"});
config.headers = {...config.headers} as AxiosRequestHeaders;
return config;
},
(error: any) => Promise.reject(error)
);
}

0 comments on commit 6486929

Please sign in to comment.