diff --git a/README.md b/README.md
index bcdfb85..199ebcc 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,10 @@
react 模板
+
+
+
+
## 👨🏻💻 项目说明
- react 模板, 一个比 CRA 更丰富的模板
@@ -14,11 +18,10 @@
- React Hook
- TypeScript v4
- webpack v5
-- axios
+- axios v1
- mobx v6
- mobx-react-lite v3
- react-router-dom v6
-- postcss-px-to-viewport
## ⌛️ 安装项目依赖
@@ -127,7 +130,10 @@ merge 🔀 合并分支
```
-## 技术栈说明
+## 🚀 陆续新增内容:
-- React18
-- TypeScript
+- ① 样式 ✅ 2023/2/6 日提交 [config: 🔧 新增样式文件(css/less/sass/postCss)处理](https://github.com/guokaigdg/react-enterprise-template/commit/11fb415bac609dfa7474a1ee2db93ccb4a350a51)
+- ② 代码规范 ✅ 2023/2/7 日提交 [config: 🔧 新增 Prettier/ESlint/StyleLint/EditorConfig 代码规范](https://github.com/guokaigdg/react-enterprise-template/commit/87dd1ca333f81203dd245a6eb40479a0745f096f)
+- ③ 路由 ✅ 2023/2/8 日提交 [config: 🔧 新增路由管理 react-router-dom v6](https://github.com/guokaigdg/react-enterprise-template/commit/239446d0709eb52bad2b48af4983eef91c49f60d)
+- ④ 网络请求 ✅ 2023/2/21 日提交
+- ⑤ 数据共享 ✅ [feature: ✨ 新增状态管理 Mobx v6](https://github.com/guokaigdg/react-enterprise-template/commit/992e1884943d4f8bda836f48c60df473418397d7)
diff --git a/docs/images/home.png b/docs/images/home.png
new file mode 100644
index 0000000..dce5336
Binary files /dev/null and b/docs/images/home.png differ
diff --git a/package-lock.json b/package-lock.json
index af4a41e..0a5e928 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1250,7 +1250,6 @@
"version": "7.20.13",
"resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.20.13.tgz",
"integrity": "sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==",
- "dev": true,
"requires": {
"regenerator-runtime": "^0.13.11"
}
@@ -2669,6 +2668,11 @@
"integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
"dev": true
},
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
"at-least-node": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz",
@@ -2701,6 +2705,25 @@
"integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==",
"dev": true
},
+ "axios": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmmirror.com/axios/-/axios-1.3.3.tgz",
+ "integrity": "sha512-eYq77dYIFS77AQlhzEL937yUBSepBfPIe8FcgEDN35vMNZKMrs81pgnyrQpwfy4NF4b4XWX1Zgx7yX+25w8QJA==",
+ "requires": {
+ "follow-redirects": "^1.15.0",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
+ "axios-retry": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmmirror.com/axios-retry/-/axios-retry-3.4.0.tgz",
+ "integrity": "sha512-VdgaP+gHH4iQYCCNUWF2pcqeciVOdGrBBAYUfTY+wPcO5Ltvp/37MLFNCmJKo7Gj3SHvCSdL8ouI1qLYJN3liA==",
+ "requires": {
+ "@babel/runtime": "^7.15.4",
+ "is-retry-allowed": "^2.2.0"
+ }
+ },
"babel-loader": {
"version": "8.2.2",
"resolved": "https://registry.npmmirror.com/babel-loader/-/babel-loader-8.2.2.tgz",
@@ -3524,6 +3547,14 @@
"integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==",
"dev": true
},
+ "combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
"commander": {
"version": "4.1.1",
"resolved": "https://registry.npmmirror.com/commander/-/commander-4.1.1.tgz",
@@ -4363,6 +4394,11 @@
}
}
},
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+ },
"delegates": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/delegates/-/delegates-1.0.0.tgz",
@@ -5509,8 +5545,7 @@
"follow-redirects": {
"version": "1.15.2",
"resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.2.tgz",
- "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
- "dev": true
+ "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA=="
},
"for-each": {
"version": "0.3.3",
@@ -5614,6 +5649,16 @@
}
}
},
+ "form-data": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz",
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ }
+ },
"forwarded": {
"version": "0.2.0",
"resolved": "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz",
@@ -6924,6 +6969,11 @@
"integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==",
"dev": true
},
+ "is-retry-allowed": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmmirror.com/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz",
+ "integrity": "sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg=="
+ },
"is-root": {
"version": "2.1.0",
"resolved": "https://registry.npmmirror.com/is-root/-/is-root-2.1.0.tgz",
@@ -7878,14 +7928,12 @@
"mime-db": {
"version": "1.52.0",
"resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
- "dev": true
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
},
"mime-types": {
"version": "2.1.35",
"resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
- "dev": true,
"requires": {
"mime-db": "1.52.0"
}
@@ -10161,6 +10209,11 @@
"ipaddr.js": "1.9.1"
}
},
+ "proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+ },
"prr": {
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/prr/-/prr-1.0.1.tgz",
@@ -10574,8 +10627,7 @@
"regenerator-runtime": {
"version": "0.13.11",
"resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
- "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==",
- "dev": true
+ "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="
},
"regenerator-transform": {
"version": "0.15.1",
diff --git a/package.json b/package.json
index e9e01f4..c486ef3 100644
--- a/package.json
+++ b/package.json
@@ -105,6 +105,8 @@
"webpackbar": "^5.0.2"
},
"dependencies": {
+ "axios": "^1.3.3",
+ "axios-retry": "^3.4.0",
"mobx": "^6.8.0",
"mobx-react-lite": "^3.4.0",
"react": "^18.2.0",
diff --git a/src/api/index.ts b/src/api/index.ts
new file mode 100644
index 0000000..8ecac9e
--- /dev/null
+++ b/src/api/index.ts
@@ -0,0 +1,31 @@
+/*
+ * @file: 所有的接口列表
+ * 宝可梦api https://pokeapi.co/about
+ */
+
+import http from '../http';
+import {pokemonOptions} from '@/interface/http';
+
+/**
+ * @function get
+ * @description 请求测试
+ */
+
+export function fetchPokemon(data: pokemonOptions) {
+ return http({
+ url: ' https://pokeapi.co/api/v2/pokemon',
+ params: data
+ });
+}
+/**
+ * @function post
+ * @description 请求测试
+ */
+
+export function fetchPostTest(data: any) {
+ return http({
+ url: '/xxx/list',
+ method: 'post',
+ data
+ });
+}
diff --git a/src/http/README.md b/src/http/README.md
new file mode 100644
index 0000000..6c52477
--- /dev/null
+++ b/src/http/README.md
@@ -0,0 +1,6 @@
+1. 实现请求拦截
+2. 实现响应拦截
+3. 常见错误信息处理
+4. 请求头设置
+5. api 集中式管理
+6. 重复发送请求
diff --git a/src/http/index.ts b/src/http/index.ts
new file mode 100644
index 0000000..b3a3717
--- /dev/null
+++ b/src/http/index.ts
@@ -0,0 +1,75 @@
+/*
+ * @Author: guokai05
+ * @Date: 2023-02-19 22:31:15
+ * @LastEditors: guokai05
+ * @LastEditTime: 2023-02-21 16:18:27
+ */
+import axios from 'axios';
+import axiosRetry from 'axios-retry';
+import {InternalAxiosRequestConfig, AxiosRequestConfig, AxiosResponse, AxiosError} from 'axios';
+const whiteRetry = new Set(['ECONNABORTED', undefined, 0]);
+// import {baseURL} from '@/utils/variable';
+
+// 创建 axios 请求实例
+const serviceAxios = axios.create({
+ baseURL: '', // 接口请求地址
+ timeout: 15 * 1000, // 请求超时设置
+ withCredentials: false, // 跨域请求是否需要携带 cookie
+ headers: {
+ 'Content-Type': 'application/json;charset=utf-8'
+ },
+ validateStatus() {
+ // 使用async-await,处理reject情况较为繁琐,所以全部返回resolve,在业务代码中处理异常
+ return true;
+ }
+});
+
+axiosRetry(serviceAxios, {
+ retries: 2, // 重复请求次数
+ shouldResetTimeout: true, // 重置超时时间
+ retryDelay: (retryCount) => {
+ return retryCount * 10000; // 重复请求延迟
+ },
+ retryCondition: (err) => {
+ // true为打开自动发送请求,false为关闭自动发送请求
+ const {code, message} = err;
+ return whiteRetry.has(code) || message.includes('timeout');
+ }
+});
+
+// 请求拦截器
+serviceAxios.interceptors.request.use(
+ (config: InternalAxiosRequestConfig) => {
+ return config;
+ },
+ (err: AxiosError) => {
+ return Promise.reject(err);
+ }
+);
+
+// 响应拦截器
+serviceAxios.interceptors.response.use(
+ (res: AxiosResponse) => {
+ return res;
+ },
+ (err: AxiosError) => {
+ return Promise.reject(err);
+ }
+);
+
+// 统一发起请求的函数
+async function request(options: AxiosRequestConfig) {
+ try {
+ const response = await serviceAxios.request(options);
+ const {status, data} = response;
+ // 处理 HTTP 状态码
+ if (status < 200 || status >= 500) {
+ return Promise.reject();
+ }
+ return Promise.resolve(data);
+ } catch (error) {
+ return Promise.reject(error);
+ }
+}
+
+export default request;
diff --git a/src/interface/http.ts b/src/interface/http.ts
new file mode 100644
index 0000000..fa81c82
--- /dev/null
+++ b/src/interface/http.ts
@@ -0,0 +1,4 @@
+export interface pokemonOptions {
+ offset?: number;
+ limit: number;
+}
diff --git a/src/router/index.tsx b/src/router/index.tsx
index f6c497c..006f34b 100644
--- a/src/router/index.tsx
+++ b/src/router/index.tsx
@@ -15,7 +15,7 @@ const About = Suspenselazy(() => import(/* webpackChunkName:"about" */ '@/view/A
const routes: RouteObject[] = [
{
path: '/',
- element: // 重定向
+ element: // 重定向
},
{
path: 'home',
diff --git a/src/store/global/index.ts b/src/store/global/index.ts
index 7d1fed1..a350212 100644
--- a/src/store/global/index.ts
+++ b/src/store/global/index.ts
@@ -1,4 +1,6 @@
-import {makeAutoObservable} from 'mobx';
+import {makeAutoObservable, runInAction} from 'mobx';
+import {fetchPokemon} from '@/api';
+import {pokemonOptions} from '@/interface/http';
class Global {
constructor() {
@@ -6,12 +8,29 @@ class Global {
}
count = 0;
name = 'react';
+ data: any = [];
+ loading = true;
+
addCount = () => {
this.count++;
};
setName = (data: string) => {
this.name = data;
};
+
+ getFetchGetTest = async (params: pokemonOptions) => {
+ try {
+ const result: any = await fetchPokemon(params);
+ const {results} = result;
+ runInAction(() => {
+ this.data = results;
+ this.loading = false;
+ });
+ } catch (err) {
+ console.log(err);
+ this.loading = false;
+ }
+ };
}
const globalStore = new Global();
diff --git a/src/utils/useHook/useRequest.ts b/src/utils/useHook/useRequest.ts
new file mode 100644
index 0000000..2a98497
--- /dev/null
+++ b/src/utils/useHook/useRequest.ts
@@ -0,0 +1,39 @@
+/*
+ * useRequest封装
+ * useRequest封装 https://www.xiabingbao.com/post/react/react-hook-userequest.html
+ */
+
+import {useState, useEffect} from 'react';
+const useRequest = (fetch: any, params: any) => {
+ const [loading, setLoading] = useState(true);
+ const [result, setResult] = useState(null);
+ const [error, setError] = useState(null);
+
+ const request = async () => {
+ setLoading(true);
+ try {
+ const result = await fetch(params);
+ const {code, data} = result;
+ if (code === 200 && data) {
+ setResult(data);
+ } else {
+ setError(result);
+ }
+ } catch (error) {
+ setError(error);
+ }
+ setLoading(false);
+ };
+
+ useEffect(() => {
+ request();
+ }, []);
+
+ return {
+ loading,
+ result,
+ error
+ };
+};
+
+export default useRequest;
diff --git a/src/utils/variable.ts b/src/utils/variable.ts
new file mode 100644
index 0000000..1faf2c6
--- /dev/null
+++ b/src/utils/variable.ts
@@ -0,0 +1 @@
+export const baseURL = process.env.USER_BASE_URL;
diff --git a/src/view/Home/HomeTwo/index.less b/src/view/Home/HomeTwo/index.less
index 43b8980..ff0e01d 100644
--- a/src/view/Home/HomeTwo/index.less
+++ b/src/view/Home/HomeTwo/index.less
@@ -1,11 +1,84 @@
.home-two-root {
display: flex;
flex: 1;
- align-items: center;
- justify-content: center;
+ flex-direction: column;
box-sizing: border-box;
- height: 800px;
- font-size: 50px;
+ height: 100%;
background: #ffe7ba;
border-radius: 10px;
+
+ .search-wrap{
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: auto;
+ height: 120px;
+
+ .input {
+ width: 250px;
+ height: 40px;
+ padding: 0 5px;
+ text-align: center;
+ }
+
+ .btn {
+ width: 60px;
+ margin-left: 20px;
+ padding: 10px;
+ color: azure;
+ font-weight: 700;
+ font-size: 14px;
+ text-align: center;
+ background: #3c6ffe;
+ border-radius: 5px;
+ cursor: pointer;
+
+ &:hover {
+ background-color: #3765e6;
+ border-color: #3765e6;
+ }
+
+ &:active {
+ background-color: #315acc;
+ border-color: #315acc;
+ }
+ }
+ }
+
+ .list-root{
+ display: flex;
+ flex: 1;
+ flex-wrap: wrap;
+ justify-content: center;
+ padding: 5px;
+ overflow: scroll;
+
+ .pokemon-item {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ box-sizing: border-box;
+ width: 300px;
+ height: 200px;
+ margin: 5px;
+ color: #383a3a;
+ font-size: 24px;
+ background-color: rgb(255 255 255);
+ border-radius: 10px;
+
+ &:hover{
+ border: #ea9f14 5px solid;
+ transform: scale(1.1);
+ cursor: pointer;
+ }
+
+ .img{
+ width: 100px;
+ height: 100px;
+ margin: 10px;
+ }
+ }
+
+ }
}
diff --git a/src/view/Home/HomeTwo/index.tsx b/src/view/Home/HomeTwo/index.tsx
index 6d0467a..1e88965 100644
--- a/src/view/Home/HomeTwo/index.tsx
+++ b/src/view/Home/HomeTwo/index.tsx
@@ -1,8 +1,49 @@
-import React from 'react';
+import React, {useEffect} from 'react';
+import {useStores} from '@/store';
+import {observer} from 'mobx-react-lite';
import './index.less';
const HomeTwo = () => {
- return HomeTwo
;
+ const {globalStore} = useStores();
+ const {loading, data, getFetchGetTest} = globalStore;
+ // 查询
+ const handleClick = () => {
+ getFetchGetTest({
+ limit: 500
+ });
+ };
+
+ useEffect(() => {
+ getFetchGetTest({
+ limit: 500
+ });
+ }, []);
+
+ return (
+
+
+
+ {!loading && (
+
+ {data.map((item: any) => (
+
+
+
{item.name}
+
+ ))}
+
+ )}
+
+ );
};
-export default HomeTwo;
+export default observer(HomeTwo);
diff --git a/src/view/Home/index.less b/src/view/Home/index.less
index f8f8d8c..e56909d 100644
--- a/src/view/Home/index.less
+++ b/src/view/Home/index.less
@@ -9,7 +9,7 @@
flex-direction: column;
box-sizing: border-box;
width: 300px;
- height: 800px;
+ height: 100%;
padding: 10px;
font-size: 25px;
background: #00bfff;
diff --git a/yarn.lock b/yarn.lock
index c657491..f1f34c6 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -976,6 +976,13 @@
core-js-pure "^3.25.1"
regenerator-runtime "^0.13.11"
+"@babel/runtime@^7.15.4":
+ version "7.21.0"
+ resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.21.0.tgz#5b55c9d394e5fcf304909a8b00c07dc217b56673"
+ integrity sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==
+ dependencies:
+ regenerator-runtime "^0.13.11"
+
"@babel/runtime@^7.8.4":
version "7.20.13"
resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.20.13.tgz#7055ab8a7cff2b8f6058bf6ae45ff84ad2aded4b"
@@ -2115,6 +2122,11 @@ async@^2.6.4:
dependencies:
lodash "^4.17.14"
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
+
at-least-node@^1.0.0:
version "1.0.0"
resolved "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
@@ -2155,6 +2167,23 @@ available-typed-arrays@^1.0.5:
resolved "https://registry.npmmirror.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7"
integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==
+axios-retry@^3.4.0:
+ version "3.4.0"
+ resolved "https://registry.npmmirror.com/axios-retry/-/axios-retry-3.4.0.tgz#f464dbe9408e5aa78fa319afd38bb69b533d8854"
+ integrity sha512-VdgaP+gHH4iQYCCNUWF2pcqeciVOdGrBBAYUfTY+wPcO5Ltvp/37MLFNCmJKo7Gj3SHvCSdL8ouI1qLYJN3liA==
+ dependencies:
+ "@babel/runtime" "^7.15.4"
+ is-retry-allowed "^2.2.0"
+
+axios@^1.3.3:
+ version "1.3.3"
+ resolved "https://registry.npmmirror.com/axios/-/axios-1.3.3.tgz#e7011384ba839b885007c9c9fae1ff23dceb295b"
+ integrity sha512-eYq77dYIFS77AQlhzEL937yUBSepBfPIe8FcgEDN35vMNZKMrs81pgnyrQpwfy4NF4b4XWX1Zgx7yX+25w8QJA==
+ dependencies:
+ follow-redirects "^1.15.0"
+ form-data "^4.0.0"
+ proxy-from-env "^1.1.0"
+
babel-loader@8.2.2:
version "8.2.2"
resolved "https://registry.npmmirror.com/babel-loader/-/babel-loader-8.2.2.tgz#9363ce84c10c9a40e6c753748e1441b60c8a0b81"
@@ -2728,6 +2757,13 @@ colorette@^2.0.14, colorette@^2.0.19:
resolved "https://registry.npmmirror.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798"
integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==
+combined-stream@^1.0.8:
+ version "1.0.8"
+ resolved "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
+ integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+ dependencies:
+ delayed-stream "~1.0.0"
+
commander@^2.20.0:
version "2.20.3"
resolved "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
@@ -3212,6 +3248,11 @@ del@^4.1.1:
pify "^4.0.1"
rimraf "^2.6.3"
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+ integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
+
delegates@^1.0.0:
version "1.0.0"
resolved "https://registry.npmmirror.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
@@ -4044,7 +4085,7 @@ flatted@^3.1.0:
resolved "https://registry.npmmirror.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787"
integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==
-follow-redirects@^1.0.0:
+follow-redirects@^1.0.0, follow-redirects@^1.15.0:
version "1.15.2"
resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13"
integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==
@@ -4098,6 +4139,15 @@ fork-ts-checker-webpack-plugin@^7.3.0:
semver "^7.3.5"
tapable "^2.2.1"
+form-data@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
+ integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.8"
+ mime-types "^2.1.12"
+
forwarded@0.2.0:
version "0.2.0"
resolved "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
@@ -5216,6 +5266,11 @@ is-regexp@^1.0.0:
resolved "https://registry.npmmirror.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"
integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==
+is-retry-allowed@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.npmmirror.com/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz#88f34cbd236e043e71b6932d09b0c65fb7b4d71d"
+ integrity sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==
+
is-root@^2.1.0:
version "2.1.0"
resolved "https://registry.npmmirror.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c"
@@ -5958,7 +6013,7 @@ mime-db@1.52.0, "mime-db@>= 1.43.0 < 2":
resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
-mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34:
+mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34:
version "2.1.35"
resolved "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
@@ -7549,6 +7604,11 @@ proxy-addr@~2.0.7:
forwarded "0.2.0"
ipaddr.js "1.9.1"
+proxy-from-env@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
+ integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
+
prr@~1.0.1:
version "1.0.1"
resolved "https://registry.npmmirror.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"