feat: 课程
This commit is contained in:
parent
475b2932ef
commit
0a7b4046a7
|
@ -7,3 +7,14 @@ export interface IGetVodeResponse {
|
||||||
MediaInfoSet: any[];
|
MediaInfoSet: any[];
|
||||||
TotalCount: number;
|
TotalCount: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface ICourseBasic {
|
||||||
|
course_title: string;
|
||||||
|
course_cover_url: string;
|
||||||
|
course_summary: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ICreateCourseRequest extends ICourseBasic {
|
||||||
|
course_chapterList: [];
|
||||||
|
course_guide: {};
|
||||||
|
}
|
||||||
|
|
|
@ -1,9 +1,12 @@
|
||||||
import R from "./request";
|
import R from "./request";
|
||||||
import P from "./process";
|
import P from "./process";
|
||||||
import { IgetVodRequest } from "./dto";
|
import { ICreateCourseRequest, IgetVodRequest } from "./dto";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 腾讯vod媒资
|
* 腾讯vod媒资
|
||||||
*/
|
*/
|
||||||
export const getVod = (p: IgetVodRequest) =>
|
export const getVod = (p: IgetVodRequest) =>
|
||||||
R.post("/api/vod/media/select", { ...p }).then((d: any) => P.getVod(d.data));
|
R.post("/api/vod/media/select", { ...p }).then((d: any) => P.getVod(d.data));
|
||||||
|
|
||||||
|
export const createCourse = (p: ICreateCourseRequest) =>
|
||||||
|
R.post("/api/course/create", { ...p });
|
||||||
|
|
|
@ -11,7 +11,7 @@ const instance = axios.create(config);
|
||||||
|
|
||||||
instance.interceptors.request.use(
|
instance.interceptors.request.use(
|
||||||
(config) => {
|
(config) => {
|
||||||
console.log(config)
|
console.log(config);
|
||||||
return config;
|
return config;
|
||||||
},
|
},
|
||||||
(error) => {
|
(error) => {
|
||||||
|
@ -24,10 +24,11 @@ instance.interceptors.response.use(
|
||||||
(response) => {
|
(response) => {
|
||||||
if (response.data.code === 10000)
|
if (response.data.code === 10000)
|
||||||
message.success(`接口: ${response.config.url}, 请求成功`);
|
message.success(`接口: ${response.config.url}, 请求成功`);
|
||||||
|
if (response.data.code === 20000)
|
||||||
|
message.error(`接口: ${response.config.url}, 遇到错误`);
|
||||||
return response?.data;
|
return response?.data;
|
||||||
},
|
},
|
||||||
(error) => {
|
(error) => {
|
||||||
message.error(error);
|
|
||||||
return Promise.reject(error);
|
return Promise.reject(error);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
|
@ -4,16 +4,9 @@ import { getVod } from "../api";
|
||||||
export const useMediaStore = create((set) => ({
|
export const useMediaStore = create((set) => ({
|
||||||
list: [],
|
list: [],
|
||||||
listFilter: [],
|
listFilter: [],
|
||||||
getListFilter: (state: any) => {
|
|
||||||
return state.list.length === 0
|
|
||||||
? getVod({ offset: 0, limit: 5000 }).then((res: any) =>
|
|
||||||
set({ list: res.mediaList, listFilter: res.mediaList })
|
|
||||||
)
|
|
||||||
: state.list;
|
|
||||||
},
|
|
||||||
setList: (newState: any) =>
|
setList: (newState: any) =>
|
||||||
set(() => ({ list: newState, listFilter: newState })),
|
set(() => ({ list: newState, listFilter: newState })),
|
||||||
filterList: (keyword: string) =>
|
useFilter: (keyword: string) =>
|
||||||
set((state: any) => ({
|
set((state: any) => ({
|
||||||
listFilter: !keyword
|
listFilter: !keyword
|
||||||
? state.list
|
? state.list
|
||||||
|
|
|
@ -11,9 +11,9 @@ interface IProps {
|
||||||
|
|
||||||
const BasicForm = (props: IProps) => {
|
const BasicForm = (props: IProps) => {
|
||||||
const [preview, setPreivew] = useState({
|
const [preview, setPreivew] = useState({
|
||||||
coverUrl: "",
|
course_cover_url: "",
|
||||||
title: "",
|
course_title: "",
|
||||||
summary: "",
|
course_summary: "",
|
||||||
});
|
});
|
||||||
const [form] = Form.useForm();
|
const [form] = Form.useForm();
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ const BasicForm = (props: IProps) => {
|
||||||
if (code === 10000) {
|
if (code === 10000) {
|
||||||
message.success(`${info.file.name} 文件上传成功`);
|
message.success(`${info.file.name} 文件上传成功`);
|
||||||
const { MediaUrl } = data;
|
const { MediaUrl } = data;
|
||||||
setPreivew((p) => ({ ...p, coverUrl: MediaUrl }));
|
setPreivew((p) => ({ ...p, course_cover_url: MediaUrl }));
|
||||||
}
|
}
|
||||||
} else if (status === "error") {
|
} else if (status === "error") {
|
||||||
message.error(`${info.file.name} 文件上传失败`);
|
message.error(`${info.file.name} 文件上传失败`);
|
||||||
|
@ -52,7 +52,7 @@ const BasicForm = (props: IProps) => {
|
||||||
<div
|
<div
|
||||||
className="preview-course"
|
className="preview-course"
|
||||||
style={{
|
style={{
|
||||||
backgroundImage: !preview.coverUrl
|
backgroundImage: !preview.course_cover_url
|
||||||
? `linear-gradient(
|
? `linear-gradient(
|
||||||
to right,
|
to right,
|
||||||
#e95659,
|
#e95659,
|
||||||
|
@ -61,13 +61,15 @@ const BasicForm = (props: IProps) => {
|
||||||
#976bc4,
|
#976bc4,
|
||||||
#5678ce
|
#5678ce
|
||||||
)`
|
)`
|
||||||
: `url(${preview.coverUrl})`,
|
: `url(${preview.course_cover_url})`,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<div className="mask">
|
<div className="mask">
|
||||||
<p className="title">{!preview.title ? "标题" : preview.title}</p>
|
<p className="title">
|
||||||
|
{!preview.course_title ? "标题" : preview.course_title}
|
||||||
|
</p>
|
||||||
<p className="summary">
|
<p className="summary">
|
||||||
{!preview.summary ? "摘要" : preview.summary}{" "}
|
{!preview.course_summary ? "摘要" : preview.course_summary}{" "}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -85,11 +87,11 @@ const BasicForm = (props: IProps) => {
|
||||||
</Col>
|
</Col>
|
||||||
<Col span={12}>
|
<Col span={12}>
|
||||||
<Form form={form} onValuesChange={onValuesChange}>
|
<Form form={form} onValuesChange={onValuesChange}>
|
||||||
<Form.Item name="title" rules={[{ required: true }]}>
|
<Form.Item name="course_title" rules={[{ required: true }]}>
|
||||||
<Input size="large" type="text" placeholder="标题" />
|
<Input size="large" type="text" placeholder="标题" />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
<Form.Item
|
<Form.Item
|
||||||
name="summary"
|
name="course_summary"
|
||||||
rules={[{ required: true }]}
|
rules={[{ required: true }]}
|
||||||
style={{ marginBottom: 0 }}
|
style={{ marginBottom: 0 }}
|
||||||
>
|
>
|
||||||
|
|
|
@ -21,9 +21,9 @@ interface IProps {
|
||||||
}
|
}
|
||||||
|
|
||||||
interface IChapter {
|
interface IChapter {
|
||||||
level: string;
|
chapter_level: string;
|
||||||
title: string;
|
chapter_title: string;
|
||||||
fileId?: string;
|
chapter_file_id?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
const Chatpter = (props: IProps) => {
|
const Chatpter = (props: IProps) => {
|
||||||
|
@ -32,10 +32,15 @@ const Chatpter = (props: IProps) => {
|
||||||
|
|
||||||
const onTocChange = () => {
|
const onTocChange = () => {
|
||||||
const { toc } = form.getFieldsValue();
|
const { toc } = form.getFieldsValue();
|
||||||
const process = toc.split("\n").map((row: string) => {
|
const process = toc
|
||||||
const [level, title, fileId] = row.split("|");
|
.split("\n")
|
||||||
return !fileId ? { level, title } : { level, title, fileId };
|
.filter((i: string) => i.replace(/\s/, "").length > 0)
|
||||||
});
|
.map((row: string, index: number) => {
|
||||||
|
const [chapter_level, chapter_title, chapter_file_id] = row.split("|");
|
||||||
|
return !chapter_file_id
|
||||||
|
? { order: index, chapter_level, chapter_title }
|
||||||
|
: { order: index, chapter_level, chapter_title, chapter_file_id };
|
||||||
|
});
|
||||||
setChapterList(process);
|
setChapterList(process);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -50,7 +55,7 @@ const Chatpter = (props: IProps) => {
|
||||||
<Form form={form} onChange={onTocChange}>
|
<Form form={form} onChange={onTocChange}>
|
||||||
<Form.Item name="toc">
|
<Form.Item name="toc">
|
||||||
<Input.TextArea
|
<Input.TextArea
|
||||||
placeholder="级别|标题|FileId"
|
placeholder="级别 | 标题 | FileId"
|
||||||
style={{ minHeight: 600, lineHeight: 2, fontSize: 16 }}
|
style={{ minHeight: 600, lineHeight: 2, fontSize: 16 }}
|
||||||
></Input.TextArea>
|
></Input.TextArea>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
@ -58,17 +63,17 @@ const Chatpter = (props: IProps) => {
|
||||||
</Col>
|
</Col>
|
||||||
<Col span={12}>
|
<Col span={12}>
|
||||||
<ul className="chapter-list">
|
<ul className="chapter-list">
|
||||||
{chapterList.map((chapter, index) => (
|
{chapterList.map((c, index) => (
|
||||||
<li
|
<li
|
||||||
key={index}
|
key={index}
|
||||||
className={+chapter.level === 1 ? "l1" : ""}
|
className={+c.chapter_level === 1 ? "l1" : ""}
|
||||||
style={{ paddingLeft: +chapter.level === 1 ? 0 : 20 }}
|
style={{ paddingLeft: +c.chapter_level === 1 ? 0 : 20 }}
|
||||||
>
|
>
|
||||||
<Text style={{ fontSize: +chapter.level === 1 ? 18 : 16 }}>
|
<Text style={{ fontSize: +c.chapter_level === 1 ? 18 : 16 }}>
|
||||||
{chapter.title}
|
{c.chapter_title}
|
||||||
</Text>
|
</Text>
|
||||||
{chapter.fileId && (
|
{c.chapter_file_id && (
|
||||||
<Text type="secondary">{chapter.fileId}</Text>
|
<Text type="secondary">{c.chapter_file_id}</Text>
|
||||||
)}
|
)}
|
||||||
</li>
|
</li>
|
||||||
))}
|
))}
|
||||||
|
|
|
@ -86,11 +86,10 @@ const Guide = (props: IProps) => {
|
||||||
vditorRef.current = new Vditor("vditor", {
|
vditorRef.current = new Vditor("vditor", {
|
||||||
height: 600,
|
height: 600,
|
||||||
toolbar: [...toolbar, "|", submitTool],
|
toolbar: [...toolbar, "|", submitTool],
|
||||||
hint: {
|
hint: { delay: 200, emoji },
|
||||||
delay: 200,
|
counter: { enable: true },
|
||||||
emoji,
|
|
||||||
},
|
|
||||||
preview: { actions: ["desktop", "mobile"] },
|
preview: { actions: ["desktop", "mobile"] },
|
||||||
|
after: () => console.log("[info] vditor init success..."),
|
||||||
upload: {
|
upload: {
|
||||||
accept: "image/*",
|
accept: "image/*",
|
||||||
url: "/api/vod/oss/image/upload",
|
url: "/api/vod/oss/image/upload",
|
||||||
|
@ -107,23 +106,9 @@ const Guide = (props: IProps) => {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
counter: {
|
|
||||||
enable: true,
|
|
||||||
},
|
|
||||||
after: () => {
|
|
||||||
console.log("[info] vditor init success...");
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
// useEffect(() => {
|
|
||||||
// if (props.onChange)
|
|
||||||
// props.onChange({
|
|
||||||
// value: vditorRef.current?.getValue(),
|
|
||||||
// html: vditorRef.current?.getHTML(),
|
|
||||||
// });
|
|
||||||
// }, [vditorRef.current?.getValue()]);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div style={{ ...props.styles }}>
|
<div style={{ ...props.styles }}>
|
||||||
<div id="vditor" className="vditor" />
|
<div id="vditor" className="vditor" />
|
||||||
|
|
|
@ -7,8 +7,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.drawer-media-item {
|
.drawer-media-item {
|
||||||
border: 1px solid rgba(5, 5, 5, 0.06);
|
border-bottom: 1px solid rgba(5, 5, 5, 0.06);
|
||||||
border-radius: 6px;
|
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
margin-bottom: 8px;
|
margin-bottom: 8px;
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,14 +5,32 @@ import BasicForm from "./BasicForm";
|
||||||
import Chatpter from "./Chatpter";
|
import Chatpter from "./Chatpter";
|
||||||
import "./index.less";
|
import "./index.less";
|
||||||
import { useMediaStore } from "../../../store/media";
|
import { useMediaStore } from "../../../store/media";
|
||||||
|
import { createCourse } from "../../../api";
|
||||||
|
import { ICourseBasic } from "../../../api/dto";
|
||||||
const { Text } = Typography;
|
const { Text } = Typography;
|
||||||
|
|
||||||
|
interface ICourse {
|
||||||
|
basicInfo: ICourseBasic;
|
||||||
|
course_chapterList: [];
|
||||||
|
course_guide: {
|
||||||
|
guide_value: string;
|
||||||
|
guide_html: string;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
const CourseCreate = () => {
|
const CourseCreate = () => {
|
||||||
const [current, setCurrent] = useState(0);
|
const [current, setCurrent] = useState(0);
|
||||||
const [course, setCourse] = useState({
|
const [course, setCourse] = useState<ICourse>({
|
||||||
basicInfo: {},
|
basicInfo: {
|
||||||
chapters: [],
|
course_cover_url: "",
|
||||||
guide: {},
|
course_title: "",
|
||||||
|
course_summary: "",
|
||||||
|
},
|
||||||
|
course_chapterList: [],
|
||||||
|
course_guide: {
|
||||||
|
guide_value: "",
|
||||||
|
guide_html: "",
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const onBasicFormChange = (form: any) =>
|
const onBasicFormChange = (form: any) =>
|
||||||
|
@ -30,32 +48,31 @@ const CourseCreate = () => {
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
const [createBtnValid, setCreateBtnValid] = useState(true);
|
|
||||||
|
|
||||||
const items = steps.map((item) => ({ key: item.title, title: item.title }));
|
const items = steps.map((item) => ({ key: item.title, title: item.title }));
|
||||||
|
|
||||||
const onChapterChange = (chapters: any) =>
|
const onChapterChange = (chapters: any) =>
|
||||||
setCourse((p) => ({ ...p, chapters }));
|
setCourse((p) => ({ ...p, course_chapterList: chapters }));
|
||||||
|
|
||||||
const onGuideChange = ({ value, html }: { value: string; html: string }) => {
|
const onGuideChange = ({ value, html }: { value: string; html: string }) => {
|
||||||
setCourse((p) => ({ ...p, guide: { value, html } }));
|
setCourse((p) => ({
|
||||||
|
...p,
|
||||||
|
course_guide: { guide_value: value, guide_html: html },
|
||||||
|
}));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建课程
|
||||||
|
*/
|
||||||
const onClickCreate = () => {
|
const onClickCreate = () => {
|
||||||
console.log(course);
|
const { basicInfo, ...rest } = course;
|
||||||
message.info("撒打算");
|
createCourse({ ...basicInfo, ...rest }).then((res) => {
|
||||||
|
console.log(res);
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
const basicValid = !Object.values(course.basicInfo).includes("");
|
|
||||||
const chaptersValid = course.chapters.length !== 0;
|
|
||||||
const guideValid = !Object.values(course.guide).includes("");
|
|
||||||
setCreateBtnValid(basicValid && chaptersValid && guideValid);
|
|
||||||
}, [course]);
|
|
||||||
|
|
||||||
const mediaList = useMediaStore((s: any) => s.listFilter);
|
const mediaList = useMediaStore((s: any) => s.listFilter);
|
||||||
|
|
||||||
const mediaListFilter = useMediaStore((s: any) => s.filterList);
|
const useFilter = useMediaStore((s: any) => s.useFilter);
|
||||||
|
|
||||||
const [open, setOpen] = useState(false);
|
const [open, setOpen] = useState(false);
|
||||||
|
|
||||||
|
@ -68,7 +85,7 @@ const CourseCreate = () => {
|
||||||
};
|
};
|
||||||
|
|
||||||
const onSearchChange = (e: any) => {
|
const onSearchChange = (e: any) => {
|
||||||
mediaListFilter(e.target.value);
|
useFilter(e.target.value);
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -113,11 +130,7 @@ const CourseCreate = () => {
|
||||||
</Button>
|
</Button>
|
||||||
)}
|
)}
|
||||||
{current === steps.length - 1 && (
|
{current === steps.length - 1 && (
|
||||||
<Button
|
<Button type="primary" onClick={onClickCreate}>
|
||||||
type="primary"
|
|
||||||
onClick={onClickCreate}
|
|
||||||
disabled={!createBtnValid}
|
|
||||||
>
|
|
||||||
创建
|
创建
|
||||||
</Button>
|
</Button>
|
||||||
)}
|
)}
|
||||||
|
|
60
apps/server/src/controller/course.controller.ts
Normal file
60
apps/server/src/controller/course.controller.ts
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
import { Body, Context, Controller, Inject, Post } from '@midwayjs/core';
|
||||||
|
import { BizCode } from '../biz/code';
|
||||||
|
import { CourseCreateDTO } from '../dto/course.dto';
|
||||||
|
import { ChapterService } from '../service/chapter.service';
|
||||||
|
import { CourseService } from '../service/course.service';
|
||||||
|
import { GuideService } from '../service/guide.service';
|
||||||
|
|
||||||
|
@Controller('/course')
|
||||||
|
export class CourseController {
|
||||||
|
@Inject()
|
||||||
|
ctx: Context;
|
||||||
|
|
||||||
|
@Inject()
|
||||||
|
courseService: CourseService;
|
||||||
|
|
||||||
|
@Inject()
|
||||||
|
chapterService: ChapterService;
|
||||||
|
|
||||||
|
@Inject()
|
||||||
|
guideService: GuideService;
|
||||||
|
|
||||||
|
@Post('/create')
|
||||||
|
async create(@Body() param: CourseCreateDTO) {
|
||||||
|
try {
|
||||||
|
const { course_chapterList, course_guide, ...rest } = param;
|
||||||
|
const courseId = await this.courseService.create({ ...rest });
|
||||||
|
await this.chapterService.create(
|
||||||
|
course_chapterList.map((i: any) => ({
|
||||||
|
...i,
|
||||||
|
chapter_course_id: courseId,
|
||||||
|
}))
|
||||||
|
);
|
||||||
|
await this.guideService.create({
|
||||||
|
...course_guide,
|
||||||
|
guide_course_id: courseId,
|
||||||
|
});
|
||||||
|
return { code: BizCode.OK };
|
||||||
|
} catch (error) {
|
||||||
|
this.ctx.logger.error(error);
|
||||||
|
return {
|
||||||
|
code: BizCode.ERROR,
|
||||||
|
msg: `[error] course/create error happened`,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Post('/select/all')
|
||||||
|
async selectAll() {
|
||||||
|
const courseList = await this.courseService.selectAll();
|
||||||
|
return { code: BizCode.OK, data: courseList };
|
||||||
|
}
|
||||||
|
|
||||||
|
@Post('/chapter/select')
|
||||||
|
async selectChapterByCourseId(@Body() params) {
|
||||||
|
const { course_id } = params;
|
||||||
|
const chapterList = await this.chapterService.select(course_id);
|
||||||
|
const guide = await this.guideService.select(course_id);
|
||||||
|
return { code: BizCode.OK, data: { chapterList, guide } };
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,15 +1,18 @@
|
||||||
import { Inject, Post, Body, Files, Controller } from '@midwayjs/core';
|
import { Inject, Post, Body, Files, Controller, Context } from '@midwayjs/core';
|
||||||
import { Context } from 'koa';
|
|
||||||
import { BizCode } from '../biz/code';
|
import { BizCode } from '../biz/code';
|
||||||
import * as tencentcloud from 'tencentcloud-sdk-nodejs';
|
|
||||||
import { VodSearchDTO } from '../dto/vod.dto';
|
import { VodSearchDTO } from '../dto/vod.dto';
|
||||||
import { uploadImagePromise } from '../util/vod';
|
import { uploadImagePromise } from '../util/vod';
|
||||||
import { IVodResponse } from '../interface';
|
import { IVodResponse } from '../interface';
|
||||||
|
import { VodService } from '../service/vod.service';
|
||||||
|
|
||||||
@Controller('/vod')
|
@Controller('/vod')
|
||||||
export class VodController {
|
export class VodController {
|
||||||
@Inject()
|
@Inject()
|
||||||
ctx: Context;
|
ctx: Context;
|
||||||
|
|
||||||
|
@Inject()
|
||||||
|
vodService: VodService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 腾讯媒资管理查询
|
* 腾讯媒资管理查询
|
||||||
* API调用demo: https://console.cloud.tencent.com/api/explorer?Product=vod&Version=2018-07-17&Action=SearchMedia
|
* API调用demo: https://console.cloud.tencent.com/api/explorer?Product=vod&Version=2018-07-17&Action=SearchMedia
|
||||||
|
@ -17,33 +20,19 @@ export class VodController {
|
||||||
*/
|
*/
|
||||||
@Post('/media/select')
|
@Post('/media/select')
|
||||||
async getCourseMediaList(@Body() param: VodSearchDTO) {
|
async getCourseMediaList(@Body() param: VodSearchDTO) {
|
||||||
const { offset: Offset = 0, limit: Limit = 5000 } = param;
|
const { offset: Offset = 0, limit: Limit = 5000, fileId } = param;
|
||||||
const VodClient = tencentcloud.vod.v20180717.Client;
|
try {
|
||||||
const clientConfig = {
|
// 单个媒体查询
|
||||||
credential: {
|
if (fileId) {
|
||||||
secretId: process.env.SECRET_ID,
|
const { data } = await this.vodService.selectMediaByFileId(fileId);
|
||||||
secretKey: process.env.SECRET_KEY,
|
if (data) return { code: BizCode.OK, data };
|
||||||
},
|
|
||||||
profile: {
|
|
||||||
httpProfile: {
|
|
||||||
endpoint: 'vod.tencentcloudapi.com',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
const client = new VodClient(clientConfig);
|
|
||||||
const params = {
|
|
||||||
SubAppId: +process.env.SUBAPPID,
|
|
||||||
Categories: ['Video'],
|
|
||||||
Offset,
|
|
||||||
Limit,
|
|
||||||
};
|
|
||||||
return await client.SearchMedia(params).then(
|
|
||||||
data => ({ code: BizCode.OK, data }),
|
|
||||||
err => {
|
|
||||||
this.ctx.logger.error(err);
|
|
||||||
throw new Error(err);
|
|
||||||
}
|
}
|
||||||
);
|
const { data } = await this.vodService.selectMediaList({ Offset, Limit });
|
||||||
|
if (data) return { code: BizCode.OK, data };
|
||||||
|
} catch (err) {
|
||||||
|
this.ctx.logger.error(err);
|
||||||
|
return { code: BizCode.ERROR, msg: '[error] vod create error' };
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
18
apps/server/src/dto/course.dto.ts
Normal file
18
apps/server/src/dto/course.dto.ts
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
import { Rule, RuleType } from '@midwayjs/validate';
|
||||||
|
|
||||||
|
export class CourseCreateDTO {
|
||||||
|
@Rule(RuleType.string().required())
|
||||||
|
course_title: string;
|
||||||
|
|
||||||
|
@Rule(RuleType.string().required())
|
||||||
|
course_cover_url: string;
|
||||||
|
|
||||||
|
@Rule(RuleType.string().required())
|
||||||
|
course_summary: string;
|
||||||
|
|
||||||
|
@Rule(RuleType.required())
|
||||||
|
course_chapterList: [];
|
||||||
|
|
||||||
|
@Rule(RuleType.required())
|
||||||
|
course_guide: { guide_value: string; guide_html: string };
|
||||||
|
}
|
|
@ -7,4 +7,7 @@ export class VodSearchDTO {
|
||||||
|
|
||||||
@Rule(RuleType.number().required())
|
@Rule(RuleType.number().required())
|
||||||
limit: number;
|
limit: number;
|
||||||
|
|
||||||
|
@Rule(RuleType.string())
|
||||||
|
fileId?: string;
|
||||||
}
|
}
|
||||||
|
|
31
apps/server/src/entity/chapter.entity.ts
Normal file
31
apps/server/src/entity/chapter.entity.ts
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
|
||||||
|
|
||||||
|
@Entity('chapter')
|
||||||
|
export class Chapter {
|
||||||
|
@PrimaryGeneratedColumn('uuid')
|
||||||
|
chapter_id?: string;
|
||||||
|
|
||||||
|
@Column({ type: 'text' })
|
||||||
|
chapter_title: string;
|
||||||
|
|
||||||
|
@Column()
|
||||||
|
chapter_level: '1' | '2';
|
||||||
|
|
||||||
|
@Column({ default: '' })
|
||||||
|
chapter_file_id?: string;
|
||||||
|
|
||||||
|
@Column()
|
||||||
|
chapter_course_id: string;
|
||||||
|
|
||||||
|
@Column()
|
||||||
|
order?: number;
|
||||||
|
|
||||||
|
@Column({ default: '' })
|
||||||
|
media_time?: string;
|
||||||
|
|
||||||
|
@Column({ default: '' })
|
||||||
|
media_url?: string;
|
||||||
|
|
||||||
|
@Column({ default: ''})
|
||||||
|
media_cover_url?: string;
|
||||||
|
}
|
22
apps/server/src/entity/course.entity.ts
Normal file
22
apps/server/src/entity/course.entity.ts
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
|
||||||
|
|
||||||
|
@Entity('course')
|
||||||
|
export class Course {
|
||||||
|
@PrimaryGeneratedColumn('uuid')
|
||||||
|
course_id?: string;
|
||||||
|
|
||||||
|
@Column({ unique: true })
|
||||||
|
course_title?: string;
|
||||||
|
|
||||||
|
@Column({ type: 'text' })
|
||||||
|
course_summary?: string;
|
||||||
|
|
||||||
|
@Column({ length: 1000 })
|
||||||
|
course_cover_url?: string;
|
||||||
|
|
||||||
|
@Column({ default: 1 })
|
||||||
|
valid?: boolean;
|
||||||
|
|
||||||
|
@Column({ default: Date.now() })
|
||||||
|
course_createtime?: string;
|
||||||
|
}
|
16
apps/server/src/entity/guide.entity.ts
Normal file
16
apps/server/src/entity/guide.entity.ts
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
|
||||||
|
|
||||||
|
@Entity('guide')
|
||||||
|
export class Guide {
|
||||||
|
@PrimaryGeneratedColumn('uuid')
|
||||||
|
guide_id?: string;
|
||||||
|
|
||||||
|
@Column({ type: 'text' })
|
||||||
|
guide_value: string;
|
||||||
|
|
||||||
|
@Column({ type: 'text' })
|
||||||
|
guide_html: string;
|
||||||
|
|
||||||
|
@Column()
|
||||||
|
guide_course_id: string;
|
||||||
|
}
|
39
apps/server/src/service/chapter.service.ts
Normal file
39
apps/server/src/service/chapter.service.ts
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
import { Context, Inject, Provide } from '@midwayjs/core';
|
||||||
|
import { InjectEntityModel } from '@midwayjs/typeorm';
|
||||||
|
import { Repository } from 'typeorm';
|
||||||
|
import { Chapter } from '../entity/chapter.entity';
|
||||||
|
import { VodService } from './vod.service';
|
||||||
|
|
||||||
|
@Provide()
|
||||||
|
export class ChapterService {
|
||||||
|
@Inject()
|
||||||
|
ctx: Context;
|
||||||
|
|
||||||
|
@Inject()
|
||||||
|
vodService: VodService;
|
||||||
|
|
||||||
|
@InjectEntityModel(Chapter)
|
||||||
|
chapterModel: Repository<Chapter>;
|
||||||
|
|
||||||
|
async create(chapterList: Chapter[]) {
|
||||||
|
for (const chapter of chapterList) {
|
||||||
|
const { chapter_file_id: fileID } = chapter;
|
||||||
|
if (fileID) {
|
||||||
|
const { data } = await this.vodService.selectMediaByFileId(fileID);
|
||||||
|
chapter.media_cover_url = data.MediaInfoSet[0].BasicInfo.CoverUrl;
|
||||||
|
chapter.media_time = '' + data.MediaInfoSet[0].MetaData.Duration;
|
||||||
|
chapter.media_url =
|
||||||
|
data.MediaInfoSet[0].AdaptiveDynamicStreamingInfo.AdaptiveDynamicStreamingSet[0].Url;
|
||||||
|
}
|
||||||
|
await this.chapterModel.save(chapter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async select(course_id: string) {
|
||||||
|
const result = await this.chapterModel.find({
|
||||||
|
where: { chapter_course_id: course_id },
|
||||||
|
order: { order: 'asc' },
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
28
apps/server/src/service/course.service.ts
Normal file
28
apps/server/src/service/course.service.ts
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
import { Context, Inject, Provide } from '@midwayjs/core';
|
||||||
|
import { InjectEntityModel } from '@midwayjs/typeorm';
|
||||||
|
import { Repository } from 'typeorm';
|
||||||
|
import { Course } from '../entity/course.entity';
|
||||||
|
|
||||||
|
export interface ICourseCreate {
|
||||||
|
course_title: string;
|
||||||
|
course_summary: string;
|
||||||
|
course_cover_url: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Provide()
|
||||||
|
export class CourseService {
|
||||||
|
@Inject()
|
||||||
|
ctx: Context;
|
||||||
|
|
||||||
|
@InjectEntityModel(Course)
|
||||||
|
courseModel: Repository<Course>;
|
||||||
|
|
||||||
|
async create(course: Course) {
|
||||||
|
const courseCreateRes = await this.courseModel.save(course);
|
||||||
|
return courseCreateRes.course_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
async selectAll() {
|
||||||
|
return await this.courseModel.find({ where: { valid: true } });
|
||||||
|
}
|
||||||
|
}
|
24
apps/server/src/service/guide.service.ts
Normal file
24
apps/server/src/service/guide.service.ts
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
import { Context, Inject, Provide } from '@midwayjs/core';
|
||||||
|
import { InjectEntityModel } from '@midwayjs/typeorm';
|
||||||
|
import { Repository } from 'typeorm';
|
||||||
|
import { Guide } from '../entity/guide.entity';
|
||||||
|
|
||||||
|
@Provide()
|
||||||
|
export class GuideService {
|
||||||
|
@Inject()
|
||||||
|
ctx: Context;
|
||||||
|
|
||||||
|
@InjectEntityModel(Guide)
|
||||||
|
guideModel: Repository<Guide>;
|
||||||
|
|
||||||
|
async create(guide: Guide) {
|
||||||
|
const guideCreateRes = await this.guideModel.save(guide);
|
||||||
|
return guideCreateRes.guide_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
async select(course_id: string) {
|
||||||
|
return await this.guideModel.findOne({
|
||||||
|
where: { guide_course_id: course_id },
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
54
apps/server/src/service/vod.service.ts
Normal file
54
apps/server/src/service/vod.service.ts
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
import { Provide } from '@midwayjs/core';
|
||||||
|
import * as tencentcloud from 'tencentcloud-sdk-nodejs';
|
||||||
|
|
||||||
|
const VodClient = tencentcloud.vod.v20180717.Client;
|
||||||
|
const clientConfig = {
|
||||||
|
credential: {
|
||||||
|
secretId: process.env.SECRET_ID,
|
||||||
|
secretKey: process.env.SECRET_KEY,
|
||||||
|
},
|
||||||
|
profile: {
|
||||||
|
httpProfile: {
|
||||||
|
endpoint: 'vod.tencentcloudapi.com',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
@Provide()
|
||||||
|
export class VodService {
|
||||||
|
/**
|
||||||
|
* 根据FileId查询单个媒体资源
|
||||||
|
*/
|
||||||
|
async selectMediaByFileId(fileId: string) {
|
||||||
|
const client = new VodClient(clientConfig);
|
||||||
|
const params = {
|
||||||
|
SubAppId: +process.env.SUBAPPID,
|
||||||
|
FileIds: [fileId],
|
||||||
|
};
|
||||||
|
return await client.SearchMedia(params).then(
|
||||||
|
data => ({ data }),
|
||||||
|
err => {
|
||||||
|
throw new Error(err);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询全部媒体列表
|
||||||
|
*/
|
||||||
|
async selectMediaList({ Offset = 0, Limit = 5000 }) {
|
||||||
|
const client = new VodClient(clientConfig);
|
||||||
|
const params = {
|
||||||
|
SubAppId: +process.env.SUBAPPID,
|
||||||
|
Categories: ['Video'],
|
||||||
|
Offset,
|
||||||
|
Limit,
|
||||||
|
};
|
||||||
|
return await client.SearchMedia(params).then(
|
||||||
|
data => ({ data }),
|
||||||
|
err => {
|
||||||
|
throw new Error(err);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -16,7 +16,8 @@
|
||||||
"@arco-design/web-react": "2.45.0",
|
"@arco-design/web-react": "2.45.0",
|
||||||
"@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"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/react": "^18.0.27",
|
"@types/react": "^18.0.27",
|
||||||
|
|
6
apps/web/src/api/index.ts
Normal file
6
apps/web/src/api/index.ts
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
import R from "./request";
|
||||||
|
|
||||||
|
export const getCourseList = () => R.post("/api/course/select/all");
|
||||||
|
|
||||||
|
export const getChapterGuideById = (course_id: string) =>
|
||||||
|
R.post("/api/course/chapter/select", { course_id });
|
32
apps/web/src/api/request.ts
Normal file
32
apps/web/src/api/request.ts
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
// import { message } from "antd";
|
||||||
|
import axios from "axios";
|
||||||
|
|
||||||
|
const config = {
|
||||||
|
baseURL: "",
|
||||||
|
timeout: 1000 * 15,
|
||||||
|
headers: {},
|
||||||
|
};
|
||||||
|
|
||||||
|
const instance = axios.create(config);
|
||||||
|
|
||||||
|
instance.interceptors.request.use(
|
||||||
|
(config) => {
|
||||||
|
console.log(config);
|
||||||
|
return config;
|
||||||
|
},
|
||||||
|
(error) => {
|
||||||
|
return Promise.reject(error);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
// Add a response interceptor
|
||||||
|
instance.interceptors.response.use(
|
||||||
|
(response) => {
|
||||||
|
return response?.data;
|
||||||
|
},
|
||||||
|
(error) => {
|
||||||
|
return Promise.reject(error);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
export default instance;
|
|
@ -1,22 +1,17 @@
|
||||||
import "./index.less";
|
import "./index.less";
|
||||||
import {
|
import { Space, Tooltip, Dropdown, Button, Menu } from "@arco-design/web-react";
|
||||||
Select,
|
|
||||||
Message,
|
|
||||||
Space,
|
|
||||||
Tooltip,
|
|
||||||
Dropdown,
|
|
||||||
Button,
|
|
||||||
Menu,
|
|
||||||
} from "@arco-design/web-react";
|
|
||||||
import BsCard from "../../components/Card";
|
import BsCard from "../../components/Card";
|
||||||
import Timeline, { IOnScrollParam } from "./components/Timeline";
|
import Timeline, { IOnScrollParam } from "./components/Timeline";
|
||||||
import Tab20Regular from "@ricons/fluent/Tab20Regular";
|
import Tab20Regular from "@ricons/fluent/Tab20Regular";
|
||||||
import Table20Regular from "@ricons/fluent/Table20Regular";
|
import Table20Regular from "@ricons/fluent/Table20Regular";
|
||||||
import Filter20Regular from "@ricons/fluent/Filter20Regular";
|
import Filter20Regular from "@ricons/fluent/Filter20Regular";
|
||||||
import { useEffect, useRef, useState } from "react";
|
import { useEffect, useRef, useState } from "react";
|
||||||
import { courseTimeListDefault } from "./mock";
|
// import { courseTimeListDefault } from "./mock";
|
||||||
import { Icon } from "@ricons/utils";
|
import { Icon } from "@ricons/utils";
|
||||||
import { useNavigate } from "react-router-dom";
|
import { useNavigate } from "react-router-dom";
|
||||||
|
import { useMount } from "../../hook";
|
||||||
|
import { getCourseList } from "../../api";
|
||||||
|
import { processTime } from "./util";
|
||||||
|
|
||||||
export default function Index() {
|
export default function Index() {
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
|
@ -50,7 +45,13 @@ export default function Index() {
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const [courseTimeList, setCourseTimeList] = useState(courseTimeListDefault);
|
useMount(() => {
|
||||||
|
getCourseList().then((res) => {
|
||||||
|
setCourseTimeList(processTime(res.data));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
const [courseTimeList, setCourseTimeList] = useState<any>([]);
|
||||||
|
|
||||||
const onClickActionItem = (action: any) => {
|
const onClickActionItem = (action: any) => {
|
||||||
setActions((p) => p.map((a) => ({ ...a, active: a.key === action.key })));
|
setActions((p) => p.map((a) => ({ ...a, active: a.key === action.key })));
|
||||||
|
@ -79,7 +80,7 @@ export default function Index() {
|
||||||
};
|
};
|
||||||
|
|
||||||
const onClickCourseItem = (d: any) => {
|
const onClickCourseItem = (d: any) => {
|
||||||
navigate(`/course/detail/${d.id}`);
|
navigate(`/course/detail/${d.course_id}`);
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -121,7 +122,7 @@ export default function Index() {
|
||||||
<div className="thumbnail-timeline">
|
<div className="thumbnail-timeline">
|
||||||
<div className="thumbnail-container">
|
<div className="thumbnail-container">
|
||||||
<article ref={thumbnailRef} onScroll={onThumbnailScroll}>
|
<article ref={thumbnailRef} onScroll={onThumbnailScroll}>
|
||||||
{courseTimeList.map((item, index) => (
|
{courseTimeList.map((item: any, index: number) => (
|
||||||
<section key={index}>
|
<section key={index}>
|
||||||
<div className="time">
|
<div className="time">
|
||||||
{item.year}年{item.month}月
|
{item.year}年{item.month}月
|
||||||
|
@ -133,9 +134,9 @@ export default function Index() {
|
||||||
{item.data.map((d: any) => (
|
{item.data.map((d: any) => (
|
||||||
<BsCard
|
<BsCard
|
||||||
onClick={() => onClickCourseItem(d)}
|
onClick={() => onClickCourseItem(d)}
|
||||||
key={d.id}
|
key={d.course_id}
|
||||||
imgUrl={d.img}
|
imgUrl={d.course_cover_url}
|
||||||
title={d.title}
|
title={d.course_title}
|
||||||
/>
|
/>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,124 +0,0 @@
|
||||||
import dayjs from "dayjs";
|
|
||||||
|
|
||||||
export const courseTimeList = [
|
|
||||||
{
|
|
||||||
id: 1,
|
|
||||||
title: "这个非常OK啊1",
|
|
||||||
time: "1661990400000",
|
|
||||||
img: "https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/a8c8cdb109cb051163646151a4a5083b.png~tplv-uwbnlip3yd-webp.webp",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 2,
|
|
||||||
title: "这个非常OK啊2",
|
|
||||||
time: "1630454400000",
|
|
||||||
img: "https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/a8c8cdb109cb051163646151a4a5083b.png~tplv-uwbnlip3yd-webp.webp",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 3,
|
|
||||||
title: "这个非常OK啊333",
|
|
||||||
time: "1625097600000",
|
|
||||||
img: "https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/a8c8cdb109cb051163646151a4a5083b.png~tplv-uwbnlip3yd-webp.webp",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 4,
|
|
||||||
title: "这个非常OK啊444",
|
|
||||||
time: "1625284000000",
|
|
||||||
img: "https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/a8c8cdb109cb051163646151a4a5083b.png~tplv-uwbnlip3yd-webp.webp",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 5,
|
|
||||||
title: "这个非常OK啊3",
|
|
||||||
time: "1598938400000",
|
|
||||||
img: "https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/a8c8cdb109cb051163646151a4a5083b.png~tplv-uwbnlip3yd-webp.webp",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 6,
|
|
||||||
title: "这个非常OK啊3",
|
|
||||||
time: "1528948400000",
|
|
||||||
img: "https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/a8c8cdb109cb051163646151a4a5083b.png~tplv-uwbnlip3yd-webp.webp",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 7,
|
|
||||||
title: "这个非常OK啊3",
|
|
||||||
time: "1538958400000",
|
|
||||||
img: "https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/a8c8cdb109cb051163646151a4a5083b.png~tplv-uwbnlip3yd-webp.webp",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 8,
|
|
||||||
title: "这个非常OK啊3",
|
|
||||||
time: "1538958400100",
|
|
||||||
img: "https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/a8c8cdb109cb051163646151a4a5083b.png~tplv-uwbnlip3yd-webp.webp",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 9,
|
|
||||||
title: "这个非常OK啊3",
|
|
||||||
time: "1538958400200",
|
|
||||||
img: "https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/a8c8cdb109cb051163646151a4a5083b.png~tplv-uwbnlip3yd-webp.webp",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 10,
|
|
||||||
title: "这个非常OK啊3",
|
|
||||||
time: "1538958400400",
|
|
||||||
img: "https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/a8c8cdb109cb051163646151a4a5083b.png~tplv-uwbnlip3yd-webp.webp",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 11,
|
|
||||||
title: "这个非常OK啊3",
|
|
||||||
time: "1538958400500",
|
|
||||||
img: "https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/a8c8cdb109cb051163646151a4a5083b.png~tplv-uwbnlip3yd-webp.webp",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 12,
|
|
||||||
title: "这个非常OK啊3",
|
|
||||||
time: "1538958400600",
|
|
||||||
img: "https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/a8c8cdb109cb051163646151a4a5083b.png~tplv-uwbnlip3yd-webp.webp",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 13,
|
|
||||||
title: "这个非常OK啊3",
|
|
||||||
time: "1591918400000",
|
|
||||||
img: "https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/a8c8cdb109cb051163646151a4a5083b.png~tplv-uwbnlip3yd-webp.webp",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 15,
|
|
||||||
title: "这个非常OK啊3",
|
|
||||||
time: "1592918400000",
|
|
||||||
img: "https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/a8c8cdb109cb051163646151a4a5083b.png~tplv-uwbnlip3yd-webp.webp",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 16,
|
|
||||||
title: "这个非常OK啊3",
|
|
||||||
time: "1543918400000",
|
|
||||||
img: "https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/a8c8cdb109cb051163646151a4a5083b.png~tplv-uwbnlip3yd-webp.webp",
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
const process = (before: any[]) => {
|
|
||||||
const after: any = {};
|
|
||||||
// 提取月份,塞入数据
|
|
||||||
before.forEach((item) => {
|
|
||||||
const year = dayjs(+item.time).year();
|
|
||||||
const month = dayjs(+item.time).month() + 1;
|
|
||||||
if (!(year in after)) after[year] = { [month]: [] };
|
|
||||||
if (!(month in after[year])) after[year][month] = [];
|
|
||||||
after[year][month].push(item);
|
|
||||||
});
|
|
||||||
// 年月为key,倒叙排列
|
|
||||||
const compare = (key: string) => (a: any, b: any) => b[key] - a[key];
|
|
||||||
const ymArray = Object.keys(after)
|
|
||||||
.reverse()
|
|
||||||
.map((year) => {
|
|
||||||
return Object.keys(after[year]).map((month) => ({
|
|
||||||
year,
|
|
||||||
month,
|
|
||||||
index: +`${year}.${+month >= 10 ? month : "0" + month}`,
|
|
||||||
data: after[year][month],
|
|
||||||
}));
|
|
||||||
})
|
|
||||||
.flat()
|
|
||||||
.sort(compare("index"));
|
|
||||||
|
|
||||||
return ymArray;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const courseTimeListDefault = process(courseTimeList);
|
|
29
apps/web/src/view/Course/util.ts
Normal file
29
apps/web/src/view/Course/util.ts
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
import dayjs from "dayjs";
|
||||||
|
|
||||||
|
export const processTime = (before: any[]) => {
|
||||||
|
const after: any = {};
|
||||||
|
// 提取月份,塞入数据
|
||||||
|
before.forEach((item) => {
|
||||||
|
const year = dayjs(+item.course_createtime).year();
|
||||||
|
const month = dayjs(+item.course_createtime).month() + 1;
|
||||||
|
if (!(year in after)) after[year] = { [month]: [] };
|
||||||
|
if (!(month in after[year])) after[year][month] = [];
|
||||||
|
after[year][month].push(item);
|
||||||
|
});
|
||||||
|
// 年月为key,倒叙排列
|
||||||
|
const compare = (key: string) => (a: any, b: any) => b[key] - a[key];
|
||||||
|
const ymArray = Object.keys(after)
|
||||||
|
.reverse()
|
||||||
|
.map((year) => {
|
||||||
|
return Object.keys(after[year]).map((month) => ({
|
||||||
|
year,
|
||||||
|
month,
|
||||||
|
index: +`${year}.${+month >= 10 ? month : "0" + month}`,
|
||||||
|
data: after[year][month],
|
||||||
|
}));
|
||||||
|
})
|
||||||
|
.flat()
|
||||||
|
.sort(compare("index"));
|
||||||
|
|
||||||
|
return ymArray;
|
||||||
|
};
|
|
@ -1,9 +1,38 @@
|
||||||
import { useLocation } from "react-router-dom";
|
import { useEffect, useRef, useState } from "react";
|
||||||
|
import { useMount, useScript } from "../../../../hook";
|
||||||
|
import hljs from "highlight.js";
|
||||||
|
import "highlight.js/styles/atom-one-dark.css";
|
||||||
|
|
||||||
function Material() {
|
interface IProps {
|
||||||
const location = useLocation();
|
html: string;
|
||||||
|
|
||||||
return <div>{location.pathname}</div>;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export default Material;
|
function Guide(props: IProps) {
|
||||||
|
const [html, setHtml] = useState<string>("");
|
||||||
|
|
||||||
|
const highlightRender = () =>
|
||||||
|
document.querySelectorAll("code").forEach((block) => {
|
||||||
|
hljs.highlightBlock(block);
|
||||||
|
});
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (props.html) {
|
||||||
|
setHtml(props.html);
|
||||||
|
}
|
||||||
|
}, [props.html]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
highlightRender();
|
||||||
|
}, [html]);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div style={{ width: 1120, margin: "0 auto", overflow: "hidden" }}>
|
||||||
|
<article
|
||||||
|
dangerouslySetInnerHTML={{ __html: html }}
|
||||||
|
className="markdown-body"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Guide;
|
||||||
|
|
|
@ -1,54 +0,0 @@
|
||||||
.vjs-button-icon-custom {
|
|
||||||
cursor: pointer;
|
|
||||||
> svg {
|
|
||||||
transition: color 0.25s;
|
|
||||||
color: rgba(37, 41, 47, 0.2);
|
|
||||||
&:hover {
|
|
||||||
color: rgba(37, 41, 47, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.tcp-skin .vjs-control-bar {
|
|
||||||
// transform: translateY(39px) !important;
|
|
||||||
// background: rgb(0, 0, 0, 0.777) !important;
|
|
||||||
background: rgba(37, 41, 47, 0.3) !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 进度条颜色
|
|
||||||
.tcp-skin .vjs-play-progress {
|
|
||||||
}
|
|
||||||
|
|
||||||
.video-js .vjs-progress-control .vjs-progress-holder {
|
|
||||||
margin: 0 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tcp-skin .vjs-progress-control {
|
|
||||||
.vjs-load-progress > div {
|
|
||||||
left: 0 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.video-js .vjs-progress-control .vjs-progress-holder {
|
|
||||||
margin: 0 !important;
|
|
||||||
.video-js .vjs-slider {
|
|
||||||
margin: 0 !important;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 圆角
|
|
||||||
// .vjs-poster,
|
|
||||||
// .video-js {
|
|
||||||
// border-radius: 10px !important;
|
|
||||||
// video {
|
|
||||||
// border-radius: 10px !important;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// .video-js {
|
|
||||||
// // box-shadow: 0 0 100px #c8c8c8 !important;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// .vjs-control-bar {
|
|
||||||
// border-radius: 0 0 10px 10px !important;
|
|
||||||
// }
|
|
|
@ -1,69 +0,0 @@
|
||||||
import { useEffect, useRef, useState } from "react";
|
|
||||||
import { useScript } from "../../../../hook";
|
|
||||||
import "./index.less";
|
|
||||||
|
|
||||||
export interface IVideo {
|
|
||||||
fileID: string;
|
|
||||||
appID: string;
|
|
||||||
psign?: string;
|
|
||||||
className?: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface IProps {
|
|
||||||
video: IVideo | null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* demo页面:https://tcplayer.vcube.tencent.com/
|
|
||||||
*
|
|
||||||
* 1. fill填满变形,cover等比例会裁剪, contain等比例有黑边
|
|
||||||
* 2. TCPlayer('container', video)如果video为空,初始化会失败
|
|
||||||
*/
|
|
||||||
function Player(props: IProps) {
|
|
||||||
const playerRef = useRef<any>();
|
|
||||||
const [libReady, setLibReady] = useState(false);
|
|
||||||
|
|
||||||
useScript(
|
|
||||||
["/player/libs/hls.min.0.13.2m.js", "/player/tcplayer.v4.7.2.min.js"],
|
|
||||||
() => {
|
|
||||||
console.log("[tcplayer] libs ready...");
|
|
||||||
setLibReady(true);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
if (libReady) {
|
|
||||||
const TCPlayer = (window as any).TCPlayer;
|
|
||||||
playerRef.current = TCPlayer("player", {
|
|
||||||
// fileID: "243791579995468466",
|
|
||||||
// appID: "1500018521",
|
|
||||||
...props.video,
|
|
||||||
plugins: {
|
|
||||||
ContinuePlay: {
|
|
||||||
auto: true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
});
|
|
||||||
console.log("[tcplayer] init success...");
|
|
||||||
}
|
|
||||||
}, [libReady]);
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
if (props.video) {
|
|
||||||
console.log("[tcplayer] video change", props.video);
|
|
||||||
playerRef.current.loadVideoByID(props.video);
|
|
||||||
}
|
|
||||||
}, [props.video]);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<video
|
|
||||||
onContextMenu={(e) => e.preventDefault()}
|
|
||||||
id="player"
|
|
||||||
style={{ width: "100%", height: "100%", objectFit: "contain" }}
|
|
||||||
preload="auto"
|
|
||||||
playsInline
|
|
||||||
></video>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
export default Player;
|
|
|
@ -1,7 +1,7 @@
|
||||||
.course-detail {
|
.course-detail {
|
||||||
padding-top: 60px;
|
padding-top: 60px;
|
||||||
|
|
||||||
aside {
|
.table-of-content {
|
||||||
padding: 20px;
|
padding: 20px;
|
||||||
> h2 {
|
> h2 {
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
|
@ -10,12 +10,12 @@
|
||||||
.toc {
|
.toc {
|
||||||
.level-1 {
|
.level-1 {
|
||||||
color: var(--color-text-4);
|
color: var(--color-text-4);
|
||||||
padding: 30px 0 5px 0;
|
padding: 20px 0 5px 0;
|
||||||
}
|
}
|
||||||
.level-2 {
|
.level-2 {
|
||||||
display: grid;
|
display: grid;
|
||||||
padding-left: 10px;
|
padding-left: 10px;
|
||||||
line-height: 30px;
|
line-height: 24px;
|
||||||
grid-template-columns: 9fr 1fr;
|
grid-template-columns: 9fr 1fr;
|
||||||
color: var(--color-text-2);
|
color: var(--color-text-2);
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
@ -27,41 +27,9 @@
|
||||||
}
|
}
|
||||||
.time {
|
.time {
|
||||||
color: var(--color-text-4);
|
color: var(--color-text-4);
|
||||||
|
font-size: 13px;
|
||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
width: 100px;
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
article {
|
|
||||||
position: relative;
|
|
||||||
height: 100%;
|
|
||||||
.mask {
|
|
||||||
position: absolute;
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
bottom: 0;
|
|
||||||
top: 0;
|
|
||||||
z-index: 30;
|
|
||||||
background: rgba(255, 255, 255, 1);
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
> main {
|
|
||||||
height: 100%;
|
|
||||||
.player-container {
|
|
||||||
height: 100%;
|
|
||||||
position: relative;
|
|
||||||
overflow: hidden;
|
|
||||||
&.float {
|
|
||||||
position: fixed !important;
|
|
||||||
left: 0;
|
|
||||||
top: 60px;
|
|
||||||
bottom: 0;
|
|
||||||
height: auto !important;
|
|
||||||
right: calc((100% - 1120px) / 2);
|
|
||||||
z-index: 20;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,105 +1,68 @@
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
import "./index.less";
|
import "./index.less";
|
||||||
import { ResizeBox, Space, Result, Button } from "@arco-design/web-react";
|
import { ResizeBox, Space, Result, Button } from "@arco-design/web-react";
|
||||||
import { Icon } from "@ricons/utils";
|
|
||||||
import Guide from "./components/Guide";
|
import Guide from "./components/Guide";
|
||||||
import { useMount } from "../../hook";
|
import { useMount } from "../../hook";
|
||||||
import Player from "./components/DPlayer";
|
import Player from "./components/DPlayer";
|
||||||
|
import { useParams } from "react-router-dom";
|
||||||
|
import { getChapterGuideById } from "../../api";
|
||||||
|
import { ms2Time } from "./util";
|
||||||
|
|
||||||
function CourseDetail() {
|
function CourseDetail() {
|
||||||
const [toc, setToc] = useState([
|
const { id: course_id = "" } = useParams();
|
||||||
{
|
const [toc, setToc] = useState([]);
|
||||||
title: "起步",
|
|
||||||
level: 1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "导读",
|
|
||||||
level: 2,
|
|
||||||
active: true,
|
|
||||||
view: <Guide />,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "第一讲:特殊K线的量化描述",
|
|
||||||
level: 2,
|
|
||||||
time: "00:14:05",
|
|
||||||
active: false,
|
|
||||||
view: (
|
|
||||||
<Player
|
|
||||||
video={{
|
|
||||||
url: "https://1500018521.vod2.myqcloud.com/a28b6648vodtranssh1500018521/8a1352da243791580308966554/adp.10.m3u8",
|
|
||||||
pic: "https://1500018521.vod2.myqcloud.com/a28b6648vodtranssh1500018521/8a1352da243791580308966554/coverBySnapshot_10_0.jpg",
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "学习 html, css, javascript 前的准备",
|
|
||||||
level: 2,
|
|
||||||
time: "3:23",
|
|
||||||
active: false,
|
|
||||||
view: (
|
|
||||||
<Player
|
|
||||||
video={{
|
|
||||||
url: "https://1500018521.vod2.myqcloud.com/a28b6648vodtranssh1500018521/3fb96ced243791579995468466/adp.10.m3u8",
|
|
||||||
pic: "https://1500018521.vod2.myqcloud.com/a28b6648vodtranssh1500018521/3fb96ced243791579995468466/coverBySnapshot_10_0.jpg",
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "Vite + React + TS - Google Chrome 2023-02-15 09-55-08",
|
|
||||||
level: 2,
|
|
||||||
time: "4:13",
|
|
||||||
active: false,
|
|
||||||
view: (
|
|
||||||
<Player
|
|
||||||
video={{
|
|
||||||
url: "https://1500018521.vod2.myqcloud.com/a28b6648vodtranssh1500018521/29226db4243791580097740418/adp.10.m3u8",
|
|
||||||
pic: "https://1500018521.vod2.myqcloud.com/a28b6648vodtranssh1500018521/29226db4243791580097740418/coverBySnapshot/coverBySnapshot_10_0.jpg",
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "使用CSS",
|
|
||||||
level: 1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "使用 css:行内样式",
|
|
||||||
level: 2,
|
|
||||||
time: "5:55",
|
|
||||||
active: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "使用 css:行内样式2",
|
|
||||||
level: 2,
|
|
||||||
time: "6:55",
|
|
||||||
active: false,
|
|
||||||
},
|
|
||||||
]);
|
|
||||||
|
|
||||||
const [view, setView] = useState<any>(null);
|
const [view, setView] = useState<any>(null);
|
||||||
const notFound = (
|
|
||||||
<Result
|
|
||||||
status="403"
|
|
||||||
subTitle="无权访问"
|
|
||||||
extra={<Button type="text">订阅</Button>}
|
|
||||||
></Result>
|
|
||||||
);
|
|
||||||
|
|
||||||
useMount(() => {
|
useMount(() => {
|
||||||
const first = toc.find((t) => t.level === 2) as any;
|
if (!!course_id)
|
||||||
setToc((p: any) =>
|
getChapterGuideById(course_id).then((res) => {
|
||||||
p.map((i: any) => ({ ...i, active: i.title === first.title }))
|
const { data } = res;
|
||||||
);
|
const processToc = data?.chapterList.map((item: any) => {
|
||||||
setView(first?.view);
|
return {
|
||||||
|
title: item.chapter_title,
|
||||||
|
level: +item.chapter_level,
|
||||||
|
time: ms2Time(+item.media_time),
|
||||||
|
active: false,
|
||||||
|
view: (
|
||||||
|
<Player
|
||||||
|
video={{ url: item.media_url, pic: item.media_cover_url }}
|
||||||
|
/>
|
||||||
|
),
|
||||||
|
};
|
||||||
|
});
|
||||||
|
const append = [
|
||||||
|
{
|
||||||
|
title: "导读",
|
||||||
|
level: 1,
|
||||||
|
time: "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "介绍 / 下载",
|
||||||
|
level: 2,
|
||||||
|
time: "",
|
||||||
|
active: true,
|
||||||
|
view: <Guide html={data?.guide.guide_html} />,
|
||||||
|
},
|
||||||
|
...processToc,
|
||||||
|
];
|
||||||
|
setToc(append as any);
|
||||||
|
setView(<Guide html={data?.guide.guide_html} />);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
const onclickItem = (i: any) => {
|
const onclickItem = (i: any) => {
|
||||||
setToc((t: any) =>
|
setToc((t: any) =>
|
||||||
t.map((p: any) => ({ ...p, active: i.title === p.title }))
|
t.map((p: any) => ({ ...p, active: i.title === p.title }))
|
||||||
);
|
);
|
||||||
setView(i.view ?? notFound);
|
setView(
|
||||||
|
i.view ?? (
|
||||||
|
<Result
|
||||||
|
status="403"
|
||||||
|
subTitle="无权访问"
|
||||||
|
extra={<Button type="text">订阅</Button>}
|
||||||
|
/>
|
||||||
|
)
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -111,7 +74,7 @@ function CourseDetail() {
|
||||||
min={0.1}
|
min={0.1}
|
||||||
size={0.2}
|
size={0.2}
|
||||||
panes={[
|
panes={[
|
||||||
<aside>
|
<aside className="table-of-content">
|
||||||
<h2>云顶计划:K线</h2>
|
<h2>云顶计划:K线</h2>
|
||||||
<div>
|
<div>
|
||||||
<Space style={{ color: "var(--color-text-3)" }}>
|
<Space style={{ color: "var(--color-text-3)" }}>
|
||||||
|
@ -119,7 +82,7 @@ function CourseDetail() {
|
||||||
</Space>
|
</Space>
|
||||||
</div>
|
</div>
|
||||||
<div className="toc">
|
<div className="toc">
|
||||||
{toc.map((i) => {
|
{toc.map((i: any) => {
|
||||||
if (i.level === 1) {
|
if (i.level === 1) {
|
||||||
return (
|
return (
|
||||||
<div className="level-1" key={i.title}>
|
<div className="level-1" key={i.title}>
|
||||||
|
@ -141,9 +104,7 @@ function CourseDetail() {
|
||||||
})}
|
})}
|
||||||
</div>
|
</div>
|
||||||
</aside>,
|
</aside>,
|
||||||
<article>
|
view,
|
||||||
<main>{view}</main>
|
|
||||||
</article>,
|
|
||||||
]}
|
]}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
6
apps/web/src/view/CourseDetail/util.ts
Normal file
6
apps/web/src/view/CourseDetail/util.ts
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
export const ms2Time = (time: number) => {
|
||||||
|
const mind = time % (60 * 60);
|
||||||
|
const minutes = Math.floor(mind / 60);
|
||||||
|
const seconds = Math.ceil(mind % 60);
|
||||||
|
return minutes + "分" + seconds + "秒";
|
||||||
|
};
|
|
@ -5,4 +5,13 @@ import tsconfigPaths from "vite-tsconfig-paths";
|
||||||
// https://vitejs.dev/config/
|
// https://vitejs.dev/config/
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
plugins: [react(), tsconfigPaths()],
|
plugins: [react(), tsconfigPaths()],
|
||||||
|
server: {
|
||||||
|
proxy: {
|
||||||
|
"/api": {
|
||||||
|
rewrite: (path) => path.replace(/^\/api/, ""),
|
||||||
|
target: "http://127.0.0.1:7001/api/v1",
|
||||||
|
changeOrigin: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
761
pnpm-lock.yaml
761
pnpm-lock.yaml
|
@ -202,6 +202,7 @@ importers:
|
||||||
'@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
|
||||||
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
|
||||||
|
@ -214,6 +215,7 @@ importers:
|
||||||
'@ricons/fluent': 0.12.0
|
'@ricons/fluent': 0.12.0
|
||||||
'@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
|
||||||
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
|
||||||
|
@ -282,6 +284,38 @@ packages:
|
||||||
- '@types/react'
|
- '@types/react'
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/@aws-sdk/credential-providers/3.272.0:
|
||||||
|
resolution: {integrity: sha512-ucd6Xq6aBMf+nM4uz5zkjL11mwaE5BV1Q4hkulaGu2v1dRA8n6zhLJk/sb4hOJ7leelqMJMErlbQ2T3MkYvlJQ==}
|
||||||
|
engines: {node: '>=14.0.0'}
|
||||||
|
requiresBuild: true
|
||||||
|
dependencies:
|
||||||
|
'@aws-sdk/client-cognito-identity': registry.npmmirror.com/@aws-sdk/client-cognito-identity/3.272.0
|
||||||
|
'@aws-sdk/client-sso': registry.npmmirror.com/@aws-sdk/client-sso/3.272.0
|
||||||
|
'@aws-sdk/client-sts': registry.npmmirror.com/@aws-sdk/client-sts/3.272.0
|
||||||
|
'@aws-sdk/credential-provider-cognito-identity': registry.npmmirror.com/@aws-sdk/credential-provider-cognito-identity/3.272.0
|
||||||
|
'@aws-sdk/credential-provider-env': registry.npmmirror.com/@aws-sdk/credential-provider-env/3.272.0
|
||||||
|
'@aws-sdk/credential-provider-imds': registry.npmmirror.com/@aws-sdk/credential-provider-imds/3.272.0
|
||||||
|
'@aws-sdk/credential-provider-ini': registry.npmmirror.com/@aws-sdk/credential-provider-ini/3.272.0
|
||||||
|
'@aws-sdk/credential-provider-node': registry.npmmirror.com/@aws-sdk/credential-provider-node/3.272.0
|
||||||
|
'@aws-sdk/credential-provider-process': registry.npmmirror.com/@aws-sdk/credential-provider-process/3.272.0
|
||||||
|
'@aws-sdk/credential-provider-sso': registry.npmmirror.com/@aws-sdk/credential-provider-sso/3.272.0
|
||||||
|
'@aws-sdk/credential-provider-web-identity': registry.npmmirror.com/@aws-sdk/credential-provider-web-identity/3.272.0
|
||||||
|
'@aws-sdk/property-provider': registry.npmmirror.com/@aws-sdk/property-provider/3.272.0
|
||||||
|
'@aws-sdk/shared-ini-file-loader': registry.npmmirror.com/@aws-sdk/shared-ini-file-loader/3.272.0
|
||||||
|
'@aws-sdk/types': registry.npmmirror.com/@aws-sdk/types/3.272.0
|
||||||
|
tslib: 2.5.0
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- aws-crt
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
/@babel/code-frame/7.18.6:
|
||||||
|
resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==}
|
||||||
|
engines: {node: '>=6.9.0'}
|
||||||
|
dependencies:
|
||||||
|
'@babel/highlight': registry.npmmirror.com/@babel/highlight/7.18.6
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
/@babel/compat-data/7.20.14:
|
/@babel/compat-data/7.20.14:
|
||||||
resolution: {integrity: sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==}
|
resolution: {integrity: sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==}
|
||||||
engines: {node: '>=6.9.0'}
|
engines: {node: '>=6.9.0'}
|
||||||
|
@ -1445,6 +1479,204 @@ packages:
|
||||||
resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==}
|
resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/@esbuild/android-arm/0.16.17:
|
||||||
|
resolution: {integrity: sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==}
|
||||||
|
engines: {node: '>=12'}
|
||||||
|
cpu: [arm]
|
||||||
|
os: [android]
|
||||||
|
requiresBuild: true
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
/@esbuild/android-arm64/0.16.17:
|
||||||
|
resolution: {integrity: sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==}
|
||||||
|
engines: {node: '>=12'}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [android]
|
||||||
|
requiresBuild: true
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
/@esbuild/android-x64/0.16.17:
|
||||||
|
resolution: {integrity: sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==}
|
||||||
|
engines: {node: '>=12'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [android]
|
||||||
|
requiresBuild: true
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
/@esbuild/darwin-arm64/0.16.17:
|
||||||
|
resolution: {integrity: sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==}
|
||||||
|
engines: {node: '>=12'}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [darwin]
|
||||||
|
requiresBuild: true
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
/@esbuild/darwin-x64/0.16.17:
|
||||||
|
resolution: {integrity: sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==}
|
||||||
|
engines: {node: '>=12'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [darwin]
|
||||||
|
requiresBuild: true
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
/@esbuild/freebsd-arm64/0.16.17:
|
||||||
|
resolution: {integrity: sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==}
|
||||||
|
engines: {node: '>=12'}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [freebsd]
|
||||||
|
requiresBuild: true
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
/@esbuild/freebsd-x64/0.16.17:
|
||||||
|
resolution: {integrity: sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==}
|
||||||
|
engines: {node: '>=12'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [freebsd]
|
||||||
|
requiresBuild: true
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
/@esbuild/linux-arm/0.16.17:
|
||||||
|
resolution: {integrity: sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==}
|
||||||
|
engines: {node: '>=12'}
|
||||||
|
cpu: [arm]
|
||||||
|
os: [linux]
|
||||||
|
requiresBuild: true
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
/@esbuild/linux-arm64/0.16.17:
|
||||||
|
resolution: {integrity: sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==}
|
||||||
|
engines: {node: '>=12'}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [linux]
|
||||||
|
requiresBuild: true
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
/@esbuild/linux-ia32/0.16.17:
|
||||||
|
resolution: {integrity: sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==}
|
||||||
|
engines: {node: '>=12'}
|
||||||
|
cpu: [ia32]
|
||||||
|
os: [linux]
|
||||||
|
requiresBuild: true
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
/@esbuild/linux-loong64/0.16.17:
|
||||||
|
resolution: {integrity: sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==}
|
||||||
|
engines: {node: '>=12'}
|
||||||
|
cpu: [loong64]
|
||||||
|
os: [linux]
|
||||||
|
requiresBuild: true
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
/@esbuild/linux-mips64el/0.16.17:
|
||||||
|
resolution: {integrity: sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==}
|
||||||
|
engines: {node: '>=12'}
|
||||||
|
cpu: [mips64el]
|
||||||
|
os: [linux]
|
||||||
|
requiresBuild: true
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
/@esbuild/linux-ppc64/0.16.17:
|
||||||
|
resolution: {integrity: sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==}
|
||||||
|
engines: {node: '>=12'}
|
||||||
|
cpu: [ppc64]
|
||||||
|
os: [linux]
|
||||||
|
requiresBuild: true
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
/@esbuild/linux-riscv64/0.16.17:
|
||||||
|
resolution: {integrity: sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==}
|
||||||
|
engines: {node: '>=12'}
|
||||||
|
cpu: [riscv64]
|
||||||
|
os: [linux]
|
||||||
|
requiresBuild: true
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
/@esbuild/linux-s390x/0.16.17:
|
||||||
|
resolution: {integrity: sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==}
|
||||||
|
engines: {node: '>=12'}
|
||||||
|
cpu: [s390x]
|
||||||
|
os: [linux]
|
||||||
|
requiresBuild: true
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
/@esbuild/linux-x64/0.16.17:
|
||||||
|
resolution: {integrity: sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==}
|
||||||
|
engines: {node: '>=12'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [linux]
|
||||||
|
requiresBuild: true
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
/@esbuild/netbsd-x64/0.16.17:
|
||||||
|
resolution: {integrity: sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==}
|
||||||
|
engines: {node: '>=12'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [netbsd]
|
||||||
|
requiresBuild: true
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
/@esbuild/openbsd-x64/0.16.17:
|
||||||
|
resolution: {integrity: sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==}
|
||||||
|
engines: {node: '>=12'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [openbsd]
|
||||||
|
requiresBuild: true
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
/@esbuild/sunos-x64/0.16.17:
|
||||||
|
resolution: {integrity: sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==}
|
||||||
|
engines: {node: '>=12'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [sunos]
|
||||||
|
requiresBuild: true
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
/@esbuild/win32-arm64/0.16.17:
|
||||||
|
resolution: {integrity: sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==}
|
||||||
|
engines: {node: '>=12'}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [win32]
|
||||||
|
requiresBuild: true
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
/@esbuild/win32-ia32/0.16.17:
|
||||||
|
resolution: {integrity: sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==}
|
||||||
|
engines: {node: '>=12'}
|
||||||
|
cpu: [ia32]
|
||||||
|
os: [win32]
|
||||||
|
requiresBuild: true
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
/@esbuild/win32-x64/0.16.17:
|
||||||
|
resolution: {integrity: sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==}
|
||||||
|
engines: {node: '>=12'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [win32]
|
||||||
|
requiresBuild: true
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
/@jridgewell/gen-mapping/0.1.1:
|
/@jridgewell/gen-mapping/0.1.1:
|
||||||
resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==}
|
resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==}
|
||||||
engines: {node: '>=6.0.0'}
|
engines: {node: '>=6.0.0'}
|
||||||
|
@ -1775,34 +2007,42 @@ packages:
|
||||||
- debug
|
- debug
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/errno/0.1.8:
|
||||||
|
resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==}
|
||||||
|
hasBin: true
|
||||||
|
requiresBuild: true
|
||||||
|
dependencies:
|
||||||
|
prr: 1.0.1
|
||||||
|
optional: true
|
||||||
|
|
||||||
/esbuild/0.16.17:
|
/esbuild/0.16.17:
|
||||||
resolution: {integrity: sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==}
|
resolution: {integrity: sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
requiresBuild: true
|
requiresBuild: true
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.16.17
|
'@esbuild/android-arm': 0.16.17
|
||||||
'@esbuild/android-arm64': registry.npmmirror.com/@esbuild/android-arm64/0.16.17
|
'@esbuild/android-arm64': 0.16.17
|
||||||
'@esbuild/android-x64': registry.npmmirror.com/@esbuild/android-x64/0.16.17
|
'@esbuild/android-x64': 0.16.17
|
||||||
'@esbuild/darwin-arm64': registry.npmmirror.com/@esbuild/darwin-arm64/0.16.17
|
'@esbuild/darwin-arm64': 0.16.17
|
||||||
'@esbuild/darwin-x64': registry.npmmirror.com/@esbuild/darwin-x64/0.16.17
|
'@esbuild/darwin-x64': 0.16.17
|
||||||
'@esbuild/freebsd-arm64': registry.npmmirror.com/@esbuild/freebsd-arm64/0.16.17
|
'@esbuild/freebsd-arm64': 0.16.17
|
||||||
'@esbuild/freebsd-x64': registry.npmmirror.com/@esbuild/freebsd-x64/0.16.17
|
'@esbuild/freebsd-x64': 0.16.17
|
||||||
'@esbuild/linux-arm': registry.npmmirror.com/@esbuild/linux-arm/0.16.17
|
'@esbuild/linux-arm': 0.16.17
|
||||||
'@esbuild/linux-arm64': registry.npmmirror.com/@esbuild/linux-arm64/0.16.17
|
'@esbuild/linux-arm64': 0.16.17
|
||||||
'@esbuild/linux-ia32': registry.npmmirror.com/@esbuild/linux-ia32/0.16.17
|
'@esbuild/linux-ia32': 0.16.17
|
||||||
'@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.16.17
|
'@esbuild/linux-loong64': 0.16.17
|
||||||
'@esbuild/linux-mips64el': registry.npmmirror.com/@esbuild/linux-mips64el/0.16.17
|
'@esbuild/linux-mips64el': 0.16.17
|
||||||
'@esbuild/linux-ppc64': registry.npmmirror.com/@esbuild/linux-ppc64/0.16.17
|
'@esbuild/linux-ppc64': 0.16.17
|
||||||
'@esbuild/linux-riscv64': registry.npmmirror.com/@esbuild/linux-riscv64/0.16.17
|
'@esbuild/linux-riscv64': 0.16.17
|
||||||
'@esbuild/linux-s390x': registry.npmmirror.com/@esbuild/linux-s390x/0.16.17
|
'@esbuild/linux-s390x': 0.16.17
|
||||||
'@esbuild/linux-x64': registry.npmmirror.com/@esbuild/linux-x64/0.16.17
|
'@esbuild/linux-x64': 0.16.17
|
||||||
'@esbuild/netbsd-x64': registry.npmmirror.com/@esbuild/netbsd-x64/0.16.17
|
'@esbuild/netbsd-x64': 0.16.17
|
||||||
'@esbuild/openbsd-x64': registry.npmmirror.com/@esbuild/openbsd-x64/0.16.17
|
'@esbuild/openbsd-x64': 0.16.17
|
||||||
'@esbuild/sunos-x64': registry.npmmirror.com/@esbuild/sunos-x64/0.16.17
|
'@esbuild/sunos-x64': 0.16.17
|
||||||
'@esbuild/win32-arm64': registry.npmmirror.com/@esbuild/win32-arm64/0.16.17
|
'@esbuild/win32-arm64': 0.16.17
|
||||||
'@esbuild/win32-ia32': registry.npmmirror.com/@esbuild/win32-ia32/0.16.17
|
'@esbuild/win32-ia32': 0.16.17
|
||||||
'@esbuild/win32-x64': registry.npmmirror.com/@esbuild/win32-x64/0.16.17
|
'@esbuild/win32-x64': 0.16.17
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/esutils/2.0.3:
|
/esutils/2.0.3:
|
||||||
|
@ -1844,6 +2084,14 @@ packages:
|
||||||
mime-types: 2.1.35
|
mime-types: 2.1.35
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/fsevents/2.3.2:
|
||||||
|
resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
|
||||||
|
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
|
||||||
|
os: [darwin]
|
||||||
|
requiresBuild: true
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
/function-bind/1.1.1:
|
/function-bind/1.1.1:
|
||||||
resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
|
resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
|
||||||
|
|
||||||
|
@ -1873,12 +2121,25 @@ packages:
|
||||||
resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
|
resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/graceful-fs/4.2.10:
|
||||||
|
resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==}
|
||||||
|
optional: true
|
||||||
|
|
||||||
/has/1.0.3:
|
/has/1.0.3:
|
||||||
resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
|
resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
|
||||||
engines: {node: '>= 0.4.0'}
|
engines: {node: '>= 0.4.0'}
|
||||||
dependencies:
|
dependencies:
|
||||||
function-bind: 1.1.1
|
function-bind: 1.1.1
|
||||||
|
|
||||||
|
/highlight.js/10.7.3:
|
||||||
|
resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==}
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
/highlight.js/11.7.0:
|
||||||
|
resolution: {integrity: sha512-1rRqesRFhMO/PRF+G86evnyJkCgaZFOI+Z6kdj15TA18funfoqJXvgPCLSf0SWq3SRfg1j3HlDs8o4s3EGq1oQ==}
|
||||||
|
engines: {node: '>=12.0.0'}
|
||||||
|
dev: false
|
||||||
|
|
||||||
/https-proxy-agent/5.0.1:
|
/https-proxy-agent/5.0.1:
|
||||||
resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
|
resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
|
||||||
engines: {node: '>= 6'}
|
engines: {node: '>= 6'}
|
||||||
|
@ -1889,6 +2150,13 @@ packages:
|
||||||
- supports-color
|
- supports-color
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/image-size/0.5.5:
|
||||||
|
resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==}
|
||||||
|
engines: {node: '>=0.10.0'}
|
||||||
|
hasBin: true
|
||||||
|
requiresBuild: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
/is-arrayish/0.3.2:
|
/is-arrayish/0.3.2:
|
||||||
resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==}
|
resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==}
|
||||||
dev: false
|
dev: false
|
||||||
|
@ -1963,13 +2231,13 @@ packages:
|
||||||
parse-node-version: 1.0.1
|
parse-node-version: 1.0.1
|
||||||
tslib: 2.5.0
|
tslib: 2.5.0
|
||||||
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
|
||||||
make-dir: registry.npmmirror.com/make-dir/2.1.0
|
make-dir: 2.1.0
|
||||||
mime: registry.npmmirror.com/mime/1.6.0
|
mime: 1.6.0
|
||||||
needle: registry.npmmirror.com/needle/3.2.0
|
needle: 3.2.0
|
||||||
source-map: registry.npmmirror.com/source-map/0.6.1
|
source-map: 0.6.1
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
|
@ -1995,6 +2263,15 @@ packages:
|
||||||
'@jridgewell/sourcemap-codec': 1.4.14
|
'@jridgewell/sourcemap-codec': 1.4.14
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/make-dir/2.1.0:
|
||||||
|
resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==}
|
||||||
|
engines: {node: '>=6'}
|
||||||
|
requiresBuild: true
|
||||||
|
dependencies:
|
||||||
|
pify: 4.0.1
|
||||||
|
semver: 5.7.1
|
||||||
|
optional: true
|
||||||
|
|
||||||
/mime-db/1.52.0:
|
/mime-db/1.52.0:
|
||||||
resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
|
resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
|
||||||
engines: {node: '>= 0.6'}
|
engines: {node: '>= 0.6'}
|
||||||
|
@ -2006,12 +2283,32 @@ packages:
|
||||||
mime-db: 1.52.0
|
mime-db: 1.52.0
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/mime/1.6.0:
|
||||||
|
resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
|
||||||
|
engines: {node: '>=4'}
|
||||||
|
hasBin: true
|
||||||
|
requiresBuild: 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}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/needle/3.2.0:
|
||||||
|
resolution: {integrity: sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==}
|
||||||
|
engines: {node: '>= 4.4.x'}
|
||||||
|
hasBin: true
|
||||||
|
requiresBuild: true
|
||||||
|
dependencies:
|
||||||
|
debug: registry.npmmirror.com/debug/3.2.7
|
||||||
|
iconv-lite: registry.npmmirror.com/iconv-lite/0.6.3
|
||||||
|
sax: 1.2.4
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- supports-color
|
||||||
|
optional: true
|
||||||
|
|
||||||
/node-fetch/2.6.9:
|
/node-fetch/2.6.9:
|
||||||
resolution: {integrity: sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==}
|
resolution: {integrity: sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==}
|
||||||
engines: {node: 4.x || >=6.0.0}
|
engines: {node: 4.x || >=6.0.0}
|
||||||
|
@ -2237,9 +2534,17 @@ packages:
|
||||||
engines: {node: '>=14.18.0', npm: '>=8.0.0'}
|
engines: {node: '>=14.18.0', npm: '>=8.0.0'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
fsevents: registry.npmmirror.com/fsevents/2.3.2
|
fsevents: 2.3.2
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/saslprep/1.0.3:
|
||||||
|
resolution: {integrity: sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==}
|
||||||
|
engines: {node: '>=6'}
|
||||||
|
requiresBuild: true
|
||||||
|
dependencies:
|
||||||
|
sparse-bitfield: registry.npmmirror.com/sparse-bitfield/3.0.3
|
||||||
|
optional: true
|
||||||
|
|
||||||
/sax/1.2.4:
|
/sax/1.2.4:
|
||||||
resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==}
|
resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==}
|
||||||
optional: true
|
optional: true
|
||||||
|
@ -2280,6 +2585,11 @@ packages:
|
||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=0.10.0'}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/source-map/0.6.1:
|
||||||
|
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
|
||||||
|
engines: {node: '>=0.10.0'}
|
||||||
|
optional: true
|
||||||
|
|
||||||
/strip-json-comments/2.0.1:
|
/strip-json-comments/2.0.1:
|
||||||
resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
|
resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
|
||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=0.10.0'}
|
||||||
|
@ -2435,7 +2745,7 @@ packages:
|
||||||
resolve: 1.22.1
|
resolve: 1.22.1
|
||||||
rollup: 3.17.2
|
rollup: 3.17.2
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
fsevents: registry.npmmirror.com/fsevents/2.3.2
|
fsevents: 2.3.2
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
registry.npmmirror.com/@ampproject/remapping/2.2.0:
|
registry.npmmirror.com/@ampproject/remapping/2.2.0:
|
||||||
|
@ -2882,32 +3192,6 @@ packages:
|
||||||
tslib: 2.5.0
|
tslib: 2.5.0
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
registry.npmmirror.com/@aws-sdk/credential-providers/3.272.0:
|
|
||||||
resolution: {integrity: sha512-ucd6Xq6aBMf+nM4uz5zkjL11mwaE5BV1Q4hkulaGu2v1dRA8n6zhLJk/sb4hOJ7leelqMJMErlbQ2T3MkYvlJQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@aws-sdk/credential-providers/-/credential-providers-3.272.0.tgz}
|
|
||||||
name: '@aws-sdk/credential-providers'
|
|
||||||
version: 3.272.0
|
|
||||||
engines: {node: '>=14.0.0'}
|
|
||||||
requiresBuild: true
|
|
||||||
dependencies:
|
|
||||||
'@aws-sdk/client-cognito-identity': registry.npmmirror.com/@aws-sdk/client-cognito-identity/3.272.0
|
|
||||||
'@aws-sdk/client-sso': registry.npmmirror.com/@aws-sdk/client-sso/3.272.0
|
|
||||||
'@aws-sdk/client-sts': registry.npmmirror.com/@aws-sdk/client-sts/3.272.0
|
|
||||||
'@aws-sdk/credential-provider-cognito-identity': registry.npmmirror.com/@aws-sdk/credential-provider-cognito-identity/3.272.0
|
|
||||||
'@aws-sdk/credential-provider-env': registry.npmmirror.com/@aws-sdk/credential-provider-env/3.272.0
|
|
||||||
'@aws-sdk/credential-provider-imds': registry.npmmirror.com/@aws-sdk/credential-provider-imds/3.272.0
|
|
||||||
'@aws-sdk/credential-provider-ini': registry.npmmirror.com/@aws-sdk/credential-provider-ini/3.272.0
|
|
||||||
'@aws-sdk/credential-provider-node': registry.npmmirror.com/@aws-sdk/credential-provider-node/3.272.0
|
|
||||||
'@aws-sdk/credential-provider-process': registry.npmmirror.com/@aws-sdk/credential-provider-process/3.272.0
|
|
||||||
'@aws-sdk/credential-provider-sso': registry.npmmirror.com/@aws-sdk/credential-provider-sso/3.272.0
|
|
||||||
'@aws-sdk/credential-provider-web-identity': registry.npmmirror.com/@aws-sdk/credential-provider-web-identity/3.272.0
|
|
||||||
'@aws-sdk/property-provider': registry.npmmirror.com/@aws-sdk/property-provider/3.272.0
|
|
||||||
'@aws-sdk/shared-ini-file-loader': registry.npmmirror.com/@aws-sdk/shared-ini-file-loader/3.272.0
|
|
||||||
'@aws-sdk/types': registry.npmmirror.com/@aws-sdk/types/3.272.0
|
|
||||||
tslib: 2.5.0
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- aws-crt
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
registry.npmmirror.com/@aws-sdk/fetch-http-handler/3.272.0:
|
registry.npmmirror.com/@aws-sdk/fetch-http-handler/3.272.0:
|
||||||
resolution: {integrity: sha512-1Qhm9e0RbS1Xf4CZqUbQyUMkDLd7GrsRXWIvm9b86/vgeV8/WnjO3CMue9D51nYgcyQORhYXv6uVjAYCWbUExA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.272.0.tgz}
|
resolution: {integrity: sha512-1Qhm9e0RbS1Xf4CZqUbQyUMkDLd7GrsRXWIvm9b86/vgeV8/WnjO3CMue9D51nYgcyQORhYXv6uVjAYCWbUExA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.272.0.tgz}
|
||||||
name: '@aws-sdk/fetch-http-handler'
|
name: '@aws-sdk/fetch-http-handler'
|
||||||
|
@ -3736,248 +4020,6 @@ packages:
|
||||||
version: 0.7.5
|
version: 0.7.5
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
registry.npmmirror.com/@esbuild/android-arm/0.16.17:
|
|
||||||
resolution: {integrity: sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.16.17.tgz}
|
|
||||||
name: '@esbuild/android-arm'
|
|
||||||
version: 0.16.17
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [arm]
|
|
||||||
os: [android]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
registry.npmmirror.com/@esbuild/android-arm64/0.16.17:
|
|
||||||
resolution: {integrity: sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz}
|
|
||||||
name: '@esbuild/android-arm64'
|
|
||||||
version: 0.16.17
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [arm64]
|
|
||||||
os: [android]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
registry.npmmirror.com/@esbuild/android-x64/0.16.17:
|
|
||||||
resolution: {integrity: sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.16.17.tgz}
|
|
||||||
name: '@esbuild/android-x64'
|
|
||||||
version: 0.16.17
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [x64]
|
|
||||||
os: [android]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
registry.npmmirror.com/@esbuild/darwin-arm64/0.16.17:
|
|
||||||
resolution: {integrity: sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz}
|
|
||||||
name: '@esbuild/darwin-arm64'
|
|
||||||
version: 0.16.17
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [arm64]
|
|
||||||
os: [darwin]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
registry.npmmirror.com/@esbuild/darwin-x64/0.16.17:
|
|
||||||
resolution: {integrity: sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz}
|
|
||||||
name: '@esbuild/darwin-x64'
|
|
||||||
version: 0.16.17
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [x64]
|
|
||||||
os: [darwin]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
registry.npmmirror.com/@esbuild/freebsd-arm64/0.16.17:
|
|
||||||
resolution: {integrity: sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz}
|
|
||||||
name: '@esbuild/freebsd-arm64'
|
|
||||||
version: 0.16.17
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [arm64]
|
|
||||||
os: [freebsd]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
registry.npmmirror.com/@esbuild/freebsd-x64/0.16.17:
|
|
||||||
resolution: {integrity: sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz}
|
|
||||||
name: '@esbuild/freebsd-x64'
|
|
||||||
version: 0.16.17
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [x64]
|
|
||||||
os: [freebsd]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
registry.npmmirror.com/@esbuild/linux-arm/0.16.17:
|
|
||||||
resolution: {integrity: sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz}
|
|
||||||
name: '@esbuild/linux-arm'
|
|
||||||
version: 0.16.17
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [arm]
|
|
||||||
os: [linux]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
registry.npmmirror.com/@esbuild/linux-arm64/0.16.17:
|
|
||||||
resolution: {integrity: sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz}
|
|
||||||
name: '@esbuild/linux-arm64'
|
|
||||||
version: 0.16.17
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [arm64]
|
|
||||||
os: [linux]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
registry.npmmirror.com/@esbuild/linux-ia32/0.16.17:
|
|
||||||
resolution: {integrity: sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz}
|
|
||||||
name: '@esbuild/linux-ia32'
|
|
||||||
version: 0.16.17
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [ia32]
|
|
||||||
os: [linux]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
registry.npmmirror.com/@esbuild/linux-loong64/0.16.17:
|
|
||||||
resolution: {integrity: sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz}
|
|
||||||
name: '@esbuild/linux-loong64'
|
|
||||||
version: 0.16.17
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [loong64]
|
|
||||||
os: [linux]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
registry.npmmirror.com/@esbuild/linux-mips64el/0.16.17:
|
|
||||||
resolution: {integrity: sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz}
|
|
||||||
name: '@esbuild/linux-mips64el'
|
|
||||||
version: 0.16.17
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [mips64el]
|
|
||||||
os: [linux]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
registry.npmmirror.com/@esbuild/linux-ppc64/0.16.17:
|
|
||||||
resolution: {integrity: sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz}
|
|
||||||
name: '@esbuild/linux-ppc64'
|
|
||||||
version: 0.16.17
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [ppc64]
|
|
||||||
os: [linux]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
registry.npmmirror.com/@esbuild/linux-riscv64/0.16.17:
|
|
||||||
resolution: {integrity: sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz}
|
|
||||||
name: '@esbuild/linux-riscv64'
|
|
||||||
version: 0.16.17
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [riscv64]
|
|
||||||
os: [linux]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
registry.npmmirror.com/@esbuild/linux-s390x/0.16.17:
|
|
||||||
resolution: {integrity: sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz}
|
|
||||||
name: '@esbuild/linux-s390x'
|
|
||||||
version: 0.16.17
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [s390x]
|
|
||||||
os: [linux]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
registry.npmmirror.com/@esbuild/linux-x64/0.16.17:
|
|
||||||
resolution: {integrity: sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz}
|
|
||||||
name: '@esbuild/linux-x64'
|
|
||||||
version: 0.16.17
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [x64]
|
|
||||||
os: [linux]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
registry.npmmirror.com/@esbuild/netbsd-x64/0.16.17:
|
|
||||||
resolution: {integrity: sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz}
|
|
||||||
name: '@esbuild/netbsd-x64'
|
|
||||||
version: 0.16.17
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [x64]
|
|
||||||
os: [netbsd]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
registry.npmmirror.com/@esbuild/openbsd-x64/0.16.17:
|
|
||||||
resolution: {integrity: sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz}
|
|
||||||
name: '@esbuild/openbsd-x64'
|
|
||||||
version: 0.16.17
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [x64]
|
|
||||||
os: [openbsd]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
registry.npmmirror.com/@esbuild/sunos-x64/0.16.17:
|
|
||||||
resolution: {integrity: sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz}
|
|
||||||
name: '@esbuild/sunos-x64'
|
|
||||||
version: 0.16.17
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [x64]
|
|
||||||
os: [sunos]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
registry.npmmirror.com/@esbuild/win32-arm64/0.16.17:
|
|
||||||
resolution: {integrity: sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz}
|
|
||||||
name: '@esbuild/win32-arm64'
|
|
||||||
version: 0.16.17
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [arm64]
|
|
||||||
os: [win32]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
registry.npmmirror.com/@esbuild/win32-ia32/0.16.17:
|
|
||||||
resolution: {integrity: sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz}
|
|
||||||
name: '@esbuild/win32-ia32'
|
|
||||||
version: 0.16.17
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [ia32]
|
|
||||||
os: [win32]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
registry.npmmirror.com/@esbuild/win32-x64/0.16.17:
|
|
||||||
resolution: {integrity: sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz}
|
|
||||||
name: '@esbuild/win32-x64'
|
|
||||||
version: 0.16.17
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [x64]
|
|
||||||
os: [win32]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
registry.npmmirror.com/@eslint/eslintrc/0.4.3:
|
registry.npmmirror.com/@eslint/eslintrc/0.4.3:
|
||||||
resolution: {integrity: sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz}
|
resolution: {integrity: sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz}
|
||||||
name: '@eslint/eslintrc'
|
name: '@eslint/eslintrc'
|
||||||
|
@ -6406,7 +6448,7 @@ packages:
|
||||||
normalize-path: registry.npmmirror.com/normalize-path/3.0.0
|
normalize-path: registry.npmmirror.com/normalize-path/3.0.0
|
||||||
readdirp: registry.npmmirror.com/readdirp/3.6.0
|
readdirp: registry.npmmirror.com/readdirp/3.6.0
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
fsevents: registry.npmmirror.com/fsevents/2.3.2
|
fsevents: 2.3.2
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
registry.npmmirror.com/chownr/1.1.4:
|
registry.npmmirror.com/chownr/1.1.4:
|
||||||
|
@ -6464,7 +6506,7 @@ packages:
|
||||||
hasBin: true
|
hasBin: true
|
||||||
dependencies:
|
dependencies:
|
||||||
chalk: registry.npmmirror.com/chalk/4.1.2
|
chalk: registry.npmmirror.com/chalk/4.1.2
|
||||||
highlight.js: registry.npmmirror.com/highlight.js/10.7.3
|
highlight.js: 10.7.3
|
||||||
mz: registry.npmmirror.com/mz/2.7.0
|
mz: registry.npmmirror.com/mz/2.7.0
|
||||||
parse5: registry.npmmirror.com/parse5/5.1.1
|
parse5: registry.npmmirror.com/parse5/5.1.1
|
||||||
parse5-htmlparser2-tree-adapter: registry.npmmirror.com/parse5-htmlparser2-tree-adapter/6.0.1
|
parse5-htmlparser2-tree-adapter: registry.npmmirror.com/parse5-htmlparser2-tree-adapter/6.0.1
|
||||||
|
@ -7455,6 +7497,7 @@ packages:
|
||||||
requiresBuild: true
|
requiresBuild: true
|
||||||
dependencies:
|
dependencies:
|
||||||
prr: 1.0.1
|
prr: 1.0.1
|
||||||
|
dev: true
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
registry.npmmirror.com/error-ex/1.3.2:
|
registry.npmmirror.com/error-ex/1.3.2:
|
||||||
|
@ -7493,28 +7536,28 @@ packages:
|
||||||
hasBin: true
|
hasBin: true
|
||||||
requiresBuild: true
|
requiresBuild: true
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.16.17
|
'@esbuild/android-arm': 0.16.17
|
||||||
'@esbuild/android-arm64': registry.npmmirror.com/@esbuild/android-arm64/0.16.17
|
'@esbuild/android-arm64': 0.16.17
|
||||||
'@esbuild/android-x64': registry.npmmirror.com/@esbuild/android-x64/0.16.17
|
'@esbuild/android-x64': 0.16.17
|
||||||
'@esbuild/darwin-arm64': registry.npmmirror.com/@esbuild/darwin-arm64/0.16.17
|
'@esbuild/darwin-arm64': 0.16.17
|
||||||
'@esbuild/darwin-x64': registry.npmmirror.com/@esbuild/darwin-x64/0.16.17
|
'@esbuild/darwin-x64': 0.16.17
|
||||||
'@esbuild/freebsd-arm64': registry.npmmirror.com/@esbuild/freebsd-arm64/0.16.17
|
'@esbuild/freebsd-arm64': 0.16.17
|
||||||
'@esbuild/freebsd-x64': registry.npmmirror.com/@esbuild/freebsd-x64/0.16.17
|
'@esbuild/freebsd-x64': 0.16.17
|
||||||
'@esbuild/linux-arm': registry.npmmirror.com/@esbuild/linux-arm/0.16.17
|
'@esbuild/linux-arm': 0.16.17
|
||||||
'@esbuild/linux-arm64': registry.npmmirror.com/@esbuild/linux-arm64/0.16.17
|
'@esbuild/linux-arm64': 0.16.17
|
||||||
'@esbuild/linux-ia32': registry.npmmirror.com/@esbuild/linux-ia32/0.16.17
|
'@esbuild/linux-ia32': 0.16.17
|
||||||
'@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.16.17
|
'@esbuild/linux-loong64': 0.16.17
|
||||||
'@esbuild/linux-mips64el': registry.npmmirror.com/@esbuild/linux-mips64el/0.16.17
|
'@esbuild/linux-mips64el': 0.16.17
|
||||||
'@esbuild/linux-ppc64': registry.npmmirror.com/@esbuild/linux-ppc64/0.16.17
|
'@esbuild/linux-ppc64': 0.16.17
|
||||||
'@esbuild/linux-riscv64': registry.npmmirror.com/@esbuild/linux-riscv64/0.16.17
|
'@esbuild/linux-riscv64': 0.16.17
|
||||||
'@esbuild/linux-s390x': registry.npmmirror.com/@esbuild/linux-s390x/0.16.17
|
'@esbuild/linux-s390x': 0.16.17
|
||||||
'@esbuild/linux-x64': registry.npmmirror.com/@esbuild/linux-x64/0.16.17
|
'@esbuild/linux-x64': 0.16.17
|
||||||
'@esbuild/netbsd-x64': registry.npmmirror.com/@esbuild/netbsd-x64/0.16.17
|
'@esbuild/netbsd-x64': 0.16.17
|
||||||
'@esbuild/openbsd-x64': registry.npmmirror.com/@esbuild/openbsd-x64/0.16.17
|
'@esbuild/openbsd-x64': 0.16.17
|
||||||
'@esbuild/sunos-x64': registry.npmmirror.com/@esbuild/sunos-x64/0.16.17
|
'@esbuild/sunos-x64': 0.16.17
|
||||||
'@esbuild/win32-arm64': registry.npmmirror.com/@esbuild/win32-arm64/0.16.17
|
'@esbuild/win32-arm64': 0.16.17
|
||||||
'@esbuild/win32-ia32': registry.npmmirror.com/@esbuild/win32-ia32/0.16.17
|
'@esbuild/win32-ia32': 0.16.17
|
||||||
'@esbuild/win32-x64': registry.npmmirror.com/@esbuild/win32-x64/0.16.17
|
'@esbuild/win32-x64': 0.16.17
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
registry.npmmirror.com/escalade/3.1.1:
|
registry.npmmirror.com/escalade/3.1.1:
|
||||||
|
@ -8118,16 +8161,6 @@ packages:
|
||||||
name: fs.realpath
|
name: fs.realpath
|
||||||
version: 1.0.0
|
version: 1.0.0
|
||||||
|
|
||||||
registry.npmmirror.com/fsevents/2.3.2:
|
|
||||||
resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz}
|
|
||||||
name: fsevents
|
|
||||||
version: 2.3.2
|
|
||||||
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
|
|
||||||
os: [darwin]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
registry.npmmirror.com/function-bind/1.1.1:
|
registry.npmmirror.com/function-bind/1.1.1:
|
||||||
resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz}
|
resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz}
|
||||||
name: function-bind
|
name: function-bind
|
||||||
|
@ -8359,6 +8392,7 @@ packages:
|
||||||
resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz}
|
resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz}
|
||||||
name: graceful-fs
|
name: graceful-fs
|
||||||
version: 4.2.10
|
version: 4.2.10
|
||||||
|
dev: true
|
||||||
|
|
||||||
registry.npmmirror.com/grapheme-splitter/1.0.4:
|
registry.npmmirror.com/grapheme-splitter/1.0.4:
|
||||||
resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz}
|
resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz}
|
||||||
|
@ -8448,12 +8482,6 @@ packages:
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
registry.npmmirror.com/highlight.js/10.7.3:
|
|
||||||
resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/highlight.js/-/highlight.js-10.7.3.tgz}
|
|
||||||
name: highlight.js
|
|
||||||
version: 10.7.3
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
registry.npmmirror.com/hosted-git-info/2.8.9:
|
registry.npmmirror.com/hosted-git-info/2.8.9:
|
||||||
resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz}
|
resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz}
|
||||||
name: hosted-git-info
|
name: hosted-git-info
|
||||||
|
@ -8609,6 +8637,7 @@ packages:
|
||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=0.10.0'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
requiresBuild: true
|
requiresBuild: true
|
||||||
|
dev: true
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
registry.npmmirror.com/immutable/4.2.4:
|
registry.npmmirror.com/immutable/4.2.4:
|
||||||
|
@ -9148,7 +9177,7 @@ packages:
|
||||||
name: jsonfile
|
name: jsonfile
|
||||||
version: 4.0.0
|
version: 4.0.0
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10
|
graceful-fs: 4.2.10
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
registry.npmmirror.com/jsonwebtoken/9.0.0:
|
registry.npmmirror.com/jsonwebtoken/9.0.0:
|
||||||
|
@ -9369,13 +9398,13 @@ packages:
|
||||||
parse-node-version: registry.npmmirror.com/parse-node-version/1.0.1
|
parse-node-version: registry.npmmirror.com/parse-node-version/1.0.1
|
||||||
tslib: registry.npmmirror.com/tslib/2.5.0
|
tslib: registry.npmmirror.com/tslib/2.5.0
|
||||||
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
|
||||||
make-dir: registry.npmmirror.com/make-dir/2.1.0
|
make-dir: 2.1.0
|
||||||
mime: registry.npmmirror.com/mime/1.6.0
|
mime: 1.6.0
|
||||||
needle: registry.npmmirror.com/needle/3.2.0
|
needle: 3.2.0
|
||||||
source-map: registry.npmmirror.com/source-map/0.6.1
|
source-map: 0.6.1
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
|
@ -9608,6 +9637,7 @@ packages:
|
||||||
dependencies:
|
dependencies:
|
||||||
pify: 4.0.1
|
pify: 4.0.1
|
||||||
semver: 5.7.1
|
semver: 5.7.1
|
||||||
|
dev: true
|
||||||
|
|
||||||
registry.npmmirror.com/make-dir/3.1.0:
|
registry.npmmirror.com/make-dir/3.1.0:
|
||||||
resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/make-dir/-/make-dir-3.1.0.tgz}
|
resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/make-dir/-/make-dir-3.1.0.tgz}
|
||||||
|
@ -9734,6 +9764,7 @@ packages:
|
||||||
engines: {node: '>=4'}
|
engines: {node: '>=4'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
requiresBuild: true
|
requiresBuild: true
|
||||||
|
dev: true
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
registry.npmmirror.com/mime/2.6.0:
|
registry.npmmirror.com/mime/2.6.0:
|
||||||
|
@ -9876,8 +9907,8 @@ packages:
|
||||||
mongodb-connection-string-url: registry.npmmirror.com/mongodb-connection-string-url/2.6.0
|
mongodb-connection-string-url: registry.npmmirror.com/mongodb-connection-string-url/2.6.0
|
||||||
socks: registry.npmmirror.com/socks/2.7.1
|
socks: registry.npmmirror.com/socks/2.7.1
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@aws-sdk/credential-providers': registry.npmmirror.com/@aws-sdk/credential-providers/3.272.0
|
'@aws-sdk/credential-providers': 3.272.0
|
||||||
saslprep: registry.npmmirror.com/saslprep/1.0.3
|
saslprep: 1.0.3
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- aws-crt
|
- aws-crt
|
||||||
|
|
||||||
|
@ -10043,21 +10074,6 @@ packages:
|
||||||
hasBin: true
|
hasBin: true
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
registry.npmmirror.com/needle/3.2.0:
|
|
||||||
resolution: {integrity: sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/needle/-/needle-3.2.0.tgz}
|
|
||||||
name: needle
|
|
||||||
version: 3.2.0
|
|
||||||
engines: {node: '>= 4.4.x'}
|
|
||||||
hasBin: true
|
|
||||||
requiresBuild: true
|
|
||||||
dependencies:
|
|
||||||
debug: registry.npmmirror.com/debug/3.2.7
|
|
||||||
iconv-lite: registry.npmmirror.com/iconv-lite/0.6.3
|
|
||||||
sax: 1.2.4
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- supports-color
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
registry.npmmirror.com/negotiator/0.6.3:
|
registry.npmmirror.com/negotiator/0.6.3:
|
||||||
resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz}
|
resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz}
|
||||||
name: negotiator
|
name: negotiator
|
||||||
|
@ -12211,7 +12227,7 @@ packages:
|
||||||
rollup: registry.npmmirror.com/rollup/3.17.2
|
rollup: registry.npmmirror.com/rollup/3.17.2
|
||||||
typescript: registry.npmmirror.com/typescript/4.9.5
|
typescript: registry.npmmirror.com/typescript/4.9.5
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@babel/code-frame': registry.npmmirror.com/@babel/code-frame/7.18.6
|
'@babel/code-frame': 7.18.6
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
registry.npmmirror.com/rollup-plugin-postcss/4.0.2_postcss@8.4.21:
|
registry.npmmirror.com/rollup-plugin-postcss/4.0.2_postcss@8.4.21:
|
||||||
|
@ -12256,7 +12272,7 @@ packages:
|
||||||
engines: {node: '>=14.18.0', npm: '>=8.0.0'}
|
engines: {node: '>=14.18.0', npm: '>=8.0.0'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
fsevents: registry.npmmirror.com/fsevents/2.3.2
|
fsevents: 2.3.2
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
registry.npmmirror.com/run-async/2.4.1:
|
registry.npmmirror.com/run-async/2.4.1:
|
||||||
|
@ -12320,16 +12336,6 @@ packages:
|
||||||
name: safer-buffer
|
name: safer-buffer
|
||||||
version: 2.1.2
|
version: 2.1.2
|
||||||
|
|
||||||
registry.npmmirror.com/saslprep/1.0.3:
|
|
||||||
resolution: {integrity: sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/saslprep/-/saslprep-1.0.3.tgz}
|
|
||||||
name: saslprep
|
|
||||||
version: 1.0.3
|
|
||||||
engines: {node: '>=6'}
|
|
||||||
requiresBuild: true
|
|
||||||
dependencies:
|
|
||||||
sparse-bitfield: registry.npmmirror.com/sparse-bitfield/3.0.3
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
registry.npmmirror.com/sass-loader/13.2.0_sass@1.58.3+webpack@5.75.0:
|
registry.npmmirror.com/sass-loader/13.2.0_sass@1.58.3+webpack@5.75.0:
|
||||||
resolution: {integrity: sha512-JWEp48djQA4nbZxmgC02/Wh0eroSUutulROUusYJO9P9zltRbNN80JCBHqRGzjd4cmZCa/r88xgfkjGD0TXsHg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sass-loader/-/sass-loader-13.2.0.tgz}
|
resolution: {integrity: sha512-JWEp48djQA4nbZxmgC02/Wh0eroSUutulROUusYJO9P9zltRbNN80JCBHqRGzjd4cmZCa/r88xgfkjGD0TXsHg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sass-loader/-/sass-loader-13.2.0.tgz}
|
||||||
id: registry.npmmirror.com/sass-loader/13.2.0
|
id: registry.npmmirror.com/sass-loader/13.2.0
|
||||||
|
@ -12648,6 +12654,7 @@ packages:
|
||||||
name: source-map
|
name: source-map
|
||||||
version: 0.6.1
|
version: 0.6.1
|
||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=0.10.0'}
|
||||||
|
dev: true
|
||||||
|
|
||||||
registry.npmmirror.com/sparse-bitfield/3.0.3:
|
registry.npmmirror.com/sparse-bitfield/3.0.3:
|
||||||
resolution: {integrity: sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz}
|
resolution: {integrity: sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz}
|
||||||
|
@ -13734,7 +13741,7 @@ packages:
|
||||||
resolve: registry.npmmirror.com/resolve/1.22.1
|
resolve: registry.npmmirror.com/resolve/1.22.1
|
||||||
rollup: registry.npmmirror.com/rollup/3.17.2
|
rollup: registry.npmmirror.com/rollup/3.17.2
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
fsevents: registry.npmmirror.com/fsevents/2.3.2
|
fsevents: 2.3.2
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
registry.npmmirror.com/vod-node-sdk/1.1.0:
|
registry.npmmirror.com/vod-node-sdk/1.1.0:
|
||||||
|
|
Loading…
Reference in New Issue
Block a user