mirror of
https://github.com/qier222/YesPlayMusic.git
synced 2024-11-22 05:42:07 +08:00
feat: switch to UNM (Rust) (#1536)
* refactor: use unm-rust-napi * ci(build): install UNM dependencies for certain platforms * feat: add the ability to configure UNM * feat: add the UNM configuration in settings page * refactor(jsconfig): jsx -> preserve * fix(ci/build): use bash to get unm version * chore(deps): upgrade UNM to 0.3.0-pre.0 * refactor(electron/ipcMain): update default sources * fix(views/settings): remove duplicated config entry * feat(settings): allow configuring QQ cookie We also removed some duplicate entries in views/settings.vue. * chore(deps): UNM -> 0.3.0-pre.1 * refactor: remove unused old UNM * fix(utils/player): do not include rust-napi in client code As we only imported the constant, I just expand it as the integer. Co-authored-by: qier222 <qier222@outlook.com>
This commit is contained in:
parent
e1f7618cbd
commit
93ae57adbe
36
.github/workflows/build.yaml
vendored
36
.github/workflows/build.yaml
vendored
|
@ -1,5 +1,8 @@
|
||||||
name: Release
|
name: Release
|
||||||
|
|
||||||
|
env:
|
||||||
|
YARN_INSTALL_NOPT: yarn add --ignore-platform --ignore-optional
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
|
@ -42,6 +45,39 @@ jobs:
|
||||||
with:
|
with:
|
||||||
snapcraft_token: ${{ secrets.snapcraft_token }}
|
snapcraft_token: ${{ secrets.snapcraft_token }}
|
||||||
|
|
||||||
|
- id: get_unm_version
|
||||||
|
name: Get the installed UNM version
|
||||||
|
run: |
|
||||||
|
yarn --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
|
||||||
|
|
||||||
|
- name: Install UNM dependencies for Windows
|
||||||
|
if: runner.os == 'Windows'
|
||||||
|
run: |
|
||||||
|
${{ env.YARN_INSTALL_NOPT }} \
|
||||||
|
@unblockneteasemusic/rust-napi-win32-x64-msvc@${{steps.get_unm_version.outputs.unmver}}
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- name: Install UNM dependencies for macOS
|
||||||
|
if: runner.os == 'macOS'
|
||||||
|
run: |
|
||||||
|
${{ env.YARN_INSTALL_NOPT }} \
|
||||||
|
@unblockneteasemusic/rust-napi-darwin-x64@${{steps.get_unm_version.outputs.unmver}} \
|
||||||
|
@unblockneteasemusic/rust-napi-darwin-arm64@${{steps.get_unm_version.outputs.unmver}} \
|
||||||
|
dmg-license
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- name: Install UNM dependencies for Linux
|
||||||
|
if: runner.os == 'Linux'
|
||||||
|
run: |
|
||||||
|
${{ env.YARN_INSTALL_NOPT }} \
|
||||||
|
@unblockneteasemusic/rust-napi-linux-x64-gnu@${{steps.get_unm_version.outputs.unmver}} \
|
||||||
|
@unblockneteasemusic/rust-napi-linux-arm64-gnu@${{steps.get_unm_version.outputs.unmver}} \
|
||||||
|
@unblockneteasemusic/rust-napi-linux-arm-gnueabihf@${{steps.get_unm_version.outputs.unmver}}
|
||||||
|
shell: bash
|
||||||
|
|
||||||
- name: Build/release Electron app
|
- name: Build/release Electron app
|
||||||
uses: samuelmeuli/action-electron-builder@v1.6.0
|
uses: samuelmeuli/action-electron-builder@v1.6.0
|
||||||
env:
|
env:
|
||||||
|
|
|
@ -7,7 +7,8 @@
|
||||||
},
|
},
|
||||||
"target": "ES6",
|
"target": "ES6",
|
||||||
"module": "commonjs",
|
"module": "commonjs",
|
||||||
"allowSyntheticDefaultImports": true
|
"allowSyntheticDefaultImports": true,
|
||||||
|
"jsx": "preserve"
|
||||||
},
|
},
|
||||||
"include": ["src/**/*"],
|
"include": ["src/**/*"],
|
||||||
"exclude": ["node_modules"]
|
"exclude": ["node_modules"]
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
},
|
},
|
||||||
"main": "background.js",
|
"main": "background.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@unblockneteasemusic/server": "v0.27.0-rc.6",
|
"@unblockneteasemusic/rust-napi": "^0.3.0-pre.1",
|
||||||
"NeteaseCloudMusicApi": "^4.5.2",
|
"NeteaseCloudMusicApi": "^4.5.2",
|
||||||
"axios": "^0.26.1",
|
"axios": "^0.26.1",
|
||||||
"change-case": "^4.1.2",
|
"change-case": "^4.1.2",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { app, dialog, globalShortcut, ipcMain } from 'electron';
|
import { app, dialog, globalShortcut, ipcMain } from 'electron';
|
||||||
import match from '@unblockneteasemusic/server';
|
import UNM from '@unblockneteasemusic/rust-napi';
|
||||||
import { registerGlobalShortcut } from '@/electron/globalShortcut';
|
import { registerGlobalShortcut } from '@/electron/globalShortcut';
|
||||||
import cloneDeep from 'lodash/cloneDeep';
|
import cloneDeep from 'lodash/cloneDeep';
|
||||||
import shortcuts from '@/utils/shortcuts';
|
import shortcuts from '@/utils/shortcuts';
|
||||||
|
@ -112,55 +112,91 @@ async function getBiliVideoFile(url) {
|
||||||
/**
|
/**
|
||||||
* Parse the source string (`a, b`) to source list `['a', 'b']`.
|
* Parse the source string (`a, b`) to source list `['a', 'b']`.
|
||||||
*
|
*
|
||||||
|
* @param {import("@unblockneteasemusic/rust-napi").Executor} executor
|
||||||
* @param {string} sourceString The source string.
|
* @param {string} sourceString The source string.
|
||||||
* @returns {string[]} The source list.
|
* @returns {string[]} The source list.
|
||||||
*/
|
*/
|
||||||
function parseSourceStringToList(sourceString) {
|
function parseSourceStringToList(executor, sourceString) {
|
||||||
return sourceString.split(',').map(s => s.trim());
|
const availableSource = executor.list();
|
||||||
|
|
||||||
|
return sourceString
|
||||||
|
.split(',')
|
||||||
|
.map(s => s.trim().toLowerCase())
|
||||||
|
.filter(s => {
|
||||||
|
const isAvailable = availableSource.includes(s);
|
||||||
|
|
||||||
|
if (!isAvailable) {
|
||||||
|
log(`This source is not one of the supported source: ${s}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
return isAvailable;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export function initIpcMain(win, store, trayEventEmitter) {
|
export function initIpcMain(win, store, trayEventEmitter) {
|
||||||
ipcMain.handle('unblock-music', async (_, track, source) => {
|
// WIP: Do not enable logging as it has some issues in non-blocking I/O environment.
|
||||||
// 兼容 unblockneteasemusic 所使用的 api 字段
|
// UNM.enableLogging(UNM.LoggingType.ConsoleEnv);
|
||||||
track.alias = track.alia || [];
|
const unmExecutor = new UNM.Executor();
|
||||||
track.duration = track.dt || 0;
|
|
||||||
track.album = track.al || [];
|
|
||||||
track.artists = track.ar || [];
|
|
||||||
|
|
||||||
const timeoutPromise = new Promise((_, reject) => {
|
ipcMain.handle(
|
||||||
setTimeout(() => {
|
'unblock-music',
|
||||||
reject('timeout');
|
/**
|
||||||
}, 5000);
|
*
|
||||||
});
|
* @param {*} _
|
||||||
|
* @param {string | null} sourceListString
|
||||||
|
* @param {Record<string, any>} ncmTrack
|
||||||
|
* @param {UNM.Context} context
|
||||||
|
*/
|
||||||
|
async (_, sourceListString, ncmTrack, context) => {
|
||||||
|
// Formt the track input
|
||||||
|
// FIXME: Figure out the structure of Track
|
||||||
|
const song = {
|
||||||
|
id: ncmTrack.id && ncmTrack.id.toString(),
|
||||||
|
name: ncmTrack.name,
|
||||||
|
duration: ncmTrack.dt,
|
||||||
|
album: ncmTrack.al && {
|
||||||
|
id: ncmTrack.al.id && ncmTrack.al.id.toString(),
|
||||||
|
name: ncmTrack.al.name,
|
||||||
|
},
|
||||||
|
artists: ncmTrack.ar
|
||||||
|
? ncmTrack.ar.map(({ id, name }) => ({
|
||||||
|
id: id && id.toString(),
|
||||||
|
name,
|
||||||
|
}))
|
||||||
|
: [],
|
||||||
|
};
|
||||||
|
|
||||||
const sourceList =
|
const sourceList =
|
||||||
typeof source === 'string' ? parseSourceStringToList(source) : null;
|
typeof sourceListString === 'string'
|
||||||
log(`[UNM] using source: ${sourceList || '<default>'}`);
|
? parseSourceStringToList(unmExecutor, sourceListString)
|
||||||
|
: ['migu', 'ytdl', 'bilibili', 'pyncm', 'kugou'];
|
||||||
|
log(`[UNM] using source: ${sourceList.join(', ')}`);
|
||||||
|
log(`[UNM] using configuration: ${JSON.stringify(context)}`);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const matchedAudio = await Promise.race([
|
|
||||||
// TODO: tell users to install yt-dlp.
|
// TODO: tell users to install yt-dlp.
|
||||||
// we passed "null" to source, to let UNM choose the default source.
|
const matchedAudio = await unmExecutor.search(
|
||||||
match(track.id, sourceList, track),
|
sourceList,
|
||||||
timeoutPromise,
|
song,
|
||||||
]);
|
context
|
||||||
|
);
|
||||||
if (!matchedAudio || !matchedAudio.url) {
|
const retrievedSong = await unmExecutor.retrieve(matchedAudio, context);
|
||||||
throw new Error('no such a song found');
|
|
||||||
}
|
|
||||||
|
|
||||||
// bilibili's audio file needs some special treatment
|
// bilibili's audio file needs some special treatment
|
||||||
if (matchedAudio.url.includes('bilivideo.com')) {
|
if (retrievedSong.url.includes('bilivideo.com')) {
|
||||||
matchedAudio.url = await getBiliVideoFile(matchedAudio.url);
|
retrievedSong.url = await getBiliVideoFile(retrievedSong.url);
|
||||||
}
|
}
|
||||||
|
|
||||||
return matchedAudio;
|
log(`respond with retrieve song…`);
|
||||||
|
log(JSON.stringify(matchedAudio));
|
||||||
|
return retrievedSong;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
const errorMessage = err instanceof Error ? `${err.message}` : `${err}`;
|
const errorMessage = err instanceof Error ? `${err.message}` : `${err}`;
|
||||||
log(`UnblockNeteaseMusic failed: ${errorMessage}`);
|
log(`UnblockNeteaseMusic failed: ${errorMessage}`);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
);
|
||||||
|
|
||||||
ipcMain.on('close', e => {
|
ipcMain.on('close', e => {
|
||||||
if (isMac) {
|
if (isMac) {
|
||||||
|
|
|
@ -370,22 +370,61 @@ export default class {
|
||||||
}
|
}
|
||||||
async _getAudioSourceFromUnblockMusic(track) {
|
async _getAudioSourceFromUnblockMusic(track) {
|
||||||
console.debug(`[debug][Player.js] _getAudioSourceFromUnblockMusic`);
|
console.debug(`[debug][Player.js] _getAudioSourceFromUnblockMusic`);
|
||||||
|
|
||||||
if (
|
if (
|
||||||
process.env.IS_ELECTRON !== true ||
|
process.env.IS_ELECTRON !== true ||
|
||||||
store.state.settings.enableUnblockNeteaseMusic === false
|
store.state.settings.enableUnblockNeteaseMusic === false
|
||||||
) {
|
) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
const source = await ipcRenderer.invoke(
|
|
||||||
'unblock-music',
|
/**
|
||||||
track,
|
*
|
||||||
store.state.settings.unmSource
|
* @param {string=} searchMode
|
||||||
);
|
* @returns {import("@unblockneteasemusic/rust-napi").SearchMode}
|
||||||
if (store.state.settings.automaticallyCacheSongs && source?.url) {
|
*/
|
||||||
// TODO: 将unblockMusic字样换成真正的来源(比如酷我咪咕等)
|
const determineSearchMode = searchMode => {
|
||||||
cacheTrackSource(track, source.url, 128000, 'unblockMusic');
|
/**
|
||||||
|
* FastFirst = 0
|
||||||
|
* OrderFirst = 1
|
||||||
|
*/
|
||||||
|
switch (searchMode) {
|
||||||
|
case 'fast-first':
|
||||||
|
return 0;
|
||||||
|
case 'order-first':
|
||||||
|
return 1;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
return source?.url;
|
};
|
||||||
|
|
||||||
|
/** @type {import("@unblockneteasemusic/rust-napi").RetrievedSongInfo | null} */
|
||||||
|
const retrieveSongInfo = await ipcRenderer.invoke(
|
||||||
|
'unblock-music',
|
||||||
|
store.state.settings.unmSource,
|
||||||
|
track,
|
||||||
|
/** @type {import("@unblockneteasemusic/rust-napi").Context} */ ({
|
||||||
|
enableFlac: store.state.settings.unmEnableFlac || null,
|
||||||
|
proxyUri: store.state.settings.unmProxyUri || null,
|
||||||
|
searchMode: determineSearchMode(store.state.settings.unmSearchMode),
|
||||||
|
config: {
|
||||||
|
'joox:cookie': store.state.settings.unmJooxCookie || null,
|
||||||
|
'qq:cookie': store.state.settings.unmQQCookie || null,
|
||||||
|
'ytdl:exe': store.state.settings.unmYtDlExe || null,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
if (store.state.settings.automaticallyCacheSongs && retrieveSongInfo?.url) {
|
||||||
|
cacheTrackSource(
|
||||||
|
track,
|
||||||
|
retrieveSongInfo.url,
|
||||||
|
128000,
|
||||||
|
`unm:${retrieveSongInfo.source}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return retrieveSongInfo?.url;
|
||||||
}
|
}
|
||||||
_getAudioSource(track) {
|
_getAudioSource(track) {
|
||||||
return this._getAudioSourceFromCache(String(track.id))
|
return this._getAudioSourceFromCache(String(track.id))
|
||||||
|
|
|
@ -223,11 +223,11 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<section v-if="isElectron" class="unm-configuration">
|
<section v-if="isElectron" class="unm-configuration">
|
||||||
<h3>UnblockNeteaseMusic 设定</h3>
|
<h3>UnblockNeteaseMusic 设置</h3>
|
||||||
<div class="item">
|
<div class="item">
|
||||||
<div class="left">
|
<div class="left">
|
||||||
<div class="title"
|
<div class="title"
|
||||||
>启用
|
>激活
|
||||||
<a
|
<a
|
||||||
href="https://github.com/UnblockNeteaseMusic/server"
|
href="https://github.com/UnblockNeteaseMusic/server"
|
||||||
target="blank"
|
target="blank"
|
||||||
|
@ -247,16 +247,17 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="item">
|
<div class="item">
|
||||||
<div class="left">
|
<div class="left">
|
||||||
<div class="title"> 备选音源 </div>
|
<div class="title"> 备选音源 </div>
|
||||||
<div class="description">
|
<div class="description">
|
||||||
音源的具体代号
|
音源的具体代号
|
||||||
<a
|
<a
|
||||||
href="https://github.com/UnblockNeteaseMusic/server#音源清单"
|
href="https://github.com/UnblockNeteaseMusic/server-rust/blob/main/README.md#支援的所有引擎"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
>
|
>
|
||||||
可以点此到 UNM 的说明页面查询 </a
|
可以点此到 UNM 的说明页面查询。 </a
|
||||||
><br />
|
><br />
|
||||||
多个音源请用 <code>,</code> 逗号分隔。<br />
|
多个音源请用 <code>,</code> 逗号分隔。<br />
|
||||||
留空则使用 UNM 内置的默认值。
|
留空则使用 UNM 内置的默认值。
|
||||||
|
@ -264,12 +265,135 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="right">
|
<div class="right">
|
||||||
<input
|
<input
|
||||||
id="unm-source"
|
|
||||||
v-model="unmSource"
|
v-model="unmSource"
|
||||||
class="text-input"
|
class="text-input margin-right-0"
|
||||||
placeholder="例 bilibili, kuwo"
|
placeholder="例 bilibili, kuwo"
|
||||||
/>
|
/>
|
||||||
<label for="unm-source"></label>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="item">
|
||||||
|
<div class="left">
|
||||||
|
<div class="title"> 激活无损音质 (FLAC) </div>
|
||||||
|
<div class="description"> 设置后需要清掉快取才能生效。 </div>
|
||||||
|
</div>
|
||||||
|
<div class="right">
|
||||||
|
<div class="toggle">
|
||||||
|
<input
|
||||||
|
id="unm-enable-flac"
|
||||||
|
v-model="unmEnableFlac"
|
||||||
|
type="checkbox"
|
||||||
|
/>
|
||||||
|
<label for="unm-enable-flac" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="item">
|
||||||
|
<div class="left">
|
||||||
|
<div class="title"> 音源搜索模式 </div>
|
||||||
|
</div>
|
||||||
|
<div class="right">
|
||||||
|
<select v-model="unmSearchMode">
|
||||||
|
<option value="fast-first"> 速度优先,不论顺序 </option>
|
||||||
|
<option value="order-first"> 顺序优先,不论速度 </option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="item">
|
||||||
|
<div class="left">
|
||||||
|
<div class="title"> 请求用代理服务器 (Proxy) </div>
|
||||||
|
<div class="description">
|
||||||
|
请求如 YouTube 音源服务时要使用的代理服务器。<br />
|
||||||
|
留空则不进行相关设置。
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="right">
|
||||||
|
<input
|
||||||
|
v-model="unmProxyUri"
|
||||||
|
class="text-input margin-right-0"
|
||||||
|
placeholder="例 https://192.168.11.45"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="item">
|
||||||
|
<div class="left">
|
||||||
|
<div class="title"> Joox 引擎的 Cookie </div>
|
||||||
|
<div class="description">
|
||||||
|
<a
|
||||||
|
href="https://github.com/UnblockNeteaseMusic/server-rust/tree/main/engines#joox-cookie-設定說明"
|
||||||
|
target="_blank"
|
||||||
|
>设置说明请参见此处。</a
|
||||||
|
>
|
||||||
|
留空则不进行相关设置。
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="right">
|
||||||
|
<input
|
||||||
|
v-model="unmJooxCookie"
|
||||||
|
class="text-input margin-right-0"
|
||||||
|
placeholder="wmid=..; session_key=.."
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="item">
|
||||||
|
<div class="left">
|
||||||
|
<div class="title"> QQ 引擎的 Cookie </div>
|
||||||
|
<div class="description">
|
||||||
|
<a
|
||||||
|
href="https://github.com/UnblockNeteaseMusic/server-rust/tree/main/engines#qq-cookie-設定說明"
|
||||||
|
target="_blank"
|
||||||
|
>设置说明请参见此处。</a
|
||||||
|
>
|
||||||
|
留空则不进行相关设置。
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="right">
|
||||||
|
<input
|
||||||
|
v-model="unmQQCookie"
|
||||||
|
class="text-input margin-right-0"
|
||||||
|
placeholder="uin=..; qm_keyst=..;"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="item">
|
||||||
|
<div class="left">
|
||||||
|
<div class="title"> YtDl 引擎要使用的 youtube-dl 运行档 </div>
|
||||||
|
<div class="description">
|
||||||
|
<a
|
||||||
|
href="https://github.com/UnblockNeteaseMusic/server-rust/tree/main/engines#ytdlexe-設定說明"
|
||||||
|
target="_blank"
|
||||||
|
>设置说明请参见此处。</a
|
||||||
|
>留空则不进行相关设置。
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="right">
|
||||||
|
<input
|
||||||
|
v-model="unmYtDlExe"
|
||||||
|
class="text-input margin-right-0"
|
||||||
|
placeholder="ex. youtube-dl"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="item">
|
||||||
|
<div class="left">
|
||||||
|
<div class="title"> 用于 UNM 的 Proxy 服务器 </div>
|
||||||
|
<div class="description">
|
||||||
|
请求如 YouTube 音源服务时要使用的 Proxy 服务器。<br />
|
||||||
|
留空则不进行相关设置。
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="right">
|
||||||
|
<input
|
||||||
|
v-model="unmProxyUri"
|
||||||
|
class="text-input margin-right-0"
|
||||||
|
placeholder="例 https://192.168.11.45"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
@ -944,7 +1068,73 @@ export default {
|
||||||
set(value) {
|
set(value) {
|
||||||
this.$store.commit('updateSettings', {
|
this.$store.commit('updateSettings', {
|
||||||
key: 'unmSource',
|
key: 'unmSource',
|
||||||
value: value.length ? value : null,
|
value: value.length && value,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
},
|
||||||
|
unmSearchMode: {
|
||||||
|
get() {
|
||||||
|
return this.settings.unmSearchMode || 'fast-first';
|
||||||
|
},
|
||||||
|
set(value) {
|
||||||
|
this.$store.commit('updateSettings', {
|
||||||
|
key: 'unmSearchMode',
|
||||||
|
value: value,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
},
|
||||||
|
unmEnableFlac: {
|
||||||
|
get() {
|
||||||
|
return this.settings.unmEnableFlac || false;
|
||||||
|
},
|
||||||
|
set(value) {
|
||||||
|
this.$store.commit('updateSettings', {
|
||||||
|
key: 'unmEnableFlac',
|
||||||
|
value: value || false,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
},
|
||||||
|
unmProxyUri: {
|
||||||
|
get() {
|
||||||
|
return this.settings.unmProxyUri || '';
|
||||||
|
},
|
||||||
|
set(value) {
|
||||||
|
this.$store.commit('updateSettings', {
|
||||||
|
key: 'unmProxyUri',
|
||||||
|
value: value.length && value,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
},
|
||||||
|
unmJooxCookie: {
|
||||||
|
get() {
|
||||||
|
return this.settings.unmJooxCookie || '';
|
||||||
|
},
|
||||||
|
set(value) {
|
||||||
|
this.$store.commit('updateSettings', {
|
||||||
|
key: 'unmJooxCookie',
|
||||||
|
value: value.length && value,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
},
|
||||||
|
unmQQCookie: {
|
||||||
|
get() {
|
||||||
|
return this.settings.unmQQCookie || '';
|
||||||
|
},
|
||||||
|
set(value) {
|
||||||
|
this.$store.commit('updateSettings', {
|
||||||
|
key: 'unmQQCookie',
|
||||||
|
value: value.length && value,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
},
|
||||||
|
unmYtDlExe: {
|
||||||
|
get() {
|
||||||
|
return this.settings.unmYtDlExe || '';
|
||||||
|
},
|
||||||
|
set(value) {
|
||||||
|
this.$store.commit('updateSettings', {
|
||||||
|
key: 'unmYtDlExe',
|
||||||
|
value: value.length && value,
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -1274,6 +1464,9 @@ button {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
input.text-input.margin-right-0 {
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
input.text-input {
|
input.text-input {
|
||||||
background: var(--color-secondary-bg);
|
background: var(--color-secondary-bg);
|
||||||
border: none;
|
border: none;
|
||||||
|
|
|
@ -56,6 +56,13 @@ module.exports = {
|
||||||
symbolId: 'icon-[name]',
|
symbolId: 'icon-[name]',
|
||||||
})
|
})
|
||||||
.end();
|
.end();
|
||||||
|
config.module
|
||||||
|
.rule('napi')
|
||||||
|
.test(/\.node$/)
|
||||||
|
.use('node-loader')
|
||||||
|
.loader('node-loader')
|
||||||
|
.end();
|
||||||
|
|
||||||
// LimitChunkCountPlugin 可以通过合并块来对块进行后期处理。用以解决 chunk 包太多的问题
|
// LimitChunkCountPlugin 可以通过合并块来对块进行后期处理。用以解决 chunk 包太多的问题
|
||||||
config.plugin('chunkPlugin').use(webpack.optimize.LimitChunkCountPlugin, [
|
config.plugin('chunkPlugin').use(webpack.optimize.LimitChunkCountPlugin, [
|
||||||
{
|
{
|
||||||
|
@ -69,10 +76,7 @@ module.exports = {
|
||||||
// electron-builder的配置文件
|
// electron-builder的配置文件
|
||||||
electronBuilder: {
|
electronBuilder: {
|
||||||
nodeIntegration: true,
|
nodeIntegration: true,
|
||||||
externals: [
|
externals: ['@unblockneteasemusic/rust-napi'],
|
||||||
'@unblockneteasemusic/server',
|
|
||||||
'@unblockneteasemusic/server/src/consts',
|
|
||||||
],
|
|
||||||
builderOptions: {
|
builderOptions: {
|
||||||
productName: 'YesPlayMusic',
|
productName: 'YesPlayMusic',
|
||||||
copyright: 'Copyright © YesPlayMusic',
|
copyright: 'Copyright © YesPlayMusic',
|
||||||
|
|
235
yarn.lock
235
yarn.lock
|
@ -1714,14 +1714,89 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
"@types/node" "*"
|
"@types/node" "*"
|
||||||
|
|
||||||
"@unblockneteasemusic/server@v0.27.0-rc.6":
|
"@unblockneteasemusic/rust-napi-android-arm-eabi@0.3.0-pre.1":
|
||||||
version "0.27.0-rc.6"
|
version "0.3.0-pre.1"
|
||||||
resolved "https://registry.yarnpkg.com/@unblockneteasemusic/server/-/server-0.27.0-rc.6.tgz#a6ce8d025d3fcfad0f93d1944e4cd0810fedd019"
|
resolved "https://registry.yarnpkg.com/@unblockneteasemusic/rust-napi-android-arm-eabi/-/rust-napi-android-arm-eabi-0.3.0-pre.1.tgz#290f22c5155f95bc5919cab2954cf051a88dcf85"
|
||||||
integrity sha512-H/dtVM5tmvuYeBhqmLrUo2sbGZKSN1xtZs4Km0rOqsiKkX/vMAlF1gmy61Wnc0hLjL1orY6eHnvRdZV/2hWnvQ==
|
integrity sha512-932T6uUSHbWXTS2lt0wTI5F2lsIrGea2aU22VwSFaHfpTgxB8qDfd+jn+zMRlpnqTmuglyd0hk/1yUZd9tgu+w==
|
||||||
dependencies:
|
|
||||||
node-windows "^1.0.0-beta.6"
|
"@unblockneteasemusic/rust-napi-android-arm64@0.3.0-pre.1":
|
||||||
pino "6.14.0"
|
version "0.3.0-pre.1"
|
||||||
pino-pretty "^7.5.3"
|
resolved "https://registry.yarnpkg.com/@unblockneteasemusic/rust-napi-android-arm64/-/rust-napi-android-arm64-0.3.0-pre.1.tgz#442461c328153dc5eaaec1047dd5333b74eaa452"
|
||||||
|
integrity sha512-RQMCzO7+0Iw+R/MHy0hvv9Vg6BzqrUmWk9bMLR0mkkYKxR0wPEaB7WpAvUfLRKevSqiWP8rrNRuzqGVBu0PaCg==
|
||||||
|
|
||||||
|
"@unblockneteasemusic/rust-napi-darwin-arm64@0.3.0-pre.1":
|
||||||
|
version "0.3.0-pre.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@unblockneteasemusic/rust-napi-darwin-arm64/-/rust-napi-darwin-arm64-0.3.0-pre.1.tgz#b4175437dab3738360c94f696af5bc5512822df4"
|
||||||
|
integrity sha512-M3YvPhYNyBSytho3FmyX1cj5k21ZlW14mPuy/5oLRw4qehAmjsSYjCEFLG5I29IlZTLN0sbIz92dqHkYclSXSg==
|
||||||
|
|
||||||
|
"@unblockneteasemusic/rust-napi-darwin-x64@0.3.0-pre.1":
|
||||||
|
version "0.3.0-pre.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@unblockneteasemusic/rust-napi-darwin-x64/-/rust-napi-darwin-x64-0.3.0-pre.1.tgz#dc2016d49f4d33ef7b7eaa8d607706c99e56831d"
|
||||||
|
integrity sha512-kN4Bur22hFo2UAJ4vljuEX4ue7TlhhOnz9Q3KrwhxOtv2KlQi2iQ/8tCl+/whKpqgf/cs/klQLDJj73PsE1G+w==
|
||||||
|
|
||||||
|
"@unblockneteasemusic/rust-napi-freebsd-x64@0.3.0-pre.1":
|
||||||
|
version "0.3.0-pre.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@unblockneteasemusic/rust-napi-freebsd-x64/-/rust-napi-freebsd-x64-0.3.0-pre.1.tgz#551f3e888655dd6cb02bbeb03fe997001c3fc22d"
|
||||||
|
integrity sha512-tRBudpZX+0X8sDSP+LmnU9nfsT7939rCu+bZhizjHHe2jt02iX/ZLHOkEcVBh0VHhHVvTehj0zH3iHFkfYnR2Q==
|
||||||
|
|
||||||
|
"@unblockneteasemusic/rust-napi-linux-arm-gnueabihf@0.3.0-pre.1":
|
||||||
|
version "0.3.0-pre.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@unblockneteasemusic/rust-napi-linux-arm-gnueabihf/-/rust-napi-linux-arm-gnueabihf-0.3.0-pre.1.tgz#893aba87269a3d9f25b3ad36be4c663ccca3dc62"
|
||||||
|
integrity sha512-3vkXlBm6f2dWOWLKaosTcFAO5b/VV9WvyT3PQBJFvq0PtRGonr2Zr1gYJC4zUz2UraSKaFg4GMKgopU2Duxgow==
|
||||||
|
|
||||||
|
"@unblockneteasemusic/rust-napi-linux-arm64-gnu@0.3.0-pre.1":
|
||||||
|
version "0.3.0-pre.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@unblockneteasemusic/rust-napi-linux-arm64-gnu/-/rust-napi-linux-arm64-gnu-0.3.0-pre.1.tgz#739f21a7d0e088be654a4c007cd2e3041f7959b5"
|
||||||
|
integrity sha512-Zq1kjjXhle0OA7NzadzBQvjbTZfbK/qMuHay97+ZGXZH4uxv0jmJ2aQWR7HlrrKmQKpknURvrxbXmi8dxeI+SA==
|
||||||
|
|
||||||
|
"@unblockneteasemusic/rust-napi-linux-arm64-musl@0.3.0-pre.1":
|
||||||
|
version "0.3.0-pre.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@unblockneteasemusic/rust-napi-linux-arm64-musl/-/rust-napi-linux-arm64-musl-0.3.0-pre.1.tgz#18301a8e8cfdf6c45b068ec21b452ce353ad76cf"
|
||||||
|
integrity sha512-Yp7+Ra8ksx2nCZs18duK7BPtsY2chzdrBIrWY14N7aP0IIglwBcazP+GGFNaqqDx0nW+/0463pUsi8OgbWX+mA==
|
||||||
|
|
||||||
|
"@unblockneteasemusic/rust-napi-linux-x64-gnu@0.3.0-pre.1":
|
||||||
|
version "0.3.0-pre.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@unblockneteasemusic/rust-napi-linux-x64-gnu/-/rust-napi-linux-x64-gnu-0.3.0-pre.1.tgz#ed453b556c6f8914b557eef1d8e1311c75f26806"
|
||||||
|
integrity sha512-A71/PhBCotAQPimGIJnZEYJwBv2FilhYC1OC4wOy3Rt54C9Cw12FJp49c7J13mZLktZfCJOSu6/6RPY8+6Yfrw==
|
||||||
|
|
||||||
|
"@unblockneteasemusic/rust-napi-linux-x64-musl@0.3.0-pre.1":
|
||||||
|
version "0.3.0-pre.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@unblockneteasemusic/rust-napi-linux-x64-musl/-/rust-napi-linux-x64-musl-0.3.0-pre.1.tgz#ce1e308491df2d2b671223ad255192e0d5de2064"
|
||||||
|
integrity sha512-klXwwdVb4LdHmUrdclZSfn6nQwXddBwJJk392wRagjGUyNbUkC9b3JHfMEdrssMIPtIGtNHWt/43z+saovZl2g==
|
||||||
|
|
||||||
|
"@unblockneteasemusic/rust-napi-win32-arm64-msvc@0.3.0-pre.1":
|
||||||
|
version "0.3.0-pre.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@unblockneteasemusic/rust-napi-win32-arm64-msvc/-/rust-napi-win32-arm64-msvc-0.3.0-pre.1.tgz#f78512ef26951ef98f63cc6fc51c39e47c0cf80f"
|
||||||
|
integrity sha512-jaX6UvQlRuH1iyextG34l8b19MtVFTZZX8U34oW3d7rZxcas5ZitEHzd6XfjpHcTtkXSyhQxx+WjDiY2BQ+B3A==
|
||||||
|
|
||||||
|
"@unblockneteasemusic/rust-napi-win32-ia32-msvc@0.3.0-pre.1":
|
||||||
|
version "0.3.0-pre.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@unblockneteasemusic/rust-napi-win32-ia32-msvc/-/rust-napi-win32-ia32-msvc-0.3.0-pre.1.tgz#6fe03b8862c46e2d4b9758c36450138db81cbabd"
|
||||||
|
integrity sha512-QgO05vQxxkU0+bfprxQMVLXxguI8N1ApPQCyAYNnvrKTQ/F6OjV+bQghlWaKwcIeve8zoYN1zgSHDyNj+0xrYA==
|
||||||
|
|
||||||
|
"@unblockneteasemusic/rust-napi-win32-x64-msvc@0.3.0-pre.1":
|
||||||
|
version "0.3.0-pre.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@unblockneteasemusic/rust-napi-win32-x64-msvc/-/rust-napi-win32-x64-msvc-0.3.0-pre.1.tgz#99b1e5c1f09241b436a2797bdfc01d7a4c566f51"
|
||||||
|
integrity sha512-6CI0YlQxHiU6vetwoAjYgBOFlWoTkLVUSd0tpEN9/5R7iExRUHdFdRfpXqPJzpYnAhZlGqAIslCayoNcf7vnQw==
|
||||||
|
|
||||||
|
"@unblockneteasemusic/rust-napi@^0.3.0-pre.1":
|
||||||
|
version "0.3.0-pre.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@unblockneteasemusic/rust-napi/-/rust-napi-0.3.0-pre.1.tgz#ff5a18c0d8fbdde14af79b89fe8d760153406c6d"
|
||||||
|
integrity sha512-n1zDJvy5OEEMPQdhTPARRRQLM4Tnvx9UGq0smVKWu6CjutK6rcSIVoxe4ADILzBOY3RCe5vuo9Qn4RUzKCeeWQ==
|
||||||
|
optionalDependencies:
|
||||||
|
"@unblockneteasemusic/rust-napi-android-arm-eabi" "0.3.0-pre.1"
|
||||||
|
"@unblockneteasemusic/rust-napi-android-arm64" "0.3.0-pre.1"
|
||||||
|
"@unblockneteasemusic/rust-napi-darwin-arm64" "0.3.0-pre.1"
|
||||||
|
"@unblockneteasemusic/rust-napi-darwin-x64" "0.3.0-pre.1"
|
||||||
|
"@unblockneteasemusic/rust-napi-freebsd-x64" "0.3.0-pre.1"
|
||||||
|
"@unblockneteasemusic/rust-napi-linux-arm-gnueabihf" "0.3.0-pre.1"
|
||||||
|
"@unblockneteasemusic/rust-napi-linux-arm64-gnu" "0.3.0-pre.1"
|
||||||
|
"@unblockneteasemusic/rust-napi-linux-arm64-musl" "0.3.0-pre.1"
|
||||||
|
"@unblockneteasemusic/rust-napi-linux-x64-gnu" "0.3.0-pre.1"
|
||||||
|
"@unblockneteasemusic/rust-napi-linux-x64-musl" "0.3.0-pre.1"
|
||||||
|
"@unblockneteasemusic/rust-napi-win32-arm64-msvc" "0.3.0-pre.1"
|
||||||
|
"@unblockneteasemusic/rust-napi-win32-ia32-msvc" "0.3.0-pre.1"
|
||||||
|
"@unblockneteasemusic/rust-napi-win32-x64-msvc" "0.3.0-pre.1"
|
||||||
|
|
||||||
"@vibrant/color@^3.2.1-alpha.1":
|
"@vibrant/color@^3.2.1-alpha.1":
|
||||||
version "3.2.1-alpha.1"
|
version "3.2.1-alpha.1"
|
||||||
|
@ -4382,11 +4457,6 @@ data-uri-to-buffer@3:
|
||||||
resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636"
|
resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636"
|
||||||
integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==
|
integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==
|
||||||
|
|
||||||
dateformat@^4.6.3:
|
|
||||||
version "4.6.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-4.6.3.tgz#556fa6497e5217fedb78821424f8a1c22fa3f4b5"
|
|
||||||
integrity sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==
|
|
||||||
|
|
||||||
dayjs@^1.8.36:
|
dayjs@^1.8.36:
|
||||||
version "1.11.1"
|
version "1.11.1"
|
||||||
resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.1.tgz#90b33a3dda3417258d48ad2771b415def6545eb0"
|
resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.1.tgz#90b33a3dda3417258d48ad2771b415def6545eb0"
|
||||||
|
@ -4907,7 +4977,7 @@ duplexify@^3.4.2, duplexify@^3.6.0:
|
||||||
readable-stream "^2.0.0"
|
readable-stream "^2.0.0"
|
||||||
stream-shift "^1.0.0"
|
stream-shift "^1.0.0"
|
||||||
|
|
||||||
duplexify@^4.1.1, duplexify@^4.1.2:
|
duplexify@^4.1.1:
|
||||||
version "4.1.2"
|
version "4.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.2.tgz#18b4f8d28289132fa0b9573c898d9f903f81c7b0"
|
resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.2.tgz#18b4f8d28289132fa0b9573c898d9f903f81c7b0"
|
||||||
integrity sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==
|
integrity sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==
|
||||||
|
@ -5795,16 +5865,6 @@ fast-levenshtein@~2.0.6:
|
||||||
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
|
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
|
||||||
integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
|
integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
|
||||||
|
|
||||||
fast-redact@^3.0.0:
|
|
||||||
version "3.1.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.1.1.tgz#790fcff8f808c2e12fabbfb2be5cb2deda448fa0"
|
|
||||||
integrity sha512-odVmjC8x8jNeMZ3C+rPMESzXVSEU8tSWSHv9HFxP2mm89G/1WwqhrerJDQm9Zus8X6aoRgQDThKqptdNA6bt+A==
|
|
||||||
|
|
||||||
fast-safe-stringify@^2.0.7, fast-safe-stringify@^2.0.8:
|
|
||||||
version "2.1.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884"
|
|
||||||
integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==
|
|
||||||
|
|
||||||
fastq@^1.6.0:
|
fastq@^1.6.0:
|
||||||
version "1.13.0"
|
version "1.13.0"
|
||||||
resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c"
|
resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c"
|
||||||
|
@ -5993,11 +6053,6 @@ flat-cache@^2.0.1:
|
||||||
rimraf "2.6.3"
|
rimraf "2.6.3"
|
||||||
write "1.0.3"
|
write "1.0.3"
|
||||||
|
|
||||||
flatstr@^1.0.12:
|
|
||||||
version "1.0.12"
|
|
||||||
resolved "https://registry.yarnpkg.com/flatstr/-/flatstr-1.0.12.tgz#c2ba6a08173edbb6c9640e3055b95e287ceb5931"
|
|
||||||
integrity sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==
|
|
||||||
|
|
||||||
flatted@^2.0.0:
|
flatted@^2.0.0:
|
||||||
version "2.0.2"
|
version "2.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138"
|
resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138"
|
||||||
|
@ -7618,11 +7673,6 @@ jimp@^0.16.1:
|
||||||
"@jimp/types" "^0.16.1"
|
"@jimp/types" "^0.16.1"
|
||||||
regenerator-runtime "^0.13.3"
|
regenerator-runtime "^0.13.3"
|
||||||
|
|
||||||
joycon@^3.1.1:
|
|
||||||
version "3.1.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/joycon/-/joycon-3.1.1.tgz#bce8596d6ae808f8b68168f5fc69280996894f03"
|
|
||||||
integrity sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==
|
|
||||||
|
|
||||||
jpeg-js@0.4.2:
|
jpeg-js@0.4.2:
|
||||||
version "0.4.2"
|
version "0.4.2"
|
||||||
resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.4.2.tgz#8b345b1ae4abde64c2da2fe67ea216a114ac279d"
|
resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.4.2.tgz#8b345b1ae4abde64c2da2fe67ea216a114ac279d"
|
||||||
|
@ -8441,11 +8491,6 @@ minimist@^1.2.3:
|
||||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
|
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
|
||||||
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
|
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
|
||||||
|
|
||||||
minimist@~0.0.1:
|
|
||||||
version "0.0.10"
|
|
||||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
|
|
||||||
integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=
|
|
||||||
|
|
||||||
minipass-collect@^1.0.2:
|
minipass-collect@^1.0.2:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617"
|
resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617"
|
||||||
|
@ -8778,14 +8823,6 @@ node-vibrant@^3.2.1-alpha.1:
|
||||||
"@vibrant/quantizer-mmcq" "^3.2.1-alpha.1"
|
"@vibrant/quantizer-mmcq" "^3.2.1-alpha.1"
|
||||||
url "^0.11.0"
|
url "^0.11.0"
|
||||||
|
|
||||||
node-windows@^1.0.0-beta.6:
|
|
||||||
version "1.0.0-beta.6"
|
|
||||||
resolved "https://registry.yarnpkg.com/node-windows/-/node-windows-1.0.0-beta.6.tgz#04bf66946760bb8507f1d1326267587b56b8c8b3"
|
|
||||||
integrity sha512-Ehig70tF9A9Wns4VMpnsvT7dyat/d2fio6C4g1RAEaAi+piAjN6Wc+/fdSOifl8YCCncVllijv5Q9wdyHvdgeA==
|
|
||||||
dependencies:
|
|
||||||
optimist "~0.6.0"
|
|
||||||
xml "0.0.12"
|
|
||||||
|
|
||||||
normalize-package-data@^2.5.0:
|
normalize-package-data@^2.5.0:
|
||||||
version "2.5.0"
|
version "2.5.0"
|
||||||
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
|
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
|
||||||
|
@ -9050,14 +9087,6 @@ opn@^5.5.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
is-wsl "^1.1.0"
|
is-wsl "^1.1.0"
|
||||||
|
|
||||||
optimist@~0.6.0:
|
|
||||||
version "0.6.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
|
|
||||||
integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY=
|
|
||||||
dependencies:
|
|
||||||
minimist "~0.0.1"
|
|
||||||
wordwrap "~0.0.2"
|
|
||||||
|
|
||||||
optionator@^0.8.1, optionator@^0.8.3:
|
optionator@^0.8.1, optionator@^0.8.3:
|
||||||
version "0.8.3"
|
version "0.8.3"
|
||||||
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
|
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
|
||||||
|
@ -9516,50 +9545,6 @@ pinkie@^2.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
|
resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
|
||||||
integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
|
integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
|
||||||
|
|
||||||
pino-abstract-transport@^0.5.0:
|
|
||||||
version "0.5.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-0.5.0.tgz#4b54348d8f73713bfd14e3dc44228739aa13d9c0"
|
|
||||||
integrity sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==
|
|
||||||
dependencies:
|
|
||||||
duplexify "^4.1.2"
|
|
||||||
split2 "^4.0.0"
|
|
||||||
|
|
||||||
pino-pretty@^7.5.3:
|
|
||||||
version "7.5.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/pino-pretty/-/pino-pretty-7.5.3.tgz#cceb5f0ae193c949d8a0b302227b1cec69b7491c"
|
|
||||||
integrity sha512-jOGysjWxOfaeUElKTeJPstiitt1Ii7owcb21lDc1BS5F4P4HRDDcGxL1f1jskSA0zkTyj64/iaXlMLGhwtLVtg==
|
|
||||||
dependencies:
|
|
||||||
args "^5.0.1"
|
|
||||||
colorette "^2.0.7"
|
|
||||||
dateformat "^4.6.3"
|
|
||||||
fast-safe-stringify "^2.0.7"
|
|
||||||
joycon "^3.1.1"
|
|
||||||
pino-abstract-transport "^0.5.0"
|
|
||||||
pump "^3.0.0"
|
|
||||||
readable-stream "^3.6.0"
|
|
||||||
rfdc "^1.3.0"
|
|
||||||
secure-json-parse "^2.4.0"
|
|
||||||
sonic-boom "^2.2.0"
|
|
||||||
strip-json-comments "^3.1.1"
|
|
||||||
|
|
||||||
pino-std-serializers@^3.1.0:
|
|
||||||
version "3.2.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-3.2.0.tgz#b56487c402d882eb96cd67c257868016b61ad671"
|
|
||||||
integrity sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg==
|
|
||||||
|
|
||||||
pino@6.14.0:
|
|
||||||
version "6.14.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/pino/-/pino-6.14.0.tgz#b745ea87a99a6c4c9b374e4f29ca7910d4c69f78"
|
|
||||||
integrity sha512-iuhEDel3Z3hF9Jfe44DPXR8l07bhjuFY3GMHIXbjnY9XcafbyDDwl2sN2vw2GjMPf5Nkoe+OFao7ffn9SXaKDg==
|
|
||||||
dependencies:
|
|
||||||
fast-redact "^3.0.0"
|
|
||||||
fast-safe-stringify "^2.0.8"
|
|
||||||
flatstr "^1.0.12"
|
|
||||||
pino-std-serializers "^3.1.0"
|
|
||||||
process-warning "^1.0.0"
|
|
||||||
quick-format-unescaped "^4.0.3"
|
|
||||||
sonic-boom "^1.0.2"
|
|
||||||
|
|
||||||
pixelmatch@^4.0.2:
|
pixelmatch@^4.0.2:
|
||||||
version "4.0.2"
|
version "4.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/pixelmatch/-/pixelmatch-4.0.2.tgz#8f47dcec5011b477b67db03c243bc1f3085e8854"
|
resolved "https://registry.yarnpkg.com/pixelmatch/-/pixelmatch-4.0.2.tgz#8f47dcec5011b477b67db03c243bc1f3085e8854"
|
||||||
|
@ -10118,11 +10103,6 @@ process-nextick-args@~2.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
|
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
|
||||||
integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
|
integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
|
||||||
|
|
||||||
process-warning@^1.0.0:
|
|
||||||
version "1.0.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-1.0.0.tgz#980a0b25dc38cd6034181be4b7726d89066b4616"
|
|
||||||
integrity sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==
|
|
||||||
|
|
||||||
process@^0.11.10:
|
process@^0.11.10:
|
||||||
version "0.11.10"
|
version "0.11.10"
|
||||||
resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
|
resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
|
||||||
|
@ -10287,11 +10267,6 @@ queue-microtask@^1.2.2:
|
||||||
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
|
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
|
||||||
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
|
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
|
||||||
|
|
||||||
quick-format-unescaped@^4.0.3:
|
|
||||||
version "4.0.4"
|
|
||||||
resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz#93ef6dd8d3453cbc7970dd614fad4c5954d6b5a7"
|
|
||||||
integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==
|
|
||||||
|
|
||||||
randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0:
|
randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0:
|
||||||
version "2.1.0"
|
version "2.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
|
resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
|
||||||
|
@ -10680,11 +10655,6 @@ reusify@^1.0.4:
|
||||||
resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
|
resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
|
||||||
integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
|
integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
|
||||||
|
|
||||||
rfdc@^1.3.0:
|
|
||||||
version "1.3.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b"
|
|
||||||
integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==
|
|
||||||
|
|
||||||
rgb-regex@^1.0.1:
|
rgb-regex@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1"
|
resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1"
|
||||||
|
@ -10848,11 +10818,6 @@ schema-utils@^3.0.0:
|
||||||
ajv "^6.12.5"
|
ajv "^6.12.5"
|
||||||
ajv-keywords "^3.5.2"
|
ajv-keywords "^3.5.2"
|
||||||
|
|
||||||
secure-json-parse@^2.4.0:
|
|
||||||
version "2.4.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/secure-json-parse/-/secure-json-parse-2.4.0.tgz#5aaeaaef85c7a417f76271a4f5b0cc3315ddca85"
|
|
||||||
integrity sha512-Q5Z/97nbON5t/L/sH6mY2EacfjVGwrCcSi5D3btRO2GZ8pf1K1UN7Z9H5J57hjVU2Qzxr1xO+FmBhOvEkzCMmg==
|
|
||||||
|
|
||||||
select-hose@^2.0.0:
|
select-hose@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
|
resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
|
||||||
|
@ -11220,21 +11185,6 @@ socks@^2.3.3:
|
||||||
ip "^1.1.5"
|
ip "^1.1.5"
|
||||||
smart-buffer "^4.2.0"
|
smart-buffer "^4.2.0"
|
||||||
|
|
||||||
sonic-boom@^1.0.2:
|
|
||||||
version "1.4.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-1.4.1.tgz#d35d6a74076624f12e6f917ade7b9d75e918f53e"
|
|
||||||
integrity sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg==
|
|
||||||
dependencies:
|
|
||||||
atomic-sleep "^1.0.0"
|
|
||||||
flatstr "^1.0.12"
|
|
||||||
|
|
||||||
sonic-boom@^2.2.0:
|
|
||||||
version "2.6.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-2.6.0.tgz#8786fc78be07c18a90381acd816d1d4afe3537a2"
|
|
||||||
integrity sha512-6xYZFRmDEtxGqfOKcDQ4cPLrNa0SPEDI+wlzDAHowXE6YV42NeXqg9mP2KkiM8JVu3lHfZ2iQKYlGOz+kTpphg==
|
|
||||||
dependencies:
|
|
||||||
atomic-sleep "^1.0.0"
|
|
||||||
|
|
||||||
sort-keys-length@^1.0.0:
|
sort-keys-length@^1.0.0:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/sort-keys-length/-/sort-keys-length-1.0.1.tgz#9cb6f4f4e9e48155a6aa0671edd336ff1479a188"
|
resolved "https://registry.yarnpkg.com/sort-keys-length/-/sort-keys-length-1.0.1.tgz#9cb6f4f4e9e48155a6aa0671edd336ff1479a188"
|
||||||
|
@ -11361,11 +11311,6 @@ split2@^3.0.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
readable-stream "^3.0.0"
|
readable-stream "^3.0.0"
|
||||||
|
|
||||||
split2@^4.0.0:
|
|
||||||
version "4.1.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/split2/-/split2-4.1.0.tgz#101907a24370f85bb782f08adaabe4e281ecf809"
|
|
||||||
integrity sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==
|
|
||||||
|
|
||||||
split@0.3:
|
split@0.3:
|
||||||
version "0.3.3"
|
version "0.3.3"
|
||||||
resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f"
|
resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f"
|
||||||
|
@ -11624,7 +11569,7 @@ strip-indent@^2.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68"
|
resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68"
|
||||||
integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=
|
integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=
|
||||||
|
|
||||||
strip-json-comments@^3.0.1, strip-json-comments@^3.1.1:
|
strip-json-comments@^3.0.1:
|
||||||
version "3.1.1"
|
version "3.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
|
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
|
||||||
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
|
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
|
||||||
|
@ -12924,11 +12869,6 @@ word-wrap@~1.2.3:
|
||||||
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
|
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
|
||||||
integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
|
integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
|
||||||
|
|
||||||
wordwrap@~0.0.2:
|
|
||||||
version "0.0.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
|
|
||||||
integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc=
|
|
||||||
|
|
||||||
workbox-background-sync@^4.3.1:
|
workbox-background-sync@^4.3.1:
|
||||||
version "4.3.1"
|
version "4.3.1"
|
||||||
resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-4.3.1.tgz#26821b9bf16e9e37fd1d640289edddc08afd1950"
|
resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-4.3.1.tgz#26821b9bf16e9e37fd1d640289edddc08afd1950"
|
||||||
|
@ -13167,11 +13107,6 @@ xml2js@^0.4.17, xml2js@^0.4.5:
|
||||||
sax ">=0.6.0"
|
sax ">=0.6.0"
|
||||||
xmlbuilder "~11.0.0"
|
xmlbuilder "~11.0.0"
|
||||||
|
|
||||||
xml@0.0.12:
|
|
||||||
version "0.0.12"
|
|
||||||
resolved "https://registry.yarnpkg.com/xml/-/xml-0.0.12.tgz#f08b347109912be00285785f46f15ad8e50a5f67"
|
|
||||||
integrity sha1-8Is0cQmRK+AChXhfRvFa2OUKX2c=
|
|
||||||
|
|
||||||
xmlbuilder@>=11.0.1:
|
xmlbuilder@>=11.0.1:
|
||||||
version "15.1.1"
|
version "15.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5"
|
resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5"
|
||||||
|
|
Loading…
Reference in New Issue
Block a user