@varlet/axle 0.2.2 → 0.2.4-alpha.1701343124078

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
@@ -218,6 +218,8 @@ const [users, getUsers, { loading, error, uploadProgress, downloadProgress, abor
218
218
  immediate: true,
219
219
  // The number of retries after a failed request, defaults 0
220
220
  retry: 3,
221
+ // Whether the value needs to be reset before requesting, defaults false
222
+ resetValue: true,
221
223
  // Request params, defaults {}
222
224
  // When params is an object, it will be carried when sending the first request (immediate)
223
225
  // When params is a function, it will be carried every time a request is sent.
package/README.zh-CN.md CHANGED
@@ -218,6 +218,8 @@ const [users, getUsers, { loading, error, uploadProgress, downloadProgress, abor
218
218
  immediate: true,
219
219
  // 错误重试次数, 默认值: 0
220
220
  retry: 3,
221
+ // 请求前是否需要重置 value, 默认值: false
222
+ resetValue: true,
221
223
  // 请求参数, 默认值: {}
222
224
  // 当参数是一个对象时,发送第一个请求(immediate)时将携带它
223
225
  // 当参数是一个函数时,每次发送请求时都会携带它。
package/es/index.d.ts CHANGED
@@ -1 +1,2 @@
1
1
  export * from './instance.js';
2
+ export * from './interceptors';
package/es/index.js CHANGED
@@ -1 +1,2 @@
1
1
  export * from './instance.js';
2
+ export * from './interceptors';
package/es/instance.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { AxiosInstance, AxiosRequestConfig, AxiosResponse, HeadersDefaults, ResponseType } from 'axios';
1
+ import type { AxiosInstance, AxiosInterceptorOptions, AxiosRequestConfig, AxiosResponse, HeadersDefaults, InternalAxiosRequestConfig, ResponseType } from 'axios';
2
2
  export type AxleRequestConfig = AxiosRequestConfig & {
3
3
  exceptionMessage?: any;
4
4
  };
@@ -7,6 +7,13 @@ export type ModifyRunner = <T = any, R = AxiosResponse<T>>(url: string, params?:
7
7
  export type FetchMethod = 'get' | 'delete' | 'options' | 'head';
8
8
  export type ModifyMethod = 'post' | 'put' | 'patch';
9
9
  export type RunnerMethod = keyof Omit<AxleInstance, 'axios' | 'getHeaders' | 'setHeader' | 'removeHeader'>;
10
+ export interface Interceptor<V> {
11
+ onFulfilled?: ((value: V) => any) | null;
12
+ onRejected?: ((error: any) => any) | null;
13
+ options?: AxiosInterceptorOptions;
14
+ }
15
+ export type RequestInterceptor = Interceptor<InternalAxiosRequestConfig>;
16
+ export type ResponseInterceptor<V = AxiosResponse<any, any>> = Interceptor<V>;
10
17
  export type AxleInstance = {
11
18
  get: FetchRunner;
12
19
  getBlob: FetchRunner;
@@ -44,6 +51,8 @@ export type AxleInstance = {
44
51
  getHeaders(): HeadersDefaults['common'];
45
52
  setHeader(key: string, value: string): void;
46
53
  removeHeader(key: string | string[]): void;
54
+ useRequestInterceptor(interceptor: RequestInterceptor): void;
55
+ useResponseInterceptor(interceptor: ResponseInterceptor): void;
47
56
  axios: AxiosInstance;
48
57
  };
49
58
  export declare function createFetchRunner(service: AxiosInstance, method: FetchMethod, responseType: ResponseType): <T, R = AxiosResponse<T, any>>(url: string, params?: any, config?: AxleRequestConfig) => Promise<R>;
package/es/instance.js CHANGED
@@ -51,6 +51,12 @@ export function createAxle(config = {}) {
51
51
  }
52
52
  key.forEach((k) => Reflect.deleteProperty(service.defaults.headers['common'], k));
53
53
  }
54
+ function useRequestInterceptor(interceptor) {
55
+ service.interceptors.request.use(interceptor.onFulfilled, interceptor.onRejected, interceptor.options);
56
+ }
57
+ function useResponseInterceptor(interceptor) {
58
+ service.interceptors.response.use(interceptor.onFulfilled, interceptor.onRejected, interceptor.options);
59
+ }
54
60
  return {
55
61
  get: createFetchRunner(service, 'get', 'json'),
56
62
  getBlob: createFetchRunner(service, 'get', 'blob'),
@@ -88,6 +94,8 @@ export function createAxle(config = {}) {
88
94
  getHeaders,
89
95
  setHeader,
90
96
  removeHeader,
97
+ useRequestInterceptor,
98
+ useResponseInterceptor,
91
99
  axios: service,
92
100
  };
93
101
  }
@@ -0,0 +1,2 @@
1
+ export * from './requestHeadersInterceptor';
2
+ export * from './responseBlobInterceptor';
@@ -0,0 +1,2 @@
1
+ export * from './requestHeadersInterceptor';
2
+ export * from './responseBlobInterceptor';
@@ -0,0 +1,7 @@
1
+ import type { RequestInterceptor } from '../instance';
2
+ import type { AxiosInterceptorOptions } from 'axios';
3
+ export interface RequestHeadersInterceptorOptions {
4
+ headers?: Record<string, string> | (() => Record<string, string>);
5
+ axiosInterceptorOptions?: AxiosInterceptorOptions;
6
+ }
7
+ export declare function requestHeadersInterceptor(options?: RequestHeadersInterceptorOptions): RequestInterceptor;
@@ -0,0 +1,18 @@
1
+ import { isFunction } from '@varlet/shared';
2
+ export function requestHeadersInterceptor(options = {}) {
3
+ const { headers: headersOrGetter } = options;
4
+ return {
5
+ onFulfilled(config) {
6
+ var _a;
7
+ const headers = (_a = (isFunction(headersOrGetter) ? headersOrGetter() : headersOrGetter)) !== null && _a !== void 0 ? _a : {};
8
+ Object.entries(headers).forEach(([key, value]) => {
9
+ config.headers[key] = value;
10
+ });
11
+ return config;
12
+ },
13
+ onRejected(error) {
14
+ return Promise.reject(error);
15
+ },
16
+ options: options.axiosInterceptorOptions
17
+ };
18
+ }
@@ -0,0 +1,7 @@
1
+ import type { AxiosInterceptorOptions, AxiosResponse } from 'axios';
2
+ import type { ResponseInterceptor } from '../instance';
3
+ export interface ResponseBlobInterceptorOptions {
4
+ data?: (response: AxiosResponse<any, any>) => any;
5
+ axiosInterceptorOptions?: AxiosInterceptorOptions;
6
+ }
7
+ export declare function responseBlobInterceptor(options?: ResponseBlobInterceptorOptions): ResponseInterceptor;
@@ -0,0 +1,15 @@
1
+ export function responseBlobInterceptor(options = {}) {
2
+ return {
3
+ onFulfilled(response) {
4
+ var _a, _b;
5
+ if (response.request.responseType === 'blob') {
6
+ return (_b = (_a = options.data) === null || _a === void 0 ? void 0 : _a.call(options, response)) !== null && _b !== void 0 ? _b : response;
7
+ }
8
+ return response;
9
+ },
10
+ onRejected(error) {
11
+ return Promise.reject(error);
12
+ },
13
+ options: options.axiosInterceptorOptions,
14
+ };
15
+ }
package/es/use.d.ts CHANGED
@@ -4,6 +4,7 @@ export interface RunOptions<P> {
4
4
  url?: string;
5
5
  params?: P;
6
6
  config?: AxleRequestConfig;
7
+ resetValue?: boolean;
7
8
  _retryCount?: number;
8
9
  }
9
10
  export type Run<R, P> = (options?: RunOptions<P>) => Promise<R>;
@@ -20,6 +21,7 @@ export interface UseAxleOptions<V = any, R = any, P = Record<string, any>> {
20
21
  value?: V;
21
22
  params?: P | (() => P);
22
23
  retry?: number;
24
+ resetValue?: boolean;
23
25
  config?: AxleRequestConfig;
24
26
  immediate?: boolean;
25
27
  onBefore?(refs: UseAxleRefs<V>): void;
package/es/use.js CHANGED
@@ -4,7 +4,7 @@ export function createUseAxle(options) {
4
4
  const { axle, onTransform: defaultOnTransform } = options;
5
5
  const useAxle = (options) => {
6
6
  var _a;
7
- const { url, method, immediate, value: initialValue, params: initialParamsOrGetter, config: initialConfig, retry = 0, onBefore = () => { }, onAfter = () => { }, onTransform = (_a = defaultOnTransform) !== null && _a !== void 0 ? _a : ((response) => response), onSuccess = () => { }, onError = () => { }, } = options;
7
+ const { url, method, immediate, value: initialValue, resetValue: initialResetValue, params: initialParamsOrGetter, config: initialConfig, retry = 0, onBefore = () => { }, onAfter = () => { }, onTransform = (_a = defaultOnTransform) !== null && _a !== void 0 ? _a : ((response) => response), onSuccess = () => { }, onError = () => { }, } = options;
8
8
  const initialUrl = url;
9
9
  const value = ref(initialValue);
10
10
  const loading = ref(false);
@@ -21,13 +21,17 @@ export function createUseAxle(options) {
21
21
  };
22
22
  let controller = new AbortController();
23
23
  const run = async (options = {}) => {
24
- var _a;
24
+ var _a, _b, _c;
25
25
  if (controller.signal.aborted) {
26
26
  controller = new AbortController();
27
27
  }
28
+ const resetValue = (_b = (_a = options.resetValue) !== null && _a !== void 0 ? _a : initialResetValue) !== null && _b !== void 0 ? _b : false;
29
+ if (resetValue === true) {
30
+ value.value = initialValue;
31
+ }
28
32
  uploadProgress.value = 0;
29
33
  downloadProgress.value = 0;
30
- const url = (_a = options.url) !== null && _a !== void 0 ? _a : initialUrl;
34
+ const url = (_c = options.url) !== null && _c !== void 0 ? _c : initialUrl;
31
35
  onBefore(refs);
32
36
  loading.value = true;
33
37
  try {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@varlet/axle",
3
- "version": "0.2.2",
3
+ "version": "0.2.4-alpha.1701343124078",
4
4
  "description": "Progressive request tool based on axios",
5
5
  "type": "module",
6
6
  "main": "es/index.js",