├── public
├── popup
│ ├── popup.html
│ └── popup.js
├── imgs
│ └── icon.png
├── fonts
│ ├── jbt.woff2
│ ├── iconfont.ttf
│ ├── iconfont.woff
│ ├── iconfont.woff2
│ └── iconfont.css
├── manifest-Firefox.json
└── manifest.json
├── bunfig.toml
├── .gitignore
├── src
├── liteapp.js
├── router
│ └── index.js
├── main.js
├── js
│ ├── helper.js
│ ├── spectrum.js
│ ├── users.js
│ └── api.js
├── components
│ ├── UserCard.vue
│ ├── Spectrum.vue
│ ├── AppHead.vue
│ ├── Login.vue
│ └── LiteList.vue
├── App.vue
├── LiteApp.vue
└── pages
│ ├── Uploader.vue
│ └── List.vue
├── README.md
├── PrivacyPolicy.md
├── lite.html
├── index.html
├── LICENSE
├── package.json
├── vite.config.js
└── bun.lock
/public/popup/popup.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/bunfig.toml:
--------------------------------------------------------------------------------
1 | [install]
2 | registry = "https://registry.npmmirror.com"
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | logs
2 | *.log
3 | node_modules
4 | dist
5 | *.local
6 | .vscode
7 | .DS_Store
8 |
--------------------------------------------------------------------------------
/public/imgs/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ydq/netease-cloud-disk-music-upload/HEAD/public/imgs/icon.png
--------------------------------------------------------------------------------
/public/fonts/jbt.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ydq/netease-cloud-disk-music-upload/HEAD/public/fonts/jbt.woff2
--------------------------------------------------------------------------------
/public/fonts/iconfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ydq/netease-cloud-disk-music-upload/HEAD/public/fonts/iconfont.ttf
--------------------------------------------------------------------------------
/public/fonts/iconfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ydq/netease-cloud-disk-music-upload/HEAD/public/fonts/iconfont.woff
--------------------------------------------------------------------------------
/public/fonts/iconfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ydq/netease-cloud-disk-music-upload/HEAD/public/fonts/iconfont.woff2
--------------------------------------------------------------------------------
/src/liteapp.js:
--------------------------------------------------------------------------------
1 | import { createApp } from 'vue'
2 | import App from '/src/LiteApp.vue'
3 | import 'ant-design-vue/dist/reset.css'
4 |
5 | const app = createApp(App)
6 |
7 | app.mount('#app')
8 |
--------------------------------------------------------------------------------
/src/router/index.js:
--------------------------------------------------------------------------------
1 | import { createRouter, createWebHashHistory } from 'vue-router/auto'
2 | import { routes } from 'vue-router/auto-routes'
3 |
4 | export default createRouter({
5 | history: createWebHashHistory(),
6 | routes
7 | })
--------------------------------------------------------------------------------
/src/main.js:
--------------------------------------------------------------------------------
1 | import { createApp } from 'vue'
2 | import App from '/src/App.vue'
3 | import router from '/src/router'
4 | import 'ant-design-vue/dist/reset.css'
5 |
6 |
7 | createApp(App)
8 | .use(router)
9 | .mount('#app')
10 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Update : 网易云音乐Mac版 3.x 已经原生支持上传了,此插件没有意义了,江湖再见~
2 |
3 | - [Google Chrome 应用商店](https://chromewebstore.google.com/detail/网易云音乐云盘管理/gnfemfddeadngnfhcpbdhlgbbnokokcg)
4 | - [Firefox 应用商店](https://addons.mozilla.org/zh-CN/firefox/addon/网易云音乐云盘管理/)
5 |
--------------------------------------------------------------------------------
/public/popup/popup.js:
--------------------------------------------------------------------------------
1 | const page = `../${/Android|iPhone|iPad/i.test(navigator.userAgent)?'lite':'index'}.html`
2 | if(window.open(page,'ncu')){
3 | //chrome|edge
4 | window.close()
5 | } else{
6 | //firefox
7 | browser.tabs.create({url: page},()=> window.close())
8 | }
--------------------------------------------------------------------------------
/PrivacyPolicy.md:
--------------------------------------------------------------------------------
1 | ## Privacy Policy 隐私政策
2 |
3 | 1. 本插件自身 **不收集您的任何隐私信息**,所有源码均在本软件仓库公开,插件所有索取的权限请查阅 [MANIFEST](./public/manifest.json) 清单。
4 |
5 | 2. 基于插件本身的作用和用途,在使用过程中,会使用由网易公司旗下的网易云音乐(music.163.com)提供的接口和服务,由此您所使用的基于网易云音乐本身的服务所产生的行为和隐私 **有可能会被网易(163.com)公司所收集和使用**,请您悉知。本插件无法对您使用网易云音乐的服务所产生的隐私数据承担任何风险和责任,如您不同意或者对此有疑问,请停止使用本插件。
6 |
--------------------------------------------------------------------------------
/lite.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | 网易云音乐云盘管理Lite
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | 网易云音乐云盘管理
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/public/manifest-Firefox.json:
--------------------------------------------------------------------------------
1 | {
2 | "manifest_version": 2,
3 | "name": "网易云音乐云盘管理",
4 | "description": "网易云音乐云盘管理,支持本地音乐上传至网易云盘",
5 | "version": "2.2",
6 | "author": "darren",
7 | "icons": {
8 | "32": "imgs/icon.png",
9 | "48": "imgs/icon.png"
10 | },
11 | "browser_action": {
12 | "default_popup": "popup/popup.html"
13 | },
14 | "permissions": [
15 | "*://*.music.163.com/*",
16 | "cookies"
17 | ]
18 | }
--------------------------------------------------------------------------------
/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "manifest_version": 3,
3 | "name": "网易云音乐云盘管理",
4 | "description": "网易云音乐云盘管理,支持本地音乐上传至网易云盘",
5 | "version": "2.2",
6 | "author": "darren",
7 | "icons": {
8 | "32": "imgs/icon.png",
9 | "48": "imgs/icon.png"
10 | },
11 | "action": {
12 | "default_popup": "popup/popup.html"
13 | },
14 | "host_permissions": [
15 | "*://*.music.163.com/*"
16 | ],
17 | "permissions": [
18 | "cookies"
19 | ]
20 | }
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
2 | Version 2, December 2004
3 |
4 | Copyright (C) 2022 Darren
5 |
6 | Everyone is permitted to copy and distribute verbatim or modified
7 | copies of this license document, and changing it is allowed as long
8 | as the name is changed.
9 |
10 | DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
11 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
12 |
13 | 0. You just DO WHAT THE FUCK YOU WANT TO.
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "netease-cloud-disk-music-upload",
3 | "private": true,
4 | "version": "0.0.0",
5 | "type": "module",
6 | "scripts": {
7 | "dev": "NODE_ENV=development vite build --mode watch",
8 | "build": "NODE_ENV=production vite build"
9 | },
10 | "dependencies": {
11 | "ant-design-vue": "^4.2.6",
12 | "axios": "^1.7.9",
13 | "buffer": "^6.0.3",
14 | "music-metadata": "^10.9.1",
15 | "spark-md5": "^3.0.2",
16 | "vue": "^3.5.13",
17 | "vue-router": "^4.5.0"
18 | },
19 | "devDependencies": {
20 | "@vitejs/plugin-vue": "^5.2.1",
21 | "events": "^3.3.0",
22 | "stream": "^0.0.3",
23 | "unplugin-vue-components": "^0.28.0",
24 | "unplugin-vue-router": "^0.10.9",
25 | "vite": "^6.1.1"
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/public/fonts/iconfont.css:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: "icon"; /* Project id 4837058 */
3 | src: url('iconfont.woff2?t=1740392592108') format('woff2'),
4 | url('iconfont.woff?t=1740392592108') format('woff'),
5 | url('iconfont.ttf?t=1740392592108') format('truetype');
6 | }
7 |
8 | .icon {
9 | font-family: "icon" !important;
10 | font-size: 16px;
11 | font-style: normal;
12 | -webkit-font-smoothing: antialiased;
13 | -moz-osx-font-smoothing: grayscale;
14 | }
15 |
16 | .icon-back:before {
17 | content: "\e6f3";
18 | }
19 |
20 | .icon-ok:before {
21 | content: "\e6af";
22 | }
23 |
24 | .icon-download:before {
25 | content: "\e73a";
26 | }
27 |
28 | .icon-link:before {
29 | content: "\e674";
30 | }
31 |
32 | .icon-reload:before {
33 | content: "\e631";
34 | }
35 |
36 | .icon-delete:before {
37 | content: "\e61c";
38 | }
39 |
40 | .icon-setting:before {
41 | content: "\e61d";
42 | }
43 |
44 | .icon-edit:before {
45 | content: "\e64c";
46 | }
47 |
48 | .icon-upload:before {
49 | content: "\e603";
50 | }
51 |
52 |
--------------------------------------------------------------------------------
/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 VueRouter from 'unplugin-vue-router/vite'
6 |
7 | const commonCfg = defineConfig({
8 | resolve: {
9 | alias: {
10 | 'node:buffer': 'buffer',
11 | 'node:stream': 'stream',
12 | }
13 | },
14 | plugins: [
15 | VueRouter(),
16 | vue(),
17 | Components({
18 | resolvers: [
19 | AntDesignVueResolver({importStyle:false}),
20 | ],
21 | }),
22 | ],
23 | build: {
24 | chunkSizeWarningLimit: 2048, //这是浏览器插件,没必要限制单文件大小
25 | rollupOptions: {
26 | input:{
27 | default: 'index.html',
28 | lite: 'lite.html',
29 | }
30 | }
31 | }
32 | })
33 |
34 | export default ({ command, mode }) => {
35 | if (command === 'build' && mode === 'watch') {
36 | commonCfg.build ??= {}
37 | commonCfg.build.watch ??= {}
38 | }
39 | return commonCfg
40 | }
--------------------------------------------------------------------------------
/src/js/helper.js:
--------------------------------------------------------------------------------
1 | import { ArrayBuffer as MD5 } from 'spark-md5'
2 |
3 |
4 | const file2ArrayBuffer = file => {
5 | return new Promise((resolve, reject) => {
6 | const reader = new FileReader()
7 | reader.onload = e => resolve(e.target.result)
8 | reader.onerror = reject
9 | reader.readAsArrayBuffer(file)
10 | })
11 | }
12 |
13 | const calcFileMd5 = async (file, isRetry) => {
14 | let data = await file2ArrayBuffer(file)
15 | if (isRetry) {
16 | data = data.transfer(data.maxByteLength + 1)
17 | }
18 | return MD5.hash(data)
19 | }
20 |
21 | const filterList = (data, filterKw,filterFn=_=>true) => {
22 | if (filterKw) {
23 | //全局忽略大小写分字搜索,支持 输入 “hloy” 命中匹配 “Hello How Are You”
24 | data = data.filter(record => {
25 | //标题、歌手、专辑 分开匹配,不能标题命中第一个搜索字,歌手命中第二个搜索字
26 | let searchs = record.search.split('@@')
27 | let arrs = filterKw.split('')
28 | out: for (let s of searchs) {
29 | let idx = -1
30 | for (let c of arrs) {
31 | if ((idx = s.indexOf(c, idx + 1)) == -1) {
32 | continue out
33 | }
34 | }
35 | return filterFn(record)
36 | }
37 | return false
38 | })
39 | }
40 | return data.filter(filterFn)
41 | }
42 |
43 | export { file2ArrayBuffer, calcFileMd5, filterList }
--------------------------------------------------------------------------------
/src/components/UserCard.vue:
--------------------------------------------------------------------------------
1 |
32 |
33 |
34 |
35 |
36 |
{{ props.user.name }}
37 |
38 |
快速登录
39 |
40 |
删除记录
41 |
42 |
43 |
44 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/src/components/Spectrum.vue:
--------------------------------------------------------------------------------
1 |
48 |
49 |
51 |
52 |
--------------------------------------------------------------------------------
/src/components/AppHead.vue:
--------------------------------------------------------------------------------
1 |
38 |
39 | player.stop()">
44 |
45 |
46 | 🎶
48 |
49 |
50 |
51 | ♂︎
53 | ♀︎
55 |
56 |
57 |
58 |
60 | ╋
61 |
62 |
63 |
64 |
65 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
--------------------------------------------------------------------------------
/src/js/spectrum.js:
--------------------------------------------------------------------------------
1 | import { reactive } from "vue"
2 |
3 | /**
4 | * 频谱配置
5 | */
6 | const spectrum = reactive({
7 | isPlaying: false,
8 | canvasWidth: null,
9 | canvasHeight: null,
10 | ctx: null,
11 | analyser: null,
12 | gradient: null,
13 | meterNum: null,
14 | meterWidth: 6,
15 | gap: 2,
16 | capHeight: 4,
17 | capColor: '#7209d4',
18 | barColors:[[0,'#00a5b2'],[.3,'#2832d4'],[1,'#7209d4']],
19 | capYPosition: [],
20 | })
21 | /**
22 | * 初始化频谱
23 | */
24 | const spectrumInit = (audio, canvas) => {
25 | canvas.height = spectrum.canvasHeight = canvas.clientHeight * 2
26 | canvas.width = spectrum.canvasWidth = canvas.clientWidth * 2
27 | spectrum.ctx = canvas.getContext("2d")
28 | if (spectrum.analyser != null) {
29 | //已经初始化过了,无需再次初始化
30 | return
31 | }
32 | spectrum.meterNum = Math.round(spectrum.canvasWidth / (spectrum.meterWidth + spectrum.gap))
33 | let audioCtx = new AudioContext()
34 | spectrum.analyser = audioCtx.createAnalyser()
35 | audioCtx.createMediaElementSource(audio).connect(spectrum.analyser)
36 | spectrum.analyser.connect(audioCtx.destination)
37 | spectrum.gradient = spectrum.ctx.createLinearGradient(0, 0, 0, spectrum.canvasHeight)
38 | spectrum.barColors.forEach(c => {
39 | spectrum.gradient.addColorStop(c[0], c[1])
40 | })
41 | spectrum.isPlaying && spectrumRenderFrame()
42 | }
43 | /**
44 | * 循环绘制频谱
45 | */
46 | const spectrumRenderFrame = () => {
47 | spectrum.ctx.clearRect(0, 0, spectrum.canvasWidth, spectrum.canvasHeight + spectrum.capHeight)
48 | let array = new Uint8Array(spectrum.analyser.frequencyBinCount)
49 | spectrum.analyser.getByteFrequencyData(array)
50 | let step = Math.floor(array.length / spectrum.meterNum)
51 | spectrum.ctx.clearRect(0, 0, spectrum.canvasWidth, spectrum.canvasHeight)
52 | for (let i = 0; i < spectrum.meterNum; i++) {
53 | let value = (array[i * step] * spectrum.canvasHeight) / spectrum.canvasHeight
54 | if (spectrum.capYPosition.length < spectrum.meterNum)
55 | spectrum.capYPosition.push(value)
56 | spectrum.ctx.fillStyle = spectrum.capColor
57 | let xPos = i * (spectrum.meterWidth + spectrum.gap)
58 | if (value < spectrum.capYPosition[i]) {
59 | spectrum.ctx.fillRect(
60 | xPos,
61 | spectrum.canvasHeight - --spectrum.capYPosition[i],
62 | spectrum.meterWidth,
63 | spectrum.capHeight
64 | )
65 | } else {
66 | spectrum.ctx.fillRect(
67 | xPos,
68 | Math.max(0, spectrum.canvasHeight - value),
69 | spectrum.meterWidth,
70 | spectrum.capHeight
71 | )
72 | spectrum.capYPosition[i] = value
73 | }
74 | spectrum.ctx.fillStyle = spectrum.gradient
75 | spectrum.ctx.fillRect(
76 | xPos,
77 | Math.max(0, spectrum.canvasHeight - value) + spectrum.capHeight,
78 | spectrum.meterWidth,
79 | spectrum.canvasHeight
80 | )
81 | }
82 | if (spectrum.isPlaying) {
83 | requestAnimationFrame(spectrumRenderFrame)
84 | } else {
85 | spectrum.ctx.clearRect(0, 0, spectrum.canvasWidth, spectrum.canvasHeight)
86 | }
87 | }
88 |
89 | export { spectrum, spectrumInit, spectrumRenderFrame }
--------------------------------------------------------------------------------
/src/js/users.js:
--------------------------------------------------------------------------------
1 | import { userAccount } from '/src/js/api'
2 | import dayjs from 'dayjs'
3 | import 'dayjs/locale/zh-cn'
4 | dayjs.locale('zh-cn')
5 |
6 | /**
7 | * 检查登录状态,并获取用户信息
8 | */
9 | const checkLogin = async (user) => {
10 | let resp = await userAccount()
11 | if (resp.account && resp.profile) {
12 | user.id = resp.account.id
13 | user.name = resp.profile.nickname
14 | user.avatar = resp.profile.avatarUrl
15 | if (resp.profile.gender && resp.profile.birthday) {
16 | user.gender = resp.profile.gender
17 | let birthday = dayjs(resp.profile.birthday)
18 | let years = birthday.format('YY').substring(0, 1) + '0 后'
19 | let age = birthday.diff(Date.now(), 'year') * -1
20 | let call = (age < 30 ? '小' : user.gender == 1 ? '老' : '大') + (user.gender == 1 ? '哥哥' : '姐姐')
21 | user.profile = `${age} 岁的 ${years} ${call} 一枚`
22 | } else {
23 | user.gender = 0
24 | user.profile = ''
25 | }
26 | //登录成功之后记录一下当前用户登录cookie到缓存,便于浏览器清除cookie之后 还能快速登录 或者支持多账号登录
27 | await storeCurrenUser(user)
28 | return true
29 | }
30 | Object.assign(user, {
31 | id: null,
32 | avatar: '',
33 | name: '',
34 | profile: '',
35 | gender: 0
36 | })
37 | return false
38 | }
39 |
40 | /**
41 | * 保存当前cookie对应的用户信息至缓存
42 | */
43 | const storeCurrenUser = async (user) => {
44 | //获取 localStorage 中历史用户列表
45 | let users = JSON.parse(localStorage?.userList ?? '[]')
46 | //获取当前登录的用户信息
47 | let { id, name, avatar } = user
48 | //去重
49 | users.forEach((usr, idx, arr) => usr.id == id && arr.splice(idx, 1))
50 | //将当前用户保存至列表内
51 | users.unshift({ id, name, avatar })
52 | //写入缓存
53 | localStorage.userList = JSON.stringify(users)
54 |
55 | //获取当前登录用户的所有 cookie 信息
56 | let cookies = await cookieOps('getAll', { domain: 'music.163.com', path: '/' })
57 | //过滤出仅需要的 cookie 信息 并写入缓存
58 | let usefulCookie = cookies
59 | .filter(c => c.path == '/' && ['music.163.com', '.music.163.com'].includes(c?.domain ?? '-'))
60 | .map(c => {
61 | let { domain, expirationDate, httpOnly, name, path, sameSite, secure, storeId, value } = c
62 | return { domain, expirationDate, httpOnly, name, path, sameSite, secure, storeId, value, url: 'https://music.163.com' }
63 | })
64 | localStorage['userCookie-' + user.id] = JSON.stringify(usefulCookie)
65 | return usefulCookie
66 | }
67 |
68 | /**
69 | * 切换用户:保存当前用户的登录信息至缓存,并登出当前用户(便于切换另外一个账号登录)
70 | */
71 | const switchUser = async (user) => {
72 | //获取当前登录的cookie
73 | const userCookie = await storeCurrenUser(user)
74 | //执行remove cookie
75 | await Promise.all(userCookie.map(async cookie => {
76 | let { name, url } = cookie
77 | return cookieOps('remove', { name, url })
78 | }))
79 | //登出用户
80 | Object.assign(user, {
81 | id: null,
82 | avatar: '',
83 | name: '',
84 | profile: '',
85 | gender: 0
86 | })
87 | }
88 |
89 | /**
90 | * 恢复一个账号的登录状态,如果恢复失败则从历史缓存列表中清除当前用户
91 | */
92 | const resumeUser = async (currUser, assignUserId) => {
93 | await Promise.all(JSON.parse(localStorage[`userCookie-${assignUserId}`] || '[]').map(async cookie => cookieOps('set',cookie)))
94 | let check = await checkLogin(currUser)
95 | check || delUser(assignUserId)
96 | return check
97 | }
98 |
99 | const userList = (currUid) => {
100 | let users = JSON.parse(localStorage.userList || '[]')
101 | users.forEach((usr, idx, arr) => usr.id == currUid && arr.splice(idx, 1))
102 | return users
103 | }
104 |
105 |
106 | const delUser = uid => {
107 | //删除 localStorage 中历史指定用户缓存
108 | localStorage.removeItem(`userCookie-${uid}`)
109 | //获取 localStorage 中历史用户列表
110 | let users = JSON.parse(localStorage.userList || '[]')
111 | //删除要恢复的用户信息
112 | users.forEach((usr, idx, arr) => usr.id == uid && arr.splice(idx, 1))
113 | //写入缓存
114 | if (users.length > 0) {
115 | localStorage.userList = JSON.stringify(users)
116 | } else {
117 | //如果都没有用户了 那就清理本地缓存
118 | localStorage.removeItem('userList')
119 | }
120 | }
121 |
122 | /**
123 | * 兼容Firefox MV2
124 | */
125 | const cookieOps = (method, opt) => {
126 | if (/Firefox/.test(navigator.userAgent)) {
127 | //Firefox 暂不支持 mv3 需要用 callback
128 | return new Promise((resolve, reject) => {
129 | browser.cookies[method](opt, data => resolve(data))
130 | })
131 | } else {
132 | //chrome 和 Edge 支持 mv3 支持直接返回 promise
133 | return chrome.cookies[method](opt)
134 | }
135 | }
136 |
137 |
138 | export { checkLogin, switchUser, resumeUser, delUser, userList }
--------------------------------------------------------------------------------
/src/components/Login.vue:
--------------------------------------------------------------------------------
1 |
79 |
80 |
81 |
91 |
94 |
98 |
100 |
101 |
107 |
108 | 未能获取到登录用户信息
请打开 网易云音乐官网 进行登录 或 使用 二维码登录
109 |
110 |
快速登录
111 |
112 | 您曾经登录过以下账号 可以尝试快速登录
113 |
114 |
125 |
126 |
127 |
128 |
129 |
--------------------------------------------------------------------------------
/src/App.vue:
--------------------------------------------------------------------------------
1 |
95 |
96 |
97 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
231 |
--------------------------------------------------------------------------------
/src/js/api.js:
--------------------------------------------------------------------------------
1 | import axios from 'axios'
2 | import { file2ArrayBuffer } from '/src/js/helper'
3 |
4 | const instance = axios.create({
5 | timeout: 60000,
6 | headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
7 | withCredentials: 'true',
8 | responseType: 'json'
9 | })
10 |
11 | /**
12 | * 获取账号信息
13 | */
14 | const userAccount = async (data = {}) => {
15 | return (await instance.post('https://music.163.com/api/nuser/account/get', new URLSearchParams(data).toString())).data
16 | }
17 |
18 | /**
19 | * 获取网盘音乐列表
20 | */
21 | const cloudGet = async (data = { limit: 20, offset: 0 }) => {
22 | return (await instance.post('https://music.163.com/api/v1/cloud/get', new URLSearchParams(data).toString())).data
23 | }
24 |
25 | /**
26 | * 上传step1: 检查
27 | */
28 | const uploadCheck = async (data = {
29 | length: 0,
30 | md5: ''
31 | }) => {
32 | data = Object.assign({}, {
33 | bitrate: '999000',
34 | ext: '',
35 | songId: '0',
36 | version: 1,
37 | }, data)
38 | return (await instance.post('https://interface.music.163.com/api/cloud/upload/check', new URLSearchParams(data).toString())).data
39 | }
40 |
41 | /**
42 | * 上传step2: 获取token
43 | */
44 | const uploadToken = async (data = {
45 | ext: '',
46 | filename: '',
47 | md5: '',
48 | }) => {
49 | data = Object.assign({
50 | bucket: '',
51 | local: false,
52 | nos_product: 3,
53 | type: 'audio',
54 | }, data)
55 | return (await instance.post('https://music.163.com/api/nos/token/alloc', new URLSearchParams(data).toString())).data
56 | }
57 |
58 | /**
59 | * 上传step3: 上传文件(根据 step1 检查结果判断是否需要上传)
60 | * 过大的文件需要分片上传(这里经过尝试发现100M以内直接上传是安全的,过大的文件分隔成80M的分片进行上传)
61 | */
62 | const singleFileMaxSize = 100 * 1024 * 1024
63 | const chunkSize = 80 * 1024 * 1024
64 | const splitFile = async (file, start, end) => {
65 | let blobSlice = File.prototype.slice || File.prototype.webkitSlice
66 | return new Promise((resolve, reject) => {
67 | let fileReader = new FileReader()
68 | fileReader.onload = e => resolve(e.target.result)
69 | fileReader.onerror = reject
70 | fileReader.readAsArrayBuffer(blobSlice.call(file, start, end))
71 | })
72 | }
73 | const uploadFile = async (data = {
74 | file: null,
75 | md5: '',
76 | objectKey: '',
77 | token: '',
78 | }, isRetry, onUploadProgress = e => { }) => {
79 | let objectKey = data.objectKey.replace('/', '%2F')
80 | let headers = {
81 | 'x-nos-token': data.token,
82 | 'Content-MD5': data.md5,
83 | 'Content-Type': data.file.type
84 | }
85 | let totalSize = data.file.size
86 | if (totalSize < singleFileMaxSize) {
87 | //小于100M直接上传
88 | if (isRetry) {
89 | const fileBuffer = await file2ArrayBuffer(data.file)
90 | await upload(headers, fileBuffer.transfer(fileBuffer.maxByteLength + 1), objectKey, 0, true, null, onUploadProgress)
91 | } else {
92 | await upload(headers, data.file, objectKey, 0, true, null, onUploadProgress)
93 | }
94 | } else {
95 | //大于100M的文件进行分片
96 | let chunks = Math.ceil(totalSize / chunkSize)
97 | let context = ''
98 | for (let i = 0; i < chunks; i++) {
99 | let isLast = i == chunks - 1
100 | //计算文件分片的起止offset
101 | let start = i * chunkSize
102 | let end = isLast ? totalSize : (start + chunkSize)
103 | //文件分片
104 | let partData = await splitFile(data.file, i * chunkSize, end)
105 | if (isRetry && isLast) {
106 | partData = partData.transfer(partData.maxByteLength + 1)
107 | }
108 | //文件分片,进度条事件需要重写
109 | let proxyProgress = e => {
110 | let loaded = start + e.loaded
111 | onUploadProgress({ loaded, progress: loaded / totalSize, total: totalSize, upload: true })
112 | }
113 | //上传分片
114 | let resp = (await upload(headers, partData, objectKey, start, isLast, context, proxyProgress)).data
115 | //分片数据需要获取上下文 content
116 | context = resp.context || context
117 | }
118 |
119 | }
120 | }
121 | //底层的文件上传服务
122 | const upload = async (headers, data, objectKey, offset, complete, context, onUploadProgress) => {
123 | let url = `http://45.127.129.8/jd-musicrep-privatecloud-audio-public/${objectKey}?offset=${offset}&complete=${complete}&version=1.0`
124 | if (context) {
125 | url += `&context=${context}`
126 | }
127 | return await axios({
128 | method: 'post',
129 | url,
130 | headers,
131 | data,
132 | onUploadProgress
133 | })
134 | }
135 |
136 | /**
137 | * 上传step4: 修正文件信息(让客户端看起来的名字美观一些)
138 | */
139 | const cloudInfo = async (data = {
140 | md5: '文件MD5',
141 | songid: 'check接口 songId',
142 | filename: '文件名称,包含后缀',
143 | song: '歌曲名称',
144 | album: '未知专辑',
145 | artist: '未知艺术家',
146 | resourceId: 'token接口 result.resourceId ',
147 | }) => {
148 | data = Object.assign({
149 | bitrate: '999000',
150 | }, data)
151 | return (await instance.post('https://music.163.com/api/upload/cloud/info/v2', new URLSearchParams(data).toString())).data
152 | }
153 |
154 | /**
155 | * 上传step5: 保存到云盘
156 | */
157 | const cloudPub = async (data = {
158 | songid: 'check接口 songId'
159 | }) => {
160 | return (await instance.post('https://interface.music.163.com/api/cloud/pub/v2', new URLSearchParams(data).toString())).data
161 | }
162 |
163 | /**
164 | * 删除云盘歌曲
165 | */
166 | const cloudDel = async (data = { songIds: [] }) => {
167 | data.songIds = JSON.stringify(data.songIds)
168 | return (await instance.post('https://music.163.com/api/cloud/del', new URLSearchParams(data).toString())).data
169 | }
170 |
171 | /**
172 | * 获取音乐详情(格式/地址等)
173 | */
174 | const songInfo = async (data = {
175 | ids: [],
176 | }) => {
177 | data = Object.assign({
178 | level: 'standard',//standard, exhigh, lossless, hires
179 | encodeType: 'flac'
180 | }, data)
181 | data.ids = JSON.stringify(data.ids)
182 | return (await instance.post('https://interface.music.163.com/api/song/enhance/player/url/v1', new URLSearchParams(data).toString())).data
183 | }
184 |
185 |
186 | const lyric = async (data = {
187 | id: null
188 | }) => {
189 | data = Object.assign({
190 | tv: -1,
191 | lv: -1,
192 | rv: -1,
193 | kv: -1,
194 | }, data)
195 | return (await instance.post('https://music.163.com/api/song/lyric?_nmclfl=1', new URLSearchParams(data).toString())).data
196 | }
197 |
198 | const songMatch = async (data = {
199 | userId: null,
200 | songId: null,
201 | adjustSongId: null
202 | }) => {
203 | return (await instance.post('https://music.163.com/api/cloud/user/song/match', new URLSearchParams(data).toString())).data
204 | }
205 |
206 |
207 | const loginKey = async (data = { type: 1 }) => {
208 | return (await instance.post('https://music.163.com/api/login/qrcode/unikey', new URLSearchParams(data).toString())).data
209 | }
210 |
211 | const checkScan = async (data = { key: null }) => {
212 | data = Object.assign({ type: 1 }, data)
213 | return (await instance.post('https://music.163.com/api/login/qrcode/client/login', new URLSearchParams(data).toString())).data
214 | }
215 |
216 | /**
217 | * 一些可能合法的返回code(如:已经上传过的音乐再次上传,返回 201,其它 code 来自于 NeteaseCloudMusicApi )
218 | */
219 | const validCode = [200, 201, 800, 801, 802, 803]
220 |
221 |
222 | export { userAccount, cloudGet, uploadCheck, uploadToken, uploadFile, cloudInfo, cloudPub, cloudDel, songInfo, lyric, songMatch, loginKey, checkScan, validCode }
--------------------------------------------------------------------------------
/src/LiteApp.vue:
--------------------------------------------------------------------------------
1 |
202 |
203 |
204 |
205 |
206 |
208 |
209 |
213 |
224 |
226 |
227 |
228 |
229 |
230 |
231 | uploader.show = false"
234 | @ok="e => upload()"
235 | ok-text="确定上传">
236 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
246 |
247 |
248 |
249 |
250 |
251 |
--------------------------------------------------------------------------------
/src/components/LiteList.vue:
--------------------------------------------------------------------------------
1 |
180 |
181 |
182 |
183 |
184 |
188 |
189 |
190 |
191 |
196 |
197 |
198 |
199 | # 匹配
201 |
202 | × 删除
204 |
205 | ↓ 下载
208 |
209 | {{ item.dlPercent }}%
210 |
211 | ✓ 完成
212 |
213 |
214 |
215 |
217 |
218 |
219 |
221 |
222 |
223 |
226 |
227 |
228 |
229 |
230 |
231 |
235 |
237 |
238 |
239 |
242 |
243 |
244 |
245 | 利用网易云音乐中已有的歌曲信息替换网盘中的歌曲信息,以便能获取歌词、图片等信息,网盘音乐播放和下载时的音乐文件还是原来上传的文件,若想取消替换,输入0即可
246 |
247 |
248 |
249 |
250 |
--------------------------------------------------------------------------------
/src/pages/Uploader.vue:
--------------------------------------------------------------------------------
1 | {
2 | "name": "uploader",
3 | "path": "/uploader"
4 | }
5 |
283 |
284 |
290 |
291 |
uploader.sorter = sorter">
297 |
298 | 当前暂无内容
您可以直接拖放文件在此处以添加到上传列表哦
上传期间请勿切换账号,否则可能导致不可预料的后果
299 |
300 |
301 |
302 |
303 |
304 |
305 |
308 |
309 |
310 |
311 |
312 |
314 |
315 |
316 |
317 |
318 |
319 |
321 |
322 | 请注意:自动重试将在直接上传失败后会尝试强制修改您的文件数据,改变文件的校验信息,以触发网易云的强制上传,此方式在测试过程中会提升上传成功率。请放心,此操作不会修改您本地磁盘上的文件信息,但有可能会导致上传到网易云的音乐无法播放,请您上传完成后自行测试,若上传后的文件无法试听则请关闭此功能。
323 |
324 |
326 |
327 | 自动重试
328 |
329 |
330 |
331 |
332 | 上传成功自动移除
333 |
334 |
336 |
337 | 文件名作为标题
338 |
339 |
340 |
341 |
342 |
343 |
358 |
359 |
360 |
361 |
362 |
363 | {{ (record.file.size / 1024 / 1024).toFixed(1) }} MB
364 |
365 |
366 |
367 |
371 |
372 |
374 |
375 |
376 |
379 |
380 | {{ text }}
381 |
382 |
383 |
384 |
385 |
388 |
389 | {{ text }}
390 |
391 |
392 |
393 |
394 |
395 |
398 |
400 |
401 |
402 |
403 |
404 |
406 |
410 |
411 |
412 |
413 |
414 |
415 |
416 |
417 |
420 |
422 |
423 |
424 |
425 |
426 |
429 |
431 |
432 |
433 |
434 |
437 | item == record), 1)">
439 |
440 |
441 |
442 |
443 |
444 |
449 |
450 |
451 |
452 |
453 |
454 |
--------------------------------------------------------------------------------
/src/pages/List.vue:
--------------------------------------------------------------------------------
1 | {
2 | "name": "list",
3 | "path": "/list",
4 | "alias": [
5 | "/"
6 | ]
7 | }
8 |
314 |
315 | Object.assign(pagination, page)">
338 |
339 |
340 |
341 |
342 |
343 |
345 |
346 |
347 |
348 |
349 |
352 |
353 |
354 |
355 |
356 |
359 |
360 |
361 |
362 |
363 | {{ `已选择 ${cloud.selectedRowKeys.length} 项` }}
364 |
365 |
366 |
371 |
373 |
375 |
376 |
377 |
378 |
379 |
381 |
382 | 仅显示无封面
383 |
384 |
385 |
386 |
387 |
388 |
389 |
390 |
391 |
392 |
393 |
394 |
395 |
{{ cloud.currLrc }}
396 |
397 |
398 |
399 |
400 |
401 |
402 |
403 |
404 |
405 |
406 |
407 |
409 |
413 |
414 | ↓
415 | {{ percent }}
416 | ✓
417 |
418 |
419 |
420 |
421 |
422 |
423 |
426 |
427 |
429 |
430 |
431 |
434 | 🎶
437 |
438 |
439 |
440 | 标题:{{ record.songName }}
441 | 歌手:{{ record.artist }}
442 | 专辑:{{ record.album }}
443 |
444 |
445 |
446 |
447 |
448 |
453 |
454 | 🎶
456 |
457 |
458 |
459 |
460 | {{ record.songName }}
461 |
462 |
463 |
464 |
465 | {{ record.artist }}
466 |
467 |
468 |
469 |
470 | {{ record.album }}
471 |
472 |
473 |
474 | {{ (record.fileSize / 1024 / 1024).toFixed(1) }} MB
475 |
476 |
477 | {{ dateFmt(record.addTime) }}
478 |
479 |
480 |
481 |
482 |
483 | 歌曲信息匹配纠正
484 |
486 | ❓
487 |
488 |
489 |
490 |
491 |
492 |
496 |
498 |
499 |
500 |
501 |
502 |
503 |
505 |
506 |
507 |
508 |
509 |
510 |
511 |
512 |
513 |
--------------------------------------------------------------------------------
/bun.lock:
--------------------------------------------------------------------------------
1 | {
2 | "lockfileVersion": 1,
3 | "workspaces": {
4 | "": {
5 | "dependencies": {
6 | "ant-design-vue": "^4.2.6",
7 | "axios": "^1.7.9",
8 | "buffer": "^6.0.3",
9 | "music-metadata": "^10.9.1",
10 | "spark-md5": "^3.0.2",
11 | "vue": "^3.5.13",
12 | "vue-router": "^4.5.0",
13 | },
14 | "devDependencies": {
15 | "@vitejs/plugin-vue": "^5.2.1",
16 | "events": "^3.3.0",
17 | "stream": "^0.0.3",
18 | "unplugin-vue-components": "^0.28.0",
19 | "unplugin-vue-router": "^0.10.9",
20 | "vite": "^6.1.1",
21 | },
22 | },
23 | },
24 | "packages": {
25 | "@ant-design/colors": ["@ant-design/colors@6.0.0", "", { "dependencies": { "@ctrl/tinycolor": "^3.4.0" } }, "sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ=="],
26 |
27 | "@ant-design/icons-svg": ["@ant-design/icons-svg@4.4.2", "", {}, "sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA=="],
28 |
29 | "@ant-design/icons-vue": ["@ant-design/icons-vue@7.0.1", "", { "dependencies": { "@ant-design/colors": "^6.0.0", "@ant-design/icons-svg": "^4.2.1" }, "peerDependencies": { "vue": ">=3.0.3" } }, "sha512-eCqY2unfZK6Fe02AwFlDHLfoyEFreP6rBwAZMIJ1LugmfMiVgwWDYlp1YsRugaPtICYOabV1iWxXdP12u9U43Q=="],
30 |
31 | "@antfu/utils": ["@antfu/utils@0.7.10", "https://registry.npmmirror.com/@antfu/utils/-/utils-0.7.10.tgz", {}, "sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww=="],
32 |
33 | "@babel/helper-string-parser": ["@babel/helper-string-parser@7.25.9", "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", {}, "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="],
34 |
35 | "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="],
36 |
37 | "@babel/parser": ["@babel/parser@7.26.3", "https://registry.npmmirror.com/@babel/parser/-/parser-7.26.3.tgz", { "dependencies": { "@babel/types": "^7.26.3" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA=="],
38 |
39 | "@babel/runtime": ["@babel/runtime@7.24.1", "", { "dependencies": { "regenerator-runtime": "^0.14.0" } }, "sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ=="],
40 |
41 | "@babel/types": ["@babel/types@7.26.3", "https://registry.npmmirror.com/@babel/types/-/types-7.26.3.tgz", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA=="],
42 |
43 | "@ctrl/tinycolor": ["@ctrl/tinycolor@3.6.1", "", {}, "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA=="],
44 |
45 | "@emotion/hash": ["@emotion/hash@0.9.1", "", {}, "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ=="],
46 |
47 | "@emotion/unitless": ["@emotion/unitless@0.8.1", "", {}, "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ=="],
48 |
49 | "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.24.2", "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz", { "os": "aix", "cpu": "ppc64" }, "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA=="],
50 |
51 | "@esbuild/android-arm": ["@esbuild/android-arm@0.24.2", "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.24.2.tgz", { "os": "android", "cpu": "arm" }, "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q=="],
52 |
53 | "@esbuild/android-arm64": ["@esbuild/android-arm64@0.24.2", "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz", { "os": "android", "cpu": "arm64" }, "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg=="],
54 |
55 | "@esbuild/android-x64": ["@esbuild/android-x64@0.24.2", "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.24.2.tgz", { "os": "android", "cpu": "x64" }, "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw=="],
56 |
57 | "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.24.2", "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz", { "os": "darwin", "cpu": "arm64" }, "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA=="],
58 |
59 | "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.24.2", "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz", { "os": "darwin", "cpu": "x64" }, "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA=="],
60 |
61 | "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.24.2", "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz", { "os": "freebsd", "cpu": "arm64" }, "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg=="],
62 |
63 | "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.24.2", "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz", { "os": "freebsd", "cpu": "x64" }, "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q=="],
64 |
65 | "@esbuild/linux-arm": ["@esbuild/linux-arm@0.24.2", "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz", { "os": "linux", "cpu": "arm" }, "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA=="],
66 |
67 | "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.24.2", "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz", { "os": "linux", "cpu": "arm64" }, "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg=="],
68 |
69 | "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.24.2", "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz", { "os": "linux", "cpu": "ia32" }, "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw=="],
70 |
71 | "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.24.2", "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz", { "os": "linux", "cpu": "none" }, "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ=="],
72 |
73 | "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.24.2", "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz", { "os": "linux", "cpu": "none" }, "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw=="],
74 |
75 | "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.24.2", "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz", { "os": "linux", "cpu": "ppc64" }, "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw=="],
76 |
77 | "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.24.2", "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz", { "os": "linux", "cpu": "none" }, "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q=="],
78 |
79 | "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.24.2", "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz", { "os": "linux", "cpu": "s390x" }, "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw=="],
80 |
81 | "@esbuild/linux-x64": ["@esbuild/linux-x64@0.24.2", "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz", { "os": "linux", "cpu": "x64" }, "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q=="],
82 |
83 | "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.24.2", "https://registry.npmmirror.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz", { "os": "none", "cpu": "arm64" }, "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw=="],
84 |
85 | "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.24.2", "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz", { "os": "none", "cpu": "x64" }, "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw=="],
86 |
87 | "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.24.2", "https://registry.npmmirror.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz", { "os": "openbsd", "cpu": "arm64" }, "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A=="],
88 |
89 | "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.24.2", "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz", { "os": "openbsd", "cpu": "x64" }, "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA=="],
90 |
91 | "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.24.2", "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz", { "os": "sunos", "cpu": "x64" }, "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig=="],
92 |
93 | "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.24.2", "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz", { "os": "win32", "cpu": "arm64" }, "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ=="],
94 |
95 | "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.24.2", "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz", { "os": "win32", "cpu": "ia32" }, "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA=="],
96 |
97 | "@esbuild/win32-x64": ["@esbuild/win32-x64@0.24.2", "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz", { "os": "win32", "cpu": "x64" }, "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg=="],
98 |
99 | "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.0", "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", {}, "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="],
100 |
101 | "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="],
102 |
103 | "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="],
104 |
105 | "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="],
106 |
107 | "@rollup/pluginutils": ["@rollup/pluginutils@5.1.4", "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", { "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^4.0.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ=="],
108 |
109 | "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.34.8", "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.8.tgz", { "os": "android", "cpu": "arm" }, "sha512-q217OSE8DTp8AFHuNHXo0Y86e1wtlfVrXiAlwkIvGRQv9zbc6mE3sjIVfwI8sYUyNxwOg0j/Vm1RKM04JcWLJw=="],
110 |
111 | "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.34.8", "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.8.tgz", { "os": "android", "cpu": "arm64" }, "sha512-Gigjz7mNWaOL9wCggvoK3jEIUUbGul656opstjaUSGC3eT0BM7PofdAJaBfPFWWkXNVAXbaQtC99OCg4sJv70Q=="],
112 |
113 | "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.34.8", "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.8.tgz", { "os": "darwin", "cpu": "arm64" }, "sha512-02rVdZ5tgdUNRxIUrFdcMBZQoaPMrxtwSb+/hOfBdqkatYHR3lZ2A2EGyHq2sGOd0Owk80oV3snlDASC24He3Q=="],
114 |
115 | "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.34.8", "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.8.tgz", { "os": "darwin", "cpu": "x64" }, "sha512-qIP/elwR/tq/dYRx3lgwK31jkZvMiD6qUtOycLhTzCvrjbZ3LjQnEM9rNhSGpbLXVJYQ3rq39A6Re0h9tU2ynw=="],
116 |
117 | "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.34.8", "https://registry.npmmirror.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.8.tgz", { "os": "freebsd", "cpu": "arm64" }, "sha512-IQNVXL9iY6NniYbTaOKdrlVP3XIqazBgJOVkddzJlqnCpRi/yAeSOa8PLcECFSQochzqApIOE1GHNu3pCz+BDA=="],
118 |
119 | "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.34.8", "https://registry.npmmirror.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.8.tgz", { "os": "freebsd", "cpu": "x64" }, "sha512-TYXcHghgnCqYFiE3FT5QwXtOZqDj5GmaFNTNt3jNC+vh22dc/ukG2cG+pi75QO4kACohZzidsq7yKTKwq/Jq7Q=="],
120 |
121 | "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.34.8", "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.8.tgz", { "os": "linux", "cpu": "arm" }, "sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g=="],
122 |
123 | "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.34.8", "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.8.tgz", { "os": "linux", "cpu": "arm" }, "sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA=="],
124 |
125 | "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.34.8", "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.8.tgz", { "os": "linux", "cpu": "arm64" }, "sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A=="],
126 |
127 | "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.34.8", "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.8.tgz", { "os": "linux", "cpu": "arm64" }, "sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q=="],
128 |
129 | "@rollup/rollup-linux-loongarch64-gnu": ["@rollup/rollup-linux-loongarch64-gnu@4.34.8", "https://registry.npmmirror.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.8.tgz", { "os": "linux", "cpu": "none" }, "sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ=="],
130 |
131 | "@rollup/rollup-linux-powerpc64le-gnu": ["@rollup/rollup-linux-powerpc64le-gnu@4.34.8", "https://registry.npmmirror.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.8.tgz", { "os": "linux", "cpu": "ppc64" }, "sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw=="],
132 |
133 | "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.34.8", "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.8.tgz", { "os": "linux", "cpu": "none" }, "sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw=="],
134 |
135 | "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.34.8", "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.8.tgz", { "os": "linux", "cpu": "s390x" }, "sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA=="],
136 |
137 | "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.34.8", "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.8.tgz", { "os": "linux", "cpu": "x64" }, "sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA=="],
138 |
139 | "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.34.8", "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.8.tgz", { "os": "linux", "cpu": "x64" }, "sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ=="],
140 |
141 | "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.34.8", "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.8.tgz", { "os": "win32", "cpu": "arm64" }, "sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ=="],
142 |
143 | "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.34.8", "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.8.tgz", { "os": "win32", "cpu": "ia32" }, "sha512-r3NRQrXkHr4uWy5TOjTpTYojR9XmF0j/RYgKCef+Ag46FWUTltm5ziticv8LdNsDMehjJ543x/+TJAek/xBA2w=="],
144 |
145 | "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.34.8", "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.8.tgz", { "os": "win32", "cpu": "x64" }, "sha512-U0FaE5O1BCpZSeE6gBl3c5ObhePQSfk9vDRToMmTkbhCOgW4jqvtS5LGyQ76L1fH8sM0keRp4uDTsbjiUyjk0g=="],
146 |
147 | "@sec-ant/readable-stream": ["@sec-ant/readable-stream@0.4.1", "https://registry.npmmirror.com/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", {}, "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg=="],
148 |
149 | "@simonwep/pickr": ["@simonwep/pickr@1.8.2", "", { "dependencies": { "core-js": "^3.15.1", "nanopop": "^2.1.0" } }, "sha512-/l5w8BIkrpP6n1xsetx9MWPWlU6OblN5YgZZphxan0Tq4BByTCETL6lyIeY8lagalS2Nbt4F2W034KHLIiunKA=="],
150 |
151 | "@tokenizer/token": ["@tokenizer/token@0.3.0", "", {}, "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="],
152 |
153 | "@types/estree": ["@types/estree@1.0.5", "", {}, "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="],
154 |
155 | "@vitejs/plugin-vue": ["@vitejs/plugin-vue@5.2.1", "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-5.2.1.tgz", { "peerDependencies": { "vite": "^5.0.0 || ^6.0.0", "vue": "^3.2.25" } }, "sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ=="],
156 |
157 | "@vue-macros/common": ["@vue-macros/common@1.15.1", "https://registry.npmmirror.com/@vue-macros/common/-/common-1.15.1.tgz", { "dependencies": { "@babel/types": "^7.26.3", "@rollup/pluginutils": "^5.1.3", "@vue/compiler-sfc": "^3.5.13", "ast-kit": "^1.3.2", "local-pkg": "^0.5.1", "magic-string-ast": "^0.6.3" }, "peerDependencies": { "vue": "^2.7.0 || ^3.2.25" }, "optionalPeers": ["vue"] }, "sha512-O0ZXaladWXwHplQnSjxLbB/G1KpdWCUNJPNYVHIxHonGex1BGpoB4fBZZLgddHgAiy18VZG/Iu5L0kwG+SV7JQ=="],
158 |
159 | "@vue/compiler-core": ["@vue/compiler-core@3.5.13", "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.13.tgz", { "dependencies": { "@babel/parser": "^7.25.3", "@vue/shared": "3.5.13", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.0" } }, "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q=="],
160 |
161 | "@vue/compiler-dom": ["@vue/compiler-dom@3.5.13", "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", { "dependencies": { "@vue/compiler-core": "3.5.13", "@vue/shared": "3.5.13" } }, "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA=="],
162 |
163 | "@vue/compiler-sfc": ["@vue/compiler-sfc@3.5.13", "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz", { "dependencies": { "@babel/parser": "^7.25.3", "@vue/compiler-core": "3.5.13", "@vue/compiler-dom": "3.5.13", "@vue/compiler-ssr": "3.5.13", "@vue/shared": "3.5.13", "estree-walker": "^2.0.2", "magic-string": "^0.30.11", "postcss": "^8.4.48", "source-map-js": "^1.2.0" } }, "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ=="],
164 |
165 | "@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.13", "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz", { "dependencies": { "@vue/compiler-dom": "3.5.13", "@vue/shared": "3.5.13" } }, "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA=="],
166 |
167 | "@vue/devtools-api": ["@vue/devtools-api@6.6.4", "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz", {}, "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g=="],
168 |
169 | "@vue/reactivity": ["@vue/reactivity@3.5.13", "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.13.tgz", { "dependencies": { "@vue/shared": "3.5.13" } }, "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg=="],
170 |
171 | "@vue/runtime-core": ["@vue/runtime-core@3.5.13", "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.13.tgz", { "dependencies": { "@vue/reactivity": "3.5.13", "@vue/shared": "3.5.13" } }, "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw=="],
172 |
173 | "@vue/runtime-dom": ["@vue/runtime-dom@3.5.13", "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz", { "dependencies": { "@vue/reactivity": "3.5.13", "@vue/runtime-core": "3.5.13", "@vue/shared": "3.5.13", "csstype": "^3.1.3" } }, "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog=="],
174 |
175 | "@vue/server-renderer": ["@vue/server-renderer@3.5.13", "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.13.tgz", { "dependencies": { "@vue/compiler-ssr": "3.5.13", "@vue/shared": "3.5.13" }, "peerDependencies": { "vue": "3.5.13" } }, "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA=="],
176 |
177 | "@vue/shared": ["@vue/shared@3.5.13", "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.13.tgz", {}, "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ=="],
178 |
179 | "acorn": ["acorn@8.14.0", "https://registry.npmmirror.com/acorn/-/acorn-8.14.0.tgz", { "bin": { "acorn": "bin/acorn" } }, "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA=="],
180 |
181 | "ant-design-vue": ["ant-design-vue@4.2.6", "https://registry.npmmirror.com/ant-design-vue/-/ant-design-vue-4.2.6.tgz", { "dependencies": { "@ant-design/colors": "^6.0.0", "@ant-design/icons-vue": "^7.0.0", "@babel/runtime": "^7.10.5", "@ctrl/tinycolor": "^3.5.0", "@emotion/hash": "^0.9.0", "@emotion/unitless": "^0.8.0", "@simonwep/pickr": "~1.8.0", "array-tree-filter": "^2.1.0", "async-validator": "^4.0.0", "csstype": "^3.1.1", "dayjs": "^1.10.5", "dom-align": "^1.12.1", "dom-scroll-into-view": "^2.0.0", "lodash": "^4.17.21", "lodash-es": "^4.17.15", "resize-observer-polyfill": "^1.5.1", "scroll-into-view-if-needed": "^2.2.25", "shallow-equal": "^1.0.0", "stylis": "^4.1.3", "throttle-debounce": "^5.0.0", "vue-types": "^3.0.0", "warning": "^4.0.0" }, "peerDependencies": { "vue": ">=3.2.0" } }, "sha512-t7eX13Yj3i9+i5g9lqFyYneoIb3OzTvQjq9Tts1i+eiOd3Eva/6GagxBSXM1fOCjqemIu0FYVE1ByZ/38epR3Q=="],
182 |
183 | "anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="],
184 |
185 | "array-tree-filter": ["array-tree-filter@2.1.0", "", {}, "sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw=="],
186 |
187 | "ast-kit": ["ast-kit@1.3.2", "https://registry.npmmirror.com/ast-kit/-/ast-kit-1.3.2.tgz", { "dependencies": { "@babel/parser": "^7.26.2", "pathe": "^1.1.2" } }, "sha512-gdvX700WVC6sHCJQ7bJGfDvtuKAh6Sa6weIZROxfzUZKP7BjvB8y0SMlM/o4omSQ3L60PQSJROBJsb0vEViVnA=="],
188 |
189 | "ast-walker-scope": ["ast-walker-scope@0.6.2", "https://registry.npmmirror.com/ast-walker-scope/-/ast-walker-scope-0.6.2.tgz", { "dependencies": { "@babel/parser": "^7.25.3", "ast-kit": "^1.0.1" } }, "sha512-1UWOyC50xI3QZkRuDj6PqDtpm1oHWtYs+NQGwqL/2R11eN3Q81PHAHPM0SWW3BNQm53UDwS//Jv8L4CCVLM1bQ=="],
190 |
191 | "async-validator": ["async-validator@4.2.5", "", {}, "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg=="],
192 |
193 | "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="],
194 |
195 | "axios": ["axios@1.7.9", "https://registry.npmmirror.com/axios/-/axios-1.7.9.tgz", { "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw=="],
196 |
197 | "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="],
198 |
199 | "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="],
200 |
201 | "binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="],
202 |
203 | "brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="],
204 |
205 | "braces": ["braces@3.0.2", "", { "dependencies": { "fill-range": "^7.0.1" } }, "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A=="],
206 |
207 | "buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="],
208 |
209 | "chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="],
210 |
211 | "combined-stream": ["combined-stream@1.0.8", "", { "dependencies": { "delayed-stream": "~1.0.0" } }, "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="],
212 |
213 | "component-emitter": ["component-emitter@2.0.0", "https://registry.npmmirror.com/component-emitter/-/component-emitter-2.0.0.tgz", {}, "sha512-4m5s3Me2xxlVKG9PkZpQqHQR7bgpnN7joDMJ4yvVkVXngjoITG76IaZmzmywSeRTeTpc6N6r3H3+KyUurV8OYw=="],
214 |
215 | "compute-scroll-into-view": ["compute-scroll-into-view@1.0.20", "", {}, "sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg=="],
216 |
217 | "confbox": ["confbox@0.1.8", "https://registry.npmmirror.com/confbox/-/confbox-0.1.8.tgz", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="],
218 |
219 | "content-type": ["content-type@1.0.5", "", {}, "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="],
220 |
221 | "core-js": ["core-js@3.36.1", "", {}, "sha512-BTvUrwxVBezj5SZ3f10ImnX2oRByMxql3EimVqMysepbC9EeMUOpLwdy6Eoili2x6E4kf+ZUB5k/+Jv55alPfA=="],
222 |
223 | "csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="],
224 |
225 | "dayjs": ["dayjs@1.11.10", "", {}, "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ=="],
226 |
227 | "debug": ["debug@4.4.0", "https://registry.npmmirror.com/debug/-/debug-4.4.0.tgz", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="],
228 |
229 | "delayed-stream": ["delayed-stream@1.0.0", "", {}, "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="],
230 |
231 | "dom-align": ["dom-align@1.12.4", "", {}, "sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw=="],
232 |
233 | "dom-scroll-into-view": ["dom-scroll-into-view@2.0.1", "", {}, "sha512-bvVTQe1lfaUr1oFzZX80ce9KLDlZ3iU+XGNE/bz9HnGdklTieqsbmsLHe+rT2XWqopvL0PckkYqN7ksmm5pe3w=="],
234 |
235 | "entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="],
236 |
237 | "esbuild": ["esbuild@0.24.2", "https://registry.npmmirror.com/esbuild/-/esbuild-0.24.2.tgz", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.24.2", "@esbuild/android-arm": "0.24.2", "@esbuild/android-arm64": "0.24.2", "@esbuild/android-x64": "0.24.2", "@esbuild/darwin-arm64": "0.24.2", "@esbuild/darwin-x64": "0.24.2", "@esbuild/freebsd-arm64": "0.24.2", "@esbuild/freebsd-x64": "0.24.2", "@esbuild/linux-arm": "0.24.2", "@esbuild/linux-arm64": "0.24.2", "@esbuild/linux-ia32": "0.24.2", "@esbuild/linux-loong64": "0.24.2", "@esbuild/linux-mips64el": "0.24.2", "@esbuild/linux-ppc64": "0.24.2", "@esbuild/linux-riscv64": "0.24.2", "@esbuild/linux-s390x": "0.24.2", "@esbuild/linux-x64": "0.24.2", "@esbuild/netbsd-arm64": "0.24.2", "@esbuild/netbsd-x64": "0.24.2", "@esbuild/openbsd-arm64": "0.24.2", "@esbuild/openbsd-x64": "0.24.2", "@esbuild/sunos-x64": "0.24.2", "@esbuild/win32-arm64": "0.24.2", "@esbuild/win32-ia32": "0.24.2", "@esbuild/win32-x64": "0.24.2" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA=="],
238 |
239 | "estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="],
240 |
241 | "events": ["events@3.3.0", "", {}, "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="],
242 |
243 | "fast-glob": ["fast-glob@3.3.2", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.4" } }, "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow=="],
244 |
245 | "fastq": ["fastq@1.17.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w=="],
246 |
247 | "file-type": ["file-type@19.6.0", "https://registry.npmmirror.com/file-type/-/file-type-19.6.0.tgz", { "dependencies": { "get-stream": "^9.0.1", "strtok3": "^9.0.1", "token-types": "^6.0.0", "uint8array-extras": "^1.3.0" } }, "sha512-VZR5I7k5wkD0HgFnMsq5hOsSc710MJMu5Nc5QYsbe38NN5iPV/XTObYLc/cpttRTf6lX538+5uO1ZQRhYibiZQ=="],
248 |
249 | "fill-range": ["fill-range@7.0.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ=="],
250 |
251 | "follow-redirects": ["follow-redirects@1.15.6", "", {}, "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA=="],
252 |
253 | "form-data": ["form-data@4.0.0", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "mime-types": "^2.1.12" } }, "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww=="],
254 |
255 | "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="],
256 |
257 | "get-stream": ["get-stream@9.0.1", "https://registry.npmmirror.com/get-stream/-/get-stream-9.0.1.tgz", { "dependencies": { "@sec-ant/readable-stream": "^0.4.1", "is-stream": "^4.0.1" } }, "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA=="],
258 |
259 | "glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="],
260 |
261 | "ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="],
262 |
263 | "is-binary-path": ["is-binary-path@2.1.0", "", { "dependencies": { "binary-extensions": "^2.0.0" } }, "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw=="],
264 |
265 | "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="],
266 |
267 | "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="],
268 |
269 | "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="],
270 |
271 | "is-plain-object": ["is-plain-object@3.0.1", "", {}, "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g=="],
272 |
273 | "is-stream": ["is-stream@4.0.1", "https://registry.npmmirror.com/is-stream/-/is-stream-4.0.1.tgz", {}, "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A=="],
274 |
275 | "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="],
276 |
277 | "json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="],
278 |
279 | "link": ["link@2.1.1", "https://registry.npmmirror.com/link/-/link-2.1.1.tgz", { "bin": { "link": "dist/cli.js" } }, "sha512-NV3AUVYBovJ6eVQcTeRoPnZSxzt2LOijNd+ugEZKRy/XeQlpTRhVRkuDv5kOlXwMAUx30vfUc7asRFb9RT65yg=="],
280 |
281 | "local-pkg": ["local-pkg@0.5.1", "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.5.1.tgz", { "dependencies": { "mlly": "^1.7.3", "pkg-types": "^1.2.1" } }, "sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ=="],
282 |
283 | "lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="],
284 |
285 | "lodash-es": ["lodash-es@4.17.21", "", {}, "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="],
286 |
287 | "loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="],
288 |
289 | "magic-string": ["magic-string@0.30.17", "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.17.tgz", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" } }, "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA=="],
290 |
291 | "magic-string-ast": ["magic-string-ast@0.6.3", "https://registry.npmmirror.com/magic-string-ast/-/magic-string-ast-0.6.3.tgz", { "dependencies": { "magic-string": "^0.30.13" } }, "sha512-C9sgUzVZtUtzCBoMdYtwrIRQ4IucGRFGgdhkjL7PXsVfPYmTuWtewqzk7dlipaCMWH/gOYehW9rgMoa4Oebtpw=="],
292 |
293 | "media-typer": ["media-typer@1.1.0", "", {}, "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw=="],
294 |
295 | "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="],
296 |
297 | "micromatch": ["micromatch@4.0.5", "", { "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" } }, "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA=="],
298 |
299 | "mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="],
300 |
301 | "mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="],
302 |
303 | "minimatch": ["minimatch@9.0.5", "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.5.tgz", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="],
304 |
305 | "mlly": ["mlly@1.7.3", "https://registry.npmmirror.com/mlly/-/mlly-1.7.3.tgz", { "dependencies": { "acorn": "^8.14.0", "pathe": "^1.1.2", "pkg-types": "^1.2.1", "ufo": "^1.5.4" } }, "sha512-xUsx5n/mN0uQf4V548PKQ+YShA4/IW0KI1dZhrNrPCLG+xizETbHTkOa1f8/xut9JRPp8kQuMnz0oqwkTiLo/A=="],
306 |
307 | "ms": ["ms@2.1.3", "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="],
308 |
309 | "music-metadata": ["music-metadata@10.9.1", "https://registry.npmmirror.com/music-metadata/-/music-metadata-10.9.1.tgz", { "dependencies": { "@tokenizer/token": "^0.3.0", "content-type": "^1.0.5", "debug": "^4.4.0", "file-type": "^19.6.0", "link": "^2.1.1", "media-typer": "^1.1.0", "strtok3": "^10.2.1", "token-types": "^6.0.0", "uint8array-extras": "^1.4.0" } }, "sha512-9JcxgIlMPD1Mgzc2fTCaRtBR7GMQJ226gmh2iECzHwLRSrms1yPUxTivBbEiyUrshpmFnBv9baDkpkk9uxbfHw=="],
310 |
311 | "nanoid": ["nanoid@3.3.8", "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.8.tgz", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w=="],
312 |
313 | "nanopop": ["nanopop@2.4.2", "", {}, "sha512-NzOgmMQ+elxxHeIha+OG/Pv3Oc3p4RU2aBhwWwAqDpXrdTbtRylbRLQztLy8dMMwfl6pclznBdfUhccEn9ZIzw=="],
314 |
315 | "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="],
316 |
317 | "pathe": ["pathe@1.1.2", "", {}, "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="],
318 |
319 | "peek-readable": ["peek-readable@6.1.1", "https://registry.npmmirror.com/peek-readable/-/peek-readable-6.1.1.tgz", {}, "sha512-7QmvgRKhxM0E2PGV4ocfROItVode+ELI27n4q+lpufZ+tRKBu/pBP8WOmw9HXn2ui/AUizqtvaVQhcJrOkRqYg=="],
320 |
321 | "picocolors": ["picocolors@1.1.1", "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="],
322 |
323 | "picomatch": ["picomatch@4.0.2", "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.2.tgz", {}, "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="],
324 |
325 | "pkg-types": ["pkg-types@1.2.1", "https://registry.npmmirror.com/pkg-types/-/pkg-types-1.2.1.tgz", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.2", "pathe": "^1.1.2" } }, "sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw=="],
326 |
327 | "postcss": ["postcss@8.5.3", "https://registry.npmmirror.com/postcss/-/postcss-8.5.3.tgz", { "dependencies": { "nanoid": "^3.3.8", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A=="],
328 |
329 | "proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="],
330 |
331 | "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="],
332 |
333 | "readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="],
334 |
335 | "regenerator-runtime": ["regenerator-runtime@0.14.1", "", {}, "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="],
336 |
337 | "resize-observer-polyfill": ["resize-observer-polyfill@1.5.1", "", {}, "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg=="],
338 |
339 | "reusify": ["reusify@1.0.4", "", {}, "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="],
340 |
341 | "rollup": ["rollup@4.34.8", "https://registry.npmmirror.com/rollup/-/rollup-4.34.8.tgz", { "dependencies": { "@types/estree": "1.0.6" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.34.8", "@rollup/rollup-android-arm64": "4.34.8", "@rollup/rollup-darwin-arm64": "4.34.8", "@rollup/rollup-darwin-x64": "4.34.8", "@rollup/rollup-freebsd-arm64": "4.34.8", "@rollup/rollup-freebsd-x64": "4.34.8", "@rollup/rollup-linux-arm-gnueabihf": "4.34.8", "@rollup/rollup-linux-arm-musleabihf": "4.34.8", "@rollup/rollup-linux-arm64-gnu": "4.34.8", "@rollup/rollup-linux-arm64-musl": "4.34.8", "@rollup/rollup-linux-loongarch64-gnu": "4.34.8", "@rollup/rollup-linux-powerpc64le-gnu": "4.34.8", "@rollup/rollup-linux-riscv64-gnu": "4.34.8", "@rollup/rollup-linux-s390x-gnu": "4.34.8", "@rollup/rollup-linux-x64-gnu": "4.34.8", "@rollup/rollup-linux-x64-musl": "4.34.8", "@rollup/rollup-win32-arm64-msvc": "4.34.8", "@rollup/rollup-win32-ia32-msvc": "4.34.8", "@rollup/rollup-win32-x64-msvc": "4.34.8", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ=="],
342 |
343 | "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="],
344 |
345 | "scroll-into-view-if-needed": ["scroll-into-view-if-needed@2.2.31", "", { "dependencies": { "compute-scroll-into-view": "^1.0.20" } }, "sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA=="],
346 |
347 | "scule": ["scule@1.3.0", "", {}, "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g=="],
348 |
349 | "shallow-equal": ["shallow-equal@1.2.1", "", {}, "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA=="],
350 |
351 | "source-map-js": ["source-map-js@1.2.1", "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="],
352 |
353 | "spark-md5": ["spark-md5@3.0.2", "", {}, "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw=="],
354 |
355 | "stream": ["stream@0.0.3", "https://registry.npmmirror.com/stream/-/stream-0.0.3.tgz", { "dependencies": { "component-emitter": "^2.0.0" } }, "sha512-aMsbn7VKrl4A2T7QAQQbzgN7NVc70vgF5INQrBXqn4dCXN1zy3L9HGgLO5s7PExmdrzTJ8uR/27aviW8or8/+A=="],
356 |
357 | "strtok3": ["strtok3@10.2.1", "https://registry.npmmirror.com/strtok3/-/strtok3-10.2.1.tgz", { "dependencies": { "@tokenizer/token": "^0.3.0", "peek-readable": "^6.1.1" } }, "sha512-Q2dTnW3UXokAvXmXvrvMoUj/me3LyJI76HNHeuGMh2o0As/vzd7eHV3ncLOyvu928vQIDbE7Vf9ldEnC7cwy1w=="],
358 |
359 | "stylis": ["stylis@4.3.1", "", {}, "sha512-EQepAV+wMsIaGVGX1RECzgrcqRRU/0sYOHkeLsZ3fzHaHXZy4DaOOX0vOlGQdlsjkh3mFHAIlVimpwAs4dslyQ=="],
360 |
361 | "throttle-debounce": ["throttle-debounce@5.0.0", "", {}, "sha512-2iQTSgkkc1Zyk0MeVrt/3BvuOXYPl/R8Z0U2xxo9rjwNciaHDG3R+Lm6dh4EeUci49DanvBnuqI6jshoQQRGEg=="],
362 |
363 | "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="],
364 |
365 | "token-types": ["token-types@6.0.0", "https://registry.npmmirror.com/token-types/-/token-types-6.0.0.tgz", { "dependencies": { "@tokenizer/token": "^0.3.0", "ieee754": "^1.2.1" } }, "sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA=="],
366 |
367 | "ufo": ["ufo@1.5.4", "https://registry.npmmirror.com/ufo/-/ufo-1.5.4.tgz", {}, "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ=="],
368 |
369 | "uint8array-extras": ["uint8array-extras@1.4.0", "https://registry.npmmirror.com/uint8array-extras/-/uint8array-extras-1.4.0.tgz", {}, "sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ=="],
370 |
371 | "unplugin": ["unplugin@2.1.0", "https://registry.npmmirror.com/unplugin/-/unplugin-2.1.0.tgz", { "dependencies": { "acorn": "^8.14.0", "webpack-virtual-modules": "^0.6.2" } }, "sha512-us4j03/499KhbGP8BU7Hrzrgseo+KdfJYWcbcajCOqsAyb8Gk0Yn2kiUIcZISYCb1JFaZfIuG3b42HmguVOKCQ=="],
372 |
373 | "unplugin-vue-components": ["unplugin-vue-components@0.28.0", "https://registry.npmmirror.com/unplugin-vue-components/-/unplugin-vue-components-0.28.0.tgz", { "dependencies": { "@antfu/utils": "^0.7.10", "@rollup/pluginutils": "^5.1.4", "chokidar": "^3.6.0", "debug": "^4.4.0", "fast-glob": "^3.3.2", "local-pkg": "^0.5.1", "magic-string": "^0.30.15", "minimatch": "^9.0.5", "mlly": "^1.7.3", "unplugin": "^2.1.0" }, "peerDependencies": { "@babel/parser": "^7.15.8", "@nuxt/kit": "^3.2.2", "vue": "2 || 3" }, "optionalPeers": ["@babel/parser", "@nuxt/kit"] }, "sha512-jiTGtJ3JsRFBjgvyilfrX7yUoGKScFgbdNw+6p6kEXU+Spf/rhxzgvdfuMcvhCcLmflB/dY3pGQshYBVGOUx7Q=="],
374 |
375 | "unplugin-vue-router": ["unplugin-vue-router@0.10.9", "https://registry.npmmirror.com/unplugin-vue-router/-/unplugin-vue-router-0.10.9.tgz", { "dependencies": { "@babel/types": "^7.26.0", "@rollup/pluginutils": "^5.1.3", "@vue-macros/common": "^1.15.0", "ast-walker-scope": "^0.6.2", "chokidar": "^3.6.0", "fast-glob": "^3.3.2", "json5": "^2.2.3", "local-pkg": "^0.5.1", "magic-string": "^0.30.14", "mlly": "^1.7.3", "pathe": "^1.1.2", "scule": "^1.3.0", "unplugin": "2.0.0-beta.1", "yaml": "^2.6.1" }, "peerDependencies": { "vue-router": "^4.4.0" }, "optionalPeers": ["vue-router"] }, "sha512-DXmC0GMcROOnCmN56GRvi1bkkG1BnVs4xJqNvucBUeZkmB245URvtxOfbo3H6q4SOUQQbLPYWd6InzvjRh363A=="],
376 |
377 | "vite": ["vite@6.1.1", "https://registry.npmmirror.com/vite/-/vite-6.1.1.tgz", { "dependencies": { "esbuild": "^0.24.2", "postcss": "^8.5.2", "rollup": "^4.30.1" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-4GgM54XrwRfrOp297aIYspIti66k56v16ZnqHvrIM7mG+HjDlAwS7p+Srr7J6fGvEdOJ5JcQ/D9T7HhtdXDTzA=="],
378 |
379 | "vue": ["vue@3.5.13", "https://registry.npmmirror.com/vue/-/vue-3.5.13.tgz", { "dependencies": { "@vue/compiler-dom": "3.5.13", "@vue/compiler-sfc": "3.5.13", "@vue/runtime-dom": "3.5.13", "@vue/server-renderer": "3.5.13", "@vue/shared": "3.5.13" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ=="],
380 |
381 | "vue-router": ["vue-router@4.5.0", "https://registry.npmmirror.com/vue-router/-/vue-router-4.5.0.tgz", { "dependencies": { "@vue/devtools-api": "^6.6.4" }, "peerDependencies": { "vue": "^3.2.0" } }, "sha512-HDuk+PuH5monfNuY+ct49mNmkCRK4xJAV9Ts4z9UFc4rzdDnxQLyCMGGc8pKhZhHTVzfanpNwB/lwqevcBwI4w=="],
382 |
383 | "vue-types": ["vue-types@3.0.2", "", { "dependencies": { "is-plain-object": "3.0.1" }, "peerDependencies": { "vue": "^3.0.0" } }, "sha512-IwUC0Aq2zwaXqy74h4WCvFCUtoV0iSWr0snWnE9TnU18S66GAQyqQbRf2qfJtUuiFsBf6qp0MEwdonlwznlcrw=="],
384 |
385 | "warning": ["warning@4.0.3", "", { "dependencies": { "loose-envify": "^1.0.0" } }, "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w=="],
386 |
387 | "webpack-virtual-modules": ["webpack-virtual-modules@0.6.2", "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", {}, "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ=="],
388 |
389 | "yaml": ["yaml@2.6.1", "https://registry.npmmirror.com/yaml/-/yaml-2.6.1.tgz", { "bin": { "yaml": "bin.mjs" } }, "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg=="],
390 |
391 | "@vue/compiler-sfc/postcss": ["postcss@8.4.49", "https://registry.npmmirror.com/postcss/-/postcss-8.4.49.tgz", { "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA=="],
392 |
393 | "@vue/compiler-sfc/source-map-js": ["source-map-js@1.2.0", "", {}, "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg=="],
394 |
395 | "anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="],
396 |
397 | "file-type/strtok3": ["strtok3@9.1.1", "https://registry.npmmirror.com/strtok3/-/strtok3-9.1.1.tgz", { "dependencies": { "@tokenizer/token": "^0.3.0", "peek-readable": "^5.3.1" } }, "sha512-FhwotcEqjr241ZbjFzjlIYg6c5/L/s4yBGWSMvJ9UoExiSqL+FnFA/CaeZx17WGaZMS/4SOZp8wH18jSS4R4lw=="],
398 |
399 | "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="],
400 |
401 | "readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="],
402 |
403 | "rollup/@types/estree": ["@types/estree@1.0.6", "https://registry.npmmirror.com/@types/estree/-/estree-1.0.6.tgz", {}, "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw=="],
404 |
405 | "unplugin-vue-router/unplugin": ["unplugin@2.0.0-beta.1", "https://registry.npmmirror.com/unplugin/-/unplugin-2.0.0-beta.1.tgz", { "dependencies": { "acorn": "^8.14.0", "webpack-virtual-modules": "^0.6.2" } }, "sha512-2qzQo5LN2DmUZXkWDHvGKLF5BP0WN+KthD6aPnPJ8plRBIjv4lh5O07eYcSxgO2znNw9s4MNhEO1sB+JDllDbQ=="],
406 |
407 | "@vue/compiler-sfc/postcss/nanoid": ["nanoid@3.3.7", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g=="],
408 |
409 | "@vue/compiler-sfc/postcss/source-map-js": ["source-map-js@1.2.1", "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="],
410 |
411 | "file-type/strtok3/peek-readable": ["peek-readable@5.3.1", "https://registry.npmmirror.com/peek-readable/-/peek-readable-5.3.1.tgz", {}, "sha512-GVlENSDW6KHaXcd9zkZltB7tCLosKB/4Hg0fqBJkAoBgYG2Tn1xtMgXtSUuMU9AK/gCm/tTdT8mgAeF4YNeeqw=="],
412 | }
413 | }
414 |
--------------------------------------------------------------------------------