Warp/node_modules/@vueuse/integrations/useAxios.cjs

124 lines
3.6 KiB
JavaScript
Raw Permalink Normal View History

2024-01-05 12:14:38 +00:00
'use strict';
var vueDemi = require('vue-demi');
var shared = require('@vueuse/shared');
var axios = require('axios');
function useAxios(...args) {
const url = typeof args[0] === "string" ? args[0] : void 0;
const argsPlaceholder = typeof url === "string" ? 1 : 0;
2024-01-31 06:33:19 +00:00
const defaultOptions = {
2024-01-05 12:14:38 +00:00
immediate: !!argsPlaceholder,
shallow: true
};
2024-01-31 06:33:19 +00:00
let defaultConfig = {};
let instance = axios;
let options = defaultOptions;
2024-01-05 12:14:38 +00:00
const isAxiosInstance = (val) => !!(val == null ? void 0 : val.request);
if (args.length > 0 + argsPlaceholder) {
if (isAxiosInstance(args[0 + argsPlaceholder]))
instance = args[0 + argsPlaceholder];
else
defaultConfig = args[0 + argsPlaceholder];
}
if (args.length > 1 + argsPlaceholder) {
if (isAxiosInstance(args[1 + argsPlaceholder]))
instance = args[1 + argsPlaceholder];
}
if (args.length === 2 + argsPlaceholder && !isAxiosInstance(args[1 + argsPlaceholder]) || args.length === 3 + argsPlaceholder)
2024-01-31 06:33:19 +00:00
options = args[args.length - 1] || defaultOptions;
2024-01-05 12:14:38 +00:00
const {
initialData,
shallow,
onSuccess = shared.noop,
onError = shared.noop,
immediate,
resetOnExecute = false
} = options;
const response = vueDemi.shallowRef();
const data = (shallow ? vueDemi.shallowRef : vueDemi.ref)(initialData);
const isFinished = vueDemi.ref(false);
const isLoading = vueDemi.ref(false);
const isAborted = vueDemi.ref(false);
const error = vueDemi.shallowRef();
const cancelTokenSource = axios.CancelToken.source;
let cancelToken = cancelTokenSource();
const abort = (message) => {
if (isFinished.value || !isLoading.value)
return;
cancelToken.cancel(message);
cancelToken = cancelTokenSource();
isAborted.value = true;
isLoading.value = false;
isFinished.value = false;
};
const loading = (loading2) => {
isLoading.value = loading2;
isFinished.value = !loading2;
};
const resetData = () => {
if (resetOnExecute)
data.value = initialData;
};
const waitUntilFinished = () => new Promise((resolve, reject) => {
shared.until(isFinished).toBe(true).then(() => error.value ? reject(error.value) : resolve(result));
});
const promise = {
then: (...args2) => waitUntilFinished().then(...args2),
catch: (...args2) => waitUntilFinished().catch(...args2)
};
let executeCounter = 0;
const execute = (executeUrl = url, config = {}) => {
error.value = void 0;
const _url = typeof executeUrl === "string" ? executeUrl : url != null ? url : config.url;
if (_url === void 0) {
error.value = new axios.AxiosError(axios.AxiosError.ERR_INVALID_URL);
isFinished.value = true;
return promise;
}
resetData();
abort();
loading(true);
executeCounter += 1;
const currentExecuteCounter = executeCounter;
isAborted.value = false;
instance(_url, { ...defaultConfig, ...typeof executeUrl === "object" ? executeUrl : config, cancelToken: cancelToken.token }).then((r) => {
if (isAborted.value)
return;
response.value = r;
const result2 = r.data;
data.value = result2;
onSuccess(result2);
}).catch((e) => {
error.value = e;
onError(e);
}).finally(() => {
var _a;
(_a = options.onFinish) == null ? void 0 : _a.call(options);
if (currentExecuteCounter === executeCounter)
loading(false);
});
return promise;
};
if (immediate && url)
execute();
const result = {
response,
data,
error,
isFinished,
isLoading,
cancel: abort,
isAborted,
isCanceled: isAborted,
abort,
execute
};
return {
...result,
...promise
};
}
exports.useAxios = useAxios;