├── README.md
├── .gitignore
├── public
├── logo.png
├── plugin.json
├── README.md
└── preload.js
├── index.html
├── src
├── main.js
├── components
│ ├── RecordIcon.vue
│ ├── StopIcon.vue
│ ├── PlayIcon.vue
│ ├── PauseIcon.vue
│ ├── OpenIcon.vue
│ ├── NotificationButton.vue
│ └── Setting.vue
├── store.js
├── assets
│ ├── plugin.js
│ ├── timer.js
│ ├── convert.js
│ └── recorder.js
└── App.vue
├── package.json
├── vite.config.js
└── yarn.lock
/README.md:
--------------------------------------------------------------------------------
1 | # utools-recorder
2 | ### yarn
3 | ### yarn build
4 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | .DS_Store
3 | dist
4 | dist-ssr
5 | *.local
--------------------------------------------------------------------------------
/public/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DogeVenci/utools-recorder/HEAD/public/logo.png
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 录屏
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/src/main.js:
--------------------------------------------------------------------------------
1 | import { createApp } from "vue";
2 | import App from "./App.vue";
3 | import { createPinia } from "pinia";
4 | // import { message } from "ant-design-vue";
5 | // import "ant-design-vue/lib/message/style";
6 | import "ant-design-vue/lib/notification/style";
7 |
8 | // message.config({
9 | // duration: 10, // 持续时间
10 | // maxCount: 3, // 最大显示数, 超过限制时,最早的消息会被自动关闭
11 | // });
12 |
13 | createApp(App).use(createPinia()).mount("#app");
14 |
--------------------------------------------------------------------------------
/public/plugin.json:
--------------------------------------------------------------------------------
1 | {
2 | "pluginName": "录屏",
3 | "description": "屏幕录制",
4 | "author": "Dovenci",
5 | "main": "index.html",
6 | "logo": "logo.png",
7 | "version": "1.2.0",
8 | "preload":"preload.js",
9 | "features": [
10 | {
11 | "code": "lp",
12 | "explain": "录屏",
13 | "cmds":["录屏"]
14 | },
15 | {
16 | "code": "kslp",
17 | "explain": "开始录屏",
18 | "cmds":["开始录屏"]
19 | },
20 | {
21 | "code":"tzlp",
22 | "explain":"停止录屏",
23 | "cmds":["停止录屏"]
24 | },
25 | {
26 | "code":"ztlp",
27 | "explain":"暂停或恢复录屏",
28 | "cmds":["暂停恢复录屏"]
29 | }
30 | ]
31 | }
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "utools-recorder",
3 | "version": "0.0.0",
4 | "license": "MIT",
5 | "scripts": {
6 | "dev": "vite",
7 | "build": "vite build",
8 | "serve": "vite preview"
9 | },
10 | "dependencies": {
11 | "@ant-design/icons-vue": "^6.1.0",
12 | "ant-design-vue": "^3.2.15",
13 | "pinia": "^2.0.31",
14 | "vue": "^3.2.47"
15 | },
16 | "devDependencies": {
17 | "@originjs/vite-plugin-commonjs": "^1.0.3",
18 | "@vitejs/plugin-vue": "^4.0.0",
19 | "@vue/compiler-sfc": "^3.2.47",
20 | "less": "^4.1.3",
21 | "unplugin-vue-components": "^0.24.0",
22 | "vite": "^4.1.3"
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/vite.config.js:
--------------------------------------------------------------------------------
1 | import { defineConfig } from "vite";
2 | import vue from "@vitejs/plugin-vue";
3 | import Components from "unplugin-vue-components/vite";
4 | import { AntDesignVueResolver } from "unplugin-vue-components/resolvers";
5 | import { viteCommonjs } from "@originjs/vite-plugin-commonjs";
6 |
7 |
8 | // https://vitejs.dev/config/
9 | export default defineConfig({
10 | plugins: [
11 | vue(),
12 | Components({
13 | resolvers: [AntDesignVueResolver()],
14 | }),
15 | viteCommonjs()
16 | ],
17 | base: "",
18 | css: {
19 | preprocessorOptions: {
20 | less: {
21 | javascriptEnabled: true,
22 | },
23 | },
24 | },
25 | });
26 |
--------------------------------------------------------------------------------
/src/components/RecordIcon.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/components/StopIcon.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/components/PlayIcon.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/components/PauseIcon.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
23 |
24 |
25 |
26 |
27 |
30 |
--------------------------------------------------------------------------------
/src/components/OpenIcon.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/public/README.md:
--------------------------------------------------------------------------------
1 | # 录屏工具
2 |
3 | 屏幕录像保存至 webm 文件
4 | 可选择已打开的窗口录像
5 | 可自定义 utools 全局快捷键关键字“开始录屏”“停止录屏”“暂停恢复录像”
6 | 可使用 chrome 或 VLC 等主流播放器播放 webm
7 | 视频编码 h264 可使用另一个"FFmpeg 助手"插件转换格式
8 |
9 | ---
10 |
11 | MacOS Linux 无法内录音频 可使用 soundFlower 或 blackHole 等虚拟声卡软件转录到 mic
12 |
13 | ## changlog
14 | > ### 1.3.0(2023-04-04)
15 | > - 添加转换GIF格式,添加默认保存视频格式设置选项
16 |
17 | > ### 1.2.1(2022-12-26)
18 | > - 修改可设置同时内录系统声音和麦克风声音
19 |
20 | > ### 1.2.0(2022-07-31)
21 | > - 添加FFmpeg wasm 转码MP4
22 |
23 | > ### 1.1.4(2022-03-01)
24 | > - 修改README 开源 https://github.com/DogeVenci/utools-recorder
25 |
26 | > ### 1.1.3(2021-08-26)
27 |
28 | > - 添加暂停和恢复录制功能
29 | > - 录制源选择添加应用图标方便识别
30 | > - UI 调整
31 |
32 | > ### 1.1.2(2021-08-08)
33 |
34 | > - 添加完成录像后跳转到 FFmpeg 助手插件转换格式的功能
35 |
36 | > ### 1.1.1(2021-08-06)
37 |
38 | > - 添加可选择录像保存目录功能
39 | > - Windows 添加录音开关
40 | > - 添加后台录像时错误弹出提示功能
41 |
42 | > ### 1.1.0(2021-07-27)
43 |
44 | > - 添加选择录像窗口功能
45 | > - 前端重构
46 |
47 | > ### 1.0.2(2021-07-25)
48 |
49 | > - 视频编码改为 h264
50 | > - 减小录屏时内存消耗
51 |
52 | > ### 1.0.1(2021-07-23)
53 |
54 | > - 添加开始录屏和停止录屏指令以便绑定全局快捷键
55 | > - 添加延迟开始选项
56 | > - Windows 录屏声音
57 |
--------------------------------------------------------------------------------
/src/components/NotificationButton.vue:
--------------------------------------------------------------------------------
1 |
2 | 打开目录
3 | 转换格式
4 |
5 |
6 |
43 |
--------------------------------------------------------------------------------
/src/store.js:
--------------------------------------------------------------------------------
1 | import { defineStore } from "pinia";
2 |
3 | // useStore could be anything like useUser, useCart
4 | // the first argument is a unique id of the store across your application
5 | export const useStore = defineStore("main", {
6 | state: () => {
7 | return {
8 | recorderState: "inactive",
9 | selectedVideoSource: { key: "screen:0:0" },
10 | videoSources: [],
11 | audioSources: [],
12 | delayStart: 3,
13 | disableOperation: false,
14 | errorText: "",
15 | savedText: "",
16 | savedFilePath: "",
17 | loading: false,
18 | settingVisable: false,
19 | outputDir: "",
20 | recentFilelist: [],
21 | outFileFormat: "webm"
22 | };
23 | },
24 | getters: {
25 | videoOptions: (state) => {
26 | return state.videoSources.map((item) => {
27 | return {
28 | value: item.id,
29 | label: item.name,
30 | key: item.id,
31 | icon: item.appIconURL,
32 | };
33 | });
34 | },
35 | hasSysAudio: state => state.audioSources.findIndex(audio => audio == "system") !== -1,
36 | hasMicAudio: state => state.audioSources.findIndex(audio => audio == "mic") !== -1,
37 | isMuted: state => state.audioSources.length === 0
38 | },
39 | });
40 |
--------------------------------------------------------------------------------
/src/assets/plugin.js:
--------------------------------------------------------------------------------
1 | import { useStore } from "../store.js";
2 |
3 | import {
4 | startRecord,
5 | stopRecord,
6 | getSources,
7 | togglePause,
8 | curStream,
9 | } from "./recorder.js";
10 |
11 | if (typeof utools != "undefined") {
12 | utools.onPluginReady(() => {
13 | const store = useStore();
14 | if (utools.isWindows()) {
15 | store.audioSources = ["system"]
16 | } else {
17 | store.audioSources = []
18 | }
19 | store.delayStart = utools.dbStorage.getItem("delayStart") || 3;
20 |
21 | const audioConfig = utools.dbStorage.getItem("audioSource");
22 | if (audioConfig) {
23 | console.log("read audio config:", audioConfig)
24 | store.audioSources = JSON.parse(audioConfig)
25 | }
26 |
27 | store.outFileFormat = window.getOutFileFormat()
28 |
29 | utools.setSubInput((text) => { },
30 | '可在utools 全局快捷键设置中绑定关键字 "开始录屏" "停止录屏" "暂停恢复录屏"');
31 | });
32 |
33 | utools.onPluginEnter(({ code, type, payload }) => {
34 | console.log("onPluginEnter:", code, type, payload);
35 | if (code === "kslp") {
36 | // utools.setExpendHeight(1);
37 | if (curStream) {
38 | startRecord(curStream); //TODO 窗口关闭后需要刷新
39 | utools.hideMainWindow();
40 | } else {
41 | getSources().then((sources) => {
42 | getStream(sources[0]).then((stream) => {
43 | startRecord(stream);
44 | utools.hideMainWindow();
45 | });
46 | });
47 | }
48 | } else if (code === "tzlp") {
49 | // utools.setExpendHeight(0);
50 | stopRecord();
51 | // utools.outPlugin();
52 | } else if (code === "ztlp") {
53 | togglePause();
54 | }
55 | });
56 |
57 | utools.onPluginOut((processExit) => {
58 | console.log("onPluginOut", processExit);
59 | if (processExit) {
60 | //退出
61 | } else {
62 | //隐藏
63 | }
64 | });
65 | }
66 |
67 | export const openVideoDir = () => {
68 | window.utools && utools.shellOpenPath(mediaFile.getOutputDir());
69 | };
70 |
--------------------------------------------------------------------------------
/src/assets/timer.js:
--------------------------------------------------------------------------------
1 | import { ref } from "vue";
2 | import { useStore } from "../store.js";
3 |
4 | export let recordedTime = ref("00:00:00");
5 |
6 | let recordSecond = 0;
7 | let interval = null;
8 | let countDownInterval = null;
9 |
10 | const formatSecond = (second) => {
11 | const h = Math.floor((second / 3600) % 24) + "";
12 | const m = Math.floor((second / 60) % 60) + "";
13 | const s = Math.floor(second % 60) + "";
14 | return `${h.padStart(2, "0")}:${m.padStart(2, "0")}:${s.padStart(2, "0")}`;
15 | };
16 |
17 | export const startCountTimer = () => {
18 | interval && clearInterval(interval);
19 | recordSecond = 0;
20 | interval = setInterval(() => {
21 | recordSecond++;
22 | recordedTime.value = formatSecond(recordSecond);
23 | }, 1000);
24 | };
25 |
26 | export const pauseCountTimer = () => {
27 | interval && clearInterval(interval);
28 | };
29 |
30 | export const resumeCountTimer = () => {
31 | interval && clearInterval(interval);
32 | interval = setInterval(() => {
33 | recordSecond++;
34 | recordedTime.value = formatSecond(recordSecond);
35 | }, 1000);
36 | };
37 |
38 | export const stopCountTimer = () => {
39 | interval && clearInterval(interval);
40 | recordSecond = 0;
41 | recordedTime.value = "00:00:00";
42 | };
43 |
44 | export const countDownTimer = (seconds, finalFunc, countFunc) => {
45 | const store = useStore();
46 | if (seconds <= 0) {
47 | typeof finalFunc == "function" && finalFunc();
48 | return;
49 | }
50 | store.disableOperation = true;
51 | let count = seconds;
52 | if (countDownInterval) clearInterval(countDownInterval);
53 | countDownInterval = setInterval(() => {
54 | count--;
55 | typeof countFunc == "function" && countFunc(count);
56 | if (count <= 0) {
57 | typeof finalFunc == "function" && finalFunc();
58 | store.disableOperation = false;
59 | clearInterval(countDownInterval);
60 | }
61 | }, 1000);
62 | };
63 |
64 | export const clearCountDownTimer = () => {
65 | const store = useStore();
66 | if (countDownInterval) clearInterval(countDownInterval);
67 | store.disableOperation = false;
68 | };
69 |
--------------------------------------------------------------------------------
/src/assets/convert.js:
--------------------------------------------------------------------------------
1 |
2 | import { useStore } from "../store.js";
3 | import { notification, Button } from "ant-design-vue";
4 | import { h, defineComponent } from 'vue';
5 |
6 | const openNotification = (msg, desp, filepath) => {
7 | notification.open({
8 | message: msg,
9 | key: "saved",
10 | description: desp,
11 | btn: () =>
12 | h(
13 | Button,
14 | {
15 | type: 'primary',
16 | onClick: () => {
17 | window?.utools?.shellShowItemInFolder(filepath);
18 | notification.close(key)
19 | },
20 | },
21 | { default: () => '打开' },
22 | ),
23 | })
24 | }
25 | export const convertVideo = async () => {
26 | const runFFmpeg = window.runFFmpeg;
27 | const convert2Gif = window.convert2Gif;
28 | const store = useStore();
29 | console.log("convertVideo", store.outFileFormat)
30 | if (store.outFileFormat == "webm") {
31 | openNotification("录像保存成功", store.savedFilePath, store.savedFilePath)
32 | return
33 | }
34 | store.loading = true;
35 | setTimeout(() => {
36 | if (store.outFileFormat == 'gif') {
37 | convert2Gif(store.savedFilePath).then(filepath => {
38 | openNotification("格式转换成功", filepath, filepath)
39 | }).catch((err) => {
40 | store.errorText = "转换格式失败,请选择保存目录为非系统目录重试";
41 | }).finally(() => {
42 | store.loading = false;
43 | });;
44 | }
45 | else if (store.outFileFormat == "mp4") {
46 | runFFmpeg(store.savedFilePath)
47 | .then((filepath) => {
48 | // window?.utools?.shellShowItemInFolder(filepath);
49 | openNotification("格式转换成功", filepath, filepath)
50 | })
51 | .catch((err) => {
52 | store.errorText = "转换格式失败,请选择保存目录为非系统目录重试";
53 | })
54 | .finally(() => {
55 | store.loading = false;
56 | });
57 | }
58 | }, 500);
59 | }
60 |
61 |
--------------------------------------------------------------------------------
/public/preload.js:
--------------------------------------------------------------------------------
1 | const path = require("path");
2 | const fs = require("fs");
3 | const { desktopCapturer } = require("electron");
4 | const ffmpeg = require("./ffmpeg-mp4.js");
5 | const maxRecent = 10;
6 | window.desktopCapturer = desktopCapturer; // 兼容utools 2.6.1 之前的版本
7 |
8 | const runFFmpeg = async (filepath) => {
9 | const pathname = path.dirname(filepath);
10 | const filename = path.basename(filepath);
11 | const basename = path.basename(filename, path.extname(filepath));
12 | console.log("runFFmpeg pathname:", pathname);
13 | console.log("runFFmpeg filename:", filename);
14 | let stdout = "";
15 | let stderr = "";
16 | return new Promise((resolve, reject) => {
17 | ffmpeg({
18 | mounts: [
19 | { type: "NODEFS", opts: { root: pathname }, mountpoint: "/data" },
20 | ],
21 | arguments: [
22 | "-hide_banner",
23 | "-loglevel",
24 | "error",
25 | "-i",
26 | `/data/${filename}`,
27 | "-c:v",
28 | "copy",
29 | "-c:a",
30 | "copy",
31 | "-strict",
32 | "-2",
33 | "-y",
34 | `/data/${basename}.mp4`,
35 | ],
36 | print: function (data) {
37 | stdout += data + "\n";
38 | },
39 | printErr: function (data) {
40 | stderr += data + "\n";
41 | },
42 | onExit: function (code) {
43 | console.log("Process exited with code " + code);
44 | console.log(stdout);
45 | console.log(stderr);
46 | if (code === 0) {
47 | resolve(path.join(pathname, `${basename}.mp4`));
48 | } else {
49 | reject(stderr);
50 | }
51 | },
52 | });
53 | })
54 | };
55 | window.runFFmpeg = runFFmpeg;
56 |
57 | const convert2Gif = async (filepath) => {
58 | const pathname = path.dirname(filepath);
59 | const filename = path.basename(filepath);
60 | const basename = path.basename(filename, path.extname(filepath));
61 | console.log("runFFmpeg pathname:", pathname);
62 | console.log("runFFmpeg filename:", filename);
63 | let stdout = "";
64 | let stderr = "";
65 | return new Promise((resolve, reject) => {
66 | ffmpeg({
67 | mounts: [
68 | { type: "NODEFS", opts: { root: pathname }, mountpoint: "/data" },
69 | ],
70 | arguments: [
71 | "-hide_banner",
72 | "-loglevel",
73 | "error",
74 | "-i",
75 | `/data/${filename}`,
76 | "-r",
77 | "1",
78 | "-y",
79 | `/data/${basename}.gif`,
80 | ],
81 | print: function (data) {
82 | stdout += data + "\n";
83 | },
84 | printErr: function (data) {
85 | stderr += data + "\n";
86 | },
87 | onExit: function (code) {
88 | console.log("Process exited with code " + code);
89 | console.log(stdout);
90 | console.log(stderr);
91 | if (code === 0) {
92 | resolve(path.join(pathname, `${basename}.gif`));
93 | } else {
94 | reject(stderr);
95 | }
96 | },
97 | });
98 | })
99 | };
100 | window.convert2Gif = convert2Gif;
101 |
102 | let filePath = null;
103 | let fileName = "";
104 |
105 | Date.prototype.format = function (fmt) {
106 | var o = {
107 | "M+": this.getMonth() + 1, //月份
108 | "d+": this.getDate(), //日
109 | "h+": this.getHours(), //小时
110 | "m+": this.getMinutes(), //分
111 | "s+": this.getSeconds(), //秒
112 | "q+": Math.floor((this.getMonth() + 3) / 3), //季度
113 | S: this.getMilliseconds(), //毫秒
114 | };
115 | if (/(y+)/.test(fmt)) {
116 | fmt = fmt.replace(
117 | RegExp.$1,
118 | (this.getFullYear() + "").substr(4 - RegExp.$1.length)
119 | );
120 | }
121 | for (var k in o) {
122 | if (new RegExp("(" + k + ")").test(fmt)) {
123 | fmt = fmt.replace(
124 | RegExp.$1,
125 | RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length)
126 | );
127 | }
128 | }
129 | return fmt;
130 | };
131 |
132 | const NewMediaFile = () => {
133 | fileName = `${new Date().format("yyyyMMddhhmmss")}.webm`;
134 | filePath = path.resolve(getOutputDir(), fileName);
135 | return filePath;
136 | };
137 |
138 | const WriteMediaFile = (data) => {
139 | if (!filePath) return;
140 | fs.appendFileSync(filePath, data);
141 | };
142 |
143 | const CloseMediaFile = () => {
144 | filePath = null;
145 | };
146 |
147 | const getOutputDir = () => {
148 | const output = utools.dbStorage.getItem("output") || utools.getPath("videos");
149 | return output;
150 | };
151 |
152 | const setOutputDir = (dirPath) => {
153 | utools.dbStorage.setItem("output", dirPath);
154 | };
155 |
156 | const getRecentFilelist = () => {
157 | const list = utools.dbStorage.getItem("recentFileList")
158 | return JSON.parse(list) || []
159 | }
160 |
161 | const getOutFileFormat = () => {
162 | return utools.dbStorage.getItem("outfileFormat") || "webm"
163 | }
164 |
165 | const setOutFileFormat = (format) => {
166 | utools.dbStorage.setItem("outfileFormat", format)
167 | }
168 |
169 | window.getOutFileFormat = getOutFileFormat
170 | window.setOutFileFormat = setOutFileFormat
171 |
172 | const addToRecentFilelist = (item) => {
173 | const list = getRecentFilelist()
174 | if (list.length >= maxRecent) {
175 | list.pop()
176 | }
177 | list.unshift(item)
178 | utools.dbStorage.setItem("recentFileList", JSON.stringify(list))
179 | }
180 |
181 | window.onbeforeunload = () => {
182 | console.log("onbeforeunload");
183 | };
184 |
185 | const getMediaFilePath = () => filePath;
186 | const getMediaFileName = () => fileName;
187 |
188 | window.mediaFile = {
189 | getMediaFilePath,
190 | getMediaFileName,
191 | NewMediaFile,
192 | WriteMediaFile,
193 | CloseMediaFile,
194 | getOutputDir,
195 | setOutputDir,
196 | getRecentFilelist,
197 | addToRecentFilelist,
198 | Buffer,
199 | };
200 |
--------------------------------------------------------------------------------
/src/components/Setting.vue:
--------------------------------------------------------------------------------
1 |
2 |
11 |
12 |
13 |
20 |
21 |
22 |
23 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
42 |
43 |
44 |
45 |
89 |
92 |
93 |
94 |
95 |
96 |
203 |
204 |
209 |
--------------------------------------------------------------------------------
/src/assets/recorder.js:
--------------------------------------------------------------------------------
1 | import { useStore } from "../store.js";
2 | import * as timer from "./timer.js";
3 |
4 | const timeslice = 5000;
5 | let mediaRecorder = null;
6 | let chunks = [];
7 | export let curStream = null;
8 |
9 | const compareVersion = (v1, v2) => {
10 | v1 = v1.split(".").map(Number);
11 | v2 = v2.split(".").map(Number);
12 | const minLen = v1.length > v2.length ? v2.length : v1.length;
13 | for (let i = 0; i < minLen; i++) {
14 | if (v1[i] === v2[i]) continue;
15 | return v1[i] - v2[i];
16 | }
17 | return v1.length - v2.length;
18 | }
19 |
20 |
21 | export const getSources = async () => {
22 | if (!window.utools) return;
23 | let sources = [];
24 | if (compareVersion(utools.getAppVersion(), "2.6.1") >= 0) {
25 | sources = await utools.desktopCaptureSources({
26 | types: ["screen", "window"],
27 | thumbnailSize: { width: 0, height: 0 }, //设置为0节省用于获取每个窗口和屏幕内容时的处理时间
28 | fetchWindowIcons: true, //尽可能获取图标
29 | });
30 | } else {
31 | sources = await desktopCapturer.getSources({
32 | types: ["screen", "window"],
33 | thumbnailSize: { width: 0, height: 0 }, //设置为0节省用于获取每个窗口和屏幕内容时的处理时间
34 | fetchWindowIcons: true, //尽可能获取图标
35 | });
36 | }
37 |
38 | //TODO 异常处理
39 | sources = sources.filter(({ name }) => name != "uTools");
40 | sources.forEach((source) => {
41 | source.appIconURL = source.appIcon?.toDataURL();
42 | });
43 | console.log(sources);
44 | //
45 | return sources;
46 | };
47 |
48 | const getUserMediaMerge = async (source) => {
49 | const store = useStore();
50 | let tracks = []
51 | let audio = false
52 | return new Promise(async (resolve, reject) => {
53 | try {
54 | if (store.hasSysAudio) {
55 | console.log("store.hasSysAudio")
56 | audio = {
57 | //TODO 无法获得音频设备得情况
58 | mandatory: {
59 | chromeMediaSource: "desktop",
60 | },
61 | };
62 | }
63 |
64 | const screenVideoStream = await navigator.mediaDevices.getUserMedia({
65 | audio: audio,
66 | video: {
67 | mandatory: {
68 | chromeMediaSource: "desktop",
69 | chromeMediaSourceId: source.id,
70 | },
71 | },
72 | });
73 |
74 | tracks = [...screenVideoStream.getVideoTracks(), ...screenVideoStream.getAudioTracks()]
75 |
76 | if (store.hasMicAudio) {
77 | const micStream = await navigator.mediaDevices.getUserMedia({
78 | audio: true,
79 | });
80 | tracks = [...tracks, ...micStream.getAudioTracks()]
81 | }
82 |
83 |
84 | curStream = new MediaStream(tracks);
85 | resolve(curStream);
86 | } catch (err) {
87 | store.errorText = "" + err;
88 | reject(err);
89 | }
90 | })
91 | }
92 |
93 | export const getStream = (source) => {
94 | return getUserMediaMerge(source);
95 | };
96 |
97 |
98 | export const startRecord = (stream) => {
99 | if (mediaRecorder) return;
100 | if (!stream) return;
101 | console.log("startRecord");
102 | const store = useStore();
103 | const videoTracks = stream.getVideoTracks();
104 | if (videoTracks?.length > 0 && videoTracks[0].readyState == "ended") {
105 | store.errorText = "startRecord failed: video source is ended";
106 | return;
107 | }
108 | mediaRecorder = new MediaRecorder(stream, {
109 | mimeType: "video/webm; codecs=h264", //TODO 视频格式转换
110 | // videoBitsPerSecond: 2.0e6, //比特率
111 | });
112 |
113 | mediaRecorder.ondataavailable = (event) => {
114 | if (event.data.size > 0) {
115 | chunks.push(event.data);
116 | const blob = new Blob(chunks, { type: "video/webm; codecs=h264" });
117 | blob
118 | .arrayBuffer()
119 | .then((buffer) => {
120 | mediaFile.WriteMediaFile(mediaFile.Buffer.from(buffer));
121 | chunks = [];
122 | })
123 | .catch((err) => {
124 | console.log(err);
125 | store.errorText = err + "";
126 | });
127 | }
128 | };
129 | mediaRecorder.onstart = async () => {
130 | const store = useStore();
131 | mediaFile.NewMediaFile();
132 | store.recorderState = "recording";
133 | timer.startCountTimer();
134 | };
135 | mediaRecorder.onstop = async () => {
136 | const store = useStore();
137 | store.recorderState = "inactive";
138 | timer.stopCountTimer();
139 | if (chunks.length > 0) {
140 | //写入未完成的数据
141 | const blob = new Blob(chunks, { type: "video/webm; codecs=h264" });
142 | const buffer = mediaFile.Buffer.from(await blob.arrayBuffer());
143 | mediaFile.WriteMediaFile(buffer);
144 | }
145 | store.savedText = `${mediaFile.getMediaFileName()} Saved`;
146 | store.savedFilePath = mediaFile.getMediaFilePath();
147 | mediaFile.addToRecentFilelist({ filepath: store.savedFilePath })
148 | mediaRecorder = null;
149 | chunks = [];
150 | utools.shellBeep();
151 | mediaFile.CloseMediaFile();
152 | };
153 | mediaRecorder.onerror = (err) => {
154 | const store = useStore();
155 | store.recorderState = "inactive";
156 | console.log(err);
157 | store.errorText = err + "";
158 | timer.clearCountDownTimer();
159 | };
160 | mediaRecorder.onpause = () => {
161 | const store = useStore();
162 | store.recorderState = "paused";
163 | timer.pauseCountTimer();
164 | };
165 | mediaRecorder.onresume = () => {
166 | const store = useStore();
167 | store.recorderState = "recording";
168 | timer.resumeCountTimer();
169 | };
170 |
171 | try {
172 | mediaRecorder.start(timeslice);
173 | } catch (err) {
174 | store.errorText = "" + err;
175 | }
176 | };
177 |
178 | export const stopRecord = () => {
179 | timer.clearCountDownTimer();
180 | if (!mediaRecorder) return;
181 | if (mediaRecorder.state == "inactive") return;
182 | mediaRecorder.stop();
183 | };
184 |
185 | export const pauseRecord = () => {
186 | if (!mediaRecorder) return;
187 | if (mediaRecorder.state != "recording") return;
188 | mediaRecorder.pause();
189 | };
190 |
191 | export const resumeRecord = () => {
192 | if (!mediaRecorder) return;
193 | if (mediaRecorder.state != "paused") return;
194 | mediaRecorder.resume();
195 | };
196 |
197 | export const togglePause = () => {
198 | const recState = getRecorderState();
199 | if (recState == "paused") {
200 | resumeRecord();
201 | } else if (recState == "recording") {
202 | pauseRecord();
203 | }
204 | };
205 |
206 | export const getRecorderState = () => {
207 | if (mediaRecorder) return mediaRecorder.state;
208 | return "inactive";
209 | };
210 |
--------------------------------------------------------------------------------
/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
44 | 延迟
45 |
56 |
57 |
58 |
62 |
73 |
74 |
80 |
84 | {{ label }}
85 |
86 |
87 |
88 |
89 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
108 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
360 |
361 |
459 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@ant-design/colors@^6.0.0":
6 | version "6.0.0"
7 | resolved "https://registry.npmmirror.com/@ant-design/colors/-/colors-6.0.0.tgz#9b9366257cffcc47db42b9d0203bb592c13c0298"
8 | integrity sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ==
9 | dependencies:
10 | "@ctrl/tinycolor" "^3.4.0"
11 |
12 | "@ant-design/icons-svg@^4.2.1":
13 | version "4.2.1"
14 | resolved "https://registry.npmmirror.com/@ant-design/icons-svg/-/icons-svg-4.2.1.tgz#8630da8eb4471a4aabdaed7d1ff6a97dcb2cf05a"
15 | integrity sha512-EB0iwlKDGpG93hW8f85CTJTs4SvMX7tt5ceupvhALp1IF44SeUFOMhKUOYqpsoYWQKAOuTRDMqn75rEaKDp0Xw==
16 |
17 | "@ant-design/icons-vue@^6.0.1", "@ant-design/icons-vue@^6.1.0":
18 | version "6.1.0"
19 | resolved "https://registry.npmmirror.com/@ant-design/icons-vue/-/icons-vue-6.1.0.tgz#f9324fdc0eb4cea943cf626d2bf3db9a4ff4c074"
20 | integrity sha512-EX6bYm56V+ZrKN7+3MT/ubDkvJ5rK/O2t380WFRflDcVFgsvl3NLH7Wxeau6R8DbrO5jWR6DSTC3B6gYFp77AA==
21 | dependencies:
22 | "@ant-design/colors" "^6.0.0"
23 | "@ant-design/icons-svg" "^4.2.1"
24 |
25 | "@antfu/utils@^0.5.0":
26 | version "0.5.1"
27 | resolved "https://registry.npmmirror.com/@antfu/utils/-/utils-0.5.1.tgz#7eb6764878adb715daff20019e5a15fd63d93342"
28 | integrity sha512-8Afo0+xvYe1K8Wm4xHTymfTkpzy36aaqDvhXIayUwl+mecMG9Xzl3XjXa6swG6Bk8FBeQ646RyvmsYt6+2Be9g==
29 |
30 | "@babel/parser@^7.16.4":
31 | version "7.17.9"
32 | resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.17.9.tgz#9c94189a6062f0291418ca021077983058e171ef"
33 | integrity sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==
34 |
35 | "@babel/runtime@^7.10.5":
36 | version "7.17.9"
37 | resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.17.9.tgz#d19fbf802d01a8cb6cf053a64e472d42c434ba72"
38 | integrity sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==
39 | dependencies:
40 | regenerator-runtime "^0.13.4"
41 |
42 | "@ctrl/tinycolor@^3.4.0":
43 | version "3.4.1"
44 | resolved "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.4.1.tgz#75b4c27948c81e88ccd3a8902047bcd797f38d32"
45 | integrity sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw==
46 |
47 | "@nodelib/fs.scandir@2.1.5":
48 | version "2.1.5"
49 | resolved "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
50 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
51 | dependencies:
52 | "@nodelib/fs.stat" "2.0.5"
53 | run-parallel "^1.1.9"
54 |
55 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
56 | version "2.0.5"
57 | resolved "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
58 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
59 |
60 | "@nodelib/fs.walk@^1.2.3":
61 | version "1.2.8"
62 | resolved "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
63 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
64 | dependencies:
65 | "@nodelib/fs.scandir" "2.1.5"
66 | fastq "^1.6.0"
67 |
68 | "@originjs/vite-plugin-commonjs@^1.0.3":
69 | version "1.0.3"
70 | resolved "https://registry.npmmirror.com/@originjs/vite-plugin-commonjs/-/vite-plugin-commonjs-1.0.3.tgz#2e3fb11ec78847da9422b79c103953f94d667f09"
71 | integrity sha512-KuEXeGPptM2lyxdIEJ4R11+5ztipHoE7hy8ClZt3PYaOVQ/pyngd2alaSrPnwyFeOW1UagRBaQ752aA1dTMdOQ==
72 | dependencies:
73 | esbuild "^0.14.14"
74 |
75 | "@rollup/pluginutils@^4.2.0":
76 | version "4.2.1"
77 | resolved "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-4.2.1.tgz#e6c6c3aba0744edce3fb2074922d3776c0af2a6d"
78 | integrity sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==
79 | dependencies:
80 | estree-walker "^2.0.1"
81 | picomatch "^2.2.2"
82 |
83 | "@simonwep/pickr@~1.8.0":
84 | version "1.8.2"
85 | resolved "https://registry.npmmirror.com/@simonwep/pickr/-/pickr-1.8.2.tgz#96dc86675940d7cad63d69c22083dd1cbb9797cb"
86 | integrity sha512-/l5w8BIkrpP6n1xsetx9MWPWlU6OblN5YgZZphxan0Tq4BByTCETL6lyIeY8lagalS2Nbt4F2W034KHLIiunKA==
87 | dependencies:
88 | core-js "^3.15.1"
89 | nanopop "^2.1.0"
90 |
91 | "@vitejs/plugin-vue@^2.3.1":
92 | version "2.3.1"
93 | resolved "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-2.3.1.tgz#5f286b8d3515381c6d5c8fa8eee5e6335f727e14"
94 | integrity sha512-YNzBt8+jt6bSwpt7LP890U1UcTOIZZxfpE5WOJ638PNxSEKOqAi0+FSKS0nVeukfdZ0Ai/H7AFd6k3hayfGZqQ==
95 |
96 | "@vue/compiler-core@3.2.33":
97 | version "3.2.33"
98 | resolved "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.33.tgz#e915d59cce85898f5c5cfebe4c09e539278c3d59"
99 | integrity sha512-AAmr52ji3Zhk7IKIuigX2osWWsb2nQE5xsdFYjdnmtQ4gymmqXbjLvkSE174+fF3A3kstYrTgGkqgOEbsdLDpw==
100 | dependencies:
101 | "@babel/parser" "^7.16.4"
102 | "@vue/shared" "3.2.33"
103 | estree-walker "^2.0.2"
104 | source-map "^0.6.1"
105 |
106 | "@vue/compiler-dom@3.2.33":
107 | version "3.2.33"
108 | resolved "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.33.tgz#6db84296f949f18e5d3e7fd5e80f943dbed7d5ec"
109 | integrity sha512-GhiG1C8X98Xz9QUX/RlA6/kgPBWJkjq0Rq6//5XTAGSYrTMBgcLpP9+CnlUg1TFxnnCVughAG+KZl28XJqw8uQ==
110 | dependencies:
111 | "@vue/compiler-core" "3.2.33"
112 | "@vue/shared" "3.2.33"
113 |
114 | "@vue/compiler-sfc@3.2.33", "@vue/compiler-sfc@^3.0.5":
115 | version "3.2.33"
116 | resolved "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.33.tgz#7ce01dc947a8b76c099811dc6ca58494d4dc773d"
117 | integrity sha512-H8D0WqagCr295pQjUYyO8P3IejM3vEzeCO1apzByAEaAR/WimhMYczHfZVvlCE/9yBaEu/eu9RdiWr0kF8b71Q==
118 | dependencies:
119 | "@babel/parser" "^7.16.4"
120 | "@vue/compiler-core" "3.2.33"
121 | "@vue/compiler-dom" "3.2.33"
122 | "@vue/compiler-ssr" "3.2.33"
123 | "@vue/reactivity-transform" "3.2.33"
124 | "@vue/shared" "3.2.33"
125 | estree-walker "^2.0.2"
126 | magic-string "^0.25.7"
127 | postcss "^8.1.10"
128 | source-map "^0.6.1"
129 |
130 | "@vue/compiler-ssr@3.2.33":
131 | version "3.2.33"
132 | resolved "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.33.tgz#3e820267e4eea48fde9519f006dedca3f5e42e71"
133 | integrity sha512-XQh1Xdk3VquDpXsnoCd7JnMoWec9CfAzQDQsaMcSU79OrrO2PNR0ErlIjm/mGq3GmBfkQjzZACV+7GhfRB8xMQ==
134 | dependencies:
135 | "@vue/compiler-dom" "3.2.33"
136 | "@vue/shared" "3.2.33"
137 |
138 | "@vue/devtools-api@^6.1.4":
139 | version "6.1.4"
140 | resolved "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.1.4.tgz#b4aec2f4b4599e11ba774a50c67fa378c9824e53"
141 | integrity sha512-IiA0SvDrJEgXvVxjNkHPFfDx6SXw0b/TUkqMcDZWNg9fnCAHbTpoo59YfJ9QLFkwa3raau5vSlRVzMSLDnfdtQ==
142 |
143 | "@vue/reactivity-transform@3.2.33":
144 | version "3.2.33"
145 | resolved "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.33.tgz#286063f44ca56150ae9b52f8346a26e5913fa699"
146 | integrity sha512-4UL5KOIvSQb254aqenW4q34qMXbfZcmEsV/yVidLUgvwYQQ/D21bGX3DlgPUGI3c4C+iOnNmDCkIxkILoX/Pyw==
147 | dependencies:
148 | "@babel/parser" "^7.16.4"
149 | "@vue/compiler-core" "3.2.33"
150 | "@vue/shared" "3.2.33"
151 | estree-walker "^2.0.2"
152 | magic-string "^0.25.7"
153 |
154 | "@vue/reactivity@3.2.33":
155 | version "3.2.33"
156 | resolved "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.33.tgz#c84eedb5225138dbfc2472864c151d3efbb4b673"
157 | integrity sha512-62Sq0mp9/0bLmDuxuLD5CIaMG2susFAGARLuZ/5jkU1FCf9EDbwUuF+BO8Ub3Rbodx0ziIecM/NsmyjardBxfQ==
158 | dependencies:
159 | "@vue/shared" "3.2.33"
160 |
161 | "@vue/runtime-core@3.2.33":
162 | version "3.2.33"
163 | resolved "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.33.tgz#2df8907c85c37c3419fbd1bdf1a2df097fa40df2"
164 | integrity sha512-N2D2vfaXsBPhzCV3JsXQa2NECjxP3eXgZlFqKh4tgakp3iX6LCGv76DLlc+IfFZq+TW10Y8QUfeihXOupJ1dGw==
165 | dependencies:
166 | "@vue/reactivity" "3.2.33"
167 | "@vue/shared" "3.2.33"
168 |
169 | "@vue/runtime-dom@3.2.33":
170 | version "3.2.33"
171 | resolved "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.33.tgz#123b8969247029ea0d9c1983676d4706a962d848"
172 | integrity sha512-LSrJ6W7CZTSUygX5s8aFkraDWlO6K4geOwA3quFF2O+hC3QuAMZt/0Xb7JKE3C4JD4pFwCSO7oCrZmZ0BIJUnw==
173 | dependencies:
174 | "@vue/runtime-core" "3.2.33"
175 | "@vue/shared" "3.2.33"
176 | csstype "^2.6.8"
177 |
178 | "@vue/server-renderer@3.2.33":
179 | version "3.2.33"
180 | resolved "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.33.tgz#4b45d6d2ae10ea4e3d2cf8e676804cf60f331979"
181 | integrity sha512-4jpJHRD4ORv8PlbYi+/MfP8ec1okz6rybe36MdpkDrGIdEItHEUyaHSKvz+ptNEyQpALmmVfRteHkU9F8vxOew==
182 | dependencies:
183 | "@vue/compiler-ssr" "3.2.33"
184 | "@vue/shared" "3.2.33"
185 |
186 | "@vue/shared@3.2.33":
187 | version "3.2.33"
188 | resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.33.tgz#69a8c99ceb37c1b031d5cc4aec2ff1dc77e1161e"
189 | integrity sha512-UBc1Pg1T3yZ97vsA2ueER0F6GbJebLHYlEi4ou1H5YL4KWvMOOWwpYo9/QpWq93wxKG6Wo13IY74Hcn/f7c7Bg==
190 |
191 | ant-design-vue@^3.1.1:
192 | version "3.1.1"
193 | resolved "https://registry.npmmirror.com/ant-design-vue/-/ant-design-vue-3.1.1.tgz#429368057bc445975b3e6ee498915d5bd66e0e87"
194 | integrity sha512-QcnESmPllfyPy4SavOlf1jml/bdmzCIcCgYWRwl0WKG5jbuuOQ0vhgfUCC2rI6R+84gb/qf4/0qoZnWcEyQziA==
195 | dependencies:
196 | "@ant-design/colors" "^6.0.0"
197 | "@ant-design/icons-vue" "^6.1.0"
198 | "@babel/runtime" "^7.10.5"
199 | "@ctrl/tinycolor" "^3.4.0"
200 | "@simonwep/pickr" "~1.8.0"
201 | array-tree-filter "^2.1.0"
202 | async-validator "^4.0.0"
203 | dayjs "^1.10.5"
204 | dom-align "^1.12.1"
205 | dom-scroll-into-view "^2.0.0"
206 | lodash "^4.17.21"
207 | lodash-es "^4.17.15"
208 | resize-observer-polyfill "^1.5.1"
209 | scroll-into-view-if-needed "^2.2.25"
210 | shallow-equal "^1.0.0"
211 | vue-types "^3.0.0"
212 | warning "^4.0.0"
213 |
214 | anymatch@~3.1.2:
215 | version "3.1.2"
216 | resolved "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
217 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
218 | dependencies:
219 | normalize-path "^3.0.0"
220 | picomatch "^2.0.4"
221 |
222 | array-tree-filter@^2.1.0:
223 | version "2.1.0"
224 | resolved "https://registry.npmmirror.com/array-tree-filter/-/array-tree-filter-2.1.0.tgz#873ac00fec83749f255ac8dd083814b4f6329190"
225 | integrity sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==
226 |
227 | async-validator@^4.0.0:
228 | version "4.0.7"
229 | resolved "https://registry.npmmirror.com/async-validator/-/async-validator-4.0.7.tgz#034a0fd2103a6b2ebf010da75183bec299247afe"
230 | integrity sha512-Pj2IR7u8hmUEDOwB++su6baaRi+QvsgajuFB9j95foM1N2gy5HM4z60hfusIO0fBPG5uLAEl6yCJr1jNSVugEQ==
231 |
232 | balanced-match@^1.0.0:
233 | version "1.0.2"
234 | resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
235 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
236 |
237 | binary-extensions@^2.0.0:
238 | version "2.2.0"
239 | resolved "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
240 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
241 |
242 | brace-expansion@^2.0.1:
243 | version "2.0.1"
244 | resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
245 | integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
246 | dependencies:
247 | balanced-match "^1.0.0"
248 |
249 | braces@^3.0.2, braces@~3.0.2:
250 | version "3.0.2"
251 | resolved "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
252 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
253 | dependencies:
254 | fill-range "^7.0.1"
255 |
256 | chokidar@^3.5.3:
257 | version "3.5.3"
258 | resolved "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
259 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
260 | dependencies:
261 | anymatch "~3.1.2"
262 | braces "~3.0.2"
263 | glob-parent "~5.1.2"
264 | is-binary-path "~2.1.0"
265 | is-glob "~4.0.1"
266 | normalize-path "~3.0.0"
267 | readdirp "~3.6.0"
268 | optionalDependencies:
269 | fsevents "~2.3.2"
270 |
271 | compute-scroll-into-view@^1.0.17:
272 | version "1.0.17"
273 | resolved "https://registry.npmmirror.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.17.tgz#6a88f18acd9d42e9cf4baa6bec7e0522607ab7ab"
274 | integrity sha512-j4dx+Fb0URmzbwwMUrhqWM2BEWHdFGx+qZ9qqASHRPqvTYdqvWnHg0H1hIbcyLnvgnoNAVMlwkepyqM3DaIFUg==
275 |
276 | copy-anything@^2.0.1:
277 | version "2.0.6"
278 | resolved "https://registry.npmmirror.com/copy-anything/-/copy-anything-2.0.6.tgz#092454ea9584a7b7ad5573062b2a87f5900fc480"
279 | integrity sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==
280 | dependencies:
281 | is-what "^3.14.1"
282 |
283 | core-js@^3.15.1:
284 | version "3.22.0"
285 | resolved "https://registry.npmmirror.com/core-js/-/core-js-3.22.0.tgz#b52007870c5e091517352e833b77f0b2d2b259f3"
286 | integrity sha512-8h9jBweRjMiY+ORO7bdWSeWfHhLPO7whobj7Z2Bl0IDo00C228EdGgH7FE4jGumbEjzcFfkfW8bXgdkEDhnwHQ==
287 |
288 | csstype@^2.6.8:
289 | version "2.6.20"
290 | resolved "https://registry.npmmirror.com/csstype/-/csstype-2.6.20.tgz#9229c65ea0b260cf4d3d997cb06288e36a8d6dda"
291 | integrity sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==
292 |
293 | dayjs@^1.10.5:
294 | version "1.11.1"
295 | resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.1.tgz#90b33a3dda3417258d48ad2771b415def6545eb0"
296 | integrity sha512-ER7EjqVAMkRRsxNCC5YqJ9d9VQYuWdGt7aiH2qA5R5wt8ZmWaP2dLUSIK6y/kVzLMlmh1Tvu5xUf4M/wdGJ5KA==
297 |
298 | debug@^3.2.6:
299 | version "3.2.7"
300 | resolved "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
301 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
302 | dependencies:
303 | ms "^2.1.1"
304 |
305 | debug@^4.3.4:
306 | version "4.3.4"
307 | resolved "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
308 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
309 | dependencies:
310 | ms "2.1.2"
311 |
312 | dom-align@^1.12.1:
313 | version "1.12.2"
314 | resolved "https://registry.npmmirror.com/dom-align/-/dom-align-1.12.2.tgz#0f8164ebd0c9c21b0c790310493cd855892acd4b"
315 | integrity sha512-pHuazgqrsTFrGU2WLDdXxCFabkdQDx72ddkraZNih1KsMcN5qsRSTR9O4VJRlwTPCPb5COYg3LOfiMHHcPInHg==
316 |
317 | dom-scroll-into-view@^2.0.0:
318 | version "2.0.1"
319 | resolved "https://registry.npmmirror.com/dom-scroll-into-view/-/dom-scroll-into-view-2.0.1.tgz#0decc8522801fd8d3f1c6ba355a74d382c5f989b"
320 | integrity sha512-bvVTQe1lfaUr1oFzZX80ce9KLDlZ3iU+XGNE/bz9HnGdklTieqsbmsLHe+rT2XWqopvL0PckkYqN7ksmm5pe3w==
321 |
322 | errno@^0.1.1:
323 | version "0.1.8"
324 | resolved "https://registry.npmmirror.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f"
325 | integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==
326 | dependencies:
327 | prr "~1.0.1"
328 |
329 | esbuild-android-64@0.14.36:
330 | version "0.14.36"
331 | resolved "https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.14.36.tgz#fc5f95ce78c8c3d790fa16bc71bd904f2bb42aa1"
332 | integrity sha512-jwpBhF1jmo0tVCYC/ORzVN+hyVcNZUWuozGcLHfod0RJCedTDTvR4nwlTXdx1gtncDqjk33itjO+27OZHbiavw==
333 |
334 | esbuild-android-arm64@0.14.36:
335 | version "0.14.36"
336 | resolved "https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.36.tgz#44356fbb9f8de82a5cdf11849e011dfb3ad0a8a8"
337 | integrity sha512-/hYkyFe7x7Yapmfv4X/tBmyKnggUmdQmlvZ8ZlBnV4+PjisrEhAvC3yWpURuD9XoB8Wa1d5dGkTsF53pIvpjsg==
338 |
339 | esbuild-darwin-64@0.14.36:
340 | version "0.14.36"
341 | resolved "https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.36.tgz#3d9324b21489c70141665c2e740d6e84f16f725d"
342 | integrity sha512-kkl6qmV0dTpyIMKagluzYqlc1vO0ecgpviK/7jwPbRDEv5fejRTaBBEE2KxEQbTHcLhiiDbhG7d5UybZWo/1zQ==
343 |
344 | esbuild-darwin-arm64@0.14.36:
345 | version "0.14.36"
346 | resolved "https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.36.tgz#2a8040c2e465131e5281034f3c72405e643cb7b2"
347 | integrity sha512-q8fY4r2Sx6P0Pr3VUm//eFYKVk07C5MHcEinU1BjyFnuYz4IxR/03uBbDwluR6ILIHnZTE7AkTUWIdidRi1Jjw==
348 |
349 | esbuild-freebsd-64@0.14.36:
350 | version "0.14.36"
351 | resolved "https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.36.tgz#d82c387b4d01fe9e8631f97d41eb54f2dbeb68a3"
352 | integrity sha512-Hn8AYuxXXRptybPqoMkga4HRFE7/XmhtlQjXFHoAIhKUPPMeJH35GYEUWGbjteai9FLFvBAjEAlwEtSGxnqWww==
353 |
354 | esbuild-freebsd-arm64@0.14.36:
355 | version "0.14.36"
356 | resolved "https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.36.tgz#e8ce2e6c697da6c7ecd0cc0ac821d47c5ab68529"
357 | integrity sha512-S3C0attylLLRiCcHiJd036eDEMOY32+h8P+jJ3kTcfhJANNjP0TNBNL30TZmEdOSx/820HJFgRrqpNAvTbjnDA==
358 |
359 | esbuild-linux-32@0.14.36:
360 | version "0.14.36"
361 | resolved "https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.14.36.tgz#a4a261e2af91986ea62451f2db712a556cb38a15"
362 | integrity sha512-Eh9OkyTrEZn9WGO4xkI3OPPpUX7p/3QYvdG0lL4rfr73Ap2HAr6D9lP59VMF64Ex01LhHSXwIsFG/8AQjh6eNw==
363 |
364 | esbuild-linux-64@0.14.36:
365 | version "0.14.36"
366 | resolved "https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.14.36.tgz#4a9500f9197e2c8fcb884a511d2c9d4c2debde72"
367 | integrity sha512-vFVFS5ve7PuwlfgoWNyRccGDi2QTNkQo/2k5U5ttVD0jRFaMlc8UQee708fOZA6zTCDy5RWsT5MJw3sl2X6KDg==
368 |
369 | esbuild-linux-arm64@0.14.36:
370 | version "0.14.36"
371 | resolved "https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.36.tgz#c91c21e25b315464bd7da867365dd1dae14ca176"
372 | integrity sha512-24Vq1M7FdpSmaTYuu1w0Hdhiqkbto1I5Pjyi+4Cdw5fJKGlwQuw+hWynTcRI/cOZxBcBpP21gND7W27gHAiftw==
373 |
374 | esbuild-linux-arm@0.14.36:
375 | version "0.14.36"
376 | resolved "https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.36.tgz#90e23bca2e6e549affbbe994f80ba3bb6c4d934a"
377 | integrity sha512-NhgU4n+NCsYgt7Hy61PCquEz5aevI6VjQvxwBxtxrooXsxt5b2xtOUXYZe04JxqQo+XZk3d1gcr7pbV9MAQ/Lg==
378 |
379 | esbuild-linux-mips64le@0.14.36:
380 | version "0.14.36"
381 | resolved "https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.36.tgz#40e11afb08353ff24709fc89e4db0f866bc131d2"
382 | integrity sha512-hZUeTXvppJN+5rEz2EjsOFM9F1bZt7/d2FUM1lmQo//rXh1RTFYzhC0txn7WV0/jCC7SvrGRaRz0NMsRPf8SIA==
383 |
384 | esbuild-linux-ppc64le@0.14.36:
385 | version "0.14.36"
386 | resolved "https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.36.tgz#9e8a588c513d06cc3859f9dcc52e5fdfce8a1a5e"
387 | integrity sha512-1Bg3QgzZjO+QtPhP9VeIBhAduHEc2kzU43MzBnMwpLSZ890azr4/A9Dganun8nsqD/1TBcqhId0z4mFDO8FAvg==
388 |
389 | esbuild-linux-riscv64@0.14.36:
390 | version "0.14.36"
391 | resolved "https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.36.tgz#e578c09b23b3b97652e60e3692bfda628b541f06"
392 | integrity sha512-dOE5pt3cOdqEhaufDRzNCHf5BSwxgygVak9UR7PH7KPVHwSTDAZHDoEjblxLqjJYpc5XaU9+gKJ9F8mp9r5I4A==
393 |
394 | esbuild-linux-s390x@0.14.36:
395 | version "0.14.36"
396 | resolved "https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.36.tgz#3c9dab40d0d69932ffded0fd7317bb403626c9bc"
397 | integrity sha512-g4FMdh//BBGTfVHjF6MO7Cz8gqRoDPzXWxRvWkJoGroKA18G9m0wddvPbEqcQf5Tbt2vSc1CIgag7cXwTmoTXg==
398 |
399 | esbuild-netbsd-64@0.14.36:
400 | version "0.14.36"
401 | resolved "https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.36.tgz#e27847f6d506218291619b8c1e121ecd97628494"
402 | integrity sha512-UB2bVImxkWk4vjnP62ehFNZ73lQY1xcnL5ZNYF3x0AG+j8HgdkNF05v67YJdCIuUJpBuTyCK8LORCYo9onSW+A==
403 |
404 | esbuild-openbsd-64@0.14.36:
405 | version "0.14.36"
406 | resolved "https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.36.tgz#c94c04c557fae516872a586eae67423da6d2fabb"
407 | integrity sha512-NvGB2Chf8GxuleXRGk8e9zD3aSdRO5kLt9coTQbCg7WMGXeX471sBgh4kSg8pjx0yTXRt0MlrUDnjVYnetyivg==
408 |
409 | esbuild-sunos-64@0.14.36:
410 | version "0.14.36"
411 | resolved "https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.36.tgz#9b79febc0df65a30f1c9bd63047d1675511bf99d"
412 | integrity sha512-VkUZS5ftTSjhRjuRLp+v78auMO3PZBXu6xl4ajomGenEm2/rGuWlhFSjB7YbBNErOchj51Jb2OK8lKAo8qdmsQ==
413 |
414 | esbuild-windows-32@0.14.36:
415 | version "0.14.36"
416 | resolved "https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.14.36.tgz#910d11936c8d2122ffdd3275e5b28d8a4e1240ec"
417 | integrity sha512-bIar+A6hdytJjZrDxfMBUSEHHLfx3ynoEZXx/39nxy86pX/w249WZm8Bm0dtOAByAf4Z6qV0LsnTIJHiIqbw0w==
418 |
419 | esbuild-windows-64@0.14.36:
420 | version "0.14.36"
421 | resolved "https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.14.36.tgz#21b4ce8b42a4efc63f4b58ec617f1302448aad26"
422 | integrity sha512-+p4MuRZekVChAeueT1Y9LGkxrT5x7YYJxYE8ZOTcEfeUUN43vktSn6hUNsvxzzATrSgq5QqRdllkVBxWZg7KqQ==
423 |
424 | esbuild-windows-arm64@0.14.36:
425 | version "0.14.36"
426 | resolved "https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.36.tgz#ba21546fecb7297667d0052d00150de22c044b24"
427 | integrity sha512-fBB4WlDqV1m18EF/aheGYQkQZHfPHiHJSBYzXIo8yKehek+0BtBwo/4PNwKGJ5T0YK0oc8pBKjgwPbzSrPLb+Q==
428 |
429 | esbuild@^0.14.14, esbuild@^0.14.27:
430 | version "0.14.36"
431 | resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.14.36.tgz#0023a73eab57886ac5605df16ee421e471a971b3"
432 | integrity sha512-HhFHPiRXGYOCRlrhpiVDYKcFJRdO0sBElZ668M4lh2ER0YgnkLxECuFe7uWCf23FrcLc59Pqr7dHkTqmRPDHmw==
433 | optionalDependencies:
434 | esbuild-android-64 "0.14.36"
435 | esbuild-android-arm64 "0.14.36"
436 | esbuild-darwin-64 "0.14.36"
437 | esbuild-darwin-arm64 "0.14.36"
438 | esbuild-freebsd-64 "0.14.36"
439 | esbuild-freebsd-arm64 "0.14.36"
440 | esbuild-linux-32 "0.14.36"
441 | esbuild-linux-64 "0.14.36"
442 | esbuild-linux-arm "0.14.36"
443 | esbuild-linux-arm64 "0.14.36"
444 | esbuild-linux-mips64le "0.14.36"
445 | esbuild-linux-ppc64le "0.14.36"
446 | esbuild-linux-riscv64 "0.14.36"
447 | esbuild-linux-s390x "0.14.36"
448 | esbuild-netbsd-64 "0.14.36"
449 | esbuild-openbsd-64 "0.14.36"
450 | esbuild-sunos-64 "0.14.36"
451 | esbuild-windows-32 "0.14.36"
452 | esbuild-windows-64 "0.14.36"
453 | esbuild-windows-arm64 "0.14.36"
454 |
455 | estree-walker@^2.0.1, estree-walker@^2.0.2:
456 | version "2.0.2"
457 | resolved "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
458 | integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
459 |
460 | fast-glob@^3.2.11:
461 | version "3.2.11"
462 | resolved "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9"
463 | integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==
464 | dependencies:
465 | "@nodelib/fs.stat" "^2.0.2"
466 | "@nodelib/fs.walk" "^1.2.3"
467 | glob-parent "^5.1.2"
468 | merge2 "^1.3.0"
469 | micromatch "^4.0.4"
470 |
471 | fastq@^1.6.0:
472 | version "1.13.0"
473 | resolved "https://registry.npmmirror.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c"
474 | integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==
475 | dependencies:
476 | reusify "^1.0.4"
477 |
478 | fill-range@^7.0.1:
479 | version "7.0.1"
480 | resolved "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
481 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
482 | dependencies:
483 | to-regex-range "^5.0.1"
484 |
485 | fsevents@~2.3.2:
486 | version "2.3.2"
487 | resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
488 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
489 |
490 | function-bind@^1.1.1:
491 | version "1.1.1"
492 | resolved "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
493 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
494 |
495 | glob-parent@^5.1.2, glob-parent@~5.1.2:
496 | version "5.1.2"
497 | resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
498 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
499 | dependencies:
500 | is-glob "^4.0.1"
501 |
502 | graceful-fs@^4.1.2:
503 | version "4.2.10"
504 | resolved "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c"
505 | integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==
506 |
507 | has@^1.0.3:
508 | version "1.0.3"
509 | resolved "https://registry.npmmirror.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
510 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
511 | dependencies:
512 | function-bind "^1.1.1"
513 |
514 | iconv-lite@^0.4.4:
515 | version "0.4.24"
516 | resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
517 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
518 | dependencies:
519 | safer-buffer ">= 2.1.2 < 3"
520 |
521 | image-size@~0.5.0:
522 | version "0.5.5"
523 | resolved "https://registry.npmmirror.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c"
524 | integrity sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==
525 |
526 | is-binary-path@~2.1.0:
527 | version "2.1.0"
528 | resolved "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
529 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
530 | dependencies:
531 | binary-extensions "^2.0.0"
532 |
533 | is-core-module@^2.8.1:
534 | version "2.8.1"
535 | resolved "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211"
536 | integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==
537 | dependencies:
538 | has "^1.0.3"
539 |
540 | is-extglob@^2.1.1:
541 | version "2.1.1"
542 | resolved "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
543 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
544 |
545 | is-glob@^4.0.1, is-glob@~4.0.1:
546 | version "4.0.3"
547 | resolved "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
548 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
549 | dependencies:
550 | is-extglob "^2.1.1"
551 |
552 | is-number@^7.0.0:
553 | version "7.0.0"
554 | resolved "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
555 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
556 |
557 | is-plain-object@3.0.1:
558 | version "3.0.1"
559 | resolved "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-3.0.1.tgz#662d92d24c0aa4302407b0d45d21f2251c85f85b"
560 | integrity sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==
561 |
562 | is-what@^3.14.1:
563 | version "3.14.1"
564 | resolved "https://registry.npmmirror.com/is-what/-/is-what-3.14.1.tgz#e1222f46ddda85dead0fd1c9df131760e77755c1"
565 | integrity sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==
566 |
567 | "js-tokens@^3.0.0 || ^4.0.0":
568 | version "4.0.0"
569 | resolved "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
570 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
571 |
572 | less@^4.1.1:
573 | version "4.1.2"
574 | resolved "https://registry.npmmirror.com/less/-/less-4.1.2.tgz#6099ee584999750c2624b65f80145f8674e4b4b0"
575 | integrity sha512-EoQp/Et7OSOVu0aJknJOtlXZsnr8XE8KwuzTHOLeVSEx8pVWUICc8Q0VYRHgzyjX78nMEyC/oztWFbgyhtNfDA==
576 | dependencies:
577 | copy-anything "^2.0.1"
578 | parse-node-version "^1.0.1"
579 | tslib "^2.3.0"
580 | optionalDependencies:
581 | errno "^0.1.1"
582 | graceful-fs "^4.1.2"
583 | image-size "~0.5.0"
584 | make-dir "^2.1.0"
585 | mime "^1.4.1"
586 | needle "^2.5.2"
587 | source-map "~0.6.0"
588 |
589 | local-pkg@^0.4.1:
590 | version "0.4.1"
591 | resolved "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.4.1.tgz#e7b0d7aa0b9c498a1110a5ac5b00ba66ef38cfff"
592 | integrity sha512-lL87ytIGP2FU5PWwNDo0w3WhIo2gopIAxPg9RxDYF7m4rr5ahuZxP22xnJHIvaLTe4Z9P6uKKY2UHiwyB4pcrw==
593 |
594 | lodash-es@^4.17.15:
595 | version "4.17.21"
596 | resolved "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee"
597 | integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
598 |
599 | lodash@^4.17.21:
600 | version "4.17.21"
601 | resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
602 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
603 |
604 | loose-envify@^1.0.0:
605 | version "1.4.0"
606 | resolved "https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
607 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
608 | dependencies:
609 | js-tokens "^3.0.0 || ^4.0.0"
610 |
611 | magic-string@^0.25.7:
612 | version "0.25.9"
613 | resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c"
614 | integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==
615 | dependencies:
616 | sourcemap-codec "^1.4.8"
617 |
618 | magic-string@^0.26.1:
619 | version "0.26.1"
620 | resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.26.1.tgz#ba9b651354fa9512474199acecf9c6dbe93f97fd"
621 | integrity sha512-ndThHmvgtieXe8J/VGPjG+Apu7v7ItcD5mhEIvOscWjPF/ccOiLxHaSuCAS2G+3x4GKsAbT8u7zdyamupui8Tg==
622 | dependencies:
623 | sourcemap-codec "^1.4.8"
624 |
625 | make-dir@^2.1.0:
626 | version "2.1.0"
627 | resolved "https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
628 | integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==
629 | dependencies:
630 | pify "^4.0.1"
631 | semver "^5.6.0"
632 |
633 | merge2@^1.3.0:
634 | version "1.4.1"
635 | resolved "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
636 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
637 |
638 | micromatch@^4.0.4:
639 | version "4.0.5"
640 | resolved "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
641 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
642 | dependencies:
643 | braces "^3.0.2"
644 | picomatch "^2.3.1"
645 |
646 | mime@^1.4.1:
647 | version "1.6.0"
648 | resolved "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
649 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
650 |
651 | minimatch@^5.0.1:
652 | version "5.0.1"
653 | resolved "https://registry.npmmirror.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b"
654 | integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==
655 | dependencies:
656 | brace-expansion "^2.0.1"
657 |
658 | ms@2.1.2:
659 | version "2.1.2"
660 | resolved "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
661 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
662 |
663 | ms@^2.1.1:
664 | version "2.1.3"
665 | resolved "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
666 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
667 |
668 | nanoid@^3.3.1:
669 | version "3.3.2"
670 | resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.2.tgz#c89622fafb4381cd221421c69ec58547a1eec557"
671 | integrity sha512-CuHBogktKwpm5g2sRgv83jEy2ijFzBwMoYA60orPDR7ynsLijJDqgsi4RDGj3OJpy3Ieb+LYwiRmIOGyytgITA==
672 |
673 | nanopop@^2.1.0:
674 | version "2.1.0"
675 | resolved "https://registry.npmmirror.com/nanopop/-/nanopop-2.1.0.tgz#23476513cee2405888afd2e8a4b54066b70b9e60"
676 | integrity sha512-jGTwpFRexSH+fxappnGQtN9dspgE2ipa1aOjtR24igG0pv6JCxImIAmrLRHX+zUF5+1wtsFVbKyfP51kIGAVNw==
677 |
678 | needle@^2.5.2:
679 | version "2.9.1"
680 | resolved "https://registry.npmmirror.com/needle/-/needle-2.9.1.tgz#22d1dffbe3490c2b83e301f7709b6736cd8f2684"
681 | integrity sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==
682 | dependencies:
683 | debug "^3.2.6"
684 | iconv-lite "^0.4.4"
685 | sax "^1.2.4"
686 |
687 | normalize-path@^3.0.0, normalize-path@~3.0.0:
688 | version "3.0.0"
689 | resolved "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
690 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
691 |
692 | parse-node-version@^1.0.1:
693 | version "1.0.1"
694 | resolved "https://registry.npmmirror.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b"
695 | integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==
696 |
697 | path-parse@^1.0.7:
698 | version "1.0.7"
699 | resolved "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
700 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
701 |
702 | picocolors@^1.0.0:
703 | version "1.0.0"
704 | resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
705 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
706 |
707 | picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1:
708 | version "2.3.1"
709 | resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
710 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
711 |
712 | pify@^4.0.1:
713 | version "4.0.1"
714 | resolved "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
715 | integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
716 |
717 | pinia@^2.0.13:
718 | version "2.0.13"
719 | resolved "https://registry.npmmirror.com/pinia/-/pinia-2.0.13.tgz#6656fc290dae120a9f0cb2f5c520df400d41b8c5"
720 | integrity sha512-B7rSqm1xNpwcPMnqns8/gVBfbbi7lWTByzS6aPZ4JOXSJD4Y531rZHDCoYWBwLyHY/8hWnXljgiXp6rRyrofcw==
721 | dependencies:
722 | "@vue/devtools-api" "^6.1.4"
723 | vue-demi "*"
724 |
725 | postcss@^8.1.10, postcss@^8.4.12:
726 | version "8.4.12"
727 | resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.12.tgz#1e7de78733b28970fa4743f7da6f3763648b1905"
728 | integrity sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==
729 | dependencies:
730 | nanoid "^3.3.1"
731 | picocolors "^1.0.0"
732 | source-map-js "^1.0.2"
733 |
734 | prr@~1.0.1:
735 | version "1.0.1"
736 | resolved "https://registry.npmmirror.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
737 | integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==
738 |
739 | queue-microtask@^1.2.2:
740 | version "1.2.3"
741 | resolved "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
742 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
743 |
744 | readdirp@~3.6.0:
745 | version "3.6.0"
746 | resolved "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
747 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
748 | dependencies:
749 | picomatch "^2.2.1"
750 |
751 | regenerator-runtime@^0.13.4:
752 | version "0.13.9"
753 | resolved "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52"
754 | integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==
755 |
756 | resize-observer-polyfill@^1.5.1:
757 | version "1.5.1"
758 | resolved "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464"
759 | integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==
760 |
761 | resolve@^1.22.0:
762 | version "1.22.0"
763 | resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198"
764 | integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==
765 | dependencies:
766 | is-core-module "^2.8.1"
767 | path-parse "^1.0.7"
768 | supports-preserve-symlinks-flag "^1.0.0"
769 |
770 | reusify@^1.0.4:
771 | version "1.0.4"
772 | resolved "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
773 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
774 |
775 | rollup@^2.59.0:
776 | version "2.70.2"
777 | resolved "https://registry.npmmirror.com/rollup/-/rollup-2.70.2.tgz#808d206a8851628a065097b7ba2053bd83ba0c0d"
778 | integrity sha512-EitogNZnfku65I1DD5Mxe8JYRUCy0hkK5X84IlDtUs+O6JRMpRciXTzyCUuX11b5L5pvjH+OmFXiQ3XjabcXgg==
779 | optionalDependencies:
780 | fsevents "~2.3.2"
781 |
782 | run-parallel@^1.1.9:
783 | version "1.2.0"
784 | resolved "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
785 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
786 | dependencies:
787 | queue-microtask "^1.2.2"
788 |
789 | "safer-buffer@>= 2.1.2 < 3":
790 | version "2.1.2"
791 | resolved "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
792 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
793 |
794 | sax@^1.2.4:
795 | version "1.2.4"
796 | resolved "https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
797 | integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
798 |
799 | scroll-into-view-if-needed@^2.2.25:
800 | version "2.2.29"
801 | resolved "https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.29.tgz#551791a84b7e2287706511f8c68161e4990ab885"
802 | integrity sha512-hxpAR6AN+Gh53AdAimHM6C8oTN1ppwVZITihix+WqalywBeFcQ6LdQP5ABNl26nX8GTEL7VT+b8lKpdqq65wXg==
803 | dependencies:
804 | compute-scroll-into-view "^1.0.17"
805 |
806 | semver@^5.6.0:
807 | version "5.7.1"
808 | resolved "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
809 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
810 |
811 | shallow-equal@^1.0.0:
812 | version "1.2.1"
813 | resolved "https://registry.npmmirror.com/shallow-equal/-/shallow-equal-1.2.1.tgz#4c16abfa56043aa20d050324efa68940b0da79da"
814 | integrity sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==
815 |
816 | source-map-js@^1.0.2:
817 | version "1.0.2"
818 | resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
819 | integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
820 |
821 | source-map@^0.6.1, source-map@~0.6.0:
822 | version "0.6.1"
823 | resolved "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
824 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
825 |
826 | sourcemap-codec@^1.4.8:
827 | version "1.4.8"
828 | resolved "https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4"
829 | integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==
830 |
831 | supports-preserve-symlinks-flag@^1.0.0:
832 | version "1.0.0"
833 | resolved "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
834 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
835 |
836 | to-regex-range@^5.0.1:
837 | version "5.0.1"
838 | resolved "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
839 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
840 | dependencies:
841 | is-number "^7.0.0"
842 |
843 | tslib@^2.3.0:
844 | version "2.3.1"
845 | resolved "https://registry.npmmirror.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01"
846 | integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==
847 |
848 | unplugin-vue-components@^0.19.0:
849 | version "0.19.3"
850 | resolved "https://registry.npmmirror.com/unplugin-vue-components/-/unplugin-vue-components-0.19.3.tgz#4c0aa419d118aee1c010d0da9d38ead45e735d63"
851 | integrity sha512-z/kpYJnqrJuWglDNs7fy0YRHr41oLc07y2TkP3by6DqPb1GG9xGC9SFigeFwd4J7GVTqyFVsnjoeup7uK7I2dA==
852 | dependencies:
853 | "@antfu/utils" "^0.5.0"
854 | "@rollup/pluginutils" "^4.2.0"
855 | chokidar "^3.5.3"
856 | debug "^4.3.4"
857 | fast-glob "^3.2.11"
858 | local-pkg "^0.4.1"
859 | magic-string "^0.26.1"
860 | minimatch "^5.0.1"
861 | resolve "^1.22.0"
862 | unplugin "^0.6.1"
863 |
864 | unplugin@^0.6.1:
865 | version "0.6.2"
866 | resolved "https://registry.npmmirror.com/unplugin/-/unplugin-0.6.2.tgz#5646829e7f8a664c8a4498654f258dc6ad3ebf1f"
867 | integrity sha512-+QONc2uBFQbeo4x5mlJHjTKjR6pmuchMpGVrWhwdGFFMb4ttFZ4E9KqhOOrNcm3Q8NNyB1vJ4s5e36IZC7UWYw==
868 | dependencies:
869 | chokidar "^3.5.3"
870 | webpack-sources "^3.2.3"
871 | webpack-virtual-modules "^0.4.3"
872 |
873 | vite@^2.9.5:
874 | version "2.9.5"
875 | resolved "https://registry.npmmirror.com/vite/-/vite-2.9.5.tgz#08ef37ac7a6d879c96f328b791732c9a00ea25ea"
876 | integrity sha512-dvMN64X2YEQgSXF1lYabKXw3BbN6e+BL67+P3Vy4MacnY+UzT1AfkHiioFSi9+uiDUiaDy7Ax/LQqivk6orilg==
877 | dependencies:
878 | esbuild "^0.14.27"
879 | postcss "^8.4.12"
880 | resolve "^1.22.0"
881 | rollup "^2.59.0"
882 | optionalDependencies:
883 | fsevents "~2.3.2"
884 |
885 | vue-demi@*:
886 | version "0.12.5"
887 | resolved "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.12.5.tgz#8eeed566a7d86eb090209a11723f887d28aeb2d1"
888 | integrity sha512-BREuTgTYlUr0zw0EZn3hnhC3I6gPWv+Kwh4MCih6QcAeaTlaIX0DwOVN0wHej7hSvDPecz4jygy/idsgKfW58Q==
889 |
890 | vue-types@^3.0.0:
891 | version "3.0.2"
892 | resolved "https://registry.npmmirror.com/vue-types/-/vue-types-3.0.2.tgz#ec16e05d412c038262fc1efa4ceb9647e7fb601d"
893 | integrity sha512-IwUC0Aq2zwaXqy74h4WCvFCUtoV0iSWr0snWnE9TnU18S66GAQyqQbRf2qfJtUuiFsBf6qp0MEwdonlwznlcrw==
894 | dependencies:
895 | is-plain-object "3.0.1"
896 |
897 | vue@^3.0.5:
898 | version "3.2.33"
899 | resolved "https://registry.npmmirror.com/vue/-/vue-3.2.33.tgz#7867eb16a3293a28c4d190a837bc447878bd64c2"
900 | integrity sha512-si1ExAlDUrLSIg/V7D/GgA4twJwfsfgG+t9w10z38HhL/HA07132pUQ2KuwAo8qbCyMJ9e6OqrmWrOCr+jW7ZQ==
901 | dependencies:
902 | "@vue/compiler-dom" "3.2.33"
903 | "@vue/compiler-sfc" "3.2.33"
904 | "@vue/runtime-dom" "3.2.33"
905 | "@vue/server-renderer" "3.2.33"
906 | "@vue/shared" "3.2.33"
907 |
908 | warning@^4.0.0:
909 | version "4.0.3"
910 | resolved "https://registry.npmmirror.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3"
911 | integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==
912 | dependencies:
913 | loose-envify "^1.0.0"
914 |
915 | webpack-sources@^3.2.3:
916 | version "3.2.3"
917 | resolved "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde"
918 | integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==
919 |
920 | webpack-virtual-modules@^0.4.3:
921 | version "0.4.3"
922 | resolved "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.4.3.tgz#cd597c6d51d5a5ecb473eea1983a58fa8a17ded9"
923 | integrity sha512-5NUqC2JquIL2pBAAo/VfBP6KuGkHIZQXW/lNKupLPfhViwh8wNsu0BObtl09yuKZszeEUfbXz8xhrHvSG16Nqw==
924 |
--------------------------------------------------------------------------------