@varlet/axle 0.0.2 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +41 -118
- package/{lib/index.d.ts → es/helpers.d.ts} +10 -10
- package/es/helpers.js +85 -0
- package/es/index.d.ts +2 -0
- package/es/index.js +2 -0
- package/es/instance.d.ts +51 -0
- package/es/instance.js +85 -0
- package/es/types.d.ts +0 -0
- package/es/types.js +1 -0
- package/es/use.d.ts +32 -0
- package/es/use.js +59 -0
- package/package.json +26 -17
- package/lib/index.js +0 -94
package/README.md
CHANGED
|
@@ -7,139 +7,62 @@
|
|
|
7
7
|
|
|
8
8
|
### Quickstart
|
|
9
9
|
|
|
10
|
+
#### Install
|
|
11
|
+
|
|
10
12
|
```shell
|
|
11
|
-
#
|
|
13
|
+
# Install with npm, yarn or pnpm
|
|
12
14
|
|
|
13
15
|
# npm
|
|
14
16
|
npm i @varlet/axle -S
|
|
15
17
|
|
|
16
|
-
#
|
|
18
|
+
#yarn
|
|
17
19
|
yarn add @varlet/axle
|
|
18
20
|
|
|
19
|
-
#
|
|
21
|
+
#pnpm
|
|
20
22
|
pnpm add @varlet/axle
|
|
21
23
|
```
|
|
22
24
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
```typescript
|
|
26
|
-
// 'get' | 'head' | 'options' | 'delete'
|
|
27
|
-
export type FetchHelper = <T = any, R = AxiosResponse<T>>(
|
|
28
|
-
url: string,
|
|
29
|
-
params?: any,
|
|
30
|
-
config?: AxiosRequestConfig
|
|
31
|
-
) => Promise<R>
|
|
32
|
-
// 'post' | 'put' | 'patch'
|
|
33
|
-
export type ModifyHelper = <T = any, R = AxiosResponse<T>>(
|
|
34
|
-
url: string,
|
|
35
|
-
data?: any,
|
|
36
|
-
config?: AxiosRequestConfig
|
|
37
|
-
) => Promise<R>
|
|
38
|
-
|
|
39
|
-
export interface AxleHelpers {
|
|
40
|
-
// get data in json format
|
|
41
|
-
get: FetchHelper
|
|
42
|
-
// get data in blob format, which can be used to construct URL download under browser
|
|
43
|
-
getBlob: FetchHelper
|
|
44
|
-
// get the html document, return a dom node, can directly embed the document
|
|
45
|
-
getDocument: FetchHelper
|
|
46
|
-
// get text
|
|
47
|
-
getText: FetchHelper
|
|
48
|
-
// get Arraybuffer, which can be used for segmented download
|
|
49
|
-
getArraybuffer: FetchHelper
|
|
50
|
-
// get a readable stream, which can be used for browser caching
|
|
51
|
-
getStream: FetchHelper
|
|
52
|
-
|
|
53
|
-
head: FetchHelper
|
|
54
|
-
headBlob: FetchHelper
|
|
55
|
-
headDocument: FetchHelper
|
|
56
|
-
headText: FetchHelper
|
|
57
|
-
headArraybuffer: FetchHelper
|
|
58
|
-
headStream: FetchHelper
|
|
59
|
-
|
|
60
|
-
options: FetchHelper
|
|
61
|
-
optionsBlob: FetchHelper
|
|
62
|
-
optionsDocument: FetchHelper
|
|
63
|
-
optionsText: FetchHelper
|
|
64
|
-
optionsArraybuffer: FetchHelper
|
|
65
|
-
optionsStream: FetchHelper
|
|
66
|
-
|
|
67
|
-
delete: FetchHelper
|
|
68
|
-
deleteBlob: FetchHelper
|
|
69
|
-
deleteDocument: FetchHelper
|
|
70
|
-
deleteText: FetchHelper
|
|
71
|
-
deleteArrayBuffer: FetchHelper
|
|
72
|
-
deleteStream: FetchHelper
|
|
73
|
-
|
|
74
|
-
// submit application/x-www-form-urlencoded encoded data
|
|
75
|
-
post: ModifyHelper
|
|
76
|
-
// submit application/json encoded data
|
|
77
|
-
postJSON: ModifyHelper
|
|
78
|
-
// submit multipart/form-data encoded data
|
|
79
|
-
postMultipart: ModifyHelper
|
|
80
|
-
|
|
81
|
-
put: ModifyHelper
|
|
82
|
-
putJSON: ModifyHelper
|
|
83
|
-
putMultipart: ModifyHelper
|
|
84
|
-
|
|
85
|
-
patch: ModifyHelper
|
|
86
|
-
patchJSON: ModifyHelper
|
|
87
|
-
patchMultipart: ModifyHelper
|
|
88
|
-
|
|
89
|
-
// browser download file
|
|
90
|
-
download(blob: string | Blob, filename: string): void
|
|
91
|
-
|
|
92
|
-
// set global header
|
|
93
|
-
setHeader(key: string, value: string): void
|
|
94
|
-
// remove global header
|
|
95
|
-
removeHeader(key: string | string[]): void
|
|
96
|
-
}
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
### Normalize Api Arguments
|
|
100
|
-
|
|
101
|
-
```js
|
|
102
|
-
// axios
|
|
103
|
-
import { createAxios } from 'axios'
|
|
104
|
-
|
|
105
|
-
const axios = createAxios({})
|
|
106
|
-
|
|
107
|
-
function getUser() {
|
|
108
|
-
return axios.get('/user', {
|
|
109
|
-
params: {
|
|
110
|
-
id: 1,
|
|
111
|
-
},
|
|
112
|
-
})
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
function uploadFile() {
|
|
116
|
-
const formData = new FormData()
|
|
117
|
-
formData.append('name', 'axios')
|
|
118
|
-
formData.append('file', new File())
|
|
119
|
-
|
|
120
|
-
return axios.post('/user', formData, {
|
|
121
|
-
headers: {
|
|
122
|
-
'Ccontent-Type': 'multipart/form-data',
|
|
123
|
-
},
|
|
124
|
-
})
|
|
125
|
-
}
|
|
126
|
-
```
|
|
25
|
+
#### Request call
|
|
127
26
|
|
|
128
27
|
```js
|
|
129
|
-
// axle
|
|
130
28
|
import { createAxle } from '@varlet/axle'
|
|
131
29
|
|
|
132
|
-
// create axle instance
|
|
133
|
-
const axle = createAxle(/** @see
|
|
30
|
+
// create axle instance
|
|
31
|
+
const axle = createAxle(/** @see https://axios-http.com **/)
|
|
134
32
|
|
|
135
|
-
//
|
|
136
|
-
const
|
|
33
|
+
// The built-in axios of the axle, the usage is exactly the same as that of axios, and shares the configuration with the axle.
|
|
34
|
+
const { axios } = axle
|
|
137
35
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
36
|
+
const response = await axle.get('/user', { current: 1, pageSize: 10 }, { headers: {} })
|
|
37
|
+
const response = await axle.post('/user', { name: 'Axle' }, { headers: {} })
|
|
38
|
+
```
|
|
141
39
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
40
|
+
### Vue Composition Api
|
|
41
|
+
|
|
42
|
+
```html
|
|
43
|
+
<script setup>
|
|
44
|
+
import { createAxle, createUseAxle } from '@varlet/axle'
|
|
45
|
+
|
|
46
|
+
const axle = createAxle()
|
|
47
|
+
const useAxle = createUseAxle()
|
|
48
|
+
|
|
49
|
+
// default immediate request
|
|
50
|
+
const [users, getUsers, loading, { error }] = useAxle({
|
|
51
|
+
runner: axle.get,
|
|
52
|
+
url: '/user',
|
|
53
|
+
params: { current: 1, pageSize: 10 },
|
|
54
|
+
config: { headers: {} }
|
|
55
|
+
})
|
|
56
|
+
</script>
|
|
57
|
+
|
|
58
|
+
<template>
|
|
59
|
+
<span>{{ users }}</span>
|
|
60
|
+
<span>{{ loading }}</span>
|
|
61
|
+
<span>{{ error }}</span>
|
|
62
|
+
</template>
|
|
145
63
|
```
|
|
64
|
+
|
|
65
|
+
### Repo Status
|
|
66
|
+
|
|
67
|
+
WIP and Trying
|
|
68
|
+
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
import type { AxiosInstance, AxiosRequestConfig, AxiosResponse, ResponseType } from
|
|
1
|
+
import type { AxiosInstance, AxiosRequestConfig, AxiosResponse, ResponseType } from 'axios';
|
|
2
2
|
export declare type AxleRequestConfig = AxiosRequestConfig & {
|
|
3
3
|
exceptionMessage?: any;
|
|
4
4
|
};
|
|
5
5
|
export declare type FetchHelper = <T = any, R = AxiosResponse<T>>(url: string, params?: any, config?: AxleRequestConfig) => Promise<R>;
|
|
6
|
-
export declare type ModifyHelper = <T = any, R = AxiosResponse<T>>(url: string,
|
|
6
|
+
export declare type ModifyHelper = <T = any, R = AxiosResponse<T>>(url: string, params?: any, config?: AxleRequestConfig) => Promise<R>;
|
|
7
7
|
export interface AxiosHelpers {
|
|
8
8
|
get: FetchHelper;
|
|
9
9
|
getBlob: FetchHelper;
|
|
10
10
|
getDocument: FetchHelper;
|
|
11
11
|
getText: FetchHelper;
|
|
12
|
-
|
|
12
|
+
getArrayBuffer: FetchHelper;
|
|
13
13
|
getStream: FetchHelper;
|
|
14
14
|
head: FetchHelper;
|
|
15
15
|
headBlob: FetchHelper;
|
|
16
16
|
headDocument: FetchHelper;
|
|
17
17
|
headText: FetchHelper;
|
|
18
|
-
|
|
18
|
+
headArrayBuffer: FetchHelper;
|
|
19
19
|
headStream: FetchHelper;
|
|
20
20
|
options: FetchHelper;
|
|
21
21
|
optionsBlob: FetchHelper;
|
|
22
22
|
optionsDocument: FetchHelper;
|
|
23
23
|
optionsText: FetchHelper;
|
|
24
|
-
|
|
24
|
+
optionsArrayBuffer: FetchHelper;
|
|
25
25
|
optionsStream: FetchHelper;
|
|
26
26
|
delete: FetchHelper;
|
|
27
27
|
deleteBlob: FetchHelper;
|
|
@@ -42,12 +42,12 @@ export interface AxiosHelpers {
|
|
|
42
42
|
setHeader(key: string, value: string): void;
|
|
43
43
|
removeHeader(key: string | string[]): void;
|
|
44
44
|
}
|
|
45
|
-
export declare type FetchMethods =
|
|
46
|
-
export declare type ModifyMethods =
|
|
45
|
+
export declare type FetchMethods = 'get' | 'delete' | 'options' | 'head';
|
|
46
|
+
export declare type ModifyMethods = 'post' | 'put' | 'patch';
|
|
47
47
|
export declare type AxleInstance = AxiosInstance & {
|
|
48
48
|
helpers: AxiosHelpers;
|
|
49
49
|
};
|
|
50
|
-
export declare function createFetchHelper(service: AxleInstance, method: FetchMethods, responseType: ResponseType): <T, R = AxiosResponse<T, any>>(url: string, params?: any, config?: AxleRequestConfig
|
|
51
|
-
export declare function createModifyHelper(service: AxleInstance, method: ModifyMethods, contentType:
|
|
50
|
+
export declare function createFetchHelper(service: AxleInstance, method: FetchMethods, responseType: ResponseType): <T, R = AxiosResponse<T, any>>(url: string, params?: any, config?: AxleRequestConfig) => Promise<R>;
|
|
51
|
+
export declare function createModifyHelper(service: AxleInstance, method: ModifyMethods, contentType: 'application/json' | 'multipart/form-data' | 'application/x-www-form-urlencoded'): <T, R = AxiosResponse<T, any>>(url: string, params?: any, config?: AxleRequestConfig) => Promise<R>;
|
|
52
52
|
export declare function download(url: string | Blob, filename: string): void;
|
|
53
|
-
export declare function createAxle(config
|
|
53
|
+
export declare function createAxle(config?: AxiosRequestConfig): AxleInstance;
|
package/es/helpers.js
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import axios from 'axios';
|
|
2
|
+
import qs from 'qs';
|
|
3
|
+
export function createFetchHelper(service, method, responseType) {
|
|
4
|
+
return function (url, params, config) {
|
|
5
|
+
return service[method](url, Object.assign({ params: Object.assign({ _t: Date.now() }, params), responseType }, config));
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
export function createModifyHelper(service, method, contentType) {
|
|
9
|
+
return function (url, params, config) {
|
|
10
|
+
if (contentType === 'application/x-www-form-urlencoded') {
|
|
11
|
+
params = qs.stringify(params);
|
|
12
|
+
}
|
|
13
|
+
if (contentType === 'multipart/form-data') {
|
|
14
|
+
const formData = new FormData();
|
|
15
|
+
Object.keys(params).forEach((key) => formData.append(key, params[key]));
|
|
16
|
+
params = formData;
|
|
17
|
+
}
|
|
18
|
+
return service[method](url, params, Object.assign({ headers: {
|
|
19
|
+
'Content-Type': contentType,
|
|
20
|
+
} }, config));
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export function download(url, filename) {
|
|
24
|
+
const a = document.createElement('a');
|
|
25
|
+
a.download = filename;
|
|
26
|
+
a.style.display = 'none';
|
|
27
|
+
a.href = typeof url === 'string' ? url : URL.createObjectURL(url);
|
|
28
|
+
document.body.appendChild(a);
|
|
29
|
+
a.click();
|
|
30
|
+
URL.revokeObjectURL(a.href);
|
|
31
|
+
document.body.removeChild(a);
|
|
32
|
+
}
|
|
33
|
+
export function createAxle(config = {}) {
|
|
34
|
+
const service = axios.create(config);
|
|
35
|
+
function setHeader(key, value) {
|
|
36
|
+
;
|
|
37
|
+
service.defaults.headers['common'][key] = value;
|
|
38
|
+
}
|
|
39
|
+
function removeHeader(key) {
|
|
40
|
+
if (typeof key === 'string') {
|
|
41
|
+
Reflect.deleteProperty(service.defaults.headers['common'], key);
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
key.forEach((k) => Reflect.deleteProperty(service.defaults.headers['common'], k));
|
|
45
|
+
}
|
|
46
|
+
service.helpers = {
|
|
47
|
+
get: createFetchHelper(service, 'get', 'json'),
|
|
48
|
+
getBlob: createFetchHelper(service, 'get', 'blob'),
|
|
49
|
+
getDocument: createFetchHelper(service, 'get', 'document'),
|
|
50
|
+
getArrayBuffer: createFetchHelper(service, 'get', 'arraybuffer'),
|
|
51
|
+
getText: createFetchHelper(service, 'get', 'text'),
|
|
52
|
+
getStream: createFetchHelper(service, 'get', 'stream'),
|
|
53
|
+
head: createFetchHelper(service, 'head', 'json'),
|
|
54
|
+
headBlob: createFetchHelper(service, 'head', 'blob'),
|
|
55
|
+
headDocument: createFetchHelper(service, 'head', 'document'),
|
|
56
|
+
headArrayBuffer: createFetchHelper(service, 'head', 'arraybuffer'),
|
|
57
|
+
headText: createFetchHelper(service, 'head', 'text'),
|
|
58
|
+
headStream: createFetchHelper(service, 'head', 'stream'),
|
|
59
|
+
options: createFetchHelper(service, 'options', 'json'),
|
|
60
|
+
optionsBlob: createFetchHelper(service, 'options', 'blob'),
|
|
61
|
+
optionsDocument: createFetchHelper(service, 'options', 'document'),
|
|
62
|
+
optionsArrayBuffer: createFetchHelper(service, 'options', 'arraybuffer'),
|
|
63
|
+
optionsText: createFetchHelper(service, 'options', 'text'),
|
|
64
|
+
optionsStream: createFetchHelper(service, 'options', 'stream'),
|
|
65
|
+
delete: createFetchHelper(service, 'delete', 'json'),
|
|
66
|
+
deleteBlob: createFetchHelper(service, 'delete', 'blob'),
|
|
67
|
+
deleteDocument: createFetchHelper(service, 'delete', 'document'),
|
|
68
|
+
deleteArrayBuffer: createFetchHelper(service, 'delete', 'arraybuffer'),
|
|
69
|
+
deleteText: createFetchHelper(service, 'delete', 'text'),
|
|
70
|
+
deleteStream: createFetchHelper(service, 'delete', 'stream'),
|
|
71
|
+
post: createModifyHelper(service, 'post', 'application/x-www-form-urlencoded'),
|
|
72
|
+
postJSON: createModifyHelper(service, 'post', 'application/json'),
|
|
73
|
+
postMultipart: createModifyHelper(service, 'post', 'multipart/form-data'),
|
|
74
|
+
put: createModifyHelper(service, 'put', 'application/x-www-form-urlencoded'),
|
|
75
|
+
putJSON: createModifyHelper(service, 'put', 'application/json'),
|
|
76
|
+
putMultipart: createModifyHelper(service, 'put', 'multipart/form-data'),
|
|
77
|
+
patch: createModifyHelper(service, 'patch', 'application/x-www-form-urlencoded'),
|
|
78
|
+
patchJSON: createModifyHelper(service, 'patch', 'application/json'),
|
|
79
|
+
patchMultipart: createModifyHelper(service, 'patch', 'multipart/form-data'),
|
|
80
|
+
download,
|
|
81
|
+
setHeader,
|
|
82
|
+
removeHeader,
|
|
83
|
+
};
|
|
84
|
+
return service;
|
|
85
|
+
}
|
package/es/index.d.ts
ADDED
package/es/index.js
ADDED
package/es/instance.d.ts
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { AxiosInstance, AxiosRequestConfig, AxiosResponse, ResponseType } from 'axios';
|
|
2
|
+
export declare type AxleRequestConfig = AxiosRequestConfig & {
|
|
3
|
+
exceptionMessage?: any;
|
|
4
|
+
};
|
|
5
|
+
export declare type FetchHelper = <T = any, R = AxiosResponse<T>>(url: string, params?: any, config?: AxleRequestConfig) => Promise<R>;
|
|
6
|
+
export declare type ModifyHelper = <T = any, R = AxiosResponse<T>>(url: string, params?: any, config?: AxleRequestConfig) => Promise<R>;
|
|
7
|
+
export declare type FetchMethods = 'get' | 'delete' | 'options' | 'head';
|
|
8
|
+
export declare type ModifyMethods = 'post' | 'put' | 'patch';
|
|
9
|
+
export declare type AxleInstance = {
|
|
10
|
+
get: FetchHelper;
|
|
11
|
+
getBlob: FetchHelper;
|
|
12
|
+
getDocument: FetchHelper;
|
|
13
|
+
getText: FetchHelper;
|
|
14
|
+
getArrayBuffer: FetchHelper;
|
|
15
|
+
getStream: FetchHelper;
|
|
16
|
+
head: FetchHelper;
|
|
17
|
+
headBlob: FetchHelper;
|
|
18
|
+
headDocument: FetchHelper;
|
|
19
|
+
headText: FetchHelper;
|
|
20
|
+
headArrayBuffer: FetchHelper;
|
|
21
|
+
headStream: FetchHelper;
|
|
22
|
+
options: FetchHelper;
|
|
23
|
+
optionsBlob: FetchHelper;
|
|
24
|
+
optionsDocument: FetchHelper;
|
|
25
|
+
optionsText: FetchHelper;
|
|
26
|
+
optionsArrayBuffer: FetchHelper;
|
|
27
|
+
optionsStream: FetchHelper;
|
|
28
|
+
delete: FetchHelper;
|
|
29
|
+
deleteBlob: FetchHelper;
|
|
30
|
+
deleteDocument: FetchHelper;
|
|
31
|
+
deleteText: FetchHelper;
|
|
32
|
+
deleteArrayBuffer: FetchHelper;
|
|
33
|
+
deleteStream: FetchHelper;
|
|
34
|
+
post: ModifyHelper;
|
|
35
|
+
postJSON: ModifyHelper;
|
|
36
|
+
postMultipart: ModifyHelper;
|
|
37
|
+
put: ModifyHelper;
|
|
38
|
+
putJSON: ModifyHelper;
|
|
39
|
+
putMultipart: ModifyHelper;
|
|
40
|
+
patch: ModifyHelper;
|
|
41
|
+
patchJSON: ModifyHelper;
|
|
42
|
+
patchMultipart: ModifyHelper;
|
|
43
|
+
download(blob: string | Blob, filename: string): void;
|
|
44
|
+
setHeader(key: string, value: string): void;
|
|
45
|
+
removeHeader(key: string | string[]): void;
|
|
46
|
+
axios: AxiosInstance;
|
|
47
|
+
};
|
|
48
|
+
export declare function createFetchHelper(service: AxiosInstance, method: FetchMethods, responseType: ResponseType): <T, R = AxiosResponse<T, any>>(url: string, params?: any, config?: AxleRequestConfig) => Promise<R>;
|
|
49
|
+
export declare function createModifyHelper(service: AxiosInstance, method: ModifyMethods, contentType: 'application/json' | 'multipart/form-data' | 'application/x-www-form-urlencoded'): <T, R = AxiosResponse<T, any>>(url: string, params?: any, config?: AxleRequestConfig) => Promise<R>;
|
|
50
|
+
export declare function download(url: string | Blob, filename: string): void;
|
|
51
|
+
export declare function createAxle(config?: AxiosRequestConfig): AxleInstance;
|
package/es/instance.js
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import axios from 'axios';
|
|
2
|
+
import qs from 'qs';
|
|
3
|
+
export function createFetchHelper(service, method, responseType) {
|
|
4
|
+
return function (url, params, config) {
|
|
5
|
+
return service[method](url, Object.assign({ params: Object.assign({ _t: Date.now() }, params), responseType }, config));
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
export function createModifyHelper(service, method, contentType) {
|
|
9
|
+
return function (url, params, config) {
|
|
10
|
+
if (contentType === 'application/x-www-form-urlencoded') {
|
|
11
|
+
params = qs.stringify(params);
|
|
12
|
+
}
|
|
13
|
+
if (contentType === 'multipart/form-data') {
|
|
14
|
+
const formData = new FormData();
|
|
15
|
+
Object.keys(params).forEach((key) => formData.append(key, params[key]));
|
|
16
|
+
params = formData;
|
|
17
|
+
}
|
|
18
|
+
return service[method](url, params, Object.assign({ headers: {
|
|
19
|
+
'Content-Type': contentType,
|
|
20
|
+
} }, config));
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export function download(url, filename) {
|
|
24
|
+
const a = document.createElement('a');
|
|
25
|
+
a.download = filename;
|
|
26
|
+
a.style.display = 'none';
|
|
27
|
+
a.href = typeof url === 'string' ? url : URL.createObjectURL(url);
|
|
28
|
+
document.body.appendChild(a);
|
|
29
|
+
a.click();
|
|
30
|
+
URL.revokeObjectURL(a.href);
|
|
31
|
+
document.body.removeChild(a);
|
|
32
|
+
}
|
|
33
|
+
export function createAxle(config = {}) {
|
|
34
|
+
const service = axios.create(config);
|
|
35
|
+
function setHeader(key, value) {
|
|
36
|
+
;
|
|
37
|
+
service.defaults.headers['common'][key] = value;
|
|
38
|
+
}
|
|
39
|
+
function removeHeader(key) {
|
|
40
|
+
if (typeof key === 'string') {
|
|
41
|
+
Reflect.deleteProperty(service.defaults.headers['common'], key);
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
key.forEach((k) => Reflect.deleteProperty(service.defaults.headers['common'], k));
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
get: createFetchHelper(service, 'get', 'json'),
|
|
48
|
+
getBlob: createFetchHelper(service, 'get', 'blob'),
|
|
49
|
+
getDocument: createFetchHelper(service, 'get', 'document'),
|
|
50
|
+
getArrayBuffer: createFetchHelper(service, 'get', 'arraybuffer'),
|
|
51
|
+
getText: createFetchHelper(service, 'get', 'text'),
|
|
52
|
+
getStream: createFetchHelper(service, 'get', 'stream'),
|
|
53
|
+
head: createFetchHelper(service, 'head', 'json'),
|
|
54
|
+
headBlob: createFetchHelper(service, 'head', 'blob'),
|
|
55
|
+
headDocument: createFetchHelper(service, 'head', 'document'),
|
|
56
|
+
headArrayBuffer: createFetchHelper(service, 'head', 'arraybuffer'),
|
|
57
|
+
headText: createFetchHelper(service, 'head', 'text'),
|
|
58
|
+
headStream: createFetchHelper(service, 'head', 'stream'),
|
|
59
|
+
options: createFetchHelper(service, 'options', 'json'),
|
|
60
|
+
optionsBlob: createFetchHelper(service, 'options', 'blob'),
|
|
61
|
+
optionsDocument: createFetchHelper(service, 'options', 'document'),
|
|
62
|
+
optionsArrayBuffer: createFetchHelper(service, 'options', 'arraybuffer'),
|
|
63
|
+
optionsText: createFetchHelper(service, 'options', 'text'),
|
|
64
|
+
optionsStream: createFetchHelper(service, 'options', 'stream'),
|
|
65
|
+
delete: createFetchHelper(service, 'delete', 'json'),
|
|
66
|
+
deleteBlob: createFetchHelper(service, 'delete', 'blob'),
|
|
67
|
+
deleteDocument: createFetchHelper(service, 'delete', 'document'),
|
|
68
|
+
deleteArrayBuffer: createFetchHelper(service, 'delete', 'arraybuffer'),
|
|
69
|
+
deleteText: createFetchHelper(service, 'delete', 'text'),
|
|
70
|
+
deleteStream: createFetchHelper(service, 'delete', 'stream'),
|
|
71
|
+
post: createModifyHelper(service, 'post', 'application/x-www-form-urlencoded'),
|
|
72
|
+
postJSON: createModifyHelper(service, 'post', 'application/json'),
|
|
73
|
+
postMultipart: createModifyHelper(service, 'post', 'multipart/form-data'),
|
|
74
|
+
put: createModifyHelper(service, 'put', 'application/x-www-form-urlencoded'),
|
|
75
|
+
putJSON: createModifyHelper(service, 'put', 'application/json'),
|
|
76
|
+
putMultipart: createModifyHelper(service, 'put', 'multipart/form-data'),
|
|
77
|
+
patch: createModifyHelper(service, 'patch', 'application/x-www-form-urlencoded'),
|
|
78
|
+
patchJSON: createModifyHelper(service, 'patch', 'application/json'),
|
|
79
|
+
patchMultipart: createModifyHelper(service, 'patch', 'multipart/form-data'),
|
|
80
|
+
download,
|
|
81
|
+
setHeader,
|
|
82
|
+
removeHeader,
|
|
83
|
+
axios: service,
|
|
84
|
+
};
|
|
85
|
+
}
|
package/es/types.d.ts
ADDED
|
File without changes
|
package/es/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
package/es/use.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type Ref, type UnwrapRef } from 'vue';
|
|
2
|
+
import { type AxleRequestConfig, createFetchHelper, createModifyHelper } from './instance';
|
|
3
|
+
export interface CreateUseAxleOptions {
|
|
4
|
+
runner?: ReturnType<typeof createFetchHelper> | ReturnType<typeof createModifyHelper>;
|
|
5
|
+
url?: string;
|
|
6
|
+
data?: any;
|
|
7
|
+
params?: any;
|
|
8
|
+
config?: AxleRequestConfig;
|
|
9
|
+
immediate?: boolean;
|
|
10
|
+
dataFormatter?(data: any): any;
|
|
11
|
+
errorFormatter?(errorResponse: Error): Error;
|
|
12
|
+
}
|
|
13
|
+
export interface RunOptions<P> {
|
|
14
|
+
url?: string;
|
|
15
|
+
params?: P;
|
|
16
|
+
config?: AxleRequestConfig;
|
|
17
|
+
}
|
|
18
|
+
export declare type RunReturn<D> = Promise<[UnwrapRef<D>, undefined] | [undefined, Error]>;
|
|
19
|
+
export declare type Run<D, P> = (options?: RunOptions<P>) => RunReturn<D>;
|
|
20
|
+
export interface UseAxleOptions<D, P> {
|
|
21
|
+
runner?: ReturnType<typeof createFetchHelper> | ReturnType<typeof createModifyHelper>;
|
|
22
|
+
url?: string;
|
|
23
|
+
data?: D;
|
|
24
|
+
params?: P;
|
|
25
|
+
config?: AxleRequestConfig;
|
|
26
|
+
immediate?: boolean;
|
|
27
|
+
dataFormatter?(response: any): D;
|
|
28
|
+
errorFormatter?(errorResponse: Error): Error;
|
|
29
|
+
}
|
|
30
|
+
export declare function createUseAxle(options?: CreateUseAxleOptions): <D = any, P = any>(options?: UseAxleOptions<D, P>) => [data: Ref<UnwrapRef<D>>, run: Run<D, P>, loading: Ref<boolean>, extra: {
|
|
31
|
+
error: Ref<UnwrapRef<Error | undefined>>;
|
|
32
|
+
}];
|
package/es/use.js
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { ref } from 'vue';
|
|
2
|
+
export function createUseAxle(options = {}) {
|
|
3
|
+
var _a, _b, _c;
|
|
4
|
+
const defaultRunner = options.runner;
|
|
5
|
+
const defaultUrl = options.url;
|
|
6
|
+
const defaultInitialData = options.data;
|
|
7
|
+
const defaultInitialParams = options.params;
|
|
8
|
+
const defaultInitialConfig = options.config;
|
|
9
|
+
const defaultImmediate = (_a = options.immediate) !== null && _a !== void 0 ? _a : true;
|
|
10
|
+
const defaultDataFormatter = (_b = options.dataFormatter) !== null && _b !== void 0 ? _b : ((v) => v);
|
|
11
|
+
const defaultErrorFormatter = (_c = options.errorFormatter) !== null && _c !== void 0 ? _c : ((v) => v);
|
|
12
|
+
const useAxle = (options = {}) => {
|
|
13
|
+
const { runner = defaultRunner, data: initialData = defaultInitialData, url = defaultUrl, params: initialParams = defaultInitialParams, config: initialConfig = defaultInitialConfig, immediate = defaultImmediate, dataFormatter = defaultDataFormatter, errorFormatter = defaultErrorFormatter } = options;
|
|
14
|
+
const initialUrl = url;
|
|
15
|
+
const data = ref(initialData);
|
|
16
|
+
const loading = ref(false);
|
|
17
|
+
const error = ref();
|
|
18
|
+
if (!runner) {
|
|
19
|
+
throw new Error('[Axle]: Cannot found valid runner, so options.runner is required');
|
|
20
|
+
}
|
|
21
|
+
const run = (options = {}) => {
|
|
22
|
+
var _a;
|
|
23
|
+
const url = (_a = options.url) !== null && _a !== void 0 ? _a : initialUrl;
|
|
24
|
+
if (!url) {
|
|
25
|
+
throw new Error('[Axle]: Cannot found valid url, so options.url is required');
|
|
26
|
+
}
|
|
27
|
+
loading.value = true;
|
|
28
|
+
return runner(url, options.params, options.config)
|
|
29
|
+
.then((response) => {
|
|
30
|
+
data.value = dataFormatter(response);
|
|
31
|
+
error.value = undefined;
|
|
32
|
+
loading.value = false;
|
|
33
|
+
return [data.value, undefined];
|
|
34
|
+
})
|
|
35
|
+
.catch((responseError) => {
|
|
36
|
+
data.value = initialData;
|
|
37
|
+
error.value = errorFormatter(responseError);
|
|
38
|
+
loading.value = false;
|
|
39
|
+
return [undefined, error.value];
|
|
40
|
+
});
|
|
41
|
+
};
|
|
42
|
+
if (immediate) {
|
|
43
|
+
run({
|
|
44
|
+
url: initialUrl,
|
|
45
|
+
params: initialParams,
|
|
46
|
+
config: initialConfig,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
return [
|
|
50
|
+
data,
|
|
51
|
+
run,
|
|
52
|
+
loading,
|
|
53
|
+
{
|
|
54
|
+
error,
|
|
55
|
+
},
|
|
56
|
+
];
|
|
57
|
+
};
|
|
58
|
+
return useAxle;
|
|
59
|
+
}
|
package/package.json
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@varlet/axle",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.4",
|
|
4
4
|
"description": "A useful axios helper",
|
|
5
|
-
"
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "es/index.js",
|
|
6
7
|
"module": "es/index.js",
|
|
8
|
+
"types": "es/index.d.ts",
|
|
9
|
+
"files": [
|
|
10
|
+
"es"
|
|
11
|
+
],
|
|
7
12
|
"keywords": [
|
|
8
13
|
"axle",
|
|
9
14
|
"axios",
|
|
@@ -12,15 +17,18 @@
|
|
|
12
17
|
"license": "MIT",
|
|
13
18
|
"devDependencies": {
|
|
14
19
|
"@types/qs": "^6.9.7",
|
|
15
|
-
"@varlet/cli": "^
|
|
16
|
-
"@varlet/icons": "^
|
|
17
|
-
"@varlet/touch-emulator": "^
|
|
20
|
+
"@varlet/cli": "^2.11.1",
|
|
21
|
+
"@varlet/icons": "^2.11.1",
|
|
22
|
+
"@varlet/touch-emulator": "^2.11.1",
|
|
18
23
|
"clipboard": "^2.0.6",
|
|
19
24
|
"live-server": "^1.2.1",
|
|
20
25
|
"lodash-es": "^4.17.21",
|
|
21
26
|
"typescript": "^4.4.4",
|
|
22
|
-
"vue": "3.
|
|
23
|
-
"vue-router": "4.0
|
|
27
|
+
"vue": "^3.3.1",
|
|
28
|
+
"vue-router": "^4.2.0"
|
|
29
|
+
},
|
|
30
|
+
"peerDependencies": {
|
|
31
|
+
"vue": "^3.2.0"
|
|
24
32
|
},
|
|
25
33
|
"homepage": "https://varlet.gitee.io/axle/",
|
|
26
34
|
"repository": {
|
|
@@ -34,23 +42,24 @@
|
|
|
34
42
|
"Chrome >= 51",
|
|
35
43
|
"iOS >= 10"
|
|
36
44
|
],
|
|
37
|
-
"packageManager": "pnpm@
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
|
|
45
|
+
"packageManager": "pnpm@8.0.0",
|
|
46
|
+
"engines": {
|
|
47
|
+
"pnpm": ">=8.0"
|
|
48
|
+
},
|
|
41
49
|
"author": "Joker <13255238145@163.com>",
|
|
42
50
|
"dependencies": {
|
|
43
|
-
"
|
|
44
|
-
"
|
|
51
|
+
"@varlet/shared": "^2.11.1",
|
|
52
|
+
"axios": "^1.4.0",
|
|
53
|
+
"qs": "^6.11.0"
|
|
45
54
|
},
|
|
46
55
|
"scripts": {
|
|
56
|
+
"bootstrap": "pnpm i && pnpm compile && pnpm --filter ./playground i",
|
|
47
57
|
"bootstrap:ci": "pnpm i",
|
|
48
|
-
"bootstrap": "pnpm i && pnpm --filter ./playground i",
|
|
49
58
|
"dev": "varlet-cli dev",
|
|
50
59
|
"build": "varlet-cli build",
|
|
51
60
|
"preview": "varlet-cli preview",
|
|
52
|
-
"compile": "
|
|
61
|
+
"compile:watch": "tsc -w",
|
|
62
|
+
"compile": "tsc",
|
|
53
63
|
"release": "pnpm compile && varlet-cli release"
|
|
54
|
-
}
|
|
55
|
-
"readme": "<div>\n <a href=\"https://github.com/varletjs/axle\">\n <img src=\"https://github.com/varletjs/axle/blob/main/public/logo.svg\" width=\"400\">\n </a>\n <h2>A tool library based on axios to simplify the development process</h2>\n</div>\n\n### Quickstart\n\n```shell\n# use npm or yarn or pnpm\n\n# npm\nnpm i @varlet/axle -S\n\n# yarn\nyarn add @varlet/axle\n\n# pnpm\npnpm add @varlet/axle\n```\n\n### Function Signature\n\n```typescript\n// 'get' | 'head' | 'options' | 'delete'\nexport type FetchHelper = <T = any, R = AxiosResponse<T>>(\n url: string,\n params?: any,\n config?: AxiosRequestConfig\n) => Promise<R>\n// 'post' | 'put' | 'patch'\nexport type ModifyHelper = <T = any, R = AxiosResponse<T>>(\n url: string,\n data?: any,\n config?: AxiosRequestConfig\n) => Promise<R>\n\nexport interface AxleHelpers {\n // get data in json format\n get: FetchHelper\n // get data in blob format, which can be used to construct URL download under browser\n getBlob: FetchHelper\n // get the html document, return a dom node, can directly embed the document\n getDocument: FetchHelper\n // get text\n getText: FetchHelper\n // get Arraybuffer, which can be used for segmented download\n getArraybuffer: FetchHelper\n // get a readable stream, which can be used for browser caching\n getStream: FetchHelper\n\n head: FetchHelper\n headBlob: FetchHelper\n headDocument: FetchHelper\n headText: FetchHelper\n headArraybuffer: FetchHelper\n headStream: FetchHelper\n\n options: FetchHelper\n optionsBlob: FetchHelper\n optionsDocument: FetchHelper\n optionsText: FetchHelper\n optionsArraybuffer: FetchHelper\n optionsStream: FetchHelper\n\n delete: FetchHelper\n deleteBlob: FetchHelper\n deleteDocument: FetchHelper\n deleteText: FetchHelper\n deleteArrayBuffer: FetchHelper\n deleteStream: FetchHelper\n\n // submit application/x-www-form-urlencoded encoded data\n post: ModifyHelper\n // submit application/json encoded data\n postJSON: ModifyHelper\n // submit multipart/form-data encoded data\n postMultipart: ModifyHelper\n\n put: ModifyHelper\n putJSON: ModifyHelper\n putMultipart: ModifyHelper\n\n patch: ModifyHelper\n patchJSON: ModifyHelper\n patchMultipart: ModifyHelper\n\n // browser download file\n download(blob: string | Blob, filename: string): void\n\n // set global header\n setHeader(key: string, value: string): void\n // remove global header\n removeHeader(key: string | string[]): void\n}\n```\n\n### Normalize Api Arguments\n\n```js\n// axios\nimport { createAxios } from 'axios'\n\nconst axios = createAxios({})\n\nfunction getUser() {\n return axios.get('/user', {\n params: {\n id: 1,\n },\n })\n}\n\nfunction uploadFile() {\n const formData = new FormData()\n formData.append('name', 'axios')\n formData.append('file', new File())\n \n return axios.post('/user', formData, {\n headers: {\n 'Ccontent-Type': 'multipart/form-data',\n },\n })\n}\n```\n\n```js\n// axle\nimport { createAxle } from '@varlet/axle'\n\n// create axle instance , axle has the same abilities as axios\nconst axle = createAxle(/** @see http://www.axios-js.com/zh-cn/docs/#axios-create-config **/)\n\n// Some helper functions of axle\nconst axleHelpers = axle.helpers\n\nfunction getUser() {\n return axleHelpers.get('/user', { id: 1 })\n}\n\nfunction addUser() {\n return axleHelpers.postMultipart('/user', { name: 'axle', file: new File() })\n}\n```\n"
|
|
64
|
+
}
|
|
56
65
|
}
|
package/lib/index.js
DELETED
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.createAxle = exports.download = exports.createModifyHelper = exports.createFetchHelper = void 0;
|
|
7
|
-
const axios_1 = __importDefault(require("axios"));
|
|
8
|
-
const qs_1 = __importDefault(require("qs"));
|
|
9
|
-
function createFetchHelper(service, method, responseType) {
|
|
10
|
-
return function (url, params, config) {
|
|
11
|
-
return service[method](url, Object.assign({ params: Object.assign({ _t: Date.now() }, params), responseType }, config));
|
|
12
|
-
};
|
|
13
|
-
}
|
|
14
|
-
exports.createFetchHelper = createFetchHelper;
|
|
15
|
-
function createModifyHelper(service, method, contentType) {
|
|
16
|
-
return function (url, data, config) {
|
|
17
|
-
if (contentType === "application/x-www-form-urlencoded") {
|
|
18
|
-
data = qs_1.default.stringify(data);
|
|
19
|
-
}
|
|
20
|
-
if (contentType === "multipart/form-data") {
|
|
21
|
-
const formData = new FormData();
|
|
22
|
-
Object.keys(data).forEach((key) => formData.append(key, data[key]));
|
|
23
|
-
data = formData;
|
|
24
|
-
}
|
|
25
|
-
return service[method](url, data, Object.assign({ headers: {
|
|
26
|
-
"Content-Type": contentType,
|
|
27
|
-
} }, config));
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
exports.createModifyHelper = createModifyHelper;
|
|
31
|
-
function download(url, filename) {
|
|
32
|
-
const a = document.createElement("a");
|
|
33
|
-
a.download = filename;
|
|
34
|
-
a.style.display = "none";
|
|
35
|
-
a.href = typeof url === "string" ? url : URL.createObjectURL(url);
|
|
36
|
-
document.body.appendChild(a);
|
|
37
|
-
a.click();
|
|
38
|
-
URL.revokeObjectURL(a.href);
|
|
39
|
-
document.body.removeChild(a);
|
|
40
|
-
}
|
|
41
|
-
exports.download = download;
|
|
42
|
-
function createAxle(config) {
|
|
43
|
-
const service = axios_1.default.create(config);
|
|
44
|
-
function setHeader(key, value) {
|
|
45
|
-
service.defaults.headers["common"][key] = value;
|
|
46
|
-
}
|
|
47
|
-
function removeHeader(key) {
|
|
48
|
-
if (typeof key === "string") {
|
|
49
|
-
Reflect.deleteProperty(service.defaults.headers["common"], key);
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
key.forEach((k) => Reflect.deleteProperty(service.defaults.headers["common"], k));
|
|
53
|
-
}
|
|
54
|
-
service.helpers = {
|
|
55
|
-
get: createFetchHelper(service, "get", "json"),
|
|
56
|
-
getBlob: createFetchHelper(service, "get", "blob"),
|
|
57
|
-
getDocument: createFetchHelper(service, "get", "document"),
|
|
58
|
-
getArraybuffer: createFetchHelper(service, "get", "arraybuffer"),
|
|
59
|
-
getText: createFetchHelper(service, "get", "text"),
|
|
60
|
-
getStream: createFetchHelper(service, "get", "stream"),
|
|
61
|
-
head: createFetchHelper(service, "head", "json"),
|
|
62
|
-
headBlob: createFetchHelper(service, "head", "blob"),
|
|
63
|
-
headDocument: createFetchHelper(service, "head", "document"),
|
|
64
|
-
headArraybuffer: createFetchHelper(service, "head", "arraybuffer"),
|
|
65
|
-
headText: createFetchHelper(service, "head", "text"),
|
|
66
|
-
headStream: createFetchHelper(service, "head", "stream"),
|
|
67
|
-
options: createFetchHelper(service, "options", "json"),
|
|
68
|
-
optionsBlob: createFetchHelper(service, "options", "blob"),
|
|
69
|
-
optionsDocument: createFetchHelper(service, "options", "document"),
|
|
70
|
-
optionsArraybuffer: createFetchHelper(service, "options", "arraybuffer"),
|
|
71
|
-
optionsText: createFetchHelper(service, "options", "text"),
|
|
72
|
-
optionsStream: createFetchHelper(service, "options", "stream"),
|
|
73
|
-
delete: createFetchHelper(service, "delete", "json"),
|
|
74
|
-
deleteBlob: createFetchHelper(service, "delete", "blob"),
|
|
75
|
-
deleteDocument: createFetchHelper(service, "delete", "document"),
|
|
76
|
-
deleteArrayBuffer: createFetchHelper(service, "delete", "arraybuffer"),
|
|
77
|
-
deleteText: createFetchHelper(service, "delete", "text"),
|
|
78
|
-
deleteStream: createFetchHelper(service, "delete", "stream"),
|
|
79
|
-
post: createModifyHelper(service, "post", "application/x-www-form-urlencoded"),
|
|
80
|
-
postJSON: createModifyHelper(service, "post", "application/json"),
|
|
81
|
-
postMultipart: createModifyHelper(service, "post", "multipart/form-data"),
|
|
82
|
-
put: createModifyHelper(service, "put", "application/x-www-form-urlencoded"),
|
|
83
|
-
putJSON: createModifyHelper(service, "put", "application/json"),
|
|
84
|
-
putMultipart: createModifyHelper(service, "put", "multipart/form-data"),
|
|
85
|
-
patch: createModifyHelper(service, "patch", "application/x-www-form-urlencoded"),
|
|
86
|
-
patchJSON: createModifyHelper(service, "patch", "application/json"),
|
|
87
|
-
patchMultipart: createModifyHelper(service, "patch", "multipart/form-data"),
|
|
88
|
-
download,
|
|
89
|
-
setHeader,
|
|
90
|
-
removeHeader,
|
|
91
|
-
};
|
|
92
|
-
return service;
|
|
93
|
-
}
|
|
94
|
-
exports.createAxle = createAxle;
|