diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml
index ddb6a8fd18..13b777b162 100644
--- a/.github/workflows/build.yaml
+++ b/.github/workflows/build.yaml
@@ -1,7 +1,9 @@
name: Release
env:
- YARN_INSTALL_NOPT: yarn add --ignore-platform --ignore-optional
+ YARN_INSTALL_NOPT: yarn add --ignore-platform --ignore-optional --ignore-engines
+ ELECTRON_MIRROR: https://npmmirror.com/mirrors/electron/
+ ELECTRON_BUILDER_BINARIES_MIRROR: https://npmmirror.com/mirrors/electron-builder-binaries/
on:
push:
@@ -48,7 +50,7 @@ jobs:
- id: get_unm_version
name: Get the installed UNM version
run: |
- yarn --ignore-optional
+ npx yarn@1.22.22 --ignore-engines --frozen-lockfile install --ignore-optional
unm_version=$(node -e "console.log(require('./node_modules/@unblockneteasemusic/rust-napi/package.json').version)")
echo "::set-output name=unmver::${unm_version}"
shell: bash
diff --git a/.gitignore b/.gitignore
index d8dd8fc0f3..a627629ebc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -26,6 +26,7 @@ pnpm-debug.log*
#Electron-builder output
/dist_electron
+out
NeteaseCloudMusicApi-master
NeteaseCloudMusicApi-master.zip
@@ -40,4 +41,4 @@ devenv.local.nix
.direnv
# pre-commit
-.pre-commit-config.yaml
+.pre-commit-config.yaml
\ No newline at end of file
diff --git a/Dockerfile b/Dockerfile
index 87a5567997..e3864ff1ef 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -19,10 +19,10 @@ COPY --from=build /app/package.json /usr/local/lib/
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories \
&& apk add --no-cache libuv nodejs npm \
&& npm config set registry https://registry.npmmirror.com \
- && npm i -g $(awk -F \" '{if($2=="@neteaseapireborn/api@latest") print $2"@"$4}' /usr/local/lib/package.json) \
+ && npm i -g $(awk -F \" '{if($2=="@neteasecloudmusicapienhanced/api@latest") print $2"@"$4}' /usr/local/lib/package.json) \
&& rm -f /usr/local/lib/package.json
COPY --from=build /app/docker/nginx.conf.example /etc/nginx/conf.d/default.conf
COPY --from=build /app/dist /usr/share/nginx/html
-CMD ["sh", "-c", "nginx && exec npx @neteaseapireborn/api@latest"]
+CMD ["sh", "-c", "nginx && exec npx @neteasecloudmusicapienhanced/api@latest"]
diff --git a/package.json b/package.json
index e65f5fd1a1..ffd26bd2a2 100644
--- a/package.json
+++ b/package.json
@@ -19,14 +19,14 @@
"postinstall": "electron-builder install-app-deps",
"postuninstall": "electron-builder install-app-deps",
"prettier": "npx prettier --write ./src",
- "netease_api:run": "npx @neteaseapireborn/api"
+ "netease_api:run": "npx @neteasecloudmusicapienhanced/api"
},
"main": "background.js",
"engines": {
"node": "14 || 16"
},
"dependencies": {
- "@neteaseapireborn/api": "^4.29.7",
+ "@neteasecloudmusicapienhanced/api": "^4.29.7",
"@unblockneteasemusic/rust-napi": "^0.4.0",
"axios": "^0.26.1",
"change-case": "^4.1.2",
diff --git a/src/api/user.js b/src/api/user.js
index ec020144c7..a0eeac2f8d 100644
--- a/src/api/user.js
+++ b/src/api/user.js
@@ -30,6 +30,25 @@ export function userAccount() {
},
});
}
+/**
+ * 通过 Cookie 获取账号详情(网页登录)
+ * 说明 : 登录后调用此接口 ,可获取用户账号信息
+ * - cookie: 网易云 Cookie 字符串
+ * @param {string} cookie
+ */
+export function userAccountWithCookie(cookie) {
+ const data = new URLSearchParams();
+ data.set('cookie', cookie);
+
+ return request({
+ url: '/user/account',
+ method: 'post',
+ params: {
+ timestamp: new Date().getTime(),
+ },
+ data,
+ });
+}
/**
* 获取用户歌单
diff --git a/src/assets/icons/index.js b/src/assets/icons/index.js
index ee45a5672b..20af16fbec 100644
--- a/src/assets/icons/index.js
+++ b/src/assets/icons/index.js
@@ -1,7 +1,7 @@
import Vue from 'vue';
import SvgIcon from '@/components/SvgIcon';
-Vue.component('svg-icon', SvgIcon);
+Vue.component('SvgIcon', SvgIcon);
const requireAll = requireContext => requireContext.keys().map(requireContext);
const req = require.context('./', true, /\.svg$/);
requireAll(req);
diff --git a/src/components/Navbar.vue b/src/components/Navbar.vue
index dce629bd93..10c3dff54c 100644
--- a/src/components/Navbar.vue
+++ b/src/components/Navbar.vue
@@ -46,8 +46,8 @@
diff --git a/src/electron/ipcMain.js b/src/electron/ipcMain.js
index 09f3ca855f..8ebd6a46d4 100644
--- a/src/electron/ipcMain.js
+++ b/src/electron/ipcMain.js
@@ -1,4 +1,11 @@
-import { app, dialog, globalShortcut, ipcMain } from 'electron';
+import {
+ app,
+ BrowserWindow,
+ dialog,
+ globalShortcut,
+ ipcMain,
+ session,
+} from 'electron';
import UNM from '@unblockneteasemusic/rust-napi';
import { registerGlobalShortcut } from '@/electron/globalShortcut';
import cloneDeep from 'lodash/cloneDeep';
@@ -133,6 +140,14 @@ function parseSourceStringToList(executor, sourceString) {
});
}
+const getNeteaseCookieString = async loginSession => {
+ const cookies = await loginSession.cookies.get({
+ domain: 'music.163.com',
+ });
+
+ return cookies.map(cookie => `${cookie.name}=${cookie.value}`).join('; ');
+};
+
export function initIpcMain(win, store, trayEventEmitter) {
// WIP: Do not enable logging as it has some issues in non-blocking I/O environment.
// UNM.enableLogging(UNM.LoggingType.ConsoleEnv);
@@ -198,6 +213,75 @@ export function initIpcMain(win, store, trayEventEmitter) {
}
);
+ ipcMain.handle('open-netease-web-login', async () => {
+ const loginSession = session.fromPartition('persist:netease-web-login');
+ const existingCookieString = await getNeteaseCookieString(loginSession);
+ if (existingCookieString.includes('MUSIC_U=')) {
+ return existingCookieString;
+ }
+
+ return new Promise((resolve, reject) => {
+ let settled = false;
+ const loginWindow = new BrowserWindow({
+ width: 960,
+ height: 720,
+ parent: win,
+ title: 'NetEase Web Login',
+ webPreferences: {
+ partition: 'persist:netease-web-login',
+ nodeIntegration: false,
+ contextIsolation: true,
+ },
+ });
+
+ const cleanup = () => {
+ loginSession.cookies.removeListener('changed', handleCookieChanged);
+ loginWindow.removeListener('closed', handleClosed);
+ };
+
+ const finish = cookieString => {
+ if (settled) return;
+ settled = true;
+ cleanup();
+ if (!loginWindow.isDestroyed()) loginWindow.close();
+ resolve(cookieString);
+ };
+
+ const fail = error => {
+ if (settled) return;
+ settled = true;
+ cleanup();
+ reject(error);
+ };
+
+ const checkLoginCookie = async () => {
+ try {
+ const cookieString = await getNeteaseCookieString(loginSession);
+ if (cookieString.includes('MUSIC_U=')) finish(cookieString);
+ } catch (error) {
+ fail(error);
+ }
+ };
+
+ const handleCookieChanged = (_event, cookie) => {
+ if (cookie.domain && cookie.domain.includes('music.163.com')) {
+ checkLoginCookie();
+ }
+ };
+
+ const handleClosed = () => {
+ if (!settled) {
+ cleanup();
+ resolve('');
+ }
+ };
+
+ loginSession.cookies.on('changed', handleCookieChanged);
+ loginWindow.on('closed', handleClosed);
+ loginWindow.loadURL('https://music.163.com/#/login').catch(fail);
+ });
+ });
+
ipcMain.on('close', e => {
if (isMac) {
win.hide();
diff --git a/src/electron/mpris.js b/src/electron/mpris.js
index d778b34f8c..f7ae54324a 100644
--- a/src/electron/mpris.js
+++ b/src/electron/mpris.js
@@ -44,11 +44,15 @@ export function createMpris(window) {
ipcMain.on('playerCurrentTrackTime', (e, position) => {
player.getPosition = () => position * 1000 * 1000;
- try { player.seeked(position * 1000 * 1000); } catch {}
+ try {
+ player.seeked(position * 1000 * 1000);
+ } catch {}
});
ipcMain.on('seeked', (e, position) => {
- try { player.seeked(position * 1000 * 1000); } catch {}
+ try {
+ player.seeked(position * 1000 * 1000);
+ } catch {}
});
ipcMain.on('switchRepeatMode', (e, mode) => {
diff --git a/src/electron/services.js b/src/electron/services.js
index 94720ceb24..6eaebeea49 100644
--- a/src/electron/services.js
+++ b/src/electron/services.js
@@ -1,6 +1,6 @@
import clc from 'cli-color';
import checkAuthToken from '../utils/checkAuthToken';
-import server from '@neteaseapireborn/api/server';
+import server from '@neteasecloudmusicapienhanced/api/server';
export async function startNeteaseMusicApi() {
// Let user know that the service is starting
diff --git a/src/locale/lang/en.js b/src/locale/lang/en.js
index 4e1c947d3e..5e9ef69c94 100644
--- a/src/locale/lang/en.js
+++ b/src/locale/lang/en.js
@@ -87,6 +87,13 @@ export default {
login: 'Login',
loginWithEmail: 'Login with Email',
loginWithPhone: 'Login with Phone',
+ webLogin: 'Web Login',
+ openWebLogin: 'Open NetEase Web Login',
+ webLoginTip:
+ 'After logging in on the NetEase page, copy that page Cookie and paste it below.',
+ cookiePlaceholder: 'Paste NetEase Cookie such as MUSIC_U=...; __csrf=...',
+ cookieTip:
+ 'MUSIC_U is required. Cookies are only stored in this browser and localStorage.',
notice: `YesPlayMusic promises not to save any of your account information to the cloud.
Your password will be MD5 encrypted locally and then transmitted to NetEase Music API.
YesPlayMusic is not the official website of NetEase Music, please consider carefully before entering account information. You can also go to YesPlayMusic's GitHub repository to build and use the self-hosted NetEase Music API.`,
diff --git a/src/locale/lang/tr.js b/src/locale/lang/tr.js
index 8def25779d..ef8b27f4dc 100644
--- a/src/locale/lang/tr.js
+++ b/src/locale/lang/tr.js
@@ -83,6 +83,14 @@ export default {
login: 'Giriş Yap',
loginWithEmail: 'Email ile giriş yap',
loginWithPhone: 'Phone ile giriş yap',
+ webLogin: 'Web ile giriş yap',
+ openWebLogin: 'NetEase web girişini aç',
+ webLoginTip:
+ 'NetEase sayfasında giriş yaptıktan sonra sayfanın Cookie bilgisini kopyalayıp aşağıya yapıştır.',
+ cookiePlaceholder:
+ 'MUSIC_U=...; __csrf=... gibi NetEase Cookie bilgisini yapıştır',
+ cookieTip:
+ 'MUSIC_U gereklidir. Cookie yalnızca bu tarayıcıda ve localStorage içinde saklanır.',
notice: `YesPlayMusic hesabınızın hiçbir bilgisini kaydetmeyeceğine dair söz veriyor
Şifren MD5 şifreleme ile yerel olarak şifrelenir ve daha sonra NetEase Müzik API'sine gönderilir
YesPlayMusic, NetEase Music'in resmi websitesi değildir, lütfen hesap bilgilerinizi girmeden önce dikkatlice düşününüz. Aynı zamanda, Kendi NetEase Musix API'nızı host etmek için YesPlayMusic'in GitHub Repo'suna gidebilirsiniz.`,
diff --git a/src/locale/lang/zh-CN.js b/src/locale/lang/zh-CN.js
index 968e02077b..3f89e0cdd8 100644
--- a/src/locale/lang/zh-CN.js
+++ b/src/locale/lang/zh-CN.js
@@ -84,6 +84,12 @@ export default {
login: '登录',
loginWithEmail: '邮箱登录',
loginWithPhone: '手机号登录',
+ webLogin: '网页登录',
+ openWebLogin: '打开网易云网页登录',
+ webLoginTip:
+ '在打开的网易云页面完成登录后,复制该页面的 Cookie 并粘贴到下方。',
+ cookiePlaceholder: '粘贴 MUSIC_U=...; __csrf=... 等网易云 Cookie',
+ cookieTip: '至少需要 MUSIC_U。Cookie 只会保存在本机浏览器和 localStorage。',
notice: `YesPlayMusic 承诺不会保存你的任何账号信息到云端。
你的密码会在本地进行 MD5 加密后再传输到网易云 API。
YesPlayMusic 并非网易云官方网站,输入账号信息前请慎重考虑。 你也可以前往
diff --git a/src/locale/lang/zh-TW.js b/src/locale/lang/zh-TW.js
index e91bc4a640..96644c7e5b 100644
--- a/src/locale/lang/zh-TW.js
+++ b/src/locale/lang/zh-TW.js
@@ -80,6 +80,12 @@ export default {
login: '登入',
loginWithEmail: '信箱登入',
loginWithPhone: '手機號碼登入',
+ webLogin: '網頁登入',
+ openWebLogin: '打開網易雲網頁登入',
+ webLoginTip:
+ '在打開的網易雲頁面完成登入後,複製該頁面的 Cookie 並貼到下方。',
+ cookiePlaceholder: '貼上 MUSIC_U=...; __csrf=... 等網易雲 Cookie',
+ cookieTip: '至少需要 MUSIC_U。Cookie 只會保存在本機瀏覽器和 localStorage。',
notice: `YesPlayMusic 承諾不會保存您的任何帳戶資訊到雲端。
您的密碼會在本地進行 MD5 加密後再傳輸到網易雲 API。
YesPlayMusic 並非網易雲官方網站,輸入帳戶資訊前請慎重考慮。 您也可以前往
diff --git a/src/main.js b/src/main.js
index 73f7e8e8e4..7f384d5aac 100644
--- a/src/main.js
+++ b/src/main.js
@@ -28,13 +28,15 @@ console.log(
'background:unset;color:unset;'
);
-Vue.use(
- VueGtag,
- {
- config: { id: 'G-KMJJCFZDKF' },
- },
- router
-);
+if (process.env.NODE_ENV === 'production') {
+ Vue.use(
+ VueGtag,
+ {
+ config: { id: 'G-KMJJCFZDKF' },
+ },
+ router
+ );
+}
Vue.config.productionTip = false;
NProgress.configure({ showSpinner: false, trickleSpeed: 100 });
diff --git a/src/ncmModDef.js b/src/ncmModDef.js
index fd8c84ddb7..1b3f501bff 100644
--- a/src/ncmModDef.js
+++ b/src/ncmModDef.js
@@ -2,621 +2,621 @@ module.exports = [
{
identifier: 'user_update',
route: '/user/update',
- module: require('@neteaseapireborn/api/module/user_update'),
+ module: require('@neteasecloudmusicapienhanced/api/module/user_update'),
},
{
identifier: 'user_subcount',
route: '/user/subcount',
- module: require('@neteaseapireborn/api/module/user_subcount'),
+ module: require('@neteasecloudmusicapienhanced/api/module/user_subcount'),
},
{
identifier: 'user_replacephone',
route: '/user/replacephone',
- module: require('@neteaseapireborn/api/module/user_replacephone'),
+ module: require('@neteasecloudmusicapienhanced/api/module/user_replacephone'),
},
{
identifier: 'user_record',
route: '/user/record',
- module: require('@neteaseapireborn/api/module/user_record'),
+ module: require('@neteasecloudmusicapienhanced/api/module/user_record'),
},
{
identifier: 'user_playlist',
route: '/user/playlist',
- module: require('@neteaseapireborn/api/module/user_playlist'),
+ module: require('@neteasecloudmusicapienhanced/api/module/user_playlist'),
},
{
identifier: 'user_level',
route: '/user/level',
- module: require('@neteaseapireborn/api/module/user_level'),
+ module: require('@neteasecloudmusicapienhanced/api/module/user_level'),
},
{
identifier: 'user_follows',
route: '/user/follows',
- module: require('@neteaseapireborn/api/module/user_follows'),
+ module: require('@neteasecloudmusicapienhanced/api/module/user_follows'),
},
{
identifier: 'user_followeds',
route: '/user/followeds',
- module: require('@neteaseapireborn/api/module/user_followeds'),
+ module: require('@neteasecloudmusicapienhanced/api/module/user_followeds'),
},
{
identifier: 'user_event',
route: '/user/event',
- module: require('@neteaseapireborn/api/module/user_event'),
+ module: require('@neteasecloudmusicapienhanced/api/module/user_event'),
},
{
identifier: 'user_dj',
route: '/user/dj',
- module: require('@neteaseapireborn/api/module/user_dj'),
+ module: require('@neteasecloudmusicapienhanced/api/module/user_dj'),
},
{
identifier: 'user_detail',
route: '/user/detail',
- module: require('@neteaseapireborn/api/module/user_detail'),
+ module: require('@neteasecloudmusicapienhanced/api/module/user_detail'),
},
{
identifier: 'user_cloud_detail',
route: '/user/cloud/detail',
- module: require('@neteaseapireborn/api/module/user_cloud_detail'),
+ module: require('@neteasecloudmusicapienhanced/api/module/user_cloud_detail'),
},
{
identifier: 'user_cloud_del',
route: '/user/cloud/del',
- module: require('@neteaseapireborn/api/module/user_cloud_del'),
+ module: require('@neteasecloudmusicapienhanced/api/module/user_cloud_del'),
},
{
identifier: 'user_cloud',
route: '/user/cloud',
- module: require('@neteaseapireborn/api/module/user_cloud'),
+ module: require('@neteasecloudmusicapienhanced/api/module/user_cloud'),
},
{
identifier: 'user_bindingcellphone',
route: '/user/bindingcellphone',
- module: require('@neteaseapireborn/api/module/user_bindingcellphone'),
+ module: require('@neteasecloudmusicapienhanced/api/module/user_bindingcellphone'),
},
{
identifier: 'user_binding',
route: '/user/binding',
- module: require('@neteaseapireborn/api/module/user_binding'),
+ module: require('@neteasecloudmusicapienhanced/api/module/user_binding'),
},
{
identifier: 'user_audio',
route: '/user/audio',
- module: require('@neteaseapireborn/api/module/user_audio'),
+ module: require('@neteasecloudmusicapienhanced/api/module/user_audio'),
},
{
identifier: 'user_account',
route: '/user/account',
- module: require('@neteaseapireborn/api/module/user_account'),
+ module: require('@neteasecloudmusicapienhanced/api/module/user_account'),
},
{
identifier: 'toplist_detail',
route: '/toplist/detail',
- module: require('@neteaseapireborn/api/module/toplist_detail'),
+ module: require('@neteasecloudmusicapienhanced/api/module/toplist_detail'),
},
{
identifier: 'toplist_artist',
route: '/toplist/artist',
- module: require('@neteaseapireborn/api/module/toplist_artist'),
+ module: require('@neteasecloudmusicapienhanced/api/module/toplist_artist'),
},
{
identifier: 'toplist',
route: '/toplist',
- module: require('@neteaseapireborn/api/module/toplist'),
+ module: require('@neteasecloudmusicapienhanced/api/module/toplist'),
},
{
identifier: 'topic_sublist',
route: '/topic/sublist',
- module: require('@neteaseapireborn/api/module/topic_sublist'),
+ module: require('@neteasecloudmusicapienhanced/api/module/topic_sublist'),
},
{
identifier: 'topic_detail_event_hot',
route: '/topic/detail/event/hot',
- module: require('@neteaseapireborn/api/module/topic_detail_event_hot'),
+ module: require('@neteasecloudmusicapienhanced/api/module/topic_detail_event_hot'),
},
{
identifier: 'topic_detail',
route: '/topic/detail',
- module: require('@neteaseapireborn/api/module/topic_detail'),
+ module: require('@neteasecloudmusicapienhanced/api/module/topic_detail'),
},
{
identifier: 'top_song',
route: '/top/song',
- module: require('@neteaseapireborn/api/module/top_song'),
+ module: require('@neteasecloudmusicapienhanced/api/module/top_song'),
},
{
identifier: 'top_playlist_highquality',
route: '/top/playlist/highquality',
- module: require('@neteaseapireborn/api/module/top_playlist_highquality'),
+ module: require('@neteasecloudmusicapienhanced/api/module/top_playlist_highquality'),
},
{
identifier: 'top_playlist',
route: '/top/playlist',
- module: require('@neteaseapireborn/api/module/top_playlist'),
+ module: require('@neteasecloudmusicapienhanced/api/module/top_playlist'),
},
{
identifier: 'top_mv',
route: '/top/mv',
- module: require('@neteaseapireborn/api/module/top_mv'),
+ module: require('@neteasecloudmusicapienhanced/api/module/top_mv'),
},
{
identifier: 'top_list',
route: '/top/list',
- module: require('@neteaseapireborn/api/module/top_list'),
+ module: require('@neteasecloudmusicapienhanced/api/module/top_list'),
},
{
identifier: 'top_artists',
route: '/top/artists',
- module: require('@neteaseapireborn/api/module/top_artists'),
+ module: require('@neteasecloudmusicapienhanced/api/module/top_artists'),
},
{
identifier: 'top_album',
route: '/top/album',
- module: require('@neteaseapireborn/api/module/top_album'),
+ module: require('@neteasecloudmusicapienhanced/api/module/top_album'),
},
{
identifier: 'song_url',
route: '/song/url',
- module: require('@neteaseapireborn/api/module/song_url'),
+ module: require('@neteasecloudmusicapienhanced/api/module/song_url'),
},
{
identifier: 'song_download_url',
route: '/song/download/url',
- module: require('@neteaseapireborn/api/module/song_download_url'),
+ module: require('@neteasecloudmusicapienhanced/api/module/song_download_url'),
},
{
identifier: 'song_detail',
route: '/song/detail',
- module: require('@neteaseapireborn/api/module/song_detail'),
+ module: require('@neteasecloudmusicapienhanced/api/module/song_detail'),
},
{
identifier: 'simi_mv',
route: '/simi/mv',
- module: require('@neteaseapireborn/api/module/simi_mv'),
+ module: require('@neteasecloudmusicapienhanced/api/module/simi_mv'),
},
{
identifier: 'simi_artist',
route: '/simi/artist',
- module: require('@neteaseapireborn/api/module/simi_artist'),
+ module: require('@neteasecloudmusicapienhanced/api/module/simi_artist'),
},
{
identifier: 'search',
route: '/search',
- module: require('@neteaseapireborn/api/module/search'),
+ module: require('@neteasecloudmusicapienhanced/api/module/search'),
},
{
identifier: 'scrobble',
route: '/scrobble',
- module: require('@neteaseapireborn/api/module/scrobble'),
+ module: require('@neteasecloudmusicapienhanced/api/module/scrobble'),
},
{
identifier: 'recommend_songs',
route: '/recommend/songs',
- module: require('@neteaseapireborn/api/module/recommend_songs'),
+ module: require('@neteasecloudmusicapienhanced/api/module/recommend_songs'),
},
{
identifier: 'recommend_resource',
route: '/recommend/resource',
- module: require('@neteaseapireborn/api/module/recommend_resource'),
+ module: require('@neteasecloudmusicapienhanced/api/module/recommend_resource'),
},
{
identifier: 'playmode_intelligence_list',
route: '/playmode/intelligence/list',
- module: require('@neteaseapireborn/api/module/playmode_intelligence_list'),
+ module: require('@neteasecloudmusicapienhanced/api/module/playmode_intelligence_list'),
},
{
identifier: 'playlist_video_recent',
route: '/playlist/video/recent',
- module: require('@neteaseapireborn/api/module/playlist_video_recent'),
+ module: require('@neteasecloudmusicapienhanced/api/module/playlist_video_recent'),
},
{
identifier: 'playlist_update',
route: '/playlist/update',
- module: require('@neteaseapireborn/api/module/playlist_update'),
+ module: require('@neteasecloudmusicapienhanced/api/module/playlist_update'),
},
{
identifier: 'playlist_tracks',
route: '/playlist/tracks',
- module: require('@neteaseapireborn/api/module/playlist_tracks'),
+ module: require('@neteasecloudmusicapienhanced/api/module/playlist_tracks'),
},
{
identifier: 'playlist_track_delete',
route: '/playlist/track/delete',
- module: require('@neteaseapireborn/api/module/playlist_track_delete'),
+ module: require('@neteasecloudmusicapienhanced/api/module/playlist_track_delete'),
},
{
identifier: 'playlist_track_all',
route: '/playlist/track/all',
- module: require('@neteaseapireborn/api/module/playlist_track_all'),
+ module: require('@neteasecloudmusicapienhanced/api/module/playlist_track_all'),
},
{
identifier: 'playlist_track_add',
route: '/playlist/track/add',
- module: require('@neteaseapireborn/api/module/playlist_track_add'),
+ module: require('@neteasecloudmusicapienhanced/api/module/playlist_track_add'),
},
{
identifier: 'playlist_tags_update',
route: '/playlist/tags/update',
- module: require('@neteaseapireborn/api/module/playlist_tags_update'),
+ module: require('@neteasecloudmusicapienhanced/api/module/playlist_tags_update'),
},
{
identifier: 'playlist_subscribers',
route: '/playlist/subscribers',
- module: require('@neteaseapireborn/api/module/playlist_subscribers'),
+ module: require('@neteasecloudmusicapienhanced/api/module/playlist_subscribers'),
},
{
identifier: 'playlist_subscribe',
route: '/playlist/subscribe',
- module: require('@neteaseapireborn/api/module/playlist_subscribe'),
+ module: require('@neteasecloudmusicapienhanced/api/module/playlist_subscribe'),
},
{
identifier: 'playlist_privacy',
route: '/playlist/privacy',
- module: require('@neteaseapireborn/api/module/playlist_privacy'),
+ module: require('@neteasecloudmusicapienhanced/api/module/playlist_privacy'),
},
{
identifier: 'playlist_order_update',
route: '/playlist/order/update',
- module: require('@neteaseapireborn/api/module/playlist_order_update'),
+ module: require('@neteasecloudmusicapienhanced/api/module/playlist_order_update'),
},
{
identifier: 'playlist_name_update',
route: '/playlist/name/update',
- module: require('@neteaseapireborn/api/module/playlist_name_update'),
+ module: require('@neteasecloudmusicapienhanced/api/module/playlist_name_update'),
},
{
identifier: 'playlist_mylike',
route: '/playlist/mylike',
- module: require('@neteaseapireborn/api/module/playlist_mylike'),
+ module: require('@neteasecloudmusicapienhanced/api/module/playlist_mylike'),
},
{
identifier: 'playlist_hot',
route: '/playlist/hot',
- module: require('@neteaseapireborn/api/module/playlist_hot'),
+ module: require('@neteasecloudmusicapienhanced/api/module/playlist_hot'),
},
{
identifier: 'playlist_highquality_tags',
route: '/playlist/highquality/tags',
- module: require('@neteaseapireborn/api/module/playlist_highquality_tags'),
+ module: require('@neteasecloudmusicapienhanced/api/module/playlist_highquality_tags'),
},
{
identifier: 'playlist_detail_dynamic',
route: '/playlist/detail/dynamic',
- module: require('@neteaseapireborn/api/module/playlist_detail_dynamic'),
+ module: require('@neteasecloudmusicapienhanced/api/module/playlist_detail_dynamic'),
},
{
identifier: 'playlist_detail',
route: '/playlist/detail',
- module: require('@neteaseapireborn/api/module/playlist_detail'),
+ module: require('@neteasecloudmusicapienhanced/api/module/playlist_detail'),
},
{
identifier: 'playlist_desc_update',
route: '/playlist/desc/update',
- module: require('@neteaseapireborn/api/module/playlist_desc_update'),
+ module: require('@neteasecloudmusicapienhanced/api/module/playlist_desc_update'),
},
{
identifier: 'playlist_delete',
route: '/playlist/delete',
- module: require('@neteaseapireborn/api/module/playlist_delete'),
+ module: require('@neteasecloudmusicapienhanced/api/module/playlist_delete'),
},
{
identifier: 'playlist_create',
route: '/playlist/create',
- module: require('@neteaseapireborn/api/module/playlist_create'),
+ module: require('@neteasecloudmusicapienhanced/api/module/playlist_create'),
},
{
identifier: 'playlist_cover_update',
route: '/playlist/cover/update',
- module: require('@neteaseapireborn/api/module/playlist_cover_update'),
+ module: require('@neteasecloudmusicapienhanced/api/module/playlist_cover_update'),
},
{
identifier: 'playlist_catlist',
route: '/playlist/catlist',
- module: require('@neteaseapireborn/api/module/playlist_catlist'),
+ module: require('@neteasecloudmusicapienhanced/api/module/playlist_catlist'),
},
{
identifier: 'personalized',
route: '/personalized',
- module: require('@neteaseapireborn/api/module/personalized'),
+ module: require('@neteasecloudmusicapienhanced/api/module/personalized'),
},
{
identifier: 'personal_fm',
route: '/personal_fm',
- module: require('@neteaseapireborn/api/module/personal_fm'),
+ module: require('@neteasecloudmusicapienhanced/api/module/personal_fm'),
},
{
identifier: 'mv_url',
route: '/mv/url',
- module: require('@neteaseapireborn/api/module/mv_url'),
+ module: require('@neteasecloudmusicapienhanced/api/module/mv_url'),
},
{
identifier: 'mv_sublist',
route: '/mv/sublist',
- module: require('@neteaseapireborn/api/module/mv_sublist'),
+ module: require('@neteasecloudmusicapienhanced/api/module/mv_sublist'),
},
{
identifier: 'mv_sub',
route: '/mv/sub',
- module: require('@neteaseapireborn/api/module/mv_sub'),
+ module: require('@neteasecloudmusicapienhanced/api/module/mv_sub'),
},
{
identifier: 'mv_first',
route: '/mv/first',
- module: require('@neteaseapireborn/api/module/mv_first'),
+ module: require('@neteasecloudmusicapienhanced/api/module/mv_first'),
},
{
identifier: 'mv_exclusive_rcmd',
route: '/mv/exclusive/rcmd',
- module: require('@neteaseapireborn/api/module/mv_exclusive_rcmd'),
+ module: require('@neteasecloudmusicapienhanced/api/module/mv_exclusive_rcmd'),
},
{
identifier: 'mv_detail_info',
route: '/mv/detail/info',
- module: require('@neteaseapireborn/api/module/mv_detail_info'),
+ module: require('@neteasecloudmusicapienhanced/api/module/mv_detail_info'),
},
{
identifier: 'mv_detail',
route: '/mv/detail',
- module: require('@neteaseapireborn/api/module/mv_detail'),
+ module: require('@neteasecloudmusicapienhanced/api/module/mv_detail'),
},
{
identifier: 'mv_all',
route: '/mv/all',
- module: require('@neteaseapireborn/api/module/mv_all'),
+ module: require('@neteasecloudmusicapienhanced/api/module/mv_all'),
},
{
identifier: 'lyric',
route: '/lyric',
- module: require('@neteaseapireborn/api/module/lyric'),
+ module: require('@neteasecloudmusicapienhanced/api/module/lyric'),
},
{
identifier: 'logout',
route: '/logout',
- module: require('@neteaseapireborn/api/module/logout'),
+ module: require('@neteasecloudmusicapienhanced/api/module/logout'),
},
{
identifier: 'login_status',
route: '/login/status',
- module: require('@neteaseapireborn/api/module/login_status'),
+ module: require('@neteasecloudmusicapienhanced/api/module/login_status'),
},
{
identifier: 'login_refresh',
route: '/login/refresh',
- module: require('@neteaseapireborn/api/module/login_refresh'),
+ module: require('@neteasecloudmusicapienhanced/api/module/login_refresh'),
},
{
identifier: 'login_qr_key',
route: '/login/qr/key',
- module: require('@neteaseapireborn/api/module/login_qr_key'),
+ module: require('@neteasecloudmusicapienhanced/api/module/login_qr_key'),
},
{
identifier: 'login_qr_create',
route: '/login/qr/create',
- module: require('@neteaseapireborn/api/module/login_qr_create'),
+ module: require('@neteasecloudmusicapienhanced/api/module/login_qr_create'),
},
{
identifier: 'login_qr_check',
route: '/login/qr/check',
- module: require('@neteaseapireborn/api/module/login_qr_check'),
+ module: require('@neteasecloudmusicapienhanced/api/module/login_qr_check'),
},
{
identifier: 'login_cellphone',
route: '/login/cellphone',
- module: require('@neteaseapireborn/api/module/login_cellphone'),
+ module: require('@neteasecloudmusicapienhanced/api/module/login_cellphone'),
},
{
identifier: 'login',
route: '/login',
- module: require('@neteaseapireborn/api/module/login'),
+ module: require('@neteasecloudmusicapienhanced/api/module/login'),
},
{
identifier: 'likelist',
route: '/likelist',
- module: require('@neteaseapireborn/api/module/likelist'),
+ module: require('@neteasecloudmusicapienhanced/api/module/likelist'),
},
{
identifier: 'like',
route: '/like',
- module: require('@neteaseapireborn/api/module/like'),
+ module: require('@neteasecloudmusicapienhanced/api/module/like'),
},
{
identifier: 'follow',
route: '/follow',
- module: require('@neteaseapireborn/api/module/follow'),
+ module: require('@neteasecloudmusicapienhanced/api/module/follow'),
},
{
identifier: 'fm_trash',
route: '/fm_trash',
- module: require('@neteaseapireborn/api/module/fm_trash'),
+ module: require('@neteasecloudmusicapienhanced/api/module/fm_trash'),
},
{
identifier: 'daily_signin',
route: '/daily_signin',
- module: require('@neteaseapireborn/api/module/daily_signin'),
+ module: require('@neteasecloudmusicapienhanced/api/module/daily_signin'),
},
{
identifier: 'cloudsearch',
route: '/cloudsearch',
- module: require('@neteaseapireborn/api/module/cloudsearch'),
+ module: require('@neteasecloudmusicapienhanced/api/module/cloudsearch'),
},
{
identifier: 'cloud',
route: '/cloud',
- module: require('@neteaseapireborn/api/module/cloud'),
+ module: require('@neteasecloudmusicapienhanced/api/module/cloud'),
},
{
identifier: 'check_music',
route: '/check/music',
- module: require('@neteaseapireborn/api/module/check_music'),
+ module: require('@neteasecloudmusicapienhanced/api/module/check_music'),
},
{
identifier: 'cellphone_existence_check',
route: '/cellphone/existence/check',
- module: require('@neteaseapireborn/api/module/cellphone_existence_check'),
+ module: require('@neteasecloudmusicapienhanced/api/module/cellphone_existence_check'),
},
{
identifier: 'captcha_verify',
route: '/captcha/verify',
- module: require('@neteaseapireborn/api/module/captcha_verify'),
+ module: require('@neteasecloudmusicapienhanced/api/module/captcha_verify'),
},
{
identifier: 'captcha_sent',
route: '/captcha/sent',
- module: require('@neteaseapireborn/api/module/captcha_sent'),
+ module: require('@neteasecloudmusicapienhanced/api/module/captcha_sent'),
},
{
identifier: 'calendar',
route: '/calendar',
- module: require('@neteaseapireborn/api/module/calendar'),
+ module: require('@neteasecloudmusicapienhanced/api/module/calendar'),
},
{
identifier: 'batch',
route: '/batch',
- module: require('@neteaseapireborn/api/module/batch'),
+ module: require('@neteasecloudmusicapienhanced/api/module/batch'),
},
{
identifier: 'banner',
route: '/banner',
- module: require('@neteaseapireborn/api/module/banner'),
+ module: require('@neteasecloudmusicapienhanced/api/module/banner'),
},
{
identifier: 'avatar_upload',
route: '/avatar/upload',
- module: require('@neteaseapireborn/api/module/avatar_upload'),
+ module: require('@neteasecloudmusicapienhanced/api/module/avatar_upload'),
},
{
identifier: 'audio_match',
route: '/audio/match',
- module: require('@neteaseapireborn/api/module/audio_match'),
+ module: require('@neteasecloudmusicapienhanced/api/module/audio_match'),
},
{
identifier: 'artists',
route: '/artists',
- module: require('@neteaseapireborn/api/module/artists'),
+ module: require('@neteasecloudmusicapienhanced/api/module/artists'),
},
{
identifier: 'artist_video',
route: '/artist/video',
- module: require('@neteaseapireborn/api/module/artist_video'),
+ module: require('@neteasecloudmusicapienhanced/api/module/artist_video'),
},
{
identifier: 'artist_top_song',
route: '/artist/top/song',
- module: require('@neteaseapireborn/api/module/artist_top_song'),
+ module: require('@neteasecloudmusicapienhanced/api/module/artist_top_song'),
},
{
identifier: 'artist_sublist',
route: '/artist/sublist',
- module: require('@neteaseapireborn/api/module/artist_sublist'),
+ module: require('@neteasecloudmusicapienhanced/api/module/artist_sublist'),
},
{
identifier: 'artist_sub',
route: '/artist/sub',
- module: require('@neteaseapireborn/api/module/artist_sub'),
+ module: require('@neteasecloudmusicapienhanced/api/module/artist_sub'),
},
{
identifier: 'artist_songs',
route: '/artist/songs',
- module: require('@neteaseapireborn/api/module/artist_songs'),
+ module: require('@neteasecloudmusicapienhanced/api/module/artist_songs'),
},
{
identifier: 'artist_new_song',
route: '/artist/new/song',
- module: require('@neteaseapireborn/api/module/artist_new_song'),
+ module: require('@neteasecloudmusicapienhanced/api/module/artist_new_song'),
},
{
identifier: 'artist_new_mv',
route: '/artist/new/mv',
- module: require('@neteaseapireborn/api/module/artist_new_mv'),
+ module: require('@neteasecloudmusicapienhanced/api/module/artist_new_mv'),
},
{
identifier: 'artist_mv',
route: '/artist/mv',
- module: require('@neteaseapireborn/api/module/artist_mv'),
+ module: require('@neteasecloudmusicapienhanced/api/module/artist_mv'),
},
{
identifier: 'artist_list',
route: '/artist/list',
- module: require('@neteaseapireborn/api/module/artist_list'),
+ module: require('@neteasecloudmusicapienhanced/api/module/artist_list'),
},
{
identifier: 'artist_fans',
route: '/artist/fans',
- module: require('@neteaseapireborn/api/module/artist_fans'),
+ module: require('@neteasecloudmusicapienhanced/api/module/artist_fans'),
},
{
identifier: 'artist_detail',
route: '/artist/detail',
- module: require('@neteaseapireborn/api/module/artist_detail'),
+ module: require('@neteasecloudmusicapienhanced/api/module/artist_detail'),
},
{
identifier: 'artist_desc',
route: '/artist/desc',
- module: require('@neteaseapireborn/api/module/artist_desc'),
+ module: require('@neteasecloudmusicapienhanced/api/module/artist_desc'),
},
{
identifier: 'artist_album',
route: '/artist/album',
- module: require('@neteaseapireborn/api/module/artist_album'),
+ module: require('@neteasecloudmusicapienhanced/api/module/artist_album'),
},
{
identifier: 'album_sublist',
route: '/album/sublist',
- module: require('@neteaseapireborn/api/module/album_sublist'),
+ module: require('@neteasecloudmusicapienhanced/api/module/album_sublist'),
},
{
identifier: 'album_sub',
route: '/album/sub',
- module: require('@neteaseapireborn/api/module/album_sub'),
+ module: require('@neteasecloudmusicapienhanced/api/module/album_sub'),
},
{
identifier: 'album_songsaleboard',
route: '/album/songsaleboard',
- module: require('@neteaseapireborn/api/module/album_songsaleboard'),
+ module: require('@neteasecloudmusicapienhanced/api/module/album_songsaleboard'),
},
{
identifier: 'album_newest',
route: '/album/newest',
- module: require('@neteaseapireborn/api/module/album_newest'),
+ module: require('@neteasecloudmusicapienhanced/api/module/album_newest'),
},
{
identifier: 'album_new',
route: '/album/new',
- module: require('@neteaseapireborn/api/module/album_new'),
+ module: require('@neteasecloudmusicapienhanced/api/module/album_new'),
},
{
identifier: 'album_list_style',
route: '/album/list/style',
- module: require('@neteaseapireborn/api/module/album_list_style'),
+ module: require('@neteasecloudmusicapienhanced/api/module/album_list_style'),
},
{
identifier: 'album_list',
route: '/album/list',
- module: require('@neteaseapireborn/api/module/album_list'),
+ module: require('@neteasecloudmusicapienhanced/api/module/album_list'),
},
{
identifier: 'album_detail_dynamic',
route: '/album/detail/dynamic',
- module: require('@neteaseapireborn/api/module/album_detail_dynamic'),
+ module: require('@neteasecloudmusicapienhanced/api/module/album_detail_dynamic'),
},
{
identifier: 'album_detail',
route: '/album/detail',
- module: require('@neteaseapireborn/api/module/album_detail'),
+ module: require('@neteasecloudmusicapienhanced/api/module/album_detail'),
},
{
identifier: 'album',
route: '/album',
- module: require('@neteaseapireborn/api/module/album'),
+ module: require('@neteasecloudmusicapienhanced/api/module/album'),
},
{
identifier: 'activate_init_profile',
route: '/activate/init/profile',
- module: require('@neteaseapireborn/api/module/activate_init_profile'),
+ module: require('@neteasecloudmusicapienhanced/api/module/activate_init_profile'),
},
{
identifier: 'api',
route: '/api',
- module: require('@neteaseapireborn/api/module/api'),
+ module: require('@neteasecloudmusicapienhanced/api/module/api'),
},
];
diff --git a/src/store/actions.js b/src/store/actions.js
index 83c0666ef9..6539073911 100644
--- a/src/store/actions.js
+++ b/src/store/actions.js
@@ -76,6 +76,8 @@ export default {
}
},
fetchLikedSongsWithDetails: ({ state, commit }) => {
+ if (!state.data.likedSongPlaylistID) return Promise.resolve();
+
return getPlaylistDetail(state.data.likedSongPlaylistID, true).then(
result => {
if (result.playlist?.trackIds?.length === 0) {
diff --git a/src/utils/Player.js b/src/utils/Player.js
index a0073ec45b..cdb39d2ebd 100644
--- a/src/utils/Player.js
+++ b/src/utils/Player.js
@@ -232,11 +232,16 @@ export default class {
this._personalFMNextTrack.id === 0 ||
this._personalFMTrack.id === this._personalFMNextTrack.id
) {
- personalFM().then(result => {
- this._personalFMTrack = result.data[0];
- this._personalFMNextTrack = result.data[1];
- return this._personalFMTrack;
- });
+ personalFM()
+ .then(result => {
+ if (!result?.data?.length) return this._personalFMTrack;
+ this._personalFMTrack = result.data[0];
+ this._personalFMNextTrack = result.data[1] ?? result.data[0];
+ return this._personalFMTrack;
+ })
+ .catch(() => {
+ return this._personalFMTrack;
+ });
}
}
_setPlaying(isPlaying) {
diff --git a/src/utils/auth.js b/src/utils/auth.js
index 6c43863e38..92b22c9780 100644
--- a/src/utils/auth.js
+++ b/src/utils/auth.js
@@ -2,12 +2,49 @@ import Cookies from 'js-cookie';
import { logout } from '@/api/auth';
import store from '@/store';
+const cookieAttributes = new Set([
+ 'domain',
+ 'expires',
+ 'httponly',
+ 'max-age',
+ 'path',
+ 'samesite',
+ 'secure',
+]);
+
+export function normalizeCookieString(string) {
+ const cookies = string.includes(';;')
+ ? string.split(';;')
+ : string.split(';');
+
+ return cookies
+ .map(cookie => {
+ const [rawKey, ...rawValue] = cookie.trim().split('=');
+ const key = rawKey?.trim();
+ const value = rawValue.join('=').trim();
+
+ if (!key || !value || cookieAttributes.has(key.toLowerCase())) {
+ return null;
+ }
+
+ return `${key}=${value}`;
+ })
+ .filter(Boolean)
+ .join('; ');
+}
+
export function setCookies(string) {
- const cookies = string.split(';;');
- cookies.map(cookie => {
- document.cookie = cookie;
- const cookieKeyValue = cookie.split(';')[0].split('=');
- localStorage.setItem(`cookie-${cookieKeyValue[0]}`, cookieKeyValue[1]);
+ const cookies = normalizeCookieString(string).split(';');
+
+ cookies.forEach(cookie => {
+ const [rawKey, ...rawValue] = cookie.trim().split('=');
+ const key = rawKey?.trim();
+ const value = rawValue.join('=').trim();
+
+ if (!key || !value || cookieAttributes.has(key.toLowerCase())) return;
+
+ document.cookie = `${key}=${value}; path=/`;
+ localStorage.setItem(`cookie-${key}`, value);
});
}
@@ -15,6 +52,13 @@ export function getCookie(key) {
return Cookies.get(key) ?? localStorage.getItem(`cookie-${key}`);
}
+export function getCookieString() {
+ return Object.keys(localStorage)
+ .filter(key => key.startsWith('cookie-'))
+ .map(key => `${key.replace('cookie-', '')}=${localStorage.getItem(key)}`)
+ .join('; ');
+}
+
export function removeCookie(key) {
Cookies.remove(key);
localStorage.removeItem(`cookie-${key}`);
diff --git a/src/utils/playList.js b/src/utils/playList.js
index d135fc3789..23d95b0aa8 100644
--- a/src/utils/playList.js
+++ b/src/utils/playList.js
@@ -29,19 +29,22 @@ export function getListSourcePath() {
export async function getRecommendPlayList(limit, removePrivateRecommand) {
if (isAccountLoggedIn()) {
- const playlists = await Promise.all([
+ const playlists = await Promise.allSettled([
dailyRecommendPlaylist(),
recommendPlaylist({ limit }),
]);
- let recommend = playlists[0].recommend ?? [];
+ const daily = playlists[0].status === 'fulfilled' ? playlists[0].value : {};
+ const personalized =
+ playlists[1].status === 'fulfilled' ? playlists[1].value : {};
+ let recommend = daily.recommend ?? [];
if (recommend.length) {
if (removePrivateRecommand) recommend = recommend.slice(1);
await replaceRecommendResult(recommend);
}
- return recommend.concat(playlists[1].result).slice(0, limit);
+ return recommend.concat(personalized.result ?? []).slice(0, limit);
} else {
- const response = await recommendPlaylist({ limit });
- return response.result;
+ const response = await recommendPlaylist({ limit }).catch(() => ({}));
+ return response.result ?? [];
}
}
diff --git a/src/utils/request.js b/src/utils/request.js
index 6ac7bc3842..cba8c9cfdf 100644
--- a/src/utils/request.js
+++ b/src/utils/request.js
@@ -6,12 +6,20 @@ let baseURL = '';
// Web 和 Electron 跑在不同端口避免同时启动时冲突
if (process.env.IS_ELECTRON) {
if (process.env.NODE_ENV === 'production') {
- baseURL = process.env.VUE_APP_ELECTRON_API_URL;
+ baseURL = process.env.VUE_APP_ELECTRON_API_URL || '/api';
} else {
- baseURL = process.env.VUE_APP_ELECTRON_API_URL_DEV;
+ baseURL = process.env.VUE_APP_ELECTRON_API_URL_DEV || '/api';
}
} else {
- baseURL = process.env.VUE_APP_NETEASE_API_URL;
+ baseURL = process.env.VUE_APP_NETEASE_API_URL || '/api';
+}
+
+function getSettings() {
+ try {
+ return JSON.parse(localStorage.getItem('settings')) || {};
+ } catch (error) {
+ return {};
+ }
}
const service = axios.create({
@@ -39,17 +47,16 @@ service.interceptors.request.use(function (config) {
}
// Force real_ip
- const enableRealIP = JSON.parse(
- localStorage.getItem('settings')
- ).enableRealIP;
- const realIP = JSON.parse(localStorage.getItem('settings')).realIP;
+ const settings = getSettings();
+ const enableRealIP = settings.enableRealIP;
+ const realIP = settings.realIP;
if (process.env.VUE_APP_REAL_IP) {
config.params.realIP = process.env.VUE_APP_REAL_IP;
} else if (enableRealIP) {
config.params.realIP = realIP;
}
- const proxy = JSON.parse(localStorage.getItem('settings')).proxyConfig;
+ const proxy = settings.proxyConfig || {};
if (['HTTP', 'HTTPS'].includes(proxy.protocol)) {
config.params.proxy = `${proxy.protocol}://${proxy.server}:${proxy.port}`;
}
@@ -93,6 +100,8 @@ service.interceptors.response.use(
router.push({ name: 'login' });
}
}
+
+ return Promise.reject(error);
}
);
diff --git a/src/views/home.vue b/src/views/home.vue
index b166e7e802..f898a56086 100644
--- a/src/views/home.vue
+++ b/src/views/home.vue
@@ -121,9 +121,13 @@ export default {
newAlbums({
area: this.settings.musicLanguage ?? 'ALL',
limit: 10,
- }).then(data => {
- this.newReleasesAlbum.items = data.albums;
- });
+ })
+ .then(data => {
+ this.newReleasesAlbum.items = data?.albums ?? [];
+ })
+ .catch(() => {
+ this.newReleasesAlbum.items = [];
+ });
const toplistOfArtistsAreaTable = {
all: null,
@@ -134,22 +138,31 @@ export default {
};
toplistOfArtists(
toplistOfArtistsAreaTable[this.settings.musicLanguage ?? 'all']
- ).then(data => {
- let indexs = [];
- while (indexs.length < 6) {
- let tmp = ~~(Math.random() * 100);
- if (!indexs.includes(tmp)) indexs.push(tmp);
- }
- this.recommendArtists.indexs = indexs;
- this.recommendArtists.items = data.list.artists.filter((l, index) =>
- indexs.includes(index)
- );
- });
- toplists().then(data => {
- this.topList.items = data.list.filter(l =>
- this.topList.ids.includes(l.id)
- );
- });
+ )
+ .then(data => {
+ let indexs = [];
+ while (indexs.length < 6) {
+ let tmp = ~~(Math.random() * 100);
+ if (!indexs.includes(tmp)) indexs.push(tmp);
+ }
+ this.recommendArtists.indexs = indexs;
+ const artists = data?.list?.artists ?? [];
+ this.recommendArtists.items = artists.filter((l, index) =>
+ indexs.includes(index)
+ );
+ })
+ .catch(() => {
+ this.recommendArtists.items = [];
+ });
+ toplists()
+ .then(data => {
+ this.topList.items = (data?.list ?? []).filter(l =>
+ this.topList.ids.includes(l.id)
+ );
+ })
+ .catch(() => {
+ this.topList.items = [];
+ });
this.$refs.DailyTracksCard.loadDailyTracks();
},
},
diff --git a/src/views/loginAccount.vue b/src/views/loginAccount.vue
index 8b2a2d3300..6db59a15b5 100644
--- a/src/views/loginAccount.vue
+++ b/src/views/loginAccount.vue
@@ -51,7 +51,7 @@
-
+
@@ -116,7 +140,8 @@ import QRCode from 'qrcode';
import md5 from 'crypto-js/md5';
import NProgress from 'nprogress';
import { mapMutations } from 'vuex';
-import { setCookies } from '@/utils/auth';
+import { normalizeCookieString, removeCookie, setCookies } from '@/utils/auth';
+import { userAccountWithCookie } from '@/api/user';
import nativeAlert from '@/utils/nativeAlert';
import {
loginWithPhone,
@@ -136,6 +161,8 @@ export default {
email: '',
password: '',
smsCode: '',
+ cookieText: '',
+ cookieError: '',
inputFocus: '',
qrCodeKey: '',
qrCodeSvg: '',
@@ -149,7 +176,9 @@ export default {
},
},
created() {
- if (['phone', 'email', 'qrCode'].includes(this.$route.query.mode)) {
+ if (
+ ['phone', 'email', 'qrCode', 'cookie'].includes(this.$route.query.mode)
+ ) {
this.mode = this.$route.query.mode;
}
this.getQrCodeKey();
@@ -185,7 +214,9 @@ export default {
return true;
},
login() {
- if (this.mode === 'phone') {
+ if (this.mode === 'cookie') {
+ this.loginWithCookie();
+ } else if (this.mode === 'phone') {
this.processing = this.validatePhone();
if (!this.processing) return;
loginWithPhone({
@@ -232,36 +263,109 @@ export default {
nativeAlert(data.msg ?? data.message ?? '账号或密码错误,请检查');
}
},
- getQrCodeKey() {
- return loginQrCodeKey().then(result => {
- if (result.code === 200) {
- this.qrCodeKey = result.data.unikey;
- QRCode.toString(
- `https://music.163.com/login?codekey=${this.qrCodeKey}`,
- {
- width: 192,
- margin: 0,
- color: {
- dark: '#335eea',
- light: '#00000000',
- },
- type: 'svg',
+ loginWithCookie() {
+ if (!this.cookieText.includes('MUSIC_U=')) {
+ this.cookieError = 'Cookie 中缺少 MUSIC_U';
+ return;
+ }
+
+ this.processing = true;
+ this.cookieError = '';
+ const cookie = normalizeCookieString(this.cookieText);
+ userAccountWithCookie(cookie)
+ .then(result => {
+ if (!result?.profile?.userId) {
+ const message = result?.msg ?? result?.message ?? result?.code;
+ throw new Error(
+ message
+ ? `无法获取账号信息:${message}`
+ : '无法获取账号信息,请检查 Cookie 是否有效'
+ );
+ }
+
+ setCookies(cookie);
+ this.updateData({ key: 'loginMode', value: 'account' });
+ this.updateData({ key: 'user', value: result.profile });
+ return this.$store.dispatch('fetchLikedPlaylist');
+ })
+ .then(() => {
+ this.processing = false;
+ this.$router.push({ path: '/library' });
+ })
+ .catch(error => {
+ console.error('Cookie login failed', error);
+ this.processing = false;
+ this.cookieError = error.message ?? `Cookie 登录失败:${error}`;
+ this.updateData({ key: 'loginMode', value: null });
+ removeCookie('MUSIC_U');
+ removeCookie('__csrf');
+ });
+ },
+ loginWithWeb() {
+ if (!this.isElectron) {
+ window.open('https://music.163.com/#/login', '_blank', 'noopener');
+ return;
+ }
+
+ this.processing = true;
+ this.cookieError = '';
+ try {
+ const { ipcRenderer } = window.require('electron');
+ ipcRenderer
+ .invoke('open-netease-web-login')
+ .then(cookie => {
+ if (!cookie) {
+ this.processing = false;
+ return;
}
- )
- .then(svg => {
- this.qrCodeSvg = `data:image/svg+xml;utf8,${encodeURIComponent(
- svg
- )}`;
- })
- .catch(err => {
- console.error(err);
- })
- .finally(() => {
- NProgress.done();
- });
- }
- this.checkQrCodeLogin();
- });
+
+ this.cookieText = cookie;
+ this.loginWithCookie();
+ })
+ .catch(error => {
+ this.processing = false;
+ this.cookieError = error.message ?? `网页登录失败:${error}`;
+ });
+ } catch (error) {
+ this.processing = false;
+ this.cookieError = `网页登录失败:${error}`;
+ }
+ },
+ getQrCodeKey() {
+ return loginQrCodeKey()
+ .then(result => {
+ if (result?.code === 200 && result?.data?.unikey) {
+ this.qrCodeKey = result.data.unikey;
+ QRCode.toString(
+ `https://music.163.com/login?codekey=${this.qrCodeKey}`,
+ {
+ width: 192,
+ margin: 0,
+ color: {
+ dark: '#335eea',
+ light: '#00000000',
+ },
+ type: 'svg',
+ }
+ )
+ .then(svg => {
+ this.qrCodeSvg = `data:image/svg+xml;utf8,${encodeURIComponent(
+ svg
+ )}`;
+ })
+ .catch(err => {
+ console.error(err);
+ })
+ .finally(() => {
+ NProgress.done();
+ });
+ }
+ this.checkQrCodeLogin();
+ })
+ .catch(error => {
+ this.cookieError = error?.message ?? `二维码登录初始化失败:${error}`;
+ NProgress.done();
+ });
},
checkQrCodeLogin() {
// 清除二维码检测
@@ -488,4 +592,61 @@ button.loading {
text-align: center;
margin-bottom: 28px;
}
+.cookie-login {
+ width: 300px;
+
+ .web-login-button {
+ width: 100%;
+ border-radius: 8px;
+ padding: 10px 12px;
+ margin-bottom: 10px;
+ background: var(--color-primary-bg);
+ color: var(--color-primary);
+ font-size: 14px;
+ font-weight: 600;
+ transition: 0.2s;
+
+ &:hover {
+ transform: scale(1.03);
+ }
+
+ &:active {
+ transform: scale(0.97);
+ }
+ }
+
+ textarea {
+ width: 100%;
+ min-height: 128px;
+ resize: vertical;
+ box-sizing: border-box;
+ border: none;
+ border-radius: 8px;
+ padding: 12px;
+ background: var(--color-secondary-bg);
+ color: var(--color-text);
+ font-size: 13px;
+ line-height: 1.5;
+ }
+
+ textarea:focus {
+ outline: none;
+ background: var(--color-primary-bg);
+ }
+
+ .cookie-tip {
+ margin-top: 8px;
+ color: var(--color-text);
+ font-size: 12px;
+ line-height: 1.5;
+ opacity: 0.58;
+ }
+
+ .cookie-error {
+ margin-top: 8px;
+ color: #e9546b;
+ font-size: 12px;
+ line-height: 1.5;
+ }
+}
diff --git a/src/views/mv.vue b/src/views/mv.vue
index 54dd54499c..a57dd63ac6 100644
--- a/src/views/mv.vue
+++ b/src/views/mv.vue
@@ -56,7 +56,7 @@ import MvRow from '@/components/MvRow.vue';
import { mapActions } from 'vuex';
export default {
- name: 'mv',
+ name: 'Mv',
components: {
MvRow,
ButtonIcon,
diff --git a/src/views/settings.vue b/src/views/settings.vue
index 08f23d2b14..3387803548 100644
--- a/src/views/settings.vue
+++ b/src/views/settings.vue
@@ -811,10 +811,11 @@
import { mapState, mapActions } from 'vuex';
import { isLooseLoggedIn, doLogout } from '@/utils/auth';
import { auth as lastfmAuth } from '@/api/lastfm';
-import {
- changeAppearance,
- changeThemeColor,
- bytesToSize } from '@/utils/common';
+import {
+ changeAppearance,
+ changeThemeColor,
+ bytesToSize,
+} from '@/utils/common';
import { countDBSize, clearDB } from '@/utils/db';
import pkg from '../../package.json';
diff --git a/vue.config.js b/vue.config.js
index bbbc54e07a..017f349efc 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -70,7 +70,7 @@ module.exports = {
.end()
.use('esbuild-loader')
.loader('esbuild-loader')
- .options({ target: 'es2015', format: "cjs" })
+ .options({ target: 'es2015', format: 'cjs' })
.end();
// LimitChunkCountPlugin 可以通过合并块来对块进行后期处理。用以解决 chunk 包太多的问题
@@ -187,7 +187,7 @@ module.exports = {
.end()
.use('esbuild-loader')
.loader('esbuild-loader')
- .options({ target: 'es2015', format: "cjs" })
+ .options({ target: 'es2015', format: 'cjs' })
.end();
},
// 渲染线程的配置文件
diff --git a/yarn.lock b/yarn.lock
index f6390d0129..8e514921c7 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -999,6 +999,11 @@
"@babel/helper-validator-identifier" "^7.22.20"
to-fast-properties "^2.0.0"
+"@borewit/text-codec@^0.2.1", "@borewit/text-codec@^0.2.2":
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/@borewit/text-codec/-/text-codec-0.2.2.tgz#75025f735c0983b3a871668804a57387e3649375"
+ integrity sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==
+
"@develar/schema-utils@~2.6.5":
version "2.6.5"
resolved "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.6.5.tgz#3ece22c5838402419a6e0425f85742b961d9b6c6"
@@ -1659,26 +1664,37 @@
call-me-maybe "^1.0.1"
glob-to-regexp "^0.3.0"
-"@neteaseapireborn/api@^4.29.7":
- version "4.29.7"
- resolved "https://registry.npmmirror.com/@neteaseapireborn/api/-/api-4.29.7.tgz#14fd91504150564ffe7ebe9253b1e3eeb9d041d4"
- integrity sha512-cjjuJ4XBlmklKjWpI1IJRzA6etrhWBCRgk8rtrZZ4JSEPfVmXGLew5DV80owGKSHqnVDAxGQkraxesqX7O2PDQ==
+"@neteasecloudmusicapienhanced/api@^4.29.7":
+ version "4.36.1"
+ resolved "https://registry.yarnpkg.com/@neteasecloudmusicapienhanced/api/-/api-4.36.1.tgz#8492ed077c9c82a4aa013b3fe5819e7d585a2c7e"
+ integrity sha512-Do677SCn+I62Sk+CWxQVinG8LRhD1qejrsNjoTT9twfU+JzdjK1VsYGR7k3IsEfPkZudKLdQUJq63ohfxQ5WPg==
dependencies:
- "@unblockneteasemusic/server" "^0.28.0"
- axios "^1.12.2"
+ "@neteasecloudmusicapienhanced/unblockmusic-utils" "^0.3.3"
+ axios "^1.18.0"
crypto-js "^4.2.0"
- dotenv "^16.6.1"
- express "^4.21.2"
+ dotenv "^17.4.2"
+ express "^5.2.1"
express-fileupload "^1.5.2"
- md5 "^2.3.0"
- music-metadata "^7.14.0"
- node-forge "^1.3.1"
+ gzip "^0.1.0"
+ music-metadata "^11.13.0"
+ node-forge "^1.4.0"
pac-proxy-agent "^7.2.0"
qrcode "^1.5.4"
safe-decode-uri-component "^1.2.1"
tunnel "^0.0.6"
xml2js "^0.6.2"
- yargs "^17.7.2"
+ yargs "^18.0.0"
+
+"@neteasecloudmusicapienhanced/unblockmusic-utils@^0.3.3":
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/@neteasecloudmusicapienhanced/unblockmusic-utils/-/unblockmusic-utils-0.3.3.tgz#56f68ac1b51a0fdfe8034e1ef5ccf368572c74fb"
+ integrity sha512-Lm2Zxod4Qfhp3HNDmaHxzJPLiMfMNkUT2PXp0VVrDW+/dDZBfSANO+pnCHx+MkK7tDUb3wGwYp5q2w9Kw1+4OA==
+ dependencies:
+ "@unblockneteasemusic/server" "^0.28.0"
+ axios "^1.16.1"
+ dotenv "^17.4.2"
+ express "^4.22.2"
+ https "^1.0.0"
"@node-ipc/js-queue@2.0.3":
version "2.0.3"
@@ -1844,6 +1860,14 @@
dependencies:
defer-to-connect "^1.0.1"
+"@tokenizer/inflate@^0.4.1":
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/@tokenizer/inflate/-/inflate-0.4.1.tgz#fa6cdb8366151b3cc8426bf9755c1ea03a2fba08"
+ integrity sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==
+ dependencies:
+ debug "^4.4.3"
+ token-types "^6.1.1"
+
"@tokenizer/token@^0.3.0":
version "0.3.0"
resolved "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz#fe98a93fe789247e998c75e74e9c7c63217aa276"
@@ -2826,6 +2850,14 @@ abstract-socket@^2.0.0:
bindings "^1.2.1"
nan "^2.12.1"
+accepts@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/accepts/-/accepts-2.0.0.tgz#bbcf4ba5075467f3f2131eab3cffc73c2f5d7895"
+ integrity sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==
+ dependencies:
+ mime-types "^3.0.0"
+ negotiator "^1.0.0"
+
accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8:
version "1.3.8"
resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e"
@@ -2965,6 +2997,11 @@ ansi-regex@^5.0.1:
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
+ansi-regex@^6.2.2:
+ version "6.2.2"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.2.2.tgz#60216eea464d864597ce2832000738a0589650c1"
+ integrity sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==
+
ansi-styles@^2.2.1:
version "2.2.1"
resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
@@ -2984,6 +3021,11 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0:
dependencies:
color-convert "^2.0.1"
+ansi-styles@^6.2.1:
+ version "6.2.3"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.3.tgz#c044d5dcc521a076413472597a1acb1f103c4041"
+ integrity sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==
+
any-base@^1.1.0:
version "1.1.0"
resolved "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz#ae101a62bc08a597b4c9ab5b7089d456630549fe"
@@ -3312,14 +3354,15 @@ axios@^0.26.1:
dependencies:
follow-redirects "^1.14.8"
-axios@^1.12.2:
- version "1.12.2"
- resolved "https://registry.npmmirror.com/axios/-/axios-1.12.2.tgz#6c307390136cf7a2278d09cec63b136dfc6e6da7"
- integrity sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==
+axios@^1.16.1, axios@^1.18.0:
+ version "1.18.1"
+ resolved "https://registry.yarnpkg.com/axios/-/axios-1.18.1.tgz#d63f9863bcd8938815c86f9e2abd380189d96dfe"
+ integrity sha512-3nTvFlvpn9Zu/RkHUqtc7/+al4UpRW5az71ap5zccp6e8RAYEzhMTecX8Dz1wWDYrPpUoB1HAQEGEAEvUr7S9g==
dependencies:
- follow-redirects "^1.15.6"
- form-data "^4.0.4"
- proxy-from-env "^1.1.0"
+ follow-redirects "^1.16.0"
+ form-data "^4.0.5"
+ https-proxy-agent "^5.0.1"
+ proxy-from-env "^2.1.0"
babel-eslint@^10.1.0:
version "10.1.0"
@@ -3556,6 +3599,39 @@ body-parser@1.20.3:
type-is "~1.6.18"
unpipe "1.0.0"
+body-parser@^2.2.1:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-2.3.0.tgz#6d8662f4d8c336028b8ac9aa24251b0ca64ba437"
+ integrity sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==
+ dependencies:
+ bytes "^3.1.2"
+ content-type "^2.0.0"
+ debug "^4.4.3"
+ http-errors "^2.0.1"
+ iconv-lite "^0.7.2"
+ on-finished "^2.4.1"
+ qs "^6.15.2"
+ raw-body "^3.0.2"
+ type-is "^2.1.0"
+
+body-parser@~1.20.5:
+ version "1.20.5"
+ resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.5.tgz#303c8c34423d1d6fa799bc764e93c1e4dc6ebf64"
+ integrity sha512-3grm+/2tUOvu2cjJkvsIxrv/wVpfXQW4PsQHYm7yk4vfpu7Ekl6nEsYBoJUL6qDwZUx8wUhQ8tR2qz+ad9c9OA==
+ dependencies:
+ bytes "~3.1.2"
+ content-type "~1.0.5"
+ debug "2.6.9"
+ depd "2.0.0"
+ destroy "~1.2.0"
+ http-errors "~2.0.1"
+ iconv-lite "~0.4.24"
+ on-finished "~2.4.1"
+ qs "~6.15.1"
+ raw-body "~2.5.3"
+ type-is "~1.6.18"
+ unpipe "~1.0.0"
+
bonjour@^3.5.0:
version "3.5.0"
resolved "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5"
@@ -3817,7 +3893,7 @@ bytes@3.0.0:
resolved "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==
-bytes@3.1.2:
+bytes@3.1.2, bytes@^3.1.2, bytes@~3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
@@ -3926,6 +4002,14 @@ call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7:
get-intrinsic "^1.2.4"
set-function-length "^1.2.1"
+call-bound@^1.0.2:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a"
+ integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==
+ dependencies:
+ call-bind-apply-helpers "^1.0.2"
+ get-intrinsic "^1.3.0"
+
call-me-maybe@^1.0.1:
version "1.0.2"
resolved "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz#03f964f19522ba643b1b0693acb9152fe2074baa"
@@ -4304,6 +4388,15 @@ cliui@^8.0.1:
strip-ansi "^6.0.1"
wrap-ansi "^7.0.0"
+cliui@^9.0.1:
+ version "9.0.1"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-9.0.1.tgz#6f7890f386f6f1f79953adc1f78dec46fcc2d291"
+ integrity sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==
+ dependencies:
+ string-width "^7.2.0"
+ strip-ansi "^7.1.0"
+ wrap-ansi "^9.0.0"
+
clone-response@^1.0.2:
version "1.0.3"
resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3"
@@ -4550,18 +4643,28 @@ constants-browserify@^1.0.0:
resolved "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
integrity sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==
-content-disposition@0.5.4:
+content-disposition@0.5.4, content-disposition@~0.5.4:
version "0.5.4"
resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe"
integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==
dependencies:
safe-buffer "5.2.1"
+content-disposition@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-1.1.0.tgz#f3db789c752d45564cc7e9e1e0b31790d4a38e17"
+ integrity sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==
+
content-type@^1.0.5, content-type@~1.0.4, content-type@~1.0.5:
version "1.0.5"
resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918"
integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==
+content-type@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/content-type/-/content-type-2.0.0.tgz#2fb3ede69dffa0af78ca7c4ce7589680638b56df"
+ integrity sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==
+
convert-source-map@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a"
@@ -4572,6 +4675,16 @@ cookie-signature@1.0.6:
resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==
+cookie-signature@^1.2.1:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.2.2.tgz#57c7fc3cc293acab9fec54d73e15690ebe4a1793"
+ integrity sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==
+
+cookie-signature@~1.0.6:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.7.tgz#ab5dd7ab757c54e60f37ef6550f481c426d10454"
+ integrity sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==
+
cookie@0.5.0:
version "0.5.0"
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b"
@@ -4582,6 +4695,11 @@ cookie@0.7.1:
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.1.tgz#2f73c42142d5d5cf71310a74fc4ae61670e5dbc9"
integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==
+cookie@^0.7.1, cookie@~0.7.1:
+ version "0.7.2"
+ resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7"
+ integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==
+
copy-concurrently@^1.0.0:
version "1.0.5"
resolved "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
@@ -5033,6 +5151,13 @@ debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1:
dependencies:
ms "2.1.2"
+debug@^4.4.0, debug@^4.4.3:
+ version "4.4.3"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a"
+ integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==
+ dependencies:
+ ms "^2.1.3"
+
decamelize@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
@@ -5202,7 +5327,7 @@ delegate@^3.1.2:
resolved "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166"
integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==
-depd@2.0.0:
+depd@2.0.0, depd@^2.0.0, depd@~2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
@@ -5220,7 +5345,7 @@ des.js@^1.0.0:
inherits "^2.0.1"
minimalistic-assert "^1.0.0"
-destroy@1.2.0:
+destroy@1.2.0, destroy@~1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015"
integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==
@@ -5461,10 +5586,10 @@ dotenv-expand@^5.1.0:
resolved "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0"
integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==
-dotenv@^16.6.1:
- version "16.6.1"
- resolved "https://registry.npmmirror.com/dotenv/-/dotenv-16.6.1.tgz#773f0e69527a8315c7285d5ee73c4459d20a8020"
- integrity sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==
+dotenv@^17.4.2:
+ version "17.4.2"
+ resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-17.4.2.tgz#c07e54a746e11eba021dd9e1047ced5afdc1c034"
+ integrity sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==
dotenv@^8.2.0:
version "8.6.0"
@@ -5723,6 +5848,11 @@ elliptic@^6.5.3, elliptic@^6.5.4:
minimalistic-assert "^1.0.1"
minimalistic-crypto-utils "^1.0.1"
+emoji-regex@^10.3.0:
+ version "10.6.0"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.6.0.tgz#bf3d6e8f7f8fd22a65d9703475bc0147357a6b0d"
+ integrity sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==
+
emoji-regex@^7.0.1:
version "7.0.3"
resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
@@ -5748,7 +5878,7 @@ encodeurl@^1.0.2, encodeurl@~1.0.2:
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==
-encodeurl@~2.0.0:
+encodeurl@^2.0.0, encodeurl@~2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58"
integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==
@@ -6039,7 +6169,7 @@ escape-goat@^2.0.0:
resolved "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675"
integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==
-escape-html@~1.0.3:
+escape-html@^1.0.3, escape-html@~1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==
@@ -6235,7 +6365,7 @@ esutils@^2.0.2:
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
-etag@~1.8.1:
+etag@^1.8.1, etag@~1.8.1:
version "1.8.1"
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==
@@ -6466,43 +6596,77 @@ express@^4.17.1:
utils-merge "1.0.1"
vary "~1.1.2"
-express@^4.21.2:
- version "4.21.2"
- resolved "https://registry.npmmirror.com/express/-/express-4.21.2.tgz#cf250e48362174ead6cea4a566abef0162c1ec32"
- integrity sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==
+express@^4.22.2:
+ version "4.22.2"
+ resolved "https://registry.yarnpkg.com/express/-/express-4.22.2.tgz#c17ae0981e5efc24b22272f0e041c4662503b700"
+ integrity sha512-IuL+Elrou2ZvCFHs18/CIzy2Nzvo25nZ1/D2eIZlz7c+QUayAcYoiM2BthCjs+EBHVpjYjcuLDAiCWgeIX3X1Q==
dependencies:
accepts "~1.3.8"
array-flatten "1.1.1"
- body-parser "1.20.3"
- content-disposition "0.5.4"
+ body-parser "~1.20.5"
+ content-disposition "~0.5.4"
content-type "~1.0.4"
- cookie "0.7.1"
- cookie-signature "1.0.6"
+ cookie "~0.7.1"
+ cookie-signature "~1.0.6"
debug "2.6.9"
depd "2.0.0"
encodeurl "~2.0.0"
escape-html "~1.0.3"
etag "~1.8.1"
- finalhandler "1.3.1"
- fresh "0.5.2"
- http-errors "2.0.0"
+ finalhandler "~1.3.1"
+ fresh "~0.5.2"
+ http-errors "~2.0.0"
merge-descriptors "1.0.3"
methods "~1.1.2"
- on-finished "2.4.1"
+ on-finished "~2.4.1"
parseurl "~1.3.3"
- path-to-regexp "0.1.12"
+ path-to-regexp "~0.1.12"
proxy-addr "~2.0.7"
- qs "6.13.0"
+ qs "~6.15.1"
range-parser "~1.2.1"
safe-buffer "5.2.1"
- send "0.19.0"
- serve-static "1.16.2"
+ send "~0.19.0"
+ serve-static "~1.16.2"
setprototypeof "1.2.0"
- statuses "2.0.1"
+ statuses "~2.0.1"
type-is "~1.6.18"
utils-merge "1.0.1"
vary "~1.1.2"
+express@^5.2.1:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/express/-/express-5.2.1.tgz#8f21d15b6d327f92b4794ecf8cb08a72f956ac04"
+ integrity sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==
+ dependencies:
+ accepts "^2.0.0"
+ body-parser "^2.2.1"
+ content-disposition "^1.0.0"
+ content-type "^1.0.5"
+ cookie "^0.7.1"
+ cookie-signature "^1.2.1"
+ debug "^4.4.0"
+ depd "^2.0.0"
+ encodeurl "^2.0.0"
+ escape-html "^1.0.3"
+ etag "^1.8.1"
+ finalhandler "^2.1.0"
+ fresh "^2.0.0"
+ http-errors "^2.0.0"
+ merge-descriptors "^2.0.0"
+ mime-types "^3.0.0"
+ on-finished "^2.4.1"
+ once "^1.4.0"
+ parseurl "^1.3.3"
+ proxy-addr "^2.0.7"
+ qs "^6.14.0"
+ range-parser "^1.2.1"
+ router "^2.2.0"
+ send "^1.1.0"
+ serve-static "^2.2.0"
+ statuses "^2.0.1"
+ type-is "^2.0.1"
+ vary "^1.1.2"
+
ext-list@^2.0.0:
version "2.2.2"
resolved "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz#0b98e64ed82f5acf0f2931babf69212ef52ddd37"
@@ -6714,6 +6878,16 @@ file-type@^16.5.4:
strtok3 "^6.2.4"
token-types "^4.1.1"
+file-type@^21.3.4:
+ version "21.3.4"
+ resolved "https://registry.yarnpkg.com/file-type/-/file-type-21.3.4.tgz#e3f902faee8ec4aa152909fc902a7a77f9c06725"
+ integrity sha512-Ievi/yy8DS3ygGvT47PjSfdFoX+2isQueoYP1cntFW1JLYAuS4GD7NUPGg4zv2iZfV52uDyk5w5Z0TdpRS6Q1g==
+ dependencies:
+ "@tokenizer/inflate" "^0.4.1"
+ strtok3 "^10.3.4"
+ token-types "^6.1.1"
+ uint8array-extras "^1.4.0"
+
file-uri-to-path@1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
@@ -6779,6 +6953,31 @@ finalhandler@1.3.1:
statuses "2.0.1"
unpipe "~1.0.0"
+finalhandler@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-2.1.1.tgz#a2c517a6559852bcdb06d1f8bd7f51b68fad8099"
+ integrity sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==
+ dependencies:
+ debug "^4.4.0"
+ encodeurl "^2.0.0"
+ escape-html "^1.0.3"
+ on-finished "^2.4.1"
+ parseurl "^1.3.3"
+ statuses "^2.0.1"
+
+finalhandler@~1.3.1:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.2.tgz#1ebc2228fc7673aac4a472c310cc05b77d852b88"
+ integrity sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==
+ dependencies:
+ debug "2.6.9"
+ encodeurl "~2.0.0"
+ escape-html "~1.0.3"
+ on-finished "~2.4.1"
+ parseurl "~1.3.3"
+ statuses "~2.0.2"
+ unpipe "~1.0.0"
+
find-cache-dir@^0.1.1:
version "0.1.1"
resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9"
@@ -6876,10 +7075,10 @@ follow-redirects@^1.0.0, follow-redirects@^1.14.8:
resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz#54d4d6d062c0fa7d9d17feb008461550e3ba8020"
integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==
-follow-redirects@^1.15.6:
- version "1.15.9"
- resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1"
- integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==
+follow-redirects@^1.16.0:
+ version "1.16.0"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.16.0.tgz#28474a159d3b9d11ef62050a14ed60e4df6d61bc"
+ integrity sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==
for-each@^0.3.3:
version "0.3.3"
@@ -6907,16 +7106,16 @@ form-data@^4.0.0:
combined-stream "^1.0.8"
mime-types "^2.1.12"
-form-data@^4.0.4:
- version "4.0.4"
- resolved "https://registry.npmmirror.com/form-data/-/form-data-4.0.4.tgz#784cdcce0669a9d68e94d11ac4eea98088edd2c4"
- integrity sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==
+form-data@^4.0.5:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.6.tgz#28e864e1b786dbebb68db1f452f9635278665827"
+ integrity sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==
dependencies:
asynckit "^0.4.0"
combined-stream "^1.0.8"
es-set-tostringtag "^2.1.0"
- hasown "^2.0.2"
- mime-types "^2.1.12"
+ hasown "^2.0.4"
+ mime-types "^2.1.35"
form-data@~2.3.2:
version "2.3.3"
@@ -6939,11 +7138,16 @@ fragment-cache@^0.2.1:
dependencies:
map-cache "^0.2.2"
-fresh@0.5.2:
+fresh@0.5.2, fresh@~0.5.2:
version "0.5.2"
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==
+fresh@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/fresh/-/fresh-2.0.0.tgz#8dd7df6a1b3a1b3a5cf186c05a5dd267622635a4"
+ integrity sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==
+
friendly-errors-webpack-plugin@^1.7.0:
version "1.7.0"
resolved "https://registry.npmjs.org/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.0.tgz#efc86cbb816224565861a1be7a9d84d0aafea136"
@@ -7104,6 +7308,11 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5:
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+get-east-asian-width@^1.0.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz#216900f91df11a8b2c198c3e1d93d6c035a776b9"
+ integrity sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==
+
get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4:
version "1.2.4"
resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd"
@@ -7115,7 +7324,7 @@ get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@
has-symbols "^1.0.3"
hasown "^2.0.0"
-get-intrinsic@^1.2.6:
+get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.3.0:
version "1.3.0"
resolved "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01"
integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==
@@ -7415,6 +7624,11 @@ gzip-size@^5.0.0:
duplexer "^0.1.1"
pify "^4.0.1"
+gzip@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/gzip/-/gzip-0.1.0.tgz#ed5496fc37aa47ee6b55a06b4f8da2593b8367c9"
+ integrity sha512-o2kq0ogD3MMAwDUt3G8y6EtFPqXDtpNI/zNWkZoOwYkjp/j8/Q9QLpVySPxYaQ521hPT8GoV9g1/WTkd7DM5Aw==
+
handle-thing@^2.0.0:
version "2.0.1"
resolved "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e"
@@ -7566,6 +7780,13 @@ hasown@^2.0.1:
dependencies:
function-bind "^1.1.2"
+hasown@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.4.tgz#8c62d8cb90beb2aad5d0a5b67581ad9854c3f003"
+ integrity sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==
+ dependencies:
+ function-bind "^1.1.2"
+
he@1.2.x, he@^1.1.1, he@^1.2.0:
version "1.2.0"
resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
@@ -7729,6 +7950,17 @@ http-errors@2.0.0:
statuses "2.0.1"
toidentifier "1.0.1"
+http-errors@^2.0.0, http-errors@^2.0.1, http-errors@~2.0.0, http-errors@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.1.tgz#36d2f65bc909c8790018dd36fb4d93da6caae06b"
+ integrity sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==
+ dependencies:
+ depd "~2.0.0"
+ inherits "~2.0.4"
+ setprototypeof "~1.2.0"
+ statuses "~2.0.2"
+ toidentifier "~1.0.1"
+
http-errors@~1.6.2:
version "1.6.3"
resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
@@ -7814,7 +8046,7 @@ https-browserify@^1.0.0:
resolved "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
integrity sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==
-https-proxy-agent@5, https-proxy-agent@^5.0.0:
+https-proxy-agent@5, https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1:
version "5.0.1"
resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
@@ -7830,6 +8062,11 @@ https-proxy-agent@^7.0.6:
agent-base "^7.1.2"
debug "4"
+https@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/https/-/https-1.0.0.tgz#3c37c7ae1a8eeb966904a2ad1e975a194b7ed3a4"
+ integrity sha512-4EC57ddXrkaF0x83Oj8sM6SLQHAWXw90Skqu2M4AEWENZ3F02dFJE/GARA8igO79tcgYqGrD7ae4f5L3um2lgg==
+
human-signals@^1.1.1:
version "1.1.1"
resolved "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
@@ -7876,7 +8113,7 @@ iconv-corefoundation@^1.1.7:
cli-truncate "^2.1.0"
node-addon-api "^1.6.3"
-iconv-lite@0.4.24, iconv-lite@^0.4.24:
+iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@~0.4.24:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
@@ -7890,6 +8127,13 @@ iconv-lite@^0.6.2:
dependencies:
safer-buffer ">= 2.1.2 < 3.0.0"
+iconv-lite@^0.7.2, iconv-lite@~0.7.0:
+ version "0.7.2"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.7.2.tgz#d0bdeac3f12b4835b7359c2ad89c422a4d1cc72e"
+ integrity sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3.0.0"
+
icss-utils@^4.0.0, icss-utils@^4.1.1:
version "4.1.1"
resolved "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467"
@@ -8010,7 +8254,7 @@ inflight@^1.0.4:
once "^1.3.0"
wrappy "1"
-inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3:
+inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4:
version "2.0.4"
resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
@@ -8365,6 +8609,11 @@ is-promise@^2.2.2:
resolved "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1"
integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==
+is-promise@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-4.0.0.tgz#42ff9f84206c1991d26debf520dd5c01042dd2f3"
+ integrity sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==
+
is-regex@^1.1.4:
version "1.1.4"
resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
@@ -9132,6 +9381,11 @@ media-typer@^1.1.0:
resolved "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz#6ab74b8f2d3320f2064b2a87a38e7931ff3a5561"
integrity sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==
+media-typer@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-2.0.0.tgz#5f43742a44d474b83ad4d1bd0f0c5cf56c0cd280"
+ integrity sha512-kOy3OxT2HH39N70UnKgu4NWDZjLOz8W/mfyvniHjRH/DrL3f2pOfvWQ4p60offbbtDAnXWp0v9LfMIqMec269Q==
+
memoizee@^0.4.15:
version "0.4.15"
resolved "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz#e6f3d2da863f318d02225391829a6c5956555b72"
@@ -9172,6 +9426,11 @@ merge-descriptors@1.0.3:
resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5"
integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==
+merge-descriptors@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-2.0.0.tgz#ea922f660635a2249ee565e0449f951e6b603808"
+ integrity sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==
+
merge-options@1.0.1:
version "1.0.1"
resolved "https://registry.npmjs.org/merge-options/-/merge-options-1.0.1.tgz#2a64b24457becd4e4dc608283247e94ce589aa32"
@@ -9268,13 +9527,25 @@ mime-db@1.52.0, "mime-db@>= 1.43.0 < 2", mime-db@^1.28.0:
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
-mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34:
+mime-db@^1.54.0:
+ version "1.54.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5"
+ integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==
+
+mime-types@^2.1.12, mime-types@^2.1.35, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34:
version "2.1.35"
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
dependencies:
mime-db "1.52.0"
+mime-types@^3.0.0, mime-types@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-3.0.2.tgz#39002d4182575d5af036ffa118100f2524b2e2ab"
+ integrity sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==
+ dependencies:
+ mime-db "^1.54.0"
+
mime@1.6.0, mime@^1.3.4:
version "1.6.0"
resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
@@ -9509,7 +9780,23 @@ multicast-dns@^6.0.1:
dns-packet "^1.3.1"
thunky "^1.0.2"
-music-metadata@^7.14.0, music-metadata@^7.5.3:
+music-metadata@^11.13.0:
+ version "11.13.0"
+ resolved "https://registry.yarnpkg.com/music-metadata/-/music-metadata-11.13.0.tgz#bb7355e8c6dc200551aa13c846bfd6ab552e723d"
+ integrity sha512-uXRaov9dfjSpQufXIU7sMxVZnh+FilCQv2mXn+K5EJ/decP3dTWrgvPYa5r6MtRbieNSCE708Da4J0u1UGfQIw==
+ dependencies:
+ "@borewit/text-codec" "^0.2.2"
+ "@tokenizer/token" "^0.3.0"
+ content-type "^2.0.0"
+ debug "^4.4.3"
+ file-type "^21.3.4"
+ media-typer "^2.0.0"
+ strtok3 "^10.3.5"
+ token-types "^6.1.2"
+ uint8array-extras "^1.5.0"
+ win-guid "^0.2.1"
+
+music-metadata@^7.5.3:
version "7.14.0"
resolved "https://registry.npmjs.org/music-metadata/-/music-metadata-7.14.0.tgz#74e3e5fc8e09b86d1a3e791fb5ce9ccdc4347ad9"
integrity sha512-xrm3w7SV0Wk+OythZcSbaI8mcr/KHd0knJieu8bVpaPfMv/Agz5EooCAPz3OR5hbYMiUG6dgAPKZKnMzV+3amA==
@@ -9578,6 +9865,11 @@ negotiator@0.6.3:
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
+negotiator@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-1.0.0.tgz#b6c91bb47172d69f93cfd7c357bbb529019b5f6a"
+ integrity sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==
+
neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1, neo-async@^2.6.2:
version "2.6.2"
resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
@@ -9647,10 +9939,10 @@ node-forge@^0.10.0:
resolved "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3"
integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==
-node-forge@^1.3.1:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3"
- integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==
+node-forge@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.4.0.tgz#1c7b7d8bdc2d078739f58287d589d903a11b2fc2"
+ integrity sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ==
node-libs-browser@^2.2.1:
version "2.2.1"
@@ -9834,6 +10126,11 @@ object-inspect@^1.13.1:
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff"
integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==
+object-inspect@^1.13.3, object-inspect@^1.13.4:
+ version "1.13.4"
+ resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213"
+ integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==
+
object-is@^1.1.5:
version "1.1.6"
resolved "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07"
@@ -9906,7 +10203,7 @@ on-exit-leak-free@^0.2.0:
resolved "https://registry.npmmirror.com/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz#b39c9e3bf7690d890f4861558b0d7b90a442d209"
integrity sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==
-on-finished@2.4.1:
+on-finished@2.4.1, on-finished@^2.4.1, on-finished@~2.4.1:
version "2.4.1"
resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f"
integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==
@@ -10227,7 +10524,7 @@ parse5@^6.0.1:
resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"
integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==
-parseurl@~1.3.2, parseurl@~1.3.3:
+parseurl@^1.3.3, parseurl@~1.3.2, parseurl@~1.3.3:
version "1.3.3"
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
@@ -10310,16 +10607,21 @@ path-to-regexp@0.1.10:
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.10.tgz#67e9108c5c0551b9e5326064387de4763c4d5f8b"
integrity sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==
-path-to-regexp@0.1.12:
- version "0.1.12"
- resolved "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.12.tgz#d5e1a12e478a976d432ef3c58d534b9923164bb7"
- integrity sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==
-
path-to-regexp@0.1.7:
version "0.1.7"
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==
+path-to-regexp@^8.0.0:
+ version "8.4.2"
+ resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-8.4.2.tgz#795c420c4f7ca45c5b887366f622ee0c9852cccd"
+ integrity sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==
+
+path-to-regexp@~0.1.12:
+ version "0.1.13"
+ resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.13.tgz#9b22ec16bc3ab88d05a0c7e369869421401ab17d"
+ integrity sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==
+
path-type@^3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
@@ -11054,7 +11356,7 @@ proto-list@~1.2.1:
resolved "https://registry.npmmirror.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==
-proxy-addr@~2.0.7:
+proxy-addr@^2.0.7, proxy-addr@~2.0.7:
version "2.0.7"
resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025"
integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==
@@ -11062,10 +11364,10 @@ proxy-addr@~2.0.7:
forwarded "0.2.0"
ipaddr.js "1.9.1"
-proxy-from-env@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
- integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
+proxy-from-env@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-2.1.0.tgz#a7487568adad577cfaaa7e88c49cab3ab3081aba"
+ integrity sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==
prr@~1.0.1:
version "1.0.1"
@@ -11180,6 +11482,14 @@ qs@^6.11.2:
dependencies:
side-channel "^1.0.4"
+qs@^6.14.0, qs@^6.15.2, qs@~6.15.1:
+ version "6.15.3"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.15.3.tgz#76852132a58ed5c7c0ef67e4441b9bb5d6061b3b"
+ integrity sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==
+ dependencies:
+ es-define-property "^1.0.1"
+ side-channel "^1.1.1"
+
qs@~6.5.2:
version "6.5.3"
resolved "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad"
@@ -11248,6 +11558,26 @@ raw-body@2.5.2, raw-body@^2.2.0, raw-body@^2.3.0:
iconv-lite "0.4.24"
unpipe "1.0.0"
+raw-body@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-3.0.2.tgz#3e3ada5ae5568f9095d84376fd3a49b8fb000a51"
+ integrity sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==
+ dependencies:
+ bytes "~3.1.2"
+ http-errors "~2.0.1"
+ iconv-lite "~0.7.0"
+ unpipe "~1.0.0"
+
+raw-body@~2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.3.tgz#11c6650ee770a7de1b494f197927de0c923822e2"
+ integrity sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==
+ dependencies:
+ bytes "~3.1.2"
+ http-errors "~2.0.1"
+ iconv-lite "~0.4.24"
+ unpipe "~1.0.0"
+
rc@^1.2.7:
version "1.2.8"
resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
@@ -11634,6 +11964,17 @@ roarr@^2.15.3:
semver-compare "^1.0.0"
sprintf-js "^1.1.2"
+router@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/router/-/router-2.2.0.tgz#019be620b711c87641167cc79b99090f00b146ef"
+ integrity sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==
+ dependencies:
+ debug "^4.4.0"
+ depd "^2.0.0"
+ is-promise "^4.0.0"
+ parseurl "^1.3.3"
+ path-to-regexp "^8.0.0"
+
run-async@^2.4.0:
version "2.4.1"
resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
@@ -11880,6 +12221,42 @@ send@0.19.0:
range-parser "~1.2.1"
statuses "2.0.1"
+send@^1.1.0, send@^1.2.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/send/-/send-1.2.1.tgz#9eab743b874f3550f40a26867bf286ad60d3f3ed"
+ integrity sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==
+ dependencies:
+ debug "^4.4.3"
+ encodeurl "^2.0.0"
+ escape-html "^1.0.3"
+ etag "^1.8.1"
+ fresh "^2.0.0"
+ http-errors "^2.0.1"
+ mime-types "^3.0.2"
+ ms "^2.1.3"
+ on-finished "^2.4.1"
+ range-parser "^1.2.1"
+ statuses "^2.0.2"
+
+send@~0.19.0, send@~0.19.1:
+ version "0.19.2"
+ resolved "https://registry.yarnpkg.com/send/-/send-0.19.2.tgz#59bc0da1b4ea7ad42736fd642b1c4294e114ff29"
+ integrity sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==
+ dependencies:
+ debug "2.6.9"
+ depd "2.0.0"
+ destroy "1.2.0"
+ encodeurl "~2.0.0"
+ escape-html "~1.0.3"
+ etag "~1.8.1"
+ fresh "~0.5.2"
+ http-errors "~2.0.1"
+ mime "1.6.0"
+ ms "2.1.3"
+ on-finished "~2.4.1"
+ range-parser "~1.2.1"
+ statuses "~2.0.2"
+
sentence-case@^3.0.4:
version "3.0.4"
resolved "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz#3645a7b8c117c787fde8702056225bb62a45131f"
@@ -11936,6 +12313,26 @@ serve-static@1.16.2:
parseurl "~1.3.3"
send "0.19.0"
+serve-static@^2.2.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-2.2.1.tgz#7f186a4a4e5f5b663ad7a4294ff1bf37cf0e98a9"
+ integrity sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==
+ dependencies:
+ encodeurl "^2.0.0"
+ escape-html "^1.0.3"
+ parseurl "^1.3.3"
+ send "^1.2.0"
+
+serve-static@~1.16.2:
+ version "1.16.3"
+ resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.3.tgz#a97b74d955778583f3862a4f0b841eb4d5d78cf9"
+ integrity sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==
+ dependencies:
+ encodeurl "~2.0.0"
+ escape-html "~1.0.3"
+ parseurl "~1.3.3"
+ send "~0.19.1"
+
set-blocking@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
@@ -11983,7 +12380,7 @@ setprototypeof@1.1.0:
resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==
-setprototypeof@1.2.0:
+setprototypeof@1.2.0, setprototypeof@~1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
@@ -12044,6 +12441,35 @@ shell-quote@^1.8.1:
resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680"
integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==
+side-channel-list@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.1.tgz#c2e0b5a14a540aebee3bbc6c3f8666cc9b509127"
+ integrity sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==
+ dependencies:
+ es-errors "^1.3.0"
+ object-inspect "^1.13.4"
+
+side-channel-map@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42"
+ integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==
+ dependencies:
+ call-bound "^1.0.2"
+ es-errors "^1.3.0"
+ get-intrinsic "^1.2.5"
+ object-inspect "^1.13.3"
+
+side-channel-weakmap@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea"
+ integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==
+ dependencies:
+ call-bound "^1.0.2"
+ es-errors "^1.3.0"
+ get-intrinsic "^1.2.5"
+ object-inspect "^1.13.3"
+ side-channel-map "^1.0.1"
+
side-channel@^1.0.4, side-channel@^1.0.6:
version "1.0.6"
resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2"
@@ -12054,6 +12480,17 @@ side-channel@^1.0.4, side-channel@^1.0.6:
get-intrinsic "^1.2.4"
object-inspect "^1.13.1"
+side-channel@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.1.tgz#ea02c62e05dc4bea67d4442f0fb71ee192f8e0ab"
+ integrity sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==
+ dependencies:
+ es-errors "^1.3.0"
+ object-inspect "^1.13.4"
+ side-channel-list "^1.0.1"
+ side-channel-map "^1.0.1"
+ side-channel-weakmap "^1.0.2"
+
signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3:
version "3.0.7"
resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
@@ -12447,6 +12884,11 @@ statuses@2.0.1:
resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==
+statuses@^2.0.1, statuses@^2.0.2, statuses@~2.0.1, statuses@~2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382"
+ integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==
+
stream-browserify@^2.0.1:
version "2.0.2"
resolved "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b"
@@ -12522,6 +12964,15 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
is-fullwidth-code-point "^3.0.0"
strip-ansi "^6.0.1"
+string-width@^7.0.0, string-width@^7.2.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-7.2.0.tgz#b5bb8e2165ce275d4d43476dd2700ad9091db6dc"
+ integrity sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==
+ dependencies:
+ emoji-regex "^10.3.0"
+ get-east-asian-width "^1.0.0"
+ strip-ansi "^7.1.0"
+
string.prototype.trim@^1.2.8:
version "1.2.8"
resolved "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd"
@@ -12605,6 +13056,13 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1:
dependencies:
ansi-regex "^5.0.1"
+strip-ansi@^7.1.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.2.0.tgz#d22a269522836a627af8d04b5c3fd2c7fa3e32e3"
+ integrity sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==
+ dependencies:
+ ansi-regex "^6.2.2"
+
strip-comments@^1.0.2:
version "1.0.2"
resolved "https://registry.npmjs.org/strip-comments/-/strip-comments-1.0.2.tgz#82b9c45e7f05873bee53f37168af930aa368679d"
@@ -12638,6 +13096,13 @@ strip-json-comments@~2.0.1:
resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==
+strtok3@^10.3.4, strtok3@^10.3.5:
+ version "10.3.5"
+ resolved "https://registry.yarnpkg.com/strtok3/-/strtok3-10.3.5.tgz#7213285da0dc3dec0fc8ce5df4b8b7a733f14360"
+ integrity sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==
+ dependencies:
+ "@tokenizer/token" "^0.3.0"
+
strtok3@^6.2.4, strtok3@^6.3.0:
version "6.3.0"
resolved "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz#358b80ffe6d5d5620e19a073aa78ce947a90f9a0"
@@ -13024,7 +13489,7 @@ to-regex@^3.0.1, to-regex@^3.0.2:
regex-not "^1.0.2"
safe-regex "^1.1.0"
-toidentifier@1.0.1:
+toidentifier@1.0.1, toidentifier@~1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
@@ -13037,6 +13502,15 @@ token-types@^4.1.1, token-types@^4.2.1:
"@tokenizer/token" "^0.3.0"
ieee754 "^1.2.1"
+token-types@^6.1.1, token-types@^6.1.2:
+ version "6.1.2"
+ resolved "https://registry.yarnpkg.com/token-types/-/token-types-6.1.2.tgz#18d0fd59b996d421f9f83914d6101c201bd08129"
+ integrity sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==
+ dependencies:
+ "@borewit/text-codec" "^0.2.1"
+ "@tokenizer/token" "^0.3.0"
+ ieee754 "^1.2.1"
+
toposort@^1.0.0:
version "1.0.7"
resolved "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029"
@@ -13146,6 +13620,15 @@ type-fest@^2.17.0:
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b"
integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==
+type-is@^2.0.1, type-is@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/type-is/-/type-is-2.1.0.tgz#71d1a7053293582e16ac9f3ebaf1ab9aa49e5570"
+ integrity sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==
+ dependencies:
+ content-type "^2.0.0"
+ media-typer "^1.1.0"
+ mime-types "^3.0.0"
+
type-is@~1.6.18:
version "1.6.18"
resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
@@ -13223,6 +13706,11 @@ uglify-js@3.4.x:
commander "~2.19.0"
source-map "~0.6.1"
+uint8array-extras@^1.4.0, uint8array-extras@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/uint8array-extras/-/uint8array-extras-1.5.0.tgz#10d2a85213de3ada304fea1c454f635c73839e86"
+ integrity sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==
+
unbox-primitive@^1.0.2:
version "1.0.2"
resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e"
@@ -13529,7 +14017,7 @@ validate-npm-package-license@^3.0.1:
spdx-correct "^3.0.0"
spdx-expression-parse "^3.0.0"
-vary@~1.1.2:
+vary@^1.1.2, vary@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
@@ -13941,6 +14429,11 @@ which@^2.0.1:
dependencies:
isexe "^2.0.0"
+win-guid@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/win-guid/-/win-guid-0.2.1.tgz#576915ba5e10bf92ec6a32b71ab06b5f75403fc0"
+ integrity sha512-gEIQU4mkgl2OPeoNrWflcJFJ3Ae2BPd4eCsHHA/XikslkIVms/nHhvnvzIZV7VLmBvtFlDOzLt9rrZT+n6D67A==
+
word-wrap@~1.2.3:
version "1.2.5"
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34"
@@ -14115,6 +14608,15 @@ wrap-ansi@^7.0.0:
string-width "^4.1.0"
strip-ansi "^6.0.0"
+wrap-ansi@^9.0.0:
+ version "9.0.2"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-9.0.2.tgz#956832dea9494306e6d209eb871643bb873d7c98"
+ integrity sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==
+ dependencies:
+ ansi-styles "^6.2.1"
+ string-width "^7.0.0"
+ strip-ansi "^7.1.0"
+
wrappy@1:
version "1.0.2"
resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
@@ -14271,6 +14773,11 @@ yargs-parser@^21.1.1:
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"
integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
+yargs-parser@^22.0.0:
+ version "22.0.0"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-22.0.0.tgz#87b82094051b0567717346ecd00fd14804b357c8"
+ integrity sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==
+
yargs@^13.3.2:
version "13.3.2"
resolved "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd"
@@ -14317,7 +14824,7 @@ yargs@^16.0.0:
y18n "^5.0.5"
yargs-parser "^20.2.2"
-yargs@^17.5.1, yargs@^17.7.2:
+yargs@^17.5.1:
version "17.7.2"
resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269"
integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==
@@ -14330,6 +14837,18 @@ yargs@^17.5.1, yargs@^17.7.2:
y18n "^5.0.5"
yargs-parser "^21.1.1"
+yargs@^18.0.0:
+ version "18.0.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-18.0.0.tgz#6c84259806273a746b09f579087b68a3c2d25bd1"
+ integrity sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==
+ dependencies:
+ cliui "^9.0.1"
+ escalade "^3.1.1"
+ get-caller-file "^2.0.5"
+ string-width "^7.2.0"
+ y18n "^5.0.5"
+ yargs-parser "^22.0.0"
+
yauzl@^2.10.0:
version "2.10.0"
resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"