feat: login

This commit is contained in:
mozzie 2023-03-13 22:25:43 +08:00
parent 24b8b4c91d
commit 6dcc4753ae
15 changed files with 145 additions and 102 deletions

View File

@ -9,7 +9,7 @@ function App() {
return ( return (
<AntDesignConfigProvider locale={zhCN}> <AntDesignConfigProvider locale={zhCN}>
<Routes> <Routes>
<Route key={"login"} path={"/login"} element={<Login />} /> <Route index key={"login"} path={"/"} element={<Login />} />
<Route key={"dash"} path={"/*"} element={<Layout />} /> <Route key={"dash"} path={"/*"} element={<Layout />} />
<Route path="*" element={<span>404</span>} /> <Route path="*" element={<span>404</span>} />
</Routes> </Routes>

View File

@ -18,3 +18,8 @@ export interface ICreateCourseRequest extends ICourseBasic {
course_chapterList: []; course_chapterList: [];
course_guide: {}; course_guide: {};
} }
export interface IAdminLogin {
username: string;
password: string;
}

View File

@ -1,6 +1,6 @@
import R from "./request"; import R from "./request";
import P from "./process"; import P from "./process";
import { ICreateCourseRequest, IgetVodRequest } from "./dto"; import { IAdminLogin, ICreateCourseRequest, IgetVodRequest } from "./dto";
/** /**
* vod媒资 * vod媒资
@ -10,3 +10,6 @@ export const getVod = (p: IgetVodRequest) =>
export const createCourse = (p: ICreateCourseRequest) => export const createCourse = (p: ICreateCourseRequest) =>
R.post("/api/course/create", { ...p }); R.post("/api/course/create", { ...p });
export const adminLogin = (p: IAdminLogin) =>
R.post("/api/admin/user/auth", { ...p });

View File

@ -1,5 +1,6 @@
import React, { useEffect } from "react"; import React, { useEffect } from "react";
import { useLocation } from "react-router-dom"; import { useLocation, useNavigate } from "react-router-dom";
import Cookie from "js-cookie";
interface IGuardProps { interface IGuardProps {
children: JSX.Element; children: JSX.Element;
@ -7,9 +8,11 @@ interface IGuardProps {
export const Guard = (props: IGuardProps) => { export const Guard = (props: IGuardProps) => {
const location = useLocation(); const location = useLocation();
const navigate = useNavigate();
useEffect(() => { useEffect(() => {
console.log("location.pathname changed 拦截", location.pathname); const sign = Cookie.get("_sign_admin");
if (!sign) navigate("/");
}, [location.pathname]); }, [location.pathname]);
return props.children; return props.children;

View File

@ -11,7 +11,7 @@ interface IRoute extends IRouteMenuItem {
export const navRoutes: IRoute[] = [ export const navRoutes: IRoute[] = [
{ {
path: "/", path: "/overview",
element: lazy(() => import("../view/Overview")), element: lazy(() => import("../view/Overview")),
name: "总览", name: "总览",
}, },

View File

@ -1,12 +1,5 @@
#root { #root {
background-image: linear-gradient( background: #f5f5f5;
to right,
#e95659,
#e15084,
#c55aaa,
#976bc4,
#5678ce
);
height: 100vh; height: 100vh;
} }

View File

@ -1,13 +1,21 @@
import { Button, Checkbox, Form, Input } from "antd"; import { Button, Checkbox, Form, Input, message } from "antd";
import { useNavigate } from "react-router-dom"; import { useNavigate } from "react-router-dom";
import { adminLogin } from "../../api";
import "./index.less"; import "./index.less";
const Login = () => { const Login = () => {
const navigate = useNavigate(); const navigate = useNavigate();
const onFinish = (values: any) => { const onFinish = (values: any) => {
console.log("Success:", values); adminLogin(values).then((res: any) => {
navigate("/"); const { code } = res;
if (code == 10000) {
message.success("登录成功");
navigate("/overview");
} else {
message.error(res.msg);
}
});
}; };
return ( return (
@ -51,10 +59,6 @@ const Login = () => {
<Input.Password placeholder="密码" /> <Input.Password placeholder="密码" />
</Form.Item> </Form.Item>
<Form.Item name="remember" valuePropName="checked">
<Checkbox></Checkbox>
</Form.Item>
<Form.Item wrapperCol={{ span: 24 }}> <Form.Item wrapperCol={{ span: 24 }}>
<Button type="primary" htmlType="submit" block> <Button type="primary" htmlType="submit" block>

View File

@ -4,4 +4,5 @@
export enum BizCode { export enum BizCode {
OK = 10000, OK = 10000,
ERROR = 20000, ERROR = 20000,
AUTH = 40000,
} }

View File

@ -11,7 +11,7 @@ import { join } from 'path';
import { DefaultErrorFilter } from './filter/default.filter'; import { DefaultErrorFilter } from './filter/default.filter';
import { NotFoundFilter } from './filter/notfound.filter'; import { NotFoundFilter } from './filter/notfound.filter';
import { ReportMiddleware } from './middleware/report.middleware'; import { ReportMiddleware } from './middleware/report.middleware';
import { LocalMiddleware } from './middleware/local.middleware'; import { AuthMiddleware } from './middleware/auth.middleware';
dotenv.config(); dotenv.config();
@ -36,7 +36,7 @@ export class ContainerLifeCycle {
async onReady() { async onReady() {
// add middleware // add middleware
this.app.useMiddleware([ReportMiddleware, LocalMiddleware]); this.app.useMiddleware([ReportMiddleware, AuthMiddleware]);
// add filter // add filter
this.app.useFilter([NotFoundFilter, DefaultErrorFilter]); this.app.useFilter([NotFoundFilter, DefaultErrorFilter]);
} }

View File

@ -0,0 +1,25 @@
import { Body, Controller, Inject, Post } from '@midwayjs/core';
import { Context } from '@midwayjs/koa';
import { BizCode } from '../biz/code';
import { createToken } from '../util/encrypt';
@Controller('/admin')
export class AdminController {
@Inject()
ctx: Context;
@Post('/user/auth')
async AdminAuth(@Body() params) {
const { username, password } = params as any;
const token = createToken({ login: true });
if (username === 'admin' && password === '123123') {
this.ctx.cookies.set('_sign_admin', token, {
expires: new Date(Date.now() + 10 * 60 * 1000),
httpOnly: false,
});
this.ctx.body = { code: BizCode.OK };
} else {
this.ctx.body = { code: BizCode.ERROR, msg: '用户名密码错误' };
}
}
}

View File

@ -0,0 +1,25 @@
import { Middleware, IMiddleware } from '@midwayjs/core';
import { NextFunction, Context } from '@midwayjs/koa';
// import { BizCode } from '../biz/code';
// import { decodeToken } from '../util/encrypt';
@Middleware()
export class AuthMiddleware implements IMiddleware<Context, NextFunction> {
resolve() {
return async (ctx: Context, next: NextFunction) => {
// const isAdminUrl = ctx.url;
// console.log('isAdminUrl', isAdminUrl);
// if (isAdminUrl) {
// const signToken = ctx.cookies.get('_sign_admin');
// const { login } = decodeToken(signToken);
// if (!login) return { code: BizCode.AUTH };
// }
await next();
};
}
static getName(): string {
return 'auth';
}
}

View File

@ -1,21 +0,0 @@
import { Middleware, IMiddleware } from '@midwayjs/core';
import { NextFunction, Context } from '@midwayjs/koa';
const locals = {
assets: 'public/',
version: Date.now(),
};
@Middleware()
export class LocalMiddleware implements IMiddleware<Context, NextFunction> {
resolve() {
return async (ctx: Context, next: NextFunction) => {
ctx.locals = locals;
await next();
};
}
static getName(): string {
return 'local';
}
}

View File

@ -17,8 +17,7 @@
"@ricons/fluent": "0.12.0", "@ricons/fluent": "0.12.0",
"@ricons/utils": "0.1.6", "@ricons/utils": "0.1.6",
"dplayer": "1.27.1", "dplayer": "1.27.1",
"highlight.js": "11.7.0", "highlight.js": "11.7.0"
"js-cookie": "3.0.1"
}, },
"devDependencies": { "devDependencies": {
"@types/react": "^18.0.27", "@types/react": "^18.0.27",
@ -28,7 +27,6 @@
"vite-tsconfig-paths": "4.0.5", "vite-tsconfig-paths": "4.0.5",
"typescript": "^4.9.3", "typescript": "^4.9.3",
"vite": "^4.1.0", "vite": "^4.1.0",
"@types/dplayer": "1.25.2", "@types/dplayer": "1.25.2"
"@types/js-cookie": "3.0.3"
} }
} }

View File

@ -49,11 +49,13 @@
"@babel/core": "7.21.0", "@babel/core": "7.21.0",
"rollup-plugin-dts": "5.2.0", "rollup-plugin-dts": "5.2.0",
"axios": "1.3.4", "axios": "1.3.4",
"dayjs": "1.11.7" "dayjs": "1.11.7",
"@types/js-cookie": "3.0.3"
}, },
"dependencies": { "dependencies": {
"object-hash": "^3.0.0", "object-hash": "^3.0.0",
"vditor": "3.9.0", "vditor": "3.9.0",
"zustand": "4.3.6" "zustand": "4.3.6",
"js-cookie": "3.0.1"
} }
} }

View File

@ -11,6 +11,7 @@ importers:
'@rollup/plugin-node-resolve': 15.0.1 '@rollup/plugin-node-resolve': 15.0.1
'@rollup/plugin-terser': 0.4.0 '@rollup/plugin-terser': 0.4.0
'@rollup/plugin-typescript': 11.0.0 '@rollup/plugin-typescript': 11.0.0
'@types/js-cookie': 3.0.3
'@types/node': ^18.13.0 '@types/node': ^18.13.0
autoprefixer: 10.4.13 autoprefixer: 10.4.13
axios: 1.3.4 axios: 1.3.4
@ -21,6 +22,7 @@ importers:
css-loader: 6.7.3 css-loader: 6.7.3
dayjs: 1.11.7 dayjs: 1.11.7
inquirer: 8.0.0 inquirer: 8.0.0
js-cookie: 3.0.1
less: 3.8.0 less: 3.8.0
less-loader: 4.1.0 less-loader: 4.1.0
mini-css-extract-plugin: 2.7.2 mini-css-extract-plugin: 2.7.2
@ -46,6 +48,7 @@ importers:
webpack-cli: ^5.0.1 webpack-cli: ^5.0.1
zustand: 4.3.6 zustand: 4.3.6
dependencies: dependencies:
js-cookie: 3.0.1
object-hash: registry.npmmirror.com/object-hash/3.0.0 object-hash: registry.npmmirror.com/object-hash/3.0.0
vditor: registry.npmmirror.com/vditor/3.9.0 vditor: registry.npmmirror.com/vditor/3.9.0
zustand: registry.npmmirror.com/zustand/4.3.6 zustand: registry.npmmirror.com/zustand/4.3.6
@ -57,6 +60,7 @@ importers:
'@rollup/plugin-node-resolve': registry.npmmirror.com/@rollup/plugin-node-resolve/15.0.1_rollup@3.17.2 '@rollup/plugin-node-resolve': registry.npmmirror.com/@rollup/plugin-node-resolve/15.0.1_rollup@3.17.2
'@rollup/plugin-terser': registry.npmmirror.com/@rollup/plugin-terser/0.4.0_rollup@3.17.2 '@rollup/plugin-terser': registry.npmmirror.com/@rollup/plugin-terser/0.4.0_rollup@3.17.2
'@rollup/plugin-typescript': registry.npmmirror.com/@rollup/plugin-typescript/11.0.0_vi3xdhr63abcxdtwtptol35g5u '@rollup/plugin-typescript': registry.npmmirror.com/@rollup/plugin-typescript/11.0.0_vi3xdhr63abcxdtwtptol35g5u
'@types/js-cookie': 3.0.3
'@types/node': registry.npmmirror.com/@types/node/18.13.0 '@types/node': registry.npmmirror.com/@types/node/18.13.0
autoprefixer: registry.npmmirror.com/autoprefixer/10.4.13_postcss@8.4.21 autoprefixer: registry.npmmirror.com/autoprefixer/10.4.13_postcss@8.4.21
axios: 1.3.4 axios: 1.3.4
@ -199,14 +203,12 @@ importers:
'@ricons/fluent': 0.12.0 '@ricons/fluent': 0.12.0
'@ricons/utils': 0.1.6 '@ricons/utils': 0.1.6
'@types/dplayer': 1.25.2 '@types/dplayer': 1.25.2
'@types/js-cookie': 3.0.3
'@types/react': ^18.0.27 '@types/react': ^18.0.27
'@types/react-dom': ^18.0.10 '@types/react-dom': ^18.0.10
'@types/react-router-dom': 5.3.3 '@types/react-router-dom': 5.3.3
'@vitejs/plugin-react': ^3.1.0 '@vitejs/plugin-react': ^3.1.0
dplayer: 1.27.1 dplayer: 1.27.1
highlight.js: 11.7.0 highlight.js: 11.7.0
js-cookie: 3.0.1
less: ^4.1.3 less: ^4.1.3
react: ^18.2.0 react: ^18.2.0
react-dom: ^18.2.0 react-dom: ^18.2.0
@ -220,14 +222,12 @@ importers:
'@ricons/utils': 0.1.6_biqbaboplfbrettd7655fr4n2y '@ricons/utils': 0.1.6_biqbaboplfbrettd7655fr4n2y
dplayer: 1.27.1 dplayer: 1.27.1
highlight.js: 11.7.0 highlight.js: 11.7.0
js-cookie: 3.0.1
less: 4.1.3 less: 4.1.3
react: 18.2.0 react: 18.2.0
react-dom: 18.2.0_react@18.2.0 react-dom: 18.2.0_react@18.2.0
react-router-dom: 6.8.0_biqbaboplfbrettd7655fr4n2y react-router-dom: 6.8.0_biqbaboplfbrettd7655fr4n2y
devDependencies: devDependencies:
'@types/dplayer': 1.25.2 '@types/dplayer': 1.25.2
'@types/js-cookie': 3.0.3
'@types/react': 18.0.27 '@types/react': 18.0.27
'@types/react-dom': 18.0.10 '@types/react-dom': 18.0.10
'@types/react-router-dom': 5.3.3 '@types/react-router-dom': 5.3.3
@ -2323,6 +2323,14 @@ packages:
requiresBuild: true requiresBuild: true
optional: true optional: true
/mkdirp/0.5.6:
resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
hasBin: true
dependencies:
minimist: registry.npmmirror.com/minimist/1.2.8
dev: true
optional: true
/nanoid/3.3.4: /nanoid/3.3.4:
resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
@ -2411,6 +2419,14 @@ packages:
resolution: {integrity: sha512-H5oELycFml5yto/atYqmjyigJoAo3+OXwolYiH7OfQuYlAqhxNvTfiNMbV9hsC6Yp83yE5r2KTVmtrG6R9i6Pg==} resolution: {integrity: sha512-H5oELycFml5yto/atYqmjyigJoAo3+OXwolYiH7OfQuYlAqhxNvTfiNMbV9hsC6Yp83yE5r2KTVmtrG6R9i6Pg==}
dev: false dev: false
/promise/7.3.1:
resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==}
requiresBuild: true
dependencies:
asap: registry.npmmirror.com/asap/2.0.6
dev: true
optional: true
/prop-types/15.8.1: /prop-types/15.8.1:
resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
dependencies: dependencies:
@ -2549,6 +2565,35 @@ packages:
jsesc: 0.5.0 jsesc: 0.5.0
dev: true dev: true
/request/2.88.2:
resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==}
engines: {node: '>= 6'}
deprecated: request has been deprecated, see https://github.com/request/request/issues/3142
requiresBuild: true
dependencies:
aws-sign2: registry.npmmirror.com/aws-sign2/0.7.0
aws4: registry.npmmirror.com/aws4/1.12.0
caseless: registry.npmmirror.com/caseless/0.12.0
combined-stream: registry.npmmirror.com/combined-stream/1.0.8
extend: registry.npmmirror.com/extend/3.0.2
forever-agent: registry.npmmirror.com/forever-agent/0.6.1
form-data: registry.npmmirror.com/form-data/2.3.3
har-validator: registry.npmmirror.com/har-validator/5.1.5
http-signature: registry.npmmirror.com/http-signature/1.2.0
is-typedarray: registry.npmmirror.com/is-typedarray/1.0.0
isstream: registry.npmmirror.com/isstream/0.1.2
json-stringify-safe: registry.npmmirror.com/json-stringify-safe/5.0.1
mime-types: registry.npmmirror.com/mime-types/2.1.35
oauth-sign: registry.npmmirror.com/oauth-sign/0.9.0
performance-now: registry.npmmirror.com/performance-now/2.1.0
qs: registry.npmmirror.com/qs/6.5.3
safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1
tough-cookie: registry.npmmirror.com/tough-cookie/2.5.0
tunnel-agent: registry.npmmirror.com/tunnel-agent/0.6.0
uuid: registry.npmmirror.com/uuid/3.4.0
dev: true
optional: true
/resize-observer-polyfill/1.5.1: /resize-observer-polyfill/1.5.1:
resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==} resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==}
dev: false dev: false
@ -7522,17 +7567,6 @@ packages:
hasBin: true hasBin: true
dev: true dev: true
registry.npmmirror.com/errno/0.1.8:
resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/errno/-/errno-0.1.8.tgz}
name: errno
version: 0.1.8
hasBin: true
requiresBuild: true
dependencies:
prr: 1.0.1
dev: true
optional: true
registry.npmmirror.com/error-ex/1.3.2: registry.npmmirror.com/error-ex/1.3.2:
resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz} resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz}
name: error-ex name: error-ex
@ -8663,16 +8697,6 @@ packages:
engines: {node: '>= 4'} engines: {node: '>= 4'}
dev: true dev: true
registry.npmmirror.com/image-size/0.5.5:
resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/image-size/-/image-size-0.5.5.tgz}
name: image-size
version: 0.5.5
engines: {node: '>=0.10.0'}
hasBin: true
requiresBuild: true
dev: true
optional: true
registry.npmmirror.com/immutable/4.2.4: registry.npmmirror.com/immutable/4.2.4:
resolution: {integrity: sha512-WDxL3Hheb1JkRN3sQkyujNlL/xRjAo3rJtaU5xeufUauG66JdMr32bLj4gF+vWl84DIA3Zxw7tiAjneYzRRw+w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/immutable/-/immutable-4.2.4.tgz} resolution: {integrity: sha512-WDxL3Hheb1JkRN3sQkyujNlL/xRjAo3rJtaU5xeufUauG66JdMr32bLj4gF+vWl84DIA3Zxw7tiAjneYzRRw+w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/immutable/-/immutable-4.2.4.tgz}
name: immutable name: immutable
@ -9410,14 +9434,14 @@ packages:
engines: {node: '>=4'} engines: {node: '>=4'}
hasBin: true hasBin: true
optionalDependencies: optionalDependencies:
errno: registry.npmmirror.com/errno/0.1.8 errno: 0.1.8
graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 graceful-fs: 4.2.10
image-size: registry.npmmirror.com/image-size/0.5.5 image-size: 0.5.5
mime: registry.npmmirror.com/mime/1.6.0 mime: 1.6.0
mkdirp: registry.npmmirror.com/mkdirp/0.5.6 mkdirp: 0.5.6
promise: registry.npmmirror.com/promise/7.3.1 promise: 7.3.1
request: registry.npmmirror.com/request/2.88.2 request: 2.88.2
source-map: registry.npmmirror.com/source-map/0.6.1 source-map: 0.6.1
dev: true dev: true
registry.npmmirror.com/less/4.1.3: registry.npmmirror.com/less/4.1.3:
@ -9790,16 +9814,6 @@ packages:
dependencies: dependencies:
mime-db: registry.npmmirror.com/mime-db/1.52.0 mime-db: registry.npmmirror.com/mime-db/1.52.0
registry.npmmirror.com/mime/1.6.0:
resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz}
name: mime
version: 1.6.0
engines: {node: '>=4'}
hasBin: true
requiresBuild: true
dev: true
optional: true
registry.npmmirror.com/mime/2.6.0: registry.npmmirror.com/mime/2.6.0:
resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mime/-/mime-2.6.0.tgz} resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mime/-/mime-2.6.0.tgz}
name: mime name: mime
@ -11129,16 +11143,6 @@ packages:
engines: {node: '>=0.12'} engines: {node: '>=0.12'}
dev: true dev: true
registry.npmmirror.com/promise/7.3.1:
resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/promise/-/promise-7.3.1.tgz}
name: promise
version: 7.3.1
requiresBuild: true
dependencies:
asap: registry.npmmirror.com/asap/2.0.6
dev: true
optional: true
registry.npmmirror.com/psl/1.9.0: registry.npmmirror.com/psl/1.9.0:
resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/psl/-/psl-1.9.0.tgz} resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/psl/-/psl-1.9.0.tgz}
name: psl name: psl
@ -12125,6 +12129,7 @@ packages:
tough-cookie: registry.npmmirror.com/tough-cookie/2.5.0 tough-cookie: registry.npmmirror.com/tough-cookie/2.5.0
tunnel-agent: registry.npmmirror.com/tunnel-agent/0.6.0 tunnel-agent: registry.npmmirror.com/tunnel-agent/0.6.0
uuid: registry.npmmirror.com/uuid/3.4.0 uuid: registry.npmmirror.com/uuid/3.4.0
dev: false
registry.npmmirror.com/require-directory/2.1.1: registry.npmmirror.com/require-directory/2.1.1:
resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz} resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz}