@@ -54,13 +54,13 @@ const request = createRequest(
5454 return response .data .result ;
5555 },
5656 // Request interceptor
57- onRequest : async ( config ) => {
57+ onRequest : async config => {
5858 // Add token
5959 config .headers .Authorization = ` Bearer ${getToken ()} ` ;
6060 return config ;
6161 },
6262 // Check if backend request is successful
63- isBackendSuccess : ( response ) => {
63+ isBackendSuccess : response => {
6464 return response .data .code === 200 ;
6565 },
6666 // Handle backend failure
@@ -73,7 +73,7 @@ const request = createRequest(
7373 }
7474 },
7575 // Error handling
76- onError : async ( error ) => {
76+ onError : async error => {
7777 console .error (' Request failed:' , error .message );
7878 }
7979 }
@@ -111,16 +111,16 @@ if (error) {
111111
112112### RequestOption Configuration
113113
114- | Option | Type | Required | Description |
115- | --------| ------| ----------| -------------|
116- | ` transform ` | ` Function ` | Yes | Transform response data to business data |
117- | ` onRequest ` | ` Function ` | No | Request interceptor, can add token, etc. |
118- | ` isBackendSuccess ` | ` Function ` | Yes | Check if backend business logic is successful |
119- | ` onBackendFail ` | ` Function ` | No | Backend failure callback, handle token expiration, etc. |
120- | ` onError ` | ` Function ` | No | Request error handling, show error message, etc. |
121- | ` defaultState ` | ` Object ` | No | Default state object |
122- | ` backendErrorFlag ` | ` string ` | No | Backend error flag, default ` 'BACKEND_ERROR' ` |
123- | ` backendErrorMsg ` | ` string ` | No | Backend error message |
114+ | Option | Type | Required | Description |
115+ | ------------------ | ---------- | -------- | ------------------------------------------------------- |
116+ | ` transform ` | ` Function ` | Yes | Transform response data to business data |
117+ | ` onRequest ` | ` Function ` | No | Request interceptor, can add token, etc. |
118+ | ` isBackendSuccess ` | ` Function ` | Yes | Check if backend business logic is successful |
119+ | ` onBackendFail ` | ` Function ` | No | Backend failure callback, handle token expiration, etc. |
120+ | ` onError ` | ` Function ` | No | Request error handling, show error message, etc. |
121+ | ` defaultState ` | ` Object ` | No | Default state object |
122+ | ` backendErrorFlag ` | ` string ` | No | Backend error flag, default ` 'BACKEND_ERROR' ` |
123+ | ` backendErrorMsg ` | ` string ` | No | Backend error message |
124124
125125### Request Processing Flow
126126
@@ -168,7 +168,7 @@ const fileData = await request({
168168const fileData = await request ({
169169 url: ' /download/file' ,
170170 responseType: ' blob' ,
171- getFileName : ( response ) => {
171+ getFileName : response => {
172172 // Custom parsing logic
173173 return ' custom-filename.pdf' ;
174174 }
@@ -192,6 +192,7 @@ import { downloadFile } from '@soybeanjs/request';
192192```
193193
194194Supported file types:
195+
195196- ` blob ` → ` FileResponseData<Blob> `
196197- ` arraybuffer ` → ` FileResponseData<ArrayBuffer> `
197198- ` stream ` → ` FileResponseData<ReadableStream<Uint8Array>> `
@@ -244,26 +245,23 @@ interface CustomState {
244245 userId: number ;
245246}
246247
247- const request = createRequest (
248- axiosConfig ,
249- {
250- defaultState: {
251- token: ' ' ,
252- userId: 0
253- } as CustomState ,
254- // ...other config
255- }
256- );
248+ const request = createRequest (axiosConfig , {
249+ defaultState: {
250+ token: ' ' ,
251+ userId: 0
252+ } as CustomState
253+ // ...other config
254+ });
257255
258256// Access and modify state
259257request .state .token = ' new-token' ;
260258request .state .userId = 123 ;
261259
262260// Use state in hooks
263- onRequest : ( config ) => {
261+ onRequest : config => {
264262 config .headers .Authorization = ` Bearer ${request .state .token } ` ;
265263 return config ;
266- }
264+ };
267265```
268266
269267### 4. Auto Retry
@@ -274,8 +272,8 @@ const request = createRequest(
274272 baseURL: ' https://api.example.com' ,
275273 // axios-retry config
276274 retries: 3 ,
277- retryDelay : ( retryCount ) => retryCount * 1000 ,
278- retryCondition : ( error ) => {
275+ retryDelay : retryCount => retryCount * 1000 ,
276+ retryCondition : error => {
279277 // Only retry on network error or 5xx error
280278 return ! error .response || error .response .status >= 500 ;
281279 }
@@ -302,12 +300,9 @@ interface ApiResponse<T = any> {
302300
303301// ResponseData: backend raw response type
304302// ApiData: business data type
305- const request = createRequest (
306- axiosConfig ,
307- {
308- transform : (response : AxiosResponse <ApiResponse >) => response .data .data ,
309- }
310- );
303+ const request = createRequest (axiosConfig , {
304+ transform : (response : AxiosResponse <ApiResponse >) => response .data .data
305+ });
311306
312307// Type inference: data type is ApiResponse<User>
313308const user = await request <User >({
@@ -324,13 +319,12 @@ Parse filename from `Content-Disposition` response header:
324319``` typescript
325320import { parseContentDisposition } from ' @soybeanjs/request' ;
326321
327- const filename = parseContentDisposition (
328- ' attachment; filename*=UTF-8\'\' %E6%96%87%E4%BB%B6.pdf'
329- );
322+ const filename = parseContentDisposition (" attachment; filename*=UTF-8''%E6%96%87%E4%BB%B6.pdf" );
330323// '文件.pdf'
331324```
332325
333326Supported formats:
327+
334328- RFC 5987 encoded: ` filename*=UTF-8''example%20file.pdf `
335329- Regular format: ` filename="example.pdf" ` or ` filename=example.pdf `
336330
@@ -365,15 +359,15 @@ const request = createRequest(
365359 return response .data .data ;
366360 },
367361 // Request interceptor
368- onRequest : async ( config ) => {
362+ onRequest : async config => {
369363 const token = localStorage .getItem (' token' );
370364 if (token ) {
371365 config .headers .Authorization = ` Bearer ${token } ` ;
372366 }
373367 return config ;
374368 },
375369 // Check business success
376- isBackendSuccess : ( response ) => {
370+ isBackendSuccess : response => {
377371 return response .data .code === 200 ;
378372 },
379373 // Business failure handling
@@ -389,10 +383,9 @@ const request = createRequest(
389383 response .config .headers .Authorization = ` Bearer ${newToken } ` ;
390384 return instance .request (response .config );
391385 }
392-
393386 },
394387 // Error handling
395- onError : async ( error ) => {
388+ onError : async error => {
396389 showMessage (error .response ?.data .message || error .message );
397390 }
398391 }
@@ -458,10 +451,7 @@ async function uploadFile(file: File) {
458451``` typescript
459452import { createFlatRequest } from ' @soybeanjs/request' ;
460453
461- const flatRequest = createFlatRequest (
462- axiosConfig ,
463- options
464- );
454+ const flatRequest = createFlatRequest (axiosConfig , options );
465455
466456// All requests return { data, error, response }
467457async function safeGetUser(id : number ) {
@@ -488,7 +478,7 @@ Create standard request instance.
488478function createRequest<ResponseData , ApiData , State >(
489479 axiosConfig ? : CreateAxiosDefaults ,
490480 options ? : Partial <RequestOption <ResponseData , ApiData , State >>
491- ): RequestInstance <ApiData , State >
481+ ): RequestInstance <ApiData , State >;
492482```
493483
494484### createFlatRequest
@@ -499,17 +489,15 @@ Create flat request instance, no exception thrown.
499489function createFlatRequest<ResponseData , ApiData , State >(
500490 axiosConfig ? : CreateAxiosDefaults ,
501491 options ? : Partial <RequestOption <ResponseData , ApiData , State >>
502- ): FlatRequestInstance<ResponseData, ApiData, State>
492+ ): FlatRequestInstance <ResponseData , ApiData , State >;
503493```
504494
505495### Type Definitions
506496
507497``` typescript
508498// Request instance
509499interface RequestInstance <ApiData , State > {
510- <T = ApiData, R extends ResponseType = 'json'>(
511- config: CustomAxiosRequestConfig<R>
512- ): Promise<MappedType<R, T>>;
500+ <T = ApiData , R extends ResponseType = ' json' >(config : CustomAxiosRequestConfig <R >): Promise <MappedType <R , T >>;
513501 state: State ;
514502}
515503
@@ -573,7 +561,7 @@ The library automatically parses filename from `Content-Disposition` response he
573561const fileData = await request ({
574562 url: ' /download' ,
575563 responseType: ' blob' ,
576- getFileName: ( response) => {
564+ getFileName : response => {
577565 // Custom parsing logic
578566 return ' my-file.pdf' ;
579567 }
0 commit comments