├── 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 | 23 | 24 | -------------------------------------------------------------------------------- /src/components/StopIcon.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | -------------------------------------------------------------------------------- /src/components/PlayIcon.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | -------------------------------------------------------------------------------- /src/components/PauseIcon.vue: -------------------------------------------------------------------------------- 1 | 26 | 27 | 30 | -------------------------------------------------------------------------------- /src/components/OpenIcon.vue: -------------------------------------------------------------------------------- 1 | 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 | 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 | 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 | 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 | --------------------------------------------------------------------------------