From 9a5e77bf6ebef500f3c1cf190bdedcbac62491fd Mon Sep 17 00:00:00 2001 From: Nick Uraltsev Date: Tue, 16 Aug 2016 10:49:32 -0700 Subject: [PATCH] Adding TypeScript definitions for adapters --- axios.d.ts | 25 +++++++++++++++++-------- test/typescript/axios.ts | 19 ++++++++++++++++++- 2 files changed, 35 insertions(+), 9 deletions(-) diff --git a/axios.d.ts b/axios.d.ts index 3ae48db..d7b6cb8 100644 --- a/axios.d.ts +++ b/axios.d.ts @@ -1,21 +1,30 @@ -export interface AxiosDataTransformer { +export interface AxiosTransformer { (data: any): any; } +export interface AxiosAdapter { + (config: AxiosRequestConfig): AxiosPromise; +} + +export interface AxiosBasicCredentials { + username: string; + password: string; +} + export interface AxiosRequestConfig { url?: string; method?: string; baseURL?: string; - transformRequest?: AxiosDataTransformer | AxiosDataTransformer[]; - transformResponse?: AxiosDataTransformer | AxiosDataTransformer[]; + transformRequest?: AxiosTransformer | AxiosTransformer[]; + transformResponse?: AxiosTransformer | AxiosTransformer[]; headers?: any; params?: any; paramsSerializer?: (params: any) => string; data?: any; timeout?: number; withCredentials?: boolean; - adapter?: any; - auth?: any; + adapter?: AxiosAdapter; + auth?: AxiosBasicCredentials; responseType?: string; xsrfCookieName?: string; xsrfHeaderName?: string; @@ -50,7 +59,7 @@ export interface Promise { export interface AxiosPromise extends Promise { } -export interface InterceptorManager { +export interface AxiosInterceptorManager { use(onFulfilled: (value: V) => V | Promise, onRejected?: (error: any) => any): number; eject(id: number): void; } @@ -58,8 +67,8 @@ export interface InterceptorManager { export interface AxiosInstance { defaults: AxiosRequestConfig; interceptors: { - request: InterceptorManager; - response: InterceptorManager; + request: AxiosInterceptorManager; + response: AxiosInterceptorManager; }; request(config: AxiosRequestConfig): AxiosPromise; get(url: string, config?: AxiosRequestConfig): AxiosPromise; diff --git a/test/typescript/axios.ts b/test/typescript/axios.ts index 03fc3ee..d797451 100644 --- a/test/typescript/axios.ts +++ b/test/typescript/axios.ts @@ -1,4 +1,4 @@ -import axios, { AxiosRequestConfig, AxiosResponse, AxiosError, AxiosInstance } from '../../'; +import axios, { AxiosRequestConfig, AxiosResponse, AxiosInstance, AxiosAdapter } from '../../'; import { Promise } from 'es6-promise'; axios.get('/user?ID=12345') @@ -157,6 +157,8 @@ instance.get('/user', { console.log(response); }); +// Interceptors + const requestInterceptorId: number = axios.interceptors.request.use( (config: AxiosRequestConfig) => config, (error: any) => Promise.reject(error) @@ -186,3 +188,18 @@ axios.interceptors.response.use( axios.interceptors.response.use((response: AxiosResponse) => response); axios.interceptors.response.use((response: AxiosResponse) => Promise.resolve(response)); + +// Adapters + +const adapter: AxiosAdapter = (config: AxiosRequestConfig) => { + const response: AxiosResponse = { + data: 'foo', + status: 200, + statusText: 'OK', + headers: { 'X-FOO': 'bar' }, + config: config, + }; + return Promise.resolve(response); +}; + +axios.defaults.adapter = adapter;