@varlet/axle 0.0.3 → 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 CHANGED
@@ -7,139 +7,62 @@
7
7
 
8
8
  ### Quickstart
9
9
 
10
+ #### Install
11
+
10
12
  ```shell
11
- # use npm or yarn or pnpm
13
+ # Install with npm, yarn or pnpm
12
14
 
13
15
  # npm
14
16
  npm i @varlet/axle -S
15
17
 
16
- # yarn
18
+ #yarn
17
19
  yarn add @varlet/axle
18
20
 
19
- # pnpm
21
+ #pnpm
20
22
  pnpm add @varlet/axle
21
23
  ```
22
24
 
23
- ### Function Signature
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 , axle has the same abilities as axios
133
- const axle = createAxle(/** @see http://www.axios-js.com/zh-cn/docs/#axios-create-config **/)
30
+ // create axle instance
31
+ const axle = createAxle(/** @see https://axios-http.com **/)
134
32
 
135
- // Some helper functions of axle
136
- const axleHelpers = axle.helpers
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
- function getUser() {
139
- return axleHelpers.get('/user', { id: 1 })
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
- function addUser() {
143
- return axleHelpers.postMultipart('/user', { name: 'axle', file: new File() })
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,9 +1,9 @@
1
- import type { AxiosInstance, AxiosRequestConfig, AxiosResponse, ResponseType } from "axios";
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, data?: any, config?: AxleRequestConfig) => Promise<R>;
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;
@@ -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 = "get" | "delete" | "options" | "head";
46
- export declare type ModifyMethods = "post" | "put" | "patch";
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
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, data?: 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: AxiosRequestConfig): AxleInstance;
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 CHANGED
@@ -1,53 +1,2 @@
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, data?: any, config?: AxleRequestConfig) => Promise<R>;
7
- export interface AxiosHelpers {
8
- get: FetchHelper;
9
- getBlob: FetchHelper;
10
- getDocument: FetchHelper;
11
- getText: FetchHelper;
12
- getArrayBuffer: FetchHelper;
13
- getStream: FetchHelper;
14
- head: FetchHelper;
15
- headBlob: FetchHelper;
16
- headDocument: FetchHelper;
17
- headText: FetchHelper;
18
- headArrayBuffer: FetchHelper;
19
- headStream: FetchHelper;
20
- options: FetchHelper;
21
- optionsBlob: FetchHelper;
22
- optionsDocument: FetchHelper;
23
- optionsText: FetchHelper;
24
- optionsArrayBuffer: FetchHelper;
25
- optionsStream: FetchHelper;
26
- delete: FetchHelper;
27
- deleteBlob: FetchHelper;
28
- deleteDocument: FetchHelper;
29
- deleteText: FetchHelper;
30
- deleteArrayBuffer: FetchHelper;
31
- deleteStream: FetchHelper;
32
- post: ModifyHelper;
33
- postJSON: ModifyHelper;
34
- postMultipart: ModifyHelper;
35
- put: ModifyHelper;
36
- putJSON: ModifyHelper;
37
- putMultipart: ModifyHelper;
38
- patch: ModifyHelper;
39
- patchJSON: ModifyHelper;
40
- patchMultipart: ModifyHelper;
41
- download(blob: string | Blob, filename: string): void;
42
- setHeader(key: string, value: string): void;
43
- removeHeader(key: string | string[]): void;
44
- }
45
- export declare type FetchMethods = "get" | "delete" | "options" | "head";
46
- export declare type ModifyMethods = "post" | "put" | "patch";
47
- export declare type AxleInstance = AxiosInstance & {
48
- helpers: AxiosHelpers;
49
- };
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, data?: any, config?: AxleRequestConfig) => Promise<R>;
52
- export declare function download(url: string | Blob, filename: string): void;
53
- export declare function createAxle(config: AxiosRequestConfig): AxleInstance;
1
+ export * from './instance';
2
+ export * from './use';
package/es/index.js CHANGED
@@ -1,84 +1,2 @@
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, data, config) {
10
- if (contentType === "application/x-www-form-urlencoded") {
11
- data = qs.stringify(data);
12
- }
13
- if (contentType === "multipart/form-data") {
14
- const formData = new FormData();
15
- Object.keys(data).forEach((key) => formData.append(key, data[key]));
16
- data = formData;
17
- }
18
- return service[method](url, data, 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
- service.defaults.headers["common"][key] = value;
37
- }
38
- function removeHeader(key) {
39
- if (typeof key === "string") {
40
- Reflect.deleteProperty(service.defaults.headers["common"], key);
41
- return;
42
- }
43
- key.forEach((k) => Reflect.deleteProperty(service.defaults.headers["common"], k));
44
- }
45
- service.helpers = {
46
- get: createFetchHelper(service, "get", "json"),
47
- getBlob: createFetchHelper(service, "get", "blob"),
48
- getDocument: createFetchHelper(service, "get", "document"),
49
- getArrayBuffer: createFetchHelper(service, "get", "arraybuffer"),
50
- getText: createFetchHelper(service, "get", "text"),
51
- getStream: createFetchHelper(service, "get", "stream"),
52
- head: createFetchHelper(service, "head", "json"),
53
- headBlob: createFetchHelper(service, "head", "blob"),
54
- headDocument: createFetchHelper(service, "head", "document"),
55
- headArrayBuffer: createFetchHelper(service, "head", "arraybuffer"),
56
- headText: createFetchHelper(service, "head", "text"),
57
- headStream: createFetchHelper(service, "head", "stream"),
58
- options: createFetchHelper(service, "options", "json"),
59
- optionsBlob: createFetchHelper(service, "options", "blob"),
60
- optionsDocument: createFetchHelper(service, "options", "document"),
61
- optionsArrayBuffer: createFetchHelper(service, "options", "arraybuffer"),
62
- optionsText: createFetchHelper(service, "options", "text"),
63
- optionsStream: createFetchHelper(service, "options", "stream"),
64
- delete: createFetchHelper(service, "delete", "json"),
65
- deleteBlob: createFetchHelper(service, "delete", "blob"),
66
- deleteDocument: createFetchHelper(service, "delete", "document"),
67
- deleteArrayBuffer: createFetchHelper(service, "delete", "arraybuffer"),
68
- deleteText: createFetchHelper(service, "delete", "text"),
69
- deleteStream: createFetchHelper(service, "delete", "stream"),
70
- post: createModifyHelper(service, "post", "application/x-www-form-urlencoded"),
71
- postJSON: createModifyHelper(service, "post", "application/json"),
72
- postMultipart: createModifyHelper(service, "post", "multipart/form-data"),
73
- put: createModifyHelper(service, "put", "application/x-www-form-urlencoded"),
74
- putJSON: createModifyHelper(service, "put", "application/json"),
75
- putMultipart: createModifyHelper(service, "put", "multipart/form-data"),
76
- patch: createModifyHelper(service, "patch", "application/x-www-form-urlencoded"),
77
- patchJSON: createModifyHelper(service, "patch", "application/json"),
78
- patchMultipart: createModifyHelper(service, "patch", "multipart/form-data"),
79
- download,
80
- setHeader,
81
- removeHeader,
82
- };
83
- return service;
84
- }
1
+ export * from './instance';
2
+ export * from './use';
@@ -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",
3
+ "version": "0.0.4",
4
4
  "description": "A useful axios helper",
5
- "main": "lib/index.js",
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": "latest",
16
- "@varlet/icons": "latest",
17
- "@varlet/touch-emulator": "latest",
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.2.37",
23
- "vue-router": "^4.0.16"
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,24 +42,24 @@
34
42
  "Chrome >= 51",
35
43
  "iOS >= 10"
36
44
  ],
37
- "packageManager": "pnpm@6.24.3",
38
- "files": [
39
- "lib",
40
- "es"
41
- ],
45
+ "packageManager": "pnpm@8.0.0",
46
+ "engines": {
47
+ "pnpm": ">=8.0"
48
+ },
42
49
  "author": "Joker <13255238145@163.com>",
43
50
  "dependencies": {
44
- "axios": "^0.27.2",
51
+ "@varlet/shared": "^2.11.1",
52
+ "axios": "^1.4.0",
45
53
  "qs": "^6.11.0"
46
54
  },
47
55
  "scripts": {
56
+ "bootstrap": "pnpm i && pnpm compile && pnpm --filter ./playground i",
48
57
  "bootstrap:ci": "pnpm i",
49
- "bootstrap": "pnpm i && pnpm --filter ./playground i",
50
58
  "dev": "varlet-cli dev",
51
59
  "build": "varlet-cli build",
52
60
  "preview": "varlet-cli preview",
53
- "compile": "rm -rf lib es && tsc -p tsconfig.json && tsc -p tsconfig-cjs.json",
61
+ "compile:watch": "tsc -w",
62
+ "compile": "tsc",
54
63
  "release": "pnpm compile && varlet-cli release"
55
- },
56
- "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
+ }
57
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;