├── .github └── workflows │ └── release.yml ├── .gitignore ├── .gitmodules ├── .prettierrc ├── LICENSE.md ├── README.md ├── app ├── floatingWindow.html ├── functions.js ├── main.js ├── package-lock.json ├── package.json ├── preload.js └── resources │ ├── logo.png │ ├── logo512.png │ ├── logo_16.png │ ├── logo_16@2x.png │ ├── logo_32.png │ ├── next-song.png │ ├── pause-song.png │ ├── play-song.png │ └── prev-song.png ├── build ├── background.png ├── disk.icns ├── icon.icns └── icon.ico ├── package-lock.json └── package.json /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Build/release 2 | 3 | on: push 4 | 5 | jobs: 6 | release: 7 | runs-on: ${{ matrix.os }} 8 | 9 | strategy: 10 | matrix: 11 | os: [macos-latest, ubuntu-latest, windows-latest] 12 | steps: 13 | - name: Check out Git repository 14 | uses: actions/checkout@v2 15 | with: 16 | submodules: true 17 | 18 | - name: Install Node.js, NPM and Yarn 19 | uses: actions/setup-node@v2 20 | with: 21 | node-version: 16 22 | 23 | - name: Build/release Electron app 24 | uses: samuelmeuli/action-electron-builder@v1 25 | with: 26 | # GitHub token, automatically provided to the action 27 | # (No need to define this secret in the repo settings) 28 | github_token: ${{ secrets.github_token }} 29 | 30 | # If the commit is tagged with a version (e.g. "v1.0.0"), 31 | # release the app after building 32 | release: ${{ startsWith(github.ref, 'refs/tags/v') }} 33 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | yarn.lock 4 | .vscode 5 | .DS_Store -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "app/listen1_chrome_extension"] 2 | path = app/listen1_chrome_extension 3 | url = https://github.com/listen1/listen1_chrome_extension.git 4 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "es5", 3 | "tabWidth": 2, 4 | "useTabs": false, 5 | "semi": true, 6 | "singleQuote": false, 7 | "arrowParens": "always", 8 | "endOfLine": "lf", 9 | "bracketSpacing": true 10 | } 11 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Listen 1 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Listen 1 音乐播放器(桌面版) 2 | 3 | Listen 1 可以搜索和播放来自多个主流音乐网站的歌曲,让你的曲库更全面。并支持收藏功能,方便的创建自己的歌单。 4 | 5 | 支持音乐平台 6 | 7 | - 网易云音乐 8 | - QQ 音乐 9 | - 酷狗音乐 10 | - 酷我音乐 11 | - bilibili 12 | - 咪咕音乐 13 | - 千千音乐 14 | 15 | [![imgur](http://i.imgur.com/Ae6ItmA.png)]() 16 | 17 | - 支持 Windows,Mac,Linux 平台 18 | 19 | # 安装方式 20 | 21 | 访问 github 主页下载安装包安装 22 | 23 | 网址:https://listen1.github.io/listen1 24 | 25 | ## 生成完整代码 26 | 27 | 项目中包含了 listen1_chrome_extension 的引用,在 checkout 后需要把引用库初始化 28 | 29 | git submodule update --init --recursive 30 | 31 | ## 运行 32 | 33 | npm run start 34 | 35 | ## 生成安装包 36 | 37 | 全平台安装包 38 | 39 | npm run dist 40 | 41 | Windows 安装包 42 | 43 | npm run dist:win32 44 | npm run dist:win64 45 | 46 | Mac 安装包 47 | 48 | npm run dist:mac 49 | 50 | Linux 安装包 51 | 52 | npm run dist:linux32 53 | npm run dist:linux64 54 | -------------------------------------------------------------------------------- /app/floatingWindow.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Listen1 7 | 69 | 70 | 71 |
74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 |
124 |
125 | Listen1 126 | 127 |
128 |
129 |
130 | 131 | 132 | 133 |
134 |
135 | 140 | 141 | 142 | 143 | 144 | 145 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 193 | 194 | 195 | 196 | 197 |
198 |
199 | 209 | 318 | 319 | 320 | -------------------------------------------------------------------------------- /app/functions.js: -------------------------------------------------------------------------------- 1 | const { existsSync } = require("fs"); 2 | const { readFile } = require("fs/promises"); 3 | const { parseFile } = require("music-metadata"); 4 | const { basename, extname, parse, format } = require("path"); 5 | const { detect } = require("chardet"); 6 | module.exports = { 7 | async readAudioTags(filePath) { 8 | const fileName = basename(filePath, extname(filePath)); 9 | try { 10 | const metaData = await parseFile(filePath); 11 | metaData.common.title ||= fileName; 12 | const lyric_url = format({ 13 | ...parse(filePath), 14 | ext: ".lrc", 15 | base: undefined, 16 | }); 17 | //if metadata doesn't include lyric, then try to read from local lyric file 18 | if (!metaData.common.lyrics && existsSync(lyric_url)) { 19 | metaData.common.lyrics = []; 20 | const fileBuffer = await readFile(lyric_url); 21 | const encoding = detect(fileBuffer); 22 | const decoder = new TextDecoder(encoding); 23 | metaData.common.lyrics[0] = decoder.decode(fileBuffer); 24 | } 25 | return metaData; 26 | } catch (error) { 27 | return { 28 | error, 29 | common: { 30 | title: fileName, 31 | album: "", 32 | artist: "", 33 | }, 34 | }; 35 | } 36 | }, 37 | }; 38 | -------------------------------------------------------------------------------- /app/main.js: -------------------------------------------------------------------------------- 1 | const electron = require("electron"); 2 | const { 3 | app, 4 | BrowserWindow, 5 | globalShortcut, 6 | ipcMain, 7 | Menu, 8 | session, 9 | screen, 10 | Tray, 11 | } = electron; 12 | const Store = require("electron-store"); 13 | const { autoUpdater } = require("electron-updater"); 14 | const remoteMain = require("@electron/remote/main"); 15 | const { join } = require("path"); 16 | 17 | const store = new Store(); 18 | const iconPath = join(__dirname, "/listen1_chrome_extension/images/logo.png"); 19 | 20 | autoUpdater.checkForUpdatesAndNotify(); 21 | 22 | let floatingWindowCssKey = undefined, 23 | appIcon = null, 24 | willQuitApp = false, 25 | transparent = false, 26 | trayIconPath; 27 | /** @type {electron.BrowserWindow} */ 28 | let mainWindow; 29 | /** @type {electron.BrowserWindow} */ 30 | let floatingWindow; 31 | /** @type {electron.Tray} */ 32 | let appTray; 33 | //platform-specific 34 | switch (process.platform) { 35 | case "darwin": 36 | trayIconPath = join(__dirname, "/resources/logo_16.png"); 37 | transparent = true; 38 | break; 39 | case "linux": 40 | trayIconPath = join(__dirname, "/resources/logo_32.png"); 41 | // fix transparent window not working in linux bug 42 | app.disableHardwareAcceleration(); 43 | break; 44 | case "win32": 45 | trayIconPath = join(__dirname, "/resources/logo_32.png"); 46 | break; 47 | default: 48 | break; 49 | } 50 | // Keep a global reference of the window object, if you don't, the window will 51 | // be closed automatically when the JavaScript object is garbage collected. 52 | /** @type {{ width: number; height: number; maximized: boolean; zoomLevel: number}} */ 53 | const windowState = store.get("windowState") || { 54 | width: 1000, 55 | height: 670, 56 | maximized: false, 57 | zoomLevel: 0, 58 | }; 59 | /** @type {electron.Config} */ 60 | let proxyConfig = store.get("proxyConfig") || { 61 | mode: "system", 62 | }; 63 | 64 | const globalShortcutMapping = { 65 | "CmdOrCtrl+Alt+Left": "left", 66 | "CmdOrCtrl+Alt+Right": "right", 67 | "CmdOrCtrl+Alt+Space": "space", 68 | MediaNextTrack: "right", 69 | MediaPreviousTrack: "left", 70 | MediaPlayPause: "space", 71 | }; 72 | /** 73 | * @param {electron.BrowserWindow} mainWindow 74 | * @param {{ title: string; artist: string; }} [track] 75 | */ 76 | function initialTray(mainWindow, track) { 77 | track ||= { 78 | title: "暂无歌曲", 79 | artist: " ", 80 | }; 81 | 82 | let nowPlayingTitle = `${track.title}`; 83 | let nowPlayingArtist = `歌手: ${track.artist}`; 84 | 85 | function toggleVisiable() { 86 | mainWindow.isVisible() ? mainWindow.hide() : mainWindow.show(); 87 | } 88 | const menuTemplate = [ 89 | { 90 | label: nowPlayingTitle, 91 | click() { 92 | mainWindow.show(); 93 | }, 94 | }, 95 | { 96 | label: nowPlayingArtist, 97 | click() { 98 | mainWindow.show(); 99 | }, 100 | }, 101 | { type: "separator" }, 102 | { 103 | label: "播放/暂停", 104 | click() { 105 | mainWindow.webContents.send("globalShortcut", "space"); 106 | }, 107 | }, 108 | { 109 | label: "上一首", 110 | click() { 111 | mainWindow.webContents.send("globalShortcut", "left"); 112 | }, 113 | }, 114 | { 115 | label: "下一首", 116 | click() { 117 | mainWindow.webContents.send("globalShortcut", "right"); 118 | }, 119 | }, 120 | { 121 | label: "显示/隐藏窗口", 122 | click() { 123 | toggleVisiable(); 124 | }, 125 | }, 126 | { 127 | label: "退出", 128 | click() { 129 | app.quit(); 130 | }, 131 | }, 132 | ]; 133 | 134 | const contextMenu = Menu.buildFromTemplate(menuTemplate); 135 | 136 | if (appTray?.destroy != undefined) { 137 | // appTray had create, just refresh tray menu here 138 | appTray?.setContextMenu(contextMenu); 139 | return; 140 | } 141 | 142 | appTray = new Tray(trayIconPath); 143 | appTray.setContextMenu(contextMenu); 144 | appTray.on("click", () => { 145 | toggleVisiable(); 146 | }); 147 | } 148 | 149 | /** 150 | * @param {string | electron.Accelerator} key 151 | * @param {string} message 152 | */ 153 | function setKeyMapping(key, message) { 154 | globalShortcut.register(key, () => { 155 | mainWindow.webContents.send("globalShortcut", message); 156 | }); 157 | } 158 | 159 | function enableGlobalShortcuts() { 160 | // initial global shortcuts 161 | for (const [key, value] of Object.entries(globalShortcutMapping)) { 162 | setKeyMapping(key, value); 163 | } 164 | } 165 | 166 | function disableGlobalShortcuts() { 167 | globalShortcut.unregisterAll(); 168 | } 169 | /** 170 | * @param {string} cssStyle 171 | */ 172 | async function updateFloatingWindow(cssStyle) { 173 | if (cssStyle === undefined) { 174 | return; 175 | } 176 | try { 177 | const newCssKey = await floatingWindow.webContents.insertCSS(cssStyle, { 178 | cssOrigin: "author", 179 | }); 180 | if (floatingWindowCssKey !== undefined) { 181 | await floatingWindow.webContents.removeInsertedCSS(floatingWindowCssKey); 182 | } 183 | floatingWindowCssKey = newCssKey; 184 | } catch (err) { 185 | console.log(err); 186 | } 187 | } 188 | /** 189 | * @param {electron.Config} params 190 | */ 191 | async function updateProxyConfig(params) { 192 | proxyConfig = params; 193 | 194 | await mainWindow.webContents.session.setProxy(params); 195 | await mainWindow.webContents.session.forceReloadProxyConfig(); 196 | } 197 | /** 198 | * @param {string} cssStyle 199 | */ 200 | function createFloatingWindow(cssStyle) { 201 | const display = screen.getPrimaryDisplay(); 202 | if (process.platform === "linux") { 203 | // fix transparent window not working in linux bug 204 | floatingWindow?.destroy(); 205 | floatingWindow = null; 206 | } 207 | if (!floatingWindow) { 208 | /** @type {Electron.Rectangle} */ 209 | const winBounds = store.get("floatingWindowBounds"); 210 | 211 | floatingWindow = new BrowserWindow({ 212 | width: 1000, 213 | minWidth: 640, 214 | maxWidth: 1920, 215 | height: 70, 216 | titleBarStyle: "hidden", 217 | transparent: true, 218 | frame: false, 219 | resizable: true, 220 | hasShadow: false, 221 | alwaysOnTop: true, 222 | webPreferences: { 223 | sandbox: true, 224 | preload: join(__dirname, "preload.js"), 225 | }, 226 | ...winBounds, 227 | }); 228 | 229 | if (winBounds === undefined) { 230 | floatingWindow.setPosition( 231 | floatingWindow.getPosition()[0], 232 | display.bounds.height - 150 233 | ); 234 | } 235 | floatingWindow.setVisibleOnAllWorkspaces(true); 236 | floatingWindow.setSkipTaskbar(true); 237 | floatingWindow.loadURL(`file://${__dirname}/floatingWindow.html`); 238 | floatingWindow.setAlwaysOnTop(true, "floating"); 239 | floatingWindow.setIgnoreMouseEvents(false); 240 | // NOTICE: setResizable should be set, otherwise mouseleave event won't trigger in windows environment 241 | floatingWindow.webContents.on("did-finish-load", async () => { 242 | await updateFloatingWindow(cssStyle); 243 | }); 244 | floatingWindow.on("closed", () => { 245 | floatingWindow = null; 246 | }); 247 | 248 | // floatingWindow.webContents.openDevTools(); 249 | } 250 | floatingWindow.showInactive(); 251 | } 252 | 253 | const previousButton = { 254 | tooltip: "Previous", 255 | icon: join(__dirname, "/resources/prev-song.png"), 256 | click() { 257 | mainWindow.webContents.send("globalShortcut", "left"); 258 | }, 259 | }; 260 | const nextButton = { 261 | tooltip: "Next", 262 | icon: join(__dirname, "/resources/next-song.png"), 263 | click() { 264 | mainWindow.webContents.send("globalShortcut", "right"); 265 | }, 266 | }; 267 | const playButton = { 268 | tooltip: "Play", 269 | icon: join(__dirname, "/resources/play-song.png"), 270 | click() { 271 | mainWindow.webContents.send("globalShortcut", "space"); 272 | }, 273 | }; 274 | const pauseButton = { 275 | tooltip: "Pause", 276 | icon: join(__dirname, "/resources/pause-song.png"), 277 | click() { 278 | mainWindow.webContents.send("globalShortcut", "space"); 279 | }, 280 | }; 281 | const setThumbarPause = () => { 282 | mainWindow?.setThumbarButtons([previousButton, playButton, nextButton]); 283 | }; 284 | const setThumbbarPlay = () => { 285 | mainWindow?.setThumbarButtons([previousButton, pauseButton, nextButton]); 286 | }; 287 | 288 | function createWindow() { 289 | const filter = { 290 | urls: [ 291 | "*://*.music.163.com/*", 292 | "*://music.163.com/*", 293 | "*://*.xiami.com/*", 294 | "*://i.y.qq.com/*", 295 | "*://c.y.qq.com/*", 296 | "*://*.kugou.com/*", 297 | "*://*.kuwo.cn/*", 298 | "*://*.bilibili.com/*", 299 | "*://*.bilivideo.com/*", 300 | "*://*.bilivideo.cn/*", 301 | "*://*.migu.cn/*", 302 | "*://*.githubusercontent.com/*", 303 | "https://listen1.github.io/listen1/callback.html?code=*", 304 | ], 305 | }; 306 | 307 | session.defaultSession.webRequest.onBeforeSendHeaders( 308 | filter, 309 | (details, callback) => { 310 | if ( 311 | details.url.startsWith( 312 | "https://listen1.github.io/listen1/callback.html?code=" 313 | ) 314 | ) { 315 | const { url } = details; 316 | const code = url.split("=")[1]; 317 | mainWindow.webContents.executeJavaScript( 318 | 'GithubClient.github.handleCallback("' + code + '");' 319 | ); 320 | } else { 321 | hack_referer_header(details); 322 | } 323 | callback({ cancel: false, requestHeaders: details.requestHeaders }); 324 | } 325 | ); 326 | // Create the browser window. 327 | mainWindow = new BrowserWindow({ 328 | width: windowState.width, 329 | height: windowState.height, 330 | minHeight: 300, 331 | minWidth: 600, 332 | webPreferences: { 333 | nodeIntegration: true, 334 | enableRemoteModule: true, 335 | contextIsolation: false, 336 | }, 337 | icon: iconPath, 338 | titleBarStyle: "hiddenInset", 339 | transparent: transparent, 340 | vibrancy: "light", 341 | frame: false, 342 | hasShadow: true, 343 | }); 344 | 345 | mainWindow.on("ready-to-show", () => { 346 | if (windowState.maximized) { 347 | mainWindow.maximize(); 348 | } 349 | mainWindow.webContents.send("setZoomLevel", windowState.zoomLevel); 350 | }); 351 | 352 | mainWindow.on("resized", () => { 353 | if (!mainWindow.isMaximized() && !mainWindow.isFullScreen()) { 354 | const [width, height] = mainWindow.getSize(); 355 | windowState.width = width; 356 | windowState.height = height; 357 | } 358 | }); 359 | mainWindow.on("close", (e) => { 360 | if (willQuitApp) { 361 | /* the user tried to quit the app */ 362 | mainWindow = null; 363 | } else { 364 | /* the user only tried to close the window */ 365 | //if (process.platform != 'linux') { 366 | e.preventDefault(); 367 | mainWindow.hide(); 368 | //mainWindow.minimize(); 369 | //} 370 | } 371 | }); 372 | 373 | // and load the index.html of the app. 374 | const ua = 375 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36"; 376 | 377 | mainWindow.webContents.session.setProxy(proxyConfig).then(() => { 378 | mainWindow.loadURL( 379 | `file://${__dirname}/listen1_chrome_extension/listen1.html`, 380 | { userAgent: ua } 381 | ); 382 | }); 383 | 384 | setThumbarPause(); 385 | // Emitted when the window is closed. 386 | mainWindow.on("closed", () => { 387 | // Dereference the window object, usually you would store windows 388 | // in an array if your app supports multi windows, this is the time 389 | // when you should delete the corresponding element. 390 | mainWindow = null; 391 | }); 392 | 393 | // define global menu content, also add support for cmd+c and cmd+v shortcuts 394 | const template = [ 395 | { 396 | label: "Application", 397 | submenu: [ 398 | { 399 | label: "Zoom Out", 400 | accelerator: "CmdOrCtrl+=", 401 | click() { 402 | if (windowState.zoomLevel <= 2.5) { 403 | windowState.zoomLevel += 0.5; 404 | mainWindow.webContents.send( 405 | "setZoomLevel", 406 | windowState.zoomLevel 407 | ); 408 | } 409 | }, 410 | }, 411 | { 412 | label: "Zoom in", 413 | accelerator: "CmdOrCtrl+-", 414 | click() { 415 | if (windowState.zoomLevel >= -1) { 416 | windowState.zoomLevel -= 0.5; 417 | mainWindow.webContents.send( 418 | "setZoomLevel", 419 | windowState.zoomLevel 420 | ); 421 | } 422 | }, 423 | }, 424 | { 425 | label: "Toggle Developer Tools", 426 | accelerator: "F12", 427 | click() { 428 | mainWindow.webContents.toggleDevTools(); 429 | }, 430 | }, 431 | { 432 | label: "About Application", 433 | selector: "orderFrontStandardAboutPanel:", 434 | }, 435 | { type: "separator" }, 436 | { 437 | label: "Close Window", 438 | accelerator: "CmdOrCtrl+W", 439 | click() { 440 | mainWindow.close(); 441 | }, 442 | }, 443 | { 444 | label: "Quit", 445 | accelerator: "Command+Q", 446 | click() { 447 | app.quit(); 448 | }, 449 | }, 450 | ], 451 | }, 452 | { 453 | label: "Edit", 454 | submenu: [ 455 | { label: "Undo", accelerator: "CmdOrCtrl+Z", selector: "undo:" }, 456 | { label: "Redo", accelerator: "Shift+CmdOrCtrl+Z", selector: "redo:" }, 457 | { type: "separator" }, 458 | { label: "Cut", accelerator: "CmdOrCtrl+X", selector: "cut:" }, 459 | { label: "Copy", accelerator: "CmdOrCtrl+C", selector: "copy:" }, 460 | { label: "Paste", accelerator: "CmdOrCtrl+V", selector: "paste:" }, 461 | { 462 | label: "Select All", 463 | accelerator: "CmdOrCtrl+A", 464 | selector: "selectAll:", 465 | }, 466 | ], 467 | }, 468 | ]; 469 | 470 | mainWindow.setMenu(null); 471 | 472 | Menu.setApplicationMenu(Menu.buildFromTemplate(template)); 473 | 474 | initialTray(mainWindow); 475 | } 476 | 477 | const MOBILE_UA = 478 | "Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30"; 479 | 480 | /** 481 | * @param {electron.OnBeforeSendHeadersListenerDetails} details 482 | */ 483 | function hack_referer_header(details) { 484 | let replace_referer = true; 485 | let replace_origin = true; 486 | let add_referer = true; 487 | let add_origin = true; 488 | let referer_value = ""; 489 | let origin_value = ""; 490 | let ua_value = ""; 491 | 492 | if (details.url.includes("://music.163.com/")) { 493 | referer_value = "http://music.163.com/"; 494 | } 495 | if (details.url.includes("://interface3.music.163.com/")) { 496 | referer_value = "http://music.163.com/"; 497 | } 498 | if (details.url.includes("://gist.githubusercontent.com/")) { 499 | referer_value = "https://gist.githubusercontent.com/"; 500 | } 501 | 502 | if (details.url.includes(".xiami.com/")) { 503 | add_origin = false; 504 | referer_value = "https://www.xiami.com/"; 505 | } 506 | if (details.url.includes("www.xiami.com/api/search/searchSongs")) { 507 | const key = /key%22:%22(.*?)%22/.exec(details.url)[1]; 508 | add_origin = false; 509 | referer_value = `https://www.xiami.com/search?key=${key}`; 510 | } 511 | if (details.url.includes("c.y.qq.com/")) { 512 | referer_value = "https://y.qq.com/"; 513 | origin_value = "https://y.qq.com"; 514 | } 515 | if ( 516 | details.url.includes("y.qq.com/") || 517 | details.url.includes("qqmusic.qq.com/") || 518 | details.url.includes("music.qq.com/") || 519 | details.url.includes("imgcache.qq.com/") 520 | ) { 521 | referer_value = "http://y.qq.com/"; 522 | } 523 | if (details.url.includes(".kugou.com/")) { 524 | referer_value = "https://www.kugou.com/"; 525 | ua_value = MOBILE_UA; 526 | } 527 | if (details.url.includes("m.kugou.com/")) { 528 | ua_value = MOBILE_UA; 529 | } 530 | if (details.url.includes(".kuwo.cn/")) { 531 | referer_value = "http://www.kuwo.cn/"; 532 | } 533 | if ( 534 | details.url.includes(".bilibili.com/") || 535 | details.url.includes(".bilivideo.com/") 536 | ) { 537 | referer_value = "https://www.bilibili.com/"; 538 | replace_origin = false; 539 | add_origin = false; 540 | } 541 | if (details.url.includes('.bilivideo.cn')) { 542 | referer_value = 'https://www.bilibili.com/'; 543 | origin_value = 'https://www.bilibili.com/'; 544 | add_referer = true; 545 | add_origin = true; 546 | } 547 | if (details.url.includes(".migu.cn")) { 548 | referer_value = "http://music.migu.cn/v3/music/player/audio?from=migu"; 549 | } 550 | if (details.url.includes("m.music.migu.cn")) { 551 | referer_value = "https://m.music.migu.cn/"; 552 | } 553 | if (origin_value == "") { 554 | origin_value = referer_value; 555 | } 556 | let isRefererSet = false; 557 | let isOriginSet = false; 558 | let isUASet = false; 559 | let headers = details.requestHeaders; 560 | 561 | for (let i = 0, l = headers.length; i < l; ++i) { 562 | if ( 563 | replace_referer && 564 | headers[i].name == "Referer" && 565 | referer_value != "" 566 | ) { 567 | headers[i].value = referer_value; 568 | isRefererSet = true; 569 | } 570 | if (replace_origin && headers[i].name == "Origin" && referer_value != "") { 571 | headers[i].value = origin_value; 572 | isOriginSet = true; 573 | } 574 | if (headers[i].name === "User-Agent" && ua_value !== "") { 575 | headers[i].value = ua_value; 576 | isUASet = true; 577 | } 578 | } 579 | 580 | if (add_referer && !isRefererSet && referer_value != "") { 581 | headers["Referer"] = referer_value; 582 | } 583 | 584 | if (add_origin && !isOriginSet && referer_value != "") { 585 | headers["Origin"] = origin_value; 586 | } 587 | 588 | if (!isUASet && ua_value !== "") { 589 | headers["User-Agent"] = ua_value; 590 | } 591 | 592 | details.requestHeaders = headers; 593 | } 594 | 595 | ipcMain.on("currentLyric", (event, arg) => { 596 | if (floatingWindow && floatingWindow !== null) { 597 | if (typeof arg === "string") { 598 | floatingWindow.webContents.send("currentLyric", arg); 599 | floatingWindow.webContents.send("currentLyricTrans", ""); 600 | } else { 601 | floatingWindow.webContents.send("currentLyric", arg.lyric); 602 | floatingWindow.webContents.send("currentLyricTrans", arg.tlyric); 603 | } 604 | } 605 | }); 606 | 607 | ipcMain.on("trackPlayingNow", (event, track) => { 608 | if (mainWindow != null) { 609 | initialTray(mainWindow, track); 610 | } 611 | }); 612 | 613 | ipcMain.on("isPlaying", (event, isPlaying) => { 614 | isPlaying ? setThumbbarPlay() : setThumbarPause(); 615 | }); 616 | 617 | ipcMain.on("control", async (event, arg, params) => { 618 | switch (arg) { 619 | case "enable_global_shortcut": 620 | enableGlobalShortcuts(); 621 | break; 622 | 623 | case "disable_global_shortcut": 624 | disableGlobalShortcuts(); 625 | break; 626 | 627 | case "enable_lyric_floating_window": 628 | createFloatingWindow(params); 629 | break; 630 | 631 | case "disable_lyric_floating_window": 632 | floatingWindow?.hide(); 633 | break; 634 | 635 | case "window_min": 636 | mainWindow.minimize(); 637 | break; 638 | 639 | case "window_max": 640 | windowState.maximized ? mainWindow.unmaximize() : mainWindow.maximize(); 641 | windowState.maximized = !windowState.maximized; 642 | break; 643 | 644 | case "window_close": 645 | mainWindow.close(); 646 | break; 647 | 648 | case "float_window_accept_mouse_event": 649 | floatingWindow.setIgnoreMouseEvents(false); 650 | break; 651 | 652 | case "float_window_ignore_mouse_event": 653 | floatingWindow.setIgnoreMouseEvents(true, { forward: true }); 654 | break; 655 | 656 | case "float_window_close": 657 | case "float_window_font_small": 658 | case "float_window_font_large": 659 | case "float_window_background_light": 660 | case "float_window_background_dark": 661 | case "float_window_font_change_color": 662 | mainWindow.webContents.send("lyricWindow", arg); 663 | break; 664 | 665 | case "update_lyric_floating_window_css": 666 | await updateFloatingWindow(params); 667 | break; 668 | 669 | case "get_proxy_config": 670 | mainWindow.webContents.send("proxyConfig", proxyConfig); 671 | break; 672 | 673 | case "update_proxy_config": 674 | await updateProxyConfig(params); 675 | break; 676 | 677 | default: 678 | break; 679 | } 680 | // event.sender.send('asynchronous-reply', 'pong') 681 | }); 682 | 683 | ipcMain.on("openUrl", (event, arg, params) => { 684 | const bWindow = new BrowserWindow({ 685 | parent: mainWindow, 686 | height: 700, 687 | resizable: true, 688 | width: 985, 689 | frame: true, 690 | fullscreen: false, 691 | maximizable: true, 692 | minimizable: true, 693 | autoHideMenuBar: true, 694 | webPreferences: { 695 | // sandbox is necessary for website js to work 696 | // thanks to https://github.com/sunzongzheng/music 697 | sandbox: true, 698 | }, 699 | }); 700 | bWindow.loadURL(arg); 701 | bWindow.setMenu(null); 702 | }); 703 | 704 | ipcMain.on("floatWindowMoving", (e, { mouseX, mouseY }) => { 705 | const { x, y } = screen.getCursorScreenPoint(); 706 | floatingWindow?.setPosition(x - mouseX, y - mouseY); 707 | }); 708 | 709 | const gotTheLock = app.requestSingleInstanceLock(); 710 | 711 | if (!gotTheLock) { 712 | app.quit(); 713 | } else { 714 | app.on("second-instance", (event, commandLine, workingDirectory) => { 715 | // Someone tried to run a second instance, we should focus our window. 716 | if (mainWindow) { 717 | if (mainWindow.isMinimized()) mainWindow.restore(); 718 | mainWindow.focus(); 719 | // When start a new instance, show the main window and active in taskbar. 720 | mainWindow.show(); 721 | mainWindow.setSkipTaskbar(false); 722 | } 723 | }); 724 | 725 | // Create myWindow, load the rest of the app, etc... 726 | app.on("ready", () => { 727 | createWindow(); 728 | remoteMain.initialize(); 729 | remoteMain.enable(mainWindow.webContents); 730 | }); 731 | } 732 | 733 | // Quit when all windows are closed. 734 | app.on("window-all-closed", () => { 735 | // On OS X it is common for applications and their menu bar 736 | // to stay active until the user quits explicitly with Cmd + Q 737 | if (process.platform !== "darwin") { 738 | app.quit(); 739 | } 740 | }); 741 | 742 | /* 'activate' is emitted when the user clicks the Dock icon (OS X) */ 743 | app.on("activate", () => mainWindow.show()); 744 | 745 | /* 'before-quit' is emitted when Electron receives 746 | * the signal to exit and wants to start closing windows */ 747 | app.on("before-quit", () => { 748 | if (mainWindow.webContents.isDevToolsOpened()) { 749 | mainWindow.webContents.closeDevTools(); 750 | } 751 | if (floatingWindow) { 752 | store.set("floatingWindowBounds", floatingWindow.getBounds()); 753 | } 754 | store.set("windowState", windowState); 755 | store.set("proxyConfig", proxyConfig); 756 | 757 | willQuitApp = true; 758 | }); 759 | 760 | app.on("will-quit", () => { 761 | disableGlobalShortcuts(); 762 | }); 763 | -------------------------------------------------------------------------------- /app/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "listen1", 3 | "version": "2.32.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "listen1", 9 | "version": "2.32.0", 10 | "license": "MIT", 11 | "dependencies": { 12 | "@electron/remote": "^2.1.2", 13 | "chardet": "^1.4.0", 14 | "electron-store": "^8.0.1", 15 | "electron-updater": "^5.0.1", 16 | "music-metadata": "^7.12.3" 17 | } 18 | }, 19 | "node_modules/@electron/get": { 20 | "version": "2.0.3", 21 | "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz", 22 | "integrity": "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==", 23 | "license": "MIT", 24 | "peer": true, 25 | "dependencies": { 26 | "debug": "^4.1.1", 27 | "env-paths": "^2.2.0", 28 | "fs-extra": "^8.1.0", 29 | "got": "^11.8.5", 30 | "progress": "^2.0.3", 31 | "semver": "^6.2.0", 32 | "sumchecker": "^3.0.1" 33 | }, 34 | "engines": { 35 | "node": ">=12" 36 | }, 37 | "optionalDependencies": { 38 | "global-agent": "^3.0.0" 39 | } 40 | }, 41 | "node_modules/@electron/get/node_modules/fs-extra": { 42 | "version": "8.1.0", 43 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", 44 | "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", 45 | "license": "MIT", 46 | "peer": true, 47 | "dependencies": { 48 | "graceful-fs": "^4.2.0", 49 | "jsonfile": "^4.0.0", 50 | "universalify": "^0.1.0" 51 | }, 52 | "engines": { 53 | "node": ">=6 <7 || >=8" 54 | } 55 | }, 56 | "node_modules/@electron/get/node_modules/jsonfile": { 57 | "version": "4.0.0", 58 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 59 | "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", 60 | "license": "MIT", 61 | "peer": true, 62 | "optionalDependencies": { 63 | "graceful-fs": "^4.1.6" 64 | } 65 | }, 66 | "node_modules/@electron/get/node_modules/semver": { 67 | "version": "6.3.1", 68 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", 69 | "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", 70 | "license": "ISC", 71 | "peer": true, 72 | "bin": { 73 | "semver": "bin/semver.js" 74 | } 75 | }, 76 | "node_modules/@electron/get/node_modules/universalify": { 77 | "version": "0.1.2", 78 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 79 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", 80 | "license": "MIT", 81 | "peer": true, 82 | "engines": { 83 | "node": ">= 4.0.0" 84 | } 85 | }, 86 | "node_modules/@electron/remote": { 87 | "version": "2.1.2", 88 | "resolved": "https://registry.npmjs.org/@electron/remote/-/remote-2.1.2.tgz", 89 | "integrity": "sha512-EPwNx+nhdrTBxyCqXt/pftoQg/ybtWDW3DUWHafejvnB1ZGGfMpv6e15D8KeempocjXe78T7WreyGGb3mlZxdA==", 90 | "license": "MIT", 91 | "peerDependencies": { 92 | "electron": ">= 13.0.0" 93 | } 94 | }, 95 | "node_modules/@sindresorhus/is": { 96 | "version": "4.6.0", 97 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", 98 | "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", 99 | "license": "MIT", 100 | "peer": true, 101 | "engines": { 102 | "node": ">=10" 103 | }, 104 | "funding": { 105 | "url": "https://github.com/sindresorhus/is?sponsor=1" 106 | } 107 | }, 108 | "node_modules/@szmarczak/http-timer": { 109 | "version": "4.0.6", 110 | "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", 111 | "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", 112 | "license": "MIT", 113 | "peer": true, 114 | "dependencies": { 115 | "defer-to-connect": "^2.0.0" 116 | }, 117 | "engines": { 118 | "node": ">=10" 119 | } 120 | }, 121 | "node_modules/@tokenizer/token": { 122 | "version": "0.3.0", 123 | "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", 124 | "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" 125 | }, 126 | "node_modules/@types/cacheable-request": { 127 | "version": "6.0.3", 128 | "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", 129 | "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", 130 | "license": "MIT", 131 | "peer": true, 132 | "dependencies": { 133 | "@types/http-cache-semantics": "*", 134 | "@types/keyv": "^3.1.4", 135 | "@types/node": "*", 136 | "@types/responselike": "^1.0.0" 137 | } 138 | }, 139 | "node_modules/@types/http-cache-semantics": { 140 | "version": "4.0.4", 141 | "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", 142 | "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", 143 | "license": "MIT", 144 | "peer": true 145 | }, 146 | "node_modules/@types/keyv": { 147 | "version": "3.1.4", 148 | "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", 149 | "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", 150 | "license": "MIT", 151 | "peer": true, 152 | "dependencies": { 153 | "@types/node": "*" 154 | } 155 | }, 156 | "node_modules/@types/node": { 157 | "version": "20.17.22", 158 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.22.tgz", 159 | "integrity": "sha512-9RV2zST+0s3EhfrMZIhrz2bhuhBwxgkbHEwP2gtGWPjBzVQjifMzJ9exw7aDZhR1wbpj8zBrfp3bo8oJcGiUUw==", 160 | "license": "MIT", 161 | "peer": true, 162 | "dependencies": { 163 | "undici-types": "~6.19.2" 164 | } 165 | }, 166 | "node_modules/@types/responselike": { 167 | "version": "1.0.3", 168 | "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", 169 | "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", 170 | "license": "MIT", 171 | "peer": true, 172 | "dependencies": { 173 | "@types/node": "*" 174 | } 175 | }, 176 | "node_modules/@types/semver": { 177 | "version": "7.3.8", 178 | "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.8.tgz", 179 | "integrity": "sha512-D/2EJvAlCEtYFEYmmlGwbGXuK886HzyCc3nZX/tkFTQdEU8jZDAgiv08P162yB17y4ZXZoq7yFAnW4GDBb9Now==" 180 | }, 181 | "node_modules/@types/yauzl": { 182 | "version": "2.10.3", 183 | "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", 184 | "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", 185 | "license": "MIT", 186 | "optional": true, 187 | "peer": true, 188 | "dependencies": { 189 | "@types/node": "*" 190 | } 191 | }, 192 | "node_modules/ajv": { 193 | "version": "8.6.3", 194 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", 195 | "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", 196 | "dependencies": { 197 | "fast-deep-equal": "^3.1.1", 198 | "json-schema-traverse": "^1.0.0", 199 | "require-from-string": "^2.0.2", 200 | "uri-js": "^4.2.2" 201 | }, 202 | "funding": { 203 | "type": "github", 204 | "url": "https://github.com/sponsors/epoberezkin" 205 | } 206 | }, 207 | "node_modules/ajv-formats": { 208 | "version": "2.1.1", 209 | "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", 210 | "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", 211 | "dependencies": { 212 | "ajv": "^8.0.0" 213 | }, 214 | "peerDependencies": { 215 | "ajv": "^8.0.0" 216 | }, 217 | "peerDependenciesMeta": { 218 | "ajv": { 219 | "optional": true 220 | } 221 | } 222 | }, 223 | "node_modules/argparse": { 224 | "version": "2.0.1", 225 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 226 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" 227 | }, 228 | "node_modules/atomically": { 229 | "version": "1.7.0", 230 | "resolved": "https://registry.npmjs.org/atomically/-/atomically-1.7.0.tgz", 231 | "integrity": "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==", 232 | "engines": { 233 | "node": ">=10.12.0" 234 | } 235 | }, 236 | "node_modules/boolean": { 237 | "version": "3.2.0", 238 | "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", 239 | "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", 240 | "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", 241 | "license": "MIT", 242 | "optional": true, 243 | "peer": true 244 | }, 245 | "node_modules/buffer-crc32": { 246 | "version": "0.2.13", 247 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", 248 | "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", 249 | "license": "MIT", 250 | "peer": true, 251 | "engines": { 252 | "node": "*" 253 | } 254 | }, 255 | "node_modules/builder-util-runtime": { 256 | "version": "9.0.0", 257 | "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.0.0.tgz", 258 | "integrity": "sha512-SkpEtSmTkREDHRJnxKEv43aAYp8sYWY8fxYBhGLBLOBIRXeaIp6Kv3lBgSD7uR8jQtC7CA659sqJrpSV6zNvSA==", 259 | "dependencies": { 260 | "debug": "^4.3.2", 261 | "sax": "^1.2.4" 262 | }, 263 | "engines": { 264 | "node": ">=12.0.0" 265 | } 266 | }, 267 | "node_modules/cacheable-lookup": { 268 | "version": "5.0.4", 269 | "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", 270 | "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", 271 | "license": "MIT", 272 | "peer": true, 273 | "engines": { 274 | "node": ">=10.6.0" 275 | } 276 | }, 277 | "node_modules/cacheable-request": { 278 | "version": "7.0.4", 279 | "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", 280 | "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", 281 | "license": "MIT", 282 | "peer": true, 283 | "dependencies": { 284 | "clone-response": "^1.0.2", 285 | "get-stream": "^5.1.0", 286 | "http-cache-semantics": "^4.0.0", 287 | "keyv": "^4.0.0", 288 | "lowercase-keys": "^2.0.0", 289 | "normalize-url": "^6.0.1", 290 | "responselike": "^2.0.0" 291 | }, 292 | "engines": { 293 | "node": ">=8" 294 | } 295 | }, 296 | "node_modules/chardet": { 297 | "version": "1.4.0", 298 | "resolved": "https://registry.npmjs.org/chardet/-/chardet-1.4.0.tgz", 299 | "integrity": "sha512-NpwMDdSIprbYx1CLnfbxEIarI0Z+s9MssEgggMNheGM+WD68yOhV7IEA/3r6tr0yTRgQD0HuZJDw32s99i6L+A==" 300 | }, 301 | "node_modules/clone-response": { 302 | "version": "1.0.3", 303 | "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", 304 | "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", 305 | "license": "MIT", 306 | "peer": true, 307 | "dependencies": { 308 | "mimic-response": "^1.0.0" 309 | }, 310 | "funding": { 311 | "url": "https://github.com/sponsors/sindresorhus" 312 | } 313 | }, 314 | "node_modules/conf": { 315 | "version": "10.0.3", 316 | "resolved": "https://registry.npmjs.org/conf/-/conf-10.0.3.tgz", 317 | "integrity": "sha512-4gtQ/Q36qVxBzMe6B7gWOAfni1VdhuHkIzxydHkclnwGmgN+eW4bb6jj73vigCfr7d3WlmqawvhZrpCUCTPYxQ==", 318 | "dependencies": { 319 | "ajv": "^8.6.3", 320 | "ajv-formats": "^2.1.1", 321 | "atomically": "^1.7.0", 322 | "debounce-fn": "^4.0.0", 323 | "dot-prop": "^6.0.1", 324 | "env-paths": "^2.2.1", 325 | "json-schema-typed": "^7.0.3", 326 | "onetime": "^5.1.2", 327 | "pkg-up": "^3.1.0", 328 | "semver": "^7.3.5" 329 | }, 330 | "engines": { 331 | "node": ">=12" 332 | }, 333 | "funding": { 334 | "url": "https://github.com/sponsors/sindresorhus" 335 | } 336 | }, 337 | "node_modules/content-type": { 338 | "version": "1.0.4", 339 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 340 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", 341 | "engines": { 342 | "node": ">= 0.6" 343 | } 344 | }, 345 | "node_modules/debounce-fn": { 346 | "version": "4.0.0", 347 | "resolved": "https://registry.npmjs.org/debounce-fn/-/debounce-fn-4.0.0.tgz", 348 | "integrity": "sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==", 349 | "dependencies": { 350 | "mimic-fn": "^3.0.0" 351 | }, 352 | "engines": { 353 | "node": ">=10" 354 | }, 355 | "funding": { 356 | "url": "https://github.com/sponsors/sindresorhus" 357 | } 358 | }, 359 | "node_modules/debug": { 360 | "version": "4.3.4", 361 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 362 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 363 | "dependencies": { 364 | "ms": "2.1.2" 365 | }, 366 | "engines": { 367 | "node": ">=6.0" 368 | }, 369 | "peerDependenciesMeta": { 370 | "supports-color": { 371 | "optional": true 372 | } 373 | } 374 | }, 375 | "node_modules/decompress-response": { 376 | "version": "6.0.0", 377 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", 378 | "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", 379 | "license": "MIT", 380 | "peer": true, 381 | "dependencies": { 382 | "mimic-response": "^3.1.0" 383 | }, 384 | "engines": { 385 | "node": ">=10" 386 | }, 387 | "funding": { 388 | "url": "https://github.com/sponsors/sindresorhus" 389 | } 390 | }, 391 | "node_modules/decompress-response/node_modules/mimic-response": { 392 | "version": "3.1.0", 393 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", 394 | "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", 395 | "license": "MIT", 396 | "peer": true, 397 | "engines": { 398 | "node": ">=10" 399 | }, 400 | "funding": { 401 | "url": "https://github.com/sponsors/sindresorhus" 402 | } 403 | }, 404 | "node_modules/defer-to-connect": { 405 | "version": "2.0.1", 406 | "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", 407 | "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", 408 | "license": "MIT", 409 | "peer": true, 410 | "engines": { 411 | "node": ">=10" 412 | } 413 | }, 414 | "node_modules/define-data-property": { 415 | "version": "1.1.4", 416 | "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", 417 | "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", 418 | "license": "MIT", 419 | "optional": true, 420 | "peer": true, 421 | "dependencies": { 422 | "es-define-property": "^1.0.0", 423 | "es-errors": "^1.3.0", 424 | "gopd": "^1.0.1" 425 | }, 426 | "engines": { 427 | "node": ">= 0.4" 428 | }, 429 | "funding": { 430 | "url": "https://github.com/sponsors/ljharb" 431 | } 432 | }, 433 | "node_modules/define-properties": { 434 | "version": "1.2.1", 435 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", 436 | "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", 437 | "license": "MIT", 438 | "optional": true, 439 | "peer": true, 440 | "dependencies": { 441 | "define-data-property": "^1.0.1", 442 | "has-property-descriptors": "^1.0.0", 443 | "object-keys": "^1.1.1" 444 | }, 445 | "engines": { 446 | "node": ">= 0.4" 447 | }, 448 | "funding": { 449 | "url": "https://github.com/sponsors/ljharb" 450 | } 451 | }, 452 | "node_modules/detect-node": { 453 | "version": "2.1.0", 454 | "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", 455 | "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", 456 | "license": "MIT", 457 | "optional": true, 458 | "peer": true 459 | }, 460 | "node_modules/dot-prop": { 461 | "version": "6.0.1", 462 | "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", 463 | "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", 464 | "dependencies": { 465 | "is-obj": "^2.0.0" 466 | }, 467 | "engines": { 468 | "node": ">=10" 469 | }, 470 | "funding": { 471 | "url": "https://github.com/sponsors/sindresorhus" 472 | } 473 | }, 474 | "node_modules/electron": { 475 | "version": "34.3.0", 476 | "resolved": "https://registry.npmjs.org/electron/-/electron-34.3.0.tgz", 477 | "integrity": "sha512-I238qRnYTAsuwJ/rS7HGaFNY4NNKAcjX8nlj7mnNmj1TK3z4HvNoD1r7Zud81DYDFx8AITuLd76EPrEnnfF9Bg==", 478 | "hasInstallScript": true, 479 | "license": "MIT", 480 | "peer": true, 481 | "dependencies": { 482 | "@electron/get": "^2.0.0", 483 | "@types/node": "^20.9.0", 484 | "extract-zip": "^2.0.1" 485 | }, 486 | "bin": { 487 | "electron": "cli.js" 488 | }, 489 | "engines": { 490 | "node": ">= 12.20.55" 491 | } 492 | }, 493 | "node_modules/electron-store": { 494 | "version": "8.0.1", 495 | "resolved": "https://registry.npmjs.org/electron-store/-/electron-store-8.0.1.tgz", 496 | "integrity": "sha512-ZyLvNywiqSpbwC/pp89O/AycVWY/UJIkmtyzF2Bd0Nm/rLmcFc0NTGuLdg6+LE8mS8qsiK5JMoe4PnrecLHH5w==", 497 | "dependencies": { 498 | "conf": "^10.0.3", 499 | "type-fest": "^1.0.2" 500 | }, 501 | "funding": { 502 | "url": "https://github.com/sponsors/sindresorhus" 503 | } 504 | }, 505 | "node_modules/electron-updater": { 506 | "version": "5.0.1", 507 | "resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-5.0.1.tgz", 508 | "integrity": "sha512-dNnXPCqYmergXy3jgg4UICuD50Orug9GQe/5xfHy+BE2Fy0icB0QE+y6iQWdCDf7yeONxwMBf4HgIkGG5pIaVg==", 509 | "dependencies": { 510 | "@types/semver": "^7.3.6", 511 | "builder-util-runtime": "9.0.0", 512 | "fs-extra": "^10.0.0", 513 | "js-yaml": "^4.1.0", 514 | "lazy-val": "^1.0.5", 515 | "lodash.escaperegexp": "^4.1.2", 516 | "lodash.isequal": "^4.5.0", 517 | "semver": "^7.3.5" 518 | } 519 | }, 520 | "node_modules/end-of-stream": { 521 | "version": "1.4.4", 522 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 523 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 524 | "license": "MIT", 525 | "peer": true, 526 | "dependencies": { 527 | "once": "^1.4.0" 528 | } 529 | }, 530 | "node_modules/env-paths": { 531 | "version": "2.2.1", 532 | "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", 533 | "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", 534 | "engines": { 535 | "node": ">=6" 536 | } 537 | }, 538 | "node_modules/es-define-property": { 539 | "version": "1.0.1", 540 | "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", 541 | "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", 542 | "license": "MIT", 543 | "optional": true, 544 | "peer": true, 545 | "engines": { 546 | "node": ">= 0.4" 547 | } 548 | }, 549 | "node_modules/es-errors": { 550 | "version": "1.3.0", 551 | "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", 552 | "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", 553 | "license": "MIT", 554 | "optional": true, 555 | "peer": true, 556 | "engines": { 557 | "node": ">= 0.4" 558 | } 559 | }, 560 | "node_modules/es6-error": { 561 | "version": "4.1.1", 562 | "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", 563 | "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", 564 | "license": "MIT", 565 | "optional": true, 566 | "peer": true 567 | }, 568 | "node_modules/escape-string-regexp": { 569 | "version": "4.0.0", 570 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 571 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 572 | "license": "MIT", 573 | "optional": true, 574 | "peer": true, 575 | "engines": { 576 | "node": ">=10" 577 | }, 578 | "funding": { 579 | "url": "https://github.com/sponsors/sindresorhus" 580 | } 581 | }, 582 | "node_modules/extract-zip": { 583 | "version": "2.0.1", 584 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", 585 | "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", 586 | "license": "BSD-2-Clause", 587 | "peer": true, 588 | "dependencies": { 589 | "debug": "^4.1.1", 590 | "get-stream": "^5.1.0", 591 | "yauzl": "^2.10.0" 592 | }, 593 | "bin": { 594 | "extract-zip": "cli.js" 595 | }, 596 | "engines": { 597 | "node": ">= 10.17.0" 598 | }, 599 | "optionalDependencies": { 600 | "@types/yauzl": "^2.9.1" 601 | } 602 | }, 603 | "node_modules/fast-deep-equal": { 604 | "version": "3.1.3", 605 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 606 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 607 | }, 608 | "node_modules/fd-slicer": { 609 | "version": "1.1.0", 610 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", 611 | "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", 612 | "license": "MIT", 613 | "peer": true, 614 | "dependencies": { 615 | "pend": "~1.2.0" 616 | } 617 | }, 618 | "node_modules/file-type": { 619 | "version": "16.5.3", 620 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.3.tgz", 621 | "integrity": "sha512-uVsl7iFhHSOY4bEONLlTK47iAHtNsFHWP5YE4xJfZ4rnX7S1Q3wce09XgqSC7E/xh8Ncv/be1lNoyprlUH/x6A==", 622 | "dependencies": { 623 | "readable-web-to-node-stream": "^3.0.0", 624 | "strtok3": "^6.2.4", 625 | "token-types": "^4.1.1" 626 | }, 627 | "engines": { 628 | "node": ">=10" 629 | }, 630 | "funding": { 631 | "url": "https://github.com/sindresorhus/file-type?sponsor=1" 632 | } 633 | }, 634 | "node_modules/find-up": { 635 | "version": "3.0.0", 636 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", 637 | "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", 638 | "dependencies": { 639 | "locate-path": "^3.0.0" 640 | }, 641 | "engines": { 642 | "node": ">=6" 643 | } 644 | }, 645 | "node_modules/fs-extra": { 646 | "version": "10.0.0", 647 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", 648 | "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", 649 | "dependencies": { 650 | "graceful-fs": "^4.2.0", 651 | "jsonfile": "^6.0.1", 652 | "universalify": "^2.0.0" 653 | }, 654 | "engines": { 655 | "node": ">=12" 656 | } 657 | }, 658 | "node_modules/get-stream": { 659 | "version": "5.2.0", 660 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 661 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 662 | "license": "MIT", 663 | "peer": true, 664 | "dependencies": { 665 | "pump": "^3.0.0" 666 | }, 667 | "engines": { 668 | "node": ">=8" 669 | }, 670 | "funding": { 671 | "url": "https://github.com/sponsors/sindresorhus" 672 | } 673 | }, 674 | "node_modules/global-agent": { 675 | "version": "3.0.0", 676 | "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", 677 | "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", 678 | "license": "BSD-3-Clause", 679 | "optional": true, 680 | "peer": true, 681 | "dependencies": { 682 | "boolean": "^3.0.1", 683 | "es6-error": "^4.1.1", 684 | "matcher": "^3.0.0", 685 | "roarr": "^2.15.3", 686 | "semver": "^7.3.2", 687 | "serialize-error": "^7.0.1" 688 | }, 689 | "engines": { 690 | "node": ">=10.0" 691 | } 692 | }, 693 | "node_modules/globalthis": { 694 | "version": "1.0.4", 695 | "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", 696 | "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", 697 | "license": "MIT", 698 | "optional": true, 699 | "peer": true, 700 | "dependencies": { 701 | "define-properties": "^1.2.1", 702 | "gopd": "^1.0.1" 703 | }, 704 | "engines": { 705 | "node": ">= 0.4" 706 | }, 707 | "funding": { 708 | "url": "https://github.com/sponsors/ljharb" 709 | } 710 | }, 711 | "node_modules/gopd": { 712 | "version": "1.2.0", 713 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", 714 | "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", 715 | "license": "MIT", 716 | "optional": true, 717 | "peer": true, 718 | "engines": { 719 | "node": ">= 0.4" 720 | }, 721 | "funding": { 722 | "url": "https://github.com/sponsors/ljharb" 723 | } 724 | }, 725 | "node_modules/got": { 726 | "version": "11.8.6", 727 | "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", 728 | "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", 729 | "license": "MIT", 730 | "peer": true, 731 | "dependencies": { 732 | "@sindresorhus/is": "^4.0.0", 733 | "@szmarczak/http-timer": "^4.0.5", 734 | "@types/cacheable-request": "^6.0.1", 735 | "@types/responselike": "^1.0.0", 736 | "cacheable-lookup": "^5.0.3", 737 | "cacheable-request": "^7.0.2", 738 | "decompress-response": "^6.0.0", 739 | "http2-wrapper": "^1.0.0-beta.5.2", 740 | "lowercase-keys": "^2.0.0", 741 | "p-cancelable": "^2.0.0", 742 | "responselike": "^2.0.0" 743 | }, 744 | "engines": { 745 | "node": ">=10.19.0" 746 | }, 747 | "funding": { 748 | "url": "https://github.com/sindresorhus/got?sponsor=1" 749 | } 750 | }, 751 | "node_modules/graceful-fs": { 752 | "version": "4.2.8", 753 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", 754 | "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" 755 | }, 756 | "node_modules/has-property-descriptors": { 757 | "version": "1.0.2", 758 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", 759 | "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", 760 | "license": "MIT", 761 | "optional": true, 762 | "peer": true, 763 | "dependencies": { 764 | "es-define-property": "^1.0.0" 765 | }, 766 | "funding": { 767 | "url": "https://github.com/sponsors/ljharb" 768 | } 769 | }, 770 | "node_modules/http-cache-semantics": { 771 | "version": "4.1.1", 772 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", 773 | "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", 774 | "license": "BSD-2-Clause", 775 | "peer": true 776 | }, 777 | "node_modules/http2-wrapper": { 778 | "version": "1.0.3", 779 | "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", 780 | "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", 781 | "license": "MIT", 782 | "peer": true, 783 | "dependencies": { 784 | "quick-lru": "^5.1.1", 785 | "resolve-alpn": "^1.0.0" 786 | }, 787 | "engines": { 788 | "node": ">=10.19.0" 789 | } 790 | }, 791 | "node_modules/ieee754": { 792 | "version": "1.2.1", 793 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 794 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 795 | "funding": [ 796 | { 797 | "type": "github", 798 | "url": "https://github.com/sponsors/feross" 799 | }, 800 | { 801 | "type": "patreon", 802 | "url": "https://www.patreon.com/feross" 803 | }, 804 | { 805 | "type": "consulting", 806 | "url": "https://feross.org/support" 807 | } 808 | ] 809 | }, 810 | "node_modules/inherits": { 811 | "version": "2.0.4", 812 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 813 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 814 | }, 815 | "node_modules/is-obj": { 816 | "version": "2.0.0", 817 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", 818 | "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", 819 | "engines": { 820 | "node": ">=8" 821 | } 822 | }, 823 | "node_modules/js-yaml": { 824 | "version": "4.1.0", 825 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 826 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 827 | "dependencies": { 828 | "argparse": "^2.0.1" 829 | }, 830 | "bin": { 831 | "js-yaml": "bin/js-yaml.js" 832 | } 833 | }, 834 | "node_modules/json-buffer": { 835 | "version": "3.0.1", 836 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", 837 | "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", 838 | "license": "MIT", 839 | "peer": true 840 | }, 841 | "node_modules/json-schema-traverse": { 842 | "version": "1.0.0", 843 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", 844 | "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" 845 | }, 846 | "node_modules/json-schema-typed": { 847 | "version": "7.0.3", 848 | "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-7.0.3.tgz", 849 | "integrity": "sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==" 850 | }, 851 | "node_modules/json-stringify-safe": { 852 | "version": "5.0.1", 853 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 854 | "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", 855 | "license": "ISC", 856 | "optional": true, 857 | "peer": true 858 | }, 859 | "node_modules/jsonfile": { 860 | "version": "6.1.0", 861 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", 862 | "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", 863 | "dependencies": { 864 | "universalify": "^2.0.0" 865 | }, 866 | "optionalDependencies": { 867 | "graceful-fs": "^4.1.6" 868 | } 869 | }, 870 | "node_modules/keyv": { 871 | "version": "4.5.4", 872 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", 873 | "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", 874 | "license": "MIT", 875 | "peer": true, 876 | "dependencies": { 877 | "json-buffer": "3.0.1" 878 | } 879 | }, 880 | "node_modules/lazy-val": { 881 | "version": "1.0.5", 882 | "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz", 883 | "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==" 884 | }, 885 | "node_modules/locate-path": { 886 | "version": "3.0.0", 887 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", 888 | "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", 889 | "dependencies": { 890 | "p-locate": "^3.0.0", 891 | "path-exists": "^3.0.0" 892 | }, 893 | "engines": { 894 | "node": ">=6" 895 | } 896 | }, 897 | "node_modules/lodash.escaperegexp": { 898 | "version": "4.1.2", 899 | "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", 900 | "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=" 901 | }, 902 | "node_modules/lodash.isequal": { 903 | "version": "4.5.0", 904 | "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", 905 | "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" 906 | }, 907 | "node_modules/lowercase-keys": { 908 | "version": "2.0.0", 909 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", 910 | "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", 911 | "license": "MIT", 912 | "peer": true, 913 | "engines": { 914 | "node": ">=8" 915 | } 916 | }, 917 | "node_modules/lru-cache": { 918 | "version": "6.0.0", 919 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 920 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 921 | "dependencies": { 922 | "yallist": "^4.0.0" 923 | }, 924 | "engines": { 925 | "node": ">=10" 926 | } 927 | }, 928 | "node_modules/matcher": { 929 | "version": "3.0.0", 930 | "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", 931 | "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", 932 | "license": "MIT", 933 | "optional": true, 934 | "peer": true, 935 | "dependencies": { 936 | "escape-string-regexp": "^4.0.0" 937 | }, 938 | "engines": { 939 | "node": ">=10" 940 | } 941 | }, 942 | "node_modules/media-typer": { 943 | "version": "1.1.0", 944 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", 945 | "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", 946 | "engines": { 947 | "node": ">= 0.8" 948 | } 949 | }, 950 | "node_modules/mimic-fn": { 951 | "version": "3.1.0", 952 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", 953 | "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", 954 | "engines": { 955 | "node": ">=8" 956 | } 957 | }, 958 | "node_modules/mimic-response": { 959 | "version": "1.0.1", 960 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", 961 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", 962 | "license": "MIT", 963 | "peer": true, 964 | "engines": { 965 | "node": ">=4" 966 | } 967 | }, 968 | "node_modules/ms": { 969 | "version": "2.1.2", 970 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 971 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 972 | }, 973 | "node_modules/music-metadata": { 974 | "version": "7.12.3", 975 | "resolved": "https://registry.npmjs.org/music-metadata/-/music-metadata-7.12.3.tgz", 976 | "integrity": "sha512-6pZngaroNxGBf8KZjE8reGZJiS533eJq7dBFsyoiEAZIORQAxmVVx20ABh9W2tsLT+5mKYyDzcNi5GuHf3jitg==", 977 | "dependencies": { 978 | "@tokenizer/token": "^0.3.0", 979 | "content-type": "^1.0.4", 980 | "debug": "^4.3.4", 981 | "file-type": "16.5.3", 982 | "media-typer": "^1.1.0", 983 | "strtok3": "^6.3.0", 984 | "token-types": "^4.2.0" 985 | }, 986 | "engines": { 987 | "node": ">=10" 988 | }, 989 | "funding": { 990 | "type": "github", 991 | "url": "https://github.com/sponsors/Borewit" 992 | } 993 | }, 994 | "node_modules/normalize-url": { 995 | "version": "6.1.0", 996 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", 997 | "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", 998 | "license": "MIT", 999 | "peer": true, 1000 | "engines": { 1001 | "node": ">=10" 1002 | }, 1003 | "funding": { 1004 | "url": "https://github.com/sponsors/sindresorhus" 1005 | } 1006 | }, 1007 | "node_modules/object-keys": { 1008 | "version": "1.1.1", 1009 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 1010 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 1011 | "license": "MIT", 1012 | "optional": true, 1013 | "peer": true, 1014 | "engines": { 1015 | "node": ">= 0.4" 1016 | } 1017 | }, 1018 | "node_modules/once": { 1019 | "version": "1.4.0", 1020 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1021 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1022 | "license": "ISC", 1023 | "peer": true, 1024 | "dependencies": { 1025 | "wrappy": "1" 1026 | } 1027 | }, 1028 | "node_modules/onetime": { 1029 | "version": "5.1.2", 1030 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", 1031 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 1032 | "dependencies": { 1033 | "mimic-fn": "^2.1.0" 1034 | }, 1035 | "engines": { 1036 | "node": ">=6" 1037 | }, 1038 | "funding": { 1039 | "url": "https://github.com/sponsors/sindresorhus" 1040 | } 1041 | }, 1042 | "node_modules/onetime/node_modules/mimic-fn": { 1043 | "version": "2.1.0", 1044 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 1045 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 1046 | "engines": { 1047 | "node": ">=6" 1048 | } 1049 | }, 1050 | "node_modules/p-cancelable": { 1051 | "version": "2.1.1", 1052 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", 1053 | "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", 1054 | "license": "MIT", 1055 | "peer": true, 1056 | "engines": { 1057 | "node": ">=8" 1058 | } 1059 | }, 1060 | "node_modules/p-limit": { 1061 | "version": "2.3.0", 1062 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 1063 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 1064 | "dependencies": { 1065 | "p-try": "^2.0.0" 1066 | }, 1067 | "engines": { 1068 | "node": ">=6" 1069 | }, 1070 | "funding": { 1071 | "url": "https://github.com/sponsors/sindresorhus" 1072 | } 1073 | }, 1074 | "node_modules/p-locate": { 1075 | "version": "3.0.0", 1076 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", 1077 | "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", 1078 | "dependencies": { 1079 | "p-limit": "^2.0.0" 1080 | }, 1081 | "engines": { 1082 | "node": ">=6" 1083 | } 1084 | }, 1085 | "node_modules/p-try": { 1086 | "version": "2.2.0", 1087 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 1088 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 1089 | "engines": { 1090 | "node": ">=6" 1091 | } 1092 | }, 1093 | "node_modules/path-exists": { 1094 | "version": "3.0.0", 1095 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 1096 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", 1097 | "engines": { 1098 | "node": ">=4" 1099 | } 1100 | }, 1101 | "node_modules/peek-readable": { 1102 | "version": "4.1.0", 1103 | "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz", 1104 | "integrity": "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==", 1105 | "engines": { 1106 | "node": ">=8" 1107 | }, 1108 | "funding": { 1109 | "type": "github", 1110 | "url": "https://github.com/sponsors/Borewit" 1111 | } 1112 | }, 1113 | "node_modules/pend": { 1114 | "version": "1.2.0", 1115 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 1116 | "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", 1117 | "license": "MIT", 1118 | "peer": true 1119 | }, 1120 | "node_modules/pkg-up": { 1121 | "version": "3.1.0", 1122 | "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", 1123 | "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", 1124 | "dependencies": { 1125 | "find-up": "^3.0.0" 1126 | }, 1127 | "engines": { 1128 | "node": ">=8" 1129 | } 1130 | }, 1131 | "node_modules/progress": { 1132 | "version": "2.0.3", 1133 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 1134 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 1135 | "license": "MIT", 1136 | "peer": true, 1137 | "engines": { 1138 | "node": ">=0.4.0" 1139 | } 1140 | }, 1141 | "node_modules/pump": { 1142 | "version": "3.0.2", 1143 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", 1144 | "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", 1145 | "license": "MIT", 1146 | "peer": true, 1147 | "dependencies": { 1148 | "end-of-stream": "^1.1.0", 1149 | "once": "^1.3.1" 1150 | } 1151 | }, 1152 | "node_modules/punycode": { 1153 | "version": "2.1.1", 1154 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 1155 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 1156 | "engines": { 1157 | "node": ">=6" 1158 | } 1159 | }, 1160 | "node_modules/quick-lru": { 1161 | "version": "5.1.1", 1162 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", 1163 | "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", 1164 | "license": "MIT", 1165 | "peer": true, 1166 | "engines": { 1167 | "node": ">=10" 1168 | }, 1169 | "funding": { 1170 | "url": "https://github.com/sponsors/sindresorhus" 1171 | } 1172 | }, 1173 | "node_modules/readable-stream": { 1174 | "version": "3.6.0", 1175 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 1176 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 1177 | "dependencies": { 1178 | "inherits": "^2.0.3", 1179 | "string_decoder": "^1.1.1", 1180 | "util-deprecate": "^1.0.1" 1181 | }, 1182 | "engines": { 1183 | "node": ">= 6" 1184 | } 1185 | }, 1186 | "node_modules/readable-web-to-node-stream": { 1187 | "version": "3.0.2", 1188 | "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", 1189 | "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", 1190 | "dependencies": { 1191 | "readable-stream": "^3.6.0" 1192 | }, 1193 | "engines": { 1194 | "node": ">=8" 1195 | }, 1196 | "funding": { 1197 | "type": "github", 1198 | "url": "https://github.com/sponsors/Borewit" 1199 | } 1200 | }, 1201 | "node_modules/require-from-string": { 1202 | "version": "2.0.2", 1203 | "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 1204 | "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", 1205 | "engines": { 1206 | "node": ">=0.10.0" 1207 | } 1208 | }, 1209 | "node_modules/resolve-alpn": { 1210 | "version": "1.2.1", 1211 | "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", 1212 | "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", 1213 | "license": "MIT", 1214 | "peer": true 1215 | }, 1216 | "node_modules/responselike": { 1217 | "version": "2.0.1", 1218 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", 1219 | "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", 1220 | "license": "MIT", 1221 | "peer": true, 1222 | "dependencies": { 1223 | "lowercase-keys": "^2.0.0" 1224 | }, 1225 | "funding": { 1226 | "url": "https://github.com/sponsors/sindresorhus" 1227 | } 1228 | }, 1229 | "node_modules/roarr": { 1230 | "version": "2.15.4", 1231 | "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", 1232 | "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", 1233 | "license": "BSD-3-Clause", 1234 | "optional": true, 1235 | "peer": true, 1236 | "dependencies": { 1237 | "boolean": "^3.0.1", 1238 | "detect-node": "^2.0.4", 1239 | "globalthis": "^1.0.1", 1240 | "json-stringify-safe": "^5.0.1", 1241 | "semver-compare": "^1.0.0", 1242 | "sprintf-js": "^1.1.2" 1243 | }, 1244 | "engines": { 1245 | "node": ">=8.0" 1246 | } 1247 | }, 1248 | "node_modules/safe-buffer": { 1249 | "version": "5.2.1", 1250 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1251 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 1252 | "funding": [ 1253 | { 1254 | "type": "github", 1255 | "url": "https://github.com/sponsors/feross" 1256 | }, 1257 | { 1258 | "type": "patreon", 1259 | "url": "https://www.patreon.com/feross" 1260 | }, 1261 | { 1262 | "type": "consulting", 1263 | "url": "https://feross.org/support" 1264 | } 1265 | ] 1266 | }, 1267 | "node_modules/sax": { 1268 | "version": "1.2.4", 1269 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", 1270 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" 1271 | }, 1272 | "node_modules/semver": { 1273 | "version": "7.3.5", 1274 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", 1275 | "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", 1276 | "dependencies": { 1277 | "lru-cache": "^6.0.0" 1278 | }, 1279 | "bin": { 1280 | "semver": "bin/semver.js" 1281 | }, 1282 | "engines": { 1283 | "node": ">=10" 1284 | } 1285 | }, 1286 | "node_modules/semver-compare": { 1287 | "version": "1.0.0", 1288 | "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", 1289 | "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", 1290 | "license": "MIT", 1291 | "optional": true, 1292 | "peer": true 1293 | }, 1294 | "node_modules/serialize-error": { 1295 | "version": "7.0.1", 1296 | "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", 1297 | "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", 1298 | "license": "MIT", 1299 | "optional": true, 1300 | "peer": true, 1301 | "dependencies": { 1302 | "type-fest": "^0.13.1" 1303 | }, 1304 | "engines": { 1305 | "node": ">=10" 1306 | }, 1307 | "funding": { 1308 | "url": "https://github.com/sponsors/sindresorhus" 1309 | } 1310 | }, 1311 | "node_modules/serialize-error/node_modules/type-fest": { 1312 | "version": "0.13.1", 1313 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", 1314 | "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", 1315 | "license": "(MIT OR CC0-1.0)", 1316 | "optional": true, 1317 | "peer": true, 1318 | "engines": { 1319 | "node": ">=10" 1320 | }, 1321 | "funding": { 1322 | "url": "https://github.com/sponsors/sindresorhus" 1323 | } 1324 | }, 1325 | "node_modules/sprintf-js": { 1326 | "version": "1.1.3", 1327 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", 1328 | "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", 1329 | "license": "BSD-3-Clause", 1330 | "optional": true, 1331 | "peer": true 1332 | }, 1333 | "node_modules/string_decoder": { 1334 | "version": "1.3.0", 1335 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 1336 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 1337 | "dependencies": { 1338 | "safe-buffer": "~5.2.0" 1339 | } 1340 | }, 1341 | "node_modules/strtok3": { 1342 | "version": "6.3.0", 1343 | "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz", 1344 | "integrity": "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==", 1345 | "dependencies": { 1346 | "@tokenizer/token": "^0.3.0", 1347 | "peek-readable": "^4.1.0" 1348 | }, 1349 | "engines": { 1350 | "node": ">=10" 1351 | }, 1352 | "funding": { 1353 | "type": "github", 1354 | "url": "https://github.com/sponsors/Borewit" 1355 | } 1356 | }, 1357 | "node_modules/sumchecker": { 1358 | "version": "3.0.1", 1359 | "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", 1360 | "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", 1361 | "license": "Apache-2.0", 1362 | "peer": true, 1363 | "dependencies": { 1364 | "debug": "^4.1.0" 1365 | }, 1366 | "engines": { 1367 | "node": ">= 8.0" 1368 | } 1369 | }, 1370 | "node_modules/token-types": { 1371 | "version": "4.2.0", 1372 | "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.2.0.tgz", 1373 | "integrity": "sha512-P0rrp4wUpefLncNamWIef62J0v0kQR/GfDVji9WKY7GDCWy5YbVSrKUTam07iWPZQGy0zWNOfstYTykMmPNR7w==", 1374 | "dependencies": { 1375 | "@tokenizer/token": "^0.3.0", 1376 | "ieee754": "^1.2.1" 1377 | }, 1378 | "engines": { 1379 | "node": ">=10" 1380 | }, 1381 | "funding": { 1382 | "type": "github", 1383 | "url": "https://github.com/sponsors/Borewit" 1384 | } 1385 | }, 1386 | "node_modules/type-fest": { 1387 | "version": "1.4.0", 1388 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", 1389 | "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", 1390 | "engines": { 1391 | "node": ">=10" 1392 | }, 1393 | "funding": { 1394 | "url": "https://github.com/sponsors/sindresorhus" 1395 | } 1396 | }, 1397 | "node_modules/undici-types": { 1398 | "version": "6.19.8", 1399 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", 1400 | "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", 1401 | "license": "MIT", 1402 | "peer": true 1403 | }, 1404 | "node_modules/universalify": { 1405 | "version": "2.0.0", 1406 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", 1407 | "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", 1408 | "engines": { 1409 | "node": ">= 10.0.0" 1410 | } 1411 | }, 1412 | "node_modules/uri-js": { 1413 | "version": "4.4.1", 1414 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 1415 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 1416 | "dependencies": { 1417 | "punycode": "^2.1.0" 1418 | } 1419 | }, 1420 | "node_modules/util-deprecate": { 1421 | "version": "1.0.2", 1422 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1423 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 1424 | }, 1425 | "node_modules/wrappy": { 1426 | "version": "1.0.2", 1427 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1428 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 1429 | "license": "ISC", 1430 | "peer": true 1431 | }, 1432 | "node_modules/yallist": { 1433 | "version": "4.0.0", 1434 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 1435 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" 1436 | }, 1437 | "node_modules/yauzl": { 1438 | "version": "2.10.0", 1439 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", 1440 | "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", 1441 | "license": "MIT", 1442 | "peer": true, 1443 | "dependencies": { 1444 | "buffer-crc32": "~0.2.3", 1445 | "fd-slicer": "~1.1.0" 1446 | } 1447 | } 1448 | }, 1449 | "dependencies": { 1450 | "@electron/get": { 1451 | "version": "2.0.3", 1452 | "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz", 1453 | "integrity": "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==", 1454 | "peer": true, 1455 | "requires": { 1456 | "debug": "^4.1.1", 1457 | "env-paths": "^2.2.0", 1458 | "fs-extra": "^8.1.0", 1459 | "global-agent": "^3.0.0", 1460 | "got": "^11.8.5", 1461 | "progress": "^2.0.3", 1462 | "semver": "^6.2.0", 1463 | "sumchecker": "^3.0.1" 1464 | }, 1465 | "dependencies": { 1466 | "fs-extra": { 1467 | "version": "8.1.0", 1468 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", 1469 | "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", 1470 | "peer": true, 1471 | "requires": { 1472 | "graceful-fs": "^4.2.0", 1473 | "jsonfile": "^4.0.0", 1474 | "universalify": "^0.1.0" 1475 | } 1476 | }, 1477 | "jsonfile": { 1478 | "version": "4.0.0", 1479 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 1480 | "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", 1481 | "peer": true, 1482 | "requires": { 1483 | "graceful-fs": "^4.1.6" 1484 | } 1485 | }, 1486 | "semver": { 1487 | "version": "6.3.1", 1488 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", 1489 | "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", 1490 | "peer": true 1491 | }, 1492 | "universalify": { 1493 | "version": "0.1.2", 1494 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 1495 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", 1496 | "peer": true 1497 | } 1498 | } 1499 | }, 1500 | "@electron/remote": { 1501 | "version": "2.1.2", 1502 | "resolved": "https://registry.npmjs.org/@electron/remote/-/remote-2.1.2.tgz", 1503 | "integrity": "sha512-EPwNx+nhdrTBxyCqXt/pftoQg/ybtWDW3DUWHafejvnB1ZGGfMpv6e15D8KeempocjXe78T7WreyGGb3mlZxdA==", 1504 | "requires": {} 1505 | }, 1506 | "@sindresorhus/is": { 1507 | "version": "4.6.0", 1508 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", 1509 | "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", 1510 | "peer": true 1511 | }, 1512 | "@szmarczak/http-timer": { 1513 | "version": "4.0.6", 1514 | "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", 1515 | "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", 1516 | "peer": true, 1517 | "requires": { 1518 | "defer-to-connect": "^2.0.0" 1519 | } 1520 | }, 1521 | "@tokenizer/token": { 1522 | "version": "0.3.0", 1523 | "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", 1524 | "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" 1525 | }, 1526 | "@types/cacheable-request": { 1527 | "version": "6.0.3", 1528 | "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", 1529 | "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", 1530 | "peer": true, 1531 | "requires": { 1532 | "@types/http-cache-semantics": "*", 1533 | "@types/keyv": "^3.1.4", 1534 | "@types/node": "*", 1535 | "@types/responselike": "^1.0.0" 1536 | } 1537 | }, 1538 | "@types/http-cache-semantics": { 1539 | "version": "4.0.4", 1540 | "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", 1541 | "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", 1542 | "peer": true 1543 | }, 1544 | "@types/keyv": { 1545 | "version": "3.1.4", 1546 | "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", 1547 | "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", 1548 | "peer": true, 1549 | "requires": { 1550 | "@types/node": "*" 1551 | } 1552 | }, 1553 | "@types/node": { 1554 | "version": "20.17.22", 1555 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.22.tgz", 1556 | "integrity": "sha512-9RV2zST+0s3EhfrMZIhrz2bhuhBwxgkbHEwP2gtGWPjBzVQjifMzJ9exw7aDZhR1wbpj8zBrfp3bo8oJcGiUUw==", 1557 | "peer": true, 1558 | "requires": { 1559 | "undici-types": "~6.19.2" 1560 | } 1561 | }, 1562 | "@types/responselike": { 1563 | "version": "1.0.3", 1564 | "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", 1565 | "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", 1566 | "peer": true, 1567 | "requires": { 1568 | "@types/node": "*" 1569 | } 1570 | }, 1571 | "@types/semver": { 1572 | "version": "7.3.8", 1573 | "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.8.tgz", 1574 | "integrity": "sha512-D/2EJvAlCEtYFEYmmlGwbGXuK886HzyCc3nZX/tkFTQdEU8jZDAgiv08P162yB17y4ZXZoq7yFAnW4GDBb9Now==" 1575 | }, 1576 | "@types/yauzl": { 1577 | "version": "2.10.3", 1578 | "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", 1579 | "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", 1580 | "optional": true, 1581 | "peer": true, 1582 | "requires": { 1583 | "@types/node": "*" 1584 | } 1585 | }, 1586 | "ajv": { 1587 | "version": "8.6.3", 1588 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", 1589 | "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", 1590 | "requires": { 1591 | "fast-deep-equal": "^3.1.1", 1592 | "json-schema-traverse": "^1.0.0", 1593 | "require-from-string": "^2.0.2", 1594 | "uri-js": "^4.2.2" 1595 | } 1596 | }, 1597 | "ajv-formats": { 1598 | "version": "2.1.1", 1599 | "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", 1600 | "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", 1601 | "requires": { 1602 | "ajv": "^8.0.0" 1603 | } 1604 | }, 1605 | "argparse": { 1606 | "version": "2.0.1", 1607 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 1608 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" 1609 | }, 1610 | "atomically": { 1611 | "version": "1.7.0", 1612 | "resolved": "https://registry.npmjs.org/atomically/-/atomically-1.7.0.tgz", 1613 | "integrity": "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==" 1614 | }, 1615 | "boolean": { 1616 | "version": "3.2.0", 1617 | "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", 1618 | "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", 1619 | "optional": true, 1620 | "peer": true 1621 | }, 1622 | "buffer-crc32": { 1623 | "version": "0.2.13", 1624 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", 1625 | "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", 1626 | "peer": true 1627 | }, 1628 | "builder-util-runtime": { 1629 | "version": "9.0.0", 1630 | "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.0.0.tgz", 1631 | "integrity": "sha512-SkpEtSmTkREDHRJnxKEv43aAYp8sYWY8fxYBhGLBLOBIRXeaIp6Kv3lBgSD7uR8jQtC7CA659sqJrpSV6zNvSA==", 1632 | "requires": { 1633 | "debug": "^4.3.2", 1634 | "sax": "^1.2.4" 1635 | } 1636 | }, 1637 | "cacheable-lookup": { 1638 | "version": "5.0.4", 1639 | "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", 1640 | "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", 1641 | "peer": true 1642 | }, 1643 | "cacheable-request": { 1644 | "version": "7.0.4", 1645 | "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", 1646 | "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", 1647 | "peer": true, 1648 | "requires": { 1649 | "clone-response": "^1.0.2", 1650 | "get-stream": "^5.1.0", 1651 | "http-cache-semantics": "^4.0.0", 1652 | "keyv": "^4.0.0", 1653 | "lowercase-keys": "^2.0.0", 1654 | "normalize-url": "^6.0.1", 1655 | "responselike": "^2.0.0" 1656 | } 1657 | }, 1658 | "chardet": { 1659 | "version": "1.4.0", 1660 | "resolved": "https://registry.npmjs.org/chardet/-/chardet-1.4.0.tgz", 1661 | "integrity": "sha512-NpwMDdSIprbYx1CLnfbxEIarI0Z+s9MssEgggMNheGM+WD68yOhV7IEA/3r6tr0yTRgQD0HuZJDw32s99i6L+A==" 1662 | }, 1663 | "clone-response": { 1664 | "version": "1.0.3", 1665 | "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", 1666 | "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", 1667 | "peer": true, 1668 | "requires": { 1669 | "mimic-response": "^1.0.0" 1670 | } 1671 | }, 1672 | "conf": { 1673 | "version": "10.0.3", 1674 | "resolved": "https://registry.npmjs.org/conf/-/conf-10.0.3.tgz", 1675 | "integrity": "sha512-4gtQ/Q36qVxBzMe6B7gWOAfni1VdhuHkIzxydHkclnwGmgN+eW4bb6jj73vigCfr7d3WlmqawvhZrpCUCTPYxQ==", 1676 | "requires": { 1677 | "ajv": "^8.6.3", 1678 | "ajv-formats": "^2.1.1", 1679 | "atomically": "^1.7.0", 1680 | "debounce-fn": "^4.0.0", 1681 | "dot-prop": "^6.0.1", 1682 | "env-paths": "^2.2.1", 1683 | "json-schema-typed": "^7.0.3", 1684 | "onetime": "^5.1.2", 1685 | "pkg-up": "^3.1.0", 1686 | "semver": "^7.3.5" 1687 | } 1688 | }, 1689 | "content-type": { 1690 | "version": "1.0.4", 1691 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 1692 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 1693 | }, 1694 | "debounce-fn": { 1695 | "version": "4.0.0", 1696 | "resolved": "https://registry.npmjs.org/debounce-fn/-/debounce-fn-4.0.0.tgz", 1697 | "integrity": "sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==", 1698 | "requires": { 1699 | "mimic-fn": "^3.0.0" 1700 | } 1701 | }, 1702 | "debug": { 1703 | "version": "4.3.4", 1704 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 1705 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 1706 | "requires": { 1707 | "ms": "2.1.2" 1708 | } 1709 | }, 1710 | "decompress-response": { 1711 | "version": "6.0.0", 1712 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", 1713 | "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", 1714 | "peer": true, 1715 | "requires": { 1716 | "mimic-response": "^3.1.0" 1717 | }, 1718 | "dependencies": { 1719 | "mimic-response": { 1720 | "version": "3.1.0", 1721 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", 1722 | "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", 1723 | "peer": true 1724 | } 1725 | } 1726 | }, 1727 | "defer-to-connect": { 1728 | "version": "2.0.1", 1729 | "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", 1730 | "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", 1731 | "peer": true 1732 | }, 1733 | "define-data-property": { 1734 | "version": "1.1.4", 1735 | "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", 1736 | "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", 1737 | "optional": true, 1738 | "peer": true, 1739 | "requires": { 1740 | "es-define-property": "^1.0.0", 1741 | "es-errors": "^1.3.0", 1742 | "gopd": "^1.0.1" 1743 | } 1744 | }, 1745 | "define-properties": { 1746 | "version": "1.2.1", 1747 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", 1748 | "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", 1749 | "optional": true, 1750 | "peer": true, 1751 | "requires": { 1752 | "define-data-property": "^1.0.1", 1753 | "has-property-descriptors": "^1.0.0", 1754 | "object-keys": "^1.1.1" 1755 | } 1756 | }, 1757 | "detect-node": { 1758 | "version": "2.1.0", 1759 | "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", 1760 | "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", 1761 | "optional": true, 1762 | "peer": true 1763 | }, 1764 | "dot-prop": { 1765 | "version": "6.0.1", 1766 | "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", 1767 | "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", 1768 | "requires": { 1769 | "is-obj": "^2.0.0" 1770 | } 1771 | }, 1772 | "electron": { 1773 | "version": "34.3.0", 1774 | "resolved": "https://registry.npmjs.org/electron/-/electron-34.3.0.tgz", 1775 | "integrity": "sha512-I238qRnYTAsuwJ/rS7HGaFNY4NNKAcjX8nlj7mnNmj1TK3z4HvNoD1r7Zud81DYDFx8AITuLd76EPrEnnfF9Bg==", 1776 | "peer": true, 1777 | "requires": { 1778 | "@electron/get": "^2.0.0", 1779 | "@types/node": "^20.9.0", 1780 | "extract-zip": "^2.0.1" 1781 | } 1782 | }, 1783 | "electron-store": { 1784 | "version": "8.0.1", 1785 | "resolved": "https://registry.npmjs.org/electron-store/-/electron-store-8.0.1.tgz", 1786 | "integrity": "sha512-ZyLvNywiqSpbwC/pp89O/AycVWY/UJIkmtyzF2Bd0Nm/rLmcFc0NTGuLdg6+LE8mS8qsiK5JMoe4PnrecLHH5w==", 1787 | "requires": { 1788 | "conf": "^10.0.3", 1789 | "type-fest": "^1.0.2" 1790 | } 1791 | }, 1792 | "electron-updater": { 1793 | "version": "5.0.1", 1794 | "resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-5.0.1.tgz", 1795 | "integrity": "sha512-dNnXPCqYmergXy3jgg4UICuD50Orug9GQe/5xfHy+BE2Fy0icB0QE+y6iQWdCDf7yeONxwMBf4HgIkGG5pIaVg==", 1796 | "requires": { 1797 | "@types/semver": "^7.3.6", 1798 | "builder-util-runtime": "9.0.0", 1799 | "fs-extra": "^10.0.0", 1800 | "js-yaml": "^4.1.0", 1801 | "lazy-val": "^1.0.5", 1802 | "lodash.escaperegexp": "^4.1.2", 1803 | "lodash.isequal": "^4.5.0", 1804 | "semver": "^7.3.5" 1805 | } 1806 | }, 1807 | "end-of-stream": { 1808 | "version": "1.4.4", 1809 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 1810 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 1811 | "peer": true, 1812 | "requires": { 1813 | "once": "^1.4.0" 1814 | } 1815 | }, 1816 | "env-paths": { 1817 | "version": "2.2.1", 1818 | "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", 1819 | "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" 1820 | }, 1821 | "es-define-property": { 1822 | "version": "1.0.1", 1823 | "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", 1824 | "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", 1825 | "optional": true, 1826 | "peer": true 1827 | }, 1828 | "es-errors": { 1829 | "version": "1.3.0", 1830 | "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", 1831 | "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", 1832 | "optional": true, 1833 | "peer": true 1834 | }, 1835 | "es6-error": { 1836 | "version": "4.1.1", 1837 | "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", 1838 | "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", 1839 | "optional": true, 1840 | "peer": true 1841 | }, 1842 | "escape-string-regexp": { 1843 | "version": "4.0.0", 1844 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 1845 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 1846 | "optional": true, 1847 | "peer": true 1848 | }, 1849 | "extract-zip": { 1850 | "version": "2.0.1", 1851 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", 1852 | "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", 1853 | "peer": true, 1854 | "requires": { 1855 | "@types/yauzl": "^2.9.1", 1856 | "debug": "^4.1.1", 1857 | "get-stream": "^5.1.0", 1858 | "yauzl": "^2.10.0" 1859 | } 1860 | }, 1861 | "fast-deep-equal": { 1862 | "version": "3.1.3", 1863 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 1864 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 1865 | }, 1866 | "fd-slicer": { 1867 | "version": "1.1.0", 1868 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", 1869 | "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", 1870 | "peer": true, 1871 | "requires": { 1872 | "pend": "~1.2.0" 1873 | } 1874 | }, 1875 | "file-type": { 1876 | "version": "16.5.3", 1877 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.3.tgz", 1878 | "integrity": "sha512-uVsl7iFhHSOY4bEONLlTK47iAHtNsFHWP5YE4xJfZ4rnX7S1Q3wce09XgqSC7E/xh8Ncv/be1lNoyprlUH/x6A==", 1879 | "requires": { 1880 | "readable-web-to-node-stream": "^3.0.0", 1881 | "strtok3": "^6.2.4", 1882 | "token-types": "^4.1.1" 1883 | } 1884 | }, 1885 | "find-up": { 1886 | "version": "3.0.0", 1887 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", 1888 | "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", 1889 | "requires": { 1890 | "locate-path": "^3.0.0" 1891 | } 1892 | }, 1893 | "fs-extra": { 1894 | "version": "10.0.0", 1895 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", 1896 | "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", 1897 | "requires": { 1898 | "graceful-fs": "^4.2.0", 1899 | "jsonfile": "^6.0.1", 1900 | "universalify": "^2.0.0" 1901 | } 1902 | }, 1903 | "get-stream": { 1904 | "version": "5.2.0", 1905 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 1906 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 1907 | "peer": true, 1908 | "requires": { 1909 | "pump": "^3.0.0" 1910 | } 1911 | }, 1912 | "global-agent": { 1913 | "version": "3.0.0", 1914 | "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", 1915 | "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", 1916 | "optional": true, 1917 | "peer": true, 1918 | "requires": { 1919 | "boolean": "^3.0.1", 1920 | "es6-error": "^4.1.1", 1921 | "matcher": "^3.0.0", 1922 | "roarr": "^2.15.3", 1923 | "semver": "^7.3.2", 1924 | "serialize-error": "^7.0.1" 1925 | } 1926 | }, 1927 | "globalthis": { 1928 | "version": "1.0.4", 1929 | "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", 1930 | "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", 1931 | "optional": true, 1932 | "peer": true, 1933 | "requires": { 1934 | "define-properties": "^1.2.1", 1935 | "gopd": "^1.0.1" 1936 | } 1937 | }, 1938 | "gopd": { 1939 | "version": "1.2.0", 1940 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", 1941 | "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", 1942 | "optional": true, 1943 | "peer": true 1944 | }, 1945 | "got": { 1946 | "version": "11.8.6", 1947 | "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", 1948 | "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", 1949 | "peer": true, 1950 | "requires": { 1951 | "@sindresorhus/is": "^4.0.0", 1952 | "@szmarczak/http-timer": "^4.0.5", 1953 | "@types/cacheable-request": "^6.0.1", 1954 | "@types/responselike": "^1.0.0", 1955 | "cacheable-lookup": "^5.0.3", 1956 | "cacheable-request": "^7.0.2", 1957 | "decompress-response": "^6.0.0", 1958 | "http2-wrapper": "^1.0.0-beta.5.2", 1959 | "lowercase-keys": "^2.0.0", 1960 | "p-cancelable": "^2.0.0", 1961 | "responselike": "^2.0.0" 1962 | } 1963 | }, 1964 | "graceful-fs": { 1965 | "version": "4.2.8", 1966 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", 1967 | "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" 1968 | }, 1969 | "has-property-descriptors": { 1970 | "version": "1.0.2", 1971 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", 1972 | "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", 1973 | "optional": true, 1974 | "peer": true, 1975 | "requires": { 1976 | "es-define-property": "^1.0.0" 1977 | } 1978 | }, 1979 | "http-cache-semantics": { 1980 | "version": "4.1.1", 1981 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", 1982 | "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", 1983 | "peer": true 1984 | }, 1985 | "http2-wrapper": { 1986 | "version": "1.0.3", 1987 | "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", 1988 | "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", 1989 | "peer": true, 1990 | "requires": { 1991 | "quick-lru": "^5.1.1", 1992 | "resolve-alpn": "^1.0.0" 1993 | } 1994 | }, 1995 | "ieee754": { 1996 | "version": "1.2.1", 1997 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 1998 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" 1999 | }, 2000 | "inherits": { 2001 | "version": "2.0.4", 2002 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 2003 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 2004 | }, 2005 | "is-obj": { 2006 | "version": "2.0.0", 2007 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", 2008 | "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" 2009 | }, 2010 | "js-yaml": { 2011 | "version": "4.1.0", 2012 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 2013 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 2014 | "requires": { 2015 | "argparse": "^2.0.1" 2016 | } 2017 | }, 2018 | "json-buffer": { 2019 | "version": "3.0.1", 2020 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", 2021 | "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", 2022 | "peer": true 2023 | }, 2024 | "json-schema-traverse": { 2025 | "version": "1.0.0", 2026 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", 2027 | "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" 2028 | }, 2029 | "json-schema-typed": { 2030 | "version": "7.0.3", 2031 | "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-7.0.3.tgz", 2032 | "integrity": "sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==" 2033 | }, 2034 | "json-stringify-safe": { 2035 | "version": "5.0.1", 2036 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 2037 | "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", 2038 | "optional": true, 2039 | "peer": true 2040 | }, 2041 | "jsonfile": { 2042 | "version": "6.1.0", 2043 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", 2044 | "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", 2045 | "requires": { 2046 | "graceful-fs": "^4.1.6", 2047 | "universalify": "^2.0.0" 2048 | } 2049 | }, 2050 | "keyv": { 2051 | "version": "4.5.4", 2052 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", 2053 | "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", 2054 | "peer": true, 2055 | "requires": { 2056 | "json-buffer": "3.0.1" 2057 | } 2058 | }, 2059 | "lazy-val": { 2060 | "version": "1.0.5", 2061 | "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz", 2062 | "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==" 2063 | }, 2064 | "locate-path": { 2065 | "version": "3.0.0", 2066 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", 2067 | "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", 2068 | "requires": { 2069 | "p-locate": "^3.0.0", 2070 | "path-exists": "^3.0.0" 2071 | } 2072 | }, 2073 | "lodash.escaperegexp": { 2074 | "version": "4.1.2", 2075 | "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", 2076 | "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=" 2077 | }, 2078 | "lodash.isequal": { 2079 | "version": "4.5.0", 2080 | "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", 2081 | "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" 2082 | }, 2083 | "lowercase-keys": { 2084 | "version": "2.0.0", 2085 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", 2086 | "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", 2087 | "peer": true 2088 | }, 2089 | "lru-cache": { 2090 | "version": "6.0.0", 2091 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 2092 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 2093 | "requires": { 2094 | "yallist": "^4.0.0" 2095 | } 2096 | }, 2097 | "matcher": { 2098 | "version": "3.0.0", 2099 | "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", 2100 | "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", 2101 | "optional": true, 2102 | "peer": true, 2103 | "requires": { 2104 | "escape-string-regexp": "^4.0.0" 2105 | } 2106 | }, 2107 | "media-typer": { 2108 | "version": "1.1.0", 2109 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", 2110 | "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==" 2111 | }, 2112 | "mimic-fn": { 2113 | "version": "3.1.0", 2114 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", 2115 | "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==" 2116 | }, 2117 | "mimic-response": { 2118 | "version": "1.0.1", 2119 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", 2120 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", 2121 | "peer": true 2122 | }, 2123 | "ms": { 2124 | "version": "2.1.2", 2125 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2126 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 2127 | }, 2128 | "music-metadata": { 2129 | "version": "7.12.3", 2130 | "resolved": "https://registry.npmjs.org/music-metadata/-/music-metadata-7.12.3.tgz", 2131 | "integrity": "sha512-6pZngaroNxGBf8KZjE8reGZJiS533eJq7dBFsyoiEAZIORQAxmVVx20ABh9W2tsLT+5mKYyDzcNi5GuHf3jitg==", 2132 | "requires": { 2133 | "@tokenizer/token": "^0.3.0", 2134 | "content-type": "^1.0.4", 2135 | "debug": "^4.3.4", 2136 | "file-type": "16.5.3", 2137 | "media-typer": "^1.1.0", 2138 | "strtok3": "^6.3.0", 2139 | "token-types": "^4.2.0" 2140 | } 2141 | }, 2142 | "normalize-url": { 2143 | "version": "6.1.0", 2144 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", 2145 | "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", 2146 | "peer": true 2147 | }, 2148 | "object-keys": { 2149 | "version": "1.1.1", 2150 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 2151 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 2152 | "optional": true, 2153 | "peer": true 2154 | }, 2155 | "once": { 2156 | "version": "1.4.0", 2157 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2158 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 2159 | "peer": true, 2160 | "requires": { 2161 | "wrappy": "1" 2162 | } 2163 | }, 2164 | "onetime": { 2165 | "version": "5.1.2", 2166 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", 2167 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 2168 | "requires": { 2169 | "mimic-fn": "^2.1.0" 2170 | }, 2171 | "dependencies": { 2172 | "mimic-fn": { 2173 | "version": "2.1.0", 2174 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 2175 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" 2176 | } 2177 | } 2178 | }, 2179 | "p-cancelable": { 2180 | "version": "2.1.1", 2181 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", 2182 | "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", 2183 | "peer": true 2184 | }, 2185 | "p-limit": { 2186 | "version": "2.3.0", 2187 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 2188 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 2189 | "requires": { 2190 | "p-try": "^2.0.0" 2191 | } 2192 | }, 2193 | "p-locate": { 2194 | "version": "3.0.0", 2195 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", 2196 | "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", 2197 | "requires": { 2198 | "p-limit": "^2.0.0" 2199 | } 2200 | }, 2201 | "p-try": { 2202 | "version": "2.2.0", 2203 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 2204 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" 2205 | }, 2206 | "path-exists": { 2207 | "version": "3.0.0", 2208 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 2209 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" 2210 | }, 2211 | "peek-readable": { 2212 | "version": "4.1.0", 2213 | "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz", 2214 | "integrity": "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==" 2215 | }, 2216 | "pend": { 2217 | "version": "1.2.0", 2218 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 2219 | "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", 2220 | "peer": true 2221 | }, 2222 | "pkg-up": { 2223 | "version": "3.1.0", 2224 | "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", 2225 | "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", 2226 | "requires": { 2227 | "find-up": "^3.0.0" 2228 | } 2229 | }, 2230 | "progress": { 2231 | "version": "2.0.3", 2232 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 2233 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 2234 | "peer": true 2235 | }, 2236 | "pump": { 2237 | "version": "3.0.2", 2238 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", 2239 | "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", 2240 | "peer": true, 2241 | "requires": { 2242 | "end-of-stream": "^1.1.0", 2243 | "once": "^1.3.1" 2244 | } 2245 | }, 2246 | "punycode": { 2247 | "version": "2.1.1", 2248 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 2249 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" 2250 | }, 2251 | "quick-lru": { 2252 | "version": "5.1.1", 2253 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", 2254 | "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", 2255 | "peer": true 2256 | }, 2257 | "readable-stream": { 2258 | "version": "3.6.0", 2259 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 2260 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 2261 | "requires": { 2262 | "inherits": "^2.0.3", 2263 | "string_decoder": "^1.1.1", 2264 | "util-deprecate": "^1.0.1" 2265 | } 2266 | }, 2267 | "readable-web-to-node-stream": { 2268 | "version": "3.0.2", 2269 | "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", 2270 | "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", 2271 | "requires": { 2272 | "readable-stream": "^3.6.0" 2273 | } 2274 | }, 2275 | "require-from-string": { 2276 | "version": "2.0.2", 2277 | "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 2278 | "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" 2279 | }, 2280 | "resolve-alpn": { 2281 | "version": "1.2.1", 2282 | "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", 2283 | "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", 2284 | "peer": true 2285 | }, 2286 | "responselike": { 2287 | "version": "2.0.1", 2288 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", 2289 | "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", 2290 | "peer": true, 2291 | "requires": { 2292 | "lowercase-keys": "^2.0.0" 2293 | } 2294 | }, 2295 | "roarr": { 2296 | "version": "2.15.4", 2297 | "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", 2298 | "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", 2299 | "optional": true, 2300 | "peer": true, 2301 | "requires": { 2302 | "boolean": "^3.0.1", 2303 | "detect-node": "^2.0.4", 2304 | "globalthis": "^1.0.1", 2305 | "json-stringify-safe": "^5.0.1", 2306 | "semver-compare": "^1.0.0", 2307 | "sprintf-js": "^1.1.2" 2308 | } 2309 | }, 2310 | "safe-buffer": { 2311 | "version": "5.2.1", 2312 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 2313 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 2314 | }, 2315 | "sax": { 2316 | "version": "1.2.4", 2317 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", 2318 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" 2319 | }, 2320 | "semver": { 2321 | "version": "7.3.5", 2322 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", 2323 | "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", 2324 | "requires": { 2325 | "lru-cache": "^6.0.0" 2326 | } 2327 | }, 2328 | "semver-compare": { 2329 | "version": "1.0.0", 2330 | "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", 2331 | "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", 2332 | "optional": true, 2333 | "peer": true 2334 | }, 2335 | "serialize-error": { 2336 | "version": "7.0.1", 2337 | "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", 2338 | "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", 2339 | "optional": true, 2340 | "peer": true, 2341 | "requires": { 2342 | "type-fest": "^0.13.1" 2343 | }, 2344 | "dependencies": { 2345 | "type-fest": { 2346 | "version": "0.13.1", 2347 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", 2348 | "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", 2349 | "optional": true, 2350 | "peer": true 2351 | } 2352 | } 2353 | }, 2354 | "sprintf-js": { 2355 | "version": "1.1.3", 2356 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", 2357 | "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", 2358 | "optional": true, 2359 | "peer": true 2360 | }, 2361 | "string_decoder": { 2362 | "version": "1.3.0", 2363 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 2364 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 2365 | "requires": { 2366 | "safe-buffer": "~5.2.0" 2367 | } 2368 | }, 2369 | "strtok3": { 2370 | "version": "6.3.0", 2371 | "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz", 2372 | "integrity": "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==", 2373 | "requires": { 2374 | "@tokenizer/token": "^0.3.0", 2375 | "peek-readable": "^4.1.0" 2376 | } 2377 | }, 2378 | "sumchecker": { 2379 | "version": "3.0.1", 2380 | "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", 2381 | "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", 2382 | "peer": true, 2383 | "requires": { 2384 | "debug": "^4.1.0" 2385 | } 2386 | }, 2387 | "token-types": { 2388 | "version": "4.2.0", 2389 | "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.2.0.tgz", 2390 | "integrity": "sha512-P0rrp4wUpefLncNamWIef62J0v0kQR/GfDVji9WKY7GDCWy5YbVSrKUTam07iWPZQGy0zWNOfstYTykMmPNR7w==", 2391 | "requires": { 2392 | "@tokenizer/token": "^0.3.0", 2393 | "ieee754": "^1.2.1" 2394 | } 2395 | }, 2396 | "type-fest": { 2397 | "version": "1.4.0", 2398 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", 2399 | "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==" 2400 | }, 2401 | "undici-types": { 2402 | "version": "6.19.8", 2403 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", 2404 | "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", 2405 | "peer": true 2406 | }, 2407 | "universalify": { 2408 | "version": "2.0.0", 2409 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", 2410 | "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" 2411 | }, 2412 | "uri-js": { 2413 | "version": "4.4.1", 2414 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 2415 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 2416 | "requires": { 2417 | "punycode": "^2.1.0" 2418 | } 2419 | }, 2420 | "util-deprecate": { 2421 | "version": "1.0.2", 2422 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2423 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 2424 | }, 2425 | "wrappy": { 2426 | "version": "1.0.2", 2427 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2428 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 2429 | "peer": true 2430 | }, 2431 | "yallist": { 2432 | "version": "4.0.0", 2433 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 2434 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" 2435 | }, 2436 | "yauzl": { 2437 | "version": "2.10.0", 2438 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", 2439 | "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", 2440 | "peer": true, 2441 | "requires": { 2442 | "buffer-crc32": "~0.2.3", 2443 | "fd-slicer": "~1.1.0" 2444 | } 2445 | } 2446 | } 2447 | } 2448 | -------------------------------------------------------------------------------- /app/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "listen1", 3 | "version": "2.32.0", 4 | "description": "One for all free music in China", 5 | "main": "main.js", 6 | "scripts": { 7 | "start": "electron main.js" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git+https://github.com/listen1/listen1_desktop.git" 12 | }, 13 | "keywords": [ 14 | "Electron", 15 | "Listen 1", 16 | "music player" 17 | ], 18 | "author": "Listen 1 ", 19 | "license": "MIT", 20 | "bugs": { 21 | "url": "https://github.com/listen1/listen1_desktop/issues" 22 | }, 23 | "homepage": "https://github.com/listen1/listen1_desktop#readme", 24 | "dependencies": { 25 | "@electron/remote": "^2.1.2", 26 | "chardet": "^1.4.0", 27 | "electron-store": "^8.0.1", 28 | "electron-updater": "^5.0.1", 29 | "music-metadata": "^7.12.3" 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/preload.js: -------------------------------------------------------------------------------- 1 | const { contextBridge, ipcRenderer } = require("electron"); 2 | 3 | contextBridge.exposeInMainWorld("api", { 4 | ipcRenderer: ipcRenderer, 5 | send: (channel, data) => { 6 | ipcRenderer.send(channel, data); 7 | }, 8 | onLyric: (fn) => { 9 | // Deliberately strip event as it includes `sender` 10 | ipcRenderer.on("currentLyric", (event, ...args) => fn(...args)); 11 | }, 12 | onTranslLyric: (fn) => { 13 | // Deliberately strip event as it includes `sender` 14 | ipcRenderer.on("currentLyricTrans", (event, ...args) => fn(...args)); 15 | }, 16 | }); 17 | -------------------------------------------------------------------------------- /app/resources/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/listen1/listen1_desktop/d48d74c818acc44f84ea9be928122e1f2ca6f4dd/app/resources/logo.png -------------------------------------------------------------------------------- /app/resources/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/listen1/listen1_desktop/d48d74c818acc44f84ea9be928122e1f2ca6f4dd/app/resources/logo512.png -------------------------------------------------------------------------------- /app/resources/logo_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/listen1/listen1_desktop/d48d74c818acc44f84ea9be928122e1f2ca6f4dd/app/resources/logo_16.png -------------------------------------------------------------------------------- /app/resources/logo_16@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/listen1/listen1_desktop/d48d74c818acc44f84ea9be928122e1f2ca6f4dd/app/resources/logo_16@2x.png -------------------------------------------------------------------------------- /app/resources/logo_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/listen1/listen1_desktop/d48d74c818acc44f84ea9be928122e1f2ca6f4dd/app/resources/logo_32.png -------------------------------------------------------------------------------- /app/resources/next-song.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/listen1/listen1_desktop/d48d74c818acc44f84ea9be928122e1f2ca6f4dd/app/resources/next-song.png -------------------------------------------------------------------------------- /app/resources/pause-song.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/listen1/listen1_desktop/d48d74c818acc44f84ea9be928122e1f2ca6f4dd/app/resources/pause-song.png -------------------------------------------------------------------------------- /app/resources/play-song.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/listen1/listen1_desktop/d48d74c818acc44f84ea9be928122e1f2ca6f4dd/app/resources/play-song.png -------------------------------------------------------------------------------- /app/resources/prev-song.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/listen1/listen1_desktop/d48d74c818acc44f84ea9be928122e1f2ca6f4dd/app/resources/prev-song.png -------------------------------------------------------------------------------- /build/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/listen1/listen1_desktop/d48d74c818acc44f84ea9be928122e1f2ca6f4dd/build/background.png -------------------------------------------------------------------------------- /build/disk.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/listen1/listen1_desktop/d48d74c818acc44f84ea9be928122e1f2ca6f4dd/build/disk.icns -------------------------------------------------------------------------------- /build/icon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/listen1/listen1_desktop/d48d74c818acc44f84ea9be928122e1f2ca6f4dd/build/icon.icns -------------------------------------------------------------------------------- /build/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/listen1/listen1_desktop/d48d74c818acc44f84ea9be928122e1f2ca6f4dd/build/icon.ico -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "listen1", 3 | "version": "2.32.0", 4 | "description": "One for all free music in China", 5 | "main": "app/main.js", 6 | "scripts": { 7 | "postinstall": "electron-builder install-app-deps", 8 | "start": "electron ./app --enable-logging", 9 | "dev": "NODE_ENV='development' npm run start", 10 | "dist:mac": "CSC_IDENTITY_AUTO_DISCOVERY=false DEBUG=electron-builder electron-builder --mac", 11 | "dist": "electron-builder .", 12 | "dist:linux": "electron-builder --linux --ia32 --x64", 13 | "dist:linux32": "electron-builder --linux --ia32", 14 | "dist:linux64": "electron-builder --linux --x64", 15 | "dist:linuxArm64": "electron-builder --linux --arm64", 16 | "dist:linuxArmv7l": "electron-builder --linux --armv7l", 17 | "dist:win": "electron-builder --win" 18 | }, 19 | "repository": { 20 | "type": "git", 21 | "url": "git+https://github.com/listen1/listen1_desktop.git" 22 | }, 23 | "keywords": [ 24 | "Electron", 25 | "Listen 1" 26 | ], 27 | "author": "Listen 1 ", 28 | "license": "MIT", 29 | "bugs": { 30 | "url": "https://github.com/listen1/listen1_desktop/issues" 31 | }, 32 | "homepage": "https://github.com/listen1/listen1_desktop#readme", 33 | "build": { 34 | "appId": "com.listen1.listen1", 35 | "productName": "Listen1", 36 | "asar": true, 37 | "artifactName": "${name}_${version}_${os}_${arch}.${ext}", 38 | "dmg": { 39 | "icon": "build/disk.icns", 40 | "contents": [ 41 | { 42 | "x": 192, 43 | "y": 344 44 | }, 45 | { 46 | "x": 448, 47 | "y": 344, 48 | "type": "link", 49 | "path": "/Applications" 50 | } 51 | ] 52 | }, 53 | "mac": { 54 | "target": [ 55 | { 56 | "target": "dmg", 57 | "arch": [ 58 | "x64", 59 | "arm64", 60 | "universal" 61 | ] 62 | } 63 | ], 64 | "category": "public.app-category.music" 65 | }, 66 | "linux": { 67 | "target": [ 68 | "tar.gz", 69 | "appImage", 70 | "deb" 71 | ], 72 | "category": "Audio" 73 | }, 74 | "nsis": { 75 | "runAfterFinish": false, 76 | "deleteAppDataOnUninstall": true, 77 | "allowToChangeInstallationDirectory": true, 78 | "oneClick": false, 79 | "installerLanguages": "zh_CN", 80 | "language": 2052, 81 | "perMachine": true, 82 | "createDesktopShortcut": true 83 | }, 84 | "win": { 85 | "target": [ 86 | { 87 | "target": "nsis", 88 | "arch": [ 89 | "x64", 90 | "ia32", 91 | "arm64" 92 | ] 93 | }, 94 | { 95 | "target": "7z", 96 | "arch": [ 97 | "x64", 98 | "ia32", 99 | "arm64" 100 | ] 101 | } 102 | ], 103 | "icon": "build/icon.ico" 104 | } 105 | }, 106 | "devDependencies": { 107 | "electron": "^32.3.2", 108 | "electron-builder": "^25.1.8", 109 | "prettier": "^2.6.2" 110 | } 111 | } 112 | --------------------------------------------------------------------------------