├── .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 | []()
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 |
123 |
124 |
125 | Listen1
126 |
127 |
128 |
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 |
--------------------------------------------------------------------------------